Количество нужных голосов, от всех игроков |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
+
) или ссылку на плагин который вызывает у вас вопросы.
|
|
Количество нужных голосов, от всех игроков |
Legenda
|
6.11.2013, 11:34
Сообщение
|
![]() ![]() |
типа мини функции для работы с битами памяти и переменных
аналог +1 и -1 и проверки значений, только в битах Цитата Это сборка из макросов и bitwise-операторов. BIT_VALID проверяет наличие определённого бита в переменной, BIT_ADD устанавливает нужный бит, BIT_SUB - убирает, а BIT_NOT_VALID в данном примере эквивалентен !BIT_VALID. В BIT_ADD(g_iBitClientAccess, id) в макрос подставляются: вместо %1 - g_iBitClientAccess, вместо %2 - id. ps забыл, должно быть так Код public client_disconnect(id)
{ if (BIT_VALID(g_iBitVote, id)) { vote_countBooss-- BIT_SUB(g_iBitVote, id); } checkVote(); } |
Поблагодарили 1 раз
|
|
| underwoker |
6.11.2013, 11:48
Сообщение
|
|
|
Спасибо. :)
Но тут проблемка при компиле: Код //AMXXPC compile.exe // by the AMX Mod X Dev Team //// zl_votesboss.sma // C:\Users\PC.PC\Documents\scripting\zl_votesboss.sma(26) : error 017: undefine d symbol "BIT_NOT_VALID" // C:\Users\PC.PC\Documents\scripting\zl_votesboss.sma(30) : error 017: undefine d symbol "BIT_ADD" // C:\Users\PC.PC\Documents\scripting\zl_votesboss.sma(77) : error 017: undefine d symbol "BIT_VALID" // C:\Users\PC.PC\Documents\scripting\zl_votesboss.sma(80) : error 017: undefine d symbol "BIT_SUB" // C:\Users\PC.PC\Documents\scripting\zl_votesboss.sma(102) : warning 203: symbo l is never used: "g_iBitVote" // // 4 Errors. // Could not locate output file C:\Users\PC.PC\Documents\scripting\compiled\zl_v otesboss.amx (compile failed). // // Compilation Time: 0,12 sec // ---------------------------------------- Press enter to exit ... Скрытый текст Код #include <amxmodx> #define NAME "[BOSS] Vote" #define VERSION "1.2" #define AUTHOR "adassfaf" #define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1))) #define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1))) #define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1))) #define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1))) #define MAP_BOSS "zl_boss_oberon" new g_iBitVote; new vote_countBooss; public plugin_init() { register_clcmd("say /boss","bossfun"); register_event("HLTV", "NextMaps0", "a", "1=0", "2=0") } public bossfun(id) { new Name[32] if (BIT_NOT_VALID(g_iBitVote)) { get_user_name(id, Name, 31) vote_countBooss++; BIT_ADD(g_iBitVote); checkVote(); ChatColor(0, "!g[Босс] !team%s !yПроголосовал за !gБосса! !y(Осталось !g%d !yголосов)", Name, vote_countBooss) ChatColor(0, "!g[Босс] !yВведите в чат !g/boss !yдля голосования за карту !gбосса!y!") } else ChatColor(id, "!g[Босс] !yВы уже голосовали за !gБосса!y!") } stock get_percent(value, tvalue) { return floatround(floatmul(float(value) / float(tvalue) , 100.0)); } public checkVote() { new players = get_playersnum(); new iPercent = get_percent(vote_countBooss, players); if (iPercent >= 50) { set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0) show_hudmessage(0, "[Босс]^nГолосование завершено!^nВ следующем раунде будет Босс!") } } public NextMaps0() { set_task(2.0, "NextMaps1") } public NextMaps1() { if(Vote_Complete) { set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0) show_hudmessage(0, "[Босс]^nПриготовьтесь к бою!^nМеняется карта на Босса!") set_task(6.0, "NextMaps") } } public NextMaps() { server_cmd("changelevel ^"%s^"", MAP_BOSS) } public client_disconnect(id) { if (BIT_VALID(g_iBitVote)) { vote_countBooss-- BIT_SUB(g_iBitVote); } checkVote(); } stock ChatColor(const id, const input[], any:...) { new count = 1, players[32] static msg[191] vformat(msg, 190, input, 3) replace_all(msg, 190, "!g", "^4") // Green Color replace_all(msg, 190, "!y", "^1") // Default Color replace_all(msg, 190, "!team", "^3") // Team Color if (id) players[0] = id; else get_players(players, count, "ch"); { for (new i = 0; i < count; i++) { if (is_user_connected(players[i])) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]) write_byte(players[i]); write_string(msg); message_end(); } } } } Я немного подредактировал твой код, вот хотел узнать, как в строке: Код ChatColor(0, "!g[Босс] !team%s !yПроголосовал за !gБосса! !y(Осталось !g%d !yголосов)", Name, vote_countBooss) Сделать чтобы показывало сколько осталось голосов? На данный момент как я понял будет показывать набранное.
Отредактировал: underwoker, - 6.11.2013, 11:54
|
|
|
|
Legenda
|
6.11.2013, 12:09
Сообщение
|
![]() ![]() |
упс, затупил))
вот это компилируется, проверил Скрытый текст Код #include <amxmodx> #define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1))) #define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1))) #define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1))) #define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1))) new g_iBitVote; new vote_countBooss; public plugin_init() { register_clcmd("say /boss","bossfun"); } public bossfun(id) { if (BIT_NOT_VALID(g_iBitVote, id)) { vote_countBooss++; BIT_ADD(g_iBitVote, id); checkVote(); client_print(id, print_chat, "Ваш голос принят за боса"); } else client_print(id, print_chat, "Вы уже голосовали"); } stock get_percent(value, tvalue) { return floatround(floatmul(float(value) / float(tvalue) , 100.0)); } public checkVote() { new players = get_playersnum(); new iPercent = get_percent(vote_countBooss, players); if (iPercent >= 50) server_cmd("changelevel de_dust2"); } public client_disconnect(id) { if (BIT_VALID(g_iBitVote, id)) { vote_countBooss--; BIT_SUB(g_iBitVote, id); } checkVote(); } Цитата Сделать чтобы показывало сколько осталось голосов? На данный момент как я понял будет показывать набранное. Взять кол-во игроков на сервере, получить от них нужный процент и вычесть кол-во проголосовавших. upd обновил пост |
Поблагодарили 1 раз
|
|
Safety1st
|
6.11.2013, 12:11
Сообщение
|
|
|
Ребята, научитесь спойлеры юзать.
|
Поблагодарили 1 раз
|
|
| underwoker |
6.11.2013, 13:09
Сообщение
|
|
|
Скрытый текст Код #include <amxmodx> #define NAME "[BOSS] Vote" #define VERSION "1.2" #define AUTHOR "Alexander.3" #define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1))) #define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1))) #define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1))) #define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1))) #define MAP_BOSS "zl_boss_oberon" new g_iBitVote; new vote_countBooss; public plugin_init() { register_plugin(NAME, VERSION, AUTHOR) register_clcmd("say /boss","bossfun"); register_event("HLTV", "NextMaps0", "a", "1=0", "2=0") } public bossfun(id) { new Name[32] if (BIT_NOT_VALID(g_iBitVote, id)) { get_user_name(id, Name, 31) vote_countBooss++; BIT_ADD(g_iBitVote, id); checkVote(); ChatColor(0, "!g[Босс] !team%s !yПроголосовал за !gБосса! !y(Набрано !g%d !yголосов)", Name, vote_countBooss) ChatColor(0, "!g[Босс] !yВведите в чат !g/boss !yдля голосования за карту !gбосса!y!") } else ChatColor(id, "!g[Босс] !yВы уже голосовали за !gБосса!y!") } stock get_percent(value, tvalue) { return floatround(floatmul(float(value) / float(tvalue) , 100.0)); } public checkVote() { new players = get_playersnum(); new iPercent = get_percent(vote_countBooss, players); if (iPercent >= 50) { set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0) show_hudmessage(0, "[Босс]^nГолосование завершено!^nВ следующем раунде будет Босс!") } } public NextMaps0() { set_task(2.0, "NextMaps1") } public NextMaps1() { set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0) show_hudmessage(0, "[Босс]^nПриготовьтесь к бою!^nМеняется карта на Босса!") set_task(6.0, "NextMaps") } public NextMaps() { server_cmd("changelevel ^"%s^"", MAP_BOSS) } public client_disconnect(id) { if (BIT_VALID(g_iBitVote, id)) { vote_countBooss--; BIT_SUB(g_iBitVote, id); } checkVote(); } stock ChatColor(const id, const input[], any:...) { new count = 1, players[32] static msg[191] vformat(msg, 190, input, 3) replace_all(msg, 190, "!g", "^4") // Green Color replace_all(msg, 190, "!y", "^1") // Default Color replace_all(msg, 190, "!team", "^3") // Team Color if (id) players[0] = id; else get_players(players, count, "ch"); { for (new i = 0; i < count; i++) { if (is_user_connected(players[i])) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]) write_byte(players[i]); write_string(msg); message_end(); } } } } Вот с этим кодом сервер падает, логично что и с вашим тоже самое. :C Т.к. тут мало что изменено.
Отредактировал: underwoker, - 6.11.2013, 13:09
|
|
|
|
Safety1st
|
6.11.2013, 13:23
Сообщение
|
|
|
NextMaps0() каждый раунд выполняется. И дело не в коде Legenda.
В checkVote() нужно, когда голоса набраны, ставить значение у какой-нибудь переменной, а в NextMaps0() её проверять. |
Поблагодарили 2 раз
|
|
| underwoker |
6.11.2013, 13:40
Сообщение
|
|
|
|
|
|
|
| underwoker |
6.11.2013, 14:27
Сообщение
|
|
|
Скрытый текст Код #include <amxmodx> #define NAME "[BOSS] Vote" #define VERSION "1.2" #define AUTHOR "Alexander.3" #define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1))) #define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1))) #define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1))) #define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1))) #define MAP_BOSS "zl_boss_oberon" new g_iBitVote; new bool:Vote_Complete new vote_countBooss; public plugin_init() { register_plugin(NAME, VERSION, AUTHOR) register_clcmd("say /boss","bossfun"); register_event("HLTV", "NextMaps0", "a", "1=0", "2=0") } public bossfun(id) { new Name[32] new players players = get_playersnum() if (BIT_NOT_VALID(g_iBitVote, id)) { get_user_name(id, Name, 31) vote_countBooss++; BIT_ADD(g_iBitVote, id); checkVote(); ChatColor(0, "!g[Босс] !team%s !yПроголосовал за !gБосса! !y(Набрано !g%d !yголосов)", Name, (get_pcvar_num(players)-vote_countBooss) * 100.00) ChatColor(0, "!g[Босс] !yВведите в чат !g/boss !yдля голосования за карту !gбосса!y!") } else ChatColor(id, "!g[Босс] !yВы уже голосовали за !gБосса!y!") } stock get_percent(value, tvalue) { return floatround(floatmul(float(value) / float(tvalue) , 100.0)); } public checkVote() { new players = get_playersnum(); new iPercent = get_percent(vote_countBooss, players); if (iPercent >= 50) { set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0) show_hudmessage(0, "[Босс]^nГолосование завершено!^nВ следующем раунде будет Босс!") Vote_Complete = true } } public NextMaps0() { if(Vote_Complete) { set_task(2.0, "NextMaps1") } } public NextMaps1() { set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0) show_hudmessage(0, "[Босс]^nПриготовьтесь к бою!^nМеняется карта на Босса!") set_task(6.0, "NextMaps") } public NextMaps() { server_cmd("changelevel ^"%s^"", MAP_BOSS) } public client_disconnect(id) { if (BIT_VALID(g_iBitVote, id)) { vote_countBooss--; BIT_SUB(g_iBitVote, id); } checkVote(); } stock ChatColor(const id, const input[], any:...) { new count = 1, players[32] static msg[191] vformat(msg, 190, input, 3) replace_all(msg, 190, "!g", "^4") // Green Color replace_all(msg, 190, "!y", "^1") // Default Color replace_all(msg, 190, "!team", "^3") // Team Color if (id) players[0] = id; else get_players(players, count, "ch"); { for (new i = 0; i < count; i++) { if (is_user_connected(players[i])) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]) write_byte(players[i]); write_string(msg); message_end(); } } } } Сделал так, теперь при вводе ?boss сервер офф. Не знаю что делать. |
|
|
|
Legenda
|
6.11.2013, 14:37
Сообщение
|
![]() ![]() |
Скрытый текст Код #include <amxmodx> #define NAME "[BOSS] Vote" #define VERSION "1.2" #define AUTHOR "Alexander.3" #define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1))) #define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1))) #define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1))) #define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1))) #define MAP_BOSS "zl_boss_oberon" new g_iBitVote; new bool:Vote_Complete new vote_countBooss; public plugin_init() { register_plugin(NAME, VERSION, AUTHOR) register_clcmd("say /boss","bossfun"); register_event("HLTV", "NextMaps0", "a", "1=0", "2=0") } public bossfun(id) { new Name[32] new players players = get_playersnum() if (BIT_NOT_VALID(g_iBitVote, id)) { get_user_name(id, Name, 31) vote_countBooss++; BIT_ADD(g_iBitVote, id); checkVote(); ChatColor(0, "!g[Босс] !team%s !yПроголосовал за !gБосса! !y(Набрано !g%d !yголосов)", Name, (get_pcvar_num(players)-vote_countBooss) * 100.00) ChatColor(0, "!g[Босс] !yВведите в чат !g/boss !yдля голосования за карту !gбосса!y!") } else ChatColor(id, "!g[Босс] !yВы уже голосовали за !gБосса!y!") } stock get_percent(value, tvalue) { return floatround(floatmul(float(value) / float(tvalue) , 100.0)); } public checkVote() { new players = get_playersnum(); new iPercent = get_percent(vote_countBooss, players); if (iPercent >= 50) { set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0) show_hudmessage(0, "[Босс]^nГолосование завершено!^nВ следующем раунде будет Босс!") Vote_Complete = true } } public NextMaps0() { if(Vote_Complete) { set_task(2.0, "NextMaps1") } } public NextMaps1() { set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0) show_hudmessage(0, "[Босс]^nПриготовьтесь к бою!^nМеняется карта на Босса!") set_task(6.0, "NextMaps") } public NextMaps() { server_cmd("changelevel ^"%s^"", MAP_BOSS) } public client_disconnect(id) { if (BIT_VALID(g_iBitVote, id)) { vote_countBooss--; BIT_SUB(g_iBitVote, id); } checkVote(); } stock ChatColor(const id, const input[], any:...) { new count = 1, players[32] static msg[191] vformat(msg, 190, input, 3) replace_all(msg, 190, "!g", "^4") // Green Color replace_all(msg, 190, "!y", "^1") // Default Color replace_all(msg, 190, "!team", "^3") // Team Color if (id) players[0] = id; else get_players(players, count, "ch"); { for (new i = 0; i < count; i++) { if (is_user_connected(players[i])) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]) write_byte(players[i]); write_string(msg); message_end(); } } } } Сделал так, теперь при вводе ?boss сервер офф. Не знаю что делать. попробуй из 7 сообщения плагин для начала get_pcvar_num(players) - это вообще ерунда какая-то |
Поблагодарили 1 раз
|
|
Safety1st
|
6.11.2013, 14:50
Сообщение
|
|
|
@underwoker Можно узнать, почему вы мой совет вы ценным не посчитали? Плагин не работает корректно, как и в прошлый раз, потому что вы не совсем то накодили. Но ведь и по логике очевидно, что совет дельный. Или же вы цените только готовый код? ;) |
Поблагодарили 1 раз
|
|
| underwoker |
6.11.2013, 17:21
Сообщение
|
|
|
@underwoker Можно узнать, почему вы мой совет вы ценным не посчитали? Плагин не работает корректно, как и в прошлый раз, потому что вы не совсем то накодили. Но ведь и по логике очевидно, что совет дельный. Или же вы цените только готовый код? ;) Ээ. Не совсем понял, почему вы считаете, что я не посчитал ваш совет ценным? В чем это проявилось? попробуй из 7 сообщения плагин для начала get_pcvar_num(players) - это вообще ерунда какая-то Проверить этот плагин получится только ночью. То-есть отписать вам работоспособность могу только ночью. По поводу ерунды, я не бог скриптинга, потому основываясь на вашем посте: Цитата Взять кол-во игроков на сервере, получить от них нужный процент и вычесть кол-во проголосовавших. Сделал как мог. |
|
|
|
Safety1st
|
6.11.2013, 18:29
Сообщение
|
|
|
Ээ. Не совсем понял, почему вы считаете, что я не посчитал ваш совет ценным? В чем это проявилось? Вы уже пофиксили это. Внимание к деталям ;) По поводу ерунды, я не бог скриптинга ... Сделал как мог. Никто не бог) Грамотный код обычно работает корректно. Переписал ваше творение. Не проверял. Ради Бога, до проверки сами ничего не меняйте. Волшебный код Код:
#include <amxmodx> |
Поблагодарили 1 раз
|
|
| underwoker |
6.11.2013, 18:35
Сообщение
|
|
|
Вы уже пофиксили это. Внимание к деталям ;) Никто не бог) Грамотный код обычно работает корректно. Переписал ваше творение. Не проверял. Ради Бога, до проверки сами ничего не меняйте. Волшебный код Код:
#include <amxmodx> Так все что нужно было я уже вписал в то что вам скинул) Спасибо заранее. :) Сейчас пойду тестировать. |
|
|
|
Safety1st
|
6.11.2013, 20:53
Сообщение
|
|
|
Не волнуйтесь: переписано с учётом 1-го поста. Так проще, чем искать причину 'а почему этот код не работает?' Да и просто ряд улучшений плагину не помешал бы ;)
|
Поблагодарили 1 раз
|
|
| underwoker |
6.11.2013, 22:04
Сообщение
|
|
|
Да, мы не доходили до стадии смены карты) Но подсчет кол-ва нужных голосов и набранных работает отлично! Отпишу как проверим смену мапы. :)
|
|
|
|
| underwoker |
7.11.2013, 9:25
Сообщение
|
|
|
Все работает просто отлично! Спасибо вам Safety1st, :)
|
|
|
|
![]() ![]() |