Количество патрон в основной обойме

Tomiks

Участник
Сообщения
419
Реакции
288
Привет, хотел у великих людей поинтересоваться, как можно реализовать изменение количества патрон в основной обойме только у 1 игрока на любом оружии? И интересует вопрос, видел это делается через
C++:
int iEnt = GivePlayerItem(client, "weapon_awp");
SetEntProp(iEnt, Prop_Send, "m_iPrimaryReserveAmmoCount", 0); // патроны в запасе
SetEntProp(iEnt, Prop_Send, "m_iClip1", 1); // патроны в обойме
но, не будет ли бага с перезарядкой, что при значении выше, чем максимальное значение патрон в основной обойме(например 30) можно будет перезарядиться и кол-во патрон сбросится обратно до стандарта(30 например)?
 

Black_Yuzia

Зарабатываю на жизнь Мемами про Крузю.
Сообщения
693
Реакции
372
не будет ли бага с перезарядкой, что при значении выше, чем максимальное значение патрон в основной обойме(например 30) можно будет перезарядиться и кол-во патрон сбросится обратно до стандарта(30 например)?
Если взять тот же WCS. Там "насильно", если значение выше максимума патронов - блочат перезарядку.
 

komashchenko

Идиот
Сообщения
916
Реакции
2,569
У меня работает так: хук GetMaxClip1 при вызове получаю владельца и если это вип то возвращаю другое значение, и никаких багов не будет с перезарядками, пропажами патронов и так дальше
 

Tomiks

Участник
Сообщения
419
Реакции
288
У меня работает так: хук GetMaxClip1 при вызове получаю владельца и если это вип то возвращаю другое значение, и никаких багов не будет с перезарядками, пропажами патронов и так дальше
Это через HookEvent или SDK?
 

komashchenko

Идиот
Сообщения
916
Реакции
2,569
Не подскажешь как в коде реализуется, пожалуйста? Не имею представления об этом просто, не работал с ними ни разу, был бы очень благодарен

Пример:
#include sdktools
#include sdkhooks
#include dhooks

Handle hdhGetMaxClip1;

#define ofsGetMaxClip1 357

public void OnPluginStart()
{
    hdhGetMaxClip1 = DHookCreate(ofsGetMaxClip1, HookType_Entity, ReturnType_Int, ThisPointer_CBaseEntity, GetMaxClip1);
}

public void OnEntityCreated(int iEnt, const char[] sClassname)
{
    if(sClassname[0] == 'w' && sClassname[6] == '_')
    {
        DHookEntity(hdhGetMaxClip1, true, iEnt);
    }
}

MRESReturn GetMaxClip1(int iEnt, Handle hReturn, Handle hParams)
{
    int MaxClip = DHookGetReturn(hReturn);
    
    if(MaxClip > 1)
    {
        int iClient = GetEntPropEnt(iEnt, Prop_Data, "m_hOwnerEntity");
        
        if(iClient != -1 && GetClientTeam(iClient) == 2)
        {
            DHookSetReturn(hReturn, RoundToCeil(MaxClip*1.15));
            
            return MRES_Override;
        }
    }
    
    return MRES_Ignored;
}
 
Сверху Снизу