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

Таинственный сундук CS 1.6

Новые плагины для AMX Mod X, которые были добавлены в базу плагинов нашего форума. Плагины еще не утвеждены администратором/модератором.

Модератор: Leonidddd

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

Данный раздел форума служит для добавления новых плагинов в базу нашего форума. После того, как администратор/модератор утвердит плагин, он будет перемещен в раздел "Утвежденные плагины".

Правила при добавлении новых плагинов:

1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. Обязательно выкладывайте исходник sma плагина. Запрещено выкладывать amxx файл.
4. Обязательно указывайте настоящих авторов плагина, если вы использовали чьи-то наработки или функции, указывайте их авторов в сообщении.
5. Необходимо заполнять детальную информацию о плагине (версию, настройки, используемые модули, список изменений и другую).

Таинственный сундук CS 1.6

Сообщение MayroN » 28 май 2018, 04:00

Таинственный сундук CS 1.6


Авторы: Sneaky.amxx, kHED
Версия: 1.0
Размер: 110,79 Kb

Описание: На карте появляються сундуки,при откритии которого,Вы можете получить Рандомное оружие.Полезно,когда игрок на "мили" )

Настройки:
Для роботы плагина нужно создать 7 точек спавна на карте.
Код: Выделить всё
Квар : "mchest_spawn_type", "1" | 0 - нет спавна | 1 - раунд | 2 - по таймеру |
Квар : "mchest_spawn_time", "60" | в секундах 
Квар 
: "mchest_item_disappear_time", "5" | время сундука ( затем исчезнет )


От себя добавлю: Модель в игре немного великовата.Можно по желанию уменьшить,но тогда прейдёться положение оружия опустить немного соответственно

Можете неблагодарить : )

P.S.Если понравиться - выкладу другой вариант плагина с коробкой



Скачать
mystery_box.rar
У вас нет необходимых прав для просмотра вложений в этом сообщении.
МультиМод CS 83.222.97.124:27015

Аватара пользователя
MayroN
 
Сообщения: 664
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 147 раз.
Поблагодарили: 78 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: Таинственный сундук CS 1.6

Сообщение borisdanko » 12 окт 2021, 11:21

Майрон привет!хотел добавить свое оружие,ошибка при компиляции.не мог бы подсказать где я допустил ошибку?подскажи пожалуйста как должно быть?и возможно вообще туда добавить например броню,гранату HE?слепу,дым.
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>

#define PLUGIN "Mileage Chest"
#define VERSION "1.0"
#define AUTHOR "Sneaky.amxx"

#define GAME_FOLDER "mileage_chest"
#define MAX_CHEST 5
#define MAX_ITEM 5

#define CHEST_MODEL "models/treasure.mdl"
#define CHEST_CLASSNAME "art_thou_mankind"
#define CHEST_SOUND "Mileage_Chest.wav"
#define CHEST_SOUND2 "Mileage_Gold.wav"

#define TASK_SPAWN 464684

new const Mileage_Item[MAX_ITEM][] =
{
    "models/w_ak47.mdl",
    "models/w_m4a1.mdl",
    "models/w_galil.mdl",
    "models/w_mp5.mdl",
    "models/w_p90.mdl",
    "models/w_deagle.mdl"  
}

new Float:MyOrigin[3], Float:MyAngles[3], g_PressBox[33]
new Float:ChestOrigin[MAX_CHEST][3], Float:ChestAngles[MAX_CHEST][3]

new g_Cvar_SpawnType, g_Cvar_SpawnTime, g_Cvar_ItemDisappear

public plugin_init
()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    register_event
("HLTV", "Event_NewRound", "a", "1=0", "2=0")
    register_touch(CHEST_CLASSNAME, "player", "fw_Touch")
    register_think(CHEST_CLASSNAME, "fw_Think")
    
    
// Cvars
    g_Cvar_SpawnType = register_cvar("mchest_spawn_type", "1") // 0 - NO | 1 - Round | 2 - Timer
    g_Cvar_SpawnTime = register_cvar("mchest_spawn_time", "60") // Second
    g_Cvar_ItemDisappear = register_cvar("mchest_item_disappear_time", "5")
    
    set_task
(get_pcvar_float(g_Cvar_SpawnTime), "SpawnTime_Check", TASK_SPAWN)
    
    
// Cmd
    register_clcmd("mileage_chest", "BaseOrigin_Handle", ADMIN_ADMIN)
}

public plugin_precache()
{
    precache_model(CHEST_MODEL)
    precache_sound(CHEST_SOUND)
    precache_sound(CHEST_SOUND2)
    
    for
(new i = 0; i < MAX_CHEST; i++)
        precache_model(Mileage_Item[i])
    
    Load_MapData
()
}

public SpawnTime_Check()
{
    if(get_pcvar_num(g_Cvar_SpawnType) == 2)
    {
        remove_entity_name(CHEST_CLASSNAME)
        Create_MileageChest()
    }
    
    
// Continue
    set_task(get_pcvar_float(g_Cvar_SpawnTime), "SpawnTime_Check", TASK_SPAWN)
}

public Event_NewRound()
{
    if(get_pcvar_num(g_Cvar_SpawnType) == 1)
    {
        remove_entity_name(CHEST_CLASSNAME)
        Create_MileageChest()
    }
}

public Create_MileageChest()
{
    static Chest; Chest = create_entity("info_target")
    
    if
(!pev_valid(Chest)) return
    
    static Rand
; Rand = random(MAX_CHEST)
    
    set_pev
(Chest, pev_origin, ChestOrigin[Rand])
    set_pev(Chest, pev_angles, ChestAngles[Rand])
    
    set_pev
(Chest, pev_classname, CHEST_CLASSNAME)
    engfunc(EngFunc_SetModel, Chest, CHEST_MODEL)

    set_pev(Chest, pev_gamestate, 1)
    set_pev(Chest, pev_solid, SOLID_BBOX)
    set_pev(Chest, pev_movetype, MOVETYPE_NONE)
    set_pev(Chest, pev_iuser1, 1) // Available
    set_pev(Chest, pev_iuser2, 0) // Opening
    set_pev(Chest, pev_iuser3, 0) // Who Opens
    
    fm_set_rendering
(Chest, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 250)
    
    new Float
:maxs[3] = {30.0, 30.0, 50.0}
    new Float:mins[3] = {-30.0, -30.0, 0.0}
    engfunc(EngFunc_SetSize, Chest, mins, maxs)
    
    set_pev
(Chest, pev_animtime, get_gametime())
    set_pev(Chest, pev_framerate, 1.0)
    set_pev(Chest, pev_sequence, 0)
    
    set_pev
(Chest, pev_nextthink, get_gametime() + 0.1)
    drop_to_floor(Chest)
}

public fw_Touch(Ent, id)
{
    if(!pev_valid(Ent) || !is_user_alive(id))
        return
    
}

public fw_Think(Ent)
{
    if(!pev_valid(Ent))
        return
    if
(!pev(Ent, pev_iuser1) && !pev(Ent, pev_iuser2))
    {
        static Item; Item = pev(Ent, pev_iuser4)
        static User; User = pev(Ent, pev_iuser3)
        if(pev_valid(Item))
        {
            static Float:Time; pev(Ent, pev_fuser2, Time)
            
            if
(get_gametime() >= Time)
            {
                remove_entity(Item)
            } else {
                static Victim; Victim = -1
                static Float
:Origin[3]; pev(Ent, pev_origin, Origin)
            
                while
((Victim = find_ent_in_sphere(Victim, Origin, 48.0)) != 0)
                {
                    if(!is_user_alive(Victim))
                        continue
                    if
(Victim != User)
                        continue
                        
                    static Button
; Button = pev(Victim, pev_button)
                    if(Button & IN_USE) 
                    
{
                        Obtain_Item(Victim, pev(Item, pev_enemy))
                        remove_entity(Item)
                    }
                }
            }
        } else {
            if(!pev(Ent, pev_enemy))
            {
                set_pev(Ent, pev_animtime, get_gametime())
                set_pev(Ent, pev_framerate, 1.0)
                set_pev(Ent, pev_sequence, 3)
                
                set_pev
(Ent, pev_enemy, 1)
                
                set_pev
(Ent, pev_nextthink, get_gametime() + 1.5)
                return
            
} else {
                static Float:Amount; pev(Ent, pev_renderamt, Amount)
                if(Amount > 0.0)
                {
                    set_pev(Ent, pev_rendermode, kRenderTransAlpha)
                    set_pev(Ent, pev_renderamt, Amount - 10.0)
                } else {
                    remove_entity(Ent)
                    return
                
}
                
                set_pev
(Ent, pev_nextthink, get_gametime() + 0.1)
                return
            
}
        }
        
        set_pev
(Ent, pev_nextthink, get_gametime() + 0.1)
        return
    
}
    if(pev(Ent, pev_iuser2))
    {
        static Float:Time; pev(Ent, pev_fuser1, Time)
        static Item; Item = pev(Ent, pev_iuser4)
        
        if
(get_gametime() >= Time)
        {
            if(pev_valid(Item))
            {
                static ID; ID = random(MAX_ITEM)
                engfunc(EngFunc_SetModel, Item, Mileage_Item[ID])
                set_pev(Item, pev_enemy, ID)
                set_pev(Ent, pev_iuser2, 0)
                
                set_pev
(Ent, pev_fuser2, get_gametime() + get_pcvar_float(g_Cvar_ItemDisappear))
                
                emit_sound
(Ent, CHAN_BODY, CHEST_SOUND2, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                
                set_pev
(Item, pev_velocity, {0.0, 0.0, 0.0})
                set_pev(Item, pev_movetype, MOVETYPE_NONE)
            }
        } else {
            if(pev_valid(Item))
            {
                static ID; ID = pev(Item, pev_enemy)
                ID++; if(ID >= MAX_ITEM) ID = 0
                
                engfunc
(EngFunc_SetModel, Item, Mileage_Item[ID])
                set_pev(Item, pev_enemy, ID)
            }
        }
        
        set_pev
(Ent, pev_nextthink, get_gametime() + 0.25)
        
        return
    
}
        
    static Victim
; Victim = -1
    static Float
:Origin[3]; pev(Ent, pev_origin, Origin)

    while((Victim = find_ent_in_sphere(Victim, Origin, 48.0)) != 0)
    {
        if(!is_user_alive(Victim))
            continue
            
        static Button
; Button = pev(Victim, pev_button)
        if(Button & IN_USE) Chest_Trigger(Ent, Victim)
    }
    
    set_pev
(Ent, pev_nextthink, get_gametime() + 0.1)
}

public Obtain_Item(id, ItemID)
{
    switch(ItemID)
    {
        case 0: fm_give_item(id, "weapon_ak47")
        case 1: fm_give_item(id, "weapon_m4a1")
        case 2: fm_give_item(id, "weapon_galil")
        case 3: fm_give_item(id, "weapon_mp5")
        case 4: fm_give_item(id, "weapon_p90")
        case 5: fm_give_item(id, "weapon_deagle") 
    
}
}

public Chest_Trigger(Ent, id)
{
    if(!pev(Ent, pev_iuser1))
        return
        
    emit_sound
(Ent, CHAN_BODY, CHEST_SOUND, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
        
    
// Set Data
    set_pev(Ent, pev_iuser1, 0) // Available
    set_pev(Ent, pev_iuser2, 1) // Opening
    set_pev(Ent, pev_iuser3, id) // Who Opens
    set_pev(Ent, pev_fuser1, get_gametime() + 6.0)
    
    
// Open
    set_pev(Ent, pev_animtime, get_gametime())
    set_pev(Ent, pev_framerate, 1.0)
    set_pev(Ent, pev_sequence, 1)
    
    
// Create Item
    static Item; Item = Create_Item(Ent)
    set_pev(Ent, pev_iuser4, Item)
}

public Create_Item(Ent)
{
    static Item; Item = create_entity("info_target")
    
    if
(!pev_valid(Item)) return -1
    
    static Float
:Origin[3]; pev(Ent, pev_origin, Origin)
    static Float:Angles[3]; pev(Ent, pev_angles, Angles)
    
    Origin
[2] += 6.0
    Angles
[0] -= 45.0
    
    set_pev
(Item, pev_origin, Origin)
    set_pev(Item, pev_angles, Angles)
    
    set_pev
(Item, pev_classname, "mitem")
    engfunc(EngFunc_SetModel, Item, Mileage_Item[0])
    set_pev(Item, pev_enemy, 0)
    
    set_pev
(Item, pev_gamestate, 1)
    set_pev(Item, pev_solid, SOLID_TRIGGER)
    set_pev(Item, pev_movetype, MOVETYPE_FLY)
    set_pev(Item, pev_gravity, 0.01)
    
    new Float
:maxs[3] = {6.0, 6.0, 6.0}
    new Float:mins[3] = {-6.0, -6.0, 0.0}
    engfunc(EngFunc_SetSize, Item, mins, maxs)

    set_pev(Item, pev_nextthink, get_gametime() + 0.1)
    
    static Float
:Vel[3];
    Vel[2] = 7.5
    set_pev
(Item, pev_velocity, Vel)
    
    return Item
}

public BaseOrigin_Handle(id)
{
    static MenuTitle[32]; formatex(MenuTitle, sizeof(MenuTitle), "\y'Mileage Chest' Menu\w")
    new MenuId; MenuId = menu_create(MenuTitle, "MenuHandle_BaseOrigin")
    
    static Data
[64], Num[4]
    
    g_PressBox
[id] = -1

    formatex
(Data, 63, "Current Origin/Angles \r[%i %i %i] [%i %i %i]\w^n", floatround(MyOrigin[0]), floatround(MyOrigin[1]), floatround(MyOrigin[2]), floatround(MyAngles[0]), floatround(MyAngles[1]), floatround(MyAngles[2]))
    menu_additem(MenuId, Data, "get")
    
    for
(new i = 0; i < MAX_CHEST; i++)
    {
        if(MAX_CHEST - 1 == i) formatex(Data, 63, "\yChest %i:\w Origin/Angles \r[%i %i %i] [%i %i %i]\w^n", i+1, floatround(ChestOrigin[i][0]), floatround(ChestOrigin[i][1]), floatround(ChestOrigin[i][2]), floatround(ChestAngles[i][0]), floatround(ChestAngles[i][1]), floatround(ChestAngles[i][2]))
        else formatex(Data, 63, "\yChest %i:\w Origin/Angles \r[%i %i %i] [%i %i %i]\w", i+1, floatround(ChestOrigin[i][0]), floatround(ChestOrigin[i][1]), floatround(ChestOrigin[i][2]), floatround(ChestAngles[i][0]), floatround(ChestAngles[i][1]), floatround(ChestAngles[i][2]))
        
        num_to_str
(i, Num, 3)
        menu_additem(MenuId, Data, Num)
    }
    
    menu_additem
(MenuId, "\rSave Data\w", "save")
    menu_display(id, MenuId, 0)
}

public MenuHandle_BaseOrigin(id, Menu, Item)
{
    if((Item == MENU_EXIT) || !is_user_connected(id))
    {
        menu_destroy(Menu)
        
        MyOrigin
[0] = MyOrigin[1] = MyOrigin[2] = 0.0
        MyAngles
[0] = MyAngles[1] = MyAngles[2] = 0.0
        
        return
    
}

    static Data[6], Name[64], ItemAccess, ItemCallback
    menu_item_getinfo
(Menu, Item, ItemAccess, Data, charsmax(Data), Name, charsmax(Name), ItemCallback)
    
    if
(equal(Data, "get"))
    {
        pev(id, pev_origin, MyOrigin)
        pev(id, pev_v_angle, MyAngles)
        MyAngles[0] = 0.0
    
} else if(equal(Data, "save")) {
        Save_MapData(id)
    } else {
        static BoxID; BoxID = str_to_num(Data)
        if(BoxID >= 0 && BoxID < MAX_CHEST)
        {
            ChestOrigin[BoxID] = MyOrigin
            ChestAngles
[BoxID] = MyAngles
        
}
    }
    
    menu_destroy
(Menu)
    BaseOrigin_Handle(id)
}

public Save_MapData(id)
{
    new Path[128]; get_configsdir(Path, charsmax(Path))
    new MapName[64]; get_mapname(MapName, 63)
    format(Path, 127, "%s/%s/%s.dias", Path, GAME_FOLDER, MapName)

    static LineData[128]
    
    for
(new i = 0; i < MAX_CHEST; i++)
    {
        formatex(LineData, 127, "%f %f %f %f %f %f", ChestOrigin[i][0], ChestOrigin[i][1], ChestOrigin[i][2], ChestAngles[i][0], ChestAngles[i][1], ChestAngles[i][2])
        write_file(Path, LineData, i)
    }
    
    
// Notice
    client_print(id, print_chat, "Sneaky.amxx : Your wish is my desire")
}

public Load_MapData()
{
    new Path[128]; get_configsdir(Path, charsmax(Path))
    new MapName[64]; get_mapname(MapName, 63)
    format(Path, 127, "%s/%s/%s.dias", Path, GAME_FOLDER, MapName)

    if(file_exists(Path))
    {
        new LineData[128], Line
        new File 
= fopen(Path, "rt")
        new HandleData[6][48]
        
        if
(!File) return
        
        while
(!feof(File))
        {
            fgets(File, LineData, 127)
            replace(LineData, 127, "^n", "")
            
            if
(LineData[0] == ';' || !LineData[0]) continue
            
            parse
(LineData, HandleData[0], 47, HandleData[1], 47, HandleData[2], 47, HandleData[3], 47, HandleData[4], 47, HandleData[5], 47)
            
            ChestOrigin
[Line][0] = str_to_float(HandleData[0])
            ChestOrigin[Line][1] = str_to_float(HandleData[1])
            ChestOrigin[Line][2] = str_to_float(HandleData[2])
            
            ChestAngles
[Line][0] = str_to_float(HandleData[3])
            ChestAngles[Line][1] = str_to_float(HandleData[4])
            ChestAngles[Line][2] = str_to_float(HandleData[5])
            
            Line
++
        }

        fclose(File)
    } 
}
Аватара пользователя
borisdanko
 
Сообщения: 6
Зарегистрирован: 25 янв 2021, 18:36
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Я ничего не знаю

Re: Таинственный сундук CS 1.6

Сообщение RockTheStreet » 12 окт 2021, 11:55

borisdanko писал(а):Майрон привет!хотел добавить свое оружие,ошибка при компиляции.не мог бы подсказать где я допустил ошибку?подскажи пожалуйста как должно быть?и возможно вообще туда добавить например броню,гранату HE?слепу,дым.
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>

#define PLUGIN "Mileage Chest"
#define VERSION "1.0"
#define AUTHOR "Sneaky.amxx"

#define GAME_FOLDER "mileage_chest"
#define MAX_CHEST 5
#define MAX_ITEM 5

#define CHEST_MODEL "models/treasure.mdl"
#define CHEST_CLASSNAME "art_thou_mankind"
#define CHEST_SOUND "Mileage_Chest.wav"
#define CHEST_SOUND2 "Mileage_Gold.wav"

#define TASK_SPAWN 464684

new const Mileage_Item[MAX_ITEM][] =
{
    "models/w_ak47.mdl",
    "models/w_m4a1.mdl",
    "models/w_galil.mdl",
    "models/w_mp5.mdl",
    "models/w_p90.mdl",
    "models/w_deagle.mdl"  
}

new Float:MyOrigin[3], Float:MyAngles[3], g_PressBox[33]
new Float:ChestOrigin[MAX_CHEST][3], Float:ChestAngles[MAX_CHEST][3]

new g_Cvar_SpawnType, g_Cvar_SpawnTime, g_Cvar_ItemDisappear

public plugin_init
()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    register_event
("HLTV", "Event_NewRound", "a", "1=0", "2=0")
    register_touch(CHEST_CLASSNAME, "player", "fw_Touch")
    register_think(CHEST_CLASSNAME, "fw_Think")
    
    
// Cvars
    g_Cvar_SpawnType = register_cvar("mchest_spawn_type", "1") // 0 - NO | 1 - Round | 2 - Timer
    g_Cvar_SpawnTime = register_cvar("mchest_spawn_time", "60") // Second
    g_Cvar_ItemDisappear = register_cvar("mchest_item_disappear_time", "5")
    
    set_task
(get_pcvar_float(g_Cvar_SpawnTime), "SpawnTime_Check", TASK_SPAWN)
    
    
// Cmd
    register_clcmd("mileage_chest", "BaseOrigin_Handle", ADMIN_ADMIN)
}

public plugin_precache()
{
    precache_model(CHEST_MODEL)
    precache_sound(CHEST_SOUND)
    precache_sound(CHEST_SOUND2)
    
    for
(new i = 0; i < MAX_CHEST; i++)
        precache_model(Mileage_Item[i])
    
    Load_MapData
()
}

public SpawnTime_Check()
{
    if(get_pcvar_num(g_Cvar_SpawnType) == 2)
    {
        remove_entity_name(CHEST_CLASSNAME)
        Create_MileageChest()
    }
    
    
// Continue
    set_task(get_pcvar_float(g_Cvar_SpawnTime), "SpawnTime_Check", TASK_SPAWN)
}

public Event_NewRound()
{
    if(get_pcvar_num(g_Cvar_SpawnType) == 1)
    {
        remove_entity_name(CHEST_CLASSNAME)
        Create_MileageChest()
    }
}

public Create_MileageChest()
{
    static Chest; Chest = create_entity("info_target")
    
    if
(!pev_valid(Chest)) return
    
    static Rand
; Rand = random(MAX_CHEST)
    
    set_pev
(Chest, pev_origin, ChestOrigin[Rand])
    set_pev(Chest, pev_angles, ChestAngles[Rand])
    
    set_pev
(Chest, pev_classname, CHEST_CLASSNAME)
    engfunc(EngFunc_SetModel, Chest, CHEST_MODEL)

    set_pev(Chest, pev_gamestate, 1)
    set_pev(Chest, pev_solid, SOLID_BBOX)
    set_pev(Chest, pev_movetype, MOVETYPE_NONE)
    set_pev(Chest, pev_iuser1, 1) // Available
    set_pev(Chest, pev_iuser2, 0) // Opening
    set_pev(Chest, pev_iuser3, 0) // Who Opens
    
    fm_set_rendering
(Chest, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 250)
    
    new Float
:maxs[3] = {30.0, 30.0, 50.0}
    new Float:mins[3] = {-30.0, -30.0, 0.0}
    engfunc(EngFunc_SetSize, Chest, mins, maxs)
    
    set_pev
(Chest, pev_animtime, get_gametime())
    set_pev(Chest, pev_framerate, 1.0)
    set_pev(Chest, pev_sequence, 0)
    
    set_pev
(Chest, pev_nextthink, get_gametime() + 0.1)
    drop_to_floor(Chest)
}

public fw_Touch(Ent, id)
{
    if(!pev_valid(Ent) || !is_user_alive(id))
        return
    
}

public fw_Think(Ent)
{
    if(!pev_valid(Ent))
        return
    if
(!pev(Ent, pev_iuser1) && !pev(Ent, pev_iuser2))
    {
        static Item; Item = pev(Ent, pev_iuser4)
        static User; User = pev(Ent, pev_iuser3)
        if(pev_valid(Item))
        {
            static Float:Time; pev(Ent, pev_fuser2, Time)
            
            if
(get_gametime() >= Time)
            {
                remove_entity(Item)
            } else {
                static Victim; Victim = -1
                static Float
:Origin[3]; pev(Ent, pev_origin, Origin)
            
                while
((Victim = find_ent_in_sphere(Victim, Origin, 48.0)) != 0)
                {
                    if(!is_user_alive(Victim))
                        continue
                    if
(Victim != User)
                        continue
                        
                    static Button
; Button = pev(Victim, pev_button)
                    if(Button & IN_USE) 
                    
{
                        Obtain_Item(Victim, pev(Item, pev_enemy))
                        remove_entity(Item)
                    }
                }
            }
        } else {
            if(!pev(Ent, pev_enemy))
            {
                set_pev(Ent, pev_animtime, get_gametime())
                set_pev(Ent, pev_framerate, 1.0)
                set_pev(Ent, pev_sequence, 3)
                
                set_pev
(Ent, pev_enemy, 1)
                
                set_pev
(Ent, pev_nextthink, get_gametime() + 1.5)
                return
            
} else {
                static Float:Amount; pev(Ent, pev_renderamt, Amount)
                if(Amount > 0.0)
                {
                    set_pev(Ent, pev_rendermode, kRenderTransAlpha)
                    set_pev(Ent, pev_renderamt, Amount - 10.0)
                } else {
                    remove_entity(Ent)
                    return
                
}
                
                set_pev
(Ent, pev_nextthink, get_gametime() + 0.1)
                return
            
}
        }
        
        set_pev
(Ent, pev_nextthink, get_gametime() + 0.1)
        return
    
}
    if(pev(Ent, pev_iuser2))
    {
        static Float:Time; pev(Ent, pev_fuser1, Time)
        static Item; Item = pev(Ent, pev_iuser4)
        
        if
(get_gametime() >= Time)
        {
            if(pev_valid(Item))
            {
                static ID; ID = random(MAX_ITEM)
                engfunc(EngFunc_SetModel, Item, Mileage_Item[ID])
                set_pev(Item, pev_enemy, ID)
                set_pev(Ent, pev_iuser2, 0)
                
                set_pev
(Ent, pev_fuser2, get_gametime() + get_pcvar_float(g_Cvar_ItemDisappear))
                
                emit_sound
(Ent, CHAN_BODY, CHEST_SOUND2, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                
                set_pev
(Item, pev_velocity, {0.0, 0.0, 0.0})
                set_pev(Item, pev_movetype, MOVETYPE_NONE)
            }
        } else {
            if(pev_valid(Item))
            {
                static ID; ID = pev(Item, pev_enemy)
                ID++; if(ID >= MAX_ITEM) ID = 0
                
                engfunc
(EngFunc_SetModel, Item, Mileage_Item[ID])
                set_pev(Item, pev_enemy, ID)
            }
        }
        
        set_pev
(Ent, pev_nextthink, get_gametime() + 0.25)
        
        return
    
}
        
    static Victim
; Victim = -1
    static Float
:Origin[3]; pev(Ent, pev_origin, Origin)

    while((Victim = find_ent_in_sphere(Victim, Origin, 48.0)) != 0)
    {
        if(!is_user_alive(Victim))
            continue
            
        static Button
; Button = pev(Victim, pev_button)
        if(Button & IN_USE) Chest_Trigger(Ent, Victim)
    }
    
    set_pev
(Ent, pev_nextthink, get_gametime() + 0.1)
}

public Obtain_Item(id, ItemID)
{
    switch(ItemID)
    {
        case 0: fm_give_item(id, "weapon_ak47")
        case 1: fm_give_item(id, "weapon_m4a1")
        case 2: fm_give_item(id, "weapon_galil")
        case 3: fm_give_item(id, "weapon_mp5")
        case 4: fm_give_item(id, "weapon_p90")
        case 5: fm_give_item(id, "weapon_deagle") 
    
}
}

public Chest_Trigger(Ent, id)
{
    if(!pev(Ent, pev_iuser1))
        return
        
    emit_sound
(Ent, CHAN_BODY, CHEST_SOUND, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
        
    
// Set Data
    set_pev(Ent, pev_iuser1, 0) // Available
    set_pev(Ent, pev_iuser2, 1) // Opening
    set_pev(Ent, pev_iuser3, id) // Who Opens
    set_pev(Ent, pev_fuser1, get_gametime() + 6.0)
    
    
// Open
    set_pev(Ent, pev_animtime, get_gametime())
    set_pev(Ent, pev_framerate, 1.0)
    set_pev(Ent, pev_sequence, 1)
    
    
// Create Item
    static Item; Item = Create_Item(Ent)
    set_pev(Ent, pev_iuser4, Item)
}

public Create_Item(Ent)
{
    static Item; Item = create_entity("info_target")
    
    if
(!pev_valid(Item)) return -1
    
    static Float
:Origin[3]; pev(Ent, pev_origin, Origin)
    static Float:Angles[3]; pev(Ent, pev_angles, Angles)
    
    Origin
[2] += 6.0
    Angles
[0] -= 45.0
    
    set_pev
(Item, pev_origin, Origin)
    set_pev(Item, pev_angles, Angles)
    
    set_pev
(Item, pev_classname, "mitem")
    engfunc(EngFunc_SetModel, Item, Mileage_Item[0])
    set_pev(Item, pev_enemy, 0)
    
    set_pev
(Item, pev_gamestate, 1)
    set_pev(Item, pev_solid, SOLID_TRIGGER)
    set_pev(Item, pev_movetype, MOVETYPE_FLY)
    set_pev(Item, pev_gravity, 0.01)
    
    new Float
:maxs[3] = {6.0, 6.0, 6.0}
    new Float:mins[3] = {-6.0, -6.0, 0.0}
    engfunc(EngFunc_SetSize, Item, mins, maxs)

    set_pev(Item, pev_nextthink, get_gametime() + 0.1)
    
    static Float
:Vel[3];
    Vel[2] = 7.5
    set_pev
(Item, pev_velocity, Vel)
    
    return Item
}

public BaseOrigin_Handle(id)
{
    static MenuTitle[32]; formatex(MenuTitle, sizeof(MenuTitle), "\y'Mileage Chest' Menu\w")
    new MenuId; MenuId = menu_create(MenuTitle, "MenuHandle_BaseOrigin")
    
    static Data
[64], Num[4]
    
    g_PressBox
[id] = -1

    formatex
(Data, 63, "Current Origin/Angles \r[%i %i %i] [%i %i %i]\w^n", floatround(MyOrigin[0]), floatround(MyOrigin[1]), floatround(MyOrigin[2]), floatround(MyAngles[0]), floatround(MyAngles[1]), floatround(MyAngles[2]))
    menu_additem(MenuId, Data, "get")
    
    for
(new i = 0; i < MAX_CHEST; i++)
    {
        if(MAX_CHEST - 1 == i) formatex(Data, 63, "\yChest %i:\w Origin/Angles \r[%i %i %i] [%i %i %i]\w^n", i+1, floatround(ChestOrigin[i][0]), floatround(ChestOrigin[i][1]), floatround(ChestOrigin[i][2]), floatround(ChestAngles[i][0]), floatround(ChestAngles[i][1]), floatround(ChestAngles[i][2]))
        else formatex(Data, 63, "\yChest %i:\w Origin/Angles \r[%i %i %i] [%i %i %i]\w", i+1, floatround(ChestOrigin[i][0]), floatround(ChestOrigin[i][1]), floatround(ChestOrigin[i][2]), floatround(ChestAngles[i][0]), floatround(ChestAngles[i][1]), floatround(ChestAngles[i][2]))
        
        num_to_str
(i, Num, 3)
        menu_additem(MenuId, Data, Num)
    }
    
    menu_additem
(MenuId, "\rSave Data\w", "save")
    menu_display(id, MenuId, 0)
}

public MenuHandle_BaseOrigin(id, Menu, Item)
{
    if((Item == MENU_EXIT) || !is_user_connected(id))
    {
        menu_destroy(Menu)
        
        MyOrigin
[0] = MyOrigin[1] = MyOrigin[2] = 0.0
        MyAngles
[0] = MyAngles[1] = MyAngles[2] = 0.0
        
        return
    
}

    static Data[6], Name[64], ItemAccess, ItemCallback
    menu_item_getinfo
(Menu, Item, ItemAccess, Data, charsmax(Data), Name, charsmax(Name), ItemCallback)
    
    if
(equal(Data, "get"))
    {
        pev(id, pev_origin, MyOrigin)
        pev(id, pev_v_angle, MyAngles)
        MyAngles[0] = 0.0
    
} else if(equal(Data, "save")) {
        Save_MapData(id)
    } else {
        static BoxID; BoxID = str_to_num(Data)
        if(BoxID >= 0 && BoxID < MAX_CHEST)
        {
            ChestOrigin[BoxID] = MyOrigin
            ChestAngles
[BoxID] = MyAngles
        
}
    }
    
    menu_destroy
(Menu)
    BaseOrigin_Handle(id)
}

public Save_MapData(id)
{
    new Path[128]; get_configsdir(Path, charsmax(Path))
    new MapName[64]; get_mapname(MapName, 63)
    format(Path, 127, "%s/%s/%s.dias", Path, GAME_FOLDER, MapName)

    static LineData[128]
    
    for
(new i = 0; i < MAX_CHEST; i++)
    {
        formatex(LineData, 127, "%f %f %f %f %f %f", ChestOrigin[i][0], ChestOrigin[i][1], ChestOrigin[i][2], ChestAngles[i][0], ChestAngles[i][1], ChestAngles[i][2])
        write_file(Path, LineData, i)
    }
    
    
// Notice
    client_print(id, print_chat, "Sneaky.amxx : Your wish is my desire")
}

public Load_MapData()
{
    new Path[128]; get_configsdir(Path, charsmax(Path))
    new MapName[64]; get_mapname(MapName, 63)
    format(Path, 127, "%s/%s/%s.dias", Path, GAME_FOLDER, MapName)

    if(file_exists(Path))
    {
        new LineData[128], Line
        new File 
= fopen(Path, "rt")
        new HandleData[6][48]
        
        if
(!File) return
        
        while
(!feof(File))
        {
            fgets(File, LineData, 127)
            replace(LineData, 127, "^n", "")
            
            if
(LineData[0] == ';' || !LineData[0]) continue
            
            parse
(LineData, HandleData[0], 47, HandleData[1], 47, HandleData[2], 47, HandleData[3], 47, HandleData[4], 47, HandleData[5], 47)
            
            ChestOrigin
[Line][0] = str_to_float(HandleData[0])
            ChestOrigin[Line][1] = str_to_float(HandleData[1])
            ChestOrigin[Line][2] = str_to_float(HandleData[2])
            
            ChestAngles
[Line][0] = str_to_float(HandleData[3])
            ChestAngles[Line][1] = str_to_float(HandleData[4])
            ChestAngles[Line][2] = str_to_float(HandleData[5])
            
            Line
++
        }

        fclose(File)
    } 

Вы добавляете шестую ячейку в массив, когда максимум их может быть пять.
#define MAX_ITEM 5
Касательно телепатии: если Вы передаете Ваши проблемы телепатическим путем - ответы будут передаваться тоже телепатически.
Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком.
Аватара пользователя
RockTheStreet
 
Сообщения: 76
Зарегистрирован: 12 авг 2021, 23:13
Благодарил (а): 5 раз.
Поблагодарили: 8 раз.
Опыт программирования: Больше трех лет
Языки программирования: JS, PHP

Re: Таинственный сундук CS 1.6

Сообщение borisdanko » 12 окт 2021, 18:14

благодарю)буду тестировать на днях.добавил 9 позиций.компиляция прошла успешно

Добавлено спустя 3 минуты 4 секунды:
все же хотел уточнить по поводу добавления грен,будет ли выдавать?
Код: Выделить всё

        case 6
: fm_give_item(id, "weapon_flashbang")             
        case 7
: fm_give_item(id, "weapon_hegrenade")
        case 8: fm_give_item(id, "weapon_smokegrenade"
Аватара пользователя
borisdanko
 
Сообщения: 6
Зарегистрирован: 25 янв 2021, 18:36
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Я ничего не знаю

Re: Таинственный сундук CS 1.6

Сообщение RockTheStreet » 12 окт 2021, 20:55

Будет.
Касательно телепатии: если Вы передаете Ваши проблемы телепатическим путем - ответы будут передаваться тоже телепатически.
Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком.
Аватара пользователя
RockTheStreet
 
Сообщения: 76
Зарегистрирован: 12 авг 2021, 23:13
Благодарил (а): 5 раз.
Поблагодарили: 8 раз.
Опыт программирования: Больше трех лет
Языки программирования: JS, PHP

Re: Таинственный сундук CS 1.6

Сообщение MayroN » 12 окт 2021, 23:19

borisdanko писал(а):все же хотел уточнить по поводу добавления грен,будет ли выдавать?
Код: Выделить всё

        case 6
: fm_give_item(id, "weapon_flashbang")             
        case 7
: fm_give_item(id, "weapon_hegrenade")
        case 8: fm_give_item(id, "weapon_smokegrenade"


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

Вот пример добавления грены к уже имеющейся в Арсенале
Код: Выделить всё
cs_set_user_bpammo(id, CSW_HEGRENADE, cs_get_user_bpammo(id, CSW_HEGRENADE) + 1
МультиМод CS 83.222.97.124:27015

Аватара пользователя
MayroN
 
Сообщения: 664
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 147 раз.
Поблагодарили: 78 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: Таинственный сундук CS 1.6

Сообщение borisdanko » 13 окт 2021, 10:21

MayroN,спасибо что ответил!есть еще не большие вопросы :-)
1.как сделать,что бы сундуки появлялись с 4 раунда?
2.как сделать запрет, что бы игроки с привилегией не могли их подбирать?
Спасибо за ответ!
Аватара пользователя
borisdanko
 
Сообщения: 6
Зарегистрирован: 25 янв 2021, 18:36
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Я ничего не знаю

Re: Таинственный сундук CS 1.6

Сообщение MayroN » 13 окт 2021, 12:24

borisdanko писал(а):MayroN,спасибо что ответил!есть еще не большие вопросы :-)
1.как сделать,что бы сундуки появлялись с 4 раунда?
2.как сделать запрет, что бы игроки с привилегией не могли их подбирать?
Спасибо за ответ!


К сожалению,это уже больше подходит в другой раздел - ну хотя-бы Вы должны зарегистрироваться, чтобы видеть ссылки.
Там создавайте
МультиМод CS 83.222.97.124:27015

Аватара пользователя
MayroN
 
Сообщения: 664
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 147 раз.
Поблагодарили: 78 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: Таинственный сундук CS 1.6

Сообщение [N][E][M][E][C] » 13 окт 2021, 16:06

borisdanko,
1. Делаешь глобальную переменную, для посчёта раундов, отлавливаешь старт раунда,плюсуешь еденицу каждый раунд к переменной. Дальше условие там где надо, если переменная равна 4 ,то выполняем код.
2. Делаешь проверку на флаг игрока, если соответсвует выполняешь код.
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 613
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 52 раз.
Поблагодарили: 83 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи


Вернуться в Добавленные новые плагины

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

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