Русское сообщество по скриптингу

Падение сервера при старте без ошибок, в прекеше куча моделе  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Падение сервера при старте без ошибок, в прекеше куча моделе

Сообщение VVV142 » 14 фев 2024, 21:58

Написал плагин с большим количеством моделей, плагин простой, на смену модели v_ и p_. И обнаружил, что сервер падает сразу при запуске без ошибок вообще, т.е в логах запись о смене карты(L 02/14/2024 - 19:46:50: -------- Mapchange to de_dust --------) и все.

Пример, чтобы вы понимали, у меня есть плагин, менюшка, при выборе пункта - модель в руках меняется, если моделей по 7(v_ и p_), то сервер работает стабильно, плагин работает, модели меняются, никаких просадок - все отлично. Но если я добавляю 8ю модель, не пункт в меню, а именно модель, то сервер начинает ложиться.(Я пробовал добавлять несколько пунктов меню с теми же моделями, что были в предыдущих 7, и все работало как надо).

Следовательно при прекеше моделей возникает какая-то ошибка(может сервер не справляется), или я уперся в какой-то лимит(но не лимит 512).
Тесты проводил на hlds Windows и rehlds Linux(тут ошибки в консоли Segmentation fault, Cannot access memory at address ... ), суть одна и та же, только количество моделей для старта падений разнится.

Кто знает что это может быть? И есть ли какой-то вариант это исправить? Может просто железо слабое или я уперся все-таки в какой-то лимит?
Последний раз редактировалось VVV142 14 фев 2024, 22:00, всего редактировалось 1 раз.
Аватара пользователя
VVV142
 
Сообщения: 35
Зарегистрирован: 07 ноя 2017, 16:16
Благодарил (а): 9 раз.
Поблагодарили: 0 раз.
Языки программирования: Pawn

Re: Падение сервера при старте без ошибок

Сообщение nemec21 » 14 фев 2024, 22:00

А где сам плагин? Покажи как кешируются файлы
Аватара пользователя
nemec21
Скриптер
 
Сообщения: 836
Зарегистрирован: 07 фев 2016, 17:08
Откуда: Беларусь
Благодарил (а): 216 раз.
Поблагодарили: 51 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Падение сервера при старте без ошибок, в прекеше куча мо

Сообщение VVV142 » 14 фев 2024, 22:09

Код плагина:
Код: Выделить всё
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <zombieplague>
#include <nvault>

#if AMXX_VERSION_NUM < 183
    #include <colorchat>
#endif

new g_knife[33], active_knife[33];
new 
g_menu;


//***********Настройки***********
//Сообщения в чате
#define ALIVE_MSG    "^1[^4DK|KN^1] ^3Только для живых!"
#define G_KNIFE        "^1[^4DK|KN^1] Ты выбрал ^3%s!"
#define NO_ACCESS    "^1[^4DK|KN^1] ^3Недостаточно прав!"
#define NO_EXP        "^1[^4DK|KN^1] ^3Недостаточно опыта!"

new const Menu[][] = {
    
"Тесак",    //Название первого ножа в меню
    
"Бита",    //Название второго ножа в меню и тд
    
"Кровавая катана",
    
"Топор",
    
"Фростморн",
    
"Кинжал",
    
"Двойные катаны",
    
"Росомахи",
    
"Перчатки волка",
    
"Хаммер",
    
"Огненная катана",
    
"Лазерные мечи",
    
"Коса смерти \y*VIP*",
    
"Золотая катана \y*PREMIUM*",
    
"Вархамер Cosmo \y*PREMIUM*",
    
"Рога оленя \r*Архангел*",
    
"Фараонский архангел \r*Архангел*"
};

//v_ модели для ножей
new const v_model[][] = 
{
"models/zb1/v_tesak.mdl",    
"models/zb1/v_bita.mdl",    
"models/zb1/v_georgia.mdl",
"models/zb1/v_axe.mdl",
"models/zb1/v_frostmorn.mdl",
"models/zb1/v_kinjal.mdl",
"models/zb1/v_katans.mdl",
"models/zb1/v_kinjals.mdl",
"models/zb1/v_kosas.mdl",        
"models/zb1/v_dad.mdl",
"models/zb1/v_varhammer_galaxy.mdl",
"models/zb1/v_roga.mdl",
"models/zb1/v_graf_storm.mdl"
};

//p_ модели для ножей
new const p_model[][] = 
{
"models/zb1/p_tesak.mdl",    
"models/zb1/p_bita.mdl",    
"",
"models/zb1/p_axe.mdl",
"models/zb1/p_frostmorn.mdl",
"",
"models/zb1/p_katans.mdl",
"",
"",
"models/zb1/p_hammer.mdl",
"models/zb1/p_katanaog.mdl",
"models/zb1/p_lasers.mdl",
"models/zb1/p_kosas.mdl",        
"models/zb1/p_dad.mdl",
"models/zb1/p_varhammer_galaxy.mdl",
"",
"models/zb1/p_graf_storm.mdl" 
};


//Требования к уровню ножей
new const kn_level[] = 
{
    
0,    // Уровень для первого ножа в руках
    
2,
    
4,
    
6,
    
8,
    
10,
    
12,
    
14,
    
16,
    
18,
    
20,
    
22,
    
0,    // Уровень для vip ножа в руках
    
0,
    
0,
    
0,
    
0
}
//Звуки вшитые в модели
/*
new const custom_sounds[][] =
{
    "zb1/strong_deploy1.wav"
}
*/
const linux_diff_weapon 4;
const 
linux_diff_player 5;

const 
m_pPlayer 41;
const 
m_iId 43;
const 
m_pActiveItem 373;

const 
TASK_LOAD 12022024;

new 
g_vault;

//native zp_level(id);

public plugin_init()
{
    
register_plugin("Knife System""1.0""VVV");
    
build_menu();
     
register_clcmd("say /knife","knife_menu");
     
register_clcmd("/knife","knife_menu");

    
RegisterHam(Ham_Item_Deploy"weapon_knife""fw_Item_Deploy_Post"1);
    
g_vault nvault_open("knifes");
    if (
g_vault == INVALID_HANDLE)
        
set_fail_state("Error opening nVault");
}

public 
plugin_precache() {
    new 
i;

    for(
0sizeof(v_model); i++) {
        
engfunc(EngFunc_PrecacheModelv_model[i]);
    }
    
    for(
0sizeof(p_model); i++) {
        if(
p_model[i][0] == EOS)
            continue;
            
        
engfunc(EngFunc_PrecacheModelp_model[i]);
    }
}

public 
plugin_natives() {
    
register_native("get_user_knife""native_get_user_knife"1);
    
register_native("get_active_knife""native_get_user_active"1);

}

public 
knife_menu(id) {
    if(!
is_user_alive(id) || zp_get_user_zombie(id)) {
        
client_print_color(idprint_team_redALIVE_MSG);
        return;
    }
    
menu_display(idg_menu0);
}

build_menu() {
    
g_menu menu_create("Выбор ножа""menu_handle")

    for(new 
0sizeof Menui++) 
    {
        new 
num[3];
        
formatex(num2"%d"i);
        
        new 
lvl kn_level[i];
        
        if(
lvl) {
            new 
item_menu[64];
            
formatex(item_menucharsmax(item_menu), "%s \y[%d LVL]"Menu[i], lvl);
            
menu_additem(g_menuitem_menunum);
        }
        else {
            
menu_additem(g_menuMenu[i], num);
        }
    }
    
menu_setprop(g_menuMPROP_BACKNAME"Назад");
    
menu_setprop(g_menuMPROP_NEXTNAME"Далее");
    
menu_setprop(g_menuMPROP_EXITNAME"Выход");
}

public 
menu_handle(idmenuitem)
{
    if(
item == MENU_EXIT)
    {
        return 
PLUGIN_HANDLED;
    }
    if(!
is_user_alive(id) || zp_get_user_zombie(id)) {
        
client_print_color(idprint_team_redALIVE_MSG);
        return 
PLUGIN_HANDLED;
    }
    new 
cmd[2];
    new 
accesscallback;
    
menu_item_getinfo(menuitemaccesscmd,2,_,_callback);
    new 
choice str_to_num(cmd)
        
    
give_knife(idchoice);
        
    return 
PLUGIN_CONTINUE;
}

public 
give_knife(idkn)
{        
    
g_knife[id] = kn;
    
checkmodel(id);
    new 
knife[64];
    
copyc(knife,charsmax(knife),Menu[kn],'\');
    client_print_color(id, print_team_default, G_KNIFE, knife);
}


public checkmodel(id)
{
    if(!is_user_alive(id))
        return;
        
    new cur_weapon = get_pdata_cbase(id, m_pActiveItem, linux_diff_player);

    if(get_user_weapon(id) == CSW_KNIFE) {
        ExecuteHamB(Ham_Item_Deploy, cur_weapon);
    }
    else engclient_cmd(id, "weapon_knife");
}

public fw_Item_Deploy_Post(weapon)
{
    if(!pev_valid(weapon))
        return HAM_IGNORED;

    new id = get_pdata_cbase(weapon, m_pPlayer, linux_diff_weapon);
    
    if(zp_get_user_zombie(id))
        return HAM_IGNORED;
    
    new num_knife = g_knife[id];
    
    set_pev(id, pev_viewmodel2, v_model[num_knife]);
    set_pev(id, pev_weaponmodel2, p_model[num_knife]);
    
    active_knife[id] = 1;

    return HAM_IGNORED;
}


public client_putinserver(id)
{    
    set_task(0.5, "LoadData", id+TASK_LOAD);
}

public client_disconnected(id) {
    SaveData(id);
}

public plugin_end()
{
    nvault_close(g_vault);
}

public zp_user_infected_post(id, infector, nemesis)
{    
    active_knife[id] = 0;
}


public SaveData(id) 
{
    if(is_user_bot(id))
        return;
        
    new AuthID[35];
    get_user_authid(id,AuthID,charsmax(AuthID));
    
    new vaultkey[64];
    format(vaultkey,63,"%kn", AuthID);
    
    new kn[3];
    formatex(kn, charsmax(kn), "%d", g_knife[id]);
    
    nvault_set(g_vault , vaultkey , kn);
}

public LoadData(id) 
{
    id -= TASK_LOAD;
    if(!is_user_connected(id))
        return;
        
    new AuthID[35];
    get_user_authid(id, AuthID, charsmax(AuthID));
    
    new vaultkey[64];
    format(vaultkey, charsmax(AuthID), "%kn", AuthID);
    new kn = nvault_get(g_vault, vaultkey);
    g_knife[id] = kn;
}

public native_get_user_knife(id) {    
    return g_knife[id];
}

public native_get_user_active(id) {
    return active_knife[id] > 0;
}
Аватара пользователя
VVV142
 
Сообщения: 35
Зарегистрирован: 07 ноя 2017, 16:16
Благодарил (а): 9 раз.
Поблагодарили: 0 раз.
Языки программирования: Pawn

Re: Падение сервера при старте без ошибок, в прекеше куча мо

Сообщение nemec21 » 14 фев 2024, 22:21

Если не трудно скинь файлом, с телеыона удобнее скачать и глянуть через прогу или буду дома после работы гляну. И что это ты кишуешь с пустой строкой??
Аватара пользователя
nemec21
Скриптер
 
Сообщения: 836
Зарегистрирован: 07 фев 2016, 17:08
Откуда: Беларусь
Благодарил (а): 216 раз.
Поблагодарили: 51 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Падение сервера при старте без ошибок, в прекеше куча мо

Сообщение VVV142 » 14 фев 2024, 22:40

nemec21 писал(а):Если не трудно скинь файлом, с телеыона удобнее скачать и глянуть через прогу или буду дома после работы гляну. И что это ты кишуешь с пустой строкой??

Я не киширую с пустой строкой, я использую пустую строку для установки _p модели(чтобы руки были пустыми), там стоит как раз-таки проверка на пустую строку, чтобы модель не добавлялась в прекеш.

Вы должны зарегистрироваться, чтобы видеть ссылки.
Аватара пользователя
VVV142
 
Сообщения: 35
Зарегистрирован: 07 ноя 2017, 16:16
Благодарил (а): 9 раз.
Поблагодарили: 0 раз.
Языки программирования: Pawn

Re: Падение сервера при старте без ошибок, в прекеше куча мо

Сообщение nemec21 » 14 фев 2024, 22:50

Ну как не кишуруешь, цикл посмотри
Аватара пользователя
nemec21
Скриптер
 
Сообщения: 836
Зарегистрирован: 07 фев 2016, 17:08
Откуда: Беларусь
Благодарил (а): 216 раз.
Поблагодарили: 51 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Падение сервера при старте без ошибок, в прекеше куча мо

Сообщение VVV142 » 14 фев 2024, 23:17

Код: Выделить всё
for(0sizeof(p_model); i++) {
        if(
p_model[i][0] == EOS)
            continue;
            
        
engfunc(EngFunc_PrecacheModelp_model[i]);
    } 

Если p_model - пуст, то переходим к следующему циклу
Аватара пользователя
VVV142
 
Сообщения: 35
Зарегистрирован: 07 ноя 2017, 16:16
Благодарил (а): 9 раз.
Поблагодарили: 0 раз.
Языки программирования: Pawn

Re: Падение сервера при старте без ошибок, в прекеше куча мо

Сообщение nemec21 » 14 фев 2024, 23:19

EOS это что?
Тебе нужно if(!p_model[i][0])
Аватара пользователя
nemec21
Скриптер
 
Сообщения: 836
Зарегистрирован: 07 фев 2016, 17:08
Откуда: Беларусь
Благодарил (а): 216 раз.
Поблагодарили: 51 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Падение сервера при старте без ошибок, в прекеше куча мо

Сообщение VVV142 » 14 фев 2024, 23:42

EOS - конец строки, это проверка на пустую строку
Аватара пользователя
VVV142
 
Сообщения: 35
Зарегистрирован: 07 ноя 2017, 16:16
Благодарил (а): 9 раз.
Поблагодарили: 0 раз.
Языки программирования: Pawn

Re: Падение сервера при старте без ошибок, в прекеше куча мо

Сообщение nemec21 » 15 фев 2024, 01:55

Слет сервера в начале карты?
Для чего тебе это?
Код: Выделить всё
    new cmd[2];
    new access, callback;
    menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
    new choice = str_to_num(cmd)

если 3 аргумент в public menu_handle(id, menu, item) нам даст тоже самое
Для чего тут второй параметр ?
Код: Выделить всё
give_knife(idchoice); 

Если ты пользуешся глобальной переменной везде g_knife[id]
Последний раз редактировалось nemec21 15 фев 2024, 02:19, всего редактировалось 1 раз.
Аватара пользователя
nemec21
Скриптер
 
Сообщения: 836
Зарегистрирован: 07 фев 2016, 17:08
Откуда: Беларусь
Благодарил (а): 216 раз.
Поблагодарили: 51 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

След.

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12