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

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

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

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

> Правила раздела

Перед созданием новой темы убедитесь, не искал ли кто-нибудь подобный плагин до вас, для этого следует воспользоваться поиском.

Все вновь созданные темы, с названием типа "Помогите найти", "А что это за плагин", "Ищу плагин", "Нужен плагин", "Подскажите пожалуйста название плагина" - будут удалены.
При создании темы постарайтесь максимально понятно сформулировать её заголовок так, чтобы он соответствовал функциям плагина который Вы ищите. В том случае, если Вам не удается сформулировать мысль и правильно расписать всё в теме, воспользуйтесь графическим редактором, к примеру Paint, что бы примерно изобразить функции нужного Вам плагина.

аптечки ишу

Статус пользователя grey
сообщение 18.10.2011, 14:46
Сообщение #1


Стаж: 15 лет

Сообщений: 1785
Благодарностей: 1098
Полезность: 675

После убийства выпадает аптечка, вот ищу такое.


---
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя wtp
сообщение 18.10.2011, 18:12
Сообщение #2
Стаж: 15 лет

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

Цитата(greykoo @ 18.10.2011, 15:46) *
После убийства выпадает аптечка, вот ищу такое.


Не советую плагин, очень глючьный, валит сервер!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя grey
сообщение 18.10.2011, 19:43
Сообщение #3


Стаж: 15 лет

Сообщений: 1785
Благодарностей: 1098
Полезность: 675

Цитата(wtp @ 18.10.2011, 19:12) *
Не советую плагин, очень глючьный, валит сервер!

спасибо,нашел,поставил - офигел от пинга и нагрузки на ЦП. Сделал КД на аптечки, цп еще больше стало нагружать...
исходник тык

Тот же плагин, только с КД тык
Код
#include <amxmodx>  
#include <fakemeta>  
#include <engine>  
#include <fakemeta_util>  

/* --| Plugin information */  
#define PLUGIN         "Healthkit on dead body"  
#define AUTHOR         "tuty"  
#define VERSION     "3.2b"  

/* --| Some plugin defines */  
#define MEDKIT_MINSZ     Float:{ -23.160000, -13.660000, -0.050000 }  
#define MEDKIT_MAXSZ     Float:{ 11.470000, 12.780000, 6.720000 }  
#define MODEL_KIT     "models/w_medkit.mdl"  
#define SOUND_KIT     "items/smallmedkit1.wav"  
#define FFADE_IN     0x0000  
#define ACCESS_LEVEL ADMIN_CFG  

/* --| Some globals... */  
new gToggleKitEnable;  
new gToggleGlowShow;  
new gGMsgFade;  
new gToggleFadeEnable;  
new gToggleRemoveAtRstart;  
new gKitHealthCvar;  
new gLimitHealthCvar;  
new gGMsgItemPickup;  

/* --| Medkit classname */  
new const gMedKitClassname[] = "medkit_entity";  

/* --| Let's start the plugin */  
public plugin_init()  
{  
    /* --| Registering the plugin to show it on plugins list */  
    register_plugin( PLUGIN, VERSION, AUTHOR );  
          
    /* --| Some usefull events */  
    register_event( "DeathMsg","drop_kit","a" );  
    register_logevent( "logevent_round_start", 2, "1=Round_Start" );  
  
      
    /* --| Register the touch forward */  
    register_forward( FM_Touch,"ForwardTouch" );  
    register_think( gMedKitClassname, "MedkitRemove");
      
    /* --| Cvar list */  
    gToggleKitEnable = register_cvar( "kit_enable", "1" );  
    gToggleGlowShow = register_cvar( "kit_glow", "0" );  
    gToggleFadeEnable = register_cvar( "kit_fade", "0" );  
    gToggleRemoveAtRstart = register_cvar( "kit_remove", "0" );  
    gKitHealthCvar = register_cvar( "kit_health", "20" );  
    gLimitHealthCvar = register_cvar( "kit_limit_health", "100" );  
      
    /* --| Let's catch the user message id's */  
    gGMsgFade = get_user_msgid( "ScreenFade" );  
    gGMsgItemPickup = get_user_msgid( "ItemPickup" );  
}  

/* --| Precaching stuff */    
public plugin_precache()  
{  
    precache_model( MODEL_KIT );  
    precache_sound( SOUND_KIT );  
}  

/* --| When player dies, let's drop the kit if plugin is elabled */  
public drop_kit()  
{  
    /* --| Check if plugin is enabled/disabled */  
    if( get_pcvar_num( gToggleKitEnable ) == 0 )  
        {  
        return PLUGIN_HANDLED;  
        }      
      
    /* --| Get the victim id */  
        new victim = read_data( 2 );  
      
    /* --| Get the victim origin */  
        static Float:origin[ 3 ];  
        pev( victim, pev_origin, origin );  
      
    /* --| Creating healthkit entity */  
        new ent = engfunc( EngFunc_CreateNamedEntity, engfunc( EngFunc_AllocString, "info_target" ) );  
      
    /* --| Modify the origin a little bit. This is calculated to be set on floor */  
        origin[ 2 ] -= 36;  
      
    /* --| Setting the ent origin */  
        engfunc( EngFunc_SetOrigin, ent, origin );  
      
    /* --| Check if isn't a valid ent */  
        if( !pev_valid( ent ) )  
        {  
        return PLUGIN_HANDLED;  
        }  
      
    /* --| Now let's set the entity model and some stuff */  
        set_pev( ent, pev_classname, gMedKitClassname );  
        engfunc( EngFunc_SetModel, ent, MODEL_KIT );  
        dllfunc( DLLFunc_Spawn, ent );  
        set_pev( ent, pev_solid, SOLID_BBOX );  
        set_pev( ent, pev_movetype, MOVETYPE_NONE );  
        engfunc( EngFunc_SetSize, ent, MEDKIT_MINSZ, MEDKIT_MAXSZ );  
        engfunc( EngFunc_DropToFloor, ent );  
        set_pev( ent, pev_nextthink, get_gametime() + 20.0);
      
    /* --| If cvar is set to 1, let's glow the entity */  
        if( get_pcvar_num( gToggleGlowShow ) == 1 )  
        {  
        fm_set_rendering( ent, kRenderFxGlowShell, 255, 255, 255, kRenderFxNone, 27 );  
        }  
      
        return PLUGIN_HANDLED;  
}  

public MedkitRemove(ent)  
{  
        set_pev(ent, pev_flags, FL_KILLME);
        return PLUGIN_CONTINUE;
}  


/* --| Calling the touch forward from fakemeta to see if player touched the entity */    
public ForwardTouch( ent, id )  
{  
    /* --| Check if is a valid entity and is plugin enabled */  
        if( !pev_valid( ent ) || get_pcvar_num( gToggleKitEnable ) == 0 )  
        {  
        return FMRES_IGNORED;  
        }  
      
    /* --| Find the ent classname */  
        new classname[ 32 ];  
        pev( ent, pev_classname, classname, charsmax( classname ) );  
      
    /* --| Check if isn't our classname */  
        if( !equal( classname, gMedKitClassname ) )  
        {  
        return FMRES_IGNORED;  
        }  
      
    /* --| Get the user health, and check some cvars */  
        new health = get_user_health( id );  
        new cvarhealth = get_pcvar_num( gKitHealthCvar );  
        new maxhealth = get_pcvar_num( gLimitHealthCvar );  
      
    /* --| Check player health */  
        if( health >= maxhealth )  
        {  
          return FMRES_IGNORED;  
        }  

    /* --| Show a red hud message to client */  
        set_hudmessage( 255, 0, 0, -1.0, 0.83, 2, 6.0, 3.0 );  
        show_hudmessage( id, "+ %d HP", cvarhealth );  
      
    /* Set the health and show some minor things, for fun */  
        fm_set_user_health( id, health + cvarhealth );  
        emit_sound( id, CHAN_ITEM, SOUND_KIT, VOL_NORM, ATTN_NORM ,0 , PITCH_NORM );  
          
    /* --| Show the healthkit item on hud */  
        message_begin( MSG_ONE_UNRELIABLE, gGMsgItemPickup, _, id );  
        write_string( "item_healthkit" );  
        message_end();  

    /* --| If cvar for fade is enabled, let's create the fade */  
        if( get_pcvar_num( gToggleFadeEnable ) == 1 )  
        {  
        message_begin( MSG_ONE_UNRELIABLE, gGMsgFade , _, id );  
        write_short( 1<<10 );  
        write_short( 1<<10 );  
        write_short( FFADE_IN );  
        write_byte( 255 );  
        write_byte( 0 );  
        write_byte( 0 );  
        write_byte( 75 );  
        message_end();  
        }  
      
    /* --| Now we need to remove the entity from floor */  
        engfunc( EngFunc_RemoveEntity, ent );  

        return FMRES_IGNORED;  
}  

/* --| Round start, we need to check entity and remove it */  
public logevent_round_start()  
{  
    /* --| If cvar to remove ent on round start is enabled, let's remove the ent */  
        if( get_pcvar_num( gToggleRemoveAtRstart ) == 1 )  
        {  
        new hkit = FM_NULLENT;  
        while( ( hkit = fm_find_ent_by_class( hkit, gMedKitClassname ) ) )  
        {  
            engfunc( EngFunc_RemoveEntity, hkit );  
        }  
    }      
}  

/* --| End of plugin */


выкладываю в надежде... мб кто сможет убрать левую нагрузку...


---
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Trollface_and_facepalm
сообщение 20.10.2011, 14:13
Сообщение #4


Стаж: 14 лет

Сообщений: 152
Благодарностей: 100
Полезность: 907

Какта так
Код
#include <amxmodx>
#include <fakemeta>

#define HK_GLOW 1 // Подсвечивать аптечки? 0/1
#define HK_FADE 1 // Затемнять экран при поднятии? 0/1
#define HK_REMOVE 1 // Убирать аптечки в начале раунда? 0/1
#define HK_HEALTH 15 // Сколько HP восстанавливает аптечка при простом убийстве?
#define HK_HS 30 // Сколько восстанавливает аптечка при хедшоте?
#define HK_LIMIT 100 // Максимум HP у игроков?
#define HK_TIME 0 // Сколько секунд апечка лежит на земле (0 - неограничено)
#define HK_OWNER 0 // Может подобрать только убивший? (1 - да, но после мерти или выхода могут все, 2 - да, после смерти или выхода убирать аптечки, 3 - всегда)

// Дальше не трогаем

#if HK_TIME > 0
    #include <engine>
#endif

#define min_ex(%1,%2) (%1 <= %2 ? %1 : %2)

new msg_pickup;

#if HK_FADE == 1
    new msg_fade;
#endif

public plugin_init()
{
    register_plugin("Healthkit", "3.3", "Tuty ft. Sho0ter");
    #if HK_REMOVE == 1
        register_event("HLTV", "ev_start", "a", "1=0", "2=0")
    #endif
    register_event("DeathMsg", "ev_death", "a", "1>0")
    register_forward(FM_Touch, "fm_touch");
    #if HK_TIME > 0
        register_think("healthkit_entity", "eg_think");
    #endif
    #if HK_FADE == 1
        msg_fade = get_user_msgid("ScreenFade");
    #endif
    msg_pickup = get_user_msgid("ItemPickup");
    return PLUGIN_CONTINUE;
}

public plugin_precache()
{
    precache_model("models/w_medkit.mdl");
    precache_sound("items/smallmedkit1.wav");
    return PLUGIN_CONTINUE;
}

public ev_death()
{
    #if HK_OWNER > 0
        new kid = read_data(1);
        if(!is_user_connected(kid))
        {
            kid = 0;
        }
    #endif
    new id = read_data(2);
    new hs = read_data(3);
    #if HK_OWNER == 1 || HK_OWNER == 2
        remove_owner(id)
    #endif
    static Float:origin[3], ent;
    pev(id, pev_origin, origin);
    origin[2] -= 36;
    if(!pev_valid((ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")))))
    {
        return PLUGIN_CONTINUE;
    }
    engfunc(EngFunc_SetOrigin, ent, origin);
    set_pev(ent, pev_classname, "healthkit_entity");
    engfunc(EngFunc_SetModel, ent, "models/w_medkit.mdl");
    dllfunc(DLLFunc_Spawn, ent);
    set_pev(ent, pev_solid, SOLID_BBOX);
    set_pev(ent, pev_movetype, MOVETYPE_NONE);
    engfunc(EngFunc_SetSize, ent, Float:{-23.160000, -13.660000, -0.050000}, Float:{11.470000, 12.780000, 6.720000});
    engfunc(EngFunc_DropToFloor, ent);
    #if HK_GLOW == 1
        set_pev(ent, pev_renderfx, kRenderFxGlowShell);
        set_pev(ent, pev_rendercolor, hs ? (Float:{255.0, 0.0, 0.0}) : (Float:{0.0, 255.0, 0.0}));
        set_pev(ent, pev_rendermode, kRenderFxNone);
        set_pev(ent, pev_renderamt, 27.0);
    #endif
    set_pev(ent, pev_health, hs ? float(HK_HS) : float(HK_HEALTH));
    #if HK_OWNER > 0
        set_pev(ent, pev_iuser1, kid);
    #endif
    #if HK_TIME > 0
        set_pev(ent, pev_nextthink, get_gametime() + float(HK_TIME));
    #endif
    return PLUGIN_CONTINUE;
}

public fm_touch(ent, id)
{
    if(!pev_valid(ent))
    {
        return FMRES_IGNORED;
    }
    static classname[32];  
    pev(ent, pev_classname, classname, 31);  
    if(!equal(classname, "healthkit_entity"))  
    {
        return FMRES_IGNORED;  
    }
    #if HK_OWNER > 0
        new kid = pev(ent, pev_iuser1);
        if(kid && kid != id)
        {
            return FMRES_IGNORED;
        }
    #endif
    new chp = pev(id, pev_health);
    if(chp >= HK_LIMIT)
    {  
        return FMRES_IGNORED;
    }
    new hkv = pev(ent, pev_health);
    if(hkv == HK_HEALTH)
    {
        set_hudmessage(0, 255, 0, -1.0, 0.83, 2, 6.0, 3.0);
    }
    else
    {
        set_hudmessage(255, 0, 0, -1.0, 0.83, 2, 6.0, 3.0);
    }
    show_hudmessage(id, "+ %d HP", hkv);
    set_pev(id, pev_health, float(min_ex(chp + hkv, HK_LIMIT)));
    emit_sound(id, CHAN_ITEM, "items/smallmedkit1.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM);
    message_begin(MSG_ONE_UNRELIABLE, msg_pickup, _, id);
    write_string("item_healthkit");
    message_end();
    #if HK_FADE == 1
        message_begin(MSG_ONE_UNRELIABLE, msg_fade , _, id);
        write_short(1 << 10);
        write_short(1 << 10);
        write_short(0x0000);
        if(chp == HK_HEALTH)
        {
            write_byte(255);
            write_byte(0);
        }
        else
        {
            write_byte(0);
            write_byte(255);
        }
        write_byte(0);
        write_byte(75);
        message_end();
    #endif
    engfunc(EngFunc_RemoveEntity, ent);
    return FMRES_IGNORED;
}


#if HK_TIME > 0
    public eg_think(ent)
    {
        if(!pev_valid(ent))
        {
            return FMRES_IGNORED;
        }
        engfunc(EngFunc_RemoveEntity, ent);
        return FMRES_IGNORED;
    }
#endif

#if HK_REMOVE == 1
    public ev_start()
    {
        new ent;
        while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "healthkit_entity")))
        {
            engfunc(EngFunc_RemoveEntity, ent);
        }
        return PLUGIN_CONTINUE;
    }
#endif

#if HK_OWNER == 1 || HK_OWNER == 2
    public client_disconnect(id)
    {
        return remove_owner(id);
    }
    
    public remove_owner(id)
    {
        new ent;
        while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "healthkit_entity")))
        {
            if(pev(ent, pev_iuser1) == id)
            {
                #if HK_OWNER == 1
                    set_pev(ent, pev_iuser1, 0);
                #else
                    engfunc(EngFunc_RemoveEntity, ent);
                #endif
            }
        }
        return PLUGIN_CONTINUE;
    }
#endif


!
Аккаунт пользователя заблокирован до: 17.7.273792712, 21:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя grey
сообщение 20.10.2011, 22:40
Сообщение #5


Стаж: 15 лет

Сообщений: 1785
Благодарностей: 1098
Полезность: 675

Цитата(Trollface_and_facepalm @ 20.10.2011, 15:13) *
Какта так
Код
#include <amxmodx>
#include <fakemeta>

#define HK_GLOW 1 // Подсвечивать аптечки? 0/1
#define HK_FADE 1 // Затемнять экран при поднятии? 0/1
#define HK_REMOVE 1 // Убирать аптечки в начале раунда? 0/1
#define HK_HEALTH 15 // Сколько HP восстанавливает аптечка при простом убийстве?
#define HK_HS 30 // Сколько восстанавливает аптечка при хедшоте?
#define HK_LIMIT 100 // Максимум HP у игроков?
#define HK_TIME 0 // Сколько секунд апечка лежит на земле (0 - неограничено)
#define HK_OWNER 0 // Может подобрать только убивший? (1 - да, но после мерти или выхода могут все, 2 - да, после смерти или выхода убирать аптечки, 3 - всегда)

// Дальше не трогаем

#if HK_TIME > 0
    #include <engine>
#endif

#define min_ex(%1,%2) (%1 <= %2 ? %1 : %2)

new msg_pickup;

#if HK_FADE == 1
    new msg_fade;
#endif

public plugin_init()
{
    register_plugin("Healthkit", "3.3", "Tuty ft. Sho0ter");
    #if HK_REMOVE == 1
        register_event("HLTV", "ev_start", "a", "1=0", "2=0")
    #endif
    register_event("DeathMsg", "ev_death", "a", "1>0")
    register_forward(FM_Touch, "fm_touch");
    #if HK_TIME > 0
        register_think("healthkit_entity", "eg_think");
    #endif
    #if HK_FADE == 1
        msg_fade = get_user_msgid("ScreenFade");
    #endif
    msg_pickup = get_user_msgid("ItemPickup");
    return PLUGIN_CONTINUE;
}

public plugin_precache()
{
    precache_model("models/w_medkit.mdl");
    precache_sound("items/smallmedkit1.wav");
    return PLUGIN_CONTINUE;
}

public ev_death()
{
    #if HK_OWNER > 0
        new kid = read_data(1);
        if(!is_user_connected(kid))
        {
            kid = 0;
        }
    #endif
    new id = read_data(2);
    new hs = read_data(3);
    #if HK_OWNER == 1 || HK_OWNER == 2
        remove_owner(id)
    #endif
    static Float:origin[3], ent;
    pev(id, pev_origin, origin);
    origin[2] -= 36;
    if(!pev_valid((ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")))))
    {
        return PLUGIN_CONTINUE;
    }
    engfunc(EngFunc_SetOrigin, ent, origin);
    set_pev(ent, pev_classname, "healthkit_entity");
    engfunc(EngFunc_SetModel, ent, "models/w_medkit.mdl");
    dllfunc(DLLFunc_Spawn, ent);
    set_pev(ent, pev_solid, SOLID_BBOX);
    set_pev(ent, pev_movetype, MOVETYPE_NONE);
    engfunc(EngFunc_SetSize, ent, Float:{-23.160000, -13.660000, -0.050000}, Float:{11.470000, 12.780000, 6.720000});
    engfunc(EngFunc_DropToFloor, ent);
    #if HK_GLOW == 1
        set_pev(ent, pev_renderfx, kRenderFxGlowShell);
        set_pev(ent, pev_rendercolor, hs ? (Float:{255.0, 0.0, 0.0}) : (Float:{0.0, 255.0, 0.0}));
        set_pev(ent, pev_rendermode, kRenderFxNone);
        set_pev(ent, pev_renderamt, 27.0);
    #endif
    set_pev(ent, pev_health, hs ? float(HK_HS) : float(HK_HEALTH));
    #if HK_OWNER > 0
        set_pev(ent, pev_iuser1, kid);
    #endif
    #if HK_TIME > 0
        set_pev(ent, pev_nextthink, get_gametime() + float(HK_TIME));
    #endif
    return PLUGIN_CONTINUE;
}

public fm_touch(ent, id)
{
    if(!pev_valid(ent))
    {
        return FMRES_IGNORED;
    }
    static classname[32];  
    pev(ent, pev_classname, classname, 31);  
    if(!equal(classname, "healthkit_entity"))  
    {
        return FMRES_IGNORED;  
    }
    #if HK_OWNER > 0
        new kid = pev(ent, pev_iuser1);
        if(kid && kid != id)
        {
            return FMRES_IGNORED;
        }
    #endif
    new chp = pev(id, pev_health);
    if(chp >= HK_LIMIT)
    {  
        return FMRES_IGNORED;
    }
    new hkv = pev(ent, pev_health);
    if(hkv == HK_HEALTH)
    {
        set_hudmessage(0, 255, 0, -1.0, 0.83, 2, 6.0, 3.0);
    }
    else
    {
        set_hudmessage(255, 0, 0, -1.0, 0.83, 2, 6.0, 3.0);
    }
    show_hudmessage(id, "+ %d HP", hkv);
    set_pev(id, pev_health, float(min_ex(chp + hkv, HK_LIMIT)));
    emit_sound(id, CHAN_ITEM, "items/smallmedkit1.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM);
    message_begin(MSG_ONE_UNRELIABLE, msg_pickup, _, id);
    write_string("item_healthkit");
    message_end();
    #if HK_FADE == 1
        message_begin(MSG_ONE_UNRELIABLE, msg_fade , _, id);
        write_short(1 << 10);
        write_short(1 << 10);
        write_short(0x0000);
        if(chp == HK_HEALTH)
        {
            write_byte(255);
            write_byte(0);
        }
        else
        {
            write_byte(0);
            write_byte(255);
        }
        write_byte(0);
        write_byte(75);
        message_end();
    #endif
    engfunc(EngFunc_RemoveEntity, ent);
    return FMRES_IGNORED;
}


#if HK_TIME > 0
    public eg_think(ent)
    {
        if(!pev_valid(ent))
        {
            return FMRES_IGNORED;
        }
        engfunc(EngFunc_RemoveEntity, ent);
        return FMRES_IGNORED;
    }
#endif

#if HK_REMOVE == 1
    public ev_start()
    {
        new ent;
        while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "healthkit_entity")))
        {
            engfunc(EngFunc_RemoveEntity, ent);
        }
        return PLUGIN_CONTINUE;
    }
#endif

#if HK_OWNER == 1 || HK_OWNER == 2
    public client_disconnect(id)
    {
        return remove_owner(id);
    }
    
    public remove_owner(id)
    {
        new ent;
        while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "healthkit_entity")))
        {
            if(pev(ent, pev_iuser1) == id)
            {
                #if HK_OWNER == 1
                    set_pev(ent, pev_iuser1, 0);
                #else
                    engfunc(EngFunc_RemoveEntity, ent);
                #endif
            }
        }
        return PLUGIN_CONTINUE;
    }
#endif

спасибо thank_you2.gif


---
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Trollface_and_facepalm
сообщение 21.10.2011, 14:14
Сообщение #6


Стаж: 14 лет

Сообщений: 152
Благодарностей: 100
Полезность: 907

healthkit.sma
Код
#include <amxmodx>
#include <fakemeta>

#define HK_GLOW 1 // Подсвечивать аптечки? 0/1
#define HK_FADE 1 // Затемнять экран при поднятии? 0/1
#define HK_REMOVE 1 // Убирать аптечки в начале раунда? 0/1
#define HK_HEALTH 15 // Сколько HP восстанавливает аптечка при простом убийстве?
#define HK_HS 30 // Сколько восстанавливает аптечка при хедшоте?
#define HK_FC 10 // Каков процент вероятности, что выпадет полная хиллка?
#define HK_LIMIT 100 // Максимум HP у игроков?
#define HK_TIME 0 // Сколько секунд апечка лежит на земле (0 - неограничено)
#define HK_OWNER 0 // Может подобрать только убивший? (1 - да, но после мерти или выхода могут все, 2 - да, после смерти или выхода убирать аптечки, 3 - всегда)

// Дальше не трогаем

#if HK_TIME > 0
    #include <engine>
#endif

#define min_ex(%1,%2) (%1 <= %2 ? %1 : %2)

new msg_pickup;

#if HK_FADE == 1
    new msg_fade;
#endif

public plugin_init()
{
    register_plugin("Healthkit", "3.3", "Tuty ft. Sho0ter");
    #if HK_REMOVE == 1
        register_event("HLTV", "ev_start", "a", "1=0", "2=0")
    #endif
    register_event("DeathMsg", "ev_death", "a", "1>0")
    register_forward(FM_Touch, "fm_touch");
    #if HK_TIME > 0
        register_think("healthkit_entity", "eg_think");
    #endif
    #if HK_FADE == 1
        msg_fade = get_user_msgid("ScreenFade");
    #endif
    msg_pickup = get_user_msgid("ItemPickup");
    return PLUGIN_CONTINUE;
}

public plugin_precache()
{
    precache_model("models/w_medkit.mdl");
    precache_sound("items/smallmedkit1.wav");
    return PLUGIN_CONTINUE;
}

public ev_death()
{
    #if HK_OWNER > 0
        new kid = read_data(1);
        if(!is_user_connected(kid))
        {
            kid = 0;
        }
    #endif
    new fc = (random_num(1, 100) <= HK_FC)
    new id = read_data(2);
    new hs = read_data(3);
    #if HK_OWNER == 1 || HK_OWNER == 2
        remove_owner(id)
    #endif
    static Float:origin[3], ent;
    pev(id, pev_origin, origin);
    origin[2] -= 36;
    if(!pev_valid((ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")))))
    {
        return PLUGIN_CONTINUE;
    }
    engfunc(EngFunc_SetOrigin, ent, origin);
    set_pev(ent, pev_classname, "healthkit_entity");
    engfunc(EngFunc_SetModel, ent, "models/w_medkit.mdl");
    dllfunc(DLLFunc_Spawn, ent);
    set_pev(ent, pev_solid, SOLID_BBOX);
    set_pev(ent, pev_movetype, MOVETYPE_NONE);
    engfunc(EngFunc_SetSize, ent, Float:{-23.160000, -13.660000, -0.050000}, Float:{11.470000, 12.780000, 6.720000});
    engfunc(EngFunc_DropToFloor, ent);
    #if HK_GLOW == 1
        set_pev(ent, pev_renderfx, kRenderFxGlowShell);
        set_pev(ent, pev_rendercolor, fc ? (Float:{255.0, 0.0, 0.0}) : (hs ? (Float:{0.0, 255.0, 0.0}) : (Float:{0.0, 0.0, 255.0})));
        set_pev(ent, pev_rendermode, kRenderFxNone);
        set_pev(ent, pev_renderamt, 27.0);
    #endif
    set_pev(ent, pev_health, fc ? float(HK_LIMIT) : (hs ? float(HK_HS) : float(HK_HEALTH)));
    #if HK_OWNER > 0
        set_pev(ent, pev_iuser1, kid);
    #endif
    #if HK_TIME > 0
        set_pev(ent, pev_nextthink, get_gametime() + float(HK_TIME));
    #endif
    return PLUGIN_CONTINUE;
}

public fm_touch(ent, id)
{
    if(!pev_valid(ent))
    {
        return FMRES_IGNORED;
    }
    static classname[32];  
    pev(ent, pev_classname, classname, 31);  
    if(!equal(classname, "healthkit_entity"))  
    {
        return FMRES_IGNORED;  
    }
    #if HK_OWNER > 0
        new kid = pev(ent, pev_iuser1);
        if(kid && kid != id)
        {
            return FMRES_IGNORED;
        }
    #endif
    new chp = pev(id, pev_health);
    if(chp >= HK_LIMIT)
    {  
        return FMRES_IGNORED;
    }
    new hkv = pev(ent, pev_health);
    if(hkv == HK_LIMIT)
    {
        set_hudmessage(255, 0, 0, -1.0, 0.80, 0, 6.0, 3.0, 0.1, 0.1);
    }
    else if(hkv == HK_HS)
    {
        set_hudmessage(0, 255, 0, -1.0, 0.80, 0, 6.0, 3.0, 0.1, 0.1);
    }
    else if(hkv == HK_HEALTH)
    {
        set_hudmessage(0, 0, 255, -1.0, 0.80, 0, 6.0, 3.0, 0.1, 0.1);
    }
    show_hudmessage(id, "+ %d HP", hkv);
    set_pev(id, pev_health, float(min_ex(chp + hkv, HK_LIMIT)));
    emit_sound(id, CHAN_ITEM, "items/smallmedkit1.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM);
    message_begin(MSG_ONE_UNRELIABLE, msg_pickup, _, id);
    write_string("item_healthkit");
    message_end();
    #if HK_FADE == 1
        message_begin(MSG_ONE_UNRELIABLE, msg_fade , _, id);
        write_short(1 << 10);
        write_short(1 << 10);
        write_short(0x0000);
        write_byte(hkv == HK_LIMIT ? 255 : 0);
        write_byte(hkv == HK_HS ? 255 : 0);
        write_byte(hkv == HK_HEALTH ? 255 : 0);
        write_byte(150);
        message_end();
    #endif
    engfunc(EngFunc_RemoveEntity, ent);
    return FMRES_IGNORED;
}


#if HK_TIME > 0
    public eg_think(ent)
    {
        if(!pev_valid(ent))
        {
            return FMRES_IGNORED;
        }
        engfunc(EngFunc_RemoveEntity, ent);
        return FMRES_IGNORED;
    }
#endif

#if HK_REMOVE == 1
    public ev_start()
    {
        new ent;
        while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "healthkit_entity")))
        {
            engfunc(EngFunc_RemoveEntity, ent);
        }
        return PLUGIN_CONTINUE;
    }
#endif

#if HK_OWNER == 1 || HK_OWNER == 2
    public client_disconnect(id)
    {
        return remove_owner(id);
    }
    
    public remove_owner(id)
    {
        new ent;
        while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "healthkit_entity")))
        {
            if(pev(ent, pev_iuser1) == id)
            {
                #if HK_OWNER == 1
                    set_pev(ent, pev_iuser1, 0);
                #else
                    engfunc(EngFunc_RemoveEntity, ent);
                #endif
            }
        }
        return PLUGIN_CONTINUE;
    }
#endif


Допилил ещё немного и добавил шансовое выпадение 100% хиллки.
P.S. Настроил себе под War3FT сервер.
P.S.2. Что-то я сегодня добрый...


!
Аккаунт пользователя заблокирован до: 17.7.273792712, 21:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя grey
сообщение 21.10.2011, 14:49
Сообщение #7


Стаж: 15 лет

Сообщений: 1785
Благодарностей: 1098
Полезность: 675

Цитата(Trollface_and_facepalm @ 21.10.2011, 15:14) *
P.S. Настроил себе под War3FT сервер.

то есть настроил под War3FT? не очень знаком с этим модом, но на сколько я знаю там у хуманов нужно прокачивать жизни (вроде 130 кап), под эти аптечки не очень подходит... сам использую практически похожий мод, есть классы от 30хп по 1к+


---
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя grey
сообщение 21.10.2011, 17:33
Сообщение #8


Стаж: 15 лет

Сообщений: 1785
Благодарностей: 1098
Полезность: 675

Цитата(Trollface_and_facepalm @ 21.10.2011, 15:14) *
healthkit.sma
Код
#include <amxmodx>
#include <fakemeta>

#define HK_GLOW 1 // Подсвечивать аптечки? 0/1
#define HK_FADE 1 // Затемнять экран при поднятии? 0/1
#define HK_REMOVE 1 // Убирать аптечки в начале раунда? 0/1
#define HK_HEALTH 15 // Сколько HP восстанавливает аптечка при простом убийстве?
#define HK_HS 30 // Сколько восстанавливает аптечка при хедшоте?
#define HK_FC 10 // Каков процент вероятности, что выпадет полная хиллка?
#define HK_LIMIT 100 // Максимум HP у игроков?
#define HK_TIME 0 // Сколько секунд апечка лежит на земле (0 - неограничено)
#define HK_OWNER 0 // Может подобрать только убивший? (1 - да, но после мерти или выхода могут все, 2 - да, после смерти или выхода убирать аптечки, 3 - всегда)

// Дальше не трогаем

#if HK_TIME > 0
    #include <engine>
#endif

#define min_ex(%1,%2) (%1 <= %2 ? %1 : %2)

new msg_pickup;

#if HK_FADE == 1
    new msg_fade;
#endif

public plugin_init()
{
    register_plugin("Healthkit", "3.3", "Tuty ft. Sho0ter");
    #if HK_REMOVE == 1
        register_event("HLTV", "ev_start", "a", "1=0", "2=0")
    #endif
    register_event("DeathMsg", "ev_death", "a", "1>0")
    register_forward(FM_Touch, "fm_touch");
    #if HK_TIME > 0
        register_think("healthkit_entity", "eg_think");
    #endif
    #if HK_FADE == 1
        msg_fade = get_user_msgid("ScreenFade");
    #endif
    msg_pickup = get_user_msgid("ItemPickup");
    return PLUGIN_CONTINUE;
}

public plugin_precache()
{
    precache_model("models/w_medkit.mdl");
    precache_sound("items/smallmedkit1.wav");
    return PLUGIN_CONTINUE;
}

public ev_death()
{
    #if HK_OWNER > 0
        new kid = read_data(1);
        if(!is_user_connected(kid))
        {
            kid = 0;
        }
    #endif
    new fc = (random_num(1, 100) <= HK_FC)
    new id = read_data(2);
    new hs = read_data(3);
    #if HK_OWNER == 1 || HK_OWNER == 2
        remove_owner(id)
    #endif
    static Float:origin[3], ent;
    pev(id, pev_origin, origin);
    origin[2] -= 36;
    if(!pev_valid((ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")))))
    {
        return PLUGIN_CONTINUE;
    }
    engfunc(EngFunc_SetOrigin, ent, origin);
    set_pev(ent, pev_classname, "healthkit_entity");
    engfunc(EngFunc_SetModel, ent, "models/w_medkit.mdl");
    dllfunc(DLLFunc_Spawn, ent);
    set_pev(ent, pev_solid, SOLID_BBOX);
    set_pev(ent, pev_movetype, MOVETYPE_NONE);
    engfunc(EngFunc_SetSize, ent, Float:{-23.160000, -13.660000, -0.050000}, Float:{11.470000, 12.780000, 6.720000});
    engfunc(EngFunc_DropToFloor, ent);
    #if HK_GLOW == 1
        set_pev(ent, pev_renderfx, kRenderFxGlowShell);
        set_pev(ent, pev_rendercolor, fc ? (Float:{255.0, 0.0, 0.0}) : (hs ? (Float:{0.0, 255.0, 0.0}) : (Float:{0.0, 0.0, 255.0})));
        set_pev(ent, pev_rendermode, kRenderFxNone);
        set_pev(ent, pev_renderamt, 27.0);
    #endif
    set_pev(ent, pev_health, fc ? float(HK_LIMIT) : (hs ? float(HK_HS) : float(HK_HEALTH)));
    #if HK_OWNER > 0
        set_pev(ent, pev_iuser1, kid);
    #endif
    #if HK_TIME > 0
        set_pev(ent, pev_nextthink, get_gametime() + float(HK_TIME));
    #endif
    return PLUGIN_CONTINUE;
}

public fm_touch(ent, id)
{
    if(!pev_valid(ent))
    {
        return FMRES_IGNORED;
    }
    static classname[32];  
    pev(ent, pev_classname, classname, 31);  
    if(!equal(classname, "healthkit_entity"))  
    {
        return FMRES_IGNORED;  
    }
    #if HK_OWNER > 0
        new kid = pev(ent, pev_iuser1);
        if(kid && kid != id)
        {
            return FMRES_IGNORED;
        }
    #endif
    new chp = pev(id, pev_health);
    if(chp >= HK_LIMIT)
    {  
        return FMRES_IGNORED;
    }
    new hkv = pev(ent, pev_health);
    if(hkv == HK_LIMIT)
    {
        set_hudmessage(255, 0, 0, -1.0, 0.80, 0, 6.0, 3.0, 0.1, 0.1);
    }
    else if(hkv == HK_HS)
    {
        set_hudmessage(0, 255, 0, -1.0, 0.80, 0, 6.0, 3.0, 0.1, 0.1);
    }
    else if(hkv == HK_HEALTH)
    {
        set_hudmessage(0, 0, 255, -1.0, 0.80, 0, 6.0, 3.0, 0.1, 0.1);
    }
    show_hudmessage(id, "+ %d HP", hkv);
    set_pev(id, pev_health, float(min_ex(chp + hkv, HK_LIMIT)));
    emit_sound(id, CHAN_ITEM, "items/smallmedkit1.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM);
    message_begin(MSG_ONE_UNRELIABLE, msg_pickup, _, id);
    write_string("item_healthkit");
    message_end();
    #if HK_FADE == 1
        message_begin(MSG_ONE_UNRELIABLE, msg_fade , _, id);
        write_short(1 << 10);
        write_short(1 << 10);
        write_short(0x0000);
        write_byte(hkv == HK_LIMIT ? 255 : 0);
        write_byte(hkv == HK_HS ? 255 : 0);
        write_byte(hkv == HK_HEALTH ? 255 : 0);
        write_byte(150);
        message_end();
    #endif
    engfunc(EngFunc_RemoveEntity, ent);
    return FMRES_IGNORED;
}


#if HK_TIME > 0
    public eg_think(ent)
    {
        if(!pev_valid(ent))
        {
            return FMRES_IGNORED;
        }
        engfunc(EngFunc_RemoveEntity, ent);
        return FMRES_IGNORED;
    }
#endif

#if HK_REMOVE == 1
    public ev_start()
    {
        new ent;
        while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "healthkit_entity")))
        {
            engfunc(EngFunc_RemoveEntity, ent);
        }
        return PLUGIN_CONTINUE;
    }
#endif

#if HK_OWNER == 1 || HK_OWNER == 2
    public client_disconnect(id)
    {
        return remove_owner(id);
    }
    
    public remove_owner(id)
    {
        new ent;
        while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "healthkit_entity")))
        {
            if(pev(ent, pev_iuser1) == id)
            {
                #if HK_OWNER == 1
                    set_pev(ent, pev_iuser1, 0);
                #else
                    engfunc(EngFunc_RemoveEntity, ent);
                #endif
            }
        }
        return PLUGIN_CONTINUE;
    }
#endif


если интересно - инфо с тестов
Нагрузка при 20 человек как на 32, 3 краша за 1 час, но сервер сам по себе не стабильный считается нормальным 1-2 краша за сутки


---
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Trollface_and_facepalm
сообщение 21.10.2011, 17:40
Сообщение #9


Стаж: 14 лет

Сообщений: 152
Благодарностей: 100
Полезность: 907

Цитата(greykoo @ 21.10.2011, 18:33) *
если интересно - инфо с тестов
Нагрузка при 20 человек как на 32, 3 краша за 1 час, но сервер сам по себе не стабильный считается нормальным 1-2 краша за сутки

Ну у меня сервер не падает, на нагрузку особо не смотрю т.к. фпс держит.
Но то, что он грузит прилично (а грузит тут register_touch) понятно. Для наглядности, если 32 стохелсовых игрока с 101 фпс одновременно станут на аптечки...то функция обработки поднятия вызовится 3232 раза в секунду, а внутри неё ещё 4-5 функций и того до 16000 вызовов в секунду. :).
Насчёт ХП - то раз у тебя уже есть 100 хп (пусть и 130 максимум) то аптечка тебе явно незачем.
P.S. И это ещё при том, что настройки я сделал дефайнами т.е. код, не используемый в зависимости от настроек, удаляется в процессе компиляции. Случай с кварами намного печальней.

Отредактировал: Trollface_and_facepalm, - 21.10.2011, 17:45


!
Аккаунт пользователя заблокирован до: 17.7.273792712, 21:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Trollface_and_facepalm
сообщение 22.10.2011, 0:54
Сообщение #10


Стаж: 14 лет

Сообщений: 152
Благодарностей: 100
Полезность: 907

Держи: Прикрепленный файл  healthkit.zip ( 2,68 килобайт ) Кол-во скачиваний: 10

1. Оптимизировал код (теперь нагрузка будет в разы меньше);
2. Добавил новые настройки на уровне компиляции;
3. Добавил няшный эффект исчезания;
4. Добавил анимацию выпадения аптечки;
5. Убрал твёрдость;

P.S. Блин, чёто я сегодня уже чересчур добрый... С тебя печанька.

Отредактировал: Trollface_and_facepalm, - 22.10.2011, 1:18


!
Аккаунт пользователя заблокирован до: 17.7.273792712, 21:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя grey
сообщение 22.10.2011, 9:51
Сообщение #11


Стаж: 15 лет

Сообщений: 1785
Благодарностей: 1098
Полезность: 675

Trollface_and_fa...,
Обновления радуют

Цитата
P.S. Блин, чёто я сегодня уже чересчур добрый... С тебя печанька.

Наверное потому что этот плагин нужен не только мне но и тебе buhaem.gif

кстати, нафлудило 63к строк в консоли, ошибка
L 10/22/2011 - 10:36:11: [AMXX] Run time error 10 (plugin "healthkit.amxx") (native "DisableHamForward") - debug not enabled!
L 10/22/2011 - 10:36:11: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 10/22/2011 - 10:36:11: [HAMSANDWICH] Invalid HamHook handle.
L 10/22/2011 - 10:36:11: [AMXX] Run time error 10 (plugin "healthkit.amxx") (native "DisableHamForward") - debug not enabled!
L 10/22/2011 - 10:36:11: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).


---
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Trollface_and_facepalm
сообщение 22.10.2011, 12:25
Сообщение #12


Стаж: 14 лет

Сообщений: 152
Благодарностей: 100
Полезность: 907

Цитата(greykoo @ 22.10.2011, 10:51) *
Trollface_and_fa...,
Обновления радуют


Наверное потому что этот плагин нужен не только мне но и тебе buhaem.gif

кстати, нафлудило 63к строк в консоли, ошибка
L 10/22/2011 - 10:36:11: [AMXX] Run time error 10 (plugin "healthkit.amxx") (native "DisableHamForward") - debug not enabled!
L 10/22/2011 - 10:36:11: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 10/22/2011 - 10:36:11: [HAMSANDWICH] Invalid HamHook handle.
L 10/22/2011 - 10:36:11: [AMXX] Run time error 10 (plugin "healthkit.amxx") (native "DisableHamForward") - debug not enabled!
L 10/22/2011 - 10:36:11: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).

Я ожидал такого :) Включи дебаг.


!
Аккаунт пользователя заблокирован до: 17.7.273792712, 21:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя grey
сообщение 22.10.2011, 12:38
Сообщение #13


Стаж: 15 лет

Сообщений: 1785
Благодарностей: 1098
Полезность: 675

Цитата(Trollface_and_facepalm @ 22.10.2011, 13:25) *
Я ожидал такого :) Включи дебаг.

теперь такое pardon.gif
лог
L 10/22/2011 - 13:34:53: [AMXX] Displaying debug trace (plugin "healthkit.amxx")
L 10/22/2011 - 13:34:53: [AMXX] Run time error 10: native error (native "DisableHamForward")
L 10/22/2011 - 13:34:53: [AMXX] [0] healthkit.sma::remove_entity (line 255)
L 10/22/2011 - 13:34:53: [AMXX] [1] healthkit.sma::ham_think (line 202)
L 10/22/2011 - 13:34:53: [HAMSANDWICH] Invalid HamHook handle.


---
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Trollface_and_facepalm
сообщение 22.10.2011, 16:07
Сообщение #14


Стаж: 14 лет

Сообщений: 152
Благодарностей: 100
Полезность: 907

Держи: Прикрепленный файл  healthkit.zip ( 2,96 килобайт ) Кол-во скачиваний: 24

Поправил, ещё оптимизировал и немного добавил отсебятины.


!
Аккаунт пользователя заблокирован до: 17.7.273792712, 21:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя grey
сообщение 22.10.2011, 17:52
Сообщение #15


Стаж: 15 лет

Сообщений: 1785
Благодарностей: 1098
Полезность: 675

Цитата(Trollface_and_facepalm @ 22.10.2011, 17:07) *
Держи: Прикрепленный файл  healthkit.zip ( 2,96 килобайт ) Кол-во скачиваний: 24

Поправил, ещё оптимизировал и немного добавил отсебятины.

Есть 1 маленький баг, аптечка летает за тобой на уровне торса, а так ошибок и нагрузки практически нет.
скрин, весело так играть pardon.gif


-на нормальном сервере всё в порядке thank_you2.gif

Отредактировал: greykoo, - 22.10.2011, 19:44


---
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Trollface_and_facepalm
сообщение 22.10.2011, 20:04
Сообщение #16


Стаж: 14 лет

Сообщений: 152
Благодарностей: 100
Полезность: 907

Цитата(greykoo @ 22.10.2011, 18:52) *
Есть 1 маленький баг, аптечка летает за тобой на уровне торса, а так ошибок и нагрузки практически нет.
скрин, весело так играть pardon.gif


-на нормальном сервере всё в порядке thank_you2.gif

Она должна на землю падать.


!
Аккаунт пользователя заблокирован до: 17.7.273792712, 21:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя grey
сообщение 22.10.2011, 20:36
Сообщение #17


Стаж: 15 лет

Сообщений: 1785
Благодарностей: 1098
Полезность: 675

Цитата(Trollface_and_facepalm @ 22.10.2011, 21:04) *
Она должна на землю падать.

это тестовый сервер, игра с ботами, там куча плагинов, на игровом сервере всё отлично работает.


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