Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- [DeathRun] Duel (CT Choose ONLY)
- Plugin by Shidla [SGC]
- Idea & Pay (xD):
- DarkNill | ICQ: 555-995-004 (zombie-mod.ru)
- Credits:
- xPaw
- DJ_WEST
- Shidla [SGC] | 2010 | ICQ: 312-298-513
- 1.3 [Final Version] | 23/11/2010
- http://Shidla.Gm-Project.NET/
- */
- #include <amxmodx>
- #include <fakemeta>
- #include <hamsandwich>
- #include <cstrike>
- #define OFFSET_RELOAD 54
- #define LINUX_DIFF 4
- #define fm_create_entity(%1) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, %1))
- /*========================================================================================================
- ===========================================[ Customizations ]=============================================
- ========================================================================================================*/
- new const BOT_NAME[] = "DRM Fake Player" // InGame Bot Name (in DeathrunManager!)
- new const g_ChatPrefix[] = "[DeathRun Duel]"
- new const CT_Aura[] = { 0, 0, 250 }
- new const T_Aura[] = { 250, 0, 0 }
- new const s_StartDuel[][] = { "vox/bizwarn.wav" } // Duel starting sounds
- /*========================================================================================================
- =========================================[ Customizations End ]===========================================
- ========================================================================================================*/
- new SayText, g_Maxplayers, g_Num_CT, g_MsgCurWeapon, g_DuelStarted, g_Weapon[33], g_WeaponClip[33],
- g_OneShot, g_ScoutBPAmmo, g_DeagleBPAmmo, g_AWPBPAmmo, g_Round_Ended, g_New_Round, RingSprite,
- CT_Player, T_Player, g_PlayerHP, g_DuelTimeOut, g_MsgSync, CountDown_Timer, g_ButtonsDisable
- new const TASK_CONT = 1352 // CountDown task
- public plugin_init()
- {
- register_plugin("DeathRun Duel (CT Choose ONLY)", "1.3", "Shidla")
- register_cvar("Shidla", "DeathRun Duel 1.3 (CT Choose ONLY)", FCVAR_SERVER|FCVAR_SPONLY)
- register_clcmd("say /duel", "StartDuel")
- register_clcmd("say_team /duel", "StartDuel")
- register_clcmd("drop", "Drop_Cmd")
- g_ScoutBPAmmo = register_cvar("dr_duel_scout_bpammo", "200")
- g_DeagleBPAmmo = register_cvar("dr_duel_deagle_bpammo", "50")
- g_AWPBPAmmo = register_cvar("dr_duel_awp_bpammo", "100")
- g_PlayerHP = register_cvar("dr_duel_player_hp", "100")
- g_DuelTimeOut = register_cvar("dr_duel_timeout", "5")
- g_OneShot = register_cvar("dr_duel_one_shot", "1") // 1 - one clip bullet (ONLY!); 0 - disable
- g_ButtonsDisable = register_cvar("dr_duel_buttons_disable", "1")
- register_event("DeathMsg", "Event_Death", "a")
- register_event("HLTV", "Event_Round_Start", "a", "1=0", "2=0" )
- register_event("SendAudio", "Event_Round_End", "a", "2&%!MRAD_terwin")
- register_event("SendAudio", "Event_Round_End", "a", "2&%!MRAD_ctwin")
- register_event("SendAudio", "Event_Round_End", "a", "2&%!MRAD_rounddraw")
- register_event("CurWeapon","Event_CurWeapon","b")
- register_forward(FM_CmdStart, "fw_CmdStart",1)
- RegisterHam(Ham_Touch, "weaponbox", "fw_TouchWeapon")
- RegisterHam(Ham_Touch, "weapon_shield", "fw_TouchWeapon")
- RegisterHam(Ham_Touch, "armoury_entity", "fw_TouchWeapon")
- RegisterHam(Ham_Weapon_Reload, "weapon_scout", "fw_Reload_Post", 1)
- RegisterHam(Ham_Weapon_Reload, "weapon_deagle", "fw_Reload_Post", 1)
- RegisterHam(Ham_Weapon_Reload, "weapon_awp", "fw_Reload_Post", 1)
- RegisterHam(Ham_Use, "func_button", "fw_Use")
- SayText = get_user_msgid("SayText")
- g_MsgCurWeapon = get_user_msgid("CurWeapon")
- g_MsgSync = CreateHudSyncObj()
- g_Maxplayers = get_maxplayers()
- register_dictionary("dr_duel.txt")
- }
- public plugin_precache()
- {
- RingSprite = precache_model("sprites/zbeam5.spr")
- static i
- for(i = 0; i < sizeof s_StartDuel; i++)
- precache_sound(s_StartDuel[i])
- }
- public client_putinserver(id)
- {
- g_Weapon[id] = 0
- g_WeaponClip[id] = 0
- }
- public StartDuel(id)
- {
- if(!is_user_alive(id))
- {
- new t_Cant_Dead[600 char]
- formatex(t_Cant_Dead, charsmax(t_Cant_Dead), "%L", id, "DR_CANT_DEAD")
- print_col_chat(id, "^4%s^1 %s",g_ChatPrefix, t_Cant_Dead)
- return PLUGIN_CONTINUE
- }
- if(g_Round_Ended)
- {
- new t_Cant_Round_End[600 char]
- formatex(t_Cant_Round_End, charsmax(t_Cant_Round_End), "%L", id, "DR_CANT_ROUND_END")
- print_col_chat(id, "^4%s^1 %s",g_ChatPrefix, t_Cant_Round_End)
- return PLUGIN_CONTINUE
- }
- if(cs_get_user_team(id) == CS_TEAM_T)
- {
- new t_Cant_Ter[600 char]
- formatex(t_Cant_Ter, charsmax(t_Cant_Ter), "%L", id, "DR_CANT_TER")
- print_col_chat(id, "^4%s^1 %s",g_ChatPrefix, t_Cant_Ter)
- return PLUGIN_CONTINUE
- }
- if(g_DuelStarted)
- {
- new t_Cant_Started[600 char]
- formatex(t_Cant_Started, charsmax(t_Cant_Started), "%L", id, "DR_CANT_STARTED")
- print_col_chat(id, "^4%s^1 %s",g_ChatPrefix, t_Cant_Started)
- return PLUGIN_CONTINUE
- }
- for(new i = 1; i <= g_Maxplayers; i++)
- {
- new Name[32]
- get_user_name(i, Name, 31)
- if(is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_CT)
- {
- g_Num_CT++
- if(g_Num_CT == 1)
- CT_Player = i
- else
- CT_Player = 0
- }
- if(is_user_alive(i) && (cs_get_user_team(i) == CS_TEAM_T) && !equal(Name, BOT_NAME))
- T_Player = i
- }
- if(g_Num_CT == 1)
- {
- new TextTitle[ 200 char ]
- formatex(TextTitle, charsmax(TextTitle), "\rВыберите оружие для дуэли:")
- new WeapScout[ 200 char ]
- formatex(WeapScout, charsmax(WeapScout), "\yМуха [Scout]")
- new WeapDeagle[ 200 char ]
- formatex(WeapDeagle, charsmax(WeapDeagle), "\yДигл [Deagle]")
- new WeapAWP[ 200 char ]
- formatex(WeapAWP, charsmax(WeapAWP), "\yСлон [AWP]")
- new WeapKNife[ 200 char ]
- formatex(WeapKNife, charsmax(WeapKNife), "\yНож [KNife]")
- new i_Menu = menu_create(TextTitle, "WeaponMenu")
- menu_additem(i_Menu, WeapScout, "1", 0)
- menu_additem(i_Menu, WeapDeagle, "2", 0)
- menu_additem(i_Menu, WeapAWP, "3", 0)
- menu_additem(i_Menu, WeapKNife, "4", 0)
- g_DuelStarted = true
- g_New_Round = false
- fm_strip_user_weapons(CT_Player)
- fm_strip_user_weapons(T_Player)
- set_pev(CT_Player, pev_health, float(get_pcvar_num(g_PlayerHP))) // Set CT HP
- set_pev(T_Player, pev_health, float(get_pcvar_num(g_PlayerHP))) // Set T HP
- if(is_user_alive(CT_Player) && is_user_connected(CT_Player))
- {
- fm_set_user_godmode(CT_Player, 1)
- set_task(0.5, "Show_Ring", CT_Player)
- }
- if(is_user_alive(T_Player) && is_user_connected(T_Player))
- {
- fm_set_user_godmode(T_Player, 1)
- set_task(0.5, "Show_Ring", T_Player)
- }
- menu_display(CT_Player, i_Menu, 0)
- }
- else
- {
- new t_Cant_Too_Many[600 char]
- formatex(t_Cant_Too_Many, charsmax(t_Cant_Too_Many), "%L", id, "DR_CANT_TOO_MANY", g_Num_CT)
- print_col_chat(id, "^4%s^1 %s",g_ChatPrefix, t_Cant_Too_Many)
- }
- g_Num_CT = 0
- return PLUGIN_CONTINUE
- }
- public WeaponMenu(id, menu, item)
- {
- new s_Data[4], s_Name[64], i_Access, i_Callback
- menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
- new i_Key = str_to_num(s_Data)
- switch(i_Key)
- {
- case 1:
- {
- Give_Scout(CT_Player)
- Give_Scout(T_Player)
- }
- case 2:
- {
- Give_Deagle(CT_Player)
- Give_Deagle(T_Player)
- }
- case 3:
- {
- Give_AWP(CT_Player)
- Give_AWP(T_Player)
- }
- case 4:
- {
- fm_give_item(CT_Player, "weapon_knife")
- fm_give_item(T_Player, "weapon_knife")
- }
- }
- menu_destroy(menu)
- if(is_user_alive(CT_Player) && is_user_connected(CT_Player))
- fm_set_rendering(CT_Player, kRenderFxGlowShell, CT_Aura[0], CT_Aura[1], CT_Aura[2], kRenderNormal, 20)
- if(is_user_alive(T_Player) && is_user_connected(T_Player))
- fm_set_rendering(T_Player, kRenderFxGlowShell, T_Aura[0], T_Aura[1], T_Aura[2], kRenderNormal, 20)
- CountDown_Timer = get_pcvar_num(g_DuelTimeOut)
- set_task(float(get_pcvar_num(g_DuelTimeOut)), "Duel_Informer", TASK_CONT)
- return PLUGIN_HANDLED
- }
- public Event_Death()
- {
- new CT_Count, CT_Last_Player
- for(new i = 1; i <= g_Maxplayers; i++)
- {
- new Name[32]
- get_user_name(i, Name, 31)
- if(is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_CT)
- {
- CT_Count++
- if(CT_Count == 1)
- CT_Last_Player = i
- else
- CT_Last_Player = 0
- }
- }
- if(CT_Count == 1 && !g_Round_Ended && is_user_alive(CT_Last_Player) && is_user_connected(CT_Last_Player) && is_user_alive(T_Player))
- {
- new t_Can_Start[600 char]
- formatex(t_Can_Start, charsmax(t_Can_Start), "%L", CT_Last_Player, "DR_CAN_START")
- print_col_chat(CT_Last_Player, "^4%s^1 %s",g_ChatPrefix, t_Can_Start)
- }
- CT_Count = 0
- }
- public Event_Round_Start()
- {
- g_DuelStarted = false
- g_Round_Ended = false
- g_New_Round = true
- g_Num_CT = 0
- CT_Player = 0
- T_Player = 0
- remove_task(TASK_CONT)
- for(new id = 1; id <= g_Maxplayers; id++)
- fm_set_rendering(id)
- }
- public Event_Round_End()
- {
- g_Round_Ended = true
- CT_Player = 0
- T_Player = 0
- }
- public Event_CurWeapon(id)
- {
- g_Weapon[id] = read_data(2)
- g_WeaponClip[id] = read_data(3)
- if(g_DuelStarted)
- {
- if(g_WeaponClip[id] > 1)
- {
- if(g_Weapon[id] == CSW_SCOUT)
- Weapon_ReChek(id, CSW_SCOUT)
- else if(g_Weapon[id] == CSW_DEAGLE)
- Weapon_ReChek(id, CSW_DEAGLE)
- else if(g_Weapon[id] == CSW_AWP)
- Weapon_ReChek(id, CSW_AWP)
- }
- }
- }
- public fw_CmdStart(id, handle, seed)
- {
- if(!is_user_alive(id) || !g_DuelStarted)
- return FMRES_IGNORED
- if((g_Weapon[id] == CSW_SCOUT || g_Weapon[id] == CSW_DEAGLE || g_Weapon[id] == CSW_AWP) && get_pcvar_num(g_OneShot))
- {
- //if(pev(id, pev_button) & IN_RELOAD)
- if(get_uc(handle, UC_Buttons) & IN_RELOAD)
- {
- set_uc(handle, UC_Buttons, get_uc(handle, UC_Buttons) & ~IN_RELOAD)
- return FMRES_HANDLED
- }
- }
- return FMRES_IGNORED
- }
- public Drop_Cmd(id)
- {
- if(g_DuelStarted)
- {
- new t_Cant_Drop[600 char]
- formatex(t_Cant_Drop, charsmax(t_Cant_Drop), "%L", id, "DR_CANT_DROP")
- print_col_chat(id, "^4%s^1 %s",g_ChatPrefix, t_Cant_Drop)
- return PLUGIN_HANDLED
- }
- return PLUGIN_CONTINUE
- }
- public fw_TouchWeapon(weapon, id)
- {
- if(!is_user_connected(id))
- return HAM_IGNORED
- if(g_DuelStarted)
- return HAM_SUPERCEDE
- return HAM_IGNORED
- }
- public fw_Reload_Post(Weap)
- {
- if(!g_DuelStarted && !get_pcvar_num(g_OneShot))
- return FMRES_IGNORED
- if(is_user_alive(CT_Player) && get_pdata_int(Weap, OFFSET_RELOAD, LINUX_DIFF))
- {
- if(g_Weapon[CT_Player] == CSW_SCOUT)
- cs_set_user_bpammo(CT_Player, CSW_SCOUT, cs_get_user_bpammo(CT_Player, CSW_SCOUT) + 9)
- else if(g_Weapon[CT_Player] == CSW_DEAGLE)
- cs_set_user_bpammo(CT_Player, CSW_DEAGLE, cs_get_user_bpammo(CT_Player, CSW_DEAGLE) + 6)
- else if(g_Weapon[CT_Player] == CSW_AWP)
- cs_set_user_bpammo(CT_Player, CSW_AWP, cs_get_user_bpammo(CT_Player, CSW_AWP) + 9)
- }
- if(is_user_alive(T_Player) && get_pdata_int(Weap, OFFSET_RELOAD, LINUX_DIFF))
- {
- if(g_Weapon[T_Player] == CSW_SCOUT)
- cs_set_user_bpammo(T_Player, CSW_SCOUT, cs_get_user_bpammo(T_Player, CSW_SCOUT) + 9)
- else if(g_Weapon[T_Player] == CSW_DEAGLE)
- cs_set_user_bpammo(T_Player, CSW_DEAGLE, cs_get_user_bpammo(T_Player, CSW_DEAGLE) + 6)
- else if(g_Weapon[T_Player] == CSW_AWP)
- cs_set_user_bpammo(T_Player, CSW_AWP, cs_get_user_bpammo(T_Player, CSW_AWP) + 9)
- }
- return FMRES_IGNORED
- }
- public fw_Use(ent, idcaller, idactivator, use_type, Float:value)
- {
- if(g_ButtonsDisable && g_DuelStarted && is_user_alive(idactivator) && cs_get_user_team(idactivator) == CS_TEAM_T)
- {
- new t_Cant_Drop[600 char]
- formatex(t_Cant_Drop, charsmax(t_Cant_Drop), "%L", idactivator, "DR_CANT_USE")
- print_col_chat(idactivator, "^4%s^1 %s",g_ChatPrefix, t_Cant_Drop)
- return HAM_SUPERCEDE
- }
- return HAM_IGNORED
- }
- public Duel_Informer()
- {
- if(CountDown_Timer > 1)
- {
- set_hudmessage(255, 0, 0, -1.0, 0.28, 2, 0.02, 1.0, 0.01, 0.1, -1)
- if(CountDown_Timer != 1)
- {
- for(new id = 1; id <= g_Maxplayers; id++)
- {
- new t_Time_Delay[600 char]
- formatex(t_Time_Delay, charsmax(t_Time_Delay), "%L", id, "DR_TIME_DELAY", CountDown_Timer - 1)
- ShowSyncHudMsg(id, g_MsgSync, "%s", t_Time_Delay)
- }
- }
- }
- --CountDown_Timer
- if(CountDown_Timer >= 1)
- set_task(1.0, "Duel_Informer", TASK_CONT)
- else
- {
- client_cmd(0, "spk %s", s_StartDuel[random_num(0, sizeof s_StartDuel - 1)])
- if(is_user_alive(CT_Player) && is_user_connected(CT_Player))
- fm_set_user_godmode(CT_Player, 0)
- if(is_user_alive(T_Player) && is_user_connected(T_Player))
- fm_set_user_godmode(T_Player, 0)
- remove_task(TASK_CONT)
- }
- }
- public Show_Ring(id)
- {
- if(g_DuelStarted && is_user_alive(id) && is_user_connected(id) && !g_New_Round)
- {
- static Float:origin[3]
- pev(id, pev_origin, origin)
- if(id == CT_Player)
- Ring(origin, CT_Aura[0], CT_Aura[1], CT_Aura[2])
- else if(id == T_Player)
- Ring(origin, T_Aura[0], T_Aura[1], T_Aura[2])
- set_task(0.5, "Show_Ring", id)
- }
- else
- remove_task(id)
- }
- /*========================================================================================================
- ===============================================[ Stocks ]=================================================
- ========================================================================================================*/
- stock fm_give_item(index, const item[])
- {
- if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10))
- return 0
- new ent = fm_create_entity(item)
- if (!pev_valid(ent))
- return 0
- new Float:origin[3]
- pev(index, pev_origin, origin)
- set_pev(ent, pev_origin, origin)
- set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN)
- dllfunc(DLLFunc_Spawn, ent)
- new save = pev(ent, pev_solid)
- dllfunc(DLLFunc_Touch, ent, index)
- if (pev(ent, pev_solid) != save)
- return ent
- engfunc(EngFunc_RemoveEntity, ent)
- return -1
- }
- stock fm_strip_user_weapons(index)
- {
- new ent = fm_create_entity("player_weaponstrip")
- if (!pev_valid(ent))
- return 0
- dllfunc(DLLFunc_Spawn, ent)
- dllfunc(DLLFunc_Use, ent, index)
- engfunc(EngFunc_RemoveEntity, ent)
- return 1
- }
- stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
- {
- new Float:RenderColor[3]
- RenderColor[0] = float(r)
- RenderColor[1] = float(g)
- RenderColor[2] = float(b)
- set_pev(entity, pev_renderfx, fx)
- set_pev(entity, pev_rendercolor, RenderColor)
- set_pev(entity, pev_rendermode, render)
- set_pev(entity, pev_renderamt, float(amount))
- return 1
- }
- stock get_weapon_ent(id,wpnid=0,wpnName[]="")
- {
- // who knows what wpnName will be
- static newName[32]
- // need to find the name
- if(wpnid) get_weaponname(wpnid,newName,31)
- // go with what we were told
- else formatex(newName,31,"%s",wpnName)
- // prefix it if we need to
- if(!equal(newName,"weapon_",7))
- format(newName,31,"weapon_%s",newName)
- new ent
- while((ent = engfunc(EngFunc_FindEntityByString,ent,"classname",newName)) && pev(ent,pev_owner) != id) {}
- return ent
- }
- stock fm_set_user_godmode(index, godmode = 0)
- {
- set_pev(index, pev_takedamage, godmode == 1 ? DAMAGE_NO : DAMAGE_AIM)
- return 1
- }
- stock print_col_chat(const id, const input[], any:...)
- {
- new count = 1, players[32]
- static msg[191]
- vformat(msg, 190, input, 3)
- replace_all(msg, 190, "!g", "^4") // Green Color
- replace_all(msg, 190, "!y", "^1") // Default Color (Yellow)
- replace_all(msg, 190, "!t", "^3") // Team Color
- if (id) players[0] = id; else get_players(players, count, "ch")
- {
- for ( new i = 0; i < count; i++ )
- {
- if ( is_user_connected(players[i]) )
- {
- message_begin(MSG_ONE_UNRELIABLE, SayText, _, players[i])
- write_byte(players[i])
- write_string(msg)
- message_end()
- }
- }
- }
- }
- UpDate_HUD(id, csw_weapon)
- {
- message_begin(MSG_ONE, g_MsgCurWeapon, _, id)
- write_byte(1)
- write_byte(csw_weapon) //CSW_weapon
- write_byte(1) // MaxClip
- message_end()
- }
- Give_Scout(id)
- {
- if(is_user_alive(id) && is_user_connected(id))
- {
- fm_give_item(id, "weapon_scout")
- new wEnt = get_weapon_ent(id, CSW_SCOUT)
- if(pev_valid(wEnt) && get_pcvar_num(g_OneShot))
- cs_set_weapon_ammo(wEnt, 1)
- cs_set_user_bpammo(id, CSW_SCOUT, get_pcvar_num(g_ScoutBPAmmo))
- UpDate_HUD(id, wEnt)
- }
- }
- Give_Deagle(id)
- {
- if(is_user_alive(id) && is_user_connected(id))
- {
- fm_give_item(id, "weapon_deagle")
- new wEnt = get_weapon_ent(id, CSW_DEAGLE)
- if(pev_valid(wEnt) && get_pcvar_num(g_OneShot))
- cs_set_weapon_ammo(wEnt, 1)
- cs_set_user_bpammo(id, CSW_DEAGLE, get_pcvar_num(g_DeagleBPAmmo))
- UpDate_HUD(id, wEnt)
- }
- }
- Give_AWP(id)
- {
- if(is_user_alive(id) && is_user_connected(id))
- {
- fm_give_item(id, "weapon_awp")
- new wEnt = get_weapon_ent(id, CSW_AWP)
- if(pev_valid(wEnt) && get_pcvar_num(g_OneShot))
- cs_set_weapon_ammo(wEnt, 1)
- cs_set_user_bpammo(id, CSW_AWP, get_pcvar_num(g_AWPBPAmmo))
- UpDate_HUD(id, wEnt)
- }
- }
- Weapon_ReChek(id, Weap)
- {
- if(get_pcvar_num(g_OneShot) && is_user_alive(id) && is_user_connected(id))
- {
- new wEnt = get_weapon_ent(id, Weap)
- if(pev_valid(wEnt))
- {
- cs_set_weapon_ammo(wEnt, 1)
- UpDate_HUD(id, wEnt)
- }
- }
- }
- Ring(const Float:origin[3], R, G, B)
- {
- engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
- write_byte(TE_BEAMCYLINDER) // TE id
- engfunc(EngFunc_WriteCoord, origin[0]) // x 10
- engfunc(EngFunc_WriteCoord, origin[1]) // y
- engfunc(EngFunc_WriteCoord, origin[2]) // z
- engfunc(EngFunc_WriteCoord, origin[0]-50.0) // x axis
- engfunc(EngFunc_WriteCoord, origin[1]) // y axis
- engfunc(EngFunc_WriteCoord, origin[2]+100.0) // z axis
- write_short(RingSprite) // sprite
- write_byte(0) // startframe
- write_byte(0) // framerate
- write_byte(5) // life
- write_byte(5) // width
- write_byte(0) // noise
- write_byte(R) // red
- write_byte(G) // green
- write_byte(B) // blue
- write_byte(200) // brightness
- write_byte(0) // speed
- message_end()
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement