mirror of
https://github.com/PhantomGamesDevelopment/TWM2.git
synced 2026-01-19 19:44:47 +00:00
3.9.1 Update
Patched up some TWM2 bugs, re-did the Vardison Boss.
This commit is contained in:
parent
e80004bbd8
commit
5ebf31e057
File diff suppressed because it is too large
Load diff
|
|
@ -831,7 +831,7 @@ function parsePublicCommands(%sender, %command, %args) {
|
|||
}
|
||||
else if (!isBoss(strlwr(%Boss))) {
|
||||
messageclient(%sender, 'MsgClient', '\c2Invalid Boss Name.');
|
||||
messageclient(%sender, 'MsgClient', '\c2Bosses: Yvex, CnlWindshear, GOL, GOF, Stormrider, DAVardison.');
|
||||
messageclient(%sender, 'MsgClient', '\c2Bosses: Yvex, CnlWindshear, GOL, GOF, Stormrider.');
|
||||
messageclient(%sender, 'MsgClient', '\c2GenVeg, LordRog, Insignia, Trebor, Vardison, ShadeLord.');
|
||||
return 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -143,10 +143,6 @@ function parseSuperAdminCommands(%sender, %command, %args) {
|
|||
%pos = VectorAdd(%sender.player.getPosition(), "0 0 5");
|
||||
StartVardison1(%pos);
|
||||
MessageAll('MsgAdminForce', "\c3"@%sender.namebase@"\c2 spawned Lord Vardison, go hide noobs.");
|
||||
case "DAVardison":
|
||||
%pos = VectorAdd(%sender.player.getPosition(), "0 0 5");
|
||||
StartDAVardison(%pos);
|
||||
MessageAll('MsgAdminForce', "\c3"@%sender.namebase@"\c2 spawned Dark Archmage Vardison, run in fear n0bs.");
|
||||
case "ShadeLord":
|
||||
%pos = VectorAdd(%sender.player.getPosition(), "0 0 5");
|
||||
SpawnShadeLord(%pos);
|
||||
|
|
@ -155,7 +151,7 @@ function parseSuperAdminCommands(%sender, %command, %args) {
|
|||
messageclient(%sender, 'MsgClient', '\c2Invalid Boss Name.');
|
||||
messageclient(%sender, 'MsgClient', '\c2Bosses: Yvex, CnlWindshear, GhostOfLightning.');
|
||||
messageclient(%sender, 'MsgClient', '\c2GenVegenor, LordRog, Insignia, Trebor, Vardison.');
|
||||
messageclient(%sender, 'MsgClient', '\c2Stormrider, GhostOfFire, ShadeLord, DAVardison.');
|
||||
messageclient(%sender, 'MsgClient', '\c2Stormrider, GhostOfFire, ShadeLord.');
|
||||
}
|
||||
return 1;
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,15 @@ function InitiateBoss(%Boss, %name) {
|
|||
error("SERVER: Cannot initiate boss, in horde/helljump");
|
||||
return;
|
||||
}
|
||||
|
||||
if(!isObject($TWM2::BossManager)) {
|
||||
$TWM2::BossManager = new scriptObject() {
|
||||
class = "BossManager";
|
||||
};
|
||||
}
|
||||
$TWM2::BossManager.bossKills = 0;
|
||||
$TWM2::BossManager.bossObject = %Boss;
|
||||
$TWM2::BossManager.activeBoss = %name;
|
||||
|
||||
$TWM2::BossGoing = 1;
|
||||
switch$(%name) {
|
||||
|
|
@ -21,9 +30,9 @@ function InitiateBoss(%Boss, %name) {
|
|||
case "Vardison1":
|
||||
%print = "<color:FF0000>BOSS BATTLE \n LORD VARDISON";
|
||||
case "Vardison2":
|
||||
%print = "<color:FF0000>!DANGER! \n VARDISON HAS TRANSFORMED \n AIR FORM";
|
||||
%print = "<color:FF0000>BOSS ALERT \n LORD VARDISON HAS ENTERED HIS SECOND FORM";
|
||||
case "Vardison3":
|
||||
%print = "<color:FF0000>!DANGER! \n VARDISON HAS TRANSFORMED AGAIN \n DEMON FORM";
|
||||
%print = "<color:FF0000>BOSS ALERT \n LORD VARDISON HAS ENTERED HIS FINAL FORM";
|
||||
case "Trebor":
|
||||
%print = "<color:FF0000>BOSS BATTLE \n LORDRANIUS TREVOR";
|
||||
case "Stormrider":
|
||||
|
|
@ -49,11 +58,11 @@ function InitiateBoss(%Boss, %name) {
|
|||
}
|
||||
|
||||
function BossCheckUp(%boss, %name) {
|
||||
%percentage = (mFloor(%boss.getDamageLeft()*100) / mFloor(%boss.getMaxDamage()*100)) * 100;
|
||||
MessageAll('MsgSPCurrentObjective1', "", "Boss Battle: "@$TWM2::BossName[%name]@" [Boss Kill Count: "@$TWM2::BossManager.bossKills@"]");
|
||||
MessageAll('MsgSPCurrentObjective2', "", "Boss HP: "@mFloor(%boss.getDamageLeft()*100)@"/"@mFloor(%boss.getMaxDamage()*100)@" ("@%percentage@"%)");
|
||||
|
||||
MessageAll('MsgSPCurrentObjective1', "", "Boss Battle: "@$TWM2::BossName[%name]@"");
|
||||
MessageAll('MsgSPCurrentObjective2', "", "Boss HP: "@mFloor(%boss.getDamageLeft()*100)@"/"@mFloor(%boss.getMaxDamage()*100)@"");
|
||||
|
||||
if(%name !$= "CnlWindshear" && %name !$= "Vardison2" && %name !$= "Trebor" && %name !$= "Stormrider") {
|
||||
if(%name !$= "CnlWindshear" && %name !$= "Trebor" && %name !$= "Stormrider") {
|
||||
if(!isObject(%boss) || %boss.getState() $= "dead") {
|
||||
if(%name $= "Vardison1") {
|
||||
%count = ClientGroup.getCount();
|
||||
|
|
@ -61,7 +70,16 @@ function BossCheckUp(%boss, %name) {
|
|||
%cl = ClientGroup.getObject(%i);
|
||||
recordAction(%cl, "BOSS", "Vardison1");
|
||||
}
|
||||
StartVardison2(%boss.getPosition());
|
||||
SpawnVardison2(%boss.getPosition());
|
||||
return;
|
||||
}
|
||||
if(%name $= "Vardison2") {
|
||||
%count = ClientGroup.getCount();
|
||||
for(%i = 0; %i < %count; %i++) {
|
||||
%cl = ClientGroup.getObject(%i);
|
||||
recordAction(%cl, "BOSS", "Vardison2");
|
||||
}
|
||||
SpawnVardison3(%boss.getPosition());
|
||||
return;
|
||||
}
|
||||
//the boss has been defeated, horrah!!!
|
||||
|
|
@ -81,17 +99,6 @@ function BossCheckUp(%boss, %name) {
|
|||
}
|
||||
else {
|
||||
if(!isObject(%boss)) {
|
||||
//the boss has been defeated, horrah!!!
|
||||
if(%name $= "Vardison2") {
|
||||
//but not quite so xD
|
||||
%count = ClientGroup.getCount();
|
||||
for(%i = 0; %i < %count; %i++) {
|
||||
%cl = ClientGroup.getObject(%i);
|
||||
recordAction(%cl, "BOSS", "Vardison2");
|
||||
}
|
||||
StartVardison3("0 0 200");
|
||||
return;
|
||||
}
|
||||
%count = ClientGroup.getCount();
|
||||
for(%i = 0; %i < %count; %i++) {
|
||||
%cl = ClientGroup.getObject(%i);
|
||||
|
|
@ -167,11 +174,27 @@ function GameConnection::GiveBossAward(%client, %bossName) {
|
|||
}
|
||||
|
||||
function FindValidTarget(%boss, %counter) { //This is usefull
|
||||
%client = ClientGroup.getObject(GetRandom()*ClientGroup.getCount());
|
||||
if(!isObject(%client.player) || %client.player.getState() $= "dead" || %boss == %client.player) {
|
||||
return schedule(500,0,"FindValidTarget", %boss, %counter++); //Keep Looking;
|
||||
if(%counter $= "") {
|
||||
%counter = 10; //10 attempts
|
||||
}
|
||||
return %client; //target is good
|
||||
for(%i = 0; %i < %counter; %i++) {
|
||||
%test = ClientGroup.getObject(getRandom(0, ClientGroup.getCount()));
|
||||
if(isObject(%test)) {
|
||||
%tPL = %test.getControlObject();
|
||||
if(isObject(%tPL)) {
|
||||
if(isPlayer(%tPL)) {
|
||||
if(%tPL.getState() !$= "dead") {
|
||||
//Got one!
|
||||
return %test;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return %test;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1; //Found nothing.
|
||||
}
|
||||
|
||||
function CheckBossChallenge(%client, %boss) {
|
||||
|
|
@ -430,9 +453,46 @@ function GenerateBossChallengeMenu(%client, %tag, %index) {
|
|||
%index++;
|
||||
}
|
||||
//
|
||||
if(%client.CheckNWChallengeCompletion("VardEasy")) {
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %index, "The Standard Experience - Done");
|
||||
%index++;
|
||||
}
|
||||
else {
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %index, "The Standard Experience - Defeat Lord Vardison on Easy Difficulty");
|
||||
%index++;
|
||||
}
|
||||
if(%client.CheckNWChallengeCompletion("VardNorm")) {
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %index, "Demon Hunter - Done");
|
||||
%index++;
|
||||
}
|
||||
else {
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %index, "Demon Hunter - Defeat Lord Vardison on Normal Difficulty");
|
||||
%index++;
|
||||
}
|
||||
if(%client.CheckNWChallengeCompletion("VardHard")) {
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %index, "Master Demon Slayer - Done");
|
||||
%index++;
|
||||
}
|
||||
else {
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %index, "Master Demon Slayer - Defeat Lord Vardison on Hard Difficulty");
|
||||
%index++;
|
||||
}
|
||||
if(%client.CheckNWChallengeCompletion("VardWtf")) {
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %index, "God of the Shadow Realm - Done [You are a freaking boss master]");
|
||||
%index++;
|
||||
}
|
||||
else {
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %index, "God of the Shadow Realm - Against all odds, emerge victorious against WTF difficulty Lord Vardison");
|
||||
%index++;
|
||||
}
|
||||
//
|
||||
return %index;
|
||||
}
|
||||
|
||||
function BossManager::addKill(%this, %tObj) {
|
||||
%this.bossKills++;
|
||||
}
|
||||
|
||||
//Load The Boss Files
|
||||
exec("scripts/TWM2/Bosses/LordYvex.cs");
|
||||
exec("scripts/TWM2/Bosses/ColonelWindshear.cs");
|
||||
|
|
|
|||
|
|
@ -80,6 +80,10 @@ $Challenge::Info["Treb3"] = "Tank Halter\t2\t10000\tNone";
|
|||
$Challenge::Info["Vard1"] = "Shining Star\t2\t3500\tNone";
|
||||
$Challenge::Info["Vard2"] = "Glare The Dark\t2\t7000\tNone";
|
||||
$Challenge::Info["Vard3"] = "Outevil The Wicked\t2\t12500\tLord Vardison Recruitable Ally";
|
||||
$Challenge::Info["VardEasy"] = "The Standard Experience\t2\t7000\tNone";
|
||||
$Challenge::Info["VardNorm"] = "Demon Hunter\t2\t1500\tNone";
|
||||
$Challenge::Info["VardHard"] = "Master Demon Slayer\t2\t25000\tNone";
|
||||
$Challenge::Info["VardWtf"] = "God of the Shadow Realm\t2\t50000\tNone";
|
||||
//Blacklist
|
||||
$Challenge::Info["Acceptance"] = "Acceptance\t3\t1000\tNone";
|
||||
$Challenge::Info["ListHit"] = "Hitlister of The List\t3\t2500\tNone";
|
||||
|
|
|
|||
|
|
@ -182,10 +182,10 @@ function ZPCreateZombie(%obj){
|
|||
function StartAZombie(%pos, %type){
|
||||
if(!isObject(Game)) {
|
||||
error("UE Blocked...");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
if($Game::ZombieCount > $TWM2::MaxZombies || !$TWM2::CanSpawnZ) {
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
//
|
||||
if(%type $= "") {
|
||||
|
|
|
|||
|
|
@ -286,8 +286,6 @@ function BossFullname(%BossAbbr)
|
|||
return "Ghost of Fire";
|
||||
case "vardison":
|
||||
return "Lord Vardison";
|
||||
case "davardison":
|
||||
return "Dark Archmage Vardison";
|
||||
case "shadelord":
|
||||
return "The Shade Lord";
|
||||
}
|
||||
|
|
@ -317,8 +315,6 @@ function isBoss(%Boss)
|
|||
return 1;
|
||||
case "vardison":
|
||||
return 1;
|
||||
case "davardison":
|
||||
return 1;
|
||||
case "shadelord":
|
||||
return 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -235,7 +235,7 @@ function Medrepair(%obj, %targets){
|
|||
if(%obj.isreping == 0)
|
||||
return;
|
||||
if(%targets !$= ""){
|
||||
%numtrgs = getNumberOfWords(%targets);
|
||||
%numtrgs = getWordCount(%targets);
|
||||
for(%i = 0; %i < %numtrgs; %i++){
|
||||
%target = getWord(%targets, %i);
|
||||
if(vectorDist(%obj.getWorldBoxCenter(), %target.getWorldBoxCenter()) <= 10 && %target.getDamageLevel() > 0.0){
|
||||
|
|
@ -267,7 +267,7 @@ function Medrepair(%obj, %targets){
|
|||
function MedstopRepair(%obj){
|
||||
%obj.isreping = 0;
|
||||
if(%obj.reptargets !$= ""){
|
||||
%numtrgs = getNumberOfWords(%obj.reptargets);
|
||||
%numtrgs = getWordCount(%obj.reptargets);
|
||||
for(%i = 0; %i < %numtrgs; %i++){
|
||||
%target = getWord(%obj.reptargets, %i);
|
||||
if(%target.reping == 1){
|
||||
|
|
@ -305,6 +305,10 @@ function checkrevive(%obj){
|
|||
messageclient(%obj.client, 'MsgClient', "\c2This body is destroyed.");
|
||||
return;
|
||||
}
|
||||
if(%Tobj.isBoss == 1){
|
||||
messageclient(%obj.client, 'MsgClient', "\c2ARE YOU INSANE!?!??! YEAH... LETS JUST REVIVE THE DAMNED BOSS THAT JUST REKT YOU ABOUT 100 TIMES!!!!");
|
||||
return;
|
||||
}
|
||||
if(%Tobj.infected || %Tobj.isZombie) {
|
||||
messageclient(%obj.client, 'MsgClient', "\c2WHOA!!! We don't want to make the Undead.... UnDead AGAIN.");
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -26,8 +26,51 @@ datablock AudioProfile(ZombieHOWL)
|
|||
preload = true;
|
||||
};
|
||||
|
||||
//USED IN FLAMETHROWER
|
||||
//USED IN FLAMETHROWER / NMM
|
||||
//DO NOT REMOVE: NEEDED HERE
|
||||
datablock ParticleData(NMMissileBaseParticle) {
|
||||
dragCoeffiecient = 0.0;
|
||||
gravityCoefficient = -0.2;
|
||||
inheritedVelFactor = 0.0;
|
||||
|
||||
lifetimeMS = 800;
|
||||
lifetimeVarianceMS = 500;
|
||||
|
||||
useInvAlpha = false;
|
||||
spinRandomMin = -160.0;
|
||||
spinRandomMax = 160.0;
|
||||
|
||||
animateTexture = true;
|
||||
framesPerSec = 15;
|
||||
|
||||
textureName = "special/cloudflash";
|
||||
|
||||
colors[0] = "0.5 0.1 0.9 1.0";
|
||||
colors[1] = "0.5 0.1 0.9 1.0";
|
||||
colors[2] = "0.5 0.1 0.9 1.0";
|
||||
|
||||
sizes[0] = 2.5;
|
||||
sizes[1] = 2.7;
|
||||
sizes[2] = 3.0;
|
||||
|
||||
times[0] = 0.0;
|
||||
times[1] = 0.7;
|
||||
times[2] = 1.0;
|
||||
};
|
||||
|
||||
datablock ParticleEmitterData(NMMissileBaseEmitter) {
|
||||
ejectionPeriodMS = 10;
|
||||
periodVarianceMS = 0;
|
||||
|
||||
ejectionVelocity = 1.5;
|
||||
velocityVariance = 0.3;
|
||||
|
||||
thetaMin = 0.0;
|
||||
thetaMax = 30.0;
|
||||
|
||||
particles = "NMMissileBaseParticle";
|
||||
};
|
||||
|
||||
datablock ParticleData(ThrowerBaseParticle) {
|
||||
dragCoeffiecient = 0.0;
|
||||
gravityCoefficient = -0.2;
|
||||
|
|
|
|||
|
|
@ -3585,6 +3585,17 @@ function Armor::damageObject(%data, %targetObject, %sourceObject, %position, %am
|
|||
|
||||
//now call the "onKilled" function if the client was... you know...
|
||||
if(%targetObject.getState() $= "Dead") {
|
||||
//Is there a boss going?
|
||||
if(!%targetObject.isZombie && !%targetObject.isBossMinion) {
|
||||
if($TWM2::BossGoing) {
|
||||
//Chalk up the kill count :P
|
||||
$TWM2::BossManager.addKill(%targetObject);
|
||||
}
|
||||
}
|
||||
if(%targetObject.isVardisonMinion) {
|
||||
$TWM2::VardisonManager.minionCount--;
|
||||
}
|
||||
|
||||
if($TWM2::PlayingSabo) {
|
||||
if(Game.Bomb.Carrier == %targetObject) {
|
||||
if(%damageType == $DamageType::FellOff) {
|
||||
|
|
|
|||
|
|
@ -1,46 +1,3 @@
|
|||
datablock ParticleData(NMMissileBaseParticle) {
|
||||
dragCoeffiecient = 0.0;
|
||||
gravityCoefficient = -0.2;
|
||||
inheritedVelFactor = 0.0;
|
||||
|
||||
lifetimeMS = 800;
|
||||
lifetimeVarianceMS = 500;
|
||||
|
||||
useInvAlpha = false;
|
||||
spinRandomMin = -160.0;
|
||||
spinRandomMax = 160.0;
|
||||
|
||||
animateTexture = true;
|
||||
framesPerSec = 15;
|
||||
|
||||
textureName = "special/cloudflash";
|
||||
|
||||
colors[0] = "0.5 0.1 0.9 1.0";
|
||||
colors[1] = "0.5 0.1 0.9 1.0";
|
||||
colors[2] = "0.5 0.1 0.9 1.0";
|
||||
|
||||
sizes[0] = 2.5;
|
||||
sizes[1] = 2.7;
|
||||
sizes[2] = 3.0;
|
||||
|
||||
times[0] = 0.0;
|
||||
times[1] = 0.7;
|
||||
times[2] = 1.0;
|
||||
};
|
||||
|
||||
datablock ParticleEmitterData(NMMissileBaseEmitter) {
|
||||
ejectionPeriodMS = 10;
|
||||
periodVarianceMS = 0;
|
||||
|
||||
ejectionVelocity = 1.5;
|
||||
velocityVariance = 0.3;
|
||||
|
||||
thetaMin = 0.0;
|
||||
thetaMax = 30.0;
|
||||
|
||||
particles = "NMMissileBaseParticle";
|
||||
};
|
||||
|
||||
datablock LinearFlareProjectileData(ShadowRifleBolt) {
|
||||
projectileShapeName = "turret_muzzlepoint.dts";
|
||||
scale = "1.0 1.0 1.0";
|
||||
|
|
|
|||
Loading…
Reference in a new issue