Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Szukam klas.


kosa669699

Rekomendowane odpowiedzi

Opublikowano

Siemanko mam serwer basebulider 6.4 szukam klas bo tylko mam 1 clasic szukam 2 zwykłych i 1-2 premki a mogą byc i all zwykłe.

2. Gdzie wpisywać ze na serwie napisane jest np na czer H@- xxx GG-xxx gdzie to mam wpisywać

Opublikowano

ODP 2

 

Reklama w say'u

 

Opis:

Plugin który spamuje co jakiś czas na czacie say, przydatny przy reklamie forum lub informowaniu graczy na serwerze...

 

Instalacja:

Plik ad_manager.amxx wrzucamy do addons/amxmodx/plugins

ad_manager.sma wrzucamy do addons/amxmodx/scripting

a advertisements.ini do addons/amxmodx/configs

standardowo do pliku addons/amxmodx/configsplugins.ini dopisujemy:

 

ad_manager.amxx

 

Konfiguracja:

otwieramy plik advertisements.ini dopisujemy nasze informacje które chcemy aby plugin pokazywał np.

 

!t amxx.pl !n polski support !g AMX Mod X

 

taki wpis w grze będzie wyglądał tak: amx.pl polski support AMX Mod X

Kolory:

!t - kolor drużyny, dla tt czerwony, dla ct niebieski i dla specra biały

!g - po prostu zielony

!n - standardowy kolor w say

 

Download

 

http://speedy.sh/mQjvk/ad-manager.rar

 

SKAN

 

http://virusscan.jotti.org/pl/scanresult/8bd037d6392b344277c5518c3d1d09e311a1cd55

 

ODP 1

 

Tu masz cały plugin , wystarczy skompilować:

 

#include <amxmodx>
#include <zombieplague>
#define VERSION "0.1"
// Fast Zombie
new const zclass_name[] = { "Fast Zombie" }
new const zclass_info[] = { "Very fast!" }
new const zclass_model[] = { "zombie_source.mdl" }
new const zclass_clawmodel[] = { "v_knife_zombie.mdl" }
const zclass_health = 1500
const zclass_speed = 700
const Float:zclass_gravity = 1.0
const Float:zclass_knockback = 1.0
// Jump Zombie
new const zclass_name2[] = { "Jump Zombie" }
new const zclass_info2[] = { "High jump!" }
new const zclass_model2[] = { "zombie_source.mdl" }
new const zclass_clawmodel2[] = { "v_knife_zombie.mdl" }
const zclass_health2 = 2000
const zclass_speed2 = 225
const Float:zclass2_gravity = 3.0
const Float:zclass2_knockback = 1.0
// Tank Zombie
new const zclass_name3[] = { "Tank Zombie" }
new const zclass_info3[] = { "Very much health!" }
new const zclass_model3[] = { "zombie_source.mdl" }
new const zclass_clawmodel3[] = { "v_knife_zombie.mdl" }
const zclass_health3 = 5000
const zclass_speed3 = 200
const Float:zclass3_gravity = 1.0
const Float:zclass3_knockback = 1.0
// Vampire Zombie
new const zclass_name4[] = { "Vampire Zombie" }
new const zclass_info4[] = { "=Vampire=" }
new const zclass_model4[] = { "zombie_source.mdl" }
new const zclass_clawmodel4[] = { "v_knife_zombie.mdl" }
const zclass_health4 = 3500
const zclass_speed4 = 700
const Float:zclass4_gravity = 1.0
const Float:zclass4_knockback = 1.0
// Classes
new g_zclass_fast;
new g_zclass_jump;
new g_zclass_tank;
new g_zclass_vampire;
public plugin_init()
{
register_plugin("[ZP] Zombie Classes", VERSION, "Torge (Justin)");
}
public plugin_precache()
{
g_zclass_fast = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback);
g_zclass_jump = zp_register_zombie_class(zclass_name2, zclass_info2, zclass_model2, zclass_clawmodel2, zclass_health2, zclass_speed2, zclass2_gravity, zclass2_knockback);
g_zclass_tank = zp_register_zombie_class(zclass_name3, zclass_info3, zclass_model3, zclass_clawmodel3, zclass_health3, zclass_speed3, zclass3_gravity, zclass3_knockback);
g_zclass_vampire = zp_register_zombie_class(zclass_name4, zclass_info4, zclass_model4, zclass_clawmodel4, zclass_health4, zclass_speed4, zclass4_gravity, zclass4_knockback);
}
public zp_user_infected_post(id, infector)
{
if (zp_get_user_zombie_class(id) == g_zclass_fast)
client_print(id, print_chat, "[ZP] You have selected Fast Zombie! You are now very fast!");
if (zp_get_user_zombie_class(id) == g_zclass_jump)
client_print(id, print_chat, "[ZP] You have selected Jump Zombie! You have very high jump!");
if (zp_get_user_zombie_class(id) == g_zclass_tank)
client_print(id, print_chat, "[ZP] You have selected Tank Zombie! You have very much health!");
if (zp_get_user_zombie_class(id) == g_zclass_vampire)
client_print(id, print_chat, "[ZP] You have selected Vampire Zombie! You are now a Vampire!");
}

Opublikowano

Bardzo bardzo bardzo dziękuje jeszcze wprawdze ale Dzięki

 

Klasy nie działają masz kod sms może tu coś trzeba wpisca

 


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

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

//Models
new const g_ZombieModel1[] = "classic2"

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

new g_WinZomb[] = "basebuilder/zombies_win.wav"
new g_WinHum[] = "basebuilder/humans_win.wav"

#define AFTER_BUILD ADMIN_LEVEL_A
#define DEAD_BUILD ADMIN_LEVEL_B
#define REMOVE_BLOCK ADMIN_LEVEL_C
#define DEAD_REMOVE ADMIN_LEVEL_D
#define LOCK_BLOCKS ADMIN_LEVEL_E
#define PAIN_SHOCK_FREE ADMIN_KICK
#define BAD_SPAWN ADMIN_KICK
#define BUILD_BAN ADMIN_KICK
#define REVIVE ADMIN_BAN
#define SWAP ADMIN_KICK
#define START_ROUND ADMIN_BAN
#define RESET ADMIN_BAN
#define MEMBERSHIP ADMIN_LEVEL_E
#define ADMIN_GUNS ADMIN_KICK
#define ADMIN_RESET ADMIN_BAN

#define BUILD_TASK 10000
#define MODELSET_TASK 20000

#define MAX_PLAYERS 32
#define AMMO_SLOT 376
#define MODELCHANGE_DELAY 0.5
#define MAXENTS 1365
#define AUTO_TEAM_JOIN_DELAY 0.1
#define TEAM_SELECT_VGUI_MENU_ID 2

#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, gmsgSayText
new gHudSyncInfo, g_MaxPlayers, g_ModName[32]
const fPainShock = 108

new bool:g_CanBuild, bool:g_ZombiesReleased
new g_RoundNum, count_down, g_iEntBarrier
new bool:g_BuildBan[MAX_PLAYERS+1]
new g_pEnt[MAX_PLAYERS+1], Float:g_pDist[MAX_PLAYERS+1], bool:g_MovingEnt[MAXENTS], g_EntMover[MAXENTS],
   g_LastMover[MAXENTS], g_EntOwner[MAXENTS], bool:g_InvisEnt[MAXENTS], g_OwnedEnts[MAX_PLAYERS+1]
new CsTeams:g_pTeam[MAX_PLAYERS+1], CsTeams:g_pCurTeam[MAX_PLAYERS+1]
new g_CurrentWeapon[MAX_PLAYERS+1], g_PrimaryWeapon[MAX_PLAYERS+1], Float:MaxHP[MAX_PLAYERS+1]

//Cached Stuff for Players
new g_isconnected[MAX_PLAYERS+1], g_isalive[MAX_PLAYERS+1], g_isbot[MAX_PLAYERS+1],
   g_iszombie[MAX_PLAYERS+1], g_friend[MAX_PLAYERS+1]

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

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

//CVARS
new g_pcvar_buildtime, g_pcvar_zombiehp, g_pcvar_maxrounds, g_pcvar_basecalc, g_pcvar_resetent,
   g_pcvar_showmovers, g_pcvar_knockback, g_pcvar_allowedweps, g_pcvar_givenades,
   g_pcvar_entmindist, g_pcvar_entsetdist, g_pcvar_entmaxdist, g_pcvar_maxclaimable,
   g_pcvar_claimable, g_pcvar_zresptime

new g_fwRoundStart, g_fwGrabEnt, g_fwDropEnt, g_fwNewGameStart, g_fwGameStart, g_fwSwapTeams
new g_fwiFakeReturn

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

//Weapon Names (For Guns Menu)
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"
}

// 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" }

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)

   //Basic mod functions/timers
   g_pcvar_buildtime = register_cvar("bb_build_time", "150.0")
   g_pcvar_zombiehp = register_cvar("bb_zombie_health", "2000.0")
   g_pcvar_basecalc = register_cvar("bb_calc_maxbase", "0")
   g_pcvar_showmovers = register_cvar("bb_show_moving", "1")
   g_pcvar_knockback = register_cvar("bb_pain_shock_free", "0")
   g_pcvar_entmaxdist = register_cvar("bb_max_move_dist", "960")
   g_pcvar_entmindist = register_cvar("bb_min_move_dist", "25")
   g_pcvar_entsetdist = register_cvar("bb_min_dist_set", "50")
   g_pcvar_resetent = register_cvar("bb_reset_blocks", "1")
   g_pcvar_maxclaimable = register_cvar("bb_claim_max", "5")
   g_pcvar_claimable = register_cvar("bb_claim_mode", "1")
   g_pcvar_zresptime = register_cvar("bb_zombie_respawn_time", "2.0")

   //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")

   register_dictionary("basebuilder.txt");

   //Client Commands
   register_clcmd("+grab","cmdMoveEnt")                             //command to move stuff around
   register_clcmd("-grab","cmdStopEnt")                             //command to move stuff around

   register_clcmd("say", "cmdSay",0, "<target> ")
   register_clcmd("say_team", "cmdSay",0, "<target> ")

   //Admin Commands
   register_concmd("removeaim","cmdRemoveEnt",0," - Deletes an object")             //Removes an object (C alive, D dead)
   register_concmd("lockaim","cmdLockBlock",0," - Locks/Unlocks an object form moving")
   register_concmd("unclaimaim","cmdRemoveClaim",0," - Removes a claim on an object")    //Makes block claimable by everyone
   register_concmd("resetaim","cmdResetAim",0," - Resets an object")

   register_concmd("bb_buildban","cmdBuildBan",0,"<player>")                 //Bans targeted player from building
   register_concmd("bb_unbuildban","cmdBuildUnban",0,"<player>")                 //Unbans   "       "	 "	 "
   register_concmd("bb_revive","cmdRevive",0,"<player>")
   register_concmd("bb_guns","cmdGiveGuns",0,"<player>")                    //revives targetted player
   register_concmd("bb_swap","cmdSwap",0,"<player>")                    //swaps the selected player to the opposite team
   register_concmd("bb_startround","cmdStartRound",0," - Ends the build phase")        //do i really have to explain this?
   register_concmd("bb_reset","cmdResetEnts",0," - Resets all entities")
   register_concmd("bb_clear","cmdClearEnts",0," - Deleted all unused entities")

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

   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")
   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_Spawn, "player", "ham_PlayerSpawn_Post", 1)
   RegisterHam(Ham_TakeDamage, "player", "ham_TakeDamage")
   RegisterHam(Ham_TakeDamage, "player", "ham_TakeDamage_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");
   register_message(get_user_msgid("Health"), "msgHealth");
   register_message(get_user_msgid("ScoreAttrib"), "msgScoreAttrib")

   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<)|(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<)|(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)

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

   g_fwNewGameStart = CreateMultiForward("bb_new_round",ET_IGNORE)
   g_fwGameStart = CreateMultiForward("bb_timer_started",ET_IGNORE)
   g_fwRoundStart = CreateMultiForward("bb_zombies_released",ET_IGNORE)
   g_fwSwapTeams = CreateMultiForward("bb_teams_swapped",ET_IGNORE)
   g_fwGrabEnt = CreateMultiForward("bb_ent_grabbed",ET_IGNORE, FP_CELL, FP_CELL)
   g_fwDropEnt = CreateMultiForward("bb_ent_dropped",ET_IGNORE, FP_CELL, FP_CELL)

   server_cmd("sv_skyname dust")
   server_cmd("mp_freezetime 0")
   server_cmd("mp_flashlight 0")

   register_clcmd("chooseteam", "clcmd_changeteam")
   register_clcmd("jointeam", "clcmd_changeteam")
   register_message(get_user_msgid("ShowMenu"), "message_show_menu")
   register_message(get_user_msgid("VGUIMenu"), "message_vgui_menu")
   server_cmd("mp_limitteams 1")
   server_cmd("mp_autoteambalance 1")

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

public plugin_precache()
{
   engfunc(EngFunc_PrecacheSound, g_RoundStart)
   engfunc(EngFunc_PrecacheSound, g_ZombKill1)
   engfunc(EngFunc_PrecacheSound, g_WinZomb)
   engfunc(EngFunc_PrecacheSound, g_WinHum)

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

   new iBomb = create_entity("info_bomb_target");
   entity_set_origin(iBomb, Float:{8192.0,8192.0,8192.0})

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

   g_pcvar_maxrounds = get_cvar_num("mp_maxrounds")
}

// Event Round Start (This is before freeze time)
public event_round_start()
{
   arrayset(g_MovingEnt, false, MAXENTS)
   arrayset(g_EntOwner, 0, MAXENTS)
   arrayset(g_LastMover, 0, MAXENTS)
   arrayset(g_OwnedEnts, 0, MAX_PLAYERS+1)

   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"))
               {
                   if (g_InvisEnt[iEnt])
                   {
                       set_pev(iEnt,pev_solid,SOLID_BSP)
                       set_pev(iEnt,pev_renderamt,Float:{255.0})
                       set_pev(iEnt,pev_rendermode,0)
                       g_InvisEnt[iEnt] = false
                   }
                   engfunc( EngFunc_SetOrigin, iEnt, Float:{ 0.0, 0.0, 0.0 } );
               }
           }
       }
   }
   ExecuteForward(g_fwNewGameStart, g_fwiFakeReturn)
}

// Log Event Round Start (This is AFTER freeze time)
public logevent_round_start()
{
   g_CanBuild = true

   set_pev(g_iEntBarrier,pev_solid,SOLID_BSP)
   set_pev(g_iEntBarrier,pev_rendermode,1)
   set_pev(g_iEntBarrier,pev_renderamt,Float:{150.0})

   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(BUILD_TASK)

   set_task(1.0, "CountDown", BUILD_TASK,_, _, "a", get_pcvar_num(g_pcvar_buildtime));
   count_down = (get_pcvar_num(g_pcvar_buildtime)-1);

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

   ExecuteForward(g_fwGameStart, g_fwiFakeReturn)
}

public CountDown()
{
   count_down--
   new mins = count_down/60
   new secs = count_down%60
   if (count_down>=0)
   {
       client_print(0, print_center, "Build Time - %d:%s%d", mins, (secs < 10 ? "0" : ""), secs)
   }

   if (mins != 0 && secs == 0)
   {
       new mmin[32]
       num_to_word(mins, mmin, 31)

       client_cmd(0, "spk ^"fvox/%s minutes remaining^"", mmin)
   }
   else if (mins == 0 && secs == 30)
   {
       new msec[32]
       num_to_word(secs, msec, 31)

       client_cmd(0, "spk ^"fvox/%s seconds remaining^"",  msec)
   }
   if (0<count_down<=10)
   {
       new msec[32]
       num_to_word(count_down, msec, 31)

       client_cmd(0, "spk ^"fvox/%s^"", msec)
   }

   if (count_down == 0)
   {
       Release_Zombies()
       remove_task(BUILD_TASK);
   }
}

public logevent_round_end()
{
   if (!g_CanBuild)
   {
       new players[32], num, player
       get_players(players, num)
       for (new i = 0; i < num; i++)
       {
           player = players[i]

           if (g_pCurTeam[player] == g_pTeam[player])
               cs_set_user_team(player, (g_pTeam[player] = (g_pTeam[player] == CS_TEAM_T ? CS_TEAM_CT : CS_TEAM_T)))
           else
               g_pTeam[player] = g_pTeam[player] == CS_TEAM_T ? CS_TEAM_CT : CS_TEAM_T
       }
       print_color(0, "^x04%L", LANG_SERVER, "TEAMS_SWAPPED")
       ExecuteForward(g_fwSwapTeams, g_fwiFakeReturn)
   }

   remove_task(BUILD_TASK)

   return PLUGIN_HANDLED
}

public client_death(g_attacker, g_victim, wpnindex, hitplace, TK)
{
   if (g_pEnt[g_victim])
       cmdStopEnt(g_victim)

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

   g_isalive[g_victim] = false

   if (TK == 0 && g_attacker != g_victim)
   {
       if (g_iszombie[g_attacker])
       {
           client_cmd(0, "spk %s", g_ZombKill1)
           new playername[35]
           get_user_name(g_victim, playername, 34)
           set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 5.0, 0.1, 0.2, 1)
           show_hudmessage(0, "%L",LANG_SERVER, "DEAD_ANNOUNCE", playername);
       }
   }

   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_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_SURVIVOR");
       cs_set_user_team(g_victim, cs_get_user_team(g_victim) == CS_TEAM_T ? CS_TEAM_CT:CS_TEAM_T)
       g_iszombie[g_victim] = true
       set_task(5.0, "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 ham_TakeDamage(victim, inflictor, attacker, Float:damage, damagebits)
{
   if (!g_isalive[victim] || !g_isconnected[attacker]) return HAM_IGNORED

   if(g_CanBuild || victim == attacker)
       return HAM_SUPERCEDE

   return HAM_HANDLED
}

public client_disconnect(id)
{
   cmdStopEnt(id)

   g_isconnected[id] = false
   g_isalive[id] = false
   g_isbot[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

   // Set bot flag
   if (is_user_bot(id))
       g_isbot[id] = true
}

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

   new weapon[32]
   new he, flash, smoke
   get_pcvar_string(g_pcvar_givenades,weapon,31)
   for(new i=0;i<strlen(weapon);i++)
   {
       switch(weapon[i])
       {
           case 'h': he++
           case 'f': flash++
           case 's': smoke++
       }
   }

   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 (!g_iszombie[player])
           {
               cmdStopEnt(player)

               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)
   set_pev(g_iEntBarrier,pev_renderamt,Float:{0.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)

   ExecuteForward(g_fwRoundStart,g_fwiFakeReturn)
}

//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) ==MaxHP[id] || !is_user_alive(id))
           ExecuteHamB(Ham_CS_RoundRespawn, id)
       else
           client_print(id, print_center, "%L", LANG_SERVER, "FAIL_RESPAWN");
   }
}

//Called on al pllayers 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 (g_iszombie[id])
   {
       MaxHP[id] = get_pcvar_float(g_pcvar_zombiehp)
       set_pev(id, pev_health, MaxHP[id]) // use decimal number
   }
   else
   {
       weapon_method_menu(id)
       MaxHP[id] = 100.0
   }
   ev_Health(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)
}

//Sets the "Game" description ie. Counter-Strike, in our case Base Builder
public fw_GetGameDescription()
{
   // Return the mod name so it can be easily identified
   forward_return(FMV_STRING, g_ModName)

   return FMRES_SUPERCEDE;
}

/*-------------------------------------------------------------------------------------------------|
|----------------------------------Begin Player Model Code---[0005]--------------------------------|
|-------------------------------------------------------------------------------------------------*/

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

   g_isalive[id] = true
   g_pCurTeam[id] = cs_get_user_team(id)
   g_iszombie[id] = g_pCurTeam[id] == CS_TEAM_T ? true : false

   Add_Effects(id)
   remove_task(id + MODELSET_TASK)
   if (g_iszombie[id])
   {
       copy(g_PlayerModel[id], charsmax(g_PlayerModel[]), g_ZombieModel1)
       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))
}

/*-------------------------------------------------------------------------------------------------|
|------------------------------------End Player Model Code-----------------------------------------|
|-------------------------------------------------------------------------------------------------*/

/*-------------------------------------------------------------------------------------------------|
|----------------------------------Begin Entity Mover Code---[0004]--------------------------------|
|-------------------------------------------------------------------------------------------------*/
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))
           }
       }
       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], Float:entOrigin[3], Float:orig[3], Float:mins[3], Float:maxs[3]

   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] = (mins[0] + maxs[0]) / 2.0 + orig[0];
   entOrigin[1] = (mins[1] + maxs[1]) / 2.0 + orig[1];
   entOrigin[2] = (mins[2] + maxs[2]) / 2.0 + orig[2];

   get_user_origin(id, origin);
   IVecFVec(origin, orig)

   g_pDist[id] = get_distance_f(orig, entOrigin);

   if (get_pcvar_num(g_pcvar_entmindist)) //maximum
   {
       if (g_pDist[id] < get_pcvar_float(g_pcvar_entmindist)) //minimum
           g_pDist[id] = get_pcvar_float(g_pcvar_entsetdist);
       /*if (g_pDist[id] < get_pcvar_float(g_pcvar_entminoffset))
       {
           g_pOffset[id][0] = orig[0] - entOrigin[0]
           g_pOffset[id][1] = orig[1] - entOrigin[1]
           g_pOffset[id][2] = orig[2] - entOrigin[2]
       }*/
   }

   if (get_pcvar_num(g_pcvar_entmaxdist)) //maximum
   {
       if (g_pDist[id] > get_pcvar_float(g_pcvar_entmaxdist))
           return PLUGIN_HANDLED
   }

   //set_pev(ent,pev_solid, SOLID_NOT)
   set_pev(ent,pev_rendermode,1)
   set_pev(ent,pev_renderamt,Float:{100.0})
   set_pev(ent,pev_rendercolor,Float:{135.0, 206.0, 235.0})

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

   ExecuteForward(g_fwGrabEnt,g_fwiFakeReturn, id, ent)

   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_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.0;

       if (g_pDist[id] > get_pcvar_float(g_pcvar_entmaxdist))
       {
           g_pDist[id] = get_pcvar_float(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.0;

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

   new origin[3], Float:aiming[3], Float:pOrigin[3], Float:mins[3], Float:maxs[3], Float:neworigin[3]

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

   entity_get_vector(g_pEnt[id], EV_VEC_mins, mins);
   entity_get_vector(g_pEnt[id], EV_VEC_maxs, maxs);

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

   aiming[0] -= pOrigin[0];
   aiming[1] -= pOrigin[1];
   aiming[2] -= pOrigin[2];

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

   IVecFVec(origin, neworigin);

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

   entity_set_origin(g_pEnt[id], neworigin);

   return FMRES_HANDLED
}

public cmdStopEnt(id)
{
   new ent = g_pEnt[id]
   g_MovingEnt[ent] = false
   //set_pev(ent,pev_solid, SOLID_BSP)
   set_pev(ent,pev_rendermode,0)
   set_pev(ent,pev_renderamt,Float:{255.0})
   set_pev(ent,pev_rendercolor,Float:{0.0, 0.0, 0.0})

   ExecuteForward(g_fwDropEnt,g_fwiFakeReturn, id, ent)

   g_EntMover[ent] = 0
   g_LastMover[ent] = id
   g_pEnt[id] = 0
}

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

   new ent = get_tr2(trace, TR_pHit)

   if (is_valid_ent(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");
                   }
               }
           }
       }
   }
   else ClearSyncHud(id, gHudSyncInfo);

   return PLUGIN_HANDLED
}

public cmdLockBlock(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")) return PLUGIN_HANDLED

   if (!IsBlockLocked(ent) && !g_MovingEnt[ent])
   {
       LockBlock(ent)
       set_pev(ent,pev_rendermode,1)
       set_pev(ent,pev_rendercolor,Float:{125.0, 0.0, 0.0})

       g_OwnedEnts[g_EntOwner[ent]]--
       g_EntOwner[ent] = 0
   }
   else if (IsBlockLocked(ent))
   {
       UnlockBlock(ent)
       set_pev(ent,pev_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
}

public cmdResetEnts(id)
{
   if (!access(id, ADMIN_RESET))
       return PLUGIN_HANDLED

   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 } );
       }
   }

   new adminauthid[35],adminname[35]
   get_user_authid (id,adminauthid,34)
   get_user_name(id,adminname,34)
   Log("[RESET-ENTS] Admin: %s || SteamID: %s reset the entities", adminname, adminauthid)

   return PLUGIN_HANDLED
}

public cmdResetAim(id)
{
   if (!access(id, ADMIN_RESET))
          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]))
   {
       client_print (id, print_center, "%L", LANG_SERVER, "FAIL_RESET")
       return PLUGIN_HANDLED
   }

   if(IsBlockLocked(ent) || g_MovingEnt[ent])
   {
       client_print (id, print_center, "%L", LANG_SERVER, "FAIL_RESET")
       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"))
   {
       client_print (id, print_center, "%L", LANG_SERVER, "FAIL_RESET")
       return PLUGIN_HANDLED
   }

   engfunc( EngFunc_SetOrigin, ent, Float:{ 0.0, 0.0, 0.0 } );

   new adminauthid[35],adminname[35], targetauthid[35],targetname[35]
   get_user_authid (id,adminauthid,34)
   get_user_name(id,adminname,34)
   get_user_authid(g_EntOwner[ent],targetauthid,34)
   get_user_name(g_EntOwner[ent],targetname,34)
   Log("[REMOVE] Admin: %s || SteamID: %s reset a block belonging to Player: %s || SteamID: %s", adminname, adminauthid, targetauthid, targetname)

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

   return PLUGIN_HANDLED
}


public cmdClearEnts(id)
{
   if (!access(id, ADMIN_RESET))
       return PLUGIN_HANDLED

   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") && !g_LastMover[iEnt])
           {
               set_pev(iEnt,pev_solid,SOLID_NOT)
               set_pev(iEnt,pev_rendermode,1)
               set_pev(iEnt,pev_renderamt,Float:{0.0})
               g_InvisEnt[iEnt] = true
           }
       }
   }

   new adminauthid[35],adminname[35]
   get_user_authid (id,adminauthid,34)
   get_user_name(id,adminname,34)
   Log("[CLEAR-ENTS] Admin: %s || SteamID: %s reset the entities", adminname, adminauthid)

   return PLUGIN_HANDLED
}

/*-------------------------------------------------------------------------------------------------|
|------------------------------------End Entity Mover Code-----------------------------------------|
|-------------------------------------------------------------------------------------------------*/

// 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_iszombie[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, "")
       client_cmd(0, "spk %s", g_WinZomb)
   }
   else if (equal(Message, "#Target_Saved") || equal(Message, "#CTs_Win"))
   {
       show_hudmessage(0, "Builders Win!")
       set_msg_arg_string(2, "")
       client_cmd(0, "spk %s", g_WinHum)
   }
   return PLUGIN_HANDLED
}

public ham_WeaponCleaner_Post(iEntity)
{
   call_think(iEntity)
}

/*-------------------------------------------------------------------------------------------------|
|----------------------------Begin Auto Join on Connect Code----[0003]-----------------------------|
|-------------------------------------------------------------------------------------------------*/

public message_show_menu(msgid, dest, id)
{
   if (!(!get_user_team(id) && !g_isbot[id] && !access(id, ADMIN_IMMUNITY)))//
       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

   static param_menu_msgid[2]
   param_menu_msgid[0] = msgid
   set_task(AUTO_TEAM_JOIN_DELAY, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid)

   return PLUGIN_HANDLED
}

public message_vgui_menu(msgid, dest, id)
{
   if (get_msg_arg_int(1) != TEAM_SELECT_VGUI_MENU_ID || !(!get_user_team(id) && !g_isbot[id] && !access(id, ADMIN_IMMUNITY)))//
       return PLUGIN_CONTINUE

   static param_menu_msgid[2]
   param_menu_msgid[0] = msgid
   set_task(AUTO_TEAM_JOIN_DELAY, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid)

   return PLUGIN_HANDLED
}

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

   static msg_block
   msg_block = get_msg_block(menu_msgid[0])
   set_msg_block(menu_msgid[0], BLOCK_SET)
   engclient_cmd(id, "jointeam", "5")
   engclient_cmd(id, "joinclass", "5")
   set_msg_block(menu_msgid[0], msg_block)

   g_pTeam[id] = cs_get_user_team(id)
   g_pCurTeam[id] = cs_get_user_team(id)
}

/*-------------------------------------------------------------------------------------------------|
|----------------------------End Auto Join on Connect Code-----------------------------------------|
|-------------------------------------------------------------------------------------------------*/

public clcmd_changeteam(id)
{
   if (!access(id, ADMIN_IMMUNITY))
   {
       if (g_iszombie[id])
           client_print (id, print_center, "%L", LANG_SERVER, "FAIL_ZOMBIE")
       else if (g_CanBuild)
           weapon_method_menu(id)
       else
           client_print (id, print_center, "%L", LANG_SERVER, "FAIL_WEAPONS")

       return PLUGIN_HANDLED
   }
   return PLUGIN_CONTINUE
}

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 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 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 msgScoreAttrib(msgid, dest, id)
{
   static attrib
   attrib = get_msg_arg_int(2)

   if(attrib == (1<<1))
       set_msg_arg_int(2, ARG_BYTE, 0)
}

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

           if (szMsg[0] == 'c' && szMsg[1] == '4') return PLUGIN_HANDLED
       else return PLUGIN_CONTINUE

       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 fw_CreateNamedEntity(entclassname)
{
   static classname[10]
   engfunc(EngFunc_SzFromIndex, entclassname, classname, 9)

   return (classname[7] == 'c' && classname[8] == '4') ? FMRES_SUPERCEDE : FMRES_IGNORED
}*/

public cmdBuildBan(id)
{
   if (access(id, BUILD_BAN))
   {
       new arg[32]
       read_argv(1, arg, 31)
       new player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)
       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_ALLOW_SELF)
       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_ALLOW_SELF)

       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 cmdGiveGuns(id)
{
   if (access(id, ADMIN_GUNS))
   {
       new arg[32]
       read_argv(1, arg, 31)
       new player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)

       new playername[35]
       get_user_name(player, playername, 34)

       if (g_isalive[player])
       {
           weapon_method_menu(player)

           client_print(id, print_console, "%L", LANG_SERVER, "GIVEGUNS1", playername)
           client_print(player, print_center, "%L", LANG_SERVER, "GIVEGUNS2")
       }
       else
       {
           client_print(id, print_console, "%L", LANG_SERVER, "GIVEGUNS3", playername)
       }
   }
   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_ALLOW_SELF)

       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)

       g_iszombie[id] = cs_get_user_team(id) == CS_TEAM_T ? true : 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 cmdSay(id)
{
   new arg[64], arg1[31], arg2[32]
   read_args(arg1, charsmax(arg1));
   remove_quotes(arg1);
   read_args(arg,63)
   remove_quotes(arg)
   strtok(arg,arg1,255,arg2,255,' ',1)
   trim(arg2)

   if(arg1[0] == '/')
   {
       if (equali(arg1, "/cmds") == 1 || equali(arg1, "/commands") == 1)
       {
           print_color(id, "%s /respawn, /fixspawn, /help, /round, /guns", formatmodname)
           if (access(id, ADMIN_KICK))
               print_color(id, "%s Admin: /fixspawns, /respawns, removeaim, lockaim, unclaimaim", formatmodname)
           return PLUGIN_HANDLED
       }

       if (equali(arg1, "/respawn") == 1 || equali(arg1, "/revive") == 1)
       {
           Respawn_Zombie(id)
           return PLUGIN_HANDLED
       }

       if (equali(arg1, "/fixspawn") == 1)
       {
           if (g_isconnected[id] && !g_iszombie[id] && g_CanBuild)
               ExecuteHamB(Ham_CS_RoundRespawn, id)

           return PLUGIN_HANDLED
       }
       if (equali(arg1, "/help") == 1 || equali(arg1, "/rules") == 1)
       {
           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);

           return PLUGIN_HANDLED
       }

       if (equali(arg1, "/round") == 1)
       {
           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)

           return PLUGIN_HANDLED
       }

       if (equali(arg1, "/guns") == 1)
       {
           if(!g_isalive[id] || !g_isconnected[id] || g_iszombie[id])
               return PLUGIN_HANDLED

           if(!g_CanBuild && !access(id, ADMIN_GUNS))
               return PLUGIN_HANDLED    

           weapon_method_menu(id)

           return PLUGIN_HANDLED
       }

       if (equali(arg1, "/fixspawns") == 1 && 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)
           }
           return PLUGIN_HANDLED
       }

       if (equali(arg1, "/respawns") == 1 && 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)
           }
           return PLUGIN_HANDLED
       }
   }
   return PLUGIN_CONTINUE
}

/*-------------------------------------------------------------------------------------------------|
|----------------------------------Begin Status Text Code---[0006]---------------------------------|
|-------------------------------------------------------------------------------------------------*/
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);

   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.30
   //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);

       set_hudmessage(color1, 50, color2, -1.0, height, 1, 0.01, 3.0, 0.01, 0.01);
       new nLen, szStatus[512]
       nLen += format( szStatus[nLen], 511-nLen, "%L", LANG_SERVER, "PLAYER_INFO1", name, get_user_health(pid), wpnname);
       ShowSyncHudMsg(id, gHudSyncInfo, szStatus);
   }
   if (g_friend[id] != 1) //enemy
   {
       set_hudmessage(color1, 50, color2, -1.0, height, 1, 0.01, 3.0, 0.01, 0.01);
       ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "PLAYER_INFO2", name);
   }
}

public ev_HideStatus(id)
{
   ClearSyncHud(id, gHudSyncInfo);
}
/*-------------------------------------------------------------------------------------------------|
|------------------------------------------End Player Model Code-----------------------------------|
|-------------------------------------------------------------------------------------------------*/

/*-------------------------------------------------------------------------------------------------|
|-------------------------------Begin Guns Menu Code-[0001]----------------------------------------|
|-------------------------------------------------------------------------------------------------*/

//Call this on player spawn
public weapon_method_menu(id)
{
   if(firsttime[id])
   {
       firsttime[id] = false
       prim_weapons_menu(id,0)
   }
   else
   {
       cur_offset[id] = 0
       show_menu(id,(1<<0)|(1<<1),"\yChoose Your Weapon^n^n\y1. \wNew Guns^n\y2. \wLast Guns",-1,"WeaponMethodMenu")
   }
}

public weapon_method_pushed(id,key)
{
   switch(key)
   {
       case 0: prim_weapons_menu(id,0)
       case 1: 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;
}

/*-------------------------------------------------------------------------------------------------|
|---------------------------------End Guns Menu Code-----------------------------------------------|
|-------------------------------------------------------------------------------------------------*/

public ev_Health(id)
{
   if (is_user_alive(id))
   {
       set_hudmessage(255, 255, 255, -1.0, 0.9, 0, 12.0, 12.0, 0.1, 0.2, 4);
       show_hudmessage(id, "%L", LANG_SERVER, "PLAYER_HEALTH", get_user_health(id));

       set_task(11.9, "ev_Health", id);
   }
}

public msgHealth(msgid, dest, id)
{
   if(!is_user_alive(id))
       return PLUGIN_CONTINUE;

   static hp;
   hp = get_msg_arg_int(1);

   if(hp > 255 && (hp % 256) == 0)
       set_msg_arg_int(1, ARG_BYTE, ++hp);

   return PLUGIN_CONTINUE;
}

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/ADMIN_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()
   }
}

Opublikowano

Podam ci poradnik jak zrobić klase

 

A więc

 

1. W amxx studio , tworzymy nowy pusty plugin.

 

2. Na poczatku dodajemy includy , ma to wygladac tak :

 

#include <amxmodx>
#include <basebuilder>
#include <hamsandwich>
#include <fun>
#include <cstrike>

 

3. Teraz przechodzimy do dawania statystyk naszym zombie.

 

Pod includami dodajemy to :

 

new const zclass1_name[] = { "Nestea" } // nazwa naszego zombie
new const zclass1_info[] = { "Ma dużo HP i wysoko skacze" } // opis zombie
new const zclass1_model[] = { "bb_model_zombie" } // podajemy model zombie // UWAGA ! : np. jak dodajemy model zombie do models to robimy tak :  cstrike/models/player/bb_model_zombie/bb_model_zombie.mdl  --> nazwa folderu (w moim przypadku bb_model_zombie) i plik .mdl w nim sie znajdujacy maja miec taka sama nazwe jak podalismy w modelu zombie
new const zclass1_clawmodel[] = { "v_model_reki_zombie" } // model reki naszego zombie (noza) dodajemy do folderu models z nazwa taka jaka podalismy tutaj
const zclass1_health = 10000 // zycie naszego zombie
const zclass1_speed = 300 // szybkosc naszego zombie
const Float:zclass1_gravity = 0.2 // grawitacja naszego zombie

 

4. Jezeli chcemy aby nasza klasa byla premium to pod :

 

const Float:zclass1_gravity = 0.2

 

dodajemy :

 

const zclass1_adminflags = "ADMIN_LEVEL_H

 

// flage admina mozna zmieniac

 

robimy dodatkowy armor ( niekonieczne)

 

#define NESTEA_ARMOR 200

 

// armor dla naszego zombie

 

5. Teraz rzeczy wykonczeniowe

 

pod nasze klasy ( a podkreslam ze mozemy ich zrobic np. 5 pod soba oddzielajac np. takim czyms //////////)

dodajemy to :

 

new g_zclass_nestea
{

 

nastepnie :

 

register_plugin("[bB] Zombale", "v1.0", "Nestea****Lemon")
// Register all classes
bb_register_zombie_class(zclass1_name, zclass1_info, zclass1_model, zclass1_clawmodel, zclass1_health, zclass1_speed, zclass1_gravity, zclass1_adminflags) // admin flags tylko dla premium !
}

 

6. I końcówka do dodatkowego armora

 

#if defined NESTEA_ARMOR
public plugin_init()
{
RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawn_Post", 1)
}
public ham_PlayerSpawn_Post(id)
{
if (!is_user_alive(id))
return ;
if (bb_is_user_zombie(id) && bb_get_user_zombie_class(id) == g_zclass_nestea)
{
give_item(id, "item_assaultsuit");
cs_set_user_armor(id, NESTEA_ARMOR, CS_ARMOR_VESTHELM);
}
}
#endif

 

Myśle , że się przyda :)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...