Custom Weapons API

Custom Weapons API 1.0.0-b2

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

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
431
Реакции
293
Помог
5 раз(а)
ArKaNeMaN, если при любом оружии выбрасывается,зачем тогда в конфиге w_ модель,ну так наверно не должно быть.
Говорю ж шо не должно быть
Вообще... Не должно..
Но после первой попытки исправить забыл про этот косяк вообще... Посмотрю позже шо можно сделать
 

Ayk

Сообщения
763
Реакции
478
Помог
19 раз(а)
Посмотрю позже шо можно сделать
Код:
    if(Data[CWAPI_WD_Models][CWAPI_WM_W][0])
        SetHookChainArg(2, ATYPE_STRING, Data[CWAPI_WD_Models][CWAPI_WM_W], PLATFORM_MAX_PATH-1);

    return HC_SUPERCEDE;
Ты меняешь аргумент, но блокируешь вызов.
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
можешь ваще ничо не возвращать
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
431
Реакции
293
Помог
5 раз(а)

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
431
Реакции
293
Помог
5 раз(а)
например револьвер r8 из ксго
Вот... Накидал что-то подобное, но без звука...

Список пушек, которые будут исользовать эту способность писать в /amxmodx/configs/plugins/CustomWeaponsAPI/Abilities/RevolverFire.json
В виде Json-массива.
Например:
JSON:
[
    "TestWeapon"
]
Ну и в конфиге оружия надо указать шо оно имеет вторичную атаку и, также, указать интервал между вторичными атаками.
 

Вложения

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
431
Реакции
293
Помог
5 раз(а)
Что там с утверждением?
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
431
Реакции
293
Помог
5 раз(а)
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
ArKaNeMaN, в принципе не плохо, но напрашивается один важный вопрос: а тестился данный плагин с предикшеном или без него? Потому что в последнем обновлении написано о блокировке релоада. Но просто так его не заблокировать. Можно например изменить анимацию релоада на idle с заменой некстатаки, но на долю секунды анимация релоада все равно должна проиграться. То же самое касается стрельбы (предикшн проиграет дефолт звук выстрела даже если заблокировать атаку) и других событий.
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
431
Реакции
293
Помог
5 раз(а)
fantom, Ну да... Заметил такое... Есть вообще какие-либо варианты поправить это?
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
ArKaNeMaN, говорят что почти идеальная реализация у пушек корда для зм. Посмотрите. Возможно что нибудь найдете.
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
431
Реакции
293
Помог
5 раз(а)
ArKaNeMaN, говорят что почти идеальная реализация у пушек корда для зм. Посмотрите. Возможно что нибудь найдете.
Нашёл один его плагин с оружием... У него там чуть ли не вся механика оружия переписана... Есть моменты похожие на то, что я видел в ReGameDLL.

Нашёл что-то с перезарядкой в постфрейме... Сейчас попробую что-нить с этим сделать
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
431
Реакции
293
Помог
5 раз(а)
На самом деле их полно? Просто много кто под копирку делает и ставят себя в авторы. Все как обычно.
Это да, но я чёт не могу найти другие именно его пушки для CS... Хотя когда-то мне тут кто-то скидывал ссылку на кучу его пушек... Но тот сайт сейчас не работает.
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
431
Реакции
293
Помог
5 раз(а)

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
431
Реакции
293
Помог
5 раз(а)
Заметил шо Корд в своём модуле для кастомных пушек в HL1 некоторые события обрабатывает в PostFrame'e предмета...
https://svn.aghl.ru:8443/!/#HLModules/view/head/weaponmod/trunk/wpnmod_hooks.cpp
C++:
void Weapon_ItemPostFrame(void* pvItem)
{
    static int iId;
    static int iClip;
    static int iInReload;

    static int iAmmoPrimary;
    static int iAmmoSecondary;

    static float flNextAttack;
    static float flNextPrimaryAttack;
    static float flNextSecondaryAttack;

    static edict_t* pWeapon;
    static edict_t* pPlayer;

    pWeapon = PrivateToEdict(pvItem);

    if (!IsValidPev(pWeapon))
    {
        return;
    }

    iId = GetPrivateInt(pWeapon, pvData_iId);

    if (WEAPON_IS_DEFAULT(iId))
    {
        WEAPON_REF_ITEM_POST_FRAME(pvItem);
        return;
    }

    pPlayer = GetPrivateCbase(pWeapon, pvData_pPlayer);

    if (!IsValidPev(pPlayer))
    {
        return;
    }

    flNextAttack            = GetPrivateFloat(pPlayer, pvData_flNextAttack);
    flNextPrimaryAttack        = GetPrivateFloat(pWeapon, pvData_flNextPrimaryAttack);
    flNextSecondaryAttack    = GetPrivateFloat(pWeapon, pvData_flNextSecondaryAttack);

    iAmmoPrimary    = GetAmmoInventory(pPlayer, PrimaryAmmoIndex(pWeapon));
    iAmmoSecondary    = GetAmmoInventory(pPlayer, SecondaryAmmoIndex(pWeapon));

    iClip        = GetPrivateInt(pWeapon, pvData_iClip);
    iInReload    = GetPrivateInt(pWeapon, pvData_fInReload);

    WEAPON_FORWARD_EXECUTE(iId, Fwd_Wpn_ItemPostFrame, pWeapon, pPlayer);

    if (iInReload && flNextAttack <= gpGlobals->time)
    {
        // complete the reload.
        int j = min(WEAPON_GET_MAX_CLIP(iId) - iClip, iAmmoPrimary);

        iClip += j;
        iAmmoPrimary -= j;

        // Add them to the clip
        SetPrivateInt(pWeapon, pvData_iClip, iClip);
        SetPrivateInt(pWeapon, pvData_fInReload, FALSE);

        SetAmmoInventory(pPlayer, PrimaryAmmoIndex(pWeapon), iAmmoPrimary);
    }

    if ((pPlayer->v.button & IN_ATTACK2) && flNextSecondaryAttack < 0.0)
    {
        if (WEAPON_GET_AMMO2(iId) && !iAmmoSecondary)
        {
            SetPrivateInt(pWeapon, pvData_fFireOnEmpty, TRUE);
        }

        WEAPON_FORWARD_EXECUTE(iId, Fwd_Wpn_SecondaryAttack, pWeapon, pPlayer);
        pPlayer->v.button &= ~IN_ATTACK2;
    }
    else if ((pPlayer->v.button & IN_ATTACK) && flNextPrimaryAttack < 0.0)
    {
        if ((!iClip && WEAPON_GET_AMMO1(iId)) || (WEAPON_GET_MAX_CLIP(iId) == -1 && !iAmmoPrimary))
        {
            SetPrivateInt(pWeapon, pvData_fFireOnEmpty, TRUE);
        }

        WEAPON_FORWARD_EXECUTE(iId, Fwd_Wpn_PrimaryAttack, pWeapon, pPlayer);
        pPlayer->v.button &= ~IN_ATTACK;
    }
    else if (pPlayer->v.button & IN_RELOAD && WEAPON_GET_MAX_CLIP(iId) != -1 && !iInReload)
    {
        // reload when reload is pressed, or if no buttons are down and weapon is empty.
        WEAPON_FORWARD_EXECUTE(iId, Fwd_Wpn_Reload, pWeapon, pPlayer);
    }
    else if (!(pPlayer->v.button & (IN_ATTACK | IN_ATTACK2)))
    {
        // no fire buttons down
        SetPrivateInt(pWeapon, pvData_fFireOnEmpty, FALSE);

        if (!IS_USEABLE(pWeapon) && flNextPrimaryAttack < 0.0)
        {
            // weapon isn't useable, switch.
            if (!(WEAPON_GET_FLAGS(iId) & ITEM_FLAG_NOAUTOSWITCHEMPTY) && GetNextBestWeapon(pPlayer, pWeapon))
            {
                SetPrivateFloat(pWeapon, pvData_flNextPrimaryAttack, 0.3);
                return;
            }
        }
        else
        {
            // weapon is useable. Reload if empty and weapon has waited as long as it has to after firing
            if (!iClip && !(WEAPON_GET_FLAGS(iId) & ITEM_FLAG_NOAUTORELOAD) && flNextPrimaryAttack < 0.0)
            {
                WEAPON_FORWARD_EXECUTE(iId, Fwd_Wpn_Reload, pWeapon, pPlayer);
                return;
            }
        }

        WEAPON_FORWARD_EXECUTE(iId, Fwd_Wpn_Idle, pWeapon, pPlayer);
    }
}
Актуально ли это для кс?
 
Сообщения
584
Реакции
1,006
Помог
18 раз(а)
ArKaNeMaN, у вас исходники ReGameDLL на руках, смотрите соответствия.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу