소스 검색

NPC_EVILLAND and Sanctuary updates (fixes #927)
* NPC_EVILLAND now has 3+level intervals, a target range of 7 and ignores flee,
* NPC_EVILLAND's area of effect per unit is now 11x11 on level 1-9 and 27x27 on level 10
* NPC_EVILLAND now ignores Devotion
* Sanctuary now has exactly 1+3*level heal intervals, regardless of number of players healed
* Sanctuary will end early when 3+level targets have been hit, targets currently on Sanctuary might still be hit when it expires

Playtester 9 년 전
부모
커밋
9721dc94a5
7개의 변경된 파일17개의 추가작업 그리고 19개의 파일을 삭제
  1. 2 2
      db/pre-re/skill_cast_db.txt
  2. 1 1
      db/pre-re/skill_db.txt
  3. 1 1
      db/pre-re/skill_unit_db.txt
  4. 2 2
      db/re/skill_cast_db.txt
  5. 1 1
      db/re/skill_db.txt
  6. 1 1
      db/re/skill_unit_db.txt
  7. 9 11
      src/map/skill.c

+ 2 - 2
db/pre-re/skill_cast_db.txt

@@ -131,7 +131,7 @@
 //-- PR_BENEDICTIO
 69,0,0,0,40000:80000:120000:160000:200000,0,0
 //-- PR_SANCTUARY
-70,5000,0,0,4000:7000:10000:13000:16000:19000:22000:25000:28000:31000,0,0
+70,5000,0,0,3500:6500:9500:12500:15500:18500:21500:24500:27500:30500,0,0
 //-- PR_SLOWPOISON
 71,0,0,0,10000:20000:30000:40000,0,0
 //-- PR_STRECOVERY
@@ -979,7 +979,7 @@
 //-- NPC_WIDESIGHT
 669,0,0,0,10000,0,0
 //-- NPC_EVILLAND
-670,0,0,0,30000,30000,0
+670,0,0,0,3500:4500:5500:6500:7500:8500:9500:10500:11500:12500,30000,0
 //-- NPC_MAGICMIRROR
 671,0,0,0,30000:30000:30000:30000:30000:2000:2000:2000:2000:2000,0,0
 //-- NPC_SLOWCAST

+ 1 - 1
db/pre-re/skill_db.txt

@@ -795,7 +795,7 @@
 667,0,6,4,0,0x3,2:5:8:11:14,5,1,no,0,0x2,0,none,0,0x0,	NPC_WIDECONFUSE,Wide Confusion
 668,0,6,4,0,0x3,2:5:8:11:14,5,1,no,0,0x2,0,none,0,0x0,	NPC_WIDESLEEP,Wide Sleep
 669,0,6,4,3,0x3,5,1,1,no,0,0x2,0,magic,0,0x0,	NPC_WIDESIGHT,Wide Sight
-670,9,6,2,7,0x91,0,10,1,no,0,0x2,0,magic,0,0x0,	NPC_EVILLAND,Evil Land
+670,7,6,2,7,0xD1,0,10,1,no,0,0x2,0,magic,0,0x0,	NPC_EVILLAND,Evil Land
 671,0,6,4,0,0x1,0,5,1,no,0,0x2,0,magic,0,0x0,	NPC_MAGICMIRROR,Magic Mirror
 672,0,6,4,0,0x3,2:5:8:11:14,5,1,no,0,0x2,0,none,0,0x0,	NPC_SLOWCAST,Slow Cast
 673,-9,6,1,-1,0,0,5,1,no,0,0x2,0,weapon,0,0x0,	NPC_CRITICALWOUND,Critical Wounds

+ 1 - 1
db/pre-re/skill_unit_db.txt

@@ -102,7 +102,7 @@
 527,0xbc,    , -1, 0,2000,enemy, 0x018	//NJ_TATAMIGAESHI
 535,0xbd,    , -1, 0,  20,enemy, 0x8010	//NJ_KAENSIN
 538,0xbb,    ,  1:1:1:2:2:2:3:3:3:4,0,-1,all,0x8010	//NJ_SUITON
-670,0xc7,    ,  1, 4:7:10:13:16:19:22:25:28:31,1000,all,0x008	//NPC_EVILLAND
+670,0xc7,    ,  1, 5:5:5:5:5:5:5:5:5:13,1000,all,0x008	//NPC_EVILLAND
 
 //706,0xfd,    ,  0, 0,1000,all, 0x000	//NPC_VENOMFOG
 

+ 2 - 2
db/re/skill_cast_db.txt

@@ -131,7 +131,7 @@
 //-- PR_BENEDICTIO
 69,0,0,0,40000:80000:120000:160000:200000,0,0,0
 //-- PR_SANCTUARY
-70,4000,0,0,4000:7000:10000:13000:16000:19000:22000:25000:28000:31000,0,0,1000
+70,4000,0,0,3500:6500:9500:12500:15500:18500:21500:24500:27500:30500,0,0,1000
 //-- PR_SLOWPOISON
 71,0,0,0,10000:20000:30000:40000,0,0,0
 //-- PR_STRECOVERY
@@ -993,7 +993,7 @@
 //-- NPC_WIDESIGHT
 669,0,0,0,10000,0,0,-1
 //-- NPC_EVILLAND
-670,0,0,0,30000,30000,0,-1
+670,0,0,0,3500:4500:5500:6500:7500:8500:9500:10500:11500:12500,30000,0,-1
 //-- NPC_MAGICMIRROR
 671,0,0,0,30000:30000:30000:30000:30000:2000:2000:2000:2000:2000,0,0,-1
 //-- NPC_SLOWCAST

+ 1 - 1
db/re/skill_db.txt

@@ -795,7 +795,7 @@
 667,0,6,4,0,0x3,2:5:8:11:14,5,1,no,0,0x2,0,none,0,0x0,	NPC_WIDECONFUSE,Wide Confusion
 668,0,6,4,0,0x3,2:5:8:11:14,5,1,no,0,0x2,0,none,0,0x0,	NPC_WIDESLEEP,Wide Sleep
 669,0,6,4,3,0x3,5,1,1,no,0,0x2,0,magic,0,0x0,	NPC_WIDESIGHT,Wide Sight
-670,9,6,2,7,0x91,0,10,1,no,0,0x2,0,magic,0,0x0,	NPC_EVILLAND,Evil Land
+670,7,6,2,7,0xD1,0,10,1,no,0,0x2,0,magic,0,0x0,	NPC_EVILLAND,Evil Land
 671,0,6,4,0,0x1,0,5,1,no,0,0x2,0,magic,0,0x0,	NPC_MAGICMIRROR,Magic Mirror
 672,0,6,4,0,0x3,2:5:8:11:14,5,1,no,0,0x2,0,none,0,0x0,	NPC_SLOWCAST,Slow Cast
 673,-9,6,1,-1,0,0,5,1,no,0,0x2,0,weapon,0,0x0,	NPC_CRITICALWOUND,Critical Wounds

+ 1 - 1
db/re/skill_unit_db.txt

@@ -104,7 +104,7 @@
 535,0xbd,    , -1, 0,  20,enemy, 0x8010	//NJ_KAENSIN
 538,0xbb,    ,  1:1:1:2:2:2:3:3:3:4,0,-1,all,0x8010	//NJ_SUITON
 541,0x86,    ,  0, 3:3:4:4:5,1000,enemy, 0x018	//NJ_RAIGEKISAI
-670,0xc7,    ,  1, 4:7:10:13:16:19:22:25:28:31,1000,all,0x008	//NPC_EVILLAND
+670,0xc7,    ,  1, 5:5:5:5:5:5:5:5:5:13,1000,all,0x008	//NPC_EVILLAND
 
 //706,0xfd,    ,  0, 0,1000,all, 0x000	//NPC_VENOMFOG
 

+ 9 - 11
src/map/skill.c

@@ -3332,7 +3332,7 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
 
 	// Instant damage
 	if( !dmg.amotion ) {
-		if( (!tsc || (!tsc->data[SC_DEVOTION] && skill_id != CR_REFLECTSHIELD && !tsc->data[SC_WATER_SCREEN_OPTION]) || skill_id == HW_GRAVITATION) && !shadow_flag )
+		if( (!tsc || (!tsc->data[SC_DEVOTION] && skill_id != CR_REFLECTSHIELD && !tsc->data[SC_WATER_SCREEN_OPTION]) || skill_id == HW_GRAVITATION || skill_id == NPC_EVILLAND) && !shadow_flag )
 			status_fix_damage(src,bl,damage,dmg.dmotion); //Deal damage before knockback to allow stuff like firewall+storm gust combo.
 		if( !status_isdead(bl) && additional_effects )
 			skill_additional_effect(src,bl,skill_id,skill_lv,dmg.flag,dmg.dmg_lv,tick);
@@ -3355,7 +3355,7 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
 			battle_delay_damage(tick, dmg.amotion,src,bl,dmg.flag,skill_id,skill_lv,damage,dmg.dmg_lv,dmg.dmotion, additional_effects);
 	}
 
-	if (tsc && skill_id != PA_PRESSURE && skill_id != HW_GRAVITATION) {
+	if (tsc && skill_id != PA_PRESSURE && skill_id != HW_GRAVITATION && skill_id != NPC_EVILLAND) {
 		if (tsc->data[SC_DEVOTION]) {
 			struct status_change_entry *sce = tsc->data[SC_DEVOTION];
 			struct block_list *d_bl = map_id2bl(sce->val1);
@@ -12343,7 +12343,7 @@ struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 skill_
 
 	case PR_SANCTUARY:
 	case NPC_EVILLAND:
-		val1=(skill_lv+3)*2;
+		val1=skill_lv+3;
 		break;
 
 	case WZ_FIREPILLAR:
@@ -13246,7 +13246,7 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, uns
 			if( battle_check_undead(tstatus->race, tstatus->def_ele) || tstatus->race==RC_DEMON )
 			{ //Only damage enemies with offensive Sanctuary. [Skotlex]
 				if( battle_check_target(&unit->bl,bl,BCT_ENEMY) > 0 && skill_attack(BF_MAGIC, ss, &unit->bl, bl, sg->skill_id, sg->skill_lv, tick, 0) )
-					sg->val1 -= 2; // reduce healing count if this was meant for damaging [hekate]
+					sg->val1 -= 1; // Reduce the number of targets that can still be hit
 			} else {
 				int heal = skill_calc_heal(ss,bl,sg->skill_id,sg->skill_lv,true);
 				struct mob_data *md = BL_CAST(BL_MOB, bl);
@@ -13264,11 +13264,7 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, uns
 				if( tsc && tsc->data[SC_AKAITSUKI] && heal )
 					heal = ~heal + 1;
 				status_heal(bl, heal, 0, 0);
-				if( diff >= 500 )
-					sg->val1--;
 			}
-			if( sg->val1 <= 0 )
-				skill_delunitgroup(sg);
 			break;
 
 		case UNT_EVILLAND:
@@ -17601,9 +17597,6 @@ struct skill_unit_group* skill_initunitgroup(struct block_list* src, int count,
 
 	ud->skillunit[i] = group;
 
-	if (skill_id == PR_SANCTUARY) //Sanctuary starts healing +1500ms after casted. [Skotlex]
-		group->tick += 1500;
-
 	// Stores this new group to DBMap
 	idb_put(skillunit_group_db, group->group_id, group);
 	return group;
@@ -18059,6 +18052,11 @@ static int skill_unit_timer_sub(DBKey key, DBData *data, va_list ap)
 				if (unit->val1 <= 0 || unit->val2 <= 0) // Remove the unit only if no HP or hit limit is reached
 					skill_delunit(unit);
 				break;
+			case UNT_SANCTUARY:
+				if (group->val1 <= 0) {
+					skill_delunitgroup(group);
+				}
+				break;
 		}
 	}