PDA

View Full Version : Revival of the close of the team hunters.



Moczulak
19th October 2012, 11:24
Hi all. I do not know how to rewrite the script so that the team of zombies appeared from 500 units hunters team, but at the same time so that a single player zombies appear close to zombie team. Please help me.

This is my script:



getSpawnpoint_NearTeam(spawnpoints)
{
if(!isdefined(spawnpoints))
return undefined;

aliveplayers = undefined;

players = getentarray("player", "classname");
for(i = 0; i < players.size; i++)
{
player = players[i];

if(player.sessionstate == "spectator" || player.sessionstate == "dead" || player == self)
{
continue;
}

aliveplayers = add_to_array(aliveplayers, player);
}

bestposition = undefined;

if(isdefined(aliveplayers))
{
distlargest = -33554432;

for(i = 0; i < spawnpoints.size; i++)
{
if(positionWouldTelefrag(spawnpoints[i].origin))
continue;

if(isdefined(self.lastspawnpoint) && self.lastspawnpoint == spawnpoints[i])
continue;

dist = 0;

for(j = 0; j < aliveplayers.size; j++)
{
if(aliveplayers[j].pers["team"] == self.pers["team"])
dist = dist - (distance(spawnpoints[i].origin, aliveplayers[j].origin) <= 100);
else
dist = dist + (distance(spawnpoints[i].origin, aliveplayers[j].origin) >= 500);
}

if(dist > distlargest)
{
distlargest = dist;
bestposition = spawnpoints[i];
}
}

spawnpoint = bestposition;
}
else
{
spawnpoint = getSpawnpoint_Random(spawnpoints);
}

self.lastspawnpoint = spawnpoint;
return spawnpoint;
}

kung foo man
19th October 2012, 11:43
Hey Moczulak, got some old code for it. Once written for my NO-DL-Zombies-Mod:




getSpawnpoints()
{
spawnpoints = getentarray("mp_dm_spawn", "classname");
spawns = [];
for (i=0; i<spawnpoints.size; i++)
{
spawns[i] = spawnstruct();
spawns[i].origin = spawnpoints[i].origin;
spawns[i].angles = spawnpoints[i].angles;
}
spawnpoints = getentarray("mp_tdm_spawn", "classname");
for (i=0; i<spawnpoints.size; i++)
{
spawns[i] = spawnstruct();
spawns[i].origin = spawnpoints[i].origin;
spawns[i].angles = spawnpoints[i].angles;
}
return spawns;
}
getActiveHunters()
{
hunters = getentarray("player", "classname");
activeHunters = [];
for (i=0; i<hunters.size; i++)
{
hunter = hunters[i];
if (hunter.pers["team"] == "allies")
if (hunter.sessionstate == "playing")
activeHunters[activeHunters.size] = hunter;
}
return activeHunters;
}
findSpawnpoint()
{
spawnpoints = getSpawnpoints();
activeHunters = getActiveHunters();

if (activeHunters.size == 0)
{
// todo: pick random!
spawnpoint = spawnpoints[0];
return spawnpoint;
}

// find the nearest hunter for each spawnpoint
for (i=0; i<spawnpoints.size; i++)
{
spawnpoint = spawnpoints[i];
for (j=0; j<activeHunters.size; j++)
{
hunter = activeHunters[j];
dist = distance(hunter.origin, spawnpoint.origin);

if (!isDefined(spawnpoint.nearestHunter))
{
spawnpoint.nearestHunter = dist;
} else if (dist < spawnpoint.nearestHunter) {
spawnpoint.nearestHunter = dist;
}
}
}

bestSpawnpoint = spawnpoints[0];
// first find the worst spawnpoint (furthest away)
for (i=1; i<spawnpoints.size; i++)
{
spawnpoint = spawnpoints[i];
if (spawnpoint.nearestHunter > bestSpawnpoint.nearestHunter)
bestSpawnpoint = spawnpoint;
}
// now get better each iteration (further than 1000 units but nearer then the best)
for (i=1; i<spawnpoints.size; i++)
{
spawnpoint = spawnpoints[i];
if (spawnpoint.nearestHunter > 1000)
if (spawnpoint.nearestHunter < bestSpawnpoint.nearestHunter)
bestSpawnpoint = spawnpoint;
}
return bestSpawnpoint;
}


Ok, findSpawnpoint() is returning:
- a struct with origin,angles
- zombies is further away then 1000 (to give hunters a change)
- spawnpoint is NEAREST to 1000 (so they dont need to walk to much -> action :D)

I hope it helps you out.

Moczulak
19th October 2012, 11:58
In the Zom :: spawnPlayer () I have the three lines:


spawnpointname = "mp_tdm_spawn";
spawnpoints = getentarray(spawnpointname, "classname");
spawnpoint = files\maps\gametypes\_spawnlogic::getSpawnpoint_Ne arTeam(spawnpoints);

I swapped them for:


files\maps\gametypes\_spawnlogic::findSpawnpoint() ;

And not work ,show up in the air and fall, or show up out of the ground.

kung foo man
19th October 2012, 12:22
I call it like this:



zombieSpawn(position, angles)
{
player = self;

player playsound("grenade_explode_dirt");
playfx(level.fx["large_mud"], position);

player spawn(position+(0,0,0/*-80*/),angles);
}




spawnpoint = findSpawnpoint();
//if (isDefined(spawnpoint.nearestHunter))
// iprintln("[DEBUG] spawnpoint.nearestHunter: " + spawnpoint.nearestHunter);
//else
// iprintln("[DEBUG] spawnpoint.nearestHunter: not defined");

self thread zombieSpawn(spawnpoint.origin, spawnpoint.angles);

Moczulak
19th October 2012, 12:30
It works ,very thanks man :)