summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db/const.txt1
-rw-r--r--src/map/pc.c2
-rw-r--r--src/map/status.c18
-rw-r--r--src/map/status.h1
4 files changed, 14 insertions, 8 deletions
diff --git a/db/const.txt b/db/const.txt
index 12b823d31..6579ec259 100644
--- a/db/const.txt
+++ b/db/const.txt
@@ -789,6 +789,7 @@ SC_SPCOST_RATE 272
SC_COMMONSC_RESIST 273
SC_SEVENWIND 274
SC_DEF_RATE 275
+SC_SPREGEN 276
e_gasp 0
e_what 1
diff --git a/src/map/pc.c b/src/map/pc.c
index 289fc57b7..9c6f9686e 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -6645,7 +6645,7 @@ int pc_checkitem(struct map_session_data *sd)
if(!sd->status.inventory[i].equip)
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;
calc_flag = 1;
continue;
diff --git a/src/map/status.c b/src/map/status.c
index 98cfef6eb..0be72cc2e 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -4970,6 +4970,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
return 0;
break;
case SC_HPREGEN:
+ case SC_SPREGEN:
case SC_STUN:
case SC_SLEEP:
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;
break;
case SC_HPREGEN:
+ case SC_SPREGEN:
if( val1 == 0 ) return 0;
// val1 = heal percent/amout
// val2 = seconds between heals
@@ -6924,15 +6926,17 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr data)
break;
case SC_HPREGEN:
+ case SC_SPREGEN:
if( sd && --(sce->val4) >= 0 )
{
- if( status->hp < status->max_hp )
- {
- // val1 < 0 = per maxhp %
- // val1 > 0 = exact amount
- int hp = (sce->val1 < 0) ? (int)(sd->status.max_hp * -1 * sce->val1 / 100.) : sce->val1 ;
- status_heal(bl, hp, 0, 2);
- }
+ // val1 < 0 = per max% | val1 > 0 = exact amount
+ int hp = 0, sp = 0;
+ if( type == SC_HPREGEN && status->hp < status->max_hp )
+ 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 )
+ 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 );
return 0;
}
diff --git a/src/map/status.h b/src/map/status.h
index 276cd1b1c..ebbb90884 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -293,6 +293,7 @@ typedef enum sc_type {
SC_COMMONSC_RESIST,
SC_SEVENWIND,
SC_DEF_RATE,
+ SC_SPREGEN,
SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
} sc_type;