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

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

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

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

Фикс ошибки вывода HUD

Статус пользователя drivemaster
сообщение 25.11.2015, 10:02
Сообщение #1


Стаж: 17 лет

Сообщений: 266
Благодарностей: 79
Полезность: 246

Помогите пофиксить ошибку, а то в логах периодически вылезает следующее:
Код:
L 11/18/2015 - 03:50:19: Start of error session.
L 11/18/2015 - 03:50:19: Info (map "aim_headshot") (file "addons/amxmodx/logs/error_20151118.log")
L 11/18/2015 - 03:50:19: [AMXX] Displaying debug trace (plugin "amx_votemod.amxx")
L 11/18/2015 - 03:50:19: [AMXX] Run time error 4: index out of bounds
L 11/18/2015 - 03:50:19: [AMXX] [0] amx_votemod.sma::LoadHUD (line 166)
L 11/18/2015 - 03:50:58: [AMXX] Displaying debug trace (plugin "amx_votemod.amxx")
L 11/18/2015 - 03:50:58: [AMXX] Run time error 4: index out of bounds
L 11/18/2015 - 03:50:58: [AMXX] [0] amx_votemod.sma::LoadHUD (line 166)

Код функции
Код:
public LoadHUD()
{
new hudmessage[76]
format(hudmessage, 75, "[ %s ] - Active!", menuBody[loaded]);

for(new i = 1; i <= get_playersnum(); i++)
{
if(is_user_connected(i))
{
set_hudmessage(i, 255, 0, 0.01, 0.75, 0, 6.0, 5.0, 0.0, 0.0, -1)
show_hudmessage(i, "%s", hudmessage);
}
}

set_task(1.0, "LoadHUD");

return PLUGIN_CONTINUE;
}


Спасибо!

Отредактировал: drivemaster, - 25.11.2015, 10:08
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя simba
сообщение 25.11.2015, 10:33
Сообщение #2
Стаж: 11 лет

Сообщений: 132
Благодарностей: 45
Полезность: 236

Очень плохой код.
Вызов функции из себя же через секунду?
return PLUGIN_CONTINUE - зачем это?
get_playersnum() - зачем это? если потом is_user_connected стоит

Отредактировал: simba, - 25.11.2015, 10:38
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Norman111
сообщение 25.11.2015, 10:33
Сообщение #3


Стаж: 13 лет

Сообщений: 328
Благодарностей: 230
Полезность: 403

Целиком исходник под спойлер скинь
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Vaqtincha
сообщение 25.11.2015, 10:58
Сообщение #4
Стаж: 11 лет

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

я бы такое вообще не ставил на сервер.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя drivemaster
сообщение 25.11.2015, 11:45
Сообщение #5


Стаж: 17 лет

Сообщений: 266
Благодарностей: 79
Полезность: 246

Цитата
Очень плохой код.
Вызов функции из себя же через секунду?
return PLUGIN_CONTINUE - зачем это?
get_playersnum() - зачем это? если потом is_user_connected стоит

Я не автор данного плагина.

Цитата
Целиком исходник под спойлер скинь

https://forums.alliedmods.net/showthread.php?t=21585

Код плагина
Код:
new const VOTEMOD_PLUGIN[] = "Vote Mod"
new const VOTEMOD_AUTHOR[] = "Soloist"
new const VOTEMOD_VERSION[] = "4.6"

/*
Vote mod starts a vote on the beginning of each map and allows
you to chose a Counter-Strike mini mod.

Features
- A cfg file where the server op adds in the plugin he/she wants to use.

Client Commands:
* showmods - displays the mods on the server

Admin Commands:
* amx_votemod - Admin with vote flag can starts the vote
* amx_votemenu - Admins can select what mod they want

Server Commands:
* amx_defaultcfg <cfg file>
* amx_addvotemenu <menu text> <CVAR/On Command> <Off Command>

Future Plans
* Add a cfg file for maps that should not start a vote.

Written By Soloist
Version 4.6
Last Updated On 09/24/06

********************************************************************************
*****

Changelog
Version 4.6
* Doesn't restart round when No Mod is voted
Version 4.5
* Fixed HUD channel problem
* Add the ability to load mods by cfg files.
* Added a minimum number of players for the mod.
* Added default cfg file
Version 4.1
* Fixed HUD message error
* Attempt to fix the HUD channel problem with it convicting with other plugins
Version 4.0
* Change the Setting hostname Define to a CVAR
* The hostname is set automaticly now.
* Added HUD message displaying which mod is loaded
* Added a boolean so that only one vote can be started
Version 3.5
* Changed server command to amx_addvotemenu <menu text> <CVAR/On Command> <Off Command>
* so now the server can run mods with on/off commands i.e. GabenMod
* Added client command showmods to display mods on the server
* Cleaned Code
Version 3.0
* There must be 2 players before vote starts
* Cleaned Code
Version 2.6
* Made No Mod the default if no votes are made
* Fixed Admin Menu bug
Version 2.5
* Added Admin Menu
* Cleaned Code
Version 2.1
* Fixed No Mod Bug
Version 2.0
* Reworked code.
* Added a config file.
* All mods are supported
Version 1.1
* Clean up code
* Fixed counting bug
* Added define for setting the hostname
Version 1.0
* Release of the plugin
*/

// ---------- Adjust below settings to your liking ---------------------------------------
#define ADMINVOTEMOD ADMIN_VOTE // Admin access for the vote mod command
#define ADMINVOTEMENU ADMIN_LEVEL_A // Admin access for vote menu command

//#define DEBUG // Comment this out if you don't want added server print messages.
// ---------- Adjust above settings to your liking ---------------------------------------

#include <amxmodx>
#include <amxmisc>

#define MAXMENUS 9
#define STRINGSIZE 32
#define STRINGLENGTH STRINGSIZE - 1

new menuNumber = 0;
new menuBody[MAXMENUS][STRINGSIZE];
new minPlayers[MAXMENUS];
new menuCmd1[MAXMENUS][STRINGSIZE];
new menuCmd2[MAXMENUS][STRINGSIZE];
new defaultCfgFile[STRINGSIZE];

new bool:voteStarted;
new count[10];
new name[24];
new playerNum;
new loaded = -1;

new menu[512];
new keys;

new hostname[75]

new configs[128];

public plugin_init()
{
register_plugin(VOTEMOD_PLUGIN, VOTEMOD_VERSION, VOTEMOD_AUTHOR);

register_cvar("VoteMod_Version", VOTEMOD_VERSION, FCVAR_SERVER|FCVAR_SPONLY);
set_cvar_string("VoteMod_Version", VOTEMOD_VERSION);

register_menucmd(register_menuid("Vote_Mod"), 1023, "Vote");
register_menucmd(register_menuid("Vote_Admin"), 1023, "VoteAdmin");

register_concmd("amx_votemod", "ShowVote", ADMINVOTEMOD, "- starts a vote for a minimod");
register_concmd("amx_votemenu", "ShowVoteAdmin", ADMINVOTEMENU, "- displays a menu to choose a mod");

register_clcmd("showmods", "ShowMods", 0, " - shows the mods on the server");

register_srvcmd("amx_addvotemenu", "AddVoteMenu", 0, "<menu text> <CVAR/On Command> <Off Command> - Add a menu item to the Vote Mod Plugin");
register_srvcmd("amx_defaultcfg", "DefaultCfg", 0, "<Default cfg - Default CFG file");

register_cvar("vm_numplayers", "2");
register_cvar("vm_sethostname", "0");

// Add menu items
get_configsdir(configs, 127);
server_cmd("exec %s/VoteMod/votemenu.cfg", configs);

set_task(5.0, "plugin_start");
set_task(5.0, "SetDefaults");

return PLUGIN_CONTINUE;
}

public plugin_start()
{
if(get_cvar_num("vm_sethostname") == 1)
get_cvar_string("hostname", hostname, 74);
}

public plugin_end()
{
if(get_cvar_num("vm_sethostname") == 1)
set_cvar_string("hostname", hostname);
}
public client_putinserver()
{
playerNum++;
if(playerNum == get_cvar_num("vm_numplayers") && loaded == -1)
set_task(20.0,"ShowVote");
}

public client_disconnect(id)
playerNum--;

public LoadHUD()
{
new hudmessage[76]
format(hudmessage, 75, "%s is currently running", menuBody[loaded]);

for(new i = 1; i <= get_playersnum(); i++)
{
if(is_user_connected(i))
{
set_hudmessage(i, 255, 0, 0.01, 0.75, 0, 6.0, 5.0, 0.0, 0.0, -1)
show_hudmessage(i, "%s", hudmessage);
}
}

set_task(1.0, "LoadHUD");

return PLUGIN_CONTINUE;
}

public SetDefaults()
{
if(!equal(defaultCfgFile, ""))
{
server_cmd("exec %s/VoteMod/%s", configs, defaultCfgFile);
#if defined DEBUG
server_print("Exec %s", defaultCfgFile);
#endif
}

for(new i = 0; i < menuNumber; i++)
{
if(equal(menuCmd2[i], ""))
{
if(containi(menuCmd1[i], ".cfg") == -1)
{
set_cvar_num(menuCmd1[i], 0);

#if defined DEBUG
server_print("Setting %s", menuCmd1[i]);
#endif
}
}
else
{
server_cmd(menuCmd2[i]);

#if defined DEBUG
server_print("Setting %s", menuCmd2[i]);
#endif
}
}
}

public AddVoteMenu()
{
// AddMenu(const sMenuBody[], const sMinPlayers[], const sMenuCmd1[], const sMenuCmd2[])
new menuBody[STRINGSIZE], minPlayers[STRINGSIZE], menuCmd1[STRINGSIZE], menuCmd2[STRINGSIZE];
read_argv(1, menuBody, STRINGLENGTH);
read_argv(2, minPlayers, 1);
read_argv(3, menuCmd1, STRINGLENGTH);
read_argv(4, menuCmd2, STRINGLENGTH);

AddMenu(menuBody, minPlayers, menuCmd1, menuCmd2);
}

public AddMenu(const sMenuBody[], const sMinPlayers[], const sMenuCmd1[], const sMenuCmd2[])
{
copy(menuBody[menuNumber], STRINGLENGTH, sMenuBody);
minPlayers[menuNumber] = str_to_num(sMinPlayers);
copy(menuCmd1[menuNumber], STRINGLENGTH, sMenuCmd1);
copy(menuCmd2[menuNumber], STRINGLENGTH, sMenuCmd2);

server_print("Menu item %d added to Vote Mod: ^"%s^" - Min Players %d", menuNumber, menuBody[menuNumber], minPlayers[menuNumber]);

menuNumber++;
}

public DefaultCfg()
{
new defaultCfg[STRINGSIZE];
read_argv(1, defaultCfg, STRINGLENGTH);

copy(defaultCfgFile, STRINGLENGTH, defaultCfg);

server_print("Default cfg = %s", defaultCfg);
}

public ShowVoteAdmin(id, level, cid)
{
if(!cmd_access(id, level, cid, 0))
return PLUGIN_HANDLED;

if(voteStarted)
return PLUGIN_HANDLED;

new len = format(menu, 511, "Vote Mod Admin Menu^n");
for(new i = 0; i < menuNumber; i++)
{
server_print("MinPlayers = %d - Server Players = %d", minPlayers[i], get_playersnum())
if(minPlayers[i] <= get_playersnum())
{
keys |= (1<<i);
len += format(menu[len], 511-len, "%d. Change to %s^n", i+1, menuBody[i]);
}
}

keys |= (1<<9);
len += format(menu[len], 511-len, "^n0. Cancel");

show_menu(id, keys, menu, 15, "Vote_Admin");

return PLUGIN_CONTINUE;
}

public VoteAdmin(id, key, level, cid)
{
if(!cmd_access(id, level, cid, 0))
return PLUGIN_HANDLED;

get_user_name(id, name, 23);

client_print(0, print_chat, "%s changed mod to %s", name, menuBody[key]);
server_print("%s changed mod to %s", name, menuBody[key]);
SetCvars(key);

return PLUGIN_CONTINUE;
}

public ShowVote(id, level, cid)
{
if (!cmd_access(id, level, cid, 0))
return PLUGIN_HANDLED;

if(voteStarted)
return PLUGIN_HANDLED;

new len = format(menu, 511, "Vote For Which Mod You Want^n");
for(new i = 0; i < menuNumber; i++)
{
if(minPlayers[i] <= get_playersnum())
{
keys |= (1<<i);
len += format(menu[len], 511-len, "%d. %s^n", i+1, menuBody[i]);
#if defined DEBUG
server_print("Added %s to menu", menuBody[i]);
#endif
}
}

len += format(menu[len], 511-len, "^n0. None");
keys |= (1<<9);

show_menu(0, keys, menu, 15, "Vote_Mod");
voteStarted = true;

set_task(25.0,"CheckVotes");

return PLUGIN_CONTINUE;
}

public Vote(id, key)
{
get_user_name(id, name, 23);

if(key != 9)
{
client_print(0, print_chat, "%s voted %s", name, menuBody[key]);
server_print("%s voted %s", name, menuBody[key]);
count[key]++;
}
else if(key == 9)
{
client_print(0, print_chat, "%s voted %s", name, "no mod");
server_print("%s voted %s", name, "no mod");
count[key]++;
}

return PLUGIN_HANDLED;
}

public CheckVotes()
{
new best = 9;
new noVotes = 0;

for(new a = 0; a < 9; a++)
{
if(count[a] > count[best])
best = a;
else
noVotes++;
}

if(noVotes == 10)
best = 9;

if(best != 9)
{
client_print(0, print_chat, "%s won with %d votes", menuBody[best], count[best]);

#if defined DEBUG
server_print("%s won with %d votes", menuBody[best], count[best]);
#endif
}
else if(best == 9)
{
client_print(0, print_chat, "%s won with %d votes", "No mod", count[best]);

#if defined DEBUG
server_print("%s won with %d votes", "No mod", count[best]);
#endif
}

loaded = best;
SetCvars(best);
}

public SetCvars(num)
{
SetDefaults();

new sethostname[75];

if(num != 9)
{
if(get_cvar_num("vm_sethostname") == 1)
{
format(sethostname, 74, "%s *%s*", hostname, menuBody[num]);
set_cvar_string("hostname", sethostname);
}

if(equal(menuCmd2[num], ""))
{
if(containi(menuCmd1[num], ".cfg") == -1)
set_cvar_num(menuCmd1[num], 1);
else
server_cmd("exec %s/VoteMod/%s", configs, menuCmd1[num]);
}
else
server_cmd(menuCmd1[num]);

set_cvar_num("sv_restart", 5);

#if defined DEBUG
server_print("%s Loaded", menuBody[num]);
#endif
}
else if(num == 9)
{
if(get_cvar_num("vm_sethostname") == 1)
{
format(sethostname, 74, "%s *%s*", hostname, "No Mod");
set_cvar_string("hostname", sethostname);
}

#if defined DEBUG
server_print("%s Loaded", "No Mod");
#endif
}

for(new i = 0; i < 10; i++)
count[i]=0;

voteStarted = false;

set_task(0.5, "LoadHUD");

return PLUGIN_CONTINUE;
}

public ShowMods(id)
{
client_print(id, print_console, "Current Mods On The Server:");

for(new i = 0; i < menuNumber; i++)
client_print(id, print_console, "%d. %s - Min Players: %d", (i+1), menuBody[i], minPlayers);

return PLUGIN_CONTINUE;
}


Цитата
я бы такое вообще не ставил на сервер.

Правильно, не стоит.

Суть плагина: Через н-ое кол-во времени после начала карты вылезает менюшка с выбором мода дальнейшей игры, все голосуют, далее идёт рестарт и подгружаются настройки выбранного мода. Этот "проблемный" худ отображает какой режим активен в данный момент.

Если удалить данную функцию - всё ок, но хотелось бы, чтобы худ показывался, т.к. иногда игрокам трудно понять, что происходит например в режиме Only Headshot crazy.gif

Отредактировал: drivemaster, - 25.11.2015, 11:56
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Vaqtincha
сообщение 25.11.2015, 12:23
Сообщение #6
Стаж: 11 лет

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

drivemaster, можно же запомнить при смене мода а не проверить каждую секунду
гы

смотрел весь код. Я бы сломал руки этого скриптера. Еще на оленах вообще жесть!

Отредактировал: Vaqtincha, - 25.11.2015, 12:30
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя drivemaster
сообщение 25.11.2015, 13:44
Сообщение #7


Стаж: 17 лет

Сообщений: 266
Благодарностей: 79
Полезность: 246

Так ошибка то по какой причине вылезает?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя simba
сообщение 25.11.2015, 13:52
Сообщение #8
Стаж: 11 лет

Сообщений: 132
Благодарностей: 45
Полезность: 236

попробуй. та же фигня, но у меня такое компилируется

Код
public LoadHUD()
{
new hudmessage[76]
format hudmessage, 75, "[ %s ] - Active!", menuBody[loaded]

    for(new i = 1; i < 33; i++)
    {
        if(is_user_connected(i))
        {
        set_hudmessage i, 255, 0, 0.01, 0.75, 0, 6.0, 5.0, 0.0, 0.0, -1
        show_hudmessage i, "%s", hudmessage
        }
    }

set_task 1.0, "LoadHUD"
}

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Vaqtincha
сообщение 25.11.2015, 14:01
Сообщение #9
Стаж: 11 лет

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

чтоб показать что то сразу всем есть же "0"
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя drivemaster
сообщение 25.11.2015, 17:00
Сообщение #10


Стаж: 17 лет

Сообщений: 266
Благодарностей: 79
Полезность: 246

Цитата(simba @ 25.11.2015, 14:47) *
попробуй. та же фигня, но у меня такое компилируется

Код
public LoadHUD()
{
new hudmessage[76]
format hudmessage, 75, "[ %s ] - Active!", menuBody[loaded]

    for(new i = 1; i < 33; i++)
    {
        if(is_user_connected(i))
        {
        set_hudmessage i, 255, 0, 0.01, 0.75, 0, 6.0, 5.0, 0.0, 0.0, -1
        show_hudmessage i, "%s", hudmessage
        }
    }

set_task 1.0, "LoadHUD"
}



Спасибо попробую в таком виде, отпишусь после теста.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя drivemaster
сообщение 26.11.2015, 7:57
Сообщение #11


Стаж: 17 лет

Сообщений: 266
Благодарностей: 79
Полезность: 246

Ошибка также вылезает.

Код:
L 11/25/2015 - 19:09:27: Info (map "awp_india") (file "addons/amxmodx/logs/error_20151125.log")
L 11/25/2015 - 19:09:27: [AMXX] Displaying debug trace (plugin "amx_votemod.amxx")
L 11/25/2015 - 19:09:27: [AMXX] Run time error 4: index out of bounds
L 11/25/2015 - 19:09:27: [AMXX] [0] amx_votemod - копия.sma::LoadHUD (line 166)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Adidasman
сообщение 26.11.2015, 8:44
Сообщение #12


Стаж: 12 лет

Сообщений: 305
Благодарностей: 186
Полезность: 859

Цитата(drivemaster @ 26.11.2015, 10:53) *
Ошибка также вылезает.

Код:
L 11/25/2015 - 19:09:27: Info (map "awp_india") (file "addons/amxmodx/logs/error_20151125.log")
L 11/25/2015 - 19:09:27: [AMXX] Displaying debug trace (plugin "amx_votemod.amxx")
L 11/25/2015 - 19:09:27: [AMXX] Run time error 4: index out of bounds
L 11/25/2015 - 19:09:27: [AMXX] [0] amx_votemod - копия.sma::LoadHUD (line 166)


Код:
#define MAXMENUS      9
>
#define MAXMENUS 10
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя drivemaster
сообщение 26.11.2015, 22:08
Сообщение #13


Стаж: 17 лет

Сообщений: 266
Благодарностей: 79
Полезность: 246

Цитата(Adidasman @ 26.11.2015, 9:40) *
Код:
#define MAXMENUS      9
>
#define MAXMENUS 10

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