А то когда подбираешь коробку повторно она даёт в дигл 7 патронов, либо +1 гранату.
- Код: Выделить всё
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>
#include <WPMGPrintChatColor>
#define PLUGIN "Gifts"
#define VERSION "0.7"
#define AUTHOR "Psycrow"
#define MAX_MONEY 16000
#define MAX_GIFTS_LOAD 10
#if cellbits == 32
#define OFFSET_CSMONEY 115
#else
#define OFFSET_CSMONEY 140
#endif
new
g_TotalGifts, //Кол-во загруженных подарков на карте
g_Gift_id[MAX_GIFTS_LOAD], //id энтити подарка
g_Gift_id_valid[MAX_GIFTS_LOAD], //id энтити подарка, который можно собрать
Float: g_orig_x[MAX_GIFTS_LOAD], //Координата x
Float: g_orig_y[MAX_GIFTS_LOAD], //Координата y
Float: g_orig_z[MAX_GIFTS_LOAD], //Координата z
g_get_round_times[33], //Сколько раз игрок поднял подарков за раунд
g_get_game_times[33], //Сколько раз игрок поднял подарков за игру
g_data_ip[200][32], //ip адресса всех пользователей, покинувших сервер
g_dis_player_num, //Сколько игроков покинуло сервер
g_gift_life[MAX_GIFTS_LOAD],
g_msgMoney,
bool: g_have_speed[33], //Имеет ли игрок добавленную скорость
bool: g_save_cpl, //Изменения в расположении подарков
bool: g_massage_rate[33] //Ограничение оповещений о попытке собрать подарок ограниченному игроку
static Float:fMax[3] = { 15.0, 15.0, 30.0 }
static Float:fMins[3] = { -15.0, -15.0, -4.0 }
static g_PresentMdl[][] = {
"models/respectos/aidbox.mdl",
"models/respectos/orangbox.mdl",
"models/respectos/zidbox.mdl"
}
public plugin_precache()
{
for(new i=0; i<sizeof(g_PresentMdl); i++)
precache_model(g_PresentMdl[i])
}
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","0") // Добавить ли в подарки бесшумный бег
register_cvar("cv_gift_gravitation","0") // Добавить ли в подарки гравитацию
register_cvar("cv_gift_gravi_value","0.5") // Значение гравитации
register_cvar("cv_gift_speed","1") // Добавить ли в подарки скорость
register_cvar("cv_gift_speed_value","340.0") // Значение скорости
register_cvar("cv_gift_HE","1") // Добавить ли в подарки HE гранаты
register_cvar("cv_gift_HE_value","1") // Сколько HE гранат
register_cvar("cv_gift_health","0") // Добавить ли в подарки здоровье
register_cvar("cv_gift_health_value","50.0") // Значение здоровья
register_cvar("cv_gift_timerate","35.0") // Сколько секунд до появление подарка
register_cvar("cv_gift_get_times_round","0") // Сколько максимум можно собрать подарков за раундов. 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" )
register_event("CurWeapon", "CurWeapon", "be","1=1")
register_forward(FM_Touch,"fwdTouch")
register_logevent("NewRound", 2, "1=Round_Start")
RegisterHam(Ham_Spawn, "player", "hook_spawn_post", 1)
get_maps_cfg()
set_gifts()
set_task(get_cvar_float("cv_gift_timerate"), "Create_gift", _, _, _, "b")
g_msgMoney = get_user_msgid("Money")
}
public get_maps_cfg()
{
new map[32]
get_mapname(map, charsmax(map))
formatex(map,charsmax(map),"%s.ini",map)
new cfgDir[64], i_Dir, i_File[128]
get_configsdir(cfgDir,31)
formatex(cfgDir,63,"%s/box",cfgDir)
i_Dir = open_dir(cfgDir, i_File, charsmax(i_File))
if (i_Dir)
{
while (next_file(i_Dir, i_File, charsmax(i_File)))
{
if (i_File[0] == '.')
continue
if(equal(map, i_File))
{
format(i_File,128,"%s/%s",cfgDir, i_File)
get_gifts(i_File)
}
}
}
}
public set_maps_cfg()
{
new map[32]
get_mapname(map, charsmax(map))
formatex(map,charsmax(map),"%s.ini",map)
new cfgDir[64], i_File[128]
get_configsdir(cfgDir,31)
formatex(cfgDir,63,"%s/box",cfgDir)
format(i_File,128,"%s/%s",cfgDir, map)
delete_file(i_File)
if(g_TotalGifts != 0)
for(new i=0; i<g_TotalGifts; i++)
{
new text[128], Float:fOrigin[3]
pev(g_Gift_id[i],pev_origin,fOrigin)
format(text,128,"^"%f^" ^"%f^" ^"%f^"",fOrigin[0], fOrigin[1], fOrigin[2])
write_file(i_File, text, i)
}
}
public get_gifts(i_File[128])
{
new
i_orig_x[32],
i_orig_y[32],
i_orig_z[32],
sfLineData[512],
file = fopen(i_File,"rt")
while(file && !feof(file))
{
fgets(file, sfLineData, charsmax(sfLineData))
if (containi(sfLineData,";") > -1)
continue
parse(sfLineData, i_orig_x, charsmax(i_orig_x), i_orig_y, charsmax(i_orig_y), i_orig_z, charsmax(i_orig_z))
g_orig_x[g_TotalGifts] = str_to_float(i_orig_x)
g_orig_y[g_TotalGifts] = str_to_float(i_orig_y)
g_orig_z[g_TotalGifts] = str_to_float(i_orig_z)
g_TotalGifts++
if(get_count_lines(i_File) == g_TotalGifts) // Чтобы не считало пустых строк
break
if(g_TotalGifts >= MAX_GIFTS_LOAD)
{
server_print("[%s] Reached gifts limit", PLUGIN)
break
}
}
if(file)
fclose(file)
if(g_TotalGifts == 1)
server_print("[%s] Loaded one Gift", PLUGIN)
else
server_print("[%s] Loaded %d Gifts", PLUGIN, g_TotalGifts)
}
public set_gifts()
{
for(new i=0; i<g_TotalGifts; i++)
{
new Ent = create_entity("info_target")
if(is_valid_ent(Ent))
{
g_Gift_id[i] = Ent
engfunc(EngFunc_SetModel, Ent, g_PresentMdl[random_num(0, charsmax(g_PresentMdl))])
new Float:fOrigin[3]
fOrigin[0] = g_orig_x[i]
fOrigin[1] = g_orig_y[i]
fOrigin[2] = g_orig_z[i]
entity_set_origin(Ent, fOrigin)
entity_set_size(Ent,fMins, fMax)
entity_set_int(Ent,EV_INT_solid,SOLID_TRIGGER)
set_pev(Ent,pev_movetype, MOVETYPE_PUSHSTEP)
set_pev(Ent, pev_gravity, 1.0)
drop_to_floor(Ent)
set_entity_visibility(Ent, 0)
}
}
}
public client_putinserver(id)
{
if(get_cvar_num("cv_gift_get_times_game"))
{
new player_ip[32]
get_user_ip(id, player_ip, 31)
for(new i;i<g_dis_player_num;i++)
{
if(equal(player_ip, g_data_ip[i]))
return
}
g_get_game_times[id] = 0
}
}
public client_disconnect(id)
{
if(get_cvar_num("cv_gift_get_times_game") && g_dis_player_num<200)
{
get_user_ip(id, g_data_ip[g_dis_player_num], 31)
g_dis_player_num++
}
}
public hook_spawn_post(id)
{
if(get_cvar_num("cv_gift_silent_walk"))
set_user_footsteps(id,0)
if(get_cvar_num("cv_gift_speed"))
g_have_speed[id] = false
}
public CurWeapon(id)
{
if(get_cvar_num("cv_gift_speed") && g_have_speed[id])
set_user_maxspeed(id, get_cvar_float("cv_gift_speed_value"))
}
public NewRound()
{
if(get_cvar_num("cv_gift_get_times_round"))
for(new id=1;id<33;id++)
g_get_round_times[id] = 0
if(get_cvar_num("cv_gift_lifes"))
for(new i=0; i<MAX_GIFTS_LOAD; i++)
g_gift_life[i] = get_cvar_num("cv_gift_lifes")
}
public fwdTouch(ent, id)
{
if(!is_user_alive(id) || !is_user_connected(id))
return
if(!is_valid_ent(ent))
return
for(new i=0; i<g_TotalGifts; i++)
{
if(ent == g_Gift_id_valid[i])
{
if(get_cvar_num("cv_gift_get_times_round") && g_get_round_times[id] >= get_cvar_num("cv_gift_get_times_round"))
{
if(!g_massage_rate[id])
{
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы привысили лимит сбора подарков за раунд", PLUGIN)
g_massage_rate[id] = true
set_task(3.0,"reset_massage_rate",id)
}
return
}
if(get_cvar_num("cv_gift_get_times_game") && g_get_game_times[id] >= get_cvar_num("cv_gift_get_times_game"))
{
if(!g_massage_rate[id])
{
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы привысили лимит сбора подарков за игру", PLUGIN)
g_massage_rate[id] = true
set_task(3.0,"reset_massage_rate",id)
}
return
}
g_Gift_id_valid[i] = 0
engfunc(EngFunc_SetModel, g_Gift_id[i], g_PresentMdl[random_num(0, charsmax(g_PresentMdl))])
hide_gift(g_Gift_id[i])
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"))
g_gift_life[i]--
}
}
}
public Create_gift()
{
if(g_TotalGifts <= 0)
return PLUGIN_CONTINUE
new valid_gifts_sum = 0
for(new i=0; i<g_TotalGifts; i++)
{
if(g_Gift_id_valid[i] == g_Gift_id[i] || (!g_gift_life[i] && get_cvar_num("cv_gift_lifes")))
valid_gifts_sum++
}
if(valid_gifts_sum == g_TotalGifts)
return PLUGIN_CONTINUE
new bool: check = false
while(check == false)
{
new id = random_num(0,g_TotalGifts-1)
if(g_Gift_id_valid[id] != g_Gift_id[id])
{
g_Gift_id_valid[id] = g_Gift_id[id]
unhide_gift(g_Gift_id[id])
check = true
}
}
return PLUGIN_CONTINUE
}
public hide_gift(Ent)
{
set_entity_visibility(Ent, 0)
set_rendering(Ent, kRenderFxGlowShell, random_num(0,255), random_num(0,255), random_num(0,255), kRenderNormal, 15)
}
public unhide_gift(Ent)
{
set_entity_visibility(Ent, 1)
set_rendering(Ent, kRenderFxGlowShell, random_num(0,255), random_num(0,255), random_num(0,255), kRenderNormal, 15)
}
public hide_gifts()
{
for(new i=0; i<g_TotalGifts; i++)
{
if(g_Gift_id_valid[i] != g_Gift_id[i])
{
set_entity_visibility(g_Gift_id[i], 0)
set_rendering(g_Gift_id[i], kRenderFxGlowShell, random_num(0,255), random_num(0,255), random_num(0,255), kRenderNormal, 15)
}
}
}
public unhide_gifts()
{
for(new i=0; i<g_TotalGifts; i++)
{
if(g_Gift_id_valid[i] != g_Gift_id[i])
{
set_entity_visibility(g_Gift_id[i], 1)
set_rendering(g_Gift_id[i],kRenderFxGlowShell,0,0,0,kRenderTransAlpha,150)
}
}
}
public Gift_menu(id)
{
if(!is_user_access(id))
{
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tУ вас нет прав на эту функцию", PLUGIN)
return PLUGIN_HANDLED
}
new menu_name[90]
format(menu_name, 90, "\rРасстановка подарков^n\dТекущий подарок: %d/%d", g_TotalGifts+1, MAX_GIFTS_LOAD+1)
new i_menu = menu_create(menu_name, "menu_handler")
if(g_TotalGifts == MAX_GIFTS_LOAD)
menu_additem(i_menu, "\dУстановить Подарок", "1", 0)
else menu_additem(i_menu, "\wУстановить Подарок", "1", 0)
if(g_TotalGifts == 0)
menu_additem(i_menu, "\dУдалить предыдущий Подарок", "2", 0)
else menu_additem(i_menu, "\wУдалить предыдущий Подарок", "2", 0)
if(g_TotalGifts == 0)
menu_additem(i_menu, "\dУдалить все Подарки", "3", 0)
else menu_additem(i_menu, "\wУдалить все Подарки", "3", 0)
if(!g_save_cpl)
menu_additem(i_menu, "\dСохранить изменения", "4", 0)
else menu_additem(i_menu, "\wСохранить изменения", "4", 0)
menu_setprop(i_menu, MPROP_EXIT, MEXIT_ALL)
menu_setprop(i_menu, MPROP_EXITNAME, "\yВыход")
menu_display(id, i_menu, 0)
unhide_gifts()
return PLUGIN_HANDLED
}
public menu_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
hide_gifts()
menu_destroy(menu)
return PLUGIN_HANDLED
}
new s_Data[6], s_Name[64], i_Access, i_Callback
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
new i_Key = str_to_num(s_Data)
switch(i_Key)
{
case 1:
{
if(g_TotalGifts == MAX_GIFTS_LOAD)
{
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tПревышен максимум", PLUGIN)
Gift_menu(id)
return PLUGIN_HANDLED
}
new Ent = create_entity("info_target")
if(is_valid_ent(Ent))
{
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tПодарок установлен", PLUGIN)
g_save_cpl = true
g_TotalGifts++
g_Gift_id[g_TotalGifts-1] = Ent
engfunc(EngFunc_SetModel, Ent, g_PresentMdl[random_num(0, charsmax(g_PresentMdl))])
new Float:fOrigin[3]
fm_get_aim_origin(id, fOrigin)
entity_set_origin(Ent, fOrigin)
entity_set_size(Ent,fMins, fMax)
entity_set_int(Ent,EV_INT_solid,SOLID_TRIGGER)
set_pev(Ent,pev_movetype, MOVETYPE_PUSHSTEP)
set_pev(Ent, pev_gravity, 1.0)
drop_to_floor(Ent)
set_rendering(Ent,kRenderFxGlowShell,0,0,0,kRenderTransAlpha,150)
}
Gift_menu(id)
}
case 2:
{
if(g_TotalGifts == 0)
{
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tНа карте нет Подарков", PLUGIN)
Gift_menu(id)
return PLUGIN_HANDLED
}
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tПодарок удален", PLUGIN)
g_save_cpl = true
g_TotalGifts--
g_Gift_id_valid[g_TotalGifts] = 0
remove_entity(g_Gift_id[g_TotalGifts])
Gift_menu(id)
}
case 3:
{
if(g_TotalGifts == 0)
{
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tНа карте нет Подарков", PLUGIN)
Gift_menu(id)
return PLUGIN_HANDLED
}
g_save_cpl = true
for(new i=0; i<g_TotalGifts; i++)
{
g_Gift_id_valid[i] = 0
remove_entity(g_Gift_id[i])
}
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tБыло удалено !g%d !tПодарков", PLUGIN, g_TotalGifts)
g_TotalGifts = 0
Gift_menu(id)
}
case 4:
{
if(!g_save_cpl)
{
Gift_menu(id)
return PLUGIN_HANDLED
}
g_save_cpl = false
set_maps_cfg()
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tСохранено", PLUGIN)
Gift_menu(id)
}
}
return PLUGIN_HANDLED
}
public give_gift(id) //Выдает случайный бонус с подарка. Добавьте case, если хотите доавить свой.
{
new max_random_gift = 2//Сколько видов бонусов в подарках
switch(random_num(1,max_random_gift))
{
case 1:
{
if(get_cvar_num("cv_gift_speed"))
{
cs_set_weapon_ammo(give_item(id, "weapon_deagle"), 1)
}
else give_gift(id)
}
case 2:
{
if(get_cvar_num("cv_gift_HE"))
{
if(user_has_weapon(id, CSW_HEGRENADE))
{
new countHe = cs_get_user_bpammo(id, CSW_HEGRENADE)
cs_set_user_bpammo(id, CSW_HEGRENADE, countHe + get_cvar_num("cv_gift_HE_value"))
}
else
{
fm_give_item(id, "weapon_hegrenade")
cs_set_user_bpammo(id, CSW_HEGRENADE, get_cvar_num("cv_gift_HE_value"))
}
//PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы получаете !gкомплект гранат (%d HE)", PLUGIN, get_cvar_num("cv_gift_HE_value"))
}
else give_gift(id)
}
//case 7: тут по примерам выше
}
}
public reset_massage_rate(id)
g_massage_rate[id] = false
stock get_count_lines(szFileName[])
{
new fHandle = fopen(szFileName, "rt")
if(!fHandle)
return 0
new szBuffer[2], iLines
while(!feof(fHandle))
{
fgets(fHandle, szBuffer, 1)
if (!szBuffer[0])
continue
iLines++
}
fclose(fHandle)
return iLines
}
stock bool: is_user_access(id)
{
new flag_access[24]
get_cvar_string("get_cv_gift_access", flag_access, charsmax(flag_access))
if(contain(flag_access, "a") && get_user_flags(id) & ADMIN_IMMUNITY)
return true
if(contain(flag_access, "b") && get_user_flags(id) & ADMIN_RESERVATION)
return true
if(contain(flag_access, "c") && get_user_flags(id) & ADMIN_KICK)
return true
if(contain(flag_access, "d") && get_user_flags(id) & ADMIN_BAN)
return true
if(contain(flag_access, "e") && get_user_flags(id) & ADMIN_SLAY)
return true
if(contain(flag_access, "f") && get_user_flags(id) & ADMIN_MAP)
return true
if(contain(flag_access, "g") && get_user_flags(id) & ADMIN_CVAR)
return true
if(contain(flag_access, "h") && get_user_flags(id) & ADMIN_CFG)
return true
if(contain(flag_access, "i") && get_user_flags(id) & ADMIN_CHAT)
return true
if(contain(flag_access, "j") && get_user_flags(id) & ADMIN_VOTE)
return true
if(contain(flag_access, "k") && get_user_flags(id) & ADMIN_PASSWORD)
return true
if(contain(flag_access, "l") && get_user_flags(id) & ADMIN_RCON)
return true
if(contain(flag_access, "m") && get_user_flags(id) & ADMIN_LEVEL_A)
return true
if(contain(flag_access, "n") && get_user_flags(id) & ADMIN_LEVEL_B)
return true
if(contain(flag_access, "o") && get_user_flags(id) & ADMIN_LEVEL_C)
return true
if(contain(flag_access, "p") && get_user_flags(id) & ADMIN_LEVEL_D)
return true
if(contain(flag_access, "q") && get_user_flags(id) & ADMIN_LEVEL_E)
return true
if(contain(flag_access, "r") && get_user_flags(id) & ADMIN_LEVEL_F)
return true
if(contain(flag_access, "s") && get_user_flags(id) & ADMIN_LEVEL_G)
return true
if(contain(flag_access, "t") && get_user_flags(id) & ADMIN_LEVEL_H)
return true
if(contain(flag_access, "u") && get_user_flags(id) & ADMIN_MENU)
return true
if(contain(flag_access, "y") && get_user_flags(id) & ADMIN_ADMIN)
return true
if(contain(flag_access, "z") && get_user_flags(id) & ADMIN_USER)
return true
return false
}
Добавлено спустя 41 минуту 57 секунд:
- Код: Выделить всё
case 3:
{
if(get_cvar_num("cv_gift_speed"))
{
cs_set_weapon_ammo(give_item(id, "weapon_deagle"), 1)
}
else give_gift(id)
}
case 4:
{
if(get_cvar_num("cv_gift_HE"))
{
if(user_has_weapon(id, CSW_HEGRENADE))
{
new countHe = cs_get_user_bpammo(id, CSW_HEGRENADE)
cs_set_user_bpammo(id, CSW_HEGRENADE, countHe + get_cvar_num("cv_gift_HE_value"))
}
else
{
fm_give_item(id, "weapon_hegrenade")
cs_set_user_bpammo(id, CSW_HEGRENADE, get_cvar_num("cv_gift_HE_value"))
}
//PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы получаете !gкомплект гранат (%d HE)", PLUGIN, get_cvar_num("cv_gift_HE_value"))
}
else give_gift(id)
}
Вот тут что то сделать нужно, хз что(