Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Перевести или добавить

, Перевести или добавить в меню
Статус пользователя lemonzik
сообщение 30.5.2015, 11:16
Сообщение #1
Стаж: 11 лет

Сообщений: 126
Благодарностей: 5
Полезность: < 0

Народ, помогите пожалуйста перевести в меню Exit на Выход

Скрытый текст
Код
/**
* csdm_itemmode.sma
* Allows for Counter-Strike to be played as DeathMatch.
* Item editor Allows add/remove items/weapons for CSDM 2.x
* CSDM Item Mode - Spawns different types of items all over the map.
*
* (C)2003-2006 Borja "FALUCO" Ferrer
* (C)2003-2006 KWo
* (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 <fakemeta>
#include <cstrike>
#include <csdm>
#include <csx>

#define MAX_ITEMS    1000
#define MAX_ENTS     1400
#define MAX_PACKS    50
#define ITEMTYPES_NUM    42
#define MAX_GRENADES 99
#define MAX_MATERIALIZE_ATTEMPTS 10

// pack slot constants...
#define SLOTS_AUX    4
#define SLOTS_MAX    8
#define SLOTS        (SLOTS_AUX+SLOTS_MAX)
#define SLOT_WP_COUNT    0
#define SLOT_ENT_ID    1
#define SLOT_PACK_ID    2
#define SLOT_LONGJUMP    3

// #define SLOTS        12

#define ITEM_LONGJUMP    31
#define ITEM_MEDKIT        32
#define ITEM_BATTERY        33
#define ITEM_PISTOLAMMO    34
#define ITEM_RIFLEAMMO    35
#define ITEM_SHOTAMMO    36
#define ITEM_SMGAMMO        37
#define ITEM_AWPAMMO        38
#define ITEM_PARAAMMO    39
#define ITEM_FULLAMMO    40
#define ITEM_ARMOR        41
#define ITEM_PACK            (MAX_ITEMS + 1)

// drop pack modes (Simon Logic: to support 2 types of dropped packs)...
#define DROP_NO_PACK 0    // disable
#define DROP_DM_PACK 1    // dtoppack will include weapon, ammo & jetpack
#define DROP_CS_PACK 2    // same as DROP_DM_PACK + include armor & heatlh also

#define CWRAP(%1,%2) (containi(%1,%2) != -1)

// Config variables
new bool:g_Enabled = false
// new bool:g_EnabledCfg = false
new bool:g_EditorEnabled = false
new bool:g_OldStateItemMode = false
new bool:g_bSkipHelp[33] = {false, ...}    // Simon Logic - to let disable Longjump help

// Simon Logic: i need this to fix bug#335 (when the droppack can be taken also with the gun,
// but weapons_stay was > 0  so You could take the gun anyway, too...
new g_iCfgWeaponStayTime
new g_droppacks = DROP_DM_PACK

new g_battery = 15
new g_medkit = 15
new Float:g_itemTime = 20.0
new Float:g_packTime = 20.0

new g_msgItemPickup // Simon Logic
new g_msgAmmoPickup // Simon Logic
new g_iMaxNadesH // Simon Logic: max HE a player can grab
new g_iMaxNadesS // Simon Logic: max SG a player can grab
new g_iMaxNadesF // Simon Logic: max FG a player can grab
new bool:g_bPersistentItems = false // Simon Logic - to add an option against falling down items
new bool:g_bNoGunMenu = true // to prevent displaying or not gun menu if item mode is enabled

// Entity arrays
new g_EntModels[][] =
{
    "",
    "models/w_p228.mdl",
    "",
    "models/w_scout.mdl",
    "models/w_hegrenade.mdl",
    "models/w_xm1014.mdl",
    "",
    "models/w_mac10.mdl",
    "models/w_aug.mdl",
    "models/w_smokegrenade.mdl",
    "models/w_elite.mdl",
    "models/w_fiveseven.mdl",
    "models/w_ump45.mdl",
    "models/w_sg550.mdl",
    "models/w_galil.mdl",
    "models/w_famas.mdl",
    "models/w_usp.mdl",
    "models/w_glock18.mdl",
    "models/w_awp.mdl",
    "models/w_mp5.mdl",
    "models/w_m249.mdl",
    "models/w_m3.mdl",
    "models/w_m4a1.mdl",
    "models/w_tmp.mdl",
    "models/w_g3sg1.mdl",
    "models/w_flashbang.mdl",
    "models/w_deagle.mdl",
    "models/w_sg552.mdl",
    "models/w_ak47.mdl",
    "",
    "models/w_p90.mdl",
    "models/w_longjump.mdl",
    "models/w_medkit.mdl",
    "models/w_battery.mdl",
    "models/w_357ammobox.mdl",
    "models/w_9mmarclip.mdl",
    "models/w_shotbox.mdl",
    "models/w_9mmclip.mdl",
    "models/w_crossbow_clip.mdl",
    "models/w_chainammo.mdl",
    "models/w_isotopebox.mdl",
    "models/w_assault.mdl"
}
new g_EntClass[][] =
{
    "",
    "csdmw_p228",
    "",
    "csdmw_scout",
    "csdmw_hegrenade",
    "csdmw_xm1014",
    "",
    "csdmw_mac10",
    "csdmw_aug",
    "csdmw_smokegrenade",
    "csdmw_elite",
    "csdmw_fiveseven",
    "csdmw_ump45",
    "csdmw_sg550",
    "csdmw_galil",
    "csdmw_famas",
    "csdmw_usp",
    "csdmw_glock18",
    "csdmw_awp",
    "csdmw_mp5navy",
    "csdmw_m249",
    "csdmw_m3",
    "csdmw_m4a1",
    "csdmw_tmp",
    "csdmw_g3sg1",
    "csdmw_flashbang",
    "csdmw_deagle",
    "csdmw_sg552",
    "csdmw_ak47",
    "",
    "csdmw_p90",
    "csdm_longjump",
    "csdm_medkit",
    "csdm_battery",
    "csdm_pistolammo",
    "csdm_rifleammo",
    "csdm_shotammo",
    "csdm_smgammo",
    "csdm_awpammo",
    "csdm_paraammo",
    "csdm_fullammo",
    "csdm_armor"
}
stock g_Weap2Ammo[] =
{
    0,
    ITEM_PISTOLAMMO,//CSW_P228
    0,
    ITEM_RIFLEAMMO,    //CSW_SCOUT
    0,        //CSW_HEGRENADE
    ITEM_SHOTAMMO,    //CSW_XM1014
    0,        //CSW_C4
    ITEM_SMGAMMO,    //CSW_MAC10
    ITEM_RIFLEAMMO,    //CSW_AUG
    0,        //CSW_SMOKEGRENADE
    ITEM_PISTOLAMMO,//CSW_ELITE
    ITEM_PISTOLAMMO,//CSW_FIVESEVEN
    ITEM_SMGAMMO,    //CSW_UMP45
    ITEM_RIFLEAMMO,    //CSW_SG550
    ITEM_RIFLEAMMO,    //CSW_GALIL
    ITEM_RIFLEAMMO,    //CSW_FAMAS
    ITEM_PISTOLAMMO,//CSW_USP
    ITEM_PISTOLAMMO,//CSW_GLOCK18
    ITEM_AWPAMMO,    //CSW_AWP
    ITEM_SMGAMMO,    //CSW_MP5NAVY
    ITEM_PARAAMMO,    //CSW_M249
    ITEM_SHOTAMMO,    //CSW_M3
    ITEM_RIFLEAMMO,    //CSW_M4A1
    ITEM_SMGAMMO,    //CSW_TMP
    ITEM_RIFLEAMMO,    //CSW_G3SG1
    0,        //CSW_FLASHBANG
    ITEM_PISTOLAMMO,//CSW_DEAGLE
    ITEM_RIFLEAMMO,    //CSW_SG552
    ITEM_RIFLEAMMO,    //CSW_AK47
    0,        //CSW_KNIFE
    ITEM_SMGAMMO    //CSW_P90
}
new g_EntTable[MAX_ENTS] = {-1, ...}            // Contains the item_id (0-249) in the entid position(0-1500)
new g_EntType[MAX_ITEMS]            // Contains the item type (ammos, armor, ...) in the file order
new g_EntCount                    // Global item count in the map (deathpacks not included)
new g_EntVecs[MAX_ITEMS][3]            // Contains the item position in the file order
new g_EntAngle[MAX_ITEMS] // Simon Logic: to set angle of items - Contains yaw angle in the file order
new g_EntId[MAX_ITEMS]                // Contains the entid (0-1500) in the file order
new g_Ent[33] = {-1, ...}                // Contains the entid (0-1500) of the closest entity for the player editing items
new bool:HasLongJump[33] =    {false, ...}
new bool:IsRestricted[ITEMTYPES_NUM] =    {false, ...}    // Contains if an item is restricted or not
new bool:g_PackID[MAX_PACKS] = {true, ...}    // If true the packid can be used, else it's being use by another pack
new g_PackContents[MAX_PACKS][SLOTS]        // Contains the pack contents in the packid position(1-64)
                        // [0]=weapon_count [1]=entid [2]=packid [3]=longjump [4...]=weapons
new g_MaxPlayers
new g_AllocStr

new bool:g_MainPlugin = true

new Float:red[3] = {255.0,0.0,0.0}
new Float:yellow[3] = {255.0,200.0,20.0}
new pv_csdm_additems

// page info for settings in CSDM Setting Menu
new g_SettingsMenu = 0
new g_ItemSettMenu = 0
new g_ItemsInMenuNr = 0
new g_PageSettMenu = 0

//Tampering with the author and name lines can violate the copyrights
new PLUGINNAME[] = "CSDM Item Mode"
new VERSION[] = CSDM_VERSION
new AUTHORS[] = "FALUCO & KWo & SL"

//Menus
new g_cItemMode

new g_MainMenu[] = "\rРедактор оружий:"
new g_MainMenuID = -1
new g_cMain

new g_AddItemsMenu[] = "\rДобавить оружия:"
new g_AddItemsMenuID = -1
new g_cAddItems

new g_AddPistolsMenu[] = "\rПистолеты:"
new g_AddPistolsMenuID = -1
new g_cAddPistols

new g_AddSmgMenu[] = "\rПолу-автоматы:"
new g_AddSmgMenuID = -1
new g_cAddSmg

new g_AddRifles1Menu[] = "\rВинтоки (1):"
new g_AddRifles1MenuID = -1
new g_cAddRifles1

new g_AddRifles2Menu[] = "\rВинтовки (2):"
new g_AddRifles2MenuID = -1
new g_cAddRifles2

new g_AddShotgunMenu[] = "\rДрубовики/Пулемет:"
new g_AddShotgunMenuID = -1
new g_cAddShotgun

new g_AddEquipMenu[] = "\rЭкиперовка:"
new g_AddEquipMenuID = -1
new g_cAddEquip


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

public csdm_CfgInit()
{
    g_iMaxNadesH = g_MaxBPAmmo[CSW_HEGRENADE]     // Simon Logic : max HE a player can grab
    g_iMaxNadesS = g_MaxBPAmmo[CSW_SMOKEGRENADE] // Simon Logic : max SG a player can grab
    g_iMaxNadesF = g_MaxBPAmmo[CSW_FLASHBANG]     // Simon Logic : max FG a player can grab

    g_AllocStr = engfunc(EngFunc_AllocString, "info_target")

    pv_csdm_additems    = register_cvar("csdm_add_items", "0")

    csdm_reg_cfg("items", "cfgmain")
    csdm_reg_cfg("item_restrictions", "cfgrestricts")
    csdm_reg_cfg("settings", "cfgsettings") // Simon Logic : to get weapons_stay time...
}

public plugin_init()
{
    register_plugin(PLUGINNAME, VERSION, AUTHORS)
    register_cvar("itemmode_version", CSDM_VERSION, FCVAR_SERVER|FCVAR_SPONLY)

    register_forward(FM_Touch, "hook_touch")

    g_MaxPlayers = get_maxplayers()
    register_concmd("edit_items", "showmen", ADMIN_MAP, "Edits Items configuration")
    register_concmd("csdm_entdump", "csdm_entdump", ADMIN_MAP, "Dumps a text file with entity information.")
    register_concmd("i_m_change_state", "i_m_change_state", ADMIN_MAP, "Changes the state of Item Mode.")
    register_clcmd("csdm_item_sett_menu", "csdm_item_sett_menu", ADMIN_MAP, "CSDM Item Settings Menu")

    g_MainPlugin = module_exists("csdm_main") ? true : false
    
    if (g_MainPlugin)
    {
        new menu = csdm_main_menu()
        g_SettingsMenu = csdm_settings_menu()

        g_ItemsInMenuNr = menu_items(g_SettingsMenu)
        g_PageSettMenu = g_ItemsInMenuNr / 7

        menu_additem(menu, "Редактор оружий", "edit_items", ADMIN_MAP)

        g_ItemSettMenu = menu_create("CSDM Item Settings Menu", "use_csdm_item_menu")
        menu_additem(g_SettingsMenu, "CSDM Item Settings", "csdm_item_sett_menu", ADMIN_MAP)

        if (g_ItemSettMenu)
        {
            g_cItemMode = menu_makecallback("c_ItemMode")
            menu_additem(g_ItemSettMenu, "Item Mode", "i_m_change_state", ADMIN_MAP, g_cItemMode)

            new cb_persistent = menu_makecallback("c_persist_menu")
            menu_additem(g_ItemSettMenu, "Persistent Items Enabled/Disabled", "csdm_persist_ctrl", ADMIN_MAP, cb_persistent)

            new cb_droppack = menu_makecallback("c_droppack_menu")
            menu_additem(g_ItemSettMenu, "Drop Pack DM/CS/Disabled", "csdm_droppacks_ctrl", ADMIN_MAP, cb_droppack)

            new cb_ngm = menu_makecallback("c_ngm_menu")
            menu_additem(g_ItemSettMenu, "Gun Menu Enabled/Disabled for Item Mode", "csdm_ngm_ctrl", ADMIN_MAP, cb_ngm)

            menu_additem(g_ItemSettMenu, "Back", "csdm_sett_back", ADMIN_MAP)
        }
    }

    // Simon Logic: this is for messages to send to player when item_healthkit
    // or item_armor is grabbed
    g_msgItemPickup = get_user_msgid("ItemPickup")
    g_msgAmmoPickup = get_user_msgid("AmmoPickup")
}

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

    return PLUGIN_HANDLED
}

public use_csdm_item_menu(id, menu, item)
{
    if (item < 0)
        return PLUGIN_CONTINUE
    
    new command[24], paccess, call
    if (!menu_item_getinfo(g_ItemSettMenu, item, paccess, command, 23, _, 0, call))
    {
        log_amx("Error: csdm_menu_item() failed (menu %d) (page %d) (item %d)", g_ItemSettMenu, 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,"i_m_change_state"))
    {
        client_cmd(id, command)
        return PLUGIN_HANDLED
    }
    else if (equali(command,"csdm_persist_ctrl"))
    {
        g_bPersistentItems = (g_bPersistentItems ? false:true)
        menu_display(id, g_ItemSettMenu, 0)
        client_print(id, print_chat, "Items are %s", g_bPersistentItems ? "persistent" : "falling down")
        log_amx("CSDM Persistent Items %s", g_bPersistentItems ? "persistent" : "falling down")

        csdm_write_cfg(id, "items", "persistent_items", g_bPersistentItems ? "1" : "0")

        return PLUGIN_HANDLED
    }
    else if (equali(command,"csdm_droppacks_ctrl"))
    {
        g_droppacks++
        if (g_droppacks > 2)
            g_droppacks = 0
        menu_display(id, g_ItemSettMenu, 0)
        client_print(id, print_chat, "Drop Pack %s", (g_droppacks == 0) ? "disabled" :  (g_droppacks == 1) ? "CS type" : "DM type")
        log_amx("Drop Pack %s", (g_droppacks == 0) ? "disabled" :  (g_droppacks == 1) ? "CS type" : "DM type")

        new sz[4]
        num_to_str(g_droppacks, sz, 1)
        csdm_write_cfg(id, "items", "drop_packs", sz)

        return PLUGIN_HANDLED
    }
    else if (equali(command,"csdm_ngm_ctrl"))
    {
        g_bNoGunMenu = (g_bNoGunMenu ? false:true)
        menu_display(id, g_ItemSettMenu, 0)
        client_print(id, print_chat, "Gun Menu is %s for Item Mode", g_bNoGunMenu ? "disabled" : "enabled")
        log_amx("Gun Menu is %s for Item Mode", g_bNoGunMenu ? "disabled" : "enabled")

        csdm_write_cfg(id, "items", "no_gun_menu", g_bNoGunMenu ? "1" : "0")

        if (pv_csdm_additems && g_bNoGunMenu)
            set_pcvar_num(pv_csdm_additems, 1)
        else if (pv_csdm_additems)
            set_pcvar_num(pv_csdm_additems, 0)

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

public c_persist_menu(player, menu, item)
{
    new paccess, command[24], call
    
    menu_item_getinfo(menu, item, paccess, command, 23, _, 0, call)
    
    if (equali(command, "csdm_persist_ctrl"))
    {
        if (!g_bPersistentItems)
        {
            menu_item_setname(menu, item, "Persistent Items Disabled")
        } else {
            menu_item_setname(menu, item, "Persistent Items Enabled")
        }
    }
}

public c_droppack_menu(player, menu, item)
{
    new paccess, command[24], call
    
    menu_item_getinfo(menu, item, paccess, command, 23, _, 0, call)
    
    if (equali(command, "csdm_droppacks_ctrl"))
    {
        if (g_droppacks == 0)
        {
            menu_item_setname(menu, item, "Drop Pack Disabled")
        }
        else if (g_droppacks == 1)
        {
            menu_item_setname(menu, item, "Drop Pack CS Enabled")
        }
        else if (g_droppacks == 2)
        {
            menu_item_setname(menu, item, "Drop Pack DM Enabled")
        }
    }
}

public c_ngm_menu(player, menu, item)
{
    new paccess, command[24], call
    
    menu_item_getinfo(menu, item, paccess, command, 23, _, 0, call)
    
    if (equali(command, "csdm_ngm_ctrl"))
    {
        if (g_bNoGunMenu)
        {
            menu_item_setname(menu, item, "Gun Menu Disabled for Item Mode")
        } else {
            menu_item_setname(menu, item, "Gun Menu Enabled for Item Mode")
        }
    }
}

public client_connect(id)
{
    if (!g_Enabled || !csdm_active())
        return

    HasLongJump[id] = false
    g_bSkipHelp[id] = false
}

public plugin_precache()
{
    precache_model("models/w_medkit.mdl")
    precache_model("models/w_battery.mdl")
    precache_model("models/w_357ammobox.mdl")        //Pistol Ammo
    precache_model("models/w_shotbox.mdl")            //Shotgun Ammo
    precache_model("models/w_9mmclip.mdl")            //SMG Ammo
    precache_model("models/w_9mmarclip.mdl")        //Rifle Ammo
    precache_model("models/w_crossbow_clip.mdl")        //Awp Ammo
    precache_model("models/w_isotopebox.mdl")        //Full ammo
    precache_model("models/w_isotopeboxt.mdl")        //Full ammo
    precache_model("models/w_chainammo.mdl")        //Full ammo
    precache_model("models/w_weaponbox.mdl")        //Drop pack
    precache_model("models/w_assault.mdl")            //assaultsuit
    precache_model("models/w_longjump.mdl")            //longjump - thanks asskicr
    precache_model("models/w_longjumpt.mdl")        //"
    precache_sound("items/smallmedkit1.wav")
    precache_sound("items/gunpickup2.wav")
    precache_sound("items/suitchargeok1.wav")
    precache_sound("items/ammopickup2.wav")
    precache_sound("items/clipinsert1.wav")

    precache_model("sprites/640hud2.spr") // Simon Logic: precache fixed sprite (to display two icons)

    return PLUGIN_CONTINUE
}

public csdm_StateChange(csdm_state)
{
    if (g_Enabled && csdm_state == CSDM_DISABLE)
    {
        destroyAllItems()
        destroyAllPacks()
        g_OldStateItemMode = g_Enabled
    }

    if ((g_OldStateItemMode) && !g_EditorEnabled && (csdm_state == CSDM_ENABLE))
    {
        g_Enabled = true
        ReadFile()
        SetEnts()
        if (pv_csdm_additems && g_bNoGunMenu)
            set_pcvar_num(pv_csdm_additems, 1)
    }
}

public i_m_change_state(id)
{
    if (!(get_user_flags(id)&ADMIN_MAP))
    {
        client_print(id, print_console, "[CSDM] You do not have appropriate access.")
        client_print(id, print_chat, "[CSDM] You do not have appropriate access.")
        return PLUGIN_HANDLED
    }

    if (g_Enabled)
    {
        if (csdm_active())
        {
            destroyAllItems()
            destroyAllPacks()
        }
        g_Enabled = false
        g_OldStateItemMode = false
        set_pcvar_num(pv_csdm_additems, 0)
        client_print(0,print_chat,"[CSDM] Item Mode disabled")
        csdm_write_cfg(id, "items", "enabled", "0")
    }
    else if (g_EntCount)
    {
        g_Enabled = true
        g_OldStateItemMode = true

        if (csdm_active())
        {
            ReadFile()
            SetEnts()
        }
        if (g_bNoGunMenu)
            set_pcvar_num(pv_csdm_additems, 1)
        client_print(0,print_chat,"[CSDM] Item Mode enabled")
        csdm_write_cfg(id, "items", "enabled", "1")
    }
    menu_display(id, g_ItemSettMenu, 0)
    return PLUGIN_HANDLED
}

public c_ItemMode(id, menu, item)
{
    new cmd[6], fItem[326], iName[64]
    new access, callback    
    menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)

    if (g_Enabled)
    {
        format(fItem,325,"Item Mode Enabled")
        menu_item_setname(menu, item, fItem )
        return ITEM_ENABLED
    }
    else if (!g_EntCount)
    {
        format(fItem,325,"Item Mode Disabled - no items")
        menu_item_setname(menu, item, fItem )
        return ITEM_DISABLED
    }
    else
    {
        format(fItem,325,"Item Mode Disabled")
        menu_item_setname(menu, item, fItem )
        return ITEM_ENABLED
    }
    return ITEM_ENABLED
}

public c_PersItems(id, menu, item)
{
    new cmd[6], fItem[326], iName[64]
    new access, callback    
    menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)

    if (g_bPersistentItems)
    {
        format(fItem,325,"Items Persistent")
        menu_item_setname(menu, item, fItem )
        return ITEM_ENABLED
    }
    else
    {
        format(fItem,325,"Items Falling Down")
        menu_item_setname(menu, item, fItem )
        return ITEM_ENABLED
    }
    return ITEM_ENABLED
}

public c_NoGunMenu(id, menu, item)
{
    new cmd[6], fItem[326], iName[64]
    new access, callback    
    menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)

    if (g_bNoGunMenu)
    {
        format(fItem,325,"Gun Menu Disabled for Item Mode")
        menu_item_setname(menu, item, fItem )
        return ITEM_ENABLED
    }
    else
    {
        format(fItem,325,"Gun Menu Enabled for Item Mode")
        menu_item_setname(menu, item, fItem )
        return ITEM_ENABLED
    }
    return ITEM_ENABLED
}

public cfgmain(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, "enabled"))
        {
            g_Enabled = str_to_num(value) ? true : false
            g_OldStateItemMode = g_Enabled
        }
        else if (equali(setting, "persistent_items")) // Simon Logic: items without falling effect
        {
            g_bPersistentItems = str_to_num(value) ? true : false
        }
        else if (equali(setting, "drop_packs"))
        {
            g_droppacks = str_to_num(value)
            if(g_droppacks < 0)
                g_droppacks = 0
        }
        else if (equali(setting, "battery"))
        {
            g_battery = str_to_num(value)
        }
        else if (equali(setting, "medkit"))
        {
            g_medkit = str_to_num(value)
        }
        else if (equali(setting, "item_time"))
        {
            g_itemTime = str_to_float(value)
        }
        else if (equali(setting, "drop_time"))  // Simon Logic: fix bug#339
        {
            g_itemTime = str_to_float(value)
            g_itemTime = (g_itemTime > 30.0) ? 30.0 : g_itemTime
        }
        else if (equali(setting, "max_hnades")) // Simon Logic: req#327
        {
            assignMaxNades(g_iMaxNadesH, value, CSW_HEGRENADE)
        }
        else if (equali(setting, "max_fnades")) // Simon Logic: req#327
        {
            assignMaxNades(g_iMaxNadesF, value, CSW_FLASHBANG)
        }
        else if (equali(setting, "max_snades")) // Simon Logic: req#327
        {
            assignMaxNades(g_iMaxNadesS, value, CSW_SMOKEGRENADE)
        }
        else if (equali(setting, "no_gun_menu"))
        {
            g_bNoGunMenu = str_to_num(value) ? true : false
        }
    }
}

public cfgrestricts(readAction, line[], section[])
{
    if (readAction == CFG_READ)
    {
        new itemname[24]
        parse(line, itemname, 23)
        
        if (equali(itemname, "longjump"))
        {
            IsRestricted[ITEM_LONGJUMP] = true
        }
        else if (equali(itemname, "medkit"))
        {
            IsRestricted[ITEM_MEDKIT] = true
        }
        else if (equali(itemname, "battery"))
        {
            IsRestricted[ITEM_BATTERY] = true
        }
        else if (equali(itemname, "pistolammo"))
        {
            IsRestricted[ITEM_PISTOLAMMO] = true
        }
        else if (equali(itemname, "rifleammo"))
        {
            IsRestricted[ITEM_RIFLEAMMO] = true
        }
        else if (equali(itemname, "shotammo"))
        {
            IsRestricted[ITEM_SHOTAMMO] = true
        }
        else if (equali(itemname, "smgammo"))
        {
            IsRestricted[ITEM_SMGAMMO] = true
        }
        else if (equali(itemname, "awpammo"))
        {
            IsRestricted[ITEM_AWPAMMO] = true
        }
        else if (equali(itemname, "paraammo"))
        {
            IsRestricted[ITEM_PARAAMMO] = true
        }
        else if (equali(itemname, "fullammo"))
        {
            IsRestricted[ITEM_FULLAMMO] = true
        }
        else if (equali(itemname, "armor"))
        {
            IsRestricted[ITEM_ARMOR] = true
        } else {
            new weapname[24], weaptype
            
            format(weapname, 23, "weapon_%s", itemname)
            weaptype = getWeapId(weapname)
            
            if (weaptype != 0)
                IsRestricted[weaptype] = true
            else
                log_amx("^"%s^" is not a valid name. Check your restrictions for item mode.", itemname)
        }
    }

    if (readAction == CFG_RELOAD)
    {
        // Reset all restrictions
        arrayset(IsRestricted, false, ITEMTYPES_NUM)
    }

    if (readAction == CFG_DONE)
    {
        destroyAllItems()
        destroyAllPacks()
        ReadFile()
        if ((g_Enabled) && (csdm_active()))
        {
            SetEnts()
            if (g_bNoGunMenu)
                set_pcvar_num(pv_csdm_additems, 1)
        }
        else if (!g_Enabled)
            set_pcvar_num(pv_csdm_additems, 0)
    }
}

public cfgsettings(readAction, line[], section[]) // SL: we need to read 'weapons_stay' value only
{
    if (readAction == CFG_READ)
    {
        new setting[24], sign[3], value[32];

        parse(line, setting, 23, sign, 2, value, 31);

        if (equali(setting, "weapons_stay")) {
            g_iCfgWeaponStayTime = str_to_num(value)
        }
    }
}


ReadFile()
{
    new Map[32], config[32], File[64]

    get_mapname(Map, 31)
    get_localinfo("amxx_configsdir", config, 31)

    format(File, 63, "%s\csdm\items\ents_%s.cfg", config, Map)
    g_EntCount = 0

    if (file_exists(File))
    {
        new Data[51], len, EntName[25]
        new line = 0
        new pos[4][8]
        new iParamCount, iTotalItems = 0

        while ((g_EntCount < MAX_ITEMS) && ((line = read_file(File, line, Data, 50, len)) != 0))
        {
            if (strlen(Data) < 2)
                continue

            iTotalItems++

            iParamCount = parse(Data, EntName, 24, pos[0], 7, pos[1], 7, pos[2], 7, pos[3], 7)
            if(iParamCount < 4)
                continue

            parse(Data, EntName, 24, pos[0], 7, pos[1], 7, pos[2], 7)

            g_EntVecs[g_EntCount][0] = str_to_num(pos[0])
            g_EntVecs[g_EntCount][1] = str_to_num(pos[1])
            g_EntVecs[g_EntCount][2] = str_to_num(pos[2])

            if(iParamCount == 5)    // Simon Logic: store item angle (yaw) - 5th alternative value
                g_EntAngle[g_EntCount] = str_to_num(pos[3])
            else
                g_EntAngle[g_EntCount] = 0

            g_EntType[g_EntCount] = 0 // clear the data - if item editor was enabled, there might be some data for restricted items...

            if (CWRAP(EntName, "item_longjump") && (!(IsRestricted[ITEM_LONGJUMP]) || g_EditorEnabled))
                g_EntType[g_EntCount] = ITEM_LONGJUMP
            else if (CWRAP(EntName, "item_healthkit") && (!(IsRestricted[ITEM_MEDKIT]) || g_EditorEnabled))
                g_EntType[g_EntCount] = ITEM_MEDKIT
            else if (CWRAP(EntName, "item_battery") && (!(IsRestricted[ITEM_BATTERY]) || g_EditorEnabled))
                g_EntType[g_EntCount] = ITEM_BATTERY
            else if (CWRAP(EntName, "pistol_ammo") && (!(IsRestricted[ITEM_PISTOLAMMO]) || g_EditorEnabled))
                g_EntType[g_EntCount] = ITEM_PISTOLAMMO
            else if (CWRAP(EntName, "rifle_ammo") && (!(IsRestricted[ITEM_RIFLEAMMO]) || g_EditorEnabled))
                g_EntType[g_EntCount] = ITEM_RIFLEAMMO
            else if (CWRAP(EntName, "shotgun_ammo") && (!(IsRestricted[ITEM_SHOTAMMO]) || g_EditorEnabled))
                g_EntType[g_EntCount] = ITEM_SHOTAMMO
            else if (CWRAP(EntName, "smg_ammo") && (!(IsRestricted[ITEM_SMGAMMO]) || g_EditorEnabled))
                g_EntType[g_EntCount] = ITEM_SMGAMMO
            else if (CWRAP(EntName, "full_ammo") && (!(IsRestricted[ITEM_FULLAMMO]) || g_EditorEnabled))
                g_EntType[g_EntCount] = ITEM_FULLAMMO
            else if (CWRAP(EntName, "armor") && (!(IsRestricted[ITEM_ARMOR]) || g_EditorEnabled))
                g_EntType[g_EntCount] = ITEM_ARMOR
            else if (CWRAP(EntName, "awp_ammo") && (!(IsRestricted[ITEM_AWPAMMO]) || g_EditorEnabled))
                g_EntType[g_EntCount] = ITEM_AWPAMMO
            else if (CWRAP(EntName, "para_ammo") && (!(IsRestricted[ITEM_PARAAMMO]) || g_EditorEnabled))
                g_EntType[g_EntCount] = ITEM_PARAAMMO
            else
            {
                new weaptype = getWeapId(EntName)

                if (weaptype != 0 && (!(IsRestricted[weaptype]) || g_EditorEnabled))
                    g_EntType[g_EntCount] = weaptype
            }

            g_EntCount++
        }
        log_amx("Loaded %d/%d items for map %s., Item Editor is %s.", g_EntCount, iTotalItems, Map, g_EditorEnabled? "enabled":"disabled")
    } else {
        log_amx("No items file found (%s)", File)
        g_Enabled = false
        g_OldStateItemMode = false    
    }
}

SetEnts()
{
    new id
    if (g_EntCount > 0)
    {
        for (new i = 0; i < g_EntCount; i++)
        {
            id = g_EntId[i]
            if (id)
            {
            // NOTE: if the Item Editor menu disappeared, but entities were created already, we may need to destroy them first,
            // then create again with this function - to prevent have double entities...
                if (pev_valid(id))
                {
                    engfunc(EngFunc_RemoveEntity, id)

                    if (g_bPersistentItems)
                    {
                        if(task_exists(id))
                            remove_task(id)
                    }
                }
            }
            g_EntId[i] = MakeEnt(i)
        }
    }
}

CreateEntId()
{
    return engfunc(EngFunc_CreateNamedEntity, g_AllocStr)
}

MakeEnt(item_id)
{
    new entid = CreateEntId()
    if (!entid)
        return 0

    new Float:Vec[3]
    IVecFVec(g_EntVecs[item_id], Vec)
    new type = g_EntType[item_id]

    g_EntTable[entid] = item_id

    set_pev(entid, pev_classname, g_EntClass[type])
    engfunc(EngFunc_SetModel, entid, g_EntModels[type])

    //set_pev(entid, pev_origin, Vec)
    engfunc(EngFunc_SetOrigin, entid, Vec)
    set_pev(entid, pev_movetype, MOVETYPE_TOSS)
    set_pev(entid, pev_solid, SOLID_TRIGGER)
    // Simon Logic: set an angle of item
    Vec[0] = 0.0
    Vec[1] = float(g_EntAngle[item_id])
    Vec[2] = 0.0
    set_pev(entid, pev_angles, Vec)
    if ((g_bPersistentItems))
    {
        // Simon Logic: speed up item falling down
        Vec[0] = 0.0; Vec[1] = 0.0;    Vec[2] = -1999.0
        set_pev(entid, pev_velocity, Vec)
    
        // Simon Logic: hide item and launch a task to init item when it's fully
        // on gound
        set_pev(entid, pev_effects, pev(entid, pev_effects) & EF_NODRAW)
    
        new arrParams[3]
        arrParams[0] = entid // item id
        arrParams[1] = 0     // attempt nr.0
        arrParams[2] = true  // init bounding box
        set_task(0.2, "taskMaterialize", entid, arrParams, sizeof(arrParams))
    }
    else
    {
        new arrParams[3]
        arrParams[0] = entid // item id
        arrParams[1] = 0     // attempt nr.0
        arrParams[2] = true  // init bounding box
        set_task(0.2, "taskSetBoxSize", entid, arrParams, sizeof(arrParams))

        if (type <= 30)    // Is it a Weapon?
            set_pev(entid, pev_velocity,  Float:{0.0, 0.0, 0.0})
    }
    return entid
}

//-----------------------------------------------------------------------------
// Simon Logic: i moved common parts of code into one function; also
// see req#367
public removeRespawnableItem(id)
{
    if (!g_bPersistentItems)
    {
        static item_id; item_id = g_EntTable[id]

        engfunc(EngFunc_RemoveEntity, id)
        g_EntId[item_id] = 0
        g_EntTable[id] = -1

        new arr[1]; arr[0] = item_id
        set_task(g_itemTime, "taskReplenish", _, arr, sizeof(arr))
    }
    else
    {
        new arrParams[3]
        new Float:vecOrigin[3]
    
        set_pev(id, pev_effects, EF_NODRAW | pev(id, pev_effects))
        // disable call of touch function for this entity
        set_pev(id, pev_solid, SOLID_NOT)
        pev(id, pev_origin, vecOrigin)
        engfunc(EngFunc_SetOrigin, id, vecOrigin)
    
        arrParams[0] = id
        arrParams[1] = 0
        arrParams[2] = false
        set_task(g_itemTime, "taskMaterialize", id, arrParams, sizeof(arrParams))
    }
}

public hook_touch(ptr, ptd)
{
    static item_type
    static ammo_via_offset

    if (!csdm_active())
        return FMRES_HANDLED

    if (!g_Enabled)
        return FMRES_HANDLED

    if (g_EntTable[ptr] < 0)
        return FMRES_HANDLED

    if (ptd < 1 || ptd > g_MaxPlayers)
        return FMRES_HANDLED

    if (!is_user_connected(ptd))
        return FMRES_HANDLED

// Simon Logic start
    if(!(pev(ptr, pev_movetype) & MOVETYPE_TOSS)) // ignore entities with "wrong" physics
        return FMRES_IGNORED
    if(pev(ptr, pev_effects) & EF_NODRAW) // ignore invisible entities
        return FMRES_IGNORED
    if(pev(ptr, pev_solid) & SOLID_BSP) // ignore elevators, walls etc.
        return FMRES_IGNORED
    if (g_EntTable[ptr] < 0)
        return FMRES_IGNORED
    if(pev(ptd, pev_deadflag) != DEAD_NO) // ignore dead players
        return FMRES_IGNORED
// Simon Logic end

//    new item_id[1], item_type

//    item_id[0] = g_EntTable[ptr]
    item_type = (g_EntTable[ptr] < MAX_ITEMS) ? g_EntType[g_EntTable[ptr]] : g_EntTable[ptr]

    // Death Pack
    if (item_type > ITEM_PACK)
    {
        new packid = item_type - ITEM_PACK
        new maxiter = g_PackContents[packid][SLOT_WP_COUNT] + SLOTS_AUX

        new weap, weapname[24]

        if(g_droppacks == DROP_CS_PACK)
        {
            giveItemBattery(ptd, false)
            giveItemMedkit(ptd, false)
        }

        emit_sound(ptd, CHAN_ITEM, "items/ammopickup2.wav", 0.85, ATTN_NORM, 0, 150)

        // NOTE: when weapon is disappead on drop it can be packed into
        // death pack; otherwise only ammo & grenades will be packed, because
        // active weapon is dropped on death
        
        // TODO: what about another weapons in backpack? currently they just
        // disappear if [weapons_stay] <> 0

        if(!g_iCfgWeaponStayTime)
        {   // give weapons, ammo & grenades
            for (new i = SLOTS_AUX; i < maxiter; i++)
            {
                weap = g_PackContents[packid][i]
                if(!weap || weap == CSW_C4)
                    continue

                if(CanGetWeapon(ptd, weap, ammo_via_offset))
                {
                    if(ammo_via_offset)
                        giveWeaponAgain(ptd, weap, ammo_via_offset)
                    else {
                        get_weaponname(weap, weapname, sizeof(weapname)-1)
                        csdm_give_item(ptd, weapname)
                    }
                }
                else
                    GiveAmmo(ptd, g_Weap2Ammo[weap])
            }
        }
        else
        {   // give ammo & grenades only (no weapons!)
            for(new i=SLOTS_AUX; i<maxiter; i++)
            {
                weap = g_PackContents[packid][i]
                if(!weap || weap == CSW_C4)
                    continue

                if(isGrenadeItem(weap))
                {
                    if(CanGetWeapon(ptd, weap, ammo_via_offset))
                    {
                        if(ammo_via_offset)
                            giveWeaponAgain(ptd, weap, ammo_via_offset)
                        else {
                            get_weaponname(weap, weapname, sizeof(weapname)-1)
                            csdm_give_item(ptd, weapname)
                        }
                    }
                }
                else
                    GiveAmmo(ptd, g_Weap2Ammo[weap])
            }
        }

        if(g_PackContents[packid][SLOT_LONGJUMP] == ITEM_LONGJUMP && !HasLongJump[ptd])
        {
            csdm_give_item(ptd, "item_longjump")
            HasLongJump[ptd] = true
            printLongJumpHelp(ptd)
        }

        remove_task(ptr)
        engfunc(EngFunc_RemoveEntity, ptr)
        g_EntTable[ptr] = -1
        g_PackID[packid] = true
        ZeroPack(packid)

        return FMRES_HANDLED
    }    
    switch(item_type)
    {
        case ITEM_PISTOLAMMO..ITEM_PARAAMMO: { // Ammo
            if (CanGetAmmo(ptd, item_type))
            {
                GiveAmmo(ptd, item_type)
                removeRespawnableItem(ptr)
            }
        }

        case 1..30: { // Weapon
            if(CanGetWeapon(ptd, item_type, ammo_via_offset))
            {
                new weapname[24]

                get_weaponname(item_type, weapname, 23)
                if(ammo_via_offset)
                    giveWeaponAgain(ptd, item_type, ammo_via_offset)
                else
                    csdm_give_item(ptd, weapname)
                removeRespawnableItem(ptr)
            }
            else if(user_has_weapon(ptd, item_type) && CanGetAmmo(ptd, g_Weap2Ammo[item_type]))
            {    // Simon Logic: req#342

//                server_print("[CSDM_DEBUG] player[%d] got weapon[%d] as ammo bonus", ptd, item_type)

                GiveAmmo(ptd, g_Weap2Ammo[item_type])
                removeRespawnableItem(ptr)
            }
        }

        case ITEM_BATTERY: { // Battery
            if (giveItemBattery(ptd))
            {
                removeRespawnableItem(ptr)
            }
        }

        case ITEM_MEDKIT: { // Medkit
            if (giveItemMedkit(ptd))
            {
                removeRespawnableItem(ptr)
            }
        }

        case ITEM_ARMOR: { // Armor
            if (get_user_armor(ptd) < 100)
            {
                csdm_give_item(ptd, "item_assaultsuit")
                removeRespawnableItem(ptr)
            }
        }

        case ITEM_FULLAMMO: { // Full Ammo
            if (CanGetAmmo(ptd, ITEM_PISTOLAMMO) || CanGetAmmo(ptd, ITEM_RIFLEAMMO) || CanGetAmmo(ptd, ITEM_SHOTAMMO) || CanGetAmmo(ptd, ITEM_SMGAMMO)
                || CanGetAmmo(ptd, ITEM_AWPAMMO) || CanGetAmmo(ptd, ITEM_PARAAMMO))
            {
                GiveAmmo(ptd, ITEM_PISTOLAMMO)
                GiveAmmo(ptd, ITEM_RIFLEAMMO)
                GiveAmmo(ptd, ITEM_SHOTAMMO)
                GiveAmmo(ptd, ITEM_SMGAMMO)
                GiveAmmo(ptd, ITEM_AWPAMMO)
                GiveAmmo(ptd, ITEM_PARAAMMO)
                removeRespawnableItem(ptr)
            }
        }

        case ITEM_LONGJUMP: { // Longjump
            if (!HasLongJump[ptd])
            {
                csdm_give_item(ptd, "item_longjump")
                HasLongJump[ptd] = true
                emit_sound(ptd, CHAN_ITEM, "items/clipinsert1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                removeRespawnableItem(ptr)
                printLongJumpHelp(ptd)
            }
        }
    }

    return FMRES_HANDLED
}

//-----------------------------------------------------------------------------
stock printLongJumpHelp(pid)
{
    if(g_bSkipHelp[pid]) return
    g_bSkipHelp[pid] = true
    client_print(pid, print_chat, "® Чтобы использовать LongJump зажимай СTRL+SPACE!")
}

//-----------------------------------------------------------------------------

public taskReplenish(arr[1]) // item respawn
{    // NO STATIC VARS!
    new item_id; item_id = arr[0]

    g_EntId[item_id] = MakeEnt(item_id)
    if(g_EntId[item_id]) {
        // NOTE: original volume is 1.0, but for CS it's better to make it
        // lower a bit
        emit_sound(g_EntId[item_id], CHAN_WEAPON, "items/suitchargeok1.wav", 0.85, ATTN_NORM, 0, 150)
    }
}

public taskMaterialize(arr[3]) // arr = [ent_id, attempt, set_bbox]
{   // NO STATIC VARS!
    new id; id = arr[0]
    new iTemp
    new Float:vecTemp[3]

    if(!pev_valid(id)) {
        // NOTE: this should not normally happen
        g_EntTable[id] = -1
        return
    }
            
    pev(id, pev_velocity, vecTemp)
    if(vecTemp[2]) { // item is still falling
        if(arr[1] >= MAX_MATERIALIZE_ATTEMPTS) {
            // kill item
            engfunc(EngFunc_RemoveEntity, id)
            g_EntTable[id] = -1
        } else {
            // SetThink emulation...
            arr[1]++
            set_task(0.2, "taskMaterialize", id, arr, sizeof(arr))
        }
        return
    }

    iTemp = pev(id, pev_effects)
    if(iTemp & EF_NODRAW || pev(id, pev_solid) == SOLID_NOT) {
        // changing from invisible state to visible
        emit_sound(id, CHAN_WEAPON, "items/suitchargeok1.wav", 0.85, ATTN_NORM, 0, 150)
        iTemp &= ~EF_NODRAW
        iTemp |= EF_MUZZLEFLASH
        set_pev(id, pev_effects, iTemp)
        set_pev(id, pev_solid, SOLID_TRIGGER)
        // activate solidness
        pev(id, pev_origin, vecTemp)
        engfunc(EngFunc_SetOrigin, id, vecTemp)
    }
    
    // NOTE: on round start EF_NODRAW or SOLID_NO can be forced to reset
    // for each entity :(
    
    if(arr[2])
        setEntityBoxSize(id, g_EntType[g_EntTable[id]])
}

public taskSetBoxSize(arr[3]) // arr = [ent_id, attempt, set_bbox]
{
    new id; id = arr[0]
    new Float:vecTemp[3]

    if(!pev_valid(id)) {
        // NOTE: this should not normally happen
        g_EntTable[id] = -1
        return
    }
            
    pev(id, pev_velocity, vecTemp)
    if(vecTemp[2]) { // item is still falling
        if(arr[1] >= MAX_MATERIALIZE_ATTEMPTS) {
            // kill item
            engfunc(EngFunc_RemoveEntity, id)
            g_EntTable[id] = -1
        } else {
            // SetThink emulation...
            arr[1]++
            set_task(0.2, "taskSetBoxSize", id, arr, sizeof(arr))
        }
        return
    }

    
    if(arr[2])
        setEntityBoxSize(id, g_EntType[g_EntTable[id]])
}

/*
public Replenish(item_id[])
{
    g_EntId[item_id[0]] = MakeEnt(item_id[0])
    emit_sound(g_EntId[item_id[0]], CHAN_ITEM, "items/suitchargeok1.wav", 0.85, ATTN_NORM, 0, 150)
}
*/

public csdm_PostDeath(killer, victim, headshot, const weapon[])
{
    if (!g_Enabled || !csdm_active())
        return

    if (HasLongJump[victim])
        HasLongJump[victim] = false
}
public client_death(killer, victim)
{
    if (!g_Enabled || !csdm_active())
        return

    if (HasLongJump[victim])
        HasLongJump[victim] = false
}
public csdm_RoundRestart()
{
    if ((!g_Enabled) || !csdm_active())
        return

    new players[32], num, player

    get_players(players, num)

    for (new i = 0; i < num; i++)
    {
        player = players[i]
        
        if (HasLongJump[player] && is_user_alive(player))
            csdm_give_item(player, "item_longjump")
    }

    destroyAllPacks()
    destroyAllItems(false)
    SetEnts()
}

public csdm_PreDeath(killer, victim, headshot, const weapon[])
{
    if (!g_Enabled || !g_droppacks || !csdm_active())
        return

    new packid = GetPackId()
    if (packid < 0)
        return

    new entid = CreateEntId()
    if (!entid)
    {
        g_PackID[packid] = true
        return
    }

    new Float:vecPos[3], Float:vecVel[3]//, Orig[3]

    //get_user_origin(victim, Orig) // Simon Logic: this is lame function =)
    //IVecFVec(Orig, Pos)
    pev(victim, pev_origin, vecPos)
    pev(victim, pev_velocity, vecVel)

    g_EntTable[entid] = ITEM_PACK + packid

    set_pev(entid, pev_classname, "csdm_deathpack")
    engfunc(EngFunc_SetModel, entid, "models/w_weaponbox.mdl")
    set_pev(entid, pev_solid, SOLID_TRIGGER)
    set_pev(entid, pev_movetype, MOVETYPE_TOSS)
    set_pev(entid, pev_owner, victim)

    //set_pev(entid, pev_origin, Pos)
    engfunc(EngFunc_SetOrigin, entid, vecPos)
    
    // NOTE: this is against CWeaponBox::Spawn() but it's still proper
    setEntityBoxSize(entid, ITEM_PACK)
    
    // Simon Logic: stolen from CBasePlayer::PackDeadPlayerItems(), also
    // this is req#351
    vecVel[0] *= 1.2
    vecVel[1] *= 1.2
    vecVel[2] *= 1.2
    set_pev(entid, pev_velocity, vecVel)

    new Weapons[32], weapnum = 0
    get_user_weapons(victim, Weapons, weapnum)

    // TODO: pack exact amount of bullets instead of weapons

    // NOTE: first 4 elements are system:
    // [0]=weapon_count [1]=entid [2]=packid [3]=longjump
    for(new i=0; i<weapnum; i++)
    {
        g_PackContents[packid][i + SLOTS_AUX] = Weapons[i]
    }

    if (HasLongJump[victim])
    {
        g_PackContents[packid][SLOT_LONGJUMP] = ITEM_LONGJUMP
    }

    g_PackContents[packid][SLOT_WP_COUNT] = weapnum
    g_PackContents[packid][SLOT_ENT_ID] = entid
    g_PackContents[packid][SLOT_PACK_ID] = packid

    new info[2]
    info[0] = entid
    info[1] = packid
    set_task(g_packTime, "DeletePack", entid, info, sizeof(info))
}


public DeletePack(pack_info[])
{
    new packid = pack_info[1]
    new entid = pack_info[0]
    
    if (pev_valid(entid))
        engfunc(EngFunc_RemoveEntity, entid)
    g_PackID[packid] = true // set slot to free
    g_EntTable[entid] = -1
    ZeroPack(packid)
}

GetPackId()
{
    for (new i = 1; i < MAX_PACKS; i++)
    {
        if (g_PackID[i])
        {
            g_PackID[i] = false
            return i
        }
    }

    return -1
}

ZeroPack(packid)
{
    arrayset(g_PackContents[packid], 0, SLOTS)
}

/*
public csdm_HandleDrop(id, weapon, death)
{
    return (g_Enabled && g_droppacks && csdm_active()) ? CSDM_DROP_REMOVE : CSDM_DROP_CONTINUE
}
*/

bool:CanGetAmmo(id, ammotype)
{
    switch (ammotype)
    {
        case ITEM_PISTOLAMMO:
        {
            if (cs_get_user_bpammo(id, CSW_DEAGLE) < g_MaxBPAmmo[CSW_DEAGLE])
                return true
            if (cs_get_user_bpammo(id, CSW_P228) < g_MaxBPAmmo[CSW_P228])
                return true
            if (cs_get_user_bpammo(id, CSW_USP) < g_MaxBPAmmo[CSW_USP])
                return true
            if (cs_get_user_bpammo(id, CSW_GLOCK18) < g_MaxBPAmmo[CSW_GLOCK18])
                return true
            if (cs_get_user_bpammo(id, CSW_FIVESEVEN) < g_MaxBPAmmo[CSW_FIVESEVEN])
                return true
        }
        case ITEM_SHOTAMMO:
        {
            if (cs_get_user_bpammo(id, CSW_XM1014) < g_MaxBPAmmo[CSW_XM1014])
                return true
        }
        case ITEM_RIFLEAMMO:
        {
            if (cs_get_user_bpammo(id, CSW_M4A1) < g_MaxBPAmmo[CSW_M4A1])
                return true
            if (cs_get_user_bpammo(id, CSW_AK47) < g_MaxBPAmmo[CSW_AK47])
                return true
        }
        case ITEM_SMGAMMO:
        {
            if (cs_get_user_bpammo(id, CSW_MP5NAVY) < g_MaxBPAmmo[CSW_MP5NAVY])
                return true
            if (cs_get_user_bpammo(id, CSW_MAC10) < g_MaxBPAmmo[CSW_MAC10])
                return true
            if (cs_get_user_bpammo(id, CSW_P90) < g_MaxBPAmmo[CSW_P90])
                return true
        }
        case ITEM_AWPAMMO:
        {
            if (cs_get_user_bpammo(id, CSW_AWP) < g_MaxBPAmmo[CSW_AWP])
                return true
        }
        case ITEM_PARAAMMO:
        {
            if (cs_get_user_bpammo(id, CSW_M249) < g_MaxBPAmmo[CSW_M249])
                return true
        }
    }
    
    return false
}

// Simon Logic - TODO: implement amount argument to give exact number of bullets
GiveAmmo(id, ammotype, amount=-1)
{
    if(amount < 0)
    {
        switch (ammotype)
        {
            case ITEM_PISTOLAMMO:
            {
                csdm_give_item(id, "ammo_357sig")
                csdm_give_item(id, "ammo_57mm")
                csdm_give_item(id, "ammo_45acp")
                csdm_give_item(id, "ammo_50ae")
                csdm_give_item(id, "ammo_9mm")
            }
            case ITEM_SHOTAMMO:
            {
                csdm_give_item(id, "ammo_buckshot")
            }
            case ITEM_RIFLEAMMO:
            {
                csdm_give_item(id, "ammo_762nato")
                csdm_give_item(id, "ammo_556nato")
            }
            case ITEM_SMGAMMO:
            {
                csdm_give_item(id, "ammo_9mm")
                csdm_give_item(id, "ammo_45acp")
                csdm_give_item(id, "ammo_57mm") // P90 needs it...
            }
            case ITEM_AWPAMMO:
            {
                csdm_give_item(id, "ammo_338magnum")
            }
            case ITEM_PARAAMMO:
            {
                csdm_give_item(id, "ammo_556natobox")
            }
        }
    }
    else if(amount > 0)
    {
        // TODO: implement "amount" param
        switch(ammotype)
        {
            case ITEM_PISTOLAMMO:
            {
            }
            case ITEM_SHOTAMMO:
            {
            }
            case ITEM_RIFLEAMMO:
            {
            }
            case ITEM_SMGAMMO:
            {
            }
            case ITEM_AWPAMMO:
            {
            }
            case ITEM_PARAAMMO:
            {
            }
        }
    }
}

// Simon Logic: added argument ammo_via_offset, which gets a value when user
// can get this weapon but it should be given via offset & not via give_xxx();
// this value may be filled for grenades only
bool:CanGetWeapon(id, wid, &ammo_via_offset)
{
    new slot = g_WeaponSlots[wid]

    ammo_via_offset = 0

    if(slot == 4) // grenade slot
    {
        new ammo; ammo = cs_get_user_bpammo(id, wid)
        switch(wid)
        {
            case CSW_HEGRENADE: {
                if(ammo >= g_iMaxNadesH)
                    return false
                if(ammo >= g_MaxBPAmmo[CSW_HEGRENADE])
                    ammo_via_offset = ammo + 1
            }
            case CSW_SMOKEGRENADE: {
                if(ammo >= g_iMaxNadesS)
                    return false
                if(ammo >= g_MaxBPAmmo[CSW_SMOKEGRENADE])
                    ammo_via_offset = ammo + 1
            }
            case CSW_FLASHBANG: {
                if(ammo >= g_iMaxNadesF)
                    return false
                if(ammo >= g_MaxBPAmmo[CSW_FLASHBANG])
                    ammo_via_offset = ammo + 1
            }
        }
    }
    else
    {
        new Weapons[MAX_WEAPONS], num
        
        get_user_weapons(id, Weapons, num)
        
        for(new i = 0; i < num; i++)
        {   // NOTE: player can have only one weapon per slot
            if (g_WeaponSlots[Weapons[i]] == slot)
                return false
            /*if(i == wid)
                return false*/
        }
    }
    return true
}

destroyAllItems(bool:mapchange = true)
{
    new iter, entid

    // abort any respawn task to avoid double respawns on plugin reload
    if (task_exists())
        remove_task()

    // destroy all items
    for (iter = 0; iter < MAX_ITEMS; iter++)
    {
        entid = g_EntId[iter]
        if (pev_valid(entid))
        {
            if ((g_bPersistentItems) && (task_exists(entid)))
            {
                remove_task(entid)
            }
            engfunc(EngFunc_RemoveEntity, entid)
        }
    }

    arrayset(g_EntId, 0, MAX_ITEMS)
    arrayset(g_EntTable, -1, MAX_ENTS)
    arrayset(g_Ent, -1, sizeof(g_Ent))

    if (mapchange)
        arrayset(g_EntType, 0, MAX_ITEMS)
}

destroyAllPacks()
{
    new packid, entid    

    for (new i = 1; i < MAX_PACKS; i++)
    {
        if (g_PackContents[i][0])
        {
            entid = g_PackContents[i][1]
            packid = g_PackContents[i][2]

            if (pev_valid(entid))
                engfunc(EngFunc_RemoveEntity, entid)

            remove_task(packid)

            ZeroPack(packid)
        }
    }

    arrayset(g_PackID, true, MAX_PACKS)
}

stock getWeapId(wp[])
{
    if (equali(wp, "weapon_p228")) {
        return CSW_P228
    } else if (equali(wp, "weapon_scout")) {
        return CSW_SCOUT
    } else if (equali(wp, "weapon_hegrenade")) {
        return CSW_HEGRENADE
    } else if (equali(wp, "weapon_xm1014")) {
        return CSW_XM1014
    } else if (equali(wp, "weapon_c4")) {
        return CSW_C4
    } else if (equali(wp, "weapon_mac10")) {
        return CSW_MAC10
    } else if (equali(wp, "weapon_aug")) {
        return CSW_AUG
    } else if (equali(wp, "weapon_smokegrenade")) {
        return CSW_SMOKEGRENADE
    } else if (equali(wp, "weapon_elite")) {
        return CSW_ELITE
    } else if (equali(wp, "weapon_fiveseven")) {
        return CSW_FIVESEVEN
    } else if (equali(wp, "weapon_ump45")) {
        return CSW_UMP45
    } else if (equali(wp, "weapon_sg550")) {
        return CSW_SG550
    } else if (equali(wp, "weapon_galil")) {
        return CSW_GALIL
    } else if (equali(wp, "weapon_famas")) {
        return CSW_FAMAS
    } else if (equali(wp, "weapon_usp")) {
        return CSW_USP
    } else if (equali(wp, "weapon_glock18")) {
        return CSW_GLOCK18
    } else if (equali(wp, "weapon_awp")) {
        return CSW_AWP
    } else if (equali(wp, "weapon_mp5navy")) {
        return CSW_MP5NAVY
    } else if (equali(wp, "weapon_m249")) {
        return CSW_M249
    } else if (equali(wp, "weapon_m3")) {
        return CSW_M3
    } else if (equali(wp, "weapon_m4a1")) {
        return CSW_M4A1
    } else if (equali(wp, "weapon_tmp")) {
        return CSW_TMP
    } else if (equali(wp, "weapon_g3sg1")) {
        return CSW_G3SG1
    } else if (equali(wp, "weapon_flashbang")) {
        return CSW_FLASHBANG
    } else if (equali(wp, "weapon_deagle")) {
        return CSW_DEAGLE
    } else if (equali(wp, "weapon_sg552")) {
        return CSW_SG552
    } else if (equali(wp, "weapon_ak47")) {
        return CSW_AK47
    } else if (equali(wp, "weapon_knife")) {
        return CSW_KNIFE
    } else if (equali(wp, "weapon_p90")) {
        return CSW_P90
    }
    
    return 0
}

//-----------------------------------------------------------------------------
// Simon Logic's stocks
//-----------------------------------------------------------------------------
stock assignMaxNades(&var, val[], wid)
{
    var = str_to_num(val)
    if(var > MAX_GRENADES)
        var = MAX_GRENADES
    else if(var < 0)
        var = g_MaxBPAmmo[wid]
}
//-----------------------------------------------------------------------------
stock setEntityBoxSize(ent_id, type)
{
#if defined _ASSERT    
    assert 0 <= type <= ITEM_PACK
#endif
    if(type <= 30 && !isGrenadeItem(type))
    {    // it's a weapon
        engfunc(EngFunc_SetSize, ent_id, {-24.0, -24.0, 0.0}, {24.0, 24.0, 16.0})
    }
    else
        engfunc(EngFunc_SetSize, ent_id, {-16.0, -16.0, 0.0}, {16.0, 16.0, 16.0})
}
//-----------------------------------------------------------------------------
stock bool:isGrenadeItem(w_id)
{
#if defined _ASSERT    
    assert 0 <= w_id <= 30
#endif
    return w_id == CSW_HEGRENADE || w_id == CSW_SMOKEGRENADE || w_id == CSW_FLASHBANG
}
//-----------------------------------------------------------------------------
stock sendItemPickupMsg(id, const item_name[])
{
    message_begin(MSG_ONE, g_msgItemPickup, _, id)
    write_string(item_name)
    message_end()
}
//-----------------------------------------------------------------------------
stock bool:isWeapon(ent_id) // actually is a weaponbox
{
    static sBuffer[11] // sizeof("weaponbox") + 1
    
    pev(ent_id, pev_classname, sBuffer, sizeof(sBuffer)-1)
    
    return bool:equal(sBuffer, "weaponbox")
}
//-----------------------------------------------------------------------------
stock bool:giveItemBattery(ptd, full_ack = true)
{
    static value
    
    value = get_user_armor(ptd)
    
    if(value >= 100)
        return false
    
    value += g_battery
    if(value > 100)
        value = 100
    
    set_pev(ptd, pev_armorvalue, float(value))

    if (!is_user_bot(ptd))
        sendItemPickupMsg(ptd, "item_battery")

    if(full_ack) {
        emit_sound(ptd, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    }

    return true
}
//-----------------------------------------------------------------------------
stock bool:giveItemMedkit(ptd, full_ack = true)
{
    static Float:fValue, Float:fMaxHealth

    pev(ptd, pev_max_health, fMaxHealth)
    
    fValue = float(get_user_health(ptd))
    if(fValue >= fMaxHealth)
        return false
    
    fValue += g_medkit
    if(fValue > fMaxHealth)
        fValue = fMaxHealth

    set_pev(ptd, pev_health, fValue)

    if (!is_user_bot(ptd))
        sendItemPickupMsg(ptd, "item_healthkit")

    if(full_ack) {
        emit_sound(ptd, CHAN_ITEM, "items/smallmedkit1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    }

    return true
}
//-----------------------------------------------------------------------------
stock giveWeaponAgain(ptd, item_id, ammo) // grenades supported only
{
#if defined _ASSERT    
    assert 0 <= item_id <= 30
#endif
    cs_set_user_bpammo(ptd, item_id, ammo)
    if (is_user_bot(ptd))
        return
    switch(item_id)
    {
        case CSW_HEGRENADE: {
            message_begin(MSG_ONE, g_msgAmmoPickup, _, ptd)
            write_byte(12)
            write_byte(1)
            message_end()
        }
        case CSW_SMOKEGRENADE: {
            message_begin(MSG_ONE, g_msgAmmoPickup, _, ptd)
            write_byte(13)
            write_byte(1)
            message_end()
        }            
        case CSW_FLASHBANG: {
            message_begin(MSG_ONE, g_msgAmmoPickup, _, ptd)
            write_byte(11)
            write_byte(1)
            message_end()
        }
    }
    
    emit_sound(ptd, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
//-----------------------------------------------------------------------------
// Simon Logic: seems not used here
stock bool:HasWeapon(id, wid) // check if player already has a weapon
{
    new i, Weapons[MAX_WEAPONS], num

    get_user_weapons(id, Weapons, num)
    for(i=0; i<num && Weapons[i]!=wid; i++) {}
    
    return (i != num)
}
//-----------------------------------------------------------------------------


// The main part of Item Editor - some code had to be changed also above...

buildMenu()
{
// Create Menu
    g_MainMenuID = menu_create(g_MainMenu, "m_MainHandler")

//Menu Callbacks
    g_cMain = menu_makecallback("c_Main")

    menu_additem(g_MainMenuID, "Добавить Предметы","1", 0, g_cMain)
    menu_additem(g_MainMenuID, "Переместить выбраный предмет","2", 0, g_cMain)
    menu_additem(g_MainMenuID, "Удалить выбраный предмет","3", 0, g_cMain)
    menu_additem(g_MainMenuID, "Выбрать выбраный предмет", "4", 0, g_cMain)
    menu_additem(g_MainMenuID, "Узнать кординаты вашего места", "5", 0, -1)
    menu_additem(g_MainMenuID, "Информация о энтах","6", 0, g_cMain)
    menu_additem(g_MainMenuID, "Назад", "7", 0, -1)

//Add Items Menu
    g_AddItemsMenuID = menu_create(g_AddItemsMenu, "m_AddItemsHandler")
    g_cAddItems = menu_makecallback("c_AddItems")

    menu_additem(g_AddItemsMenuID, "Добавить Пистолеты","1", 0, g_cAddItems)
    menu_additem(g_AddItemsMenuID, "Добавить SMG","2", 0, g_cAddItems)
    menu_additem(g_AddItemsMenuID, "Добавить Винтовки(1)","3", 0, g_cAddItems)
    menu_additem(g_AddItemsMenuID, "Добавить Винтовки(2)","4", 0, g_cAddItems)
    menu_additem(g_AddItemsMenuID, "Добавить Друбовики","5", 0, g_cAddItems)
    menu_additem(g_AddItemsMenuID, "Добавить Экиперовку","6", 0, g_cAddItems)
    menu_additem(g_AddItemsMenuID, "Назад","7", 0, -1)

//Add Pistols Menu
    g_AddPistolsMenuID = menu_create(g_AddPistolsMenu, "m_AddPistolsHandler")
    g_cAddPistols = menu_makecallback("c_AddPistols")

    menu_additem(g_AddPistolsMenuID, "Добавить Glock18","1", 0, g_cAddPistols)
    menu_additem(g_AddPistolsMenuID, "Добавить Usp","2", 0, g_cAddPistols)
    menu_additem(g_AddPistolsMenuID, "Добавить Elite","3", 0, g_cAddPistols)
    menu_additem(g_AddPistolsMenuID, "Добавить Fiveseven","4", 0, g_cAddPistols)
    menu_additem(g_AddPistolsMenuID, "Добавить P228","5", 0, g_cAddPistols)
    menu_additem(g_AddPistolsMenuID, "Добавить Deagle","6", 0, g_cAddPistols)
    menu_additem(g_AddPistolsMenuID, "Добавить Патроны","7", 0, g_cAddPistols)
    menu_additem(g_AddPistolsMenuID, "Назад","8", 0, -1)
    menu_setprop(g_AddPistolsMenuID, MPROP_PERPAGE, 0)

//Add SMG Menu
    g_AddSmgMenuID = menu_create(g_AddSmgMenu, "m_AddSmgHandler")
    g_cAddSmg = menu_makecallback("c_AddSmg")

    menu_additem(g_AddSmgMenuID, "Добавить P90","1", 0, g_cAddSmg)
    menu_additem(g_AddSmgMenuID, "Добавить Tmp","2", 0, g_cAddSmg)
    menu_additem(g_AddSmgMenuID, "Добавить Ump45","3", 0, g_cAddSmg)
    menu_additem(g_AddSmgMenuID, "Добавить Mac10","4", 0, g_cAddSmg)
    menu_additem(g_AddSmgMenuID, "Добавить Mp5navy","5", 0, g_cAddSmg)
    menu_additem(g_AddSmgMenuID, "Добавить Патроны","6", 0, g_cAddSmg)
    menu_additem(g_AddSmgMenuID, "Назад","7", 0, -1)
    menu_setprop(g_AddSmgMenuID, MPROP_PERPAGE, 0)

//Add Rifles(1) Menu
    g_AddRifles1MenuID = menu_create(g_AddRifles1Menu, "m_AddRifles1Handler")
    g_cAddRifles1 = menu_makecallback("c_AddRifles1")

    menu_additem(g_AddRifles1MenuID, "Добавить Ak47","1", 0, g_cAddRifles1)
    menu_additem(g_AddRifles1MenuID, "Добавить M4a1","2", 0, g_cAddRifles1)
    menu_additem(g_AddRifles1MenuID, "Добавить Aug","3", 0, g_cAddRifles1)
    menu_additem(g_AddRifles1MenuID, "Добавить Sg552","4", 0, g_cAddRifles1)
    menu_additem(g_AddRifles1MenuID, "Добавить Scout","5", 0, g_cAddRifles1)
    menu_additem(g_AddRifles1MenuID, "Добавить Sg550","6", 0, g_cAddRifles1)
    menu_additem(g_AddRifles1MenuID, "Добавить Патроны","7", 0, g_cAddRifles1)
    menu_additem(g_AddRifles1MenuID, "Назад","8", 0, -1)
    menu_setprop(g_AddRifles1MenuID, MPROP_PERPAGE, 0)

//Add Rifles(2) Menu
    g_AddRifles2MenuID = menu_create(g_AddRifles2Menu, "m_AddRifles2Handler")
    g_cAddRifles2 = menu_makecallback("c_AddRifles2")

    menu_additem(g_AddRifles2MenuID, "Добавить G3sg1","1", 0, g_cAddRifles2)
    menu_additem(g_AddRifles2MenuID, "Добавить Galil","2", 0, g_cAddRifles2)
    menu_additem(g_AddRifles2MenuID, "Добавить Famas","3", 0, g_cAddRifles2)
    menu_additem(g_AddRifles2MenuID, "Добавить пули Винтовки","4", 0, g_cAddRifles2)
    menu_additem(g_AddRifles2MenuID, "Добавить Awp","5", 0, g_cAddRifles2)
    menu_additem(g_AddRifles2MenuID, "Добавить Пули Awp","6", 0, g_cAddRifles2)
    menu_additem(g_AddRifles2MenuID, "Назад","7", 0, -1)
    menu_setprop(g_AddRifles2MenuID, MPROP_PERPAGE, 0)

//Add Shotgun/Machine gun Menu
    g_AddShotgunMenuID = menu_create(g_AddShotgunMenu, "m_AddShotgunHandler")
    g_cAddShotgun = menu_makecallback("c_AddShotgun")

    menu_additem(g_AddShotgunMenuID, "Добавить Xm1014","1", 0, g_cAddShotgun)
    menu_additem(g_AddShotgunMenuID, "Добавить M3","2", 0, g_cAddShotgun)
    menu_additem(g_AddShotgunMenuID, "Добавить Shotgun ammo","3", 0, g_cAddShotgun)
    menu_additem(g_AddShotgunMenuID, "Добавить M249","4", 0, g_cAddShotgun)
    menu_additem(g_AddShotgunMenuID, "Добавить Патроны","5", 0, g_cAddShotgun)
    menu_additem(g_AddShotgunMenuID, "Назад","6", 0, -1)
    menu_setprop(g_AddShotgunMenuID, MPROP_PERPAGE, 0)

//Add Equipement Menu
    g_AddEquipMenuID = menu_create(g_AddEquipMenu, "m_AddEquipHandler")
    g_cAddEquip = menu_makecallback("c_AddEquip")

    menu_additem(g_AddEquipMenuID, "Добавить Longjump","1", 0, g_cAddEquip)
    menu_additem(g_AddEquipMenuID, "Добавить Аптечку","2", 0, g_cAddEquip)
    menu_additem(g_AddEquipMenuID, "Добавить Броню","3", 0, g_cAddEquip)
    menu_additem(g_AddEquipMenuID, "Добавить Батарейку","4", 0, g_cAddEquip)
    menu_additem(g_AddEquipMenuID, "Добавить Все патроны","5", 0, g_cAddEquip)
    menu_additem(g_AddEquipMenuID, "Добавить HE гранату","6", 0, g_cAddEquip)
    menu_additem(g_AddEquipMenuID, "Добавить FB гранату","7", 0, g_cAddEquip)
    menu_additem(g_AddEquipMenuID, "Добавить SG гранату","8", 0, g_cAddEquip)
    menu_additem(g_AddEquipMenuID, "Назад","9", 0, -1)
    menu_setprop(g_AddEquipMenuID, MPROP_PERPAGE, 0)
}

public m_MainHandler(id, menu, item)
{
    if (item == MENU_EXIT)
    {
        destroyAllItems(false)
        menu_destroy(menu)    
//     need switch back the item_mode to the state it was before starting item editor...
        g_EditorEnabled = false
        g_Enabled = g_OldStateItemMode
        if (g_Enabled)
        {
            ReadFile()
            if (csdm_active())
                SetEnts()
        }
        return PLUGIN_HANDLED
    }

    // Get item info
    new cmd[6], iName[64]
    new access, callback
    
    menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)
    
    new iChoice = str_to_num(cmd)
    
    switch(iChoice)
    {
        case 1:
        {
            menu_display(id, g_AddItemsMenuID, 0)
        }
        case 2:
        {
            new Float:vecs[3], vec[3]
            new Float:angles[3], angle[3]
            new angle_y
            pev(id, pev_origin, vecs)
            FVecIVec(vecs,vec)
            pev(id, pev_v_angle, angles)
            FVecIVec(angles,angle)
            angle_y = angle[1]
            if (g_Ent[id] > -1)
                edit_item(vec, g_Ent[id], angle_y)
            menu_display(id, g_MainMenuID, 0)
        }
        case 3:
        {
            new iorg[3]
            get_user_origin(id, iorg)
            new distance = get_distance(iorg, g_EntVecs[g_Ent[id]])                    
            if ((distance <= 200) && (g_Ent[id] > -1))
            {
                ent_unglow(g_Ent[id])
                delete_item(g_Ent[id])
                g_Ent[id] = closest_item(id)
                if (g_Ent[id] > -1)
                    ent_glow(g_Ent[id],yellow)
            }
            menu_display(id, g_MainMenuID, 0)                
        }
        case 4:
        {
            if (g_Ent[id] > -1)
                ent_unglow(g_Ent[id])
            g_Ent[id] = closest_item(id)
            if (g_Ent[id] > -1)
            {
                ent_glow(g_Ent[id],yellow)
                client_print(id, print_chat, "Ближайший предмет: number %d , def: classname = %s, org[%d,%d,%d]",
                    g_Ent[id] + 1, g_EntClass[g_EntType[g_Ent[id]]], g_EntVecs[g_Ent[id]][0], g_EntVecs[g_Ent[id]][1], g_EntVecs[g_Ent[id]][2])
            }
            else if (g_EntCount == 0)
            {
                client_print(id, print_chat, "There is no item defined yet - nothing to mark.")
            }
            menu_display(id, g_MainMenuID, 0)
        }
        case 5:
        {    
            new Float:Org[3]
            pev(id, pev_origin, Org)

            client_print(id,print_chat,"Кординаты места где вы стоите: %d;^nCurrent Origin: X: %f  Y: %f  Z: %f",
                g_EntCount, Org[0], Org[1], Org[2])
            menu_display(id, g_MainMenuID, 0)
        }
        case 6:
        {
            csdm_entdump(id)
            menu_display(id, g_MainMenuID, 0)
        }
        case 7:
        {
            destroyAllItems(false)
            menu_destroy(menu)    
//         need switch back the item_mode to the state it was before starting item editor...
            g_EditorEnabled = false
            g_Enabled = g_OldStateItemMode
            if (g_Enabled)
            {
                ReadFile()
                if (csdm_active())
                    SetEnts()
            }
            menu_display(id, csdm_main_menu(), 0)
        }
    }
    return PLUGIN_HANDLED
}

public c_Main(id, menu, item)
{
    if (item == MENU_EXIT) return PLUGIN_CONTINUE
    
    new cmd[6], fItem[326], iName[64]
    new access, callback
    
    menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)
    
    new num = str_to_num(cmd)
        
    switch(num)
    {
        case    1:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Add Items - Max Items Limit Reached")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить предметы")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case    2:
        {
            if (g_EntCount < 1)
            {
                format(fItem,325,"Переместить предмет")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else if (g_Ent[id] == -1)
            {
                format(fItem,325,"Переместить предмет")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Переместить на ваше место")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case    3:
        {
            if (g_EntCount < 1)
            {
                format(fItem,325,"Удалить предмет")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else if (g_Ent[id] == -1)
            {
                format(fItem,325,"Удалить предмет")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }            
            else
            {
                new iorg[3]
                get_user_origin(id, iorg)
                new distance = get_distance(iorg, g_EntVecs[g_Ent[id]])
                    
                if (distance > 200)
                {
                    format(fItem,325,"Удалить выбраный предмет")
                    menu_item_setname(menu, item, fItem )
                    return ITEM_DISABLED
                }
                else
                {
                    format(fItem,325,"Удалить выбраный предмет")
                    menu_item_setname(menu, item, fItem )
                    return ITEM_ENABLED
                }
            }
        }
    }
    
    return PLUGIN_HANDLED
}

public m_AddItemsHandler(id, menu, item)
{
    if (item < 0)
    {
        destroyAllItems(false)
        menu_destroy(menu)    
//     need switch back the item_mode to the state it was before starting item editor...
        g_EditorEnabled = false
        g_Enabled = g_OldStateItemMode
        if (g_Enabled)
        {
            ReadFile()
            if (csdm_active())
                SetEnts()
        }
        return PLUGIN_HANDLED
    }

    // Get item info
    new cmd[6], iName[64]
    new access, callback
    
    menu_item_getinfo(menu, item, access, cmd, 5, iName, 63, callback)
    
    new iChoice = str_to_num(cmd)
    
    if (iChoice == 7)
    {
        menu_display (id, g_MainMenuID, 0)
        return PLUGIN_HANDLED
    }

    switch(iChoice)
    {
        case 1:
        {
            menu_display(id, g_AddPistolsMenuID, 0)
        }
        case 2:
        {
            menu_display(id, g_AddSmgMenuID, 0)
        }
        case 3:
        {
            menu_display(id, g_AddRifles1MenuID, 0)
        }
        case 4:
        {
            menu_display(id, g_AddRifles2MenuID, 0)
        }
        case 5:
        {
            menu_display(id, g_AddShotgunMenuID, 0)
        }
        case 6:
        {
            menu_display(id, g_AddEquipMenuID, 0)
        }
    }
    return PLUGIN_HANDLED
}

public c_AddItems(id, menu, item)
{
    if (item < 0) return PLUGIN_CONTINUE
    
    new cmd[6], fItem[326], iName[64]
    new access, callback
    
    menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)
    
    new num = str_to_num(cmd)
    
    switch (num)
  {
        case 1:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Установленно максимум Пистолетов")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Пистолет")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 2:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Установленно максимум Полу-автоматов")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Полу-автомат")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 3:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Установленно максимум Винтовок")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Винтовку(1)")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 4:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Установленно максимум Винтовок")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Винтовку(2)")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 5:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Установленно максимум Друбовиков/M249")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Друбовики/M249")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 6:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Установленно максимум Экиперовки")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Экиперовку")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
    }
    return PLUGIN_HANDLED
}

// Add pistols
public m_AddPistolsHandler(id, menu, item)
{
    if (item < 0)
    {
        destroyAllItems(false)
        menu_destroy(menu)    
//     need switch back the item_mode to the state it was before starting item editor...
        g_EditorEnabled = false
        g_Enabled = g_OldStateItemMode
        if (g_Enabled)
        {
            ReadFile()
            if (csdm_active())
                SetEnts()
        }
        return PLUGIN_HANDLED
    }

    // Get item info
    new cmd[6], iName[64]
    new access, callback

    menu_item_getinfo(menu, item, access, cmd, 5, iName, 63, callback)
    
    new iChoice = str_to_num(cmd)
    
    if (iChoice == 8)
    {
        menu_display (id, g_AddItemsMenuID, 0)
        return PLUGIN_HANDLED
    }

    new Float:vecs[3], vec[3]
    new Float:angles[3], angle[3]
    new angle_y
    pev(id, pev_origin, vecs)
    FVecIVec(vecs,vec)
    pev(id, pev_v_angle, angles)
    FVecIVec(angles,angle)
    angle_y = angle[1]

    switch(iChoice)
    {
        case 1:
        {
            add_item(vec, "weapon_p228", angle_y)
        }
        case 2:
        {
            add_item(vec, "weapon_usp", angle_y)
        }
        case 3:
        {
            add_item(vec, "weapon_elite", angle_y)
        }
        case 4:
        {
            add_item(vec, "weapon_fiveseven", angle_y)
        }
        case 5:
        {
            add_item(vec, "weapon_p228", angle_y)
        }
        case 6:
        {
            add_item(vec, "weapon_deagle", angle_y)
        }
        case 7:
        {
            add_item(vec, "pistol_ammo", angle_y)
        }
    }

    if (g_EntCount < MAX_ITEMS)
        menu_display(id, g_AddPistolsMenuID, 0)
    else
        menu_display(id, g_MainMenuID, 0)

    return PLUGIN_HANDLED
}

public c_AddPistols(id, menu, item)
{
    if (item < 0) return PLUGIN_CONTINUE
    
    new cmd[6], fItem[326], iName[64]
    new access, callback
    
    menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)
    
    new num = str_to_num(cmd)
    
    switch (num)
  {
        case 1:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Glock18")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 2:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Usp")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 3:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Elite")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 4:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Fiveseven")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 5:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить P228")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 6:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Deagle")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 7:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Патроны")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
    }
    return PLUGIN_HANDLED
}

// Add Smg

public m_AddSmgHandler(id, menu, item)
{
    if (item < 0)
    {
        destroyAllItems(false)
        menu_destroy(menu)    
//     need switch back the item_mode to the state it was before starting item editor...
        g_EditorEnabled = false
        g_Enabled = g_OldStateItemMode
        if (g_Enabled)
        {
            ReadFile()
            if (csdm_active())
                SetEnts()
        }
        return PLUGIN_HANDLED
    }

    // Get item info
    new cmd[6], iName[64]
    new access, callback

    menu_item_getinfo(menu, item, access, cmd, 5, iName, 63, callback)
    
    new iChoice = str_to_num(cmd)
    
    if (iChoice == 7)
    {
        menu_display (id, g_AddItemsMenuID, 0)
        return PLUGIN_HANDLED
    }

    new Float:vecs[3], vec[3]
    new Float:angles[3], angle[3]
    new angle_y
    pev(id, pev_origin, vecs)
    FVecIVec(vecs,vec)
    pev(id, pev_v_angle, angles)
    FVecIVec(angles,angle)
    angle_y = angle[1]

    switch(iChoice)
    {
        case 1:
        {
            add_item(vec, "weapon_p90", angle_y)
        }
        case 2:
        {
            add_item(vec, "weapon_tmp", angle_y)
        }
        case 3:
        {
            add_item(vec, "weapon_ump45", angle_y)
        }
        case 4:
        {
            add_item(vec, "weapon_mac10", angle_y)
        }
        case 5:
        {
            add_item(vec, "weapon_mp5navy", angle_y)
        }
        case 6:
        {
            add_item(vec, "smg_ammo", angle_y)
        }
    }

    if (g_EntCount < MAX_ITEMS)
        menu_display(id, g_AddSmgMenuID, 0)
    else
        menu_display(id, g_MainMenuID, 0)

    return PLUGIN_HANDLED
}

public c_AddSmg(id, menu, item)
{
    if (item < 0) return PLUGIN_CONTINUE
    
    new cmd[6], fItem[326], iName[64]
    new access, callback
    
    menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)
    
    new num = str_to_num(cmd)
    
    switch (num)
  {
        case 1:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить P90")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 2:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Tmp")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 3:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Ump45")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 4:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Mac10")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 5:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Mp5navy")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 6:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Патроны")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
    }
    return PLUGIN_HANDLED
}

// Add rifles (1)

public m_AddRifles1Handler(id, menu, item)
{
    if (item < 0)
    {
        destroyAllItems(false)
        menu_destroy(menu)    
//     need switch back the item_mode to the state it was before starting item editor...
        g_EditorEnabled = false
        g_Enabled = g_OldStateItemMode
        if (g_Enabled)
        {
            ReadFile()
            if (csdm_active())
                SetEnts()
        }
        return PLUGIN_HANDLED
    }

    // Get item info
    new cmd[6], iName[64]
    new access, callback
    
    menu_item_getinfo(menu, item, access, cmd, 5, iName, 63, callback)
    
    new iChoice = str_to_num(cmd)
    
    if (iChoice == 8)
    {
        menu_display (id, g_AddItemsMenuID, 0)
        return PLUGIN_HANDLED
    }

    new Float:vecs[3], vec[3]
    new Float:angles[3], angle[3]
    new angle_y
    pev(id, pev_origin, vecs)
    FVecIVec(vecs,vec)
    pev(id, pev_v_angle, angles)
    FVecIVec(angles,angle)
    angle_y = angle[1]

    switch(iChoice)
    {
        case 1:
        {
            add_item(vec, "weapon_ak47", angle_y)
        }
        case 2:
        {
            add_item(vec, "weapon_m4a1", angle_y)
        }
        case 3:
        {
            add_item(vec, "weapon_aug", angle_y)
        }
        case 4:
        {
            add_item(vec, "weapon_sg552", angle_y)
        }
        case 5:
        {
            add_item(vec, "weapon_scout", angle_y)
        }
        case 6:
        {
            add_item(vec, "weapon_sg550", angle_y)
        }
        case 7:
        {
            add_item(vec, "rifle_ammo", angle_y)
        }
    }

    if (g_EntCount < MAX_ITEMS)
        menu_display(id, g_AddRifles1MenuID, 0)
    else
        menu_display(id, g_MainMenuID, 0)

    return PLUGIN_HANDLED
}

public c_AddRifles1(id, menu, item)
{
    if (item < 0) return PLUGIN_CONTINUE
    
    new cmd[6], fItem[326], iName[64]
    new access, callback
    
    menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)
    
    new num = str_to_num(cmd)
    
    switch (num)
  {
        case 1:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Ak47")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 2:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить M4a1")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 3:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Aug")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 4:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Sg552")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 5:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Scout")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 6:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Sg550")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 7:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Патроны")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
    }
    return PLUGIN_HANDLED
}

// Add rifles (2)

public m_AddRifles2Handler(id, menu, item)
{
    if (item < 0)
    {
        destroyAllItems(false)
        menu_destroy(menu)    
//     need switch back the item_mode to the state it was before starting item editor...
        g_EditorEnabled = false
        g_Enabled = g_OldStateItemMode
        if (g_Enabled)
        {
            ReadFile()
            if (csdm_active())
                SetEnts()
        }
        return PLUGIN_HANDLED
    }

    // Get item info
    new cmd[6], iName[64]
    new access, callback

    menu_item_getinfo(menu, item, access, cmd, 5, iName, 63, callback)
    
    new iChoice = str_to_num(cmd)
    
    if (iChoice == 7)
    {
        menu_display (id, g_AddItemsMenuID, 0)
        return PLUGIN_HANDLED
    }

    new Float:vecs[3], vec[3]
    new Float:angles[3], angle[3]
    new angle_y
    pev(id, pev_origin, vecs)
    FVecIVec(vecs,vec)
    pev(id, pev_v_angle, angles)
    FVecIVec(angles,angle)
    angle_y = angle[1]

    switch(iChoice)
    {
        case 1:
        {
            add_item(vec, "weapon_g3sg1", angle_y)
        }
        case 2:
        {
            add_item(vec, "weapon_galil", angle_y)
        }
        case 3:
        {
            add_item(vec, "weapon_famas", angle_y)
        }
        case 4:
        {
            add_item(vec, "rifle_ammo", angle_y)
        }
        case 5:
        {
            add_item(vec, "weapon_awp", angle_y)
        }
        case 6:
        {
            add_item(vec, "awp_ammo", angle_y)
        }
    }

    if (g_EntCount < MAX_ITEMS)
        menu_display(id, g_AddRifles2MenuID, 0)
    else
        menu_display(id, g_MainMenuID, 0)

    return PLUGIN_HANDLED
}

public c_AddRifles2(id, menu, item)
{
    if (item < 0) return PLUGIN_CONTINUE
    
    new cmd[6], fItem[326], iName[64]
    new access, callback
    
    menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)
    
    new num = str_to_num(cmd)
    
    switch (num)
  {
        case 1:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить G3sg1")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 2:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Galil")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 3:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Famas")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 4:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить пули Винтовок")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 5:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Awp")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 6:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить пули AWP")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
    }
    return PLUGIN_HANDLED
}

// Add shotgun / para

public m_AddShotgunHandler(id, menu, item)
{
    if (item < 0)
    {
        destroyAllItems(false)
        menu_destroy(menu)    
//     need switch back the item_mode to the state it was before starting item editor...
        g_EditorEnabled = false
        g_Enabled = g_OldStateItemMode
        if (g_Enabled)
        {
            ReadFile()
            if (csdm_active())
                SetEnts()
        }
        return PLUGIN_HANDLED
    }

    // Get item info
    new cmd[6], iName[64]
    new access, callback

    menu_item_getinfo(menu, item, access, cmd, 5, iName, 63, callback)
    
    new iChoice = str_to_num(cmd)
    
    if (iChoice == 6)
    {
        menu_display (id, g_AddItemsMenuID, 0)
        return PLUGIN_HANDLED
    }

    new Float:vecs[3], vec[3]
    new Float:angles[3], angle[3]
    new angle_y
    pev(id, pev_origin, vecs)
    FVecIVec(vecs,vec)
    pev(id, pev_v_angle, angles)
    FVecIVec(angles,angle)
    angle_y = angle[1]

    switch(iChoice)
    {
        case 1:
        {
            add_item(vec, "weapon_xm1014", angle_y)
        }
        case 2:
        {
            add_item(vec, "weapon_m3", angle_y)
        }
        case 3:
        {
            add_item(vec, "shotgun_ammo", angle_y)
        }
        case 4:
        {
            add_item(vec, "weapon_m249", angle_y)
        }
        case 5:
        {
            add_item(vec, "para_ammo", angle_y)
        }
    }

    if (g_EntCount < MAX_ITEMS)
        menu_display(id, g_AddShotgunMenuID, 0)
    else
        menu_display(id, g_MainMenuID, 0)

    return PLUGIN_HANDLED
}

public c_AddShotgun(id, menu, item)
{
    if (item < 0) return PLUGIN_CONTINUE
    
    new cmd[6], fItem[326], iName[64]
    new access, callback
    
    menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)
    
    new num = str_to_num(cmd)
    
    switch (num)
  {
        case 1:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Xm1014")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 2:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить M3")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 3:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить пули Друбовика")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 4:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить M249")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 5:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить пули M249")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
    }
    return PLUGIN_HANDLED
}

// Add equipement

public m_AddEquipHandler(id, menu, item)
{
    if (item < 0)
    {
        destroyAllItems(false)
        menu_destroy(menu)    
//     need switch back the item_mode to the state it was before starting item editor...
        g_EditorEnabled = false
        g_Enabled = g_OldStateItemMode
        if (g_Enabled)
        {
            ReadFile()
            if (csdm_active())
                SetEnts()
        }
        return PLUGIN_HANDLED
    }

    // Get item info
    new cmd[6], iName[64]
    new access, callback
    
    menu_item_getinfo(menu, item, access, cmd, 5, iName, 63, callback)
    
    new iChoice = str_to_num(cmd)
    
    if (iChoice == 9)
    {
        menu_display (id, g_AddItemsMenuID, 0)
        return PLUGIN_HANDLED
    }

    new Float:vecs[3], vec[3]
    new Float:angles[3], angle[3]
    new angle_y
    pev(id, pev_origin, vecs)
    FVecIVec(vecs,vec)
    pev(id, pev_v_angle, angles)
    FVecIVec(angles,angle)
    angle_y = angle[1]

    switch(iChoice)
    {
        case 1:
        {
            add_item(vec, "item_longjump", angle_y)
        }
        case 2:
        {
            add_item(vec, "item_healthkit", angle_y)
        }
        case 3:
        {
            add_item(vec, "armor", angle_y)
        }
        case 4:
        {
            add_item(vec, "item_battery", angle_y)
        }
        case 5:
        {
            add_item(vec, "full_ammo", angle_y)
        }
        case 6:
        {
            add_item(vec, "weapon_hegrenade", angle_y)
        }
        case 7:
        {
            add_item(vec, "weapon_flashbang", angle_y)
        }
        case 8:
        {
            add_item(vec, "weapon_smokegrenade", angle_y)
        }
    }

    if (g_EntCount < MAX_ITEMS)
        menu_display(id, g_AddEquipMenuID, 0)
    else
        menu_display(id, g_MainMenuID, 0)

    return PLUGIN_HANDLED
}

public c_AddEquip(id, menu, item)
{
    if (item < 0) return PLUGIN_CONTINUE
    
    new cmd[6], fItem[326], iName[64]
    new access, callback
    
    menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)
    
    new num = str_to_num(cmd)
    
    switch (num)
  {
        case 1:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Longjump")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 2:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Аптечку")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 3:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Броню")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 4:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить Аккумулятор")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 5:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить все Патроны")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 6:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить HE гранату")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 7:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить FB гранату")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
        case 8:
        {
            if (g_EntCount >= MAX_ITEMS)
            {
                format(fItem,325,"Превышен максимальный лимит")
                menu_item_setname(menu, item, fItem )
                return ITEM_DISABLED
            }
            else
            {
                format(fItem,325,"Добавить SG гранату")
                menu_item_setname(menu, item, fItem )
                return ITEM_ENABLED
            }
        }
    }
    return PLUGIN_HANDLED
}


add_item(vec[3], EntName[25], angle = 0)
{
    new Map[32], config[32],  MapFile[256]
    
    get_mapname(Map, 31)
    get_configsdir(config, 31 )
    format(MapFile, 255, "%s\csdm\items\ents_%s.cfg",config, Map)

    new line[128]
    if(angle)
        format(line, 127, "%s %d %d %d %d", EntName, vec[0], vec[1], vec[2], angle)
    else
        format(line, 127, "%s %d %d %d", EntName, vec[0], vec[1], vec[2])


    write_file(MapFile, line, -1)
    
    // origin
    g_EntVecs[g_EntCount][0] = vec[0]
    g_EntVecs[g_EntCount][1] = vec[1]
    g_EntVecs[g_EntCount][2] = vec[2]
    g_EntAngle[g_EntCount] = angle

    if (CWRAP(EntName, "item_longjump"))
        g_EntType[g_EntCount] = ITEM_LONGJUMP
    else if (CWRAP(EntName, "item_healthkit"))
        g_EntType[g_EntCount] = ITEM_MEDKIT
    else if (CWRAP(EntName, "item_battery"))
        g_EntType[g_EntCount] = ITEM_BATTERY
    else if (CWRAP(EntName, "pistol_ammo"))
        g_EntType[g_EntCount] = ITEM_PISTOLAMMO
    else if (CWRAP(EntName, "rifle_ammo"))
        g_EntType[g_EntCount] = ITEM_RIFLEAMMO
    else if (CWRAP(EntName, "shotgun_ammo"))
        g_EntType[g_EntCount] = ITEM_SHOTAMMO
    else if (CWRAP(EntName, "smg_ammo"))
        g_EntType[g_EntCount] = ITEM_SMGAMMO
    else if (CWRAP(EntName, "full_ammo"))
        g_EntType[g_EntCount] = ITEM_FULLAMMO
    else if (CWRAP(EntName, "armor"))
        g_EntType[g_EntCount] = ITEM_ARMOR
    else if (CWRAP(EntName, "awp_ammo"))
        g_EntType[g_EntCount] = ITEM_AWPAMMO
    else if (CWRAP(EntName, "para_ammo"))
        g_EntType[g_EntCount] = ITEM_PARAAMMO
    else
    {
        new weaptype = getWeapId(EntName)

        if (weaptype != 0)
            g_EntType[g_EntCount] = weaptype

    }
    g_EntId[g_EntCount] = MakeEnt(g_EntCount)

    g_EntCount++
}

edit_item(vec[3], ent, angle=0)
{
    new Map[32], config[32],  MapFile[256]

    get_mapname(Map, 31)
    get_configsdir ( config, 31 )
    format(MapFile, 255, "%s\csdm\items\ents_%s.cfg",config, Map)

    if (file_exists(MapFile))
    {
        new Data[124], len
        new line = 0
        new pos[3][8]
        new currentVec[3], newItem[128]
        new EntName[25]

        while ((line = read_file(MapFile , line , Data , 123 , len) ) != 0 )
        {
            if (strlen(Data)<2) continue
            
            parse(Data, EntName, 24, pos[0], 7, pos[1], 7, pos[2], 7)
            currentVec[0] = str_to_num(pos[0])
            currentVec[1] = str_to_num(pos[1])
            currentVec[2] = str_to_num(pos[2])

            if ( (g_EntVecs[ent][0] == currentVec[0]) && (g_EntVecs[ent][1] == currentVec[1]) && ( (g_EntVecs[ent][2] - currentVec[2])<=20) )
            {    
                if(angle)
                    format(newItem, 127, "%s %d %d %d %d", EntName, vec[0], vec[1], vec[2], angle)
                else
                    format(newItem, 127, "%s %d %d %d", EntName, vec[0], vec[1], vec[2])

                write_file(MapFile, newItem, line-1)
// I need this because I couldn't prevent stay the moved item in the air (instead fall down at the ground)...
                destroyAllItems(false)
                ReadFile()
                SetEnts()

                ent_glow(ent,red)
                
                break
            }
        }
    }
}

delete_item(ent)
{
    new Map[32], config[32],  MapFile[256]
    
    get_mapname(Map, 31)
    get_configsdir ( config, 31 )
    format(MapFile, 255, "%s\csdm\items\ents_%s.cfg",config, Map)

    if (file_exists(MapFile))
    {
        new Data[124], len
        new line = 0
        new pos[3][8]
        new currentVec[3]
        new EntName[25]
        
        while ((line = read_file(MapFile , line , Data , 123 , len) ) != 0 )
        {
            if (strlen(Data)<2) continue

            parse(Data, EntName, 24, pos[0], 7, pos[1], 7, pos[2], 7)

            currentVec[0] = str_to_num(pos[0])
            currentVec[1] = str_to_num(pos[1])
            currentVec[2] = str_to_num(pos[2])
            
            if ( (g_EntVecs[ent][0] == currentVec[0]) && (g_EntVecs[ent][1] == currentVec[1]) && ( (g_EntVecs[ent][2] - currentVec[2])<=20) )
            {
                write_file(MapFile, "", line-1)

                destroyAllItems(false)
                ReadFile()
                SetEnts()

                break
            }
        }
    }
}

closest_item(id)
{
    new origin[3]
    new lastDist = 999999
    new closest

    if (g_EntCount == 0)
        return -1

    get_user_origin(id, origin)
    for (new x = 0; x < g_EntCount; x++)
    {
        new distance = get_distance(origin, g_EntVecs[x])

        if (distance < lastDist)
        {
            lastDist = distance
            closest = x
        }
    }
    return closest
}


ent_glow(ent,Float:color[3])
{
    new iEnt = g_EntId[ent]
    
    if (iEnt)
    {
        set_pev(iEnt, pev_renderfx, kRenderFxGlowShell)
        set_pev(iEnt, pev_renderamt, 255.0)
        set_pev(iEnt, pev_rendermode, kRenderTransAlpha)
        set_pev(iEnt, pev_rendercolor, color)
    }
}

ent_unglow(ent)
{
    new iEnt = g_EntId[ent]
    
    if (iEnt)
    {
        set_pev(iEnt, pev_renderfx, kRenderFxNone)
        set_pev(iEnt, pev_renderamt, 255.0)
        set_pev(iEnt, pev_rendermode, kRenderTransAlpha)        
    }
}

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

    g_EditorEnabled = true
    g_OldStateItemMode = g_Enabled
// need to disable temporary item_mode if it was enabled - to prevent have double entities,
// to have the possibility edit also restricted items, to don't pickup added item etc...
    g_Enabled = false

    destroyAllItems(false)
    destroyAllPacks()
    buildMenu()
    ReadFile()
    SetEnts()
    menu_display (id, g_MainMenuID, 0)

    return PLUGIN_HANDLED
}

public csdm_entdump(id)
{
    if (!(get_user_flags(id)&ADMIN_MAP))
    {
        client_print(id, print_console, "[CSDM] You do not have appropriate access.")
        client_print(id, print_chat, "[CSDM] You do not have appropriate access.")
        return PLUGIN_HANDLED
    }

    new i
    new model[32]
    new owner
    new class[32]
    new Text[128]
    new entid
//    new pid, did

    if (g_EntCount == 0)
    {
        client_print(id, print_console, "[CSDM] Nothing to dump - no items defined.")
        client_print(id, print_chat, "[CSDM] Nothing to dump - no items defined.")
        return PLUGIN_HANDLED
    }

    log_to_file("csdm-ents.txt", "[CSDM] Entity dump output.")
//    for (i=s; i<=EF_NumberOfEntities(); i++)

    for (i=0; i<g_EntCount; i++)
    {
        entid = g_EntId[i]

        if (pev_valid(entid))
        {
            pev(entid, pev_classname, class, 31)
            pev(entid, pev_model, model, 31)
            owner =    pev(entid, pev_owner)
//            pid = findPackId(i)
//            did = findDrop(i)
            format(Text, 127, "[%d] (%d, %d) ^"%s^" ^"%s^"", i, entid, owner,
//pid, did,
            class, model)
            write_file("addons\amxmodx\logs\csdm-ents.txt", Text, -1)
        }
    }
    client_print(id, print_chat, "Информация о предметах находится - addons\amx\logs\csdm-ents.txt")    
    return PLUGIN_HANDLED
}


Куда это вписать?

menu_setprop(, MPROP_EXITNAME, "\wВыход")
menu_setprop(, MPROP_NEXTNAME, "\wДалее")
menu_setprop(, MPROP_BACKNAME, "\wНазад")

Отредактировал: lemonzik, - 30.5.2015, 11:17
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: