#pragma semicolon 1 #pragma ctrlchar '\' #include #include #include #include #include #include #define PLUGIN "NoSpawnerMines" #define VERSION "1.0" #define AUTHOR "D-AIRY" new g_iSatchels[32][6]; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); RegisterHam(Ham_Spawn, "monster_tripmine", "fw_TMSpawn", 1); RegisterHam(Ham_Spawn, "monster_satchel", "fw_SCSpawn", 1); register_clcmd("drop", "Drop"); } public SatchelCheckTask() { } public Drop(id) { server_print("Droppping!"); if(get_user_weapon(id) == HLW_SATCHEL) { server_print("Satchel drops"); removeSatchels(id); } } public client_putinserver(id) { server_print("Client connected"); g_iSatchels[id][5] = 0; } public removeSatchels(id) { server_print("remove satchels"); for(new i = 0; i < 5; i++) { RemoveSatchel(g_iSatchels[id][i]); } g_iSatchels[id][5] = 0; } public RemoveSatchel(ent) { server_print("REmove entity %d", ent); if(pev_valid(ent)) { new szClassName[32]; pev(ent, pev_classname, szClassName, 31); server_print("%s", szClassName); if(equali(szClassName, "monster_satchel")) { remove_entity(ent); } } } public fw_TMSpawn(ient) { server_print("TM spawned"); if(!ient) { return(HAM_IGNORED); } new Float:origin[3]; new Float:angles[3]; pev(ient, pev_origin, origin); pev(ient, pev_angles, angles); angle_vector(angles, ANGLEVECTOR_FORWARD, angles); angles[2] = -angles[2]; new ent = -1; while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "info_player_deathmatch"))) { new Float:vOrigin[3]; pev(ent, pev_origin, vOrigin); new Float:vVector2[3]; new Float:vVector3[3]; vVector2[0] = vOrigin[0] - origin[0]; vVector2[1] = vOrigin[1] - origin[1]; vVector2[2] = vOrigin[2] - origin[2]; xs_vec_cross(vVector2, angles, vVector3); new Float:fDistance = fabs(xs_vec_len(vVector3) / xs_vec_len(angles)); if(fDistance <= 64.0) { server_print("TM declined"); remove_entity(ient); return(HAM_SUPERCEDE); } } ent = -1; while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "info_teleport_destination"))) { new Float:vOrigin[3]; pev(ent, pev_origin, vOrigin); new Float:vVector2[3]; new Float:vVector3[3]; vVector2[0] = vOrigin[0] - origin[0]; vVector2[1] = vOrigin[1] - origin[1]; vVector2[2] = vOrigin[2] - origin[2]; xs_vec_cross(vVector2, angles, vVector3); new Float:fDistance = fabs(xs_vec_len(vVector3) / xs_vec_len(angles)); if(fDistance <= 64.0) { server_print("TM declined"); remove_entity(ient); return(HAM_SUPERCEDE); } } server_print("TM accepted"); return(HAM_IGNORED); } Float:fabs(Float:a) { return(a > 0 ? a : -a); } public fw_SCSpawn(ent) { server_print("SC spawned"); if(!ent) { return(HAM_IGNORED); } new id = pev(ent, pev_owner); server_print("Satchel %d, OWNER: %d", ent, id); new c = 0; for(new i = 0; i < 5; i++) { if(pev_valid(g_iSatchels[id][i]) && g_iSatchels[id][i] != ent) { new szClassName[32]; pev(g_iSatchels[id][i], pev_classname, szClassName, 31); if(equali(szClassName, "monster_satchel")) { server_print("Alive satchel!"); g_iSatchels[id][c] = g_iSatchels[id][i]; c++; } } } server_print("c = %d", c); g_iSatchels[id][5] = c; if(g_iSatchels[id][5] == 5) { removeSatchels(id); g_iSatchels[id][5] = 0; } g_iSatchels[id][g_iSatchels[id][5]] = ent; g_iSatchels[id][5]++; return(HAM_IGNORED); }