Страница 3 от 4

Re: OciXCrom's Custom VIP Extras

Публикувано на: 26 Апр 2017, 16:35
от aBorisoff
Компилирах го локално, а относно сървъра - хоства се под Linux.

Re: OciXCrom's Custom VIP Extras

Публикувано на: 26 Апр 2017, 16:37
от OciXCrom
AMXX версия? Ползваш ли ReHLDS?

Re: OciXCrom's Custom VIP Extras

Публикувано на: 26 Апр 2017, 16:39
от aBorisoff
Amxx - 1.8.2
На ReHLDS.

Re: OciXCrom's Custom VIP Extras

Публикувано на: 26 Апр 2017, 16:47
от OciXCrom
Явно библиотеката за премахване оръжия не работи на ReHLDS. Опитай по този начин (ползвал съм функциите на rehlds):

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <hamsandwich>
#include <reapi>

#define PLUGIN_NAME "VIP Extras"
#define PLUGIN_VERSION "2.2b"
#define PLUGIN_AUTHOR "OciXCrom"

#define MODELS_PATH "models/player"
#define SOUND_MENU "items/gunpickup2.wav"

new flag_vip, flag_skin, wait, maxhealth, maxmoney, menu_enabled, menu_maxuses, menu_spawn
new get_health, get_armor, health_amount, armor_amount, get_deagle, he_amount, flash_amount, smoke_amount, get_transparency, transparency_amount
new get_m4a1, get_ak47, get_awp, get_g3sg1, get_sg550, menu_m4a1, menu_ak47, menu_awp, menu_g3sg1, menu_sg550
new menu_health, menu_armor, menu_deagle, menu_transparency, menu_speed, menu_gravity, menu_moredamage
new get_skin_t, get_skin_ct, skin_name_t, skin_name_ct, get_speed, speed_amount, get_gravity, gravity_amount, get_moredamage, moredamage_multiplier
new killbonus_health_normal, killbonus_health_headshot, killbonus_money_normal, killbonus_money_headshot
new skin_t[32], skin_ct[32], menu_uses[33]
new bool:user_moredamage[33]

new bool:skin_t_active
new bool:skin_ct_active

new const szPrefix[] = "^4[^3VIP Extras^4]"

enum Color
{
    NORMAL = 1, // clients scr_concolor cvar color
    GREEN, // Green Color
    TEAM_COLOR, // Red, grey, blue
    GREY, // grey
    RED, // Red
    BLUE, // Blue
}

new TeamNames[][] = 
{
    "",
    "TERRORIST",
    "CT",
    "SPECTATOR"
}

public plugin_init()
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
    register_cvar("CustomVIPExtras", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
    
    RegisterHam(Ham_Spawn, "player", "player_spawn", 1)
    RegisterHam(Ham_TakeDamage, "player", "player_damage")
    register_event("DeathMsg", "player_killed", "a")
    register_event("CurWeapon", "change_weapon", "be", "1=1")
    
    register_clcmd("say /vm", "vip_menu")
    register_clcmd("say_team /vm", "vip_menu")
    register_clcmd("say /vipmenu", "vip_menu")
    register_clcmd("say_team /vipmenu", "vip_menu")
    
    wait = register_cvar("ve_wait", "0.5")
    flag_vip = register_cvar("ve_vipflag", "o")
    flag_skin = register_cvar("ve_skinflag", "b")
    menu_enabled = register_cvar("ve_menu_enabled", "0")
    menu_maxuses = register_cvar("ve_menu_maxuses", "1")
    menu_spawn = register_cvar("ve_menu_spawn", "1")
    
    get_health = register_cvar("ve_get_health", "1")
    get_armor = register_cvar("ve_get_armor", "1")
    get_deagle = register_cvar("ve_get_deagle", "1")
    get_transparency = register_cvar("ve_get_transparency", "0")
    get_speed = register_cvar("ve_get_speed", "0")
    get_gravity = register_cvar("ve_get_gravity", "0")
    get_m4a1 = register_cvar("ve_get_m4a1", "0")
    get_ak47 = register_cvar("ve_get_ak47", "0")
    get_awp = register_cvar("ve_get_awp", "0")
    get_g3sg1 = register_cvar("ve_get_g3sg1", "0")
    get_sg550 = register_cvar("ve_get_sg550", "0")
    get_moredamage = register_cvar("ve_get_moredamage", "0")
    
    menu_health = register_cvar("ve_menu_health", "1")
    menu_armor = register_cvar("ve_menu_armor", "1")
    menu_deagle = register_cvar("ve_menu_deagle", "1")
    menu_transparency = register_cvar("ve_menu_transparency", "1")
    menu_speed = register_cvar("ve_menu_speed", "1")
    menu_gravity = register_cvar("ve_menu_gravity", "1")
    menu_m4a1 = register_cvar("ve_menu_m4a1", "1")
    menu_ak47 = register_cvar("ve_menu_ak47", "1")
    menu_awp = register_cvar("ve_menu_awp", "1")
    menu_g3sg1 = register_cvar("ve_menu_g3sg1", "1")
    menu_sg550 = register_cvar("ve_menu_sg550", "1")
    menu_moredamage = register_cvar("ve_menu_moredamage", "1")
    
    health_amount = register_cvar("ve_health_amount", "150")
    armor_amount = register_cvar("ve_armor_amount", "100")
    he_amount = register_cvar("ve_he_amount", "1")
    flash_amount = register_cvar("ve_flash_amount", "2")
    smoke_amount = register_cvar("ve_smoke_amount", "1")
    transparency_amount = register_cvar("ve_transparency_amount", "75")
    speed_amount = register_cvar("ve_speed_amount", "300.0")
    gravity_amount = register_cvar("ve_gravity_amount", "0.5")
    moredamage_multiplier = register_cvar("ve_moredamage_multiplier", "2")
    
    killbonus_health_normal = register_cvar("ve_killbonus_health_normal", "5")
    killbonus_health_headshot = register_cvar("ve_killbonus_health_headshot", "10")
    killbonus_money_normal = register_cvar("ve_killbonus_money_normal", "300")
    killbonus_money_headshot = register_cvar("ve_killbonus_money_headshot", "500")
    maxhealth = register_cvar("ve_max_health", "200")
    maxmoney = register_cvar("ve_max_money", "16000")
}

public change_weapon(id)
    if(user_has_flag(id, flag_vip) && get_pcvar_num(get_speed) == 1) set_user_maxspeed(id, get_pcvar_float(speed_amount))

public player_spawn(id)
{
    if(is_user_alive(id))
    {
        menu_uses[id] = 0
        user_moredamage[id] = false
        cs_reset_user_model(id)
        set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
        
        if(get_pcvar_num(menu_enabled) > 0 && get_pcvar_num(menu_spawn) == 1)
            vip_menu(id)
    }
    
    set_task(get_pcvar_float(wait), "vip_set", id)
}

public vip_set(id)
{
    if(!is_user_alive(id))
        return
    
    if(user_has_flag(id, flag_skin))
    {
        switch(get_user_team(id))
        {
            case 1: if(skin_t_active) cs_set_user_model(id, skin_t)
            case 2: if(skin_ct_active) cs_set_user_model(id, skin_ct)
        }
    }
    
    if(get_pcvar_num(menu_enabled) == 1)
        return
    
    if(user_has_flag(id, flag_vip))
    {
        if(get_pcvar_num(get_health) == 1)
            vip_equip(id, 0)
            
        if(get_pcvar_num(get_armor) == 1)
            vip_equip(id, 1)
        
        if(get_pcvar_num(get_deagle) == 1)
            vip_equip(id, 2)
            
        new he = get_pcvar_num(he_amount)
        new flash = get_pcvar_num(flash_amount)
        new smoke = get_pcvar_num(smoke_amount)
        
        if(he > 0)
            vip_equip(id, 3)
            
        if(flash > 0)
            vip_equip(id, 4)
        
        if(smoke > 0)
            vip_equip(id, 5)
        
        if(get_pcvar_num(get_transparency) == 1)
            vip_equip(id, 6)
        
        if(get_pcvar_num(get_speed) == 1)
            vip_equip(id, 7)
            
        if(get_pcvar_num(get_gravity) == 1)
            vip_equip(id, 8)
        
        if(get_pcvar_num(get_m4a1) == 1)
            vip_equip(id, 9)
        
        if(get_pcvar_num(get_ak47) == 1)
            vip_equip(id, 10)
            
        if(get_pcvar_num(get_awp) == 1)
            vip_equip(id, 11)
            
        if(get_pcvar_num(get_g3sg1) == 1)
            vip_equip(id, 12)
        
        if(get_pcvar_num(get_sg550) == 1)
            vip_equip(id, 13)
        
        if(get_pcvar_num(get_moredamage) == 1)
            vip_equip(id, 14)
    }
}

public vip_equip(id, item)
{
    switch(item)
    {
        case 0: set_user_health(id, get_pcvar_num(health_amount))
        case 1: set_user_armor(id, get_pcvar_num(armor_amount))
        case 2:
        {
            rg_remove_items_by_slot(id, PISTOL_SLOT)
            give_item(id, "weapon_deagle")
            cs_set_user_bpammo(id, CSW_DEAGLE, 35)
        }
        case 3:
        {
            give_item(id, "weapon_hegrenade")
            cs_set_user_bpammo(id, CSW_HEGRENADE, get_pcvar_num(he_amount))
        }
        case 4:
        {
            give_item(id, "weapon_flashbang")
            cs_set_user_bpammo(id, CSW_FLASHBANG, get_pcvar_num(flash_amount))
        }
        case 5:
        {
            give_item(id, "weapon_smokegrenade")
            cs_set_user_bpammo(id, CSW_SMOKEGRENADE, get_pcvar_num(smoke_amount))
        }
        case 6: set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, get_pcvar_num(transparency_amount))
        case 7: set_user_maxspeed(id, get_pcvar_float(speed_amount))
        case 8: set_user_gravity(id, get_pcvar_float(gravity_amount))
        case 9:
        {
            rg_remove_items_by_slot(id, PRIMARY_WEAPON_SLOT)
            give_item(id, "weapon_m4a1")
            cs_set_user_bpammo(id, CSW_M4A1, 90)
        }
        case 10:
        {
            rg_remove_items_by_slot(id, PRIMARY_WEAPON_SLOT)
            give_item(id, "weapon_ak47")
            cs_set_user_bpammo(id, CSW_AK47, 90)
        }
        case 11:
        {
            rg_remove_items_by_slot(id, PRIMARY_WEAPON_SLOT)
            give_item(id, "weapon_awp")
            cs_set_user_bpammo(id, CSW_AWP, 30)
        }
        case 12:
        {
            rg_remove_items_by_slot(id, PRIMARY_WEAPON_SLOT)
            give_item(id, "weapon_g3sg1")
            cs_set_user_bpammo(id, CSW_G3SG1, 90)
        }
        case 13:
        {
            rg_remove_items_by_slot(id, PRIMARY_WEAPON_SLOT)
            give_item(id, "weapon_sg550")
            cs_set_user_bpammo(id, CSW_SG550, 90)
        }
        case 14:
            user_moredamage[id] = true
    }
}

public vip_menu(id)
{
    if(get_pcvar_num(menu_enabled) == 0)
    {
        ColorChat(id, TEAM_COLOR, "%s ^1The ^4VIP Menu ^1is currently ^3disabled^1.", szPrefix)
        return PLUGIN_HANDLED
    }
    
    if(!user_has_flag(id, flag_vip))
    {
        ColorChat(id, TEAM_COLOR, "%s ^1You have ^3no access ^1to this command.", szPrefix)
        return PLUGIN_HANDLED
    }
    
    if(!is_user_alive(id))
    {
        ColorChat(id, TEAM_COLOR, "%s ^1You need to be ^3alive^1!", szPrefix)
        return PLUGIN_HANDLED
    }
    
    if(menu_uses[id] == get_pcvar_num(menu_maxuses))
    {
        ColorChat(id, TEAM_COLOR, "%s ^1You can use the menu only ^4%i ^1time(s).", szPrefix, get_pcvar_num(menu_maxuses))
        return PLUGIN_HANDLED
    }
    
    new title[100], item[50]
    formatex(title, charsmax(title), "\yOciXCrom's \rCustom VIP Extras\d")
    
    new vipmenu = menu_create(title, "vipmenu_handler")
    
    if(get_pcvar_num(menu_health) == 1)
    {
        formatex(item, charsmax(item), "Health Points \y(+%i)", get_pcvar_num(health_amount))
        menu_additem(vipmenu, item, "0", 0)
    }
    
    if(get_pcvar_num(menu_armor) == 1)
    {
        formatex(item, charsmax(item), "Armor Points \y(+%i)", get_pcvar_num(armor_amount))
        menu_additem(vipmenu, item, "1", 0)
    }
    
    if(get_pcvar_num(menu_deagle) == 1)
    {
        formatex(item, charsmax(item), "Deagle \y(Full Ammo)")
        menu_additem(vipmenu, item, "2", 0)
    }
    
    if(get_pcvar_num(he_amount) > 0)
    {
        formatex(item, charsmax(item), "He Grenade \y(%ix)", get_pcvar_num(he_amount))
        menu_additem(vipmenu, item, "3", 0)
    }
    
    if(get_pcvar_num(flash_amount) > 0)
    {
        formatex(item, charsmax(item), "Flash Grenade \y(%ix)", get_pcvar_num(flash_amount))
        menu_additem(vipmenu, item, "4", 0)
    }
    
    if(get_pcvar_num(smoke_amount) > 0)
    {
        formatex(item, charsmax(item), "Smoke Grenade \y(%ix)", get_pcvar_num(smoke_amount))
        menu_additem(vipmenu, item, "5", 0)
    }
    
    if(get_pcvar_num(menu_transparency) == 1)
    {
        formatex(item, charsmax(item), "Transparency \y(%i%)", get_pcvar_num(transparency_amount))
        menu_additem(vipmenu, item, "6", 0)
    }
    
    if(get_pcvar_num(menu_speed) == 1)
    {
        formatex(item, charsmax(item), "Faster Speed \y(%i)", get_pcvar_num(speed_amount))
        menu_additem(vipmenu, item, "7", 0)
    }
    
    if(get_pcvar_num(menu_gravity) == 1)
    {
        formatex(item, charsmax(item), "Low Gravity \y(%f)", get_pcvar_float(gravity_amount))
        menu_additem(vipmenu, item, "8", 0)
    }
    
    if(get_pcvar_num(menu_m4a1) == 1)
    {
        formatex(item, charsmax(item), "M4A1 \y(Full Ammo)")
        menu_additem(vipmenu, item, "9", 0)
    }
    
    if(get_pcvar_num(menu_ak47) == 1)
    {
        formatex(item, charsmax(item), "AK47 \y(Full Ammo)")
        menu_additem(vipmenu, item, "10", 0)
    }
    
    if(get_pcvar_num(menu_awp) == 1)
    {
        formatex(item, charsmax(item), "AWP \y(Sniper)")
        menu_additem(vipmenu, item, "11", 0)
    }
    
    if(get_pcvar_num(menu_g3sg1) == 1)
    {
        formatex(item, charsmax(item), "G3SG1 \y(Automatic Sniper)")
        menu_additem(vipmenu, item, "12", 0)
    }
    
    if(get_pcvar_num(menu_sg550) == 1)
    {
        formatex(item, charsmax(item), "SG550 \y(Automatic Sniper)")
        menu_additem(vipmenu, item, "13", 0)
    }
    
    if(get_pcvar_num(menu_moredamage) == 1)
    {
        formatex(item, charsmax(item), "More Damage \y(%ix)", get_pcvar_num(moredamage_multiplier))
        menu_additem(vipmenu, item, "14", 0)
    }
    
    menu_setprop(vipmenu, MPROP_EXITNAME, "\rClose the Menu")
    menu_setprop(vipmenu, MPROP_BACKNAME, "\rGo to the \yPrevious \rPage")
    menu_setprop(vipmenu, MPROP_NEXTNAME, "\rGo to the \yNext \rPage")
    menu_setprop(vipmenu, MPROP_EXIT, MEXIT_ALL)
    
    menu_display(id, vipmenu, 0)
    return PLUGIN_HANDLED
}

public vipmenu_handler(id, vipmenu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(vipmenu)
        return PLUGIN_HANDLED
    }
    
    new data[6], iName[64], access, callback
    menu_item_getinfo(vipmenu, item, access, data, charsmax(data), iName, charsmax(iName), callback)

    new key = str_to_num(data)
    vip_equip(id, key)
    menu_uses[id]++
    
    ColorChat(id, TEAM_COLOR, "%s ^1You have successfully used the ^3VIP Menu^1 (^4%i^1/^4%i^1)", szPrefix, menu_uses[id], get_pcvar_num(menu_maxuses))
    emit_sound(id, CHAN_ITEM, SOUND_MENU, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    
    menu_destroy(vipmenu)
    return PLUGIN_HANDLED
}

public player_killed()
{
    new attacker = read_data(1)
    new victim = read_data(2)
    
    if(!is_user_connected(attacker) || !is_user_connected(victim) || attacker == victim || !user_has_flag(attacker, flag_vip))
        return
    
    new headshot = read_data(3)
    
    new health = get_user_health(attacker)
    new money = cs_get_user_money(attacker)
    
    new reward_health = headshot ? get_pcvar_num(killbonus_health_headshot) : get_pcvar_num(killbonus_health_normal)
    new reward_money = headshot ? get_pcvar_num(killbonus_money_headshot) : get_pcvar_num(killbonus_money_normal)
    
    new health_max = get_pcvar_num(maxhealth)
    new money_max = get_pcvar_num(maxmoney)
    
    set_user_health(attacker, health + reward_health)
    cs_set_user_money(attacker, money + reward_money)
    
    if(get_user_health(attacker) > health_max) set_user_health(attacker, health_max)
    if(cs_get_user_money(attacker) > money_max) cs_set_user_money(attacker, money_max)
}

public player_damage(victim, inflictor, attacker, Float:damage, damage_bits)
{
    if(is_user_connected(attacker))
        if(user_moredamage[attacker] && attacker != victim)
            SetHamParamFloat(4, damage * get_pcvar_float(moredamage_multiplier))
}

public plugin_precache()
{
    get_skin_t = register_cvar("ve_get_skin_t", "0")
    get_skin_ct = register_cvar("ve_get_skin_ct", "0")
    
    skin_name_t = register_cvar("ve_skin_name_t", "vip")
    skin_name_ct = register_cvar("ve_skin_name_ct", "smith")

    skin_t_active = (get_pcvar_num(get_skin_t) == 1) ? true : false
    skin_ct_active = (get_pcvar_num(get_skin_ct) == 1) ? true : false
    
    if(skin_t_active)
    {
        new skin1[50]
        get_pcvar_string(skin_name_t, skin_t, charsmax(skin_t))
        formatex(skin1, charsmax(skin1), "%s/%s/%s.mdl", MODELS_PATH, skin_t, skin_t)
        precache_model(skin1)
    }
    
    if(skin_ct_active)
    {
        new skin2[50]
        get_pcvar_string(skin_name_ct, skin_ct, charsmax(skin_ct))
        formatex(skin2, charsmax(skin2), "%s/%s/%s.mdl", MODELS_PATH, skin_ct, skin_ct)
        precache_model(skin2)
    }
    
    precache_sound(SOUND_MENU)
}

stock user_has_flag(id, cvar)
{
    new flags[32]
    get_flags(get_user_flags(id), flags, charsmax(flags))
    
    new vip_flag[2]
    get_pcvar_string(cvar, vip_flag, charsmax(vip_flag))
    
    return (contain(flags, vip_flag) != -1) ? true : false
}

/* ======================================================================================================= */
/* ColorChat */
/* ======================================================================================================= */
ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...)
{
    if( !get_playersnum() ) return;
    
    new message[256];

    switch(type)
    {
        case NORMAL: // clients scr_concolor cvar color
        {
            message[0] = 0x01;
        }
        case GREEN: // Green
        {
            message[0] = 0x04;
        }
        default: // White, Red, Blue
        {
            message[0] = 0x03;
        }
    }

    vformat(message[1], 251, msg, 4);

    replace_all(message, 191, "!n", "^x01")
    replace_all(message, 191, "!t", "^x03")
    replace_all(message, 191, "!g", "^x04")
    
    // Make sure message is not longer than 192 character. Will crash the server.
    message[192] = '^0';

    new team, ColorChange, index, MSG_Type;
    
    if(id)
    {
        MSG_Type = MSG_ONE;
        index = id;
    } else {
        index = FindPlayer();
        MSG_Type = MSG_ALL;
    }
    
    team = get_user_team(index);
    ColorChange = ColorSelection(index, MSG_Type, type);

    ShowColorMessage(index, MSG_Type, message);
        
    if(ColorChange)
    {
        Team_Info(index, MSG_Type, TeamNames[team]);
    }
}

ShowColorMessage(id, type, message[])
{
    static bool:saytext_used;
    static get_user_msgid_saytext;
    if(!saytext_used)
    {
        get_user_msgid_saytext = get_user_msgid("SayText");
        saytext_used = true;
    }
    message_begin(type, get_user_msgid_saytext, _, id);
    write_byte(id)        
    write_string(message);
    message_end();    
}

Team_Info(id, type, team[])
{
    static bool:teaminfo_used;
    static get_user_msgid_teaminfo;
    if(!teaminfo_used)
    {
        get_user_msgid_teaminfo = get_user_msgid("TeamInfo");
        teaminfo_used = true;
    }
    message_begin(type, get_user_msgid_teaminfo, _, id);
    write_byte(id);
    write_string(team);
    message_end();

    return 1;
}

ColorSelection(index, type, Color:Type)
{
    switch(Type)
    {
        case RED:
        {
            return Team_Info(index, type, TeamNames[1]);
        }
        case BLUE:
        {
            return Team_Info(index, type, TeamNames[2]);
        }
        case GREY:
        {
            return Team_Info(index, type, TeamNames[0]);
        }
    }

    return 0;
}

FindPlayer()
{
    new i = -1;

    while(i <= get_maxplayers())
    {
        if(is_user_connected(++i))
            return i;
    }

    return -1;
}

Re: OciXCrom's Custom VIP Extras

Публикувано на: 26 Апр 2017, 17:01
от aBorisoff
Сега не може да се избират оръжия... смисъл не ги дава :d

Re: OciXCrom's Custom VIP Extras

Публикувано на: 26 Апр 2017, 17:13
от OciXCrom
Има ли някакви грешки в конзолата на сървъра? Не мога да тествам, тъй като нямам изтеглено сървър с rehlds.

Re: OciXCrom's Custom VIP Extras

Публикувано на: 26 Апр 2017, 17:16
от aBorisoff
(native "rg_remove_items_by_slot") - debug not enabled!

дори и при пуснат debug е същото :D

Re: OciXCrom's Custom VIP Extras

Публикувано на: 26 Апр 2017, 17:20
от OciXCrom
При пуснат debug трябва да покаже какъв е проблемът. Сега видях обаче, че е имало функция, която автоматично замества оръжието в слота, тъй че опитай пак:

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <hamsandwich>
#include <reapi>

#define PLUGIN_NAME "VIP Extras"
#define PLUGIN_VERSION "2.2b"
#define PLUGIN_AUTHOR "OciXCrom"

#define MODELS_PATH "models/player"
#define SOUND_MENU "items/gunpickup2.wav"

new flag_vip, flag_skin, wait, maxhealth, maxmoney, menu_enabled, menu_maxuses, menu_spawn
new get_health, get_armor, health_amount, armor_amount, get_deagle, he_amount, flash_amount, smoke_amount, get_transparency, transparency_amount
new get_m4a1, get_ak47, get_awp, get_g3sg1, get_sg550, menu_m4a1, menu_ak47, menu_awp, menu_g3sg1, menu_sg550
new menu_health, menu_armor, menu_deagle, menu_transparency, menu_speed, menu_gravity, menu_moredamage
new get_skin_t, get_skin_ct, skin_name_t, skin_name_ct, get_speed, speed_amount, get_gravity, gravity_amount, get_moredamage, moredamage_multiplier
new killbonus_health_normal, killbonus_health_headshot, killbonus_money_normal, killbonus_money_headshot
new skin_t[32], skin_ct[32], menu_uses[33]
new bool:user_moredamage[33]

new bool:skin_t_active
new bool:skin_ct_active

new const szPrefix[] = "^4[^3VIP Extras^4]"

enum Color
{
    NORMAL = 1, // clients scr_concolor cvar color
    GREEN, // Green Color
    TEAM_COLOR, // Red, grey, blue
    GREY, // grey
    RED, // Red
    BLUE, // Blue
}

new TeamNames[][] = 
{
    "",
    "TERRORIST",
    "CT",
    "SPECTATOR"
}

public plugin_init()
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
    register_cvar("CustomVIPExtras", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
    
    RegisterHam(Ham_Spawn, "player", "player_spawn", 1)
    RegisterHam(Ham_TakeDamage, "player", "player_damage")
    register_event("DeathMsg", "player_killed", "a")
    register_event("CurWeapon", "change_weapon", "be", "1=1")
    
    register_clcmd("say /vm", "vip_menu")
    register_clcmd("say_team /vm", "vip_menu")
    register_clcmd("say /vipmenu", "vip_menu")
    register_clcmd("say_team /vipmenu", "vip_menu")
    
    wait = register_cvar("ve_wait", "0.5")
    flag_vip = register_cvar("ve_vipflag", "o")
    flag_skin = register_cvar("ve_skinflag", "b")
    menu_enabled = register_cvar("ve_menu_enabled", "0")
    menu_maxuses = register_cvar("ve_menu_maxuses", "1")
    menu_spawn = register_cvar("ve_menu_spawn", "1")
    
    get_health = register_cvar("ve_get_health", "1")
    get_armor = register_cvar("ve_get_armor", "1")
    get_deagle = register_cvar("ve_get_deagle", "1")
    get_transparency = register_cvar("ve_get_transparency", "0")
    get_speed = register_cvar("ve_get_speed", "0")
    get_gravity = register_cvar("ve_get_gravity", "0")
    get_m4a1 = register_cvar("ve_get_m4a1", "0")
    get_ak47 = register_cvar("ve_get_ak47", "0")
    get_awp = register_cvar("ve_get_awp", "0")
    get_g3sg1 = register_cvar("ve_get_g3sg1", "0")
    get_sg550 = register_cvar("ve_get_sg550", "0")
    get_moredamage = register_cvar("ve_get_moredamage", "0")
    
    menu_health = register_cvar("ve_menu_health", "1")
    menu_armor = register_cvar("ve_menu_armor", "1")
    menu_deagle = register_cvar("ve_menu_deagle", "1")
    menu_transparency = register_cvar("ve_menu_transparency", "1")
    menu_speed = register_cvar("ve_menu_speed", "1")
    menu_gravity = register_cvar("ve_menu_gravity", "1")
    menu_m4a1 = register_cvar("ve_menu_m4a1", "1")
    menu_ak47 = register_cvar("ve_menu_ak47", "1")
    menu_awp = register_cvar("ve_menu_awp", "1")
    menu_g3sg1 = register_cvar("ve_menu_g3sg1", "1")
    menu_sg550 = register_cvar("ve_menu_sg550", "1")
    menu_moredamage = register_cvar("ve_menu_moredamage", "1")
    
    health_amount = register_cvar("ve_health_amount", "150")
    armor_amount = register_cvar("ve_armor_amount", "100")
    he_amount = register_cvar("ve_he_amount", "1")
    flash_amount = register_cvar("ve_flash_amount", "2")
    smoke_amount = register_cvar("ve_smoke_amount", "1")
    transparency_amount = register_cvar("ve_transparency_amount", "75")
    speed_amount = register_cvar("ve_speed_amount", "300.0")
    gravity_amount = register_cvar("ve_gravity_amount", "0.5")
    moredamage_multiplier = register_cvar("ve_moredamage_multiplier", "2")
    
    killbonus_health_normal = register_cvar("ve_killbonus_health_normal", "5")
    killbonus_health_headshot = register_cvar("ve_killbonus_health_headshot", "10")
    killbonus_money_normal = register_cvar("ve_killbonus_money_normal", "300")
    killbonus_money_headshot = register_cvar("ve_killbonus_money_headshot", "500")
    maxhealth = register_cvar("ve_max_health", "200")
    maxmoney = register_cvar("ve_max_money", "16000")
}

public change_weapon(id)
    if(user_has_flag(id, flag_vip) && get_pcvar_num(get_speed) == 1) set_user_maxspeed(id, get_pcvar_float(speed_amount))

public player_spawn(id)
{
    if(is_user_alive(id))
    {
        menu_uses[id] = 0
        user_moredamage[id] = false
        cs_reset_user_model(id)
        set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
        
        if(get_pcvar_num(menu_enabled) > 0 && get_pcvar_num(menu_spawn) == 1)
            vip_menu(id)
    }
    
    set_task(get_pcvar_float(wait), "vip_set", id)
}

public vip_set(id)
{
    if(!is_user_alive(id))
        return
    
    if(user_has_flag(id, flag_skin))
    {
        switch(get_user_team(id))
        {
            case 1: if(skin_t_active) cs_set_user_model(id, skin_t)
            case 2: if(skin_ct_active) cs_set_user_model(id, skin_ct)
        }
    }
    
    if(get_pcvar_num(menu_enabled) == 1)
        return
    
    if(user_has_flag(id, flag_vip))
    {
        if(get_pcvar_num(get_health) == 1)
            vip_equip(id, 0)
            
        if(get_pcvar_num(get_armor) == 1)
            vip_equip(id, 1)
        
        if(get_pcvar_num(get_deagle) == 1)
            vip_equip(id, 2)
            
        new he = get_pcvar_num(he_amount)
        new flash = get_pcvar_num(flash_amount)
        new smoke = get_pcvar_num(smoke_amount)
        
        if(he > 0)
            vip_equip(id, 3)
            
        if(flash > 0)
            vip_equip(id, 4)
        
        if(smoke > 0)
            vip_equip(id, 5)
        
        if(get_pcvar_num(get_transparency) == 1)
            vip_equip(id, 6)
        
        if(get_pcvar_num(get_speed) == 1)
            vip_equip(id, 7)
            
        if(get_pcvar_num(get_gravity) == 1)
            vip_equip(id, 8)
        
        if(get_pcvar_num(get_m4a1) == 1)
            vip_equip(id, 9)
        
        if(get_pcvar_num(get_ak47) == 1)
            vip_equip(id, 10)
            
        if(get_pcvar_num(get_awp) == 1)
            vip_equip(id, 11)
            
        if(get_pcvar_num(get_g3sg1) == 1)
            vip_equip(id, 12)
        
        if(get_pcvar_num(get_sg550) == 1)
            vip_equip(id, 13)
        
        if(get_pcvar_num(get_moredamage) == 1)
            vip_equip(id, 14)
    }
}

public vip_equip(id, item)
{
    switch(item)
    {
        case 0: set_user_health(id, get_pcvar_num(health_amount))
        case 1: set_user_armor(id, get_pcvar_num(armor_amount))
        case 2:
        {
            rg_give_item(id, "weapon_deagle", GT_REPLACE)
            cs_set_user_bpammo(id, CSW_DEAGLE, 35)
        }
        case 3:
        {
            rg_give_item(id, "weapon_hegrenade")
            cs_set_user_bpammo(id, CSW_HEGRENADE, get_pcvar_num(he_amount))
        }
        case 4:
        {
            rg_give_item(id, "weapon_flashbang")
            cs_set_user_bpammo(id, CSW_FLASHBANG, get_pcvar_num(flash_amount))
        }
        case 5:
        {
            rg_give_item(id, "weapon_smokegrenade")
            cs_set_user_bpammo(id, CSW_SMOKEGRENADE, get_pcvar_num(smoke_amount))
        }
        case 6: set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, get_pcvar_num(transparency_amount))
        case 7: set_user_maxspeed(id, get_pcvar_float(speed_amount))
        case 8: set_user_gravity(id, get_pcvar_float(gravity_amount))
        case 9:
        {
            rg_give_item(id, "weapon_m4a1", GT_REPLACE)
            cs_set_user_bpammo(id, CSW_M4A1, 90)
        }
        case 10:
        {
            rg_give_item(id, "weapon_ak47", GT_REPLACE)
            cs_set_user_bpammo(id, CSW_AK47, 90)
        }
        case 11:
        {
            rg_give_item(id, "weapon_awp", GT_REPLACE)
            cs_set_user_bpammo(id, CSW_AWP, 30)
        }
        case 12:
        {
            rg_give_item(id, "weapon_g3sg1", GT_REPLACE)
            cs_set_user_bpammo(id, CSW_G3SG1, 90)
        }
        case 13:
        {
            rg_give_item(id, "weapon_sg550", GT_REPLACE)
            cs_set_user_bpammo(id, CSW_SG550, 90)
        }
        case 14:
            user_moredamage[id] = true
    }
}

public vip_menu(id)
{
    if(get_pcvar_num(menu_enabled) == 0)
    {
        ColorChat(id, TEAM_COLOR, "%s ^1The ^4VIP Menu ^1is currently ^3disabled^1.", szPrefix)
        return PLUGIN_HANDLED
    }
    
    if(!user_has_flag(id, flag_vip))
    {
        ColorChat(id, TEAM_COLOR, "%s ^1You have ^3no access ^1to this command.", szPrefix)
        return PLUGIN_HANDLED
    }
    
    if(!is_user_alive(id))
    {
        ColorChat(id, TEAM_COLOR, "%s ^1You need to be ^3alive^1!", szPrefix)
        return PLUGIN_HANDLED
    }
    
    if(menu_uses[id] == get_pcvar_num(menu_maxuses))
    {
        ColorChat(id, TEAM_COLOR, "%s ^1You can use the menu only ^4%i ^1time(s).", szPrefix, get_pcvar_num(menu_maxuses))
        return PLUGIN_HANDLED
    }
    
    new title[100], item[50]
    formatex(title, charsmax(title), "\yOciXCrom's \rCustom VIP Extras\d")
    
    new vipmenu = menu_create(title, "vipmenu_handler")
    
    if(get_pcvar_num(menu_health) == 1)
    {
        formatex(item, charsmax(item), "Health Points \y(+%i)", get_pcvar_num(health_amount))
        menu_additem(vipmenu, item, "0", 0)
    }
    
    if(get_pcvar_num(menu_armor) == 1)
    {
        formatex(item, charsmax(item), "Armor Points \y(+%i)", get_pcvar_num(armor_amount))
        menu_additem(vipmenu, item, "1", 0)
    }
    
    if(get_pcvar_num(menu_deagle) == 1)
    {
        formatex(item, charsmax(item), "Deagle \y(Full Ammo)")
        menu_additem(vipmenu, item, "2", 0)
    }
    
    if(get_pcvar_num(he_amount) > 0)
    {
        formatex(item, charsmax(item), "He Grenade \y(%ix)", get_pcvar_num(he_amount))
        menu_additem(vipmenu, item, "3", 0)
    }
    
    if(get_pcvar_num(flash_amount) > 0)
    {
        formatex(item, charsmax(item), "Flash Grenade \y(%ix)", get_pcvar_num(flash_amount))
        menu_additem(vipmenu, item, "4", 0)
    }
    
    if(get_pcvar_num(smoke_amount) > 0)
    {
        formatex(item, charsmax(item), "Smoke Grenade \y(%ix)", get_pcvar_num(smoke_amount))
        menu_additem(vipmenu, item, "5", 0)
    }
    
    if(get_pcvar_num(menu_transparency) == 1)
    {
        formatex(item, charsmax(item), "Transparency \y(%i%)", get_pcvar_num(transparency_amount))
        menu_additem(vipmenu, item, "6", 0)
    }
    
    if(get_pcvar_num(menu_speed) == 1)
    {
        formatex(item, charsmax(item), "Faster Speed \y(%i)", get_pcvar_num(speed_amount))
        menu_additem(vipmenu, item, "7", 0)
    }
    
    if(get_pcvar_num(menu_gravity) == 1)
    {
        formatex(item, charsmax(item), "Low Gravity \y(%f)", get_pcvar_float(gravity_amount))
        menu_additem(vipmenu, item, "8", 0)
    }
    
    if(get_pcvar_num(menu_m4a1) == 1)
    {
        formatex(item, charsmax(item), "M4A1 \y(Full Ammo)")
        menu_additem(vipmenu, item, "9", 0)
    }
    
    if(get_pcvar_num(menu_ak47) == 1)
    {
        formatex(item, charsmax(item), "AK47 \y(Full Ammo)")
        menu_additem(vipmenu, item, "10", 0)
    }
    
    if(get_pcvar_num(menu_awp) == 1)
    {
        formatex(item, charsmax(item), "AWP \y(Sniper)")
        menu_additem(vipmenu, item, "11", 0)
    }
    
    if(get_pcvar_num(menu_g3sg1) == 1)
    {
        formatex(item, charsmax(item), "G3SG1 \y(Automatic Sniper)")
        menu_additem(vipmenu, item, "12", 0)
    }
    
    if(get_pcvar_num(menu_sg550) == 1)
    {
        formatex(item, charsmax(item), "SG550 \y(Automatic Sniper)")
        menu_additem(vipmenu, item, "13", 0)
    }
    
    if(get_pcvar_num(menu_moredamage) == 1)
    {
        formatex(item, charsmax(item), "More Damage \y(%ix)", get_pcvar_num(moredamage_multiplier))
        menu_additem(vipmenu, item, "14", 0)
    }
    
    menu_setprop(vipmenu, MPROP_EXITNAME, "\rClose the Menu")
    menu_setprop(vipmenu, MPROP_BACKNAME, "\rGo to the \yPrevious \rPage")
    menu_setprop(vipmenu, MPROP_NEXTNAME, "\rGo to the \yNext \rPage")
    menu_setprop(vipmenu, MPROP_EXIT, MEXIT_ALL)
    
    menu_display(id, vipmenu, 0)
    return PLUGIN_HANDLED
}

public vipmenu_handler(id, vipmenu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(vipmenu)
        return PLUGIN_HANDLED
    }
    
    new data[6], iName[64], access, callback
    menu_item_getinfo(vipmenu, item, access, data, charsmax(data), iName, charsmax(iName), callback)

    new key = str_to_num(data)
    vip_equip(id, key)
    menu_uses[id]++
    
    ColorChat(id, TEAM_COLOR, "%s ^1You have successfully used the ^3VIP Menu^1 (^4%i^1/^4%i^1)", szPrefix, menu_uses[id], get_pcvar_num(menu_maxuses))
    emit_sound(id, CHAN_ITEM, SOUND_MENU, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    
    menu_destroy(vipmenu)
    return PLUGIN_HANDLED
}

public player_killed()
{
    new attacker = read_data(1)
    new victim = read_data(2)
    
    if(!is_user_connected(attacker) || !is_user_connected(victim) || attacker == victim || !user_has_flag(attacker, flag_vip))
        return
    
    new headshot = read_data(3)
    
    new health = get_user_health(attacker)
    new money = cs_get_user_money(attacker)
    
    new reward_health = headshot ? get_pcvar_num(killbonus_health_headshot) : get_pcvar_num(killbonus_health_normal)
    new reward_money = headshot ? get_pcvar_num(killbonus_money_headshot) : get_pcvar_num(killbonus_money_normal)
    
    new health_max = get_pcvar_num(maxhealth)
    new money_max = get_pcvar_num(maxmoney)
    
    set_user_health(attacker, health + reward_health)
    cs_set_user_money(attacker, money + reward_money)
    
    if(get_user_health(attacker) > health_max) set_user_health(attacker, health_max)
    if(cs_get_user_money(attacker) > money_max) cs_set_user_money(attacker, money_max)
}

public player_damage(victim, inflictor, attacker, Float:damage, damage_bits)
{
    if(is_user_connected(attacker))
        if(user_moredamage[attacker] && attacker != victim)
            SetHamParamFloat(4, damage * get_pcvar_float(moredamage_multiplier))
}

public plugin_precache()
{
    get_skin_t = register_cvar("ve_get_skin_t", "0")
    get_skin_ct = register_cvar("ve_get_skin_ct", "0")
    
    skin_name_t = register_cvar("ve_skin_name_t", "vip")
    skin_name_ct = register_cvar("ve_skin_name_ct", "smith")

    skin_t_active = (get_pcvar_num(get_skin_t) == 1) ? true : false
    skin_ct_active = (get_pcvar_num(get_skin_ct) == 1) ? true : false
    
    if(skin_t_active)
    {
        new skin1[50]
        get_pcvar_string(skin_name_t, skin_t, charsmax(skin_t))
        formatex(skin1, charsmax(skin1), "%s/%s/%s.mdl", MODELS_PATH, skin_t, skin_t)
        precache_model(skin1)
    }
    
    if(skin_ct_active)
    {
        new skin2[50]
        get_pcvar_string(skin_name_ct, skin_ct, charsmax(skin_ct))
        formatex(skin2, charsmax(skin2), "%s/%s/%s.mdl", MODELS_PATH, skin_ct, skin_ct)
        precache_model(skin2)
    }
    
    precache_sound(SOUND_MENU)
}

stock user_has_flag(id, cvar)
{
    new flags[32]
    get_flags(get_user_flags(id), flags, charsmax(flags))
    
    new vip_flag[2]
    get_pcvar_string(cvar, vip_flag, charsmax(vip_flag))
    
    return (contain(flags, vip_flag) != -1) ? true : false
}

/* ======================================================================================================= */
/* ColorChat */
/* ======================================================================================================= */
ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...)
{
    if( !get_playersnum() ) return;
    
    new message[256];

    switch(type)
    {
        case NORMAL: // clients scr_concolor cvar color
        {
            message[0] = 0x01;
        }
        case GREEN: // Green
        {
            message[0] = 0x04;
        }
        default: // White, Red, Blue
        {
            message[0] = 0x03;
        }
    }

    vformat(message[1], 251, msg, 4);

    replace_all(message, 191, "!n", "^x01")
    replace_all(message, 191, "!t", "^x03")
    replace_all(message, 191, "!g", "^x04")
    
    // Make sure message is not longer than 192 character. Will crash the server.
    message[192] = '^0';

    new team, ColorChange, index, MSG_Type;
    
    if(id)
    {
        MSG_Type = MSG_ONE;
        index = id;
    } else {
        index = FindPlayer();
        MSG_Type = MSG_ALL;
    }
    
    team = get_user_team(index);
    ColorChange = ColorSelection(index, MSG_Type, type);

    ShowColorMessage(index, MSG_Type, message);
        
    if(ColorChange)
    {
        Team_Info(index, MSG_Type, TeamNames[team]);
    }
}

ShowColorMessage(id, type, message[])
{
    static bool:saytext_used;
    static get_user_msgid_saytext;
    if(!saytext_used)
    {
        get_user_msgid_saytext = get_user_msgid("SayText");
        saytext_used = true;
    }
    message_begin(type, get_user_msgid_saytext, _, id);
    write_byte(id)        
    write_string(message);
    message_end();    
}

Team_Info(id, type, team[])
{
    static bool:teaminfo_used;
    static get_user_msgid_teaminfo;
    if(!teaminfo_used)
    {
        get_user_msgid_teaminfo = get_user_msgid("TeamInfo");
        teaminfo_used = true;
    }
    message_begin(type, get_user_msgid_teaminfo, _, id);
    write_byte(id);
    write_string(team);
    message_end();

    return 1;
}

ColorSelection(index, type, Color:Type)
{
    switch(Type)
    {
        case RED:
        {
            return Team_Info(index, type, TeamNames[1]);
        }
        case BLUE:
        {
            return Team_Info(index, type, TeamNames[2]);
        }
        case GREY:
        {
            return Team_Info(index, type, TeamNames[0]);
        }
    }

    return 0;
}

FindPlayer()
{
    new i = -1;

    while(i <= get_maxplayers())
    {
        if(is_user_connected(++i))
            return i;
    }

    return -1;
} 
Ако не стане, покажи цялата грешка с активиран debug.

Re: OciXCrom's Custom VIP Extras

Публикувано на: 26 Апр 2017, 17:44
от aBorisoff
Вече работи, благодаря!

Re: OciXCrom's Custom VIP Extras

Публикувано на: 17 Юли 2017, 02:15
от camarossblack
Здравейте,

Имам въпрос относно този плъгин. Някой пробвал ли го е. Има ли въпросния проблем, както при мен. Плъгина си работи идеално, но когато тръгна да сменям моделите на ВИП играчите (слагам нови скинове), както трябва и сменя мапа и сървъра крашва ? Постоянно преглеждам да не допускам аз грешки, но няма. Пробвал съм с доста скинове и с нито един не стана, всеки път крашва.