Иконка ресурса

ReGameDLL [Meta-Plugin] Fix Custom iMaxClip 0.1

Нет прав для скачивания

Vaqtincha

Разработчик
Регистрация
28 Янв 2018
Сообщения
575
Симпатии
365
Автор: Vaqtincha
Версия: 0.1


Описание:
Мета-Плагин который исправляет баг с перезарядкой (при cl_lw 1) у кастомных оружей если установлен кол-во патронов (iMaxClip) больше или меньше чем дефолтный. Это скорее не баг на самом деле. В предикшене просто отсутствует передача iMaxClip а при cl_lw 1 клиент "думает" патроны меньше и при нажатии кнопки перезарядки начинает проигривать анимацию.
Всячески попытались исправить тут

Мой способ простой и эффективный. Я отправляю iClip дефолтным iMaxClip если iClip равно на кастомный iMaxClip. Юзается хук GetWeaponData. Это один из причин почему не написал амхх плагин. Другая причина это функция часто вызывается для клиентов с cl_lw 1

Скомпилил только под win (тк нет возможности под lin скомпилировать) исходники прикрипляю для желающих компилить под линукс.
Плагин использует апи от регейма.
 

Вложения

Последнее редактирование:

Vaqtincha

Разработчик
Регистрация
28 Янв 2018
Сообщения
575
Симпатии
365
d3m37r4, Пока нужны тесты и подтверждение что хак работает.[DOUBLEPOST=1570552891][/DOUBLEPOST]И все равно там трата времени. пр никогда не принимают.
 
Последнее редактирование:

Phantom

Пользователь
Регистрация
8 Июн 2017
Сообщения
141
Симпатии
72
Код:
int GetWeaponData_Post(edict_t *pEdict, struct weapon_data_s *info)
{
    CBasePlayer *pPlayer = (CBasePlayer *)GET_PRIVATE(pEdict);
    
    if (!pPlayer)
        RETURN_META_VALUE(MRES_IGNORED, 1);

    //for (int i = PRIMARY_WEAPON_SLOT; i <= PISTOL_SLOT; i++)
    {
        //auto pPlayerItem = pPlayer->m_rgpPlayerItems[i];
        
        //while (pPlayerItem)
        {
            // auto pWeapon = (CBasePlayerWeapon *)pPlayerItem->GetWeaponPtr();
            auto pWeapon = (CBasePlayerWeapon *)pPlayer->m_pActiveItem;

            if (pWeapon && pWeapon->UseDecrement())
            {
                WeaponIdType WeaponID = (WeaponIdType)pWeapon->m_iId;

                if (WeaponID >= WEAPON_P228 && WeaponID <= WEAPON_P90)
                {
                    CCSPlayerItem *pItem = pWeapon->CSPlayerItem();
                    int iMax = pItem->m_ItemInfo.iMaxClip;

                    if (iMax > g_iMaxClip[WeaponID] || iMax < g_iMaxClip[WeaponID])
                    {
                        if (pWeapon->m_iClip == iMax)
                        {
                            auto item = &info[WeaponID];
                            item->m_iClip = g_iMaxClip[WeaponID]; // send def max clip
                            
                            //CONSOLE_PRINT("iId %i m_iClip %i iMaxClip %i def %i ", WeaponID, pWeapon->m_iClip, iMax, g_iMaxClip[WeaponID]);
                        }
                    }
                }
            }

            //pPlayerItem = pPlayerItem->m_pNext;
        }
    }

    RETURN_META_VALUE(MRES_IGNORED, 1);
}
Vaqtincha, для чего закомментил некоторые строчки?
 

ArKaNeMaN

Пользователь
Регистрация
24 Дек 2017
Сообщения
19
Симпатии
6
Есть хоть какие-то варианты исправления этой анимации из amxx плагина?

Почему-то если пробую изменить инфу о предмете в Ham_Item_GetItemInfo, то сервер выдаёт Segmentation fault...
C++:
public Hook_GetItemInfo_Pre(const ItemId, ItemInfo){
    if(!IsCustomWeapon(GetWeapId(ItemId)))
        return HAM_IGNORED;

    static MaxClip; MaxClip = rg_get_iteminfo(ItemId, ItemInfo_iMaxClip);
    static DefaultMaxClip; DefaultMaxClip = rg_get_weapon_info(get_member(ItemId, m_iId), WI_GUN_CLIP_SIZE);

    if(DefaultMaxClip != MaxClip)
        if(get_member(ItemId, m_Weapon_iClip) == MaxClip){
            SetHamItemInfo(ItemInfo, Ham_ItemInfo_iMaxClip, DefaultMaxClip);
            SetHamParamItemInfo(2, ItemInfo);
        }

    return HAM_IGNORED;
}
Или я что-то не так делаю?
 

Vaqtincha

Разработчик
Регистрация
28 Янв 2018
Сообщения
575
Симпатии
365
ArKaNeMaN, Насколько я помню "на лету" через этот хук невозможно было менять

фигны всякие SetHamItemInfo, CreateHamItemInfo не работали. (и судя по коду не должны и работать) и я тогда предложил сайленту сделать m_ItemInfoEx.

Хук GetItemInfo вполне рабочий (только хукать в прекеше и в посте менять значение)
 

ArKaNeMaN

Пользователь
Регистрация
24 Дек 2017
Сообщения
19
Симпатии
6
ArKaNeMaN, Насколько я помню "на лету" через этот хук невозможно было менять

фигны всякие SetHamItemInfo, CreateHamItemInfo не работали. (и судя по коду не должны и работать) и я тогда предложил сайленту сделать m_ItemInfoEx.

Хук GetItemInfo вполне рабочий (только хукать в прекеше и в посте менять значение)
То есть сейчас силами плагина этот косяк никак не исправить?
 

Vaqtincha

Разработчик
Регистрация
28 Янв 2018
Сообщения
575
Симпатии
365
На этом плагине Weapon Modifier есть примеры. Но только от хука толку 0 если хочешь менять свойства для определенного оружие (энтити)[DOUBLEPOST=1572193665][/DOUBLEPOST]Цитирую описание выше:
Юзается хук GetWeaponData . Это один из причин почему не написал амхх плагин.
нет такого хука в фейкмете
 

Vaqtincha

Разработчик
Регистрация
28 Янв 2018
Сообщения
575
Симпатии
365
ArKaNeMaN, макс клип можно же менять через rg_set_iteminfo
 

ArKaNeMaN

Пользователь
Регистрация
24 Дек 2017
Сообщения
19
Симпатии
6
Vaqtincha, Можно... Но тогда при полном магазине нестандартного размера если нажать на R(попытаться перезарядить), то на клиенте будет проигрываться анимация перезарядки пока кнопка нажата...
В этом и вся проблема

ArKaNeMaN/amxx-CustomWeaponsAPI
Тут у меня, если перезарядка не срабатывает, то проигрывается анимация покоя.
но клиент всё ровно раньше начинает проигрывать анимацию перезарядки и получается шо на какую-то долю секунды оружие дёргается
 

Vaqtincha

Разработчик
Регистрация
28 Янв 2018
Сообщения
575
Симпатии
365
ArKaNeMaN, чем плох мета плагин ? тестил его хотябы ?
 

ArKaNeMaN

Пользователь
Регистрация
24 Дек 2017
Сообщения
19
Симпатии
6
Теперь протестил... Работает норм
 

ArKaNeMaN

Пользователь
Регистрация
24 Дек 2017
Сообщения
19
Симпатии
6
Есть варианты как можно блочить предикшн при выстреле или блокировке перезарядки плагином? Это вообще возможно?
 
Сверху Снизу