- Support for SP Regen status just like HP Regen (by items, by a little time). Required in some new items from Ep 12.1
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@12743 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
edcd7e6d28
commit
4ced695e7e
@ -789,6 +789,7 @@ SC_SPCOST_RATE 272
|
|||||||
SC_COMMONSC_RESIST 273
|
SC_COMMONSC_RESIST 273
|
||||||
SC_SEVENWIND 274
|
SC_SEVENWIND 274
|
||||||
SC_DEF_RATE 275
|
SC_DEF_RATE 275
|
||||||
|
SC_SPREGEN 276
|
||||||
|
|
||||||
e_gasp 0
|
e_gasp 0
|
||||||
e_what 1
|
e_what 1
|
||||||
|
@ -6645,7 +6645,7 @@ int pc_checkitem(struct map_session_data *sd)
|
|||||||
if(!sd->status.inventory[i].equip)
|
if(!sd->status.inventory[i].equip)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (sd->status.inventory[i].equip&~pc_equippoint(sd,i)) {
|
if(sd->status.inventory[i].equip&~pc_equippoint(sd,i)) {
|
||||||
sd->status.inventory[i].equip=0;
|
sd->status.inventory[i].equip=0;
|
||||||
calc_flag = 1;
|
calc_flag = 1;
|
||||||
continue;
|
continue;
|
||||||
|
@ -4970,6 +4970,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
|
|||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
case SC_HPREGEN:
|
case SC_HPREGEN:
|
||||||
|
case SC_SPREGEN:
|
||||||
case SC_STUN:
|
case SC_STUN:
|
||||||
case SC_SLEEP:
|
case SC_SLEEP:
|
||||||
case SC_POISON:
|
case SC_POISON:
|
||||||
@ -5291,6 +5292,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
|
|||||||
tick = 10000;
|
tick = 10000;
|
||||||
break;
|
break;
|
||||||
case SC_HPREGEN:
|
case SC_HPREGEN:
|
||||||
|
case SC_SPREGEN:
|
||||||
if( val1 == 0 ) return 0;
|
if( val1 == 0 ) return 0;
|
||||||
// val1 = heal percent/amout
|
// val1 = heal percent/amout
|
||||||
// val2 = seconds between heals
|
// val2 = seconds between heals
|
||||||
@ -6924,15 +6926,17 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr data)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_HPREGEN:
|
case SC_HPREGEN:
|
||||||
|
case SC_SPREGEN:
|
||||||
if( sd && --(sce->val4) >= 0 )
|
if( sd && --(sce->val4) >= 0 )
|
||||||
{
|
{
|
||||||
if( status->hp < status->max_hp )
|
// val1 < 0 = per max% | val1 > 0 = exact amount
|
||||||
{
|
int hp = 0, sp = 0;
|
||||||
// val1 < 0 = per maxhp %
|
if( type == SC_HPREGEN && status->hp < status->max_hp )
|
||||||
// val1 > 0 = exact amount
|
hp = (sce->val1 < 0) ? (int)(sd->status.max_hp * -1 * sce->val1 / 100.) : sce->val1 ;
|
||||||
int hp = (sce->val1 < 0) ? (int)(sd->status.max_hp * -1 * sce->val1 / 100.) : sce->val1 ;
|
else if( type == SC_SPREGEN && status->sp < status->max_sp )
|
||||||
status_heal(bl, hp, 0, 2);
|
sp = (sce->val1 < 0) ? (int)(sd->status.max_sp * -1 * sce->val1 / 100.) : sce->val1 ;
|
||||||
}
|
|
||||||
|
status_heal(bl, hp, sp, 2);
|
||||||
sc_timer_next((sce->val2 * 1000) + tick, status_change_timer, bl->id, data );
|
sc_timer_next((sce->val2 * 1000) + tick, status_change_timer, bl->id, data );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -293,6 +293,7 @@ typedef enum sc_type {
|
|||||||
SC_COMMONSC_RESIST,
|
SC_COMMONSC_RESIST,
|
||||||
SC_SEVENWIND,
|
SC_SEVENWIND,
|
||||||
SC_DEF_RATE,
|
SC_DEF_RATE,
|
||||||
|
SC_SPREGEN,
|
||||||
SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
|
SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
|
||||||
} sc_type;
|
} sc_type;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user