AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Multiple weapon pickup fix (https://forums.alliedmods.net/showthread.php?t=106867)

drumzplaya13 10-19-2009 19:50

Multiple weapon pickup fix
 
There is a bug in this plugin, GHW_Chronic hasnt been on for 3 weeks so I thought I would post it here for help with the code. You have to drop your gun first before you pick up another gun, and then you have to throw that gun to pick up your original one and the next one which you have to throw down.

I just want it so when you start playing in the server you can run over all the guns and pick them up, without dropping any at any time during game play to pick others up

Here is the .sma of the code:

Code:

#define VERSION    "2.0"

#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#include <fakemeta>

new blah[33]
new blah2[33]

new const menu1_weapon_names_T[10][32] =
{
    "weapon_glock18", "400",
    "weapon_usp", "500",
    "weapon_p228", "600",
    "weapon_deagle", "650",
    "weapon_elite", "800"
}

new const menu1_weapon_names_CT[10][32] =
{
    "weapon_glock18", "400",
    "weapon_usp", "500",
    "weapon_p228", "600",
    "weapon_deagle", "650",
    "weapon_fiveseven", "750"
}

new const menu2_weapon_names_T[4][32] =
{
    "weapon_m3", "1700",
    "weapon_xm1014", "3000"
}

new const menu2_weapon_names_CT[4][32] =
{
    "weapon_m3", "1700",
    "weapon_xm1014", "3000"
}

new const menu3_weapon_names_T[8][32] =
{
    "weapon_mac10", "1400",
    "weapon_mp5navy", "1500",
    "weapon_ump45", "1700",
    "weapon_p90", "2350"
}

new const menu3_weapon_names_CT[8][32] =
{
    "weapon_tmp", "1250",
    "weapon_mp5navy", "1500",
    "weapon_ump45", "1700",
    "weapon_p90", "2350"
}

new const menu4_weapon_names_T[12][32] =
{
    "weapon_galil", "2000",
    "weapon_ak47", "2500",
    "weapon_scout", "2750",
    "weapon_sg552", "3500",
    "weapon_awp", "4750",
    "weapon_g3sg1", "5000"
}

new const menu4_weapon_names_CT[12][32] =
{
    "weapon_famas", "2250",
    "weapon_scout", "2750",
    "weapon_m4a1", "3100",
    "weapon_aug", "3500",
    "weapon_sg550", "4200",
    "weapon_awp", "4750"
}

new const menu5_weapon_names_T[2][32] =
{
    "weapon_m249", "5750"
}

new const menu5_weapon_names_CT[2][32] =
{
    "weapon_m249", "5750"
}

new const keys = 511

new maxplayers
new bool:justdropped[33]

new primcvar, seccvar

public plugin_init()
{
    register_plugin("CS Pickup Multiple Weapons",VERSION,"GHW_Chronic")

    //Old Style Menus
    register_menucmd(register_menuid("BuyPistol",1),keys,"hook_menu1")
    register_menucmd(register_menuid("BuyShotgun",1),keys,"hook_menu2")
    register_menucmd(register_menuid("BuySub",1),keys,"hook_menu3")
    register_menucmd(register_menuid("BuyRifle",1),keys,"hook_menu4")
    register_menucmd(register_menuid("BuyMachine",1),keys,"hook_menu5")

    //VGUI Menus
    register_menucmd(-29,keys,"hook_menu1")
    register_menucmd(-30,keys,"hook_menu2")
    register_menucmd(-32,keys,"hook_menu3")
    register_menucmd(-31,keys,"hook_menu4")
    register_menucmd(-33,keys,"hook_menu5")

    register_forward(FM_Touch,"FM_Touch_hook")

    register_clcmd("drop","dropped")

    maxplayers = get_maxplayers()

    primcvar = register_cvar("max_primary","3")
    seccvar = register_cvar("max_secnodary","3")
}

public dropped(id)
{
    justdropped[id]=true
    set_task(0.5,"notdropped",id)
}

public notdropped(id) justdropped[id]=false

public hook_menu1(id,key) return hook_menus(1,id,key)
public hook_menu2(id,key) return hook_menus(2,id,key)
public hook_menu3(id,key) return hook_menus(3,id,key)
public hook_menu4(id,key) return hook_menus(4,id,key)
public hook_menu5(id,key) return hook_menus(5,id,key)

public hook_menus(menu,id,key)
{
    //Send Info to the weapon handler function.
    static weapon[32]
    new CsTeams:team = cs_get_user_team(id)
    switch(menu)
    {
        case 1:
        {
            switch(team)
            {
                case CS_TEAM_T: format(weapon,31,menu1_weapon_names_T[key*2])
                case CS_TEAM_CT: format(weapon,31,menu1_weapon_names_CT[key*2])
            }
        }
        case 2:
        {
            switch(team)
            {
                case CS_TEAM_T: format(weapon,31,menu2_weapon_names_T[key*2])
                case CS_TEAM_CT: format(weapon,31,menu2_weapon_names_CT[key*2])
            }
        }
        case 3:
        {
            switch(team)
            {
                case CS_TEAM_T: format(weapon,31,menu3_weapon_names_T[key*2])
                case CS_TEAM_CT: format(weapon,31,menu3_weapon_names_CT[key*2])
            }
        }
        case 4:
        {
            switch(team)
            {
                case CS_TEAM_T: format(weapon,31,menu4_weapon_names_T[key*2])
                case CS_TEAM_CT: format(weapon,31,menu4_weapon_names_CT[key*2])
            }
        }
        case 5:
        {
            switch(team)
            {
                case CS_TEAM_T: format(weapon,31,menu5_weapon_names_T[key*2])
                case CS_TEAM_CT: format(weapon,31,menu5_weapon_names_CT[key*2])
            }
        }
    }

    new price
    switch(menu)
    {
        case 1:
        {
            switch(team)
            {
                case CS_TEAM_T: price = str_to_num(menu1_weapon_names_T[key*2 + 1])
                case CS_TEAM_CT: price = str_to_num(menu1_weapon_names_CT[key*2 + 1])
            }
        }
        case 2:
        {
            switch(team)
            {
                case CS_TEAM_T: price = str_to_num(menu2_weapon_names_T[key*2 + 1])
                case CS_TEAM_CT: price = str_to_num(menu2_weapon_names_CT[key*2 + 1])
            }
        }
        case 3:
        {
            switch(team)
            {
                case CS_TEAM_T: price = str_to_num(menu3_weapon_names_T[key*2 + 1])
                case CS_TEAM_CT: price = str_to_num(menu3_weapon_names_CT[key*2 + 1])
            }
        }
        case 4:
        {
            switch(team)
            {
                case CS_TEAM_T: price = str_to_num(menu4_weapon_names_T[key*2 + 1])
                case CS_TEAM_CT: price = str_to_num(menu4_weapon_names_CT[key*2 + 1])
            }
        }
        case 5:
        {
            switch(team)
            {
                case CS_TEAM_T: price = str_to_num(menu5_weapon_names_T[key*2 + 1])
                case CS_TEAM_CT: price = str_to_num(menu5_weapon_names_CT[key*2 + 1])
            }
        }
    }
    return handle_weapon(id,weapon,price)
}

public handle_weapon(id,weapon[32],price)
{
    //Check for if they already have it & if they have the cash.
    if(cs_user_has_weapon(id,get_weaponid(weapon)))
    {
        client_print(id,print_center,"You already own that weapon.")
        engclient_cmd(id,"menuselect","10")
        return PLUGIN_HANDLED
    }

    if(cs_get_user_money(id)<price)
    {
        client_print(id,print_center,"You have insufficient funds!")
        engclient_cmd(id,"menuselect","10")
        return PLUGIN_HANDLED
    }

    new weaptype = weapon_type(get_weaponid(weapon))
    if(weaptype==1 && count_weaps(id,1)>=get_pcvar_num(primcvar) || weaptype==2 && count_weaps(id,2)>=get_pcvar_num(seccvar))
    {
        client_print(id,print_center,"You cannot carry anymore of that type!")
        engclient_cmd(id,"menuselect","10")
        return PLUGIN_HANDLED
    }

    //Give them their weapon and take their money.
    give_item(id,weapon)
    cs_set_user_money(id,cs_get_user_money(id) - price)

    //Close Menu so CS doesn't handle weapon buy.
    engclient_cmd(id,"menuselect","10")
    return PLUGIN_HANDLED
}

public FM_Touch_hook(weaponbox,id)
{
    if(id && id<=maxplayers && !justdropped[id] && is_user_alive(id) && !is_user_bot(id) && weaponbox>maxplayers && pev_valid(weaponbox))
    {
        static classname[64], trash[4]
        pev(weaponbox,pev_classname,classname,63)
        if(equali(classname,"weaponbox"))
        {
            //Support for most custom models.
            pev(weaponbox,pev_model,classname,63)
            replace(classname,63,"w_"," ")
            replace(classname,63,".mdl","")
            strbreak(classname,trash,3,classname,63)
            format(classname,63,"weapon_%s",classname)

            new ent = engfunc(EngFunc_FindEntityByString,maxplayers,"classname",classname)
            while(ent && pev_valid(ent))
            {
                if(pev(ent,pev_owner)==weaponbox)
                {
                    static weaponid
                    weaponid = get_weaponid(classname)
                    if(!cs_user_has_weapon(id,weaponid))
                    {
                        new weaptype = weapon_type(weaponid)
                        if(weaptype==1 && count_weaps(id,1)>=get_pcvar_num(primcvar) || weaptype==2 && count_weaps(id,2)>=get_pcvar_num(seccvar))
                        {
                            break;
                        }
                        justdropped[id]=true
                        set_task(0.5,"notdropped",id)
                        give_item(id,classname)
                    }

                    static classname2[32]
                    pev(ent,pev_classname,classname2,31)
                    blah2[id]=cs_get_weapon_ammo(ent)

                    if(pev_valid(weaponbox)) engfunc(EngFunc_RemoveEntity,weaponbox)
                    if(pev_valid(ent)) engfunc(EngFunc_RemoveEntity,ent)

                    set_task(0.1,"give_ammo",id,classname2,31)
                    break;
                }
                ent = engfunc(EngFunc_FindEntityByString,ent,"classname",classname)
            }
        }
    }
}

public give_ammo(classname2[32],id)
{
    if(is_user_alive(id))
    {
        static Float:origin[3]
        pev(id,pev_origin,origin)
        new ent = engfunc(EngFunc_FindEntityInSphere,maxplayers,origin,20.0)
        while(ent && pev_valid(ent))
        {
            static classname[32]
            pev(ent,pev_classname,classname,31)
            if(equali(classname,classname2) && pev(ent,pev_owner)==id)
            {
                cs_set_weapon_ammo(ent,blah2[id])
                break;
            }
            ent = engfunc(EngFunc_FindEntityInSphere,ent,origin,20.0)
        }
    }
    blah[id]=0
}

/*
* Types:
* 1 = primary weps
* 2 = secondary weps
*/
public count_weaps(id,type)
{
    if(!is_user_alive(id))
    {
        return PLUGIN_HANDLED
    }
    new num, num2, weapons[32]
    cs_get_user_weapons(id,weapons,num2)
    switch(type)
    {
        case 2:
        {
            for(new i=0;i<num2;i++)
            {
                if(weapons[i]==1 || weapons[i]==10 || weapons[i]==11 || weapons[i]==16 || weapons[i]==26 || weapons[i]==17) num++
            }
        }
        default:
        {
            for(new i=0;i<num2;i++)
            {
                if(weapons[i]==30 || weapons[i]==8 || weapons[i]==12 || weapons[i]==13 || weapons[i]==14 || weapons[i]==15 || weapons[i]==18 || weapons[i]==19 || weapons[i]==20 || weapons[i]==21 || weapons[i]==22 || weapons[i]==23 || weapons[i]==24 || weapons[i]==27 || weapons[i]==28 || weapons[i]==3 || weapons[i]==5 || weapons[i]==7) num++
            }
        }
    }
    return num;
}

public cs_get_user_weapons(id,weapons[32],& num)
{
    num=0
    new ent, origin[3], classname[32], owner
    pev(id,pev_origin,origin)
    ent = engfunc(EngFunc_FindEntityInSphere,get_maxplayers(),origin,1.0)
    while(ent)
    {
        owner = pev(ent,pev_owner)
        if(owner==id)
        {
            pev(ent,pev_classname,classname,31)
            if(containi(classname,"weapon_")==0)
            {
                weapons[num] = get_weaponid(classname)
                num++
            }
        }
        ent = engfunc(EngFunc_FindEntityInSphere,ent,origin,1.0)
    }
    return 1;       
}

/*
* Returns 1 for primary weapon
* and 2 for secondary weapon
*/
public weapon_type(weapid)
{
    if(weapid==1 || weapid==10 || weapid==11 || weapid==16 || weapid==26 || weapid==17) return 2;
    return 1;
}

/*
*
*/
public cs_user_has_weapon(id,weapid)
{
    new ent, origin[3], classname[32], owner, weapname[32]
    get_weaponname(weapid,weapname,31)
    pev(id,pev_origin,origin)
    ent = engfunc(EngFunc_FindEntityInSphere,get_maxplayers(),origin,1.0)
    while(ent)
    {
        owner = pev(ent,pev_owner)
        if(owner==id)
        {
            pev(ent,pev_classname,classname,31)
            if(equali(classname,weapname))
            {
                return 1;
            }
        }
        ent = engfunc(EngFunc_FindEntityInSphere,ent,origin,1.0)
    }
    return 0;
}

/*
*Code for giving BPAmmo
public give_ammo2(params[2],id)
{
    if(pev_valid(params[1]))
    {
        new bpammo
        switch(params[0])
        {
            //case 16: bpammo = get_pdata_int(params[1],43591)
            //case 17: bpammo = get_pdata_int(params[1],5189)
            default: bpammo = 0
        }
        engfunc(EngFunc_RemoveEntity,params[1])
        cs_set_user_bpammo(id,params[0],cs_get_user_bpammo(id,params[0]) + bpammo)
    }
    blah[id]=0
}

*Code for finding offsets. Will need for later.
    for(new i=0;i<=50000;i++) if(get_pdata_int(param[0],i)==24) client_print(0,print_chat,"%d",i)
    client_print(0,print_chat,"%d. %d",5189,get_pdata_int(param[0],5189))
*/


alexclaudiu2003 12-22-2011 12:01

Re: Multiple weapon pickup fix
 
GHW make worst plugins possible !!! use alternative, GHW plugins crash any servere, believe me !

tuty 12-22-2011 12:29

Re: Multiple weapon pickup fix
 
Quote:

Originally Posted by alexclaudiu2003 (Post 1617802)
GHW make worst plugins possible !!! use alternative, GHW plugins crash any servere, believe me !

you wrong.. his code skills are outdated but has good plugins ;)

GwynBleidD 05-15-2012 19:41

Re: Multiple weapon pickup fix
 
Quote:

Originally Posted by alexclaudiu2003 (Post 1617802)
GHW make worst plugins possible !!! use alternative, GHW plugins crash any servere, believe me !

Is there any alternative for this plugin?


All times are GMT -4. The time now is 17:47.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.