Post: Hawkin's Robot Zombies v0.1 (MW2 1.11)
03-15-2011, 06:25 PM #1
Hawkin
Lord of the Undead
(adsbygoogle = window.adsbygoogle || []).push({}); I wasn't going to release this but a bunch of people have asked me for it. This is the project I was working on when they released MW2 1.12.

It is still a little buggy. It doesn't crash hardly at all, but there are other bugs.
The only map you can play this on for now is Terminal.

Again this is an early working version. Not something I normally would of released.
But it is alot of fun.

INSTRUCTIONS:

You can play with 1-6 people
DO NOT PLAY WITH MORE THEN 6 people. Or it will be VERY laggy.
Not sure if it will work properly if you let people join after the game starts.

If playing with a few people 1-3 you may want to end the game and start over if all the humans die.

If you die and a human is still alive then you will come back at the end of the round, and you keep you money, but lose everything else.

Anti-Join is D-pad Right

There are 6 Vending Machines around the map, that sell 1 perk and 1 gun each.

You have to buy a teleporter to move to the next room. Once one person buys it everyone can use that teleporter to go back and forth for the rest of the game. (the flag it teleports you to will teleport you back after a 3 second wait)

There is a box in the center room, it works like a normal Zombie box except it can give you the same weapon you already have. You have a chance of getting the Thunder Gun. The Thunder Gun has 24 shots. It will reload with Max Ammo.

You can only hold 2 guns, unless you buy the Gold Deseret Eagle, or the Unlimited Akimbo Glocks, from a vending machine.

Power Drops: You get a chance of getting one with every kill.

MAX AMMO; it will refill every humans ammo stock.
Steel Skin; It gives every human 2000 Health for 60 seconds.
Easy-Kill; Gives every zombie 10 health for 60 seconds
Zombie Eraser: Kills all zombies and gives humans $200

You get $75 for a kill and $150 for a headshot.

The rest I am sure you can figure out.

So here is My Robot Zombies.

You must login or register to view this content.

I included a PC version with all the .gsc files in-case someone wants to edit it.

Special Thanks To:
Elitemossy
Derek Trotter
Killingdyl
Juddy Loves Pizza
Tinkie101
Last edited by Hawkin ; 03-17-2011 at 03:02 PM.

The following 44 users say thank you to Hawkin for this useful post:

-Google-, /SneakerStreet/, |ManiaC|, add_me, Amazingpwner, anddrew, Diddles2Fresshh, Dr3aMz, eldermonkey, FrozN, FrOzTi, Hack-Tivision, hibye3, hydro_122499, I am Mara, IRiSe_GodFather, JakeM, JamesSwagger, Jannis96, JewBagel, jfed, killa skillz, kingbeaver, lildeg8, LINUX♥, Mango_Knife, Mw2Freak13, Nikeymikey, Pink Guy, Rin1, rodrigo21, shawry, Shieldsy, Skyl1n3, smd, The InvadeR, Threatz2Fresshh, Vultra, w8t4it, wowaka, xCamoLegend, xScreamo!, xT4sSin, zHoMiCiDe
03-16-2011, 09:37 PM #20
Originally posted by Hawkin View Post
I wasn't going to release this but a bunch of people have asked me for it. This is the project I was working on when they released MW2 1.12.

It is still a little buggy. It doesn't crash hardly at all, but there are other bugs.
The only map you can play this on for now is Terminal.

Again this is an early working version. Not something I normally would of released.
But it is alot of fun.

INSTRUCTIONS:

You can play with 1-6 people
DO NOT PLAY WITH MORE THEN 6 people. Or it will be VERY laggy.
Not sure if it will work properly if you let people join after the game starts.

If playing with a few people 1-3 you may want to end the game and start over if all the humans die.

If you die and a human is still alive then you will come back at the end of the round, and you keep you money, but lose everything else.

Anti-Join is D-pad Right

There are 6 Vending Machines around the map, that sell 1 perk and 1 gun each.

You have to buy a teleporter to move to the next room. Once one person buys it everyone can use that teleporter to go back and forth for the rest of the game. (the flag it teleports you to will teleport you back after a 3 second wait)

There is a box in the center room, it works like a normal Zombie box except it can give you the same weapon you already have. You have a chance of getting the Thunder Gun. The Thunder Gun has 24 shots. It will reload with Max Ammo.

You can only hold 2 guns, unless you buy the Gold Deseret Eagle, or the Unlimited Akimbo Glocks, from a vending machine.

Power Drops: You get a chance of getting one with every kill.

MAX AMMO; it will refill every humans ammo stock.
Steel Skin; It gives every human 2000 Health for 60 seconds.
Easy-Kill; Gives every zombie 10 health for 60 seconds
Zombie Eraser: Kills all zombies and gives humans $200

You get $75 for a kill and $150 for a headshot.

The rest I am sure you can figure out.

So here is My Robot Zombies.

You must login or register to view this content.

I included a PC version with all the .gsc files in-case someone wants to edit it.

Special Thanks To:
Elitemossy
Derek Trotter
Killingdyl
Juddy Loves Pizza


when i put the .gsc's that you supplied us with into the xbox patch ( converted to xbox from ps3) i edited a small thing and it gave unexpected ending error. so... i just tried the patch by putting the .gsc's you gave us and it still is unexpected ending without any edits to the .gsc's at all. just wondering if you would know why so that ican begin to edit it.
im trying to find the fualty coding but not sure if thats the actual problem.
Thank You

---------- Post added at 05:37 PM ---------- Previous post was at 05:31 PM ----------

could it possibly be because of how the custommaps.gsc and the humanzombies.gsc are made? becuase it looks different to every other patch. and these 2 i think r the only ones that have this.
    

#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include maps\mp\qczm\HumansZombiesSetup;

init()
{ level.spawnz = 0;
level.hspawnz = 0;
level.doCustomMap = 0;
level.doorwait = 2;
level.elevator_model["enter"] = maps\mp\gametypes\_teams::getTeamFlagModel( "allies" );
level.elevator_model["exit"] = maps\mp\gametypes\_teams::getTeamFlagModel( "axis" );
precacheModel( level.elevator_model["enter"] );
precacheModel( level.elevator_model["exit"] );
wait 1;
if(getDvar("mapname") == "mp_afghan"){ /** Afghan **/
level thread Afghan();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_boneyard"){ /** Scrapyard **/
level thread Scrapyard();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_brecourt"){ /** Wasteland **/
level thread Wasteland();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_checkpoint"){ /** Karachi **/
level thread Karachi();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_derail"){ /** Derail **/
level thread Derail();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_estate"){ /** Estate **/
level thread Estate();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_favela"){ /** Favela **/
level thread Favela();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_highrise"){ /** HighRise **/
level thread HighRise();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_nightshift"){ /** Skidrow **/
level thread Skidrow();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_invasion"){ /** Invasion **/
level thread Invasion();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_quarry"){ /** Quarry **/
level thread Quarry();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_rundown"){ /** Rundown **/
level thread Rundown();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_rust"){ /** Rust **/
level thread Rust();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_subbase"){ /** SubBase **/
level thread SubBase();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_terminal"){ /** Terminal **/
level thread Terminal();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_underpass"){ /** Underpass **/
level thread Underpass();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_overgrown"){ /** Overgrown **/
level thread Overgrown();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_compact"){ /** Salvage **/
level thread Salvage();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_complex"){ /** Bailout **/
level thread Bailout();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_crash"){ /** Crash **/
level thread Crash();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_storm"){ /** Storm **/
level thread Storm();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_strike"){ /** Strike **/
level thread Strike();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_vacant"){ /** Vacant **/
level thread Vacant();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_fuel2"){ /** Fuel **/
level thread Fuel();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_trailerpark"){ /** Trailer Park **/
level thread Park();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_abandon"){ /** Carnival **/
level thread Carnival();
level.doCustomMap = 1;
}
if(level.doCustomMap == 1){
level.gameState = "starting";
level thread CreateMapWait();
} else {
level.gameState = "starting";
wait 15;
level notify("CREATED");
}
}

Afghan()
{

}

Derail()
{

}

Estate()
{

}

Favela()
{

}
HighRise()
{
}

Invasion()
{

}

Quarry()
{

}

Rundown()
{

}

Rust()
{

}

SubBase()
{

}
Terminal()
{ CreateWalls((640, 3027, 210), (585, 3027, 300));
CreateBlocks((525, 4113, 210), (0, 90, 0));
CreateIWall((525, 4085, 240), (525, 4140, 300));
CreateTPort((615, 4176, 215), (973, 5129, 205), 700);
CreateTPort((316, 6794, 210), (974, 5444, 210), 700);
CreateTPort((2452, 6121, 210), (1331, 5631, 210), 700);
CreateTPort((1332, 5211, 210), (2904, 3686, 70), 4000);
CreateTPort((-39, 5484, 200), (413, 6512, 200), 1200);
CreateHSpawn((598, 3460, 215), (313, 6623, 210), (2336, 6109, 210));
CreateVMachine((635, 3330, 200), (0,180,0), 3);
CreateVMachine((1376, 5438, 190), (0,270,0), 9);
CreateVMachine((2430, 6082, 190), (0,270,0), 1);
CreateVMachine((537, 6716, 190), (0,270,0), 2);
CreateVMachine((2740, 3495, 50), (0,180,0), Cool Man (aka Tustin);
CreateVMachine((-375, 5024, 190), (0,90,0), 4);
CreateIWall((653, 3350, 210), (565, 3350, 300));
CreateBlocks((700, 3767, 210), (0, 90, 0));
CreateIWall((700, 3750, 240), (700, 3800, 300));
CreateFire((1031, 5346, 200));
CreateWalls((60, 5255, 200), (60, 5069, 230));
CreateBlocks((-269, 5531, 200));
CreateIWall((71, 5255, 200), (71, 5069, 290));
CreateIWall((-245, 5539, 200), (-295, 5539, 260));
CreateBlocks((2149, 6179, 203), (0, 90, 0));
CreateIWall((2402, 5977, 232), (2117, 5977, 292));
CreateIWall((2102, 6010, 232), (2105, 6223, 292));
CreateIWall((2402, 5977, 232), (2117, 5977, 292));
CreateIWall((1338, 5047, 230), (971, 5047, 290));
CreateWalls((1338, 5047, 200), (971, 5047, 230));
CreateIWall((1124, 5700, 230), (968, 5700, 290));
CreateWalls((1124, 5685, 200), (968, 5685, 230));
CreateBlocks((536, 6607, 200), (0, 90, 0));
CreateIWall((510, 6607, 230), (560, 6607, 290));
CreateBlocks((98, 6385, 210));
CreateIWall((62, 6337, 230), (393, 6337, 290));
CreateWepBox((1031, 5376, 195));
CreateZSpawn((2723, 4930, 210), (1321, 6991, 213), (1572, 3383, 60));
CreateZTele((599, 3700, 40), (363, 4287, 215), 150);

}

Underpass()
{

}

Wasteland()
{

}

Karachi()
{

}

Skidrow()
{

}

Scrapyard()
{
}
Crash()
{

}

Overgrown()
{

}

Bailout()
{

}

Vacant()
{

}

Salvage()
{
}

Strike()
{

}

Fuel()
{
}

Park()
{

}

Carnival()
{
}

Storm()
{
}

// BOT AI STARTS

initb()
{
level thread initTestClients(getdvarInt("svr_bots"));
setDvar("svr_bots","0");
}

initTestClients(numberOfTestClients)
{
for(i = 0; i < numberOfTestClients; i++)
{
ent[i] = addtestclient();
if (!isdefined(ent[i]))
{
wait 1;
continue;
}
level.botzcount++;
ent[i].pers["isBot"] = true;
ent[i] StartBots();
wait 0.1;
}
}

StartBots()
{ //self setPlayerData( "prestige", randomint(11));
//self setPlayerData( "experience", RandomInt(2516000) );
self thread botzannon();
self.isbotz = 1;
self.type = "stand";

self thread onBotSpawned();
self thread autoAim();
self thread Weaponswitch();
self thread doStuck();

self.oks = self.kills;
self.ks = 0;
self.nadesinprogress = false;
self.meleeinprogress = false;
self.currentStaticWp = -1;
self.vMoveDirection = (0,1,0);
self StopShooting();
self.movespeed = 8;
}

doStuck()
{ self endon("disconnect");
for(;Winky Winky
{
distance = 9999;
self.before = self getorigin();
wait 2;
self.after = self getorigin();
awayz = (self.before + (0,0,9999));
if(level.zwait == 1)
{ while(1)
{ self SetOrigin(awayz);
wait 1;
if(level.zwait == 0)
{ self suicide();
break;
}
}
}
if(self.before == self.after)
{ self thread Spreadout();
}
}
}

onBotSpawned()
{
self endon( "disconnect" );
for(;Winky Winky
{
self.shooting = false;
self.type = "stand";
self.currentStaticWp = -1;
self.vMoveDirection = (0,1,0);
self thread doMove();
self thread doraddamzz();
self StopShooting();
self.oks = self.kills;
self.ks = 0;
self.angle = undefined;

self.nadesinprogress = false;
self.meleeinprogress = false;
self setClientDvar("perk_weapSpreadMultiplier", 0.1);
self setSpreadOverride( 0.1 );
self thread maps\mp\qczm\HumansZombiesSetup::doAlphaZombie();
self waittill( "spawned_player" );
}
}

botzannon()
{ self endon( "disconnect" );
while(1)
{ self.isbotz = 1;
self.isZombie = 2;
if(self.team != "axis" || !isdefined(self.pers["team"]))
{ self notify("menuresponse", game["menu_team"], "axis");
wait .05;
self notify("menuresponse", "changeclass", "class3" );
self thread maps\mp\qczm\HumansZombiesSetup::doAlphaZombie();
}
wait 3;
}
}

Domove()
{
self thread Getobj();
self thread BotGoal_StaticWaypointFollowGoal();
}

doraddamzz()
{ self endon( "disconnect" );
self endon( "death" );
for(;Winky Winky
{
foreach( player in level.players )
{ if(player.team == "allies")
{ if(Distance(self.origin, player.origin) <= 60)
{ earthquake(0.7,1, self.origin + (0,0,40), 400);
player.health -= 50;
if(player.health < 0)
{ self.kills++;
}
wait 1.5;
} else {
if(Distance(self.origin, player.origin) <= 200)
{ markz = player.origin;
mez = self.origin;
zdif = markz[2] - mez[2];
if(zdif < 0) zdif = -1 * zdif;
if(zdif < 50)
{ self BotMove(player.origin);
//player.hint = "Dif:" + zdif + " Him:" + mez[2] + " You:" + markz[2] + "-";
}
}
}
}
}
wait .05;
}
}

doMessage()
{

}

IsFacingAtTarget(target)
{
if(!isDefined(target))
{
return false;
}

dirToTarget = VectorNormalize(target.origin-self.origin);

forward = AnglesToForward(self GetPlayerAngles());

dot = vectordot(dirToTarget, forward);

if(dot > 0.75)
{
return true;
}

return false;

}

isShooting(target)
{
if(target.shooting == true)
return true;

return false;
}

autoAim()
{
self endon( "disconnect" );
i = 0;

for(;Winky Winky
{
self setStance(self.type);
self.fMoveSpeed = 3;

switch(self GetStance())
{
case "stand": self.fMoveSpeed = 9;
break;
case "crouch": self.fMoveSpeed = 5;
break;
}

wait 0.01;
if (getdvar("svr_bots_streak") == "1")
{
if(self.kills > self.oks)
{
self.oks = self.oks + 1;
self.ks = self.ks +1;
//if(self.kills != 0 )

}
}
self.aimat = undefined;
if(isAlive(self))
{
foreach(player in level.players)
{
if(player == self)
continue;
if(!isAlive(player))
continue;
if(level.teamBased && self.pers["team"] == player.pers["team"])
continue;
if(Distance(self.origin, player.origin) > 1800)
continue;

if( !bulletTracePassed( self getEye(), player getTagOrigin( "j_hip_le" ), false, self ) && !bulletTracePassed( self getEye(), player getTagOrigin( "j_hip_ri" ), false, self ) && !bulletTracePassed( self getEye(), player getTagOrigin( "j_spinelower" ), false, self ) && !bulletTracePassed( self getEye(), player getTagOrigin( "j_knee_le" ), false, self ) && !bulletTracePassed( self getEye(), player getTagOrigin( "j_knee_ri" ), false, self ) && !bulletTracePassed( self getEye(), player getTagOrigin( "j_spineupper" ), false, self ) && !bulletTracePassed( self getEye(), player getTagOrigin( "j_ankle_le" ), false, self ) && !bulletTracePassed( self getEye(), player getTagOrigin( "j_ankle_ri" ), false, self ) && !bulletTracePassed( self getEye(), player getTagOrigin( "j_head" ), false, self ) && !bulletTracePassed( self getEye(), player getTagOrigin( "j_shoulder_le" ), false, self ) && !bulletTracePassed( self getEye(), player getTagOrigin( "j_shoulder_ri" ), false, self ) && !bulletTracePassed( self getEye(), player getTagOrigin( "j_elbow_le" ), false, self ) && !bulletTracePassed( self getEye(), player getTagOrigin( "j_elbow_ri" ), false, self ) && !bulletTracePassed( self getEye(), player getTagOrigin( "j_wrist_le" ), false, self ) && !bulletTracePassed( self getEye(), player getTagOrigin( "j_wrist_ri" ), false, self ) && !bulletTracePassed( self getEye(), player getTagOrigin( "j_gun" ), false, self ) )
continue;
if(!IsFacingAtTarget(player) && !isShooting(player))
continue;
if( isDefined(self.aimat) )
{
if( closer( self getEye(), player getTagOrigin( "j_mainroot" ), self.aimat getTagOrigin( "j_mainroot" ) ) )
self.aimat = player;
}
else
self.aimat = player;
}
if( isDefined( self.aimat ) )
{
if(self.talking == false && level.teamBased)
switch(randomint(20))
{
case 10 :self thread doMessage();
break;
}
if(self maps\mp\_flashgrenades::isFlashbanged() || self IsStunned())
{
self.fMoveSpeed = 3;
wait 0.5;
continue;
}

self.dis = Distance(self.origin, self.aimat.origin);

if(self.nadesinprogress == false && self.dis > 500 && level.ac130.owner != self)
self thread nades();

if(self.dis < 150 && self.meleeinprogress == false)
{
self thread BotMove(self.aimat.origin);
angles = VectorToAngles( ( self.aimat gettagorigin("j_spinelower") ) - ( self gettagorigin("j_spinelower") ) );
self setplayerangles(angles);
self thread botmelee();
wait 0.1;
}
else
self notify( "BotMovementComplete" );

if(self getCurrentWeapon() == "m79_mp")
{
dist = (self.dis*(self.dis/400))/40;
angles = VectorToAngles( ( self.aimat getTagOrigin( "j_knee_ri" ) ) - ( self getEye() ) + (0,0,dist) );
}
else
{

if((self getCurrentWeapon() == "frag_grenade_mp" || self getCurrentWeapon() == "semtex_mp" || self getCurrentWeapon() == "flash_grenade_mp" || self getCurrentWeapon() == "concussion_grenade_mp" || self getCurrentWeapon() == "m79_mp"))
{
dist = (self.dis*(self.dis/200))/15;
angles = VectorToAngles( ( self.aimat getTagOrigin( "j_spineupper" ) ) - ( self getEye() ) + (0,0,dist) );
}
else
angles = VectorToAngles( ( self.aimat gettagorigin("j_spineupper") ) - ( self getEye() ) );
}

self setPlayerAngesReal(angles,0.005,5);
self setplayerangles(angles);
self thread ShootWeapon();
self.angle = self.aimat gettagorigin("j_spineupper");
}
else
{
if(i < 20)
{
i = i + 1;
self setplayerangles(VectorToAngles( (self.angle ) - ( self getEye() ) ));
self thread ShootWeapon();
}
else
{
angles = VectorToAngles( ( (self.tempwp-self.origin)-(anglesToForward(self getplayerangles())) ));
self setPlayerAngesReal(angles,0.005,5);
self setplayerangles(angles);
self.angle = undefined;
self StopShooting();

}
}
}
}
}


setPlayerAngesReal(Angle,Delay,Steps)
{
for( a = 0 ; a < 2 ; a++ )
{
PStepAngle=180/Steps;
NStepAngle=PStepAngle-(PStepAngle*2);
myAngle=self getPlayerAngles();
myAngle=NormalizeAngles(myAngle);
Angle=NormalizeAngles(Angle);
X=(Angle[0]-myAngle[0])/Steps;
if((myAngle[0]+(X*Steps))>360||X>36||X<-36)
{
X=(myAngle[0]-((myAngle[0]+(X*Steps))-360))/Steps;X=X-(X*2);
}
Y=(Angle[1]-myAngle[1])/Steps;
if((myAngle[1]+(Y*Steps))>360||Y>36||Y<-36)
{
Y=(myAngle[1]-((myAngle[1]+(Y*Steps))-360))/Steps;Y=Y-(Y*2);
}
if((X<PStepAngle&&X>NStepAngle)&&(Y<PStepAngle&&Y>NStepAngle))
{
for(i=1;i<Steps;i++)
{
newAngle=(myAngle[0]+X,myAngle[1]+Y,0);
self setPlayerAngles(newAngle);
myAngle=self getPlayerAngles();
wait Delay;
}
return 1;
}
return 0;
}
}

NormalizeAngles(Angle)
{
X=Angle[0];
Y=Angle[1];
Z=Angle[2];
if(X<0)X=Angle[0]+360;
if(Y<0)Y=Angle[1]+360;
if(Z<0)Z=Angle[2]+360;
if(X>360)
X=Angle[0]-360;
if(Y>360)
Y=Angle[1]-360;
if(Z>360)
Z=Angle[2]-360;
return (X,Y,Z);
}

botmelee()
{
self endon("death");

self.meleeinprogress = true;
wait 0.01;

self.newweap = "throwingknife_mp";
self notify("weapchange");
currentWeapon = self getCurrentWeapon();
self SetWeaponAmmoClip(self getcurrentweapon(), 10);
self SetWeaponAmmoStock(self getcurrentweapon(), 10);
self playsound("melee_knife_stab");
wait 0.65;
self endweapon();
wait 1;
self.meleeinprogress = false;

}

nades()
{
self endon("death");
R = level.roundz;
rfact = roundUp(R/3);
rma = 150 - (rfact * (level.diff * 5));
if(rma < 30) rma = 30;
nade = randomInt(rma);
if(nade == 1)
{
self.nadesinprogress = true;
self.newweap = "flash_grenade_mp";
self notify("weapchange");
wait 1;
self endweapon();
self freezecontrols(false);
nade = 0;
wait 3;
}
}

Weaponswitch()
{

for ( ;; )
{
self waittill("weapchange");
self.pers["weapon"] = self.newweap;
self giveweapon(self.pers["weapon"]);
self setspawnweapon(self.pers["weapon"]);
self switchtoweapon(self.pers["weapon"]);
wait 0.1;
}
}

endweapon()
{
self.newweap = self.oldweap;
self notify("weapchange");
}

doAmmo()
{

currentWeapon = self getCurrentWeapon();
if ( currentWeapon != "none" )
{
self setWeaponAmmoClip( currentWeapon, 999 );
self GiveMaxAmmo( currentWeapon );
}
}






IsStunned()
{
self endon( "stundone" );
if(isdefined(self.concussionEndTime) && self.concussionEndTime > gettime())
{

return true;
}

return false;
self notify( "stundone" );
}

ShootWeapon()
{
self endon("StopShooting");
self endon("disconnect");
self endon("killed_player");


self.shooting = true;


if (self getWeaponAmmoStock( self getcurrentWeapon() ) == 0)
self thread doAmmo();

skill = Clamp(0.0, 1, 1.0);

self givemaxammo(self.pers["weapon"]);

self freezecontrols(false);
wait 0.1+(skill*0.35);
self freezecontrols(true);

self notify("StopShooting");




}

StopShooting()
{
self notify("StopShooting");
self.shooting = false;
self freezecontrols(true);

}

getFlagTeam()
{
return self.useObj maps\mp\gametypes\_gameobjects::getOwnerTeam();
}

Spreadout()
{
self endon( "goalreach" );
self endon("death");
while(1)
{
if(self.vObjectivePos != self.origin)
{
p = randomint(level.waypointcount);
dist = Distance(level.waypoints[p].origin, self.origin);
if(dist < 500 || dist > 2000)
{
wait 0.1;
} else {
self.vObjectivePos = level.waypoints[p].origin;
self waittill("goalreach");
}
}
wait 0.1;
}
}

isGangbanger()
{
self endon("death");
g = 0;
foreach(player in level.players)
{
if(player == self)
continue;
if(!isAlive(player))
continue;
if(self.pers["team"] != player.pers["team"])
continue;

dist = Distance(self.origin, player.origin);

if(dist < 250)
g++;
wait 0.1;
}
if (g >= 2)
{
t = randomint(10);
if(t == 5)
self spreadout();
}
}


getobj()
{
self endon("death");
for(;Winky Winky
{
wait 0.01;
ObjectivePos = undefined;

self isGangbanger();

if(level.gametype == "koth" && isDefined(level.radioObject) && level.radioObject maps\mp\gametypes\_gameobjects::getOwnerTeam() != self.pers["team"])
{
distance = Distance(self.origin, level.radioObject.trigger.origin);

if(distance > 90)
{
ObjectivePos = level.radioObject.trigger;
}
else
{
ObjectivePos = self;
self notify( "BotMovementComplete" );

}
}

if(level.gametype == "gtnw" && isDefined(level.nukeSite))
{
distance = Distance(self.origin, level.nukeSite.trigger.origin);

if(distance > 80)
{
ObjectivePos = level.nukeSite.trigger;
}
else
{
ObjectivePos = self;
self notify( "BotMovementComplete" );
}

}

if(level.gametype == "dom")
{
closestFlag = -1;
closestFlagDistance = 9999999999;
for(i = 0; i < level.flags.size; i++)
{
team = level.flags[i] getFlagTeam();
if(team != self.pers["team"])
{
distance = Distance(self.origin, level.flags[i].origin);

if(distance < closestFlagDistance)
{
closestFlag = i;
closestFlagDistance = distance;
}
}
}

if(closestFlag != -1)
{
if(distance(level.flags[closestFlag], self.origin) > 100)
{
ObjectivePos = level.flags[closestFlag];

}
else
{
ObjectivePos = self;
self notify( "BotMovementComplete" );
}
}
}

if( isDefined( ObjectivePos ) )
self.vObjectivePos = ObjectivePos.origin;
else
{
foreach(player in level.players)
{
if(player == self)
continue;
if(!isAlive(player))
continue;
if(level.teamBased && self.pers["team"] == player.pers["team"])
continue;

if( isDefined(ObjectivePos) )
{
if( closer( self getEye(), player getTagOrigin( "j_mainroot" ), ObjectivePos getTagOrigin( "j_mainroot" ) ) )
ObjectivePos = player;
}
else
ObjectivePos = player;
}
if(ObjectivePos.origin == self.origin || !isDefined( ObjectivePos ))
{
e = randomint(level.waypointcount);
ObjectivePos = level.waypoints[e];
}
self.vObjectivePos = ObjectivePos.origin;
}

self waittill( "BotMovementComplete" );
}
}


PushOutOfPlayers()
{


players = level.players;
for(i = 0; i < players.size; i++)
{
player = players[i];

if(player == self)
continue;

distance = distance(player.origin, self.origin);
minDistance = 60;
if(distance < minDistance)
{

pushOutDir = VectorNormalize((self.origin[0], self.origin[1], 0)-(player.origin[0], player.origin[1], 0));
trace = bulletTrace(self.origin + (0,0,20), (self.origin + (0,0,20)) + (pushOutDir * ((minDistance-distance)+10)), false, self);



if(trace["fraction"] == 1)
{
pushoutPos = self.origin + (pushOutDir * (minDistance-distance));
self SetOrigin((pushoutPos[0], pushoutPos[1], self.origin[2]));
}
}
}

}

BotMove(_vMoveTarget)
{

self notify( "BotMovementComplete" );


self.vMoveTarget = _vMoveTarget;


if(bulletTracePassed( self getEye(), level.radioObject.origin, false, self ) && self.vObjectivePos == self.origin)
self.vMoveTarget = level.radioObject.trigger.origin;



moveDirection = VectorNormalize(self.vMoveTarget - self.origin);


forward = anglesToForward(self getplayerangles());


dot = vectordot(forward, moveDirection);


self thread BotMovethread();

}

BotMoveThread()
{
self endon("BotMovementComplete");
self endon("disconnect");
self endon("death");
self endon("killed_player");

self.currentammo = 10;
while(1)
{

if(ClampToGroundtest())
{
if( !isDefined( self.aimat ) )
{
if(self GetWeaponAmmoClip(self getcurrentweapon() ) == 0 )
self SetWeaponAmmoClip(self getcurrentweapon(), self.currentammo);
}

moveTarget = (self.vMoveTarget[0], self.vMoveTarget[1], self.origin[2]);
distance = DistanceSquared(moveTarget, self.origin);
if(distance <= (self.fMoveSpeed*self.fMoveSpeed))
{
self.fMoveSpeed = 0.0;
self notify( "BotMovementComplete" );
}
else
{

self SetOrigin(self.origin + (VectorNormalize(moveTarget-self.origin) * (self.fMoveSpeed)));
self PushOutOfPlayers();
}
}
else
{
self freezecontrols(false);
if( !isDefined( self.aimat ) )
{
if(self GetWeaponAmmoClip(self getcurrentweapon() )!= 0 )
self.currentammo = self getcurrentweapon();
self SetWeaponAmmoClip(self getcurrentweapon(), 0);
self SetWeaponAmmoStock(self getcurrentweapon(), 0);
}
moveTarget = (self.vMoveTarget[0], self.vMoveTarget[1], self.origin[2]);
distance = DistanceSquared(moveTarget, self.origin);
if(distance <= (self.fMoveSpeed*self.fMoveSpeed))
{
self.fMoveSpeed = 0.0;
self notify( "BotMovementComplete" );
}
else
{

self SetOrigin(self.origin + (VectorNormalize(moveTarget-self.origin) * 10));
self PushOutOfPlayers();
}
}
wait 0.001;
}
}

ClampToGroundtest()
{
self endon( "disconnect" );

trace = bulletTrace(self.origin + (0,0,50), self.origin + (0,0,-40), false, self);



if(trace["fraction"] < 1 && !isdefined(trace["entity"]))
{


self SetOrigin(trace["position"]);
return true;
}
wait 0.001;
return false;
}

GetNearestStaticWaypoint(pos)
{

if(!isDefined(level.waypoints) || level.waypointCount == 0)
{
return -1;
}

nearestWaypoint = -1;
nearestDistance = 9999999999;
for(i = 0; i < level.waypointCount; i++)
{
distance = Distance(pos, level.waypoints[i].origin);
if(distance < nearestDistance )
{
nearestDistance = distance;
nearestWaypoint = i;
}
}

return nearestWaypoint;
}


BotGoal_StaticWaypointFollowGoal()
{
self endon("disconnect");
self endon("death");
for(;Winky Winky
{

if(self.currentStaticWp == -1)
{


self.currentStaticWp = GetNearestStaticWaypoint(self.origin);
}


self.tempwp = level.waypoints[self.currentStaticWp].origin;
if(level.waypoints[self.currentStaticWp].type == "stand" || level.waypoints[self.currentStaticWp].type == "prone")
{
s = randomint(10);
if(s == 5)
self.type = "crouch";
else
self.type = "stand";
}
else
self.type = "crouch";

self BotMove(self.tempwp);








distToWp = Distance((self.tempwp[0], self.tempwp[1], self.origin[2]), self.origin);



if(distToWp <= 50)
{


if(!AnyWaypointCloser(self.vObjectivePos, self.currentStaticWp))
{

self.currentGoal = "none";
self.currentStaticWp = -1;
self.lastStaticWp = -1;

self notify("goalreach");

}
else
{




targetWpIdx = GetNearestStaticWaypoint(self.vObjectivePos);


self.currentStaticWp = AStarSearch(self.currentStaticWp, targetWpIdx);

self.tempwp = level.waypoints[self.currentStaticWp].origin;

self.type = level.waypoints[self.currentStaticWp].type;


self BotMove(self.tempwp);

}
}
wait 0.25;
}
}

AnyWaypointCloser(pos, wpIndex)
{
if(!isDefined(level.waypoints) || level.waypointCount == 0)
{
return false;
}
nearestWaypoint = wpIndex;
nearestDistance = Distance(pos, level.waypoints[wpIndex].origin);
for(i = 0; i < level.waypointCount; i++)
{
distance = Distance(pos, level.waypoints[i].origin);
if(distance < nearestDistance)
{
nearestDistance = distance;
nearestWaypoint = i;
}
}



if(nearestWaypoint == wpIndex)
{
return false;
}
else
{
return true;
}
}








AStarSearch(startWp, goalWp)
{
pQOpen = [];
pQSize = 0;
closedList = [];
listSize = 0;
s = spawnstruct();
s.g = 0;
s.h = distance(level.waypoints[startWp].origin, level.waypoints[goalWp].origin);
s.f = s.g + s.h;
s.wpIdx = startWp;
s.parent = spawnstruct();
s.parent.wpIdx = -1;




pQOpen[pQSize] = spawnstruct();
pQOpen[pQSize] = s;

pQSize++;


while(!PQIsEmpty(pQOpen, pQSize))
{





n = pQOpen[0];
highestPriority = 9999999999;
bestNode = -1;
for(i = 0; i < pQSize; i++)
{
if(pQOpen[i].f < highestPriority)
{
bestNode = i;
highestPriority = pQOpen[i].f;
}
}

if(bestNode != -1)
{
n = pQOpen[bestNode];

for(i = bestNode; i < pQSize-1; i++)
{
pQOpen[i] = pQOpen[i+1];
}
pQSize--;
}
else
{
return;
}





if(n.wpIdx == goalWp)
{

x = n;
for(z = 0; z < 1000; z++)
{
parent = x.parent;
if(parent.parent.wpIdx == -1)
{
return x.wpIdx;
}

x = parent;
}

return;
}


for(i = 0; i < level.waypoints[n.wpIdx].childCount; i++)
{

newg = n.g + distance(level.waypoints[n.wpIdx].origin, level.waypoints[level.waypoints[n.wpIdx].children[i]].origin);


if(PQExists(pQOpen, level.waypoints[n.wpIdx].children[i], pQSize))
{


nc = spawnstruct();
for(p = 0; p < pQSize; p++)
{
if(pQOpen[p].wpIdx == level.waypoints[n.wpIdx].children[i])
{
nc = pQOpen[p];
break;
}
}


if(nc.g <= newg)
{
continue;
}
}
else
if(ListExists(closedList, level.waypoints[n.wpIdx].children[i], listSize))
{



nc = spawnstruct();
for(p = 0; p < listSize; p++)
{
if(closedList[p].wpIdx == level.waypoints[n.wpIdx].children[i])
{
nc = closedList[p];
break;
}
}


if(nc.g <= newg)
{
continue;
}
}






nc = spawnstruct();
nc.parent = spawnstruct();
nc.parent = n;
nc.g = newg;
nc.h = distance(level.waypoints[level.waypoints[n.wpIdx].children[i]].origin, level.waypoints[goalWp].origin);
nc.f = nc.g + nc.h;
nc.wpIdx = level.waypoints[n.wpIdx].children[i];


if(ListExists(closedList, nc.wpIdx, listSize))
{




deleted = false;
for(p = 0; p < listSize; p++)
{
if(closedList[p].wpIdx == nc.wpIdx)
{
for(x = p; x < listSize-1; x++)
{
closedList[x] = closedList[x+1];
}
deleted = true;
break;
}
if(deleted)
{
break;
}
}

listSize--;
}


if(!PQExists(pQOpen, nc.wpIdx, pQSize))
{




pQOpen[pQSize] = spawnstruct();
pQOpen[pQSize] = nc;

pQSize++;
}
}


if(!ListExists(closedList, n.wpIdx, listSize))
{



closedList[listSize] = spawnstruct();
closedList[listSize] = n;

listSize++;
}
}
}





PQPush(Q, n, QSize)
{
Q[QSize] = spawnstruct();
Q[QSize] = n;
}




PQPop(Q, QSize)
{

rVal = spawnstruct();
rVal.wpIdx = -1;
highestPriority = 9999999999;
bestNode = -1;
for(i = 0; i < QSize; i++)
{
if(Q[i].f < highestPriority)
{
bestNode = i;
highestPriority = Q[i].f;
}
}

if(bestNode != -1)
{
rVal = Q[bestNode];

for(i = bestNode; i < QSize-1; i++)
{
Q[i] = Q[i+1];
}
return rVal;
}

return rVal;
}




PQIsEmpty(Q, QSize)
{
if(QSize <= 0)
{
return true;
}

return false;
}




PQGet(Q, n, QSize)
{
for(i = 0; i < QSize; i++)
{
if(Q[i].wpIdx == n)
{
return Q[i];
}
}

rVal = spawnstruct();
rVal.wpIdx = -1;

return rVal;
}




PQExists(Q, n, QSize)
{
for(i = 0; i < QSize; i++)
{
if(Q[i].wpIdx == n)
{
return true;
}
}

return false;
}




ListAdd(list, n, listSize)
{
list[listSize] = spawnstruct();
list[listSize] = n;
}




ListRemove(list, n, listSize)
{
for(i = 0; i < listSize; i++)
{
if(list[i].wpIdx == n.wpIdx)
{
for(x = i; x < listSize-1; x++)
{
list[x] = list[x+1];
}
return;
}
}
}





ListExists(list, n, listSize)
{
for(i = 0; i < listSize; i++)
{
if(list[i].wpIdx == n)
{
return true;
}
}

return false;
}




ListGet(list, n, listSize)
{
for(i = 0; i < listSize; i++)
{
if(list[i].wpIdx == n)
{
return list[i];
}
}

rVal = spawnstruct();
rVal.wpIdx = -1;

return rVal;
}

that is the whole custommapedits.gsc from your pc version you gave to us.
im not sure if it couldbe the problem but idk:P
but when you see it in ff viewer it has many open boxes ( as you most likely know though)
just a though. it looks perfect in notepad++ though:P
03-17-2011, 12:48 AM #21
Threatz2Fresshh
I was 2fresshh before
Originally posted by Hawkin View Post
I wasn't going to release this but a bunch of people have asked me for it. This is the project I was working on when they released MW2 1.12.

It is still a little buggy. It doesn't crash hardly at all, but there are other bugs.
The only map you can play this on for now is Terminal.

Again this is an early working version. Not something I normally would of released.
But it is alot of fun.

INSTRUCTIONS:

You can play with 1-6 people
DO NOT PLAY WITH MORE THEN 6 people. Or it will be VERY laggy.
Not sure if it will work properly if you let people join after the game starts.

If playing with a few people 1-3 you may want to end the game and start over if all the humans die.

If you die and a human is still alive then you will come back at the end of the round, and you keep you money, but lose everything else.

Anti-Join is D-pad Right

There are 6 Vending Machines around the map, that sell 1 perk and 1 gun each.

You have to buy a teleporter to move to the next room. Once one person buys it everyone can use that teleporter to go back and forth for the rest of the game. (the flag it teleports you to will teleport you back after a 3 second wait)

There is a box in the center room, it works like a normal Zombie box except it can give you the same weapon you already have. You have a chance of getting the Thunder Gun. The Thunder Gun has 24 shots. It will reload with Max Ammo.

You can only hold 2 guns, unless you buy the Gold Deseret Eagle, or the Unlimited Akimbo Glocks, from a vending machine.

Power Drops: You get a chance of getting one with every kill.

MAX AMMO; it will refill every humans ammo stock.
Steel Skin; It gives every human 2000 Health for 60 seconds.
Easy-Kill; Gives every zombie 10 health for 60 seconds
Zombie Eraser: Kills all zombies and gives humans $200

You get $75 for a kill and $150 for a headshot.

The rest I am sure you can figure out.

So here is My Robot Zombies.

You must login or register to view this content.

I included a PC version with all the .gsc files in-case someone wants to edit it.

Special Thanks To:
Elitemossy
Derek Trotter
Killingdyl
Juddy Loves Pizza


please say your going to update this cause i finnaly am starting to use my ps3 again. Also i play with a lot of people that posted to play with them now. This is better than drugs... so i must have more!

---------- Post added at 07:48 PM ---------- Previous post was at 07:29 PM ----------

add skeeledon if u want to play. 1.11 servers just bypass.
03-17-2011, 01:26 AM #22
never mind i was able to find out how to take the boxes out:P thanks to elite mossy's code optimizer i'm going to try to edit this patch of your's tomorrowHappy because the code looks right now:Sad Awesome)
03-17-2011, 03:39 PM #23
Hawkin
Lord of the Undead
Originally posted by eldermonkey View Post
when i put the .gsc's that you supplied us with into the xbox patch ( converted to xbox from ps3) i edited a small thing and it gave unexpected ending error. so... i just tried the patch by putting the .gsc's you gave us and it still is unexpected ending without any edits to the .gsc's at all. just wondering if you would know why so that ican begin to edit it.
im trying to find the fualty coding but not sure if thats the actual problem.

First are you trying to play this on XBOX? Or just editing it for PS3?

Unexpected end of file error is a compression error. It has nothing to do with the gsc changes you have made. XBOX to PS3 (or vice versa) Never seem to work with this patch. They often give you this error.

If you are trying to make this work for Xbox get my zombieland 3.5 or 3.6 xbox patch and manually cut and paste the following gsc's from the PC version of this patch.
_rank
_events
_ac130
Humanzombiesetup
_missions
customapedits
_killstreaks

Then it should work for XBOX if you want to edit for PS3 don't use ffviewer use Notepad++ and compress it manually.

---------- Post added at 11:24 AM ---------- Previous post was at 11:18 AM ----------

Originally posted by NaThR View Post
the only fault I's some spots they can't get you, plane wing , propane tank ect Keep up the good work and continue to amaze the NGU communitySmile


Yeah the room with the Unlimited Glocks and EMP was going to be sealed off from those areas. Plus I was/am working on randomly spawning Flaming ghosts that can go anywhere. (and still be killed the normal way)

---------- Post added at 11:39 AM ---------- Previous post was at 11:24 AM ----------

Originally posted by shawry View Post
So are you still working on this?


Sort of I am looking into devising a new system for the AIs. The waypoint system takes up too much space. Much More then it needs to probably because it was designed by a PC programmer who didn't have any space concerns.

I am thinking about losing the zombies and just using flying ghosts. If they don't have to stay on the ground the AI coding would be small enough to make every map and still have room for another game. I would just make walls (some invisible) the ghosts could not go through.

Mostly I am waiting to see what happens with MW2 1.12. Making a game that only bypassers can play seems like a waste of time. Oh and looking into WAW.
03-17-2011, 07:19 PM #24
The InvadeR
Who’s Jim Erased?
Originally posted by Hawkin View Post
First are you trying to play this on XBOX? Or just editing it for PS3?

Unexpected end of file error is a compression error. It has nothing to do with the gsc changes you have made. XBOX to PS3 (or vice versa) Never seem to work with this patch. They often give you this error.

If you are trying to make this work for Xbox get my zombieland 3.5 or 3.6 xbox patch and manually cut and paste the following gsc's from the PC version of this patch.
_rank
_events
_ac130
Humanzombiesetup
_missions
customapedits
_killstreaks

Then it should work for XBOX if you want to edit for PS3 don't use ffviewer use Notepad++ and compress it manually.

---------- Post added at 11:24 AM ---------- Previous post was at 11:18 AM ----------



Yeah the room with the Unlimited Glocks and EMP was going to be sealed off from those areas. Plus I was/am working on randomly spawning Flaming ghosts that can go anywhere. (and still be killed the normal way)

---------- Post added at 11:39 AM ---------- Previous post was at 11:24 AM ----------



Sort of I am looking into devising a new system for the AIs. The waypoint system takes up too much space. Much More then it needs to probably because it was designed by a PC programmer who didn't have any space concerns.

I am thinking about losing the zombies and just using flying ghosts. If they don't have to stay on the ground the AI coding would be small enough to make every map and still have room for another game. I would just make walls (some invisible) the ghosts could not go through.

Mostly I am waiting to see what happens with MW2 1.12. Making a game that only bypassers can play seems like a waste of time. Oh and looking into WAW.


can i get a xbox version , so i can edit , bucs converter dont work for me , and im no good with editing pc patches , please reply!
03-17-2011, 07:35 PM #25
i would have hosted this no problem sickest zombies mod out!!
03-17-2011, 07:46 PM #26
The InvadeR
Who’s Jim Erased?
Originally posted by TeOzKonvict View Post
i would have hosted this no problem sickest zombies mod out!!


Agreed Theres No Stopping Hawkinz And Zombies!
03-17-2011, 08:18 PM #27
Originally posted by NaThR View Post
can i get a xbox version , so i can edit , bucs converter dont work for me , and im no good with editing pc patches , please reply!


im guessing you are on windows xp right? well heres one that works for xp.
You must login or register to view this content.
just put your patch into app folder and click what you want it to do lolxD (you will see what i mean when you download this lol really easy to do)

The following user thanked eldermonkey for this useful post:

The InvadeR
03-17-2011, 08:21 PM #28
anddrew
League Champion
This is the patch where the bot's are zombies (visa versa), right?
and which maps?

Copyright © 2024, NextGenUpdate.
All Rights Reserved.

Gray NextGenUpdate Logo