#include #include #include #include #include #include #pragma semicolon 1; #define VERSION "0.3" #define PEV_PDATA_SAFE 2 #define IsPlayer(%1) (1 <= %1 <= g_iMaxPlayers) #define OFFSET_TEAM 114 #define OFFSET_DEFUSE_PLANT 193 #define HAS_DEFUSE_KIT (1<<16) #define OFFSET_INTERNALMODEL 126 #define EXTRAOFFSET 5 #define SetPlayerBit(%1,%2) (%1 |= (1 << ( %2 & 31 ))) #define ClearPlayerBit(%1,%2) (%1 &= ~(1 << ( %2 & 31 ))) #define CheckPlayerBit(%1,%2) (%1 & (1 << ( %2 & 31 ))) #define fm_cs_set_user_nobuy(%1) set_pdata_int(%1, 235, get_pdata_int(%1, 235) & ~(1<<0)) new bool:g_HasFlashOn[33], bool:g_ChoosenColor[33], bool:g_DisableSound[33]; new g_FlashColor[33], g_Joined[33]; new g_MsgTeamInfo, g_MsgScreenFade; new g_iTimer, g_iMaxPlayers; new g_BeaconSprite, g_IsConnected, g_IsAlive; new const g_Prefix[] = "[Chowany]"; #if cellbits == 32 const OFFSET_CLIPAMMO = 51; #else const OFFSET_CLIPAMMO = 65; #endif const OFFSET_LINUX_WEAPONS = 4; new g_FlashlightColors[][3] = { {255,0,0}, {0,255,0}, {0,0,255}, {255,69,0}, {0,255,255}, {255,255,0}, {255,255,255}, {255,0,255} }; new const g_FlashlightColorNames[][] = { "Czerwonym", "Zielonym", "Niebieskim", "Pomaranczowym", "Aqua", "Zoltym", "Bialym^nBialy ratuje!", "Rozowym" }; new const gSoundlist[9][] = { "Half-Life01", "Half-Life02", "Half-Life03", "Half-Life04", "Half-Life11", "Half-Life12", "Half-Life13", "Half-Life17", "Half-Life17" }; new const gSongs[7][] = { "Chowany/1.mp3", "Chowany/2.mp3", "Chowany/3.mp3", "Chowany/4.mp3", "Chowany/5.mp3", "Chowany/6.mp3", "Chowany/7.mp3" }; enum (+= 1337) { TASK_TIME = 1337, TASK_STRIP }; public plugin_init(){ register_plugin("Chowany", VERSION, "diablix"); g_iMaxPlayers = get_maxplayers(); g_MsgTeamInfo = get_user_msgid("TeamInfo"); g_MsgScreenFade = get_user_msgid("ScreenFade"); register_menucmd(register_menuid("ColorMenu"), 1023, "handleColorMenu"); register_event("DeathMsg", "eventPlayerDeath", "a"); //register_event("TextMsg", "eventRoundRestart", "a", "2&#Game_C", "2&#Game_w"); register_event("ResetHUD", "eventPlayerSpawn", "b"); register_event("TeamInfo", "eventJoinTeam", "a", "2=TERRORIST", "2=CT"); register_event("HLTV", "eventRoundRestart", "a", "1=0", "2=0"); register_logevent("eventRoundEnd", 2, "1=Round_End"); //register_logevent("eventRoundRestart", 2, "1=Round_Start"); register_forward(FM_EmitSound, "fwEmitSound"); register_forward(FM_CmdStart, "fwCmdStart"); register_forward(FM_PlayerPreThink, "FwPlayerPreThink"); register_forward(FM_ClientKill, "fwClientKill", 0); register_message(get_user_msgid("StatusIcon") , "msgStatusIcon"); set_task(10.0, "taskCvars"); set_lights("c"); //register_clcmd("say /test", "cmdTest"); register_clcmd("say /muzyka", "toggleSound"); register_clcmd("say_team /muzyka", "toggleSound"); } public plugin_natives(){ register_library("chowany"); register_native("hns_czasukrycia", "_timer"); } public _timer(plugin) { return g_iTimer; } public toggleSound(id){ g_DisableSound[id] = !g_DisableSound[id]; ColorChat(id, GREEN, "%s^x01 %s muzyke!", g_Prefix, g_DisableSound[id] ? "Wylaczyles" : "Wlaczyles"); return 1; } public taskCvars(){ set_cvar_num("mp_flashlight", 0); set_cvar_num("sv_maxspeed", 1000); set_cvar_num("mp_friendlyfire", 0); set_cvar_num("mp_autoteambalance", 0); set_cvar_num("mp_forcechasecam", 0); set_cvar_num("mp_forcecamera", 0); set_cvar_num("mp_freezetime", 0); set_cvar_num("sv_restart", 1); } public plugin_precache(){ g_BeaconSprite = engfunc(EngFunc_PrecacheModel, "sprites/beacon.spr"); engfunc(EngFunc_PrecacheSound, "radio/enemydown.wav"); for(new i = 0; i < sizeof gSongs ; i++){ engfunc(EngFunc_PrecacheSound, gSongs[i]); break; } } public client_command(id){ static szCommand[12]; read_argv(0, szCommand, sizeof szCommand - 1); if(g_Joined[id] > 1){ if(equal(szCommand, "jointeam") || equal(szCommand, "chooseteam")){ return 1; } } return 0; } public eventJoinTeam(){ new id = read_data(1); g_Joined[id] += 1; if(g_Joined[id] > 1) return 1; checkTeam(id); return 0; } Policz(CsTeams:iTeam){ new iPlayers[32] , iPlayerCount; new iTeamPlayers[CsTeams]; get_players(iPlayers , iPlayerCount); for (new i = 0 ; i < iPlayerCount ; i++) iTeamPlayers[cs_get_user_team(iPlayers[i])] ++; return iTeamPlayers[iTeam]; } checkTeam(id) { new iNum = Policz(CS_TEAM_CT); if(iNum >= 1) { fm_cs_set_user_team(id, 1); ColorChat(id, GREY, "^x04%s^x03 Nie mozesz byc szukajacym! (%d)", g_Prefix, iNum); return 1; } else{ fm_cs_set_user_team(id, 2); ColorChat(id, GREY, "^x04%s^x03 Zostales szukajacym (%d)", g_Prefix, iNum); } return 1; } public eventRoundEnd(){ new iPlayers[32], iNum, szName[32]; get_players(iPlayers, iNum, "ch"); for(new iCt = 0; iCt < iNum; iCt++){ fm_cs_set_user_team(iPlayers[iCt], 1); } if(iNum == 1) { get_players(iPlayers, iNum, "ache", "TERRORIST"); new iTT = iPlayers[0]; fm_cs_set_user_team(iTT, 2); get_user_name(iTT, szName, sizeof szName - 1); ColorChat(iTT, GREY, "^x04%s^x01 Jestes ostatnim zywym chowajacym! Zostales^x03 szukajacym^x01!", g_Prefix); ColorChat(0, GREY, "^x04%s^x03 %s^x01 zostal ostatnim chowajacym! Zagra tera jako szukajacy!", g_Prefix, szName); client_cmd(iTT, "spk fvox/blip"); } else { get_players(iPlayers, iNum, "che", "TERRORIST"); new rNum = iPlayers[random_num(0, iNum - 1)]; get_user_name(rNum, szName, sizeof szName - 1); ColorChat(0, GREY, "^x04%s^x03 %s^x01 zostal wylosowany jako szukajacy!", g_Prefix, szName); client_cmd(rNum, "spk fvox/blip"); fm_cs_set_user_team(rNum, 2); } } public eventPlayerDeath(){ new killer = read_data(1); new victim = read_data(2); new Float:fOrigin[3]; pev(victim, pev_origin, fOrigin); set_pev(victim, pev_effects, EF_NODRAW); engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0); write_byte(TE_PARTICLEBURST); engfunc(EngFunc_WriteCoord, fOrigin[0]); engfunc(EngFunc_WriteCoord, fOrigin[1]); engfunc(EngFunc_WriteCoord, fOrigin[2]); write_short(50); write_byte(72); write_byte(10); message_end(); if(IsPlayer(killer)) emit_sound(killer, CHAN_STATIC, "radio/enemydown.wav", 0.8, ATTN_NORM, 0, PITCH_NORM); ClearPlayerBit(g_IsAlive, victim); } public eventRoundRestart(){ set_lights("c"); new iPlayers[32], iNum; get_players(iPlayers, iNum, "ch"); if(task_exists(TASK_TIME)) remove_task(TASK_TIME); g_iTimer = 35; set_task(1.0, "Countdown", TASK_TIME, _, _, "a", 35); for(new i = 0 ; i < iNum; i ++){ if(IsPlayer(iPlayers[i]) && CheckPlayerBit(g_IsConnected, iPlayers[i]) && !g_DisableSound[iPlayers[i]]){ client_cmd(iPlayers[i], "mp3 play sound/%s", gSongs[random_num(0, 6)]); fm_do_rendering(iPlayers[i], kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 16); g_ChoosenColor[iPlayers[i]] = false; g_HasFlashOn[iPlayers[i]] = false; } } } public eventPlayerSpawn(id){ SetPlayerBit(g_IsAlive, id); if(CheckPlayerBit(g_IsAlive, id)) set_task(0.3, "taskStripWeapons", id + TASK_STRIP); } public msgStatusIcon(iMsgId, MSG_DEST, id){ static szIcon[5]; get_msg_arg_string(2, szIcon, 4); if(szIcon[0] == 'b' && szIcon[2] == 'y' && szIcon[3] == 'z'){ if(get_msg_arg_int(1)){ fm_cs_set_user_nobuy(id); return 0; } } return 0; } public taskStripWeapons(id){ id -= TASK_STRIP; fm_do_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 16); g_ChoosenColor[id] = false; g_HasFlashOn[id] = false; fm_strip_user_weapons(id); fm_set_user_nvg(id, 0); if(get_user_team(id) == 2) fm_set_godmode(id, 1); fm_strip_c4(); } public fm_strip_c4(){ for ( new i = 1; i <= g_iMaxPlayers; ++i ) engclient_cmd(i, "drop", "weapon_c4"); new weapbox, bomb = fm_find_ent_by_class(-1, "weapon_c4"); if (bomb && (weapbox = pev(bomb, pev_owner)) > g_iMaxPlayers){ dllfunc(DLLFunc_Think, weapbox); message_begin(MSG_ALL, get_user_msgid("BombPickup")); message_end(); } } public Countdown(){ g_iTimer -= 1; if(g_iTimer >= 0){ set_hudmessage(0, 255, 64, 0.05, 0.65, 1, 1.0, 1.0, 0.25, 0.25, 2); show_hudmessage(0, "[Chowany - by diablix]^nChowajacy maja %d sekund na ukrycie!", g_iTimer); } if(g_iTimer == 1){ set_lights("a"); new iPlayers[32], iNum; get_players(iPlayers, iNum, "ach"); for(new i = 0; i < iNum; i++){ if(!g_DisableSound[iPlayers[i]]){ new r = random_num(0, 9 - 1); client_cmd(iPlayers[i],"mp3 play media/%s", gSoundlist[r]); } if(get_user_team(iPlayers[i]) == 1){ Make_ScreenFade(iPlayers[i], 0.5, 0.5, 128, 255, 0, 64); fm_set_user_nvg(iPlayers[i], 1); set_hudmessage(0, 255, 0, 0.43, 0.81, 1, 1.5, 1.5, 1.0, 1.0, 1); show_hudmessage(iPlayers[i], "Dostales noktowizor"); client_cmd(iPlayers[i], "spk items/nvg_on.wav"); fm_give_item(iPlayers[i], "weapon_knife"); } else if(get_user_team(iPlayers[i]) == 2){ fm_give_item(iPlayers[i], "weapon_knife"); fm_give_item(iPlayers[i], "weapon_m3"); fm_give_item(iPlayers[i], "weapon_deagle"); fm_give_item(iPlayers[i], "weapon_m249"); fm_give_item(iPlayers[i], "weapon_elite"); fm_give_item(iPlayers[i], "weapon_ak47"); fm_give_item(iPlayers[i], "weapon_awp"); fm_give_item(iPlayers[i], "weapon_scout"); fm_give_item(iPlayers[i], "weapon_p228"); fm_give_item(iPlayers[i], "weapon_glock18"); fm_give_item(iPlayers[i], "weapon_tmp"); fm_give_item(iPlayers[i], "weapon_mp5navy"); fm_give_item(iPlayers[i], "weapon_galil"); fm_give_item(iPlayers[i], "weapon_famas"); fm_give_item(iPlayers[i], "weapon_mac10"); fm_set_weapon_ammo(find_ent_by_owner(1, "weapon_m3", iPlayers[i]), 999); fm_set_weapon_ammo(find_ent_by_owner(1, "weapon_deagle", iPlayers[i]), 999); fm_set_weapon_ammo(find_ent_by_owner(1, "weapon_m249", iPlayers[i]), 999); fm_set_weapon_ammo(find_ent_by_owner(1, "weapon_elite", iPlayers[i]), 999); fm_set_weapon_ammo(find_ent_by_owner(1, "weapon_ak47", iPlayers[i]), 999); fm_set_weapon_ammo(find_ent_by_owner(1, "weapon_awp", iPlayers[i]), 999); fm_set_weapon_ammo(find_ent_by_owner(1, "weapon_scout", iPlayers[i]), 999); fm_set_weapon_ammo(find_ent_by_owner(1, "weapon_p228", iPlayers[i]), 999); fm_set_weapon_ammo(find_ent_by_owner(1, "weapon_glock18", iPlayers[i]), 999); fm_set_weapon_ammo(find_ent_by_owner(1, "weapon_tmp", iPlayers[i]), 999); fm_set_weapon_ammo(find_ent_by_owner(1, "weapon_mp5navy", iPlayers[i]), 999); fm_set_weapon_ammo(find_ent_by_owner(1, "weapon_galil", iPlayers[i]), 999); fm_set_weapon_ammo(find_ent_by_owner(1, "weapon_famas", iPlayers[i]), 999); fm_set_weapon_ammo(find_ent_by_owner(1, "weapon_mac10", iPlayers[i]), 999); } } g_iTimer = 0; } } public fwClientKill(id) return FMRES_SUPERCEDE; public fwEmitSound(entity, channel, const szSound[]){ if(get_user_team(entity) == 1){ if(equal(szSound, "items/nvg_on.wav") || equal(szSound, "items/nvg_off.wav") || equal(szSound, "common/wpn_denyselect.wav") || equal(szSound, "weapons/knife_hitwall1.wav") || equal(szSound, "weapons/knife_slash1.wav") || equal(szSound, "weapons/knife_slash2.wav")) return FMRES_SUPERCEDE; } return FMRES_IGNORED; } public FwPlayerPreThink(id){ if(!CheckPlayerBit(g_IsAlive, id)) return 1; set_pev(id, pev_flTimeStepSound, 999); set_pev(id, pev_fuser2, 0.0); switch(get_user_team(id)){ case 1:{ if(g_iTimer <= 0){ set_pev(id, pev_maxspeed, -1.0); set_pev(id, pev_velocity, Float:{0.0, 0.0, 0.0}); } else{ set_pev(id, pev_maxspeed, 550.0); set_pev(id, pev_gravity, 0.2); } } case 2:{ if(g_iTimer > 0){ Make_ScreenFade(id, 0.2, 0.2, 0, 64, 255, 255); set_pev(id, pev_maxspeed, -1.0); set_pev(id, pev_velocity, Float:{0.0, 0.0, 0.0}); } else{ set_pev(id, pev_maxspeed, 550.0); set_pev(id, pev_gravity, 0.2); } } } if(g_HasFlashOn[id]) Make_FlashLight(id, g_FlashColor[id]); new ent, body; get_user_aiming(id, ent, body); if(IsPlayer(ent) && g_ChoosenColor[ent]){ set_hudmessage(255, 64, 64, 0.41, 0.55, 0, 0.1, 0.1, 0.4, 0.4, 4); show_hudmessage(id, "Ten gracz juz zostal znaleziony"); } return 0; } public fwCmdStart(id, handle){ if(get_uc (handle, UC_Impulse) == 201){ set_uc(handle, UC_Impulse, 0); return FMRES_HANDLED; } if(!CheckPlayerBit(g_IsAlive, id) || get_user_team(id) != 2 || g_iTimer >= 0) return FMRES_HANDLED; new oldbuttons = entity_get_int(id, EV_INT_oldbuttons); if(get_uc(handle, UC_Buttons) & IN_USE && !(oldbuttons & IN_USE)){ new ent, body; get_user_aiming(id, ent, body); if(IsPlayer(ent) && CheckPlayerBit(g_IsAlive, ent) && get_user_team(ent) == 1){ if(!g_ChoosenColor[ent]){ new szName[32]; get_user_name(ent, szName, sizeof szName - 1); client_cmd(ent, "spk fvox/blip"); client_cmd(id, "spk fvox/blip"); Make_Beacon(ent); showColorMenu(ent); ColorChat(0, GREY, "^x04%s^x03 Szukajacy^x01 znalazl^x03 %s^x01 !", g_Prefix, szName); fm_do_rendering(ent, kRenderFxPulseFastWide, 0, 0, 0, kRenderTransAdd, 128); g_ChoosenColor[ent] = true; } else{ ColorChat(id, GREY, "^x04%s^x03 Ten gracz juz wybral kolor!", g_Prefix); } } } if(get_uc(handle, UC_Impulse) == 100){ g_HasFlashOn[id] = !g_HasFlashOn[id]; g_FlashColor[id] = random_num(0, sizeof(g_FlashlightColors) - 1); set_uc(handle, UC_Impulse, 0); return FMRES_HANDLED; } return FMRES_IGNORED; } public showColorMenu(id){ new MenuBody[512], len, keys; len = format(MenuBody, sizeof MenuBody -1, "%sy Zostales znaleziony! Wybierz kolor!^nMaszw 5y sekund^n", g_Prefix); len += format(MenuBody[len], sizeof MenuBody -1, "^n^nr1. wCzerwony"); len += format(MenuBody[len], sizeof MenuBody -1, "^nr2. wZielony"); len += format(MenuBody[len], sizeof MenuBody -1, "^nr3. wNiebieski"); len += format(MenuBody[len], sizeof MenuBody -1, "^nr4. wPomaranczowy"); len += format(MenuBody[len], sizeof MenuBody -1, "^nr5. wAqua"); len += format(MenuBody[len], sizeof MenuBody -1, "^nr6. wZolty"); len += format(MenuBody[len], sizeof MenuBody -1, "^nr7. wRozowy"); keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6); show_menu(id, keys, MenuBody, -1, "ColorMenu"); } public handleColorMenu(id, key){ if(get_user_team(id) != 1) return 1; new szColor[32], szName[32]; get_user_name(id, szName, sizeof szName - 1); switch(key + 1){ case 1: szColor = "Czerwony"; case 2: szColor = "Zielony"; case 3: szColor = "Niebieski"; case 4: szColor = "Pomaranczowy"; case 5: szColor = "Aqua"; case 6: szColor = "Zolty"; case 7: szColor = "Rozowy"; } ColorChat(0, GREY, "^x04%s^x03 %s^x01 wybral kolor^x03 %s", g_Prefix, szName, szColor); fm_do_rendering(id, kRenderFxGlowShell, g_FlashlightColors[key][0], g_FlashlightColors[key][1], g_FlashlightColors[key][2], kRenderNormal, 1); return 1; } public client_connect(id){ SetPlayerBit(g_IsConnected, id); g_HasFlashOn[id] = false; g_ChoosenColor[id] = false; g_Joined[id] = 0; } public client_disconnect(id) ClearPlayerBit(g_IsAlive, id); stock fm_cs_set_user_team(id, team){ if(!(1 <= id <= g_iMaxPlayers) || pev_valid(id) != PEV_PDATA_SAFE) return 0; switch(team){ case 1: { new iDefuser = get_pdata_int(id, OFFSET_DEFUSE_PLANT); if(iDefuser & HAS_DEFUSE_KIT) { iDefuser -= HAS_DEFUSE_KIT; set_pdata_int(id, OFFSET_DEFUSE_PLANT, iDefuser); } set_pdata_int(id, OFFSET_TEAM, 1); } case 2: { if(pev(id, pev_weapons) & (1<