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

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

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

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

Ошибки в логах

Статус пользователя Pound
сообщение 18.6.2017, 21:31
Сообщение #1
Стаж: 14 лет

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

Код
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

// Максимальное количество создаваемых объектов на карте
#define MAX_WALL    100
// получаем оффсет винда\линукс
#if cellbits == 32
    #define OFFSET_CSMONEY 115
#else
    #define OFFSET_CSMONEY 140
#endif
// дополнительный оффсет для игрока (линукс)
#define OFFSET_LINUX 5

new const max_ammount[33] = {-2, 52, 0, 90, 1, 32, 1, 100, 90, 1, 120, 100, 100, 90, 90, 90, 100, 120, 30, 120, 200, 32, 90, 120, 90, 2, 35, 90, 90, 0, 100, -1, -1}


new cvar_task, g_msg_money, g_armortype, g_maxplayers
new mapname[33]            // массив под название карты
new num_coord            // Количество координат под объекты
new Float:g_origin[MAX_WALL][3]    // Кординаты появления
new g_ammo[33]            // сколько раз игрок использовал
new g_inviz[33]            // сколько раз игрок использовал
new g_vesthelm[33]        // сколько раз игрок использовал
new g_health[33]        // сколько раз игрок использовал

// Имя модели, const - значит массив нельзя изменить.
new const models_ammo[]        = "models/power/ammo.mdl"
new const models_inviz[]    = "models/power/inviz.mdl"
new const models_health[]    = "models/power/health.mdl"

// Имя звука
new const sound_item[]        = "power/item.wav"
new const sound_ammo[]        = "power/ammo.wav"
new const sound_inviz[]        = "power/inviz.wav"
new const sound_health[]    = "power/health.wav"

public plugin_init()
{
    register_plugin("Power Bonus", "1.0", "artist666")
    
    register_event("CurWeapon", "event_curweapon", "be", "1=1", "2!0", "2!4", "2!6", "2!9", "2!25", "2!29")
    RegisterHam(Ham_Spawn, "player", "player_spawn", 1)
    register_forward(FM_Touch, "ent_touth")        // отлавливаем касание 2х объектов
    get_mapname(mapname, charsmax(mapname))        // получаем название карты
    load_coord()                    // получаем координаты из файла
    cvar_task = register_cvar("cvar_task", "60.0")    // квар, через сколько объект вновь появится
    g_maxplayers = get_maxplayers()            // получаем количество слотов
    set_task(5.0, "add_power")            // запускаем таск через 5 секунд(установить все объекты)
}
public plugin_precache() // Вызывается при старте сервера, раньше инициализации
{
    // добавляем в прекэш модели
    precache_model(models_ammo)
    precache_model(models_inviz)
    precache_model(models_health)
    
    //добавляем в прекэш звуки
    precache_sound(sound_item)
    precache_sound(sound_ammo)
    precache_sound(sound_inviz)
    precache_sound(sound_health)
}
public load_coord()
{
    // получаем путь к файлу
    new filename[64]; format(filename, charsmax(filename), "addons/amxmodx/configs/powercord/%s.ini", mapname)
    if(!file_exists(filename)) //если такого файла нет
    {
        log_amx("No load %s", filename) //записать в лог
        return //выход
    }
    // открываем файл
    new buffer[512], x[8], y[8], z[8], file = fopen(filename, "rt")
    //цикл - файл открыт и не кончился
    while(file && !feof(file))
    {
        fgets(file, buffer, charsmax(buffer)) // Считываем строку(при каждом новом вызове функции она автоматом съезжает на строку ниже)
        trim(buffer)    // удаляем пробелы по краям
        if(!buffer[0] || buffer[0] == ' '|| buffer[0] == ';') continue // если пустая строка или пробел или; читать следующую
        
        // разбиваем строку на аргументы(слова)
        parse(buffer, x, charsmax(x), y, charsmax(y), z, charsmax(z))
        trim(x); trim(y); trim(z)    // удаляем пробелы по краям
        
        //записываем координаты
        g_origin[num_coord][0] = float(str_to_num(x))
        g_origin[num_coord][1] = float(str_to_num(y))
        g_origin[num_coord][2] = float(str_to_num(z))
        num_coord++
    }
    if(file) fclose(file) // закрываем файл
}
public add_power()
{
    for(new i = 0; i < num_coord; i++) add_entity(g_origin[i])
}
public add_entity(Float:origin[3])
{
    static ent; ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))// создать объект
    if(!pev_valid(ent)) return    // если объект не создался, идём дальше
    switch(random_num(0, 4)) // случайный объект
    {
        case 0:
        {
            engfunc(EngFunc_SetModel, ent, models_ammo)    // Установить модель объекту
            set_pev(ent, pev_classname, "ent_ammo")        // Установить имя объекту
        }
        case 1:
        {
            engfunc(EngFunc_SetModel, ent, models_health)    // Установить модель объекту
            set_pev(ent, pev_classname, "ent_health")    // Установить имя объекту
        }
        case 4:
        {
            engfunc(EngFunc_SetModel, ent, models_inviz)    // Установить модель объекту
            set_pev(ent, pev_classname, "ent_inviz")    // Установить имя объекту
        }
    }
    engfunc(EngFunc_SetSize, ent, Float:{-5.0, -5.0, 0.0}, Float:{5.0, 5.0, 10.0})    // Установить размеры объекту, из переданных в функцию массивов
    set_pev(ent, pev_solid, SOLID_TRIGGER)        // Установить твёрдость объекту - твёрдый
    set_pev(ent, pev_movetype, MOVETYPE_NONE)    // Установить тип движения - никакой
    set_pev(ent, pev_angles, Float:{0.0, 0.0, 90.0})    // Установить угол
    engfunc(EngFunc_SetOrigin, ent, origin)        // Установить координаты объекту
    emit_sound(ent, CHAN_AUTO, sound_item, 1.0, ATTN_NORM, 0, PITCH_NORM)    // воспроизвести звук появления
}
public ent_touth(ent, id)
{
    static classname[33]; pev(id, pev_classname, classname, charsmax(classname))    // получаем имя класса того кто коснулся
    if(equal(classname, "player") && is_user_alive(id)) // если это игрок и он жив
    {
        static entname[33]; pev(ent, pev_classname, entname, charsmax(entname)) // получаем имя класса кого коснулись
        
        if(equal(entname, "ent_", 4)) // сравниваем часть имени
        {
            switch(entname[4]) //сверяем по 4й ячейке
            {
                case 'a': // ammo
                {
                    switch(g_ammo[id])
                    {
                        case 0: {g_ammo[id] = 1; update_max_ammo(id);}
                        case 1: g_ammo[id] = 2
                        case 2: {g_ammo[id] = 3; item_hegrenade(id);}
                        default: return FMRES_SUPERCEDE
                    }
                    emit_sound(ent, CHAN_AUTO, sound_ammo, 1.0, ATTN_NORM, 0, PITCH_NORM)
                }
                case 'h': // health
                {
                    static health; health = pev(id, pev_health)
                    switch(g_health[id])
                    {
                        case 0: {set_pev(id, pev_health, health+250.0); g_health[id] = 1;}
                        case 1: {set_pev(id, pev_health, health+250.0); g_health[id] = 2;}
                        case 2: {set_pev(id, pev_health, health+250.0); g_health[id] = 3;}
                        default: return FMRES_SUPERCEDE
                    }
                    emit_sound(ent, CHAN_AUTO, sound_health, 1.0, ATTN_NORM, 0, PITCH_NORM)
                }
                case 'i': // inviz
                {
                    switch(g_inviz[id])
                    {
                        case 0: {fm_set_rendering(id, kRenderFxGlowShell, 0, 0, 0,kRenderTransAlpha, 100); g_inviz[id] = 1;}
                        case 1: {fm_set_rendering(id, kRenderFxGlowShell, 0, 0, 0,kRenderTransAlpha, 50); g_inviz[id] = 2;}
                        case 2: {fm_set_rendering(id, kRenderFxGlowShell, 0, 0, 0,kRenderTransAlpha, 10); g_inviz[id] = 3;}
                        default: return FMRES_SUPERCEDE
                    }
                    emit_sound(ent, CHAN_AUTO, sound_inviz, 1.0, ATTN_NORM, 0, PITCH_NORM)
                }
            }
            static Float:origin[3]; pev(ent, pev_origin, origin)
            set_task(get_pcvar_float(cvar_task), "add_entity", 666, _:origin, sizeof(origin), "a", 1)
            engfunc(EngFunc_RemoveEntity, ent)
        }
    }
    return FMRES_IGNORED
}
public player_spawn(id)
{
    g_ammo[id] = 0
    g_health[id] = 0
    g_inviz[id] = 0
    g_vesthelm[id] = 0
    fm_set_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 255) // убираем невидимость
}
public event_curweapon(id)
{
    if(1 < g_ammo[id] < 4)
    {
        static clip, ammo, weap; weap = read_data(2)
        get_user_ammo(id, weap, clip, ammo)
        if(ammo < max_ammount[weap]) fm_set_user_bpammo(id, weap, max_ammount[weap])
    }
}
public item_hegrenade(id)
{
    if(g_ammo[id] == 3)
    {
        fm_give_item(id, "weapon_hegrenade")
        set_task(60.0, "item_hegrenade", id, _, _, "a", 1)
    }
}
// выдача патронов
public update_max_ammo(id)
{
    if(g_ammo[id] == 1)
    {
        static weapons[32], num, wpn; get_user_weapons(id, weapons, num)
        for(new i = 0; i < num; i++)
        {
            wpn = weapons[i]
            
            if(wpn != 0 && wpn != 4 && wpn != 6 && wpn != 9 && wpn != 25 && wpn != 29)
            {
                static clip, ammo; get_user_ammo(id, wpn, clip, ammo)
                if(ammo >= 200) continue
                else if((ammo+30) >= 200) fm_set_user_bpammo(id, wpn, 200)
                else fm_set_user_bpammo(id, wpn, ammo+30)
            }
        }
        set_task(60.0, "update_max_ammo", id, _, _, "a", 1)
    }
}
// выдача оружия
stock fm_give_item(id, const item[])
{
    new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item))
    if(!pev_valid(ent)) return 0
    new Float:origin[3]; pev(id, pev_origin, origin)
    set_pev(ent, pev_origin, origin)
    set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN)
    dllfunc(DLLFunc_Spawn, ent)
    new save = pev(ent, pev_solid)
    dllfunc(DLLFunc_Touch, ent, id)
    if(pev(ent, pev_solid) != save) return ent
    engfunc(EngFunc_RemoveEntity, ent)
    return -1
}
// установка патронов в запас
stock fm_set_user_bpammo(id, weapon, amount)
{
    switch(weapon)
    {
        case CSW_AWP: set_pdata_int(id, 377, amount, OFFSET_LINUX)
        case CSW_SCOUT, CSW_AK47, CSW_G3SG1: set_pdata_int(id, 378, amount, OFFSET_LINUX)
        case CSW_M249: set_pdata_int(id, 379, amount, OFFSET_LINUX)
        case CSW_M4A1, CSW_FAMAS, CSW_AUG, CSW_SG550, CSW_GALI, CSW_SG552: set_pdata_int(id, 380, amount, OFFSET_LINUX)
        case CSW_M3, CSW_XM1014: set_pdata_int(id, 381, amount, OFFSET_LINUX)
        case CSW_USP, CSW_UMP45, CSW_MAC10: set_pdata_int(id, 382, amount, OFFSET_LINUX)
        case CSW_FIVESEVEN, CSW_P90: set_pdata_int(id, 383, amount, OFFSET_LINUX)
        case CSW_DEAGLE: set_pdata_int(id, 384, amount, OFFSET_LINUX)
        case CSW_P228: set_pdata_int(id, 385, amount, OFFSET_LINUX)
        case CSW_GLOCK18, CSW_MP5NAVY, CSW_TMP, CSW_ELITE: set_pdata_int(id, 386, amount, OFFSET_LINUX)
        case CSW_FLASHBANG: set_pdata_int(id, 387, amount, OFFSET_LINUX)
        case CSW_HEGRENADE: set_pdata_int(id, 388, amount, OFFSET_LINUX)
        case CSW_SMOKEGRENADE: set_pdata_int(id, 389, amount, OFFSET_LINUX)
        case CSW_C4: set_pdata_int(id, 390, amount, OFFSET_LINUX)
    }
}
// установка брони
stock fm_set_user_armor(id, value, type = 0)
{
    set_pdata_int(id, 112, type, 5)
    set_pev(id, pev_armorvalue, float(value))

    if(type != 0)
    {
        emessage_begin(MSG_ONE_UNRELIABLE, g_armortype, _, id)
        ewrite_byte(type == 2 ? 1 : 0)
        emessage_end()
    }
}
// установка невидимости
stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
    new Float:RenderColor[3]
    RenderColor[0] = float(r)
    RenderColor[1] = float(g)
    RenderColor[2] = float(b)

    set_pev(entity, pev_renderfx, fx)
    set_pev(entity, pev_rendercolor, RenderColor)
    set_pev(entity, pev_rendermode, render)
    set_pev(entity, pev_renderamt, float(amount))
    return 1
}
// установка денег
stock fm_set_user_money(id, money, flash = 1)
{
    set_pdata_int(id, OFFSET_CSMONEY, money, OFFSET_LINUX)
    
    message_begin(MSG_ONE, g_msg_money, {0,0,0}, id)
    write_long(money)
    write_byte(flash)
    message_end()
}
// получить деньги
stock fm_get_user_money(id)
{
    return get_pdata_int(id, OFFSET_CSMONEY, OFFSET_LINUX)
}


Цитата
L 06/17/2017 - 19:14:28: [FAKEMETA] Invalid entity
L 06/17/2017 - 19:14:28: [AMXX] Displaying debug trace (plugin "power_bonus.amxx")
L 06/17/2017 - 19:14:28: [AMXX] Run time error 10: native error (native "pev")
L 06/17/2017 - 19:14:28: [AMXX] [0] power_bonus.sma::ent_touth (line 130)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: