> > > >

Склад полезного кода [GoldSrc]

Сообщения
89
Рейтинг
113
#61
Аналоги DefaultDeploy и SendWeaponAnim с SDK
Код:
stock util_weapon_send_anim(const client, const anim) {
    set_pev(client, pev_weaponanim, anim)
    message_begin(MSG_ONE, SVC_WEAPONANIM, _, client)
    write_byte(anim)
    write_byte(pev(client, pev_body))
    message_end()
}

stock bool:util_weapon_default_deploy(const weapon, const player, const view_model[], const weapon_model[], const anim, const anim_ext[]) {
    if (!ExecuteHam(Ham_Item_CanDeploy, weapon)) {
        return false
    }

    set_pev(player, pev_viewmodel2, view_model)
    set_pev(player, pev_weaponmodel2, weapon_model)
    set_pdata_string(player, 387, anim_ext, -1, 20) // m_szShieldAnimExt

    util_weapon_send_anim(player, anim)

    set_pdata_float(player, 83, 0.75) // m_flNextAttack
    set_pdata_float(weapon, 48, 1.5, 4) // m_flTimeWeaponIdle, XO_WEAPON
    set_pdata_float(weapon, 79, 0.0, 4) // m_flLastFireTime, XO_WEAPON
    static Float:time
    global_get(glb_time, time)
    set_pdata_float(weapon, 76, time, 4) // m_flDecreaseShotsFired, XO_WEAPON

    const DEFAULT_FOV = 90
    set_pdata_int(player, 363, DEFAULT_FOV) // m_iFOV
    set_pev(player, pev_fov, DEFAULT_FOV)
    set_pdata_int(player, 109, DEFAULT_FOV) // m_iLastZoom
    set_pdata_int(player, 110, false) // m_iLastZoom

    return true
}
25 Окт 2018
Отсутствует разве что возможность пропустить отправку анимации для воспроизведения ее клиентским предсказанием
 
5  
Сообщения
32
Рейтинг
51
#62
Это не кусок кода, но способ использования ArrayFindString для массивов. Натива задумывалась для динамических массивов содержащих только строки, но ее можно использовать для поиска строки в динамических массивах содержащих массивы. Масло масленое, лучше покажу на примере.

Предположим у нас есть структура нашего массива, в котором три свойства — целочисленное, целочисленное и какая-то строка.
C++:
enum Props {
    TestProp,
    TestProp1,
    TestProp2[32]
};
И есть динамический массив.
C++:
new Array: g_pItems = ArrayCreate(Props);
В котором, опять же предположим, есть куча записей и нам нужно найти одну запись по его свойству TestProp2. В том виде структуры (перечисления, если быть точнее, но давайте представим, что Pawn нормальный язык и будем называть это структурой), который есть у нас сейчас, натива ArrayFindString всегда будет возвращать -1, даже если искомая строка в одной из записей есть. Но если мы поставим наше свойство TestProp2 выше всех остальных:
C++:
enum Props {
    TestProp2[32],
    TestProp,
    TestProp1
};
то поиск будет работать.
 
Последнее редактирование:
6  
Сообщения
1.111
Рейтинг
1089
#63
Метод много где расписан по разному. Но спасибо fl0wer за рабочый вариант блокировки звуков выстрела по умолчанию. Основная проблема что клиент сам его воспроизводит
Код:
#include <amxmodx>
#include <fakemeta>

public plugin_init() {
    register_forward(FM_UpdateClientData, "UpdateClientData_Post", true);
}

public UpdateClientData_Post(const id, const SendWeapons, const cd) {
    if (!is_user_alive(id) || !cd) {
        return FMRES_IGNORED;
    }

    set_cd(cd, CD_flNextAttack, get_gametime() + 0.001);
    return FMRES_IGNORED;
}
 
Последнее редактирование:
5  
Сообщения
284
Рейтинг
257
#64
Подсчет кол-ва игроков в командах
Код:
stock rg_get_players_num(&terrorist = 0, &ct = 0, &spec = 0, &unassigned = 0) {
    for(new id = 1; id <= MaxClients; id++) {
        if(!is_user_connected(id))
            continue;
       
        switch(get_member(id, m_iTeam)) {
            case TEAM_TERRORIST: terrorist++;
            case TEAM_CT: ct++;
            case TEAM_SPECTATOR: spec++;
            case TEAM_UNASSIGNED: unassigned++;
        }
    }
}
 
Последнее редактирование:
 
Сообщения
461
Рейтинг
573
#65
d3m37r4, думаю проще было бы задействовать get_playersnum_ex
 
3  
Сообщения
160
Рейтинг
152
#67
d3m37r4, зачем считать другие команды, если используется одна?
 
3  
Сообщения
160
Рейтинг
152
#69
d3m37r4, можно массивом было сделать, всё равно все считаешь))
 
2  

Похожие темы

> > > >