Boa sugestão mais eu também tenho um ot nessa versão, sei que essa postagem foi bem depois da data de criação mais achei a solução numero 1 para todas.
Primeiro, eu recomendo usar o SQLStudio, para remover todos que tiverem de god, pois como ele disse, já tem na data alguns do teste do ot.
Segundo, olha a imagem:
Uploaded with ImageShack.us
99% dos ot [até o meu tinha], tem esse lugarzinho, ta vendo onde meu char tá, o canto do tapete, tem um Action ID, se que clicar lá vira god. no meu ot, eu removi isso, eu tirei o id no mapa editor. [Procure como usar o mapa editor para remover isso].
Bota o Unique id e o action id 0 no map editor.
[Dizem que tem outro lugar que faz isso, mas eu não sei ainda...]
Bom galera, eu tinha postado esse script como resposta no Topico do xOtservx
então um Usuario me pediu para criar um topico pra melhorar a visualização.
Bom, o Script é o mesmo que o do xotservx entao qualquer Erro reporte no Topico dele. Link disponivel no Final do Topico
Sobre os creditos vão 100% ao xOtservx eu só adicionei + pokemons.
Então vo explicar o que fiz:
Adicionei os Pokemons seguindo a Pokedex e o Nome das magias apartir de um arquivo chamado
" AA - svke pokedex " Encontrado na pasta Pokedex do servidor Pokemon Dash
Arquivo Anexado pra quem quiser.
Aqui vai o Script agora com 147/151 Pokes:
OBS - Não configurei, Cd, Atkmin, Atkmax, Damage nem nada. Só adicionei as magias aos Pokemons.
Caso achen inutil ignoren o Topico
Pois eu cresci sabendo que são pequenas atitudes que mudan as coisas ^^
V2 Do Script Galera
Agora com 147/151 Pokes com Todos Ataques na Tabela.
Agora falta adicionar as Magias restantes os Lvs, Cds, St, Atkmin e Atkmax fora o Damagetype
Topico para duvidas quanto a instalação do script: Aqui
AA - svke pokedex.txt
[Talkaction]Sistema M1 até M6 + Tutorial de Edições.
Créditos:
Apocarai
PeeWee
Olá, antes eu já havia postado o sistema até m3, agora venho traze-lo até m6.
Do m4 até m6 decidir fazer diferente, dessa vez quem irá colocar as magias , combat e level necessário será vocês.
Estou fazendo isso para que vocês entendam melhor o comando, e caso precisarem editar que não precisem e ajuda.
Scripts para TFS 0.3.6pl1 NAO FOI TESTADO EM OUTRA!
Preview:
Antes de tudo, va na pasta data/lib e adicione um script.lua com o nome de pokeLib e adicione isso:
--[[
This file is part of Pokemon Systems by Mkalo.
Pokemon Systems by Mkalo is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Pokemon System By Mkalo is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Pokemon System By Mkalo. If not, see <http://www.gnu.org/licenses/>.
]]--
pokein, pokeout = 2222,2223
function doRemoveTile(pos)-- Script by mock
pos.stackpos = 0
local sqm = getTileThingByPos(pos)
doRemoveItem(sqm.uid,1)
end
function doCreateTile(id,pos) -- By mock
doAreaCombatHealth(0,0,pos,0,0,0,CONST_ME_NONE)
doCreateItem(id,1,pos)
end
function getPosDirs(p, dir) -- By MatheusMkalo
return dir == 1 and {x=p.x-1, y=p.y, z=p.z} or dir == 2 and {x=p.x-1, y=p.y+1, z=p.z} or dir == 3 and {x=p.x, y=p.y+1, z=p.z} or dir == 4 and {x=p.x+1, y=p.y+1, z=p.z} or dir == 5 and {x=p.x+1, y=p.y, z=p.z} or dir == 6 and {x=p.x+1, y=p.y-1, z=p.z} or dir == 7 and {x=p.x, y=p.y-1, z=p.z} or dir == 8 and {x=p.x-1, y=p.y-1, z=p.z}
end
function doItem(pos,a,d)-- Script by mock
doCreateTile(460,pos)
pos.stackpos = 0
local c = getTileThingByPos(pos)
doItemSetAttribute(c.uid, "aid", a)
end
function getDescription(uid)
for i,x in pairs(getItemDescriptions(uid)) do
if i == "special" then
return x
end
end
end
function findLetter(string, letter)
for i = 1, #string do
if string:sub(i, i) == letter then
return i
end
end
end
function isWalkable(pos, creature, proj, pz)-- by Nord
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and pz then return false, true end
local n = not proj and 3 or 2
for i = 0, 255 do
pos.stackpos = i
local tile = getTileThingByPos(pos)
if tile.itemid ~= 0 and not isCreature(tile.uid) then
if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
return false
end
end
end
return true
end
function getPosDirs(p, dir)
return dir == 1 and {x=p.x-1, y=p.y, z=p.z} or dir == 2 and {x=p.x-1, y=p.y+1, z=p.z} or dir == 3 and {x=p.x, y=p.y+1, z=p.z} or dir == 4 and {x=p.x+1, y=p.y+1, z=p.z} or dir == 5 and {x=p.x+1, y=p.y, z=p.z} or dir == 6 and {x=p.x+1, y=p.y-1, z=p.z} or dir == 7 and {x=p.x, y=p.y-1, z=p.z} or dir == 8 and {x=p.x-1, y=p.y-1, z=p.z}
end
function canSummon(cid)
local pos = getCreaturePosition(cid)
local state = false
for i = 1, 8 do
if isWalkable(getPosDirs(getCreaturePosition(cid), i)) then
state = true
end
end
return state
end
function isPlayerSummon(cid, uid)
if getCreatureMaster(uid) == cid then
return TRUE
end
return FALSE
end
function getSummonLifes(cid)
for _,x in pairs(getCreatureSummons(cid)) do
return getCreatureHealth(x), getCreatureMaxHealth(x)
end
end
function getItemsInContainerById(container, itemid) -- Function By Kydrai
local items = {}
if isContainer(container) and getContainerSize(container) > 0 then
for slot=0, (getContainerSize(container)-1) do
local item = getContainerItem(container, slot)
if isContainer(item.uid) then
local itemsbag = getItemsInContainerById(item.uid, itemid)
for i=0, #itemsbag do
table.insert(items, itemsbag[i])
end
else
if itemid == item.itemid then
table.insert(items, item.uid)
end
end
end
end
return items
end
function addPokeball(cid, pokename, maxh)
local s = doPlayerAddItem(cid, pokein)
doItemSetAttribute(s, "poke", "This is "..pokename.."'s pokeball. HP = ["..maxh.."/"..maxh.."]")
doItemSetAttribute(s, "description", "Contains a " .. pokename)
end
function getPokeOutLive(cid)
dat = {}
for slot = CONST_SLOT_FIRST, CONST_SLOT_LAST do
local item = getPlayerSlotItem(cid, slot)
if isContainer(item.uid) then
local items = getItemsInContainerById(item.uid, pokeout)
for _, ui in pairs(items) do
if getItemAttribute(ui, "poke"):sub(#getItemAttribute(ui, "poke")) == "." then
table.insert(dat, ui)
end
end
end
if item.itemid == pokeout then
if getItemAttribute(item.uid, "poke"):sub(#getItemAttribute(item.uid, "poke")) == "." then
table.insert(dat, item.uid)
end
end
end
return dat
end
Go/Back Pokeball System
By: MatheusMkalo
Vá em data/actions/scripts e adicione um arquivo.lua com o nome de goback.lua
Depois de ter feito isso, adicione o seguinte script no arquivo goback.lua:
--[[
This file is part of Pokemon Systems by Mkalo.
Pokemon Systems by Mkalo is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Pokemon System By Mkalo is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Pokemon System By Mkalo. If not, see <http://www.gnu.org/licenses/>.
]]--
local pokes = {
["Dragon"] = {level = 1, go = "Vai Dragon", back = "Volte Dragon."},
["Demon"] = {level = 8, go = "Vai Demon", back = "Volte Demon."},
["Dragon Lord"] = {level = 8, go = "Vai Dragon Lord", back = "Volte Dragon Lord."},
["Rat"] = {level = 8, go = "Vai Rat", back = "Volte Rat."},
}
local msgunica = false
function onUse(cid, item, frompos, item2, topos)
local maxh = tonumber(getItemAttribute(item.uid, "poke"):match("/(.+)]"))
local health = tonumber(getItemAttribute(item.uid, "poke"):match("%[(.-)/"))
if item.itemid == pokeout then
if health ~= nil and health <= 0 then
return doPlayerSendCancel(cid, "This pokemon is dead.")
end
if #getCreatureSummons(cid) >= 1 then
for _,z in pairs(getCreatureSummons(cid)) do
if getItemAttribute(item.uid, "poke"):find(getCreatureName(z)) then
doTransformItem(item.uid, pokein)
if msgunica then
doCreatureSay(cid, "Back, " .. getCreatureName(z), TALKTYPE_SAY)
else
doCreatureSay(cid, pokes[getCreatureName(z)].back, TALKTYPE_SAY)
end
doItemSetAttribute(item.uid, "poke", getItemAttribute(item.uid, "poke"):sub(1, findLetter(getItemAttribute(item.uid, "poke"), ".")) .. " HP = ["..getCreatureHealth(z).."/"..getCreatureMaxHealth(z).."]")
setPlayerStorageValue(cid, 61204, 0)
doSendMagicEffect(getCreaturePosition(z), 10)
return doRemoveCreature(z)
end
end
end
elseif item.itemid == pokein then
if getTilePzInfo(getCreaturePosition(cid)) then
return doPlayerSendCancel(cid, "You can't use pokeball in Protection Zones.")
end
if not canSummon(cid) then
return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHROOM)
end
if getPlayerStorageValue(cid, 63215) >= 1 then
return doPlayerSendCancel(cid, "You can't use pokeball while surfing.")
end
if getPlayerStorageValue(cid, 62314) >= 1 then
return doPlayerSendCancel(cid, "You can't use pokeball while flying.")
end
if getPlayerStorageValue(cid, 59987) >= 1 then
return doPlayerSendCancel(cid, "You can't use pokeball while riding.")
end
for i,x in pairs(pokes) do
if #getCreatureSummons(cid) >= 1 then
return doPlayerSendCancel(cid, "You already summoned a pokemon.")
end
if i == getItemAttribute(item.uid, "poke"):sub(9, findLetter(getItemAttribute(item.uid, "poke"), "'")-1) then
if getPlayerLevel(cid) >= x.level then
pk = doSummonCreature(i, getThingPosition(cid))
doConvinceCreature(cid, pk)
setCreatureMaxHealth(pk, tonumber(getItemAttribute(item.uid, "poke"):match("/(.+)]")))
doCreatureAddHealth(pk, maxh)
doCreatureAddHealth(pk, health-maxh)
doTransformItem(item.uid, pokeout)
if msgunica then
doCreatureSay(cid, "Go, " .. i, TALKTYPE_SAY)
else
doCreatureSay(cid, x.go, TALKTYPE_SAY)
end
doItemSetAttribute(item.uid, "poke", getItemAttribute(item.uid, "poke"):sub(1, findLetter(getItemAttribute(item.uid, "poke"), ".")))
doSendMagicEffect(getCreaturePosition(pk), 10)
setPlayerStorageValue(cid, 61204, 1)
registerCreatureEvent(pk, "DiePoke")
registerCreatureEvent(cid, "PlayerPokeDeath")
registerCreatureEvent(cid, "LogoutPoke")
break
else
doPlayerSendCancel(cid, "Only players level "..x.level.." or higher can use this pokemon.")
end
end
end
end
return TRUE
end
Depois, va em actions.xml e adicione a seguinte tag:
<action itemid="2222;2223" event="script" value="goback.lua"/>
Sendo que 2222 e 2223 são, respectivamente, o id da pokeball que ira "chamar" o pokemon, e o outro o id da pokeball que ira retirar o pokemon. (Seriam as pokebolas acesas e apagadas do PO)
Agora, para evitar alguns bugs, va em data/creaturescripts/scripts e crie um arquivo.lua com o nome goback.lua e bote o seguinte script dentro:
--[[
This file is part of Pokemon Systems by Mkalo.
Pokemon Systems by Mkalo is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Pokemon System By Mkalo is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Pokemon System By Mkalo. If not, see <http://www.gnu.org/licenses/>.
]]--
function onLogout(cid)
local health,maxhealth = getSummonLifes(cid)
if getPlayerStorageValue(cid, 61204) >= 1 and getPlayerStorageValue(cid, 63215) <= 0 and getPlayerStorageValue(cid, 62314) <= 0 and getPlayerStorageValue(cid, 59987) <= 0 then
setPlayerStorageValue(cid, 61205, health)
setPlayerStorageValue(cid, 61206, maxhealth)
setPlayerStorageValue(cid, 61204, 0)
setPlayerStorageValue(cid, 61207, 1)
end
if getPlayerStorageValue(cid, 62314) >= 1 then
pos = getCreaturePosition(cid)
for i = 1,8 do
doRemoveTile(getPosDirs(getCreaturePosition(cid), i))
end
doRemoveTile(getCreaturePosition(cid))
setPlayerStorageValue(cid, 61941, pos.x)
setPlayerStorageValue(cid, 61942, pos.y)
setPlayerStorageValue(cid, 61943, pos.z)
end
return TRUE
end
function onLogin(cid)
local pokes = {
["Dragon"] = {lookType=267, speed = 1500},
["Rat"] = {lookType=267, speed = 500},
}
local pokesfly = {
["Dragon"] = {lookType = 216, speed = 500},
}
local pokesride = {
["Dragon Lord"] = {lookType=4, speed = 3000},
["Dragon"] = {lookType=4, speed = 500},
}
if getPlayerStorageValue(cid, 62314) >= 1 then
doCreateTile(460, {x=getPlayerStorageValue(cid, 61941), y=getPlayerStorageValue(cid, 61942), z=getPlayerStorageValue(cid, 61943)})
doTeleportThing(cid, {x=getPlayerStorageValue(cid, 61941), y=getPlayerStorageValue(cid, 61942), z=getPlayerStorageValue(cid, 61943)})
for i = 1,8 do
doItem(getPosDirs(getCreaturePosition(cid), i), 65119+i)
end
local item = getPokeOutLive(cid)[1]
local a = getItemAttribute(item, "poke"):match("This is (.-)'s pokeball.")
doSetCreatureOutfit(cid, pokesfly[tostring(a)], -1)
doChangeSpeed(cid, pokesfly[tostring(a)].speed)
registerCreatureEvent(cid, "PlayerPokeDeath")
end
if getPlayerStorageValue(cid, 63215) >= 1 then
local item = getPokeOutLive(cid)[1]
local a = getItemAttribute(item, "poke"):match("This is (.-)'s pokeball.")
doSetCreatureOutfit(cid, pokes[tostring(a)], -1)
doChangeSpeed(cid, pokes[tostring(a)].speed)
registerCreatureEvent(cid, "PlayerPokeDeath")
end
if getPlayerStorageValue(cid, 59987) >= 1 then
local item = getPokeOutLive(cid)[1]
local a = getItemAttribute(item, "poke"):match("This is (.-)'s pokeball.")
doSetCreatureOutfit(cid, pokesride[tostring(a)], -1)
doChangeSpeed(cid, pokesride[tostring(a)].speed)
registerCreatureEvent(cid, "PlayerPokeDeath")
end
if getPlayerStorageValue(cid, 61207) >= 1 then
local item = getPokeOutLive(cid)[1]
doTransformItem(item, pokein)
doRemoveCondition(cid, CONDITION_OUTFIT)
doItemSetAttribute(item, "poke", getItemAttribute(item, "poke"):sub(#getItemAttribute(item, "poke")) ~= "]" and getItemAttribute(item, "poke") .. " HP = ["..getPlayerStorageValue(cid, 61205).."/"..getPlayerStorageValue(cid, 61206).."]" or getItemAttribute(item, "poke"))
setPlayerStorageValue(cid, 61207, 0)
end
return TRUE
end
function onDeath(cid, deathList)
local owner = getCreatureMaster(cid)
doPlayerSendTextMessage(owner, 22, "Your pokemon died.")
for slot = CONST_SLOT_FIRST, CONST_SLOT_LAST do
local item = getPlayerSlotItem(owner, slot)
if isContainer(item.uid) then
local items = getItemsInContainerById(item.uid, pokeout)
for _, ui in pairs(items) do
if getItemAttribute(ui, "poke"):sub(#getItemAttribute(ui, "poke")) == "." then
local maxh = tonumber(getItemAttribute(ui, "poke"):match("/(.+)]"))
doItemSetAttribute(ui, "poke", getItemAttribute(ui, "poke"):sub(1, findLetter(getItemAttribute(ui, "poke"), ".")) .. " HP = [0/"..getCreatureMaxHealth(cid).."]")
end
end
end
if item.itemid == pokeout then
if getItemAttribute(item.uid, "poke"):sub(#getItemAttribute(item.uid, "poke")) == "." then
local maxh = tonumber(getItemAttribute(item.uid, "poke"):match("/(.+)]"))
doItemSetAttribute(item.uid, "poke", getItemAttribute(item.uid, "poke"):sub(1, findLetter(getItemAttribute(item.uid, "poke"), ".")) .. " HP = [0/"..getCreatureMaxHealth(cid).."]")
end
end
end
doRemoveCreature(cid)
setPlayerStorageValue(owner, 61207, 0)
setPlayerStorageValue(owner, 61204, 0)
return FALSE
end
Agora adicione outro arquivo.lua na pasta data/creaturescripts/scripts com o nome de playerpdeath e bote esse script:
--[[
This file is part of Pokemon Systems by Mkalo.
Pokemon Systems by Mkalo is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Pokemon System By Mkalo is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Pokemon System By Mkalo. If not, see <http://www.gnu.org/licenses/>.
]]--
function onDeath(cid)
local health,maxhealth = getSummonLifes(cid)
if #getCreatureSummons(cid) >= 1 then
setPlayerStorageValue(cid, 61205, health)
setPlayerStorageValue(cid, 61206, maxhealth)
setPlayerStorageValue(cid, 61204, 0)
setPlayerStorageValue(cid, 61207, 1)
end
if getPlayerStorageValue(cid, 63215) >= 1 then
setPlayerStorageValue(cid, 61205, getPlayerStorageValue(cid, 61210))
setPlayerStorageValue(cid, 61206, getPlayerStorageValue(cid, 61209))
setPlayerStorageValue(cid, 61204, 0)
setPlayerStorageValue(cid, 63215, 0)
setPlayerStorageValue(cid, 61207, 1)
end
if getPlayerStorageValue(cid, 62314) >= 1 then
setPlayerStorageValue(cid, 61205, getPlayerStorageValue(cid, 61262))
setPlayerStorageValue(cid, 61206, getPlayerStorageValue(cid, 61263))
setPlayerStorageValue(cid, 61204, 0)
setPlayerStorageValue(cid, 62314, 0)
setPlayerStorageValue(cid, 61207, 1)
end
if getPlayerStorageValue(cid, 59987) >=1 then
setPlayerStorageValue(cid, 61205, getPlayerStorageValue(cid, 59988))
setPlayerStorageValue(cid, 61206, getPlayerStorageValue(cid, 59989))
setPlayerStorageValue(cid, 61204, 0)
setPlayerStorageValue(cid, 59987, 0)
setPlayerStorageValue(cid, 61207, 1)
end
return TRUE
end
Depois va em creaturescripts.xml e adicione as seguintes TAGS:
Vá em data/actions/scripts e adicione um arquivo.lua com o nome de catch.lua
Depois adicione o seguinte script dentro dele:
--[[
This file is part of Pokemon Systems by Mkalo.
Pokemon Systems by Mkalo is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Pokemon System By Mkalo is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Pokemon System By Mkalo. If not, see <http://www.gnu.org/licenses/>.
]]--
local pokes = {
["Dragon"] = {corpseid = 5973, chance = 100, health = 12200, maxhealth = 12200},
["Dragon Lord"] = {corpseid = 5984, chance = 100, health = 12200, maxhealth = 12200},
["Demon"] = {corpseid = 5995, chance = 100, health = 12200, maxhealth = 12200},
}
local time = 4 -- Tempo para mandar as mensagens e adiciona item
function onUse(cid, item, frompos, item2, topos)
for i,x in pairs(pokes) do
if item2.itemid == x.corpseid then
doRemoveItem(item.uid, 1)
doRemoveItem(item2.uid, 1)
if math.random(1,100) <= x.chance then
function add()
local s = doPlayerAddItem(cid, pokein)
doItemSetAttribute(s, "poke", "This is "..i.."'s pokeball. HP = ["..x.health.."/"..x.maxhealth.."]")
doItemSetAttribute(s, "description", "Contains a " .. i)
end
doSendMagicEffect(topos, 24)
addEvent(add, time*1000)
return addEvent(doPlayerSendTextMessage, time*1000, cid, 27, "You catch a " .. i .. ".")
else
addEvent(doPlayerSendTextMessage, time*1000, cid, 27, "Your pokeball broke.")
return doSendMagicEffect(topos, 23)
end
end
end
return TRUE
end
Sendo 2147, o id da sua pokebola para capturar pokemons (NAO A DE CHAMAR O POKEMON)
Npc Healler
By: MatheusMkalo
Vá em data/npc/scripts e adicione um arquivo.lua com o seguinte script:
--[[
This file is part of Pokemon Systems by Mkalo.
Pokemon Systems by Mkalo is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Pokemon System By Mkalo is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Pokemon System By Mkalo. If not, see <http://www.gnu.org/licenses/>.
]]--
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
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 creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
if msgcontains(msg, 'heal') then
if #getCreatureSummons(cid) >= 1 then
return selfSay('Voce precisa botar seus pokemons dentro da pokebola.', cid)
end
for slo = CONST_SLOT_FIRST, CONST_SLOT_LAST do
local item = getPlayerSlotItem(cid, slo)
if isContainer(item.uid) then
local items = getItemsInContainerById(item.uid, pokeout)
for i,x in pairs(items) do
local maxh = tonumber(getItemAttribute(x, "poke"):match("/(.+)]"))
doItemSetAttribute(x, "poke", getItemAttribute(x, "poke"):sub(1, findLetter(getItemAttribute(x, "poke"), ".")) .. " HP = ["..maxh.."/"..maxh.."]")
doTransformItem(x, pokein)
end
local items2 = getItemsInContainerById(item.uid, pokein)
for i,x in pairs(items2) do
local maxh = tonumber(getItemAttribute(x, "poke"):match("/(.+)]"))
doItemSetAttribute(x, "poke", getItemAttribute(x, "poke"):sub(1, findLetter(getItemAttribute(x, "poke"), ".")) .. " HP = ["..maxh.."/"..maxh.."]")
end
elseif item.itemid == pokeout or item.itemid == pokein then
local maxh = tonumber(getItemAttribute(item.uid, "poke"):match("/(.+)]"))
doItemSetAttribute(item.uid, "poke", getItemAttribute(item.uid, "poke"):sub(1, findLetter(getItemAttribute(item.uid, "poke"), ".")) .. " HP = ["..maxh.."/"..maxh.."]")
doTransformItem(item.uid, pokein)
end
end
selfSay('Pronto, voce e seus pokemons estao com a life maxima.', cid)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Depois va ate a pasta data/npc e adicione um arquivo.xml e bote isso dentro:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Pokemon Healer" script="pokehealer.lua" walkinterval="2000" floorchange="0">
<health now="100" max="100"/>
<look type="128" head="17" body="54" legs="114" feet="0" addons="2"/>
<parameters>
<parameter key="message_greet" value="Ola, diga {heal} para recuperar sua vida e a vida dos seus pokemons."/>
</parameters>
</npc>
Surf System
By: MatheusMkalo
Vá em data/actions/scripts e crie um arquivo.lua com o nome de surf e bote esse script dentro:
--[[
This file is part of Pokemon Systems by Mkalo.
Pokemon Systems by Mkalo is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Pokemon System By Mkalo is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Pokemon System By Mkalo. If not, see <http://www.gnu.org/licenses/>.
]]--
function onUse(cid, item, frompos, item2, topos)
local configs = {
[4647] = {x = -2, y = 0}, -- 4647 é o id da borda oeste (lado esquerdo do player)
[4645] = {x = 2, y = 0}, -- 4645 é o id da borda leste (lado direito do player)
[4646] = {x = 0, y = 2}, -- 4646 é o id da borda sul (abaixo do player)
[4644] = {x = 0, y = -2}, -- 4644 é o id da borda norte (acima do player)
}
local playerpos = getCreaturePosition(cid)
local pokes = {
["Dragon"] = {lookType=267, speed = 1500},
["Rat"] = {lookType=267, speed = 500},
}
if #getCreatureSummons(cid) <= 0 and getPlayerStorageValue(cid, 63215) <= 0 then
return doPlayerSendCancel(cid, "You need a pokemon to surf.")
end
l = false
for i,x in pairs(pokes) do
if getPlayerStorageValue(cid, 63215) <= 0 and i:lower() == getCreatureName(getCreatureSummons(cid)[1]):lower() then
l = true
end
end
if not l and getPlayerStorageValue(cid, 63215) <= 0 then
return doPlayerSendCancel(cid, "This pokemon can't surf.")
end
if getPlayerStorageValue(cid, 63215) <= 0 then
doTeleportThing(cid, {x=playerpos.x+configs[item2.itemid].x, y=playerpos.y+configs[item2.itemid].y, z=playerpos.z})
setPlayerStorageValue(cid, 63215, 1)
doSetCreatureOutfit(cid, pokes[getCreatureName(getCreatureSummons(cid)[1])], -1)
doCreatureSay(cid, "Let's surf, "..getCreatureName(getCreatureSummons(cid)[1]), 1)
setPlayerStorageValue(cid, 61209, getCreatureMaxHealth(getCreatureSummons(cid)[1]))
setPlayerStorageValue(cid, 61210, getCreatureHealth(getCreatureSummons(cid)[1]))
doChangeSpeed(cid, pokes[getCreatureName(getCreatureSummons(cid)[1])].speed)
doRemoveCreature(getCreatureSummons(cid)[1])
else
doTeleportThing(cid, {x=playerpos.x-configs[item2.itemid].x, y=playerpos.y-configs[item2.itemid].y, z=playerpos.z})
setPlayerStorageValue(cid, 63215, 0)
doRemoveCondition(cid, CONDITION_OUTFIT)
local item = getPokeOutLive(cid)[1]
doCreatureSay(cid, "Im tired of surf, " .. getItemAttribute(item, "poke"):match("This is (.-)'s pokeball."), 1)
pk = doSummonCreature(getItemAttribute(item, "poke"):match("This is (.-)'s pokeball."), getThingPosition(cid))
doConvinceCreature(cid, pk)
registerCreatureEvent(pk, "DiePoke")
registerCreatureEvent(cid, "PlayerPokeDeath")
registerCreatureEvent(cid, "LogoutPoke")
setCreatureMaxHealth(pk, getPlayerStorageValue(cid, 61209))
doCreatureAddHealth(pk, getPlayerStorageValue(cid, 61209))
doCreatureAddHealth(pk, getPlayerStorageValue(cid, 61210)-getPlayerStorageValue(cid, 61209))
doChangeSpeed(cid, getCreatureBaseSpeed(cid)-getCreatureSpeed(cid))
end
return TRUE
end
Ensinarei nos tutorias como adicionar novas bordas e botar cada pokemon com seu proprio outfit na agua.
OBS:Todos os scripts mudaram para implementar o surf, atualize-os
OBS2: Para funcionar o id da agua tem que ser 4820.
Para usar basta clicar na borda da agua.
Evolution System
By: MatheusMkalo
Vá em data/actions/scripts e adicione um script.lua com o nome de evolution.lua e bote esse script:
--[[
This file is part of Pokemon Systems by Mkalo.
Pokemon Systems by Mkalo is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Pokemon System By Mkalo is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Pokemon System By Mkalo. If not, see <http://www.gnu.org/licenses/>.
]]--
local pokes = {
["Dragon"] = {level = 1, evolution = "Dragon Lord", maxh = 2000},
}
local types = {
["Water"] = {itemid = 2277, "Horsea", "Goldeen", "Magikarp"},
["Venom"] = {itemid = 2278, "Zubat", "Ekans"},
["Thunder"] = {itemid = 2279, "Magnemite", "Pikachu"},
["Rock"] = {itemid = 2280, "Geodude", "Graveler"},
["Punch"] = {itemid = 2281, "Machop", "Machoke"},
["Leaf"] = {itemid = 2276, "Ivysaur"},
["Fire"] = {itemid = 2283, "Charmander", "Charmeleon", "Dragon"},
["Coccon"] = {itemid = 2284, "Caterpie", "Metapod"},
["Crystal"] = {itemid = 2285, "Dratini", "Dragonair"},
["Darkness"] = {itemid = 2286, "Gastly", "Haunter"},
["Earth"] = {itemid = 2287, "Cubone"},
["Enigma"] = {itemid = 2288, "Abra", "Kadabra"},
["Heart"] = {itemid = 2289, "Rattata", "Pidgey"},
["Ice"] = {itemid = 2290, "Seel"},
}
function onUse(cid, item, frompos, item2, topos)
for i,x in pairs(types) do
if item.itemid == x.itemid then
if isCreature(item2.uid) then
if isPlayerSummon(cid, item2.uid) then
if table.find(x, getCreatureName(item2.uid)) then
if getPlayerLevel(cid) >= pokes[getCreatureName(item2.uid)].level then
local pokeball = getPokeOutLive(cid)[1]
local slo = pokes[getCreatureName(item2.uid)].maxh
local sle = pokes[getCreatureName(item2.uid)].evolution
doItemSetAttribute(pokeball, "description", "Contains a " .. pokes[getCreatureName(item2.uid)].evolution)
doPlayerSendTextMessage(cid, 27, "Your "..getCreatureName(item2.uid).." evolued to a "..pokes[getCreatureName(item2.uid)].evolution)
doSendMagicEffect(topos, 18)
doItemSetAttribute(pokeball, "poke", "")
doItemSetAttribute(pokeball, "poke", "This is "..pokes[getCreatureName(item2.uid)].evolution.."'s pokeball. HP = ["..pokes[getCreatureName(item2.uid)].maxh.."/"..pokes[getCreatureName(item2.uid)].maxh.."]")
doRemoveCreature(item2.uid)
local pk = doSummonCreature(sle, topos)
registerCreatureEvent(pk, "DiePoke")
registerCreatureEvent(cid, "PlayerPokeDeath")
registerCreatureEvent(cid, "LogoutPoke")
doConvinceCreature(cid, pk)
setCreatureMaxHealth(pk, slo)
setPlayerStorageValue(cid, 61204, 1)
doCreatureAddHealth(pk, slo)
doRemoveItem(item.uid, 1)
break
else
return doPlayerSendCancel(cid, "You need to be level "..pokes[getCreatureName(item2.uid)].level.." or higher to use this stone in this pokemon.")
end
end
end
end
end
end
return TRUE
end
Vá em data/talkactions/scripts e adicione um arquivo.lua com o nome de fly e bote esse script:
--[[
This file is part of Pokemon Systems by Mkalo.
Pokemon Systems by Mkalo is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Pokemon Systems by Mkalo is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Pokemon Systems by Mkalo. If not, see <http://www.gnu.org/licenses/>.
]]--
function onSay(cid, words, param)
local pokes = {
["Dragon"] = {lookType = 216, speed = 500},
}
if #getCreatureSummons(cid) <= 0 and getPlayerStorageValue(cid, 62314) <= 0 then
doPlayerSendCancel(cid, "You need a pokemon to fly.")
end
if getPlayerStorageValue(cid, 62314) <= 0 and not pokes[getCreatureName(getCreatureSummons(cid)[1])] then
return doPlayerSendCancel(cid, "This pokemon can't fly.")
end
if getPlayerStorageValue(cid, 62314) <= 0 then
doSetCreatureOutfit(cid, pokes[getCreatureName(getCreatureSummons(cid)[1])], -1)
doChangeSpeed(cid, pokes[getCreatureName(getCreatureSummons(cid)[1])].speed)
setPlayerStorageValue(cid, 61263, getCreatureMaxHealth(getCreatureSummons(cid)[1]))
setPlayerStorageValue(cid, 61262, getCreatureHealth(getCreatureSummons(cid)[1]))
setPlayerStorageValue(cid, 62314, 1)
registerCreatureEvent(cid, "LogoutPoke")
doCreatureSay(cid, "Let's fly, "..getCreatureName(getCreatureSummons(cid)[1]), 1)
doRemoveCreature(getCreatureSummons(cid)[1])
local ppos = getCreaturePos(cid)
local newpos = {x=ppos.x, y=ppos.y, z = 0}
doCreateTile(460, newpos)
doTeleportThing(cid, newpos)
for i = 1,8 do
doItem(getPosDirs(getCreaturePosition(cid), i), 65119+i)
end
elseif getPlayerStorageValue(cid, 62314) >= 1 then
local ppos = getCreaturePosition(cid)
p = true
for i = 1,17 do
if getTileThingByPos({x=ppos.x, y=ppos.y, z=ppos.z+i}).itemid ~= 0 and not isWalkable({x=ppos.x, y=ppos.y, z=ppos.z+i}) then
p = false
break
end
if isWalkable({x=ppos.x, y=ppos.y, z=ppos.z+i}) then
l = ppos.z + i
break
end
end
if not p or getTileThingByPos({x=ppos.x, y=ppos.y, z=l}).itemid == 4820 then
return doPlayerSendCancel(cid, "You can't down in there.")
end
for i = 1,8 do
doRemoveTile(getPosDirs(getCreaturePosition(cid), i))
end
setPlayerStorageValue(cid, 62314, 0)
doTeleportThing(cid, {x=ppos.x, y=ppos.y, z=l})
doRemoveTile(ppos)
local item = getPokeOutLive(cid)[1]
pk = doSummonCreature(getItemAttribute(item, "poke"):match("This is (.-)'s pokeball."), getThingPosition(cid))
doConvinceCreature(cid, pk)
doCreatureSay(cid, "I'm tired of fly, "..getItemAttribute(item, "poke"):match("This is (.-)'s pokeball."), 1)
registerCreatureEvent(pk, "DiePoke")
registerCreatureEvent(cid, "PlayerPokeDeath")
setCreatureMaxHealth(pk, getPlayerStorageValue(cid, 61263))
doCreatureAddHealth(pk, getPlayerStorageValue(cid, 61263))
doCreatureAddHealth(pk, getPlayerStorageValue(cid, 61262)-getPlayerStorageValue(cid, 61263))
doChangeSpeed(cid, getCreatureBaseSpeed(cid)-getCreatureSpeed(cid))
doRemoveCondition(cid, CONDITION_OUTFIT)
end
return TRUE
end
Va em data/movements/scripts e crie um arquivo.lua com o nome de fly.lua e bote:
--[[
This file is part of Pokemon Systems by Mkalo.
Pokemon Systems by Mkalo is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Pokemon Systems by Mkalo is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Pokemon Systems by Mkalo. If not, see <http://www.gnu.org/licenses/>.
]]--
function onStepIn(cid, item, position, fromPosition)
local actions = {
[65120] = {del = {4,5,6}, add = {1,2,8}},
[65121] = {del = {8,7,6,5,4}, add = {8,1,2,3,4}},
[65122] = {del = {8,7,6}, add = {2,3,4}},
[65123] = {del = {2,1,8,7,6}, add = {6,5,4,3,2}},
[65124] = {del = {2,1,8}, add = {4,5,6}},
[65125] = {del = {8,1,2,3,4}, add = {8,7,6,5,4}},
[65126] = {del = {2,3,4}, add = {8,7,6}},
[65127] = {del = {6,5,4,3,2}, add = {6,7,8,1,2}},
}
local configs = actions[item.actionid]
for i = 1,8 do
if table.find(configs.del, i) then
doRemoveTile(getPosDirs(fromPosition, i))
end
doItem(getPosDirs(getCreaturePosition(cid), i), 65119+i)
end
return TRUE
end
Vá em talkactions/scripts e crie um arquivo.lua com o nome de ride e bote esse script:
--[[
This file is part of Pokemon Systems by Mkalo.
Pokemon Systems by Mkalo is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Pokemon Systems by Mkalo is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Pokemon Systems by Mkalo. If not, see <http://www.gnu.org/licenses/>.
]]--
function onSay(cid, words)
local pokesride = {
["Dragon Lord"] = {lookType=4, speed = 3000},
["Dragon"] = {lookType=4, speed = 500},
}
if #getCreatureSummons(cid) <= 0 and getPlayerStorageValue(cid, 59987) <= 0 then
return doPlayerSendCancel(cid, "You need a pokemon to ride.")
end
if not canSummon(cid) and getPlayerStorageValue(cid, 59987) >= 1 then
return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHROOM)
end
local sname = #getCreatureSummons(cid) >= 1 and getCreatureName(getCreatureSummons(cid)[1]) or nil
if sname ~= nil and pokesride[sname] and getPlayerStorageValue(cid, 59987) <= 0 then
doSetCreatureOutfit(cid, pokesride[sname], -1)
doChangeSpeed(cid, pokesride[sname].speed)
doCreatureSay(cid, "Let's ride, " .. sname, 1)
setPlayerStorageValue(cid, 59987, 1)
setPlayerStorageValue(cid, 59988, getCreatureHealth(getCreatureSummons(cid)[1]))
setPlayerStorageValue(cid, 59989, getCreatureMaxHealth(getCreatureSummons(cid)[1]))
doRemoveCreature(getCreatureSummons(cid)[1])
elseif getPlayerStorageValue(cid, 59987) >= 1 then
setPlayerStorageValue(cid, 59987, 0)
doRemoveCondition(cid, CONDITION_OUTFIT)
local item = getPokeOutLive(cid)[1]
doCreatureSay(cid, "Im tired of ride, " .. getItemAttribute(item, "poke"):match("This is (.-)'s pokeball."), 1)
pk = doSummonCreature(getItemAttribute(item, "poke"):match("This is (.-)'s pokeball."), getThingPosition(cid))
doConvinceCreature(cid, pk)
registerCreatureEvent(pk, "DiePoke")
registerCreatureEvent(cid, "PlayerPokeDeath")
registerCreatureEvent(cid, "LogoutPoke")
setCreatureMaxHealth(pk, getPlayerStorageValue(cid, 59989))
doCreatureAddHealth(pk, getPlayerStorageValue(cid, 59989))
doCreatureAddHealth(pk, getPlayerStorageValue(cid, 59988)-getPlayerStorageValue(cid, 59989))
doChangeSpeed(cid, getCreatureBaseSpeed(cid)-getCreatureSpeed(cid))
end
return TRUE
end
Pra usar o ride é so falar !ride. Para configurar os pokemons é praticamente igual ao surf.
Configurando os scripts
Como adicionar mais pokemons no go/back:
No inicio do script, tem essa tabela com as informaçoes:
Copie a ultima linha (vermelha) e cole logo abaixo, editando os nomes e as mensagens ficando assim:
Voce pode configurar o level para usar o poke mudando o valor de level.
Configurando pokemons para o catch:[/b]
Olhe a tabela no inicio do script:
Faça o mesmo processo do acima de copiar e colar embaixo e editar:
Aonde as informaçoes corpseid, chance, health, maxhealth serao, respectivamente: Id do corpo do monstro, Chance de capturar em %, health que o pokemon iria ir pro player, e health maxima que o poke iria ir para o player.
Como trocar os ids das pokebolas, acesas e apagadas.
Para trocar o id da pokebola "acesa" e "apagada" basta mudar os ids 2222,2223 na lib sendo que 2222 eh o da acesa e o 2223 eh o id da apagada
Mude tambem na tag do action.xml que seu script ira funcionar perfeitamente.
Como adicionar mais bordas ao surf.
Primeiramente va em actions.xml e adicione os ids das bordas na tag do surf: (Eu fiz com a borda de areia)
Depois va no script surf.lua em actions e repare nessa parte:
Copie todas as 4 bordas e cole abaixo ficando:
Depois mude os ids das bordas do lado << conforme as informaçoes do lado >>, ficando:
Como adicionar mais pokes ao surf:
Va no script surf.lua em actions e repare nessa parte:
Ai voce pode adicionar o pokemon pra surf e o outfit que ele vai te dar na agua copiando o de cima e colando logo abaixo e editando algumas coisas:
Lembre-se de depois que acabar de editar toda a tabela no surf.lua, va no goback.lua em creaturescripts e substitua a tabela pokes, pela que esta na actions surf.lua:
Como adicionar mais pokes no evolution:
Repare nessa parte do script evolution.lua em actions:
Bem voce deve copiar o primeiro monstro da tabela "pokes", e adicionar no final e mudar as configuraçoes:
Sendo level,evolution,maxh respectivamente, o level pra evoluir o poke, o nome da evoluçao, e a health maxima do pokemon evoluido.
Depois eh so adicionar o Nome do monstro que foi adicionado a tabela "pokes" na tabela "types", no lugar do type dele:
Como adicionar mais pokes no fly:
Repare nas partes iguais no fly.lua (talkaction) e no goback.lua(creaturescripts):
fly.lua:
goback.lua:
A unica coisa que mudou foi o nome da tabela, "pokes" e "pokesfly", para adicionar mais pokes no fly basta adicionar no fly.lua e botar igual no goback.lua.
Informaçoes Importantes!!!
Para testar o script de catch que esta no topico, voce deve deletar as tags de encantamento de armas.
Para poder summonar os pokemons com o go/back, voce precisa ir no arquivo.xml do monstro e editar essa linha:
Se estiver convinceable="0", mude para convinceable="1" ficando:
Creditos Especiais:
Kydrai pela funçao "getItemsInContainerById"
MarcelloMkez
Mock por algumas funçoes do fly system dele.
Agradecimentos:
D3rs00n (Me ajudou a fazer sumir o corpo do pokemon)
Julio Cezar (Ajudou reportando bugs e testando scripts)
Miih (Ajudou reportando bugs e testando scripts)
Arth3miS (Ajudou reportando bugs e testando scripts)
Ola Eks Tibianos, Vim postar um Script de Fly System dando Use em Um Item!!!
Voce esta se Perguntando!! Nummm Item????
Isso Mesmo!!
Talkaction Explicaçao:
/flyup = Verifica se tem o Piso itemid= 260 que é o Tile Invisivel e ve se nao tem nada acima para voce subir!!
/flydown = Verifica se tem tem algo que voce nao pode descer como arvores paredes e etc....
-------------
Action Explicaçao: Voce da Use no Item e Sobe a Cima no Tile! ou Descee!!
vá em Data>Actions>Scripts crie uma pasta.lua chamada actionfly e coloque isso:
local t = {
[150] = {outfit='dragon', text='Fly, dragon!', dtext='Go down, dragon!'} -- Falas
}
local thisCondition = createConditionObject(CONDITION_OUTFIT)
setConditionParam(thisCondition, CONDITION_PARAM_TICKS, -1)
addOutfitCondition(thisCondition, {lookType = 32, lookHead = 0, lookBody = 0, lookLegs = 0, lookFeet = 0}) -- Outfit
function onUse(cid, item, fromPosition, itemEx, toPosition)
local v, r, s = getCreaturePosition(cid), t[item.itemid], 100
local pos = {x = v.x, y = v.y, z = 6} ----- Onde ele Precisa para dar Down -- Pode Modificar do 0 ao 7
local posd = {x = v.x, y = v.y, z = 7} ---- Onde ele Precisa para Dar Up -- Pode Modificar do 7 ao 0
if r then
if v.z == 7 then
if getTileItemById(pos, 460).uid > 0 then -- id do tile
if doTeleportThing(cid, pos, false) then
doSendMagicEffect(pos, 10) -- efeito
doCreatureSay(cid, r.text, 19)
return doAddCondition(cid, thisCondition)
else
return doPlayerSendCancel(cid, 'You can\'t fly here.')
end
else
return doPlayerSendCancel(cid, 'You can\'t fly here.')
end
elseif v.z == 6 then
if doTeleportThing(cid, posd, false) then
doSendMagicEffect(posd, 10) -- efeito
doCreatureSay(cid, r.dtext, 19)
return doRemoveCondition(cid, CONDITION_OUTFIT)
else
return doPlayerSendCancel(cid, 'You can\'t land here.')
end
else
return doPlayerSendCancel(cid, 'You can\'t fly here.')
end
else
return doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE, 'There has been some error, try contacting a staff member.')
end
end
Ok Acabamos... Uffa agora vamos ao Action.xml Adicione Isso:
Vá em Data>Talkactions>Scripts crie uma pasta.lua chamada flyinfo e Adicione isso:
local s = {
{100}
}
local water = {4608,4609,4610,4611,4612,4613,4614,4615,4616,4617,4618,4619,4664,4665,4666,5757,5756,5755,5759,5760,5758,5761}
function onSay(cid,words,param)
for _,i in ipairs(s) do
local r = i[1]
local v = getThingPos(cid)
local up,down = {x=v.x,y=v.y,z=v.z-1},{x=v.x,y=v.y,z=v.z+1}
if words == '/flyup' then
if getPlayerStorageValue(cid,r) > 0 then
if getTileItemById(up,460).uid > 0 then
doPlayerSendTextMessage(cid,20,'[Flying] You have flown up.')
doSendMagicEffect(up,10)
doCreatureSay(cid,'Up!',19)
doTeleportThing(cid,up)
return doSendMagicEffect(up,10)
else
doPlayerSendTextMessage(cid,20,'[Flying] You can\'t fly here.')
end
else
doPlayerSendTextMessage(cid,20,'[Flying] You aren\'t mounted.')
return true
end
elseif words == '/flydown' then
if getPlayerStorageValue(cid,r) > 0 then
if v.z >= 7 == false then
if getHouseFromPos(down) == false then
if(getTileItemById(down,(isInArray(water,itemid)),false).uid) then
if getTileItemById(v,460).uid > 0 then
doPlayerSendTextMessage(cid,20,'[Flying] You have flown down.')
doSendMagicEffect(down,10)
doCreatureSay(cid,'Down!',19)
doTeleportThing(cid,down)
return doSendMagicEffect(down,10)
else
doPlayerSendTextMessage(cid,20,'[Flying] You can\'t fly into ground.')
end
else
doPlayerSendTextMessage(cid,20,'[Flying] You can\'t fly on water.')
end
else
doPlayerSendTextMessage(cid,20,'[Flying] This is a house!')
end
else
doPlayerSendTextMessage(cid,20,'[Flying] You can\'t fly into ground.')
end
else
doPlayerSendTextMessage(cid,20,'[Flying] You aren\'t mounted!')
return true
end
end
return true
end
end
Ufa, Agora vamos a Data>Talkactions.xml e Adicione Isso!!
Bom galera, é um sistema de go/back, catch , NPC heal
Meu sistema de ride funciona 100% com esse script do go/back...
-- GO/BACK--
~~> Crie um arquivo goback.lua em action/scripts e cole isso dentro:
function onUse(cid, item, fromPosition, itemEx, toPosition)
function getPokemonMaxLife(name)
local file = io.open('data/monster/monsters.xml','r')
local arquivo = file:read(-1):lower():match('<monster name="'..name:lower()..'" file="(.-)"/>')
file:close()
local data = io.open('data/monster/'..(arquivo or ''),'r')
if not data then
return 100
end
local maximo = data:read(-1):match('max%s*=%s*"(%d+)"')
data:close()
return maximo
end
----- Config -----
local MaximoSummon = 1
local nome1 = getItemName(item.uid)
local nome = nome1:match('(.-) Pokeball')
local summons = getCreatureSummons(cid)
local action_id = getItemAttribute(item.uid, "aid")
------ Config -----
local summons = getCreatureSummons(cid)
if item.uid ~= getPlayerSlotItem(cid, CONST_SLOT_FEET).uid then
doPlayerSendCancel(cid, "Coloque no slot certo!.")
return TRUE
end
if getItemAttribute(item.uid,"level") >= getPlayerLevel(cid) then
doPlayerSendCancel(cid, "You dont have level to use.")
return TRUE
end
if(table.maxn(summons) < MaximoSummon) then -- no summons
creature = doSummonCreature(nome, getCreaturePosition(cid))
doConvinceCreature(cid, creature)
local hp = getCreatureHealth(getCreatureSummons(cid)[1])
doItemSetAttribute(getPlayerSlotItem(cid,8).uid,"aid",hp)
doPlayerSay(cid, "Go,"..nome.."", TALKTYPE_SAY)
registerCreatureEvent(cid, "PlayerPokeDeath")
registerCreatureEvent(creature, "DiePoke")
doSendMagicEffect(getCreaturePosition(creature), 188)
doTransformItem(getPlayerSlotItem(cid,8).uid, 2531, 1)
doItemSetAttribute(getPlayerSlotItem(cid,8).uid,"name",""..nome.." Pokeball")
if action_id ~= 0 then
doCreatureAddHealth(creature, -(tonumber(getPokemonMaxLife(nome) - action_id)))
else
doCreatureAddHealth(creature, getPokemonMaxLife(nome))
end
else
for _, pid in ipairs(summons) do
if (table.maxn(summons) >= 1) then
doItemSetAttribute(item.uid, "aid", getCreatureHealth(summons[1]))
doSendMagicEffect(getCreaturePosition(creature), 188)
doPlayerSay(cid, "Back,"..nome.."", TALKTYPE_SAY)
doRemoveCreature(pid)
doTransformItem(getPlayerSlotItem(cid,8).uid, 2532, 1)
doItemSetAttribute(getPlayerSlotItem(cid,8).uid,"name", nome .." Pokeball")
end
end
end
return true
end
~~>Em actions/script crie um arquivo catch.lua e cole dentro:
local function capturou(params)
doSendMagicEffect(getCreaturePosition(params.cid), 173)
doPlayerSendTextMessage(params.cid, 25, 'Você capturou um pokemon! ('..params.monster..').')
item = doCreateItemEx(2520)
doItemSetAttribute(item, "name", ""..params.monster.." Pokeball")
doItemSetAttribute(item, "aid", params.hp)
doItemSetAttribute(item, "level", params.level)
doPlayerAddItemEx(params.cid, item, true)
end
local level = {
['chansey'] = 15, -- level minimo para usar o pokemon
['squirtle'] = 15, -- level minimo para usar o pokemon
['charmander'] = 15, -- level minimo para usar o pokemon
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
local monster = getItemName(itemEx.uid):match("dead (.*)")
if not monster then
return doPlayerSendCancel(cid, 'Sorry, use only pokemon dead') and doSendMagicEffect(fromPosition, 2)
end
ball = 2520
local hpmax = 0
if itemEx.itemid == 6008 then
if math.random(1,100) >= 1 then
doRemoveItem(itemEx.uid)
doSendMagicEffect(toPosition, 24)
doRemoveItem(item.uid, 1)
addEvent(capturou, 4000, {cid = cid, monster = monster, level = level[monster], ball = ball, hp = hpmax})
else
doRemoveItem(itemEx.uid)
doRemoveItem(item.uid, 1)
doSendMagicEffect(toPosition, 23)
end
elseif itemEx.itemid == 6010 then
if math.random(1,100) >= 1 then
doRemoveItem(itemEx.uid)
doSendMagicEffect(toPosition, 24)
doRemoveItem(item.uid, 1)
addEvent(capturou, 4000, {cid = cid, monster = monster, level = level[monster], ball = ball, hp = hpmax})
else
doRemoveItem(itemEx.uid)
doRemoveItem(item.uid, 1)
doSendMagicEffect(toPosition, 23)
end
end
return TRUE
end
~~Editando o Catch ~~
elseif itemEx.itemid == 6010 then
~>6010 é o id do corpo do pokemon que o script ira tentar capturar.
if math.random(1,100) >= 1 then
~>o 1 siginifica que ele tem 1% de chance de não capturar , que tem 99% de chance de captura, se for 10 tem 90%,se 20 tem 80%....
<~~~~~~~~~~> <~~~~~~~~~~>
E em actions.xml add isto:
<action itemid="xxxx" event="script" allowfaruse="10" value="catch.lua"/>
Em xxxx é o numero da pokeball que captura.
-- CREATURE SCRIPTS --
~~> Em creaturescripts/scripts crie um arquivo chamado goback.lua e cole isso dentro:
local pokein, pokeout = 2535,2531
function onDeath(cid, deathList)
local owner = getCreatureMaster(cid)
doPlayerSendTextMessage(owner, 21, "You pokemon died.")
local item = getPlayerItemById(owner, TRUE, pokeout)
doTransformItem(item.uid, pokein)
doRemoveCreature(cid)
return FALSE
end
~~> Agora na mesma pasta crie outro arquivo chamado morrer.lua e cole isso dentro:
local pokein, pokeout = 2532,2531
function getSummonLifes(cid)
for _,x in pairs(getCreatureSummons(cid)) do
return getCreatureHealth(x), getCreatureMaxHealth(x)
end
end
function onDeath(cid)
local health,maxhealth = getSummonLifes(cid)
if #getCreatureSummons(cid) >= 1 then
setPlayerStorageValue(cid, 61205, health)
setPlayerStorageValue(cid, 61206, maxhealth)
setPlayerStorageValue(cid, 61204, 0)
setPlayerStorageValue(cid, 61207, 1)
end
if getPlayerStorageValue(cid, 63215) >= 1 then
setPlayerStorageValue(cid, 61205, getPlayerStorageValue(cid, 61210))
setPlayerStorageValue(cid, 61206, getPlayerStorageValue(cid, 61209))
setPlayerStorageValue(cid, 61204, 0)
setPlayerStorageValue(cid, 61207, 1)
end
return TRUE
end
Em npc/scripts crie um arquivo chamado heal.lua e cole isso:
local focus = 0
local talk_start = 0
local target = 0
local following = false
local attacking = false
dofile("data/actions/scripts/reviver.lua")
function onThingMove(creature, thing, oldpos, oldstackpos, item, itemEx)
end
function onCreatureAppear(creature)
end
function onCreatureDisappear(cid, pos)
if focus == cid then
selfSay('Good bye then.')
focus = 0
talk_start = 0
end
end
function getPokemonMaxLife(name)
local file = io.open('data/monster/monsters.xml','r')
local arquivo = file:read(-1):lower():match('<monster name="'..name:lower()..'" file="(.-)"/>')
file:close()
local data = io.open('data/monster/'..(arquivo or ''),'r')
if not data then
return 100
end
local maximo = data:read(-1):match('max%s*=%s*"(%d+)"')
data:close()
return maximo
end
function onCreatureTurn(creature)
end
function msgcontains(txt, str)
return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end
function onCreatureSay(cid, type, msg)
msg = string.lower(msg)
if (msgcontains(msg, 'hi') and focus == 0) and getDistanceToCreature(cid) < 4 then
local idballs = {
[2535] = {"Pokeball"},
[2531] = {"Pokeball"},
[2532] = {"Pokeball"},
}
local balls = idballs[getPlayerSlotItem(cid,8).itemid]
if #getCreatureSummons(cid) >= 1 then
return selfSay('Voce precisa botar seus pokemons dentro da pokebola.', cid)
end
if balls == nill then
return selfSay('Coloque seu pokemon slot da Pokeball para ele ser curado!!')
end
if balls ~= nill then
local nome = getItemName(getPlayerSlotItem(cid,8).uid)
local poke_name = nome:match('(.-) Pokeball')
doItemSetAttribute(getPlayerSlotItem(cid,8).uid, "aid", getPokemonMaxLife(poke_name))
if getPlayerStorageValue(cid, 5555) == 0 then
setPlayerStorageValue(cid, 5555, 1)
end
local hp = getCreatureMaxHealth(cid)
doCreatureAddHealth(cid, hp)
selfSay('Você e seu pokemon estão curados!!')
elseif focus == cid then
talk_start = os.clock()
if msgcontains(msg, 'healing') then
end
elseif msgcontains(msg, 'bye') and getDistanceToCreature(cid) < 4 then
selfSay('Volte Sempre,')
focus = 0
talk_start = 0
end
end
end
function onCreatureChangeOutfit(creature)
end
function onThink()
if (os.clock() - talk_start) > 20 then
if focus > 0 then
end
focus = 0
end
if focus ~= 0 then
if getDistanceToCreature(focus) > 5 then
selfSay('Bye.')
focus = 0
end
end
end
E no em npc crie um arquivo chamado heal.xml e cole isto dentro:
AAh, já ia me esquecendo, volte em actions/scripts crie um arquivo chamado reviver.lua e cole isso dentro:
function onUse(cid, item, fromPosition, itemEx, toPosition)
function getPokemonMaxLife(name)
local file = io.open('data/monster/monsters.xml','r')
local arquivo = file:read(-1):lower():match('<monster name="'..name:lower()..'" file="(.-)"/>')
file:close()
local data = io.open('data/monster/'..(arquivo or ''),'r')
if not data then
return 100
end
local maximo = data:read(-1):match('max%s*=%s*"(%d+)"')
data:close()
return maximo
end
----- Config -----
local MaximoSummon = 1
local nome = getItemName(item.uid)
local poke_name = nome:match('(.-) Pokeball')
local summons = getCreatureSummons(cid)
local action_id = getItemAttribute(item.uid, "aid")
----- Config -----
local summons = getCreatureSummons(cid)
if item.uid ~= getPlayerSlotItem(cid, CONST_SLOT_FEET).uid then
doPlayerSendCancel(cid, "Sorry, you must put your pokeball in the right place.")
return TRUE
end
if getPlayerStorageValue(cid, 5555) == 1 then
setPlayerStorageValue(cid, 5555, 0)
doTransformItem(item.uid, 2531)
doItemSetAttribute(item.uid, "aid", getPokemonMaxLife(poke_name))
else
doPlayerSendCancel(cid, "You poke are Dead.")
end
return true
end
E no actions.xml add isto:
<action itemid="2535" event="script" value="reviver.lua"/>
-------> FIM <-------