Ir para conteúdo

Posts Recomendados

Ola galera xtibiana!!!

O summon system e um sistema de sumonar sistema com algumas novidades.

A configuração fica dentro de arquivo xml ficando mais fácil e pratico de modificar.

 

Para sumonar diga /sum(nome do monstro)

Para ver a lista de sumons /sumons

 

Então lets go.

 

Dentro de sua pasta "Data" crie um nova pasta chamado de sumon.

Depois dentro da pasta sumon crie um novo arquivo XML e coloque isto dentro:

 

<monster name="Demon" mana="3000" level="300" item="2323"  health="100" /><
<monster name="Bug" mana="2" level="2"  item="0" health="0" /><
<monster name="Hydra" mana="2000" level="50" item="2323" health="0" /><

 

Esta e minha configuração se quiser pode alterar.

 

Depois vá em talkactions e crie um arquivo lua chamado de sumon e coloque isto:

 

function onSay(cid, words, param, channel)
function getSumonInFile()
local x = {}
local events = io.open("data/sumon/sumon.xml", "r")
for i in events:read("*a"):gmatch('<monster name="(.-)" ') do
table.insert(x, i)
end
return x
end
local function getExistSumonInFile(monster)
for i = 1, #getSumonInFile() do
if monster == getSumonInFile()[i] then
return true
end
end
return false
end
function getSumonRequiresInFile(monster, attr)
local x = {}
local events = io.open("data/sumon/sumon.xml", "r")
for i in events:read("*a"):gmatch('<monster name="'..monster..'" (.-)/') do
local req = tonumber(i:match(''..attr..'="(.-)" '))
table.insert(x, req)
end
return x[1] or 0
end
local mana,level,item,health = getSumonRequiresInFile(param, "mana"),getSumonRequiresInFile(param, "level"),getSumonRequiresInFile(param, "item"),getSumonRequiresInFile(param, "health")
local x = {"Vá "..param.." e derrote estes malditos","Seja bem vindo "..param.."","Váaaaa "..param.."","Eae "..param.." esta pronto?!","Vaii "..param.." você e realmente forte"}
if param == "" or not param or param == " " then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Precisa de dizer o nome do monsto") and false
end
if not getExistSumonInFile(param) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este monstro não pode ser sumado")
end
if getCreatureMana(cid) <= mana then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem "..mana.."de mana para sumonar") and false
end
if getPlayerLevel(cid) <= level then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem "..level.." de level para summonar") and false
end
if getPlayerItemCount(cid, item) < 0 then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem o item "..item.." para summonar") and false
end
if getCreatureHealth(cid) <= health then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não "..health.."de health para summonar") and false
end
doSummonMonster(cid, param)
doCreatureAddHealth(cid, -health)
doCreatureAddMana(cid, -mana)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, x[math.random(1, #x)])
return true
end

 

 

Agora de novo em talkactions crie um arquivo lua chamado de sumons e coloque isto:

 

 

function onSay(cid, words, param, channel)

function getSumonInFile()
local x = {}
local events = io.open("data/sumon/sumon.xml", "r")
for i in events:read("*a"):gmatch('<monster name="(.-)" ') do
table.insert(x, i)
end
return x
end
function getSumonRequiresInFile(monster, attr)
local x = {}
local events = io.open("data/sumon/sumon.xml", "r")
for i in events:read("*a"):gmatch('<monster name="'..monster..'" (.-)/') do
local req = tonumber(i:match(''..attr..'="(.-)" '))
table.insert(x, req)
end
return x[1] or 0
end
str = ""
for i = 1, #getSumonInFile() do
local sum = getSumonInFile()[i]
local mana,level,item,health = getSumonRequiresInFile(sum, "mana"),getSumonRequiresInFile(sum, "level"),getSumonRequiresInFile(sum, "item"),getSumonRequiresInFile(sum, "health")
str = ""..str.."\n"..getSumonInFile()[i].." Level - "..level.." health - "..health.." mana - "..mana..""
end
doPlayerPopupFYI(cid, str)
return true
end

 

 

 

E prontinho vou ensinar a configuração no seu arquivo xml:

 

 

 

<monster name="Demon" mana="3000" level="300" item="2323"  health="100" /><

name = Nome do monstro
mana = Mana que ira precisar
level = level que irá precisar
item = Se o player vai precisar de algum item para sumonar se não precisar coloque 0
health = Quanto de vida o player ira precisar

Obs: A configuração precisa ser alterado com cuidado os espaços de cada configuração não pode ser retirado.
E importante não retirar o espaço da ultima config(health)

 

 

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

  • 2 weeks later...

Nossa, pra que ler o arquivo tantas vezes e rodar vários loops desnecessários, bote uma função apenas para load do arquivo na lib, use-a no start do server, e faça uma função para update, estilo um reload. E outra coisa, você abre arquivos e não os fecha, isso não é bom.

 

Faça dessa forma e verá que a optimização será grande:


Summons = {}

function load_summon_file()
   local file = io.open("data/sumon/sumon.xml")
   local file_str = file:read("*a")
   file:close()
   for name, mana, level, item, health in file_str:gmatch('<monster name="(.-)" mana="(.-)" level="(.-)" item="(.-)" health="(.-)" />') do
       Summons[name] = { mana = mana, level = level, item = item, health = health}
   end
end

function update_summon_file()
   Summons = {}
   load_summon_file()
end

function is_valid_summon(summon_name)
   return type(Summons[summon_name]) == "table" and true or false
end

function get_summons_requires(summon_name)
   return is_valid_summon(summon_name) and Summons[summon_name] or {}
end

 

Repare que o arquivo é carregado apenas uma vez, leitura em disco rigido é muito lenta e gasta muita memória, quanto menos o fizer melhor.

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...
  • 6 months later...
×
×
  • Criar Novo...