Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Special thanks to Sakuya Izayoi for the Area Array, Cleanup Function, and RandomBlock Picker and Daot for his epic video on NPC Tactics for the teleporting\\
- /* VARIABLE FUNCTIONS */
- var rand = function(a, b){ return Math.random()*(b - a) + a };
- //-------------------\\
- var ax, az, x, y, z, px, py, pz, flag=0, count=0;
- var offset = 3;
- var phase = 1;
- var maxHP;
- var currentHP;
- var _oldMeleeRange;
- var _oldRangedRange;
- var _rangeDelayMin = 35;
- var _rangeDelayMax = 50;
- var _moveSpeed = 4;
- var explosionTrigger = false;
- /* ARENA ROOM VARIABLE CONTROL */
- var origin = { x:25, y:15, z:5 }
- var offsets = { x:0, z:0, y:0, xd:-20, zd:20, yd:-10 };
- var area = { x:origin.x + offsets.x, z:origin.z + offsets.z, y:origin.y + offsets.y, xd:origin.x + offsets.xd, zd:origin.z + offsets.zd, yd:origin.y + offsets.yd };
- //-------------------\\
- function init(event)
- {
- phase = 1;
- var resetMinions = event.npc.world.getNearbyEntities(event.npc.getX(), event.npc.getY(), event.npc.getZ(), 64, 2);
- for(var i = 0; i < resetMinions.length; i++) { if(resetMinions[i].display.name == "Minion of Kantaris") { resetMinions[i].despawn(); } }
- explosionTrigger = false;
- event.npc.timers.clear();
- event.npc.display.setVisible(0);
- event.npc.setHealth(event.npc.getMaxHealth());
- event.npc.executeCommand("/execute @p[c=4] ~ ~ ~ playsound Kantaris_Spawn master @p");
- event.npc.world.broadcast("<Kantaris the Banished> \u00A7cAssuming control!");
- event.npc.getAi().setWalkingSpeed(_moveSpeed);
- event.npc.stats.getMelee().setRange(2);
- event.npc.stats.getRanged().setRange(12);
- event.npc.getAi().setNavigationType(0);
- event.npc.stats.getRanged().setDelay(_rangeDelayMin, _rangeDelayMax);
- cleanup(event);
- }
- function kill(event)
- {
- event.npc.executeCommand("/execute @p[c=4] ~ ~ ~ playsound Kantaris_KilledTarget master @p");
- event.npc.world.broadcast("<Kantaris the Banished> \u00A7cI sense your weakness!");
- var playersAlive = event.npc.world.getNearbyEntities(event.npc.getX(), event.npc.getY(), event.npc.getZ(), 200, EntityType_PLAYER);
- if (playersAlive == 0){ totalReset(event); }
- }
- function damaged(event)
- {
- maxHP = event.npc.getMaxHealth();
- currentHP = event.npc.getHealth();
- var currentPercent = getWholePercent(currentHP, maxHP);
- //Phase 1 Tactics - Evasion and Teleport
- if (event.source != null)
- {
- if ((event.source.getType() == 1) && phase == 1)
- {
- event.npc.display.setVisible(1);
- flag=1;
- event.npc.getTempdata().put("player",event.source);
- }
- //Change to Phase 2\\
- if ((currentPercent <= 75) && (phase == 1)) { phaseChange(event); }
- //Change to Phase 3\\
- if ((currentPercent <= 50) && (phase == 2)) { phaseChange(event); }
- //Change to Phase 4\\
- if ((currentPercent <= 25) && (phase == 3)) { phaseChange(event); }
- }
- }
- function died(event)
- {
- event.npc.executeCommand("/execute @p[c=4] ~ ~ ~ playsound Kantaris_Died master @p");
- event.npc.world.broadcast("<Kantaris the Banished> \u00A7cI will find you again...");
- for (var i = 0; i < 6; i++)
- {
- if (event.npc.timers.has(i))
- event.npc.timers.stop(i);
- }
- event.npc.timers.clear();
- cleanup(event);
- }
- function phaseChange(event)
- {
- phase++
- event.npc.display.setVisible(0);
- event.npc.executeCommand('/execute @p[c=4] ~ ~ ~ title @p title {"text":"Entering Phase: '+phase+'!","color":"red"}');
- switch(phase)
- {
- case 2:
- event.npc.executeCommand("/execute @p[c=4] ~ ~ ~ playsound Kantaris_Phase2 master @p");
- event.npc.world.broadcast("<Kantaris the Banished> \u00A7cOur power is unmatched!");
- break;
- case 3:
- event.npc.executeCommand("/execute @p[c=4] ~ ~ ~ playsound Kantaris_Phase3 master @p");
- event.npc.world.broadcast("<Kantaris the Banished> \u00A7cProgress cannot be halted!");
- break;
- case 4:
- event.npc.executeCommand("/execute @p[c=4] ~ ~ ~ playsound Kantaris_Phase4 master @p");
- event.npc.world.broadcast("<Kantaris the Banished> \u00A7cDestroying this body gains you nothing!");
- break;
- }
- }
- function tick(event)
- {
- //Phase 1 - Utilizes Evasion Tactics
- if ((flag) && (phase == 1))
- {
- az = offset*Math.sin((event.npc.getTempdata().get("player").getRotation()+90)*Math.PI/180);
- ax = offset*Math.cos((event.npc.getTempdata().get("player").getRotation()+90)*Math.PI/180);
- x = event.npc.getTempdata().get("player").getX()-ax;
- z = event.npc.getTempdata().get("player").getZ()-az;
- y = event.npc.getTempdata().get("player").getY();
- if (!event.npc.world.getBlock(x,y,z)&&!event.npc.world.getBlock(x,y+1,z))
- {
- event.npc.setPosition(x,y,z);
- count++;
- if (count==20)
- {
- flag=0;
- count=0;
- }
- event.npc.display.setVisible(0);
- } else {
- event.npc.display.setVisible(0);
- }
- }
- //Phase 2 - Utilize Explosions
- if (phase == 2)
- {
- if (!event.npc.timers.has(1))
- {
- event.npc.timers.start(1, 600, true);
- }
- if ((explosionTrigger) && (!event.npc.timers.has(3)))
- {
- event.npc.timers.start(3, 140, true);
- }
- }
- //Phase 3 - Summon Minions
- if (phase == 3)
- {
- if (!event.npc.timers.has(4))
- {
- event.npc.timers.start(4, 600, true);
- }
- }
- //Phase 4 - Break Celing
- if (phase == 4)
- {
- if (!event.npc.timers.has(5))
- {
- event.npc.timers.start(5, 220, true);
- }
- }
- }
- function timer(event)
- {
- if (event.id == 1) //Special Ability Placement for Explosions
- {
- event.npc.executeCommand("/execute @p[c=4] ~ ~ ~ playsound Kantaris_Phase2_Special master @p");
- event.npc.getAi().setNavigationType(1);
- event.npc.navigateTo(16, 12, 15, 5);
- event.npc.setPosition(16, 12, 15)
- _oldMeleeRange = event.npc.stats.getMelee().getRange();
- _oldRangesRange = event.npc.stats.getRanged().getRange();
- event.npc.stats.getMelee().setRange(0);
- event.npc.stats.getRanged().setRange(16);
- event.npc.stats.getRanged().setDelay(15, 30);
- event.npc.timers.start(2, 300, false);
- explosionTrigger = true;
- event.npc.getAi().setWalkingSpeed(0)
- }
- if (event.id == 2) //Expiration of Special Ability and Reset of All Previous Values and Position
- {
- event.npc.getAi().setNavigationType(0);
- event.npc.getAi().setWalkingSpeed(_moveSpeed);
- x = event.npc.getTempdata().get("player").getX();
- z = event.npc.getTempdata().get("player").getZ();
- y = event.npc.getTempdata().get("player").getY();
- event.npc.navigateTo(x, y, z, 4);
- event.npc.stats.getMelee().setRange(_oldMeleeRange);
- event.npc.stats.getRanged().setRange(_oldRangedRange);
- event.npc.stats.getRanged().setDelay(_rangeDelayMin, _rangeDelayMax);
- explosionTrigger = false;
- }
- if (event.id == 3) //Trigger the Explosion
- {
- x = event.npc.getTempdata().get("player").getX();
- z = event.npc.getTempdata().get("player").getZ();
- y = event.npc.getTempdata().get("player").getY();
- if (explosionTrigger){ event.npc.world.explode(x, y, z, 0.6, true, false); }
- }
- if (event.id == 4) //Minion Timer
- {
- var kantarisBoss = event.npc;
- kantarisBoss.executeCommand("/execute @p[c=4] ~ ~ ~ playsound Kantaris_SpawnAdds master @p");
- kantarisBoss.world.broadcast("<Kantaris the Banished> \u00A7cSentient beings need never feel pain!");
- x = event.npc.getTempdata().get("player").getX();
- z = event.npc.getTempdata().get("player").getZ();
- y = event.npc.getTempdata().get("player").getY();
- var minionCount = randomIntFromInterval(1, 3);
- for (i = 0; i < minionCount; i++)
- {
- var kantarisMinion = event.API.getClones().get(1, "Minion of Kantaris", event.npc.getWorld());
- kantarisMinion.setHome(kantarisBoss.x, kantarisBoss.y, kantarisBoss.z + 3);
- kantarisMinion.setPosition(x + randomIntFromInterval(3, 8), y, z + randomIntFromInterval(2, 4));
- kantarisMinion.spawn();
- }
- }
- if (event.id == 5) //Final Phase Ceiling Collapse Timer
- {
- var targetBlock = chooseRandomBlock(event.npc.world, area.x, area.xd , area.z , area.zd, area.y)
- targetBlock.remove();
- event.npc.executeCommand("/execute @p[c=4] ~ ~ ~ playsound Kantaris_BreakRoof master @p");
- event.npc.world.broadcast("<Kantaris the Banished> \u00A7cYou are bacteria!");
- }
- }
- //----------------------------UTILITY FUNCTIONS----------------------------\\
- function randomGenWhole(){ return Math.floor(Math.random() * 20); }
- function randomIntFromInterval(min,max){ return Math.floor(Math.random()*(max-min+1)+min); }
- function getWholePercent(percentFor, percentOf){ return Math.floor(percentFor/percentOf * 100) }
- function chooseRandomBlock(world, x1, x2, z1, z2, y) { x = rand(x1, x2); z = rand(z1, z2); return world.getBlock(x, y, z); }
- function totalReset(event)
- {
- phase = 1;
- var resetMinions = event.npc.world.getNearbyEntities(event.npc.getX(), event.npc.getY(), event.npc.getZ(), 32, 2);
- for(var i = 0; i < resetMinions.length; i++) { if(resetMinions[i].display.name == "Minion of Kantaris") { resetMinions[i].despawn(); } }
- explosionTrigger = false;
- event.npc.timers.clear();
- event.npc.display.setVisible(0);
- event.npc.setHealth(event.npc.getMaxHealth());
- event.npc.getAi().setWalkingSpeed(_moveSpeed);
- event.npc.stats.getMelee().setRange(2);
- event.npc.stats.getRanged().setRange(12);
- event.npc.getAi().setNavigationType(0);
- event.npc.stats.getRanged().setDelay(_rangeDelayMin, _rangeDelayMax);
- cleanup(event);
- }
- function cleanup(event)
- {
- /*repair glass*/
- /*two rows on +/- X*/
- var glassPlane = ''+(area.x-1)+' '+area.y+' '+area.z+' '+(area.xd+1)+' '+area.y+' '+area.zd
- event.npc.executeCommand('/fill '+glassPlane+' tconstruct:clear_glass 0 replace')
- var lavaArea = ''+area.x+' '+area.y+' '+area.z+' '+area.xd+' '+area.yd+' '+area.zd
- event.npc.executeCommand('/fill '+lavaArea+' minecraft:air 0 replace minecraft:lava')
- event.npc.executeCommand('/fill '+lavaArea+' minecraft:air 0 replace minecraft:flowing_lava')
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement