Ir para conteúdo
  • Cadastre-se

(Resolvido)Talkaction /war Não funciona! ajuda!


Ir para solução Resolvido por eric77,

Posts Recomendados

Galera! estou precisando de ajuda mesmo..

Eu tou trabalhando no meu server já a um tempo, e agr me deparei com um erro na talkaction do meu war system...

Tá tudo ok no war system menos isso, na hora de falar "/war" não acontece nada.. o player fala o comando, aparece apenas como uma fala comum e mais nada.

Porque ?? eu vi outro tópico aqui no TK e o que disseram foi que a Distro não suportava o war system..

Então achei outra distro aqui no TK com war system, baixei mas continua tudo igual.... a talkaction não funciona do mesmo jeito.

Link da distro que baixei: Distro tfs 0.4 (ANTI-DV) (WARSYSTEM)

Editado: Baixei outra distro disponivel aqui no site para testar e nada de diferença, será que é a distro mesmo ? link : Distro TFS 0.4 (segunda tentativa)

Meu war.lua:

function onSay(cid, words, param, channel)

local guild = getPlayerGuildId(cid)

if(not guild or getPlayerGuildLevel(cid) < GUILDLEVEL_LEADER) then

doPlayerSendChannelMessage(cid, "", "You cannot execute this talkaction.", TALKTYPE_CHANNEL_W, 0)

return true

end

local t = string.explode(param, ",")

if(not t[2]) then

doPlayerSendChannelMessage(cid, "", "Not enough param(s).", TALKTYPE_CHANNEL_W, 0)

return true

end

local enemy = getGuildId(t[2])

if(not enemy) then

doPlayerSendChannelMessage(cid, "", "Guild \"" .. t[2] .. "\" does not exists.", TALKTYPE_CHANNEL_W, 0)

return true

end

if(enemy == guild) then

doPlayerSendChannelMessage(cid, "", "You cannot perform war action on your own guild.", TALKTYPE_CHANNEL_W, 0)

return true

end

local enemyName, tmp = "", db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. enemy)

if(tmp:getID() ~= -1) then

enemyName = tmp:getDataString("name")

tmp:free()

end

if(isInArray({"accept", "reject", "cancel"}, t[1])) then

local query = "`guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild

if(t[1] == "cancel") then

query = "`guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy

end

tmp = db.getResult("SELECT `id`, `begin`, `end`, `payment` FROM `guild_wars` WHERE " .. query .. " AND `status` = 0")

if(tmp:getID() == -1) then

doPlayerSendChannelMessage(cid, "", "Currently there's no pending invitation for a war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)

return true

end

if(t[1] == "accept") then

local _tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild)

local state = _tmp:getID() < 0 or _tmp:getDataInt("balance") < tmp:getDataInt("payment")

_tmp:free()

if(state) then

doPlayerSendChannelMessage(cid, "", "Your guild balance is too low to accept this invitation.", TALKTYPE_CHANNEL_W, 0)

return true

end

db.query("UPDATE `guilds` SET `balance` = `balance` - " .. tmp:getDataInt("payment") .. " WHERE `id` = " .. guild)

end

query = "UPDATE `guild_wars` SET "

local msg = "accepted " .. enemyName .. " invitation to war."

if(t[1] == "reject") then

query = query .. "`end` = " .. os.time() .. ", `status` = 2"

msg = "rejected " .. enemyName .. " invitation to war."

elseif(t[1] == "cancel") then

query = query .. "`end` = " .. os.time() .. ", `status` = 3"

msg = "canceled invitation to a war with " .. enemyName .. "."

else

query = query .. "`begin` = " .. os.time() .. ", `end` = " .. (tmp:getDataInt("end") > 0 and (os.time() + ((tmp:getDataInt("begin") - tmp:getDataInt("end")) / 86400)) or 0) .. ", `status` = 1"

end

query = query .. " WHERE `id` = " .. tmp:getDataInt("id")

if(t[1] == "accept") then

doGuildAddEnemy(guild, enemy, tmp:getDataInt("id"), WAR_GUILD)

doGuildAddEnemy(enemy, guild, tmp:getDataInt("id"), WAR_ENEMY)

end

tmp:free()

db.query(query)

doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. msg, MESSAGE_EVENT_ADVANCE)

return true

end

if(t[1] == "invite") then

local str = ""

tmp = db.getResult("SELECT `guild_id`, `status` FROM `guild_wars` WHERE `guild_id` IN (" .. guild .. "," .. enemy .. ") AND `enemy_id` IN (" .. enemy .. "," .. guild .. ") AND `status` IN (0, 1)")

if(tmp:getID() ~= -1) then

if(tmp:getDataInt("status") == 0) then

if(tmp:getDataInt("guild_id") == guild) then

str = "You have already invited " .. enemyName .. " to war."

else

str = enemyName .. " have already invited you to war."

end

else

str = "You are already on a war with " .. enemyName .. "."

end

tmp:free()

end

if(str ~= "") then

doPlayerSendChannelMessage(cid, "", str, TALKTYPE_CHANNEL_W, 0)

return true

end

local frags = tonumber(t[3])

if(frags ~= nil) then

frags = math.max(10, math.min(1000, frags))

else

frags = 100

end

local payment = tonumber(t[4])

if(payment ~= nil) then

payment = math.max(100000, math.min(1000000000, payment))

tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild)

local state = tmp:getID() < 0 or tmp:getDataInt("balance") < payment

tmp:free()

if(state) then

doPlayerSendChannelMessage(cid, "", "Your guild balance is too low for such payment.", TALKTYPE_CHANNEL_W, 0)

return true

end

db.query("UPDATE `guilds` SET `balance` = `balance` - " .. payment .. " WHERE `id` = " .. guild)

else

payment = 0

end

local begining, ending = os.time(), tonumber(t[5])

if(ending ~= nil and ending ~= 0) then

ending = begining + (ending * 86400)

else

ending = 0

end

db.query("INSERT INTO `guild_wars` (`guild_id`, `enemy_id`, `begin`, `end`, `frags`, `payment`) VALUES (" .. guild .. ", " .. enemy .. ", " .. begining .. ", " .. ending .. ", " .. frags .. ", " .. payment .. ");")

doBroadcastMessage(getPlayerGuildName(cid) .. " has invited " .. enemyName .. " to war till " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE)

return true

end

if(not isInArray({"end", "finish"}, t[1])) then

return false

end

local status = (t[1] == "end" and 1 or 4)

tmp = db.getResult("SELECT `id` FROM `guild_wars` WHERE `guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy .. " AND `status` = " .. status)

if(tmp:getID() ~= -1) then

local query = "UPDATE `guild_wars` SET `end` = " .. os.time() .. ", `status` = 5 WHERE `id` = " .. tmp:getDataInt("id")

tmp:free()

doGuildRemoveEnemy(guild, enemy)

doGuildRemoveEnemy(enemy, guild)

db.query(query)

doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. (status == 4 and "mend fences" or "ended up a war") .. " with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)

return true

end

if(status == 4) then

doPlayerSendChannelMessage(cid, "", "Currently there's no pending war truce from " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)

return true

end

tmp = db.getResult("SELECT `id`, `end` FROM `guild_wars` WHERE `guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild .. " AND `status` = 1")

if(tmp:getID() ~= -1) then

if(tmp:getDataInt("end") > 0) then

tmp:free()

doPlayerSendChannelMessage(cid, "", "You cannot request ending for war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)

return true

end

local query = "UPDATE `guild_wars` SET `status` = 4, `end` = " .. os.time() .. " WHERE `id` = " .. tmp:getDataInt("id")

tmp:free()

db.query(query)

doBroadcastMessage(getPlayerGuildName(cid) .. " has signed an armstice declaration on a war with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)

return true

end

doPlayerSendChannelMessage(cid, "", "Currently there's no active war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)

return true

end

É isso ai pessoal... porfavor me ajudem, mesmo que seja um problema que não dê pra resolver, me deem uma luz explicando o porque pelo menos!!

Agradeço desde já, quem resolver essa bronca pra mim é REP+ na hora..

Valeu!!

Editado por eric77 (veja o histórico de edições)

Gosto de ajudar, e se te ajudei manda aquele REP+

 

Valeu  ;):D 

Link para o post
Compartilhar em outros sites

Olá amigo, blz?

 

Tente Colocar no seu talkaction.xml : 

<talkaction words="!war" event="script" value="war.lua"/>

 

Explicação:

 

!war < comando para usar a função.

evento="script" < função do comando ( script ou function ) 

value="war.luz" < local onde está . se estiver em uma pasta 

 

EX: pasta tutorial

 

value="pasta tutorial/war.lua"

 

#Gato_de_Botas

Link para o post
Compartilhar em outros sites

já existe uma tag no meu talkactions:

 

<talkaction words="/war" channel="0" event="script" value="war.lua" desc="(Guild channel command) War management."/>

 

é do próprio war system, esse war system tem aqui no site disponivel... não sei porque não ta dando certo...

 

Alguma outra opinião ??

Editado por eric77 (veja o histórico de edições)

Gosto de ajudar, e se te ajudei manda aquele REP+

 

Valeu  ;):D 

Link para o post
Compartilhar em outros sites
  • Solução

mano voce fez tudo os passos n e so pega a source com war sistem tem que coloca na lib que tem que ve se contem todos scripts

Tenho todos os scripts sim!

E a source que vc fala da lib é a 101-war.lua ??

Porque se for eu já tenho também!

 

Nossa, resolvi o problema... não acredito nisso...

 

 

Resolução: Vacilo meu ... apenas o comando deve ser usado no guild chat  :facepalm:

 

Obrigado vocês que tentaram ajudar.

Editado por eric77 (veja o histórico de edições)

Gosto de ajudar, e se te ajudei manda aquele REP+

 

Valeu  ;):D 

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 FeK
      CSTibia (beta) | 01/03 às 16:00

      CSTibia é um jogo PvP que conecta Counter Strike e Tibia, proporcionando uma experiência única para aqueles que gostam de PvP.

      São 2 modos de jogo, 6 mapas e mais de 50 armas disponíveis para jogar!

      #Modos de jogo: Mata-mata e Torneio x1.

      #Mapas: Dust2, Inferno, Mirage, India, IceWorld e PoolDay.

      O beta estará disponível a partir do dia 01/03 às 16 horas! Ele terá duração de 1 mês e no dia 01/04 iniciará a Session 1.

      #Download: 01/03 às 12 horas.

      ▶️ Crie já sua conta!
      http://www.cstibia.com

      🎮 Discord: https://discord.gg/zdxdTTURpq

      📸 Instagram: https://www.instagram.com/cstibia
    • Por pushwar
      IP: push-war.servegame.com | VERSÃO: 8.60
      SITE: http://push-war.servegame.com/
      Abertura dia 12/02 às 19:30
      World Type: HardCore-PvP
       Start Level: 1,000.
       Max Level: 2,050.
       
      Sistema de Level por Morte:
       Players Premium account se morrerem no Level: 2,000+ voltam para o Level: 1,500.
       Players Free account se morrerem no Level: 2,000+ voltam para o Level: 1,300.
       
      Mapa X-dream Reformulado.
       Contem 7+ cidades, que a cada 20 minutos são trocadas automaticamente.
       Sistema de TEAM-WAR(guerra entre equipes).
       
      Super Fast Atk.
       Armas e Sets editados.
       Dodge System
       
      Skull System - YellowSkull = 100 frags; GreenSkull= 250 frags; WhiteSkull = 500 frags; RedSkull= 1500 frags; BlackSkull = 3000 frags.
       
      Vocations = Warlock, Hunter e Berserker(balanceadas)
       
      Ao morrer não perde skills/items/skull.
       
      Cast system.
       
      OTserver ONLINE 24/7.
       
      Um ótimo jogo à todos, por ADM Biinhow!!!
    • Por Bagon
      Bom, hoje venho trazer á vocês um sistema de Pet System DIFERENCIADO de alguns presentes no fórum. Este sistema tem diversos comandos diferenciados, como: 
       
      !pet nomedopet este comando irá sumonar o pet. 
      !remove irá remover o pet.
      !fale eu sou lindo o pet falará "eu sou lindo"
      !conversar o pet irá conversar com vc. 
       
      Então sem mais delongas vamos ao script.
       
      OBS: SCRIPT TESTADO SOMENTE EM TFS 0.4/0.3, e este script foi feito com a intenção de ser vendido no site do ot ou em poderá usar como quest usando o item selecionado como premio. fique ao seu critério.
       
      Primeiro vá até a pasta talkaction/script e crie um arquivo chamado petsystem.lua, depois coloque o seguinte script:
       
       
      Agora em talkactions/talkactions.xml adicione a seguinte tag:
       
      <talkaction words="!pet;!remove;!fale;!conversar" event="script" value="petsystem.lua" />  
      EXPLICAÇÂO:
      As partes em Negrito, são os pets. Você pode alterar ou criar monstros para fazer eles como pets. (Recomendo criar um monstro para que seja somente pet.)
       
      Exemplo: ["dog"]= {stor=78552},      
       
       
      Lembrando que é necessário mudar esta parte no script do monstro colocado a cima.
       
      <flag attackable="1" /> para :
       
      <flag attackable="0" />  
      agora vá em action/script e crie um arquivo chamado pet com o seguinte script:
       
       
      e vá em action.xml e adiciona a seguinte tag:
       
      <action itemid="10063" script="pet.lua"/> Explicação: Na tag da action o itemid é o item que deverá ser usado para ganhar a storage 78552, e assim podera sumonar o monstro com esta storage.
       
                                              
                                                         CRIE UMA ACTION COM A TAG A CIMA PARA CADA MONSTRO COLOCADO NA TALKACTION,
                                                         BASTA VC ALTERAR A STORAGE DO SCRIPT DA ACTION
                                                         EXEMPLO: em action altere as storage que estão em vermelho, como mostra abaixo
       
                                                              if getPlayerStorageValue(cid, 78552) < 1 then
                                                              setPlayerStorageValue(cid, 78552, 1)
       
                                                         aonde tem 78552 altere para 78553 que no caso é a storage do cyclops escolhido lá no script da talkaction
                                                         e assim susecivelmente.
       
       
       
      CREDITOS:
      Mulizeu
      Smartbox
      Bagon 
       
    • Por BonasxD
      Bom galera primeiramente não sei se estou na area correta ou se nao estou, se nao por favor mover para area certa, grato!
      Estou com esse erro ao tenta instalar o gesior usando a tfs 0.4 não passa dessa parte ja tentei de tudo e nao sei oque fazer ;(
       
      Testei o mesmo procedimento no meu Windows e Funcionou corretamente agora no meu VM(Ubuntu22) não passa desse erro. 
       
      Ja pesquisei por tudo e não sei oque fazer

    • Por FeeTads
      Salve rapaziada do  TK e da comunidade de tibia Otserv.

      Recentemente alguns invejosos estão atacando servidores (DDoS), bugando o guilds de varios sites (tirando o lider e membros), assim buga a guild e muita coisa no OT.
      Eles vão até o teu servidor e se passam por "adm do deletebra", já ouvi a uns tempos algumas pessoas falando disso, mas como eu tinha contato isso caiu por terra facilmente, um deles foi o ADM brendo, dono do antigo strongerFusion, onde ele me contou toda essa história, essa foi a primeira vez que me foi relatado sobre isso, hoje vejo que está parecendo ser mais frequente.

      Caso qualquer pessoa entre no seu OT se passando pelo ADM do deletebra, favor entrar em contato comigo via discord: FeeTads#0246 Te ajudarei a resolver problemas que eles exploram sem cobrar nada por isso, para provar que não necessito atacar outros OT's para ter algum publico. Já tenho em mente quem pode ser essas pessoas, caso alguém tenha numero de telefone, nome real, ou alguma informação a mais dessas pessoas atacando e se passando por mim ou meu sócio, favor enviar no discord, irei atrás de resolver isso.

      Vou deixar aqui alguns tutoriais de coisas básicas para você conseguir proteger o seu site desses SQL injections, e mais algumas coisinhas, caso futuramente eu resolva outros bugs explorados, vou postar aqui as correções.


      Configurando CloudFlare (SSL) E subDominio (sv.seuIP)
       
      Após isso para que a pessoa não entre no site pelo (sv.seudominio.com.br) 
      abra o index.php da pasta raiz (está dentro da pasta html)
       
      if($_SERVER['HTTP_HOST'] == 'sv.seuDominio.com.br') { header("Location: https://seuDominio.com.br"); } if($_SERVER['HTTP_HOST'] == 'IP NUMÉRICO') { header("Location: https://seuDominio.com.br"); }
      Isso fará que quando a pessoa tente entrar no seu site usando meios não seguros (DNS only) ele redirecione pro seguro > proxiado pela cloudflare

      _________________________________________________________________________________________________________________________________________


      CORREÇÃO GUILDS.PHP / INJECTION SQL TIRANDO LIDER DA GUILD
       

      PROTEÇÕES PARA DIMINUIR EFEITOS DE DDoS
       
       
       
      Espero que isso ajude a muitos, a se prevenir de pessoas que tentam atacar OT's se passando por outros, ou até que vão la pedir pontos para jogar se não eles irão atacar, se prevenir de pessoas mal intencionadas.

      PS: Caso você tenha no seu site a pagine "house" e "tickets" recomendo retirar do seu site, pois há maneira de injetar SQL por esses arquivos.
      Vou postar em breve o tickets arrumado.

      Boa sorte rapaziada, se cuidem, e caso alguém faça isso, por favor entre em contato comigo.
       
       
       
       
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo