Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Слишком большое значение

Статус пользователя roma1996
сообщение 18.10.2014, 14:01
Сообщение #1
Стаж: 15 лет

Сообщений: 160
Благодарностей: 12
Полезность: < 0

Всем привет, нашел плагин для своего сервера чтобы можно было вызывать голосование для босса, но там не учитывается количество игроков на сервере, тоесть в исходнике стоит 20 голосов для начала голосования, и если на сервере будет 8 игроков - всеравно нужно будет 20 голосов, хоть и на сервере 8 человек, я хочу сделать, чтобы к-ство голосов было 60% всех игроков на сервере, вроде все сделал, без ошибок, но когда вызывая голосование пишет 1085739575 голосов нужно для начала голосования, не пойму в чем проблема, может кто знает?

Вот исходник:
Исходник
Код:
#include <amxmodx>
#include <PrintChat>
#include <amxmisc>

#define HOURS 3
#define MINUTES 0
#define SECONDS 0

new VOTES;
new g_iTime;
new g_iBoss;
new g_iVotes;
new g_iPlayerVote[33];
new players;
new g_szMaps[][] =
{
"zp_boss_city",
"zp_oberon_arena"
}

public plugin_init()
{
// register_menucmd(register_menuid("VoteBoss"), MENU_KEY_1 | MENU_KEY_2 | MENU_KEY_3 | MENU_KEY_4 | MENU_KEY_0, "MenuVoteBoss");

register_clcmd("vtboss", "ClCmdVtboss");
register_clcmd("say /boss", "ClCmdVtboss");
register_clcmd("say_team /boss", "ClCmdVtboss");

register_event("HLTV", "EventRoundStart", "a", "1=0", "2=0");

new szTime[12];

if (get_localinfo("vtbss", szTime, charsmax(szTime))) g_iTime = str_to_num(szTime);

if (get_systime() < g_iTime) set_task(float(g_iTime - get_systime()), "TaskCanVote");
else set_task(120.0, "TaskAdv", _, _, _, "b");

register_dictionary("zp_voteboss.txt");
}

public TaskCanVote()
{
PrintChat(0, "%L", LANG_PLAYER, "#VtbossCanVote");

PrintChat(0, "%L", LANG_PLAYER, "#VtbossAdv");

set_task(120.0, "TaskAdv", _, _, _, "b");
}

public TaskAdv()
{
PrintChat(0, "%L", LANG_PLAYER, "#VtbossAdv");
}

public client_disconnect(iEntity)
{
if (g_iPlayerVote[iEntity])
{
g_iVotes--;

g_iPlayerVote[iEntity] = 0;
}
}

public ClCmdVtboss(iEntity)
{
players = get_playersnum()
VOTES = (players /100.0) * 60.0;

if (g_iPlayerVote[iEntity])
{
PrintChat(iEntity, "%L", iEntity, "#VtbossYouAlready");

return PLUGIN_HANDLED;
}

if (g_iBoss)
{
PrintChat(iEntity, "%L", iEntity, "#VtbossAlready");

return PLUGIN_HANDLED;
}

new iTime = g_iTime - get_systime();

if (iTime > 0)
{
new iMinutes = (iTime / 60) + ((iTime % 60) ? 1 : 0);
new iHours = (iMinutes / 60);

iMinutes %= 60;

if (iHours) PrintChat(iEntity, "%L", iEntity, "#VtbossWaitHours", iHours, iMinutes);
else PrintChat(iEntity, "%L", iEntity, "#VtbossWaitMinutes", iMinutes);

return PLUGIN_HANDLED;
}

g_iPlayerVote[iEntity] = 1;

if (++g_iVotes == VOTES)
{
new szLang[32];

g_iBoss = 1;

formatex(szLang, charsmax(szLang), "#VtbossNext%d", g_iBoss);

PrintChat(0, "%L", LANG_PLAYER, szLang);

remove_task();

return PLUGIN_HANDLED;
}

new szLang[32];
formatex(szLang, charsmax(szLang), "#VtbossChosen%d", 1);

PrintChat(0, "%L", LANG_PLAYER, szLang, VOTES - g_iVotes);

return PLUGIN_HANDLED;
}

public EventRoundStart()
{
if (g_iBoss)
{
server_cmd("changelevel %s", g_szMaps[random_num(0,1)]);

new szTime[12]

num_to_str(get_systime() + HOURS * 3600 + MINUTES * 60 + SECONDS, szTime, charsmax(szTime));

set_localinfo("vtbss", szTime);
}
}


Где здесь может быть ошибка?
Код:
	players = get_playersnum()
VOTES = (players /100.0) * 60.0;


p.s. Модераторы, прошу прощения за то, что создал тему не в том разделе.

Отредактировал: roma1996, - 18.10.2014, 14:20
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя KaJIbIBaH
сообщение 18.10.2014, 18:17
Сообщение #2


Стаж: 19 лет

Сообщений: 151
Благодарностей: 142
Полезность: 929

roma1996, в строчке
VOTES = (players /100.0) * 60.0;
всегда получается 0, т.к. переменная VOTES - целочисленная (integer), а должна быть float.

Чтобы исправить ситуацию, отредактируем строку 9:
Код:
new VOTES;

->
Код:
new Float:VOTES;


А ещё, думаю, лучше заменить
Код:
   if (++g_iVotes == VOTES)

->
Код:
   if (++g_iVotes >= VOTES)

а то у нас кривые дробные числа, а мы тут строкое равенство требуем...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: