Muito bom! REP+ to usando no meu OTServer que está em construção e logo mais vou por online, quer algum tipo de crédito pelo System?
- Fórum
- OTServ
- Recursos
- Scripting
- Mods, funções e outros
- Sumons System By Caotic
Sumons System By Caotic
Por caotic, 22 de jan. de 2013 em Mods, funções e outros
info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have

Que nada.
Eu postei para compartilhar.
Não ligo para estas coisas.
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.
info
Grupo: Campones
Registrado: 13/12/12
Posts: 48
Reputação: +4
Char no Tibia: nao jogo mais

Interessante!!! vou implantar no meu servidor!!!
info
Grupo: Artesão
Registrado: 24/10/12
Posts: 107
Reputação: -3
Char no Tibia: binhostylle

Ei Mano aki no meu ot não pegou
info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have

Ei Mano aki no meu ot não pegou
Ei Mano aki no meu ot não pegou
Mais que o deu errado?
info
Grupo: Artesão
Registrado: 24/10/12
Posts: 107
Reputação: -3
Char no Tibia: binhostylle

eu falo /sum Hydra não acontece nada
info
Grupo: Campones
Registrado: 11/02/12
Posts: 5
Reputação: 0

isso da pra fazer como se fosse um kuchyose de naruto tipo so algumas vocations podem usar?




info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have
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:
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 endAgora 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 endE prontinho vou ensinar a configuração no seu arquivo xml:
Editado Janeiro 22 por caotic