Explorar el Código

Updated NPC_REBIRTH. Has it's own values, and no longer leeches off SL_KAIZEL.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@13272 54d463be-8e91-2dee-dedb-b68131a5f0ec
L0ne_W0lf hace 16 años
padre
commit
5f19f788b4
Se han modificado 7 ficheros con 26 adiciones y 6 borrados
  1. 2 0
      Changelog-Trunk.txt
  2. 2 0
      db/const.txt
  3. 2 0
      db/skill_cast_db.txt
  4. 1 1
      src/map/mob.c
  5. 2 2
      src/map/skill.c
  6. 13 1
      src/map/status.c
  7. 4 2
      src/map/status.h

+ 2 - 0
Changelog-Trunk.txt

@@ -3,6 +3,8 @@ Date	Added
 AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
+2008/10/09
+	* Rev. 13272 Updated NPC_REBIRTH. Has it's own values, and no longer leeches off SL_KAIZEL. [L0ne_W0lf]
 2008/10/06
 	* Rev. 13264 Damage count on rebirthed mobs is now reset. (Valaris)  [L0ne_W0lf]
 	* Rev. 13263 voided out clif_blown as per Valaris' instruction.  [L0ne_W0lf]

+ 2 - 0
db/const.txt

@@ -798,6 +798,8 @@ SC_SEVENWIND	274
 SC_DEF_RATE	275
 SC_SPREGEN	276
 SC_WALKSPEED	277
+SC_WALKSPEED	277
+SC_REBIRTH	284
 
 e_gasp	0
 e_what	1

+ 2 - 0
db/skill_cast_db.txt

@@ -336,6 +336,8 @@
 206,0,0,0,0,3000
 //-- NPC_HALLUCINATION
 207,0,0,0,30000:40000:50000:60000:70000:80000:90000:100000:110000:120000,0
+//-- NPC_REBIRTH
+208,4500:4000:3500:3000:2500:2000:1500,0,0,1800000,2000
 //==========================================
 
 

+ 1 - 1
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 )

+ 2 - 2
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:

+ 13 - 1
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 )

+ 4 - 2
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;