Senior Member
Join Date: Sep 2020
Location: France
|
04-24-2024
, 08:35
Re: Basebuilder Switch Dead CT to T last round
|
#4
|
Quote:
Originally Posted by bigdaddy424
first off you need to switch to roundsleft in order to make this work
https://forums.alliedmods.net/showth...=67909?p=67909
we modify his work and a forward so every round start we check if thats the last round
PHP Code:
new const PLUGINNAME[] = "Roundsleft"
new const VERSION[] = "0.2"
new const AUTHOR[] = "JGHG"
/*
Copyleft 2003
http://amxmod.net/forums/viewtopic.php?p=130419
ROUNDSLEFT
==========
Allows the users to "say roundsleft" and remaining rounds will be displayed.
This is useful if you are using default hlds cvar mp_maxrounds set to some value.
Will respond with same answer if users "say timeleft" also.
There is also a command "amx_roundsleft" to view remaining rounds in console.
/jghg
HOW TO INSTALL
==============
1. Name this file roundsleft.sma.
2. Compile it into roundsleft.amx.
3. Put roundsleft.amx into amx/plugins directory.
4. Open up amx/plugins/plugins.ini and add a line to the end saying: roundsleft.amx
5. Done. Type reload in your server.
HOW TO USE
==========
say roundsleft, say timeleft, say /roundsleft, say /timeleft
- all these will respond with remaining rounds if mp_maxrounds is set to anything higher than 0.
amx_roundsleft
- displays remaining rounds in console. Works also from server console.
VERSIONS
========
040308 0.2 Rewritten to work with amxmodx. :-) (lol, I changed #include <amxmod> to #include <amxmodx>)
?????? 0.1 First version
*/
#include <amxmodx>
#include <amxmisc>
#include <engine>
// Globals below
new g_teamScore[2]
// Globals above
public sayRoundsLeft(id) {
new maxRounds = get_cvar_num("mp_maxrounds")
if (id) {
if (maxRounds == 0) {
client_print(0, print_chat, "No rounds limit.")
}
else {
new roundsleft = maxRounds - (g_teamScore[0] + g_teamScore[1])
client_print(0, print_chat, "Remaining rounds: %d", roundsleft)
speakroundsleft(id, roundsleft)
}
}
return PLUGIN_CONTINUE
}
speakroundsleft(id, roundsleft) {
new numbers[256]
getnumbers(roundsleft, numbers, 255)
client_cmd(id, "spk ^"%s round remaining^"", numbers)
//client_print(0, print_chat, "%s round%s remain", numbers, roundsleft > 1 ? "s" : "")
}
public conRoundsLeft(id) {
new maxRounds = get_cvar_num("mp_maxrounds")
if (id) console_print(id,"Remaining rounds: %d",maxRounds - (g_teamScore[0] + g_teamScore[1]))
else server_print("Remaining rounds: %d",maxRounds - (g_teamScore[0] + g_teamScore[1]))
return PLUGIN_HANDLED
}
public teamScore(id) {
new team[2]
read_data(1,team,1)
g_teamScore[(team[0]=='C')? 0 : 1] = read_data(2)
return PLUGIN_CONTINUE
}
/*
public newround_event(id) {
if (is_user_bot(id))
return PLUGIN_CONTINUE
new maxRounds = get_cvar_num("mp_maxrounds")
if (maxRounds) {
set_hudmessage(0, 100, 0, -1.0, 0.65, 2, 0.02, 10.0, 0.01, 0.1, 2)
show_hudmessage(id, "%d rounds remaining", maxRounds - (g_teamScore[0] + g_teamScore[1]))
client_print(id, print_chat, "%d rounds remaining", maxRounds - (g_teamScore[0] + g_teamScore[1]))
}
return PLUGIN_CONTINUE
}
*/
public endround_event() {
server_print("endround_event, %d entities in game", entity_count())
set_task(2.0, "endofroundspk")
return PLUGIN_CONTINUE
}
public endofroundspk() {
//server_print("endofroundspk")
new maxRounds = get_cvar_num("mp_maxrounds")
new roundsleft = maxRounds - (g_teamScore[0] + g_teamScore[1])
if (maxRounds) {
set_hudmessage(0, 100, 0, 0.65, 0.7, 2, 0.02, 10.0, 0.01, 0.1, random_num(346, 6715))
if (roundsleft > 0)
show_hudmessage(0, "%d round%s remaining", roundsleft, roundsleft > 1 ? "s" : "")
else {
new nextmap[64]
get_cvar_string("amx_nextmap", nextmap, 63)
show_hudmessage(0, "That was the final round, changing to %s...", nextmap)
}
//client_print(0, print_chat, "%d rounds remaining", roundsleft)
}
if (roundsleft > 0) {
if (roundsleft == 1)
client_cmd(0, "spk ^"this is the final round^"")
else
speakroundsleft(0, roundsleft)
}
}
stock getnumbers(number, wordnumbers[], length) {
if (number < 0) {
format(wordnumbers, length, "error")
return
}
new numberstr[20]
num_to_str(number, numberstr, 19)
new stlen = strlen(numberstr), bool:getzero = false, bool:jumpnext = false
if (stlen == 1)
getzero = true
do {
if (jumpnext)
jumpnext = false
else if (numberstr[0] != '0') {
switch (stlen) {
case 9: {
if (getsingledigit(numberstr[0], wordnumbers, length))
format(wordnumbers, length, "%s hundred%s", wordnumbers, numberstr[1] == '0' && numberstr[2] == '0' ? " million" : "")
}
case 8: {
jumpnext = gettens(wordnumbers, length, numberstr)
if (jumpnext)
format(wordnumbers, length, "%s million", wordnumbers)
}
case 7: {
getsingledigit(numberstr[0], wordnumbers, length)
format(wordnumbers, length, "%s million", wordnumbers)
}
case 6: {
if (getsingledigit(numberstr[0], wordnumbers, length))
format(wordnumbers, length, "%s hundred%s", wordnumbers, numberstr[1] == '0' && numberstr[2] == '0' ? " thousand" : "")
}
case 5: {
jumpnext = gettens(wordnumbers, length, numberstr)
if (numberstr[0] == '1' || numberstr[1] == '0')
format(wordnumbers, length, "%s thousand", wordnumbers)
}
case 4: {
getsingledigit(numberstr[0], wordnumbers, length)
format(wordnumbers, length, "%s thousand", wordnumbers)
}
case 3: {
getsingledigit(numberstr[0], wordnumbers, length)
format(wordnumbers, length, "%s hundred", wordnumbers)
}
case 2: jumpnext = gettens(wordnumbers, length, numberstr)
case 1: {
getsingledigit(numberstr[0], wordnumbers, length, getzero)
break // could've trimmed, but of no use here
}
default: {
format(wordnumbers, length, "%s TOO LONG", wordnumbers)
break
}
}
}
jghg_trim(numberstr, length, 1)
stlen = strlen(numberstr)
}
while (stlen > 0)
// Trim a char from left if first char is a space (very likely)
if (wordnumbers[0] == ' ')
jghg_trim(wordnumbers, length, 1)
}
// Returns true if next char should be jumped
stock bool:gettens(wordnumbers[], length, numberstr[]) {
new digitstr[11], bool:dont = false, bool:jumpnext = false
switch (numberstr[0]) {
case '1': {
jumpnext = true
switch (numberstr[1]) {
case '0': digitstr = "ten"
case '1': digitstr = "eleven"
case '2': digitstr = "twelve"
case '3': digitstr = "thirteen"
case '4': digitstr = "fourteen"
case '5': digitstr = "fifteen"
case '6': digitstr = "sixteen"
case '7': digitstr = "seventeen"
case '8': digitstr = "eighteen"
case '9': digitstr = "nineteen"
default: digitstr = "TEENSERROR"
}
}
case '2': digitstr = "twenty"
case '3': digitstr = "thirty"
case '4': digitstr = "fourty"
case '5': digitstr = "fifty"
case '6': digitstr = "sixty"
case '7': digitstr = "seventy"
case '8': digitstr = "eighty"
case '9': digitstr = "ninety"
case '0': dont = true // do nothing
default : digitstr = "TENSERROR"
}
if (!dont)
format(wordnumbers, length, "%s %s", wordnumbers, digitstr)
return jumpnext
}
// Returns true when sets, else false
stock getsingledigit(digit[], numbers[], length, bool:getzero = false) {
new digitstr[11]
switch (digit[0]) {
case '1': digitstr = "one"
case '2': digitstr = "two"
case '3': digitstr = "three"
case '4': digitstr = "four"
case '5': digitstr = "five"
case '6': digitstr = "six"
case '7': digitstr = "seven"
case '8': digitstr = "eight"
case '9': digitstr = "nine"
case '0': {
if (getzero)
digitstr = "zero"
else
return false
}
default : digitstr = "digiterror"
}
format(numbers, length, "%s %s", numbers, digitstr)
return true
}
stock jghg_trim(stringtotrim[], len, charstotrim, bool:fromleft = true) {
if (charstotrim <= 0)
return
if (fromleft) {
new maxlen = strlen(stringtotrim)
if (charstotrim > maxlen)
charstotrim = maxlen
format(stringtotrim, len, "%s", stringtotrim[charstotrim])
}
else {
new maxlen = strlen(stringtotrim) - charstotrim
if (maxlen < 0)
maxlen = 0
format(stringtotrim, maxlen, "%s", stringtotrim)
}
}
public addrounds(id, level, cid) {
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
new arg[32]
read_argv(1, arg, 31)
new arglength = strlen(arg)
for (new i = 0; i < arglength; i++) {
if (!isdigit(arg[i])) {
if (i != 0 || arg[0] != '-') {
console_print(id, "Error: Enter only numbers, ie ^"amx_addrounds 10^"")
return PLUGIN_HANDLED
}
}
}
new roundstoadd = str_to_num(arg)
if (roundstoadd == 0) {
console_print(id, "Error: Well duuuh. Enter a positive or negative value, ie ^"amx_addrounds 10^"")
return PLUGIN_HANDLED
}
new originalmaxrounds = get_cvar_num("mp_maxrounds")
new newmaxrounds = originalmaxrounds + roundstoadd
if (newmaxrounds < 1)
newmaxrounds = 1
new roundschanged = newmaxrounds - originalmaxrounds
new Float:displayrounds = float(roundschanged)
displayrounds *= displayrounds
displayrounds = floatsqroot(displayrounds)
console_print(id, "%sing %d rounds...", roundschanged > 0 ? "Add" : "Remov", floatround(displayrounds))
set_cvar_num("mp_maxrounds", newmaxrounds)
conRoundsLeft(id)
return PLUGIN_HANDLED
}
new forwardLastRound, forwardLastRoundReturn
public plugin_init() {
register_plugin(PLUGINNAME, VERSION, AUTHOR)
register_clcmd("say timeleft", "sayRoundsLeft")
register_clcmd("say roundsleft", "sayRoundsLeft", 0, "- displays remaining rounds")
register_concmd("amx_roundsleft", "conRoundsLeft", 0, "- displays remaining rounds")
register_concmd("amx_addrounds", "addrounds", ADMIN_CFG, "<rounds> - add/remove remaining rounds")
register_event("TeamScore", "teamScore", "ab")
//register_event("ResetHUD", "newround_event", "b")
/*
register_event("SendAudio","endround_event","a","2&%!MRAD_terwin","2&%!MRAD_ctwin","2&%!MRAD_rounddraw")
register_event("TextMsg","endround_event","a","2&#Game_C","2&#Game_w")
register_event("TextMsg","endround_event","a","2&#Game_will_restart_in")
*/
/*
register_logevent("death_event",5,"1=killed","3=with")
// L 03/08/2004 - 13:32:34: "xian<2><BOT><CT>" killed "SuperKaka<1><BOT><TERRORIST>" with "usp"
// L 03/08/2004 - 13:32:34: World triggered "Round_End"
*/
// L 03/08/2004 - 13:32:34: World triggered "Round_End"
/*register_logevent("endround_event", 3, "2=Round_End")
register_logevent("endround_event", 3, "1=Round_End")
register_logevent("endround_event", 3, "0=Round_End")
register_logevent("endround_event", 3, "3=Round_End")*/
register_logevent("endround_event", 2, "0=World triggered", "1=Round_End")
register_event("HLTV", "event_new_round", "a", "1=0", "2=0")
forwardLastRound = CreateMultiForward("LastRound", ET_IGNORE, FP_CELL)
}
public event_new_round()
{
new maxRounds = get_cvar_num("mp_maxrounds")
new roundsleft = maxRounds - (g_teamScore[0] + g_teamScore[1])
if (roundsleft == 1)
ExecuteForward(forwardLastRound, forwardLastRoundReturn, maxRounds)
}
and we try if its functional
PHP Code:
#include <amxmodx>
forward LastRound(maxrounds)
public LastRound(maxrounds)
{
server_print "this map lasted %d rounds, farewell", maxrounds
}
so your code should look something like this
PHP Code:
/*
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>
#include <cromchat>
new bool:last_round
forward LastRound(maxrounds)
// Plugin Version
new VERSION[]="5.4"
new formatmodname[] = "^x01 [^x04 Base Builder^x01 ]"
//Models
new const g_ZombieModel[] = "classic2"
new const g_AdminTModel[] = "zombie_terror"
new const g_ZombieKnifeModel[] = "models/bb/x_knife.mdl"
new const HUMAN_MODELS[][] = {
"Naruto", // This and second must be repeated because of admin set model.
"Naruto",
"Sasuke",
"Gaara",
"Kisame",
"MyIchigo",
"Joker",
"Goku"
}
//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]
new g_iSkin[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
new g_iMenuSkins
// 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 AND LEADER**
{ "254.0 254.0 034.0", ADMIN_LEVEL_B }, // **VIP**
{ "255.0 0.0 0.0", ADMIN_USER } // **USERS**
}
new my_color[MAX_PLAYERS + 1]
new const g_szColors[][] =
{
"255.0 0.0 0.0", // RED
"128.0 218.0 235.0", // BLUE
"000.0 200.0 000.0", // GREEN
"255.0 255.0 255.0", // WHITE
"255.0 69.0 0.0", // ORANGE
"255.0 28.0 174.0", // PINK
"255.0 255.0 0.0", // YELLOW
"000.0 000.0 000.0" // BLACK
}
new g_iGrabColor[33]
#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", "8")
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
register_clcmd("say /colors", "GrabColorMenu")
//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")
register_clcmd("say /skins", "clcmd_skins")
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_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")
g_iMenuSkins = menu_create( "\rSkins Menu^n \yChoose your Player Model:\w", "HandleModelsMenu" );
menu_additem( g_iMenuSkins, "Naruto", "1", 0 );
menu_additem( g_iMenuSkins, "Sasuke", "2", 0 );
menu_additem( g_iMenuSkins, "Gaara", "3", 0 );
menu_additem( g_iMenuSkins, "Kisame", "4", 0 );
menu_additem( g_iMenuSkins, "Ichigo \r[VIP]", "5", 0 );
menu_additem( g_iMenuSkins, "Joker \r[ADMIN]", "6", 0 );
menu_additem( g_iMenuSkins, "Goku \r[ADMIN]", "7", 0 );
menu_setprop( g_iMenuSkins, MPROP_EXIT, MEXIT_ALL );
}
public plugin_natives()
{
register_native("bb_build_time","native_build_time", 1)
}
public LastRound(maxrounds)
last_round = true
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 szTModel[ 64 ];
formatex( szTModel, charsmax( szTModel ), "models/player/%s/%s.mdl", g_AdminTModel, g_AdminTModel );
engfunc( EngFunc_PrecacheModel, szTModel );
precache_model("models/player/Naruto/Naruto.mdl");
precache_model("models/player/Sasuke/Sasuke.mdl");
precache_model("models/player/Gaara/Gaara.mdl");
precache_model("models/player/Kisame/Kisame.mdl");
precache_model("models/player/MyIchigo/MyIchigo.mdl")
precache_model("models/player/Joker/Joker.mdl")
precache_model("models/player/Goku/Goku.mdl")
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);
}
// 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)
// Add the welcome message below the existing print_color line
new message[128]
format(message, sizeof(message), "^x01 [^x04 Base Builder^x01 ] Newbie? Just use /guide to learn how to grab objects")
print_color(0, message)
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");
if (last_round)
{
cs_set_user_team(g_victim, CS_TEAM_T)
g_iszombie[g_victim] = true
g_ishuman[g_victim] = false
set_task(get_pcvar_float(g_pcvar_zresptime), "Respawn_Zombie", g_victim)
}
}
}
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
g_iSkin[id] = 0
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 GrabColorMenu(id)
{
if (!g_iszombie[id]) {
new g_iMenuGrab = menu_create("\yChoose your Grab Color:\w", "HandleGrabColorMenu")
menu_additem(g_iMenuGrab, "RED", "1")
menu_additem(g_iMenuGrab, "BLUE", "2")
menu_additem(g_iMenuGrab, "GREEN", "3")
menu_additem(g_iMenuGrab, "WHITE", "4")
menu_additem(g_iMenuGrab, "ORANGE", "5")
menu_additem(g_iMenuGrab, "PINK", "6")
menu_additem(g_iMenuGrab, "YELLOW", "7")
// Check if the player has the ADMIN flag before adding the "BLACK" option
if (is_user_admin(id)) {
menu_additem(g_iMenuGrab, "BLACK \r[ADMIN/VIP]", "8")
} else {
client_print(id, print_chat, "Only administrators can use the BLACK option.")
}
menu_setprop(g_iMenuGrab, MPROP_EXIT, MEXIT_ALL)
menu_display(id, g_iMenuGrab, 0)
} else {
client_print(id, print_chat, "[BaseBuilder] Zombies are not allowed to open the colors menu.");
}
}
public HandleGrabColorMenu(id, iMenu, iItem)
{
if (iItem != MENU_EXIT)
{
new szKey[1], _Trash;
menu_item_getinfo(iMenu, iItem, _Trash, szKey, 1, "", 0, _Trash);
g_iGrabColor[id] = str_to_num(szKey[0]) - 1;
// Define the chosen color name
new szChosenColor[32];
if (szKey[0] == '1') {
szChosenColor = "RED";
} else if (szKey[0] == '2') {
szChosenColor = "BLUE";
} else if (szKey[0] == '3') {
szChosenColor = "GREEN";
} else if (szKey[0] == '4') {
szChosenColor = "WHITE";
} else if (szKey[0] == '5') {
szChosenColor = "ORANGE";
} else if (szKey[0] == '6') {
szChosenColor = "PINK";
} else if (szKey[0] == '7') {
szChosenColor = "YELLOW";
} else if (szKey[0] == '8') {
szChosenColor = "BLACK";
} else {
// Handle an invalid color choice
client_print(id, print_chat, "Invalid color choice.");
return PLUGIN_HANDLED;
}
// Print the message with the chosen color name
client_print_color(id, CC_COLOR_TEAM, "[BaseBuilder] You have picked ^3[%s]^4 as your color.", szChosenColor);
}
return PLUGIN_HANDLED;
}
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);
}
}
}
}
// Add the message to warn players
print_color(0, "[Build-Time End] Be careful, Zombies have just escaped, try your best to survive.");
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;
// admin & vip
if (!(get_user_flags(id) & ADMIN_VOTE))
{
// if no admin, assign random
if (!g_iSkin[id]) // If the player doesn't already have a saved skin
{
g_iSkin[id] = random_num(0, 4); // Choose a random skin (0 to 4)
}
copy(g_PlayerModel[id], charsmax(g_PlayerModel[]), HUMAN_MODELS[g_iSkin[id]]);
}
else
{
// Assign ichigo
if (!g_iSkin[id])
{
g_iSkin[id] = 5;
copy(g_PlayerModel[id], charsmax(g_PlayerModel[]), "MyIchigo");
}
else
{
// skinmenu
copy(g_PlayerModel[id], charsmax(g_PlayerModel[]), HUMAN_MODELS[g_iSkin[id]]);
}
}
}
else if (cs_get_user_team(id) == CS_TEAM_T)
{
g_iszombie[id] = true;
g_ishuman[id] = false;
if(get_user_flags(id) & ADMIN_VOTE)
copy(g_PlayerModel[id], charsmax(g_PlayerModel[]), g_AdminTModel);
else
copy(g_PlayerModel[id], charsmax(g_PlayerModel[]), g_ZombieModel);
}
g_isalive[id] = true;
remove_task(id + MODELSET_TASK);
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);
}
}
public HandleModelsMenu(id, iMenu, iItem) {
if (!is_user_connected(id) || g_iszombie[id]) {
return PLUGIN_HANDLED;
}
if (iItem == MENU_EXIT)
return PLUGIN_HANDLED;
new szKey[7], _Trash;
menu_item_getinfo(iMenu, iItem, _Trash, szKey, 1, "", 0, _Trash);
new key = str_to_num(szKey[0]);
if (key > 4 && key < 6 && !(get_user_flags(id) & ADMIN_VOTE)) {
client_print(id, print_chat, "That skin is for VIPs only. Type /vipinfo");
clcmd_skins(id);
return PLUGIN_HANDLED;
}
if ((key == 6 || key == 7) && !(get_user_flags(id) & ADMIN_KICK)) {
client_print(id, print_chat, "That skin is for admins");
clcmd_skins(id);
return PLUGIN_HANDLED;
}
g_iSkin[id] = key;
copy(g_PlayerModel[id], charsmax(g_PlayerModel[]), HUMAN_MODELS[g_iSkin[id]]);
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);
}
// Print skin selection message
client_print_color(id, CC_COLOR_TEAM, "^4[Skin-Menu] You have Selected ^3%s^4 Skin", HUMAN_MODELS[g_iSkin[id]]);
return PLUGIN_HANDLED;
}
public clcmd_skins(id)
{
if (!is_user_connected(id) || g_iszombie[id]) {
client_print(id, print_chat, "[Skin] You need to be human for have access to the menu!");
return PLUGIN_HANDLED;
}
if (g_ishuman[id]) {
menu_display(id, g_iMenuSkins, 0);
}
return PLUGIN_HANDLED;
}
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", g_szColors[g_iGrabColor[id]])
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 (IsBlockLocked(ent))
{
UnlockBlock(ent)
DispatchKeyValue(ent, "rendermode", "0");
}else 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()
}
}
see changes https://www.textcompare.org/?id=6628...a42a2b39b88822
|
Thank you buddy for the help, I've added the print "[BB] You have been moved to the Terrorist team for the last round."
here
PHP Code:
set_task(get_pcvar_float(g_pcvar_zresptime), "Respawn_Zombie", g_victim)
client_print(g_victim, print_chat, "[BB] You have been moved to the Terrorist team for the last round.");
__________________
CS:CZ > CS 1.6
Last edited by Ace67; 04-24-2024 at 08:47.
|
|