Ir para conteúdo

[Gesior Acc] Guild War System Com Escudos


walefxavier

Posts Recomendados

eu fiz isso, nao cheguei a testar, problema é que to tendo MUITO crash com esse distro, tentei laatido mas n adianto nada

alguem me ajuda com isso, pelo menos pra tirar a mgn do fechar programa pro restarter ja funciona automaticamente, n guento mais da uns 5 bug a cade 1 dia, distro horrivel mas qero o war system ;/

 

 

post-248860-0-21969400-1310070225_thumb.jpg

sim mano , essa distro é sinistra , sei q o cara postou na maior boua vontade mas é cheia de bug, tentei no meu trabalho deu um monte de erro , aqui em casa ja da outros erros, tirei um por um com sua ajuda e de post passados, mas creio q nao vai rodar , vou acabar com o msm erro q vc, agora eu tentei colocar sem o TFS 0.4 nao deu erro nenhum, mas pra funcionar onde tem db.query tem q colocar db.executequery , no meu caso q é servidor real... só q msm assim parei com outro erro q deu com mts aqui tbm , nao tem como aceitar o invite , agora to aqui sem saber o q fazer... tentando com tsf e sem ele... vamo ve q q da...

Link para o comentário
Compartilhar em outros sites

Ao pessoal que não está conseguindo e estão reclamando que o distro é bugado,vou explicar alguns erros:

 

1° Erros com algo do tipo 64Bit =

O distro está compilado em 32bit,quem possui computador em 64bit ,impossível,vai sempre dar esse erro.Recomendo que compile o distro para 64bit ou então peça a empresa de Hoster que formate o dedicado e passe-o para 32bit.

 

 

2° Erros no config.lua =

O config.lua postado aqui DEVE ser usado ao seu Ot Server.O nome do mapa deve ser "World" e no config.lua voce deve colocar "world.otbm".

 

 

3° db.ExecuteQuery por db.query

O distro só funciona com a função "db.query" (minúsculo).Portanto scripts que contenham Db.ExecuteQuery deve sempre ser trocado por db.query.Isto pode causar falhas em alguns scripts se não trocado assim que usar o distro.

 

4° GlobalEvents Muito Rápido

O distro está com o tempo alterado,portando em globalevents.xml voce deve acrescentar 3 zeros a cada interval.Exemplo : se está interval 2 ,coloque 2000 ( tres zeros).

 

5° Start.lua

Este arquivo deve ser adicionado ao GlobalEvents e deve-se trocar as db.ExecuteQuery presente no script por db.query (minúsculo).Arquivo importantícimo,se ficar fora o Sistema não funciona.

 

 

É isso,esses são os ditos 'erros' !

Link para o comentário
Compartilhar em outros sites

éh cara, o meu erro é o do 64 bits kkkk, pena q n sei compilha entao é manda formatar, mas tirando isso, tudu funcionou mt bem

vlw por compartilhar, REP + you

 

#EDIT, formatei 32 bit, mas msm assim ta dando tanto erro qnt antes, nem percebi diferença, formatei pensano q ia adiantar, mas só decepçao com o distro ;/ ql REV é esse distro?

 

 

post-248860-0-53132400-1310155213_thumb.jpg

Editado por deletera
Link para o comentário
Compartilhar em outros sites

O player escreve o comando no chat guild , e não muda nada . :o , maiis quando eu mando war contra a própria guild aparece a uma mensagem, maiis quando é contra outra Guild não aparece nada, queria que voocês me ajudassem

Editado por viniciustof
Link para o comentário
Compartilhar em outros sites

Caro @Niltin1.

 

Vá em ( "SeuOTserv/data/talkactions/scripts/" ).

Lá dentro crie uma arquivo chamado 'War.lua'.

 

Dentro dele cole isso:

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

 

Depois vá ate o ( "seuOtserv/data/talkactions/" ).

 

Abra o 'Talkactions.xml' dentro dele cole isso:

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

 

Agora se você estiver usando o distro postado nesse TOPICO, abra seu War.lua criado agora pouco como bloco de notas.

 

De CTRL+H em cima você colocara db.ExecuteQuery, é em baixo ponha db.query assim ele irar subistituir as linhas que tinha db.ExecuteQuery por db.query é o erro sumira.

 

Lembrando para anuciar uma WAR tem que fala dentro do CHAT GUILD.

 

Se ajudei REP+ :button_ok:

Link para o comentário
Compartilhar em outros sites

Manuh, ja fiz tudo q vcs falaram mas continua com esse erro aki, "ALLOCATION FAILED, SERVER OUT oF mEMORY! DECREASE SIZE OF YOUR MAP OR COMPILE IN A 64-BIT MODE", mas e mt estranho pq onde uso como host sempre da esse erro, mas na minha ksa nao da nenhum e as configuraçoes do PC's sao identicas a unica diferença q em ksa tenho uma VGA e no HOST nao.

Quero lembrar nao uso OS 64bits, ja dimnuir tamanho do mapa, no "pc hoster" usa-se 4GB RAM msm sendo um OS 32bits, se alguem puder me dar uma luz pra resolver esse problema, agradeço e dou REP +.

Editado por TenkaiHanzo
Link para o comentário
Compartilhar em outros sites

Olá @TenkaiHanzo

 

Esse problema é por falta de memoria o.O'

Eu usava 2GB, e dava esse erro.

Passei a usar 3GB, o erro desapareceu, mais você com 4GB, dando esse erro...

 

Eu uso o MAP de 98MB... GLOBAL FULL...

Seu DATABASE também pode estar atrapalhando um pouco, pois existe algumas coisas em que nos colocamos no DATABASE, que não prescisa no servidor, e fica deixando ele mais pesado, com a conecção com o DATABASE...

Tente deixar o maximo mais leve, tanto o seu servidor quanto DATABASE, Remova alguns SCRIPTS da pasta Mods, que você não estiver usando é alguns script dos TALKACTIONS não usados também, assim o servidor ficara mais leve, almentara a capacidade de aproveitação dele, e provavelmente ficara Esteval!!

 

Também já ouvi falar, que se você usar o WIN 32BIT, e compilar seu DISTRO para 64BIT, o desempenho melhora. tente isso...

 

Difícil aqui é você arrumar ajuda pois disponibilizaram um distro, mais não disponibilizaram as Source, assim ninguém pode modificar o distro, é não podendo arrumar erros como esse...

 

Espero ter ajudado falou mano :thumbsupsmiley:

Link para o comentário
Compartilhar em outros sites

OLA! OLHA FIZ OQ TU FALO AE TUDO SERTIM MAIS NA HORA DE XAMAR A OUTRA GUILD PRA WAR ,VAI NORMAL MAIS OS ESCUDINHOS AZUL,VERMELHO,VERDE, NAO APAREÇE MEU OT E 8.60 QUERIA SABER SE TEM COMO VOCE ME AJUDA.

Link para o comentário
Compartilhar em outros sites

Impossível não aparecer o.O, aparece algum erro no distro ?

 

¬¬ difícil não aparecer sendo que os emblemas são próprios do Tibia, a não ser que você esteja usando outro Client...

Link para o comentário
Compartilhar em outros sites

Eu instalei o script corretamente, segui todos os passos e deu tudo certo... Só que na hora de usar os comandos do GUILD WARS dá alguns erros no console:

/balance
[27/07/2011 16:54:02] Lua Script Error: [TalkAction Interface] 
[27/07/2011 16:54:02] data/talkactions/scripts/balance.lua:onSay

[27/07/2011 16:54:02] data/talkactions/scripts/balance.lua:16: attempt to index local 't' (a nil value)
[27/07/2011 16:54:02] stack traceback:
[27/07/2011 16:54:02] 	data/talkactions/scripts/balance.lua:16: in function <data/talkactions/scripts/balance.lua:9>

/war
[27/07/2011 16:55:32] Lua Script Error: [TalkAction Interface] 
[27/07/2011 16:55:32] data/talkactions/scripts/war.lua:onSay

[27/07/2011 16:55:32] data/talkactions/scripts/war.lua:9: attempt to index local 't' (a nil value)
[27/07/2011 16:55:32] stack traceback:
[27/07/2011 16:55:32] 	data/talkactions/scripts/war.lua:9: in function <data/talkactions/scripts/war.lua:1>

 

PS: EU NÃO ESTOU USANDO O DISTRO DO TÓPICO, EU USO MEU PRÓPRIO DISTRO!

Editado por FKaupert
Link para o comentário
Compartilhar em outros sites

Eu instalei o script corretamente, segui todos os passos e deu tudo certo... Só que na hora de usar os comandos do GUILD WARS dá alguns erros no console:

/balance
[27/07/2011 16:54:02] Lua Script Error: [TalkAction Interface] 
[27/07/2011 16:54:02] data/talkactions/scripts/balance.lua:onSay

[27/07/2011 16:54:02] data/talkactions/scripts/balance.lua:16: attempt to index local 't' (a nil value)
[27/07/2011 16:54:02] stack traceback:
[27/07/2011 16:54:02] 	data/talkactions/scripts/balance.lua:16: in function <data/talkactions/scripts/balance.lua:9>

/war
[27/07/2011 16:55:32] Lua Script Error: [TalkAction Interface] 
[27/07/2011 16:55:32] data/talkactions/scripts/war.lua:onSay

[27/07/2011 16:55:32] data/talkactions/scripts/war.lua:9: attempt to index local 't' (a nil value)
[27/07/2011 16:55:32] stack traceback:
[27/07/2011 16:55:32] 	data/talkactions/scripts/war.lua:9: in function <data/talkactions/scripts/war.lua:1>

 

PS: EU NÃO ESTOU USANDO O DISTRO DO TÓPICO, EU USO MEU PRÓPRIO DISTRO!

 

Utilize o distro do tópico,seu distro não tem as funções necessárias,e tente não modificar o arquivo war.lua do talkactions,pegue o original e reponha lá...

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...