|
 |
Bots laufen und verfolgen lassen (Zombies) |
DarKMaGiiC
5-Minuten-Ei

Dabei seit: 17.07.2011
Beiträge: 12

|
|
|
|
|
|
serthy
Codemeister
  
Dabei seit: 29.07.2010
Beiträge: 628

|
|
lade dir mal den meatbot runter, das is mit waypoints (sonst laufen die bots an die wände und bleiben stehen)
du könntest den meatbot so umfunktionieren, dass die bots keine waffen haben oder nur bashen
wenn du keine bots (testclients) nehmen willst oder die bots auch durch wände bewegen willst, musst du sie an ein script model linken und dann mit moveto bewegen
hier etwas zum basteln, orginal hab ich verloren (wegen virus musste xp neuinstallen..) aber wenn du die syntaxfehler hier korrigierst, geht es
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
|
/*============================================================
BOT ZOMBIE SCRIPT
v.0.1(beta)
by Serthy
============================================================*/
init()
{
level.zombie = [];
level.zombie["model"][0] = "xmodel/zombie"; precacheModel( level.zombie["model"][0] );
level.zombie["model"][1] = "xmodel/charple"; precacheModel( level.zombie["model"][1] );
level.zombie["skill"][0] = 1;
level.zombie["skill"][1] = 1.5;
level.zombie["skill"][2] = 3;
level.zombie["damage"][0] = 15;
level.zombie["damage"][1] = 20;
level.zombie["damage"][2] = 30;
level.zombie["damage_radius"][0] = 30;
level.zombie["damage_radius"][1] = 50;
level.zombie["damage_radius"][2] = 90;
level.zombie["zombie"] = [];
for( i = 0 ; i < level.zombie["amount"] ; i++ )
{
level.zombie["zombie"][i] = "none";
level.zombie["zombie"][i].in_use = false;
}
thread zombie_WaitCvar();
}
/* bugged hier, man spawn nur zombies level 1, 2 3 4... schön der reihe nach, muss noch geändert werden */
zombie_WaitCvar()
{
zombienum = 0;
for( ; ; )
{
wait 5;
zombienum = getCvar( "zombie_amount" );
if( zombienum > 0 )
{
for( i = 0 ; i < zombienum ; i++ )
{
id = zombie_GetFreeZombie();
zombie_spawn( id );
}
}
setCvar( "zombie_amount" , 0 );
}
}
zombie_spawn( ID )
{
spawnpointname = "mp_tdm_spawn";
spawnpoints = getentarray( spawnpointname , "classname" );
spawnpoint = zombie_getSpawnpoint( spawnpoints );
zombie = spawn( "script_model" , spawnpoint.origin );
zombie.id = id;
zombie.skill = level.zombie["skill"][id];
zombie.health = level.zombie["health"] * zombie.skill;
zombie.targetname = zombie;
zombie.target = zombie;
zombie.targetteam = "allies";
zombie.team = "axis";
zombie.closestdist = 10000;
zombie.angles = spawnpoint.angles;
zombie hide();
zombie setContents( 0 );
zombie.trigger = spawn( "trigger_radius" , zombie.origin , level.zombie["damage"].range , level.zombie["damage"].range );
zombie.trigger enableLinkTo();
zombie.trigger linkto( zombie );
zombie setmodel( level.zombie["model"][id] );
zombie thread zombie_Remove();
zombie thread zombie_Handle();
zombie thread zombie_Kill();
zombie thread zombie_LookingForTarget();
zombie thread zombie_monitorDamage( zombie.trigger );
zombie thread zombie_Motion();
zombie notify( "zombie_spawn" );
}
zombie_GetFreeZombie()
{
for( i = 0 ; i < level.zombie["amount"] ; i++ )
{
if( level.zombie["zombie"][i].in_use )
continue;
return i;
}
}
zombie_Handle()
{
while( isDefined( self ) )
{
self waittill( "zombie_spawn" );
self show();
self setContents( 1 );
self waittill( "zombie_killed" , attacker );
self thread zombie_GivePoints( attacker );
self hide();
self setContents( 0 );
if( isDefined( self.trigger ) )
{
self.trigger unlink();
self.trigger delete();
}
if( isdefined( self )
{
level.zombie["zombie"][self.id].in_use = false;
level.zombie["zombie"][self.id] = "none";
self notify( "delete_zombie" );
wait 0.05;
self delete();
}
}
}
zombie_monitorDamage( trigger )
{
self endon( "delete_zombie" );
while( isDefined( self ) && isDefined( trigger ) )
{
trigger waittill( "damage" , iDamage , attacker );
if( attacker.pers["team"] != self.targetteam )
continue;
if( iDamage < 1 )
iDamage = 1;
attacker thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback();
self.health -= iDamage;
if( self.health <= 0 )
self notify( "zombie_killed" , attacker );
}
}
zombie_LookingForTarget()
{
self endon( "delete_zombie" );
while( isDefined( self ) )
{
wait 1;
self thread zombie_NoHunter();
targetplayers = [];
players = getentarray( "player" , "classname" );
for( i = 0 ; i < players.size ; i++ )
{
if( players[i].sessionstate == "spectator" || players[i].sessionstate == "dead" || players[i].pers["team"] == self.team )
continue;
else
{
targetplayers[targetplayers.size] = players[i];
}
}
for( i = 0 ; i < targetplayers.size ; i++ )
{
enemyeye = targetplayers[i] getEye() + ( 0 , 0 , 15 );
dist = ( distance( self.origin , targetplayers[i].origin ) );
trace = bullettrace( self.origin + ( 0 , 0 , 50 ) , enemyeye , false , undefined );
if( dist < self.closestdist && trace["surfacetype"] == "none" )
{
self.target = targetplayers[i];
self.closestdist = dist;
}
}
}
}
zombie_Kill()
{
self endon( "delete_zombie" );
while( isDefined( self ) )
{
wait 0.05;
if( self.closestdist <= level.zombie["damage_radius"][self.id] )
if( isDefined( self.target ) && isAlive( self.target ) )
self.target [[level.callback_playerdamage]]( undefined , undefined , level.zombie["damage"][self.id] , 1 , "MOD_SUICIDE" , "mp_zombie" , self.origin , vectornormalize( self.origin , self.target.origin ) , "pelvis" , 0 );
}
zombie_Motion()
{
self endon( "delete_zombie" );
while( isDefined( self ) )
{
wait 0.05;
speed = ( self.closestdist / 50 ) * self.skill;
if( isDefined( self.target ) && self.target != self )
{
if( !isPlayer( self.target ) || !isAlive( self.target ) || self.target.pers["team"] != self.targetteam )
continue;
target_direction = vectorNormalize( ( self.target.origin[0] - self.origin[0] , self.target.origin[0] - self.origin[0] , self.target.origin[0] - self.origin[0] ) );
self rotateTo( vectorToAngles( target_direction ) , 0.5 );
self moveto( self.target.origin , speed , speed / 3 , 0 );
}
}
}
zombie_getSpawnpoint( spawnpoints )
{
if( !isdefined( spawnpoints ) )
return undefined;
spawnpoint = undefined;
for( i = 0 ; i < spawnpoints.size ; i++ )
{
j = randomInt( spawnpoints.size );
spawnpoint = spawnpoints[i];
spawnpoints[i] = spawnpoints[j];
spawnpoints[j] = spawnpoint;
}
for( i = 0 ; i < spawnpoints.size ; i++ )
{
spawnpoint = spawnpoints[i];
if( !positionWouldTelefrag( spawnpoint.origin ) )
break;
}
return spawnpoint;
}
zombie_GivePoints( attacker )
{
attacker iPrintLnBold( "You killed Zombie #" + self.id );
}
zombie_NoHunter()
{
numonteam = [];
while( isDefined( self ) )
{
wait 1;
players = getentarray( "player" , "classname" );
for( i = 0 ; i < players.size ; i++ )
{
player = players[i];
if( isDefined( player.pers["team"] ) && player.pers["team"] != "spectator" )
numonteam[player.pers["team"]]++;
}
if( numonteam[self.targetteam] <= 0 )
{
for( i = 0 ; i < level.zombie["zombie"].size ; i++ )
{
if( level.zombie["zombie"][i] != "none" )
level.zombie["zombie"][i] notify( "delete_zombie" );
}
}
}
}
zombie_Remove()
{
self waittill( "delete_zombie" );
if( isDefined( self.trigger ) )
{
self.trigger unlink();
self.trigger delete();
}
if( isdefined( self )
{
level.zombie["zombie"][self.id].in_use = false;
level.zombie["zombie"][self.id] = "none";
self notify( "delete_zombie" );
wait 0.05;
self delete();
}
} |
|
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von serthy: 18.07.2011 21:53.
|
|
|
|
|
DarKMaGiiC
5-Minuten-Ei

Dabei seit: 17.07.2011
Beiträge: 12

|
|
Danke für deine Antwort!
1.Also ich habe dein Script bei mir zum laufen gekriegt nur stehen auf der map die modelle rum. Bewegen sich aber nicht.
2.Kannst du mir zufällig sagen wie ich einen vernünftigen clip erzeuge per script? Ich habe zar ne möglichkeit aber bei der ist der clip immer so uneben und wenn ich dagegen laufe oder bzw. draufspringe wackelt es so komisch
|
|
|
|
|
DarKMaGiiC
5-Minuten-Ei

Dabei seit: 17.07.2011
Beiträge: 12

|
|
Original von serthy
collision per script zu spawnen geht nur auf 3 wegen:
1: trigger radius spawnen und setContents(1)
2: selbst ein model erstellen und LOD ganz hoch
3: im radiant ein clip brush erstellen und per script an die stellen bewegen
ohne download geht es nur mit trigger+setcontents, das ist wahrscheinlich dein weg, der 'wackelt'
ok danke dafür. Aber irgendwie muss es doch gehen das die bots laufen. In den ZombieMods werden ja WayPoints benutz. Das heist ja das die Zombies laufen können. Also muss es ja ein befehl geben das die bots laufen. Abgesehen davon, dass sie gegen Wände laufen, das interessiert mich erstmal nicht ^^
|
|
|
|
|
DarKMaGiiC
5-Minuten-Ei

Dabei seit: 17.07.2011
Beiträge: 12

|
|
Original von serthy
egal in welchen zombiemods, die bots 'laufen' nie!
sie werden an ein scriptmodel verlinkt, das sich von waypoint zu waypoint bewegt
ich werde morgen dir mein script mal verbessern, das neuere hab ich leider im moment nichtmehr, aber ein-zwei änderungen dann sollte der bot dir folgen (ich weiß, dass der fehler ziemlich klein und einfach zu beheben war)
jedoch wenn der bot bei dir ist, tötet er dich und bei jedem neuen spawn auch sofort aber wie gesagt morgen schreib ich einen kleinen neuen (unkomplizierteren)
ok thx
|
|
|
|
|
DarKMaGiiC
5-Minuten-Ei

Dabei seit: 17.07.2011
Beiträge: 12

|
|
Original von DarKMaGiiC
Original von serthy
egal in welchen zombiemods, die bots 'laufen' nie!
sie werden an ein scriptmodel verlinkt, das sich von waypoint zu waypoint bewegt
ich werde morgen dir mein script mal verbessern, das neuere hab ich leider im moment nichtmehr, aber ein-zwei änderungen dann sollte der bot dir folgen (ich weiß, dass der fehler ziemlich klein und einfach zu beheben war)
jedoch wenn der bot bei dir ist, tötet er dich und bei jedem neuen spawn auch sofort aber wie gesagt morgen schreib ich einen kleinen neuen (unkomplizierteren)
ok thx
will ja nicht drängeln aber wird das noch was?
|
|
|
|
|
|
|
|
 |
Impressum ||Datenschutzerklärung
|