basebuilder plugin task

Сообщения
5
Реакции
0
Ошибка
There is a problem the unlock getting impacted so VIP will need to wait until 20 seconds for unlock, tried to do something but didn'work
ОС
Windows
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.12.0.780-dev
Build date: 16:20:56 Sep 19 2022 (3082)
Build from: https://github.com/dreamstalker/rehlds/commit/d6ebe82
ReGamedll
ReGameDLL version: 5.21.0.556-dev
Build date: 08:43:58 Jul 22 2022
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/1081301
Версия 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
Список метамодулей
description      stat pend  file                      vers         src  load  unload
[ 1] AMX Mod X RUN - amxmodx_mm_i386.so v1.9.0.5294 ini Start ANY
[ 2] Reunion RUN - reunion_mm_i386.so v0.1.0.133 ini Start Never
[ 3] Revoice RUN - revoice_mm_i386.so v0.1.0.34 ini Start Never
[ 4] ReAuthCheck RUN - reauthcheck_mm_i386.so v0.1.6 ini Start Never
[ 5] Rechecker RUN - rechecker_mm_i386.so v2.5 ini Chlvl ANY
[ 6] SafeNameAndChat RUN - SafeNameAndChat.so v1.1 ini ANY ANY
[ 7] HitBox Fix RUN - hitbox_fix_mm_i386.so v1.1.1 ini Start ANY
[ 8] Fun RUN - fun_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
[ 9] GeoIP RUN - geoip_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
[10] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
[11] CSX RUN - csx_amxx_i386.so v1.8.2 pl1 ANY ANY
[12] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
[13] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
[14] Engine RUN - engine_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
[15] MySQL RUN - mysql_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
Список плагинов
[ 1] AMX Mod X        RUN   -    amxmodx_mm_i386.so        v1.9.0.5294  ini  Start ANY  
[ 2] Reunion RUN - reunion_mm_i386.so v0.1.0.133 ini Start Never
[ 3] Revoice RUN - revoice_mm_i386.so v0.1.0.34 ini Start Never
[ 4] ReAuthCheck RUN - reauthcheck_mm_i386.so v0.1.6 ini Start Never
[ 5] Rechecker RUN - rechecker_mm_i386.so v2.5 ini Chlvl ANY
[ 6] SafeNameAndChat RUN - SafeNameAndChat.so v1.1 ini ANY ANY
[ 7] HitBox Fix RUN - hitbox_fix_mm_i386.so v1.1.1 ini Start ANY
[ 8] Fun RUN - fun_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
[ 9] GeoIP RUN - geoip_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
[10] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
[11] CSX RUN - csx_amxx_i386.so v1.8.2 pl1 ANY ANY
[12] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
[13] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
[14] Engine RUN - engine_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
[15] MySQL RUN - mysql_amxx_i386.so v1.9.0.5294 pl1 ANY ANY
15 plugins, 15 running
amxx plugins
Currently loaded plugins:
name version author file status
[ 1] Admin Base 1.8.2 AMXX Dev Team admin.amxx running
[ 2] Admin Commands 1.8.2 AMXX Dev Team admincmd.amxx running
[ 3] Slots Reservation 1.8.2 AMXX Dev Team adminslots.amxx running
[ 4] Multi-Lingual System 1.8.2 AMXX Dev Team multilingual.am running
[ 5] Admin Help 1.8.2 AMXX Dev Team adminhelp.amxx running
[ 6] Menus Front-End 1.8.2 AMXX Dev Team menufront.amxx running
[ 7] Commands Menu 1.8.2 AMXX Dev Team cmdmenu.amxx running
[ 8] Players Menu 1.8.2 AMXX Dev Team plmenu.amxx running
[ 9] Maps Menu 1.8.2 AMXX Dev Team mapsmenu.amxx running
[ 10] Plugin Menu 1.8.2 AMXX Dev Team pluginmenu.amxx running
[ 11] Admin Chat 1.8.2 AMXX Dev Team adminchat.amxx running
[ 12] Anti Flood 1.8.2 AMXX Dev Team antiflood.amxx running
[ 13] Scrolling Message 1.8.2 AMXX Dev Team scrollmsg.amxx running
[ 14] Info. Messages 1.8.2 AMXX Dev Team imessage.amxx running
[ 15] Admin Votes 1.8.2 AMXX Dev Team adminvote.amxx running
[ 16] TimeLeft Extender 0.1a prodigy TimeLeftExtende 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] Restrict Weapons 1.8.2 AMXX Dev Team restmenu.amxx running
[ 23] StatsX 1.8.2 AMXX Dev Team statsx.amxx running
[ 24] CS Misc. Stats 1.8.2 AMXX Dev Team miscstats.amxx running
[ 25] CS Stats Logging 1.8.2 AMXX Dev Team stats_logging.a running
[ 26] unknown unknown unknown skins_menu.amxx running
[ 27] Players Models 1.3.1 ConnorMcLeod players_models. running
[ 28] Admin Hook 1.0 AssKicR adminhook.amxx running
[ 29] Advanced Bullet Damage 1.0 Sn!ff3r abd.amxx running
[ 30] Camera Changer 1.0 XunTric camera.amxx running
[ 31] Base Builder Zombie Mo 5.4 Tirant basebuilder54.a debug
[ 32] Spec Switch 0.1.3 many spec.amxx running
[ 33] Reset Score 1.0 Silenttt resetscore.amxx running
[ 34] amx_revive 1.0 xPaw revive.amxx running
[ 35] Fix bug (say / say_tea 1.0 Ghost95V & popey nobug.amxx running
[ 36] Anti Auto/Rebuy Crash 0.0.4 ConnorMcLeod autobuy_fix.amx running
[ 37] Show Admins Online 1.1 vato loco [GE-S] show_admins_vl. running
[ 38] BaseBuilder Shop 5.4 Ace67 bb_shop.amxx running
[ 39] plugin_trail 1.3.1 Bahrmanou plugin_trail.am running
[ 40] PLUGIN VERSION AUTHOR ask4tag.amxx running
[ 41] AMXX Piss 2.0 KRoTaL piss.amxx running
[ 42] Kill Distance 0.3 Nightscream kill-distance.a running
[ 43] AMX Bank 1.7 twistedeuphoria amx_bank.amxx running
[ 44] Weapon Model + Sound R 1.3 GHW_Chronic GHW_Weapon_Repl running
[ 45] Instant AutoTeamBalanc 1.2.0 ConnorMcLeod instant_autotea running
[ 46] GHW Auto Message Displ 2.1 GHW_Chronic GHW_Message_Dis running
[ 47] SpecList 1.2a FatalisDK speclist.amxx running
[ 48] New Plug-In 1.0 r0ma' yo.amxx running
[ 49] Grab+ 1.2.4b1 Ian Cammarata grab_plus.amxx running
[ 50] amx_heal by Smokey485 1.1 Smokey amx_heal.amxx running
[ 51] amx_cheat 1.0 watch Noclip-godmode. running
[ 52] EveryoneIsMedic 1.51 Sylwester eim.amxx running
[ 53] Server Side Info 1.6 xakintosh srv_info.amxx running
[ 54] Knife Sounds 0.0.1 ConnorMcLeod knife_sounds.am running
[ 55] [ZP] Parachute 1.0 H.RED.ZONE zp_parachute.am running
[ 56] Prefix CT/T Team 1.0 Ace67 PREFIX.amxx running
[ 57] Admin Chat Tag 1.0 ConnorMcLeod ATEST.amxx running
[ 58] Loading Music II 1.2.9 Simon Logic loading_music2. running
[ 59] No Timelimit Reset on 0.0.3 ConnorMcLeod aie.amxx running
[ 60] ScoreBoard Title 1.0 xPaw ScoreBoardTitle running
[ 61] Switch Teams & Balance 0.0.4 ConnorMcLeod switch.amxx running
[ 62] Kill Money 0.1.1 ConnorMcLeod killmonnaie.amx running
[ 63] VIP Info 1.0 GmTx vipinfo.amxx running
[ 64] Grenade Trail 1.0 Jim grenade_trail.a running
[ 65] unknown unknown unknown restart.amxx running
[ 66] Ultimate Gore 1.6 JTP10181 amx_sang_ultima running
[ 67] Ultimate Sounds 1.8 Dizzy / Bmann_42 ultimate_sounds running
[ 68] X-Rules (Motd) 0.0.1 Jhob94 xrules.amxx running
[ 69] Colored Smoke 1.1 xPaw ColoredSmoke.am running
[ 70] Colored Flashbangs 1.0 v3x colored_flashba running
[ 71] Give Money per 5 minue 1.0 Celena Luna money5min.amxx running
[ 72] 0Hp bug fix 0.0.1 ConnorMcLeod hp_fix.amxx running
[ 73] GHW Connect Messages 1.1 GHW_Chronic GHW_connect.amx running
[ 74] Base Builder Glock Bug 2.0 soldat0706||xPaw block.amxx running
[ 75] AMX_Super Menu 5.0.2 SuperCentral.co amx_super-menu. running
[ 76] Reasons Ban Menu 1.0 Marquees banmenu.amxx running
[ 77] AMXX Gag 1.4.9 xPaw & Exolent amx_gag.amxx running
[ 78] unknown unknown unknown lastround.amxx running
Автор плагина
Tirant
Версия плагина
Basebuilder 5.4
Исходный код
/*
Base Builder Zombie Mod
By: Tirant
*/

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <engine>
#include <hamsandwich>
#include <fun>
#include <csstats>
#include <csx>
#include <xs>

// Plugin Version
new VERSION[]="5.4"
new formatmodname[] = "^x01 [^x04 Base Builder^x01 ]"

//Models
new const g_ZombieModel[] = "classic2"
new const g_ZombieKnifeModel[] = "models/bb/x_knife.mdl"

//Sounds
new g_RoundStart[] = "basebuilder/round_start.wav"

#define MAX_PLAYERS 32
#define AMMO_SLOT 376
#define MODELSET_TASK 100
#define MODELCHANGE_DELAY 0.5
#define MAXENTS 1365
#define TASK_ROUND 1023
#define AUTO_TEAM_JOIN_DELAY 0.1
#define TEAM_SELECT_VGUI_MENU_ID 2

#define AFTER_BUILD ADMIN_KICK
#define DEAD_BUILD ADMIN_KICK
#define REMOVE_BLOCK ADMIN_LEVEL_C
#define DEAD_REMOVE ADMIN_LEVEL_D
#define LOCK_BLOCKS ADMIN_KICK
#define PAIN_SHOCK_FREE ADMIN_KICK
#define BAD_SPAWN ADMIN_KICK
#define BUILD_BAN ADMIN_KICK
#define REVIVE ADMIN_KICK
#define SWAP ADMIN_KICK
#define START_ROUND ADMIN_BAN

#if cellbits == 32
#define OFFSET_BUYZONE 235
#else
#define OFFSET_BUYZONE 268
#endif

#define LockBlock(%1) ( entity_set_int( %1, EV_INT_iuser1, 1 ) )
#define UnlockBlock(%1) ( entity_set_int( %1, EV_INT_iuser1, 0 ) )
#define IsBlockLocked(%1) ( entity_get_int( %1, EV_INT_iuser1 ) == 1 )

// CS Weapon CBase Offsets (win32)
const OFFSET_WEAPONOWNER = 41

// Linux diff's
const OFFSET_LINUX_WEAPONS = 4

new gmsgStatusText
new gmsgSayText
new gHudSyncInfo
new g_MaxPlayers
const fPainShock = 108

new bool:g_CanBuild
new bool:g_ZombiesReleased
new g_RoundNum
new g_iEntBarrier
new bool:g_BuildBan[MAX_PLAYERS+1]
new g_pEnt[MAX_PLAYERS+1], g_pDist[MAX_PLAYERS+1]
new bool:g_MovingEnt[MAXENTS]
new g_EntMover[MAXENTS]
new g_LastMover[MAXENTS]
new g_EntOwner[MAXENTS]
new g_OwnedEnts[33]

//Custom Model Stuff
new Float:g_ModelsTargetTime, Float:g_RoundStartTime
new g_HasCustomModel[MAX_PLAYERS+1], g_PlayerModel[MAX_PLAYERS+1][32]

new g_ModName[32]
new g_CurrentWeapon[MAX_PLAYERS+1]
new g_PrimaryWeapon[MAX_PLAYERS+1]

// Allowed weapons for zombies
const ZOMBIE_ALLOWED_WEAPONS_BITSUM = (1<<CSW_KNIFE)

new g_pcvar_team, g_pcvar_class, g_pcvar_buildtime, g_pcvar_zombiehp, g_pcvar_maxrounds, g_pcvar_basecalc,
g_pcvar_givenades, g_pcvar_allowedweps, g_pcvar_tournymode, g_pcvar_showmovers, g_pcvar_healthtime,
g_pcvar_blockgrav, g_pcvar_knockback, g_pcvar_entmindist, g_pcvar_entsetdist, g_pcvar_entmaxdist,
g_pcvar_roundnum, g_pcvar_roundtime, g_pcvar_resetent, g_pcvar_zresptime, g_pcvar_maxclaimable,
g_pcvar_claimable

new g_friend[MAX_PLAYERS+1]

//Cached Stuff for Players
new g_isconnected[MAX_PLAYERS+1]
new g_isalive[MAX_PLAYERS+1]
new g_ishuman[MAX_PLAYERS+1]
new g_iszombie[MAX_PLAYERS+1]

//CSDM-Style Weapons Menu
new bool:firsttime[MAX_PLAYERS+1],bool:ask[MAX_PLAYERS+1]
new weapon_picked[2][MAX_PLAYERS+1],cur_offset[MAX_PLAYERS+1],options_on_menu[8][MAX_PLAYERS+1]

new count_down

// Weapon entity names
new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
"weapon_ak47", "weapon_knife", "weapon_p90" }

static const WEAPONNAMES[24][23] = { "Schmidt Scout", "XM1014 M4", "Ingram MAC-10", "Steyr AUG A1", "UMP 45", "SG-550 Auto-Sniper",
"IMI Galil", "Famas", "AWP Magnum Sniper", "MP5 Navy", "M249 Para Machinegun", "M3 Super 90", "M4A1 Carbine",
"Schmidt TMP", "G3SG1 Auto-Sniper", "SG-552 Commando", "AK-47 Kalashnikov", "ES P90", "P228 Compact",
"Dual Elite Berettas", "Fiveseven", "USP .45 ACP Tactical", "Glock 18C", "Desert Eagle .50 AE"
}

enum colorsData{
color[24],
access_flag
}

new colors[][colorsData] = {
{ "000.0 000.0 000.0", ADMIN_KICK }, // Admin
{ "254.0 254.0 034.0", ADMIN_LEVEL_B }, // Vip
{ "255.0 0.0 0.0", ADMIN_USER } // lowest rank
}

new my_color[MAX_PLAYERS + 1]

#define TASK_ID 1337

new bool:Lockround

public plugin_init()
{
register_plugin("Base Builder Zombie Mod", VERSION, "Tirant")
register_cvar("base_builder", VERSION, FCVAR_SPONLY|FCVAR_SERVER)
set_cvar_string("base_builder", VERSION)

g_pcvar_buildtime = register_cvar("bb_build_time", "150")
g_pcvar_zombiehp = register_cvar("bb_zombie_health", "6500")
g_pcvar_basecalc = register_cvar("bb_calc_maxbase", "0")
g_pcvar_tournymode = register_cvar("bb_tournament_mode", "0")
g_pcvar_showmovers = register_cvar("bb_show_moving", "1")
g_pcvar_blockgrav = register_cvar("bb_block_gravity", "0")
g_pcvar_knockback = register_cvar("bb_pain_shock_free", "0")
g_pcvar_entmaxdist = register_cvar("bb_max_move_dist", "99999999")
g_pcvar_entmindist = register_cvar("bb_min_move_dist", "5")
g_pcvar_entsetdist = register_cvar("bb_min_dist_set", "1")
g_pcvar_healthtime = register_cvar("bb_health_time", "12")
g_pcvar_resetent = register_cvar("bb_reset_blocks", "1")
g_pcvar_roundtime = register_cvar("bb_roundtime", "1")
g_pcvar_zresptime = register_cvar("bb_zombie_respawn_time", "0.01")
g_pcvar_roundnum = register_cvar("bb_rounds", "6")
g_pcvar_maxrounds = get_cvar_num("mp_maxrounds")
g_pcvar_maxclaimable = register_cvar("bb_claim_max", "6")
g_pcvar_claimable = register_cvar("bb_claim_mode", "0")

//AJC for auto team (if needed)
g_pcvar_team = register_cvar("bb_team", "5")
g_pcvar_class = register_cvar("bb_class", "5")

//Guns Menu
g_pcvar_givenades = register_cvar("bb_give_nades","h") //h f s, put multiple letters for multiple nades
g_pcvar_allowedweps = register_cvar("bb_weapons","abcdeghijlmnqrstuvwx")

//Client Commands
register_clcmd("+grab","cmdMoveEnt",_," - Starts moving the selected object") //command to move stuff around
register_clcmd("-grab","cmdStopEnt",_," - Stops moving the selected object") //command to move stuff around
register_clcmd("say /respawn","Respawn_Zombie",_," - Respawn while dead (Zombie)") //command to respawn (zombies only)
register_clcmd("say /fixspawn","cmdBadSpawn",_," - Respawn while dead (Survivor)") //command to respawn (humans only before buildtime)
register_clcmd("say respawn","Respawn_Zombie",_," - Respawn while dead (Zombie)") //command to respawn (zombies only)
register_clcmd("say fixspawn","cmdBadSpawn",_," - Respawn while dead (Survivor)") //command to respawn (humans only before buildtime)
register_clcmd("say /help","cmdHelp",_," - Displays the help hud") //command to see /help menu
register_clcmd("say /rules","cmdHelp",_," - Displays the help hud") //command to see /help menu
register_clcmd("say /round","cmdCheckRound",_," - Displays the round number") //command to see the current round number
register_clcmd("say round","cmdCheckRound",_," - Displays the round number") //command to see the current round number

//Guns Menu
register_clcmd("say guns","cmdGuns",_," - Opens the guns menu") //Guns Menu CMD
register_clcmd("say_team guns","cmdGuns",_," - Opens the guns menu") //Guns Menu CMD
register_clcmd("say /guns","cmdGuns",_," - Opens the guns menu") //Guns Menu CMD
register_clcmd("say_team /guns","cmdGuns",_," - Opens the guns menu") //Guns Menu CMD

//Admin Commands
register_concmd("removeaim","cmdRemoveEnt",_," - Deletes an object") //Removes an object (C alive, D dead)
register_concmd("lockaim","cmdLockBlock",_," - Locks/Unlocks an object from moving") //Once to lock, again to unlock
register_concmd("unclaimaim","cmdRemoveClaim",_," - Removes a claim on an object") //Makes block claimable by everyone
register_concmd("say /fixspawns","cmdBadSpawn_Survivor",_," - Respawns all dead CTs") //Global /fixspawn command (Kick)
register_concmd("say /respawns","cmdBadSpawn_Zombie",_," - Respawns all dead Ts") //Global /respawn command (Kick)
register_concmd("bb_buildban","cmdBuildBan",_,"<player>") //Bans targeted player from building
register_concmd("bb_unbuildban","cmdBuildUnban",_,"<player>") //Unbans " " " "
register_concmd("bb_revive","cmdRevive",_,"<player>") //revives targetted player
register_concmd("bb_swap","cmdSwap",_,"<player>") //swaps the selected player to the opposite team
register_concmd("bb_startround","cmdStartRound",_," - Ends the build phase") //do i really have to explain this?

//Blocked Commands
register_clcmd("drop", "clcmd_drop")
register_clcmd("buy", "clcmd_buy")

new tournymode = get_pcvar_num(g_pcvar_tournymode)
if (tournymode != 1)
{
register_clcmd("chooseteam", "clcmd_changeteam")
register_clcmd("jointeam", "clcmd_changeteam")
}

register_forward(FM_GetGameDescription, "fw_GetGameDescription")
register_forward(FM_SetClientKeyValue, "fw_SetClientKeyValue")
register_forward(FM_ClientUserInfoChanged, "fw_ClientUserInfoChanged")
register_forward(FM_PlayerPreThink, "fw_Player_PreThink")
register_forward(FM_ClientKill, "fw_Suicide")
//register_forward(FM_CmdStart, "fw_CmdStart")
if (get_pcvar_num(g_pcvar_showmovers) == 1)
register_forward(FM_TraceLine, "fw_Traceline")

RegisterHam(Ham_Touch, "weapon_shield", "ham_WeaponCleaner_Post", 1)
RegisterHam(Ham_Touch, "weaponbox", "ham_WeaponCleaner_Post", 1)
RegisterHam(Ham_Item_Deploy, "weapon_knife", "ham_ItemDeploy_PostKnife", 1)
RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawn_Post", 1)
for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "ham_ItemDeploy_Post", 1)


register_message(get_user_msgid("TextMsg"), "msgRoundEnd")
register_message(get_user_msgid("StatusIcon"), "msgStatusIcon")
register_message(get_user_msgid("StatusValue"), "msgStatusValue");
if (tournymode != 1)
{
register_message(get_user_msgid("ShowMenu"), "message_show_menu")
register_message(get_user_msgid("VGUIMenu"), "message_vgui_menu")
}

register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_event("AmmoX", "ev_AmmoX", "be", "1=1", "1=2", "1=3", "1=4", "1=5", "1=6", "1=7", "1=8", "1=9", "1=10")
register_event("StatusValue", "ev_SetTeam", "be", "1=1");
register_event("StatusValue", "ev_ShowStatus", "be", "1=2", "2!0");
register_event("StatusValue", "ev_HideStatus", "be", "1=1", "2=0");
register_event("Health", "ev_Health", "be", "1>0");
register_event("CurWeapon", "CurrentWeapon", "be", "1=1");

register_logevent("logevent_round_start",2, "1=Round_Start")
register_logevent("logevent_round_end", 2, "1=Round_End")

register_menucmd(register_menuid("WeaponMethodMenu"),(1<<0)|(1<<1)|(1<<2),"weapon_method_pushed")
register_menucmd(register_menuid("PrimaryWeaponSelect"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9),"prim_weapons_pushed")
register_menucmd(register_menuid("SecWeaponSelect"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7),"sec_weapons_pushed")

set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET)

//Formats the Mod Name
formatex(g_ModName, charsmax(g_ModName), "Base Builder %s", VERSION)

register_dictionary("basebuilder.txt");

gmsgSayText = get_user_msgid("SayText")
gmsgStatusText = get_user_msgid("StatusText");
gHudSyncInfo = CreateHudSyncObj();
g_MaxPlayers = get_maxplayers()

if (tournymode != 1)
{
server_cmd("mp_limitteams 1")
server_cmd("mp_autoteambalance 1")
}
else
{
server_cmd("mp_limitteams 0")
server_cmd("mp_autoteambalance 0")
}
new roundnum = get_pcvar_num(g_pcvar_roundnum)
server_cmd("mp_freezetime 0")
server_cmd("mp_flashlight 0")
server_cmd("mp_maxrounds %d", roundnum)
server_cmd("mp_winlimit %d", roundnum)
server_cmd("mp_roundtime %d", get_pcvar_num(g_pcvar_roundtime))

g_iEntBarrier = find_ent_by_tname( -1, "barrier" );
server_cmd("sv_restart 1")
}

public plugin_natives()
{
register_native("bb_build_time","native_build_time", 1)
}

public ham_ItemDeploy_PostKnife(weapon_ent)
{
static owner
owner = get_pdata_cbase(weapon_ent, 41, 4)

if(is_user_alive(owner))
{
set_pev(owner, pev_viewmodel2, g_ZombieKnifeModel)
}
}

public plugin_precache()
{
new szModel[ 64 ];
formatex( szModel, charsmax( szModel ), "models/player/%s/%s.mdl", g_ZombieModel, g_ZombieModel );
engfunc( EngFunc_PrecacheModel, szModel );

new szKnifeModel[ 64 ];
formatex( szKnifeModel, charsmax( szKnifeModel ), "%s", g_ZombieKnifeModel );
engfunc( EngFunc_PrecacheModel, szKnifeModel );

engfunc( EngFunc_PrecacheSound, g_RoundStart )

new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_bomb_target"))
if (ent)
{
dllfunc(DLLFunc_Spawn, ent)
set_pev(ent, pev_solid, SOLID_NOT)
}

new iBuyZone = create_entity("info_map_parameters");
DispatchKeyValue(iBuyZone, "bombradius", "0");
DispatchKeyValue(iBuyZone, "buying", "3");
DispatchSpawn(iBuyZone);
}

public CurrentWeapon(id)
{
if (g_iszombie[id])
{
set_pev(id, pev_viewmodel2, g_ZombieKnifeModel);
}
return PLUGIN_HANDLED;
}

// Event Round Start (This is before freeze time)
public event_round_start()
{
g_RoundStartTime = get_gametime()
g_ZombiesReleased = false

if (get_pcvar_num(g_pcvar_resetent) == 1)
{
new cname[10], tname[7];
for (new iEnt = g_MaxPlayers+1; iEnt < MAXENTS; iEnt++)
{
if( is_valid_ent(iEnt) )
{
entity_get_string(iEnt, EV_SZ_classname, cname, 9);
entity_get_string(iEnt, EV_SZ_targetname, tname, 6);
if ( !IsBlockLocked(iEnt) && iEnt != g_iEntBarrier && equal(cname, "func_wall") && !equal(tname, "ignore"))
engfunc( EngFunc_SetOrigin, iEnt, Float:{ 0.0, 0.0, 0.0 } );
}
}
}
}

public cmdHelp(id)
{
set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 15.0, 0.1, 0.2, 2)
new nLen, szHelp[512]
nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "WELCOME_MSG", VERSION);
nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "BIND_KEY");
nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE1");
nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE2");
nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE3");
nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE4");
nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE5");
show_hudmessage(id, szHelp);
}

// Log Event Round Start (This is AFTER freeze time)
public logevent_round_start()
{
set_pev(g_iEntBarrier,pev_solid,SOLID_BSP)
set_pev(g_iEntBarrier,pev_rendermode,1)
DispatchKeyValue(g_iEntBarrier, "renderamt", "255");

set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
new nLen, szMsg[128]
nLen += format( szMsg[nLen], 127-nLen, "%L", LANG_SERVER, "WELCOME_MSG", VERSION);
nLen += format( szMsg[nLen], 127-nLen, "%L", LANG_SERVER, "BIND_KEY");
show_hudmessage(0, szMsg);

print_color(0, "%s %s ^x04- ^x01%L", formatmodname, VERSION, LANG_SERVER, "ROUND_MSG")
print_color(0, "%s Round: %d of %d", formatmodname, (g_RoundNum+1), g_pcvar_maxrounds)

remove_task(TASK_ROUND)
remove_task(30000)
remove_task(TASK_ID)

new iBuildTime = get_pcvar_num( g_pcvar_buildtime );
set_task(1.0, "CountDown", 30000, "", 0, "a", iBuildTime);
count_down = (iBuildTime-1);
set_task(float(iBuildTime), "Release_Zombies", TASK_ROUND)

if (get_pcvar_num(g_pcvar_basecalc) == 1)
set_task(5.0, "Base_Calc")

set_task(5.0, "Fix_Spawns")

g_CanBuild = true
Lockround = true

arrayset(g_MovingEnt, false, MAXENTS)
arrayset(g_EntOwner, 0, MAXENTS)
arrayset(g_OwnedEnts, 0, g_MaxPlayers+1)
set_task((get_cvar_float("mp_roundtime") * 60) - 21, "Lock_round", TASK_ID)
}

public Lock_round()
{
Lockround = false
}

public native_build_time() return g_CanBuild

public CountDown()
{
set_hudmessage(255, 255, 255, -1.0, 0.0, 0, 0.1, 0.9, 0.1, 0.2, 3)
show_hudmessage(0, "%L", LANG_SERVER, "BUILD_TIME", count_down--);

if (count_down < 0)
{
remove_task(30000);
}
}

//Resets stuff and swaps teams so they respawn correctly
public logevent_round_end()
{
if (!g_CanBuild && get_pcvar_num(g_pcvar_tournymode) != 1)
{
new players[32], num
get_players(players, num)

new player
for (new i = 0; i < num; i++)
{
player = players[i]
cs_set_user_team(player, cs_get_user_team(player) == CS_TEAM_T ? CS_TEAM_CT:CS_TEAM_T)

if (cs_get_user_team(player) == CS_TEAM_T)
{
g_iszombie[player] = true
g_ishuman[player] = false
}
if (cs_get_user_team(player) == CS_TEAM_CT)
{
g_ishuman[player] = true
g_iszombie[player] = false
}
}
print_color(0, "^x04%L", LANG_SERVER, "TEAMS_SWAPPED")
}

remove_task(TASK_ROUND)
remove_task(30000)
remove_task(TASK_ID)

return PLUGIN_HANDLED
}

//Death events for respanws and HUD information
public client_death(g_attacker, g_victim, wpnindex, hitplace, TK)
{
cmdStopEnt(g_victim)

set_hudmessage(_, _, _, _, _, _, _, _, _, _, 4);
show_hudmessage(g_victim, "");

g_isalive[g_victim] = false

if (g_iszombie[g_victim])
{
set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
show_hudmessage(g_victim, "%L", LANG_SERVER, "DEAD_ZOMBIE", get_pcvar_num(g_pcvar_zresptime));
set_task(get_pcvar_float(g_pcvar_zresptime), "Respawn_Zombie", g_victim)
}
if (g_ishuman[g_victim])
{
set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
show_hudmessage(g_victim, "%L", LANG_SERVER, "DEAD_SURVIVOR");
}
}

public ham_TakeDamage_Post(victim, inflictor, attacker, Float:damage, bits)
{
if(get_pcvar_num(g_pcvar_knockback) == 1 && access(victim, PAIN_SHOCK_FREE) && g_iszombie[victim])
{
set_pdata_float(victim, fPainShock, 1.0, 5)
}
}

public client_disconnected(id)
{
cmdStopEnt(id)

g_isconnected[id] = false
g_isalive[id] = false
g_ishuman[id] = false
g_iszombie[id] = false

return PLUGIN_CONTINUE
}

//Respawns late joiners, cts only if build time is still on
public client_putinserver(id)
{
set_task(7.0,"Respawn_Human",id);
g_isconnected[id] = true
firsttime[id] = true
ask[id] = true

my_color[id] = 0
new flags = get_user_flags(id)

for (new i = 0; i < sizeof(colors); i++){
if (flags & colors[i][access_flag]){
my_color[id] = i
break
}
}
}

public Release_Zombies()
{
g_CanBuild = false
g_ZombiesReleased = true
remove_task(30000);

new players[32], num
get_players(players, num)

new player
for(new i = 0; i < num; i++)
{
player = players[i]
if (g_isalive[player])
{
if (get_user_godmode(player))
set_user_godmode(player, 0)
if (g_ishuman[player])
{
cmdStopEnt(player)

new weapon[32]
get_pcvar_string(g_pcvar_givenades,weapon,31)

new he, flash, smoke
for(new i=0;i<strlen(weapon);i++)
{
switch(weapon[i])
{
case 'h': he++
case 'f': flash++
case 's': smoke++
}
}
if(he) give_item(player,"weapon_hegrenade"), cs_set_user_bpammo(player,CSW_HEGRENADE,he)
if(flash) give_item(player,"weapon_flashbang"), cs_set_user_bpammo(player,CSW_FLASHBANG,flash)
if(smoke) give_item(player,"weapon_smokegrenade"), cs_set_user_bpammo(player,CSW_SMOKEGRENADE,smoke)

if (g_PrimaryWeapon[player])
{
get_weaponname(g_PrimaryWeapon[player],weapon,31)
engclient_cmd(player, weapon);
}
}
}
}

set_pev(g_iEntBarrier,pev_solid,SOLID_NOT)
DispatchKeyValue(g_iEntBarrier, "renderamt", "0");

g_RoundNum++
set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
show_hudmessage(0, "%L", LANG_SERVER, "RELEASE_MSG");
client_cmd(0, "spk %s", g_RoundStart)
}

//Called on zombie death function
public Respawn_Zombie(id)
{
if (g_isconnected[id] && cs_get_user_team(id) == CS_TEAM_T)
{
if (get_user_health(id) == get_pcvar_float(g_pcvar_zombiehp) || !is_user_alive(id))
ExecuteHamB(Ham_CS_RoundRespawn, id)
else
client_print(id, print_center, "%L", LANG_SERVER, "FAIL_RESPAWN");
}
}

//Called on all players for late joiners, parent is above
public Respawn_Human(id)
{
if (!g_isconnected[id] || g_isalive[id] || cs_get_user_team(id) == CS_TEAM_SPECTATOR || cs_get_user_team(id) == CS_TEAM_UNASSIGNED)
return PLUGIN_HANDLED

if (!g_isalive[id] && g_iszombie[id])
ExecuteHamB(Ham_CS_RoundRespawn, id)

if (!g_isalive[id] && g_iszombie[id])
set_task(3.0,"Respawn_Human",id)

if (g_CanBuild)
{
if (!g_isalive[id])
ExecuteHamB(Ham_CS_RoundRespawn, id)

if (!g_isalive[id])
set_task(3.0,"Respawn_Human",id)
}
return PLUGIN_HANDLED
}

//Sets player health and weapons
public Add_Effects(id)
{
if (!g_isconnected[id] || !g_isalive[id])
return PLUGIN_HANDLED

strip_user_weapons(id)
give_item(id, "weapon_knife")

if (cs_get_user_team(id) == CS_TEAM_T)
{
if (g_CanBuild)
set_user_godmode(id, 1)

set_pev(id, pev_health, get_pcvar_float(g_pcvar_zombiehp)) // use decimal number
}
if (cs_get_user_team(id) == CS_TEAM_CT)
{
weapon_method_menu(id)
}
ShowHealth(id)
return PLUGIN_HANDLED
}

//AmmoX Ensures BackPack ammo is always full
public ev_AmmoX(id)
{
set_pdata_int(id, AMMO_SLOT + read_data(1), 200, 5)
}

public fw_GetGameDescription()
{
forward_return(FMV_STRING, g_ModName)

return FMRES_SUPERCEDE;
}

public ham_PlayerSpawn_Post(id)
{
if (!is_user_alive(id) || !cs_get_user_team(id))
return

set_task(1.0, "Add_Effects", id)
if (cs_get_user_team(id) == CS_TEAM_CT)
{
g_ishuman[id] = true
g_iszombie[id] = false
}
if (cs_get_user_team(id) == CS_TEAM_T)
{
g_iszombie[id] = true
g_ishuman[id] = false
}

g_isalive[id] = true
remove_task(id + MODELSET_TASK)
if (g_iszombie[id])
{
copy(g_PlayerModel[id], charsmax(g_PlayerModel[]), g_ZombieModel)
new currentmodel[32]
fm_get_user_model(id, currentmodel, charsmax(currentmodel))
if (!equal(currentmodel, g_PlayerModel[id]))
{
if (get_gametime() - g_RoundStartTime < 5.0)
set_task(5.0 * MODELCHANGE_DELAY, "fm_user_model_update", id + MODELSET_TASK)
else
fm_user_model_update(id + MODELSET_TASK)
}
}
else if (g_HasCustomModel[id])
{
fm_reset_user_model(id)
}
}

public fw_SetClientKeyValue(id, const infobuffer[], const key[])
{
if (g_HasCustomModel[id] && equal(key, "model"))
return FMRES_SUPERCEDE
return FMRES_IGNORED
}

public fw_ClientUserInfoChanged(id)
{
if (!g_HasCustomModel[id])
return FMRES_IGNORED
static currentmodel[32]
fm_get_user_model(id, currentmodel, charsmax(currentmodel))
if (!equal(currentmodel, g_PlayerModel[id]) && !task_exists(id + MODELSET_TASK))
fm_set_user_model(id + MODELSET_TASK)
return FMRES_IGNORED
}

public fm_user_model_update(taskid)
{
static Float:current_time
current_time = get_gametime()

if (current_time - g_ModelsTargetTime >= MODELCHANGE_DELAY)
{
fm_set_user_model(taskid)
g_ModelsTargetTime = current_time
}
else
{
set_task((g_ModelsTargetTime + MODELCHANGE_DELAY) - current_time, "fm_set_user_model", taskid)
g_ModelsTargetTime = g_ModelsTargetTime + MODELCHANGE_DELAY
}
}

public fm_set_user_model(player)
{
player -= MODELSET_TASK
engfunc(EngFunc_SetClientKeyValue, player, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", g_PlayerModel[player])
g_HasCustomModel[player] = true
}

stock fm_get_user_model(player, model[], len)
{
engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", model, len)
}

stock fm_reset_user_model(player)
{
g_HasCustomModel[player] = false
dllfunc(DLLFunc_ClientUserInfoChanged, player, engfunc(EngFunc_GetInfoKeyBuffer, player))
}

public cmdMoveEnt(id)
{
if (g_BuildBan[id] == true)
return PLUGIN_HANDLED

if (g_iszombie[id] && !access(id, AFTER_BUILD))
return PLUGIN_HANDLED

if (!g_CanBuild && !access(id, AFTER_BUILD))
{
client_print (id, print_center, "%L", LANG_SERVER, "FAIL_TIME_UP")
return PLUGIN_HANDLED
}

if (!g_isalive[id] && !access(id, DEAD_BUILD))
{
client_print (id, print_center, "%L", LANG_SERVER, "FAIL_DEAD")
return PLUGIN_HANDLED
}

if (g_pEnt[id] && is_valid_ent(g_pEnt[id]))
cmdStopEnt(id)

new ent, bodypart
get_user_aiming (id,ent,bodypart)

if (!is_valid_ent(ent) || ent == g_iEntBarrier)
{
return PLUGIN_HANDLED
}

if (ent <= g_MaxPlayers && g_isalive[ent])
{
return PLUGIN_HANDLED
}

if (IsBlockLocked(ent) || g_MovingEnt[ent])
{
return PLUGIN_HANDLED
}

if (get_pcvar_num(g_pcvar_claimable) == 1)
{
if (!g_EntOwner[ent])
{
if ((g_OwnedEnts[id]<get_pcvar_num(g_pcvar_maxclaimable)) || get_pcvar_num(g_pcvar_maxclaimable) == 0)
{
g_EntOwner[ent] = id
g_OwnedEnts[id]++
}
else
{
client_print (id, print_center, "%L", LANG_SERVER, "FAIL_MAXOWNED", get_pcvar_num(g_pcvar_maxclaimable))
//return PLUGIN_HANDLED
}
}
else if (g_EntOwner[ent] != id && !access(id, AFTER_BUILD))
{
client_print (id, print_center, "%L", LANG_SERVER, "FAIL_ALREADYOWNED")
return PLUGIN_HANDLED
}
}

new tname[7], cname[10];
entity_get_string(ent, EV_SZ_targetname, tname, 6);
entity_get_string(ent, EV_SZ_classname, cname, 9);
if (!equal(cname, "func_wall") || equal(tname, "ignore"))
{
return PLUGIN_HANDLED
}

new origin[3], entOrigin[3], Float:orig[3], Float:mins[3], Float:maxs[3], dist

entity_get_vector(ent, EV_VEC_origin, orig);
entity_get_vector(ent, EV_VEC_mins, mins);
entity_get_vector(ent, EV_VEC_maxs, maxs);

entOrigin[0] = floatround((mins[0] + maxs[0]) / 2 + orig[0]);
entOrigin[1] = floatround((mins[1] + maxs[1]) / 2 + orig[1]);
entOrigin[2] = floatround((mins[2] + maxs[2]) / 2 + orig[2]);

get_user_origin(id, origin);

dist = get_distance(origin, entOrigin);

new max = get_pcvar_num(g_pcvar_entmaxdist)
new min = get_pcvar_num(g_pcvar_entmindist)
if (min) //min
{
if(dist < min) //minimum
dist = get_pcvar_num(g_pcvar_entsetdist);
}

if (max) //maximum
{
if (dist > max)
return PLUGIN_HANDLED
}

DispatchKeyValue(ent, "rendermode", "1");
DispatchKeyValue(ent, "renderamt", "100");
DispatchKeyValue(ent, "rendercolor", colors[my_color[id]][color]);

g_MovingEnt[ent] = true
g_EntMover[ent] = id
g_pEnt[id] = ent
g_pDist[id] = dist

if (!g_CanBuild && access(id, AFTER_BUILD))
{
new adminauthid[35],adminname[35]
get_user_authid (id,adminauthid,34)
get_user_name(id,adminname,34)
Log("[MOVE] Admin: %s || SteamID: %s moved an entity", adminname, adminauthid)
}

return PLUGIN_HANDLED
}

/*public fw_CmdStart(id, uc, random)
{
new buttons = get_uc(uc, UC_Buttons)
if(g_CanBuild && (buttons & IN_ATTACK))
{
buttons &= ~IN_ATTACK
set_uc(uc, UC_Buttons, buttons)
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}*/

public fw_Player_PreThink(id)
{
if (!g_pEnt[id] || !is_valid_ent(g_pEnt[id]))
return FMRES_HANDLED

new buttons = pev(id, pev_button)
if(buttons & IN_ATTACK)
{
g_pDist[id] += 3;

if (g_pDist[id] > get_pcvar_num(g_pcvar_entmaxdist))
{
g_pDist[id] = get_pcvar_num(g_pcvar_entmaxdist)
client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_MAX")
}
else
client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_PUSH")
}
else if(buttons & IN_ATTACK2)
{
g_pDist[id] -= 3;

if (g_pDist[id] < get_pcvar_num(g_pcvar_entsetdist))
{
g_pDist[id] = get_pcvar_num(g_pcvar_entsetdist)
client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_MIN")
}
else
client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_PULL")
}

GrabThink(id)

return FMRES_HANDLED
}

public GrabThink(id)
{
new Float:aiming[3], origin[3], Float:mins[3], Float:maxs[3], Float:neworigin[3], ent

ent = g_pEnt[id]

if (!g_isconnected[id] || (ent <= g_MaxPlayers)? !g_isconnected[id]:!is_valid_ent(ent))
{
cmdStopEnt(id)
return PLUGIN_HANDLED
}

entity_get_vector(ent, EV_VEC_mins, mins);
entity_get_vector(ent, EV_VEC_maxs, maxs);

get_user_origin(id, origin, 3);
IVecFVec(origin, aiming);
get_user_origin(id, origin);

aiming[0] -= float(origin[0]);
aiming[1] -= float(origin[1]);
aiming[2] -= float(origin[2]);

new Float:scalar = float(g_pDist[id]) / vector_length(aiming);

origin[0] += floatround(aiming[0] * scalar - (mins[0] + maxs[0]) / 2);
origin[1] += floatround(aiming[1] * scalar - (mins[1] + maxs[1]) / 2);
origin[2] += floatround(aiming[2] * scalar - (mins[2] + maxs[2]) / 2);

IVecFVec(origin, neworigin);
entity_set_origin(ent, neworigin);

return PLUGIN_CONTINUE
}

public cmdStopEnt(id)
{
g_MovingEnt[g_pEnt[id]] = false
DispatchKeyValue(g_pEnt[id], "rendermode", "0");
DispatchKeyValue(g_pEnt[id], "renderamt", "255");
DispatchKeyValue(g_pEnt[id], "rendercolor", "0.0 0.0 0.0");
if (get_pcvar_num(g_pcvar_blockgrav) == 1)
drop_to_floor(g_pEnt[id])
g_EntMover[g_pEnt[id]] = 0
g_LastMover[g_pEnt[id]] = id
g_pEnt[id] = 0
}

public fw_Traceline(Float:start[3], Float:end[3], conditions, id, trace)
{
if (!is_user_connected(id)) return PLUGIN_HANDLED

new ent = get_tr2(trace, TR_pHit)

if (pev_valid(ent))
{
new ent,body
get_user_aiming(id,ent,body)

new cname[10], tname[7];
entity_get_string(ent, EV_SZ_classname, cname, 9);
entity_get_string(ent, EV_SZ_targetname, tname, 6);
if (equal(cname, "func_wall") && !equal(tname, "ignore") && ent != g_iEntBarrier && get_pcvar_num(g_pcvar_showmovers) == 1)
{
if (g_CanBuild || access(id, ADMIN_KICK))
{
if (IsBlockLocked(ent))
{
set_hudmessage(255, 0, 0, -1.0, 0.55, 1, 0.01, 3.0, 0.01, 0.01);
ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_LOCKED");
return PLUGIN_HANDLED
}
set_hudmessage(0, 50, 255, -1.0, 0.55, 1, 0.01, 3.0, 0.01, 0.01);
if (get_pcvar_num(g_pcvar_claimable) == 0)
{
new currentmover[35], lastmover[35]
if (g_EntMover[ent])
{
get_user_name(g_EntMover[ent],currentmover,34)
if (!g_LastMover[ent]) ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_INFO1", currentmover);
}
if (g_LastMover[ent])
{
get_user_name(g_LastMover[ent],lastmover,34)
if (!g_EntMover[ent]) ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_INFO2", lastmover);
}
if (g_LastMover[ent] && g_EntMover[ent]) ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_INFO3", currentmover, lastmover);
else if (!g_LastMover[ent] && !g_EntMover[ent]) ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_INFO4");
}
else
{
if (g_EntOwner[ent])
{
new entowner[35]
get_user_name(g_EntOwner[ent],entowner,34)
ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_OWNER", entowner);
}
else
{
ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_OWNER_NONE");
}
}
}
}
}
if (!pev_valid(ent)) ClearSyncHud(id, gHudSyncInfo);

return PLUGIN_HANDLED
}

public cmdLockBlock(id)
{
new ent, bodypart
get_user_aiming (id,ent,bodypart)

new tname[7], cname[10];
entity_get_string(ent, EV_SZ_targetname, tname, 6);
entity_get_string(ent, EV_SZ_classname, cname, 9);

if ((Lockround || !access(id, ADMIN_VOTE)) && !access(id, LOCK_BLOCKS))
{
if (access(id, ADMIN_VOTE))
{
client_print(id, print_chat, "[X-BB] You can only lock base at last 20 seconds before the round end!");
}
return PLUGIN_HANDLED;
}

if (!ent || !is_valid_ent(ent) || is_user_alive(ent) || ent == g_iEntBarrier || !equal(cname, "func_wall") || equal(tname, "ignore")) return PLUGIN_HANDLED

if (!IsBlockLocked(ent) && !g_MovingEnt[ent])
{
LockBlock(ent)
DispatchKeyValue(ent, "rendermode", "1");
DispatchKeyValue(ent, "rendercolor", "125.0 0.0 0.0");

g_OwnedEnts[g_EntOwner[ent]]--
g_EntOwner[ent] = 0
}
else if (IsBlockLocked(ent))
{
UnlockBlock(ent)
DispatchKeyValue(ent, "rendermode", "0");
}
return PLUGIN_HANDLED
}

public cmdRemoveClaim(id)
{
if (!access(id, LOCK_BLOCKS))
return PLUGIN_HANDLED

new ent, bodypart
get_user_aiming (id,ent,bodypart)

new tname[7], cname[10];
entity_get_string(ent, EV_SZ_targetname, tname, 6);
entity_get_string(ent, EV_SZ_classname, cname, 9);

if (!ent || !is_valid_ent(ent) || is_user_alive(ent) || ent == g_iEntBarrier || !equal(cname, "func_wall") || equal(tname, "ignore") || IsBlockLocked(ent)) return PLUGIN_HANDLED

g_OwnedEnts[g_EntOwner[ent]]--
g_EntOwner[ent] = 0

return PLUGIN_HANDLED
}

public cmdRemoveEnt(id)
{
if (!access(id, REMOVE_BLOCK))
return PLUGIN_HANDLED

if (!g_isalive[id] && !access(id, DEAD_REMOVE))
{
client_print (id, print_center, "%L", LANG_SERVER, "FAIL_REMOVE")
return PLUGIN_HANDLED
}

new ent, bodypart
get_user_aiming (id,ent,bodypart)

if(!is_valid_ent(ent) || ent == g_iEntBarrier || (ent <= g_MaxPlayers && g_isalive[ent]))
return PLUGIN_HANDLED

if(IsBlockLocked(ent) || g_MovingEnt[ent])
return PLUGIN_HANDLED

new tname[7], cname[10];
entity_get_string(ent, EV_SZ_targetname, tname, 6);
entity_get_string(ent, EV_SZ_classname, cname, 9);
if(!equal(cname, "func_wall"))
return PLUGIN_HANDLED

if(equal(tname, "ignore"))
return PLUGIN_HANDLED

g_OwnedEnts[g_EntOwner[ent]]--
g_EntOwner[ent] = 0

remove_entity(ent)

new adminauthid[35],adminname[35]
get_user_authid (id,adminauthid,34)
get_user_name(id,adminname,34)
Log("[REMOVE] Admin: %s || SteamID: %s removed an entity", adminname, adminauthid)

return PLUGIN_HANDLED
}

// Ham Weapon Deploy Forward (forces knife only)
public ham_ItemDeploy_Post(weapon_ent)
{
static owner
owner = get_pdata_cbase(weapon_ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS);

static weaponid
weaponid = cs_get_weapon_id(weapon_ent)

g_CurrentWeapon[owner] = weaponid

if (g_iszombie[owner] && !((1<<weaponid) & ZOMBIE_ALLOWED_WEAPONS_BITSUM))
{
g_CurrentWeapon[owner] = CSW_KNIFE
engclient_cmd(owner, "weapon_knife")
}
else if (g_CanBuild && g_ishuman[owner])
{
g_CurrentWeapon[owner] = CSW_KNIFE
engclient_cmd(owner, "weapon_knife")
client_print(owner, print_center, "%L", LANG_SERVER, "FAIL_KNIFE_ONLY");
}
}

public msgRoundEnd(const MsgId, const MsgDest, const MsgEntity)
{
static Message[192]
get_msg_arg_string(2, Message, 191)

set_hudmessage(255, 255, 255, -1.0, 0.40, 0, 6.0, 6.0, 0.1, 0.2, 1)

if(equal(Message, "#Game_bomb_drop"))
return PLUGIN_HANDLED

if (equal(Message, "#Terrorists_Win"))
{
show_hudmessage(0, "Zombies Win!")
set_msg_arg_string(2, "")
switch (random_num(1, 4))
{
case 1: client_cmd(0, "spk ambience/the_horror1.wav")
case 2: client_cmd(0, "spk ambience/the_horror2.wav")
case 3: client_cmd(0, "spk ambience/the_horror3.wav")
case 4: client_cmd(0, "spk ambience/the_horror4.wav")
}
return PLUGIN_HANDLED
}
else if (equal(Message, "#Target_Saved") || equal(Message, "#CTs_Win"))
{
show_hudmessage(0, "Builders Win!")
set_msg_arg_string(2, "")
switch (random_num(1, 3))
{
case 1: client_cmd(0, "spk barney/ba_another.wav")
case 2: client_cmd(0, "spk barney/ba_firepl.wav")
case 3: client_cmd(0, "spk barney/ba_seethat.wav")
}
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}

public ham_WeaponCleaner_Post(iEntity)
{
call_think(iEntity)
}

public message_show_menu(msgid, dest, id)
{
if (!should_autojoin(id))
return PLUGIN_CONTINUE

static team_select[] = "#Team_Select"
static menu_text_code[sizeof team_select]
get_msg_arg_string(4, menu_text_code, sizeof menu_text_code - 1)
if (!equal(menu_text_code, team_select))
return PLUGIN_CONTINUE

set_force_team_join_task(id, msgid)

return PLUGIN_HANDLED
}

public message_vgui_menu(msgid, dest, id)
{
if (get_msg_arg_int(1) != TEAM_SELECT_VGUI_MENU_ID || !should_autojoin(id))
return PLUGIN_CONTINUE

set_force_team_join_task(id, msgid)

return PLUGIN_HANDLED
}

bool:should_autojoin(id)
{
return (!get_user_team(id))
}

set_force_team_join_task(id, menu_msgid)
{
static param_menu_msgid[2]
param_menu_msgid[0] = menu_msgid
set_task(AUTO_TEAM_JOIN_DELAY, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid)
}

public task_force_team_join(menu_msgid[], id)
{
if (get_user_team(id))
return

static team[2], class[2]
get_pcvar_string(g_pcvar_team, team, sizeof team - 1)
get_pcvar_string(g_pcvar_class, class, sizeof class - 1)
force_team_join(id, menu_msgid[0], team, class)
}

stock force_team_join(id, menu_msgid, /* const */ team[] = "5", /* const */ class[] = "0")
{
static jointeam[] = "jointeam"
if (class[0] == '0') {
engclient_cmd(id, jointeam, team)
return
}

static msg_block, joinclass[] = "joinclass"
msg_block = get_msg_block(menu_msgid)
set_msg_block(menu_msgid, BLOCK_SET)
engclient_cmd(id, jointeam, team)
engclient_cmd(id, joinclass, class)
set_msg_block(menu_msgid, msg_block)
}

public clcmd_changeteam(id)
{
if (g_CanBuild)
weapon_method_menu(id)
else
client_print (id, print_center, "%L", LANG_SERVER, "FAIL_WEAPONS")

if (g_iszombie[id])
client_print (id, print_center, "%L", LANG_SERVER, "FAIL_ZOMBIE")

return PLUGIN_HANDLED
}

public clcmd_drop(id)
{
client_print (id, print_center, "%L", LANG_SERVER, "FAIL_DROP")
return PLUGIN_HANDLED
}

public clcmd_buy(id)
{
client_print (id, print_center, "%L", LANG_SERVER, "FAIL_BUY")
return PLUGIN_HANDLED
}

public fw_Suicide(id)
{
client_print (id, print_center, "%L", LANG_SERVER, "FAIL_SUICIDE")
console_print (id, "%L", LANG_SERVER, "FAIL_SUICIDE")
return FMRES_SUPERCEDE;
}

public Base_Calc()
{
new players[32], num, ct, basenum
get_players(players, num)
new player
for(new i = 0; i < num; i++)
{
player = players[i]
if (cs_get_user_team(player) == CS_TEAM_CT)
ct++

if (ct < 6)
basenum = 2
else
basenum = (ct/3)
}
print_color(0, "%s %L", formatmodname, LANG_SERVER, "BASE_CALC", basenum)
}

public cmdBadSpawn_Survivor(id)
{
if (access(id, BAD_SPAWN))
{
new players[32], num
get_players(players, num)

new player
for(new i = 0; i < num; i++)
{
player = players[i]
if (cs_get_user_team(player) == CS_TEAM_CT && !is_user_alive(player) && g_isconnected[player] && g_CanBuild)
ExecuteHamB(Ham_CS_RoundRespawn, player)
}
}
}

public Fix_Spawns()
{
new players[32], num
get_players(players, num)

new player
for(new i = 0; i < num; i++)
{
player = players[i]
if (cs_get_user_team(player) == CS_TEAM_CT && !is_user_alive(player) && g_isconnected[player] && g_CanBuild)
ExecuteHamB(Ham_CS_RoundRespawn, player)
}
}

public cmdBadSpawn(id)
{
if (g_isconnected[id] && g_ishuman[id] && g_CanBuild)
ExecuteHamB(Ham_CS_RoundRespawn, id)
}

public cmdBadSpawn_Zombie(id)
{
if (access(id, BAD_SPAWN))
{
new players[32], num
get_players(players, num)

new player
for(new i = 0; i < num; i++)
{
player = players[i]
if (cs_get_user_team(player) == CS_TEAM_T && !is_user_alive(player) && g_isconnected[player])
ExecuteHamB(Ham_CS_RoundRespawn, player)
}
}
}

public msgStatusIcon(const iMsgId, const iMsgDest, const iPlayer)
{
if(is_user_alive(iPlayer))
{
static szMsg[8]
get_msg_arg_string(2, szMsg, 7)

if(equal(szMsg, "buyzone"))
{
set_pdata_int(iPlayer, OFFSET_BUYZONE, get_pdata_int(iPlayer, OFFSET_BUYZONE) & ~(1<<0))
return PLUGIN_HANDLED
}
}
return PLUGIN_CONTINUE
}

public cmdBuildBan(id)
{
if (access(id, BUILD_BAN))
{
new arg[32]
read_argv(1, arg, 31)
new player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY)
g_BuildBan[player] = true
cmdStopEnt(player)

new adminauthid[35],adminname[35],playername[35],playerauthid[35]
get_user_name(id,adminname,34)
get_user_authid (id,adminauthid,34)
get_user_name(player, playername, 34)
get_user_authid (player,playerauthid,34)
Log("[MOVE] Admin: %s || SteamID: %s banned Player: %s || SteamID: %s from building", adminname, adminauthid, playername, playerauthid)

client_print(id, print_console, "%L", LANG_SERVER, "BUILD_BAN1", playername)
client_print(player, print_center, "%L", LANG_SERVER, "BUILD_BAN2")
}
}

public cmdBuildUnban(id)
{
if (access(id, BUILD_BAN))
{
new arg[32], playername[35]

read_argv(1, arg, 31)
new player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY)
get_user_name(player, playername, 34)
client_print(id, print_console, "%L", LANG_SERVER, "UNBUILD_BAN1", playername)
g_BuildBan[player] = false
print_color(player, "%s %L", formatmodname, LANG_SERVER, "UNBUILD_BAN2")
}
}

public cmdRevive(id)
{
if (access(id, REVIVE))
{
new arg[32]
read_argv(1, arg, 31)
new player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY)

if (is_user_alive(player))
{
client_print(id, print_console, "%L", LANG_SERVER, "FAIL_REVIVE")
return PLUGIN_HANDLED
}

ExecuteHamB(Ham_CS_RoundRespawn, player)

new adminauthid[35],adminname[35],playername[35],playerauthid[35]
get_user_name(id,adminname,34)
get_user_authid (id,adminauthid,34)
get_user_name(player, playername, 34)
get_user_authid (player,playerauthid,34)
Log("[REVIVE] Admin: %s || SteamID: %s revived Player: %s || SteamID: %s", adminname, adminauthid, playername, playerauthid)

client_print(id, print_console, "%L", LANG_SERVER, "REVIVE1", playername)
client_print(player, print_center, "%L", LANG_SERVER, "REVIVE2")
}
return PLUGIN_HANDLED
}

public cmdSwap(id)
{
if (access(id, SWAP))
{
new arg[32]
read_argv(1, arg, 31)
new player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY)

if (!is_user_connected(player)) return PLUGIN_HANDLED

cs_set_user_team(player, cs_get_user_team(player) == CS_TEAM_T ? CS_TEAM_CT:CS_TEAM_T)

if (cs_get_user_team(player) == CS_TEAM_T)
{
g_iszombie[player] = true
g_ishuman[player] = false
}
if (cs_get_user_team(player) == CS_TEAM_CT)
{
g_ishuman[player] = true
g_iszombie[player] = false
}

if (is_user_alive(player))
ExecuteHamB(Ham_CS_RoundRespawn, player)

new adminauthid[35],adminname[35],playername[35],playerauthid[35]
get_user_name(id,adminname,34)
get_user_authid (id,adminauthid,34)
get_user_name(player, playername, 34)
get_user_authid (player,playerauthid,34)
Log("[TEAM-SWAP] Admin: %s || SteamID: %s swapped Player: %s || SteamID: %s", adminname, adminauthid, playername, playerauthid)

client_print(id, print_console, "%L", LANG_SERVER, "SWAP1", playername)
client_print(player, print_center, "%L", LANG_SERVER, "SWAP2")
}
return PLUGIN_HANDLED
}

public cmdStartRound(id)
{
if (access(id, START_ROUND))
{
if (count_down<10)
{
client_print(id, print_console, "%L", LANG_SERVER, "FAIL_START_ROUND")
return PLUGIN_HANDLED
}

Release_Zombies()

new adminauthid[35],adminname[35]
get_user_name(id,adminname,34)
get_user_authid (id,adminauthid,34)
Log("[START_ROUND] Admin: %s || SteamID: %s started the round", adminname, adminauthid)

client_print(id, print_center, "%L", LANG_SERVER, "START_ROUND")
client_print(id, print_chat, "^x04%L", LANG_SERVER, "START_ROUND")
}
return PLUGIN_HANDLED
}

public cmdCheckRound(id)
{
if (g_ZombiesReleased) print_color(id, "%s Round: %d of %d", formatmodname, (g_RoundNum), g_pcvar_maxrounds)
else if (!g_ZombiesReleased) print_color(id, "%s Round: %d of %d", formatmodname, (g_RoundNum+1), g_pcvar_maxrounds)
}

public msgStatusValue()
{
//Block the name info, of person you aim at
set_msg_block(gmsgStatusText, BLOCK_SET);
}

public ev_SetTeam(id)
{
g_friend[id] = read_data(2)
}

public ev_ShowStatus(id) //called when id looks at someone
{
new name[32], pid = read_data(2);
new stats[8],bodyhits[8]

get_user_name(pid, name, 31);
new color1 = 0, color2 = 0;

if (get_user_team(pid) == 1)
color1 = 255;
else
color2 = 255;

new Float:height=0.35
//height=0.60

if (g_friend[id] == 1) // friend
{
new clip, ammo, wpnid = get_user_weapon(pid, clip, ammo);
new wpnname[32];

if (wpnid)
xmod_get_wpnname(wpnid, wpnname, 31);

new rank = get_user_stats(pid, stats, bodyhits)

if(g_iszombie[id])
{
set_hudmessage(color1, 50, color2, -1.0, height, 1, 0.01, 3.0, 0.01, 0.01);
ShowSyncHudMsg(id, gHudSyncInfo, "> ZOMBIE <^n%L", LANG_SERVER, "PLAYER_INFO1", name, rank, get_user_health(pid), wpnname);
}
else if(g_ishuman[id])
{
set_hudmessage(color1, 50, color2, -1.0, height, 1, 0.01, 3.0, 0.01, 0.01);
ShowSyncHudMsg(id, gHudSyncInfo, "> BUILDER <^n%L", LANG_SERVER, "PLAYER_INFO1", name, rank, get_user_health(pid), wpnname);
}

}
if (g_friend[id] != 1) //enemy
{
new clip, ammo, wpnid = get_user_weapon(pid, clip, ammo);
new wpnname[32];

if (wpnid)
xmod_get_wpnname(wpnid, wpnname, 31);

new rank = get_user_stats(pid, stats, bodyhits)

if(g_iszombie[id])
{
set_hudmessage(color1, 50, color2, -1.0, height, 1, 0.01, 3.0, 0.01, 0.01);
ShowSyncHudMsg(id, gHudSyncInfo, "> BUILDER <^n%L", LANG_SERVER, "PLAYER_INFO2", name, rank, get_user_health(pid), wpnname);
}
else if(g_ishuman[id])
{
set_hudmessage(color1, 50, color2, -1.0, height, 1, 0.01, 3.0, 0.01, 0.01);
ShowSyncHudMsg(id, gHudSyncInfo, "> ZOMBIE <^n%L", LANG_SERVER, "PLAYER_INFO2", name, rank, get_user_health(pid), wpnname);
}
}
}

public ev_HideStatus(id)
{
ClearSyncHud(id, gHudSyncInfo);
}

public weapon_method_menu(id)
{
if(firsttime[id])
{
firsttime[id] = false
prim_weapons_menu(id,0)
}
else
{
cur_offset[id] = 0
if(ask[id])
{
show_menu(id,(1<<0)|(1<<1)|(1<<2),"Weapon Selection Method^n^n1. New Guns^n2. Last Guns^n3. Last Guns + Save",-1,"WeaponMethodMenu")
}
else
{
give_weapons(id)
}
}
}

public weapon_method_pushed(id,key)
{
switch(key)
{
case 0:
{
ask[id] = true
prim_weapons_menu(id,0)
}
case 1:
{
ask[id] = true
give_weapons(id)
}
case 2:
{
print_color(id, "%s %L", formatmodname, LANG_SERVER, "GUNS_MSG")
ask[id] = false
give_weapons(id)
}
}
return PLUGIN_HANDLED;
}

public prim_weapons_menu(id,offset)
{
if(offset<0) offset = 0

new cvar_value[32]
get_pcvar_string(g_pcvar_allowedweps,cvar_value,31)
new flags = read_flags(cvar_value)

new keys, curnum, menu[2048]
for(new i=offset;i<19;i++)
{
if(flags & power(2,i))
{
options_on_menu[curnum][id] = i
keys += (1<<curnum)

curnum++
format(menu,2047,"%s^n%d. %s",menu,curnum,WEAPONNAMES[i])

if(curnum==8)
break;
}
}

format(menu,2047,"\yPrimary Weapon:\w^n%s^n",menu)
if(curnum==8 && offset<12)
{
keys += (1<<8)
format(menu,2047,"%s^n9. Next",menu)
}
if(offset)
{
keys += (1<<9)
format(menu,2047,"%s^n0. Back",menu)
}

show_menu(id,keys,menu,-1,"PrimaryWeaponSelect")
}

public prim_weapons_pushed(id,key)
{
if(key<8)
{
weapon_picked[0][id] = options_on_menu[key][id]
cur_offset[id] = 0
sec_weapons_menu(id,0)
}
else
{
if(key==8)
cur_offset[id] += 8
if(key==9)
cur_offset[id] -= 8
prim_weapons_menu(id,cur_offset[id])
}
return ;
}

public sec_weapons_menu(id,offset)
{
if(offset<0) offset = 0

new cvar_value[32]
get_pcvar_string(g_pcvar_allowedweps,cvar_value,31)
new flags = read_flags(cvar_value)

new keys, curnum, menu[2048]
for(new i=18;i<24;i++)
{
if(flags & power(2,i))
{
options_on_menu[curnum][id] = i
keys += (1<<curnum)

curnum++
format(menu,2047,"%s^n%d. %s",menu,curnum,WEAPONNAMES[i])
}
}

format(menu,2047,"\ySecondary Weapon:\w^n%s",menu)

show_menu(id,keys,menu,-1,"SecWeaponSelect")
}

public sec_weapons_pushed(id,key)
{
if(key<8)
{
weapon_picked[1][id] = options_on_menu[key][id]
}
give_weapons(id)
return ;
}

public give_weapons(id)
{
strip_user_weapons(id)

give_item(id,"weapon_knife")

new weapon[32]
new csw = csw_contant(weapon_picked[0][id])
get_weaponname(csw,weapon,31)
give_item(id,weapon)
cs_set_user_bpammo(id,csw,999)
g_PrimaryWeapon[id] = csw

csw = csw_contant(weapon_picked[1][id])
get_weaponname(csw,weapon,31)
give_item(id,weapon)
cs_set_user_bpammo(id,csw,999)
}

public csw_contant(weapon)
{
new num = 29
switch(weapon)
{
case 0: num = 3
case 1: num = 5
case 2: num = 7
case 3: num = 8
case 4: num = 12
case 5: num = 13
case 6: num = 14
case 7: num = 15
case 8: num = 18
case 9: num = 19
case 10: num = 20
case 11: num = 21
case 12: num = 22
case 13: num = 23
case 14: num = 24
case 15: num = 27
case 16: num = 28
case 17: num = 30
case 18: num = 1
case 19: num = 10
case 20: num = 11
case 21: num = 16
case 22: num = 17
case 23: num = 26
case 24:
{
new s_weapon[32]

get_pcvar_string(g_pcvar_allowedweps,s_weapon,31)

new flags = read_flags(s_weapon)
do
{
num = random_num(0,18)
if(!(num & flags))
{
num = -1
}
}
while(num==-1)
num = csw_contant(num)
}
case 25:
{
new s_weapon[32]

get_pcvar_string(g_pcvar_allowedweps,s_weapon,31)

new flags = read_flags(s_weapon)
do
{
num = random_num(18,23)
if(!(num & flags))
{
num = -1
}
}
while(num==-1)
num = csw_contant(num)
}
}
return num;
}


public cmdGuns(id)
{
if(!g_isalive[id] || !g_isconnected[id] || !g_CanBuild)
return PLUGIN_HANDLED

if(!g_ishuman[id])
return PLUGIN_HANDLED

ask[id] = true
weapon_method_menu(id)
return PLUGIN_HANDLED
}

public ev_Health(id)
{
ShowHealth(id);
}

public ShowHealth(id)
{
if (is_user_alive(id))
{
new Float:hud_time = get_pcvar_float(g_pcvar_healthtime);

set_hudmessage(255, 255, 255, -1.0, 0.9, 0, hud_time, hud_time, 0.1, 0.2, 4);
show_hudmessage(id, "%L", LANG_SERVER, "PLAYER_HEALTH", get_user_health(id));

set_task(hud_time - 0.1, "ShowHealth", id);
}
}

Log(const message_fmt[], any:...)
{
static message[256];
vformat(message, sizeof(message) - 1, message_fmt, 2);

static filename[96];
static dir[64];
if( !dir[0] )
{
get_basedir(dir, sizeof(dir) - 1);
add(dir, sizeof(dir) - 1, "/logs");
}

format_time(filename, sizeof(filename) - 1, "%m-%d-%Y");
format(filename, sizeof(filename) - 1, "%s/BB_ACTIVITY_%s.log", dir, filename);

log_to_file(filename, "%s", message);
}

print_color(target, const message[], any:...)
{
static buffer[512], i, argscount
argscount = numargs()

// Send to everyone
if (!target)
{
static player
for (player = 1; player <= g_MaxPlayers; player++)
{
if (!g_isconnected[player])
continue;

static changed[5], changedcount
changedcount = 0

for (i = 2; i < argscount; i++)
{
if (getarg(i) == LANG_PLAYER)
{
setarg(i, 0, player)
changed[changedcount] = i
changedcount++
}
}
vformat(buffer, charsmax(buffer), message, 3)

message_begin(MSG_ONE_UNRELIABLE, gmsgSayText, _, player)
write_byte(player)
write_string(buffer)
message_end()

for (i = 0; i < changedcount; i++)
setarg(changed[i], 0, LANG_PLAYER)
}
}
// Send to specific target
else
{
vformat(buffer, charsmax(buffer), message, 3)

message_begin(MSG_ONE, gmsgSayText, _, target)
write_byte(target)
write_string(buffer)
message_end()
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1030\\ f0\\ fs16 \n\\ par }
*/
Hello, I've did task for my Lock. There is a problem the unlock getting impacted so VIP will need to wait until 20 seconds for unlock, tried to do something but didn'work.
I think its task problem

Full codes :
Unlock should be at any times for VIP. Admin can lock/unlock at any times Define LOCK_BLOCKS

PHP:
// Log Event Round Start (This is AFTER freeze time)
public logevent_round_start()
{
	set_pev(g_iEntBarrier,pev_solid,SOLID_BSP)
	set_pev(g_iEntBarrier,pev_rendermode,1)
	DispatchKeyValue(g_iEntBarrier, "renderamt", "255");
	
	set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
	new nLen, szMsg[128]
	nLen += format( szMsg[nLen], 127-nLen, "%L", LANG_SERVER, "WELCOME_MSG", VERSION);
	nLen += format( szMsg[nLen], 127-nLen, "%L", LANG_SERVER, "BIND_KEY");
	show_hudmessage(0, szMsg);
	
	print_color(0, "%s %s ^x04- ^x01%L", formatmodname, VERSION, LANG_SERVER, "ROUND_MSG")
	print_color(0, "%s Round: %d of %d", formatmodname, (g_RoundNum+1), g_pcvar_maxrounds)
	
	remove_task(TASK_ROUND)
	remove_task(30000)
	remove_task(TASK_ID)
	
	new iBuildTime = get_pcvar_num( g_pcvar_buildtime );
	set_task(1.0, "CountDown", 30000, "", 0, "a", iBuildTime);
	count_down = (iBuildTime-1);
	set_task(float(iBuildTime), "Release_Zombies", TASK_ROUND)
	
	if (get_pcvar_num(g_pcvar_basecalc) == 1)
		set_task(5.0, "Base_Calc")
		
	set_task(5.0, "Fix_Spawns")
	
	g_CanBuild = true
	Lockround = true
	
	arrayset(g_MovingEnt, false, MAXENTS)
	arrayset(g_EntOwner, 0, MAXENTS)
	arrayset(g_OwnedEnts, 0, g_MaxPlayers+1)
	set_task((get_cvar_float("mp_roundtime") * 60) - 21, "Lock_round", TASK_ID)
}
PHP:
public Lock_round()
{
	Lockround = false
}
Lock codes
PHP:
public cmdLockBlock(id)
{
	new ent, bodypart
	get_user_aiming (id,ent,bodypart)
    
	new tname[7], cname[10];
	entity_get_string(ent, EV_SZ_targetname, tname, 6);
	entity_get_string(ent, EV_SZ_classname, cname, 9);
    
	if ((Lockround || !access(id, ADMIN_VOTE)) && !access(id, LOCK_BLOCKS))
    {
        if (access(id, ADMIN_VOTE))
        {
            client_print(id, print_chat, "[X-BB] You can only lock base at last 20 seconds before the round end!");
        }
        return PLUGIN_HANDLED;
    }
	
	if (!ent || !is_valid_ent(ent) || is_user_alive(ent) || ent == g_iEntBarrier || !equal(cname, "func_wall") || equal(tname, "ignore")) return PLUGIN_HANDLED
    
	if (!IsBlockLocked(ent) && !g_MovingEnt[ent])
	{
        LockBlock(ent)
        DispatchKeyValue(ent, "rendermode", "1");
        DispatchKeyValue(ent, "rendercolor", "125.0 0.0 0.0");
        
        g_OwnedEnts[g_EntOwner[ent]]--
        g_EntOwner[ent] = 0
    }
	else if (IsBlockLocked(ent))
	{
		UnlockBlock(ent)
		DispatchKeyValue(ent, "rendermode", "0");
	}
	return PLUGIN_HANDLED
}[/PHP
 
Сообщения
956
Реакции
51
Помог
10 раз(а)
maCxa, друг, я тебе уже 150 раз написал, то в личку то в дискорд, что нужно игнорировать с помощью проверок вип и админа, незнаю как тебе еще объяснить!!! Не правильно сделал условиям!!!
Код:
    if ((Lockround || !access(id, ADMIN_VOTE)) && !access(id, LOCK_BLOCKS))
    {
        if (access(id, ADMIN_VOTE))
 
Сообщения
5
Реакции
0
maCxa, друг, я тебе уже 150 раз написал, то в личку то в дискорд, что нужно игнорировать с помощью проверок вип и админа, незнаю как тебе еще объяснить!!! Не правильно сделал условиям!!!
Код:
    if ((Lockround || !access(id, ADMIN_VOTE)) && !access(id, LOCK_BLOCKS))
    {
        if (access(id, ADMIN_VOTE))
We never talked on Discord, maybe you had talked with a other guy.
I will explain ADMIN_VOTE its for VIP. That the define for locking base for get access of locking base during last 20 seconds of the end round. LOCK_BLOCKS that define its for ADMINs so they can lock base at any time and unlocking too. The problem was of VIP can't unlock base during at any times, so they will need to wait 20 seconds for unlock their base. Im just trynna to get unlocking base at any times
 

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

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