Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Boa tarde pessoal, estou usando a war anti entrosa da ChaitoSoft, estava olhando o arquivo war.lua que se encontra na Lib do talkactins, e tentei capturar a guild_logo, para adicionar a minha pagina que estou remodelando, porém ele faz a coleta de dados de um jeito que desconheço, então não consegui. Se alguém puder me ajudar nessa simples missão fica agradecido.

 

Script: war.lua

Spoiler
War = {
    
    numero = { 01015203040 },    -- quantidade de jogadores (0=infinito)
    tempo = { quinze_min = 1,          trinta_min = 30,            sessenta_min = 60 },            --    colocar o nome das variaveis iguais
    preco = { quinze_min = 750,      trinta_min = 100000,     sessenta_min = 150000},        --  caso fizer alguma alteração
    --75000
    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= {'thais''Thais''THAIS'},
                --[[      [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=32098,y=33017,z=6},{x=32156,y=33084,z=7}}     },        -- exemplo de apenas um mapa Edron configurado
                          [1= {},
                          [2= {},
                          [3= {},
                          [4= {},
                          [5= {},
                          [6= {},
                          [7= {}    
    },
}
 
for city, v in pairs(War.mapasdo
    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
                                                end5 * 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 == 0then                                        
                                            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), self22"[City War] Faltam 5 minutos para a War acabar.")
    addEvent(War.broadcast, (self.tempo * 60 * 1000- (3 * 60 * 1000), self22"[City War] Faltam 3 minutos para a War acabar.")
    addEvent(War.broadcast, (self.tempo * 60 * 1000- (1 * 60 * 1000), self22"[City War] Falta 1 minuto para a War acabar.")
    addEvent(War.finishself.tempo * 60 * 1000self)
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.playersdo
        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_jogadoresthen
            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.playersdo
        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)
    if (isPlayer(killer) or (isMonster(killer) and getCreatureMaster(killer))) then
        killer = isPlayer(killer) and killer or getCreatureMaster(killer)
        if getPlayerGuildId(killer) ~= getPlayerGuildId(cid) then
            self.frags[getPlayerGuildId(killer)] = self.frags[getPlayerGuildId(killer)] + 1
            self:broadcast(22"[City War] \n".. getPlayerName(killer) .. " matou " .. getPlayerName(cid) .. ".\n" .. self:getPlacarString())
        end
    end
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.playersdo
        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

 

Editado por cs007 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por looktsx
      Salve Rapaziada tudo bom .
      queria ajuda pra cria um teleport ou uma alavanca com tempo ..
      depois do player usa o teleport ou a lavanca ele so poderá usa depois de tal determinado tempo.
       
      SERVIDOR 12.91
      Se alguem poder me ajuda vou fica grato ,
      des de ja agradeço a todos.
      ..
    • Por willian646
      O evento é totalmente baseado no Foxy Quiz proveniente do GLA, no entanto é apenas uma base para vocês alterarem como acharem melhor.
      Para começar será necessario que você crie um arquivo em talkactions>scripts para entrar no evento, como por exemplo : participar.lua
      e entao colocar sua tag em talkactions.xml, como por exemplo: 
      <talkaction words="!participar;/participar" script="!participar.lua"/> Tendo feito isso você irá colar esse codigo dentro desse arquivo: 
      function onSay(cid, words, param)pos = {x=1236, y=1125, z=15} --POSIÇAO QUE O PLAYER IRÁ COM O COMANDO if getGlobalStorageValue(88788) == 1 then doSendMagicEffect(getPlayerPosition(cid),19) doTeleportThing(cid,pos) else doPlayerSendCancel(cid, "Desculpe mas o evento esta fechado !") end return true end Agora iremos para o script principal, vá em global events>scripts e crie o arquivo pokequiz.lua em seguida coloque sua tag em globalevents.xml como por exemplo: 
      <globalevent name="Pokequiz" interval="10" event="script" value="pokequiz.lua"/> Lembrando que o intervalo de inicio do evento é com vcs, Tendo feito isso abra o arquivo e cole o  seguinte código dentro : 
      quizstrg = 88788 local wave = 0 local CPpos = {x=1051, y=1047, z=7} --POSIÇAO QUE O PLAYER IRÁ SE ERRAR function wave_acresc() wave = wave + 1 addEvent(Quiz, 5000) end function Quiz() if wave == 1 then doBroadcastMessage("Na serie pokemon RAYQUAZA possui mega evolucao ?", RED) addEvent(Resposta, 10000) elseif wave == 2 then doBroadcastMessage("Na serie pokemon ARCEUS e considerado um pokemon RARO ?", RED) addEvent(Resposta, 10000) elseif wave == 3 then doBroadcastMessage("Na serie pokemon MEW criou os 3 caes lendarios ?", RED) addEvent(Resposta, 10000) elseif wave == 4 then doBroadcastMessage("Na serie pokemon ARCEUS tem o poder de mudar de tipo livremente ?", RED) addEvent(Resposta, 10000) elseif wave == 5 then doBroadcastMessage("Na serie pokemon GIRATINA possui 2 formas sendo elas alterada e fantasma ?", RED) addEvent(Resposta, 10000) elseif wave == 6 then doBroadcastMessage("Na serie pokemon DIALGA e PALKIA sao rivais ?", RED) addEvent(Resposta, 10000) elseif wave == 7 then doBroadcastMessage("Na serie pokemon CELEBI possui a habilidade de viajar entre dimensoes ?", RED) addEvent(Resposta, 10000) elseif wave == 8 then doBroadcastMessage("Na serie pokemon SOLGALEO e a primeira evolucao de cosmog ?", RED) addEvent(Resposta, 10000) elseif wave == 9 then doBroadcastMessage("Na serie pokemon MAGEARNA e uma das ultra beasts ?", RED) addEvent(Resposta, 10000) elseif wave == 10 then doBroadcastMessage("Na serie pokemon a cor original de MAGEARNA e laranja ?", RED) addEvent(Resposta, 10000) elseif wave == 11 then doBroadcastMessage("O evento Quiz terminou !", RED) addEvent(winPlayers, 5000) end end function Resposta() if wave == 1 then addEvent(TPFalso, 5000) elseif wave == 2 then addEvent(TPVerdadeiro, 5000) elseif wave == 3 then addEvent(TPVerdadeiro, 5000) elseif wave == 4 then addEvent(TPFalso, 5000) elseif wave == 5 then addEvent(TPVerdadeiro, 5000) elseif wave == 6 then addEvent(TPFalso, 5000) elseif wave == 7 then addEvent(TPVerdadeiro, 5000) elseif wave == 8 then addEvent(TPVerdadeiro, 5000) elseif wave == 9 then addEvent(TPVerdadeiro, 5000) elseif wave == 10 then addEvent(TPFalso, 5000) end end function TPFalso() for _, sid in ipairs(getPlayersOnline()) do local posi = {x=1236, y=1122, z=15} local posf = {x=1243, y=1128, z=15} local pos = getPlayerPosition(sid) if isInArea(pos, posi, posf) then doTeleportThing(sid,CPpos) end addEvent(wave_acresc, 5000) end end function TPVerdadeiro() for _, sid in ipairs(getPlayersOnline()) do local posi = {x=1228, y=1122, z=15} local posf = {x=1235, y=1128, z=15} local pos = getPlayerPosition(sid) if isInArea(pos, posi, posf) then doTeleportThing(sid,CPpos) end addEvent(wave_acresc, 5000) end end function winPlayers() for _, sid in ipairs(getPlayersOnline()) do local posi = {x=1228, y=1122, z=15} local posf = {x=1243, y=1128, z=15} local pos = getPlayerPosition(sid) if isInArea(pos, posi, posf) then doTeleportThing(sid,CPpos) doPlayerAddItem(sid,2159, 10) end wave = 0 setGlobalStorageValue(88788, 0) end end --AVISOS DE INICIO function finalEventWarning() if getGlobalStorageValue(quizstrg) == 1 then setGlobalStorageValue(88788, 2) doBroadcastMessage("O evento Quiz fechou, a primeira pergunta surgira em 30 segundos.", RED) addEvent(wave_acresc, 30000) end end function secondEventWarning() if getGlobalStorageValue(quizstrg) == 1 then doBroadcastMessage("O evento Quiz ira iniciar em 1 minuto, usem o comando !participar ou /participar.", RED) addEvent(finalEventWarning, 60000) end end function firstEventWarning() if getGlobalStorageValue(quizstrg) == 1 then doBroadcastMessage("O evento Quiz ira iniciar em 3 minutos, usem o comando !participar ou /participar.", RED) addEvent(secondEventWarning, 120000) end end function onThink(interval, lastExecution) if getGlobalStorageValue(quizstrg) == 0 then setGlobalStorageValue(88788, 1) doBroadcastMessage("O evento Quiz ira iniciar em 5 minutos, usem o comando !participar ou /participar.", RED) addEvent(firstEventWarning, 120000) end return true end Já ia me esquecendo, a unica coisa ao qual vocês devem mudar de acordo com as coordenadas do seu mapa e área do evento são as funções TPVerdadeiro , TPFalso, winPlayers , elas servem para indicar qual área é a errada e teleportar quem tiver nessa área pro cp, caso o lado errado seja o esquerdo então será usado a função  TPVerdadeiro, e é a msm coisa para o outro lado, no caso da winPlayers é toda a área do evento.
       
      Aqui vai um exemplo: 
       
      E é isso rapaziada, não sei se já possui algum evento parecido por essas bandas, mas eu não encontrei ,então fiz  e resolvi contribuir com a comunidade, peço que se for repostar em algum outro lugar dê os devidos créditos, obg e até a próxima.
    • Por Ghaz
      Fala pessoal tudo bem?
       
      Estou com dificuldades em um script e preciso da ajuda dos magos do LUA rs.
       
      Tenho um script que quando o player morre (onDeath), ele faz algumas coisas e depois ele chama uma função que deveria retornar uma table (array) para eu fazer o for com o ipairs certinho. Segue abaixo o código:
       
       
      Segue abaixo a função getPlayersInArea:
       
       
      Acontece que no código de cima (do primeiro spoiler) eu dou um print no retorno da função getPlayersInArea, porém ela não tá me retornando a table, tá me retornando só: 2
       
       
       
      Alguém consegue me ajudar em, como raios eu faço a função retornar a lista de players ao invés da quantidade? Acredito que ta retornando o count da table, e não os itens do array.
       
       
      Agradeço desde já, valeu tchurma!
    • Por sannn
      --[[ /////////////////////////////////////////////////////////////////////////////////////////////////////// Discord: San#7791 -- Loja System 2.0 -- TFS 0.3.6 -- para adicionar qualquer item na loja: basta adicionar na tabelinha, seguindo o exemplo do vip! valor = quantidade de DIAMOND a ser cobrada; itemID = item a ser recebido; quantidade = quantidade de itens a ser recebidos; msg = mensagem que o player vai receber após comprar! Feito por San Discord: San#7791 exemplo de como comprar: !loja vip podendo ser adicionado a modules também. tag talkactions.xml // <talkaction words="!loja" case-sensitive="no" event="script" value="Loja System 2.0.lua"/> ////////////////////////////////////////////////////////////////////////////////////////////////////// depois de tantos sistemas com mil elseifs, vim trazer esta contribuição simples, para facilitar a vida de muitos adms! Contribuição pra comunidade =D ]]-- LOJA_CANCEL = "Você não possui diamantes o suficiente." LOJA_INVALID = "Não temos este item a venda na loja!" INVALID = "Comando incorreto" DIAMOND = 2145 -- item que será cobrado; tabelinha = { ["vip"] = {valor = 5, itemID = 2160, quantidade = 1, msg = "Obrigado por comprar um VIP em nossa loja!"}, -- coloque sempre minusculo o nome ! ["vip"]... etc } function onSay(cid, words, param, channel) local msg = string.lower(param) -- Não mexa! if msg == "" then doPlayerSendTextMessage(cid, 22, INVALID) return true end -- verificação if tabelinha[msg] == nil then doPlayerSendTextMessage(cid, 22, INVALID) return true end -- verificação if tabelinha[msg].valor then if getPlayerItemCount(cid, DIAMOND) >= tabelinha[msg].valor then doPlayerRemoveItem(cid, DIAMOND, tabelinha[msg].valor) doPlayerAddItem(cid, tabelinha[msg].itemID, tabelinha[msg].quantidade) doPlayerSendTextMessage(cid, 20, tabelinha[msg].msg) else doPlayerSendTextMessage(cid, 22, LOJA_CANCEL) return true end else doPlayerSendTextMessage(cid, 22, LOJA_INVALID) end return true end  
    • Por Guilherme.
      Bom galera, certa vez eu abri um servidor de tibia 8.55, ai pra incrementar ele resolvi colocar um sistema que faz com que o player compre os Itens VIPs direto do jogo.
       
       
      Funciona assim: Eu disponibilizei no site, a venda de moedas que podem ser usadas para comprar tanto VIP Account, quanto Itens VIP direto do jogo. O jogador que compra as moedas, recebe 100 delas e para poder comprar os itens eu editei uma TalkAction que veio no Baiak Yourots que era uma simples quest por comando, e transformei em uma ótima ferramenta para servidores com sistema vip.
      Vamos ao Script:
      Vá em data\talkactions\scripts , e crie um arquivo com o nome desejado e com o final ".lua" (Exemplo: ex.lua)
      Coloque isso dentro:
      Edite conforme você quiser, salve e feche.
      Laranja: ID do iten que vai servir como "moeda"
      Verde: Quantidade do iten
      Vermelho: ID do iten que o player vai receber quando usar o comando
      Azul: Quantidade do iten recebido
      Roxo: Palavra que aparecerá quando o player digitar o comando
      Rosa: Mensagem enviada ao player caso ele não tenha o iten ou quantidade neessária para a compra.
      Agora vá em "data\talkactions\" , edite o talkactions.xml
      Coloque isso la dentro:
      Verde: O Que o Player irá falar para usar o comando. ( Exemplo: !armor )
      Azul: O Nome do Arquivo que você criou em "data\talkactions\scripts". ( Exemplo: ex.lua )
      Créditos:
      Script: Baiak Lula ( Peguei o script do OT dele então, não tenho Certeza )
      Edição e Nova Função: Guilherme.
      COMENTEM !
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo