Witam, mam problem z przerobieniem pluginu dr_duel, chcę go przerobić tak by po wpisaniu komendy "say /duel" przez TT otwierało się menu z pojedynkami, obecnie jest ustawione tak, że otwiera się w CT.
Pomoże mi ktoś z tym?;<
Myślę, że to nie zajmie dużo czasu a byłabym bardzo wdzięczna za udzielenie mi pomocy.
#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() }