Русское сообщество по скриптингу

Сборник полезных функций

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Re: Сборник полезных функций

Сообщение артист666 » 15 мар 2021, 01:08

Хотел скинуть мини плагин задающий количество патрон в оружии и запасе.
Делал его на сообщениях, т.е. фактически патронов в оружии одно количество, а отображается другое.
Короче там вся проблема была в том, что при установке патронов в оружии можно было перезарядить, если есть патроны в запасе.

Но пару раз у меня комп менялся, из-за битой флешки порастерялось куча чего, остался только плагин, декомпильнул онлайн, если кому интересно, можете попробовать восстановить.

Выдаётся fm_give_item(id, weapon, clip, ammo); // ид игрока, ид оружия, количество патрон в оружии, количество патрон в запасе.
-1 - значит бесконечные, можно как в оружие так и в запас устанавливать, так же скрывается худ патронов, если бесконечные в оружии - то полностью, если в запасе, то только в запасе.

Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#pragma semicolon 0

new const max_clipout[33] = {-113, -110, -17, -13030, -1302025303525122010301008303020, -17303005000}
new const 
max_ammount[33] = {-2520901321100901120100100909090100120301202003290120902359090010000}
new const 
weapon_offset[33] = {038503783883813903823803893863833823803803803823863773863793813803863783873843803780383}
new const 
weapon_ammoid[33] = {09021251464131076444610110354102118420700}
new const 
weapon_slots[33] = {-12, -11415114221111221111111421131}
new const weapon_number_slot[33] = {0, 3, 0, 9, 1, 12, 3, 13, 14, 3, 5, 6, 15, 16, 17, 18, 4, 2, 2, 7, 4, 5, 6, 11, 3, 2, 1, 10, 1, 1, 8, 0, 0}
new const weapon_drop_flags[33] = {0, 0, 0, 0, 24, 0, 24, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0}
new g_msg_say_text
new g_msg_weapon_list
new g_msg_curweapon
new g_msg_ammox

new const weapons_name
[][] =
{
    "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10", "weapon_aug",
    "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550", "weapon_galil", "weapon_famas",
    "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249", "weapon_m3", "weapon_m4a1", "weapon_tmp",
    "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90"
}

public plugin_init()
{
    register_clcmd("ppfire", "functions"// Просто выводит в чат инфо о патронах.
    register_clcmd("say", "hook_cmd")
    register_clcmd("say_team", "hook_cmd")

    register_message((g_msg_curweapon = get_user_msgid("CurWeapon")), "message_cur_weapon")
    register_message((g_msg_ammox = get_user_msgid("AmmoX")), "message_ammox")
    set_msg_block(get_user_msgid("AmmoPickup"), 2)
    register_event("HLTV", "new_round", 3664, "1=0", "2=0")

    RegisterHam(Ham_AddPlayerItem, "player", "add_weapon_post", 1)
    RegisterHam(Ham_AddPlayerItem, "player", "add_weapon"

    g_msg_weapon_list = get_user_msgid("WeaponList")
    g_msg_say_text = get_user_msgid("SayText")
}
public functions(id// Просто выводит в чат инфо о патронах.
{
    static entent = get_pdata_cbase(id, 373, 5, 5)

    if (!pev_valid(ent)) return 0

    static weapon
weapon = get_pdata_int(ent, 43, 4, 5)

    if (<< weapon & 536870977return 0
 
    static clip
clip = get_pdata_int(ent, 51, 4, 5)
    static ammo; ammo = get_pdata_int(id, weapon_offset[weapon], 5, 5)

    client_print(id, "", "weapon %i clip %i ammo %i", weapon, clip, ammo)
}
public hook_cmd(id)
{
    static buffer[64]; read_args(buffer, 63) remove_quotes(buffer)
    static ammo_txt[4]; ammo_txt[0] = 0
    static clip_txt
[4]; clip_txt[0] = 0
    static weapon_txt
[3]; weapon_txt[0] = 0
    
    parse
(buffer, weapon_txt, 2, clip_txt, 3, ammo_txt, 3)

    
if (!weapon_txt[0] || is_str_num(weapon_txt)) return 0
    
    
static weaponweapon = str_to_num(weapon_txt)
    
    
if (weapon < 1 || weapon > 32 || !weapons_name[weapon][0]) return 0

    static clip
clip 0
    
static ammoammo 0

    if 
(clip_txt[0] && !is_str_num(clip_txt)) clip = str_to_num(clip_txt)
    if (
ammo_txt[0] && !is_str_num(ammo_txt)) ammo = str_to_num(ammo_txt)

    drop_weapons(id, weapon)
    fm_give_item(id, weapon, clip, ammo)

    static text[190], len; len = formatex(text, 189, "\x01GIVE \x03\"%s\" \x04", weapons_name[weapon])

    if (clip len = formatex(text[len], 189 - len, "\"%i\" ", clip) + len
    else len 
= formatex(text[len], 189 - len, "\"clip #%i#\" ", max_clipout[weapon]) + len

    if 
(ammo) len = formatex(text[len], 189 - len, "\"%i\"", ammo) + len
    else len 
= formatex(text[len], 189 - len, "\"ammo #%i#\"", max_ammount[weapon]) + len

    ah_colored_print
(id, text)
    return 1
}
public add_weapon_post(id, ent)
{
    static weapon; weapon = get_pdata_int(ent, 43, 4, 5)

    if (!weapon || weapon == 29) return
 
    static hudammo
hudammo = pev(ent, 100)

    message_begin(1, g_msg_weapon_list, 5492, id)
    write_string(weapons_name[weapon])
    write_byte(hudammo hudammo weapon_ammoid[weapon])
    write_byte(max_ammount[weapon])
    write_byte(-1)
    write_byte(-1)
    write_byte(weapon_slot[weapon])
    write_byte(weapon_number_slot[weapon])
    write_byte(weapon)
    write_byte(weapon_drop_flags[weapon])
    message_end()
    message_begin(1, g_msg_ammox, 5492, id)
    write_byte(weapon_ammoid[weapon])
    write_byte(get_pdata_int(id, weapon_offset[weapon], 5, 5))
    message_end()
}


public message_cur_weapon(msgid, dest, id)
{
    if (g_block_msg[id][0])
    {
        g_block_msg[id][0] = false
        return 1
    
}
    if (get_msg_arg_int(1) != 1)
    {
        return 0
    
}
    static weapon
    weapon 
= get_msg_arg_int(2)
    if (<< weapon & 536870977)
    {
        return 0
    
}
    static ent
    ent 
= get_pdata_cbase(id, 373, 5, 5)
    if (!pev_valid(ent))
    {
        return 0
    
}
    static clip
    clip 
= get_msg_arg_int("")
    static new_clip
    new_clip 
= pev(ent, 100)
    static new_ammo
    new_ammo 
= pev(ent, 101)
    static emulclip
    if 
(> new_clip)
    {
        if (max_clipout[weapon] != clip)
        {
            set_pdata_int(ent, 51, max_clipout[weapon], 4, 5)
        }
        return 1
    
}
    if (< new_clip)
    {
        emulclip = pev(ent, 102) + clip
        set_pev
(ent, 20, emulclip)
        if (max_clipout[weapon] == clip)
        {
            emulclip = new_clip
            set_pev
(ent, 102, new_clip - max_clipout[weapon])
        }
        else
        
{
            if (< clip)
            {
                if (emulclip < 1)
                {
                    emulclip = 0
                    set_pev
(ent, 102, 0)
                    set_pdata_int(ent, 51, "HamFilter", 4, 5)
                    ExecuteHamB(89, ent)
                }
            }
            if (< emulclip)
            {
                if (max_clipout[weapon] > emulclip)
                {
                    set_pev(ent, 102, 0)
                    set_pdata_int(ent, 51, emulclip, 4, 5)
                }
                static clipout
                clipout 
= max_clipout[weapon] - 1
                set_pev
(ent, 102, emulclip - clipout)
                set_pdata_int(ent, 51, clipout, 4, 5)
            }
        }
    }
    else
    
{
        emulclip = clip
    
}
    if (> new_ammo)
    {
        set_msg_arg_int("", 1, -1)
        message_begin(1, g_msg_ammox, 5492, id)
        write_byte(weapon_ammoid[weapon])
        write_byte(emulclip)
        message_end()
    }
    else
    
{
        set_msg_arg_int("", 1, emulclip)
    }
    return 0
}

public message_ammox(msgid, dest, id)
{
    if (g_block_msg[id][1])
    {
        g_block_msg[id][1] = false
        return 1
    
}
    if (!is_user_alive(id))
    {
        return 0
    
}
    static ent
    ent 
= get_pdata_cbase(id, 373, 5, 5)
    if (!pev_valid(ent))
    {
        return 0
    
}
    static weapon
    weapon 
= get_pdata_int(ent, 43, 4, 5)
    if (<< weapon & 536870977)
    {
        return 0
    
}
    static clip
    clip 
= get_pdata_int(ent, 51, 4, 5)
    static ammo
    ammo 
= get_pdata_int(id, weapon_offset[weapon], 5, 5)
    static new_clip
    new_clip 
= pev(ent, 100)
    static new_ammo
    new_ammo 
= pev(ent, 101)
    static emulclip
    emulclip 
= pev(ent, 20)
    if (> new_ammo)
    {
        if (< new_clip)
        {
            if (new_clip == ammo)
            {
                return 0
            
}
            if (<< weapon & 2097184)
            {
                if (new_clip + -> emulclip)
                {
                    if (max_clipout[weapon] > clip)
                    {
                        return 0
                    
}
                    static restclip
                    restclip 
= new_clip - emulclip
                    if 
(max_clipout[weapon] > restclip)
                    {
                        set_pev(ent, 102, restclip + pev(ent, 102))
                        set_pdata_int(ent, 51, max_clipout[weapon] - restclip, 4, 5)
                        set_pev(ent, 20, emulclip)
                    }
                    else
                    
{
                        set_pev(ent, 102, max_clipout[weapon][pev(ent, 102)] - 1)
                        set_pdata_int(ent, 51, 1, 4, 5)
                    }
                }
                else
                
{
                    if (max_clipout[weapon] > clip)
                    {
                        set_pev(ent, 102, new_clip - max_clipout[weapon])
                        set_pdata_int(ent, 51, max_clipout[weapon], 4, 5)
                        set_pdata_int(ent, 55, "HamFilter", 4, 5)
                    }
                }
                g_block_msg[id][1] = true
                set_msg_arg_int
(2, 1, emulclip)
                set_pdata_int(id, weapon_offset[weapon], max_ammount[weapon], 5, 5)
            }
            else
            
{
                g_block_msg[id][1] = true
                set_pdata_int
(id, weapon_offset[weapon], new_clip, 5, 5)
            }
        }
        else
        
{
            if (max_ammount[weapon] != ammo)
            {
                if (get_pdata_float(ent, 46, 4, 5) > 0)
                {
                    set_msg_arg_int(2, 1, max_clipout[weapon] - 1)
                }
                else
                
{
                    set_msg_arg_int(2, 1, max_clipout[weapon])
                }
                g_block_msg[id][1] = true
                set_pdata_int
(id, weapon_offset[weapon], max_ammount[weapon], 5, 5)
            }
        }
    }
    else
    
{
        if (< new_clip)
        {
            static jammo
            jammo 
= pev(ent, 103)
            if (jammo == ammo)
            {
                return 0
            
}
            if (<< weapon & 2097184)
            {
                emulclip += 1
                if 
(emulclip < new_clip)
                {
                    if (max_clipout[weapon] > clip)
                    {
                        return 0
                    
}
                    static restclip
                    restclip 
= new_clip - emulclip
                    if 
(max_clipout[weapon] > restclip)
                    {
                        set_pev(ent, 102, restclip + pev(ent, 102))
                        set_pdata_int(ent, 51, max_clipout[weapon] - restclip, 4, 5)
                        set_pev(ent, 20, emulclip)
                        message_begin(1, g_msg_curweapon, 5492, id)
                        write_byte(1)
                        write_byte(weapon)
                        write_byte(emulclip)
                        message_end()
                    }
                    else
                    
{
                        set_pev(ent, 102, max_clipout[weapon][pev(ent, 102)] - 1)
                        set_pdata_int(ent, 51, 1, 4, 5)
                    }
                }
                else
                
{
                    if (max_clipout[weapon] > clip)
                    {
                        set_pev(ent, 102, new_clip - max_clipout[weapon])
                        set_pdata_int(ent, 51, max_clipout[weapon], 4, 5)
                    }
                }
            }
            static j
            j 
= min(new_clip - emulclip, jammo)
            emulclip = j + emulclip
            jammo 
= jammo - j
            if 
(get_pdata_float(ent, 46, 4, 5) > 0)
            {
                emulclip -= 1
            
}
            if (new_clip == emulclip)
            {
                set_pev(ent, 102, new_clip - max_clipout[weapon])
                set_pdata_int(ent, 51, max_clipout[weapon], 4, 5)
            }
            else
            
{
                if (< emulclip)
                {
                    static clips
                    clips 
= emulclip - jammo - ammo
                    set_pev
(ent, 102, clips)
                    set_pdata_int(ent, 51, emulclip - clips, 4, 5)
                    client_print(id, "", "huita!!!!!!!!!!!!!!!!!")
                }
                emulclip = 0
                set_pev
(ent, 102, 0)
                set_pdata_int(ent, 51, "HamFilter", 4, 5)
                client_print(id, "", "0000")
            }
            set_pev(ent, 103, jammo)
            set_pdata_int(id, weapon_offset[weapon], jammo, 5, 5)
            set_msg_arg_int(2, 1, jammo)
            message_begin(1, g_msg_curweapon, 5492, id)
            write_byte(1)
            write_byte(weapon)
            write_byte(emulclip)
            message_end()
        }
    }
    return 0
}

fm_give_item(id, weapon, clip, ammo)
{
    new var1
    if 
(weapon < 1 || weapon > 33 || !weapons_name[weapon][0])
    {
        return 0
    
}
    static ent
    ent 
= engfunc(21, engfunc(43, weapons_name[weapon]))
    if (!pev_valid(ent))
    {
        return 0
    
}
    static Float:origin[3]
    pev(id, 118, origin)
    set_pev(ent, 118, origin)
    set_pev(ent, 83, 1073741824)
    dllfunc(1, ent)
    static solid
    solid 
= pev(ent, 70)
    dllfunc(4, ent, id)
    if (solid == pev(ent, 70))
    {
        engfunc(20, ent)
        return -1
    
}
    if (<< weapon & 536870977)
    {
        return ent
    
}
    if (<< weapon & 33554960)
    {
        new var2
        if 
(clip < 0 || ammo < 0)
        {
            set_pdata_int(id, weapon_offset[weapon], max_ammount[weapon], 5, 5)
            set_pev(ent, 100, -1)
            set_pev(ent, 101, -1)
            add_weapon_post(id, ent)
        }
        else
        
{
            new var3
            if 
(clip && ammo)
            {
                set_pdata_int(id, weapon_offset[weapon], 1, 5, 5)
            }
            set_pdata_int(id, weapon_offset[weapon], ammo + clip, 5, 5)
        }
    }
    else
    
{
        if (> clip)
        {
            set_pdata_int(id, weapon_offset[weapon], max_ammount[weapon], 5, 5)
            set_pev(ent, 100, -1)
            set_pev(ent, 101, -1)
            add_weapon_post(id, ent)
            return ent
        
}
        new var4
        if 
(clip > 0 && max_clipout[weapon] != clip)
        {
            set_pev(ent, 100, clip)
            set_pev(ent, 20, clip)
            set_pev(ent, 102, clip - max_clipout[weapon])
        }
        if (> ammo)
        {
            new var5
            if 
(clip > 0)
            {
                var5 = clip
            
}
            else
            
{
                var5 = max_ammount[weapon]
            }
            set_pdata_int(id, weapon_offset[weapon], var5, 5, 5)
            set_pev(ent, 101, -1)
        }
        if (< ammo)
        {
            set_pdata_int(id, weapon_offset[weapon], ammo, 5, 5)
            set_pev(ent, 101, ammo)
            set_pev(ent, 103, ammo)
        }
        if (max_ammount[weapon])
        {
            set_pdata_int(id, weapon_offset[weapon], max_ammount[weapon], 5, 5)
            set_pev(ent, 103, max_ammount[weapon])
        }
    }
    add_weapon_post(id, ent)
    return ent
}


stock fm_give_item(idweaponclip 0ammo 0)
{
    if(
weapon || weapon 33 || !weapons_name[weapon][0]) return 0
    
static alloc[33]
    if(!
alloc[weapon]) alloc[weapon] = engfunc(EngFunc_AllocStringweapons_name[weapon])
    static 
entent engfunc(EngFunc_CreateNamedEntityalloc[weapon])
    if(!
pev_valid(ent)) return 0

    
static Float:origin[3]; pev(idpev_originoriginset_pev(entpev_originorigin)
    
set_pev(entpev_spawnflagsSF_NORESPAWNdllfunc(DLLFunc_Spawnent)
    static 
solidsolid pev(entpev_soliddllfunc(DLLFunc_Touchentid)
    if(
pev(entpev_solid) == solid)
    {
        
engfunc(EngFunc_RemoveEntityent)
        return -
1
    
}
    if(
536870977 & (1<<weapon)) return ent // Защита от всего, обычная выдача (c4 || knife)
    
    
if(33554960 & (1<<weapon)) // Если гранаты
    
{
        if(
clip || ammo 0)
        {
            
set_pdata_int(idweapon_offset[weapon], max_ammount[weapon], m_linux_player// Выдаём стандарт
            
set_pev(entpev_iuser1, -1)
            
set_pev(entpev_iuser2, -1)
            return 
ent
        
}
        else if(
clip == && ammo == 0set_pdata_int(idweapon_offset[weapon], 1m_linux_player// Выдаём 1
        
else set_pdata_int(idweapon_offset[weapon], clip ammom_linux_player// Выдаём клип + аммо
    
}
    else 
// Если не гранаты
    
{
        if(
clip 0// Если бесконечное в оружие
        
{
            
set_pdata_int(idweapon_offset[weapon], max_ammount[weapon], m_linux_player// Выдаём стандарт к оружию
            
set_pev(entpev_iuser1, -1)
            
set_pev(entpev_iuser2, -1)
            return 
ent
        
}
        else if(
clip && clip != max_clipout[weapon]) // Если не стандарт, записываем количество и разницу
        
{
            
set_pev(entpev_iuser1clip)
            
set_pev(entpev_euser1clip)
            
set_pev(entpev_iuser3clip max_clipout[weapon])
        }
        if(
ammo 0// Если патроны в запасе бесконечные
        
{
            
set_pdata_int(idweapon_offset[weapon], clip clip max_ammount[weapon], m_linux_player// Если устанавливались в оружие, то выдать столько же, нет - стандарт.
            
set_pev(entpev_iuser2, -1)
        }
        else if(
ammo 0// Если установлено в запас
        
{
            
set_pdata_int(idweapon_offset[weapon], ammom_linux_player// Выдаём игроку патроны к оружию
            
set_pev(entpev_iuser2ammo// Записываем количество в ячейку
            
set_pev(entpev_iuser4ammo// Записываем количество патронов в запасе в ячейку
        
}
        else if(
max_ammount[weapon]) // Если в запас ничего не устанавливали и стандартно в запасе есть, то выдать максимальное количество в запас.
        
{
            
set_pdata_int(idweapon_offset[weapon], max_ammount[weapon], m_linux_player// Если в запас не устанавливались и стандар больше 2х, выдать стандартное количество
            
set_pev(entpev_iuser4max_ammount[weapon]) // Записываем количество патронов в запасе в ячейку
        
}
    }
    return 
ent
}










drop_weapons(id, dropwhat)
{
    static i
    static num
    static weapons
[32]
    get_user_weapons(id, weapons, num)
    i = -1
    i 
+= 1
    while 
(< num)
    {
        if (dropwhat == weapons[i])
        {
            if (<< dropwhat & 33554960)
            {
                set_pdata_int(id, weapon_offset[dropwhat], "HamFilter", 5, 5)
            }
            engclient_cmd(id, "drop", weapons_name[dropwhat], 5908)
        }
    }
    return 0
}

stock fm_strip_user_weapons(id)
{
    static 
entent engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"player_weaponstrip"))
    if(!
pev_valid(ent)) return 0
    dllfunc
(DLLFunc_Spawnent)
    
dllfunc(DLLFunc_Useentid)
    
engfunc(EngFunc_RemoveEntityent)
    return 
1
}
stock colored_print(idmessage[], any:...)
{
    static 
buffer[190]; vformat(buffercharsmax(buffer), message3)

    if(
id)
    {
        if(
is_user_connected(id) && !is_user_bot(id))
        {
            
message_begin(MSG_ONEg_msg_index[3], _id)
            
write_byte(id)
            
write_string(buffer)
            
message_end()
        }
    }
    else
    {
        static 
i0
        
        
while(++g_maxplayers)
        {
            if(!
is_user_connected(i)) continue
            if(
is_user_bot(i)) continue
            
            
message_begin(MSG_ONEg_msg_index[3], _i)
            
write_byte(i)
            
write_string(buffer)
            
message_end()
        }
    }
}
 
Последний раз редактировалось артист666 15 мар 2021, 20:23, всего редактировалось 1 раз.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Сборник полезных функций

Сообщение RevCrew » 15 мар 2021, 11:30

тэги не работают((
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Сборник полезных функций

Сообщение gamingEx » 15 мар 2021, 11:41

RevCrew,
Код: Выделить всё
#include <amxmodx>  

Вроде все прекрасно
работает
.
:dance2: :dance2: :dance2:
Аватара пользователя
gamingEx
 
Сообщения: 121
Зарегистрирован: 07 окт 2017, 20:48
Благодарил (а): 0 раз.
Поблагодарили: 19 раз.
Опыт программирования: Больше трех лет
Языки программирования: Swift, C++, PHP, Ruby, JS

Re: Сборник полезных функций

Сообщение RevCrew » 15 мар 2021, 19:49

gamingEx, в спойлер тег кода помести мб))
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Сборник полезных функций

Сообщение артист666 » 15 мар 2021, 20:25

Наверное это связано с длиной сообщения.
После отправки второго они склеились, и теги перестали работать. :-)
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Сборник полезных функций

Сообщение [N][E][M][E][C] » 31 дек 2021, 00:33

Fedcomp писал(а):
Код: Выделить всё
stock is_admins_online(){
  for(new i = 0; i < 33; i++)
    if(is_user_admin(i))
      return true
  return false
}

Если оно выглядит глупо, но работает, то это не глупо.

Вроде как есть тут! Можно без подключения amxmisc.inc и убираем лишние проверки
Код: Выделить всё
stock bool:is_admins_online() {                
    new players
[32], count, id, flags; 
    get_players
(players, count);
    
    for
(new i; i < count; ++ i) {
        id = players[i];                                          
                                                    
        flags 
= get_user_flags(id); 
       
        if
(flags && !(flags & ADMIN_USER))
            return true;
    }
    return false;
}
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

Re: Сборник полезных функций

Сообщение sb123 » 08 окт 2022, 13:44

Код: Выделить всё
#include <fakemeta>

// name change.
stock set_user_name(id, name[])
{
   engfunc(EngFunc_SetClientKeyValue, id, engfunc(EngFunc_GetInfoKeyBuffer,id), "name", name)
}
Аватара пользователя
sb123
 
Сообщения: 2
Зарегистрирован: 18 ноя 2021, 19:55
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Языки программирования: Я ничего не знаю

Re: Сборник полезных функций

Сообщение [N][E][M][E][C] » 15 окт 2022, 02:40

Код: Выделить всё
/**                                                                   
 * Установим счёт игрокам.                 
 *
 * @note    rh_set_score(pUser, 3, 4) - установим счёт.
 *          rh_set_score(pUser)       - обнулим. 
 *                        
 * @param frags   - убийства.
 * @param deaths  - смерти.
 *
 * @return  nothing.             
 */                              
                      
stock rh_set_score(const pUser, const frags 0, const deaths 0) {
    
set_entvar(pUservar_fragsfloat(frags));
    
set_member(pUserm_iDeathsdeaths);          
    
    
message_begin(MSG_BROADCASTMSG_SCORE);
    
write_byte(pUser);
    
write_short(frags);
    
write_short(deaths);
    
write_short(0);          
    
write_short(0);
    
message_end();                                         
Последний раз редактировалось [N][E][M][E][C] 24 окт 2022, 16:39, всего редактировалось 3 раз(а).
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

Re: Сборник полезных функций

Сообщение [N][E][M][E][C] » 19 окт 2022, 00:55

Не знаю было или нет, всё же
Код: Выделить всё
/**                                                                   
 * Кикаем игрока по имени или по steam.                 
 *
 * @note    kick_player(0, "Player", "the reason for the kick")                 - по имени.
 *          kick_player(1, "STEAM_0:0:649464366", "the reason for the kick")    - по steam.
 *                                   
 * @param type      - тип кика.
 * @param szBuffer  - tring type.
 * @param szReason  - причина.
 *                                 
 * @return  bool.                                                       
 */
                                    
stock bool:kick_player(const type 0, const  szBuffer[], const szReason[] = "for no reason") {
    new 
pUser;
                    
    switch(
type) {  
        case 
0pUser get_user_index(szBuffer);
                                         
        case 
1: {                         
            new 
players[32], count;
            
get_players(playerscount);                        
                                        
            for(new 
iszSteam[32]; count; ++i) { 
                
get_user_authid(players[i], szSteamcharsmax(szSteam));
                                              
                if(
equal(szBufferszSteam))
                    
pUser players[i];
            }                                                
        }                           
                   
        default: return 
false;
    }
    
    if(
is_user_connected(pUser) && pUser) {             
        
server_cmd("kick #%d %s"get_user_userid(pUser), szReason);
        return 
true;
    }  
               
    return 
false;
}  
Последний раз редактировалось [N][E][M][E][C] 24 окт 2022, 16:49, всего редактировалось 4 раз(а).
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

Re: Сборник полезных функций

Сообщение [N][E][M][E][C] » 19 окт 2022, 17:17

Код: Выделить всё
/**                                                                   
 * Смена карты.                 
 *                   
 * @param sMap      - массив .
 * @param iLen      - размер массива.
 * @param type      - рандом ячейка или нет.
 * @param nMap      - номер ячейки.
 *
 * @return  nothing.             
 */
                              
   
stock bool
: install_random_map(const sMap[][], const iLen, const bool:type = false, nMap = 0) { 
    if
(type) nMap = random(iLen);     
    if
(nMap > iLen) 
        return false
;
                                            
    server_cmd
("changelevel %s", sMap[nMap]);
    return true; 
Способ применения:
Код: Выделить всё
new sMap[][] = {
    "de_dust2_2x2",           
    
"$2000$",                                       
    
"de_nuke"                                                                   
};                                                                              
                                                                                  
install_random_map
(sMap, sizeof(sMap), true);          //сменить на рандомную карту
/*или*/
install_random_map(sMap, sizeof(sMap), .nMap = 2);    //сменит карту на de_nuke
 
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

Пред.След.

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16