Jump to content
Sign in to follow this  
floringold

Support tehnic

Recommended Posts

Server :RS.RANGFORT.RO

Nick :FLORIN^GOLD
La ce doriţi ajutor? : Salut am o intrebare cum pot modifica sau sterge aceasta problema ?
unde le gasescin ce plugin ?

Poză cu problema (Nu este obligatoriu) https://imgur.com/a/2L3xPdJ

 

 

Quote

/**
 * csdm_main.sma
 * Allows for Counter-Strike to be played as DeathMatch.
 *
 * CSDM Main - Main plugin to communicate with module
 *
 * (C)2003-2006 David "BAILOPAN" Anderson
 *
 *  Give credit where due.
 *  Share the source - it sets you free
 * http://www.opensource.org/
 * http://www.gnu.org/
 */
 
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <csdm>

new D_PLUGIN[]    = "CSDM Main"
new D_ACCESS    = ADMIN_MAP

#define CSDM_OPTIONS_TOTAL        2

new bool:g_StripWeapons = true
new bool:g_RemoveBomb = true
new g_StayTime
new g_drop_fwd
new g_options[CSDM_OPTIONS_TOTAL]

new g_MainMenu = -1
new g_SettingsMenu = -1
new g_MainSettMenu = -1

// part taken from VEN's noweapondrop plugin
new g_max_clients
new const g_wbox_model[] = "models/w_weaponbox.mdl"
new const g_shield_model[] = "models/w_shield.mdl"


public plugin_natives()
{
    register_native("csdm_main_menu", "native_main_menu")
    register_native("csdm_settings_menu", "native_settings_menu")
    register_native("csdm_set_mainoption", "__csdm_allow_option")
    register_native("csdm_fwd_drop", "__csdm_fwd_drop")
    register_native("csdm_write_cfg", "native_write_cfg")
    register_library("csdm_main")
}

public native_main_menu(id, num)
{
    return g_MainMenu
}

public native_settings_menu(id, num)
{
    return g_SettingsMenu
}

public __csdm_allow_option(id, num)
{
    new option = get_param(1)

    if (option <= 0 || option >= CSDM_OPTIONS_TOTAL)
    {
        log_error(AMX_ERR_NATIVE, "Invalid option number: %d", option)
        return 0
    }
    
    g_options[option] = get_param(2)
    
    return 1
}

public native_write_cfg(id,num)
{
    new section[32], parameter[32], value[16]
    new filename[64]
    new cfgdir[64]
    new id
    get_configsdir(cfgdir, 63)
    format(filename, 63, "%s/csdm.cfg", cfgdir)
    id = get_param(1)
    get_string(2,section,31)
    get_string(3,parameter,31)
    get_string(4,value,15)

    new sect_length = strlen(section) + 1
    new param_length = strlen(parameter) - 1
    new sect[32]
    format(sect,31, "[%s]", section)

    if (file_exists(filename)) 
    {
        new Data[124], len
        new line = 0
        new bool:bFoundSec = false
        new bool:bFoundPar = false
        new bool:bErrorFindSect = true
        new bool:bErrorFindParam = false

        while((line = read_file(filename, line, Data, 123, len) ) != 0 )
        {
            if (strlen(Data) < 2 || Data[0] == ';')
                continue;

            if (Data[0] == '[') // new section found
            {
                if (bFoundSec)
                {
                    bErrorFindParam = true
                    break
                }
                else if (equali(Data, sect, sect_length))
                {
                    bFoundSec = true
                    bErrorFindSect = false
                }
            }
            else if (bFoundSec && equali(Data, parameter, param_length))
            {
                bFoundPar = true
                break
            }
        }

        if ((bFoundPar) && (line > 0))
        {
            new text[32]
            format(text, 31, "%s = %s", parameter, value)
            if (write_file(filename, text, line-1))
                client_print(id, print_chat, "CSDM - configuration saved successfully")
        }
        else if ((!bFoundSec) || (bErrorFindSect))
            client_print(id, print_chat, "CSDM - can't save the configuration - wrong section name")
        else if ((!bFoundPar) || (bErrorFindParam))
            client_print(id, print_chat, "CSDM - can't save the configuration - wrong parameter name")
    }
}


public __csdm_fwd_drop(id, num)
{
/*
    new id = get_param(1)
    new wp = get_param(2)
    new name[32]
    
    get_string(3, name, 31)
    
    return run_drop(id, wp, name)    
*/
}

public csdm_Init(const version[])
{
  if (version[0] == 0)
  {
   set_fail_state("CSDM failed to load.")
   return
  }
  else
   csdm_set_intromsg(0)
}

public csdm_CfgInit()
{    
    csdm_reg_cfg("settings", "read_cfg")
}


public plugin_init()
{
    register_plugin(D_PLUGIN, CSDM_VERSION, "CSDM Team")
    
    register_clcmd("say respawn", "say_respawn")
    register_clcmd("say /respawn", "say_respawn")
    register_concmd("csdm_enable", "csdm_enable", D_ACCESS, "Enables CSDM")
    register_concmd("csdm_disable", "csdm_disable", D_ACCESS, "Disables CSDM")
    register_concmd("csdm_ctrl", "csdm_ctrl", D_ACCESS, "")
    register_concmd("csdm_reload", "csdm_reload", D_ACCESS, "Reloads CSDM Config")
    register_clcmd("csdm_menu", "csdm_menu", ADMIN_MENU, "CSDM Menu")
    register_clcmd("csdm_sett_menu", "csdm_sett_menu", ADMIN_MENU, "CSDM Settings Menu")
    register_clcmd("csdm_main_sett_menu", "csdm_main_sett_menu", ADMIN_MENU, "CSDM Main Settings Menu")

//    register_clcmd("drop", "hook_drop")
    register_forward(FM_SetModel, "forward_set_model")
    register_concmd("csdm_cache", "cacheInfo", ADMIN_MAP, "Shows cache information")
    
    AddMenuItem("CSDM Menu", "csdm_menu", D_ACCESS, D_PLUGIN)
    g_MainMenu = menu_create("CSDM Menu", "use_csdm_menu")
    new callback = menu_makecallback("hook_item_display")

    g_SettingsMenu = menu_create("CSDM Settings Menu", "use_csdm_sett_menu")

    menu_additem(g_MainMenu, "CSDM Enabled/Disabled", "csdm_ctrl", D_ACCESS, callback)
    menu_additem(g_MainMenu, "CSDM Settings", "csdm_sett_menu", D_ACCESS)
    menu_additem(g_MainMenu, "Reload Config", "csdm_reload", D_ACCESS)

    g_MainSettMenu = menu_create("CSDM Main Settings Menu", "use_csdm_mainsett_menu")
    menu_additem(g_SettingsMenu, "CSDM Main Settings", "csdm_main_sett_menu", D_ACCESS)

    new str_callback = menu_makecallback("hook_settings_display")

    if (g_MainSettMenu)
    {
        menu_additem(g_MainSettMenu, "Strip Weapons Enabled/Disabled", "strip_weap_ctrl", D_ACCESS, str_callback)
        menu_additem(g_MainSettMenu, "Removing Bombs Enabled/Disabled", "bomb_rem_ctrl", D_ACCESS, str_callback)
        menu_additem(g_MainSettMenu, "Preset Spawn Mode Enabled/Disabled", "spawn_mode_ctrl", D_ACCESS, str_callback)
        menu_additem(g_MainSettMenu, "Back", "csdm_sett_back", D_ACCESS)
    }
    g_drop_fwd = CreateMultiForward("csdm_HandleDrop", ET_CONTINUE, FP_CELL, FP_CELL, FP_CELL)
    g_options[CSDM_OPTION_SAYRESPAWN] = CSDM_SET_ENABLED

    g_max_clients = global_get(glb_maxClients)
}

public cacheInfo(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED
        
    new ar[6]
    csdm_cache(ar)
    
    console_print(id, "[CSDM] Free tasks: respawn=%d, findweapon=%d", ar[0], ar[5])
    console_print(id, "[CSDM] Weapon removal cache: %d total, %d live", ar[4], ar[3])
    console_print(id, "[CSDM] Live tasks: %d (%d free)", ar[2], ar[1])
    
    return PLUGIN_HANDLED
}

/*
public hook_drop(id)
{
    if (!csdm_active())
    {
        return
    }
    if (is_user_alive(id))
    {
        new name[32]
        get_user_name(id,name,31)
        log_message("[CSDM] csdm_main - drop catched for alive %s", name)
        client_print(0,print_chat,"[CSDM] csdm_main - drop catched for alive %s", name)
    }
    new wp, c, a, name[24]
    if (cs_get_user_shield(id))
    {
        //entirely different...
        wp = -1
        copy(name, 23, "weapon_shield")
    } else {
        if (read_argc() <= 1)
        {
            wp = get_user_weapon(id, c, a)
        } else {
            read_argv(1, name, 23)
            wp = getWepId(name)
        }
    }

    run_drop(id, wp, name)
}
*/

public forward_set_model(ent, const model[]) 
{
    if (!csdm_active())
        return FMRES_IGNORED

    if (!pev_valid(ent) || !equali(model, g_wbox_model) && !equali(model, g_shield_model))
        return FMRES_IGNORED

    new id = pev(ent, pev_owner)

    if (!(1 <= id <= g_max_clients))
        return FMRES_IGNORED

    new args[2]
    args[0] = ent
    args[1] = id
    set_task(0.2, "delay_find_weapon", ent, args, 2)

    return FMRES_IGNORED
}

public delay_find_weapon(args[])
{
    new ent = args[0]
    new id = args[1]

    new class[32]

    if (!pev_valid(ent))
        return

    if (!is_user_connected(id))
        return

    pev(ent, pev_classname, class, sizeof class - 1)

    if (equali(class, "weaponbox"))
        run_drop_wbox(id, ent)
    else if (equali(class, "weapon_shield"))
        run_drop_wbox(id, -1)

}

/*
run_drop(id, wp, const name[])
{
    new ret
    ExecuteForward(g_drop_fwd, ret, id, wp, 0)
    
    if (ret == CSDM_DROP_REMOVE)
    {
        new _name[24]
        if (name[0] == 0)
        {
            get_weaponname(wp, _name, 23)
        }
        csdm_remove_weapon(id, _name, 0, 1)
        return 1
    } else if (ret == CSDM_DROP_IGNORE) {
        return 0
    }

    if ((wp == CSW_C4) && g_RemoveBomb)
    {
        remove_weapon(id, wp)
        return 1
    }

    if (g_StayTime > 20 || g_StayTime < 0)
    {
        return 0
    }
    
    if (wp)
    {
        remove_weapon(id, wp)
        return 1
    }
    
    return 0
}
*/

run_drop_wbox(id, ent)
{
    new ret
    new model[32]
    ExecuteForward(g_drop_fwd, ret, id, ent, 0)
    
    if (ret == CSDM_DROP_REMOVE)
    {
        csdm_remove_weaponbox(id, ent, 0, 1)
        return 1
    } 
    else if (ret == CSDM_DROP_IGNORE) 
    {
        return 0
    }

    if (g_StayTime > 20 || g_StayTime < 0)
    {
        return 0
    }


    if (ent == -1)
    {
        csdm_remove_weapon(id, "weapon_shield", g_StayTime, 1)
        return 1
    }

    if (ent)
    {
        pev(ent, pev_model, model, 31)
        if (((equali(model,"models/w_usp.mdl")) || (equali(model,"models/w_glock18.mdl")))
                && (g_StripWeapons))
            csdm_remove_weaponbox(id, ent, 0, 0)
        else if ((equali(model,"models/w_backpack.mdl")) && (g_RemoveBomb))
            csdm_remove_weaponbox(id, ent, 0, 0)
        else
            csdm_remove_weaponbox(id, ent, g_StayTime, 1)
        return 1
    }
    
    return 0
}

/*
public csdm_PostDeath(killer, victim, headshot, const weapon[])
{
    if (g_StayTime > 20 || g_StayTime < 0)
        return PLUGIN_CONTINUE

    new weapons[MAX_WEAPONS], num, name[24]
    new wp, slot, ret

    get_user_weapons(victim, weapons, num)

    for (new i=0; i<num; i++)
    {
        wp = weapons
        slot = g_WeaponSlots[wp]

        ExecuteForward(g_drop_fwd, ret, victim, wp, 1)

        if (ret == CSDM_DROP_REMOVE)
        {
            get_weaponname(wp, name, 23)
            csdm_remove_weapon(victim, name, 0, 1)
        } else if (ret == CSDM_DROP_IGNORE) {
            continue
        } else {
            if (slot == SLOT_PRIMARY || slot == SLOT_SECONDARY || slot == SLOT_C4)
            {
                remove_weapon(victim, wp)
            }
        }
    }
    
    if (cs_get_user_shield(victim))
    {
        ExecuteForward(g_drop_fwd, ret, victim, -1, 1)
        if (ret == CSDM_DROP_REMOVE)
        {
            csdm_remove_weapon(victim, "weapon_shield", 0, 1)
        } else if (ret == CSDM_DROP_IGNORE) {
            // do nothing
        } else {
            remove_weapon(victim, -1)
        }
    }
    
    return PLUGIN_CONTINUE
}
*/

public csdm_PreSpawn(player, bool:fake)
{
    if (!csdm_active())
    {
        return
    }

    //we'll just have to back out for now
    if (cs_get_user_shield(player))
    {
        return
    }
    new team = get_user_team(player)
    if (g_StripWeapons)
    {
        if (team == _TEAM_T)
        {
            if (cs_get_user_shield(player))
            {
                drop_with_shield(player, CSW_GLOCK18)
            } else {
                csdm_force_drop(player, "weapon_glock18")
            }
        } else if (team == _TEAM_CT) {
            if (cs_get_user_shield(player))
            {
                drop_with_shield(player, CSW_USP)
            } else {
                csdm_force_drop(player, "weapon_usp")
            }
        }
    }
    if (team == _TEAM_T)
    {
        if (g_RemoveBomb)
        {
            new weapons[MAX_WEAPONS], num
            get_user_weapons(player, weapons, num)
            for (new i=0; i<num; i++)
            {
                if (weapons == CSW_C4)
                {
                    if (cs_get_user_shield(player))
                    {
                        drop_with_shield(player, CSW_C4)
                    } else {
                        csdm_force_drop(player, "weapon_c4")
                    }
                    break
                }
            }
        }
    }
}

/*
remove_weapon(id, wp)
{
    new name[24]
    
    if (wp == -1)
    {
        copy(name, 23, "weapon_shield")
    } else {
        get_weaponname(wp, name, 23)
    }

    if (((wp == CSW_C4) && g_RemoveBomb) || ((wp == CSW_GLOCK18) || (wp == CSW_USP)) && g_StripWeapons)
    {    
        csdm_remove_weapon(id, name, 0, 1)
    } else {
        if (wp != CSW_C4)
        {
            csdm_remove_weapon(id, name, g_StayTime, 1)
        }
    }
}
*/

public csdm_main_sett_menu(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED
    
    menu_display(id, g_MainSettMenu, 0)

    return PLUGIN_HANDLED
}


public hook_item_display(player, menu, item)
{
    new paccess, command[24], call
    
    menu_item_getinfo(menu, item, paccess, command, 23, _, 0, call)
    
    if (equali(command, "csdm_ctrl"))
    {
        if (!csdm_active())
        {
            menu_item_setname(menu, item, "CSDM Disabled")
        } else {
            menu_item_setname(menu, item, "CSDM Enabled")
        }
    }
}

public read_cfg(readAction, line[], section[])
{
    if (readAction == CFG_READ)
    {
        new setting[24], sign[3], value[32];

        parse(line, setting, 23, sign, 2, value, 31);
        
        if (equali(setting, "strip_weapons"))
        {
            g_StripWeapons = str_to_num(value) ? true : false
        } else if (equali(setting, "weapons_stay")) {
            g_StayTime = str_to_num(value)
        } else if (equali(setting, "spawnmode")) {
            new var = csdm_setstyle(value)
            if (var)
            {
                log_amx("CSDM spawn mode set to %s", value)
            } else {
                log_amx("CSDM spawn mode %s not found", value)
            }
        } else if (equali(setting, "remove_bomb")) {
            g_RemoveBomb = str_to_num(value) ? true : false
        } else if (equali(setting, "enabled")) {
            csdm_set_active(str_to_num(value))
        } else if (equali(setting, "spawn_wait_time")) {
            csdm_set_spawnwait(str_to_float(value))
        }
    }
}

public csdm_reload(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED
        
    new file[128] = ""
    if (read_argc() >= 2)
    {
        read_argv(1, file, 127)
    }
        
    if (csdm_reload_cfg(file))
    {
        client_print(id, print_chat, "[CSDM] Config file reloaded.")
    } else {
        client_print(id, print_chat, "[CSDM] Unable to find config file.")
    }
        
    return PLUGIN_HANDLED
}

public csdm_menu(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED
    
    menu_display(id, g_MainMenu, 0)
    
    return PLUGIN_HANDLED
}

public csdm_sett_menu(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED
    
    menu_display(id, g_SettingsMenu, 0)

    return PLUGIN_HANDLED
}

public csdm_ctrl(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED
    
    csdm_set_active( csdm_active() ? 0 : 1 )

    client_print(id, print_chat, "CSDM %s.", csdm_active()? "enabled" : "disabled")

    csdm_write_cfg(id, "settings", "enabled", csdm_active() ? "1" : "0")

    client_print(id, print_chat, "CSDM - the map will be reloaded to affect the change of this setting.")
    set_task(3.0, "do_changelevel")
    return PLUGIN_HANDLED
}

public use_csdm_menu(id, menu, item)
{
    if (item < 0)
        return PLUGIN_CONTINUE
    
    new command[24], paccess, call
    if (!menu_item_getinfo(g_MainMenu, item, paccess, command, 23, _, 0, call))
    {
        log_amx("Error: csdm_menu_item() failed (menu %d) (page %d) (item %d)", g_MainMenu, 0, item)
        return PLUGIN_HANDLED
    }
    if (paccess && !(get_user_flags(id) & paccess))
    {
        client_print(id, print_chat, "You do not have access to this menu option.")
        return PLUGIN_HANDLED
    }
    
    client_cmd(id, command)
    
    return PLUGIN_HANDLED
}

public use_csdm_sett_menu(id, menu, item)
{
    if (item < 0)
        return PLUGIN_CONTINUE
    
    new command[24], paccess, call
    if (!menu_item_getinfo(g_SettingsMenu, item, paccess, command, 23, _, 0, call))
    {
        log_amx("Error: csdm_menu_item() failed (menu %d) (page %d) (item %d)", g_SettingsMenu, 0, item)
        return PLUGIN_HANDLED
    }
    if (paccess && !(get_user_flags(id) & paccess))
    {
        client_print(id, print_chat, "You do not have access to this menu option.")
        return PLUGIN_HANDLED
    }

    client_cmd(id, command)

    return PLUGIN_HANDLED
}

public use_csdm_mainsett_menu(id, menu, item)
{
    if (item < 0)
        return PLUGIN_CONTINUE
    
    new command[24], paccess, call
    if (!menu_item_getinfo(g_MainSettMenu, item, paccess, command, 23, _, 0, call))
    {
        log_amx("Error: csdm_menu_item() failed (menu %d) (page %d) (item %d)", g_MainSettMenu, 0, item)
        return PLUGIN_HANDLED
    }
    if (paccess && !(get_user_flags(id) & paccess))
    {
        client_print(id, print_chat, "You do not have access to this menu option.")
        return PLUGIN_HANDLED
    }

    if (equali(command,"strip_weap_ctrl"))
    {
        g_StripWeapons = (g_StripWeapons ? false:true)
        menu_display(id, g_MainSettMenu, 0)
        client_print(id, print_chat, "Strip Weapons %s", g_StripWeapons ? "enabled" : "disabled")
        log_amx("CSDM strip weapons %s", g_StripWeapons ? "enabled" : "disabled")

        csdm_write_cfg(id, "settings", "strip_weapons", g_StripWeapons ? "1" : "0")

        return PLUGIN_HANDLED
    }
    else if (equali(command,"bomb_rem_ctrl"))
    {
        g_RemoveBomb = (g_RemoveBomb ? false:true)
        menu_display(id, g_MainSettMenu, 0)
        client_print(id, print_chat, "Removing Bomb %s", g_RemoveBomb ? "enabled" : "disabled")
        log_amx("CSDM removing bomb %s", g_RemoveBomb ? "enabled" : "disabled")

        csdm_write_cfg(id, "settings", "remove_bomb", g_RemoveBomb ? "1" : "0")

        client_print(id,print_chat,"CSDM - changing this setting will affect the game after changelevel command")
        return PLUGIN_HANDLED
    }
    else if (equali(command,"spawn_mode_ctrl"))
    {
        new style = csdm_curstyle()
        new stylename[24]

        if (style == -1)
            csdm_setstyle("preset")
        else
            csdm_setstyle("none")

        style = csdm_curstyle()

        if (style == -1)
            format(stylename,23,"none")
        else
            format(stylename,23,"preset")

        menu_display(id, g_MainSettMenu, 0)
        client_print(id, print_chat, "Spawn style set to %s", stylename)
        log_amx("CSDM spawn mode set to %s", stylename)

        csdm_write_cfg(id, "settings", "spawnmode", (style == -1) ? "none" : "preset")

        return PLUGIN_HANDLED
    }
    else if (equali(command,"csdm_sett_back"))
    {
        menu_display(id, g_SettingsMenu, 0)
        return PLUGIN_HANDLED
    }
    return PLUGIN_HANDLED
}

public hook_settings_display(player, menu, item)
{
    new paccess, command[24], call
    
    menu_item_getinfo(menu, item, paccess, command, 23, _, 0, call)
    
    if (equali(command, "strip_weap_ctrl"))
    {
        if (!g_StripWeapons)
        {
            menu_item_setname(menu, item, "Strip Weapons Disabled")
        } else {
            menu_item_setname(menu, item, "Strip Weapons Enabled")
        }
    }
    else if (equali(command, "bomb_rem_ctrl"))
    {
        if (!g_RemoveBomb)
        {
            menu_item_setname(menu, item, "Removing Bomb Disabled")
        } else {
            menu_item_setname(menu, item, "Removing Bomb Enabled")
        }
    }
    else if (equali(command,"spawn_mode_ctrl"))
    {
        new style = csdm_curstyle()
        if (style == -1)
            menu_item_setname(menu, item, "Preset Spawn Mode Disabled")
        else
            menu_item_setname(menu, item, "Preset Spawn Mode Enabled")
    }
}

public csdm_enable(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED

    if (!csdm_active())
    {
        csdm_set_active(1)
        client_print(id, print_chat, "CSDM enabled.")
        csdm_write_cfg(id, "settings", "enabled", "1")
        client_print(id, print_chat, "CSDM - the map will be reloaded to affect the change of this setting.")
        set_task(3.0, "do_changelevel")
    }
    return PLUGIN_HANDLED    
}

public csdm_disable(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED

    if (csdm_active())
    {
        csdm_set_active(0)
        client_print(id, print_chat, "CSDM disabled.")
        csdm_write_cfg(id, "settings", "enabled", "0")
        client_print(id, print_chat, "CSDM - the map will be reloaded to affect the change of this setting.")
        set_task(3.0, "do_changelevel")
    }
    return PLUGIN_HANDLED    
}

public say_respawn(id)
{
    if (g_options[CSDM_OPTION_SAYRESPAWN] == CSDM_SET_DISABLED)
    {
        client_print(id, print_chat, "[CSDM] This command is disabled!")
        return PLUGIN_HANDLED
    }
    
    if (!is_user_alive(id) && csdm_active())
    {
        new team = get_user_team(id)
        if (team == _TEAM_T || team == _TEAM_CT)
        {
            csdm_respawn(id)
        }
    }
    
    return PLUGIN_CONTINUE
}

public do_changelevel()
{
    new current_map[32]
    get_mapname(current_map, 31)
    server_cmd("changelevel %s", current_map)
}
 

  PS:PENTRU ANDREY  A SPUS  SA LAS PLUGINUL csdm_main

Share this post


Link to post
Share on other sites

/**
 * csdm_main.sma
 * Allows for Counter-Strike to be played as DeathMatch.
 *
 * CSDM Main - Main plugin to communicate with module
 *
 * (C)2003-2013 David "BAILOPAN" Anderson
 *
 *  Give credit where due.
 *  Share the source - it sets you free
 * http://www.opensource.org/
 * http://www.gnu.org/
 */
 
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <csdm>

new D_PLUGIN[]    = "CSDM Main"
new D_ACCESS    = ADMIN_MAP

#define CSDM_OPTIONS_TOTAL        2

new bool:g_StripWeapons = true
new bool:g_RemoveBomb = true
new g_StayTime
new g_drop_fwd
new g_options[CSDM_OPTIONS_TOTAL]

new g_MainMenu = -1
new g_SettingsMenu = -1
new g_MainSettMenu = -1

// part taken from VEN's noweapondrop plugin
new g_max_clients
new const g_wbox_model[] = "models/w_weaponbox.mdl"
new const g_shield_model[] = "models/w_shield.mdl"


public plugin_natives()
{
    register_native("csdm_main_menu", "native_main_menu")
    register_native("csdm_settings_menu", "native_settings_menu")
    register_native("csdm_set_mainoption", "__csdm_allow_option")
    register_native("csdm_fwd_drop", "__csdm_fwd_drop")
    register_native("csdm_write_cfg", "native_write_cfg")
    register_library("csdm_main")
}

public native_main_menu(id, num)
{
    return g_MainMenu
}

public native_settings_menu(id, num)
{
    return g_SettingsMenu
}

public __csdm_allow_option(id, num)
{
    new option = get_param(1)

    if (option <= 0 || option >= CSDM_OPTIONS_TOTAL)
    {
        log_error(AMX_ERR_NATIVE, "Invalid option number: %d", option)
        return 0
    }
    
    g_options[option] = get_param(2)
    
    return 1
}

public native_write_cfg(id,num)
{
    new section[32], parameter[32], value[16]
    new filename[128]
    new cfgdir[128]
    new id
    get_configsdir(cfgdir, 127)
    format(filename, 127, "%s/csdm.cfg", cfgdir)
    id = get_param(1)
    get_string(2,section,31)
    get_string(3,parameter,31)
    get_string(4,value,15)

    new sect_length = strlen(section) + 1
    new param_length = strlen(parameter) - 1
    new sect[32]
    format(sect,31, "[%s]", section)

    if (file_exists(filename)) 
    {
        new Data[124], len
        new line = 0
        new bool:bFoundSec = false
        new bool:bFoundPar = false
        new bool:bErrorFindSect = true
        new bool:bErrorFindParam = false

        while((line = read_file(filename, line, Data, 123, len) ) != 0 )
        {
            if (strlen(Data) < 2 || Data[0] == ';')
                continue;

            if (Data[0] == '[') // new section found
            {
                if (bFoundSec)
                {
                    bErrorFindParam = true
                    break
                }
                else if (equali(Data, sect, sect_length))
                {
                    bFoundSec = true
                    bErrorFindSect = false
                }
            }
            else if (bFoundSec && equali(Data, parameter, param_length))
            {
                bFoundPar = true
                break
            }
        }

        if ((bFoundPar) && (line > 0))
        {
            new text[32]
            format(text, 31, "%s = %s", parameter, value)
            if (write_file(filename, text, line-1))
                client_print(id, print_chat, "CSDM - configuration saved successfully")
        }
        else if ((!bFoundSec) || (bErrorFindSect))
            client_print(id, print_chat, "CSDM - can't save the configuration - wrong section name")
        else if ((!bFoundPar) || (bErrorFindParam))
            client_print(id, print_chat, "CSDM - can't save the configuration - wrong parameter name")
    }
}


public __csdm_fwd_drop(id, num)
{
/*
    new id = get_param(1)
    new wp = get_param(2)
    new name[32]
    
    get_string(3, name, 31)
    
    return run_drop(id, wp, name)    
*/
}

public csdm_Init(const version[])
{
    if (version[0] == 0)
    {
        set_fail_state("CSDM failed to load.")
        return
    }
    else
    csdm_set_intromsg(0)
}

public csdm_CfgInit()
{    
    csdm_reg_cfg("settings", "read_cfg")
}


public plugin_init()
{
    register_plugin(D_PLUGIN, CSDM_VERSION, "CSDM Team")
    
    register_clcmd("say respawn", "say_respawn")
    register_clcmd("say /respawn", "say_respawn")
    register_concmd("csdm_enable", "csdm_enable", D_ACCESS, "Enables CSDM")
    register_concmd("csdm_disable", "csdm_disable", D_ACCESS, "Disables CSDM")
    register_concmd("csdm_ctrl", "csdm_ctrl", D_ACCESS, "")
    register_concmd("csdm_reload", "csdm_reload", D_ACCESS, "Reloads CSDM Config")
    register_clcmd("csdm_menu", "csdm_menu", ADMIN_MENU, "CSDM Menu")
    register_clcmd("csdm_sett_menu", "csdm_sett_menu", ADMIN_MENU, "CSDM Settings Menu")
    register_clcmd("csdm_main_sett_menu", "csdm_main_sett_menu", ADMIN_MENU, "CSDM Main Settings Menu")

    register_forward(FM_SetModel, "forward_set_model")
    register_concmd("csdm_cache", "cacheInfo", ADMIN_MAP, "Shows cache information")
    
    AddMenuItem("CSDM Menu", "csdm_menu", D_ACCESS, D_PLUGIN)
    g_MainMenu = menu_create("CSDM Menu", "use_csdm_menu")
    new callback = menu_makecallback("hook_item_display")

    g_SettingsMenu = menu_create("CSDM Settings Menu", "use_csdm_sett_menu")

    menu_additem(g_MainMenu, "CSDM Enabled/Disabled", "csdm_ctrl", D_ACCESS, callback)
    menu_additem(g_MainMenu, "CSDM Settings", "csdm_sett_menu", D_ACCESS)
    menu_additem(g_MainMenu, "Reload Config", "csdm_reload", D_ACCESS)

    g_MainSettMenu = menu_create("CSDM Main Settings Menu", "use_csdm_mainsett_menu")
    menu_additem(g_SettingsMenu, "CSDM Main Settings", "csdm_main_sett_menu", D_ACCESS)

    new str_callback = menu_makecallback("hook_settings_display")

    if (g_MainSettMenu)
    {
        menu_additem(g_MainSettMenu, "Strip Weapons Enabled/Disabled", "strip_weap_ctrl", D_ACCESS, str_callback)
        menu_additem(g_MainSettMenu, "Removing Bombs Enabled/Disabled", "bomb_rem_ctrl", D_ACCESS, str_callback)
        menu_additem(g_MainSettMenu, "Preset Spawn Mode Enabled/Disabled", "spawn_mode_ctrl", D_ACCESS, str_callback)
        menu_additem(g_MainSettMenu, "Back", "csdm_sett_back", D_ACCESS)
    }
    g_drop_fwd = CreateMultiForward("csdm_HandleDrop", ET_CONTINUE, FP_CELL, FP_CELL, FP_CELL)
    g_options[CSDM_OPTION_SAYRESPAWN] = CSDM_SET_ENABLED

    g_max_clients = global_get(glb_maxClients)
}

public cacheInfo(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED
        
    new ar[6]
    csdm_cache(ar)
    
    console_print(id, "[CSDM] Free tasks: respawn=%d, findweapon=%d", ar[0], ar[5])
    console_print(id, "[CSDM] Weapon removal cache: %d total, %d live", ar[4], ar[3])
    console_print(id, "[CSDM] Live tasks: %d (%d free)", ar[2], ar[1])
    
    return PLUGIN_HANDLED
}

public forward_set_model(ent, const model[]) 
{
    if (!csdm_active())
        return FMRES_IGNORED

    if (!pev_valid(ent) || !equali(model, g_wbox_model) && !equali(model, g_shield_model))
        return FMRES_IGNORED

    new id = pev(ent, pev_owner)

    if (!(1 <= id <= g_max_clients))
        return FMRES_IGNORED

    new args[2]
    args[0] = ent
    args[1] = id
    set_task(0.2, "delay_find_weapon", ent, args, 2)

    return FMRES_IGNORED
}

public delay_find_weapon(args[])
{
    new ent = args[0]
    new id = args[1]

    new class[32]

    if (!pev_valid(ent))
        return

    if (!is_user_connected(id))
        return

    pev(ent, pev_classname, class, sizeof class - 1)

    if (equali(class, "weaponbox"))
        run_drop_wbox(id, ent, 0)
    else if (equali(class, "weapon_shield"))
        run_drop_wbox(id, ent, 1)

}

run_drop_wbox(id, ent, shield)
{
    new ret
    new model[32]
    ExecuteForward(g_drop_fwd, ret, id, ent, 0)
    
    if (ret == CSDM_DROP_REMOVE)
    {
        if (shield)
            csdm_remove_weaponbox(id, ent, 0, 1, 1)
        else
            csdm_remove_weaponbox(id, ent, 0, 1, 0)
        return 1
    } 
    else if (ret == CSDM_DROP_IGNORE) 
    {
        return 0
    }

    if (g_StayTime > 20 || g_StayTime < 0)
    {
        return 0
    }

    if (ent)
    {
        pev(ent, pev_model, model, 31)
        if (((equali(model,"models/w_usp.mdl")) || (equali(model,"models/w_glock18.mdl")))
                && (g_StripWeapons))
            csdm_remove_weaponbox(id, ent, 0, 0, 0)
        else if ((equali(model,"models/w_backpack.mdl")) && (g_RemoveBomb))
            csdm_remove_weaponbox(id, ent, 0, 0, 0)
        else if (shield)
            csdm_remove_weaponbox(id, ent, g_StayTime, 1, 1)
        else
            csdm_remove_weaponbox(id, ent, g_StayTime, 1, 0)
        return 1
    }
    
    return 0
}

public csdm_PreSpawn(player, bool:fake)
{
    if (!csdm_active())
    {
        return
    }

    //we'll just have to back out for now
    if (cs_get_user_shield(player))
    {
        return
    }
    new team = get_user_team(player)
    if (g_StripWeapons)
    {
        if (team == _TEAM_T)
        {
            if (cs_get_user_shield(player))
            {
                drop_with_shield(player, CSW_GLOCK18)
            } else {
                csdm_force_drop(player, "weapon_glock18")
            }
        } else if (team == _TEAM_CT) {
            if (cs_get_user_shield(player))
            {
                drop_with_shield(player, CSW_USP)
            } else {
                csdm_force_drop(player, "weapon_usp")
            }
        }
    }
    if (team == _TEAM_T)
    {
        if (g_RemoveBomb)
        {
            new weapons[MAX_WEAPONS], num
            get_user_weapons(player, weapons, num)
            for (new i=0; i<num; i++)
            {
                if (weapons == CSW_C4)
                {
                    if (cs_get_user_shield(player))
                    {
                        drop_with_shield(player, CSW_C4)
                    } else {
                        csdm_force_drop(player, "weapon_c4")
                    }
                    break
                }
            }
        }
    }
}


public csdm_main_sett_menu(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED
    
    menu_display(id, g_MainSettMenu, 0)

    return PLUGIN_HANDLED
}


public hook_item_display(player, menu, item)
{
    new paccess, command[24], call
    
    menu_item_getinfo(menu, item, paccess, command, 23, _, 0, call)
    
    if (equali(command, "csdm_ctrl"))
    {
        if (!csdm_active())
        {
            menu_item_setname(menu, item, "CSDM Disabled")
        } else {
            menu_item_setname(menu, item, "CSDM Enabled")
        }
    }
}

public read_cfg(readAction, line[], section[])
{
    if (readAction == CFG_READ)
    {
        new setting[24], sign[3], value[32];

        parse(line, setting, 23, sign, 2, value, 31);
        
        if (equali(setting, "strip_weapons"))
        {
            g_StripWeapons = str_to_num(value) ? true : false
        } else if (equali(setting, "weapons_stay")) {
            g_StayTime = str_to_num(value)
        } else if (equali(setting, "spawnmode")) {
            new var = csdm_setstyle(value)
            if (var)
            {
                log_amx("CSDM spawn mode set to %s", value)
            } else {
                log_amx("CSDM spawn mode %s not found", value)
            }
        } else if (equali(setting, "remove_bomb")) {
            g_RemoveBomb = str_to_num(value) ? true : false
        } else if (equali(setting, "enabled")) {
            csdm_set_active(str_to_num(value))
        } else if (equali(setting, "spawn_wait_time")) {
            csdm_set_spawnwait(str_to_float(value))
        }
    }
}

public csdm_reload(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED
        
    new file[128] = ""
    if (read_argc() >= 2)
    {
        read_argv(1, file, 127)
    }
        
    if (csdm_reload_cfg(file))
    {
        client_print(id, print_chat, "[CSDM] Config file reloaded.")
    } else {
        client_print(id, print_chat, "[CSDM] Unable to find config file.")
    }
        
    return PLUGIN_HANDLED
}

public csdm_menu(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED
    
    menu_display(id, g_MainMenu, 0)
    
    return PLUGIN_HANDLED
}

public csdm_sett_menu(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED
    
    menu_display(id, g_SettingsMenu, 0)

    return PLUGIN_HANDLED
}

public csdm_ctrl(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED
    
    csdm_set_active( csdm_active() ? 0 : 1 )

    client_print(id, print_chat, "CSDM %s.", csdm_active()? "enabled" : "disabled")

    csdm_write_cfg(id, "settings", "enabled", csdm_active() ? "1" : "0")

    client_print(id, print_chat, "CSDM - the map will be reloaded to affect the change of this setting.")
    set_task(3.0, "do_changelevel")
    return PLUGIN_HANDLED
}

public use_csdm_menu(id, menu, item)
{
    if (item < 0)
        return PLUGIN_CONTINUE
    
    new command[24], paccess, call
    if (!menu_item_getinfo(g_MainMenu, item, paccess, command, 23, _, 0, call))
    {
        log_amx("Error: csdm_menu_item() failed (menu %d) (page %d) (item %d)", g_MainMenu, 0, item)
        return PLUGIN_HANDLED
    }
    if (paccess && !(get_user_flags(id) & paccess))
    {
        client_print(id, print_chat, "You do not have access to this menu option.")
        return PLUGIN_HANDLED
    }
    
    client_cmd(id, command)
    
    return PLUGIN_HANDLED
}

public use_csdm_sett_menu(id, menu, item)
{
    if (item < 0)
        return PLUGIN_CONTINUE
    
    new command[24], paccess, call
    if (!menu_item_getinfo(g_SettingsMenu, item, paccess, command, 23, _, 0, call))
    {
        log_amx("Error: csdm_menu_item() failed (menu %d) (page %d) (item %d)", g_SettingsMenu, 0, item)
        return PLUGIN_HANDLED
    }
    if (paccess && !(get_user_flags(id) & paccess))
    {
        client_print(id, print_chat, "You do not have access to this menu option.")
        return PLUGIN_HANDLED
    }

    client_cmd(id, command)

    return PLUGIN_HANDLED
}

public use_csdm_mainsett_menu(id, menu, item)
{
    if (item < 0)
        return PLUGIN_CONTINUE
    
    new command[24], paccess, call
    if (!menu_item_getinfo(g_MainSettMenu, item, paccess, command, 23, _, 0, call))
    {
        log_amx("Error: csdm_menu_item() failed (menu %d) (page %d) (item %d)", g_MainSettMenu, 0, item)
        return PLUGIN_HANDLED
    }
    if (paccess && !(get_user_flags(id) & paccess))
    {
        client_print(id, print_chat, "You do not have access to this menu option.")
        return PLUGIN_HANDLED
    }

    if (equali(command,"strip_weap_ctrl"))
    {
        g_StripWeapons = (g_StripWeapons ? false:true)
        menu_display(id, g_MainSettMenu, 0)
        client_print(id, print_chat, "Strip Weapons %s", g_StripWeapons ? "enabled" : "disabled")
        log_amx("CSDM strip weapons %s", g_StripWeapons ? "enabled" : "disabled")

        csdm_write_cfg(id, "settings", "strip_weapons", g_StripWeapons ? "1" : "0")

        return PLUGIN_HANDLED
    }
    else if (equali(command,"bomb_rem_ctrl"))
    {
        g_RemoveBomb = (g_RemoveBomb ? false:true)
        menu_display(id, g_MainSettMenu, 0)
        client_print(id, print_chat, "Removing Bomb %s", g_RemoveBomb ? "enabled" : "disabled")
        log_amx("CSDM removing bomb %s", g_RemoveBomb ? "enabled" : "disabled")

        csdm_write_cfg(id, "settings", "remove_bomb", g_RemoveBomb ? "1" : "0")

        client_print(id,print_chat,"CSDM - changing this setting will affect the game after changelevel command")
        return PLUGIN_HANDLED
    }
    else if (equali(command,"spawn_mode_ctrl"))
    {
        new style = csdm_curstyle()
        new stylename[24]

        if (style == -1)
            csdm_setstyle("preset")
        else
            csdm_setstyle("none")

        style = csdm_curstyle()

        if (style == -1)
            format(stylename,23,"none")
        else
            format(stylename,23,"preset")

        menu_display(id, g_MainSettMenu, 0)
        client_print(id, print_chat, "Spawn style set to %s", stylename)
        log_amx("CSDM spawn mode set to %s", stylename)

        csdm_write_cfg(id, "settings", "spawnmode", (style == -1) ? "none" : "preset")

        return PLUGIN_HANDLED
    }
    else if (equali(command,"csdm_sett_back"))
    {
        menu_display(id, g_SettingsMenu, 0)
        return PLUGIN_HANDLED
    }
    return PLUGIN_HANDLED
}

public hook_settings_display(player, menu, item)
{
    new paccess, command[24], call
    
    menu_item_getinfo(menu, item, paccess, command, 23, _, 0, call)
    
    if (equali(command, "strip_weap_ctrl"))
    {
        if (!g_StripWeapons)
        {
            menu_item_setname(menu, item, "Strip Weapons Disabled")
        } else {
            menu_item_setname(menu, item, "Strip Weapons Enabled")
        }
    }
    else if (equali(command, "bomb_rem_ctrl"))
    {
        if (!g_RemoveBomb)
        {
            menu_item_setname(menu, item, "Removing Bomb Disabled")
        } else {
            menu_item_setname(menu, item, "Removing Bomb Enabled")
        }
    }
    else if (equali(command,"spawn_mode_ctrl"))
    {
        new style = csdm_curstyle()
        if (style == -1)
            menu_item_setname(menu, item, "Preset Spawn Mode Disabled")
        else
            menu_item_setname(menu, item, "Preset Spawn Mode Enabled")
    }
}

public csdm_enable(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED

    if (!csdm_active())
    {
        csdm_set_active(1)
        client_print(id, print_chat, "CSDM enabled.")
        csdm_write_cfg(id, "settings", "enabled", "1")
        client_print(id, print_chat, "CSDM - the map will be reloaded to affect the change of this setting.")
        set_task(3.0, "do_changelevel")
    }
    return PLUGIN_HANDLED    
}

public csdm_disable(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED

    if (csdm_active())
    {
        csdm_set_active(0)
        client_print(id, print_chat, "CSDM disabled.")
        csdm_write_cfg(id, "settings", "enabled", "0")
        client_print(id, print_chat, "CSDM - the map will be reloaded to affect the change of this setting.")
        set_task(3.0, "do_changelevel")
    }
    return PLUGIN_HANDLED    
}

public say_respawn(id)
{
    if (g_options[CSDM_OPTION_SAYRESPAWN] == CSDM_SET_DISABLED)
    {
        client_print(id, print_chat, "[CSDM] This command is disabled!")
        return PLUGIN_HANDLED
    }
    
    if (!is_user_alive(id) && csdm_active())
    {
        new team = get_user_team(id)
        if (team == _TEAM_T || team == _TEAM_CT)
        {
            csdm_respawn(id)
        }
    }
    
    return PLUGIN_CONTINUE
}

public do_changelevel()
{
    new current_map[32]
    get_mapname(current_map, 31)
    server_cmd("changelevel %s", current_map)
}

Share this post


Link to post
Share on other sites

am sa il pun pe seara cand ajung si eu acasa am sa revin cu edit daca imi merge sau nu 

 

 

Multumesc frumos

Share this post


Link to post
Share on other sites

Data viitoare încercați să folosiți Quote pentru o structură mai frumoasă în topic. T/C

Edit:Topic redeschis la cererea membrului!

Share this post


Link to post
Share on other sites

Trebuie sa ai csdm.inc in include (acest plugin merge compilat doar local.

Poftim pluginul : Aici

Share this post


Link to post
Share on other sites

Se poate da t/c

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×