Ir para conteúdo
Entre para seguir isso  
GustavoMassa

Sistema de Nação e Reino

Recommended Posts

GustavoMassa    1
GustavoMassa

Nome: Sistema de Nações

Autor: GustavoMassa

Versão Testada: TFS 0.3.4 - Tibia 8.42

 

Informações Adicionais

Quem ja jogou outros rpg's deve saber que havia nações, tipo no Legend of Ares, os Players escolhiam entre Empire e Aliance.

 

O que o Sistema fais? Bem o Player de lvl 50+ pode escolher se tornar da Nação Aliança, ou da Nação Império. As nações dos players irão aparecer quando dar look, serão guardadas atraves do banco de dados, e os players de mesma nação não poderão se atacar. O player de cada nação tambem tem direio de se teleportar para o seu reino, castelo.

Vamos começar: Primeiramente em data/lib, crie um arquivo chamado nacao.lua

[b]--[color=SeaGreen]Script feito por GustavoMassa[/color]
[color=Blue]local[/color] [color=Blue]nacao[/color] = [color=Blue]{[/color]
       [color=DarkOrange][1][/color] = "[color=Red]Aliança[/color]",
       [color=DarkOrange][2][/color] = "[color=Red]Império[/color]"
[color=Blue]}[/color]
[color=Blue]function reinoSetTable()[/color]
local i = db.executeQuery("ALTER TABLE `players` ADD `reino` VARCHAR(50) NOT NULL DEFAULT '0' AFTER `name`;")
 return i
end
[color=Blue]function setPlayerReino(cid, new)[/color]
   dofile("config.lua")
   db.executeQuery("UPDATE `"..sqlDatabase.."`.`players` SET `reino` = '".. nacao[new].."' WHERE `name` = '".. getPlayerName(cid).."';")
   return true
end
[color=Blue]function getPlayerReino(cid)[/color]
   local get = db.getResult("SELECT `reino` FROM `players` WHERE `name` = '".. getPlayerName(cid).."';")
   local j = get:getDataString('reino')
   return j
end
[color=Blue]function haveReino(cid)[/color]
   if type(getPlayerReino(cid)) == 'string' then
   doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Nação: ".. getPlayerReino(cid).."")
   end
end[/b]

Em vermelho: É o nome de cada nação, você pode modificar para qual quiser.

OBS: execute essa linha no seu banco de dados: ALTER TABLE `players` ADD `reino` VARCHAR(50) NOT NULL DEFAULT '0' AFTER `name`;

 

Agora em data/talkactions/scripts: crie um arquivo chamado reino.lua

[b]--[color=SeaGreen]script feito por GustavoMassa[/color]
function onSay(cid, words, param)
   local c = { [color=Red]levelmin[/color] = [color=Orange]50[/color],
            [color=Red]reipos[/color] = {[color=Orange]x = 851, y = 1687, z = 7[/color]},
            [color=Red]reino1pos[/color] = {[color=Orange]x = 99, y = 99, z = 7[/color]},
            [color=Red]reino2pos[/color] = {[color=Orange]x = 99, y = 99, z = 7[/color]}
}

   if isPlayerPzLocked(cid) then
       doPlayerSendCancel(cid, "You cannot use this command during battle.")
       return true
   end

       if param == '' then
           if getPlayerLevel(cid) < c.levelmin then
               doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Desculpe, você precisa alcançar o lvl [color=Orange]50[/color] para poder ir ate o Rei.")
               return false
           elseif getPlayerLevel(cid) > c.levelmin and getPlayerReino(cid) == tostring("0") then
               doTeleportThing(cid,c.reipos)
               doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Agora vá falar com o Rei e escolher sua Nação!")
               return true
           elseif getPlayerLevel(cid) > c.levelmin and getPlayerReino(cid) == tostring("[color=Blue]Aliança[/color]") then
               doTeleportThing(cid,c.reino1pos)
               doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Bem-Vindo "..getPlayerName(cid).." ao Reino da [color=Orange]Aliança[/color].")
               return true
           elseif getPlayerLevel(cid) > c.levelmin and getPlayerReino(cid) == tostring("[color=Blue]Império[/color]") then
               doTeleportThing(cid,c.reino2pos)
               doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Bem-Vindo "..getPlayerName(cid).." ao Reino do [color=Orange]Império[/color].")
               return true
           end
       end
return true
end[/b]

Configurando:

levelmin = O lvl mínimo para o player poder escolher uma nação.

reipos = x,y,z, as coordenadas do Castelo do NPC do Rei no MAP.

reino1pos = x,y,z, as coordenadas do reino da "Aliança", aonde so os players da Aliança podem ir.

reino2pos = x,y,z, as coordenadas do reino do "Império", aonde so os players do Império podem ir.

 

O 50, mude apenas se mudou o levelmin.

 

Depois em Azul o "Aliança", modifique APENAS se você mudou o nome das Nações, se mudar este muda o "Aliança" tambem.

Depois em Azul o "Império", modifique APENAS se você mudou o nome das Nações, se mudar este muda o "Império" tambem.

 

Agora em talkactions.xml, adicione a linha:

[b]<talkaction words="/reino" event="script" value="nacao/nacao.lua"/>[/b]

Bom, agora vamos fazer o Rei, vá em data/npc/scripts, e crie o arquivo rei.lua

[b]local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid)                npcHandler:onCreatureAppear(cid)            end
function onCreatureDisappear(cid)             npcHandler:onCreatureDisappear(cid)            end
function onCreatureSay(cid, type, msg)             npcHandler:onCreatureSay(cid, type, msg)        end
function onThink()                     npcHandler:onThink()                    end

function oracle(cid, message, keywords, parameters, node)
   if(not npcHandler:isFocused(cid)) then
       return false
   end

   local reinoNode = node:getParent()
   local reino = reinoNode:getParameters().new
   if getPlayerReino(cid) == tostring("0") then
       setPlayerReino(cid, reino)
       selfSay('Agora você pertence ao Reino {'..getPlayerReino(cid)..'}.',cid)
   elseif getPlayerReino(cid) ~= tostring("0") then
       selfSay('Você já pertence ao Reino {'..getPlayerReino(cid)..'}.',cid)
       npcHandler:resetNpc()
   end
return true
end

function greetCallback(cid)
   if(getPlayerLevel(cid) < [color=Orange]50[/color]) then
       selfSay('Volte quando alcançar o Nível [color=Orange]50[/color].',cid)
       npcHandler:resetNpc()
   else
   return true
   end
end
npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setMessage(MESSAGE_GREET, '|PLAYERNAME| está preparado para escolher seu reino?')

local yesNode = KeywordNode:new({'sim' or 'sím'}, oracle)
local noNode = KeywordNode:new({'nao' or 'não'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, moveup = 1, text = 'Então, que Reino ira escolher?'})

local node1 = keywordHandler:addKeyword({'sim' or 'sím'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = '[color=Red]Você quer se juntar ao Reino da {Aliança} ou ao Reino do {Império}?[/color]'})
   local node2 = node1:addChildKeyword({'[color=Blue]aliança[/color]'}, StdModule.say, {npcHandler = npcHandler, new = 1, onlyFocus = true, text = '[color=Red]Então, vai se juntar ao Reino da {[color=Blue]Aliança[/color]}? A decisão é irreversível![/color]'})
           node2:addChildKeywordNode(yesNode)
           node2:addChildKeywordNode(noNode)
       node2 = node1:addChildKeyword({'[color=Blue]império[/color]'}, StdModule.say, {npcHandler = npcHandler, new = 2, onlyFocus = true, text = '[color=Red]Então, vai se juntar ao Reino do {[color=Blue]Império[/color]}? A decisão é irreversível![/color]'})
           node2:addChildKeywordNode(yesNode)
           node2:addChildKeywordNode(noNode)
keywordHandler:addKeyword({'nao' or 'não'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Volte quando estiver pronto.'})

npcHandler:addModule(FocusModule:new())[/b]

Em laranjado, é o lvl min para poder falar com o rei.

Em azul, mude somente se trocou o nome das Nações.

Em vermelho, mude somente se trocou o nome das Nações.

 

data/npc, rei.xml

[b]<?xml version="1.0" encoding="UTF-8"?>
<npc name="Rei" script="rei.lua" walkinterval="0" floorchange="0">
   <health now="9999" max="9999"/>
   <look type="325" head="95" body="94" legs="60" feet="113" addons="3"/>
   <parameters>
       <parameter key="message_greet" value="Bem-Vindo ao meu Castelo |PLAYERNAME|."/>
   </parameters>
</npc>[/b]

Agora em data/creaturescripts/scripts, crie o arquivo attacknacao.lua

[b][color=SeaGreen]--script by GustavoMassa[/color]
[color=Blue]function onCombat(cid, target)[/color][/b]
[b]local creatureSkull = getCreatureSkullType(cid)[/b]

[b]if isPlayer(target) and getPlayerReino(cid) ~= tostring("0") and getPlayerReino(target) ~= tostring("0") then
       if isPlayer(target) and getPlayerReino(cid) == getPlayerReino(target) then
           doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não pode atacar jogadores da mesma Nação.")
           doCreatureSetSkullType(cid, creatureSkull)
           return false
       end
   end
return true
end[/b]

Aqui você não meche em nada, ele fais com que os Players de mesma nação não possam se atacar.

 

Agora em data/creaturescripts/scripts, crie o arquivo look.lua

[color=SeaGreen][b]--Script feito por Socket[/b][/color]
[b]function onLook(cid, thing)

pid = thing.uid
local access = {[1] = {[0] = 'has no vocation',
                      [1] = 'a Sorcerer',
                      [2] = 'a Druid',
                      [3] = 'a Paladin',
                      [4] = 'a Knight',
                      [5] = 'a Magician',
                      [6] = 'a Warlock',
                      [7] = 'a Templar',
                      [8] = 'a Healer',
                      [9] = 'a Assassin',
                      [10] = 'a Archer',
                      [11] = 'a Lord Knight',
                      [12] = 'a Defender',},
               [2] = {'a Tutor'},
               [3] = {'a Senior Tutor'},
               [4] = {'a Gamemaster'},
               [5] = {'a GOD'},}       

local art = {
           [0] = 'She',
           [1] = 'He',
           }

 if isPlayer(pid) then
   local nacao = getPlayerAccess(pid) > 2 and '' or ' Nação '.. getPlayerReino(pid) ..''
   local guild = (getPlayerGuildName(pid)~='' and " ".. art[getPlayerSex(pid)] .." is ".. getPlayerGuildRank(pid) .." of the ".. getPlayerGuildName(pid) .."" .. (getPlayerGuildNick(pid)~='' and ' ('.. getPlayerGuildNick(pid) ..').' or '.') or '')
   local guild1 = (getPlayerGuildName(pid)~='' and " You are ".. getPlayerGuildRank(pid) .." of the ".. getPlayerGuildName(pid) .."" .. (getPlayerGuildNick(pid)~='' and ' ('.. getPlayerGuildNick(pid) ..').' or '.') or '')
   local voc = getPlayerAccess(pid) > 2 and access[getPlayerAccess(pid)][1] or access[1][getPlayerVocation(pid)]
   local level = getPlayerAccess(pid) > 2 and '.' or ' (Level '.. getPlayerLevel(pid) ..').'
   local msg = ('You see '.. getPlayerName(pid) ..''.. level .. ' '.. art[getPlayerSex(pid)] ..' is '.. voc ..'.'..nacao)..guild
   local msg1 = ('You see yourself. You are '.. voc ..'.'..nacao)..guild1
   if getPlayerName(pid) == getPlayerName(cid) then
     if getPlayerAccess(cid) > 2 then
       if getPlayerStorageValue(cid, 1078) == 1 then
         doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg1)
       else
         return true
       end
     else 
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg1)
     end
   else
     if getPlayerAccess(cid) > 2 then
       if getPlayerStorageValue(cid, 1078) == 1 then
         doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg)
       else
         return true
       end
     else
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg)
     end
   end
 elseif not isPlayer(pid) then
   return true
 end
end[/b]

Aqui você tambem não meche em nada.

OBS: Se você usa o sistema de Wanted Dead or Alive do Socket, substitua o arquivo a cima por este:

[b]function onLook(cid, thing)
pid = thing.uid
local access = {[1] = {[0] = 'has no vocation',
                      [1] = 'a Sorcerer',
                      [2] = 'a Druid',
                      [3] = 'a Paladin',
                      [4] = 'a Knight',
                      [5] = 'a Magician',
                      [6] = 'a Warlock',
                      [7] = 'a Templar',
                      [8] = 'a Healer',
                      [9] = 'a Assassin',
                      [10] = 'a Archer',
                      [11] = 'a Lord Knight',
                      [12] = 'a Defender',},
               [2] = {'a Tutor'},
               [3] = {'a Senior Tutor'},
               [4] = {'a Gamemaster'},
               [5] = {'a GOD'},}       

local art = {
           [0] = 'She',
           [1] = 'He',
           }

 if isPlayer(pid) then
   local nacao = getPlayerAccess(pid) > 2 and '' or ' Nação '.. getPlayerReino(pid) ..''
   local reward = getPlayerAccess(pid) > 2 and '' or ' Reward '.. getPlayerReward(getPlayerName(pid)) ..' gold coins.'
   local guild = (getPlayerGuildName(pid)~='' and " ".. art[getPlayerSex(pid)] .." is ".. getPlayerGuildRank(pid) .." of the ".. getPlayerGuildName(pid) .."" .. (getPlayerGuildNick(pid)~='' and ' ('.. getPlayerGuildNick(pid) ..').' or '.') or '')
   local guild1 = (getPlayerGuildName(pid)~='' and " You are ".. getPlayerGuildRank(pid) .." of the ".. getPlayerGuildName(pid) .."" .. (getPlayerGuildNick(pid)~='' and ' ('.. getPlayerGuildNick(pid) ..').' or '.') or '')
   local voc = getPlayerAccess(pid) > 2 and access[getPlayerAccess(pid)][1] or access[1][getPlayerVocation(pid)]
   local level = getPlayerAccess(pid) > 2 and '.' or ' (Level '.. getPlayerLevel(pid) ..').'
   local msg = ('You see '.. getPlayerName(pid) ..''.. level .. ' '.. art[getPlayerSex(pid)] ..' is '.. voc ..'.'.. nacao ..'.' ..reward)..guild
   local msg1 = ('You see yourself. You are '.. voc ..'.'.. nacao ..'.'..reward)..guild1
   if getPlayerName(pid) == getPlayerName(cid) then
     if getPlayerAccess(cid) > 2 then
       if getPlayerStorageValue(cid, 1078) == 1 then
         doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg1)
       else
         return true
       end
     else 
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg1)
     end
   else
     if getPlayerAccess(cid) > 2 then
       if getPlayerStorageValue(cid, 1078) == 1 then
         doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg)
       else
         return true
       end
     else
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg)
     end
   end
 elseif not isPlayer(pid) then
   return true
 end
end[/b]

Agora em data/creaturescripts/scripts, abra o arquivo login.lua e adicione as seguintes linhas:

[b]registerCreatureEvent(cid, "Look")[/b]
[b]           registerCreatureEvent(cid, "attacknacao")[/b]

Agora em data/creaturescripts, abra o arquivo creaturescripts.xml e adicione as seguintes linhas:

[b]<event type="combat" name="attacknacao" script="attacknacao.lua"/>
          <event type="look" name="Look" event="script" value="look.lua"/>[/b]

Pronto, acho que acabou hehe ;D

 

Explicando o talkaction:

/reino - se o player não tem nação é teleportado para o castelo do Rei

/reino - se o player tem nação, é teleportado para o castelo da nação.

 

Qualquer dúvida, bugs e sugestões postem aqui.

Espero que gostem. :D

 

Editado por GustavoMassa

Compartilhar este post


Link para o post
Flatronez    1
Flatronez

Movido.

aprovado.png

Compartilhar este post


Link para o post
pejuge2    1
pejuge2

yessir.gifAprovado

 

Depois de muita peleja vc conseguil eim huuauhauhauh. Parabéns.

 

Atenciosamente,

PeJuGe.

Compartilhar este post


Link para o post
Maiia    0
Maiia

Cara muito perfeito!

Nossa precisamos de mais scripts como este!!!

OBS: Bem organizado, bem explicadoo!! Parabén. ^^

 

att,

Maiia.

Compartilhar este post


Link para o post
Notorious    1
Notorious

Haha, bem criativo mesmo, parece Priston Tale, que tem as tribos, Morions e Tempskrons ;)

 

Só que ainda dava pra reduzir alguns codigos ai, como o de nao atacar ...

Era só checar se a nação de um era igual a do outro, se sim retornava falso e o tfs ja impedia qualquer evento posterior ...

 

E eu nao entendi porque voce usou tostring("string") :errm:

Compartilhar este post


Link para o post
Rei_vegeta    0
Rei_vegeta

Quero so ver o que a CIP vai fazer depois de eles ver um script desses.

 

muito bom.

Compartilhar este post


Link para o post
Lyon    3
Lyon

Bom? Isso ficou maravilha!!

Nem área vip esta tendo ultimamente uns scritps assim,rs parabéns!

Compartilhar este post


Link para o post
ssjoss    0
ssjoss

Perfeito mais bem que podia ter um tipo de batalha entre as nações para ficar mais daora.

Mais script perfeito .

 

Esqueceu de colocar a Tag das Talkactions mais continua otimo .

Editado por ssjoss

Compartilhar este post


Link para o post
dragonlorde    0
dragonlorde

so num entendi isso aki

 

local guild = (getPlayerGuildName(pid)~=''

Ai vc ta armazenando esse dado numa string?

Compartilhar este post


Link para o post
GustavoMassa    1
GustavoMassa

@ssjoss

A versão 2.0 vai te o sistema de guerra de nações, tipo o do legend of ares, eu achava muito bom.

Arrumei a tag ;D

 

@dragonlord

É sim dragon, ta armazenando numa variavel... que a função retorna uma string.

Editado por GustavoMassa

Compartilhar este post


Link para o post
Nitx    0
Nitx

não tem como por em 8.10?

Compartilhar este post


Link para o post
god_dreamer    1
god_dreamer

fikou realmente mto doido, mas nen vou por no meu OT, teria ki recriar um OT usando esse Sistema ai...

Compartilhar este post


Link para o post
god_dreamer    1
god_dreamer

ele pode se teleportar se estiver em batalha?

 

 

Desculpa o Double post, eu nao vi ki tinha postado em cima.

Compartilhar este post


Link para o post
ssjoss    0
ssjoss

Para voltar para o Reino está indom mesmo com battle mais o script está certo intão não sei pq acontece isso cara tem como da uma ajuda ??

Compartilhar este post


Link para o post
korff93    0
korff93

<talkaction words="/reino" event="script" value="nacao/nacao.lua"/>

 

Isso ta certo?? nacao/nacao, Fala no meu server que esse diretório não existe, segui todos os passos e deu errado , olha o SS

 

imagem3mr.png
Editado por korff93

Compartilhar este post


Link para o post
korff93    0
korff93
<talkaction words="/reino" event="script" value="nacao/nacao.lua"/>

 

Isso ta certo?? nacao/nacao, Fala no meu server que esse diretório não existe, segui todos os passos e deu errado , olha o SS

 

Por favor alguem me ajuda, alguem sabe oque eu devo fazer? ...

Compartilhar este post


Link para o post
treiner    0
treiner

Kra além de um bom script o topico ta mto bem organizado...

Parabens

Compartilhar este post


Link para o post
Nenzzy    0
Nenzzy

nossa, cara parabéns!

merecia exclusivo!

Compartilhar este post


Link para o post
korff93    0
korff93

<talkaction words="/reino" event="script" value="nacao/nacao.lua"/>

 

Cara isso tá errado, não funciona comigo... Por favor concerta, o que eu tenho que fazer.

O nacao.lua está na "data/lib" é pra bota ele em talkactions.xml? não to entendendo, não existe esse diretório, nacao!

 

por favor alguem me responde to desesperado!

 

Olha o bug na img

imagembl.png

Compartilhar este post


Link para o post
GustavoMassa    1
GustavoMassa
<talkaction words="/reino" event="script" value="nacao/nacao.lua"/>

 

Cara isso tá errado, não funciona comigo... Por favor concerta, o que eu tenho que fazer.

O nacao.lua está na "data/lib" é pra bota ele em talkactions.xml? não to entendendo, não existe esse diretório, nacao!

 

por favor alguem me responde to desesperado!

 

Olha o bug na img

imagembl.png

@ssjoss, @god_dreamer

Eu vo verifica o que ta acontecendo de errado, e posto aqui dai.

 

 

@korff93

Aprenda a ler o erro...Se o diretorio nao existe é porque a pasta nacao n foi criada...

Vai em data/talkactions/scripts

E crie uma pasta chamada nacao e dentro dela ponha o arquivo nacao.lua

ou se quiser deixe o arquivo na pasta scripts e mude no talkactions assim: <talkaction words="/reino" event="script" value="nacao.lua"/>

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×