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

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

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

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

Ошибка native error (native "get_pdata_cbase")

[РЕШЕНО]
Статус пользователя MarcaD
сообщение 29.1.2016, 10:46
Сообщение #1


Стаж: 10 лет
Город: UA

Сообщений: 147
Благодарностей: 16
Полезность: 94

Ку, помогите поправить, на лицо то что выдается инвентарь неавторизированному игроку
Код
L 01/28/2016 - 14:21:39: Start of error session.
L 01/28/2016 - 14:21:39: Info (map "de_nuke") (file "addons/amxmodx/logs/error_20160128.log")
L 01/28/2016 - 14:21:39: [HAMSANDWICH] Invalid player 10 (not in-game)
L 01/28/2016 - 14:21:39: [AMXX] Displaying debug trace (plugin "vip_custom.amxx")
L 01/28/2016 - 14:21:39: [AMXX] Run time error 10: native error (native "get_pdata_cbase")
L 01/28/2016 - 14:21:39: [AMXX]    [0] vip_custom.sma::refill (line 689)
L 01/28/2016 - 14:21:39: [AMXX]    [1] vip_custom.sma::GiveItem (line 413)

refill(id)
Код
stock refill(id)
{
    for(new slot = 1; slot<= 2; slot++)
    {
        new iWeapon = get_pdata_cbase(id, m_rgpPlayerItems_CBasePlayer[slot])
        while( iWeapon > 0 )
        {
            new iId = fm_get_weapon_id(iWeapon)
            if( !( NOCLIP_WPN_BS & (1<<iId) ) )
            {
                fm_set_weapon_ammo(iWeapon, MAXCLIP[iId])
                iWeapon = get_pdata_cbase(iWeapon, m_pNext, XO_WEAPON)
            }
        }
    }
}

GiveItem(TaskID)
Код
public GiveItem(TaskID)
{
    new id = TaskID - 6910

    if( !( g_bAccess[id]) || !g_iAlive[id])
    {
        return
    }
    if(item_flags & ITEM_AMMO)
    {
        giveammo(id)
        refill(id)
    }
    if(!target_map)
    {
        return
    }
    if(giCounter >= alw_round_eq)
    {
        if(item_flags & ITEM_DEAGLE)
        {
            if(user_has_weapon(id,CSW_DEAGLE))
            {
                ExecuteHamB(Ham_GiveAmmo, id, 35, "50ae", 35)
            }else{
                drop_weapons(id, 2)
                fm_give_item(id,"weapon_deagle")
                ExecuteHamB(Ham_GiveAmmo, id, 35, "50ae", 35)
            }
        }
        if(item_flags & ITEM_HE)
        {
            fm_give_item(id,"weapon_hegrenade")            
        }
        if(item_flags & ITEM_SMOKE)
        {
            fm_give_item(id,"weapon_smokegrenade")
        }    
        if(item_flags & ITEM_FLASH)
        {
            fm_give_item(id,"weapon_flashbang")
            fm_give_item(id,"weapon_flashbang")            
        }
        if(item_flags & ITEM_ARMOR)
        {
            fm_give_item(id,"item_assaultsuit")
            fm_set_user_armor(id,100)
        }
        if(item_flags & ITEM_DEFUSER)
        {
            if(get_user_team(id) == 2)
            {
                fm_give_item(id,"item_thighpack")
            }
        }
    }
    if(openmenu)
    {
        if(!cs_get_user_hasprim(id, 1) && giCounter >= alw_round_fm)
        {
            MenuCommand(id)
        }
    }
}

Плагин взят отсюда V.I.P Custom Weapons (Пост #877384) , выложить не решусь, так как согласия не давали
ранее добавлял проверку на alive, видимо не помогло

Отредактировал: MarcaD, - 29.1.2016, 11:00
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя MarcaD
сообщение 29.1.2016, 10:59
Сообщение #2


Стаж: 10 лет
Город: UA

Сообщений: 147
Благодарностей: 16
Полезность: 94

Сам с собой поговорю...
while( iWeapon > 0 ) >>>
while (pev_valid(iWeapon) > 0)
может так?

Отредактировал: MarcaD, - 29.1.2016, 10:59
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 29.1.2016, 11:42
Сообщение #3


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Код
L 01/28/2016 - 14:21:39: [HAMSANDWICH] Invalid player 10 (not in-game)

написано же всё
функция выполняет действия с id игрока
а такого игрока нет на сервере
видно, что не правильно использован set_task и is_user_alive(id)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MarcaD
сообщение 29.1.2016, 12:29
Сообщение #4


Стаж: 10 лет
Город: UA

Сообщений: 147
Благодарностей: 16
Полезность: 94

Legenda,
Это я уже понял, что не так. Вопрос стоит в том как поправить

Проверка ведь стоит
Код
public GiveItem(TaskID){
    new id = TaskID - 6910

    if( !( g_bAccess[id]) || !g_iAlive[id])
        return
    
    if(item_flags & ITEM_AMMO){
        giveammo(id)
        refill(id)
    }

Кажется мне что какая то муть происходит тут id + 6910
Код
public playerspawn_post(id){
    g_iAlive[id] = is_user_alive(id)
    g_bAccess[id] = get_user_flags(id) & flagaccess ? true : false
    set_task(0.2, "GiveItem", id + 6910)
}


Отредактировал: MarcaD, - 29.1.2016, 12:39
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MarcaD
сообщение 29.1.2016, 12:46
Сообщение #5


Стаж: 10 лет
Город: UA

Сообщений: 147
Благодарностей: 16
Полезность: 94

Пошарился по форумам, советуют кинуть проверку на наличие игрока как такового

Код
    if( pev_valid(id) != 2 )
        return
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 29.1.2016, 13:04
Сообщение #6


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

еще раз повторю
не правильно использован set_task и is_user_alive(id)

set_task использует только в том случаи, если не известно когда нужно выполнять какую-то операцию

g_iAlive[id] = is_user_alive(id)
ерунда, так делать нельзя

включи логики
респавн игрока g_iAlive[id] =1
игрок отключился от сервера
через две минуты выдаешь предмет игроку, который уже отключился от сервера и для которого записан массив g_iAlive[id] =1
ну бред же сделан...

либо делай нормальную проверку is_user_alive(id) в нужном месте
либо обнуляй g_iAlive[id] при всех событиях, в которых игрока не будет уже...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя MarcaD
сообщение 29.1.2016, 14:19
Сообщение #7


Стаж: 10 лет
Город: UA

Сообщений: 147
Благодарностей: 16
Полезность: 94

Legenda,
Попробую еще при дисконекте обнулить, почему то там как раз и не было обнуления

Отредактировал: MarcaD, - 29.1.2016, 14:21
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Landir163
сообщение 2.12.2018, 22:28
Сообщение #8


Стаж: 11 лет

Сообщений: 203
Благодарности: выкл.

del.

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