AUW 0.1.1b Крашит сервер

Сообщения
4
Реакции
0
Ошибка
CRASH: Sat Feb 22 11:35:05 MSK 2025

Start Line: ./hlds_linux -debug -game cstrike -master -noipx -pingboost 3 -sys_ticrate 1200 -insecure +ip 95.181.158.132 +port 27051 +map de_dust2_2x2 -maxplayers 32 +rcon_password +sv_password -pidfile hlds.1680.pid

[New LWP 29098]

[New LWP 29127]

[New LWP 29134]

[New LWP 29133]

[New LWP 29109]

[New LWP 29830]

[New LWP 29126]

[New LWP 29132]

[New LWP 29135]

[Thread debugging using libthread_db enabled]

Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Core was generated by `./hlds_linux -debug -game cstrike -master -noipx -pingboost 3 -sys_ticrate 1200'.

Program terminated with signal SIGSEGV, Segmentation fault.

#0 0x00000000 in ?? ()

[Current thread is 1 (Thread 0xf7441940 (LWP 29098))]

#0 0x00000000 in ?? ()

#1 0xf2d95f1e in get_member_s(tagAMX*, int*) () from cstrike/addons/amxmodx/modules/reapi_amxx_i386.so

#2 0xf2eb9bfa in amx_Callback () from /home/srv459466/cstrike/addons/amxmodx/dlls/amxmodx.so

#3 0x44940100 in ?? ()

#4 0x000026d0 in ?? ()

#5 0xf12f96cc in ?? ()

Backtrace stopped: previous frame inner to this frame (corrupt stack?)

No symbol table info available.

From To Syms Read Shared Object Library

0xf76d5914 0xf771bc78 Yes ./libstdc++.so.6

0xf7682a30 0xf7683921 Yes (*) /lib32/libdl.so.2

0xf76698c0 0xf7676f11 Yes /lib32/libpthread.so.0

0xf74c4800 0xf75f1f1f Yes (*) /lib32/libc.so.6

0xf745c6e0 0xf7493c8b Yes (*) /lib32/libm.so.6

0xf7768860 0xf7781f1d Yes (*) /lib/ld-linux.so.2

0xf7444e04 0xf7454490 Yes ./libgcc_s.so.1

0xf6d82120 0xf6e33c5f Yes (*) /home/srv459466/engine_i486.so

0xf6d73840 0xf6d76dfc Yes (*) /lib32/librt.so.1

0xf6d615c0 0xf6d6bd74 Yes (*) ./libsteam_api.so

0xf6d47a00 0xf6d541b8 Yes /home/srv459466/filesystem_stdio.so

0xf5e3ee80 0xf6926040 Yes (*) /rep/cs/6153/steamclient.so

0xf5cb9670 0xf5d2f020 Yes (*) /rep/cs/6153/crashhandler.so

0xf34533a0 0xf3496a90 Yes (*) /home/srv459466/./cstrike/addons/metamod/dlls/metamod.so

0xf31f14e0 0xf338ea90 Yes (*) /home/srv459466/cstrike/dlls/cs.so

0xf3065850 0xf3089550 Yes (*) /home/srv459466/cstrike/addons/reunion/dlls/reunion.so

0xf2e8ca20 0xf2eefdb7 Yes (*) /home/srv459466/cstrike/addons/amxmodx/dlls/amxmodx.so

0xf2e5ed50 0xf2e6e460 Yes (*) cstrike/addons/amxmodx/modules/cstrike_amxx_i386.so

0xf2ddb120 0xf2de1404 Yes (*) cstrike/addons/amxmodx/modules/csx_amxx_i386.so

0xf2d59a40 0xf2daa810 Yes (*) cstrike/addons/amxmodx/modules/reapi_amxx_i386.so

0xf1c9a530 0xf1cc99b4 Yes (*) /home/srv459466/cstrike/addons/hitbox_fix/dlls/hitbox_fix.so

0xf2d02300 0xf2d18cab Yes (*) /home/srv459466/cstrike/addons/rechecker/dlls/rechecker.so

0xf2bbdf70 0xf2cc2030 Yes (*) /home/srv459466/cstrike/addons/revoice/dlls/revoice.so

0xf2afd340 0xf2b1048e Yes (*) /home/srv459466/cstrike/addons/whblocker/dlls/whblocker.so

0xf2aedb90 0xf2af72f0 Yes (*) /home/srv459466/cstrike/addons/resemiclip/dlls/resemiclip.so

0xf2ac4b40 0xf2ace0b0 Yes (*) /home/srv459466/cstrike/addons/reauthcheck/dlls/reauthcheck.so

0xf2a2e010 0xf2a97d59 Yes (*) /home/srv459466/cstrike/addons/ultimate_unprecacher/dlls/ultimate_unprecacher.so

0xf2a069b0 0xf2a0aa08 Yes (*) cstrike/addons/amxmodx/modules/nvault_amxx_i386.so

0xf29f4290 0xf2a0080c Yes (*) cstrike/addons/amxmodx/modules/engine_amxx_i386.so

0xf29b49d0 0xf29e0d6c Yes (*) cstrike/addons/amxmodx/modules/fakemeta_amxx_i386.so

0xf292e5d0 0xf2977548 Yes (*) cstrike/addons/amxmodx/modules/regex_amxx_i386.so

0xf291c660 0xf2920f84 Yes (*) cstrike/addons/amxmodx/modules/fun_amxx_i386.so

0xf14ec790 0xf1584fc5 Yes (*) cstrike/addons/amxmodx/modules/mysql_amxx_i386.so

0xf28b6b60 0xf28fe624 Yes (*) cstrike/addons/amxmodx/modules/hamsandwich_amxx_i386.so

0xf11be7b0 0xf11c7a8c Yes (*) cstrike/addons/amxmodx/modules/json_amxx_i386.so

0xf0cd7000 0xf0ffd874 Yes cstrike/addons/amxmodx/modules/easy_http_amxx_i386.so

0xf0b35a50 0xf0b3b8e4 Yes (*) cstrike/addons/amxmodx/modules/geoip_amxx_i386.so

0xf0c87a80 0xf0c8d8f0 Yes (*) /lib32/libnss_files.so.2

0xe759d0c0 0xe8748d64 Yes (*) ./steamclient.so

0xf0b9a670 0xf0c10020 Yes (*) ./crashhandler.so

0xf0b84b50 0xf0b877d6 Yes (*) /lib32/libnss_dns.so.2

0xf0b6e690 0xf0b7ab94 Yes (*) /lib32/libresolv.so.2

(*): Shared library is missing debugging information.

Stack level 0, frame at 0xffa738e0:

eip = 0x0; saved eip = 0xf2d95f1e

called by frame at 0xffa73930

Arglist at 0xffa738d8, args:

Locals at 0xffa738d8, Previous frame's sp is 0xffa738e0

Saved registers:

eip at 0xffa738dc

End of crash report
ОС
Linux
Amx Mod X
AMX Mod X 1.9.0.5294 (http://www.amxmodx.org)
Authors:
David "BAILOPAN" Anderson, Pavol "PM OnoTo" Marko
Felix "SniperBeamer" Geyer, Jonny "Got His Gun" Bergstrom
Lukasz "SidLuke" Wlasinski, Christian "Basic-Master" Hammacher
Borja "faluco" Ferrer, Scott "DS" Ehlert
Compiled: Dec 3 2021 15:54:56
Built from: https://github.com/alliedmodders/amxmodx/commit/363871a
Build ID: 5294:363871a
Core mode: JIT+ASM32
Билд
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.14.0.858-dev
Build date: 21:55:21 Feb 01 2025 (3948)
Build from: https://github.com/Giferns/ReHLDS/commit/0c2decc
ReGamedll
ReGameDLL version: 5.26.0.668-dev
Build date: 19:02:48 Dec 31 2023
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/d3c0ec8
Версия Metamod
Metamod-r v1.3.0.131, API (5:13)
Metamod-r build: 18:51:02 Jul 11 2022
Metamod-r from: https://github.com/theAsmodai/metamod-r/commit/adc9414
Список метамодулей
Currently loaded plugins:
description stat pend file vers src load unload
[ 1] Reunion RUN - reunion.so v0.1.0.137 ini Start Never
[ 2] AMX Mod X RUN - amxmodx.so v1.9.0.5294 ini Start ANY
[ 3] HitBox Fix RUN - hitbox_fix.so v1.1.2 ini Start ANY
[ 4] Rechecker RUN - rechecker.so v2.7 ini ANY
[ 5] Revoice RUN - revoice.so v0.1.0.34 ini Start Never
[ 6] WHBlocker RUN - whblocker.so v1.5.697 ini ANY
[ 7] ReSemiclip RUN - resemiclip.so v2.3.9 ini ANY
[ 8] ReAuthCheck RUN - reauthcheck.so v0.1.6 ini Start Never
[ 9] Ultimate Unprecacher RUN - ultimate_unprecacher.so vBeta 2.5.3 ini Chlvl Chlvl
[10] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[11] CSX RUN - csx_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[12] ReAPI RUN - reapi_amxx_i386.so v5.24.0.300-dev pl2 ANY Never
[13] Engine RUN - engine_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[14] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[15] Fun RUN - fun_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[16] MySQL RUN - mysql_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[17] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[18] Amxx Easy Http RUN - easy_http_amxx_i386.so v1.3.0 pl2 ANY ANY
[19] GeoIP RUN - geoip_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
19 plugins, 19 running
Список плагинов
Currently loaded plugins:
name version author file status
[ 1] New Kick Menu 1.5.0 Radius newkickmenu.amx running
[ 2] Plugins Core 1.3.0 Radius plugins_core.am running
[ 3] Advanced Gag 1.4.2 neygomon amx_gag.amxx running
[ 4] CSStatsX SQL 0.7.4+2 serfreeman1337 aes_csstatsx_sq running
[ 5] Admin Loader 3.5 neygomon admin_loader.am running
[ 6] FreshBans 1.4.8b kanagava fresh_bans.amxx running
[ 7] Admin Chat 1.9.0.5294 AMXX Dev Team adminchat.amxx running
[ 8] Admin Commands 1.9.0.5294 AMXX Dev Team admincmd.amxx running
[ 9] Commands Menu 1.9.0.5294 AMXX Dev Team cmdmenu.amxx running
[ 10] Info. Messages 1.9.0.5294 AMXX Dev Team imessage.amxx running
[ 11] Menus Front-End 1.9.0.5294 AMXX Dev Team menufront.amxx running
[ 12] NextMap 1.9.0.5294 AMXX Dev Team nextmap.amxx running
[ 13] Players Menu 1.9.0.5294 AMXX Dev Team plmenu.amxx running
[ 14] Plugin Menu 1.9.0.5294 AMXX Dev Team pluginmenu.amxx running
[ 15] Restrict Weapons 1.9.0.5294 AMXX Dev Team restmenu.amxx running
[ 16] TimeLeft 1.9.0.5294 AMXX Dev Team timeleft.amxx running
[ 17] Scrolling Message 1.9.0.5294 AMXX Dev Team scrollmsg.amxx running
[ 18] Admin Votes 1.9.0.5294 AMXX Dev Team adminvote.amxx running
[ 19] CS Misc. Stats 1.9.0.5294 AMXX Dev Team miscstats.amxx running
[ 20] CS Stats Logging 1.9.0.5294 AMXX Dev Team stats_logging.a running
[ 21] Stats Configuration 1.9.0.5294 AMXX Dev Team statscfg.amxx running
[ 22] Autoresponder/Advertis 0.5 MaximusBrood ad_manager.amxx running
[ 23] Block grande info 1.0 neygomon block_granade_i running
[ 24] Knife Duel 1.0 Alka knife_duel.amxx running
[ 25] MenuGen 1.0 CrAsH menugen.amxx running
[ 26] Lite Translit 2.8 neygomon lite_translit_a running
[ 27] Change Game Name 1.2 ReHLDS Team change_game_nam running
[ 28] AuraDamage 3.0 Asd' auradamage.amxx running
[ 29] Best Damage 0.0.4 Vaqtincha best_damage.amx running
[ 30] Parachute for ALL [ReA 3.0 Leo_[BH] parachute_for_a running
[ 31] Death Sprite Effect 1.5 RaZzoR death_sprite_ef running
[ 32] Flashbang Dynamic Ligh 0.10 Avalanche flashbang_dynam running
[ 33] Kill Console Block 0.0.0.1 x kill_console_bl running
[ 34] Short Nade 1.0 Grzyboo short_nade.amxx running
[ 35] Silent Knife and Grena 0.0.1 Albertio silent_knife_an running
[ 36] Mode 2x2 2.5re s1lent mode_2x2.amxx running
[ 37] Bomb HUD Timer 0.2 Twe3k bomb_hud_timer. running
[ 38] HudTextArgs Blocker 1.1 joaquimandrade hudtextargs_blo running
[ 39] Nice Team Score 1.0 Fixed sector nice_team_score running
[ 40] Multi-Lingual System 1.9.0.5235 AMXX Dev Team multilingual.am running
[ 41] Admin Warn v0.1 fifayer admin_warn.amxx running
[ 42] [ReAPI] Custom Models 1.6.1 neugomon custom_models.a running
[ 43] [190] DemoRecorder RBS 20.06.06 SKAJIbnEJIb demorecorder_rb running
[ 44] Admins are VIP's + gre 1.0 Eg@r4$il{ admin_vgk.amxx running
[ 45] fb_forwards 0.1.4 Kanagava & Realu fb_forwards.amx running
[ 46] Give ADMIN 1.1 Xander give_admin.amxx running
[ 47] Admin Check 1.51 OneEyed admin_check.amx running
[ 48] Crosshair Menu 1.2.5 KriTo & PurposeL crosshair_menu. running
[ 49] Injector X 1.0 Deadly|Darkness injector.amxx running
[ 50] Killa HP 1.6 jas0n killa_hp.amxx running
[ 51] Private Message 0.6 Denzer private_message running
[ 52] [190] SlayLosers RBS 20.06.06 SKAJIbnEJIb & d3 slaylosers_rbs. running
[ 53] Damager Advanced 1.2.0 Radius (based on damager_advance running
[ 54] Sprite Letters 1.3.0 ArKaNeMaN sprite_letters. running
[ 55] Free BPammo Weapons 0.0.1 Vaqtincha free_bpammo_wea running
[ 56] Weapon Menu 1.0 Mattcook & xerob weaponmenu_ru_n running
[ 57] Amx DHUD Mes 1.0 cAh amx_dhud_mes.am running
[ 58] Telegram Reports Sende 3.0.1 @pywave & Albert telegram_report running
[ 59] ConnectDisconnect 1.0 DzuNiK connectdisconne running
[ 60] Pause Plugins 1.9.0.5235 AMXX Dev Team pausecfg.amxx running
[ 61] Vampire 1.0c Shalfey vampire.amxx running
[ 62] Amx Change Name 1.0 neygomon amx_change_name running
[ 63] Recoil Control 1.5 OT recoil_control. running
[ 64] Lite VoteBan 1.4fix neygomon lite_voteban.am running
[ 65] Maps Menu 1.9.0.5235 AMXX Dev Team mapsmenu.amxx running
[ 66] VIP Test 0.3 pro100web vip_test.amxx running
[ 67] Team Select 1.6.0 F@nt0M team_select.amx running
[ 68] Killer ScreenFade 0.0.5 Vaqtincha killer_screenfa running
[ 69] Fake Ping 1.1 MeRcyLeZZ/gyxoBk fake_ping.amxx running
[ 70] Spectator Bot 1.2.2(bata b0t. lite_spectator_ running
[ 71] Lite AwpLimit 1.07 neygomon lite_awplimit.a running
[ 72] Team Grenade Trail 1.2 Numb team_grenade_tr running
[ 73] SF MultiJump 0.2 serfreeman1337 sf_multijump.am running
[ 74] Say me and Say hp 1.4 neygomon say_me_and_say_ running
[ 75] [reAPI] Flash Control 1.1 neugomon flash_control.a running
[ 76] ResetScore 1.1 Silenttt resetscore.amxx running
[ 77] AES Bonus: Flags 0.1 Sonyx aes_bonus_flags running
[ 78] [GRENADE] Molotov 1.0.2 medusa grenade_molotov running
[ 79] Server Menu 1.0 mx?! server_menu.amx running
[ 80] VIP Custom Weapons 1.0 Vaqtincha vip_custom_weap running
[ 81] Autoprecache Sound Mod 1.0 MayroN autoprecache_so running
[ 82] roundsound 0.1 many end_round_sound running
[ 83] Admin New Menu 1.0 Cs-StrikeS.Moy.S admin_new_menu. running
[ 84] Hud Helper 1.0 gyxoBka hud_helper.amxx running
[ 85] AWP Restrictions 1.6.0 Radius awp_restriction running
[ 86] Weapon Lights 0.6 HiSS & Arkshine weapon_lights.a running
[ 87] [GeoIP] Connect Info 1.0.0 Nordic Warrior geoip_connect_i running
[ 88] HK416 1.0 DRUID hk416.amxx running
[ 89] Quick Defuse Bomb 0.0.2 Albertio quick_defuse_bo running
[ 90] Revive Teammates: Core 2.3.17 DEV-CS.RU Commun revive_teammate running
[ 91] Camera Changer 1.3 Bl0ck camera_changer. running
[ 92] Advanced MapChooser 1.4 neygomon advanced_mapcho running
[ 93] AFK Completed 1.0 m1c afkc.amxx running
[ 94] Block Change Name 1.0 DJ_WEST block_change_na running
[ 95] Smoke FIX 0.1 many smoke_fix.amxx running
[ 96] AMXX Piss 2.0 KRoTaL piss.amxx running
[ 97] Advanced Ultimate Weap 0.1.1b steelzzz advanced_ultima paused
[ 98] Easy MultiJump 1.6 twistedeuphoria/ easy_multijump. running
[ 99] Realistic Smoke 0.4 6u3oH realistic_smoke running
[100] Admin Weapon Skins 1.0 mforce admin_weapon_sk running
[101] Bomb Taker 0.0.1b Vaqtincha bomb_taker.amxx running
[102] Advanced Experience Sy 0.5.9 [REA serfreeman1337/s aes_main.amxx running
[103] AES: StatsX 0.5.9 [REA serfreeman1337/s aes_statsx.amxx running
[104] AES: CStrike Addon 0.5.9 [REA serfreeman1337/s aes_exp_cstrike running
[105] AES: Informer 0.5.9 [REA serfreeman1337/s aes_informer.am running
[106] AES: Admin Tools 0.5.9 [REA serfreeman1337/s aes_exp_editor. running
[107] AES: Bonus System 0.5 Vega serfreeman1337 aes_bonus_syste running
[108] AES: Bonus CSTRIKE 0.5.9.1 [R serfreeman1337/s aes_bonus_cstri running
[109] Revive Teammates: Plan 2.3.17 DEV-CS.RU Commun rt_planting.amx running
[110] Revive Teammates: Rest 2.3.17 DEV-CS.RU Commun rt_restrictions running
[111] Revive Teammates: Time 2.3.17 DEV-CS.RU Commun rt_timer.amxx running
[112] Revive Teammates: Effe 2.3.17 DEV-CS.RU Commun rt_effects.amxx running
[113] Revive Teammates: Soun 2.3.17 DEV-CS.RU Commun rt_sounds.amxx running
[114] Revive Teammates: Bonu 2.3.17 DEV-CS.RU Commun rt_bonus.amxx running
[115] Revive Teammates: Mode 2.3.17 mx?! rt_revive_model running
[116] V.I.P Custom KNIFE 1.0.0 Vaqtincha custom_knife.am debug
[117] V.I.P Custom DEAGLE 1.0.0 Vaqtincha custom_deagle.a debug
[118] V.I.P Custom M4A1 1.0.0 Vaqtincha custom_m4a1.amx debug
[119] V.I.P Custom AK-47 1.0.0 Vaqtincha custom_ak47.amx debug
[120] V.I.P Custom AWP 1.0.0 Vaqtincha custom_awp.amxx debug
[121] Block Pickup Gold 0.1 Vaqtincha blockpickupgold running
[122] [SprLett] Editor 1.3.0 ArKaNeMaN SprLett-Editor. running
[123] [SprLett] Saver 1.3.0 ArKaNeMaN SprLett-Saver.a running
123 plugins, 122 running
Автор плагина
steelzzz
Версия плагина
0.1.1b
Исходный код
#include <amxmodx>
#include <amxmisc>
#include <reapi>
#include <fakemeta>
#include <hamsandwich>

#include <auw>

new const PLUGIN_NAME[] = "Advanced Ultimate Weapons";
new const PLUGIN_VERSION[] = "0.1.1b";

enum _:eCvarsData
{
FLAG_ACCESS[5],
MENU_ACCESS_TYPE,
DISCOUNT,
Float: BUYTIME,
MENU_ROUND,
BUYZONE,
MENU_DAMAGE,
CMD_ACCESS[5],
GIVE_TYPE,
PICKUP_ACCESS_TYPE,
TRACE_TYPE
}; new g_pCvar[eCvarsData];

enum eHamHooks
{
HamHook: TRACEATTACK[5],
HamHook: TOUCH
}; new g_pHamHooks[eHamHooks];

enum eReapiHooks
{
HookChain: DEPLOY,
HookChain: SETMODEL,
}; new g_pReapiHooks[eReapiHooks];

#define var_weaponkey var_iuser4
#define var_modelview var_noise1
#define var_modelplayer var_noise2
#define var_modelworld var_message
#define var_weapontrace var_iuser2
#define var_weaponflags var_iuser1

#define getWeaponKey(%0) get_entvar(%0, var_weaponkey)
#define getWeaponModelView(%0,%1,%2) get_entvar(%0, var_modelview, %1, %2)
#define getWeaponModelPlayer(%0,%1,%2) get_entvar(%0, var_modelplayer, %1, %2)
#define getWeaponModelWorld(%0,%1,%2) get_entvar(%0, var_modelworld, %1, %2)
#define getWeaponTrace(%0) get_entvar(%0, var_weapontrace)
#define getWeaponFlags(%0) get_entvar(%0, var_weaponflags)

#define setWeaponKey(%0,%1) set_entvar(%0, var_iuser4, %1)
#define setWeaponModelView(%0,%1) set_entvar(%0, var_modelview, %1)
#define setWeaponModelPlayer(%0,%1) set_entvar(%0, var_modelplayer, %1)
#define setWeaponModelWorld(%0,%1) set_entvar(%0, var_modelworld, %1)
#define setWeaponTrace(%0,%1) set_entvar(%0, var_weapontrace, %1)
#define setWeaponFlags(%0,%1) set_entvar(%0, var_weaponflags, %1)

#define IsComment(%0) (%0[0] == EOS || %0[0] == 10 || %0[0] == 13 || %0[0] == ';' || %0[0] == '#' || (%0[0] == '/' && %0[1] == '/'))
#define rg_get_user_money(%0) get_member(%0, m_iAccount)
#define MAXWEAPONS 128

#define IsPlayer(%1) bool:(%1 && %1 <= MAX_PLAYERS)
#define get_bit(%1,%2) (%1 & (1 << (%2 & 31)))
#define set_bit(%1,%2) (%1 |= (1 << (%2 & 31)))
#define reset_bit(%1,%2) (%1 &= ~(1 << (%2 & 31)))

new g_bClientConnected;
new Array: g_aWeaponData;
new Trie: g_tWeaponClcmd;
new g_iWeaponsCount;
new g_iLaserBeam;
new g_pCvarBuyTime;
new g_iClcmdIndex[MAXWEAPONS];
new Float: g_flTouchTime[MAX_PLAYERS + 1];
new const sFile[] = "ultimate_weapons.ini";

new g_iForwards[eAUWForwards];

public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, "steelzzz");

register_clcmd("say /ultimate", "Command_ShowUltimateMenu");
register_clcmd("buyultimate", "Command_ShowUltimateMenu");
register_concmd("weapons_give", "Command_GiveWeapon");

g_pHamHooks[TRACEATTACK][0] = RegisterHam(Ham_TraceAttack, "player", "CWeapon_TraceAttack_Post", .Post = true);
g_pHamHooks[TRACEATTACK][1] = RegisterHam(Ham_TraceAttack, "info_target", "CWeapon_TraceAttack_Post", .Post = true);
g_pHamHooks[TRACEATTACK][2] = RegisterHam(Ham_TraceAttack, "func_breakable", "CWeapon_TraceAttack_Post", .Post = true);
g_pHamHooks[TRACEATTACK][3] = RegisterHam(Ham_TraceAttack, "hostage_entity", "CWeapon_TraceAttack_Post", .Post = true);
g_pHamHooks[TRACEATTACK][4] = RegisterHam(Ham_TraceAttack, "worldspawn", "CWeapon_TraceAttack_Post", .Post = true);
g_pHamHooks[TOUCH] = RegisterHam(Ham_Touch, "weaponbox", "CWeapon_Touch_Pre", .Post = false);

g_pReapiHooks[DEPLOY] = RegisterHookChain(RG_CBasePlayerWeapon_DefaultDeploy, "CWeapon_DefaultDeploy_Pre", .post = false);
g_pReapiHooks[SETMODEL] = RegisterHookChain(RG_CWeaponBox_SetModel, "CWeapon_SetModel_Pre", .post = false);

stateHooks(true);

register_dictionary("auw.txt");

g_iForwards[eAUWForwards_OnGiveItemPre] = CreateMultiForward("auw_on_give_item_pre", ET_CONTINUE, FP_CELL, FP_CELL, FP_CELL, FP_CELL);
}

public plugin_cfg()
{
register_cvar("auw_version", PLUGIN_VERSION, FCVAR_SERVER | FCVAR_SPONLY);

bind_pcvar_string(create_cvar("weapons_flag", "t", .description = fmt("%L", LANG_SERVER, "CVAR_WEAPONS_FLAG")), g_pCvar[FLAG_ACCESS], sizeof(g_pCvar[FLAG_ACCESS]));
bind_pcvar_num(create_cvar("weapons_access", "2", .description = fmt("%L", LANG_SERVER, "CVAR_WEAPONS_ACCESS"), .has_min = true, .min_val = 0.0, .has_max = true, .max_val = 2.0), g_pCvar[MENU_ACCESS_TYPE]);
bind_pcvar_num(create_cvar("weapons_disc", "30", .description = fmt("%L", LANG_SERVER, "CVAR_WEAPONS_DISC"), .has_min = true, .min_val = 0.0, .has_max = true, .max_val = 100.0), g_pCvar[DISCOUNT]);
bind_pcvar_float(create_cvar("weapons_time", "2.0", .description = fmt("%L", LANG_SERVER, "CVAR_WEAPONS_TIME"), .has_min = true, .min_val = 0.0), g_pCvar[BUYTIME]);
bind_pcvar_num(create_cvar("weapons_firstround", "3", .description = fmt("%L", LANG_SERVER, "CVAR_WEAPONS_FIRSTROUND"), .has_min = true, .min_val = 0.0), g_pCvar[MENU_ROUND]);
bind_pcvar_num(create_cvar("weapons_zone", "1", .description = fmt("%L", LANG_SERVER, "CVAR_WEAPONS_ZONE"), .has_min = true, .min_val = 0.0, .has_max = true, .max_val = 1.0), g_pCvar[BUYZONE]);
bind_pcvar_num(create_cvar("weapons_menu_dmg", "0", .description = fmt("%L", LANG_SERVER, "CVAR_WEAPONS_MENU_DMG"), .has_min = true, .min_val = 0.0, .has_max = true, .max_val = 1.0), g_pCvar[MENU_DAMAGE]);
bind_pcvar_string(create_cvar("weapons_cmd_access", "t", .description = fmt("%L", LANG_SERVER, "CVAR_WEAPONS_CMD_ACCESS")), g_pCvar[CMD_ACCESS], sizeof(g_pCvar[CMD_ACCESS]));
bind_pcvar_num(create_cvar("weapons_give_type", "2", .description = fmt("%L", LANG_SERVER, "CVAR_WEAPONS_GIVE_TYPE"), .has_min = true, .min_val = 0.0, .has_max = true, .max_val = 2.0), g_pCvar[GIVE_TYPE]);
bind_pcvar_num(create_cvar("weapons_pickup_access_type", "0", .description = fmt("%L", LANG_SERVER, "CVAR_WEAPONS_TOUCH"), .has_min = true, .min_val = 0.0, .has_max = true, .max_val = 1.0), g_pCvar[PICKUP_ACCESS_TYPE]);
bind_pcvar_num(create_cvar("weapons_trace_type", "0", .description = fmt("%L", LANG_SERVER, "CVAR_WEAPONS_TRACE_TYPE"), .has_min = true, .min_val = 0.0, .has_max = true, .max_val = 1.0), g_pCvar[TRACE_TYPE]);

g_pCvarBuyTime = get_cvar_pointer("mp_buytime");

AutoExecConfig(true, "auw");
}

public plugin_natives()
{
register_native(__auw__native_str__get_weapon_uid, "Native_GetWeaponUid", false);
register_native(__auw__native_str__give_weapon, "Native_GiveWeapon", false);
register_native(__auw__native_str__valid_weapon, "Native_ValidWeapon", false);
register_native(__auw__native_str__get_weapons_data, "Native_GetWeaponsData", false);
}

public Native_GetWeaponUid(iPlugin, iParams)
{
enum { arg_buyname = 1, arg_is_uid_with_offset };

new sWeaponName[32];
get_string(arg_buyname, sWeaponName, charsmax(sWeaponName));

new iWeaponId;

if(!TrieGetCell(g_tWeaponClcmd, sWeaponName, iWeaponId))
{
return -1;
}

if(!get_param(arg_is_uid_with_offset))
{
return iWeaponId;
}

return iWeaponId + AUW_IMPULSE_OFFSET;
}

public Native_GiveWeapon(iPlugin, iParams)
{
enum { arg_player = 1, arg_weaponname, arg_show_notification, arg_uid, arg_is_uid_with_offset, arg_buy };

static forceCheckUid; forceCheckUid = false;

new iPlayer = get_param(arg_player);

if(!is_user_connected(iPlayer))
{
return false;
}

new sWeaponName[32];
get_string(arg_weaponname, sWeaponName, charsmax(sWeaponName));

new iWeaponId;
new uId = get_param(arg_uid);

if(uId != -1)
{
forceCheckUid = true;
if(get_param(arg_is_uid_with_offset))
{
uId -= AUW_IMPULSE_OFFSET;
}
}

if(!forceCheckUid)
{
if(!TrieGetCell(g_tWeaponClcmd, sWeaponName, iWeaponId))
{
return false;
}
}
else
{
if(uId < 0 || uId >= ArraySize(g_aWeaponData))
{
return false;
}
iWeaponId = uId;
}

new bool: notification = true;

notification = bool: get_param(arg_show_notification);

new iBuy = get_param(arg_buy);

return giveItem(iPlayer, iWeaponId, iBuy ? 1 : 0, eAUWGiveItemTypes_Native, notification);
}

public Native_ValidWeapon(iPlugin, iParams)
{
enum { arg_item = 1, arg_uid, arg_is_uid_with_offset };

new iItem = get_param(arg_item);

if(is_nullent(iItem))
{
return false;
}

new iKey = get_param(arg_uid);

if(!get_param(arg_is_uid_with_offset))
{
iKey += AUW_IMPULSE_OFFSET;
}

return bool:(IsCustomWeapon(iItem, iKey));
}

public Native_GetWeaponsData(iPlugin, iParams)
{
enum { arg_uid = 1, arg_array, arg_is_uid_with_offset };

new iKey = get_param(arg_uid);

if(get_param(arg_is_uid_with_offset))
{
iKey -= AUW_IMPULSE_OFFSET;
}

if(!(0 <= iKey < g_iWeaponsCount))
{
return false;
}

new aData[eAUWData];
ArrayGetArray(g_aWeaponData, iKey, aData);

return set_array(arg_array, aData, eAUWData);
}

public client_putinserver(iPlayer)
{
if(is_user_hltv(iPlayer) || is_user_bot(iPlayer))
{
return;
}

set_bit(g_bClientConnected, iPlayer);
}

public client_disconnected(iPlayer)
{
reset_bit(g_bClientConnected, iPlayer);
g_flTouchTime[iPlayer] = 0.0;
}

getClcmdIndex(iIndex)
{
for(new i = 0; i < MAXWEAPONS; i++)
{
if(iIndex == g_iClcmdIndex[i])
{
return i;
}
}

return NULLENT;
}

public Command_GiveWeapon_EX(iPlayer, iAccess, iIndex)
{
new iWeaponId = getClcmdIndex(iIndex);

if(iWeaponId == NULLENT)
{
return PLUGIN_HANDLED;
}

if(g_pCvar[FLAG_ACCESS] && !(get_user_flags(iPlayer) & read_flags(g_pCvar[CMD_ACCESS])))
{
console_print(iPlayer, "%L", iPlayer, "CONSOLE_NO_ACCESS");
return PLUGIN_HANDLED;
}

giveItem(iPlayer, iWeaponId, 1, eAUWGiveItemTypes_PlayerCmd);

return PLUGIN_HANDLED;
}

public Command_GiveWeapon(iPlayer)
{
if(iPlayer != 0)
{
if(!IsPlayer(iPlayer) || !get_bit(g_bClientConnected, iPlayer))
{
return PLUGIN_HANDLED;
}

if(g_pCvar[FLAG_ACCESS] && !(get_user_flags(iPlayer) & read_flags(g_pCvar[CMD_ACCESS])))
{
console_print(iPlayer, "%L", iPlayer, "CONSOLE_NO_ACCESS");
return PLUGIN_HANDLED;
}
}

new sTarget[64];
new sArg[64];

read_argv(1, sTarget, charsmax(sTarget));
trim(sTarget);
remove_quotes(sTarget);

read_argv(2, sArg, charsmax(sArg));
trim(sArg);
remove_quotes(sArg);

if(sArg[0] == EOS || sTarget[0] == EOS)
{
console_print(iPlayer, "%L", iPlayer, "CONSOLE_USAGE");
return PLUGIN_HANDLED;
}

new iFindPlayer = cmd_target(iPlayer, sTarget, CMDTARGET_ALLOW_SELF)

if(!iFindPlayer)
{
return PLUGIN_HANDLED;
}

if(!get_bit(g_bClientConnected, iFindPlayer))
{
return PLUGIN_HANDLED;
}

new iWeaponId;

if(!TrieGetCell(g_tWeaponClcmd, sArg, iWeaponId))
{
console_print(iPlayer, "%L", iPlayer, "CONSOLE_WEAPONS_NOTFOUND");
return PLUGIN_HANDLED;
}

new aData[eAUWData];

ArrayGetArray(g_aWeaponData, iWeaponId, aData);

if(aData[eAUWData_MENU_WEAPON_ADD] == 0)
{
return PLUGIN_HANDLED;
}

giveItem(iFindPlayer, iWeaponId, 0, eAUWGiveItemTypes_AdminCmd);

return PLUGIN_HANDLED;
}

giveItem(iPlayer, iKey, iBuy, eAUWGiveItemTypes: eGiveItemType, bool: bChatNotification = true)
{
static ret;
ExecuteForward(g_iForwards[eAUWForwards_OnGiveItemPre], ret, eGiveItemType, iPlayer, iKey, iBuy);

if(ret)
{
return 0;
}

new aData[eAUWData];
new iCost;

static iMoney; iMoney = rg_get_user_money(iPlayer);

ArrayGetArray(g_aWeaponData, iKey, aData);

if(iBuy)
{
if(aData[eAUWData_WEAPON_ACCESS_FLAGS] && !(get_user_flags(iPlayer) & aData[eAUWData_WEAPON_ACCESS_FLAGS]))
{
client_print_color(iPlayer, print_team_default, "%L", iPlayer, "CHAT_NO_ACCESS");
return 0;
}

if(get_member_game(m_iTotalRoundsPlayed) + 1 < aData[eAUWData_WEAPON_ALLOW_ROUND])
{
client_print_color(iPlayer, print_team_default, "%L", iPlayer, "CHAT_ROUNDS", aData[eAUWData_WEAPON_ALLOW_ROUND]);
return 0;
}

new Float: flBuyTime = (get_pcvar_float(g_pCvarBuyTime) * 60) * g_pCvar[BUYTIME];

if(get_gametime() - Float: get_member_game(m_fRoundStartTime) > flBuyTime)
{
client_print(iPlayer, print_center, "%L", iPlayer, "CENTER_BUYTIME", floatround(flBuyTime));
return 0;
}

if(g_pCvar[BUYZONE])
{
if(!rg_get_user_buyzone(iPlayer))
{
client_print(iPlayer, print_center, "%L", iPlayer, "CENTER_NOT_IN_BUYZONE");
return 0;
}
}

if(aData[eAUWData_WEAPON_COST] > 0)
{
iCost = (g_pCvar[DISCOUNT] > 0) ? aData[eAUWData_WEAPON_COST] - getPercentNum(aData[eAUWData_WEAPON_COST], g_pCvar[DISCOUNT]) : aData[eAUWData_WEAPON_COST];

if(iMoney < iCost)
{
client_print_color(iPlayer, print_team_default, "%L", iPlayer, "РЎHAT_NO_MONEY");
return 0;
}
}
}

new iWeapon = rg_create_entity(aData[eAUWData_WEAPON_REFERENCE]);

if(is_nullent(iWeapon))
{
return 0;
}

new Float: vecOrigin[3];

get_entvar(iPlayer, var_origin, vecOrigin);
set_entvar(iWeapon, var_origin, vecOrigin);
set_entvar(iWeapon, var_impulse, iKey + AUW_IMPULSE_OFFSET);
setWeaponKey(iWeapon, iKey + AUW_IMPULSE_OFFSET);
setWeaponModelView(iWeapon, aData[eAUWData_WEAPON_MODEL_VIEW]);
setWeaponModelPlayer(iWeapon, aData[eAUWData_WEAPON_MODEL_PLAYER]);
setWeaponModelWorld(iWeapon, aData[eAUWData_WEAPON_MODEL_WORLD]);
setWeaponTrace(iWeapon, aData[eAUWData_WEAPON_TRACE]);
setWeaponFlags(iWeapon, aData[eAUWData_WEAPON_ACCESS_FLAGS]);
set_entvar(iWeapon, var_spawnflags, SF_NORESPAWN);
dllfunc(DLLFunc_Spawn, iWeapon);

if(!aData[eAUWData_WEAPON_SLOT])
{
switch(rg_get_iteminfo(iWeapon, ItemInfo_iSlot))
{
case 0:
{
aData[eAUWData_WEAPON_SLOT] = PRIMARY_WEAPON_SLOT;
}
case 1:
{
aData[eAUWData_WEAPON_SLOT] = PISTOL_SLOT;
}
}

ArraySetArray(g_aWeaponData, iKey, aData);
}

if(aData[eAUWData_WEAPON_ID] != WEAPON_KNIFE)
{
dropWeapons(iPlayer, aData[eAUWData_WEAPON_SLOT]);
}
else
{
rg_remove_item(iPlayer, "weapon_knife");
}

dllfunc(DLLFunc_Touch, iWeapon, iPlayer);

static iOwner; iOwner = get_entvar(iWeapon, var_owner);

if(iOwner != iPlayer || is_nullent(iOwner))
{
if(!is_nullent(iWeapon))
{
engfunc(EngFunc_RemoveEntity, iWeapon);
}
return 0;
}

switch(aData[eAUWData_WEAPON_ID])
{
case WEAPON_KNIFE:
{
set_member(iWeapon, m_Knife_flStabBaseDamage, Float: get_member(iWeapon, m_Knife_flStabBaseDamage) * aData[eAUWData_WEAPON_DAMAGE]);
set_member(iWeapon, m_Knife_flSwingBaseDamage, Float: get_member(iWeapon, m_Knife_flSwingBaseDamage) * aData[eAUWData_WEAPON_DAMAGE]);
set_member(iWeapon, m_Knife_flSwingBaseDamage_Fast, Float: get_member(iWeapon, m_Knife_flSwingBaseDamage_Fast) * aData[eAUWData_WEAPON_DAMAGE]);
}
case WEAPON_M4A1:
{
set_member(iWeapon, m_M4A1_flBaseDamageSil, Float: get_member(iWeapon, m_M4A1_flBaseDamageSil) * aData[eAUWData_WEAPON_DAMAGE]);
}
case WEAPON_USP:
{
set_member(iWeapon, m_USP_flBaseDamageSil, Float: get_member(iWeapon, m_USP_flBaseDamageSil) * aData[eAUWData_WEAPON_DAMAGE]);
}
case WEAPON_FAMAS:
{
set_member(iWeapon, m_Famas_flBaseDamageBurst, Float: get_member(iWeapon, m_Famas_flBaseDamageBurst) * aData[eAUWData_WEAPON_DAMAGE]);
}
}

set_member(iWeapon, m_Weapon_flBaseDamage, Float: get_member(iWeapon, m_Weapon_flBaseDamage) * aData[eAUWData_WEAPON_DAMAGE]);

if(aData[eAUWData_WEAPON_ID] != WEAPON_KNIFE)
{
rg_set_user_ammo(iPlayer, aData[eAUWData_WEAPON_ID], aData[eAUWData_WEAPON_AMMO]);
rg_set_user_bpammo(iPlayer, aData[eAUWData_WEAPON_ID], aData[eAUWData_WEAPON_BPAMMO]);
rg_set_iteminfo(iWeapon, ItemInfo_iMaxClip, aData[eAUWData_WEAPON_AMMO]);
rg_set_iteminfo(iWeapon, ItemInfo_iMaxAmmo1, aData[eAUWData_WEAPON_BPAMMO]);
}

if(iBuy)
{
rg_add_account(iPlayer, iMoney - iCost, AS_SET);
if(bChatNotification)
{
client_print_color(iPlayer, print_team_default, "%L", iPlayer, "CHAT_WEAPON_BUY", aData[eAUWData_MENU_NAME_ITEM]);
}
}
else
{
if(bChatNotification)
{
client_print_color(iPlayer, print_team_default, "%L", iPlayer, "CHAT_WEAPON_GET", aData[eAUWData_MENU_NAME_ITEM]);
}
}
return 1;
}

public CWeapon_Touch_Pre(iEntity, iPlayer)
{
if(!g_pCvar[PICKUP_ACCESS_TYPE])
{
return HAM_IGNORED;
}

if(is_nullent(iEntity))
{
return HAM_IGNORED;
}

if(!IsPlayer(iPlayer) || !get_bit(g_bClientConnected, iPlayer))
{
return HAM_IGNORED;
}

if(IsCustomWeapon(iEntity, get_entvar(iEntity, var_impulse)))
{
if(getWeaponFlags(iEntity) && !(get_user_flags(iPlayer) & getWeaponFlags(iEntity)))
{
if(g_flTouchTime[iPlayer] > get_gametime())
{
return HAM_SUPERCEDE;
}

client_print(iPlayer, print_center, "%L", iPlayer, "CENTER_NO_ACCESS");
g_flTouchTime[iPlayer] = get_gametime() + 3.0;
return HAM_SUPERCEDE;
}
}

return HAM_IGNORED;
}

public CWeapon_DefaultDeploy_Pre(iItem, sViewModel[], sWeaponModel[], iAnim, sAnimExt[], iSkipLocal)
{
if(is_nullent(iItem))
{
return HC_CONTINUE;
}

if(IsCustomWeapon(iItem, getWeaponKey(iItem)))
{
static sView[64], sPlayer[64];

getWeaponModelView(iItem, sView, sizeof(sView));
getWeaponModelPlayer(iItem, sPlayer, sizeof(sPlayer));
SetHookChainArg(2, ATYPE_STRING, sView);
SetHookChainArg(3, ATYPE_STRING, sPlayer);
}

return HC_CONTINUE;
}

public CWeapon_SetModel_Pre(iEntity, sModel[])
{
if(is_nullent(iEntity))
{
return HC_CONTINUE;
}

new iWeapon = GetWeaponBox(iEntity);

if(is_nullent(iWeapon))
{
return HC_CONTINUE;
}

if(IsCustomWeapon(iWeapon, getWeaponKey(iWeapon)))
{
static sViewModel[64];
getWeaponModelWorld(iWeapon, sViewModel, sizeof(sViewModel));

if(sViewModel[0])
{
SetHookChainArg(2, ATYPE_STRING, sViewModel);
}

setWeaponFlags(iEntity, getWeaponFlags(iWeapon));
set_entvar(iEntity, var_impulse, getWeaponKey(iWeapon));
}

return HC_CONTINUE;
}

GetWeaponBox(iEntity)
{
for(new i = 0, iWeapon; i < MAX_ITEM_TYPES; i++)
{
iWeapon = get_member(iEntity, m_WeaponBox_rgpPlayerItems, i);

if(!is_nullent(iWeapon))
{
return iWeapon;
}
}

return NULLENT;
}

public CWeapon_TraceAttack_Post(iVictim, iAttacker, Float: flDamage, Float: vecDirection[3], iTrace, iBitsDamage)
{
if(iBitsDamage & DMG_GRENADE)
{
return;
}

if(!IsPlayer(iVictim) || !get_bit(g_bClientConnected, iVictim))
{
return;
}

if(!IsPlayer(iAttacker) || !get_bit(g_bClientConnected, iAttacker))
{
return;
}

static iInflictor; iInflictor = get_member(iVictim, var_dmg_inflictor);

if(iAttacker != iInflictor)
{
return;
}

static iItem; iItem = get_member(iAttacker, m_pActiveItem);

if(is_nullent(iItem))
{
return;
}

new WeaponIdType: iId; iId = get_member(iItem, m_iId);

if(iId == WEAPON_KNIFE)
{
return;
}

if(!IsCustomWeapon(iItem, getWeaponKey(iItem)))
{
return;
}

new Float: vecEndPos[3];
get_tr2(iTrace, TR_vecEndPos, vecEndPos);

if(!getWeaponTrace(iItem))
{
return;
}

if(g_pCvar[TRACE_TYPE])
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_BEAMENTPOINT);
write_short(iAttacker | 0x1000);
engfunc(EngFunc_WriteCoord, vecEndPos[0]);
engfunc(EngFunc_WriteCoord, vecEndPos[1]);
engfunc(EngFunc_WriteCoord, vecEndPos[2]);
write_short(g_iLaserBeam);
write_byte(0);
write_byte(0);
write_byte(1);
write_byte(10);
write_byte(0);
write_byte(255); // r
write_byte(215); // g
write_byte(0); //b
write_byte(200); // alpha
write_byte(255);
message_end();
}
else
{
new vecOrigin[3];
get_entvar(iAttacker, var_origin, vecOrigin);

message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_TRACER);
engfunc(EngFunc_WriteCoord, vecOrigin[0]);
engfunc(EngFunc_WriteCoord, vecOrigin[1]);
engfunc(EngFunc_WriteCoord, vecOrigin[2]);
engfunc(EngFunc_WriteCoord, vecEndPos[0]);
engfunc(EngFunc_WriteCoord, vecEndPos[1]);
engfunc(EngFunc_WriteCoord, vecEndPos[2]);
message_end();
}

return;
}

public Command_ShowUltimateMenu(iPlayer)
{
if(!IsPlayer(iPlayer) || !get_bit(g_bClientConnected, iPlayer))
{
return PLUGIN_HANDLED;
}

if(g_pCvar[MENU_ACCESS_TYPE] == 0)
{
client_print_color(iPlayer, print_team_default, "%L", iPlayer, "CHAT_BUY_DISABLE");
return PLUGIN_HANDLED;
}
else if(g_pCvar[MENU_ACCESS_TYPE] == 2)
{
if(g_pCvar[FLAG_ACCESS] && !(get_user_flags(iPlayer) & read_flags(g_pCvar[FLAG_ACCESS])))
{
client_print_color(iPlayer, print_team_default, "%L", iPlayer, "CHAT_NO_ACCESS");
return PLUGIN_HANDLED;
}
}

if(get_member_game(m_iTotalRoundsPlayed) + 1 < g_pCvar[MENU_ROUND])
{
client_print_color(iPlayer, print_team_default, "%L", iPlayer, "CHAT_ROUNDS", g_pCvar[MENU_ROUND]);
return PLUGIN_HANDLED;
}

new sText[128];
new sDiscount[30];
new aData[eAUWData];
new iCost;

formatex(sText, charsmax(sText), "%L", iPlayer, "MENU_TITLE");
new hMenu = menu_create(sText, "ShopMenuHandler");
// maybe add callback?

for(new i = 0; i < g_iWeaponsCount; i++)
{
ArrayGetArray(g_aWeaponData, i, aData);

if(aData[eAUWData_MENU_WEAPON_ADD] == 0 || aData[eAUWData_MENU_WEAPON_ADD] == 2)
{
continue;
}

if(aData[eAUWData_WEAPON_COST] < 0)
{
continue;
}

if(g_pCvar[DISCOUNT] > 0)
{
iCost = aData[eAUWData_WEAPON_COST] - getPercentNum(aData[eAUWData_WEAPON_COST], g_pCvar[DISCOUNT]);

if(getPercentNum(aData[eAUWData_WEAPON_COST], g_pCvar[DISCOUNT]) > 0)
{
formatex(sDiscount, charsmax(sDiscount), "%L", iPlayer, "MENU_DISCOUNT", g_pCvar[DISCOUNT]);
}
}
else
{
iCost = aData[eAUWData_WEAPON_COST];
}

if(g_pCvar[MENU_DAMAGE] > 0)
{
formatex(sText, charsmax(sText), "%s%s %L %s \R\y%d", rg_get_user_money(iPlayer) >= iCost ? "\w" : "\d", aData[eAUWData_MENU_NAME_ITEM], iPlayer, "MENU_DAMAGE", floatround(aData[eAUWData_WEAPON_DAMAGE] * 100), sDiscount, iCost);
}
else
{
formatex(sText, charsmax(sText), "%s%s\R\y%d", rg_get_user_money(iPlayer) >= iCost ? "\w" : "\d", aData[eAUWData_MENU_NAME_ITEM], iCost);
}

menu_additem(hMenu, sText);
}

formatex(sText, charsmax(sText), "%L", iPlayer, "MENU_NEXT");
menu_setprop(hMenu, MPROP_NEXTNAME, sText);
formatex(sText, charsmax(sText), "%L", iPlayer, "MENU_BACK");
menu_setprop(hMenu, MPROP_BACKNAME, sText);
formatex(sText, charsmax(sText), "%L", iPlayer, "MENU_EXIT");
menu_setprop(hMenu, MPROP_EXITNAME, sText);

menu_display(iPlayer, hMenu, 0);

return PLUGIN_HANDLED;
}

public ShopMenuHandler(iPlayer, hMenu, iItem)
{
if(!is_user_alive(iPlayer) || iItem == MENU_EXIT)
{
menu_destroy(hMenu);
return PLUGIN_HANDLED;
}

new sData[6], sName[64], iAccess, iCallback;
menu_item_getinfo(hMenu, iItem, iAccess, sData, charsmax(sData), sName, charsmax(sName), iCallback);

menu_destroy(hMenu);

giveItem(iPlayer, iItem, 1, eAUWGiveItemTypes_ShopMenu);

return PLUGIN_HANDLED;
}

public plugin_precache()
{
g_iLaserBeam = precache_model("sprites/laserbeam.spr");

CFile_Load();
}

CFile_Load()
{
new sPath[128];

get_configsdir(sPath, charsmax(sPath));
format(sPath, charsmax(sPath), "%s/%s", sPath, sFile);

new iFile = fopen(sPath, "rt");

if(!iFile)
{
log_amx("[DEBUG]: No file found ^"%s^".", sPath);
set_fail_state("[DEBUG]: No file found ^"%s^".", sPath);
return;
}

g_iForwards[eAUWForwards_OnParseEnd] = CreateMultiForward("auw_on_parse_end", ET_CONTINUE, FP_CELL);

g_aWeaponData = ArrayCreate(eAUWData);
g_tWeaponClcmd = TrieCreate();

new sLine[512];

new aData[eAUWData];
new sWeaponClcmd[64];
new sWeaponCost[6];
new sWeaponAmmo[4];
new iWeaponBpAmmo[4];
new sWeaponDamage[5];
new sWeaponAllowRound[3];
new sWeaponTrace[3];
new sWeaponMenuAdd[3];
new sWeaponAccessFlag[10];

while(!feof(iFile))
{
fgets(iFile, sLine, charsmax(sLine));
replace(sLine, charsmax(sLine), "^n", "");

if(IsComment(sLine))
{
continue;
}

trim(sLine);

parse(sLine,
aData[eAUWData_WEAPON_REFERENCE], charsmax(aData[eAUWData_WEAPON_REFERENCE]),
sWeaponClcmd, charsmax(sWeaponClcmd),
aData[eAUWData_MENU_NAME_ITEM], charsmax(aData[eAUWData_MENU_NAME_ITEM]),
sWeaponCost, charsmax(sWeaponCost),
sWeaponAmmo, charsmax(sWeaponAmmo),
iWeaponBpAmmo, charsmax(iWeaponBpAmmo),
sWeaponDamage, charsmax(sWeaponDamage),
sWeaponAllowRound, charsmax(sWeaponAllowRound),
sWeaponTrace, charsmax(sWeaponTrace),
sWeaponMenuAdd, charsmax(sWeaponMenuAdd),
sWeaponAccessFlag, charsmax(sWeaponAccessFlag),
aData[eAUWData_WEAPON_MODEL_VIEW], charsmax(aData[eAUWData_WEAPON_MODEL_VIEW]),
aData[eAUWData_WEAPON_MODEL_PLAYER], charsmax(aData[eAUWData_WEAPON_MODEL_PLAYER]),
aData[eAUWData_WEAPON_MODEL_WORLD], charsmax(aData[eAUWData_WEAPON_MODEL_WORLD])
);

if(aData[eAUWData_WEAPON_MODEL_VIEW][0])
{
if(!file_exists(aData[eAUWData_WEAPON_MODEL_VIEW]))
{
set_fail_state("[Error] Model was not found (%s)", aData[eAUWData_WEAPON_MODEL_VIEW]);
}
else
{
precache_model(aData[eAUWData_WEAPON_MODEL_VIEW]);
}
}

if(aData[eAUWData_WEAPON_MODEL_PLAYER][0])
{
if(!file_exists(aData[eAUWData_WEAPON_MODEL_PLAYER]))
{
set_fail_state("[Error] Model was not found (%s)", aData[eAUWData_WEAPON_MODEL_PLAYER]);
}
else
{
precache_model(aData[eAUWData_WEAPON_MODEL_PLAYER]);
}
}

if(aData[eAUWData_WEAPON_MODEL_WORLD][0])
{
if(!file_exists(aData[eAUWData_WEAPON_MODEL_WORLD]))
{
set_fail_state("[Error] Model was not found (%s)", aData[eAUWData_WEAPON_MODEL_WORLD]);
}
else
{
precache_model(aData[eAUWData_WEAPON_MODEL_WORLD]);
}
}

if(!sWeaponAccessFlag[0] || sWeaponAccessFlag[0] == '0') // xd
{
aData[eAUWData_WEAPON_ACCESS_FLAGS] = 0;
}
else
{
aData[eAUWData_WEAPON_ACCESS_FLAGS] = read_flags(sWeaponAccessFlag);
}

aData[eAUWData_WEAPON_ID] = rg_get_weapon_info(aData[eAUWData_WEAPON_REFERENCE], WI_ID);

if(aData[eAUWData_WEAPON_ID] == WEAPON_NONE)
{
log_amx("[Error] Invalid weapon classname (%s)", aData[eAUWData_WEAPON_REFERENCE]);
continue;
}
aData[eAUWData_WEAPON_COST] = str_to_num(sWeaponCost);
aData[eAUWData_WEAPON_AMMO] = str_to_num(sWeaponAmmo);
aData[eAUWData_WEAPON_BPAMMO] = str_to_num(iWeaponBpAmmo);
aData[eAUWData_WEAPON_DAMAGE] = str_to_float(sWeaponDamage);
aData[eAUWData_WEAPON_ALLOW_ROUND] = str_to_num(sWeaponAllowRound);
aData[eAUWData_WEAPON_TRACE] = str_to_num(sWeaponTrace);
aData[eAUWData_MENU_WEAPON_ADD] = str_to_num(sWeaponMenuAdd);

TrieSetCell(g_tWeaponClcmd, sWeaponClcmd, ArrayPushArray(g_aWeaponData, aData));

g_iClcmdIndex[g_iWeaponsCount] = register_clcmd(sWeaponClcmd, "Command_GiveWeapon_EX");
g_iWeaponsCount++;
}

new ret;
ExecuteForward(g_iForwards[eAUWForwards_OnParseEnd], ret, g_iWeaponsCount);

fclose(iFile);
}

public plugin_end()
{
ArrayDestroy(g_aWeaponData);
TrieDestroy(g_tWeaponClcmd);
}

stock bool:rg_get_user_buyzone(const pIndex)
{
new iSignals[UnifiedSignals];

get_member(pIndex, m_signals, iSignals);

return bool:(SignalState:iSignals[US_State] & SIGNAL_BUY);
}

bool: IsCustomWeapon(iItem, iKey)
{
if(0 <= iKey - AUW_IMPULSE_OFFSET < g_iWeaponsCount)
{
if(get_entvar(iItem, var_impulse) == iKey)
{
return true;
}
}

return false;
}

getPercentNum(iNumber, iPercent)
{
return floatround(float(iNumber) * (float(iPercent) / 100.0)); // blya
}

enum
{
APPEND_SLOT = 0,
REMOVE_SLOT = 1,
DROP_SLOT = 2
};

dropWeapons(iPlayer, InventorySlotType: iSlot)
{
if(g_pCvar[GIVE_TYPE] == APPEND_SLOT)
{
return;
}

if(g_pCvar[GIVE_TYPE] == REMOVE_SLOT)
{
rg_remove_items_by_slot(iPlayer, iSlot);
return;
}

static iItem; iItem = get_member(iPlayer, m_rgpPlayerItems, iSlot);

if(is_nullent(iItem))
{
return;
}

static iNext;

do
{
if(!is_nullent(iItem))
{
iNext = get_member(iItem, m_pNext);

switch(g_pCvar[GIVE_TYPE])
{
case DROP_SLOT:
{
rg_drop_items_by_slot(iPlayer, iSlot);
}
}
}
}
while((iItem = iNext) > 0);
}

stateHooks(bool: bState)
{
if(bState)
{
for(new i = 0; i < sizeof(g_pHamHooks[TRACEATTACK]); i++)
{
EnableHamForward(g_pHamHooks[TRACEATTACK][i]);
}

EnableHamForward(g_pHamHooks[TOUCH]);

EnableHookChain(g_pReapiHooks[DEPLOY]);
EnableHookChain(g_pReapiHooks[SETMODEL]);
}
else
{
for(new i = 0; i < sizeof(g_pHamHooks[TRACEATTACK]); i++)
{
DisableHamForward(g_pHamHooks[TRACEATTACK][i]);
}

DisableHamForward(g_pHamHooks[TOUCH]);

DisableHookChain(g_pReapiHooks[DEPLOY]);
DisableHookChain(g_pReapiHooks[SETMODEL]);
}
}
CRASH: Sat Feb 22 11:35:05 MSK 2025
Start Line: ./hlds_linux -debug -game cstrike -master -noipx -pingboost 3 -sys_ticrate 1200 -insecure +ip 95.181.158.132 +port 27051 +map de_dust2_2x2 -maxplayers 32 +rcon_password +sv_password -pidfile hlds.1680.pid
[New LWP 29098]
[New LWP 29127]
[New LWP 29134]
[New LWP 29133]
[New LWP 29109]
[New LWP 29830]
[New LWP 29126]
[New LWP 29132]
[New LWP 29135]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `./hlds_linux -debug -game cstrike -master -noipx -pingboost 3 -sys_ticrate 1200'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00000000 in ?? ()
[Current thread is 1 (Thread 0xf7441940 (LWP 29098))]
#0 0x00000000 in ?? ()
#1 0xf2d95f1e in get_member_s(tagAMX*, int*) () from cstrike/addons/amxmodx/modules/reapi_amxx_i386.so
#2 0xf2eb9bfa in amx_Callback () from /home/srv459466/cstrike/addons/amxmodx/dlls/amxmodx.so
#3 0x44940100 in ?? ()
#4 0x000026d0 in ?? ()
#5 0xf12f96cc in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
No symbol table info available.
From To Syms Read Shared Object Library
0xf76d5914 0xf771bc78 Yes ./libstdc++.so.6
0xf7682a30 0xf7683921 Yes (*) /lib32/libdl.so.2
0xf76698c0 0xf7676f11 Yes /lib32/libpthread.so.0
0xf74c4800 0xf75f1f1f Yes (*) /lib32/libc.so.6
0xf745c6e0 0xf7493c8b Yes (*) /lib32/libm.so.6
0xf7768860 0xf7781f1d Yes (*) /lib/ld-linux.so.2
0xf7444e04 0xf7454490 Yes ./libgcc_s.so.1
0xf6d82120 0xf6e33c5f Yes (*) /home/srv459466/engine_i486.so
0xf6d73840 0xf6d76dfc Yes (*) /lib32/librt.so.1
0xf6d615c0 0xf6d6bd74 Yes (*) ./libsteam_api.so
0xf6d47a00 0xf6d541b8 Yes /home/srv459466/filesystem_stdio.so
0xf5e3ee80 0xf6926040 Yes (*) /rep/cs/6153/steamclient.so
0xf5cb9670 0xf5d2f020 Yes (*) /rep/cs/6153/crashhandler.so
0xf34533a0 0xf3496a90 Yes (*) /home/srv459466/./cstrike/addons/metamod/dlls/metamod.so
0xf31f14e0 0xf338ea90 Yes (*) /home/srv459466/cstrike/dlls/cs.so
0xf3065850 0xf3089550 Yes (*) /home/srv459466/cstrike/addons/reunion/dlls/reunion.so
0xf2e8ca20 0xf2eefdb7 Yes (*) /home/srv459466/cstrike/addons/amxmodx/dlls/amxmodx.so
0xf2e5ed50 0xf2e6e460 Yes (*) cstrike/addons/amxmodx/modules/cstrike_amxx_i386.so
0xf2ddb120 0xf2de1404 Yes (*) cstrike/addons/amxmodx/modules/csx_amxx_i386.so
0xf2d59a40 0xf2daa810 Yes (*) cstrike/addons/amxmodx/modules/reapi_amxx_i386.so
0xf1c9a530 0xf1cc99b4 Yes (*) /home/srv459466/cstrike/addons/hitbox_fix/dlls/hitbox_fix.so
0xf2d02300 0xf2d18cab Yes (*) /home/srv459466/cstrike/addons/rechecker/dlls/rechecker.so
0xf2bbdf70 0xf2cc2030 Yes (*) /home/srv459466/cstrike/addons/revoice/dlls/revoice.so
0xf2afd340 0xf2b1048e Yes (*) /home/srv459466/cstrike/addons/whblocker/dlls/whblocker.so
0xf2aedb90 0xf2af72f0 Yes (*) /home/srv459466/cstrike/addons/resemiclip/dlls/resemiclip.so
0xf2ac4b40 0xf2ace0b0 Yes (*) /home/srv459466/cstrike/addons/reauthcheck/dlls/reauthcheck.so
0xf2a2e010 0xf2a97d59 Yes (*) /home/srv459466/cstrike/addons/ultimate_unprecacher/dlls/ultimate_unprecacher.so
0xf2a069b0 0xf2a0aa08 Yes (*) cstrike/addons/amxmodx/modules/nvault_amxx_i386.so
0xf29f4290 0xf2a0080c Yes (*) cstrike/addons/amxmodx/modules/engine_amxx_i386.so
0xf29b49d0 0xf29e0d6c Yes (*) cstrike/addons/amxmodx/modules/fakemeta_amxx_i386.so
0xf292e5d0 0xf2977548 Yes (*) cstrike/addons/amxmodx/modules/regex_amxx_i386.so
0xf291c660 0xf2920f84 Yes (*) cstrike/addons/amxmodx/modules/fun_amxx_i386.so
0xf14ec790 0xf1584fc5 Yes (*) cstrike/addons/amxmodx/modules/mysql_amxx_i386.so
0xf28b6b60 0xf28fe624 Yes (*) cstrike/addons/amxmodx/modules/hamsandwich_amxx_i386.so
0xf11be7b0 0xf11c7a8c Yes (*) cstrike/addons/amxmodx/modules/json_amxx_i386.so
0xf0cd7000 0xf0ffd874 Yes cstrike/addons/amxmodx/modules/easy_http_amxx_i386.so
0xf0b35a50 0xf0b3b8e4 Yes (*) cstrike/addons/amxmodx/modules/geoip_amxx_i386.so
0xf0c87a80 0xf0c8d8f0 Yes (*) /lib32/libnss_files.so.2
0xe759d0c0 0xe8748d64 Yes (*) ./steamclient.so
0xf0b9a670 0xf0c10020 Yes (*) ./crashhandler.so
0xf0b84b50 0xf0b877d6 Yes (*) /lib32/libnss_dns.so.2
0xf0b6e690 0xf0b7ab94 Yes (*) /lib32/libresolv.so.2
(*): Shared library is missing debugging information.
Stack level 0, frame at 0xffa738e0:
eip = 0x0; saved eip = 0xf2d95f1e
called by frame at 0xffa73930
Arglist at 0xffa738d8, args:
Locals at 0xffa738d8, Previous frame's sp is 0xffa738e0
Saved registers:
eip at 0xffa738dc
End of crash report
----------------------------------------------
22 Фев 2025
[ 97] Advanced Ultimate Weap 0.1.1b steelzzz advanced_ultima paused
Я специально остановил плагин.
 

Вложения

Сообщения
568
Реакции
101
Помог
6 раз(а)
Есть система, которая обновляется, возможно задумаетесь о замене -> ТЫК
 
Сообщения
155
Реакции
32
Помог
2 раз(а)
По добру по здорову около половины плагинов требуют современного решения, прости, столько стареньких стоит.
А AUW вместе оружием из VIP системы от Vaqtincha не используются одновременно на сервере? И там и там пушки. Конфликта не может быть? Хоть, и могу ошибаться.

Методом тестов выявляй вредителя:
Отключаешь больше половины плагинов (кроме AUW и нужных самых) и тестишь, нет падения, включаешь часть и погнал снова... нет падения, снова половину включаешь, дошел до падения и выключаешь по одному, два из тех, что включал в последний раз и так найдешь конфликт или виновника.
 
Сообщения
302
Реакции
1
Предупреждения
1
Помог
6 раз(а)
fightzonecs, заюзай cwapi и vip modular и будет тебе счастье, там не так трудно разобраться
 
Сообщения
297
Реакции
145
Помог
15 раз(а)
Здесь в ресурсах опубликована версия 0.1.0b её пробовали ?

Еще, если интересно, делал для своих нужд fork auw , могу поделиться если в личку напишешь. (мой интерес - узнать будет ли с переделкой краш)
 
Сообщения
4
Реакции
0
@dreamxleo,Спасибо попробую, если что отпишусь.
22 Фев 2025
@WILL_BE,На новую систему не хочется переходить!
22 Фев 2025
lol cek,Нет на новые системы не очень хочется переходить!
 
Сообщения
102
Реакции
8
Помог
1 раз(а)
Сбой произошёл в get_member_s из reapi_amxx_i386.so — функции ReAPI для доступа к данным игровых объектов (например, свойства игрока или оружия). Трассировка стека показывает, что её вызвал amx_Callback, то есть скрипт AMX Mod X, такой как этот. Вот как этот плагин может быть причастен:
Использование get_member

Плагин часто вызывает get_member (макрос ReAPI) для доступа к данным:
  • rg_get_user_money(%0) → get_member(%0, m_iAccount): получение денег игрока.
  • Изменение урона оружия (например, get_member(iWeapon, m_Weapon_flBaseDamage)).
  • Проверка предметов игрока (например, get_member(iPlayer, m_rgpPlayerItems, iSlot)).
  • Получение активного предмета (например, get_member(iAttacker, m_pActiveItem) в CWeapon_TraceAttack_Post).
Сбой на адресе 0x00000000 (нулевой указатель) говорит о том, что get_member_s попыталась получить доступ к члену недействительной сущности или указателя. Так как get_member — это обёртка над get_member_s, неверный ID сущности или неинициализированная переменная могли вызвать это.


  • Проверка сущностей:
    • Функции вроде giveItem, CWeapon_TraceAttack_Post и dropWeapons обращаются к данным сущностей, не всегда тщательно проверяя их валидность.
    • Пример: в CWeapon_TraceAttack_Post:
      c
      static iItem; iItem = get_member(iAttacker, m_pActiveItem); if(is_nullent(iItem)) { return; }
      Если iAttacker недействителен (например, игрок отключился), get_member может передать нулевой или мусорный указатель в get_member_s.
  • Проверка кастомного оружия:
    • IsCustomWeapon(iItem, getWeaponKey(iItem)) зависит от getWeaponKey(iItem) (get_entvar(iItem, var_iuser4)).
    • Если iItem недействителен при вызове get_entvar, это может привести к сбою. Эта функция используется в хуках вроде CWeapon_DefaultDeploy_Pre и CWeapon_TraceAttack_Post.
  • Аргументы хук-цепочек:
    • В CWeapon_DefaultDeploy_Pre и CWeapon_SetModel_Pre плагин изменяет аргументы хук-цепочек (например, SetHookChainArg(2, ATYPE_STRING, sView)).
    • Если iItem или iEntity недействительны, доступ к getWeaponKey или getWeaponModelView может вызвать ошибку, косвенно приводя к сбою get_member_s.
  • Создание оружия:
    • giveItem создаёт сущности с помощью rg_create_entity и задаёт пользовательские переменные (например, setWeaponKey). Если создание сущности тихо проваливается или сущность неожиданно удаляется, последующие вызовы get_member могут привести к сбою.
  • ReAPI Dev-версия (v5.24.0.300-dev):
    • Плагин использует хуки и нативы ReAPI (rg_get_user_money, rg_create_entity и т.д.). Разработческая версия ReAPI могла изменить поведение get_member_s (например, добавить строгую проверку), что выявило ошибки в этом скрипте, не видные в стабильных версиях.


Понизить версию ReAPI:
  • Перейдите на стабильную версию ReAPI (например, v5.23.0), перекомпилируйте и протестируйте.

Полностью исправленный плагин
 

Вложения

  • 169.9 KB Просмотры: 23
Сообщения
4
Реакции
0
Благодарю уже всё исправили, помог переход на более поздний вариант плагина....
23 Фев 2025
Здесь в ресурсах опубликована версия 0.1.0b её пробовали ?

Еще, если интересно, делал для своих нужд fork auw , могу поделиться если в личку напишешь. (мой интерес - узнать будет ли с переделкой краш)
Спасибо за подсказку хотя с начало пытались проверить все плагины! Но не вышло поэтому пришлось скачать старую версию и пройти тест с 001 до 0.1.0b/
 

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

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