Вопрос по Pawn

Сообщения
443
Реакции
319
Помог
13 раз(а)
Сообщения
63
Реакции
1
я искал в интернете и даже на вашем форуме находил но никак не могу понять
Что такое
RegisterHookChain

Что оно делает, какое событие регистрирует, какие параметры может принимать, описания мало и все на англ языке, можете по подробнее про нее рассказать?
24 Апр 2020
в плагине RegisterHookChain(RG_CWeaponBox_SetModel используется так
24 Апр 2020
информации про RG_CWeaponBox_SetModel вообще не нашел
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
TTox421,
Код:
/*
* Hook API function that are available into enum.
* Look at the enums for parameter lists.
*
* @param function   The function to hook
* @param callback   The forward to call
* @param post       Whether or not to forward this in post
*
* @return           Returns a hook handle. Use EnableHookChain/DisableHookChain to toggle the forward on or off
*/
native HookChain:RegisterHookChain({EngineFunc, GamedllFunc, GamedllFunc_CBaseAnimating, GamedllFunc_CBasePlayer, GamedllFunc_CSGameRules, GamedllFunc_CGrenade, GamedllFunc_CWeaponBox, ReCheckerFunc, GamedllFunc_CBasePlayerWeapon}:function_id, const callback[], post = 0);
24 Апр 2020
Короче, если совсем простыми словами, то это натив для отлова различных событий. Первый аргумент - "событие" (что будет отлавливать), второй аргумент - функция обработчик, то бишь функция, в которой мы продолжим работу с отловленным "событием", третий аргумент - тип отлова (перед его вызовом или после (pre / post соответственно)).
24 Апр 2020
информации про RG_CWeaponBox_SetModel вообще не нашел
Для работы с энтити weaponbox (поцепить модельку на неё, закинуть в неё патроны и т.п.)
 
Сообщения
63
Реакции
1
Minni, Спасибо, что разъяснил, но вот мне непонятно. Зачем столько отловов событий, разными командами, HookChain, RegisterEvent и там не помню точно, еще очень много, но я не понимаю почему они все по разному, почему не закинули все в HookChain, что бы все события через него ловились, или есть на то причины?
25 Апр 2020
Minni, Кстати из какого include ты взял
native HookChain:RegisterHookChain({EngineFunc, GamedllFunc, GamedllFunc_CBaseAnimating, GamedllFunc_CBasePlayer, GamedllFunc_CSGameRules, GamedllFunc_CGrenade, GamedllFunc_CWeaponBox, ReCheckerFunc, GamedllFunc_CBasePlayerWeapon}:function_id, const callback[], post = 0);
 

d3m37r4

111111
Сообщения
1,449
Реакции
1,175
Помог
10 раз(а)
Кстати из какого include ты взял
native HookChain:RegisterHookChain({EngineFunc, GamedllFunc, GamedllFunc_CBaseAnimating, GamedllFunc_CBasePlayer, GamedllFunc_CSGameRules, GamedllFunc_CGrenade, GamedllFunc_CWeaponBox, ReCheckerFunc, GamedllFunc_CBasePlayerWeapon}:function_id, const callback[], post = 0);
reapi
 
Сообщения
63
Реакции
1
Блин я долго мучался и не могу сделать плагин норм. Мне нужно событие, которое сможет отловить, какое оружие у игрока в инвентаре именно там где лежит автомат.
Я пишу плагин, что бы он давал мку, но удалял любое другое оружие из ивентаря, кроме той мки которую он даст
Я смог это сделать, когда оружие у тебя в руках, но стоит взять пистолет и тогда тебе эмка дается, а калаш не забирается
Есть ли какой то евент который ловит какое оружие у игрока на 1 месте в инвентаре

Вот что я для тестов набрасал
Код:
/* Plugin generated by AMXX-Studio */
 
#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#include <fakemeta>
#include <hamsandwich>
#include <ham_const>
#include <fun>
 
#define PLUGIN "[The useful functions] ham_strip_weapon"
#define VERSION "1.0"
#define AUTHOR "Admin"

new weaponnum[19] = {
3, 5, 7, 8, 12, 13, 14, 15, 18, 19, 20, 21, 22, 23, 24, 27, 28, 29, 30 
};
 
public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    register_clcmd("say strip","un_weapon");
}
public un_weapon(id){
 
    //Получение id оружия
    new pl_weapon = get_user_weapon(id)
 
    for(new i = 0; i < 19; i++)
    {
        if(weaponnum[i] == pl_weapon)
        {
            new weapon_name[24]
            //Получение названия оружия
            get_weaponname(pl_weapon,weapon_name,24)
            client_print_color(id, Red, "Это оружие называется - %s", weapon_name);
                
            //Вызов функции
            ham_strip_weapon(id,weapon_name)
        }
        else
        {
            give_item(id, "weapon_m4a1"); //Выдаём пистолет p228
            ExecuteHam(Ham_GiveAmmo, id, 90, "556nato", 92);
        }
    }

    return PLUGIN_HANDLED_MAIN;
}

stock ham_strip_weapon(id,weapon[])
{
    if(!equal(weapon,"weapon_",7)) return 0
 
    new wId = get_weaponid(weapon)
    if(!wId) return 0
 
    new wEnt
    while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {}
    if(!wEnt) return 0
 
    if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt)
 
    if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0
    ExecuteHamB(Ham_Item_Kill,wEnt);
 
    set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId))

    give_item(id, "weapon_m4a1"); //Выдаём пистолет p228
    ExecuteHam(Ham_GiveAmmo, id, 90, "556nato", 92);

    return 1
}
 
Сообщения
1,031
Реакции
827
Помог
10 раз(а)
TTox421, что-то не совсем догнал, тебе по команде надо выдать мку просто и все?
 

d3m37r4

111111
Сообщения
1,449
Реакции
1,175
Помог
10 раз(а)
Javekson, выкинуть/ремувнуть основное оружие, если оно есть (или находится в инвентаре) и выдать мку.
 
Сообщения
63
Реакции
1
Ayk, Сначало ничо не понял, а потом спустя 2 часов поисков на форумах, понял о чем ты, спасибо
25 Апр 2020
Ayk, Спасибо, благодоря тебе я неплохо сократил код


Код:
#include <amxmodx>
#include <colorchat>
#include <reapi>
 
#define PLUGIN "[The useful functions] ham_strip_weapon"
#define VERSION "1.0"
#define AUTHOR "Admin"
 
public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    register_clcmd("say strip","un_weapon");
}
public un_weapon(id){
            rg_give_item(id, "weapon_m4a1", GT_REPLACE);
            rg_set_user_bpammo(id, WEAPON_M4A1, 90);
}
 
Сообщения
63
Реакции
1
Подскажите пожалуйста, есть где можно на русском почитать про Reapi искал и не нашёл, все сайты на англ, даже на форуме этом все на англ языке(
 

d3m37r4

111111
Сообщения
1,449
Реакции
1,175
Помог
10 раз(а)
TTox421, нет нигде мануалов на русском. Есть примеры использования тех или иных функций на данном форуме. И есть исходный код регейма, где можно посмотреть что и когда вызывается и как работает.
 
Последнее редактирование:
Сообщения
63
Реакции
1
где можно узнать id оружий от impulse никак не могу найти
 
Сообщения
63
Реакции
1
Точнее не так понял, где можно узнать уникальный ил импульс для орудий uid
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
TTox421, нигде. Ты сам его задаешь. Узнать UID оружия можно с помощью get_entvar(pWeapon, var_impulse)
 
Сообщения
63
Реакции
1
Код:
/*
* Last update: 09.02.2019
*
* Original code by F@nt0M: https://dev-cs.ru/threads/1983/page-3#post-51426
*/

#include <amxmodx>
#include <hamsandwich>
#include <reapi>

#pragma semicolon 1

new const PLUGIN_VERSION[] = "1.0";

/****************************************************************************************
****************************************************************************************/

#define IsUserValid(%0) (1 <= %0 <= MaxClients)
#define GetCvarDesc(%0) fmt("%l", %0)

// Режим DEBUG. Раскомментировать если нужно включить команду для выдачи оружия
//#define DEBUG

// Уникальный ID (impulse) для оружия
#define WEAPON_UID            130
// ID оружия (берётся из файла cssdk_const.inc из enum WeaponIdType)
#define WEAPON_ID            WEAPON_AK47
// Получить ID оружия
#define GetWeaponID(%0)        WeaponIdType:get_member(%0, m_iId)
// Является ли оружие нашим кастомным
#define IsCustomWeapon(%0)    bool:(get_entvar(%0, var_impulse) == WEAPON_UID)

// Нужны ли модели
#define MODELS
// Нужна ли модель "w_"
//#define MODEL_W
27 Апр 2020
Как узнать какой UID вписывать здесь?
 

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

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