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

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

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

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

Плагин "Coins"

, Ошибка в консоле.
sevcs
сообщение 17.6.2019, 21:55
Сообщение #1
Стаж: 11 лет

Сообщений: 407
Благодарностей: 169
Полезность: 254

Доброй ночи.
Народ, помогите пожалуйста исправить ошибку в плагине.
Код
[FAKEMETA] Invalid entity
[AMXX] Displaying debug trace (plugin "Coins.amxx")
[AMXX] Run time error 10: native error (native "pev")
[AMXX]    [0] fakemeta_util.inc::fm_find_ent_by_owner (line 79)
[AMXX]    [1] Coins.sma::fw_SetModel (line 165)

Файл инклуд: fakemeta_util.inc (line 79)
Код
while ((ent = engfunc(EngFunc_FindEntityByString, ent, strtype, classname)) && pev(ent, pev_owner) != owner) {}

Файл Coins.sma (line 165)
Код
new ak = fm_find_ent_by_owner(-1, "weapon_ak47", ent);

Что не так, помогите пожалуйста.
Спасибо.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя SISA
сообщение 17.6.2019, 22:16
Сообщение #2
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

Всю секцию кода показывай. На лицо тут явное скопление трэша в виде цикла в цикле и получения не валидной энтити на которую ты вызываешь pev

Отредактировал: SISA, - 17.6.2019, 22:17
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
sevcs
сообщение 17.6.2019, 22:23
Сообщение #3
Стаж: 11 лет

Сообщений: 407
Благодарностей: 169
Полезность: 254

Файл инклуд: fakemeta_util.inc
Код
stock fm_find_ent_by_owner(index, const classname[], owner, jghgtype = 0) {
    new strtype[11] = "classname", ent = index;
    switch (jghgtype) {
        case 1: strtype = "target";
        case 2: strtype = "targetname";
    }

    while ((ent = engfunc(EngFunc_FindEntityByString, ent, strtype, classname)) && pev(ent, pev_owner) != owner) {}

    return ent;
}

Файл Coins.sma
Код
public fw_SetModel(ent, model[]) {
    if(!pev_valid(ent)) return FMRES_IGNORED;
    static classname[33]; pev(ent, pev_classname, classname, charsmax(classname));
    if(!equal(classname, "weaponbox")) return FMRES_IGNORED;
    new owner = pev(ent, pev_owner);
    if(equal(model, "models/w_m4a1.mdl")) {
        new m4 = fm_find_ent_by_owner(-1, "weapon_m4a1", ent);
        if(g_m4a[owner] && pev_valid(m4)) {
            set_pev(m4, pev_impulse, 2555552);
            g_m4a[owner] = false;
            engfunc(EngFunc_SetModel, ent, w_m4a1);
            return FMRES_SUPERCEDE;
        }
    } else if(equal(model, "models/w_ak47.mdl")) {
        new ak = fm_find_ent_by_owner(-1, "weapon_ak47", ent);
        if(g_ak47[owner] && pev_valid(ak)) {
            set_pev(ak, pev_impulse, 4666664);
            g_ak47[owner] = false;
            engfunc(EngFunc_SetModel, ent, w_ak47);
            return FMRES_SUPERCEDE;
        }
    }
    return FMRES_IGNORED;
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 17.6.2019, 22:52
Сообщение #4
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

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

#define m_rgpPlayerItems_CWeaponBox 34
#define m_iId                        43
#define CBASEENTITY_LINUX_XTRA_OFF        4

public plugin_init()
    register_forward(FM_SetModel, "fw_SetModel");

public fw_SetModel(ent, model[])
{
    // Если не указана модель
    if(strlen(model) < 11)
        return FMRES_IGNORED;

    // Если это Не w_ модель оружия
    if(model[7] != 'w' || model[8] != '_' || model[9] == 'w')
        return FMRES_IGNORED;

    // Если у энтити не валидна Пдата
    if(pev_valid(ent) != 2)
        return FMRES_IGNORED;

    // Статики
    static classname[11], iStoredEnt;
    
    // Класснейм энтити
    pev(ent, pev_classname, classname, charsmax(classname));

    if(!equal(classname, "weaponbox"))
        return FMRES_IGNORED;

    // Запускаем цикл по Слотам
    for(new i=1; i < 6; i++)
    {
        // Находим номер энтити текущего оружия в слоте
        iStoredEnt = get_pdata_cbase(ent, m_rgpPlayerItems_CWeaponBox+i, CBASEENTITY_LINUX_XTRA_OFF);

        // Останавливаем цикл, если энтити Найдена
        if(iStoredEnt > 0)
            break;
    }

    // Если у энтити не валидна Пдата
    if(pev_valid(iStoredEnt) != 2)
        return FMRES_IGNORED;

    // Владелец объекта
    new owner = pev(ent, pev_owner);

    switch(get_pdata_int(iStoredEnt, m_iId, CBASEENTITY_LINUX_XTRA_OFF))
    {
        case CSW_M4A1:
        {
            if(g_m4a[owner])
            {
                set_pev(iStoredEnt, pev_impulse, 2555552);
                g_m4a[owner] = false;
                engfunc(EngFunc_SetModel, ent, w_m4a1);
                return FMRES_SUPERCEDE;
            }
        }

        case CSW_AK47:
        {
            if(g_ak47[owner])
            {
                set_pev(iStoredEnt, pev_impulse, 4666664);
                g_ak47[owner] = false;
                engfunc(EngFunc_SetModel, ent, w_ak47);
                return FMRES_SUPERCEDE;
            }
        }
    }

    return FMRES_IGNORED;
}


Отредактировал: SISA, - 17.6.2019, 22:53
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
sevcs
сообщение 18.6.2019, 17:31
Сообщение #5
Стаж: 11 лет

Сообщений: 407
Благодарностей: 169
Полезность: 254

Это для меня тяжело, ты по сути целый плагин мне написал )
Есть возможность исправить в той части, что я скинул ? Или это надо копать полностью весь код ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя steelzzz
сообщение 18.6.2019, 20:09
Сообщение #6


Стаж: 12 лет

Сообщений: 609
Благодарностей: 187
Полезность: 167

Цитата(sevcs @ 18.6.2019, 18:31) *
Это для меня тяжело, ты по сути целый плагин мне написал )
Есть возможность исправить в той части, что я скинул ? Или это надо копать полностью весь код ?

Вам делают бесплатно, а вы даже заменить не можете..


Нужна помощь в настройке сервера или плагина? (Платно) -> Тык
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 19.6.2019, 6:17
Сообщение #7
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

steelzzz,

Оффсеты:

#define m_rgpPlayerItems_CWeaponBox 34
#define m_iId 43
#define CBASEENTITY_LINUX_XTRA_OFF 4

запихнуть в шапку плагина.

Всю секцию public fw_SetModel(ent, model[]) полностью скопировать и заменить.

Цитата
Это для меня тяжело, ты по сути целый плагин мне написал )


Это не целый плагин, а просто кусок кода, по сути портированный из движка.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя steelzzz
сообщение 19.6.2019, 14:05
Сообщение #8


Стаж: 12 лет

Сообщений: 609
Благодарностей: 187
Полезность: 167

SISA, Ты ошибся Ником чуть-чуть


Нужна помощь в настройке сервера или плагина? (Платно) -> Тык
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
sevcs
сообщение 19.6.2019, 18:05
Сообщение #9
Стаж: 11 лет

Сообщений: 407
Благодарностей: 169
Полезность: 254

Дописал, заменил, ошибки вроде пока что нет, но проблемка такая...
Если у меня в руках М4, купленная или подобранная с земли (стандартная), если я куплю Монетами М4, то та, что была в руках - скидывается и я остаюсь без оружия, но если её подобрать, то тогда уже моделька меняется на Золотую. Т.е мне не выдаётся оружие, купленное за монеты.
Такая же история и с оружием АКА.
У меня в меню, Два оружия: Золотая М4 и Ака, их можно купить, только за монеты.

Я так понимаю, что должна быть проверка на оружие, которое у меня в руках, если у меня нет оружия, при покупке выдавать покупаемое, если есть оружие, то при покупке, скидывать то что в руках и выдавать покупаемое.
Есть возможность исправить это ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 19.6.2019, 20:05
Сообщение #10
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

sevcs,

Потому что код написан динозаврами из каменного века. Там массив на игрока вообще не нужен. Все данные банально передаются через pev_impulse по энтити оружия. Короч весь плагин выкладывай.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
sevcs
сообщение 19.6.2019, 20:21
Сообщение #11
Стаж: 11 лет

Сообщений: 407
Благодарностей: 169
Полезность: 254

Цитата(SISA @ 19.6.2019, 21:05) *
sevcs,

Потому что код написан динозаврами из каменного века. Там массив на игрока вообще не нужен. Все данные банально передаются через pev_impulse по энтити оружия. Короч весь плагин выкладывай.

Не могу, я за него заплатил денег, нашему доблестному кодеру, который после получения всей суммы, ушёл в мороз. На мои просьбы доделать, он не реагирует, хотя появляется в сети, думал, что он ответственный, оказалось на оборот. Таких плагинов, я мало видел, не хочется им делиться со всеми, оплатив за него одному.
***, как теперь быть, как его довести до ума :( ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 20.6.2019, 6:26
Сообщение #12
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

sevcs,

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