Aber das respawnen von NPCs, nachdem sie gekillt wurden ist zurzeit SEHR WOHL möglich!
So geht es.
1. Schritt: Lade dieses Lua-Skript:
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
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
if npcrespawn==nil then npcrespawn={} end npcrespawn.entities={} i=1 for x=0,map("xsize") do 	for y=0,map("ysize") do 		if entity(x,y,"exists") then 			if(entity(x,y,"typename")=="Env_NPC") then 				if(entity(x,y,"int1")==1) then 					if(entity(x,y,"name")~="") then 						npcrespawn.entities[i]=entity(x,y,"name") 						i=i+1 					end 				end 			end 		end 	end end function npcrespawn.objectkill(object_id,player_id) if(object(object_id,"type")==30) then if(object(object_id,"player")==1) then 		t = math.random(1,#npcrespawn.entities) 		parse("trigger "..npcrespawn.entities[t]) end end end addhook("objectkill","npcrespawn.objectkill")
Zum Code: im ersten schritt holt der sich die namen aller NPC-Entities. Das Skript funktioniert nicht, wenn kein NPC-Entity einen Namen hat! Das landet in einer Tabelle. Das ist wichtig!
Im nächsten Schritt hab ich einen Hook gemacht, der guckt, wann immer ein Object gekillt wird.
Zum hook muss ich noch sagen, dass NPCs nichts anderes als Objekte mit dem Typ 30 sind. Die Art eines NPCs (zombie, vortigaunt, etc. wird lustigerweise in der "player"-variable des Objects gespeichert. Zombie hat hier die nummer 1.
Ja und wenn beide bedingungen wahr sind, dann ist klar, dass es sich um einen zombie-npc handelt und nehm ich einfach den nützlichen befehl "trigger" und hänge einen zufällig aus der tabelle gewählten entitynamen dran und fertig!!
So einfach ist das. Ist vielleicht noch nicht ganz ausgereift, meine Tests hat das Skript aber überlebt.
Leider werden NPCs dadurch nicht schneller. Naja da bleibt nur entweder NPCs komplett neu mit Lua schreiben, die völlig unabhängig von den CS2D-NPCs sind oder abwarten.
Edit: Natürlich muss man die beiden Schritte vertauschen. Also erst Map machen und dann Skript laden, andersrum geht ja nicht.