Itt az sma-ja:
Kód: /* Edit for Zombie Plague by CHyCMyMpNk */ /* Work only for Swarm Round */
#include <amxmodx> #include <amxmisc> #include <cstrike> #include <engine> #include <fun> #include <zombieplague>
#define PLUGNAME "[ZP] Swarm Round Respawning" #define AUTHOR "Emp`" #define VERSION "1.31"
#define MAX_SPAWNS 60 #define MAX_SPEAK 10
new Float:ZPSRtime[33] new SOrigin[33][3];
new Float:g_SpawnVecs[MAX_SPAWNS][3]; new Float:g_SpawnAngles[MAX_SPAWNS][3]; new Float:g_SpawnVAngles[MAX_SPAWNS][3]; new g_TotalSpawns; new zp_SRRespawn, zp_SRRspawns, zp_SRRtime, zp_SRRmaxtime public plugin_init() {
register_plugin(PLUGNAME, VERSION, AUTHOR)
zp_SRRespawn = register_cvar("zp_SRRespawn", "1") zp_SRRspawns = register_cvar("zp_SRRspawns", "0") zp_SRRtime = register_cvar("zp_SRRtime", "10.0") zp_SRRmaxtime = register_cvar("zp_SRRmaxtime", "3.0")
register_event("DeathMsg","DeathEvent","a")
readSpawns() set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET); }
readSpawns() { new Map[32], config[32], MapFile[64]; get_mapname(Map, 31) get_configsdir(config, 31 ) format(MapFile, 63, "%s\csdm\%s.spawns.cfg", config, Map); g_TotalSpawns = 0; if (file_exists(MapFile)) { new Data[124], len; new line = 0; new pos[12][8]; while(g_TotalSpawns < MAX_SPAWNS && (line = read_file(MapFile , line , Data , 123 , len) ) != 0 ) { if (strlen(Data)<2 || Data[0] == '[') continue;
parse(Data, pos[1], 7, pos[2], 7, pos[3], 7, pos[4], 7, pos[5], 7, pos[6], 7, pos[7], 7, pos[8], 7, pos[9], 7, pos[10], 7);
g_SpawnVecs[g_TotalSpawns][0] = str_to_float(pos[1]); g_SpawnVecs[g_TotalSpawns][1] = str_to_float(pos[2]); g_SpawnVecs[g_TotalSpawns][2] = str_to_float(pos[3]); g_SpawnAngles[g_TotalSpawns][0] = str_to_float(pos[4]); g_SpawnAngles[g_TotalSpawns][1] = str_to_float(pos[5]); g_SpawnAngles[g_TotalSpawns][2] = str_to_float(pos[6]); g_SpawnVAngles[g_TotalSpawns][0] = str_to_float(pos[7]); g_SpawnVAngles[g_TotalSpawns][1] = str_to_float(pos[8]); g_SpawnVAngles[g_TotalSpawns][2] = str_to_float(pos[9]); g_TotalSpawns++; } log_amx("Loaded %d spawn points for map %s.", g_TotalSpawns, Map) } else { log_amx("No spawn points file found (%s)", MapFile) } return 1; }
public spawn_Preset(id) { if (g_TotalSpawns < 2) return PLUGIN_CONTINUE new list[MAX_SPAWNS]; new num = 0; new final = -1; new total=0; new players[32], n, x = 0; new Float:loc[32][3], locnum get_players(players, num) for (new i=0; i<num; i++) { if (is_user_alive(players[i]) && players[i] != id) { entity_get_vector(players[i], EV_VEC_origin, loc[locnum]) locnum++ } } num = 0 while (num <= g_TotalSpawns) { if (num == g_TotalSpawns) break; n = random_num(0, g_TotalSpawns-1); if (!list[n]) { list[n] = 1; num++; } else { total++; if (total > 100) break; continue; }
new trace = trace_hull(g_SpawnVecs[n],1); if (trace) continue; if (locnum < 1) { final = n break } final = n for (x = 0; x < locnum; x++) { new Float:distance = get_distance_f(g_SpawnVecs[n], loc[x]); if (distance < 250.0) { final = -1; break; } } if (final != -1) break } if (final != -1) { entity_set_origin(id, g_SpawnVecs[final]); entity_set_int(id, EV_INT_fixangle, 1); entity_set_vector(id, EV_VEC_angles, g_SpawnAngles[final]); entity_set_vector(id, EV_VEC_v_angle, g_SpawnVAngles[final]); entity_set_int(id, EV_INT_fixangle, 1); return PLUGIN_HANDLED }
return PLUGIN_CONTINUE } public DeathEvent() { new attacker = read_data(1) new id = read_data(2)
if(get_pcvar_num(zp_SRRespawn)<1) return PLUGIN_CONTINUE if(1>get_user_team(id)>2) return PLUGIN_CONTINUE
switch(get_pcvar_num(zp_SRRespawn)) { case 2:{ if(is_user_connected(attacker)){ if(get_user_team(id)==get_user_team(attacker) || id==attacker){ ZPSRtime[attacker] += get_pcvar_num(zp_SRRtime) if(ZPSRtime[attacker] > get_pcvar_num(zp_SRRmaxtime)) ZPSRtime[attacker] = get_pcvar_float(zp_SRRmaxtime) } } } case 1:{ if(is_user_alive(attacker)){ ZPSRtime[attacker] -= get_pcvar_num(zp_SRRtime) if(ZPSRtime[attacker]<1.0) ZPSRtime[attacker] = 1.0 }
ZPSRtime[id] += get_pcvar_num(zp_SRRtime) if(ZPSRtime[id] > get_pcvar_num(zp_SRRmaxtime)) ZPSRtime[id] = get_pcvar_float(zp_SRRmaxtime) } default: return PLUGIN_CONTINUE }
new time = floatround(ZPSRtime[id]) + 1
new parm[2] parm[0] = id parm[1] = time
set_task(0.1,"check_respawn",0,parm,2)
return PLUGIN_CONTINUE } public check_respawn(parm[]) { new id = parm[0] parm[1]--
if(is_user_alive(id) || !zp_is_swarm_round()) return
if(parm[1]==0){ respawn(id) } else{ if(parm[1]<MAX_SPEAK){ new speak[30] num_to_word(parm[1], speak, 29) client_cmd(id,"spk ^"fvox/%s^"",speak) } client_print(id, print_center, "[ZP] Ujra fogsz eledni %d masodperc mulva.", parm[1]) set_task(1.0,"check_respawn",0,parm,2) } } public respawn(id) { if(is_user_alive(id) || !is_user_connected(id) || !zp_is_swarm_round()) return -1
new team = get_user_team(id)
if(team==1 || team==2) { new parm[2] parm[0] = id parm[1] = 0 set_task( 0.5, "actual_revive", 1, parm, 2) parm[1] = 1 set_task( 0.7, "actual_revive", 1, parm, 2) return 1 } return 0 } public actual_revive(parm[]) { new id = parm[0], a = parm[1] spawn(id) if(a==0) get_user_origin(id, SOrigin[id]) else { if(get_pcvar_num(zp_SRRspawns) > 0) spawn_Preset(id) else set_user_origin(id, SOrigin[id]) } }
public client_connect(id) { ZPSRtime[id] = get_pcvar_float(zp_SRRtime) }
public client_putinserver(id) { set_task(1.0,"first_respawn",id) }
public first_respawn(id) { if(!respawn(id)) set_task(1.0,"first_respawn",id) }
|