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
This commit is contained in:
Playtester
2016-01-24 01:06:00 +01:00
parent 4fdcb2ea61
commit 9721dc94a5
7 changed files with 17 additions and 19 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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;
}
}