Advertisement
Guest User

Untitled

a guest
Aug 1st, 2015
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 54.94 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <cstrike>
  4. #include <fakemeta>
  5. #include <engine>
  6. #include <hamsandwich>
  7. #include <fun>
  8. #include <csx>
  9.  
  10. // Plugin Version
  11. new VERSION[]="6.4"
  12. new formatmodname[] = "^x01 [^x04 Base Builder^x01 ]"
  13.  
  14. //Models
  15. new const g_ZombieModel1[] = "classic2"
  16.  
  17. //Sounds
  18. new g_RoundStart[] = "basebuilder/round_start.wav"
  19. new g_ZombKill1[] = "basebuilder/zombie_kill1.wav"
  20.  
  21. new g_WinZomb[] = "basebuilder/zombies_win.wav"
  22. new g_WinHum[] = "basebuilder/humans_win.wav"
  23.  
  24. #define AFTER_BUILD ADMIN_LEVEL_A
  25. #define DEAD_BUILD ADMIN_LEVEL_B
  26. #define REMOVE_BLOCK ADMIN_LEVEL_C
  27. #define DEAD_REMOVE ADMIN_LEVEL_D
  28. #define LOCK_BLOCKS ADMIN_LEVEL_E
  29. #define PAIN_SHOCK_FREE ADMIN_KICK
  30. #define BAD_SPAWN ADMIN_KICK
  31. #define BUILD_BAN ADMIN_KICK
  32. #define REVIVE ADMIN_BAN
  33. #define SWAP ADMIN_KICK
  34. #define START_ROUND ADMIN_BAN
  35. #define RESET ADMIN_BAN
  36. #define MEMBERSHIP ADMIN_LEVEL_E
  37. #define ADMIN_GUNS ADMIN_KICK
  38. #define ADMIN_RESET ADMIN_BAN
  39.  
  40. #define BUILD_TASK 10000
  41. #define MODELSET_TASK 20000
  42.  
  43. #define MAX_PLAYERS 32
  44. #define AMMO_SLOT 376
  45. #define MODELCHANGE_DELAY 0.5
  46. #define MAXENTS 1365
  47. #define AUTO_TEAM_JOIN_DELAY 0.1
  48. #define TEAM_SELECT_VGUI_MENU_ID 2
  49.  
  50. #if cellbits == 32
  51.     #define OFFSET_BUYZONE 235
  52. #else
  53.     #define OFFSET_BUYZONE 268
  54. #endif
  55.  
  56. #define LockBlock(%1)     ( entity_set_int( %1, EV_INT_iuser1, 1 ) )
  57. #define UnlockBlock(%1)   ( entity_set_int( %1, EV_INT_iuser1, 0 ) )
  58. #define IsBlockLocked(%1) ( entity_get_int( %1, EV_INT_iuser1 ) == 1 )
  59.  
  60. // CS Weapon CBase Offsets (win32)
  61. const OFFSET_WEAPONOWNER = 41
  62. // Linux diff's
  63. const OFFSET_LINUX_WEAPONS = 4
  64.  
  65. new gmsgStatusText, gmsgSayText
  66. new gHudSyncInfo, g_MaxPlayers, g_ModName[32]
  67. const fPainShock = 108
  68.  
  69. new bool:g_CanBuild, bool:g_ZombiesReleased
  70. new g_RoundNum, count_down, g_iEntBarrier
  71. new bool:g_BuildBan[MAX_PLAYERS+1]
  72. new g_pEnt[MAX_PLAYERS+1], Float:g_pDist[MAX_PLAYERS+1], bool:g_MovingEnt[MAXENTS], g_EntMover[MAXENTS],
  73.     g_LastMover[MAXENTS], g_EntOwner[MAXENTS], bool:g_InvisEnt[MAXENTS], g_OwnedEnts[MAX_PLAYERS+1]
  74. new CsTeams:g_pTeam[MAX_PLAYERS+1], CsTeams:g_pCurTeam[MAX_PLAYERS+1]
  75. new g_CurrentWeapon[MAX_PLAYERS+1], g_PrimaryWeapon[MAX_PLAYERS+1], Float:MaxHP[MAX_PLAYERS+1]
  76.  
  77. //Cached Stuff for Players
  78. new g_isconnected[MAX_PLAYERS+1], g_isalive[MAX_PLAYERS+1], g_isbot[MAX_PLAYERS+1],
  79.     g_iszombie[MAX_PLAYERS+1], g_friend[MAX_PLAYERS+1]
  80.  
  81. //Custom Model Stuff
  82. new Float:g_ModelsTargetTime, Float:g_RoundStartTime
  83. new g_HasCustomModel[MAX_PLAYERS+1], g_PlayerModel[MAX_PLAYERS+1][32]
  84.  
  85. // Allowed weapons for zombies
  86. const ZOMBIE_ALLOWED_WEAPONS_BITSUM = (1<<CSW_KNIFE)
  87.  
  88. //CVARS
  89. new g_pcvar_buildtime, g_pcvar_zombiehp, g_pcvar_maxrounds, g_pcvar_basecalc, g_pcvar_resetent,
  90.     g_pcvar_showmovers, g_pcvar_knockback, g_pcvar_allowedweps, g_pcvar_givenades,
  91.     g_pcvar_entmindist, g_pcvar_entsetdist, g_pcvar_entmaxdist, g_pcvar_maxclaimable,
  92.     g_pcvar_claimable, g_pcvar_zresptime
  93.  
  94. new g_fwRoundStart, g_fwGrabEnt, g_fwDropEnt, g_fwNewGameStart, g_fwGameStart, g_fwSwapTeams
  95. new g_fwiFakeReturn
  96.    
  97. //CSDM-Style Weapons Menu
  98. new bool:firsttime[MAX_PLAYERS+1]
  99. new weapon_picked[2][MAX_PLAYERS+1],cur_offset[MAX_PLAYERS+1],options_on_menu[8][MAX_PLAYERS+1]
  100.  
  101. //Weapon Names (For Guns Menu)
  102. static const WEAPONNAMES[24][23] = { "Schmidt Scout", "XM1014 M4", "Ingram MAC-10", "Steyr AUG A1", "UMP 45", "SG-550 Auto-Sniper",
  103.             "IMI Galil", "Famas", "AWP Magnum Sniper", "MP5 Navy", "M249 Para Machinegun", "M3 Super 90", "M4A1 Carbine",
  104.             "Schmidt TMP", "G3SG1 Auto-Sniper", "SG-552 Commando", "AK-47 Kalashnikov", "ES P90", "P228 Compact",
  105.             "Dual Elite Berettas", "Fiveseven", "USP .45 ACP Tactical", "Glock 18C", "Desert Eagle .50 AE"
  106. }
  107.  
  108. // Weapon entity names
  109. new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
  110.             "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
  111.             "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
  112.             "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
  113.             "weapon_ak47", "weapon_knife", "weapon_p90" }
  114.  
  115. public plugin_init()
  116. {
  117.     register_plugin("Base Builder Zombie Mod", VERSION, "Tirant")
  118.     register_cvar("base_builder", VERSION, FCVAR_SPONLY|FCVAR_SERVER)
  119.     set_cvar_string("base_builder", VERSION)
  120.    
  121.     //Basic mod functions/timers
  122.     g_pcvar_buildtime = register_cvar("bb_build_time", "150.0")
  123.     g_pcvar_zombiehp = register_cvar("bb_zombie_health", "2000.0")
  124.     g_pcvar_basecalc = register_cvar("bb_calc_maxbase", "0")
  125.     g_pcvar_showmovers = register_cvar("bb_show_moving", "1")
  126.     g_pcvar_knockback = register_cvar("bb_pain_shock_free", "0")
  127.     g_pcvar_entmaxdist = register_cvar("bb_max_move_dist", "960")
  128.     g_pcvar_entmindist = register_cvar("bb_min_move_dist", "25")
  129.     g_pcvar_entsetdist = register_cvar("bb_min_dist_set", "50")
  130.     g_pcvar_resetent = register_cvar("bb_reset_blocks", "1")
  131.     g_pcvar_maxclaimable = register_cvar("bb_claim_max", "5")
  132.     g_pcvar_claimable = register_cvar("bb_claim_mode", "1")
  133.     g_pcvar_zresptime = register_cvar("bb_zombie_respawn_time", "2.0")
  134.    
  135.     //Guns Menu
  136.     g_pcvar_givenades = register_cvar("bb_give_nades","h")  //h f s, put multiple letters for multiple nades
  137.     g_pcvar_allowedweps = register_cvar("bb_weapons","abcdeghijlmnqrstuvwx")
  138.    
  139.     register_dictionary("basebuilder.txt");
  140.    
  141.     //Client Commands
  142.     register_clcmd("+grab","cmdMoveEnt")                            //command to move stuff around
  143.     register_clcmd("-grab","cmdStopEnt")                            //command to move stuff around
  144.    
  145.     register_clcmd("say", "cmdSay",0, "<target> ")
  146.     register_clcmd("say_team", "cmdSay",0, "<target> ")
  147.  
  148.     //Admin Commands
  149.     register_concmd("removeaim","cmdRemoveEnt",0," - Deletes an object")            //Removes an object (C alive, D dead)
  150.     register_concmd("lockaim","cmdLockBlock",0," - Locks/Unlocks an object form moving")
  151.     register_concmd("unclaimaim","cmdRemoveClaim",0," - Removes a claim on an object")  //Makes block claimable by everyone
  152.     register_concmd("resetaim","cmdResetAim",0," - Resets an object")
  153.    
  154.     register_concmd("bb_buildban","cmdBuildBan",0,"<player>")               //Bans targeted player from building
  155.     register_concmd("bb_unbuildban","cmdBuildUnban",0,"<player>")               //Unbans   "       "     "     "
  156.     register_concmd("bb_revive","cmdRevive",0,"<player>")
  157.     register_concmd("bb_guns","cmdGiveGuns",0,"<player>")                   //revives targetted player
  158.     register_concmd("bb_swap","cmdSwap",0,"<player>")                   //swaps the selected player to the opposite team
  159.     register_concmd("bb_startround","cmdStartRound",0," - Ends the build phase")        //do i really have to explain this?
  160.     register_concmd("bb_reset","cmdResetEnts",0," - Resets all entities")
  161.     register_concmd("bb_clear","cmdClearEnts",0," - Deleted all unused entities")
  162.    
  163.     //Blocked Commands
  164.     register_clcmd("drop", "clcmd_drop")
  165.     register_clcmd("buy", "clcmd_buy")
  166.    
  167.     register_forward(FM_GetGameDescription, "fw_GetGameDescription")
  168.     register_forward(FM_SetClientKeyValue, "fw_SetClientKeyValue")
  169.     register_forward(FM_PlayerPreThink, "fw_Player_PreThink")
  170.     if (get_pcvar_num(g_pcvar_showmovers) == 1)
  171.         register_forward(FM_TraceLine, "fw_Traceline")
  172.    
  173.     RegisterHam(Ham_Touch, "weapon_shield", "ham_WeaponCleaner_Post", 1)
  174.     RegisterHam(Ham_Touch, "weaponbox", "ham_WeaponCleaner_Post", 1)
  175.     RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawn_Post", 1)
  176.     RegisterHam(Ham_TakeDamage, "player", "ham_TakeDamage")
  177.     RegisterHam(Ham_TakeDamage, "player", "ham_TakeDamage_Post", 1)
  178.     for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
  179.         if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "ham_ItemDeploy_Post", 1)
  180.    
  181.     register_message(get_user_msgid("TextMsg"), "msgRoundEnd")
  182.     register_message(get_user_msgid("StatusIcon"), "msgStatusIcon")
  183.     register_message(get_user_msgid("StatusValue"), "msgStatusValue");
  184.     register_message(get_user_msgid("Health"), "msgHealth");
  185.     register_message(get_user_msgid("ScoreAttrib"), "msgScoreAttrib")
  186.    
  187.     register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
  188.     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")
  189.     register_event("StatusValue", "ev_SetTeam", "be", "1=1");
  190.     register_event("StatusValue", "ev_ShowStatus", "be", "1=2", "2!0");
  191.     register_event("StatusValue", "ev_HideStatus", "be", "1=1", "2=0");
  192.    
  193.     register_logevent("logevent_round_start",2, "1=Round_Start")
  194.     register_logevent("logevent_round_end", 2, "1=Round_End")
  195.    
  196.     register_menucmd(register_menuid("WeaponMethodMenu"),(1<<0)|(1<<1)|(1<<2),"weapon_method_pushed")
  197.     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")
  198.     register_menucmd(register_menuid("SecWeaponSelect"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7),"sec_weapons_pushed")
  199.    
  200.     set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET)
  201.    
  202.     //Formats the Mod Name
  203.     formatex(g_ModName, charsmax(g_ModName), "Base Builder %s", VERSION)
  204.    
  205.     gmsgSayText = get_user_msgid("SayText")
  206.     gmsgStatusText = get_user_msgid("StatusText");
  207.     gHudSyncInfo = CreateHudSyncObj();
  208.     g_MaxPlayers = get_maxplayers();
  209.  
  210.     g_fwNewGameStart = CreateMultiForward("bb_new_round",ET_IGNORE)
  211.     g_fwGameStart = CreateMultiForward("bb_timer_started",ET_IGNORE)
  212.     g_fwRoundStart = CreateMultiForward("bb_zombies_released",ET_IGNORE)
  213.     g_fwSwapTeams = CreateMultiForward("bb_teams_swapped",ET_IGNORE)
  214.     g_fwGrabEnt = CreateMultiForward("bb_ent_grabbed",ET_IGNORE, FP_CELL, FP_CELL)
  215.     g_fwDropEnt = CreateMultiForward("bb_ent_dropped",ET_IGNORE, FP_CELL, FP_CELL)
  216.    
  217.     server_cmd("sv_skyname dust")
  218.     server_cmd("mp_freezetime 0")
  219.     server_cmd("mp_flashlight 0")
  220.  
  221.     register_clcmd("chooseteam", "clcmd_changeteam")
  222.     register_clcmd("jointeam", "clcmd_changeteam")
  223.     register_message(get_user_msgid("ShowMenu"), "message_show_menu")
  224.     register_message(get_user_msgid("VGUIMenu"), "message_vgui_menu")
  225.     server_cmd("mp_limitteams 1")
  226.     server_cmd("mp_autoteambalance 1")
  227.  
  228.     g_iEntBarrier = find_ent_by_tname( -1, "barrier" );
  229. }
  230.  
  231. public plugin_precache()
  232. {
  233.     engfunc(EngFunc_PrecacheSound, g_RoundStart)
  234.     engfunc(EngFunc_PrecacheSound, g_ZombKill1)
  235.     engfunc(EngFunc_PrecacheSound, g_WinZomb)
  236.     engfunc(EngFunc_PrecacheSound, g_WinHum)
  237.    
  238.     new szModel[64];
  239.     formatex(szModel, charsmax(szModel), "models/player/%s/%s.mdl", g_ZombieModel1, g_ZombieModel1 );
  240.     engfunc(EngFunc_PrecacheModel, szModel)
  241.    
  242.     new iBomb = create_entity("info_bomb_target");
  243.     entity_set_origin(iBomb, Float:{8192.0,8192.0,8192.0})
  244.    
  245.     new iBuyZone = create_entity("info_map_parameters");
  246.     DispatchKeyValue(iBuyZone, "buying", "3");
  247.     DispatchSpawn(iBuyZone);
  248.    
  249.     g_pcvar_maxrounds = get_cvar_num("mp_maxrounds")
  250. }
  251.  
  252. // Event Round Start (This is before freeze time)
  253. public event_round_start()
  254. {
  255.     arrayset(g_MovingEnt, false, MAXENTS)
  256.     arrayset(g_EntOwner, 0, MAXENTS)
  257.     arrayset(g_LastMover, 0, MAXENTS)
  258.     arrayset(g_OwnedEnts, 0, MAX_PLAYERS+1)
  259.    
  260.     g_RoundStartTime = get_gametime()
  261.     g_ZombiesReleased = false
  262.    
  263.     if (get_pcvar_num(g_pcvar_resetent) == 1)
  264.     {
  265.         new cname[10], tname[7];
  266.         for (new iEnt = g_MaxPlayers+1; iEnt < MAXENTS; iEnt++)
  267.         {
  268.             if (is_valid_ent(iEnt))
  269.             {
  270.                 entity_get_string(iEnt, EV_SZ_classname, cname, 9);
  271.                 entity_get_string(iEnt, EV_SZ_targetname, tname, 6);
  272.                 if (!IsBlockLocked(iEnt) && iEnt != g_iEntBarrier && equal(cname, "func_wall") && !equal(tname, "ignore"))
  273.                 {
  274.                     if (g_InvisEnt[iEnt])
  275.                     {
  276.                         set_pev(iEnt,pev_solid,SOLID_BSP)
  277.                         set_pev(iEnt,pev_renderamt,Float:{255.0})
  278.                         set_pev(iEnt,pev_rendermode,0)
  279.                         g_InvisEnt[iEnt] = false
  280.                     }
  281.                     engfunc( EngFunc_SetOrigin, iEnt, Float:{ 0.0, 0.0, 0.0 } );
  282.                 }
  283.             }
  284.         }
  285.     }
  286.     ExecuteForward(g_fwNewGameStart, g_fwiFakeReturn)
  287. }
  288.  
  289. // Log Event Round Start (This is AFTER freeze time)
  290. public logevent_round_start()
  291. {
  292.     g_CanBuild = true
  293.    
  294.     set_pev(g_iEntBarrier,pev_solid,SOLID_BSP)
  295.     set_pev(g_iEntBarrier,pev_rendermode,1)
  296.     set_pev(g_iEntBarrier,pev_renderamt,Float:{150.0})
  297.    
  298.     set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
  299.     new nLen, szMsg[128]
  300.     nLen += format( szMsg[nLen], 127-nLen, "%L", LANG_SERVER, "WELCOME_MSG", VERSION);
  301.     nLen += format( szMsg[nLen], 127-nLen, "%L", LANG_SERVER, "BIND_KEY");
  302.     show_hudmessage(0, szMsg);
  303.    
  304.     print_color(0, "%s %s ^x04- ^x01%L", formatmodname, VERSION, LANG_SERVER, "ROUND_MSG")
  305.     print_color(0, "%s Round: %d of %d", formatmodname, (g_RoundNum+1), g_pcvar_maxrounds)
  306.    
  307.     remove_task(BUILD_TASK)
  308.    
  309.     set_task(1.0, "CountDown", BUILD_TASK,_, _, "a", get_pcvar_num(g_pcvar_buildtime));
  310.     count_down = (get_pcvar_num(g_pcvar_buildtime)-1);
  311.    
  312.     if (get_pcvar_num(g_pcvar_basecalc) == 1)
  313.         set_task(5.0, "Base_Calc")
  314.    
  315.     ExecuteForward(g_fwGameStart, g_fwiFakeReturn)
  316. }
  317.  
  318. public CountDown()
  319. {
  320.     count_down--
  321.     new mins = count_down/60
  322.     new secs = count_down%60
  323.     if (count_down>=0)
  324.     {
  325.         client_print(0, print_center, "Build Time - %d:%s%d", mins, (secs < 10 ? "0" : ""), secs)
  326.     }
  327.    
  328.     if (mins != 0 && secs == 0)
  329.     {
  330.         new mmin[32]
  331.         num_to_word(mins, mmin, 31)
  332.        
  333.         client_cmd(0, "spk ^"fvox/%s minutes remaining^"", mmin)
  334.     }
  335.     else if (mins == 0 && secs == 30)
  336.     {
  337.         new msec[32]
  338.         num_to_word(secs, msec, 31)
  339.  
  340.         client_cmd(0, "spk ^"fvox/%s seconds remaining^"",  msec)
  341.     }
  342.     if (0<count_down<=10)
  343.     {
  344.         new msec[32]
  345.         num_to_word(count_down, msec, 31)
  346.        
  347.         client_cmd(0, "spk ^"fvox/%s^"", msec)
  348.     }
  349.        
  350.     if (count_down == 0)
  351.     {
  352.         Release_Zombies()
  353.         remove_task(BUILD_TASK);
  354.     }
  355. }
  356.  
  357. public logevent_round_end()
  358. {
  359.     if (!g_CanBuild)
  360.     {
  361.         new players[32], num, player
  362.         get_players(players, num)
  363.         for (new i = 0; i < num; i++)
  364.         {
  365.             player = players[i]
  366.            
  367.             if (g_pCurTeam[player] == g_pTeam[player])
  368.                 cs_set_user_team(player, (g_pTeam[player] = (g_pTeam[player] == CS_TEAM_T ? CS_TEAM_CT : CS_TEAM_T)))
  369.             else
  370.                 g_pTeam[player] = g_pTeam[player] == CS_TEAM_T ? CS_TEAM_CT : CS_TEAM_T
  371.         }
  372.         print_color(0, "^x04%L", LANG_SERVER, "TEAMS_SWAPPED")
  373.         ExecuteForward(g_fwSwapTeams, g_fwiFakeReturn)
  374.     }
  375.    
  376.     remove_task(BUILD_TASK)
  377.        
  378.     return PLUGIN_HANDLED
  379. }
  380.  
  381. public client_death(g_attacker, g_victim, wpnindex, hitplace, TK)
  382. {
  383.     if (g_pEnt[g_victim])
  384.         cmdStopEnt(g_victim)
  385.        
  386.     set_hudmessage(_, _, _, _, _, _, _, _, _, _, 4);
  387.     show_hudmessage(g_victim, "");
  388.    
  389.     g_isalive[g_victim] = false
  390.    
  391.     if (TK == 0 && g_attacker != g_victim)
  392.     {
  393.         if (g_iszombie[g_attacker])
  394.         {
  395.             client_cmd(0, "spk %s", g_ZombKill1)
  396.             new playername[35]
  397.             get_user_name(g_victim, playername, 34)
  398.             set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 5.0, 0.1, 0.2, 1)
  399.             show_hudmessage(0, "%L",LANG_SERVER, "DEAD_ANNOUNCE", playername);
  400.         }
  401.     }
  402.    
  403.     if (g_iszombie[g_victim])
  404.     {
  405.         set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
  406.         show_hudmessage(g_victim, "%L", LANG_SERVER, "DEAD_ZOMBIE", get_pcvar_num(g_pcvar_zresptime));
  407.         set_task(get_pcvar_float(g_pcvar_zresptime), "Respawn_Zombie", g_victim)
  408.     }
  409.     if (!g_iszombie[g_victim])
  410.     {
  411.         set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
  412.         show_hudmessage(g_victim, "%L", LANG_SERVER, "DEAD_SURVIVOR");
  413.         cs_set_user_team(g_victim, cs_get_user_team(g_victim) == CS_TEAM_T ? CS_TEAM_CT:CS_TEAM_T)
  414.         g_iszombie[g_victim] = true
  415.         set_task(5.0, "Respawn_Zombie", g_victim)
  416.     }
  417. }
  418.  
  419. public ham_TakeDamage_Post(victim, inflictor, attacker, Float:damage, bits)
  420. {
  421.     if(get_pcvar_num(g_pcvar_knockback) == 1 && access(victim, PAIN_SHOCK_FREE) && g_iszombie[victim])
  422.     {
  423.         set_pdata_float(victim, fPainShock, 1.0, 5)
  424.     }
  425. }
  426.  
  427. public ham_TakeDamage(victim, inflictor, attacker, Float:damage, damagebits)
  428. {
  429.     if (!g_isalive[victim] || !g_isconnected[attacker]) return HAM_IGNORED
  430.    
  431.     if(g_CanBuild || victim == attacker)
  432.         return HAM_SUPERCEDE
  433.        
  434.     return HAM_HANDLED
  435. }
  436.  
  437. public client_disconnect(id)
  438. {
  439.     cmdStopEnt(id)
  440.  
  441.     g_isconnected[id] = false
  442.     g_isalive[id] = false
  443.     g_isbot[id] = false
  444.     g_iszombie[id] = false
  445.    
  446.     return PLUGIN_CONTINUE
  447. }
  448.  
  449. //Respawns late joiners, cts only if build time is still on
  450. public client_putinserver(id)
  451. {
  452.     set_task(7.0,"Respawn_Human",id);
  453.     g_isconnected[id] = true
  454.     firsttime[id] = true
  455.  
  456.     // Set bot flag
  457.     if (is_user_bot(id))
  458.         g_isbot[id] = true
  459. }
  460.  
  461. public Release_Zombies()
  462. {
  463.     g_CanBuild = false
  464.     g_ZombiesReleased = true
  465.     remove_task(BUILD_TASK);
  466.    
  467.     new weapon[32]
  468.     new he, flash, smoke
  469.     get_pcvar_string(g_pcvar_givenades,weapon,31)
  470.     for(new i=0;i<strlen(weapon);i++)
  471.     {
  472.         switch(weapon[i])
  473.         {
  474.             case 'h': he++
  475.             case 'f': flash++
  476.             case 's': smoke++
  477.         }
  478.     }
  479.    
  480.     new players[32], num
  481.     get_players(players, num)
  482.  
  483.     new player
  484.     for(new i = 0; i < num; i++)
  485.     {
  486.         player = players[i]
  487.         if (g_isalive[player])
  488.         {
  489.             if (!g_iszombie[player])
  490.             {
  491.                 cmdStopEnt(player)
  492.  
  493.                 if(he) give_item(player,"weapon_hegrenade"), cs_set_user_bpammo(player,CSW_HEGRENADE,he)
  494.                 if(flash) give_item(player,"weapon_flashbang"), cs_set_user_bpammo(player,CSW_FLASHBANG,flash)
  495.                 if(smoke) give_item(player,"weapon_smokegrenade"), cs_set_user_bpammo(player,CSW_SMOKEGRENADE,smoke)
  496.  
  497.                 if (g_PrimaryWeapon[player])
  498.                 {
  499.                     get_weaponname(g_PrimaryWeapon[player],weapon,31)
  500.                     engclient_cmd(player, weapon);
  501.                 }
  502.             }
  503.         }
  504.     }
  505.            
  506.     set_pev(g_iEntBarrier,pev_solid,SOLID_NOT)
  507.     set_pev(g_iEntBarrier,pev_renderamt,Float:{0.0})
  508.    
  509.     g_RoundNum++
  510.     set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
  511.     show_hudmessage(0, "%L", LANG_SERVER, "RELEASE_MSG");
  512.     client_cmd(0, "spk %s", g_RoundStart)
  513.    
  514.     ExecuteForward(g_fwRoundStart,g_fwiFakeReturn)
  515. }
  516.  
  517. //Called on zombie death function
  518. public Respawn_Zombie(id)
  519. {
  520.     if (g_isconnected[id] && cs_get_user_team(id) == CS_TEAM_T)
  521.     {
  522.         if (get_user_health(id) ==MaxHP[id] || !is_user_alive(id))
  523.             ExecuteHamB(Ham_CS_RoundRespawn, id)
  524.         else
  525.             client_print(id, print_center, "%L", LANG_SERVER, "FAIL_RESPAWN");
  526.     }
  527. }
  528.  
  529. //Called on al pllayers for late joiners, parent is above
  530. public Respawn_Human(id)
  531. {
  532.     if (!g_isconnected[id] || g_isalive[id] || cs_get_user_team(id) == CS_TEAM_SPECTATOR || cs_get_user_team(id) == CS_TEAM_UNASSIGNED)
  533.         return PLUGIN_HANDLED
  534.        
  535.     if (!g_isalive[id] && g_iszombie[id])
  536.         ExecuteHamB(Ham_CS_RoundRespawn, id)
  537.                
  538.     if (!g_isalive[id] && g_iszombie[id])
  539.         set_task(3.0,"Respawn_Human",id)
  540.            
  541.     if (g_CanBuild)
  542.     {
  543.         if (!g_isalive[id])
  544.             ExecuteHamB(Ham_CS_RoundRespawn, id)
  545.                
  546.         if (!g_isalive[id])
  547.             set_task(3.0,"Respawn_Human",id)
  548.     }
  549.     return PLUGIN_HANDLED
  550. }
  551.  
  552. //Sets player health and weapons
  553. public Add_Effects(id)
  554. {
  555.     if (!g_isconnected[id] || !g_isalive[id])
  556.         return PLUGIN_HANDLED
  557.    
  558.     strip_user_weapons(id)
  559.     give_item(id, "weapon_knife")
  560.    
  561.     if (g_iszombie[id])
  562.     {
  563.         MaxHP[id] = get_pcvar_float(g_pcvar_zombiehp)
  564.         set_pev(id, pev_health, MaxHP[id]) // use decimal number
  565.     }
  566.     else
  567.     {
  568.         weapon_method_menu(id)
  569.         MaxHP[id] = 100.0
  570.     }
  571.     return PLUGIN_HANDLED
  572. }
  573.  
  574. //AmmoX Ensures BackPack ammo is always full
  575. public ev_AmmoX(id)
  576. {
  577.     set_pdata_int(id, AMMO_SLOT + read_data(1), 200, 5)
  578. }
  579.  
  580. //Sets the "Game" description ie. Counter-Strike, in our case Base Builder
  581. public fw_GetGameDescription()
  582. {
  583.     // Return the mod name so it can be easily identified
  584.     forward_return(FMV_STRING, g_ModName)
  585.    
  586.     return FMRES_SUPERCEDE;
  587. }
  588.  
  589. /*-------------------------------------------------------------------------------------------------|
  590. |----------------------------------Begin Player Model Code---[0005]--------------------------------|
  591. |-------------------------------------------------------------------------------------------------*/
  592.  
  593. public ham_PlayerSpawn_Post(id)
  594. {
  595.     if (!is_user_alive(id))
  596.         return
  597.    
  598.     g_isalive[id] = true
  599.     g_pCurTeam[id] = cs_get_user_team(id)
  600.     g_iszombie[id] = g_pCurTeam[id] == CS_TEAM_T ? true : false
  601.    
  602.     Add_Effects(id)
  603.     remove_task(id + MODELSET_TASK)
  604.     if (g_iszombie[id])
  605.     {
  606.         copy(g_PlayerModel[id], charsmax(g_PlayerModel[]), g_ZombieModel1)
  607.         new currentmodel[32]
  608.         fm_get_user_model(id, currentmodel, charsmax(currentmodel))
  609.         if (!equal(currentmodel, g_PlayerModel[id]))
  610.         {
  611.             if (get_gametime() - g_RoundStartTime < 5.0)
  612.                 set_task(5.0 * MODELCHANGE_DELAY, "fm_user_model_update", id + MODELSET_TASK)
  613.             else
  614.                 fm_user_model_update(id + MODELSET_TASK)
  615.         }
  616.     }
  617.     else if (g_HasCustomModel[id])
  618.     {
  619.         fm_reset_user_model(id)
  620.     }
  621. }
  622.  
  623. public fw_SetClientKeyValue(id, const infobuffer[], const key[])
  624. {  
  625.     if (g_HasCustomModel[id] && equal(key, "model"))
  626.         return FMRES_SUPERCEDE
  627.     return FMRES_IGNORED
  628. }
  629.  
  630. public fw_ClientUserInfoChanged(id)
  631. {
  632.     if (!g_HasCustomModel[id])
  633.         return FMRES_IGNORED
  634.     static currentmodel[32]
  635.     fm_get_user_model(id, currentmodel, charsmax(currentmodel))
  636.     if (!equal(currentmodel, g_PlayerModel[id]) && !task_exists(id + MODELSET_TASK))
  637.         fm_set_user_model(id + MODELSET_TASK)
  638.     return FMRES_IGNORED
  639. }
  640.  
  641. public fm_user_model_update(taskid)
  642. {
  643.     static Float:current_time
  644.     current_time = get_gametime()
  645.    
  646.     if (current_time - g_ModelsTargetTime >= MODELCHANGE_DELAY)
  647.     {
  648.         fm_set_user_model(taskid)
  649.         g_ModelsTargetTime = current_time
  650.     }
  651.     else
  652.     {
  653.         set_task((g_ModelsTargetTime + MODELCHANGE_DELAY) - current_time, "fm_set_user_model", taskid)
  654.         g_ModelsTargetTime = g_ModelsTargetTime + MODELCHANGE_DELAY
  655.     }
  656. }
  657.  
  658. public fm_set_user_model(player)
  659. {
  660.     player -= MODELSET_TASK
  661.     engfunc(EngFunc_SetClientKeyValue, player, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", g_PlayerModel[player])
  662.     g_HasCustomModel[player] = true
  663. }
  664.  
  665. stock fm_get_user_model(player, model[], len)
  666. {
  667.     engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", model, len)
  668. }
  669.  
  670. stock fm_reset_user_model(player)
  671. {
  672.     g_HasCustomModel[player] = false
  673.     dllfunc(DLLFunc_ClientUserInfoChanged, player, engfunc(EngFunc_GetInfoKeyBuffer, player))
  674. }
  675.  
  676. /*-------------------------------------------------------------------------------------------------|
  677. |------------------------------------End Player Model Code-----------------------------------------|
  678. |-------------------------------------------------------------------------------------------------*/
  679.  
  680. /*-------------------------------------------------------------------------------------------------|
  681. |----------------------------------Begin Entity Mover Code---[0004]--------------------------------|
  682. |-------------------------------------------------------------------------------------------------*/
  683. public cmdMoveEnt(id)
  684. {
  685.     if (g_BuildBan[id] == true)
  686.         return PLUGIN_HANDLED
  687.    
  688.     if (g_iszombie[id] && !access(id, AFTER_BUILD))
  689.             return PLUGIN_HANDLED
  690.            
  691.     if (!g_CanBuild && !access(id, AFTER_BUILD))
  692.     {
  693.         client_print (id, print_center, "%L", LANG_SERVER, "FAIL_TIME_UP")
  694.         return PLUGIN_HANDLED
  695.     }
  696.    
  697.     if (!g_isalive[id] && !access(id, DEAD_BUILD))
  698.     {
  699.         client_print (id, print_center, "%L", LANG_SERVER, "FAIL_DEAD")
  700.         return PLUGIN_HANDLED
  701.     }
  702.  
  703.     if (g_pEnt[id] && is_valid_ent(g_pEnt[id]))
  704.         cmdStopEnt(id)
  705.    
  706.     new ent, bodypart
  707.     get_user_aiming (id,ent,bodypart)
  708.    
  709.     if (!is_valid_ent(ent) || ent == g_iEntBarrier)
  710.     {
  711.         return PLUGIN_HANDLED
  712.     }
  713.    
  714.     if (ent <= g_MaxPlayers && g_isalive[ent])
  715.     {  
  716.         return PLUGIN_HANDLED
  717.     }
  718.        
  719.     if (IsBlockLocked(ent) || g_MovingEnt[ent])
  720.     {
  721.         return PLUGIN_HANDLED
  722.     }
  723.  
  724.     if (get_pcvar_num(g_pcvar_claimable) == 1)
  725.     {
  726.         if (!g_EntOwner[ent])
  727.         {
  728.             if ((g_OwnedEnts[id]<get_pcvar_num(g_pcvar_maxclaimable)) || get_pcvar_num(g_pcvar_maxclaimable) == 0)
  729.             {
  730.                 g_EntOwner[ent] = id
  731.                 g_OwnedEnts[id]++
  732.             }
  733.             else
  734.             {
  735.                 client_print (id, print_center, "%L", LANG_SERVER, "FAIL_MAXOWNED", get_pcvar_num(g_pcvar_maxclaimable))
  736.             }
  737.         }
  738.         else if (g_EntOwner[ent] != id && !access(id, AFTER_BUILD))
  739.         {
  740.             client_print (id, print_center, "%L", LANG_SERVER, "FAIL_ALREADYOWNED")
  741.             return PLUGIN_HANDLED
  742.         }
  743.     }
  744.    
  745.     new tname[7], cname[10];
  746.     entity_get_string(ent, EV_SZ_targetname, tname, 6);
  747.     entity_get_string(ent, EV_SZ_classname, cname, 9);
  748.     if (!equal(cname, "func_wall") || equal(tname, "ignore"))
  749.     {
  750.         return PLUGIN_HANDLED
  751.     }
  752.    
  753.     new origin[3], Float:entOrigin[3], Float:orig[3], Float:mins[3], Float:maxs[3]
  754.    
  755.     entity_get_vector(ent, EV_VEC_origin, orig);
  756.     entity_get_vector(ent, EV_VEC_mins, mins);
  757.     entity_get_vector(ent, EV_VEC_maxs, maxs);
  758.  
  759.     entOrigin[0] = (mins[0] + maxs[0]) / 2.0 + orig[0];
  760.     entOrigin[1] = (mins[1] + maxs[1]) / 2.0 + orig[1];
  761.     entOrigin[2] = (mins[2] + maxs[2]) / 2.0 + orig[2];
  762.    
  763.     get_user_origin(id, origin);
  764.     IVecFVec(origin, orig)
  765.  
  766.     g_pDist[id] = get_distance_f(orig, entOrigin);
  767.    
  768.     if (get_pcvar_num(g_pcvar_entmindist)) //maximum
  769.     {
  770.         if (g_pDist[id] < get_pcvar_float(g_pcvar_entmindist)) //minimum
  771.             g_pDist[id] = get_pcvar_float(g_pcvar_entsetdist);
  772.         /*if (g_pDist[id] < get_pcvar_float(g_pcvar_entminoffset))
  773.         {
  774.             g_pOffset[id][0] = orig[0] - entOrigin[0]
  775.             g_pOffset[id][1] = orig[1] - entOrigin[1]
  776.             g_pOffset[id][2] = orig[2] - entOrigin[2]
  777.         }*/
  778.     }
  779.  
  780.     if (get_pcvar_num(g_pcvar_entmaxdist)) //maximum
  781.     {
  782.         if (g_pDist[id] > get_pcvar_float(g_pcvar_entmaxdist))
  783.             return PLUGIN_HANDLED
  784.     }
  785.    
  786.     //set_pev(ent,pev_solid, SOLID_NOT)
  787.     set_pev(ent,pev_rendermode,1)
  788.     set_pev(ent,pev_renderamt,Float:{100.0})
  789.     set_pev(ent,pev_rendercolor,Float:{135.0, 206.0, 235.0})
  790.  
  791.     g_MovingEnt[ent] = true
  792.     g_EntMover[ent] = id
  793.     g_pEnt[id] = ent
  794.  
  795.     ExecuteForward(g_fwGrabEnt,g_fwiFakeReturn, id, ent)
  796.    
  797.     if (!g_CanBuild && access(id, AFTER_BUILD))
  798.     {
  799.         new adminauthid[35],adminname[35]
  800.         get_user_authid (id,adminauthid,34)
  801.         get_user_name(id,adminname,34)
  802.         Log("[MOVE] Admin: %s || SteamID: %s moved an entity", adminname, adminauthid)
  803.     }
  804.    
  805.     return PLUGIN_HANDLED
  806. }
  807.  
  808. public fw_Player_PreThink(id)
  809. {
  810.     if (!g_pEnt[id] || !is_valid_ent(g_pEnt[id]))
  811.         return FMRES_HANDLED
  812.        
  813.     new buttons = pev(id, pev_button)
  814.     if (buttons & IN_ATTACK)
  815.     {
  816.         g_pDist[id] += 3.0;
  817.        
  818.         if (g_pDist[id] > get_pcvar_float(g_pcvar_entmaxdist))
  819.         {
  820.             g_pDist[id] = get_pcvar_float(g_pcvar_entmaxdist)
  821.             client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_MAX")
  822.         }
  823.         else
  824.             client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_PUSH")
  825.     }
  826.     else if (buttons & IN_ATTACK2)
  827.     {
  828.         g_pDist[id] -= 3.0;
  829.            
  830.         if (g_pDist[id] < get_pcvar_float(g_pcvar_entsetdist))
  831.         {
  832.             g_pDist[id] = get_pcvar_float(g_pcvar_entsetdist)
  833.             client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_MIN")
  834.         }
  835.         else
  836.             client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_PULL")
  837.     }
  838.    
  839.     new origin[3], Float:aiming[3], Float:pOrigin[3], Float:mins[3], Float:maxs[3], Float:neworigin[3]
  840.    
  841.     if (!g_isconnected[id] || (g_pEnt[id] <= g_MaxPlayers)? !g_isconnected[id]:!is_valid_ent(g_pEnt[id]))
  842.     {
  843.         cmdStopEnt(id)
  844.         return PLUGIN_HANDLED
  845.     }
  846.    
  847.     entity_get_vector(g_pEnt[id], EV_VEC_mins, mins);
  848.     entity_get_vector(g_pEnt[id], EV_VEC_maxs, maxs);
  849.    
  850.     get_user_origin(id, origin, 3);
  851.     IVecFVec(origin, aiming);
  852.     get_user_origin(id, origin);
  853.     IVecFVec(origin, pOrigin);
  854.    
  855.     aiming[0] -= pOrigin[0];
  856.     aiming[1] -= pOrigin[1];
  857.     aiming[2] -= pOrigin[2];
  858.  
  859.     new Float:scalar = g_pDist[id] / vector_length(aiming);
  860.    
  861.     IVecFVec(origin, neworigin);
  862.  
  863.     neworigin[0] += aiming[0] * scalar - (mins[0] + maxs[0]) / 2.0;
  864.     neworigin[1] += aiming[1] * scalar - (mins[1] + maxs[1]) / 2.0;
  865.     neworigin[2] += aiming[2] * scalar - (mins[2] + maxs[2]) / 2.0;
  866.        
  867.     entity_set_origin(g_pEnt[id], neworigin);
  868.    
  869.     return FMRES_HANDLED
  870. }
  871.  
  872. public cmdStopEnt(id)
  873. {
  874.     new ent = g_pEnt[id]
  875.     g_MovingEnt[ent] = false
  876.     //set_pev(ent,pev_solid, SOLID_BSP)
  877.     set_pev(ent,pev_rendermode,0)
  878.     set_pev(ent,pev_renderamt,Float:{255.0})
  879.     set_pev(ent,pev_rendercolor,Float:{0.0, 0.0, 0.0})
  880.  
  881.     ExecuteForward(g_fwDropEnt,g_fwiFakeReturn, id, ent)
  882.    
  883.     g_EntMover[ent] = 0
  884.     g_LastMover[ent] = id
  885.     g_pEnt[id] = 0
  886. }
  887.  
  888. public fw_Traceline(Float:start[3], Float:end[3], conditions, id, trace)
  889. {
  890.     if (!is_user_alive(id))  return PLUGIN_HANDLED
  891.    
  892.     new ent = get_tr2(trace, TR_pHit)
  893.    
  894.     if (is_valid_ent(ent))
  895.     {
  896.         new ent,body
  897.         get_user_aiming(id,ent,body)
  898.        
  899.         new cname[10], tname[7];
  900.         entity_get_string(ent, EV_SZ_classname, cname, 9);
  901.         entity_get_string(ent, EV_SZ_targetname, tname, 6);
  902.         if (equal(cname, "func_wall") && !equal(tname, "ignore") && ent != g_iEntBarrier && get_pcvar_num(g_pcvar_showmovers) == 1)
  903.         {
  904.             if (g_CanBuild || access(id, ADMIN_KICK))
  905.             {
  906.                 if (IsBlockLocked(ent))
  907.                 {
  908.                     set_hudmessage(255, 0, 0, -1.0, 0.55, 1, 0.01, 3.0, 0.01, 0.01);
  909.                     ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_LOCKED");
  910.                     return PLUGIN_HANDLED
  911.                 }
  912.                 set_hudmessage(0, 50, 255, -1.0, 0.55, 1, 0.01, 3.0, 0.01, 0.01);
  913.                 if (get_pcvar_num(g_pcvar_claimable) == 0)
  914.                 {
  915.                     new currentmover[35], lastmover[35]
  916.                     if (g_EntMover[ent])
  917.                     {
  918.                         get_user_name(g_EntMover[ent],currentmover,34)
  919.                         if (!g_LastMover[ent]) ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_INFO1", currentmover);
  920.                     }
  921.                     if (g_LastMover[ent])
  922.                     {
  923.                         get_user_name(g_LastMover[ent],lastmover,34)
  924.                         if (!g_EntMover[ent]) ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_INFO2", lastmover);
  925.                     }
  926.                     if (g_LastMover[ent] && g_EntMover[ent]) ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_INFO3", currentmover, lastmover);
  927.                     else if (!g_LastMover[ent] && !g_EntMover[ent]) ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_INFO4");
  928.                 }
  929.                 else
  930.                 {
  931.                     if (g_EntOwner[ent])
  932.                     {
  933.                         new entowner[35]
  934.                         get_user_name(g_EntOwner[ent],entowner,34)
  935.                         ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_OWNER", entowner);
  936.                     }
  937.                     else
  938.                     {
  939.                         ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_OWNER_NONE");
  940.                     }
  941.                 }
  942.             }
  943.         }
  944.     }
  945.     else ClearSyncHud(id, gHudSyncInfo);
  946.    
  947.     return PLUGIN_HANDLED
  948. }
  949.  
  950. public cmdLockBlock(id)
  951. {
  952.     if (!access(id, LOCK_BLOCKS))
  953.         return PLUGIN_HANDLED
  954.        
  955.     new ent, bodypart
  956.     get_user_aiming (id,ent,bodypart)
  957.    
  958.     new tname[7], cname[10];
  959.     entity_get_string(ent, EV_SZ_targetname, tname, 6);
  960.     entity_get_string(ent, EV_SZ_classname, cname, 9);
  961.  
  962.     if (!ent || !is_valid_ent(ent) || is_user_alive(ent) || ent == g_iEntBarrier || !equal(cname, "func_wall") || equal(tname, "ignore")) return PLUGIN_HANDLED
  963.    
  964.     if (!IsBlockLocked(ent) && !g_MovingEnt[ent])
  965.     {
  966.         LockBlock(ent)
  967.         set_pev(ent,pev_rendermode,1)
  968.         set_pev(ent,pev_rendercolor,Float:{125.0, 0.0, 0.0})
  969.        
  970.         g_OwnedEnts[g_EntOwner[ent]]--
  971.         g_EntOwner[ent] = 0
  972.     }
  973.     else if (IsBlockLocked(ent))
  974.     {
  975.         UnlockBlock(ent)
  976.         set_pev(ent,pev_rendermode,0)
  977.     }
  978.     return PLUGIN_HANDLED
  979. }
  980.  
  981. public cmdRemoveClaim(id)
  982. {
  983.     if (!access(id, LOCK_BLOCKS))
  984.             return PLUGIN_HANDLED
  985.        
  986.     new ent, bodypart
  987.     get_user_aiming (id,ent,bodypart)
  988.    
  989.     new tname[7], cname[10];
  990.     entity_get_string(ent, EV_SZ_targetname, tname, 6);
  991.     entity_get_string(ent, EV_SZ_classname, cname, 9);
  992.  
  993.     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
  994.  
  995.     g_OwnedEnts[g_EntOwner[ent]]--
  996.     g_EntOwner[ent] = 0
  997.    
  998.     return PLUGIN_HANDLED
  999. }
  1000.  
  1001. public cmdRemoveEnt(id)
  1002. {
  1003.     if (!access(id, REMOVE_BLOCK))
  1004.             return PLUGIN_HANDLED
  1005.  
  1006.     if (!g_isalive[id] && !access(id, DEAD_REMOVE))
  1007.     {
  1008.         client_print (id, print_center, "%L", LANG_SERVER, "FAIL_REMOVE")
  1009.         return PLUGIN_HANDLED
  1010.     }
  1011.        
  1012.     new ent, bodypart
  1013.     get_user_aiming (id,ent,bodypart)
  1014.    
  1015.     if(!is_valid_ent(ent) || ent == g_iEntBarrier || (ent <= g_MaxPlayers && g_isalive[ent]))
  1016.         return PLUGIN_HANDLED
  1017.    
  1018.     if(IsBlockLocked(ent) || g_MovingEnt[ent])
  1019.         return PLUGIN_HANDLED
  1020.  
  1021.     new tname[7], cname[10];
  1022.     entity_get_string(ent, EV_SZ_targetname, tname, 6);
  1023.     entity_get_string(ent, EV_SZ_classname, cname, 9);
  1024.     if(!equal(cname, "func_wall"))
  1025.         return PLUGIN_HANDLED
  1026.    
  1027.     if(equal(tname, "ignore"))
  1028.         return PLUGIN_HANDLED
  1029.    
  1030.     g_OwnedEnts[g_EntOwner[ent]]--
  1031.     g_EntOwner[ent] = 0
  1032.    
  1033.     remove_entity(ent)
  1034.    
  1035.     new adminauthid[35],adminname[35]
  1036.     get_user_authid (id,adminauthid,34)
  1037.     get_user_name(id,adminname,34)
  1038.     Log("[REMOVE] Admin: %s || SteamID: %s removed an entity", adminname, adminauthid)
  1039.    
  1040.     return PLUGIN_HANDLED
  1041. }
  1042.  
  1043. public cmdResetEnts(id)
  1044. {
  1045.     if (!access(id, ADMIN_RESET))
  1046.         return PLUGIN_HANDLED
  1047.    
  1048.     new cname[10], tname[7];
  1049.     for (new iEnt = g_MaxPlayers+1; iEnt < MAXENTS; iEnt++)
  1050.     {
  1051.         if (is_valid_ent(iEnt))
  1052.         {
  1053.             entity_get_string(iEnt, EV_SZ_classname, cname, 9);
  1054.             entity_get_string(iEnt, EV_SZ_targetname, tname, 6);
  1055.             if (!IsBlockLocked(iEnt) && iEnt != g_iEntBarrier && equal(cname, "func_wall") && !equal(tname, "ignore"))
  1056.                 engfunc( EngFunc_SetOrigin, iEnt, Float:{ 0.0, 0.0, 0.0 } );
  1057.         }
  1058.     }
  1059.    
  1060.     new adminauthid[35],adminname[35]
  1061.     get_user_authid (id,adminauthid,34)
  1062.     get_user_name(id,adminname,34)
  1063.     Log("[RESET-ENTS] Admin: %s || SteamID: %s reset the entities", adminname, adminauthid)
  1064.    
  1065.     return PLUGIN_HANDLED
  1066. }
  1067.  
  1068. public cmdResetAim(id)
  1069. {
  1070.     if (!access(id, ADMIN_RESET))
  1071.             return PLUGIN_HANDLED
  1072.  
  1073.     new ent, bodypart
  1074.     get_user_aiming (id,ent,bodypart)
  1075.    
  1076.     if(!is_valid_ent(ent) || ent == g_iEntBarrier || (ent <= g_MaxPlayers && g_isalive[ent]))
  1077.     {
  1078.         client_print (id, print_center, "%L", LANG_SERVER, "FAIL_RESET")
  1079.         return PLUGIN_HANDLED
  1080.     }
  1081.    
  1082.     if(IsBlockLocked(ent) || g_MovingEnt[ent])
  1083.     {
  1084.         client_print (id, print_center, "%L", LANG_SERVER, "FAIL_RESET")
  1085.         return PLUGIN_HANDLED
  1086.     }
  1087.  
  1088.     new tname[7], cname[10];
  1089.     entity_get_string(ent, EV_SZ_targetname, tname, 6);
  1090.     entity_get_string(ent, EV_SZ_classname, cname, 9);
  1091.     if(!equal(cname, "func_wall") || equal(tname, "ignore"))
  1092.     {
  1093.         client_print (id, print_center, "%L", LANG_SERVER, "FAIL_RESET")
  1094.         return PLUGIN_HANDLED
  1095.     }
  1096.    
  1097.     engfunc( EngFunc_SetOrigin, ent, Float:{ 0.0, 0.0, 0.0 } );
  1098.    
  1099.     new adminauthid[35],adminname[35], targetauthid[35],targetname[35]
  1100.     get_user_authid (id,adminauthid,34)
  1101.     get_user_name(id,adminname,34)
  1102.     get_user_authid(g_EntOwner[ent],targetauthid,34)
  1103.     get_user_name(g_EntOwner[ent],targetname,34)
  1104.     Log("[REMOVE] Admin: %s || SteamID: %s reset a block belonging to Player: %s || SteamID: %s", adminname, adminauthid, targetauthid, targetname)
  1105.    
  1106.     g_OwnedEnts[g_EntOwner[ent]]--
  1107.     g_EntOwner[ent] = 0
  1108.    
  1109.     return PLUGIN_HANDLED
  1110. }
  1111.  
  1112.  
  1113. public cmdClearEnts(id)
  1114. {
  1115.     if (!access(id, ADMIN_RESET))
  1116.         return PLUGIN_HANDLED
  1117.    
  1118.     new cname[10], tname[7];
  1119.     for (new iEnt = g_MaxPlayers+1; iEnt < MAXENTS; iEnt++)
  1120.     {
  1121.         if (is_valid_ent(iEnt))
  1122.         {
  1123.             entity_get_string(iEnt, EV_SZ_classname, cname, 9);
  1124.             entity_get_string(iEnt, EV_SZ_targetname, tname, 6);
  1125.             if (!IsBlockLocked(iEnt) && iEnt != g_iEntBarrier && equal(cname, "func_wall") && !equal(tname, "ignore") && !g_LastMover[iEnt])
  1126.             {
  1127.                 set_pev(iEnt,pev_solid,SOLID_NOT)
  1128.                 set_pev(iEnt,pev_rendermode,1)
  1129.                 set_pev(iEnt,pev_renderamt,Float:{0.0})
  1130.                 g_InvisEnt[iEnt] = true
  1131.             }
  1132.         }
  1133.     }
  1134.    
  1135.     new adminauthid[35],adminname[35]
  1136.     get_user_authid (id,adminauthid,34)
  1137.     get_user_name(id,adminname,34)
  1138.     Log("[CLEAR-ENTS] Admin: %s || SteamID: %s reset the entities", adminname, adminauthid)
  1139.    
  1140.     return PLUGIN_HANDLED
  1141. }
  1142.  
  1143. /*-------------------------------------------------------------------------------------------------|
  1144. |------------------------------------End Entity Mover Code-----------------------------------------|
  1145. |-------------------------------------------------------------------------------------------------*/
  1146.  
  1147. // Ham Weapon Deploy Forward (forces knife only)
  1148. public ham_ItemDeploy_Post(weapon_ent)
  1149. {
  1150.     static owner
  1151.     owner = get_pdata_cbase(weapon_ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS);
  1152.    
  1153.     static weaponid
  1154.     weaponid = cs_get_weapon_id(weapon_ent)
  1155.    
  1156.     g_CurrentWeapon[owner] = weaponid
  1157.    
  1158.     if (g_iszombie[owner] && !((1<<weaponid) & ZOMBIE_ALLOWED_WEAPONS_BITSUM))
  1159.     {
  1160.         g_CurrentWeapon[owner] = CSW_KNIFE
  1161.         engclient_cmd(owner, "weapon_knife")
  1162.     }
  1163.     else if (g_CanBuild && !g_iszombie[owner])
  1164.     {
  1165.         g_CurrentWeapon[owner] = CSW_KNIFE
  1166.         engclient_cmd(owner, "weapon_knife")
  1167.         client_print(owner, print_center, "%L", LANG_SERVER, "FAIL_KNIFE_ONLY");
  1168.     }
  1169. }
  1170.  
  1171. public msgRoundEnd(const MsgId, const MsgDest, const MsgEntity)
  1172. {
  1173.     static Message[192]
  1174.     get_msg_arg_string(2, Message, 191)
  1175.    
  1176.     set_hudmessage(255, 255, 255, -1.0, 0.40, 0, 6.0, 6.0, 0.1, 0.2, 1)
  1177.    
  1178.     if(equal(Message, "#Game_bomb_drop"))
  1179.         return PLUGIN_HANDLED
  1180.    
  1181.     if (equal(Message, "#Terrorists_Win"))
  1182.     {
  1183.         show_hudmessage(0, "Zombies Win!")
  1184.         set_msg_arg_string(2, "")
  1185.         client_cmd(0, "spk %s", g_WinZomb)
  1186.     }
  1187.     else if (equal(Message, "#Target_Saved") || equal(Message, "#CTs_Win"))
  1188.     {
  1189.         show_hudmessage(0, "Builders Win!")
  1190.         set_msg_arg_string(2, "")
  1191.         client_cmd(0, "spk %s", g_WinHum)
  1192.     }
  1193.     return PLUGIN_HANDLED
  1194. }
  1195.  
  1196. public ham_WeaponCleaner_Post(iEntity)
  1197. {
  1198.     call_think(iEntity)
  1199. }
  1200.  
  1201. /*-------------------------------------------------------------------------------------------------|
  1202. |----------------------------Begin Auto Join on Connect Code----[0003]-----------------------------|
  1203. |-------------------------------------------------------------------------------------------------*/
  1204.  
  1205. public message_show_menu(msgid, dest, id)
  1206. {
  1207.     if (!(!get_user_team(id) && !g_isbot[id] && !access(id, ADMIN_IMMUNITY)))//
  1208.         return PLUGIN_CONTINUE
  1209.  
  1210.     static team_select[] = "#Team_Select"
  1211.     static menu_text_code[sizeof team_select]
  1212.     get_msg_arg_string(4, menu_text_code, sizeof menu_text_code - 1)
  1213.     if (!equal(menu_text_code, team_select))
  1214.         return PLUGIN_CONTINUE
  1215.  
  1216.     static param_menu_msgid[2]
  1217.     param_menu_msgid[0] = msgid
  1218.     set_task(AUTO_TEAM_JOIN_DELAY, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid)
  1219.  
  1220.     return PLUGIN_HANDLED
  1221. }
  1222.  
  1223. public message_vgui_menu(msgid, dest, id)
  1224. {
  1225.     if (get_msg_arg_int(1) != TEAM_SELECT_VGUI_MENU_ID || !(!get_user_team(id) && !g_isbot[id] && !access(id, ADMIN_IMMUNITY)))//
  1226.         return PLUGIN_CONTINUE
  1227.        
  1228.     static param_menu_msgid[2]
  1229.     param_menu_msgid[0] = msgid
  1230.     set_task(AUTO_TEAM_JOIN_DELAY, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid)
  1231.  
  1232.     return PLUGIN_HANDLED
  1233. }
  1234.  
  1235. public task_force_team_join(menu_msgid[], id)
  1236. {
  1237.     if (get_user_team(id))
  1238.         return
  1239.  
  1240.     static msg_block
  1241.     msg_block = get_msg_block(menu_msgid[0])
  1242.     set_msg_block(menu_msgid[0], BLOCK_SET)
  1243.     engclient_cmd(id, "jointeam", "5")
  1244.     engclient_cmd(id, "joinclass", "5")
  1245.     set_msg_block(menu_msgid[0], msg_block)
  1246.    
  1247.     g_pTeam[id] = cs_get_user_team(id)
  1248.     g_pCurTeam[id] = cs_get_user_team(id)
  1249. }
  1250.  
  1251. /*-------------------------------------------------------------------------------------------------|
  1252. |----------------------------End Auto Join on Connect Code-----------------------------------------|
  1253. |-------------------------------------------------------------------------------------------------*/
  1254.  
  1255. public clcmd_changeteam(id)
  1256. {
  1257.     if (!access(id, ADMIN_IMMUNITY))
  1258.     {
  1259.         if (g_iszombie[id])
  1260.             client_print (id, print_center, "%L", LANG_SERVER, "FAIL_ZOMBIE")
  1261.         else if (g_CanBuild)
  1262.             weapon_method_menu(id)
  1263.         else
  1264.             client_print (id, print_center, "%L", LANG_SERVER, "FAIL_WEAPONS")
  1265.            
  1266.         return PLUGIN_HANDLED
  1267.     }
  1268.     return PLUGIN_CONTINUE
  1269. }
  1270.  
  1271. public clcmd_drop(id)
  1272. {
  1273.     client_print (id, print_center, "%L", LANG_SERVER, "FAIL_DROP")
  1274.     return PLUGIN_HANDLED
  1275. }
  1276.  
  1277. public clcmd_buy(id)
  1278. {
  1279.     client_print (id, print_center, "%L", LANG_SERVER, "FAIL_BUY")
  1280.     return PLUGIN_HANDLED
  1281. }
  1282.  
  1283. public Base_Calc()
  1284. {
  1285.     new players[32], num, ct, basenum
  1286.     get_players(players, num)
  1287.     new player
  1288.     for(new i = 0; i < num; i++)
  1289.     {
  1290.         player = players[i]
  1291.         if (cs_get_user_team(player) == CS_TEAM_CT)
  1292.             ct++
  1293.  
  1294.         if (ct < 6)
  1295.             basenum = 2
  1296.         else
  1297.             basenum = (ct/3)
  1298.     }
  1299.     print_color(0, "%s %L", formatmodname, LANG_SERVER, "BASE_CALC", basenum)
  1300. }
  1301.  
  1302. public Fix_Spawns()
  1303. {
  1304.     new players[32], num
  1305.     get_players(players, num)
  1306.            
  1307.     new player
  1308.     for(new i = 0; i < num; i++)
  1309.     {
  1310.         player = players[i]
  1311.         if (cs_get_user_team(player) == CS_TEAM_CT && !is_user_alive(player) && g_isconnected[player] && g_CanBuild)
  1312.             ExecuteHamB(Ham_CS_RoundRespawn, player)
  1313.     }
  1314. }
  1315.  
  1316. public msgScoreAttrib(msgid, dest, id)
  1317. {
  1318.     static attrib
  1319.     attrib = get_msg_arg_int(2)
  1320.    
  1321.     if(attrib == (1<<1))
  1322.         set_msg_arg_int(2, ARG_BYTE, 0)
  1323. }
  1324.  
  1325. public msgStatusIcon(const iMsgId, const iMsgDest, const iPlayer)
  1326. {
  1327.     if(g_isalive[iPlayer] && g_isconnected[iPlayer])
  1328.     {
  1329.         static szMsg[8]
  1330.         get_msg_arg_string(2, szMsg, 7)
  1331.    
  1332.             if (szMsg[0] == 'c' && szMsg[1] == '4') return PLUGIN_HANDLED
  1333.         else return PLUGIN_CONTINUE
  1334.    
  1335.         if(equal(szMsg, "buyzone"))
  1336.         {
  1337.             set_pdata_int(iPlayer, OFFSET_BUYZONE, get_pdata_int(iPlayer, OFFSET_BUYZONE) & ~(1<<0))
  1338.             return PLUGIN_HANDLED
  1339.         }
  1340.     }
  1341.     return PLUGIN_CONTINUE
  1342. }
  1343.  
  1344. /*public fw_CreateNamedEntity(entclassname)
  1345. {
  1346.     static classname[10]
  1347.     engfunc(EngFunc_SzFromIndex, entclassname, classname, 9)
  1348.    
  1349.     return (classname[7] == 'c' && classname[8] == '4') ? FMRES_SUPERCEDE : FMRES_IGNORED
  1350. }*/
  1351.  
  1352. public cmdBuildBan(id)
  1353. {
  1354.     if (access(id, BUILD_BAN))
  1355.     {
  1356.         new arg[32]
  1357.         read_argv(1, arg, 31)
  1358.         new player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)
  1359.         g_BuildBan[player] = true
  1360.         cmdStopEnt(player)
  1361.        
  1362.         new adminauthid[35],adminname[35],playername[35],playerauthid[35]
  1363.         get_user_name(id,adminname,34)
  1364.         get_user_authid (id,adminauthid,34)
  1365.         get_user_name(player, playername, 34)
  1366.         get_user_authid (player,playerauthid,34)
  1367.         Log("[MOVE] Admin: %s || SteamID: %s banned Player: %s || SteamID: %s from building", adminname, adminauthid, playername, playerauthid)
  1368.        
  1369.         client_print(id, print_console, "%L", LANG_SERVER, "BUILD_BAN1", playername)
  1370.         client_print(player, print_center, "%L", LANG_SERVER, "BUILD_BAN2")
  1371.     }
  1372. }
  1373.  
  1374. public cmdBuildUnban(id)
  1375. {
  1376.     if (access(id, BUILD_BAN))
  1377.     {
  1378.         new arg[32], playername[35]
  1379.    
  1380.         read_argv(1, arg, 31)
  1381.         new player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)
  1382.         get_user_name(player, playername, 34)
  1383.         client_print(id, print_console, "%L", LANG_SERVER, "UNBUILD_BAN1", playername)
  1384.         g_BuildBan[player] = false
  1385.         print_color(player, "%s %L", formatmodname, LANG_SERVER, "UNBUILD_BAN2")
  1386.     }
  1387. }
  1388.  
  1389. public cmdRevive(id)
  1390. {
  1391.     if (access(id, REVIVE))
  1392.     {
  1393.         new arg[32]
  1394.         read_argv(1, arg, 31)
  1395.         new player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)
  1396.  
  1397.         if (is_user_alive(player))
  1398.         {
  1399.             client_print(id, print_console, "%L", LANG_SERVER, "FAIL_REVIVE")
  1400.             return PLUGIN_HANDLED
  1401.         }
  1402.        
  1403.         ExecuteHamB(Ham_CS_RoundRespawn, player)
  1404.        
  1405.         new adminauthid[35],adminname[35],playername[35],playerauthid[35]
  1406.         get_user_name(id,adminname,34)
  1407.         get_user_authid (id,adminauthid,34)
  1408.         get_user_name(player, playername, 34)
  1409.         get_user_authid (player,playerauthid,34)
  1410.         Log("[REVIVE] Admin: %s || SteamID: %s revived Player: %s || SteamID: %s", adminname, adminauthid, playername, playerauthid)
  1411.        
  1412.         client_print(id, print_console, "%L", LANG_SERVER, "REVIVE1", playername)
  1413.         client_print(player, print_center, "%L", LANG_SERVER, "REVIVE2")
  1414.     }
  1415.     return PLUGIN_HANDLED
  1416. }
  1417.  
  1418.  
  1419. public cmdGiveGuns(id)
  1420. {
  1421.     if (access(id, ADMIN_GUNS))
  1422.     {
  1423.         new arg[32]
  1424.         read_argv(1, arg, 31)
  1425.         new player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)
  1426.        
  1427.         new playername[35]
  1428.         get_user_name(player, playername, 34)
  1429.        
  1430.         if (g_isalive[player])
  1431.         {
  1432.             weapon_method_menu(player)
  1433.            
  1434.             client_print(id, print_console, "%L", LANG_SERVER, "GIVEGUNS1", playername)
  1435.             client_print(player, print_center, "%L", LANG_SERVER, "GIVEGUNS2")
  1436.         }
  1437.         else
  1438.         {
  1439.             client_print(id, print_console, "%L", LANG_SERVER, "GIVEGUNS3", playername)
  1440.         }
  1441.     }
  1442.     return PLUGIN_HANDLED
  1443. }
  1444.  
  1445. public cmdSwap(id)
  1446. {
  1447.     if (access(id, SWAP))
  1448.     {
  1449.         new arg[32]
  1450.         read_argv(1, arg, 31)
  1451.         new player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)
  1452.  
  1453.         if (!is_user_connected(player)) return PLUGIN_HANDLED
  1454.        
  1455.         cs_set_user_team(player, cs_get_user_team(player) == CS_TEAM_T ? CS_TEAM_CT:CS_TEAM_T)
  1456.            
  1457.         g_iszombie[id] = cs_get_user_team(id) == CS_TEAM_T ? true : false
  1458.        
  1459.         if (is_user_alive(player))
  1460.             ExecuteHamB(Ham_CS_RoundRespawn, player)
  1461.        
  1462.         new adminauthid[35],adminname[35],playername[35],playerauthid[35]
  1463.         get_user_name(id,adminname,34)
  1464.         get_user_authid (id,adminauthid,34)
  1465.         get_user_name(player, playername, 34)
  1466.         get_user_authid (player,playerauthid,34)
  1467.         Log("[TEAM-SWAP] Admin: %s || SteamID: %s swapped Player: %s || SteamID: %s", adminname, adminauthid, playername, playerauthid)
  1468.        
  1469.         client_print(id, print_console, "%L", LANG_SERVER, "SWAP1", playername)
  1470.         client_print(player, print_center, "%L", LANG_SERVER, "SWAP2")
  1471.     }
  1472.     return PLUGIN_HANDLED
  1473. }
  1474.  
  1475. public cmdStartRound(id)
  1476. {
  1477.     if (access(id, START_ROUND))
  1478.     {
  1479.         if (count_down<10)
  1480.         {
  1481.             client_print(id, print_console, "%L", LANG_SERVER, "FAIL_START_ROUND")
  1482.             return PLUGIN_HANDLED
  1483.         }
  1484.        
  1485.         Release_Zombies()
  1486.        
  1487.         new adminauthid[35],adminname[35]
  1488.         get_user_name(id,adminname,34)
  1489.         get_user_authid (id,adminauthid,34)
  1490.         Log("[START_ROUND] Admin: %s || SteamID: %s started the round", adminname, adminauthid)
  1491.        
  1492.         client_print(id, print_center, "%L", LANG_SERVER, "START_ROUND")
  1493.         client_print(id, print_chat, "^x04%L", LANG_SERVER, "START_ROUND")
  1494.     }
  1495.     return PLUGIN_HANDLED
  1496. }
  1497.  
  1498.  
  1499. public cmdSay(id)
  1500. {
  1501.     new arg[64], arg1[31], arg2[32]
  1502.     read_args(arg1, charsmax(arg1));
  1503.     remove_quotes(arg1);
  1504.     read_args(arg,63)
  1505.     remove_quotes(arg)
  1506.     strtok(arg,arg1,255,arg2,255,' ',1)
  1507.     trim(arg2)
  1508.    
  1509.     if(arg1[0] == '/')
  1510.     {
  1511.         if (equali(arg1, "/cmds") == 1 || equali(arg1, "/commands") == 1)
  1512.         {
  1513.             print_color(id, "%s /respawn, /fixspawn, /help, /round, /guns", formatmodname)
  1514.             if (access(id, ADMIN_KICK))
  1515.                 print_color(id, "%s Admin: /fixspawns, /respawns, removeaim, lockaim, unclaimaim", formatmodname)
  1516.             return PLUGIN_HANDLED
  1517.         }
  1518.  
  1519.         if (equali(arg1, "/respawn") == 1 || equali(arg1, "/revive") == 1)
  1520.         {
  1521.             Respawn_Zombie(id)
  1522.             return PLUGIN_HANDLED
  1523.         }
  1524.        
  1525.         if (equali(arg1, "/fixspawn") == 1)
  1526.         {
  1527.             if (g_isconnected[id] && !g_iszombie[id] && g_CanBuild)
  1528.                 ExecuteHamB(Ham_CS_RoundRespawn, id)
  1529.                
  1530.             return PLUGIN_HANDLED
  1531.         }
  1532.         if (equali(arg1, "/help") == 1 || equali(arg1, "/rules") == 1)
  1533.         {
  1534.             set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 15.0, 0.1, 0.2, 2)
  1535.             new nLen, szHelp[512]
  1536.             nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "WELCOME_MSG", VERSION);
  1537.             nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "BIND_KEY");
  1538.             nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE1");
  1539.             nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE2");
  1540.             nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE3");
  1541.             nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE4");
  1542.             nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE5");
  1543.             show_hudmessage(id, szHelp);
  1544.            
  1545.             return PLUGIN_HANDLED
  1546.         }
  1547.  
  1548.         if (equali(arg1, "/round") == 1)
  1549.         {
  1550.             if (g_ZombiesReleased) print_color(id, "%s Round: %d of %d", formatmodname, (g_RoundNum), g_pcvar_maxrounds)
  1551.             else if (!g_ZombiesReleased) print_color(id, "%s Round: %d of %d", formatmodname, (g_RoundNum+1), g_pcvar_maxrounds)
  1552.            
  1553.             return PLUGIN_HANDLED
  1554.         }
  1555.    
  1556.         if (equali(arg1, "/guns") == 1)
  1557.         {
  1558.             if(!g_isalive[id] || !g_isconnected[id] || g_iszombie[id])
  1559.                 return PLUGIN_HANDLED
  1560.            
  1561.             if(!g_CanBuild && !access(id, ADMIN_GUNS))
  1562.                 return PLUGIN_HANDLED  
  1563.        
  1564.             weapon_method_menu(id)
  1565.            
  1566.             return PLUGIN_HANDLED
  1567.         }
  1568.    
  1569.         if (equali(arg1, "/fixspawns") == 1 && access(id, BAD_SPAWN))
  1570.         {
  1571.             new players[32], num
  1572.             get_players(players, num)
  1573.                
  1574.             new player
  1575.             for(new i = 0; i < num; i++)
  1576.             {
  1577.                 player = players[i]
  1578.                 if (cs_get_user_team(player) == CS_TEAM_CT && !is_user_alive(player) && g_isconnected[player] && g_CanBuild)
  1579.                     ExecuteHamB(Ham_CS_RoundRespawn, player)
  1580.             }
  1581.             return PLUGIN_HANDLED
  1582.         }
  1583.        
  1584.         if (equali(arg1, "/respawns") == 1 && access(id, BAD_SPAWN))
  1585.         {
  1586.             new players[32], num
  1587.             get_players(players, num)
  1588.                
  1589.             new player
  1590.             for(new i = 0; i < num; i++)
  1591.             {
  1592.                 player = players[i]
  1593.                 if (cs_get_user_team(player) == CS_TEAM_T && !is_user_alive(player) && g_isconnected[player])
  1594.                     ExecuteHamB(Ham_CS_RoundRespawn, player)
  1595.             }
  1596.             return PLUGIN_HANDLED
  1597.         }
  1598.     }
  1599.     return PLUGIN_CONTINUE
  1600. }
  1601.  
  1602. /*-------------------------------------------------------------------------------------------------|
  1603. |----------------------------------Begin Status Text Code---[0006]---------------------------------|
  1604. |-------------------------------------------------------------------------------------------------*/
  1605. public msgStatusValue()
  1606. {
  1607.     //Block the name info, of person you aim at
  1608.     set_msg_block(gmsgStatusText, BLOCK_SET);
  1609. }
  1610.  
  1611. public ev_SetTeam(id)
  1612. {
  1613.     g_friend[id] = read_data(2)
  1614. }
  1615.  
  1616. public ev_ShowStatus(id) //called when id looks at someone
  1617. {
  1618.     new name[32], pid = read_data(2);
  1619.    
  1620.     get_user_name(pid, name, 31);
  1621.     new color1 = 0, color2 = 0;
  1622.  
  1623.     if (get_user_team(pid) == 1)
  1624.         color1 = 255;
  1625.     else
  1626.         color2 = 255;
  1627.  
  1628.     new Float:height=0.30
  1629.     //height=0.60
  1630.  
  1631.     if (g_friend[id] == 1)  // friend
  1632.     {
  1633.         new clip, ammo, wpnid = get_user_weapon(pid, clip, ammo);
  1634.         new wpnname[32];
  1635.  
  1636.         if (wpnid)
  1637.             xmod_get_wpnname(wpnid, wpnname, 31);
  1638.  
  1639.         set_hudmessage(color1, 50, color2, -1.0, height, 1, 0.01, 3.0, 0.01, 0.01);
  1640.         new nLen, szStatus[512]
  1641.         nLen += format( szStatus[nLen], 511-nLen, "%L", LANG_SERVER, "PLAYER_INFO1", name, get_user_health(pid), wpnname);
  1642.         ShowSyncHudMsg(id, gHudSyncInfo, szStatus);
  1643.     }
  1644.     if (g_friend[id] != 1) //enemy
  1645.     {
  1646.         set_hudmessage(color1, 50, color2, -1.0, height, 1, 0.01, 3.0, 0.01, 0.01);
  1647.         ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "PLAYER_INFO2", name);
  1648.     }
  1649. }
  1650.  
  1651. public ev_HideStatus(id)
  1652. {
  1653.     ClearSyncHud(id, gHudSyncInfo);
  1654. }
  1655. /*-------------------------------------------------------------------------------------------------|
  1656. |------------------------------------------End Player Model Code-----------------------------------|
  1657. |-------------------------------------------------------------------------------------------------*/
  1658.  
  1659. /*-------------------------------------------------------------------------------------------------|
  1660. |-------------------------------Begin Guns Menu Code-[0001]----------------------------------------|
  1661. |-------------------------------------------------------------------------------------------------*/
  1662.  
  1663. //Call this on player spawn
  1664. public weapon_method_menu(id)
  1665. {
  1666.     if(firsttime[id])
  1667.     {
  1668.         firsttime[id] = false
  1669.         prim_weapons_menu(id,0)
  1670.     }
  1671.     else
  1672.     {
  1673.         cur_offset[id] = 0
  1674.         show_menu(id,(1<<0)|(1<<1),"yChoose Your Weapon^n^ny1. wNew Guns^ny2. wLast Guns",-1,"WeaponMethodMenu")
  1675.     }
  1676. }
  1677.  
  1678. public weapon_method_pushed(id,key)
  1679. {
  1680.     switch(key)
  1681.     {
  1682.         case 0: prim_weapons_menu(id,0)
  1683.         case 1: give_weapons(id)
  1684.     }
  1685.     return PLUGIN_HANDLED;
  1686. }
  1687.  
  1688. public prim_weapons_menu(id,offset)
  1689. {
  1690.     if(offset<0) offset = 0
  1691.  
  1692.     new cvar_value[32]
  1693.     get_pcvar_string(g_pcvar_allowedweps,cvar_value,31)
  1694.     new flags = read_flags(cvar_value)
  1695.  
  1696.     new keys, curnum, menu[2048]
  1697.     for(new i=offset;i<19;i++)
  1698.     {
  1699.         if(flags & power(2,i))
  1700.         {
  1701.             options_on_menu[curnum][id] = i
  1702.             keys += (1<<curnum)
  1703.    
  1704.             curnum++
  1705.             format(menu,2047,"%s^n%d. %s",menu,curnum,WEAPONNAMES[i])
  1706.    
  1707.             if(curnum==8)
  1708.             break;
  1709.         }
  1710.     }
  1711.  
  1712.     format(menu,2047,"yPrimary Weapon:w^n%s^n",menu)
  1713.     if(curnum==8 && offset<12)
  1714.     {
  1715.         keys += (1<<8)
  1716.         format(menu,2047,"%s^n9. Next",menu)
  1717.     }
  1718.     if(offset)
  1719.     {
  1720.         keys += (1<<9)
  1721.         format(menu,2047,"%s^n0. Back",menu)
  1722.     }
  1723.  
  1724.     show_menu(id,keys,menu,-1,"PrimaryWeaponSelect")
  1725. }
  1726.  
  1727. public prim_weapons_pushed(id,key)
  1728. {
  1729.     if(key<8)
  1730.     {
  1731.         weapon_picked[0][id] = options_on_menu[key][id]
  1732.         cur_offset[id] = 0
  1733.         sec_weapons_menu(id,0)
  1734.     }
  1735.     else
  1736.     {
  1737.         if(key==8)
  1738.             cur_offset[id] += 8
  1739.         if(key==9)
  1740.             cur_offset[id] -= 8
  1741.         prim_weapons_menu(id,cur_offset[id])
  1742.     }
  1743.     return ;
  1744. }
  1745.  
  1746. public sec_weapons_menu(id,offset)
  1747. {
  1748.     if(offset<0) offset = 0
  1749.  
  1750.     new cvar_value[32]
  1751.     get_pcvar_string(g_pcvar_allowedweps,cvar_value,31)
  1752.     new flags = read_flags(cvar_value)
  1753.  
  1754.     new keys, curnum, menu[2048]
  1755.     for(new i=18;i<24;i++)
  1756.     {
  1757.         if(flags & power(2,i))
  1758.         {
  1759.         options_on_menu[curnum][id] = i
  1760.         keys += (1<<curnum)
  1761.  
  1762.         curnum++
  1763.         format(menu,2047,"%s^n%d. %s",menu,curnum,WEAPONNAMES[i])
  1764.         }
  1765.     }
  1766.  
  1767.     format(menu,2047,"ySecondary Weapon:w^n%s",menu)
  1768.  
  1769.     show_menu(id,keys,menu,-1,"SecWeaponSelect")
  1770. }
  1771.  
  1772. public sec_weapons_pushed(id,key)
  1773. {
  1774.     if(key<8)
  1775.     {
  1776.         weapon_picked[1][id] = options_on_menu[key][id]
  1777.     }
  1778.     give_weapons(id)
  1779.     return ;
  1780. }
  1781.  
  1782. public give_weapons(id)
  1783. {
  1784.     strip_user_weapons(id)
  1785.     give_item(id,"weapon_knife")
  1786.    
  1787.     new weapon[32]
  1788.     new csw = csw_contant(weapon_picked[0][id])
  1789.     get_weaponname(csw,weapon,31)
  1790.     give_item(id,weapon)
  1791.     cs_set_user_bpammo(id,csw,999)
  1792.     g_PrimaryWeapon[id] = csw
  1793.  
  1794.     csw = csw_contant(weapon_picked[1][id])
  1795.     get_weaponname(csw,weapon,31)
  1796.     give_item(id,weapon)
  1797.     cs_set_user_bpammo(id,csw,999)
  1798. }
  1799.  
  1800. public csw_contant(weapon)
  1801. {
  1802.     new num = 29
  1803.     switch(weapon)
  1804.     {
  1805.         case 0: num = 3
  1806.         case 1: num = 5
  1807.         case 2: num = 7
  1808.         case 3: num = 8
  1809.         case 4: num = 12
  1810.         case 5: num = 13
  1811.         case 6: num = 14
  1812.         case 7: num = 15
  1813.         case 8: num = 18
  1814.         case 9: num = 19
  1815.         case 10: num = 20
  1816.         case 11: num = 21
  1817.         case 12: num = 22
  1818.         case 13: num = 23
  1819.         case 14: num = 24
  1820.         case 15: num = 27
  1821.         case 16: num = 28
  1822.         case 17: num = 30
  1823.         case 18: num = 1
  1824.         case 19: num = 10
  1825.         case 20: num = 11
  1826.         case 21: num = 16
  1827.         case 22: num = 17
  1828.         case 23: num = 26
  1829.         case 24:
  1830.         {
  1831.             new s_weapon[32]
  1832.        
  1833.             get_pcvar_string(g_pcvar_allowedweps,s_weapon,31)
  1834.            
  1835.             new flags = read_flags(s_weapon)
  1836.             do
  1837.             {
  1838.                 num = random_num(0,18)
  1839.                 if(!(num & flags))
  1840.                 {
  1841.                     num = -1
  1842.                 }
  1843.             }
  1844.             while(num==-1)
  1845.             num = csw_contant(num)
  1846.         }
  1847.         case 25:
  1848.         {
  1849.             new s_weapon[32]
  1850.  
  1851.             get_pcvar_string(g_pcvar_allowedweps,s_weapon,31)
  1852.        
  1853.             new flags = read_flags(s_weapon)
  1854.             do
  1855.             {
  1856.                 num = random_num(18,23)
  1857.                 if(!(num & flags))
  1858.                 {
  1859.                     num = -1
  1860.                 }
  1861.             }
  1862.             while(num==-1)
  1863.             num = csw_contant(num)
  1864.         }
  1865.     }
  1866.     return num;
  1867. }
  1868.  
  1869. /*-------------------------------------------------------------------------------------------------|
  1870. |---------------------------------End Guns Menu Code-----------------------------------------------|
  1871. |-------------------------------------------------------------------------------------------------*/
  1872.  
  1873.  
  1874.  
  1875. Log(const message_fmt[], any:...)
  1876. {
  1877.     static message[256];
  1878.     vformat(message, sizeof(message) - 1, message_fmt, 2);
  1879.    
  1880.     static filename[96];
  1881.     static dir[64];
  1882.     if( !dir[0] )
  1883.     {
  1884.         get_basedir(dir, sizeof(dir) - 1);
  1885.         add(dir, sizeof(dir) - 1, "/logs");
  1886.     }
  1887.    
  1888.     format_time(filename, sizeof(filename) - 1, "%m-%d-%Y");
  1889.     format(filename, sizeof(filename) - 1, "%s/ADMIN_ACTIVITY_%s.log", dir, filename);
  1890.    
  1891.     log_to_file(filename, "%s", message);
  1892. }
  1893.  
  1894. print_color(target, const message[], any:...)
  1895. {
  1896.     static buffer[512], i, argscount
  1897.     argscount = numargs()
  1898.    
  1899.     // Send to everyone
  1900.     if (!target)
  1901.     {
  1902.         static player
  1903.         for (player = 1; player <= g_MaxPlayers; player++)
  1904.         {
  1905.             if (!g_isconnected[player])
  1906.                 continue;
  1907.  
  1908.             static changed[5], changedcount
  1909.             changedcount = 0
  1910.  
  1911.             for (i = 2; i < argscount; i++)
  1912.             {
  1913.                 if (getarg(i) == LANG_PLAYER)
  1914.                 {
  1915.                     setarg(i, 0, player)
  1916.                     changed[changedcount] = i
  1917.                     changedcount++
  1918.                 }
  1919.             }
  1920.             vformat(buffer, charsmax(buffer), message, 3)
  1921.  
  1922.             message_begin(MSG_ONE_UNRELIABLE, gmsgSayText, _, player)
  1923.             write_byte(player)
  1924.             write_string(buffer)
  1925.             message_end()
  1926.            
  1927.             for (i = 0; i < changedcount; i++)
  1928.                 setarg(changed[i], 0, LANG_PLAYER)
  1929.         }
  1930.     }
  1931.     // Send to specific target
  1932.     else
  1933.     {
  1934.         vformat(buffer, charsmax(buffer), message, 3)
  1935.  
  1936.         message_begin(MSG_ONE, gmsgSayText, _, target)
  1937.         write_byte(target)
  1938.         write_string(buffer)
  1939.         message_end()
  1940.     }
  1941. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement