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

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

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

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

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

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

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

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

Сообщение VVV142 » 15 фев 2024, 02:18

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

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

Сообщение nemec21 » 15 фев 2024, 14:13

Протестировал, модели брал выборочно с интернета, еще бы я все эти данные записал в фаил и их читал, а не через код
Код: Выделить всё
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <zombieplague>
#include <nvault>

/*Messages*/
#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Недостаточно опыта!"

/*Models*/
enum any:DATA {
    NAME_KNIFE[32],
    P_MODEL[32],
    V_MODEL[32],
    LEVEL_KNIFE
};

new g_eGameType[6][DATA] = {
    {"Тесак", "models/zb_test/v_tesak.mdl", "models/zb_test/p_tesak.mdl", 0},
    {"Бита", "models/zb_test/v_bita.mdl", "models/zb_test/p_bita.mdl", 2},
    {"Кровавая катана", "models/zb_test/v_georgia.mdl", "", 4},
    {"Топор", "models/zb_test/v_axe.mdl", "models/zb_test/p_axe.mdl", 6},
    {"Фростморн", "models/zb_test/v_frostmorn.mdl", "models/zb_test/p_frostmorn.mdl", 8},
    {"Кинжал", "models/zb_test/v_kinjal.mdl", "", 10}
};

/*Offsets*/
const linux_diff_weapon = 4;
const linux_diff_player = 5;
const m_pPlayer = 41;
const m_pActiveItem = 373;

//native zp_level(id);

new
    g_pKnife[MAX_PLAYERS +1],
    bool:g_bActiveKnife[MAX_PLAYERS +1],
    g_pMenu,
    g_pVault;

public plugin_init() {
    register_plugin("Knife System", "1.0", "VVV");

    register_clcmd("say /knife", "DISPAY_Menu");
    register_clcmd("/knife", "DISPAY_Menu");

    CREATE_Menu();
    RegisterHam(Ham_Item_Deploy, "weapon_knife", "Ham_Item_Deploy_Post", 1);

    if(nvault_open("knifes") == INVALID_HANDLE)
        set_fail_state("Error opening nVault");
}

public plugin_precache() {
    for(new i; i < sizeof g_eGameType; ++i) {
        engfunc(EngFunc_PrecacheModel, g_eGameType[i][P_MODEL]);

        if(!g_eGameType[i][V_MODEL][0])
            continue;

        engfunc(EngFunc_PrecacheModel, g_eGameType[i][V_MODEL]);
    }
}

public DISPAY_Menu(const id) {
    if(!is_user_alive(id)) {
        client_print_color(id, id, ALIVE_MSG);
        return PLUGIN_HANDLED;
    }

    if(zp_get_user_zombie(id))
        return PLUGIN_HANDLED;

    menu_display(id, g_pMenu);
    return PLUGIN_HANDLED;
}

CREATE_Menu() {
    g_pMenu = menu_create("Выбор ножа", "HANDLER_Menu")

    for(new i, num[3]; i < sizeof g_eGameType; ++i) {
        formatex(num, charsmax(num), "%i", i);

        new lvl = g_eGameType[i][LEVEL_KNIFE];

        if(lvl)
            menu_additem(g_pMenu, fmt("%s \y[%i LVL]", g_eGameType[i][NAME_KNIFE], lvl), num);

        else menu_additem(g_pMenu, g_eGameType[i][NAME_KNIFE], num);
    }

    menu_setprop(g_pMenu, MPROP_BACKNAME, "Назад");
    menu_setprop(g_pMenu, MPROP_NEXTNAME, "Далее");
    menu_setprop(g_pMenu, MPROP_EXITNAME, "Выход");
}

public HANDLER_Menu(const id, const pMenu, const item) {
    if(item != MENU_EXIT) {
        if(!is_user_alive(id)) {
            client_print_color(id, id, ALIVE_MSG);
            return;
        }

        if(zp_get_user_zombie(id))
            return;

        g_pKnife[id] = item;

        new szBuffer[64];
        copyc(szBuffer, charsmax(szBuffer), g_eGameType[item][NAME_KNIFE], '\');
        client_print_color(id, id, G_KNIFE, szBuffer);

        get_user_weapon(id) == CSW_KNIFE ?
        ExecuteHamB(Ham_Item_Deploy, get_pdata_cbase(id, m_pActiveItem, linux_diff_player)) : engclient_cmd(id, "weapon_knife");
    }
}

public Ham_Item_Deploy_Post(const pWeapon) {
    if(pev_valid(pWeapon)) {
        new id = get_pdata_cbase(pWeapon, m_pPlayer, linux_diff_weapon);

        if(zp_get_user_zombie(id))
            return HAM_IGNORED;

        set_pev(id, pev_viewmodel2, g_eGameType[g_pKnife[id]][P_MODEL]);
        set_pev(id, pev_weaponmodel2, g_eGameType[g_pKnife[id]][V_MODEL]);

        g_bActiveKnife[id] = true;
    }

    return HAM_IGNORED;
}
                       
public client_authorized(id, const szAuthid[]) {
    if(!is_user_bot(id))
        g_pKnife[id] = nvault_get(g_pVault, fmt("%kn", szAuthid));
}

public client_disconnected(id) {
    if(!is_user_bot(id)) {
        #define LEN_BUFFER 35
            new szBuffer[LEN_BUFFER +1];
            get_user_authid(id, szBuffer, LEN_BUFFER);
        #undef LEN_BUFFER

        nvault_set(g_pVault, fmt("%kn", szBuffer), fmt("%i", g_pKnife[id]));

        g_pKnife[id] = 0;
        g_bActiveKnife[id] = false;
    }
}

public plugin_end()
    nvault_close(g_pVault);

public zp_user_infected_post(id, infector, nemesis)
    g_bActiveKnife[id] = false;

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

public native_get_user_knife(id)
    return g_pKnife[id];

public bool:native_get_user_active(id)
    return g_bActiveKnife[id];
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
nemec21
Скриптер
 
Сообщения: 836
Зарегистрирован: 07 фев 2016, 17:08
Откуда: Беларусь
Благодарил (а): 216 раз.
Поблагодарили: 51 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

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

Сообщение VVV142 » 16 фев 2024, 03:22

nemec21 писал(а):Слет сервера в начале карты?
Для чего тебе это?
Код: Выделить всё
    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(id, choice); 

Если ты пользуешся глобальной переменной везде g_knife[id]

Точно! Благодарю

Добавлено спустя 2 минуты 58 секунд:
nemec21 писал(а):Протестировал, модели брал выборочно с интернета, еще бы я все эти данные записал в фаил и их читал, а не через код
Код: Выделить всё
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <zombieplague>
#include <nvault>

/*Messages*/
#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Недостаточно опыта!"

/*Models*/
enum any:DATA {
    NAME_KNIFE[32],
    P_MODEL[32],
    V_MODEL[32],
    LEVEL_KNIFE
};

new g_eGameType[6][DATA] = {
    {"Тесак", "models/zb_test/v_tesak.mdl", "models/zb_test/p_tesak.mdl", 0},
    {"Бита", "models/zb_test/v_bita.mdl", "models/zb_test/p_bita.mdl", 2},
    {"Кровавая катана", "models/zb_test/v_georgia.mdl", "", 4},
    {"Топор", "models/zb_test/v_axe.mdl", "models/zb_test/p_axe.mdl", 6},
    {"Фростморн", "models/zb_test/v_frostmorn.mdl", "models/zb_test/p_frostmorn.mdl", 8},
    {"Кинжал", "models/zb_test/v_kinjal.mdl", "", 10}
};

/*Offsets*/
const linux_diff_weapon = 4;
const linux_diff_player = 5;
const m_pPlayer = 41;
const m_pActiveItem = 373;

//native zp_level(id);

new
    g_pKnife[MAX_PLAYERS +1],
    bool:g_bActiveKnife[MAX_PLAYERS +1],
    g_pMenu,
    g_pVault;

public plugin_init() {
    register_plugin("Knife System", "1.0", "VVV");

    register_clcmd("say /knife", "DISPAY_Menu");
    register_clcmd("/knife", "DISPAY_Menu");

    CREATE_Menu();
    RegisterHam(Ham_Item_Deploy, "weapon_knife", "Ham_Item_Deploy_Post", 1);

    if(nvault_open("knifes") == INVALID_HANDLE)
        set_fail_state("Error opening nVault");
}

public plugin_precache() {
    for(new i; i < sizeof g_eGameType; ++i) {
        engfunc(EngFunc_PrecacheModel, g_eGameType[i][P_MODEL]);

        if(!g_eGameType[i][V_MODEL][0])
            continue;

        engfunc(EngFunc_PrecacheModel, g_eGameType[i][V_MODEL]);
    }
}

public DISPAY_Menu(const id) {
    if(!is_user_alive(id)) {
        client_print_color(id, id, ALIVE_MSG);
        return PLUGIN_HANDLED;
    }

    if(zp_get_user_zombie(id))
        return PLUGIN_HANDLED;

    menu_display(id, g_pMenu);
    return PLUGIN_HANDLED;
}

CREATE_Menu() {
    g_pMenu = menu_create("Выбор ножа", "HANDLER_Menu")

    for(new i, num[3]; i < sizeof g_eGameType; ++i) {
        formatex(num, charsmax(num), "%i", i);

        new lvl = g_eGameType[i][LEVEL_KNIFE];

        if(lvl)
            menu_additem(g_pMenu, fmt("%s \y[%i LVL]", g_eGameType[i][NAME_KNIFE], lvl), num);

        else menu_additem(g_pMenu, g_eGameType[i][NAME_KNIFE], num);
    }

    menu_setprop(g_pMenu, MPROP_BACKNAME, "Назад");
    menu_setprop(g_pMenu, MPROP_NEXTNAME, "Далее");
    menu_setprop(g_pMenu, MPROP_EXITNAME, "Выход");
}

public HANDLER_Menu(const id, const pMenu, const item) {
    if(item != MENU_EXIT) {
        if(!is_user_alive(id)) {
            client_print_color(id, id, ALIVE_MSG);
            return;
        }

        if(zp_get_user_zombie(id))
            return;

        g_pKnife[id] = item;

        new szBuffer[64];
        copyc(szBuffer, charsmax(szBuffer), g_eGameType[item][NAME_KNIFE], '\');
        client_print_color(id, id, G_KNIFE, szBuffer);

        get_user_weapon(id) == CSW_KNIFE ?
        ExecuteHamB(Ham_Item_Deploy, get_pdata_cbase(id, m_pActiveItem, linux_diff_player)) : engclient_cmd(id, "weapon_knife");
    }
}

public Ham_Item_Deploy_Post(const pWeapon) {
    if(pev_valid(pWeapon)) {
        new id = get_pdata_cbase(pWeapon, m_pPlayer, linux_diff_weapon);

        if(zp_get_user_zombie(id))
            return HAM_IGNORED;

        set_pev(id, pev_viewmodel2, g_eGameType[g_pKnife[id]][P_MODEL]);
        set_pev(id, pev_weaponmodel2, g_eGameType[g_pKnife[id]][V_MODEL]);

        g_bActiveKnife[id] = true;
    }

    return HAM_IGNORED;
}
                       
public client_authorized(id, const szAuthid[]) {
    if(!is_user_bot(id))
        g_pKnife[id] = nvault_get(g_pVault, fmt("%kn", szAuthid));
}

public client_disconnected(id) {
    if(!is_user_bot(id)) {
        #define LEN_BUFFER 35
            new szBuffer[LEN_BUFFER +1];
            get_user_authid(id, szBuffer, LEN_BUFFER);
        #undef LEN_BUFFER

        nvault_set(g_pVault, fmt("%kn", szBuffer), fmt("%i", g_pKnife[id]));

        g_pKnife[id] = 0;
        g_bActiveKnife[id] = false;
    }
}

public plugin_end()
    nvault_close(g_pVault);

public zp_user_infected_post(id, infector, nemesis)
    g_bActiveKnife[id] = false;

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

public native_get_user_knife(id)
    return g_pKnife[id];

public bool:native_get_user_active(id)
    return g_bActiveKnife[id];

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

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

Сообщение nemec21 » 16 фев 2024, 14:55

Я поставил 9 моделей, все прекрасно работает, похоже ты что то химичишь, вот и слет

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

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

Сообщение VVV142 » 17 фев 2024, 03:40

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

Пред.

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

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

Сейчас этот форум просматривают: Bing [Bot], Google [Bot] и гости: 8