• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua Help talkaction error

maleski

New Member
Joined
Jul 30, 2011
Messages
13
Reaction score
0
Player died to a monster in the event war anti entrosa
System anti-entrosa error war.lua
KwozhYW.png

War = {

numero = { 0, 10, 15, 20, 30, 40 }, -- quantidade de jogadores (0=infinito)
tempo = { quinze_min = 15, trinta_min = 30, sessenta_min = 60 }, -- colocar o nome das variaveis iguais
preco = { quinze_min = 75000, trinta_min = 100000, sessenta_min = 150000}, -- caso fizer alguma alteração

modo = { tradicional = 1, semUe = 2, soSd = 3},
modo_string = {
[1] = {'tradicional', 'padrao', 'normal', '1'},
[2] = {'sem ue', 'semue', 'semUe', '2'},
[3] = {'apenas sd', 'só sd', 'so sd' , 'soh sd', '3'}
},

--[[
você pode colocar quantos mapas quiser de uma mesma cidade
na tabela referente ao mapa, cada vetor da matriz é composto da Posição do Time A e do B

exemplo:
[0] = { {posA, posB}, {posA2, posB2}, {posA3, posA4} } -- aqui vc tem 3 mapas configurado para Edron

posA = local da cidade em que os jogadores da guild A será teleportados
posB = local para a guild B

você é livre para escolher quais e quantas copias da cidade

preste atenção! o valor da string e da position deve ser o mesmo!
]]

cidade_string = {
[0] = {'edron', "Edron", 'EDRON'},
--[[ [1] = {'dara', 'darashia', 'Darashia', 'DARASHIA'},
[2] = {'lb', 'liberty bay', 'Liberty Bay', 'LIBERTY BAY'},
[3] = {'carlin', 'Carlin', 'CARLIN'},
[4] = {'cormaya', 'Cormaya', 'CORMAYA'},
[5] = {'ank', 'ankrahmun', 'Ankrahmun', 'ANKRAHMUN'},
[6] = {'yalahar', 'Yalahar', 'YALAHAR'},
[7] = {'venore', 'Venore', 'VENORE'} ]]
},
mapas = {
[0] = { {{x=1178,y=636,z=7},{x=1178,y=692,z=7}} }, -- exemplo de apenas um mapa Edron configurado
[1] = {},
[2] = {},
[3] = {},
[4] = {},
[5] = {},
[6] = {},
[7] = {}
},
}

for city, v in pairs(War.mapas) do
for _, mapa in pairs(v) do
Instances(city, mapa)
end
end

Wars = {}

function War:new(id, param)

return setmetatable({

-- config
id = id,
desafiante = param.desafiante,
aceito = false,
numero_jogadores = param.numero,
modo = param.modo,
tempo = param.tempo,
instanceid = param.instanceid,
valor = param.valor,
positions = {[param.guildA] = param.positionA, [param.guildB] = param.positionB},

-- uso real
players = {[param.guildA] = {}, [param.guildB] = {}},
frags = {[param.guildA] = 0, [param.guildB] = 0},
name = {}


}, { __index = self }), addEvent(function (id, param)
if Wars[id] and Wars[id].aceito == false then
doPlayerDepositMoney(self.desafiante, valor)
Wars[id]:broadcastToGuilds(22, "O convite nao foi aceito.")
Wars[id] = false
Instances[param.instanceid]:unregister()
end
end, 5 * 60 * 1000, id, param)
end

setmetatable(Wars, { __call = function(self, param)
local id = #Wars+1
Instances[param.instanceid]:register()
param.positionA = Instances[param.instanceid].posA
param.positionB = Instances[param.instanceid].posB

Wars[id] = War:new(id, param)

Wars[id].name = {{param.guildA, param.nomeA}, {param.guildB, param.nomeB}}

local text = "[City War] "..param.nomeA .. " invitou a guild " .. param.nomeB .. " para uma war!\n"
text = text .. "A war sera na cidade " .. War.cidade_string[param.cidade][1]
if (param.numero == 0) then
text = text .. " sem limite de jogadores para cada time"
else
text = text .. " com no maximo " .. param.numero .. " jogadores para cada time"
end
text = text .. " por " .. param.tempo .. " minutos"
text = text .. " no modo " .. War.modo_string[param.modo][1]
text = text .. "\nO lider da guild " .. param.nomeB .. " tem cinco minutos para aceitar o convite. Digite: /citywar accept, " .. param.nomeA

Wars[id]:broadcastToGuilds(22, text)
end })


function War:start()
self.aceito = true
self:broadcastToGuilds(22, "[City War] A War entre " .. self.name[1][2] .. " e " .. self.name[2][2] .. " foi iniciada! Para entrar digite: /citywar go" )

addEvent(War.broadcast, (self.tempo * 60 * 1000) - (5 * 60 * 1000), self, 22, "[City War] Faltam 5 minutos para a War acabar.")
addEvent(War.broadcast, (self.tempo * 60 * 1000) - (3 * 60 * 1000), self, 22, "[City War] Faltam 3 minutos para a War acabar.")
addEvent(War.broadcast, (self.tempo * 60 * 1000) - (1 * 60 * 1000), self, 22, "[City War] Falta 1 minuto para a War acabar.")
addEvent(War.finish, self.tempo * 60 * 1000, self)
end

function War:finish()

local text = "A war entre as guilds " .. self.name[1][2] .. " e " .. self.name[2][2] .. " acabou!\n"
text = text .. self:getPlacarString()
self:broadcastToGuilds(22, text)

for guild, teams in pairs(self.players) do
for k, cid in pairs(teams) do
if type(cid) == 'number' and isPlayer(cid) then
local pos = getTownTemplePosition(getPlayerTown(cid))
doTeleportThing(cid, pos)

setPlayerWarType(cid, 0)
unregisterCreatureEvent(cid, "morte")

doRemoveCondition(cid, CONDITION_INFIGHT)
if getCreatureSkullType(cid) == SKULL_WHITE then
doCreatureSetSkullType(cid, 0)
end

self.players[guild][k] = nil
end
end
end
Instances[self.instanceid]:unregister()

db.executeQuery("INSERT INTO `city_war` (`frags_guild1`, `frags_guild2`, `guild1`, `guild2`, `tempo`, `modo`) VALUES ('" .. self.frags[self.name[1][1]] .. "', '" .. self.frags[self.name[2][1]] .. "', '" .. self.name[1][2] .. "', '" .. self.name[2][2] .. "', '" .. self.tempo .. "', '" .. self.modo .. "' );")
Wars[self.id] = true
end

local condition_infight = createConditionObject(CONDITION_INFIGHT, -1)

function War:newPlayer(cid)
if self.aceito == false then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The war was not accepted yet.")
return true
end

local guildId = getPlayerGuildId(cid)
if (self.numero_jogadores == 0 or table.elements(self.players[guildId]) < self.numero_jogadores) then
doTeleportThing(cid, self.positions[guildId])
table.insert(self.players[guildId], cid)
else
return false
end
doAddCondition(cid, condition_infight)
setPlayerWarType(cid, self.modo)
registerCreatureEvent(cid, "citywar")
return true
end

function War:removePlayer(cid)
--town = getPlayerTown(cid)
--pos = getTownTemplePosition(town)

--doTeleportThing(cid, pos)

setPlayerWarType(cid, 0)
unregisterCreatureEvent(cid, "citywar")

tmp = false
for guild, teams in pairs(self.players) do
for k, v in pairs(teams) do
if v == cid then
self.players[guild][k] = nil
tmp = true
break
end
end
if tmp == true then
break
end
end
doRemoveCondition(cid, CONDITION_INFIGHT)
if getCreatureSkullType(cid) == SKULL_WHITE then
doCreatureSetSkullType(cid, 0)
end
end

function War:isGuildOnWar(guildId)
if self.name[1][1] == guildId or self.name[2][1] == guildId then
return true
end
return false
end

function War:kill(killer, cid)
self.frags[getPlayerGuildId(killer)] = self.frags[getPlayerGuildId(killer)] + 1
self:broadcast(22, "[City War] \n".. getPlayerName(killer) .. " matou " .. getPlayerName(cid) .. ".\n" .. self:getPlacarString())
end

function War:getPlacarString()
local text = "Placar: " .. self.name[1][2] .. " " .. self.frags[self.name[1][1]] .. " x "
text = text .. self.frags[self.name[2][1]] .. " " .. self.name[2][2].."."
return text
end

function War:broadcast(messagetype, text)
for k, v in pairs(self.players) do
for _, cid in pairs(v) do
if isPlayer(cid) then
doPlayerSendTextMessage(cid, messagetype, text)
end
end
end
end

function War:broadcastToGuilds(messagetype, text)
local guilds = {self.name[1][1], self.name[2][1]}
local isinarray, sendmessage, getguildid = isInArray, doPlayerSendTextMessage, getPlayerGuildId

for k, v in pairs(getPlayersOnline()) do
if isinarray(guilds, getguildid(v)) then
sendmessage(v, messagetype, text)
end
end
end

-- função static, callback entre creaturescripts e o evento
function War.morte(cid, killer)
for k,v in pairs(Wars) do
if type(v) == 'table' then
if v:isGuildOnWar(getPlayerGuildId(cid)) then
v:kill(killer, cid)
v:removePlayer(cid)
end
end
end
return true
end
 
Back
Top