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

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

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

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

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

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

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

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

Ошибка Run time error 3: stack error

Статус пользователя fitamin4ik
сообщение 8.8.2014, 10:29
Сообщение #1
Стаж: 15 лет

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

Всем привет, в общем перешел на новый билд, так же обновил AMX 1.8.3 и начался мусор в логах. Перекомпилировал все плагины под 1.8.3, всё вроде работает, кроме 1-ого плагина

Выбивает такие ошибки:
Код
L 08/08/2014 - 12:24:52: [AMXX] Run time error 3: stack error
L 08/08/2014 - 12:24:52: [AMXX]    [0] team_select.sma::team_menu (line 209)
L 08/08/2014 - 12:24:52: [AMXX]    [1] team_select.sma::TeamMenu_Hook (line 356)
L 08/08/2014 - 12:24:53: [AMXX] Displaying debug trace (plugin "team_select.amxx", version "0.1beta")


строка 209 - new szItem[512], len, bitKeys;
строка 356 - team_menu(id);

Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#include <hamsandwich>
#include <VIPSystem>

#define PLUGIN "Team Select Menu Customizer"
#define VERSION "0.1beta"
#define AUTHOR "Danakt Frost"

#define FILE_NAME "team_select_menu.ini"
#define MODEL "model"
#define MAX_NUM_TEAMS 2
#define MAX_PLAYERS 32

#define KEYS ( 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9 )

#define USER_TEAM 114
#define tsmc_get_user_team(%0) (get_pdata_int(%0, USER_TEAM)-1)
enum
{
TSMC_UNASSIGNED = -1,
TSMC_TEAM_T = 0,
TSMC_TEAM_CT,
TSMC_SPECTATOR
}

enum _:NumDatas
{
CLASS_NAME = 0,
CLASS_TAG,
CLASS_ACCESS
}

new g_szConfigFile[128];
new g_szClassesT[32][NumDatas][64], g_szClassesCT[32][NumDatas][64], g_szClassAccess[MAX_NUM_TEAMS][32];
new g_szTeamName[2][128];
new g_iCount[MAX_NUM_TEAMS];
new g_iMsgId[MAX_PLAYERS+1], g_iUserTeam[MAX_PLAYERS+1];
new bool:g_bChanged[MAX_PLAYERS+1];
new g_szPlayerModel[MAX_PLAYERS+1][128];
new g_iMaxPlayers;
new g_ModelKey[33];
new g_pCvarAllowSpec, g_pCvarLimitTeams, g_pCvarTeamBalance;

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);

register_clcmd("chooseteam", "clcmd_chooseteam");
register_clcmd("joinclass", "clcmd_chooseteam");
register_clcmd("jointeam", "clcmd_chooseteam");
register_clcmd("model", "model");
register_message(get_user_msgid("ShowMenu"), "TeamMenu_Hook");
register_message(get_user_msgid("VGUIMenu"), "TeamMenuVGUI_Hook");
register_message(get_user_msgid("ClCorpse"), "Message_ClCorpse");
register_forward(FM_SetClientKeyValue, "SetClientKeyValue");
register_event("HLTV", "NewRound", "a", "1=0", "2=0") ;
RegisterHam(Ham_Spawn, "player", "player_spawn", 1);

register_menucmd(register_menuid("TeamMenu"), KEYS, "team_menu_handler");
register_menucmd(register_menuid("ClassMenu"), KEYS, "class_menu_handler");

g_pCvarAllowSpec = get_cvar_pointer("allow_spectators");
g_pCvarLimitTeams = get_cvar_pointer("mp_limitteams");
g_pCvarTeamBalance = get_cvar_pointer("mp_autoteambalance");

g_iMaxPlayers = get_maxplayers();
}

public plugin_precache()
{
get_configsdir(g_szConfigFile, 127);
format(g_szConfigFile, 127, "%s/%s", g_szConfigFile, FILE_NAME);

new dFile = fopen(g_szConfigFile, "rt");
new szModelFile[128], szErrorMsg[128];
new szData[256];
new iTeam = -1;

if(!dFile)
{
format(szErrorMsg, 127, "Plugin can't found file ^"%s^"", g_szConfigFile);
return set_fail_state(szErrorMsg);
}


while(!feof(dFile))
{
fgets(dFile, szData, 255);
if(szData[0] == '/' && szData[1] == '/' || szData[0] == ';' || szData[0] == '^n')
continue;

replace(szData, 255, "^n", "");

if(szData[0] == '[')
{
iTeam++;
if(iTeam > MAX_NUM_TEAMS)
break;

replace(szData, 255, "]", "");
replace(szData, 255, "[", "");
format(g_szTeamName[iTeam], 127, "%s", szData);
}
else
{
if(iTeam < 0)
continue;

new szClassData[NumDatas][64];

parse(szData, szClassData[CLASS_NAME], 63, szClassData[CLASS_TAG], 63, szClassData[CLASS_ACCESS], 63);

format(szModelFile, 127, "models/player/%s/%s.mdl", szClassData[CLASS_TAG], szClassData[CLASS_TAG]);
if(!file_exists(szModelFile) || !szClassData[CLASS_TAG][0] )
{
server_print("[TSMC] Warning! Item ^"%s^" wasn't created: file ^"%s^" doesn't exist.", szClassData[CLASS_NAME], szModelFile);
continue;
}
precache_model(szModelFile);

new iClassId = g_iCount[iTeam];
for(new i=0; i<NumDatas; i++)
{
if(iTeam == TSMC_TEAM_T)
g_szClassesT[iClassId][i] = szClassData[i];
else if(iTeam == TSMC_TEAM_CT)
g_szClassesCT[iClassId][i] = szClassData[i];
}

if(szClassData[CLASS_ACCESS][0])
g_szClassAccess[iTeam][iClassId] = read_flags(szClassData[CLASS_ACCESS]);
else
g_szClassAccess[iTeam][iClassId] = VIP_FLAG_ALL;

g_iCount[iTeam]++;
}
}

return PLUGIN_CONTINUE;
}

public NewRound()
{
for (new id=1; id<=g_iMaxPlayers; id++)
g_bChanged[id] = false;
}

public model(id)
{
return PLUGIN_HANDLED;
}

public client_connect(id)
{
g_iUserTeam[id] = TSMC_UNASSIGNED;
g_bChanged[id] = false;
}

public player_spawn(id)
{
if(!is_user_connected(id)) return HAM_IGNORED;

if (!g_ModelKey[id])
{
g_ModelKey[id] = random_num(1,3);
format(g_szPlayerModel[id], 127, "%s", get_class_info(g_iUserTeam[id], g_ModelKey[id], CLASS_TAG));
set_user_info(id, MODEL, g_szPlayerModel[id]);
}
return HAM_IGNORED
}

get_ct()
{
new AliveCT;
new Players[32]
new playerCount, i
get_players(Players, playerCount, "ch")
for (i=0; i<playerCount; i++)
{
if(is_user_connected(Players[i]) && get_user_team(Players[i]) == 2) AliveCT++;
}
return AliveCT;
}

get_t()
{
new AliveT;
new Players[32]
new playerCount, i
get_players(Players, playerCount, "ch")
for (i=0; i<playerCount; i++)
{
if(is_user_connected(Players[i]) && get_user_team(Players[i]) == 1) AliveT++;
}
return AliveT;
}

public team_menu(id)
{
if(g_bChanged[id])
{
client_print(id, print_center, "#Cstrike_TitlesTXT_Only_1_Team_Change");
return;
}

new szItem[512], len, bitKeys;
bitKeys = ( 1<<0 | 1<<1 | 1<<4 | 1<< 9 );

len = format(szItem, 511,"\r\wВыбор команды:^n^n\r1. \w%s^n\r2. \w%s^n^n", g_szTeamName[0], g_szTeamName[1]);

if(get_pcvar_num(g_pCvarAllowSpec) && !is_user_alive(id))
{
bitKeys |= 1<<5;
len += format(szItem[len], 511-len, "\r6. \wНаблюдатели^n");
}

len += format(szItem[len], 511-len, "^n\r0. \wВыход^n");
show_menu(id, bitKeys, szItem, -1, "TeamMenu");
}

public team_menu_handler(id, key)
{
switch(key+1)
{
case 1:
{
if (get_t() > get_ct()) return PLUGIN_HANDLED;

g_iUserTeam[id] = key;
team_join(id, key);
create_classes_menu(id, key);
}
case 2:
{
if (get_ct() > get_t()) return PLUGIN_HANDLED;

g_iUserTeam[id] = key;
team_join(id, key);
create_classes_menu(id, key);
}
/*case 5:
{
new iRand;
iRand = random(2);
g_iUserTeam[id] = iRand;
team_join(id, iRand);
create_classes_menu(id, iRand);
}*/
case 6:
{
if(get_pcvar_num(g_pCvarAllowSpec) && !is_user_alive(id))
{
g_iUserTeam[id] = TSMC_SPECTATOR;
g_bChanged[id] = true;
engclient_cmd(id, "jointeam", "6")
}else
team_menu(id);
}
}

return PLUGIN_HANDLED;
}

public create_classes_menu(id, iTeam)
{
new szItem[512], len, bitKeys = 1<<(g_iCount[iTeam]), bAccess;

len = format(szItem, 511,"\r\wВыбор персонажа:^n^n");
for(new i=0; i<g_iCount[iTeam];i++)
{
bAccess = (VSGetVipFlags(id) & g_szClassAccess[iTeam][i]);
if(bAccess || g_szClassAccess[iTeam][i] == VIP_FLAG_ALL)
{
len += format(szItem[len], 511-len, "%s%d. %s^n", (bAccess ? "\y" : "\w"), i+1, get_class_info(iTeam, i, CLASS_NAME));
bitKeys |= 1<<i;
}
else
{
len += format(szItem[len], 511-len, "\r%d. \w%s\y[VIP]^n", i+1, get_class_info(iTeam, i, CLASS_NAME));
}
}

show_menu(id, bitKeys, szItem, -1, "ClassMenu");

return PLUGIN_HANDLED;
}

public class_menu_handler(id, key)
{
new iMenuMsgid = g_iMsgId[id];
new iMsgBlock = get_msg_block(iMenuMsgid);
set_msg_block(iMenuMsgid, BLOCK_SET);
engclient_cmd(id, "joinclass", "1");
set_msg_block(iMenuMsgid, iMsgBlock);

format(g_szPlayerModel[id], 127, "%s", get_class_info(g_iUserTeam[id], key, CLASS_TAG));

set_user_info(id, MODEL, g_szPlayerModel[id]);

g_ModelKey[id] = key;
g_bChanged[id] = true;

return PLUGIN_HANDLED;
}

public plugin_natives ()
{
register_native("get_model", "native_get_model", 1)
}
public native_get_model(id)
{
return g_ModelKey[id];
}

public client_infochanged(id)
{
if (is_user_connected(id) && is_user_alive(id))
{
format(g_szPlayerModel[id], 127, "%s", get_class_info(g_iUserTeam[id], g_ModelKey[id], CLASS_TAG));
set_user_info(id, MODEL, g_szPlayerModel[id]);
}
return PLUGIN_HANDLED;
}

public SetClientKeyValue(id, szInfoBuffer[], szKey[], szValue[])
{
if(equal(szKey, MODEL) && is_user_connected(id))
{
g_iUserTeam[id] = tsmc_get_user_team(id);
if(g_iUserTeam[id] == get_class_team_by_tag(g_szPlayerModel[id]) && !equal(szValue, g_szPlayerModel[id]))
{
set_user_info(id, MODEL, g_szPlayerModel[id]);
return FMRES_SUPERCEDE;
}
}
return FMRES_IGNORED;
}

public Message_ClCorpse()
{
new id = get_msg_arg_int(12);
set_msg_arg_string(1, g_szPlayerModel[id]);
}

public TeamMenu_Hook(iMsgid, dest, id)
{
static szTeamSelect[] = "#Team_Select";
static szMenuTextCode[32];
get_msg_arg_string(4, szMenuTextCode, sizeof szMenuTextCode - 1);

if(contain(szMenuTextCode, szTeamSelect) > -1)
{
team_menu(id);
return PLUGIN_HANDLED;
}

g_iMsgId[id] = iMsgid;

return PLUGIN_CONTINUE;
}

public TeamMenuVGUI_Hook(iMsgid, dest, id)
{
if(get_msg_arg_int(1) == 2)
{
team_menu(id);
return PLUGIN_HANDLED;
}
else if(get_msg_arg_int(1) == 26)
{
create_classes_menu(id, TSMC_TEAM_T);
return PLUGIN_HANDLED;
}
else if(get_msg_arg_int(1) == 27)
{
create_classes_menu(id, TSMC_TEAM_CT);
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}

public clcmd_chooseteam(id)
{
team_menu(id);
return PLUGIN_HANDLED;
}

stock team_join(id, iTeam)
{
new szTeam[2];
new iMenuMsgid = g_iMsgId[id];
new iMsgBlock = get_msg_block(iMenuMsgid);

g_iUserTeam[id] = iTeam;
g_bChanged[id] = true;

num_to_str(iTeam+1, szTeam, 1);
set_msg_block(iMenuMsgid, BLOCK_SET);
engclient_cmd(id, "jointeam", szTeam);
set_msg_block(iMenuMsgid, iMsgBlock);
}

stock get_class_info(iTeam, iClass, iData)
{
new szReturn[64];

if(iTeam == TSMC_TEAM_T)
szReturn = g_szClassesT[iClass][iData];
else if(iTeam == TSMC_TEAM_CT)
szReturn = g_szClassesCT[iClass][iData];

return szReturn;
}

stock get_random_class_tag(id, iTeam, szOutput[], len)
{
new bool:bDone = false;
while(!bDone)
{
new iCount = g_iCount[iTeam];
new iRandomClassNum = random_num(0, iCount);
if(g_szClassAccess[iTeam][iRandomClassNum] != VIP_FLAG_ALL && !(VSGetVipFlags(id) & g_szClassAccess[iTeam][iRandomClassNum]))
continue;

copy(szOutput, len, get_class_info(iTeam, iRandomClassNum, CLASS_TAG))
bDone = true;
}
}

stock get_class_team_by_tag(const szTag[])
{
for(new iTeam=0; iTeam<MAX_NUM_TEAMS; iTeam++)
for(new i=0; i<g_iCount[iTeam]; i++)
{
if(equal(szTag, get_class_info(iTeam, i, CLASS_TAG)))
return iTeam;
}

return -2;
}

stock join_allow(id)
{
new iNumT, iNumCT;
new iPlayers[32];

get_players(iPlayers, iNumT, "eh", "TERRORIST")
get_players(iPlayers, iNumCT, "eh", "CT")

if(tsmc_get_user_team(id) == TSMC_TEAM_CT)
iNumCT--;
else if(tsmc_get_user_team(id) == TSMC_TEAM_T)
iNumT--;

new iTeamsLimit = get_pcvar_num(g_pCvarLimitTeams);
if(get_pcvar_num(g_pCvarTeamBalance) && iTeamsLimit != 0)
{
if(iNumT-iNumCT >= iTeamsLimit && iNumCT-iNumT >= iTeamsLimit)
return 3;
else if(iNumT-iNumCT >= iTeamsLimit)
return 1;
else if (iNumCT-iNumT >= iTeamsLimit)
return 2;
}
return 0;
}


Помогите исправить, пожалуйста.

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