PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <engine>
#define PLUGIN "RANDOM BOMSITE"
#define VERSION "1.0"
#define AUTHOR "VINAGHOST"
new g_szCfgFile[128];
#define TASK_RADAR 1
#define TASK_BOMBONRADAR_TIME 3.0
#define ENTITY_CLASS "func_bomb_target"
new Array:g_BSorigin;
new m_fakeHostage, m_fakeHostageDie
new gbPlanted=false;
new bool:d_bs
new bs_on
new Float:bs[2][3], bs_id[2]
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV", "newround", "a", "1=0", "2=0")
register_event("BombDrop","bomb_planted","a","4=1");
bs_on = register_cvar("bs_on", "0")
register_clcmd("say /creat","rb_creat", ADMIN_BAN);
register_clcmd("say /save","rb_save", ADMIN_BAN);
m_fakeHostage = get_user_msgid("HostagePos");
m_fakeHostageDie = get_user_msgid("HostageK");
}
public plugin_precache(){
get_configsdir(g_szCfgFile, 75);
new szMapName[32];
get_mapname(szMapName, 31);
format(g_szCfgFile, 127, "%s/randomBS/%s.ini", g_szCfgFile, szMapName);
g_BSorigin = ArrayCreate(3, 2);
//BombSites
LoadFromFile();
task_Look4BS()
d_bs = true
}
public task_Look4BS(){
new ent = -1, i = 0
new Float:fOrigin[3];
do{
ent = find_ent_by_class ( ent, ENTITY_CLASS);
if(is_valid_ent ( ent )){
get_brush_entity_origin(ent, fOrigin);
bs_id[i] = ent
for(new j=0;j<3;j++)
bs[i][j]=fOrigin[j]
i++
}
}
while(ent);
}
public newround()
{
if (get_pcvar_num(bs_on) == 1)
{
//random bomsite
gbPlanted=false;
new Float:origin[3]
new bomsite = random_num(0, ArraySize(g_BSorigin) - 1)
client_print(0, print_chat, "id = %d", bomsite)
ArrayGetArray(g_BSorigin, bomsite, origin);
for (new i = 0; i<2; i++)
entity_set_origin(bs_id[i], origin)
if (!task_exists(TASK_RADAR))
{
set_task(TASK_BOMBONRADAR_TIME, "task_UpDateRadar",TASK_RADAR,_,_,"b");
client_print(0, print_chat, "id = %d is shown in the radar", bomsite)
}
d_bs = false
}
else
{
if ( !d_bs)
{
d_bs = true
if (task_exists(TASK_RADAR))
remove_task(TASK_RADAR)
for (new i = 0; i<2; i++)
entity_set_origin(bs_id[i], bs[i])
client_print(0, print_chat,"Bomsite back to normal")
}
}
}
public rb_creat(id, level, cid){
if(!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED;
new Float:fOrigin[3];
entity_get_vector(id, EV_VEC_origin, fOrigin);
ArrayPushArray(g_BSorigin, fOrigin);
return PLUGIN_HANDLED_MAIN;
}
public rb_save(id, level, cid){
if(cmd_access(id, level, cid, 1))
SaveToFile(id)
return PLUGIN_HANDLED_MAIN;
}
public bomb_planted(planter){
gbPlanted = true;
}
SaveToFile(id){
if(file_exists(g_szCfgFile))
delete_file(g_szCfgFile);
new iVector[3];
new szLine[128];
if(ArraySize(g_BSorigin) > 0)
{
for(new i=0;i<ArraySize(g_BSorigin);i++)
{
ArrayGetArray(g_BSorigin, i, iVector);
format(szLine, 127, "%.0f %.0f %.0f", iVector[0],iVector[1],iVector[2]);
write_file(g_szCfgFile, szLine, -1);
}
}
client_print(id, print_center, "SAVED");
}
LoadFromFile(){
new szLine[64], iLen;
new szOrigin[3][10];
new Float:fOrigin[3];
for(new i=0;read_file(g_szCfgFile,i,szLine, 64,iLen);i++){
trim(szLine);
if(szLine[0]==';') continue;
parse(szLine, szOrigin[0], 9,szOrigin[1], 9, szOrigin[2], 9);
for(new j=0;j<3;j++){
fOrigin[j]=str_to_float(szOrigin[j]);
}
ArrayPushArray(g_BSorigin, fOrigin);
}
}
public showOnRadar(id)
{
if(m_fakeHostage && m_fakeHostageDie) //only 0 is false
{
new Float: ori_min[3]
new Float: ori_max[3]
entity_get_vector(bs_id[1],EV_VEC_absmin,ori_min)
entity_get_vector(bs_id[1],EV_VEC_absmax,ori_max)
message_begin(MSG_ONE_UNRELIABLE, m_fakeHostage, {0,0,0}, id);
write_byte(id);
write_byte(20);
write_coord(floatround((ori_max[0]+ori_min[0])/2));
write_coord(floatround((ori_max[1]+ori_min[1])/2));
write_coord(floatround((ori_max[2]+ori_min[2])/2));
message_end();
message_begin(MSG_ONE_UNRELIABLE, m_fakeHostageDie, {0,0,0}, id);
write_byte(20);
message_end();
}
}
public task_UpDateRadar(){
if(!gbPlanted)
{
new Players[32];
new playerCount, id;
get_players(Players, playerCount, "bc")
for ( new i=0; i<playerCount; i++){
id = Players[i];
showOnRadar(id)
}
}
}