summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/map')
-rw-r--r--src/map/mob.c2
-rw-r--r--src/map/skill.c4
-rw-r--r--src/map/status.c14
-rw-r--r--src/map/status.h6
4 files changed, 20 insertions, 6 deletions
diff --git a/src/map/mob.c b/src/map/mob.c
index 809ce3f77..0c6ada573 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -2313,7 +2313,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
//Emperium destroyed by script. Discard mvp character. [Skotlex]
mvp_sd = NULL;
- if( !md->sc.data[SC_KAIZEL] )
+ if( !md->sc.data[SC_REBIRTH] )
{ // Only trigger event on final kill
md->status.hp = 0; //So that npc_event invoked functions KNOW that mob is dead
if( src )
diff --git a/src/map/skill.c b/src/map/skill.c
index e4a4b1bbb..9dcdae732 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -4610,8 +4610,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
break;
case NPC_REBIRTH:
- //New rebirth System uses Kaizel [Skotlex]
- sc_start(bl,type,100,skilllv,skill_get_time(SL_KAIZEL,skilllv));
+ //Rebirth system now uses SC_REBIRTH instead of SC_KAIZEL. [L0ne_W0lf]
+ sc_start(bl,type,100,skilllv,skill_get_time(NPC_REBIRTH,skilllv));
break;
case NPC_DARKBLESSING:
diff --git a/src/map/status.c b/src/map/status.c
index 61c60d9c8..1134c83da 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -216,7 +216,7 @@ void initChangeTables(void)
add_sc( NPC_DEFENDER , SC_ARMOR );
add_sc( NPC_LICK , SC_STUN );
set_sc( NPC_HALLUCINATION , SC_HALLUCINATION , SI_HALLUCINATION , SCB_NONE );
- add_sc( NPC_REBIRTH , SC_KAIZEL );
+ add_sc( NPC_REBIRTH , SC_REBIRTH );
add_sc( RG_RAID , SC_STUN );
set_sc( RG_STRIPWEAPON , SC_STRIPWEAPON , SI_STRIPWEAPON , SCB_WATK );
set_sc( RG_STRIPSHIELD , SC_STRIPSHIELD , SI_STRIPSHIELD , SCB_DEF );
@@ -793,6 +793,15 @@ int status_damage(struct block_list *src,struct block_list *target,int hp, int s
return hp+sp;
}
+ if( !((TBL_MOB*)target)->state.rebirth && sc && sc->data[SC_REBIRTH] && target->type == BL_MOB )
+ { // Ensure the monster has not already rebirthed before doing so.
+ int time = skill_get_time2(NPC_REBIRTH,sc->data[SC_REBIRTH]->val1);
+ status_revive(target, sc->data[SC_REBIRTH]->val2, 0);
+ status_change_clear(target,0);
+ ((TBL_MOB*)target)->state.rebirth = 1;
+ return hp+sp;
+ }
+
status_change_clear(target,0);
if(flag&4) //Delete from memory. (also invokes map removal code)
@@ -6077,6 +6086,9 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_MERC_SPUP:
val2 = 5 * val1;
break;
+ case SC_REBIRTH:
+ val2 = 20*val1; //% of life to be revived with
+ break;
default:
if( calc_flag == SCB_NONE && StatusSkillChangeTable[type] == 0 && StatusIconChangeTable[type] == 0 )
diff --git a/src/map/status.h b/src/map/status.h
index f5e36ec88..b4b6dde61 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -287,7 +287,7 @@ typedef enum sc_type {
SC_INCHEALRATE,
SC_PNEUMA,
SC_AUTOTRADE,
- SC_KSPROTECTED,
+ SC_KSPROTECTED, //270
SC_ARMOR_RESIST,
SC_SPCOST_RATE,
SC_COMMONSC_RESIST,
@@ -299,11 +299,13 @@ typedef enum sc_type {
// Mercenary Only Bonus Effects
SC_MERC_FLEEUP,
SC_MERC_ATKUP,
- SC_MERC_HPUP,
+ SC_MERC_HPUP, //280
SC_MERC_SPUP,
SC_MERC_HITUP,
SC_MERC_QUICKEN,
+ SC_REBIRTH,
+
SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
} sc_type;