diff options
author | Jesusaves <cpntb1@ymail.com> | 2024-04-30 00:44:30 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2024-04-30 00:44:30 -0300 |
commit | dfce21e0ecedad3126ac5ad7272761736eb16a20 (patch) | |
tree | 00e322365af0f3cb95909c21e66ecb1040542a12 | |
parent | e61fee666e88fb2c9f84ff1b3f268b5161cc3b75 (diff) | |
download | serverdata-dfce21e0ecedad3126ac5ad7272761736eb16a20.tar.gz serverdata-dfce21e0ecedad3126ac5ad7272761736eb16a20.tar.bz2 serverdata-dfce21e0ecedad3126ac5ad7272761736eb16a20.tar.xz serverdata-dfce21e0ecedad3126ac5ad7272761736eb16a20.zip |
Address (slightly) @manatauro 's feedback
-rw-r--r-- | npc/006-9/ctrl.txt | 70 |
1 files changed, 40 insertions, 30 deletions
diff --git a/npc/006-9/ctrl.txt b/npc/006-9/ctrl.txt index b523d0cd3..e6c752228 100644 --- a/npc/006-9/ctrl.txt +++ b/npc/006-9/ctrl.txt @@ -304,42 +304,52 @@ function spawn { } else if (.@lv > 450) { // Otherwise, we'll randomly evolve a monster into a super-boss // Ascended units cannot be killed. Double ascension is possible. + // Ascensions only happen every 15 seconds, but boosts are every 4s. do { getunits(BL_MOB, .@lucky, 1, "006-9", 20, 20, rand2(getmapinfo(MAPINFO_SIZE_X,"006-9")-40)+20, rand2(getmapinfo(MAPINFO_SIZE_Y,"006-9")-40)+20); sleep(2); // To prevent map-server from collapsing } while (.@lucky == 0); - // Visual aspect of the ascension - unittalk(.@lucky, "*This unit has ascended*"); - setunitdata(.@lucky, UDT_CLASS, Birb); - immortal(.@lucky); // Jump straight to "plain unkillable" levels - setunitdata(.@lucky, UDT_CRIT, 32767); // Always does criticals - // Retrieve some data - .@atk1 = getunitdata(.@lucky, UDT_ATKMIN); - .@atk2 = getunitdata(.@lucky, UDT_ATKMAX); - .@atkR = getunitdata(.@lucky, UDT_ATKRANGE); - .@aspd = getunitdata(.@lucky, UDT_ADELAY); - .@wspd = getunitdata(.@lucky, UDT_SPEED); - .@mode = getunitdata(.@lucky, UDT_MODE); - // Damage multiplier: ×3 - setunitdata(.@lucky, UDT_ATKMIN, .@atk1 * 3); - setunitdata(.@lucky, UDT_ATKMAX, .@atk2 * 3); - // Increase attack range in 2 - setunitdata(.@lucky, UDT_ATKRANGE, .@atkR + 2); - // Make them faster, both to move as to attack - setunitdata(.@lucky, UDT_ADELAY, min(100, .@aspd - 80)); - setunitdata(.@lucky, UDT_SPEED, min(100, .@wspd - 35)); - // Set their AI to something more fearsome, if it isn't set yet - .@mode = .@mode | MD_NOKNOCKBACK; - .@mode = .@mode | MD_ANGRY; - .@mode = .@mode | MD_CASTSENSOR_IDLE; - .@mode = .@mode | MD_BOSS; - .@mode = .@mode | MD_DETECTOR; - .@mode = .@mode | MD_CHANGETARGET_CHASE; - setunitdata(.@lucky, UDT_MODE, .@mode); - // And mark them as something else for all eyes to see - setunitname(.@lucky, "ASCENDED MONSTER"); + if (.diff % 4 == 1) { + // Visual aspect of the ascension + unittalk(.@lucky, "*This unit has ascended*"); + setunitdata(.@lucky, UDT_CLASS, Birb); + immortal(.@lucky); // Jump straight to "plain unkillable" levels + setunitdata(.@lucky, UDT_CRIT, 32767); // Always does criticals + // Retrieve some data + .@atk1 = getunitdata(.@lucky, UDT_ATKMIN); + .@atk2 = getunitdata(.@lucky, UDT_ATKMAX); + .@atkR = getunitdata(.@lucky, UDT_ATKRANGE); + .@aspd = getunitdata(.@lucky, UDT_ADELAY); + .@wspd = getunitdata(.@lucky, UDT_SPEED); + .@mode = getunitdata(.@lucky, UDT_MODE); + // Damage multiplier: ×3 + setunitdata(.@lucky, UDT_ATKMIN, .@atk1 * 3); + setunitdata(.@lucky, UDT_ATKMAX, .@atk2 * 3); + // Increase attack range in 2 + setunitdata(.@lucky, UDT_ATKRANGE, .@atkR + 2); + // Make them faster, both to move as to attack + setunitdata(.@lucky, UDT_ADELAY, min(100, .@aspd - 80)); + setunitdata(.@lucky, UDT_SPEED, min(100, .@wspd - 35)); + // Set their AI to something more fearsome, if it isn't set yet + .@mode = .@mode | MD_NOKNOCKBACK; + .@mode = .@mode | MD_ANGRY; + .@mode = .@mode | MD_CASTSENSOR_IDLE; + .@mode = .@mode | MD_BOSS; + .@mode = .@mode | MD_DETECTOR; + .@mode = .@mode | MD_CHANGETARGET_CHASE; + setunitdata(.@lucky, UDT_MODE, .@mode); + // And mark them as something else for all eyes to see + setunitname(.@lucky, "ASCENDED MONSTER"); + } else { + // Just a minor boost, otherwise you'll be quickly put out of scene + // It'll be more difficult to notice these + .@aspd = getunitdata(.@lucky, UDT_ADELAY); + .@wspd = getunitdata(.@lucky, UDT_SPEED); + setunitdata(.@lucky, UDT_ADELAY, min(100, .@aspd - 40)); + setunitdata(.@lucky, UDT_SPEED, min(100, .@wspd - 25)); + } } else { // Otherwise, nothing happens (although you could get a penalty?) } |