Fix "invalid player" errors in gifts plugin

Въпроси и проблеми свързани с AMXModX.
Аватар
esc-Fiv3
Извън линия
Foreigner
Foreigner
Мнения: 110
Регистриран на: 24 Ное 2018, 19:19
Се отблагодари: 16 пъти

Fix "invalid player" errors in gifts plugin

Мнение от esc-Fiv3 » 14 Дек 2018, 15:14

Someone can make this plugin stable? It works perfectly but there are some errors which create problems to the other plugins from the server:

Код за потвърждение: Избери целия код

L 11/26/2018 - 16:47:21: Start of error session.
L 11/26/2018 - 16:47:21: Info (map "mini_dust2_winter") (file "addons/amxmodx/logs/error_20181126.log")
L 11/26/2018 - 16:47:21: [FUN] Invalid player 3
L 11/26/2018 - 16:47:21: [AMXX] Run time error 10 (plugin "north_gifts.amxx") (native "set_user_gravity") - debug not enabled!
L 11/26/2018 - 16:47:21: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).

L 12/07/2018 - 02:16:52: [FUN] Invalid player 1
L 12/07/2018 - 02:16:52: [AMXX] Displaying debug trace (plugin "north_gifts.amxx")
L 12/07/2018 - 02:16:52: [AMXX] Run time error 10: native error (native "set_user_footsteps")
L 12/07/2018 - 02:16:52: [AMXX]    [0] north_gifts.sma::fw_PlayerSpawn (line 169)

L 12/07/2018 - 23:06:15: [FUN] Invalid player 4
L 12/07/2018 - 23:06:15: [AMXX] Displaying debug trace (plugin "north_gifts.amxx")
L 12/07/2018 - 23:06:15: [AMXX] Run time error 10: native error (native "set_user_gravity")
L 12/07/2018 - 23:06:15: [AMXX]    [0] north_gifts.sma::fw_PlayerSpawn (line 163)
This is sma:

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <fakemeta_util>
#include <hamsandwich>
#include <fun>
#include <WPMGPrintChatColor>
 
#define PLUGIN "Gifts"
#define VERSION "0.8.1"
#define AUTHOR "Psycrow"
 
#define is_entity_player(%1)   (1<=%1<=g_maxPlayers)
#define PRESENT_CLASSNAME   "north_gift"
#define pev_lifes      pev_euser1
 
#define MODEL_PRESENT       "models/north/north_box.mdl"
#define MODEL_SKINS       3
#define MODEL_SUBMODELS    5
 
#define MAX_MONEY       16000 // Максимальное кол-во денег у игрока
 
#if cellbits == 32
   #define OFFSET_CSMONEY 115
#else
   #define OFFSET_CSMONEY 140
#endif
 
new
   g_msgMoney,
   g_infoTarget,
   g_maxPlayers,
   g_menuId = -1, 
   bool: g_registration,
   g_totalGifts,                   //Кол-во загруженных подарков на карте
   g_get_round_times[33],               //Сколько раз игрок поднял подарков за раунд
   g_get_game_times[33],               //Сколько раз игрок поднял подарков за игру
   g_disconnections,               //Сколько игроков покинуло сервер
   bool: g_have_speed[33],               //Имеет ли игрок добавленную скорость
   bool: g_have_gravity[33],            //Имеет ли игрок добавленную гравитацию
   bool: g_have_sw[33],               //Имеет ли игрок заглушенные шаги
   bool: g_save_cpl,               //Изменения в расположении подарков
   Float: g_massage_rate[33],            //Ограничение оповещений о попытке собрать подарок ограниченному игроку
 
   Array:g_gift_id,               //Индексы подарков
   Array:g_gift_x,
   Array:g_gift_y,
   Array:g_gift_z,
   Array:g_plr_steamid,
   Array:g_plr_times
 
 
public plugin_precache()
{
   precache_model(MODEL_PRESENT)
}
 
public plugin_init()
{
   register_plugin(PLUGIN, VERSION, AUTHOR)
    
   register_cvar("cv_gift_access","a")       // Флаг доступа к меню
   register_cvar("cv_gift_money_min","1000")    // Минимальная награда за собрынный подарок
   register_cvar("cv_gift_money_max","5000")    // Максимальная награда за собрынный подарок
   register_cvar("cv_gift_silent_walk","1")    // Добавить ли в подарки бесшумный бег
   register_cvar("cv_gift_gravitation","0.5")    // Значение гравитации. 0.0 - убрать такой вид подарка
   register_cvar("cv_gift_speed","300.0")       // Значение скорости. 0.0 - убрать такой вид подарка
   register_cvar("cv_gift_HE","2")       // Сколько HE гранат можно получить в подарках. 0 - убрать такой вид подарка
   register_cvar("cv_gift_health","50")       // Сколько HP можно получить в подарках. 0 - убрать такой вид подарка
   register_cvar("cv_gift_timerate","20.0")    // Сколько секунд до появление подарка
   register_cvar("cv_gift_get_times_round","1")    // Сколько максимум можно собрать подарков за раундов. 0 - снимает ограничение
   register_cvar("cv_gift_get_times_game","0")    // Сколько максимум можно собрать подарков за игру (карту). 0 - снимает ограничение
   register_cvar("cv_gift_lifes","0")       // Сколько раз может появиться подарок в одном и том же месте (0 - неограниченно, 1 - после сбора больше не появляеться...)
    
   register_clcmd("say /gift", "gift_menu")
   register_clcmd("say_team /gift", "gift_menu" )
   register_clcmd("say /gifts", "gift_menu" )
   register_clcmd("say_team /gifts", "gift_menu" )
    
   g_infoTarget = engfunc(EngFunc_AllocString, "info_target")
}
 
public plugin_cfg()
{
   new map[32]
   get_mapname(map, charsmax(map))
   formatex(map, charsmax(map),"%s.ini",map)
    
   new cfgDir[64], iDir, iFile[128]
   get_configsdir(cfgDir, charsmax(cfgDir))
   formatex(cfgDir, charsmax(cfgDir), "%s/north_gifts", cfgDir)
    
   iDir = open_dir(cfgDir, iFile, charsmax(iFile))
    
   if(iDir)
   {
      while(next_file(iDir, iFile, charsmax(iFile)))
      {
         if (iFile[0] == '.')
            continue
             
         if(equal(map, iFile))
         {
            format(iFile, 128, "%s/%s", cfgDir, iFile)
            get_gifts(iFile)
            break
         }
      }
   }
   else server_print("[%s] Gifts was not loaded", PLUGIN)   
}
 
public client_putinserver(id)
{
   if(!g_registration) return
    
   if(get_cvar_num("cv_gift_get_times_game"))
   {
      new steamId[32], arraySteamId[32]
      get_user_authid(id, steamId, 31)
       
      for(new i = 0; i < g_disconnections; i++)
      {
         ArrayGetString(g_plr_steamid, i, arraySteamId, 31)
         if(equal(steamId, arraySteamId))
         {
            g_get_game_times[id] = ArrayGetCell(g_plr_times, i)
            return
         }
      }
      g_get_game_times[id] = 0
   }
}
 
public client_disconnect(id)
{
   if(!g_registration) return
    
   if(get_cvar_num("cv_gift_get_times_game"))
   {   
      new steamId[32], arraySteamId[32]
      get_user_authid(id, steamId, 31)
       
      for(new i = 0; i < g_disconnections; i++)
      {
         ArrayGetString(g_plr_steamid, i, arraySteamId, 31)         
         if(equal(steamId, arraySteamId))
         {            
            ArraySetCell(g_plr_times, i, g_get_game_times[id])
            return
         }
      }
       
      ArrayPushString(g_plr_steamid, steamId)
      ArrayPushCell(g_plr_times, g_get_game_times[id])
      g_disconnections++
   }
}
 
public fw_PlayerSpawn(id)
{      
   if(g_have_gravity[id])
   {
      set_user_gravity(id)
      g_have_gravity[id] = false
   }
    
   if(g_have_sw[id])
   {
      set_user_footsteps(id, 0)
      g_have_sw[id] = false
   }
    
   g_have_speed[id] = false
}
 
public CurWeapon(id)
{
   if(g_have_speed[id])
      set_user_maxspeed(id, get_cvar_float("cv_gift_speed"))
}
 
public fw_RoundStart()
{
   for(new i = 1; i <= g_maxPlayers; i++)
      g_get_round_times[i] = 0  
    
   new lifes = get_cvar_num("cv_gift_lifes")
   if(lifes)
   {
      new ent
      while((ent = fm_find_ent_by_class(ent, PRESENT_CLASSNAME)))
         set_pev(ent, pev_lifes, lifes)      
   }
}
 
public fw_TouchGift(ent, id)
{   
   if(!is_entity_player(id))
      return
          
   if(g_massage_rate[id] > get_gametime() || !is_user_alive(id) || !pev_valid(ent))
      return
       
   static className[32]
   pev(ent, pev_classname, className, 31)
   if(!equal(className, PRESENT_CLASSNAME))
      return
       
   new times = get_cvar_num("cv_gift_get_times_round")
   if(times && g_get_round_times[id] >= times)
   {
      PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou have reached the limit of !ggifts !yper round", PLUGIN)
      g_massage_rate[id] = get_gametime() + 3.0
      return
   }
    
   times = get_cvar_num("cv_gift_get_times_game")
   if(times && g_get_game_times[id] >= times)
   {
      PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou have reached the limit of !ggifts !yper game", PLUGIN)
      g_massage_rate[id] = get_gametime() + 3.0
      return
   }
                
   engfunc(EngFunc_SetModel, ent, MODEL_PRESENT)
   set_pev(ent, pev_skin, random_num(0, MODEL_SKINS - 1))
   set_pev(ent, pev_body, random_num(0, MODEL_SUBMODELS - 1))
          
   hide_gift(ent)
   give_gift(id)
          
   if(get_cvar_num("cv_gift_get_times_game")) g_get_game_times[id]++
   if(get_cvar_num("cv_gift_get_times_round")) g_get_round_times[id]++
   if(get_cvar_num("cv_gift_lifes")) set_pev(ent, pev_lifes, pev(ent, pev_lifes) - 1)
}
 
public set_gift()
{
   if(!g_totalGifts) return
       
   new valid_gifts_count = 0
   new ent, lifes_active = get_cvar_num("cv_gift_lifes")
   while((ent = fm_find_ent_by_class(ent, PRESENT_CLASSNAME)))
   {      
      if(pev(ent, pev_solid) != SOLID_NOT || (lifes_active && !pev(ent, pev_lifes)))
         valid_gifts_count++
   }            
       
   if(valid_gifts_count == g_totalGifts) return
    
   new bool: check = false, id
   while(check == false)
   {
      id = random_num(0, g_totalGifts - 1)
      ent = ArrayGetCell(g_gift_id ,id)
      if(pev(ent, pev_solid) == SOLID_NOT && (!lifes_active || pev(ent, pev_lifes)))
      {
         set_pev(ent, pev_solid, SOLID_TRIGGER)         
         unhide_gift(ent)
         check = true
      }
   }
}
 
public gift_menu(id)
{
   if(!is_user_access(id))
   {
      PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou are not authorised to use this function", PLUGIN) 
      return
   }
    
   new menu_name[90]
   format(menu_name, 89, "\rAranjament de cadouri^n\dCadouri curente: %d", g_totalGifts + 1)
 
   g_menuId = menu_create(menu_name, "menu_handler")
    
   menu_additem(g_menuId, "\wAdauga cadou", "1", 0)
    
   if(!g_totalGifts)
   {
      menu_additem(g_menuId, "\dElimina cadourile anterioare", "2", 0)
      menu_additem(g_menuId, "\dElimina toate cadourile", "3", 0)
   }
   else
   {
      menu_additem(g_menuId, "\wElimina cadourile anterioare", "2", 0)
      menu_additem(g_menuId, "\wElimina toate cadourile", "3", 0)
   }
       
   if(!g_save_cpl)
      menu_additem(g_menuId, "\dSalveaza modificarile", "4", 0)
   else menu_additem(g_menuId, "\wSalveaza modificarile", "4", 0)
 
   menu_setprop(g_menuId, MPROP_EXIT, MEXIT_ALL)
   menu_setprop(g_menuId, MPROP_EXITNAME, "\yIesire")
   menu_display(id, g_menuId, 0)
    
   new keys
   get_user_menu(id, g_menuId, keys)
    
   for(new i = 0; i < g_totalGifts; i++)
      unhide_gift(ArrayGetCell(g_gift_id, i))
}
 
public menu_handler(id, menu, item)
{
   if(item == MENU_EXIT)
   {
      new ent
      for(new i = 0; i < g_totalGifts; i++)
      {
         ent = ArrayGetCell(g_gift_id, i)
         if(pev(ent, pev_solid) == SOLID_NOT) hide_gift(ent)
      }
    
      menu_destroy(menu)
      return PLUGIN_HANDLED
   }
    
   switch(item)
   {
      case 0:
      {   
         new Float:fOrigin[3]
         fm_get_aim_origin(id, fOrigin)
          
         if(create_gift(fOrigin))
            g_save_cpl = true
             
         menu_destroy(menu)
         gift_menu(id)
      }
      case 1:
      {
         if(!g_totalGifts)
         {
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yNu exista entitati salvate", PLUGIN) 
            menu_destroy(menu)
            gift_menu(id)
            return PLUGIN_HANDLED
         }
          
         g_save_cpl = true
         PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yCadoul a fost sters", PLUGIN)
          
          
         g_totalGifts--
         engfunc(EngFunc_RemoveEntity, ArrayGetCell(g_gift_id, g_totalGifts))
         ArrayDeleteItem(g_gift_id, g_totalGifts)
         ArrayDeleteItem(g_gift_x, g_totalGifts)
         ArrayDeleteItem(g_gift_y, g_totalGifts)
         ArrayDeleteItem(g_gift_z, g_totalGifts)
             
         menu_destroy(menu)
         gift_menu(id)
      }
      case 2:
      {
         if(!g_totalGifts)
         {
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yNu exista entitati salvate", PLUGIN) 
            menu_destroy(menu)
            gift_menu(id)
            return PLUGIN_HANDLED
         }
          
         g_save_cpl = true
         PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yAu fost eliminate !g%d !ycadouri", PLUGIN, g_totalGifts)
          
         new ent
         while((ent = fm_find_ent_by_class(ent, PRESENT_CLASSNAME)))
            engfunc(EngFunc_RemoveEntity, ent)
             
         g_totalGifts = 0
          
         ArrayClear(g_gift_id) 
         ArrayClear(g_gift_x) 
         ArrayClear(g_gift_y) 
         ArrayClear(g_gift_z) 
          
         menu_destroy(menu)
         gift_menu(id)         
 
      }
      case 3:
      {
         if(!g_save_cpl)
         {
            menu_destroy(menu)
            gift_menu(id)
            return PLUGIN_HANDLED
         }
          
         g_save_cpl = false
          
         PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !t%s", PLUGIN, save_gifts() ? "Salvat" : "Nu este salvat")
          
         menu_destroy(menu)
         gift_menu(id)
      }
   }
   return PLUGIN_HANDLED
}
 
bool: save_gifts()
{
   new map[32]
   get_mapname(map, charsmax(map))
   formatex(map, charsmax(map), "%s.ini", map)
    
   new cfgDir[64], iFile[128]
   get_configsdir(cfgDir, charsmax(cfgDir))
   formatex(cfgDir, charsmax(cfgDir), "%s/north_gifts", cfgDir)
   formatex(iFile, charsmax(iFile), "%s/%s", cfgDir, map)
    
   if(!dir_exists(cfgDir))
      if(!mkdir(cfgDir))
         return false
    
   delete_file(iFile)
    
   if(!g_totalGifts)
      return true
    
   for(new i = 0; i < g_totalGifts; i++)
   {
      new text[128], Float:fOrigin[3], ent = ArrayGetCell(g_gift_id, i)
      pev(ent, pev_origin, fOrigin)
      format(text, charsmax(text),"^"%f^" ^"%f^" ^"%f^"",fOrigin[0], fOrigin[1], fOrigin[2])
      write_file(iFile, text, i) 
   }
    
   return true
}
 
get_gifts(const iFile[128])
{   
   new file = fopen(iFile, "rt")
    
   if(!file)
   {
      server_print("[%s] Gifts was not loaded", PLUGIN)
      return
   }
       
   while(file && !feof(file))
   {
      new sfLineData[512]
      fgets(file, sfLineData, charsmax(sfLineData))
          
      if(sfLineData[0] == ';')
         continue
          
      if(equal(sfLineData, ""))
         continue  
          
      new origins[3][32], Float: fOrigin[3]      
      parse(sfLineData, origins[0], 31, origins[1], 31, origins[2], 31)
       
      fOrigin[0] = str_to_float(origins[0])
      fOrigin[1] = str_to_float(origins[1])
      fOrigin[2] = str_to_float(origins[2])
       
      create_gift(fOrigin)
   }
    
   fclose(file)
    
   if(!g_totalGifts)
      server_print("[%s] Gifts was not loaded", PLUGIN)
   else if(g_totalGifts == 1)
      server_print("[%s] Loaded one gift", PLUGIN)
   else
      server_print("[%s] Loaded %d gifts", PLUGIN, g_totalGifts)
}
 
bool: create_gift(const Float: fOrigin[3])
{
   new ent = engfunc(EngFunc_CreateNamedEntity, g_infoTarget)
   if(!pev_valid(ent)) return false
    
   if(!g_registration)
   {   
      register_event("CurWeapon", "CurWeapon", "be","1=1")
      register_event("HLTV", "fw_RoundStart", "a", "1=0", "2=0")
       
      RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1)
      RegisterHamFromEntity(Ham_Touch, ent, "fw_TouchGift")
       
      set_task(get_cvar_float("cv_gift_timerate"), "set_gift", _, _, _, "b")
       
      g_gift_id = ArrayCreate()
      g_gift_x = ArrayCreate()
      g_gift_y = ArrayCreate()
      g_gift_z = ArrayCreate()
             
      if(get_cvar_num("cv_gift_get_times_game"))
      {
         g_plr_steamid = ArrayCreate(32)
         g_plr_times = ArrayCreate(32)
      }
       
      g_maxPlayers = get_maxplayers()
      g_msgMoney = get_user_msgid("Money")
       
      g_registration = true
       
      fw_RoundStart()
   }
       
   ArrayPushCell(g_gift_id, ent)
       
   ArrayPushCell(g_gift_x, fOrigin[0])
   ArrayPushCell(g_gift_y, fOrigin[1])
   ArrayPushCell(g_gift_z, fOrigin[2])
       
   engfunc(EngFunc_SetModel, ent, MODEL_PRESENT)
   set_pev(ent, pev_origin, fOrigin)
   set_pev(ent, pev_solid, SOLID_NOT)
   set_pev(ent, pev_movetype, MOVETYPE_FLY)
   set_pev(ent, pev_gravity, 1.0)
   set_pev(ent, pev_classname, PRESENT_CLASSNAME)
   set_pev(ent, pev_skin, random_num(0, MODEL_SKINS - 1))
   set_pev(ent, pev_body, random_num(0, MODEL_SUBMODELS - 1))
   engfunc(EngFunc_SetSize, ent, Float:{-15.0, -15.0, 0.0}, Float:{15.0, 15.0, 30.0})
             
   hide_gift(ent)
       
   g_totalGifts++
    
   return true
}
 
hide_gift(ent)
{
   set_pev(ent, pev_solid, SOLID_NOT)
   for(new i = 1; i <= g_maxPlayers; i++)
   {
      new mid, keys
      get_user_menu(i, mid, keys)
      if(mid == g_menuId)
      {
         fm_set_rendering(ent,  kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 150)
         return
      }
   }
   fm_set_rendering(ent,  kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0)
}
 
unhide_gift(ent)
{
   if(pev(ent, pev_solid) == SOLID_NOT)
      fm_set_rendering(ent,  kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 150)
   else
      fm_set_rendering(ent,  kRenderFxGlowShell, random_num(0,255), random_num(0,255), random_num(0,255), kRenderNormal, 15)
}
 
give_gift(id) //Выдает случайный бонус с подарка. Добавьте case, если хотите доавить свой.
{
   static loopDestroy
   loopDestroy++
    
   if(loopDestroy > 20)
   {
      PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tCadou gol", PLUGIN) 
      loopDestroy = 0
      return
   }
    
   new max_random_gift = 6//Сколько видов бонусов в подарках
   switch(random_num(1, max_random_gift))
   {
      case 1:
      {
         new reward = random_num(get_cvar_num("cv_gift_money_min"), get_cvar_num("cv_gift_money_max"))
         new curr_money = get_pdata_int(id, OFFSET_CSMONEY)
         if(curr_money + reward > MAX_MONEY)
            reward = MAX_MONEY - curr_money
             
         if(reward)
         {
            set_pdata_int(id, OFFSET_CSMONEY, curr_money + reward)
          
            message_begin(MSG_ONE, g_msgMoney, _, id)
            write_long(curr_money + reward)
            write_byte(1)
            message_end()
          
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou received !g%d$", PLUGIN, reward) 
            loopDestroy = 0
         }
         else give_gift(id)      
      }
       
      case 2:
      {
         if(!g_have_sw[id] && !get_user_footsteps(id) && get_cvar_num("cv_gift_silent_walk"))
         {
            g_have_sw[id] = true
            set_user_footsteps(id)         
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou received !gSilentFootsteps", PLUGIN)
            loopDestroy = 0
         }
         else give_gift(id)
      }
       
      case 3:
      {
         new Float: gravity = get_cvar_float("cv_gift_gravitation")
         if(!g_have_gravity[id] && get_user_gravity(id) > gravity && gravity)
         {
            g_have_gravity[id] = true
            set_user_gravity(id, gravity)   
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou received !gGravity", PLUGIN)
            loopDestroy = 0
         }
         else give_gift(id)
      }
       
      case 4:
      {   
         new Float: speed = get_cvar_float("cv_gift_speed")
         if(!g_have_speed[id] && get_user_maxspeed(id) < speed  && speed)
         {
            g_have_speed[id] = true
            set_user_maxspeed(id, speed)         
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou received !gSpeed", PLUGIN)
            loopDestroy = 0
         }
         else give_gift(id)
      }
       
      case 5:
      {
         new hes = get_cvar_num("cv_gift_HE")
         if(hes)
         {
            if(!user_has_weapon(id, CSW_HEGRENADE))
            {
               fm_give_item(id, "weapon_hegrenade")
               cs_set_user_bpammo(id, CSW_HEGRENADE, hes)               
            } 
            else cs_set_user_bpammo(id, CSW_HEGRENADE, cs_get_user_bpammo(id, CSW_HEGRENADE) + hes)
             
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou received !ga set of grenades (%d HE)", PLUGIN, hes)
            loopDestroy = 0
         }
         else give_gift(id)
      }
       
      case 6:
      {
         new hp = get_cvar_num("cv_gift_health")
         if(hp)
         {
            fm_set_user_health(id, pev(id, pev_health) + hp)
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou received !gLife (%d hp)", PLUGIN, hp)
            loopDestroy = 0
         }
         else give_gift(id)
      }
      //case 7: тут по примерам выше
   }
}
 
bool: is_user_access(id)
{      
   new flag_access[24]
   get_cvar_string("cv_gift_access", flag_access, charsmax(flag_access))
    
   new flags = get_user_flags(id)
 
   if(contain(flag_access, "a") > -1 && (flags & ADMIN_IMMUNITY))
      return true
      
   if(contain(flag_access, "b") > -1 && (flags & ADMIN_RESERVATION))
      return true
      
   if(contain(flag_access, "c") > -1 && (flags & ADMIN_KICK))
      return true
      
   if(contain(flag_access, "d") > -1 && (flags & ADMIN_BAN))
      return true
      
   if(contain(flag_access, "e") > -1 && (flags & ADMIN_SLAY))
      return true
      
   if(contain(flag_access, "f") > -1 && (flags & ADMIN_MAP))
      return true
      
   if(contain(flag_access, "g") > -1 && (flags & ADMIN_CVAR))
      return true
      
   if(contain(flag_access, "h") > -1 && (flags & ADMIN_CFG))
      return true
      
   if(contain(flag_access, "i") > -1 && (flags & ADMIN_CHAT))
      return true
      
   if(contain(flag_access, "j") > -1 && (flags & ADMIN_VOTE))
      return true
    
   if(contain(flag_access, "k") > -1 && (flags & ADMIN_PASSWORD))
      return true
      
   if(contain(flag_access, "l") > -1 && (flags & ADMIN_RCON))
      return true
      
   if(contain(flag_access, "m") > -1 && (flags & ADMIN_LEVEL_A))
      return true
      
   if(contain(flag_access, "n") > -1 && (flags & ADMIN_LEVEL_B))
      return true
      
   if(contain(flag_access, "o") > -1 && (flags & ADMIN_LEVEL_C))
      return true
      
   if(contain(flag_access, "p") > -1 && (flags & ADMIN_LEVEL_D))
      return true
      
   if(contain(flag_access, "q") > -1 && (flags & ADMIN_LEVEL_E))
      return true
      
   if(contain(flag_access, "r") > -1 && (flags & ADMIN_LEVEL_F))
      return true
      
   if(contain(flag_access, "s") > -1 && (flags & ADMIN_LEVEL_G))
      return true
      
   if(contain(flag_access, "t") > -1 && (flags & ADMIN_LEVEL_H))
      return true
      
   if(contain(flag_access, "u") > -1 && (flags & ADMIN_MENU))
      return true
      
   if(contain(flag_access, "y") > -1 && (flags & ADMIN_ADMIN))
      return true
      
   if(contain(flag_access, "z") > -1 && (flags & ADMIN_USER))
      return true
      
   return false
}
Последно промяна от OciXCrom на 14 Дек 2018, 15:22, променено общо 1 път.
Причина: Fixed title!

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

gifts plugin

Мнение от OciXCrom » 14 Дек 2018, 15:22

The code is terrible.
Please use more descriptive titles next time.

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <fakemeta_util>
#include <hamsandwich>
#include <fun>
#include <WPMGPrintChatColor>
 
#define PLUGIN "Gifts"
#define VERSION "0.8.1"
#define AUTHOR "Psycrow"
 
#define is_entity_player(%1)   (1<=%1<=g_maxPlayers)
#define PRESENT_CLASSNAME   "north_gift"
#define pev_lifes      pev_euser1
 
#define MODEL_PRESENT       "models/north/north_box.mdl"
#define MODEL_SKINS       3
#define MODEL_SUBMODELS    5
 
#define MAX_MONEY       16000 // Максимальное кол-во денег у игрока
 
#if cellbits == 32
   #define OFFSET_CSMONEY 115
#else
   #define OFFSET_CSMONEY 140
#endif
 
new
   g_msgMoney,
   g_infoTarget,
   g_maxPlayers,
   g_menuId = -1, 
   bool: g_registration,
   g_totalGifts,                   //Кол-во загруженных подарков на карте
   g_get_round_times[33],               //Сколько раз игрок поднял подарков за раунд
   g_get_game_times[33],               //Сколько раз игрок поднял подарков за игру
   g_disconnections,               //Сколько игроков покинуло сервер
   bool: g_have_speed[33],               //Имеет ли игрок добавленную скорость
   bool: g_have_gravity[33],            //Имеет ли игрок добавленную гравитацию
   bool: g_have_sw[33],               //Имеет ли игрок заглушенные шаги
   bool: g_save_cpl,               //Изменения в расположении подарков
   Float: g_massage_rate[33],            //Ограничение оповещений о попытке собрать подарок ограниченному игроку
 
   Array:g_gift_id,               //Индексы подарков
   Array:g_gift_x,
   Array:g_gift_y,
   Array:g_gift_z,
   Array:g_plr_steamid,
   Array:g_plr_times
 
 
public plugin_precache()
{
   precache_model(MODEL_PRESENT)
}
 
public plugin_init()
{
   register_plugin(PLUGIN, VERSION, AUTHOR)
    
   register_cvar("cv_gift_access","a")       // Флаг доступа к меню
   register_cvar("cv_gift_money_min","1000")    // Минимальная награда за собрынный подарок
   register_cvar("cv_gift_money_max","5000")    // Максимальная награда за собрынный подарок
   register_cvar("cv_gift_silent_walk","1")    // Добавить ли в подарки бесшумный бег
   register_cvar("cv_gift_gravitation","0.5")    // Значение гравитации. 0.0 - убрать такой вид подарка
   register_cvar("cv_gift_speed","300.0")       // Значение скорости. 0.0 - убрать такой вид подарка
   register_cvar("cv_gift_HE","2")       // Сколько HE гранат можно получить в подарках. 0 - убрать такой вид подарка
   register_cvar("cv_gift_health","50")       // Сколько HP можно получить в подарках. 0 - убрать такой вид подарка
   register_cvar("cv_gift_timerate","20.0")    // Сколько секунд до появление подарка
   register_cvar("cv_gift_get_times_round","1")    // Сколько максимум можно собрать подарков за раундов. 0 - снимает ограничение
   register_cvar("cv_gift_get_times_game","0")    // Сколько максимум можно собрать подарков за игру (карту). 0 - снимает ограничение
   register_cvar("cv_gift_lifes","0")       // Сколько раз может появиться подарок в одном и том же месте (0 - неограниченно, 1 - после сбора больше не появляеться...)
    
   register_clcmd("say /gift", "gift_menu")
   register_clcmd("say_team /gift", "gift_menu" )
   register_clcmd("say /gifts", "gift_menu" )
   register_clcmd("say_team /gifts", "gift_menu" )
    
   g_infoTarget = engfunc(EngFunc_AllocString, "info_target")
}
 
public plugin_cfg()
{
   new map[32]
   get_mapname(map, charsmax(map))
   formatex(map, charsmax(map),"%s.ini",map)
    
   new cfgDir[64], iDir, iFile[128]
   get_configsdir(cfgDir, charsmax(cfgDir))
   formatex(cfgDir, charsmax(cfgDir), "%s/north_gifts", cfgDir)
    
   iDir = open_dir(cfgDir, iFile, charsmax(iFile))
    
   if(iDir)
   {
      while(next_file(iDir, iFile, charsmax(iFile)))
      {
         if (iFile[0] == '.')
            continue
             
         if(equal(map, iFile))
         {
            format(iFile, 128, "%s/%s", cfgDir, iFile)
            get_gifts(iFile)
            break
         }
      }
   }
   else server_print("[%s] Gifts was not loaded", PLUGIN)   
}
 
public client_putinserver(id)
{
   if(!g_registration) return
    
   if(get_cvar_num("cv_gift_get_times_game"))
   {
      new steamId[32], arraySteamId[32]
      get_user_authid(id, steamId, 31)
       
      for(new i = 0; i < g_disconnections; i++)
      {
         ArrayGetString(g_plr_steamid, i, arraySteamId, 31)
         if(equal(steamId, arraySteamId))
         {
            g_get_game_times[id] = ArrayGetCell(g_plr_times, i)
            return
         }
      }
      g_get_game_times[id] = 0
   }
}
 
public client_disconnect(id)
{
   if(!g_registration) return
    
   if(get_cvar_num("cv_gift_get_times_game"))
   {   
      new steamId[32], arraySteamId[32]
      get_user_authid(id, steamId, 31)
       
      for(new i = 0; i < g_disconnections; i++)
      {
         ArrayGetString(g_plr_steamid, i, arraySteamId, 31)         
         if(equal(steamId, arraySteamId))
         {            
            ArraySetCell(g_plr_times, i, g_get_game_times[id])
            return
         }
      }
       
      ArrayPushString(g_plr_steamid, steamId)
      ArrayPushCell(g_plr_times, g_get_game_times[id])
      g_disconnections++
   }
}
 
public fw_PlayerSpawn(id)
{
   if(!is_user_alive(id))
   {
       return
   }
   if(g_have_gravity[id])
   {
      set_user_gravity(id)
      g_have_gravity[id] = false
   }
    
   if(g_have_sw[id])
   {
      set_user_footsteps(id, 0)
      g_have_sw[id] = false
   }
    
   g_have_speed[id] = false
}
 
public CurWeapon(id)
{
   if(g_have_speed[id])
      set_user_maxspeed(id, get_cvar_float("cv_gift_speed"))
}
 
public fw_RoundStart()
{
   for(new i = 1; i <= g_maxPlayers; i++)
      g_get_round_times[i] = 0  
    
   new lifes = get_cvar_num("cv_gift_lifes")
   if(lifes)
   {
      new ent
      while((ent = fm_find_ent_by_class(ent, PRESENT_CLASSNAME)))
         set_pev(ent, pev_lifes, lifes)      
   }
}
 
public fw_TouchGift(ent, id)
{   
   if(!is_entity_player(id))
      return
          
   if(g_massage_rate[id] > get_gametime() || !is_user_alive(id) || !pev_valid(ent))
      return
       
   static className[32]
   pev(ent, pev_classname, className, 31)
   if(!equal(className, PRESENT_CLASSNAME))
      return
       
   new times = get_cvar_num("cv_gift_get_times_round")
   if(times && g_get_round_times[id] >= times)
   {
      PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou have reached the limit of !ggifts !yper round", PLUGIN)
      g_massage_rate[id] = get_gametime() + 3.0
      return
   }
    
   times = get_cvar_num("cv_gift_get_times_game")
   if(times && g_get_game_times[id] >= times)
   {
      PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou have reached the limit of !ggifts !yper game", PLUGIN)
      g_massage_rate[id] = get_gametime() + 3.0
      return
   }
                
   engfunc(EngFunc_SetModel, ent, MODEL_PRESENT)
   set_pev(ent, pev_skin, random_num(0, MODEL_SKINS - 1))
   set_pev(ent, pev_body, random_num(0, MODEL_SUBMODELS - 1))
          
   hide_gift(ent)
   give_gift(id)
          
   if(get_cvar_num("cv_gift_get_times_game")) g_get_game_times[id]++
   if(get_cvar_num("cv_gift_get_times_round")) g_get_round_times[id]++
   if(get_cvar_num("cv_gift_lifes")) set_pev(ent, pev_lifes, pev(ent, pev_lifes) - 1)
}
 
public set_gift()
{
   if(!g_totalGifts) return
       
   new valid_gifts_count = 0
   new ent, lifes_active = get_cvar_num("cv_gift_lifes")
   while((ent = fm_find_ent_by_class(ent, PRESENT_CLASSNAME)))
   {      
      if(pev(ent, pev_solid) != SOLID_NOT || (lifes_active && !pev(ent, pev_lifes)))
         valid_gifts_count++
   }            
       
   if(valid_gifts_count == g_totalGifts) return
    
   new bool: check = false, id
   while(check == false)
   {
      id = random_num(0, g_totalGifts - 1)
      ent = ArrayGetCell(g_gift_id ,id)
      if(pev(ent, pev_solid) == SOLID_NOT && (!lifes_active || pev(ent, pev_lifes)))
      {
         set_pev(ent, pev_solid, SOLID_TRIGGER)         
         unhide_gift(ent)
         check = true
      }
   }
}
 
public gift_menu(id)
{
   if(!is_user_access(id))
   {
      PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou are not authorised to use this function", PLUGIN) 
      return
   }
    
   new menu_name[90]
   format(menu_name, 89, "\rAranjament de cadouri^n\dCadouri curente: %d", g_totalGifts + 1)
 
   g_menuId = menu_create(menu_name, "menu_handler")
    
   menu_additem(g_menuId, "\wAdauga cadou", "1", 0)
    
   if(!g_totalGifts)
   {
      menu_additem(g_menuId, "\dElimina cadourile anterioare", "2", 0)
      menu_additem(g_menuId, "\dElimina toate cadourile", "3", 0)
   }
   else
   {
      menu_additem(g_menuId, "\wElimina cadourile anterioare", "2", 0)
      menu_additem(g_menuId, "\wElimina toate cadourile", "3", 0)
   }
       
   if(!g_save_cpl)
      menu_additem(g_menuId, "\dSalveaza modificarile", "4", 0)
   else menu_additem(g_menuId, "\wSalveaza modificarile", "4", 0)
 
   menu_setprop(g_menuId, MPROP_EXIT, MEXIT_ALL)
   menu_setprop(g_menuId, MPROP_EXITNAME, "\yIesire")
   menu_display(id, g_menuId, 0)
    
   new keys
   get_user_menu(id, g_menuId, keys)
    
   for(new i = 0; i < g_totalGifts; i++)
      unhide_gift(ArrayGetCell(g_gift_id, i))
}
 
public menu_handler(id, menu, item)
{
   if(item == MENU_EXIT)
   {
      new ent
      for(new i = 0; i < g_totalGifts; i++)
      {
         ent = ArrayGetCell(g_gift_id, i)
         if(pev(ent, pev_solid) == SOLID_NOT) hide_gift(ent)
      }
    
      menu_destroy(menu)
      return PLUGIN_HANDLED
   }
    
   switch(item)
   {
      case 0:
      {   
         new Float:fOrigin[3]
         fm_get_aim_origin(id, fOrigin)
          
         if(create_gift(fOrigin))
            g_save_cpl = true
             
         menu_destroy(menu)
         gift_menu(id)
      }
      case 1:
      {
         if(!g_totalGifts)
         {
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yNu exista entitati salvate", PLUGIN) 
            menu_destroy(menu)
            gift_menu(id)
            return PLUGIN_HANDLED
         }
          
         g_save_cpl = true
         PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yCadoul a fost sters", PLUGIN)
          
          
         g_totalGifts--
         engfunc(EngFunc_RemoveEntity, ArrayGetCell(g_gift_id, g_totalGifts))
         ArrayDeleteItem(g_gift_id, g_totalGifts)
         ArrayDeleteItem(g_gift_x, g_totalGifts)
         ArrayDeleteItem(g_gift_y, g_totalGifts)
         ArrayDeleteItem(g_gift_z, g_totalGifts)
             
         menu_destroy(menu)
         gift_menu(id)
      }
      case 2:
      {
         if(!g_totalGifts)
         {
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yNu exista entitati salvate", PLUGIN) 
            menu_destroy(menu)
            gift_menu(id)
            return PLUGIN_HANDLED
         }
          
         g_save_cpl = true
         PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yAu fost eliminate !g%d !ycadouri", PLUGIN, g_totalGifts)
          
         new ent
         while((ent = fm_find_ent_by_class(ent, PRESENT_CLASSNAME)))
            engfunc(EngFunc_RemoveEntity, ent)
             
         g_totalGifts = 0
          
         ArrayClear(g_gift_id) 
         ArrayClear(g_gift_x) 
         ArrayClear(g_gift_y) 
         ArrayClear(g_gift_z) 
          
         menu_destroy(menu)
         gift_menu(id)         
 
      }
      case 3:
      {
         if(!g_save_cpl)
         {
            menu_destroy(menu)
            gift_menu(id)
            return PLUGIN_HANDLED
         }
          
         g_save_cpl = false
          
         PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !t%s", PLUGIN, save_gifts() ? "Salvat" : "Nu este salvat")
          
         menu_destroy(menu)
         gift_menu(id)
      }
   }
   return PLUGIN_HANDLED
}
 
bool: save_gifts()
{
   new map[32]
   get_mapname(map, charsmax(map))
   formatex(map, charsmax(map), "%s.ini", map)
    
   new cfgDir[64], iFile[128]
   get_configsdir(cfgDir, charsmax(cfgDir))
   formatex(cfgDir, charsmax(cfgDir), "%s/north_gifts", cfgDir)
   formatex(iFile, charsmax(iFile), "%s/%s", cfgDir, map)
    
   if(!dir_exists(cfgDir))
      if(!mkdir(cfgDir))
         return false
    
   delete_file(iFile)
    
   if(!g_totalGifts)
      return true
    
   for(new i = 0; i < g_totalGifts; i++)
   {
      new text[128], Float:fOrigin[3], ent = ArrayGetCell(g_gift_id, i)
      pev(ent, pev_origin, fOrigin)
      format(text, charsmax(text),"^"%f^" ^"%f^" ^"%f^"",fOrigin[0], fOrigin[1], fOrigin[2])
      write_file(iFile, text, i) 
   }
    
   return true
}
 
get_gifts(const iFile[128])
{   
   new file = fopen(iFile, "rt")
    
   if(!file)
   {
      server_print("[%s] Gifts was not loaded", PLUGIN)
      return
   }
       
   while(file && !feof(file))
   {
      new sfLineData[512]
      fgets(file, sfLineData, charsmax(sfLineData))
          
      if(sfLineData[0] == ';')
         continue
          
      if(equal(sfLineData, ""))
         continue  
          
      new origins[3][32], Float: fOrigin[3]      
      parse(sfLineData, origins[0], 31, origins[1], 31, origins[2], 31)
       
      fOrigin[0] = str_to_float(origins[0])
      fOrigin[1] = str_to_float(origins[1])
      fOrigin[2] = str_to_float(origins[2])
       
      create_gift(fOrigin)
   }
    
   fclose(file)
    
   if(!g_totalGifts)
      server_print("[%s] Gifts was not loaded", PLUGIN)
   else if(g_totalGifts == 1)
      server_print("[%s] Loaded one gift", PLUGIN)
   else
      server_print("[%s] Loaded %d gifts", PLUGIN, g_totalGifts)
}
 
bool: create_gift(const Float: fOrigin[3])
{
   new ent = engfunc(EngFunc_CreateNamedEntity, g_infoTarget)
   if(!pev_valid(ent)) return false
    
   if(!g_registration)
   {   
      register_event("CurWeapon", "CurWeapon", "be","1=1")
      register_event("HLTV", "fw_RoundStart", "a", "1=0", "2=0")
       
      RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1)
      RegisterHamFromEntity(Ham_Touch, ent, "fw_TouchGift")
       
      set_task(get_cvar_float("cv_gift_timerate"), "set_gift", _, _, _, "b")
       
      g_gift_id = ArrayCreate()
      g_gift_x = ArrayCreate()
      g_gift_y = ArrayCreate()
      g_gift_z = ArrayCreate()
             
      if(get_cvar_num("cv_gift_get_times_game"))
      {
         g_plr_steamid = ArrayCreate(32)
         g_plr_times = ArrayCreate(32)
      }
       
      g_maxPlayers = get_maxplayers()
      g_msgMoney = get_user_msgid("Money")
       
      g_registration = true
       
      fw_RoundStart()
   }
       
   ArrayPushCell(g_gift_id, ent)
       
   ArrayPushCell(g_gift_x, fOrigin[0])
   ArrayPushCell(g_gift_y, fOrigin[1])
   ArrayPushCell(g_gift_z, fOrigin[2])
       
   engfunc(EngFunc_SetModel, ent, MODEL_PRESENT)
   set_pev(ent, pev_origin, fOrigin)
   set_pev(ent, pev_solid, SOLID_NOT)
   set_pev(ent, pev_movetype, MOVETYPE_FLY)
   set_pev(ent, pev_gravity, 1.0)
   set_pev(ent, pev_classname, PRESENT_CLASSNAME)
   set_pev(ent, pev_skin, random_num(0, MODEL_SKINS - 1))
   set_pev(ent, pev_body, random_num(0, MODEL_SUBMODELS - 1))
   engfunc(EngFunc_SetSize, ent, Float:{-15.0, -15.0, 0.0}, Float:{15.0, 15.0, 30.0})
             
   hide_gift(ent)
       
   g_totalGifts++
    
   return true
}
 
hide_gift(ent)
{
   set_pev(ent, pev_solid, SOLID_NOT)
   for(new i = 1; i <= g_maxPlayers; i++)
   {
      new mid, keys
      get_user_menu(i, mid, keys)
      if(mid == g_menuId)
      {
         fm_set_rendering(ent,  kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 150)
         return
      }
   }
   fm_set_rendering(ent,  kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0)
}
 
unhide_gift(ent)
{
   if(pev(ent, pev_solid) == SOLID_NOT)
      fm_set_rendering(ent,  kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 150)
   else
      fm_set_rendering(ent,  kRenderFxGlowShell, random_num(0,255), random_num(0,255), random_num(0,255), kRenderNormal, 15)
}
 
give_gift(id) //Выдает случайный бонус с подарка. Добавьте case, если хотите доавить свой.
{
   static loopDestroy
   loopDestroy++
    
   if(loopDestroy > 20)
   {
      PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tCadou gol", PLUGIN) 
      loopDestroy = 0
      return
   }
    
   new max_random_gift = 6//Сколько видов бонусов в подарках
   switch(random_num(1, max_random_gift))
   {
      case 1:
      {
         new reward = random_num(get_cvar_num("cv_gift_money_min"), get_cvar_num("cv_gift_money_max"))
         new curr_money = get_pdata_int(id, OFFSET_CSMONEY)
         if(curr_money + reward > MAX_MONEY)
            reward = MAX_MONEY - curr_money
             
         if(reward)
         {
            set_pdata_int(id, OFFSET_CSMONEY, curr_money + reward)
          
            message_begin(MSG_ONE, g_msgMoney, _, id)
            write_long(curr_money + reward)
            write_byte(1)
            message_end()
          
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou received !g%d$", PLUGIN, reward) 
            loopDestroy = 0
         }
         else give_gift(id)      
      }
       
      case 2:
      {
         if(!g_have_sw[id] && !get_user_footsteps(id) && get_cvar_num("cv_gift_silent_walk"))
         {
            g_have_sw[id] = true
            set_user_footsteps(id)         
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou received !gSilentFootsteps", PLUGIN)
            loopDestroy = 0
         }
         else give_gift(id)
      }
       
      case 3:
      {
         new Float: gravity = get_cvar_float("cv_gift_gravitation")
         if(!g_have_gravity[id] && get_user_gravity(id) > gravity && gravity)
         {
            g_have_gravity[id] = true
            set_user_gravity(id, gravity)   
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou received !gGravity", PLUGIN)
            loopDestroy = 0
         }
         else give_gift(id)
      }
       
      case 4:
      {   
         new Float: speed = get_cvar_float("cv_gift_speed")
         if(!g_have_speed[id] && get_user_maxspeed(id) < speed  && speed)
         {
            g_have_speed[id] = true
            set_user_maxspeed(id, speed)         
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou received !gSpeed", PLUGIN)
            loopDestroy = 0
         }
         else give_gift(id)
      }
       
      case 5:
      {
         new hes = get_cvar_num("cv_gift_HE")
         if(hes)
         {
            if(!user_has_weapon(id, CSW_HEGRENADE))
            {
               fm_give_item(id, "weapon_hegrenade")
               cs_set_user_bpammo(id, CSW_HEGRENADE, hes)               
            } 
            else cs_set_user_bpammo(id, CSW_HEGRENADE, cs_get_user_bpammo(id, CSW_HEGRENADE) + hes)
             
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou received !ga set of grenades (%d HE)", PLUGIN, hes)
            loopDestroy = 0
         }
         else give_gift(id)
      }
       
      case 6:
      {
         new hp = get_cvar_num("cv_gift_health")
         if(hp)
         {
            fm_set_user_health(id, pev(id, pev_health) + hp)
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !yYou received !gLife (%d hp)", PLUGIN, hp)
            loopDestroy = 0
         }
         else give_gift(id)
      }
      //case 7: тут по примерам выше
   }
}
 
bool: is_user_access(id)
{      
   new flag_access[24]
   get_cvar_string("cv_gift_access", flag_access, charsmax(flag_access))
    
   new flags = get_user_flags(id)
 
   if(contain(flag_access, "a") > -1 && (flags & ADMIN_IMMUNITY))
      return true
      
   if(contain(flag_access, "b") > -1 && (flags & ADMIN_RESERVATION))
      return true
      
   if(contain(flag_access, "c") > -1 && (flags & ADMIN_KICK))
      return true
      
   if(contain(flag_access, "d") > -1 && (flags & ADMIN_BAN))
      return true
      
   if(contain(flag_access, "e") > -1 && (flags & ADMIN_SLAY))
      return true
      
   if(contain(flag_access, "f") > -1 && (flags & ADMIN_MAP))
      return true
      
   if(contain(flag_access, "g") > -1 && (flags & ADMIN_CVAR))
      return true
      
   if(contain(flag_access, "h") > -1 && (flags & ADMIN_CFG))
      return true
      
   if(contain(flag_access, "i") > -1 && (flags & ADMIN_CHAT))
      return true
      
   if(contain(flag_access, "j") > -1 && (flags & ADMIN_VOTE))
      return true
    
   if(contain(flag_access, "k") > -1 && (flags & ADMIN_PASSWORD))
      return true
      
   if(contain(flag_access, "l") > -1 && (flags & ADMIN_RCON))
      return true
      
   if(contain(flag_access, "m") > -1 && (flags & ADMIN_LEVEL_A))
      return true
      
   if(contain(flag_access, "n") > -1 && (flags & ADMIN_LEVEL_B))
      return true
      
   if(contain(flag_access, "o") > -1 && (flags & ADMIN_LEVEL_C))
      return true
      
   if(contain(flag_access, "p") > -1 && (flags & ADMIN_LEVEL_D))
      return true
      
   if(contain(flag_access, "q") > -1 && (flags & ADMIN_LEVEL_E))
      return true
      
   if(contain(flag_access, "r") > -1 && (flags & ADMIN_LEVEL_F))
      return true
      
   if(contain(flag_access, "s") > -1 && (flags & ADMIN_LEVEL_G))
      return true
      
   if(contain(flag_access, "t") > -1 && (flags & ADMIN_LEVEL_H))
      return true
      
   if(contain(flag_access, "u") > -1 && (flags & ADMIN_MENU))
      return true
      
   if(contain(flag_access, "y") > -1 && (flags & ADMIN_ADMIN))
      return true
      
   if(contain(flag_access, "z") > -1 && (flags & ADMIN_USER))
      return true
      
   return false
}

Аватар
esc-Fiv3
Извън линия
Foreigner
Foreigner
Мнения: 110
Регистриран на: 24 Ное 2018, 19:19
Се отблагодари: 16 пъти

Fix "invalid player" errors in gifts plugin

Мнение от esc-Fiv3 » 14 Дек 2018, 15:33

Sry, thanks! I will test it now. There was another guy who told me the same thing xD

edit: it works good but I have a problem with another plugin when I have gravity from a gift. If I use parachute too and I too the ground with parachute, the next time when I jump it seems to be like I touch my had in something. I can't go up with space, look like I have something up to my head. If I press again e for parachute it works again good. This problem happens sometimes

Аватар
esc-Fiv3
Извън линия
Foreigner
Foreigner
Мнения: 110
Регистриран на: 24 Ное 2018, 19:19
Се отблагодари: 16 пъти

Fix "invalid player" errors in gifts plugin

Мнение от esc-Fiv3 » 15 Дек 2018, 02:01

You can TC that or delete it. Thank you very much OciXCrom!

Заключено
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Поддръжка / Помощ”

Кой е на линия

Потребители разглеждащи този форум: Google [Bot] и 16 госта