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

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

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

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

Nade Health

Статус пользователя E1zy
сообщение 17.12.2016, 0:09
Сообщение #1
Стаж: 9 лет 6 месяцев

Сообщений: 21
Благодарностей: 1
Полезность: 33

Привет всем!
Обращаюсь к Вам, скриптеры. У меня есть плагин лечебной гранаты, которая заменяет обычный смок (дым).
Но в нём есть пару багов. Буду очень благодарен, если не проигнорируют эту тему и действительно помогут.
Баги:
1. Если ты обычный игрок, кидаешь дым - смок летит, когда должен появляться спрайт клубков дыма, ничего нету.
2. Админу можно брать бесконечное кол-во лечебных гранат. ( не баг, а недоработка, если можно, ограничение 1 грена - в 1 раунд)
Cкрытый текст

Код
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>                                                                                                          
#include < cstrike >
#include < fun >
#include < engine >

#define PLUGIN_NAME "Nade Health"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "Eazy*"
                                      
#define V_MODEL "models/v_he_mk_nade.mdl"
#define P_MODEL "models/p_he_mk_nade.mdl"
#define W_MODEL "models/w_he_mk_nade.mdl"


#define SMOKE_SCALE 30                                          
#define SMOKE_FRAMERATE 12
#define GRENADE_COST_ADMIN 0                                      

#define ACCESS_VIP   ADMIN_LEVEL_H
#define ACCESS_ADM   ADMIN_BAN

new ExplSpr, ExplSpr2, ExplSpr3, ExplYO, g_iSpriteCircle, SayText

// do not edit
new const g_sound_explosion[] = "weapons/sg_explode.wav"
new const g_classname_grenade[] = "grenade"
new g_eventid_createsmoke

new bool:g_bBuyGrenade[33]

public plugin_init() {
   register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)

   register_forward(FM_EmitSound, "forward_emitsound")
   register_forward(FM_PlaybackEvent, "forward_playbackevent")
   register_event( "CurWeapon", "CurWeapon", "be", "1=1" )
   register_forward( FM_SetModel, "forward_model", 1 )
    
   RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", true)
    
   register_clcmd("say /hg", "CmdBuyGrenade")
   register_clcmd("say /healthgren", "CmdBuyGrenade")
   SayText = get_user_msgid("SayText")


   g_eventid_createsmoke = engfunc(EngFunc_PrecacheEvent, 1, "events/createsmoke.sc")
}

public plugin_precache()
{
   ExplSpr = precache_model("sprites/gp_1.spr");
   ExplSpr2 = precache_model("sprites/gp_2.spr");
   ExplSpr3 = precache_model("sprites/gp_3.spr");
   precache_sound("woomen_expr.wav")
   ExplYO = precache_model("sprites/woomensx.spr");
    
   g_iSpriteCircle = precache_model( "sprites/shockwave.spr" );
    
   precache_model(V_MODEL)
   precache_model(W_MODEL)
   precache_model(P_MODEL)
}

public fw_PlayerSpawn_Post(id)
   g_bBuyGrenade[id] = false

public CurWeapon(id)
{
   if(is_user_alive(id) && g_bBuyGrenade[id])
   {
      if(get_user_weapon(id) == CSW_SMOKEGRENADE)
      {
         set_pev(id, pev_viewmodel2, V_MODEL)
         set_pev(id, pev_weaponmodel2, P_MODEL)
      }
   }
}

public CmdBuyGrenade(id)
{
   if(is_user_connected(id))
   {
      new iMoney = cs_get_user_money(id)
      if(get_user_flags(id) & ACCESS_ADM)
      {
         if(iMoney >= GRENADE_COST_ADMIN)
         {
            cs_set_user_money(id, iMoney - GRENADE_COST_ADMIN)
            give_item(id, "weapon_smokegrenade")
            g_bBuyGrenade[id] = true
            print_col_chat(id, "^1[^4Информация^1] Вы взяли ^3лечебную гранату^1!")
         }
         }
         else
            print_col_chat(id, "^1[^4Информация^1] Лечебные гранаты могут брать ^3только администраторы^1!")
      }
      
   }

public forward_model( entity, const model[] )
{
   if( !pev_valid( entity ) ) return FMRES_IGNORED;
    
   new id = pev(entity, pev_owner)
    
   if(is_user_alive(id) && g_bBuyGrenade[id] && equal( model, "models/w_smokegrenade.mdl" ))
      engfunc ( EngFunc_SetModel, entity, W_MODEL );
    
   return FMRES_IGNORED;
}

public forward_emitsound(ent, channel, const sound[])
{
   if (!equal(sound, g_sound_explosion) || !is_grenade(ent))
      return FMRES_IGNORED
    
   new id = pev(ent, pev_owner)
    
   if(is_user_alive(id) && g_bBuyGrenade[id])
   {
      static Float:origin[3]
      pev(ent, pev_origin, origin)
      engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON, "woomen_expr.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
      //engfunc(EngFunc_RemoveEntity, ent)
      //create_smoke(origin)
      
      message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0})
      write_byte(TE_SPRITETRAIL) //Спрайт захвата
      write_coord(floatround(origin[0]))
      write_coord(floatround(origin[1]))
      write_coord(floatround(origin[2])+20)
      write_coord(floatround(origin[0]))
      write_coord(floatround(origin[1]))
      write_coord(floatround(origin[2])+80)
      write_short(ExplSpr)
      write_byte(20)
      write_byte(20)
      write_byte(4)
      write_byte(20)
      write_byte(10)
      message_end()
      
      message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0})
      write_byte(TE_SPRITETRAIL) //Спрайт захвата
      write_coord(floatround(origin[0]))
      write_coord(floatround(origin[1]))
      write_coord(floatround(origin[2])+20)
      write_coord(floatround(origin[0]))
      write_coord(floatround(origin[1]))
      write_coord(floatround(origin[2])+80)
      write_short(ExplSpr2)
      write_byte(20)
      write_byte(20)
      write_byte(4)
      write_byte(20)
      write_byte(10)
      message_end()
      
      message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0})
      write_byte(TE_SPRITETRAIL) //Спрайт захвата
      write_coord(floatround(origin[0]))
      write_coord(floatround(origin[1]))
      write_coord(floatround(origin[2])+20)
      write_coord(floatround(origin[0]))
      write_coord(floatround(origin[1]))
      write_coord(floatround(origin[2])+80)
      write_short(ExplSpr3)
      write_byte(20)
      write_byte(20)
      write_byte(4)
      write_byte(20)
      write_byte(10)
      message_end()
      
      message_begin(MSG_ALL, SVC_TEMPENTITY);
      write_byte(TE_SPRITE);
      write_coord(floatround(origin[0]));
      write_coord(floatround(origin[1]));
      write_coord(floatround(origin[2]) + 70);
      write_short(ExplYO);
      write_byte(5);
      write_byte(100);
      message_end();//MESSAGE ENDING
      
      create_blast_circle(ent, 10, 255, 40)
      
      new tre
      while((tre = find_ent_in_sphere(tre,origin,250.0)) != 0)
      {
         if(is_user_alive(tre) && get_user_team(tre) == get_user_team(id))
         {
            message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, tre)
            write_short(1<<10)
            write_short(1<<10)
            write_short(0x0000)
            write_byte(170)
            write_byte(255)
            write_byte(0)
            write_byte(75)
            message_end()
            
            set_user_rendering(tre, kRenderFxGlowShell, 0, 255, 50, kRenderNormal, 20)
            set_task(1.5, "UnEffect", tre)            
            set_user_health(tre, 100)
         }
      }
   }
   return FMRES_SUPERCEDE
}

public UnEffect(tre)
{
   if(is_user_alive(tre))
   {
      set_user_rendering(tre)
   }
}

public forward_playbackevent(flags, invoker, eventindex) {
   // we do not need a large amount of smoke
   if (eventindex == g_eventid_createsmoke)
      return FMRES_SUPERCEDE

   return FMRES_IGNORED
}

bool:is_grenade(ent) {
   if (!pev_valid(ent))
      return false

   static classname[sizeof g_classname_grenade + 1]
   pev(ent, pev_classname, classname, sizeof g_classname_grenade)
   if (equal(classname, g_classname_grenade))
      return true

   return false
}

stock bool:is_hull_vacant(const Float:origin[3], hull) {
   new tr = 0
   engfunc(EngFunc_TraceHull, origin, origin, 0, hull, 0, tr)
   if (!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen))
      return true
    
   return false
}

stock create_blast_circle(ent, R, G, B)
{
   static Float: fOrigin[3], iOrigin[3];
    
   pev(ent, pev_origin, fOrigin);
    
   FVecIVec( fOrigin, iOrigin );
      
   message_begin( MSG_BROADCAST, SVC_TEMPENTITY, iOrigin );
   write_byte( TE_BEAMCYLINDER );
   write_coord( iOrigin[ 0 ] );
   write_coord( iOrigin[ 1 ] );
   write_coord( iOrigin[ 2 ]);
   write_coord( iOrigin[ 0 ] );
   write_coord( iOrigin[ 1 ] );
   write_coord( iOrigin[ 2 ] + 250); // radius
   write_short( g_iSpriteCircle );
   write_byte( 0 );   // start framerate
   write_byte( 1 );   // framerate
   write_byte( 5 );   // life
   write_byte( 30 );   // width
   write_byte( 1 );    // amplitude
    
   write_byte(R);
   write_byte(G);
   write_byte(B);
    
   write_byte( 255 );   // brightness
   write_byte( 5 );   // speed
   message_end();
}      
stock print_col_chat(const id, const input[], any:...)
{
    new count = 1, players[32];                          
    static msg[191];
    vformat(msg, 190, input, 3);
    replace_all(msg, 190, "!g", "^4"); // зеленый цвет чата
    replace_all(msg, 190, "!y", "^1"); // обычный цвет чата (желтый)  
    replace_all(msg, 190, "!t", "^3"); // комадный цвет чата (КТ - синий, ТТ - красный)
    if (id) players[0] = id; else get_players(players, count, "ch");
    {
        for ( new i = 0; i < count; i++ )
        {
            if ( is_user_connected(players[i]) )
            {
                message_begin(MSG_ONE_UNRELIABLE, SayText, _, players[i]);
                write_byte(players[i]);
                write_string(msg);
                message_end();
            }
        }
    }
}


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