serthy writes...Quote:
without knowing the mod we cannot really help you!
you should contact the modder or other mappers for that...
i guess you dont need any scrip_brushmodels, i thin they should be script_models instead
I looked into a botzom map's bsp file, with a text editor, and at the bottom of it there was it:
Code:
{
"targetname" "wd0"
"classname" "trigger_damage"
"model" "*10"
}
{
"targetname" "wc0"
"classname" "script_brushmodel"
"model" "*11"
}
{
"targetname" "zd0"
"classname" "trigger_damage"
"model" "*12"
}
{
"targetname" "zc0"
"classname" "script_brushmodel"
"model" "*13"
}
{
"targetname" "wd1"
"classname" "trigger_damage"
"model" "*14"
}
{
"targetname" "wc1"
"classname" "script_brushmodel"
"model" "*15"
}
{
"targetname" "zd1"
"classname" "trigger_damage"
"model" "*16"
}
{
"targetname" "zc1"
"classname" "script_brushmodel"
"model" "*17"
}
{
"targetname" "wd2"
"classname" "trigger_damage"
"model" "*18"
}
{
"targetname" "wc2"
"classname" "script_brushmodel"
"model" "*19"
}
{
"targetname" "zd2"
"classname" "trigger_damage"
"model" "*20"
}
{
"targetname" "zc2"
"classname" "script_brushmodel"
"model" "*21"
}
etc...
and in the scripts i have:
I think this responds for making the zombies damage triggers and spawning them on dm spawns:
Code:
for(i=0;i<32;i++)
{
level.zombies[i]=false;
level.wolves[i]=false;
getent("zd"+i,"targetname") enablelinkto();
getent("wd"+i,"targetname") enablelinkto();
getent("zc"+i,"targetname").origin=(0,0,20000);
getent("wc"+i,"targetname").origin=(0,0,20000);
getent("zd"+i,"targetname").origin=(0,0,20000);
getent("wd"+i,"targetname").origin=(0,0,20000);
getent("zd"+i,"targetname") hide();
getent("wd"+i,"targetname") hide();
getent("zc"+i,"targetname") hide();
getent("wc"+i,"targetname") hide();
}
for(i=level.maxzom;i<32;i++)
{
getent("zd"+i,"targetname") delete();
getent("wd"+i,"targetname") delete();
getent("zc"+i,"targetname") delete();
getent("wc"+i,"targetname") delete();
}
level.spawns=getentarray("mp_dm_spawn","classname");
loadnodes();
and this (loadnodes) for moving the zombies:
Code:
loadnodes()
{
nodes=getentarray("node","targetname");
level.nodes=[];
for(i=0;i<nodes.size;i++)
{
level.nodes[i]=spawnstruct();
level.nodes[i].origin=nodes[i].origin+(0,0,1);
level.nodes[i].arcs=[];
level.nodes[i].dists=[];
for(j=0;j<nodes.size;j++)
if(j!=i && sighttracepassed(nodes[i].origin+(0,0,1),nodes[j].origin+(0,0,1),false,undefined))
{
level.nodes[i].arcs[level.nodes[i].arcs.size]=j;
level.nodes[i].dists[level.nodes[i].dists.size]=distancesquared(nodes[i].origin,nodes[j].origin);
}
}
level.routes=[];
for(i=0;i<level.nodes.size;i++) level.routes[i]=[];
level.routedists=[];
for(i=0;i<level.nodes.size;i++) level.routedists[i]=[];
for(n=0;n<level.nodes.size;n++)
{
d=[];
p=[];
done=[];
for(i=0;i<level.nodes.size;i++) d[i]=100000000;
for(i=0;i<level.nodes.size;i++) p[i]=-1;
for(i=0;i<level.nodes.size;i++) done[i]=false;
d[n]=0;
q=[];
q[n]=0;
while(q.size>0)
{
min=100000000;
u=-1;
for(i=0;i<level.nodes.size;i++) if(isdefined(q[i]) && q[i]<min) {min=q[i];u=i;}
done[u]=true;
q[u]=undefined;
for(i=0;i<level.nodes[u].arcs.size;i++) if(!done[level.nodes[u].arcs[i]] && d[level.nodes[u].arcs[i]]>d[u]+level.nodes[u].dists[i])
{
d[level.nodes[u].arcs[i]]=d[u]+level.nodes[u].dists[i];
p[level.nodes[u].arcs[i]]=u;
q[level.nodes[u].arcs[i]]=d[u]+level.nodes[u].dists[i];
}
}
invp=[];
invp[n]=n;
for(i=0;i<p.size;i++) if(i!=n)
{
last=i;
cur=i;
while(cur!=n)
{
last=cur;
cur=p[cur];
}
invp[i]=last;
}
level.routes[n]=invp;
level.routedists[n]=d;
}
/*f=openfile("test.txt","write");
for(i=0;i<level.nodes.size;i++)
{
fprintln(f,"\n");
for(j=0;j<level.nodes.size;j++)
{
fprintln(f,level.routes[i][j]+"\t");
}
}
for(i=0;i<level.nodes.size;i++)
{
fprintln(f,"\n");
for(j=0;j<level.nodes.size;j++)
{
fprintln(f,level.routedists[i][j]+"\t");
}
}
closefile(f);*/
}
and after the zombies have spawned, it threads this script:
Code:
zombie()
{
self endon("killed");
self.maxhealth=int(level.zommaxhealth*level.zt[self.type]["health"]);
self.health=self.maxhealth;
self.safety=0;
self.id=0;
self.assists=[];
if(!self.boss)
{
while(level.zombies[self.id]) self.id++;
level.zombies[self.id]=true;
d=getent("zd"+self.id,"targetname");
c=getent("zc"+self.id,"targetname");
}
else
{
while(level.wolves[self.id]) self.id++;
level.wolves[self.id]=true;
d=getent("wd"+self.id,"targetname");
c=getent("wc"+self.id,"targetname");
}
self thread burn(level.zt[self.type]["fx"]);
self setmodel(level.models[level.zt[self.type]["model"]]["walk"]+"1");
d.origin=self.origin;
d linkto(self);
d.owner=self;
d thread monitordamage();
self.trig=d;
self.blocker=c;
self.blocker.origin=self.origin;
self.blocker.owner=self;
self.blocker linkto(self);
self.blocker2=spawn("trigger_radius",self.origin+(0,0,50),0,5,5);
self.blocker2 setcontents(1);
self.blocker2 enablelinkto();
self.blocker2 linkto(self);
self.blocker2 hide();
self.animation=0;
for(;;)
{
self.closestnode=undefined;
for(j=0;j<level.nodes.size;j++)
{
if(sighttracepassed(self.origin+(0,0,30),level.nodes[j].origin,false,undefined))
{
if(!isdefined(self.closestnode)) self.closestnode=j; else
if(closer(self.origin,level.nodes[j].origin,level.nodes[self.closestnode].origin)) self.closestnode=j;
}
}
if(!isdefined(self.closestnode)) {self.origin=level.spawns[randomint(level.spawns.size)].origin;continue;}
players=getentarray("player","classname");
while(players.size==0) wait .1;
seehunter=false;
hunter=-1;
self.nextnode=undefined;
min=100000000;
//self hide();
for(i=0;i<players.size;i++) if(isalive(players[i]))
{
if(players[i].origin[2]-self.origin[2]<40 && sighttracepassed(self.origin+(0,0,30),players[i].origin+(0,0,30),false,undefined))
{
//self showtoplayer(players[i]);
dir=maps\mp\_utility::vectorscale(anglestoright(vectortoangles(players[i].origin-self.origin)),20);
if(sighttracepassed(self.origin+(0,0,30)+dir,players[i].origin+(0,0,30),false,undefined) &&
sighttracepassed(self.origin+(0,0,30)-dir,players[i].origin+(0,0,30),false,undefined))
{
dist=distancesquared(self.origin,players[i].origin);
//if(dist<1000000) self showtoplayer(players[i]);
if(!seehunter) min=100000000;
if(dist<min) {min=dist;hunter=players[i];}
seehunter=true;
}
}
if(!seehunter && isdefined(players[i].closestnode) && level.routedists[self.closestnode][players[i].closestnode]<min)
{
min=level.routedists[self.closestnode][players[i].closestnode];
self.nextnode=level.routes[self.closestnode][players[i].closestnode];
}
}
if(seehunter && isplayer(hunter)) self move(hunter.origin,(min<40000),hunter); else
if(isdefined(self.nextnode))
{
if(sighttracepassed(self.origin+(0,0,1),level.nodes[self.nextnode].origin,false,undefined))
self move(level.nodes[self.nextnode].origin);
else
self move(level.nodes[self.closestnode].origin);
}
wait .2;
}
}
edited on Sep. 30, 2012 09:21 am by csocsi96