/* Base Builder Zombie Mod By: Collin "Tirant" Smith Code Contents [0001] - CSDM-Style WPN Menu [0002] - Achievements [0003] - Auto Join on Connect [0004] - Entity Mover [0005] - Player Models [0006] - Status Text [0007] - Unlocks\Upgrades [0008] - Black Market [0009] - Membership */ #include #include #include #include #include #include #include #include #include #include #include #pragma dynamic 32768 // Plugin Version new VERSION[]="7.2" new formatmodname[] = "^x01 [^x04 Base Builder^x01 ]" //Models new const g_ZombieModel1[] = "classic3" new const g_ZombieModel2[] = "fast1" new const g_ZombieModel3[] = "crispy1" //Shield new ShieldView[] = "models/basebuilder/v_riotshield.mdl" new ShieldPlayer[] = "models/basebuilder/p_riotshield2.mdl" //Sounds new g_RoundStart[] = "basebuilder/round_start.wav" new g_RoundStart2[] = "basebuilder/round_start2.wav" new g_JoinServer[] = "sourcevote/welcome.mp3" new g_ZombKill1[] = "basebuilder/zombie_kill1.wav" new g_Concussion[] = "basebuilder/concussion_explode.mp3" new g_AchivementEarned[] = "basebuilder/achievement.wav" new g_UpgradeMenuBuy[] = "events/enemy_died.wav" new g_UnlockMenuBuy[] = "weapons/sshell1.wav" new g_ItemMenuBuy[] = "items/smallmedkit1.wav" //new g_InvalidMenuBuy[] = "ambience/warn2.wav" new g_ResetAchievements[] = "events/task_complete.wav" new g_WinZomb[] = "basebuilder/zombies_win.wav" new g_WinHum[] = "basebuilder/humans_win.wav" #define BUILD_TASK 10000 #define MODELSET_TASK 20000 #define REGEN_TASK 30000 #define OMA_TASK 32500 #define CHANCE_TASK 40000 #define TOUCHING_TASK 50000 #define CONCUSSION_TASK 60000 #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 #define PA_LOW 100.0//25 #define PA_HIGH 200.0//50 #define MAX_ACHIEVEMENTS 21 #define ACHIEVE_ZKILLS 0 #define ACHIEVE_HKILLS 1 #define ACHIEVE_OBJMOVED 2 #define ACHIEVE_HEADSHOTS 3 #define ACHIEVE_CONNECTS 4 #define ACHIEVE_KILLEDBY 5 #define ACHIEVE_CLUBDREAD 6 #define ACHIEVE_KNIFEZOMBIE 7 #define ACHIEVE_HITMAN 8 #define ACHIEVE_INVIS 9 #define ACHIEVE_RAMBO 10 #define ACHIEVE_WAR 11 #define ACHIEVE_ARMS 12 #define ACHIEVE_BANK 13 #define ACHIEVE_HUNT 14 #define ACHIEVE_HP 15 #define ACHIEVE_AP 16 #define ACHIEVE_GR 17 #define ACHIEVE_IN 18 #define ACHIEVE_MERC 19 #define ACHIEVE_SP 20 #define LEVEL_NONE 0 #define LEVEL_I 1 #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 GIVE_CREDITS ADMIN_CVAR #define INFECT ADMIN_BAN #define ADMIN_GUNS ADMIN_KICK #define ADMIN_RESET ADMIN_BAN #define NO_RECOIL_WEAPONS_BITSUM ( 1 << CSW_KNIFE | 1 << CSW_HEGRENADE | 1 << CSW_FLASHBANG | 1 << CSW_SMOKEGRENADE | 1 << CSW_C4 | 1 << CSW_SCOUT | 1 << CSW_AWP | 1 << CSW_M249 ) #if cellbits == 32 #define OFFSET_BUYZONE 235 #else #define OFFSET_BUYZONE 268 #endif #define RELOAD_RATIO 0.66 #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 ) new const Float:g_Color[24][3] = { {200.0, 000.0, 000.0}, {255.0, 083.0, 073.0}, {255.0, 117.0, 056.0}, {255.0, 174.0, 066.0}, {255.0, 207.0, 171.0}, {252.0, 232.0, 131.0}, {254.0, 254.0, 034.0}, {059.0, 176.0, 143.0}, {197.0, 227.0, 132.0}, {000.0, 150.0, 000.0}, {120.0, 219.0, 226.0}, {135.0, 206.0, 235.0}, {128.0, 218.0, 235.0}, {000.0, 000.0, 255.0}, {146.0, 110.0, 174.0}, {255.0, 105.0, 180.0}, {246.0, 100.0, 175.0}, {205.0, 074.0, 076.0}, {250.0, 167.0, 108.0}, {234.0, 126.0, 093.0}, {180.0, 103.0, 077.0}, {149.0, 145.0, 140.0}, {000.0, 000.0, 000.0}, {255.0, 255.0, 255.0} } new const Float:g_RenderColor[27] = { 100.0, //Red 135.0, //Red Orange 140.0, //Orange 120.0, //Yellow Orange 140.0, //Peach 125.0, //Yellow 100.0, //Lemon Yellow 125.0, //Jungle Green 135.0, //Yellow Green 100.0, //Green 125.0, //Aquamarine 150.0, //Baby Blue 090.0, //Sky Blue 075.0, //Blue 175.0, //Violet 150.0, //Hot Pink 175.0, //Magenta 140.0, //Mahogany 140.0, //Tan 140.0, //Light Brown 165.0, //Brown 175.0, //Gray 125.0, //Black 125.0, //White 125.0, //Rainbow 175.0, //Textured 150.0 //Disco } new const g_ColorName[27][] = { "Red", "Red Orange", "Orange", "Yellow Orange", "Peach", "Yellow", "Lemon Yellow", "Jungle Green", "Yellow Green", "Green", "Aquamarine", "Baby Blue", "Sky Blue", "Blue", "Violet", "Hot Pink", "Magenta", "Mahogany", "Tan", "Light Brown", "Brown", "Gray", "Black", "White", "Rainbow", "Textured", "Disco" } enum { RED = 0, //200, 0, 0 REDORANGE, //255, 83, 73 ORANGE, //255, 117, 56 YELLOWORANGE, //255, 174, 66 PEACH, //255, 207, 171 YELLOW, //252, 232, 131 LEMONYELLOW, //254, 254, 34 JUNGLEGREEN, //59, 176, 143 YELLOWGREEN, //197, 227, 132 GREEN, //0, 200, 0 AQUAMARINE, //120, 219, 226 BABYBLUE, //135, 206, 235 SKYBLUE, //128, 218, 235 BLUE, //0, 0, 200 VIOLET, //146, 110, 174 PINK, //255, 105, 180 MAGENTA, //246, 100, 175 MAHOGANY, //205, 74, 76 TAN, //250, 167, 108 LIGHTBROWN, //234, 126, 93 BROWN, //180, 103, 77 GRAY, //149, 145, 140 BLACK, //0, 0, 0 WHITE, //255, 255, 255 RAINBOW, TEXTURED, DISCO } new g_pColor[33] = RED new g_pColorHolder[33] = RED new g_pColorChk[33] = 0 new Float:g_maxs[3] = {-4800.0,-4800.0,-4800.0} new Float:g_mins[3] = {4800.0,4800.0,4800.0} new I_max[3] new I_min[3] // CS Weapon CBase Offsets (win32) const OFFSET_WEAPONOWNER = 41 // Linux diff's const OFFSET_LINUX_WEAPONS = 4 new gmsgStatusText, gmsgSayText, gmsgScreenFade, gmsgScreenShake new gHudSyncInfo new g_MaxPlayers const fPainShock = 108 new bool:g_CanBuild new bool:g_ZombiesReleased new g_RoundNum new g_iEntBarrier new Float: g_fBarrierOrigin[3] new bool:g_BuildBan[33] new g_pEnt[33], Float:g_pDist[33] new Float:g_pOffset[33][3] //new Float:g_pRotation[MAXENTS][3] new bool:g_MovingEnt[MAXENTS] new g_EntMover[MAXENTS] new g_LastMover[MAXENTS] new g_EntOwner[MAXENTS] new bool:g_InvisEnt[MAXENTS] //new Float:fEntOrigin[MAXENTS][3] //Buggy on a few maps :( new bool:g_Touching[MAXENTS] new g_OwnedEnts[33] new g_pThirdPerson[33] new bool:g_pChance[33] new CsTeams:g_pTeam[33], CsTeams:g_pCurTeam[33] new Float:g_ReleaseTime new bool:g_pWinCredits[33] new bool:g_FirstSpawn[33] new count_down //Custom Model Stuff new Float:g_ModelsTargetTime, Float:g_RoundStartTime new g_HasCustomModel[33], g_PlayerModel[33][32] new g_ModName[32] new g_CurrentWeapon[33] new g_PrimaryWeapon[33] // Allowed weapons for zombies const ZOMBIE_ALLOWED_WEAPONS_BITSUM = (1< ") register_clcmd("say_team", "cmdSay",0, " ") //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_addcredits","cmdGiveCredits",0," ") register_concmd("bb_infectme", "cmdInfectMe",0, "Infects you!") register_concmd("bb_addach", "cmdAddAchievement",0, " ") register_concmd("bb_buildban","cmdBuildBan",0,"") //Bans targeted player from building register_concmd("bb_unbuildban","cmdBuildUnban",0,"") //Unbans " " " " register_concmd("bb_revive","cmdRevive",0,"") register_concmd("bb_guns","cmdGiveGuns",0,"") //revives targetted player register_concmd("bb_swap","cmdSwap",0,"") //swaps the selected player to the opposite team register_concmd("bb_resetstats","cmdReset",0,"") //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") register_concmd("bb_cheat","cmdShield",0,"- ????") //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") register_forward(FM_ClientKill, "fw_Suicide") 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_Touch, "func_wall", "ham_TouchWall_Post", 1) RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawn_Post", 1) for (new i = 1; i < sizeof WEAPONENTNAMES; i++) if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "ham_ItemDeploy_Post", 1) RegisterHam(Ham_TakeDamage, "player", "ham_TakeDamage") RegisterHam(Ham_TakeDamage, "player", "ham_TakeDamage_Post", 1) new szWeapon[20]; for (new i=CSW_P228;i<=CSW_P90;i++) { if(!(NO_RECOIL_WEAPONS_BITSUM & (1<0"); register_event("ScreenFade","ev_Flash","b","4=255","5=255","6=255","7>199") register_event("CurWeapon" , "ev_CurWeapon" , "be" , "1=1"); register_logevent("logevent_round_start",2, "1=Round_Start") register_logevent("logevent_round_end", 2, "1=Round_End") register_menucmd(register_menuid("WeaponMethodMenu"),WPN_METH_KEYS,"weapon_method_pushed") register_menucmd(register_menuid("PrimaryWeaponSelect1"),WPN_PRI1,"prim_ass_pushed") register_menucmd(register_menuid("PrimaryWeaponSelect2"),WPN_PRI2,"prim_smg_pushed") register_menucmd(register_menuid("PrimaryWeaponSelect3"),WPN_PRI3,"prim_oth_pushed") register_menucmd(register_menuid("SecWeaponSelect"),WPN_SEC,"sec_weapons_pushed") register_menucmd(register_menuid("UpgradesMenuMain"),UPGRADES_KEYS,"upgrades_menu_pressed") register_menucmd(register_menuid("UnlocksMenuMain"),UN_MAIN,"unlocks_menu_pressed") register_menucmd(register_menuid("UnlocksMenuAss"),UN_PRI1,"un_ass_pushed") register_menucmd(register_menuid("UnlocksMenuSub"),UN_PRI2,"un_smg_pushed") register_menucmd(register_menuid("UnlocksMenuOther"),UN_PRI3,"un_oth_pushed") register_menucmd(register_menuid("UnlocksMenuSec"),UN_SEC,"un_sec_pushed") register_menucmd(register_menuid("MarketMenuMain"),IT_MAIN,"market_menu_pressed") register_menucmd(register_menuid("ItemsMenuMain"),IT_MAIN,"market_menu_pressed") register_menucmd(register_menuid("ItemsMenuMod"),IT_MOD,"modifiers_menu_pressed") register_menucmd(register_menuid("ItemsMenuItems"),IT_ITE,"items_menu_pressed") register_menucmd(register_menuid("ItemsMenuBuffs"),IT_BUFF,"buffs_menu_pressed") register_menucmd(register_menuid("clockMainMenu"), MAIN_MENU_KEYS, "handleMainMenu"); register_menucmd(register_menuid("ColorsSelect"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9),"colors_pushed") set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET) //Formats the Mod Name formatex(g_ModName, charsmax(g_ModName), "Base Builder %s", VERSION) register_dictionary("credits.txt"); register_dictionary("basebuilder.txt"); gmsgSayText = get_user_msgid("SayText") gmsgStatusText = get_user_msgid("StatusText"); gmsgScreenFade = get_user_msgid("ScreenFade"); gmsgScreenShake = get_user_msgid ("ScreenShake") gHudSyncInfo = CreateHudSyncObj(); g_MaxPlayers = get_maxplayers(); //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" ); new Float:mins[3], Float:maxs[3] entity_get_vector(g_iEntBarrier, EV_VEC_mins, mins); entity_get_vector(g_iEntBarrier, EV_VEC_maxs, maxs); g_fBarrierOrigin[0] = (mins[0] + maxs[0]) / 2.0 g_fBarrierOrigin[1] = (mins[1] + maxs[1]) / 2.0 g_fBarrierOrigin[2] = (mins[2] + maxs[2]) / 2.0 if (get_pcvar_num(g_pcvar_chance)) set_task(90.0, "MSG_Chance",_, _, _, "b") set_task(1.5,"Task_HPRegenLoop",_,_,_,"b") find_minmaxs() } public plugin_precache() { register_plugin("Base Builder Zombie Mod", VERSION, "Collin ^"Tirant^" Smith") 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") g_BuildTime = get_pcvar_num(g_pcvar_buildtime) g_pcvar_zombiehp = register_cvar("bb_zombie_health", "2000") g_ZombieHP = get_pcvar_num(g_pcvar_zombiehp) g_pcvar_basecalc = register_cvar("bb_calc_maxbase", "0") g_BaseCalc = get_pcvar_num(g_pcvar_basecalc) g_pcvar_showmovers = register_cvar("bb_show_moving", "1") g_ShowMovers = get_pcvar_num(g_pcvar_showmovers) g_pcvar_knockback = register_cvar("bb_pain_shock_free", "0") g_KnockBack = get_pcvar_num(g_pcvar_knockback) g_pcvar_entmaxdist = register_cvar("bb_max_move_dist", "960") g_EntMaxDist = get_pcvar_float(g_pcvar_entmaxdist) g_pcvar_entmindist = register_cvar("bb_min_move_dist", "25") g_EntMinDist = get_pcvar_float(g_pcvar_entmindist) g_pcvar_entsetdist = register_cvar("bb_min_dist_set", "50") g_EntSetDist = get_pcvar_float(g_pcvar_entsetdist) g_pcvar_xpmult = register_cvar("bb_xp_multiplier", "1") g_XPMult = get_pcvar_num(g_pcvar_xpmult) g_pcvar_resetent = register_cvar("bb_reset_blocks", "1") g_ResetEnt = get_pcvar_num(g_pcvar_resetent) //g_pcvar_maxclaimable = register_cvar("bb_claim_max", "5") //g_MaxClaimable = get_pcvar_num(g_pcvar_maxclaimable) g_pcvar_claimable = register_cvar("bb_claim_mode", "1") g_Claimable = get_pcvar_num(g_pcvar_claimable) g_pcvar_chance = register_cvar("bb_chance", "10") g_Chance = get_pcvar_num(g_pcvar_chance) g_pcvar_newplayer = register_cvar("bb_new_player_credits", "100") g_NewPlayer = get_pcvar_num(g_pcvar_newplayer) //g_pcvar_headless = register_cvar("bb_headless", "13") //g_HeadlessCVAR = get_pcvar_num(g_pcvar_headless) g_pcvar_zombiexp = register_cvar("bb_zombie_xp", "2") g_ZombieXP = get_pcvar_num(g_pcvar_zombiexp) g_pcvar_xprate = register_cvar("bb_reward_rate", "0.1") g_XPRate = get_pcvar_float(g_pcvar_xprate) //Credits g_pcvar_discount = register_cvar("bb_member_discount", "0.5") g_Discount = get_pcvar_float(g_pcvar_discount) g_pcvar_unhpcost = register_cvar("bb_un_cost_hp", "25") g_pcvar_unapcost = register_cvar("bb_un_cost_dmgred", "15") g_pcvar_ungrcost = register_cvar("bb_un_cost_gravity", "20") g_pcvar_unincost = register_cvar("bb_un_cost_invis", "10") g_pcvar_unspcost = register_cvar("bb_un_cost_speed", "20") g_pcvar_unhpmult = register_cvar("bb_un_mult_hp", "5") g_pcvar_unapmult = register_cvar("bb_un_mult_ap", "10") g_pcvar_ungrmult = register_cvar("bb_un_mult_gr", "10") g_pcvar_uninmult = register_cvar("bb_un_mult_in", "7") g_pcvar_unspmult = register_cvar("bb_un_mult_sp", "9") g_pcvar_idmg1cost = register_cvar("bb_cost_dmg", "20") g_pcvar_idmg2cost = register_cvar("bb_cost_gdmg", "40") g_pcvar_ireccost = register_cvar("bb_cost_recoil", "50") g_pcvar_iregcost = register_cvar("bb_cost_regen", "30") g_pcvar_irelcost = register_cvar("bb_cost_reload", "50") g_pcvar_ihelcost = register_cvar("bb_cost_helmet", "25") g_pcvar_iconcost = register_cvar("bb_cost_concussion", "35") g_pcvar_ishicost = register_cvar("bb_cost_shield", "250") g_pcvar_isticost = register_cvar("bb_cost_stimpack", "75") g_pcvar_timesti = register_cvar("bb_time_stimpack", "5") g_pcvar_iomacost = register_cvar("bb_cost_noreloads", "75") g_pcvar_timeoma = register_cvar("bb_time_noreloads", "10") //Guns Menu g_pcvar_givenades = register_cvar("bb_give_nades","h") //h f s, put multiple letters for multiple nades register_cvar("cm_hourtype", "0"); //0: 12 hour, 1: 24 hour register_cvar("cm_hourannounce", "1"); //say the hour on the hour register_cvar("cm_timeoffset", "-7"); //offset the time to a different timezone +/- hours g_pcvar_roundtime = get_cvar_pointer("mp_roundtime") new Float:g_RoundTime = get_pcvar_float(g_pcvar_roundtime)*60.0 g_SurviveTime = g_RoundTime-float(g_BuildTime) engfunc(EngFunc_PrecacheSound, g_RoundStart) engfunc(EngFunc_PrecacheSound, g_RoundStart2) engfunc(EngFunc_PrecacheSound, g_JoinServer) engfunc(EngFunc_PrecacheSound, g_ZombKill1) engfunc(EngFunc_PrecacheSound, g_Concussion) engfunc(EngFunc_PrecacheSound, g_AchivementEarned) engfunc(EngFunc_PrecacheSound, g_UpgradeMenuBuy) engfunc(EngFunc_PrecacheSound, g_UnlockMenuBuy) engfunc(EngFunc_PrecacheSound, g_ItemMenuBuy) //engfunc(EngFunc_PrecacheSound, g_InvalidMenuBuy) engfunc(EngFunc_PrecacheSound, g_ResetAchievements) 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) formatex(szModel, charsmax(szModel), "models/player/%s/%s.mdl", g_ZombieModel2, g_ZombieModel2 ); engfunc(EngFunc_PrecacheModel, szModel) formatex(szModel, charsmax(szModel), "models/player/%s/%s.mdl", g_ZombieModel3, g_ZombieModel3 ); engfunc(EngFunc_PrecacheModel, szModel) precache_model(ShieldView) precache_model(ShieldPlayer) precache_model("models/rpgrocket.mdl") engfunc(EngFunc_PrecacheModel, gszClockFaces) engfunc(EngFunc_PrecacheModel, gszClockDigits) 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") } public MSG_Chance() { print_color(0, "%s ^x04%L", formatmodname, LANG_SERVER, "CR_CHANCE_AD", g_Chance) } public cmdInfectMe(id) { if (access(id, INFECT)) killedby[id]=1 } // 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_Touching, false, MAXENTS) arrayset(has_used_pistol, true, 33) arrayset(g_OwnedEnts, 0, 33) arrayset(g_pChance, false, 33) arrayset(g_pWinCredits, false, 33) g_CanBuild = true g_RoundStartTime = get_gametime() g_ZombiesReleased = false if (g_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_entity_visibility(iEnt, 1) /*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 } ); } } } } } // Log Event Round Start (This is AFTER freeze time) public logevent_round_start() { set_pev(g_iEntBarrier,pev_solid,SOLID_BSP) set_pev(g_iEntBarrier,pev_rendermode,kRenderTransColor) 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^x03 %s ^x04- ^x01%L", formatmodname, VERSION, LANG_SERVER, "ROUND_MSG") print_color(0, "%s^x03 %s ^x04- ^x01%L", formatmodname, VERSION, LANG_SERVER, "CR_ROUND_MSG") print_color(0, "%s^x03 Round:^x04 %d^x01 of^x04 %d", formatmodname, (g_RoundNum+1), g_pcvar_maxrounds) remove_task(BUILD_TASK) set_task(1.0, "CountDown", BUILD_TASK,_, _, "a", g_BuildTime); count_down = (g_BuildTime-1); if (g_BaseCalc == 1) set_task(5.0, "Base_Calc") } 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) new clock = -1; new timeleftDigits[4]; getTimeDigits(CM_BUILDTIMELEFT, timeleftDigits); while ((clock = find_ent_by_class(clock, gszClockClassname))) { new clockType = entity_get_int(clock, EV_INT_groupinfo); if (clockType == CM_BUILDTIMELEFT) { set_clock_digits(clock, timeleftDigits); } } } if ((mins == 1 || mins == 2) && secs == 0) { new mmin[32] num_to_word(mins, mmin, 31) client_cmd(0, "spk ^"fvox/%s minutes remaining^"", mmin) } if ((mins == 0) && secs == 30) { new msec[32] num_to_word(secs, msec, 31) client_cmd(0, "spk ^"fvox/%s seconds remaining^"", msec) } if (019) invisibleman[g_attacker]++ } 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); humankills[g_attacker]++ //credits[g_attacker]+=(get_pcvar_num(g_pcvar_humanxp)*g_XPMult) new reward if (!g_pChance[g_victim]) { new Float:time = (get_gametime() - g_ReleaseTime) reward = floatround(time*g_XPRate) print_color(g_victim, "%s %L", formatmodname, LANG_SERVER, "CR_REWARD_CT", reward) reward*=2 credits[g_victim]+=reward g_pWinCredits[g_victim] = true } new Float:time = (g_SurviveTime - (get_gametime() - g_ReleaseTime)) reward = floatround(time*g_XPRate) print_color(g_attacker, "%s %L", formatmodname, LANG_SERVER, "CR_REWARD_T", reward) reward/=2 credits[g_attacker]+=reward } if (hitplace == 1) { headshots[g_attacker]++ if (g_iszombie[g_attacker]) credits[g_attacker]+=(4*g_XPMult) else credits[g_attacker]+=(1*g_XPMult) } if (killedby[g_attacker]) killedby[g_victim]++ check_achievements(g_victim); check_achievements(g_attacker); check_banker(g_attacker) } 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, "CR_DEAD_ZOMBIE"); set_task(2.0, "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"); if (!g_pChance[g_victim]) print_color(g_victim, "%s %L", formatmodname, LANG_SERVER, "CR_CHANCE_CT_DEAD", g_Chance) cs_set_user_team(g_victim, 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(g_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 (!is_valid_ent(victim) || !is_valid_ent(attacker) || !g_isalive[victim] || !g_isconnected[attacker]) return HAM_IGNORED if(g_CanBuild || victim == attacker || (g_iszombie[victim] && g_iszombie[attacker]) || g_isconcussioned[attacker]) return HAM_SUPERCEDE if (g_iszombie[attacker] && !g_PlayerAchievements[attacker][ACHIEVE_CLUBDREAD]) { totaldamage[attacker] += damage if (totaldamage[attacker]>4999.0) { switch (g_PlayerAchievements[attacker][ACHIEVE_CLUBDREAD]) { case LEVEL_NONE: { g_PlayerAchievements[attacker][ACHIEVE_CLUBDREAD]=LEVEL_I; set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2) show_hudmessage(attacker, "%s^nDeal out 5000 total damage as a zombie!^n+50 Credits", ACHIEVEMENTS[ACHIEVE_CLUBDREAD][LEVEL_I]); credits[attacker]+=50 check_banker(attacker) client_cmd(attacker, "spk %s", g_AchivementEarned); SaveLevel(attacker) } } } } if (g_item_dmg[attacker] && g_isalive[attacker]) { if (g_item_gdmg[attacker]) damage*=1.25 else damage*=1.1 } SetHamParamFloat(4, damage) return HAM_HANDLED } public client_damage(g_attacker, g_victim, damage, wpnindex, hitplace, TA) { if (!g_iszombie[g_attacker]) if (wpnindex != CSW_KNIFE || CSW_DEAGLE || CSW_ELITE || CSW_FIVESEVEN || CSW_GLOCK18 || CSW_P228 || CSW_USP || CSW_HEGRENADE) has_used_pistol[g_attacker] = false } public fw_PrimaryAttack(ent) { new id = pev(ent,pev_owner) if(g_item_rec[id]) pev(id,pev_punchangle,cl_pushangle[id]) return HAM_IGNORED } public fw_PrimaryAttack_Post(ent) { new id = pev(ent,pev_owner) if(g_item_rec[id]) { new Float:push[3] pev(id,pev_punchangle,push) xs_vec_sub(push,cl_pushangle[id],push) xs_vec_mul_scalar(push,0.25,push) xs_vec_add(push,cl_pushangle[id],push) set_pev(id,pev_punchangle,push) } return HAM_IGNORED } public fw_Reload_Post(iEnt) { if( get_pdata_int(iEnt, m_fInReload, 4) ) { new id = get_pdata_cbase(iEnt, m_pPlayer, 4) if(g_item_rel[id]) { new Float:fDelay = g_fDelay[get_pdata_int(iEnt, m_iId, 4)] * RELOAD_RATIO set_pdata_float(id, m_flNextAttack, fDelay, 5) set_pdata_float(iEnt, m_flTimeWeaponIdle, fDelay, 4) set_pev(id, pev_frame, 200.0) } } } public plugin_cfg() { g_Vault = nvault_open( "basebuilder" ); if ( g_Vault == INVALID_HANDLE ) set_fail_state( "Error opening BaseBuilder Achievements nVault, file does not exist!" ); //create the main menu new size = sizeof(gszMainMenuText); add(gszMainMenuText, size, "\yClock Maker Menu^n^n"); add(gszMainMenuText, size, "\r1. \wCreate real time clock^n"); add(gszMainMenuText, size, "\r2. \wCreate build time clock^n^n"); add(gszMainMenuText, size, "\r4. \wDelete clock^n^n"); add(gszMainMenuText, size, "\r5. \wMake larger^n"); add(gszMainMenuText, size, "\r6. \wMake smaller^n^n"); add(gszMainMenuText, size, "\r7. \wSave clocks^n"); add(gszMainMenuText, size, "\r8. \wLoad clocks^n^n"); add(gszMainMenuText, size, "\r0. \wClose^n"); //store current CVAR values (so we can check if they get changed) gTimeOffsetOld = get_cvar_num("cm_timeoffset"); gHourTypeOld = get_cvar_num("cm_hourtype"); //make save folder in basedir new szDir[64]; new szMap[32]; get_basedir(szDir, 64); add(szDir, 64, "/clockmaker"); //create the folder is it doesn't exist if (!dir_exists(szDir)) { mkdir(szDir); } get_mapname(szMap, 32); formatex(gszFile, 96, "%s/%s.cm", szDir, szMap); //load the clocks loadClocks(0); set_task(1.0, "taskUpdateClocks", 0, "", 0, "b"); } public plugin_end() { nvault_close( g_Vault ); return PLUGIN_CONTINUE } public client_disconnect(id) { cmdStopEnt(id) SaveLevel(id) g_isconnected[id] = false g_isalive[id] = false g_isbot[id] = false g_iszombie[id] = false g_BuildBan[id] = false g_pColor[id] = RED g_item_dmg[id] = false g_item_gdmg[id] = false g_item_rec[id] = false g_item_reg[id] = false g_item_rel[id] = false g_item_hel[id] = false g_item_sti[id] = false g_item_shi[id] = false g_item_oma[id] = false remove_task(id+REGEN_TASK) remove_task(id+OMA_TASK) remove_task(id+CONCUSSION_TASK) return PLUGIN_CONTINUE } //Respawns late joiners, cts only if build time is still on public client_putinserver(id) { get_load_key(id) set_task(7.0,"Respawn_Human",id); g_isconnected[id] = true firsttime[id] = true g_FirstSpawn[id] = true g_isalive[id] = false g_isbot[id] = false g_iszombie[id] = false g_BuildBan[id] = false g_isconcussioned[id] = false g_item_dmg[id] = false g_item_gdmg[id] = false g_item_rec[id] = false g_item_reg[id] = false g_item_rel[id] = false g_item_hel[id] = false g_item_sti[id] = false g_item_shi[id] = false g_item_oma[id] = false // Set bot flag if (is_user_bot(id)) g_isbot[id] = true } public Release_Zombies() { g_CanBuild = false g_ZombiesReleased = true g_ReleaseTime = get_gametime() remove_task(BUILD_TASK); new weapon[32] get_pcvar_string(g_pcvar_givenades,weapon,31) new he, flash, smoke for(new i=0;i= 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) && !access(id, MEMBERSHIP)) || g_MovingEnt[ent]) { return PLUGIN_HANDLED } /*if (g_Claimable == 1) { if (!g_EntOwner[ent]) { if ((g_OwnedEnts[id] g_EntMaxDist) return PLUGIN_HANDLED } //test //attach_view(id, ent); if (g_pThirdPerson[id]) set_view(id, CAMERA_UPLEFT) if (g_pColor[id] == TEXTURED) set_pev(ent,pev_rendermode,kRenderTransTexture) else { set_pev(ent,pev_rendermode,kRenderTransColor) if (g_pColor[id] == RAINBOW || g_pColor[id] == DISCO) set_pev(ent,pev_rendercolor,g_Color[g_pColorHolder[id]]) else set_pev(ent,pev_rendercolor,g_Color[g_pColor[id]]) } set_pev(ent,pev_renderamt,g_RenderColor[g_pColor[id]]) g_MovingEnt[ent] = true g_EntMover[ent] = id g_pEnt[id] = ent objectsmoved[id]++ if (objectsmoved[id] == 10000) { switch (g_PlayerAchievements[id][ACHIEVE_OBJMOVED]) { case LEVEL_NONE: { g_PlayerAchievements[id][ACHIEVE_OBJMOVED]=LEVEL_I; set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2) show_hudmessage(id, "%s^nMove 10000 objects!^n+15 Credits", ACHIEVEMENTS[ACHIEVE_OBJMOVED][LEVEL_I]); credits[id]+=15 check_banker(id) client_cmd(id, "spk %s", g_AchivementEarned); SaveLevel(id) } } } if (!g_CanBuild && access(id, AFTER_BUILD)) { new adminauthid[35],adminname[35] get_user_ip (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] > g_EntMaxDist) { g_pDist[id] = g_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] < g_EntSetDist) { g_pDist[id] = g_EntSetDist client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_MIN") } else client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_PULL") } if (!g_isconnected[id] || (g_pEnt[id] <= g_MaxPlayers)? !g_isconnected[id]:!is_valid_ent(g_pEnt[id])) { cmdStopEnt(id) return PLUGIN_HANDLED } /*------------------------------------------------*/ new iOrigin[3], iLook[3]; new Float:fOrigin[3], Float:fLook[3], Float:fDirection[3], Float:vMoveTo[3], Float:fLength get_user_origin(id, iOrigin, 1); //Position from eyes (weapon aiming) get_user_origin(id, iLook, 3); //End position from eyes (hit point for weapon) IVecFVec(iOrigin, fOrigin); IVecFVec(iLook, fLook); fDirection[0] = fLook[0] - fOrigin[0]; fDirection[1] = fLook[1] - fOrigin[1]; fDirection[2] = fLook[2] - fOrigin[2]; fLength = get_distance_f(fLook, fOrigin); if (fLength == 0.0) fLength = 1.0; //avoid division by 0 //calculate the position to move the block vMoveTo[0] = (fOrigin[0] + fDirection[0] * g_pDist[id] / fLength) + g_pOffset[id][0]; vMoveTo[1] = (fOrigin[1] + fDirection[1] * g_pDist[id] / fLength) + g_pOffset[id][1]; vMoveTo[2] = (fOrigin[2] + fDirection[2] * g_pDist[id] / fLength) + g_pOffset[id][2]; vMoveTo[2] = float(floatround(vMoveTo[2], floatround_floor)); //move the block entity_set_origin(g_pEnt[id], vMoveTo); /*------------------------------------------------*/ if (g_pColor[id] == RAINBOW) { switch (g_pColorChk[id]) { case 0: g_pColorHolder[id]++ case 1: g_pColorHolder[id]-- } if (g_pColorHolder[id]>LIGHTBROWN) g_pColorChk[id] = 1 else if (g_pColorHolder[id]BROWN) g_pColorHolder[id] = RED set_pev(g_pEnt[id],pev_rendercolor,g_Color[g_pColorHolder[id]]) } else if (g_pColor[id] == DISCO) { g_pColorHolder[id] = random_num(RED, BROWN) set_pev(g_pEnt[id],pev_rendercolor,g_Color[g_pColorHolder[id]]) } return FMRES_HANDLED } public cmdStopEnt(id) { if (g_pThirdPerson[id]) set_view(id, CAMERA_NONE) new ent = g_pEnt[id] g_MovingEnt[ent] = false set_pev(ent,pev_renderamt,Float:{255.0}) if (IsBlockLocked(ent)) { set_pev(ent,pev_rendermode,kRenderTransColor) set_pev(ent,pev_rendercolor,Float:{125.0, 0.0, 0.0}) set_pev(ent,pev_renderamt,Float:{225.0}) } else { set_pev(ent,pev_rendermode,kRenderNormal) set_pev(ent,pev_rendercolor,Float:{0.0, 0.0, 0.0}) } /*new ent_check, bodypart get_user_aiming (id,ent_check,bodypart)*/ if (/*!is_valid_ent(ent_check)*//* || ent_check != ent || */g_Touching[ent] && !access(id, ADMIN_BAN)) { /*if (g_Touching[ent]) */ //else client_print(id, print_center, "Please don't stick objects in walls") client_print(id, print_center, "Please don't stick objects in other players") engfunc( EngFunc_SetOrigin, ent, Float:{ 0.0, 0.0, 0.0 } ); g_OwnedEnts[g_EntOwner[ent]]-- g_EntOwner[ent] = 0 } /*else if((fEntOrigin[ent][0]<=g_maxs[0] && fEntOrigin[ent][0]>=g_mins[0] && fEntOrigin[ent][1]<=g_maxs[1] && fEntOrigin[ent][1]>=g_mins[1])) { print_color(id, "^x04 Don't block the spawn!!!") print_color(id, "^x04 Don't block the spawn!!!") print_color(id, "^x04 Don't block the spawn!!!") engfunc( EngFunc_SetOrigin, ent, Float:{ 0.0, 0.0, 0.0 } ); g_OwnedEnts[g_EntOwner[ent]]-- g_EntOwner[ent] = 0 }*/ else { new entity = -1 while( ( entity = engfunc( EngFunc_FindEntityInSphere, entity, g_fBarrierOrigin, 200.0 ) ) != 0 ) { if (entity == ent) { print_color(id, "^x04 Don't block the spawn!!!") print_color(id, "^x04 Don't block the spawn!!!") print_color(id, "^x04 Don't block the spawn!!!") engfunc( EngFunc_SetOrigin, entity, Float:{ 0.0, 0.0, 0.0 } ); g_OwnedEnts[g_EntOwner[entity]]-- g_EntOwner[entity] = 0 } } } g_EntMover[ent] = 0 g_LastMover[ent] = id g_pEnt[id] = 0 } public ham_TouchWall_Post(ent, id) { //never check these if (!is_valid_ent(ent) || !g_EntMover[ent] || g_InvisEnt[ent]/* || g_MovingEnt[ent]*/) return HAM_HANDLED remove_task(TOUCHING_TASK+ent) if (g_isalive[id] && (g_iszombie[id] || g_EntMover[ent] == id)) { g_Touching[ent] = true set_task(0.1, "Task_UnTouch", TOUCHING_TASK+ent) } else g_Touching[ent] = false return HAM_HANDLED } public Task_UnTouch(taskent) { taskent -= TOUCHING_TASK g_Touching[taskent] = false } 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 && g_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 (!g_Claimable) { 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,kRenderTransColor) set_pev(ent,pev_rendercolor,Float:{125.0, 0.0, 0.0}) set_pev(ent,pev_renderamt,Float:{225.0}) g_OwnedEnts[g_EntOwner[ent]]-- g_EntOwner[ent] = 0 } else if (IsBlockLocked(ent)) { UnlockBlock(ent) set_pev(ent,pev_rendermode,kRenderNormal) } 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_ip (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_ip (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_ip (id,adminauthid,34) get_user_name(id,adminname,34) get_user_ip(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_entity_visibility(iEnt, 0) //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_ip (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); if (is_valid_ent(owner) && g_isalive[owner] && cs_get_user_shield(owner) == 1) { entity_set_string( owner , EV_SZ_viewmodel , ShieldView ) entity_set_string( owner , EV_SZ_weaponmodel , ShieldPlayer ) } static weaponid weaponid = cs_get_weapon_id(weapon_ent) g_CurrentWeapon[owner] = weaponid if (g_iszombie[owner] && !((1<, /whois ", formatmodname) print_color(id, "%s Colors: /picked, /colors, /random, /rainbow (members), /textured (members), /disco (members)", formatmodname) if (access(id, ADMIN_KICK)) print_color(id, "%s Admin: /fixspawns, /respawns, removeaim, lockaim, unclaimaim", formatmodname) return PLUGIN_HANDLED } if (equali(arg1, "/picked") == 1) { print_color(id, "%s Your current color is: ^x04%s", formatmodname, g_ColorName[g_pColor[id]]) return PLUGIN_HANDLED } if (equali(arg1, "/colors") == 1 || equali(arg1, "/color") == 1) { show_colors_menu(id,0) return PLUGIN_HANDLED } if (equali(arg1, "/rainbow") == 1) { if (access(id, MEMBERSHIP)) { g_pColor[id] = RAINBOW print_color(id, "%s You have picked ^x04%s^x01 as your color", formatmodname, g_ColorName[g_pColor[id]]) } else print_color(id, "%s You have to be a member to use this color", formatmodname) return PLUGIN_HANDLED } if (equali(arg1, "/textured") == 1) { if (access(id, MEMBERSHIP)) { g_pColor[id] = TEXTURED print_color(id, "%s You have picked ^x04%s^x01 as your color", formatmodname, g_ColorName[g_pColor[id]]) } else print_color(id, "%s You have to be a member to use this color", formatmodname) return PLUGIN_HANDLED } if (equali(arg1, "/disco") == 1) { if (access(id, MEMBERSHIP)) { g_pColor[id] = DISCO print_color(id, "%s You have picked ^x04%s^x01 as your color", formatmodname, g_ColorName[g_pColor[id]]) } else print_color(id, "%s You have to be a member to use this color", formatmodname) return PLUGIN_HANDLED } if (equali(arg1, "/random") == 1) { g_pColor[id] = random_num(RED, WHITE) print_color(id, "%s Your new random color is: ^x04%s", formatmodname, g_ColorName[g_pColor[id]]) return PLUGIN_HANDLED } if (equali(arg1, "/pov") == 1) { g_pThirdPerson[id] = g_pThirdPerson[id] ? 0 : 1 if (g_pThirdPerson[id]) print_color(id, "%s You have^x04 ENABLED^x01 thirdperson", formatmodname) else { set_view(id, CAMERA_NONE) print_color(id, "%s You have^x04 DISABLED^x01 thirdperson", formatmodname) } return PLUGIN_HANDLED } if (equali(arg1, "/chance") == 1 && g_iszombie[id]) { if (g_pTeam[id] == CS_TEAM_T) { print_color(id, "%s %L", formatmodname, LANG_SERVER, "FAIL_ZOMBIE") return PLUGIN_HANDLED } if (g_pChance[id]) { print_color(id, "%s %L", formatmodname, LANG_SERVER, "CR_CHANCE_USED") return PLUGIN_HANDLED } else { g_pChance[id] = true switch(random_num(1,g_Chance)) { case 1: { print_color(id, "%s %L", formatmodname, LANG_SERVER, "CR_CHANCE_SUCC") set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 5.0, 0.1, 0.2, 1) show_hudmessage(id, "%L",LANG_SERVER, "CR_CHANCE_ANNOUNCE"); if (g_iszombie[id]) g_iszombie[id] = false cs_set_user_team(id, CS_TEAM_CT) weapon_method_menu(id) MaxHP[id] = 100.0 set_pev(id, pev_health, MaxHP[id]) set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 255) return PLUGIN_HANDLED } default: print_color(id, "%s %L", formatmodname, LANG_SERVER, "CR_CHANCE_FAIL") } } } if (equali(arg1, "/upgrade") == 1) { show_upgrades_menu(id) return PLUGIN_HANDLED } if (equali(arg1, "/unlock") == 1) { show_unlocks_menu(id) 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) { 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 print_color(id, "%s Round: %d of %d", formatmodname, (g_RoundNum+1), g_pcvar_maxrounds) return PLUGIN_HANDLED } if (equali(arg1, "/mystats") == 1) { display_stats(id,id) return PLUGIN_HANDLED } if (equali(arg1, "/ach") == 1 || equali(arg1, "/achievements") == 1) { new tempstring[100]; new motd[2048]; format(motd,2048,"") format(tempstring,100,"Zombie Genocidist - Slaughter 100 zombies

") add(motd,2048,tempstring); format(tempstring,100,"Hmm... Tasty - Kill 25 builders

") add(motd,2048,tempstring); format(tempstring,100,"Base Builder - Move 10000 objects

") add(motd,2048,tempstring); format(tempstring,100,"Cr0wned - Get 50 headshots

") add(motd,2048,tempstring); format(tempstring,100,"One inch at a time - ????????

") add(motd,2048,tempstring); format(tempstring,100,"Infected - Get killed 15 times by people with this achievement

") add(motd,2048,tempstring); format(tempstring,100,"Guns are for girls - Knife a zombie

") add(motd,2048,tempstring); format(tempstring,100,"Dead Wreckening - Deal out 1000 total damage as a zombie

") add(motd,2048,tempstring); format(tempstring,100,"Hitman - Survive a round only using pistols

") add(motd,2048,tempstring); format(tempstring,100,"I see you! - Kill an invisible man

") add(motd,2048,tempstring); format(tempstring,100,"Rambo - Unlock the M249-Para

") add(motd,2048,tempstring); format(tempstring,100,"Arms Dealer - Unlock half of the guns in the game

") add(motd,2048,tempstring); format(tempstring,100,"War Machine - Unlock all of the guns in the game

") add(motd,2048,tempstring); format(tempstring,100,"Break the Bank - Accumulate 5000 credits without spending any

") add(motd,2048,tempstring); format(tempstring,100,"Achievement Hunter - Unlock all of the achievements in the game

") add(motd,2048,tempstring); format(tempstring,100,"Juggernaut - Upgrade to the most max health

") add(motd,2048,tempstring); format(tempstring,100,"Solid Steel - Upgrade to the most armor

") add(motd,2048,tempstring); format(tempstring,100,"Zero Gravity - Upgrade to the lowest possible gravity

") add(motd,2048,tempstring); format(tempstring,100,"The Invisible Man - Upgrade to the lowest visibility

") add(motd,2048,tempstring); format(tempstring,100,"Speed Demon - Upgrade to the fastest speed

") add(motd,2048,tempstring); format(tempstring,100,"Underground Trader - Purchase 10 items from the Black Market

") add(motd,2048,tempstring); add(motd,2048,"
") show_motd(id,motd,"Achievement Information"); 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, "/cm") == 1 && access(id, ADMIN_CLOCK)) { show_menu(id, MAIN_MENU_KEYS, gszMainMenuText, -1, "clockMainMenu"); 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 } if (equali(arg1, "/market") == 1) { show_market_menu(id) return PLUGIN_HANDLED } if (equali(arg1, "/credits") == 1) { print_color(id, "%s %L", formatmodname, LANG_SERVER, "CR_INFO3", credits[id]) return PLUGIN_HANDLED } if (equali(arg1, "/resetallmystats") == 1) { cmdResetExp(id) return PLUGIN_HANDLED } if (!((equal(arg1, "/whois",6)) || (equal(arg1, "/whostats",6)))) return PLUGIN_CONTINUE if (equal(arg1, "/whostats",6)) { new player = cmd_target(id, arg1[10], 0) if (!player) { print_color(id, "%s %L", formatmodname, LANG_SERVER, "CR_FAIL_TARGET", arg1[10]) return PLUGIN_CONTINUE } display_stats(id,player) return PLUGIN_CONTINUE } new player = cmd_target(id, arg1[7], 0) if (!player) { print_color(id, "%s %L", formatmodname, LANG_SERVER, "CR_FAIL_TARGET", arg1[7]) return PLUGIN_CONTINUE } display_achievements(id,player) } return PLUGIN_CONTINUE } public cmdResetExp(id) { zombiekills[id] = 0 humankills[id] = 0 objectsmoved[id] = 0 headshots[id] = 0 connects[id] = 0 killedby[id] = 0 clubdread[id] = 0 totaldamage[id] = 0.0 pistolonly[id] = 0 invisibleman[id] = 0 weaponsbought[id] = 0 g_itemsbought[id] = 0 g_unHPLevel[id] = 0 g_unAPLevel[id] = 0 g_unGRLevel[id] = 0 g_unINLevel[id] = 0 g_unSPLevel[id] = 0 g_galil[id] = 0 g_aug[id] = 0 g_m4a1[id] = 0 g_famas[id] = 0 g_ak47[id] = 0 g_tmp[id] = 0 g_mp5[id] = 0 g_ump[id] = 0 g_p90[id] = 0 g_m3[id] = 0 g_xm1014[id] = 0 g_scout[id] = 0 g_awp[id] = 0 g_para[id] = 0 g_p228[id] = 0 g_five[id] = 0 g_elite[id] = 0 g_glock[id] = 0 g_deagle[id] = 0 g_PlayerAchievements[id][0] = 0 g_PlayerAchievements[id][1] = 0 g_PlayerAchievements[id][2] = 0 g_PlayerAchievements[id][3] = 0 g_PlayerAchievements[id][4] = 0 g_PlayerAchievements[id][5] = 0 g_PlayerAchievements[id][6] = 0 g_PlayerAchievements[id][7] = 0 g_PlayerAchievements[id][8] = 0 g_PlayerAchievements[id][9] = 0 g_PlayerAchievements[id][10] = 0 g_PlayerAchievements[id][11] = 0 g_PlayerAchievements[id][12] = 0 g_PlayerAchievements[id][13] = 0 g_PlayerAchievements[id][14] = 0 g_PlayerAchievements[id][15] = 0 g_PlayerAchievements[id][16] = 0 g_PlayerAchievements[id][17] = 0 g_PlayerAchievements[id][18] = 0 g_PlayerAchievements[id][19] = 0 g_PlayerAchievements[id][20] = 0 SaveLevel(id) print_color(id, "%s Your achievements have been reset!", formatmodname) client_cmd(id, "spk %s", g_ResetAchievements); } public display_achievements(id,achieveid) { new name[30]; get_user_name(achieveid,name,29); new tempstring[100]; new motd[2048]; format(motd,2048,"") format(tempstring,100,"Achievements for Player %s ", name) add(motd,2048,tempstring); add(motd,2048,"

"); for (new counter=0; counter",ACHIEVEMENTS[counter][g_PlayerAchievements[achieveid][counter]]) add(motd,2048,tempstring); } } add(motd,2048,"
"); show_motd(id,motd,"Player Info") return PLUGIN_CONTINUE } public display_stats(id,statsid) { new tempstring[100]; new motd[2048]; new tempname[30] get_user_name(statsid,tempname,29) format(motd,2048,"%s's Achievement Progress

",tempname) format(tempstring,100,"Achievement Hunter - %d/%d
",numofachieve[statsid], MAX_ACHIEVEMENTS) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_ZKILLS]==LEVEL_I) format(tempstring,100,"Zombie Genocidist - 100/100
") else format(tempstring,100,"Zombie Genocidist - %d/100
",zombiekills[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_HKILLS]==LEVEL_I) format(tempstring,100,"Hmm... Tasty - 25/25
") else format(tempstring,100,"Hmm... Tasty - %d/25
",humankills[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_OBJMOVED]==LEVEL_I) format(tempstring,100,"Base Builder - 10000/10000
") else format(tempstring,100,"Base Builder - %d/10000
",objectsmoved[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_HEADSHOTS]==LEVEL_I) format(tempstring,100,"Cr0wned - 50/50
") else format(tempstring,100,"Cr0wned - %d/50
",headshots[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_CONNECTS]==LEVEL_I) format(tempstring,100,"One inch at a time - 10/10
") else format(tempstring,100,"One inch at a time - %d/10
",connects[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_KILLEDBY]==LEVEL_I) format(tempstring,100,"Infected - 15/15
") else format(tempstring,100,"Infected - %d/15
",killedby[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_KNIFEZOMBIE]==LEVEL_I) format(tempstring,100,"Guns are for girls - 1/1
") else format(tempstring,100,"Guns are for girls - %d/1
",clubdread[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_CLUBDREAD]==LEVEL_I) format(tempstring,100,"Dead Wreckening - 5000/5000
") else format(tempstring,100,"Dead Wreckening - %i/5000
",totaldamage[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_HITMAN]==LEVEL_I) format(tempstring,100,"Hitman - 1/1
") else format(tempstring,100,"Hitman - %d/1
",pistolonly[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_INVIS]==LEVEL_I) format(tempstring,100,"I see you! - 1/1
") else format(tempstring,100,"I see you! - %d/1
",invisibleman[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_RAMBO]==LEVEL_I) format(tempstring,100,"Rambo - 1/1
") else format(tempstring,100,"Rambo - %d/1
",g_para[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_ARMS]==LEVEL_I) format(tempstring,100,"Arms Dealer - 9/9
") else format(tempstring,100,"Arms Dealer - %d/9
",weaponsbought[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_WAR]==LEVEL_I) format(tempstring,100,"War Machine - 19/19
") else format(tempstring,100,"War Machine - %d/19
",weaponsbought[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_BANK]==LEVEL_I) format(tempstring,100,"Break the Bank - 5000/5000
") else format(tempstring,100,"Break the Bank - %i/5000
",credits[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_HP]==LEVEL_I) format(tempstring,100,"Juggernaut - 20/20
") else format(tempstring,100,"Juggernaut - %d/20
",g_unHPLevel[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_AP]==LEVEL_I) format(tempstring,100,"Solid Steel - 20/20
") else format(tempstring,100,"Solid Steel - %d/20
",g_unAPLevel[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_GR]==LEVEL_I) format(tempstring,100,"Zero Gravity - 20/20
") else format(tempstring,100,"Zero Gravity - %d/20
",g_unGRLevel[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_IN]==LEVEL_I) format(tempstring,100,"The Invisible Man - 20/20
") else format(tempstring,100,"The Invisible Man - %d/20
",g_unINLevel[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_SP]==LEVEL_I) format(tempstring,100,"Speed Demon - 20/20
") else format(tempstring,100,"Speed Demon - %d/20
",g_unSPLevel[statsid]) add(motd,2048,tempstring); /*--------------------------------------------------------------------------------*/ if (g_PlayerAchievements[id][ACHIEVE_MERC]==LEVEL_I) format(tempstring,100,"Underground Trader - 50/50
") else format(tempstring,100,"Underground Trader - %d/50
",g_itemsbought[statsid]) add(motd,2048,tempstring); add(motd,2048,"
") show_motd(id,motd,"Current Weapon Stats"); } //Gives achievement to specified player public cmdAddAchievement(id) { if (!access(id, GIVE_CREDITS)) return PLUGIN_HANDLED new Arg1[24] new Arg2[4] new Arg3[4] read_argv(1, Arg1, 23) read_argv(2, Arg2, 3) read_argv(3, Arg3, 3) new achievement = str_to_num(Arg2) new level = str_to_num(Arg3) new player = cmd_target(id, Arg1, 0) if (!player || (level>1) || (level<0) || (achievement>2) || (achievement<0)) { console_print(id, "Sorry, player %s could not be found or targetted!, Or invalid achievment/level", Arg1) return PLUGIN_HANDLED } else { g_PlayerAchievements[player][achievement]=level; print_color(0, "%s The ^"%s^" achievement has been awarded to %s",formatmodname,ACHIEVEMENTS[achievement][level],Arg1) SaveLevel(player) } new adminname[35],adminauthid[35],targetname[35],targetauthid[35] get_user_name(id,adminname,34) get_user_ip (id,adminauthid,34) get_user_name(player,targetname,34) get_user_ip (player,targetauthid,34) Log("[XP] Admin: %s || SteamID: %s gave the %s achievement to player %s (%s)", adminname, adminauthid, ACHIEVEMENTS[achievement][level], targetname, targetauthid) return PLUGIN_HANDLED } public check_achievements(id) { if (g_isbot[id]) return; new bool:achievementgained=false; new currentachievement=0; new wroundstats[8],wroundbodyhits[8]//,wstats[8],wbodyhits[8]; new kills; new roundkills[8]; wroundstats[0]=0; wroundstats[2]=0; get_user_rstats(id,roundkills,wroundbodyhits); //print_color(id, "%s Checking for any new achievements...", formatmodname) set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2) if (roundkills[0]) { //Kills as a Zombie currentachievement=g_PlayerAchievements[id][ACHIEVE_ZKILLS]; kills=zombiekills[id]; switch (currentachievement) { case LEVEL_NONE: if (kills>99) { g_PlayerAchievements[id][ACHIEVE_ZKILLS]=LEVEL_I; show_hudmessage(id, "%s^nKill 100 zombies!^n+25 Credits", ACHIEVEMENTS[ACHIEVE_ZKILLS][LEVEL_I]); credits[id]+=25 achievementgained=true; } } //Kills as a Builder currentachievement=g_PlayerAchievements[id][ACHIEVE_HKILLS]; kills=humankills[id]; switch (currentachievement) { case LEVEL_NONE: if (kills>24) { g_PlayerAchievements[id][ACHIEVE_HKILLS]=LEVEL_I; show_hudmessage(id, "%s^nKill 25 builders!^n+25 Credits", ACHIEVEMENTS[ACHIEVE_HKILLS][LEVEL_I]); credits[id]+=25 achievementgained=true; } } //Total Headshots currentachievement=g_PlayerAchievements[id][ACHIEVE_HEADSHOTS]; kills=headshots[id]; switch (currentachievement) { case LEVEL_NONE: if (kills>49) { g_PlayerAchievements[id][ACHIEVE_HEADSHOTS]=LEVEL_I; show_hudmessage(id, "%s^nGet 50 headshots!^n+50 Credits", ACHIEVEMENTS[ACHIEVE_HEADSHOTS][LEVEL_I]); credits[id]+=50 achievementgained=true; } } //Total Connects currentachievement=g_PlayerAchievements[id][ACHIEVE_CONNECTS]; kills=connects[id]; switch (currentachievement) { case LEVEL_NONE: if (kills>9) { g_PlayerAchievements[id][ACHIEVE_CONNECTS]=LEVEL_I; show_hudmessage(id, "%s^n??????????^n+5 Credits", ACHIEVEMENTS[ACHIEVE_CONNECTS][LEVEL_I]); credits[id]+=5 achievementgained=true; } } //Infected currentachievement=g_PlayerAchievements[id][ACHIEVE_KILLEDBY]; kills=killedby[id]; switch (currentachievement) { case LEVEL_NONE: if (kills>14) { g_PlayerAchievements[id][ACHIEVE_KILLEDBY]=LEVEL_I; show_hudmessage(id, "%s^nGet killed by people with this achievement 15 times!^n+20 Credits", ACHIEVEMENTS[ACHIEVE_KILLEDBY][LEVEL_I]); credits[id]+=20 achievementgained=true; } } //Guns are for girls currentachievement=g_PlayerAchievements[id][ACHIEVE_KNIFEZOMBIE]; kills=clubdread[id]; switch (currentachievement) { case LEVEL_NONE: if (kills>0) { g_PlayerAchievements[id][ACHIEVE_KNIFEZOMBIE]=LEVEL_I; show_hudmessage(id, "%s^nKnife a zombie!^n+75 Credits", ACHIEVEMENTS[ACHIEVE_KNIFEZOMBIE][LEVEL_I]); credits[id]+=75 achievementgained=true; } } //Hitman currentachievement=g_PlayerAchievements[id][ACHIEVE_HITMAN]; switch (currentachievement) { case LEVEL_NONE: if (has_used_pistol[id]) { g_PlayerAchievements[id][ACHIEVE_HITMAN]=LEVEL_I; show_hudmessage(id, "%s^nSurvive a round only using pistols!^n+100 Credits", ACHIEVEMENTS[ACHIEVE_HITMAN][LEVEL_I]); credits[id]+=100 achievementgained=true; pistolonly[id]++ } } //I see you! currentachievement=g_PlayerAchievements[id][ACHIEVE_INVIS]; kills=invisibleman[id]; switch (currentachievement) { case LEVEL_NONE: if (kills>0) { g_PlayerAchievements[id][ACHIEVE_INVIS]=LEVEL_I; show_hudmessage(id, "%s^nKill an invisible man!^n+30 Credits", ACHIEVEMENTS[ACHIEVE_INVIS][LEVEL_I]); credits[id]+=30 achievementgained=true; } } } if (achievementgained) { client_cmd(id, "spk %s", g_AchivementEarned); SaveLevel(id) check_banker(id) } } public check_warmachine(id) { //Arms Dealer switch (g_PlayerAchievements[id][ACHIEVE_ARMS]) { case LEVEL_NONE: if (weaponsbought[id]==9) { g_PlayerAchievements[id][ACHIEVE_ARMS]=LEVEL_I; set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2) show_hudmessage(id, "%s^nUnlock half of the guns in the game!^n+100 Credits", ACHIEVEMENTS[ACHIEVE_ARMS][LEVEL_I]); credits[id]+=100 client_cmd(id, "spk %s", g_AchivementEarned); SaveLevel(id) check_banker(id) } } //War Machine switch (g_PlayerAchievements[id][ACHIEVE_WAR]) { case LEVEL_NONE: if (weaponsbought[id]==19) { g_PlayerAchievements[id][ACHIEVE_WAR]=LEVEL_I; set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2) show_hudmessage(id, "%s^nUnlock all of the guns in the game!^n+200 Credits", ACHIEVEMENTS[ACHIEVE_WAR][LEVEL_I]); credits[id]+=200 client_cmd(id, "spk %s", g_AchivementEarned); SaveLevel(id) check_banker(id) } } } public check_banker(id) { //Break the Bank switch (g_PlayerAchievements[id][ACHIEVE_BANK]) { case LEVEL_NONE: if (credits[id]>=5000) { g_PlayerAchievements[id][ACHIEVE_BANK]=LEVEL_I; set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2) show_hudmessage(id, "%s^nAccumulate 5000 credits without spending any!^n+250 Credits", ACHIEVEMENTS[ACHIEVE_BANK][LEVEL_I]); credits[id]+=250 client_cmd(id, "spk %s", g_AchivementEarned); SaveLevel(id) } } } public AchieveCount(id) { numofachieve[id]=0; for (new counter=0; counter=g_pHPCost[id]) && g_unHPLevel[id]<20) { client_cmd(id, "spk %s", g_UpgradeMenuBuy); g_unHPLevel[id]++ credits[id]-=g_pHPCost[id] if (g_iszombie[id]) { new hp = (g_ZombieHP+(g_unHPLevel[id]*100)) MaxHP[id] = float(hp) new Float:HPtoAdd = float(get_user_health(id)+100) set_pev(id, pev_health, HPtoAdd) // use decimal number } if (g_unHPLevel[id]==20) { //Juggernaut switch (g_PlayerAchievements[id][ACHIEVE_HP]) { case LEVEL_NONE: { g_PlayerAchievements[id][ACHIEVE_HP]=LEVEL_I; set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2) show_hudmessage(id, "%s^nUpgrade to the most max health!^n+100 Credits", ACHIEVEMENTS[ACHIEVE_HP][LEVEL_I]); credits[id]+=100 client_cmd(id, "spk %s", g_AchivementEarned); SaveLevel(id) check_banker(id) } } } } show_upgrades_menu(id) } case 1: { if ((credits[id]>=g_pAPCost[id]) && g_unAPLevel[id]<20) { client_cmd(id, "spk %s", g_UpgradeMenuBuy); g_unAPLevel[id]++ credits[id]-=g_pAPCost[id] if (g_unAPLevel[id]==20) { //Solid Shield switch (g_PlayerAchievements[id][ACHIEVE_AP]) { case LEVEL_NONE: { g_PlayerAchievements[id][ACHIEVE_AP]=LEVEL_I; set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2) show_hudmessage(id, "%s^nUpgrade to the most armor!^n+100 Credits", ACHIEVEMENTS[ACHIEVE_AP][LEVEL_I]); credits[id]+=100 client_cmd(id, "spk %s", g_AchivementEarned); SaveLevel(id) check_banker(id) } } } } show_upgrades_menu(id) } case 2: { if ((credits[id]>=g_pGRCost[id]) && g_unGRLevel[id]<20) { client_cmd(id, "spk %s", g_UpgradeMenuBuy); g_unGRLevel[id]++ credits[id]-=g_pGRCost[id] if (g_iszombie[id]) set_pev(id, pev_gravity, 1-(0.02*g_unGRLevel[id])) // use decimal number if (g_unGRLevel[id]==20) { //Zero Gravity switch (g_PlayerAchievements[id][ACHIEVE_GR]) { case LEVEL_NONE: { g_PlayerAchievements[id][ACHIEVE_GR]=LEVEL_I; set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2) show_hudmessage(id, "%s^nUpgrade to the lowest possible gravity!^n+100 Credits", ACHIEVEMENTS[ACHIEVE_GR][LEVEL_I]); credits[id]+=100 client_cmd(id, "spk %s", g_AchivementEarned); SaveLevel(id) check_banker(id) } } } } show_upgrades_menu(id) } case 3: { if ((credits[id]>=g_pINCost[id]) && g_unINLevel[id]<20) { client_cmd(id, "spk %s", g_UpgradeMenuBuy); g_unINLevel[id]++ credits[id]-=g_pINCost[id] if (g_iszombie[id]) set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransTexture, 255-(g_unINLevel[id]*10)) if (g_unINLevel[id]==20) { //The Invisible Man switch (g_PlayerAchievements[id][ACHIEVE_IN]) { case LEVEL_NONE: { g_PlayerAchievements[id][ACHIEVE_IN]=LEVEL_I; set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2) show_hudmessage(id, "%s^nUpgrade to the lowest visibility!^n+100 Credits", ACHIEVEMENTS[ACHIEVE_IN][LEVEL_I]); credits[id]+=100 client_cmd(id, "spk %s", g_AchivementEarned); SaveLevel(id) check_banker(id) } } } } show_upgrades_menu(id) } case 4: { if ((credits[id]>=g_pSPCost[id]) && g_unSPLevel[id]<20) { client_cmd(id, "spk %s", g_UpgradeMenuBuy); g_unSPLevel[id]++ credits[id]-=g_pSPCost[id] if (g_unSPLevel[id]==20) { //Speed Demon switch (g_PlayerAchievements[id][ACHIEVE_SP]) { case LEVEL_NONE: { g_PlayerAchievements[id][ACHIEVE_SP]=LEVEL_I; set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2) show_hudmessage(id, "%s^nUpgrade to the lowest possible speed!^n+100 Credits", ACHIEVEMENTS[ACHIEVE_SP][LEVEL_I]); credits[id]+=100 client_cmd(id, "spk %s", g_AchivementEarned); SaveLevel(id) check_banker(id) } } } } show_upgrades_menu(id) } } return PLUGIN_HANDLED; } public cmdGiveCredits(id) { if(!access(id,GIVE_CREDITS)) return PLUGIN_HANDLED new target[32],points[21] read_argv(1,target,31) read_argv(2,points,20) new player = cmd_target(id,target,8) if(!player) return PLUGIN_HANDLED new admin_name [32], player_name[32] get_user_name(id,admin_name,31) get_user_name(player,player_name,31) new crednum = str_to_num(points) credits[player]+=crednum SaveLevel(player) client_print(id,print_console,"[AMXX] You have added %i credits to %s's total credits",crednum,player_name) new adminauthid[35], playerauthid[35] get_user_ip (id,adminauthid,34) get_user_ip (player,playerauthid,34) Log("[CREDITS] Admin: %s || SteamID: %s gave %i credits Player: %s || SteamID: %s", admin_name, adminauthid, crednum, player_name, playerauthid) return PLUGIN_CONTINUE } 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^nCredits: %d", LANG_SERVER, "PLAYER_HEALTH", get_user_health(id), credits[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; } /*-------------------------------------------------------------------------------------------------| |---------------------------------End Unlocks Menu Code--------------------------------------------| |-------------------------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------------------------| |---------------------------------Begin Items Menu Code--------------------------------------------| |-------------------------------------------------------------------------------------------------*/ public show_market_menu(id) { new szMenuBody[1024]; new nLen = format( szMenuBody, 1023, "\yBlack Market:^nCredits: %d^n", credits[id]); nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y1. \wModifiers"); nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y2. \wItems"); nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y3. \wTemporary Buffs"); nLen += format( szMenuBody[nLen], 1023-nLen, "^n^n\y0. \wExit" ); show_menu(id,IT_MAIN,szMenuBody,-1,"MarketMenuMain") } public market_menu_pressed(id,key) { switch(key) { case 0: show_modifiers_menu(id) case 1: show_items_menu(id) case 2: show_buffs_menu(id) case 9: return PLUGIN_HANDLED } return PLUGIN_HANDLED; } public show_modifiers_menu(id) { new szMenuBody[1024]; new nLen = format( szMenuBody, 1023, "\yModifiers:^nCredits: %d^n", credits[id]); nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y1. \wDamage Modifier (+10%% DMG)"); //nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wIncreases your damage"); if (g_item_dmg[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-"); else { if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_idmg1cost)*g_Discount)) else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_idmg1cost)); } /*-------------------------------------------------------------------------------------------------------------*/ nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y2. \wGreater Damage Modifier (+25%% DMG)"); //nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wGreatly increases your damage"); if (g_item_dmg[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-"); else { if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_idmg2cost)*g_Discount)) else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_idmg2cost)); } /*-------------------------------------------------------------------------------------------------------------*/ nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y3. \wRecoil Modifier (Human) (-25%% recoil)"); //nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wDecreases you recoil"); if (g_item_rec[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-"); else { if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_ireccost)*g_Discount)) else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_ireccost)); } /*-------------------------------------------------------------------------------------------------------------*/ nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y4. \wRegeneration Modifier (+5%% per sec)"); //nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wAdds a regeneration ability"); if (g_item_reg[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-"); else { if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_iregcost)*g_Discount)) else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_iregcost)); } /*-------------------------------------------------------------------------------------------------------------*/ nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y5. \wReload Modifier (Human) (+33%% faster)"); //nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wReloads weapons 30%% faster"); if (g_item_rel[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-"); else { if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_irelcost)*g_Discount)) else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_irelcost)); } /*-------------------------------------------------------------------------------------------------------------*/ nLen += format( szMenuBody[nLen], 1023-nLen, "^n^n\y9. \wBlack Market" ); nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y0. \wExit" ); show_menu(id,IT_MOD,szMenuBody,-1,"ItemsMenuMod") } public modifiers_menu_pressed(id,key) { new bool:hasbought switch(key) { case 0: { if (!access(id, MEMBERSHIP)) { if ((credits[id]>=get_pcvar_num(g_pcvar_idmg1cost)) && !g_item_dmg[id]) { g_item_dmg[id] = true credits[id]-=get_pcvar_num(g_pcvar_idmg1cost) hasbought=true } } else { if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_idmg1cost)*g_Discount)) && !g_item_dmg[id]) { g_item_dmg[id] = true credits[id]-=floatround(get_pcvar_num(g_pcvar_idmg1cost)*g_Discount) hasbought=true } } show_modifiers_menu(id) } case 1: { if (!access(id, MEMBERSHIP)) { if ((credits[id]>=get_pcvar_num(g_pcvar_idmg2cost)) && !g_item_dmg[id]) { g_item_dmg[id] = true g_item_gdmg[id] = true credits[id]-=get_pcvar_num(g_pcvar_idmg2cost) hasbought=true } } else { if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_idmg2cost)*g_Discount)) && !g_item_dmg[id]) { g_item_dmg[id] = true g_item_gdmg[id] = true credits[id]-=floatround(get_pcvar_num(g_pcvar_idmg2cost)*g_Discount) hasbought=true } } show_modifiers_menu(id) } case 2: { if (!access(id, MEMBERSHIP)) { if ((credits[id]>=get_pcvar_num(g_pcvar_ireccost)) && !g_item_rec[id]) { g_item_rec[id] = true credits[id]-=get_pcvar_num(g_pcvar_ireccost) hasbought=true } } else { if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_ireccost)*g_Discount)) && !g_item_rec[id]) { g_item_rec[id] = true credits[id]-=floatround(get_pcvar_num(g_pcvar_ireccost)*g_Discount) hasbought=true } } show_modifiers_menu(id) } case 3: { if (!access(id, MEMBERSHIP)) { if ((credits[id]>=get_pcvar_num(g_pcvar_iregcost)) && !g_item_reg[id]) { g_item_reg[id] = true credits[id]-=get_pcvar_num(g_pcvar_iregcost) hasbought=true } } else { if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_iregcost)*g_Discount)) && !g_item_reg[id]) { g_item_reg[id] = true credits[id]-=floatround(get_pcvar_num(g_pcvar_iregcost)*g_Discount) hasbought=true } } show_modifiers_menu(id) } case 4: { if (!access(id, MEMBERSHIP)) { if ((credits[id]>=get_pcvar_num(g_pcvar_irelcost)) && !g_item_rel[id]) { g_item_rel[id] = true credits[id]-=get_pcvar_num(g_pcvar_irelcost) hasbought=true } } else { if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_irelcost)*g_Discount)) && !g_item_rel[id]) { g_item_rel[id] = true credits[id]-=floatround(get_pcvar_num(g_pcvar_irelcost)*g_Discount) hasbought=true } } show_modifiers_menu(id) } case 8: show_market_menu(id) case 9: return PLUGIN_HANDLED } if (!hasbought) { client_print(id, print_center, "*** You cannot buy this item ***") } else if (hasbought) { client_cmd(id, "spk %s", g_ItemMenuBuy); g_itemsbought[id]++ if (g_itemsbought[id]>49) { //Merchant switch (g_PlayerAchievements[id][ACHIEVE_MERC]) { case LEVEL_NONE: { g_PlayerAchievements[id][ACHIEVE_MERC]=LEVEL_I; set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2) show_hudmessage(id, "%s^nPurchase 50 items from the Black Market!^n+25 Credits", ACHIEVEMENTS[ACHIEVE_MERC][LEVEL_I]); credits[id]+=25 client_cmd(id, "spk %s", g_AchivementEarned); SaveLevel(id) check_banker(id) } } } } return PLUGIN_HANDLED; } public Task_HPRegenLoop() { if (!g_CanBuild) { new players[32], num get_players(players, num, "a") new player, Float:NewHP for (new i = 0; i < num; i++) { player = players[i] if((g_item_reg[player] || g_item_sti[player]) && !g_item_shi[player]) { if (get_user_health(player)= MaxHP[player]) NewHP = MaxHP[player] set_user_health(player,floatround(NewHP)) } else { set_user_health(player,floatround(MaxHP[player])) } } } } return PLUGIN_CONTINUE } public show_items_menu(id) { new szMenuBody[1024]; new nLen = format( szMenuBody, 1023, "\yItems:^nCredits: %d^n", credits[id]); nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y1. \wBattle Helmet (+200 Armor)"); //nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wA helmet that reduces headshot damage up to 35%%"); if (g_item_hel[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-"); else { if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_ihelcost)*g_Discount)) else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_ihelcost)); } /*-------------------------------------------------------------------------------------------------------------*/ nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y2. \wConcussion Grenade (Human)"); //nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wA helmet that reduces headshot damage up to 35%%"); if (g_iszombie[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: -NOT AVAILABLE AS ZOMBIE-") else { if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_iconcost)*g_Discount)) else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_iconcost)); } /*-------------------------------------------------------------------------------------------------------------*/ nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y3. \wRiot Shield (Zombie)"); if (!g_iszombie[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: -NOT AVAILABLE AS HUMAN-") else { if (g_item_shi[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-"); else { if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_ishicost)*g_Discount)) else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_ishicost)); } } /*-------------------------------------------------------------------------------------------------------------*/ nLen += format( szMenuBody[nLen], 1023-nLen, "^n^n\y9. \wBlack Market" ); nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y0. \wExit" ); show_menu(id,IT_ITE,szMenuBody,-1,"ItemsMenuItems") } public items_menu_pressed(id,key) { new bool:hasbought switch(key) { case 0: { if (!access(id, MEMBERSHIP)) { if ((credits[id]>=get_pcvar_num(g_pcvar_ihelcost)) && !g_item_hel[id]) { g_item_hel[id] = true credits[id]-=get_pcvar_num(g_pcvar_ihelcost) hasbought=true give_item(id, "item_assaultsuit"); new armor = (g_unAPLevel[id]*10)+200 cs_set_user_armor(id, armor, CS_ARMOR_VESTHELM); } } else { if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_ihelcost)*g_Discount)) && !g_item_hel[id]) { g_item_hel[id] = true credits[id]-=floatround(get_pcvar_num(g_pcvar_ihelcost)*g_Discount) hasbought=true give_item(id, "item_assaultsuit"); new armor = (g_unAPLevel[id]*10)+200 cs_set_user_armor(id, armor, CS_ARMOR_VESTHELM); } } show_items_menu(id) } case 1: { if (g_iszombie[id]) { show_items_menu(id) return PLUGIN_HANDLED } if (!access(id, MEMBERSHIP)) { if (credits[id]>=get_pcvar_num(g_pcvar_iconcost)) { credits[id]-=get_pcvar_num(g_pcvar_iconcost) hasbought=true new fbtotal = cs_get_user_bpammo(id, CSW_FLASHBANG) give_item(id,"weapon_flashbang"), cs_set_user_bpammo(id,CSW_FLASHBANG,fbtotal+1) } } else { if (credits[id]>=floatround(get_pcvar_num(g_pcvar_iconcost)*g_Discount)) { credits[id]-=floatround(get_pcvar_num(g_pcvar_iconcost)*g_Discount) hasbought=true new fbtotal = cs_get_user_bpammo(id, CSW_FLASHBANG) give_item(id,"weapon_flashbang"), cs_set_user_bpammo(id,CSW_FLASHBANG,fbtotal+1) } } show_items_menu(id) } case 2: { if (!g_iszombie[id]) { show_items_menu(id) return PLUGIN_HANDLED } else if (!access(id, MEMBERSHIP)) { if ((credits[id]>=get_pcvar_num(g_pcvar_ishicost)) && !g_item_shi[id]) { give_item(id, "weapon_shield"); if (cs_get_user_shield(id) == 1) { g_item_shi[id] = true credits[id]-=get_pcvar_num(g_pcvar_ishicost) hasbought=true } } } else { if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_ishicost)*g_Discount)) && !g_item_shi[id]) { give_item(id, "weapon_shield"); if (cs_get_user_shield(id) == 1) { g_item_shi[id] = true credits[id]-=floatround(get_pcvar_num(g_pcvar_ishicost)*g_Discount) hasbought=true } } } show_items_menu(id) } case 8: show_market_menu(id) case 9: return PLUGIN_HANDLED } if (!hasbought) { client_print(id, print_center, "*** You cannot buy this item ***") } else if (hasbought) { client_cmd(id, "spk %s", g_ItemMenuBuy); g_itemsbought[id]++ if (g_itemsbought[id]>49) { //Merchant switch (g_PlayerAchievements[id][ACHIEVE_MERC]) { case LEVEL_NONE: { g_PlayerAchievements[id][ACHIEVE_MERC]=LEVEL_I; set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2) show_hudmessage(id, "%s^nPurchase 50 items from the Black Market!^n+25 Credits", ACHIEVEMENTS[ACHIEVE_MERC][LEVEL_I]); credits[id]+=25 client_cmd(id, "spk %s", g_AchivementEarned); SaveLevel(id) check_banker(id) } } } } return PLUGIN_HANDLED; } public show_buffs_menu(id) { new szMenuBody[1024]; new nLen = format( szMenuBody, 1023, "\yTemp Buffs:^nCredits: %d^n", credits[id]); nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y1. \wStim Pack (+15%% Regen) \r[%d secs]", get_pcvar_num(g_pcvar_timesti)); if (g_item_sti[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-"); else { if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_isticost)*g_Discount)) else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_isticost)); } /*-------------------------------------------------------------------------------------------------------------*/ nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y2. \wOne Man Army (No Reloads) (Human) \r[%d secs]", get_pcvar_num(g_pcvar_timeoma)); if (g_iszombie[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: -NOT AVAILABLE AS ZOMBIE-") else { if (g_item_oma[id] || g_iszombie[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-"); else { if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_iomacost)*g_Discount)) else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_iomacost)); } } /*-------------------------------------------------------------------------------------------------------------*/ nLen += format( szMenuBody[nLen], 1023-nLen, "^n^n\y9. \wBlack Market" ); nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y0. \wExit" ); show_menu(id,IT_BUFF,szMenuBody,-1,"ItemsMenuBuffs") } public buffs_menu_pressed(id,key) { new bool:hasbought switch(key) { case 0: { if (!access(id, MEMBERSHIP)) { if ((credits[id]>=get_pcvar_num(g_pcvar_isticost)) && !g_item_sti[id]) { g_item_sti[id] = true set_task(get_pcvar_float(g_pcvar_timesti), "Remove_Stim", id+REGEN_TASK) credits[id]-=get_pcvar_num(g_pcvar_isticost) hasbought=true } } else { if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_isticost)*g_Discount)) && !g_item_sti[id]) { g_item_sti[id] = true set_task(get_pcvar_float(g_pcvar_timesti), "Remove_Stim", id+REGEN_TASK) credits[id]-=floatround(get_pcvar_num(g_pcvar_isticost)*g_Discount) hasbought=true } } show_buffs_menu(id) } case 1: { if (g_iszombie[id]) { show_buffs_menu(id) return PLUGIN_HANDLED } if (!access(id, MEMBERSHIP)) { if ((credits[id]>=get_pcvar_num(g_pcvar_iomacost)) && !g_item_oma[id]) { g_item_oma[id] = true set_task(get_pcvar_float(g_pcvar_timeoma), "Remove_OMA", id+OMA_TASK) credits[id]-=get_pcvar_num(g_pcvar_iomacost) hasbought=true } } else { if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_iomacost)*g_Discount)) && !g_item_oma[id]) { g_item_oma[id] = true set_task(get_pcvar_float(g_pcvar_timeoma), "Remove_OMA", id+OMA_TASK) credits[id]-=floatround(get_pcvar_num(g_pcvar_iomacost)*g_Discount) hasbought=true } } show_buffs_menu(id) } case 8: show_market_menu(id) case 9: return PLUGIN_HANDLED } if (!hasbought) { client_print(id, print_center, "*** You cannot buy this item ***") } else if (hasbought) { client_cmd(id, "spk %s", g_ItemMenuBuy); g_itemsbought[id]++ if (g_itemsbought[id]>49) { //Merchant switch (g_PlayerAchievements[id][ACHIEVE_MERC]) { case LEVEL_NONE: { g_PlayerAchievements[id][ACHIEVE_MERC]=LEVEL_I; set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2) show_hudmessage(id, "%s^nPurchase 50 items from the Black Market!^n+25 Credits", ACHIEVEMENTS[ACHIEVE_MERC][LEVEL_I]); credits[id]+=25 client_cmd(id, "spk %s", g_AchivementEarned); SaveLevel(id) check_banker(id) } } } } return PLUGIN_HANDLED; } public Remove_Stim(id) { id -= REGEN_TASK g_item_sti[id] = false } public Remove_OMA(id) { id -= OMA_TASK g_item_oma[id] = false } public show_unlocks_menu(id) { new szMenuBody[256]; new nLen = format( szMenuBody, 255, "\yUnlocks Menu: \r%d^n", credits[id]); nLen += format( szMenuBody[nLen], 255-nLen, "^n\y1. \wAssault Rifles"); nLen += format( szMenuBody[nLen], 255-nLen, "^n\y2. \wSMGs"); nLen += format( szMenuBody[nLen], 255-nLen, "^n\y3. \wOther"); nLen += format( szMenuBody[nLen], 255-nLen, "^n\y4. \wPistols"); nLen += format( szMenuBody[nLen], 255-nLen, "^n^n\y0. \wExit" ); show_menu(id,UN_MAIN,szMenuBody,-1,"UnlocksMenuMain") return PLUGIN_HANDLED } public unlocks_menu_pressed(id,key) { switch(key) { case 0: assault_unlocks_menu(id) case 1: sub_unlocks_menu(id) case 2: other_unlocks_menu(id) case 3: sec_unlocks_menu(id) //case 9: return PLUGIN_HANDLED; } return PLUGIN_HANDLED; } public assault_unlocks_menu(id) { new szMenuBody[512]; new nLen = format( szMenuBody, 511, "\yUnlock: \rAssault Rifles^nCredits: %d^n", credits[id]); if (g_galil[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wIMI Galil^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wIMI Galil^n \wCost: \r100^n" ); if (g_aug[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wSteyr AUG A1^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wSteyr AUG A1^n \wCost: \r75^n" ); if (g_m4a1[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wM4A1 Carbine^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wM4A1 Carbine^n \wCost: \r250^n" ); if (g_famas[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wFamas^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wFamas^n \wCost: \r150^n" ); if (g_ak47[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y5. \wAK-47 Kalashnikov^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y5. \wAK-47 Kalashnikov^n \wCost: \r500^n" ); nLen += format( szMenuBody[nLen], 511-nLen, "^n^n\y9. \wBack" ); nLen += format( szMenuBody[nLen], 511-nLen, "^n\y0. \wExit" ); show_menu(id,UN_PRI1,szMenuBody,-1,"UnlocksMenuAss") } public un_ass_pushed(id,key) { new bool:hasbought switch(key) { case 0: { if (credits[id]>=100 && !g_galil[id]) { g_galil[id]=1 credits[id]-=100 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_GALIL give_weapons(id) } hasbought=true } assault_unlocks_menu(id) } case 1: { if (credits[id]>=75 && !g_aug[id]) { g_aug[id]=1 credits[id]-=75 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_AUG give_weapons(id) } hasbought=true } assault_unlocks_menu(id) } case 2: { if (credits[id]>=250 && !g_m4a1[id]) { g_m4a1[id]=1 credits[id]-=250 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_M4A1 give_weapons(id) } hasbought=true } assault_unlocks_menu(id) } case 3: { if (credits[id]>=150 && !g_famas[id]) { g_famas[id]=1 credits[id]-=150 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_FAMAS give_weapons(id) } hasbought=true } assault_unlocks_menu(id) } case 4: { if (credits[id]>=500 && !g_ak47[id]) { g_ak47[id]=1 credits[id]-=500 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_AK47 give_weapons(id) } hasbought=true } assault_unlocks_menu(id) } case 8: { show_unlocks_menu(id) return PLUGIN_HANDLED } case 9: return PLUGIN_HANDLED } if (!hasbought) { //client_cmd(id, "spk %s", g_InvalidMenuBuy); client_print(id, print_center, "*** You cannot do this ***") } else if (hasbought) { client_cmd(id, "spk %s", g_UnlockMenuBuy); weaponsbought[id]++ check_warmachine(id) } return PLUGIN_HANDLED } public sub_unlocks_menu(id) { new szMenuBody[512]; new nLen = format( szMenuBody, 511, "\yUnlock: \rSMGs^nCredits: %d^n", credits[id] ); if (g_tmp[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wSchmidt TMP^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wSchmidt TMP^n \wCost: \r50^n" ); if (g_mp5[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wMP5 Navy^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wMP5 Navy^n \wCost: \r100^n" ); if (g_ump[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wUMP 45^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wUMP 45^n \wCost: \r200^n" ); if (g_p90[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wES P90^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wES P90^n \wCost: \r250^n" ); nLen += format( szMenuBody[nLen], 511-nLen, "^n^n\y9. \wBack" ); nLen += format( szMenuBody[nLen], 511-nLen, "^n\y0. \wExit" ); show_menu(id,UN_PRI2,szMenuBody,-1,"UnlocksMenuSub") } public un_smg_pushed(id,key) { new bool:hasbought switch(key) { case 0: { if (credits[id]>=50 && !g_tmp[id]) { g_tmp[id]=1 credits[id]-=50 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_TMP give_weapons(id) } hasbought=true } sub_unlocks_menu(id) } case 1: { if (credits[id]>=100 && !g_mp5[id]) { g_mp5[id]=1 credits[id]-=100 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_MP5NAVY give_weapons(id) } hasbought=true } sub_unlocks_menu(id) } case 2: { if (credits[id]>=200 && !g_ump[id]) { g_ump[id]=1 credits[id]-=200 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_UMP45 give_weapons(id) } hasbought=true } sub_unlocks_menu(id) } case 3: { if (credits[id]>=250 && !g_p90[id]) { g_p90[id]=1 credits[id]-=250 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_P90 give_weapons(id) } hasbought=true } sub_unlocks_menu(id) } case 8: { show_unlocks_menu(id) return PLUGIN_HANDLED } case 9: return PLUGIN_HANDLED } if (!hasbought) { //client_cmd(id, "spk %s", g_InvalidMenuBuy); client_print(id, print_center, "*** You cannot do this ***") } else if (hasbought) { client_cmd(id, "spk %s", g_UnlockMenuBuy); weaponsbought[id]++ check_warmachine(id) } return PLUGIN_HANDLED } public other_unlocks_menu(id) { new szMenuBody[512]; new nLen = format( szMenuBody, 511, "\yUnlock: \rOther^nCredits: %d^n", credits[id] ); if (g_m3[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wM3 Super 90^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wM3 Super 90^n \wCost: \r25^n" ); if (g_xm1014[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wXM1014 M4^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wXM1014 M4^n \wCost: \r200^n" ); if (g_scout[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wSchmidt Scout^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wSchmidt Scout^n \wCost: \r250^n" ); if (g_awp[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wAWP Magnum Sniper^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wAWP Magnum Sniper^n \wCost: \r500^n" ); if (g_para[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y5. \wM249-SAW^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y5. \wM249-SAW^n \wCost: \r5000^n" ); nLen += format( szMenuBody[nLen], 511-nLen, "^n^n\y9. \wBack" ); nLen += format( szMenuBody[nLen], 511-nLen, "^n\y0. \wExit" ); show_menu(id,UN_PRI3,szMenuBody,-1,"UnlocksMenuOther") } public un_oth_pushed(id,key) { new bool:hasbought switch(key) { case 0: { if (credits[id]>=25 && !g_m3[id]) { g_m3[id]=1 credits[id]-=25 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_M3 give_weapons(id) } hasbought=true } other_unlocks_menu(id) } case 1: { if (credits[id]>=200 && !g_xm1014[id]) { g_xm1014[id]=1 credits[id]-=200 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_XM1014 give_weapons(id) } hasbought=true } other_unlocks_menu(id) } case 2: { if (credits[id]>=250 && !g_scout[id]) { g_scout[id]=1 credits[id]-=250 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_SCOUT give_weapons(id) } hasbought=true } other_unlocks_menu(id) } case 3: { if (credits[id]>=500 && !g_awp[id]) { g_awp[id]=1 credits[id]-=500 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_AWP give_weapons(id) } hasbought=true } other_unlocks_menu(id) } case 4: { if (credits[id]>=5000 && !g_para[id]) { g_para[id]=1 credits[id]-=5000 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_M249 give_weapons(id) } hasbought=true switch (g_PlayerAchievements[id][ACHIEVE_RAMBO]) { case LEVEL_NONE: { g_PlayerAchievements[id][ACHIEVE_RAMBO]=LEVEL_I; set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2) show_hudmessage(id, "%s^nUnlock the M249-SAW!^n+25 Credits", ACHIEVEMENTS[ACHIEVE_RAMBO][LEVEL_I]); credits[id]+=25 client_cmd(id, "spk %s", g_AchivementEarned); SaveLevel(id) } } } other_unlocks_menu(id) } case 8: { show_unlocks_menu(id) return PLUGIN_HANDLED } case 9: return PLUGIN_HANDLED } if (!hasbought) { //client_cmd(id, "spk %s", g_InvalidMenuBuy); client_print(id, print_center, "*** You cannot do this ***") } else if (hasbought) { client_cmd(id, "spk %s", g_UnlockMenuBuy); weaponsbought[id]++ check_warmachine(id) } return PLUGIN_HANDLED } public sec_unlocks_menu(id) { new szMenuBody[512]; new nLen = format( szMenuBody, 511, "\yUnlock: \rPistols^nCredits: %d^n", credits[id] ); if (g_p228[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wP228 Compact^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wP228 Compact^n \wCost: \r25^n" ); if (g_five[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wFiveseven^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wFiveseven^n \wCost: \r100^n" ); if (g_elite[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wDual Berettas^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wDual Berettas^n \wCost: \r100^n" ); if (g_glock[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wGlock 18C^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wGlock 18C^n \wCost: \r250^n" ); if (g_deagle[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y5. \wDesert Eagle .50 AE^n \wCost: \r-Unlocked-^n" ); else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y5. \wDesert Eagle .50 AE^n \wCost: \r350^n" ); nLen += format( szMenuBody[nLen], 511-nLen, "^n^n\y9. \wBack" ); nLen += format( szMenuBody[nLen], 511-nLen, "^n\y0. \wExit" ); show_menu(id,UN_SEC,szMenuBody,-1,"UnlocksMenuSec") } public un_sec_pushed(id,key) { new bool:hasbought switch(key) { case 0: { if (credits[id]>=25 && !g_p228[id]) { g_p228[id]=1 credits[id]-=25 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_P228 give_weapons(id) } hasbought=true } sec_unlocks_menu(id) } case 1: { if (credits[id]>=50 && !g_five[id]) { g_five[id]=1 credits[id]-=100 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_FIVESEVEN give_weapons(id) } hasbought=true } sec_unlocks_menu(id) } case 2: { if (credits[id]>=50 && !g_elite[id]) { g_elite[id]=1 credits[id]-=100 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_ELITE give_weapons(id) } hasbought=true } sec_unlocks_menu(id) } case 3: { if (credits[id]>=250 && !g_glock[id]) { g_glock[id]=1 credits[id]-=250 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_GLOCK18 give_weapons(id) } hasbought=true } sec_unlocks_menu(id) } case 4: { if (credits[id]>=350 && !g_deagle[id]) { g_deagle[id]=1 credits[id]-=350 if (!g_iszombie[id]) { weapon_picked[0][id] = CSW_DEAGLE give_weapons(id) } hasbought=true } sec_unlocks_menu(id) } case 8: { show_unlocks_menu(id) return PLUGIN_HANDLED } case 9: return PLUGIN_HANDLED } if (!hasbought) { //client_cmd(id, "spk %s", g_InvalidMenuBuy); client_print(id, print_center, "*** You cannot do this ***") } else if (hasbought) { client_cmd(id, "spk %s", g_UnlockMenuBuy); weaponsbought[id]++ check_warmachine(id) } return PLUGIN_HANDLED } public taskUpdateClocks() { new clock = -1; //get the time digits new serverTimeDigits[4]; new timeleftDigits[4]; new bool:bUpdateServerTime = getTimeDigits(CM_SERVERTIME, serverTimeDigits); getTimeDigits(CM_BUILDTIMELEFT, timeleftDigits); //find all clock entities while ((clock = find_ent_by_class(clock, gszClockClassname))) { //get the clock type new clockType = entity_get_int(clock, EV_INT_groupinfo); //if the time changed for this clocktype if (clockType == CM_SERVERTIME) { if (bUpdateServerTime) { //set the clock to the correct time set_clock_digits(clock, serverTimeDigits); } } } //check to see if its on the hour if (bUpdateServerTime) { new hour, mins; time(hour, mins); //if its on the hour then alert { if (mins == 0) alertHour(hour, 0); if (mins == 30) alertHour(hour, 1); } } } public showClockMenu(id) { //show the main menu to the player show_menu(id, MAIN_MENU_KEYS, gszMainMenuText, -1, "clockMainMenu"); return PLUGIN_HANDLED; } public handleMainMenu(id, num) { switch (num) { case N1: createClockAiming(id, CM_SERVERTIME); case N2: createClockAiming(id, CM_BUILDTIMELEFT); case N4: deleteClockAiming(id); case N5: scaleClockAiming(id, 0.1); case N6: scaleClockAiming(id, -0.1); case N7: saveClocks(id); case N8: loadClocks(id); } //show menu again if (num != N0) { showClockMenu(id); } return PLUGIN_HANDLED; } createClockAiming(id, clockType) { //make sure player has access to this command if (get_user_flags(id) & ADMIN_CLOCK) { new origin[3]; new Float:vOrigin[3]; new Float:vAngles[3]; new Float:vNormal[3]; //get the origin of where the player is aiming get_user_origin(id, origin, 3); IVecFVec(origin, vOrigin); new bool:bSuccess = traceClockAngles(id, vAngles, vNormal, 1000.0); //if the trace was successfull if (bSuccess) { //if the plane the trace hit is vertical if (vNormal[2] == 0.0) { //create the clock new bool:bSuccess = createClock(clockType, vOrigin, vAngles, vNormal); //if clock created successfully if (bSuccess) { client_print(id, print_chat, "%sCreated clock", gszPrefix); } } else { client_print(id, print_chat, "%sYou must place the clock on a vertical wall!", gszPrefix); } } else { client_print(id, print_chat, "%sMove closer to the target to create the clock", gszPrefix); } } } bool:createClock(clockType, Float:vOrigin[3], Float:vAngles[3], Float:vNormal[3], Float:fScale = 1.0) { new clock = create_entity(gszInfoTarget); new digit[4]; new bool:bFailed = false; //create 4 new entities to use for digits on the clock for (new i = 0; i < 4; ++i) { digit[i] = create_entity(gszInfoTarget); //if failed boolean is false and entity failed to create if (!bFailed && !is_valid_ent(digit[i])) { bFailed = true; break; } } //make sure all entities were created successfully if (is_valid_ent(clock) && !bFailed) { //adjust the origin to lift the clock off the wall (prevent flickering) vOrigin[0] += (vNormal[0] * 0.5); vOrigin[1] += (vNormal[1] * 0.5); vOrigin[2] += (vNormal[2] * 0.5); //set clock properties entity_set_string(clock, EV_SZ_classname, gszClockClassname); entity_set_int(clock, EV_INT_solid, SOLID_NOT); entity_set_model(clock, gszClockFaces); entity_set_vector(clock, EV_VEC_angles, vAngles); entity_set_float(clock, EV_FL_scale, fScale); entity_set_origin(clock, vOrigin); entity_set_int(clock, EV_INT_groupinfo, clockType); //set the entity frame (clock face) depending on the clock type switch (clockType) { case CM_SERVERTIME: entity_set_float(clock, EV_FL_frame, 0.0); case CM_BUILDTIMELEFT: entity_set_float(clock, EV_FL_frame, 1.0); } //link the digits entities to the clock entity_set_int(clock, EV_INT_iuser1, digit[0]); entity_set_int(clock, EV_INT_iuser2, digit[1]); entity_set_int(clock, EV_INT_iuser3, digit[2]); entity_set_int(clock, EV_INT_iuser4, digit[3]); new digitValues[4]; //setup the digits to make up the time for (new i = 0; i < 4; ++i) { //setup digit properties entity_set_string(digit[i], EV_SZ_classname, gszClockDigitClassname); entity_set_vector(digit[i], EV_VEC_angles, vAngles); entity_set_model(digit[i], gszClockDigits); entity_set_float(digit[i], EV_FL_scale, fScale); //set digit position set_digit_origin(i, digit[i], vOrigin, vNormal, fScale); //get the time digits getTimeDigits(clockType, digitValues); //set the in-game clocks digits set_clock_digits(clock, digitValues); } return true; } else { //delete clock face if it created successfully if (is_valid_ent(clock)) { remove_entity(clock); } //iterate though the entity array and delete whichever ones created successfully for (new i = 0; i < 4; ++i) { if (is_valid_ent(digit[i])) { remove_entity(digit[i]); } } } return false; } deleteClockAiming(id) { new bool:bDeleted; new clock = get_clock_aiming(id); if (clock) { //delete the clock bDeleted = deleteClock(clock); //if the clock was deleted successfully if (bDeleted) { client_print(id, print_chat, "%sDeleted clock", gszPrefix); } } } bool:deleteClock(ent) { //if the entity is a clock if (isClock(ent)) { //get entity IDs of digits on the clock new digit[4]; digit[0] = entity_get_int(ent, EV_INT_iuser1); digit[1] = entity_get_int(ent, EV_INT_iuser2); digit[2] = entity_get_int(ent, EV_INT_iuser3); digit[3] = entity_get_int(ent, EV_INT_iuser4); //delete the digits on the clock if they're valid if (is_valid_ent(digit[0])) remove_entity(digit[0]); if (is_valid_ent(digit[1])) remove_entity(digit[1]); if (is_valid_ent(digit[2])) remove_entity(digit[2]); if (is_valid_ent(digit[3])) remove_entity(digit[3]); //delete the clock face remove_entity(ent); //successfully deleted the clock return true; } return false; } scaleClockAiming(id, Float:fScaleAmount) { //get the clock the player is aiming at (if any) new clock = get_clock_aiming(id); //if player is aiming at a clock if (clock) { //get the clocks digit entities new digit[4]; new bSuccess = get_clock_digits(clock, digit); //if successfully got clocks digit entities if (bSuccess) { new Float:vOrigin[3]; new Float:vNormal[3]; new Float:vAngles[3]; //get the clocks current scale and add on the specified amount new Float:fScale = entity_get_float(clock, EV_FL_scale); fScale += fScaleAmount; //make sure the scale isn't negative if (fScale > 0.01) { //set the clocks scale entity_set_float(clock, EV_FL_scale, fScale); //get the clocks origin and angles entity_get_vector(clock, EV_VEC_origin, vOrigin); entity_get_vector(clock, EV_VEC_angles, vAngles); //get the clocks normal vector from the angles angle_vector(vAngles, ANGLEVECTOR_FORWARD, vNormal); //set the normal to point in the opposite direction vNormal[0] = -vNormal[0]; vNormal[1] = -vNormal[1]; vNormal[2] = -vNormal[2]; //enlarge the clocks digits by the specified amount for (new i = 0; i < 4; ++i) { //set the digits scale entity_set_float(digit[i], EV_FL_scale, fScale); //adjust the digits origin because of the new scale set_digit_origin(i, digit[i], vOrigin, vNormal, fScale); } } } } } saveClocks(id) { //make sure player has access to this command if (get_user_flags(id) & ADMIN_CLOCK) { new ent = -1; new Float:vOrigin[3]; new Float:vAngles[3]; new Float:fScale; new clockCount = 0; new szData[128]; //open file for writing new file = fopen(gszFile, "wt"); new clockType; while ((ent = find_ent_by_class(ent, gszClockClassname))) { //get clock info entity_get_vector(ent, EV_VEC_origin, vOrigin); entity_get_vector(ent, EV_VEC_angles, vAngles); fScale = entity_get_float(ent, EV_FL_scale); clockType = entity_get_int(ent, EV_INT_groupinfo); //format clock info and save it to file formatex(szData, 128, "%c %f %f %f %f %f %f %f^n", gClockSaveIds[clockType], vOrigin[0], vOrigin[1], vOrigin[2], vAngles[0], vAngles[1], vAngles[2], fScale); fputs(file, szData); //increment clock count ++clockCount; } //get players name new szName[32]; get_user_name(id, szName, 32); //notify all admins that the player saved clocks to file for (new i = 1; i <= 32; ++i) { //make sure player is connected if (is_user_connected(i)) { if (get_user_flags(i) & ADMIN_CLOCK) { client_print(i, print_chat, "%s'%s' saved %d clock%s to file!", gszPrefix, szName, clockCount, (clockCount == 1 ? "" : "s")); } } } //close file fclose(file); } } loadClocks(id) { //if the clock save file exists if (file_exists(gszFile)) { new szData[128]; new szType[2]; new oX[13], oY[13], oZ[13]; new aX[13], aY[13], aZ[13]; new szScale[13]; new Float:vOrigin[3]; new Float:vAngles[3]; new Float:vNormal[3]; new Float:fScale; new clockCount = 0; //open the file for reading new file = fopen(gszFile, "rt"); //iterate through all the lines in the file while (!feof(file)) { szType = ""; fgets(file, szData, 128); parse(szData, szType, 2, oX, 12, oY, 12, oZ, 12, aX, 12, aY, 12, aZ, 12, szScale, 12); vOrigin[0] = str_to_float(oX); vOrigin[1] = str_to_float(oY); vOrigin[2] = str_to_float(oZ); vAngles[0] = str_to_float(aX); vAngles[1] = str_to_float(aY); vAngles[2] = str_to_float(aZ); fScale = str_to_float(szScale); if (strlen(szType) > 0) { //get the normal vector from the angles angle_vector(vAngles, ANGLEVECTOR_FORWARD, vNormal); //set the normal to point in the opposite direction vNormal[0] = -vNormal[0]; vNormal[1] = -vNormal[1]; vNormal[2] = -vNormal[2]; //create the clock depending on the clock type switch (szType[0]) { case 'C': createClock(CM_SERVERTIME, vOrigin, vAngles, vNormal, fScale); case 'T': createClock(CM_BUILDTIMELEFT, vOrigin, vAngles, vNormal, fScale); } ++clockCount; } } //close the file fclose(file); //if a player is loading the clocks if (id > 0 && id <= 32) { //get players name new szName[32]; get_user_name(id, szName, 32); //notify all admins that the player loaded clocks from file for (new i = 1; i <= 32; ++i) { //make sure player is connected if (is_user_connected(i)) { if (get_user_flags(i) & ADMIN_CLOCK) { client_print(i, print_chat, "%s'%s' loaded %d clock%s from file!", gszPrefix, szName, clockCount, (clockCount == 1 ? "" : "s")); } } } } } } get_clock_aiming(id) { //get hit point for where player is aiming new origin[3]; new Float:vOrigin[3]; get_user_origin(id, origin, 3); IVecFVec(origin, vOrigin); new ent = -1; //find all entities within a 2 unit sphere while ((ent = find_ent_in_sphere(ent, vOrigin, 2.0))) { //if entity is a clock if (isClock(ent)) { return ent; } } return 0; } bool:traceClockAngles(id, Float:vAngles[3], Float:vNormal[3], Float:fDistance) { //get players origin and add on their view offset new Float:vPlayerOrigin[3]; new Float:vViewOfs[3]; entity_get_vector(id, EV_VEC_origin, vPlayerOrigin); entity_get_vector(id, EV_VEC_view_ofs, vViewOfs); vPlayerOrigin[0] += vViewOfs[0]; vPlayerOrigin[1] += vViewOfs[1]; vPlayerOrigin[2] += vViewOfs[2]; //calculate the end point for trace using the players view angle new Float:vAiming[3]; entity_get_vector(id, EV_VEC_v_angle, vAngles); vAiming[0] = vPlayerOrigin[0] + floatcos(vAngles[1], degrees) * fDistance; vAiming[1] = vPlayerOrigin[1] + floatsin(vAngles[1], degrees) * fDistance; vAiming[2] = vPlayerOrigin[2] + floatsin(-vAngles[0], degrees) * fDistance; //trace a line and get the normal for the plane it hits new trace = trace_normal(id, vPlayerOrigin, vAiming, vNormal); //convert the normal into an angle vector vector_to_angle(vNormal, vAngles); //spin the angle vector 180 degrees around the Y axis vAngles[1] += 180.0; if (vAngles[1] >= 360.0) vAngles[1] -= 360.0; return bool:trace; } set_digit_origin(i, digit, Float:vOrigin[3], Float:vNormal[3], Float:fScale) { //make sure the digit entity is valid if (is_valid_ent(digit)) { new Float:vDigitNormal[3]; new Float:vPos[3]; new Float:fVal; //change the normals to get the left and right depending on the digit vDigitNormal = vNormal; if (i == 0 || i == 1) vDigitNormal[X] = -vDigitNormal[X]; if (i == 2 || i == 3) vDigitNormal[Y] = -vDigitNormal[Y]; //setup digit position fVal = (((gfClockSize[X] / 2) * gfDigitOffsetMultipliers[i])) * fScale; vPos[X] = vOrigin[X] + (vDigitNormal[Y] * fVal); vPos[Y] = vOrigin[Y] + (vDigitNormal[X] * fVal); vPos[Z] = vOrigin[Z] + vNormal[Z] - ((gfTitleSize / 2.0 )* fScale); //bring digit sprites forwards off the clock face to prevent flickering vPos[0] += (vNormal[0] * 0.5); vPos[1] += (vNormal[1] * 0.5); vPos[2] += (vNormal[2] * 0.5); //set the digits origin entity_set_origin(digit, vPos); } } bool:getTimeDigits(clockType, digitValues[4]) { switch (clockType) { case CM_SERVERTIME: { new bool:bChanged = false; new szTime[5]; new timeOffset = get_cvar_num("cm_timeoffset"); new hourType = get_cvar_num("cm_hourtype"); //get the time new hour, mins; time(hour, mins); //add on the time offset hour += timeOffset; //make sure hour hasnt gone out of bounds while (hour < 0) { hour += 24; } while (hour >= 24) { hour -= 24; } //if server is set to use 12 hour clocks if (hourType == 0) { if (hour > 12) { hour -= 12; } if (hour == 0) hour = 12 } //format the time into a string format(szTime, 4, "%s%d%s%d", (hour < 10 ? "0" : ""), hour, (mins < 10 ? "0" : ""), mins); //calculate time digits from string digitValues[0] = szTime[0] - 48; digitValues[1] = szTime[1] - 48; digitValues[2] = szTime[2] - 48; digitValues[3] = szTime[3] - 48; //if the time has changed if (!equal(gszTime, szTime)) { gszTime = szTime; bChanged = true; } //if the hour type has changed if (hourType != gHourTypeOld) { gHourTypeOld = hourType; bChanged = true; } //if the time offset value has changed if (timeOffset != gTimeOffsetOld) { gTimeOffsetOld = timeOffset; bChanged = true; } return bChanged; } case CM_BUILDTIMELEFT: { new mins = count_down / 60 new secs = count_down % 60 //format the timeleft into a string new szTime[5]; format(szTime, 4, "%s%d%s%d", (mins < 10 ? "0" : ""), mins, (secs < 10 ? "0" : ""), secs); //calculate time digits from string digitValues[0] = szTime[0] - 48; digitValues[1] = szTime[1] - 48; digitValues[2] = szTime[2] - 48; digitValues[3] = szTime[3] - 48; return true; } } return false; } bool:get_clock_digits(clock, digit[4]) { //if the entity is a clock if (isClock(clock)) { //get entity IDs of digits on the clock digit[0] = entity_get_int(clock, EV_INT_iuser1); digit[1] = entity_get_int(clock, EV_INT_iuser2); digit[2] = entity_get_int(clock, EV_INT_iuser3); digit[3] = entity_get_int(clock, EV_INT_iuser4); //make sure all the clock digits are valid for (new i = 0; i < 4; ++i) { if (!is_valid_ent(digit[i])) { log_amx("%sInvalid digit entity in clock", gszPrefix); return false; } } } return true; } set_clock_digits(clock, digitValues[4]) { //get the clocks digit entities new digits[4]; new bool:bSuccess = get_clock_digits(clock, digits); //if successfully got clocks digit entities if (bSuccess) { //setup clock digits entity_set_float(digits[0], EV_FL_frame, float(digitValues[0])); entity_set_float(digits[1], EV_FL_frame, float(digitValues[1])); entity_set_float(digits[2], EV_FL_frame, float(digitValues[2])); entity_set_float(digits[3], EV_FL_frame, float(digitValues[3])); } } alertHour(hour, half) { //if we're set to speak the hour if (get_cvar_num("cm_hourannounce") > 0) { new szMeridiem[4] = "am"; new szHour[16]; new timeOffset = get_cvar_num("cm_timeoffset"); hour += timeOffset; //setup hour. Make sure hour isn't above 12 and isn't 00 o'clock if (hour >= 12) szMeridiem = "pm"; if (hour > 12) hour -= 12; if (hour == 0) hour = 12; //get the hour as a word num_to_word(hour, szHour, 15); //speak the time if (half) client_cmd(0, "spk ^"fvox/bell _period %s thirty %s^"", szHour, szMeridiem); else client_cmd(0, "spk ^"fvox/bell _period %s %s^"", szHour, szMeridiem); } } bool:isClock(ent) { //if entity is valid if (is_valid_ent(ent)) { //get classname of entity new szClassname[32]; entity_get_string(ent, EV_SZ_classname, szClassname, 32); //if classname of entity matches global clock classname if (equal(szClassname, gszClockClassname)) { //entity is a clock return true; } } return false; } public find_minmaxs() { new Float:origin[3], i new ent = engfunc(EngFunc_FindEntityByString,g_MaxPlayers,"classname","info_player_deathmatch") while(ent) { if(pev_valid(ent)) { pev(ent,pev_origin,origin) for(i=0;i<3;i++) { if(origin[i] < g_mins[i]) g_mins[i] = origin[i] if(origin[i] > g_maxs[i]) g_maxs[i] = origin[i] } } ent = engfunc(EngFunc_FindEntityByString,ent,"classname","info_player_deathmatch") } /*ent = engfunc(EngFunc_FindEntityByString,g_MaxPlayers,"classname","info_player_start") while(ent) { if(pev_valid(ent)) { pev(ent,pev_origin,origin) for(i=0;i<3;i++) { if(origin[i] < g_mins[1][i]) g_mins[1][i] = origin[i] if(origin[i] > g_maxs[1][i]) g_maxs[1][i] = origin[i] } } ent = engfunc(EngFunc_FindEntityByString,ent,"classname","info_player_start") }*/ g_maxs[2] += 70.0 //g_mins[1][2] -= 70.0 g_maxs[0] += 32.0 //g_mins[1][0] -= 32.0 g_maxs[1] += 32.0 //g_mins[1][1] -= 32.0 for(new j=0;j<3;j++) { I_max[j] = floatround(g_maxs[j]) I_min[j] = floatround(g_mins[j]) } } new cur_offset[33] new options_on_menu[8][33] public show_colors_menu(id,offset) { if(offset<0) offset = 0 new keys, curnum, menu[2048] for(new i=offset;i