Не сохраняется!

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
8
Реакции
-1
Ошибка
Нету
ОС
Linux
Amx Mod X
1.8.2 1.8.3
Билд
6153
ReGamedll
Нет
Версия Metamod
1.21.37
Список метамодулей
[ 1] AMX Mod X        RUN   -    amxmodx_mm_i386.  v1.8.2    ini   Start ANY  
[ 2] dproto_EF RUN - dproto_i386.so v0.9.391 ini Start Never
[ 3] Fun RUN - fun_amxx_i386.so v1.8.2 pl1 ANY ANY
[ 4] CStrike RUN - cstrike_amxx_i38 v1.8.2 pl1 ANY ANY
[ 5] CSX RUN - csx_amxx_i386.so v1.8.2 pl1 ANY ANY
[ 6] MySQL RUN - mysql_amxx_i386. v1.8.2 pl1 ANY ANY
[ 7] FakeMeta RUN - fakemeta_amxx_i3 v1.8.2 pl1 ANY ANY
[ 8] Engine RUN - engine_amxx_i386 v1.8.2 pl1 ANY ANY
[ 9] Ham Sandwich RUN - hamsandwich_amxx v1.8.2 pl1 ANY ANY
[10] Orpheu RUN - orpheu_amxx_i386 v2.3 pl1 ANY ANY
Список плагинов
[  1] AMXBans: Core           Gm 1.6      Larte Team        amxbans_core.am  running  
[ 2] AMXBans: Main Gm 1.6 Larte Team amxbans_main.am running
[ 3] Admin Commands 1.8.2 AMXX Dev Team admincmd.amxx running
[ 4] Admin Help 1.8.2 AMXX Dev Team adminhelp.amxx running
[ 5] Slots Reservation 1.8.2 AMXX Dev Team adminslots.amxx running
[ 6] Multi-Lingual System 1.8.2 AMXX Dev Team multilingual.am running
[ 7] Menus Front-End 1.8.2 AMXX Dev Team menufront.amxx running
[ 8] Commands Menu 1.8.2 AMXX Dev Team cmdmenu.amxx running
[ 9] Players Menu 1.8.2 AMXX Dev Team plmenu.amxx running
[ 10] Maps Menu 1.8.2 AMXX Dev Team mapsmenu.amxx running
[ 11] Plugin Menu 1.8.2 AMXX Dev Team pluginmenu.amxx running
[ 12] Admin Chat 1.8.2 AMXX Dev Team adminchat.amxx running
[ 13] Anti Flood 1.8.2 AMXX Dev Team antiflood.amxx running
[ 14] Scrolling Message 1.8.2 AMXX Dev Team scrollmsg.amxx running
[ 15] Info. Messages 1.8.2 AMXX Dev Team imessage.amxx running
[ 16] Admin Votes 1.8.2 AMXX Dev Team adminvote.amxx running
[ 17] NextMap 1.8.2 AMXX Dev Team nextmap.amxx running
[ 18] Nextmap Chooser 1.8.2 AMXX Dev Team mapchooser.amxx running
[ 19] TimeLeft 1.8.2 AMXX Dev Team timeleft.amxx running
[ 20] Pause Plugins 1.8.2 AMXX Dev Team pausecfg.amxx running
[ 21] Stats Configuration 1.8.2 AMXX Dev Team statscfg.amxx running
[ 22] StatsX 1.8.2 AMXX Dev Team statsx.amxx running
[ 23] Chat Manager 1.2b Mr_ILYAS Chat_Manager.am running
[ 24] Worms Presents Style 0.7 Psycrow next21_presents debug
[ 25] FWD Skins 1.0 OverGame fwd_Skins.amxx running
[ 26] Welcom 1.0 Artem P. welcome_music.a running
[ 27] [MG] System Fun Box 2.0 Nickron mg_fun_jump.amx running
[ 28] [MG] System Box 2.0 Nickron mg_test_system_ running
[ 29] MG Grab 1.0 Nickron mg_grab.amxx running
[ 30] get_user_info 0.0.1 holy new_hook.amxx running
[ 31] RoundMusic 1.0 Rich RoundMusic.amxx running
[ 32] Worms like Deaths 1.2 Drekes worms_like_deat running
[ 33] [MG] Grenade Shock 0.1 Nickron mg_grenade_shoc running
[ 34] MG - Parachute 1.1 maeStro mg_parachute.am running
[ 35] Hats shop 1.1 R-2 ShopHats.amxx running
[ 36] unknown unknown unknown elit_adm.amxx running
[ 37] Max Start Money 1.0.0 Arkshine max_start_money running
[ 38] Buyzone Range 0.1 VEN buyzonerange.am running
[ 39] He kill Him 1.1 trofian he_kill_him.amx debug
[ 40] Fix for map 35hp_3 1.0 trofian fix_ladder_rend running
[ 41] Next21 VIP 1.1 trofian next21_vip.amxx running
[ 42] Max Money Fix 1.0 trofian fix_game_commen running
[ 43] Advanced Render 1.0 trofian advanced_render running
[ 44] Custom Hud 1.1 trofian custom_hud.amxx running
[ 45] Server 1.2 trofian next21_knife_co debug
[ 46] Blink Knife 1.2 trofian next21_knife_bl debug
[ 47] Slap Axe 1.3 trofian next21_knife_sl debug
[ 48] Flash Knife 1.1 trofian next21_knife_fl debug
[ 49] Ninja-to 1.1 trofian and Psyc next21_knife_ni debug
[ 50] Leap Knife 1.1 trofian next21_knife_le debug
[ 51] Fire Knife 1.1 trofian next21_knife_fi debug
[ 52] Nuclear 1.1 trofian and Psyc next21_knife_nu debug
[ 53] Frost Knife 1.1 trofian & Psycro next21_knife_fr debug
[ 54] Thunder Knife 1.0 Psycrow next21_knife_th debug
[ 55] Next21 Bunny Item 1.0 trofian next21_item_bun debug
[ 56] Regeneration 1.1 Psycrow next21_item_sti debug
[ 57] Candy Cane 1.1 Psycrow next21_item_can debug
[ 58] Next21 Respawn 1.0 trofian next21_item_res debug
[ 59] Next21 HP Item 1.0 Psycrow next21_item_hp. debug
[ 60] Next21 Items 1.1 trofian next21_item_he. debug
[ 61] Frost & Gaz Nades 1.0 Psycrow next21_item_fro debug
[ 62] Next21 Items 1.1 trofian and Psyc next21_item_fla debug
[ 63] Presents 1.0 trofian next21_presents debug
[ 64] Mind Games 1.0 fifayer & Psycro MindGames.amxx running
[ 65] Hats 1.2 trofian hat.amxx debug
[ 66] next21_duels 0.5 Psycrow next21_duels.am debug
Автор плагина
next21
Версия плагина
0.7
Исходный код
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <WPMGPrintChatColor>

#define PLUGIN "Worms Presents Style"
#define VERSION "0.7"
#define AUTHOR "Psycrow"

#define SPAWN_MODEL "models/next21_worms_style/target.mdl"
#define PARACHUTE_MODEL "models/next21_worms_style/parachute.mdl"
#define BOX_MODEL "models/next21_worms_style/box.mdl"

#define FALL_SOUND "next21_worms_style/box_fall.wav"
#define CREATE_SOUND "next21_worms_style/box_create.wav"
#define PICKUP_SOUND "next21_worms_style/box_pickup.wav"

#define SPAWN_CLASS "worms_spawn_box"
#define PBOX_CLASS "worms_parachute_box"
#define BOX_CLASS "worms_box"

#define TASK_FIXOIGIN 200
#define TASK_FIXMULTITRACES 400

#define pev_notrace pev_euser1
#define pev_lifes pev_euser2

static
Array:g_wb_id,
Array:g_wb_origin_x,
Array:g_wb_origin_y,
Array:g_wb_origin_z,
Array:g_steam_ids, //Хранилище steam_id игроков, посетивших игру
Array:g_weapon_list,
Array:g_weapon_ammo_list,
Array:g_utilities_list,
ExplosionMdl,
SmokeMdl

new
bool: g_save_cpl,
bool: is_spawns_visible,
bool: g_ham_reg,
g_round_times[33],
g_game_times[33]


public plugin_precache()
{
precache_model(SPAWN_MODEL)
precache_model(PARACHUTE_MODEL)
precache_model(BOX_MODEL)

precache_sound(FALL_SOUND)
precache_sound(CREATE_SOUND)
precache_sound(PICKUP_SOUND)

ExplosionMdl = precache_model("sprites/zerogxplode.spr")
SmokeMdl = precache_model("sprites/steam1.spr")
}

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_cvar("cv_spawnbox_timerate","60.0")
register_cvar("cv_box_lifes","0")
register_cvar("cv_wb_times_round", "0")
register_cvar("cv_wb_times_game", "0")
register_cvar("cv_wb_solid", "1")

register_cvar("cv_box_health", "1")
register_cvar("cv_box_health_value", "50")
register_cvar("cv_box_ammo", "1")
register_cvar("cv_box_utilities", "1")

if(!get_cvar_num("cv_box_health") && !get_cvar_num("cv_box_ammo") && !get_cvar_num("cv_box_utilities"))
return

register_clcmd( "say /wb_spawn_menu", "spawn_menu", ADMIN_IMMUNITY)
register_clcmd( "say_team /wb_spawn_menu", "spawn_menu", ADMIN_IMMUNITY)

g_wb_id = ArrayCreate()
g_wb_origin_x = ArrayCreate()
g_wb_origin_y = ArrayCreate()
g_wb_origin_z = ArrayCreate()

if(get_cvar_num("cv_box_ammo"))
{
g_weapon_list = ArrayCreate(32)
g_weapon_ammo_list = ArrayCreate()
}

if(get_cvar_num("cv_box_utilities")) g_utilities_list = ArrayCreate(32)
if(get_cvar_num("cv_wb_times_game")) g_steam_ids = ArrayCreate(32)

new const szEntity[][] =
{
"worldspawn", "func_wall", "func_door", "func_door_rotating",
"func_wall_toggle", "func_breakable", "func_pushable", "func_train",
"func_illusionary", "func_button", "func_rot_button", "func_rotating", BOX_CLASS
}

for(new i; i<sizeof szEntity; i++)
{
register_touch(BOX_CLASS, szEntity[i], "fw_box_touch_world")
register_touch(PBOX_CLASS, szEntity[i], "fw_pbox_touch_world")
}
register_touch(BOX_CLASS, "player", "fw_box_touch_player")
register_touch(PBOX_CLASS, "player", "fw_box_touch_player")

register_logevent("NewRound", 2, "1=Round_Start")

set_task(get_cvar_float("cv_spawnbox_timerate"), "create_box_pre", _, _, _, "b")
get_maps_cfg()

if(get_cvar_num("cv_box_ammo")) get_weapon_list()
if(get_cvar_num("cv_box_utilities")) get_utilities_list()
}

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, charsmax(cfgDir))
formatex(cfgDir, charsmax(cfgDir), "%s/next21_worms_boxes", 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_spawns(i_File)
break
}
}
}
else server_print("[%s] Spawns was not loaded", PLUGIN)
}

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, charsmax(cfgDir))
formatex(cfgDir, charsmax(cfgDir), "%s/next21_worms_boxes", cfgDir)
formatex(i_File, charsmax(i_File),"%s/%s",cfgDir, map)

if(dir_exists(cfgDir))
if(!mkdir(cfgDir))
return

delete_file(i_File)

static spawn_count; spawn_count = ArraySize(g_wb_id)
if(!spawn_count)
return

for(new i=0; i<spawn_count; i++)
{
new text[128], Float:fOrigin[3], ent = ArrayGetCell(g_wb_id, i)
drop_to_floor(ent)
pev(ent, pev_origin, fOrigin)
format(text, charsmax(text),"^"%f^" ^"%f^" ^"%f^"",fOrigin[0], fOrigin[1], fOrigin[2])
write_file(i_File, text, i)
}
}

public get_spawns(i_File[128])
{
new file = fopen(i_File,"rt")

if(!file)
{
server_print("[%s] Spawns 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 i_origins[3][32], Float: fOrigins[3]
parse(sfLineData, i_origins[0], 31, i_origins[1], 31, i_origins[2], 31)

fOrigins[0] = str_to_float(i_origins[0])
fOrigins[1] = str_to_float(i_origins[1])
fOrigins[2] = str_to_float(i_origins[2])

create_spawn(fOrigins)
}

fclose(file)

if(!ArraySize(g_wb_id))
server_print("[%s] Spawns was not loaded", PLUGIN)
else if(ArraySize(g_wb_id) == 1)
server_print("[%s] Loaded one spawn", PLUGIN)
else
server_print("[%s] Loaded %d spawns", PLUGIN, ArraySize(g_wb_id))
}

public get_weapon_list()
{
new cfgDir[64], i_File[128]
get_configsdir(cfgDir, charsmax(cfgDir))
formatex(i_File, charsmax(i_File), "%s/next21_worms_boxes/lists/weapon_list.ini", cfgDir)

new file = fopen(i_File,"rt")

if(!file)
return

while(file && !feof(file))
{
new sfLineData[512]
fgets(file, sfLineData, charsmax(sfLineData))

if(sfLineData[0] == ';')
continue

if(equal(sfLineData,""))
continue

new weapon_name[32], weapon_ammo[8]
parse(sfLineData, weapon_name, charsmax(weapon_name), weapon_ammo, charsmax(weapon_ammo))
ArrayPushString(g_weapon_list, weapon_name)
ArrayPushCell(g_weapon_ammo_list, str_to_num(weapon_ammo))
}

fclose(file)
}

public get_utilities_list()
{
new cfgDir[64], i_File[128]
get_configsdir(cfgDir, charsmax(cfgDir))
formatex(i_File, charsmax(i_File), "%s/next21_worms_boxes/lists/utilities_list.ini", cfgDir)

new file = fopen(i_File,"rt")

if(!file)
return

while(file && !feof(file))
{
new sfLineData[512]
fgets(file, sfLineData, charsmax(sfLineData))

if(sfLineData[0] == ';')
continue

if(equal(sfLineData,""))
continue

new utility_name[32]
parse(sfLineData, utility_name, charsmax(utility_name))
ArrayPushString(g_utilities_list, utility_name)
}

fclose(file)
}

public spawn_menu(id)
{

/*if(!is_user_access(id))
{
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tУ вас нет прав на эту функцию", PLUGIN)
return PLUGIN_HANDLED
}*/

is_spawns_visible = true

new menu_name[128]
static spawn_count; spawn_count = ArraySize(g_wb_id)
format(menu_name, charsmax(menu_name), "\rРасстановка спаунов для ящиков^n\dТекущий спаун: %d", spawn_count+1)

new i_menu = menu_create(menu_name, "menu_handler")

menu_additem(i_menu, "\wУстановить спаун", "1", 0)

if(!spawn_count)
{
menu_additem(i_menu, "\dУдалить предыдущий спаун", "2", 0)
menu_additem(i_menu, "\dУдалить все спауны", "3", 0)
menu_additem(i_menu, "\dСбросить все ящики", "4", 0)
}
else
{
menu_additem(i_menu, "\wУдалить предыдущий спаун", "2", 0)
menu_additem(i_menu, "\wУдалить все спауны", "3", 0)
menu_additem(i_menu, "\wСбросить все ящики", "4", 0)
}

if(!g_save_cpl)
menu_additem(i_menu, "\dСохранить изменения", "5", 0)
else menu_additem(i_menu, "\wСохранить изменения", "5", 0)

menu_setprop(i_menu, MPROP_EXIT, MEXIT_ALL)
menu_setprop(i_menu, MPROP_EXITNAME, "\yВыход")
menu_display(id, i_menu, 0)
unhide_spawns()

return PLUGIN_HANDLED
}

public menu_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
hide_spawns()
menu_destroy(menu)
return PLUGIN_HANDLED
}

static spawn_count; spawn_count = ArraySize(g_wb_id)
switch(item)
{
case 0:
{
g_save_cpl = true

static Float:fOrigins[3]
fm_get_aim_origin(id, fOrigins)

create_spawn(fOrigins)
spawn_menu(id)
}
case 1:
{
if(!spawn_count)
{
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tНа карте нет спаунов", PLUGIN)
spawn_menu(id)
return PLUGIN_HANDLED
}

PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tСпаун удален", PLUGIN)

g_save_cpl = true
remove_entity(ArrayGetCell(g_wb_id, spawn_count-1))
ArrayDeleteItem(g_wb_id, spawn_count-1)
ArrayDeleteItem(g_wb_origin_x, spawn_count-1)
ArrayDeleteItem(g_wb_origin_y, spawn_count-1)
ArrayDeleteItem(g_wb_origin_z, spawn_count-1)
spawn_menu(id)
}
case 2:
{
if(!spawn_count)
{
PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tНа карте нет спаунов", PLUGIN)
spawn_menu(id)
return PLUGIN_HANDLED
}

PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tБыло удалено !g%d !tспаун.", PLUGIN, spawn_count)

g_save_cpl = true

for(new i=0; i<spawn_count; i++)
remove_entity(ArrayGetCell(g_wb_id, i))
ArrayClear(g_wb_id)
ArrayClear(g_wb_origin_x)
ArrayClear(g_wb_origin_y)
ArrayClear(g_wb_origin_z)
spawn_menu(id)
}
case 3:
{
if(spawn_count)
for(new i=0; i<spawn_count; i++)
create_box(i)
spawn_menu(id)
}
case 4:
{
if(!g_save_cpl)
{
spawn_menu(id)
return PLUGIN_HANDLED
}

g_save_cpl = false
set_maps_cfg()

PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tСохранено", PLUGIN)
spawn_menu(id)
}
}
return PLUGIN_HANDLED
}

public create_spawn(Float: fOrigins[3])
{
static ent; ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
if(!pev_valid(ent)) return

ArrayPushCell(g_wb_id, ent)

ArrayPushCell(g_wb_origin_x, fOrigins[0])
ArrayPushCell(g_wb_origin_y, fOrigins[1])
ArrayPushCell(g_wb_origin_z, fOrigins[2])

set_pev(ent, pev_origin, fOrigins)
engfunc(EngFunc_SetModel, ent, SPAWN_MODEL)

set_pev(ent, pev_solid, SOLID_TRIGGER)
set_pev(ent, pev_movetype, MOVETYPE_NONE)
set_pev(ent, pev_classname, SPAWN_CLASS)
set_pev(ent, pev_lifes, get_cvar_num("cv_box_lifes"))

if(!is_spawns_visible)
entity_set_int(ent, EV_INT_effects, entity_get_int(ent, EV_INT_effects) | EF_NODRAW)

if(!g_ham_reg)
{
RegisterHamFromEntity(Ham_TraceAttack, ent, "fw_box_trace_attack")
g_ham_reg = true
}
}

public create_box_pre()
{
static spawn_count; spawn_count = ArraySize(g_wb_id)

if(!spawn_count)
return

new boxes_sum = 0
for(new i=0; i<spawn_count; i++)
{
static ent; ent = ArrayGetCell(g_wb_id, i)
new classname[32]
pev(ent, pev_classname, classname, charsmax(classname))

if(equal(classname, SPAWN_CLASS) && (pev(ent, pev_lifes) || !get_cvar_num("cv_box_lifes")))
boxes_sum++
}

if(!boxes_sum)
return

new id = -1
while(id == -1)
{
new i = random_num(0, spawn_count-1)

static ent; ent = ArrayGetCell(g_wb_id, i)
new classname[32]
pev(ent, pev_classname, classname, charsmax(classname))

if(equal(classname, SPAWN_CLASS) && (pev(ent, pev_lifes) || !get_cvar_num("cv_box_lifes")))
id = i
}

create_box(id)

return
}

public create_box(id)
{
static ent; ent = ArrayGetCell(g_wb_id, id)

new Float:fOrigin[3], Float:fNewOrigin[3], PC, Float:dist
fOrigin[0] = ArrayGetCell(g_wb_origin_x, id)
fOrigin[1] = ArrayGetCell(g_wb_origin_y, id)
fOrigin[2] = ArrayGetCell(g_wb_origin_z, id)
fNewOrigin = get_origin_to_roof(ent, fOrigin)
PC = engfunc(EngFunc_PointContents, fNewOrigin)
dist = floatabs(fNewOrigin[2]-fOrigin[2])

if(PC != CONTENTS_SKY)
{
if(dist - 80.0 <= 90.0) fNewOrigin[2] = fOrigin[2] + 10.0
else fNewOrigin[2] -= 80.0
}
else fNewOrigin[2] = fOrigin[2] + 200.0

set_pev(ent, pev_origin, fNewOrigin)
engfunc(EngFunc_SetModel, ent, PARACHUTE_MODEL)

if(get_cvar_num("cv_wb_solid"))
set_pev(ent, pev_solid, SOLID_BBOX)
else
set_pev(ent, pev_solid, SOLID_TRIGGER)

set_pev(ent, pev_movetype, MOVETYPE_FLY)
set_pev(ent, pev_velocity, {0.0, 0.0, -40.0})
set_pev(ent, pev_classname, PBOX_CLASS)

new Float:maxs[3] = {10.0, 10.0, 80.0}
new Float:mins[3] = {-10.0, -10.0, 0.0}
engfunc(EngFunc_SetSize, ent, mins, maxs)
entity_set_int(ent, EV_INT_effects, entity_get_int(ent, EV_INT_effects) & ~EF_NODRAW)

emit_sound(ent, CHAN_ITEM, CREATE_SOUND, 1.0, ATTN_NORM, 0, PITCH_NORM)

new iType = -1

while(iType == -1)
{
iType = random_num(0,2)

if(iType == 0 && !get_cvar_num("cv_box_health"))
iType = -1

if(iType == 1 && !get_cvar_num("cv_box_ammo"))
iType = -1

if(iType == 2 && !get_cvar_num("cv_box_utilities"))
iType = -1
}

set_pev(ent, pev_body, iType)
set_pev(ent, pev_framerate, 1.0)
set_pev(ent, pev_sequence, iType)
}

public explode_box(ent)
{
if(!is_valid_ent(ent)) return

static iOrigin[3], Float: fOrigin[3]
pev(ent, pev_origin, fOrigin)
iOrigin[0] = floatround(fOrigin[0])
iOrigin[1] = floatround(fOrigin[1])
iOrigin[2] = floatround(fOrigin[2])

message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(3)
write_coord(iOrigin[0])
write_coord(iOrigin[1])
write_coord(iOrigin[2])
write_short(ExplosionMdl)
write_byte(random_num(0,20) + 20)
write_byte(12)
write_byte(0)
message_end()

message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(5)
write_coord(iOrigin[0])
write_coord(iOrigin[1])
write_coord(iOrigin[2] + 10)
write_short(SmokeMdl)
write_byte(60)
write_byte(10)
message_end()
}

public hide_box(ent)
{
if(!is_valid_ent(ent)) return

set_pev(ent, pev_solid, SOLID_NOT)
set_pev(ent, pev_movetype, MOVETYPE_NONE)
set_pev(ent, pev_classname, SPAWN_CLASS)

if(!is_spawns_visible)
entity_set_int(ent, EV_INT_effects, entity_get_int(ent, EV_INT_effects) | EF_NODRAW)

engfunc(EngFunc_SetModel, ent, SPAWN_MODEL)

new Float:maxs[3] = {0.0, 0.0, 0.0}
new Float:mins[3] = {0.0, 0.0, 0.0}
engfunc(EngFunc_SetSize, ent, mins, maxs)

static spawns_count; spawns_count = ArraySize(g_wb_id)
for (new i=0; i<spawns_count; i++)
if(ent == ArrayGetCell(g_wb_id, i))
{
new Float:fOrigin[3]
fOrigin[0] = ArrayGetCell(g_wb_origin_x, i)
fOrigin[1] = ArrayGetCell(g_wb_origin_y, i)
fOrigin[2] = ArrayGetCell(g_wb_origin_z, i)
set_pev(ent, pev_origin, fOrigin)
}

if(pev(ent, pev_lifes))
set_pev(ent, pev_lifes, pev(ent, pev_lifes)-1)
}

public hide_spawns()
{
is_spawns_visible = false

static spawns_count; spawns_count = ArraySize(g_wb_id)
if(!g_wb_id) return

for (new i=0; i<spawns_count; i++)
{
static classname[32], ent; ent = ArrayGetCell(g_wb_id, i)
pev(ent, pev_classname, classname, charsmax(classname))
if(!equal(classname, SPAWN_CLASS)) continue
entity_set_int(ent, EV_INT_effects, entity_get_int(ent, EV_INT_effects) | EF_NODRAW)
}
}

public unhide_spawns()
{
static spawns_count; spawns_count = ArraySize(g_wb_id)
if(!g_wb_id) return

for (new i=0; i<spawns_count; i++)
{
static classname[32], ent; ent = ArrayGetCell(g_wb_id, i)
pev(ent, pev_classname, classname, charsmax(classname))
if(!equal(classname, SPAWN_CLASS)) continue
entity_set_int(ent, EV_INT_effects, entity_get_int(ent, EV_INT_effects) & ~EF_NODRAW)
}
}

public fw_box_trace_attack(ent, attacker, Float:damage, Float:dir[3], ptr, damagetype)
{
if(!is_valid_ent(ent)) return

new classname[32]
pev(ent, pev_classname, classname, charsmax(classname))
if(!equal(classname, PBOX_CLASS))
{
if(equal(classname, BOX_CLASS))
{
if(!pev(ent, pev_notrace))
{
explode_box(ent)
hide_box(ent)
}
}
return
}

new Float: endtrace[3]
fm_get_aim_origin(attacker, endtrace)

if(find_closest_bone_to_gunshot(ent, endtrace) == 1)
{
engfunc(EngFunc_SetModel, ent, BOX_MODEL)
set_pev(ent, pev_velocity, {0.0, 0.0, -1.0})
set_pev(ent, pev_movetype, MOVETYPE_BOUNCE)
set_pev(ent, pev_classname, BOX_CLASS)

/*Фикс мульти трейсов*/
set_pev(ent, pev_notrace, 1)
set_task(0.1,"set_euser1", ent+TASK_FIXMULTITRACES)

new Float:maxs[3] = {10.0, 10.0, 28.0}
new Float:mins[3] = {-10.0, -10.0, 0.0}
engfunc(EngFunc_SetSize, ent, mins, maxs)
}
else
{
explode_box(ent)
hide_box(ent)
}
}

public fw_box_touch_player(ent, player)
{
if(!is_valid_ent(ent)) return
if(get_cvar_num("cv_wb_times_round") && !g_round_times[player]) return
if(get_cvar_num("cv_wb_times_game") && !g_game_times[player]) return

if(g_round_times[player]) g_round_times[player]--
if(g_game_times[player]) g_game_times[player]--

client_cmd(player, "spk %s", PICKUP_SOUND)

static iType; iType = pev(ent, pev_body)
switch(iType)
{
case 0:
{
static hp; hp = get_cvar_num("cv_box_health_value")
fm_set_user_health(player, pev(player, pev_health)+hp)
PrintChatColor(player, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы получаете !gздоровье (%d hp)", PLUGIN, hp)
}
case 1:
{
static weapon_list_count; weapon_list_count = ArraySize(g_weapon_list)
if(!weapon_list_count)
{
PrintChatColor(player, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tЯщик оказался пустым", PLUGIN)
hide_box(ent)
return
}

static i; i = random_num(0, weapon_list_count-1)
static weapon_name[32], weapon_short_name[16], blank_str[2]
ArrayGetString(g_weapon_list, i, weapon_name, charsmax(weapon_name))
strtok(weapon_name, blank_str, charsmax(blank_str), weapon_short_name, charsmax(weapon_short_name), '_')
new wEnt = find_ent_by_owner(-1, weapon_name, player)
if(!wEnt)
{
wEnt = ham_give_weapon(player, weapon_name)
PrintChatColor(player, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы подобрали !g%s", PLUGIN, weapon_short_name)
cs_set_weapon_ammo(wEnt, ArrayGetCell(g_weapon_ammo_list, i))
}
else
{
PrintChatColor(player, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы подобрали патроны для !g%s", PLUGIN, weapon_short_name)
cs_set_user_bpammo(player, weapon_to_const(weapon_name), cs_get_user_bpammo(player, weapon_to_const(weapon_name)) + ArrayGetCell(g_weapon_ammo_list, i))
}
}
case 2:
{
static utilities_list_count; utilities_list_count = ArraySize(g_utilities_list)
if(!utilities_list_count)
{
PrintChatColor(player, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tЯщик оказался пустым", PLUGIN)
hide_box(ent)
return
}

static i; i = random_num(0, utilities_list_count-1)
static utility_name[32]
ArrayGetString(g_utilities_list, i, utility_name, charsmax(utility_name))

if(equal(utility_name,"nightvision"))
{
PrintChatColor(player, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы подобрали !gnightvision", PLUGIN)
cs_set_user_nvg(player)
}
else if(equal(utility_name,"defuse kit") && cs_get_user_team(player) == CS_TEAM_CT)
{
PrintChatColor(player, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы подобрали !gdefuse kit", PLUGIN)
cs_set_user_defuse(player)
}
else if(equal(utility_name,"armor"))
{
PrintChatColor(player, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы подобрали !garmor", PLUGIN)
cs_set_user_armor(player, 100, CS_ARMOR_KEVLAR)
}
else if(equal(utility_name,"armor+helmet"))
{
PrintChatColor(player, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы подобрали !garmor+helmet", PLUGIN)
cs_set_user_armor(player, 100, CS_ARMOR_VESTHELM)
}
else PrintChatColor(player, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tЯщик оказался пустым", PLUGIN)
}
}
hide_box(ent)
}

public fw_pbox_touch_world(ent, world)
{
if(!is_valid_ent(ent)) return

engfunc(EngFunc_SetModel, ent, BOX_MODEL)
set_pev(ent, pev_velocity, {0.0, 0.0, 0.0})
set_pev(ent, pev_movetype, MOVETYPE_BOUNCE)
set_pev(ent, pev_classname, BOX_CLASS)

/*Фикс мульти трейсов*/
set_pev(ent, pev_notrace, 1)
set_task(0.1,"set_euser1", ent+TASK_FIXMULTITRACES)

new Float:maxs[3] = {10.0, 10.0, 28.0}
new Float:mins[3] = {-10.0, -10.0, 0.0}
engfunc(EngFunc_SetSize, ent, mins, maxs)
}

public set_euser1(ent) set_pev(ent-TASK_FIXMULTITRACES, pev_notrace, 0)

public fw_box_touch_world(ent, world)
{
if(!is_valid_ent(ent)) return

static Float:fVelocity[3]
pev(ent, pev_velocity, fVelocity)

fVelocity[0] *= 0.85
fVelocity[1] *= 0.85
fVelocity[2] *= 0.85

set_pev(ent, pev_velocity, fVelocity)

if(floatabs(fVelocity[2]) > 100.0) emit_sound(ent, CHAN_ITEM, FALL_SOUND, 1.0, ATTN_NORM, 0, PITCH_NORM)
else emit_sound(ent, CHAN_ITEM, FALL_SOUND, floatabs(fVelocity[2])/100, ATTN_NORM, 0, PITCH_NORM)
}

public NewRound()
{
for(new id=1;id<=32;id++)
g_round_times[id] = get_cvar_num("cv_wb_times_round")
}

public client_putinserver(id)
{
if(!get_cvar_num("cv_wb_times_game"))
return

static id_count; id_count = ArraySize(g_steam_ids)

new steam_id[32]
get_user_authid(id, steam_id, charsmax(steam_id))

for(new i=0;i<id_count;i++)
{
new saved_steam_id[32]
ArrayGetString (g_steam_ids, id_count-1, saved_steam_id, charsmax(saved_steam_id))

if(equal(saved_steam_id, steam_id))
return
}

g_game_times[id] = get_cvar_num("cv_wb_times_game")
ArrayPushString(g_steam_ids, steam_id)

return
}

stock find_closest_bone_to_gunshot(victim, Float:endtrace[3])
{
new Float:angles[3], Float:origin[3], Float:dist = 9999999.99, Float:curorigin[3], bone_nr
for (new i=0;i<=2;i++)
{
engfunc(EngFunc_GetBonePosition, victim, i, curorigin, angles)
xs_vec_sub(curorigin, endtrace, angles)

if(xs_vec_len(angles) <= dist)
{
origin = curorigin
dist = xs_vec_len(angles)
bone_nr = i
}
}

return bone_nr
}

stock Float: get_origin_to_roof(ent, Float:start[3])
{
new Float:dest[3] = {-90.0, 0.0, 0.0}
engfunc(EngFunc_MakeVectors, dest)
global_get(glb_v_forward, dest)
xs_vec_mul_scalar(dest, 9999.0, dest)
xs_vec_add(start, dest, dest)

engfunc(EngFunc_TraceLine, start, dest, 0, ent, 0)
new Float:origin[3]
get_tr2(0, TR_vecEndPos, origin)

return origin
}

stock ham_give_weapon(id,weapon[])
{
if(!equal(weapon,"weapon_",7)) return 0

new wEnt = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,weapon))
if(!pev_valid(wEnt)) return 0

set_pev(wEnt,pev_spawnflags,SF_NORESPAWN)
dllfunc(DLLFunc_Spawn,wEnt)

if(!ExecuteHamB(Ham_AddPlayerItem,id,wEnt))
{
if(pev_valid(wEnt)) set_pev(wEnt,pev_flags,pev(wEnt,pev_flags) | FL_KILLME)
return 0
}

ExecuteHamB(Ham_Item_AttachToPlayer,wEnt,id)
return wEnt
}

stock weapon_to_const(weapon[])
{
if(equal(weapon,"weapon_p228")) return CSW_P228
if(equal(weapon,"weapon_scout")) return CSW_SCOUT
if(equal(weapon,"weapon_hegrenade")) return CSW_HEGRENADE
if(equal(weapon,"weapon_xm1014")) return CSW_XM1014
if(equal(weapon,"weapon_c4")) return CSW_C4
if(equal(weapon,"weapon_mac10")) return CSW_MAC10
if(equal(weapon,"weapon_aug")) return CSW_AUG
if(equal(weapon,"weapon_smokegrenade")) return CSW_SMOKEGRENADE
if(equal(weapon,"weapon_elite")) return CSW_ELITE
if(equal(weapon,"weapon_fiveseven")) return CSW_FIVESEVEN
if(equal(weapon,"weapon_ump45")) return CSW_UMP45
if(equal(weapon,"weapon_sg550")) return CSW_SG550
if(equal(weapon,"weapon_galil")) return CSW_GALIL
if(equal(weapon,"weapon_famas")) return CSW_FAMAS
if(equal(weapon,"weapon_usp")) return CSW_USP
if(equal(weapon,"weapon_glock18")) return CSW_GLOCK18
if(equal(weapon,"weapon_awp")) return CSW_AWP
if(equal(weapon,"weapon_mp5navy")) return CSW_MP5NAVY
if(equal(weapon,"weapon_m249")) return CSW_M249
if(equal(weapon,"weapon_m3")) return CSW_M3
if(equal(weapon,"weapon_m4a1")) return CSW_M4A1
if(equal(weapon,"weapon_tmp")) return CSW_TMP
if(equal(weapon,"weapon_g3sg1")) return CSW_G3SG1
if(equal(weapon,"weapon_flashbang")) return CSW_FLASHBANG
if(equal(weapon,"weapon_deagle")) return CSW_DEAGLE
if(equal(weapon,"weapon_sg552")) return CSW_SG552
if(equal(weapon,"weapon_ak47")) return CSW_AK47
if(equal(weapon,"weapon_knife")) return CSW_KNIFE
if(equal(weapon,"weapon_p90")) return CSW_P90

return 0
}
Предметы создаются, берутся.
Все нормально.
Но единственный косяк
это не сохранение объектов.
То бишь я поставил сменил карту они пропали.
В FTP в папкегде должен быть сейв пусто.
В конфигах 0.
Плагин старый вроде как уже. Но вот пригодился.
Прошу помощи в решении данной проблемы.
 
Сообщения
29
Реакции
15
Помог
1 раз(а)
У вас устаревший билд. Обновитесь до актуальной версии.
 
Сообщения
8
Реакции
-1
KennY, Билд Сервера ?
Я не в курсах какой щас актуальный.
Я думал 6153 и Rehlds актуал.
 
Сообщения
29
Реакции
15
Помог
1 раз(а)
Mr_DETAL6KA, на главной странице, справа, показаны актуальные версии сервера и дополнений.
 
Сообщения
1,536
Реакции
2,319
Помог
39 раз(а)
Мы не поддерживаем устаревшие версии. Создавайте тему, когда догоните 2020 год.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу