소스 검색

Added renewal behavior to safety wall (exclusive to remode)
- Safety Wall now possesses a lifetime equal to 3 times the health of the caster, when the wall absorbs this much damage, the wall is removed and any remaining damage is dealt to the player.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@15554 54d463be-8e91-2dee-dedb-b68131a5f0ec

shennetsind 13 년 전
부모
커밋
4e118878dd
2개의 변경된 파일22개의 추가작업 그리고 3개의 파일을 삭제
  1. 13 0
      src/map/battle.c
  2. 9 3
      src/map/skill.c

+ 13 - 0
src/map/battle.c

@@ -386,10 +386,23 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
 		{
 			struct skill_unit_group* group = skill_id2group(sc->data[SC_SAFETYWALL]->val3);
 			if (group) {
+				/**
+				 * in RE, SW possesses a lifetime equal to 3 times the caster's health
+				 **/
+			#if REMODE
+				if ( ( group->val2 - damage) > 0 ) {
+					group->val2 -= damage;
+					d->dmg_lv = ATK_BLOCK;
+					return 0;
+				} else
+					damage -= group->val2;
+				skill_delunitgroup(group);
+			#else
 				if (--group->val2<=0)
 					skill_delunitgroup(group);
 				d->dmg_lv = ATK_BLOCK;
 				return 0;
+			#endif
 			}
 			status_change_end(bl, SC_SAFETYWALL, INVALID_TIMER);
 		}

+ 9 - 3
src/map/skill.c

@@ -8850,10 +8850,16 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, short skilli
 	status = status_get_status_data(src);
 	sc = status_get_sc(src);	// for traps, firewall and fogwall - celest
 
-	switch( skillid )
-	{
+	switch( skillid ) {
 	case MG_SAFETYWALL:
-		val2=skilllv+1;
+	#if REMODE
+		/**
+		 * According to data provided in RE, SW life is equal to 3 times caster's health
+		 **/
+		val2 = status_get_max_hp(src) * 3;
+	#else
+		val2 = skilllv+1;
+	#endif
 		break;
 	case MG_FIREWALL:
 		if(sc && sc->data[SC_VIOLENTGALE])