Help, first plugin
Hello everyone. This is my first plugin witch i made from nothing. However i have problem, sometimes server freezes and shuts down. Maybe somebody could take a look where i done horrible? Thanks a lot :/
PHP Code:
#include <amxmisc> #include <amxmodx> #include <cstrike> #include <engine> #include <gunxpmod> #include <fun>
new const MOD_TITLE[] = "Supplie drop" new const MOD_AUTHOR[] = "Dyskiu" new const MOD_VERSION[] = "2.1"
#define drop_reg_dir "drop.log"
new const GiftModel[] = "models/mission2/w_assault.mdl" new const GiftPlane[] = "ambience/copter.wav" new const CLASS_NAME[] = "giveGift" new const Float:RoundA = 10.0 new const Float:RoundB = 30.0 new const Float:RoundC = 10.0 new const Float:RoundD = 30.0 const Float:GiftDistance = 50.0 //Distance from gift new const Float:SpeedBoost = 50.0 new const Float:GravityBoost = 0.9 new Float:Speed[64] new Float:Gravitie[64]
new const MaxDrops = 3 new Id_ent[3] new Float:F_player_origin[3][3] #define DropTask 10000 #define EventTask 10060 #define TakingTask 10120 #define RebornTask 10180 #define SpawnTask 10240 new bool:Reborn[64] new HudObj new d_MaxPlayers new TimerElement[64] new bool:ActiveTask[64] new bool:CanBeTakenGift[3] #define GiftTime 8 new bool:Gravitied[64] new bool:Speedied[64] new TakingEnt[64]
new g_szMap[32] new ENABLE = 0 // Plugin is disabled for testing purpose
public plugin_precache() { precache_model(GiftModel) precache_sound(GiftPlane)
}
public plugin_init() { register_plugin(MOD_TITLE, MOD_VERSION, MOD_AUTHOR) register_event("HLTV", "event_roundStart", "a", "1=0", "2=0") register_clcmd("say /supplies","show_help"); register_clcmd("dyskiuEnable","pluginEnable"); // For testing register_touch("giveGift", "player", "touch_gift") register_event("DeathMsg","DiedReborn","a") register_event( "CurWeapon" , "fw_EvCurWeapon" , "be" , "1=1" ) d_MaxPlayers = get_maxplayers() HudObj = CreateHudSyncObj() get_mapname(g_szMap, charsmax(g_szMap)) log_to_file(drop_reg_dir,g_szMap) }
public event_roundStart() { if(ENABLE==1) { for (new i=0;i<MaxDrops;i++) { log_to_file(drop_reg_dir,"Round Start: Setting task EventTask+i") if(task_exists(EventTask+i)) remove_task(EventTask+i) new Float:TimeFloat TimeFloat = random_float(RoundA,RoundB) set_task(TimeFloat,"EventGift",EventTask+i) if(is_valid_ent(Id_ent[i])) remove_entity(Id_ent[i]) Id_ent[i]=0 } for (new id=1; id <= d_MaxPlayers; id++) { if (task_exists(id+SpawnTask)) remove_task(id+SpawnTask) if (task_exists(id+RebornTask)) remove_task(id+RebornTask) if (task_exists(id+DropTask)) remove_task(id+DropTask) ActiveTask[id]=false Reborn[id]=false Gravitied[id]=false Speedied[id]=false } new sMsg[128] format(sMsg, 127, "^x01Nezinai kas tai ^x03[^x04 supplies ^x03]^x01? Parasyk tiesiog ^x03[^x04 /supplies ^x03]^x01.") ColorChat(0,sMsg) } } public pluginEnable() { new action[2] read_argv(1, action,1) new number = str_to_num(action) if (number==1) { log_to_file(drop_reg_dir,"Enabled") ENABLE=1 } else { log_to_file(drop_reg_dir,"Disabled") ENABLE=0 } }
public client_disconnect(id) { ActiveTask[id]=false Speedied[id]=false Gravitied[id]=false } public client_connect(id) { ActiveTask[id]=false Speedied[id]=false Gravitied[id]=false }
public EventGift(idTask) { log_to_file(drop_reg_dir,"EventGift: dropping search") new i= idTask - EventTask new j=0 new GiftPlace[32] for(new id=1; id<=d_MaxPlayers;id++) { if(is_user_alive(id) && cs_get_user_team(id)==CS_TEAM_CT) { GiftPlace[j]=id; j++ } } new place place = random_num(0,j-1) entity_get_vector(GiftPlace[place],EV_VEC_origin, F_player_origin[i]) new Float:GiftDrop GiftDrop = random_float(RoundC,RoundD) CanBeTakenGift[i]=false set_task(GiftDrop, "DropGift", i+DropTask) }
public DropGift(idTask) { log_to_file(drop_reg_dir,"DropGift: dropping") new i = idTask - DropTask CanBeTakenGift[i]=true new ent = create_entity("info_target") Id_ent[i]=ent emit_sound(ent, CHAN_STATIC, GiftPlane, 0.7, ATTN_NORM, 0, PITCH_NORM); entity_set_string(ent, EV_SZ_classname, CLASS_NAME) entity_set_model(ent, GiftModel) entity_set_int(ent, EV_INT_movetype, MOVETYPE_TOSS) entity_set_int(ent, EV_INT_solid, SOLID_TRIGGER) entity_set_vector(ent, EV_VEC_origin, F_player_origin[i]) set_rendering (ent, kRenderFxGlowShell,100,100,100,kRenderNormal,25) set_hudmessage(255, 0, 255, -1.0, 0.30, 0, 4.0, 4.0) ShowSyncHudMsg(0, HudObj, "Supplies for war just arrived!"); }
public touch_gift(ent, id) { new i=0 for (new j=0;j<MaxDrops;j++) if(Id_ent[j]==ent) i=j if (!is_user_alive(id) || cs_get_user_team(id)!=CS_TEAM_CT || ActiveTask[id] || !CanBeTakenGift[i]) return PLUGIN_HANDLED if( is_user_alive(id) && cs_get_user_team(id)==CS_TEAM_CT && get_user_weapon(id)==CSW_KNIFE && get_user_button( id ) & IN_ATTACK) { if( get_user_oldbutton( id ) & IN_ATTACK ) { log_to_file(drop_reg_dir,"touch_gift: found to take") Bar_Time(id,GiftTime) CanBeTakenGift[i]=false ActiveTask[id]=true TakingEnt[id]=ent TimerElement[id]=0 set_task(0.5, "Taking", id + TakingTask, _,_,"b") } } return PLUGIN_CONTINUE }
public Taking(idTask) { new id=idTask - TakingTask new Float:Player_Origin[3] new Float:Entity_Origin[3] new i=0 for (new j=0;j<MaxDrops;j++) if(Id_ent[j]==TakingEnt[id]) i=j if (is_user_alive(id)) entity_get_vector(id, EV_VEC_origin, Player_Origin) if (is_valid_ent(TakingEnt[id]) ) entity_get_vector(TakingEnt[id], EV_VEC_origin, Entity_Origin) if( is_user_alive(id) && is_valid_ent(TakingEnt[id]) && get_user_button( id ) & IN_ATTACK && get_user_weapon(id)==CSW_KNIFE && get_distance_f(Entity_Origin, Player_Origin) <= GiftDistance) { if( get_user_oldbutton( id ) & IN_ATTACK ) { log_to_file(drop_reg_dir,"Taking: taking") TimerElement[id]++ if (TimerElement[id]/2==GiftTime) { log_to_file(drop_reg_dir,"Taking: taken") ActiveTask[id]=false if (is_valid_ent(TakingEnt[id]) ) remove_entity(TakingEnt[id]) TakingEnt[id]=0 new GiftAward GiftAward = random_num(1,100) new sMsg[128] if (GiftAward<26) { Speed[id]=get_user_maxspeed(id)+SpeedBoost set_user_maxspeed(id, Speed[id]) //format(sMsg, 127, "^x04Gracz ^x03%s ^x04ukonczyl mape w ^x03%02d:%02d", sName, TimerS[id] / 60, TimerS[id] % 60); format(sMsg, 127, "^x01You collected supplies! You have ^x03[^x04+50speed^x03]^x01!") Speedied[id]=true } else if (GiftAward>25 && GiftAward<51) { new Float:gravity = get_user_gravity(id) Gravitie[id]=gravity*GravityBoost set_user_gravity(id, Gravitie[id]) format(sMsg, 127, "^x01You collected supplies! You have ^x03[^x04-10proc gravity^x03]^x01!") Gravitied[id]=true } else if (GiftAward>50 && GiftAward<76) { new hp = get_user_health(id) set_user_health(id, hp+30) format(sMsg, 127, "^x01You collected supplies! You have ^x03[^x04+30Hp^x03]^x01!") } else if (GiftAward>75 && GiftAward<81) { set_user_health(id, get_user_health(id)/2) format(sMsg, 127, "^x01This is not a good supplies! You have ^x03[^x04 been poisoned^x03]^x01!") } else if (GiftAward>80 && GiftAward<86) { Speedied[id]=true Gravitied[id]=true Speed[id]=get_user_maxspeed(id)+SpeedBoost set_user_maxspeed(id, Speed[id]) new Float:gravity = get_user_gravity(id) Gravitie[id]=gravity*GravityBoost set_user_gravity(id, Gravitie[id]) new hp = get_user_health(id) set_user_health(id, hp+30) set_user_xp(id, get_user_xp(id) +40) format(sMsg, 127, "^x01You collected ultra supplies! You have ^x03[^x04+30Hp +50speed -10proc gravity +40XP^x03]^x01!") } else if (GiftAward>85 && GiftAward<91) { format(sMsg, 127, "^x01You collected Nothing! You have ^x03[^x04NOTHING^x03]^x01!") } else if (GiftAward>90 && GiftAward<100) { new XP = get_user_xp(id) set_user_xp(id, XP +40) format(sMsg, 127, "^x01You collected supplies! You have ^x03[^x04+40XP^x03]^x01!") } else { Reborn[id]=true format(sMsg, 127, "^x01You collected supplies! You have ^x03[^x04Reborn^x03]^x01!") } ColorChat(id,sMsg) remove_task(id + TakingTask) } } } else { log_to_file(drop_reg_dir,"Taking: not taken") Bar_Time(id,0) TakingEnt[id]=0 ActiveTask[id]=false CanBeTakenGift[i]=true remove_task(id + TakingTask) } }
public RebornAction(idTask) { log_to_file(drop_reg_dir,"RebornAction: Reborn active") new id = idTask - RebornTask if (Reborn[id]) { spawn(id) Reborn[id]=false set_task(0.5,"SpawnAgain",id+SpawnTask) } } public SpawnAgain(idTask) { log_to_file(drop_reg_dir,"SpawnAgain: Reborned") new id=idTask - SpawnTask spawn(id) new sMsg[128] format(sMsg,127,"^x03You can kill again?! ^x04Kill them all!") ColorChat(id,sMsg) }
public DiedReborn() { if(ENABLE==1) { new victim_id = read_data(2) if(Reborn[victim_id]) { log_to_file(drop_reg_dir,"DiedReborn: Died") set_task(5.0, "RebornAction", victim_id+RebornTask) } } }
public fw_EvCurWeapon( id ) { if (is_user_alive(id) && ENABLE==1) { if (cs_get_user_team(id)==CS_TEAM_CT) { if (Speedied[id] || Gravitied[id]) { log_to_file(drop_reg_dir,"fw_EvCurWeapon: swich weapon") if (Speedied[id]) set_user_maxspeed(id, Speed[id]) if(Gravitied[id]) set_user_gravity(id,Gravitie[id]) } } } }
stock ColorChat(id, sMessage[]) { new SayText = get_user_msgid("SayText"); if(id == 0) { for(new i = 1; i < 33; i++) { if(is_user_connected(i)) { message_begin(MSG_ONE, SayText, { 0, 0, 0 }, i) write_byte(i); write_string(sMessage); message_end(); } } } else { message_begin(MSG_ONE, SayText, { 0, 0, 0 }, id); write_byte(id); write_string(sMessage); message_end(); } }
Bar_Time(id, Time) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("BarTime"),_, id) write_short(Time) message_end() }
public show_help(id) { new motd[1501],iLen; iLen = formatex(motd, sizeof motd - 1,"<body bgcolor=#000000><font color=#98f5ff size=4><pre>"); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "Naudojimosi instrukcija<font color=#ecd707 size=3>"); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "Prasidejus raund per pirma minute bus ismesti 3 paketai, kuriuos gali paiimti tik zmones."); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "Paketa paimti galite pjausdydami ji greit su peiliu (MOUSE1). Paketas atsiranda paskui "); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "viena is zmoniu, jo eitame kelyje."); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "<font color=#98f5ff size=4> "); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "Paketo prizai:<font color=#ecd707 size=3>"); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "25/100 tikimybes rasti +50 maksimalaus greicio"); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "25/100 tikimybes rasti +30 hp"); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "25/100 tikimybes rasti -10proc gravitacijos"); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "9/100 tikimybes rasti +40 XP"); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "5/100 tikimybes rasti ultra bonus (+50 greicio +30 hp -10proc gravitacijos +40XP"); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "5/100 tikimybes, jog paketas bus tuscias"); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "5/100 tikimybes, jog paketas uznuodydas (-50proc hp)"); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "1/100 tikimybes rasti Reborn (prisikelima po mirties). Negalioja bunant paskutiniam gyvam.");
iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "<font color=#bd0101 size=6>"); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "Laukiame pasiulymu forume:"); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s^n", "ismetamu daiktu , paketo modelio ir kita."); iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"</body></font></pre>"); show_motd(id,motd, "Supplies info"); }
|