Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local PREFIX = "duel"
- local MSG_ON_QUEUE = "Join"
- local MSG_ON_LEAVE_QUEUE = "Leave"
- local MSG_CURRENTLY_IN = "in"
- R_A = {
- QUEUE_TBL = {},
- BATTLE_TBL = {},
- CLEAN_TBL = {},
- KILL_TBL = {},
- PHASE_TBL = {[1] = 1}
- }
- local Q_TBL = R_A.QUEUE_TBL
- local B_TBL = R_A.BATTLE_TBL
- local C_TBL = R_A.CLEAN_TBL
- local K_TBL = R_A.KILL_TBL
- local P_TBL = R_A.PHASE_TBL
- function RA_MSG_HOOK(event, plr, msg)
- if (string.lower(msg):find(PREFIX.." ") == 1) then
- local s_msg = msg:gsub(PREFIX.." ", "")
- if (string.lower(s_msg) == MSG_ON_QUEUE) then
- if (not plr:IsInGroup() and plr:GetInstanceId() == 0) then
- if (plr:GetPhaseMask() > 1) then return 0; end
- if (not R_A.IsPlayerQueued(plr)) then
- table.insert(Q_TBL, plr)
- plr:SendBroadcastMessage("Shoma Varede Liste Entezar Shodid.")
- else
- plr:SendBroadcastMessage("Shoma Dar Hale Hazer , Dar Liste Entezar Hastid")
- end
- else
- plr:SendBroadcastMessage("Zamanike Dar Raid ya Party Hastid , Nemitavanid Join Shavid")
- end
- end
- if (string.lower(s_msg) == MSG_ON_LEAVE_QUEUE) then
- if (R_A.IsPlayerQueued(plr)) then
- table.remove(Q_TBL, R_A.IsPlayerQueued(plr))
- plr:SendBroadcastMessage("Shoma az Liste Entezar Kharej Shodid.")
- else
- plr:SendBroadcastMessage("Shoma Dar Liste Entezar Nistid.")
- end
- end
- if (string.lower(s_msg) == MSG_CURRENTLY_IN) then
- if (#Q_TBL > 0) then
- local A_PLR = 0
- local H_PLR = 0
- for _, v in pairs(Q_TBL) do
- if (v:GetTeam() == 0) then
- A_PLR = A_PLR + 1
- else
- H_PLR = H_PLR + 1
- end
- end
- plr:SendBroadcastMessage("Dar Hale Hazer Dar Liste Entezar:\nAlliance: "..A_PLR.."\nHorde: "..H_PLR)
- else
- plr:SendBroadcastMessage("Kesi Dar Liste Entezar Nist.")
- end
- end
- return 0;
- end
- end
- function R_A.IsPlayerQueued(plr)
- for k, v in pairs(Q_TBL) do
- if (tostring(v) == tostring(plr)) then
- return k;
- end
- end
- return false;
- end
- ----------------------------------------
- function TIMED_EVENTS()
- CleanQueue();
- CleanBattle();
- end
- function TIMED_REGISTER()
- REGISTER_TEAMS();
- end
- ----------------------------------------
- function CleanQueue()
- CLEAN_OFFLINE(Q_TBL);
- CLEAN_INSTANCE(Q_TBL);
- CLEAN_GROUP(Q_TBL);
- if (#C_TBL > 0) then
- CLEAN_TBL(Q_TBL);
- end
- end
- function CleanBattle()
- CLEAN_B_OFFLINE(B_TBL);
- CLEAN_MOUNTED(B_TBL);
- PLR_CHEAT(B_TBL);
- TEAM_RAMPAGE();
- if (#C_TBL > 0) then
- CLEAN_TBL(B_TBL);
- end
- end
- function CLEAN_OFFLINE(TBL)
- for _, v in pairs(TBL) do
- if (not v:IsInWorld()) then
- table.insert(C_TBL, v)
- end
- end
- end
- function CLEAN_B_OFFLINE(TBL)
- for _, _v in pairs(GetActiveRounds()) do
- for k, v in pairs(TBL[_v]) do
- if (not v:IsInWorld()) then
- TBL[_v][k] = nil;
- collectgarbage()
- end
- end
- end
- end
- function CLEAN_INSTANCE(TBL)
- for _, v in pairs(TBL) do
- if (v:IsInWorld() and v:GetInstanceId() ~= 0) then
- table.insert(C_TBL, v)
- end
- end
- end
- function CLEAN_GROUP(TBL)
- for _, v in pairs(TBL) do
- if (v:IsInWorld() and v:IsInGroup()) then
- table.insert(C_TBL, v)
- end
- end
- end
- function CLEAN_MOUNTED(TBL)
- for _, _v in pairs(GetActiveRounds()) do
- for _, v in pairs(TBL[_v]) do
- if (v:IsMounted()) then
- v:Dismount()
- end
- end
- end
- end
- function CLEAN_TBL(TBL)
- for _, v in pairs(C_TBL) do
- for k, _v in pairs(TBL) do
- if (v == _v) then
- TBL[k] = nil;
- end
- if (_v:IsInWorld()) then
- _v:SendBroadcastMessage("Shoma Be Ellate Join Shodan Be Party ya Raid , az List Kharej Shodid.")
- end
- end
- end
- C_TBL = {}
- collectgarbage()
- end
- ----------------------------------------
- function REGISTER_TEAMS()
- while (true) do
- local A_PLR = 0
- local H_PLR = 0
- for k, v in pairs(Q_TBL) do
- if (v:GetTeam() == 0) then
- A_PLR = A_PLR + 1
- else
- H_PLR = H_PLR + 1
- end
- end
- if (A_PLR < 3 or H_PLR < 3) then break; end
- local count = 0
- local ROUND_ID = ReturnPhase()
- local key
- B_TBL[ROUND_ID] = {}
- MixTable()
- for k, v in pairs(Q_TBL) do
- if (count < 6) then
- table.insert(B_TBL[ROUND_ID], v)
- Q_TBL[k] = nil;
- count = count + 1
- else
- break;
- end
- end
- for k in ipairs(P_TBL) do
- key = k
- end
- P_TBL[key+1] = ROUND_ID
- table.insert(K_TBL, ROUND_ID)
- CreateLuaEvent(function() RemoveK_TBL(ROUND_ID); end, 15000, 1)
- PrepareTeam(ROUND_ID)
- end
- end
- function PrepareTeam(ROUND_ID)
- for _, v in pairs(B_TBL[ROUND_ID]) do
- v:SendBroadcastMessage("Mobareze bad az 15 Sanie Aghaz Khahad Shod , Lotfan Amade Bashid !!")
- v:SetPhaseMask(ROUND_ID)
- if (v:GetTeam() == 0) then
- v:Teleport(530, 2893, 5955, 5.1, 0)
- else
- v:Teleport(530, 2784, 5902, 5, 0)
- end
- end
- CreateLuaEvent(function() StartBattle(ROUND_ID); end, 15000, 1)
- end
- function DisbandTeams(ROUND_ID)
- for _, v in pairs(B_TBL[ROUND_ID]) do
- if (v:IsInWorld()) then
- if(v:GetPhaseMask() ~= 1) then
- v:SetPhaseMask(1)
- end
- if (v:GetTeam() == 0) then
- v:Teleport(0, -8913.23, 554.63, 94, 0)
- else
- v:Teleport(1, 1502.70, -4415.42, 22, 0)
- end
- if (not v:IsAlive()) then
- CreateLuaEvent(function() RA_ress(v); end, 3000, 1)
- end
- end
- end
- B_TBL[ROUND_ID] = nil;
- for k, v in pairs(P_TBL) do
- if (v == ROUND_ID) then
- P_TBL[k] = nil;
- end
- end
- collectgarbage()
- end
- function StartBattle(ROUND_ID)
- local A_PLR = 0
- local H_PLR = 0
- if (not B_TBL[ROUND_ID]) then return; end
- for k, v in pairs(B_TBL[ROUND_ID]) do
- if (v:GetTeam() == 0) then
- A_PLR = A_PLR + 1
- else
- H_PLR = H_PLR + 1
- end
- end
- if (A_PLR == 0 or H_PLR == 0) then return; end
- for _, v in pairs(B_TBL[ROUND_ID]) do
- if (v:GetTeam() == 0) then
- v:Teleport(530, 2880, 5941, 4.8, 0)
- else
- v:Teleport(530, 2795, 5915, 4.1, 0)
- end
- v:SendBroadcastMessage("Mobareze Shuru Shod ,\nGO GO ")
- end
- end
- function MixTable()
- local Copy = DublicateTable(Q_TBL)
- Q_TBL = {}
- while (true) do
- local k = math.random(1, #Copy)
- table.insert(Q_TBL, Copy[k])
- table.remove(Copy, k)
- if (#Copy == 0) then
- break;
- end
- end
- collectgarbage()
- end
- function DublicateTable(O_TBL)
- local N_TBL = {}
- for _, v in pairs(O_TBL) do
- table.insert(N_TBL, v)
- end
- return N_TBL;
- end
- function RemoveK_TBL(ROUND_ID)
- for k, v in pairs(K_TBL) do
- if (v == ROUND_ID) then
- K_TBL[k] = nil;
- end
- end
- collectgarbage()
- end
- function RA_ress(plr)
- plr:ResurrectPlayer()
- end
- ----------------------------------------
- function TEAM_RAMPAGE()
- for _, v in pairs(GetActiveRounds()) do
- local A_PLR = 0
- local H_PLR = 0
- local A_AM, H_AM = ReturnTeamAmount(v)
- for _, _v in pairs(B_TBL[v]) do
- if (not _v:IsAlive()) then
- if (_v:GetTeam() == 0) then
- A_PLR = A_PLR + 1
- else
- H_PLR = H_PLR + 1
- end
- end
- if (A_PLR == A_AM) or (H_PLR == H_AM) then
- break;
- end
- end
- if (A_PLR == A_AM) then
- CreateLuaEvent(function() DisbandTeams(v); end, 4000, 1)
- for _, val in pairs(B_TBL[v]) do
- val:SendBroadcastMessage("Horde Barande Bazi Shod!")
- end
- elseif (H_PLR == H_AM) then
- CreateLuaEvent(function() DisbandTeams(v); end, 4000, 1)
- for _, val in pairs(B_TBL[v]) do
- val:SendBroadcastMessage("Alliance Barande Bazi Shod!")
- end
- end
- end
- end
- function PLR_CHEAT(TBL)
- for _, _v in pairs(GetActiveRounds()) do
- for k, v in pairs(TBL[_v]) do
- if (v:GetAreaId() ~= 3775) then
- -- v:CastSpell(v, 5)
- end
- end
- end
- end
- function GetActiveRounds()
- local R_TBL = {}
- for _, v in pairs(P_TBL) do
- if (v ~= 1) then
- if (not KillTbl(v)) then
- table.insert(R_TBL, v)
- end
- end
- end
- return R_TBL;
- end
- function KillTbl(ROUND_ID)
- for _, v in pairs(K_TBL) do
- if (v == ROUND_ID) then
- return true;
- end
- end
- return false;
- end
- function ReturnTeamAmount(ROUND_ID)
- local A_PLR = 0
- local H_PLR = 0
- for k, v in pairs(B_TBL[ROUND_ID]) do
- if (v:GetTeam() == 0) then
- A_PLR = A_PLR + 1
- else
- H_PLR = H_PLR + 1
- end
- end
- return A_PLR, H_PLR;
- end
- ----------------------------------------
- function ReturnPhase()
- local phase
- for k in ipairs(P_TBL) do
- phase = k
- end
- return 2^phase;
- end
- ----------------------------------------
- function RA_ENTER_ARENA(event, plr)
- if (plr:GetAreaId() == 3775) and (plr:GetPhaseMask() > 1) then
- if (not ReturnStatus(plr)) then
- plr:SetPhaseMask(1)
- end
- end
- end
- function RA_REPOP_ARENA(event, plr)
- if (plr:GetAreaId() == 3775) and (plr:GetPhaseMask() > 1) then
- if (ReturnStatus(plr)) then
- return 0;
- end
- end
- end
- function RA_RESS_ARENA(event, plr)
- if (plr:GetAreaId() == 3775) and (plr:GetPhaseMask() > 1) then
- if (ReturnStatus(plr)) then
- plr:SendBroadcastMessage("Shoma Dar In Mobareze Nemitavanid Ress Konid.")
- return 0;
- end
- end
- end
- function GetRounds()
- local R_TBL = {}
- for _, v in pairs(P_TBL) do
- if (v ~= 1) then
- table.insert(R_TBL, v)
- end
- end
- return R_TBL;
- end
- function ReturnStatus(plr)
- local found = false
- for _, v in pairs(GetRounds()) do
- if (KillTbl(v)) then
- found = true;
- break;
- end
- for _, _v in pairs(B_TBL[v]) do
- if (tostring(_v) == tostring(plr)) then
- found = true
- break;
- end
- end
- if (found) then
- break;
- end
- end
- return found;
- end
- RegisterServerHook(28, RA_ENTER_ARENA)
- RegisterServerHook(81, RA_REPOP_ARENA)
- RegisterServerHook(18, RA_MSG_HOOK)
- RegisterServerHook(80, RA_RESS_ARENA)
- CreateLuaEvent(TIMED_EVENTS, 5000, 0)
- CreateLuaEvent(TIMED_REGISTER, 30000, 0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement