Edytowałem plugin poly_rtv, żeby w przypadku rozpoczęcia głosowania ustawiał czas mapy na 4 minuty. Przy kompilacji obyło się bez błędów, jednak na serwerze po wpisaniu rtv mapa zmieniła się od razu, a na następnej mapie cały czas pojawiał się komunikat z pojedynku na noże.
Tutaj kod do sma
/*<br>* RockTheVote for Polymorph<br>* Requires Polymorph v0.8.2 or later<br>*<br>*/<br><br>#include <amxmodx><br>#include <amxmisc><br>// #include <polymorph><br><br>native polyn_votemod()<br><br>new bool:g_rockedVote[33], g_rockedVoteCnt<br>new bool:g_hasbeenrocked = false<br><br>// Cvars<br>new cvar_rtv_enabled<br>new cvar_rtv_ratio<br>new cvar_rtv_wait<br>new cvar_rtv_show<br><br>public plugin_init()<br>{<br> register_plugin("Polymorph: RockTheVote", "1.0", "Fysiks")<br> <br> register_clcmd("amx_rtv","cmdAdminRTV", ADMIN_MAP, " Manually RockTheVote")<br> register_clcmd("admin_rtv","cmdAdminRTV", ADMIN_MAP, " Manually RockTheVote")<br> register_clcmd("say rtv", "cmdSayRTV")<br> register_clcmd("say rockthevote", "cmdSayRTV")<br> <br> // Cvars<br> cvar_rtv_enabled = register_cvar("rtv_enable", "1") // <0|1><br> cvar_rtv_ratio = register_cvar("rtv_ratio", "0.51") // Use amx_votemap_ratio?<br> cvar_rtv_wait = register_cvar("rtv_wait", "1") // Minutes after mapstart you can rtv<br> cvar_rtv_show = register_cvar("rtv_show", "1") // Display how many more votes needed to rtv<br>}<br><br>public cmdAdminRTV(id, level, cid)<br>{<br> if(!cmd_access(id,level,cid,1))<br> return PLUGIN_HANDLED<br> <br> if(g_hasbeenrocked)<br> {<br> client_print(id,print_console,"[RTV] Vote has already been rocked")<br> }<br> else<br> {<br> g_hasbeenrocked = true<br> new admin_name[32]<br> get_user_name(id, admin_name, 31)<br> show_activity(id, admin_name, "has RockedTheVote")<br> client_print(id,print_console, "[RTV] You have RockedTheVote")<br> set_task(3.5,"announce_vote")<br> set_task(5.0,"startRockVote")<br> }<br> // Add functionality to cancel rocked vote.<br> return PLUGIN_HANDLED<br>}<br><br>public client_connect(id)<br>{<br> g_rockedVote[id] = false<br>}<br><br>public client_disconnect(id)<br>{<br> if(g_rockedVote[id])<br> {<br> g_rockedVote[id] = false<br> g_rockedVoteCnt--<br> }<br>}<br><br>public cmdSayRTV(id)<br>{<br> if(!get_pcvar_num(cvar_rtv_enabled))<br> return PLUGIN_CONTINUE // PLUGIN_HANDLED<br> <br> if(g_hasbeenrocked)<br> {<br> client_print(id, print_chat, "[RTV] Vote has already been Rocked.")<br> return PLUGIN_HANDLED<br> }<br> <br> if(g_rockedVote[id])<br> {<br> client_print(id, print_chat, "[RTV] You already voted.")<br> rtv_remind()<br> return PLUGIN_CONTINUE // PLUGIN_HANDLED for blind?<br> }<br> <br> new Float:vote_wait = get_pcvar_float(cvar_rtv_wait)<br> new Float:time_elapsed = get_cvar_float("mp_timelimit") - (float( get_timeleft() ) / 60.0) // Use get_gametime<br> <br> if( time_elapsed < vote_wait )<br> {<br> // Can replace all this content with "You cannot RockTheVote yet."<br> // which would require no if statement or calculations.<br> <br> new Float:time_til_votebegin = vote_wait - time_elapsed<br> if(time_til_votebegin > 1.0)<br> {<br> new min_to_vote = clamp(floatround(time_til_votebegin),1,floatround(vote_wait))<br> client_print(id, print_chat, "[RTV] You cannot RockTheVote for %d more minute%s.", min_to_vote, min_to_vote > 1 ? "s" : "" )<br> }<br> else // time_til_votebegin <= 1 minute<br> {<br> client_print(id, print_chat, "[RTV] You cannot RockTheVote for %d more seconds.", floatround(time_til_votebegin * 60) )<br> }<br> <br> return PLUGIN_HANDLED<br> }<br> <br> if(get_timeleft() < 240 ) // don't allow rtv 4 minutes before map ends<br> {<br> client_print(id, print_chat, "[RTV] Too Late to RockTheVote.")<br> return PLUGIN_HANDLED<br> }<br> <br> // You (id) just voted to rock.<br> g_rockedVote[id] = true<br> g_rockedVoteCnt++<br> client_print(id,print_chat, "[RTV] You chose to RockTheVote")<br> <br> if( g_rockedVoteCnt >= get_RocksNeeded() ) // Decide if we rock the vote<br> {<br> g_hasbeenrocked = true<br> client_print(0,print_chat, "[RTV] The Vote has been Rocked!")<br> server_cmd("mp_timelimit 4") // jedyna komenda dopisana przezemnie<br> set_task(3.5,"announce_vote")<br> set_task(5.0,"startRockVote")<br> }<br> else<br> {<br> rtv_remind()<br> }<br> <br> return PLUGIN_CONTINUE<br>}<br><br>public startRockVote()<br>{<br> polyn_votemod()<br>}<br><br>get_RocksNeeded()<br>{<br> return floatround(get_pcvar_float(cvar_rtv_ratio) * float(get_realplayersnum()), floatround_ceil);<br>}<br><br>stock get_realplayersnum()<br>{<br> new players[32], playerCnt;<br> get_players(players, playerCnt, "ch");<br> <br> return playerCnt;<br>}<br><br>rtv_remind()<br>{<br> if(get_pcvar_num(cvar_rtv_show))<br> { // Not tested yet.<br> client_print(0,print_chat, "[RTV] Need %d more players to RockTheVote.", get_RocksNeeded() - g_rockedVoteCnt)<br> }<br>}<br><br>public announce_vote()<br>{<br> client_cmd(0, "spk buttons/blip2") // Moved here from startRockVote to give heads up<br>}
Co może powodować takie błędy ?
Użytkownik Gasior edytował ten post 25.03.2012 14:22