I made this version for my
Call Of Duty mw2 Mod,
I don't know if its a good way,
but if U think its usefull,
Have fun with it.
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#define PLUGIN "Spawn generator"
#define VERSION "1.0"
#define AUTHOR "Xalus"
#define MAX_SPAWNS 100
new Spawns, cSpawns
new Float:originSpawn[MAX_SPAWNS][3]
new iMaxPlayers
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
// Cvar's
cSpawns = register_cvar("spawngenerator_spawns", "2");
// Player Killed
RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawn", 1);
RegisterHam(Ham_Killed, "player", "Ham_PlayerKilled");
// Others
iMaxPlayers = get_maxplayers()
}
public Ham_PlayerSpawn(id) {
if(is_user_alive(id) && Spawns >= get_pcvar_num(cSpawns)) {
client_print(0, print_chat, "Finding a nice spot for you")
new randomSpawn
GetNewRandomSpawn:
randomSpawn = random(Spawns)
if(!is_player_close(randomSpawn))
engfunc(EngFunc_SetOrigin, id, originSpawn[randomSpawn])
else
goto GetNewRandomSpawn
}
}
public Ham_PlayerKilled(id, iAttacker) {
if(id != iAttacker
&& Spawns < MAX_SPAWNS) {
pev(id, pev_origin, originSpawn[Spawns])
if( !is_user_stuck(id, originSpawn[Spawns])
&& engfunc(EngFunc_PointContents, originSpawn[Spawns]) == CONTENTS_EMPTY
&& !is_spawn_close(Spawns) ) {
Spawns++
if(Spawns == get_pcvar_num(cSpawns))
client_print(0, print_center, "Random spawns activated!")
}
}
}
stock is_user_stuck(const id, Float:Origin[3]) {
static tr
engfunc(EngFunc_TraceHull, Origin, Origin, IGNORE_MONSTERS, pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, tr)
if( (!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen)) || (pev(id,pev_solid) & SOLID_NOT))
return 0
return 1
}
stock is_spawn_close(const spawnID) {
for(new i = 0; i < Spawns; i++)
if(get_distance_f(originSpawn[spawnID], originSpawn[i]) < 350.0)
return 1
return 0
}
stock is_player_close(const spawnID) {
new Float:playerOrigin[3]
for(new i = 1; i <= iMaxPlayers; i++) {
if(!is_user_alive(i))
continue
pev(i, pev_origin, playerOrigin)
if(get_distance_f(originSpawn[spawnID], playerOrigin) < 10.0)
return 1
}
return 0
}
}
The system:
- When a player die, it will save his origins (If hes not stuck), and when the cvar (spawngenerator_spawns) is reached, it will spawn players on those origins.
- It will get enabled when the cvar is reached. Else its just to the spawn.
If U got some improvements, post them!
Btw this is made for Deathmatch mode, so everyone won't spawn at once.
__________________