Ir para conteúdo
Faça parte da equipe! (2024) ×
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

Scripts Pokemon System para OTServ


LucasAurelio
 Compartilhar

Posts Recomendados

Antes de tudo, va na pasta data/lib e adicione um script.lua com o nome de pokeLib e adicione isso:

 

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)

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

 

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:

 

 

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:

 

 

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:

 

 

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:

 

<event type="death" name="PlayerPokeDeath" event="script" value="playerpdeath.lua"/>

<event type="death" name="DiePoke" event="script" value="goback.lua"/>

<event type="logout" name="LogoutPoke" event="script" value="goback.lua"/>

<event type="login" name="LoginPoke" event="script" value="goback.lua"/>

 

 

Catch Pokemon System

 

By: LucasAurelio

 

Vá em data/actions/scripts e adicione um arquivo.lua com o nome de catch.lua

Depois adicione o seguinte script dentro dele:

 

 

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

 

 

 

Depois adicione a seguinte TAG no actions.xml

 

<action itemid="2147" event="script" value="catch.lua"/>

 

Sendo 2147, o id da sua pokebola para capturar pokemons (NAO A DE CHAMAR O POKEMON)

 

 

Npc Healler

 

By: LucasAurelio

 

 

Vá em data/npc/scripts e adicione um arquivo.lua com o seguinte script:

 

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: LucasAurelio

 

Vá em data/actions/scripts e crie um arquivo.lua com o nome de surf e bote esse script dentro:

 

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

 

Depois va em actions.xml e adicione essa tag:

 

<action itemid="4647;4645;4646;4644" event="script" value="surf.lua"/>

 

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: LucasAurelio

 

 

Vá em data/actions/scripts e adicione um script.lua com o nome de evolution.lua e bote esse script:

 

local pokes = {

["Dragon"] = {level = 1, evolution = "Dragon Lord", maxh = 2000},

}

 

local types = {

["Water"] = {itemid = 2277, "Horsea", "Goldeen", "Magikarp"},

["Venom"] = {itemid = 2278, "Zubat", "Ekans"},

["*******"] = {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

 

 

Depois vá em actions.xml e adicione esta tag:

 

<action itemid="2276;2277;2278;2279;2280;2281;2283;2284;2285;2286;2287;2288;2289;2290" event="script" value="evolution.lua" allowfaruse="1"/>

 

Fly System

 

By: MatheusMkalo, Credits: Mock

 

 

Vá em data/talkactions/scripts e adicione um arquivo.lua com o nome de fly e bote esse script:

 

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

 

 

Depois bote essa tag no talkaction.xml:

 

<talkaction words="!fly" event="script" value="fly.lua"/>

 

Va em data/movements/scripts e crie um arquivo.lua com o nome de fly.lua e bote:

 

 

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

 

 

Depois va em movements.xml e adicione essa tag:

 

<movevent type="StepIn" actionid="65120;65121;65122;65123;65124;65125;65126;65127" event="script" value="fly.lua"/>

 

Para usar o fly diga !fly para descer e subir

 

 

Ride System

 

By: MatheusMkalo e LucasAurelio

 

Vá em talkactions/scripts e crie um arquivo.lua com o nome de ride e bote esse script:

 

 

 

 

 

 

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

 

Agora bote essa tag em talkactions.xml:

 

<talkaction words="!ride" event="script" value="ride.lua"/>

 

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:

 

local pokes = {

["Dragon"] = {level = 150, msgs = {"Essa mensagem pode ser sortiada 1", "Essa mensagem pode ser sortiada 2"}},

["Demon"] = {level = 500, msgs = {"Essa mensagem pode ser sortiada 1", "Essa mensagem pode ser sortiada 2"}},

["Dragon Lord"] = {level = 300, msgs = {"Essa mensagem pode ser sortiada 1", "Essa mensagem pode ser sortiada 2"}},

}

 

Copie a ultima linha (vermelha) e cole logo abaixo, editando os nomes e as mensagens ficando assim:

 

local pokes = {

["Dragon"] = {level = 150, msgs = {"Essa mensagem pode ser sortiada 1", "Essa mensagem pode ser sortiada 2"}},

["Demon"] = {level = 500, msgs = {"Essa mensagem pode ser sortiada 1", "Essa mensagem pode ser sortiada 2"}},

["Dragon Lord"] = {level = 300, msgs = {"Essa mensagem pode ser sortiada 1", "Essa mensagem pode ser sortiada 2"}},

["Dragon Lord"] = {level = 300, msgs = {"Essa mensagem pode ser sortiada 1", "Essa mensagem pode ser sortiada 2"}},

}

 

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:

 

local pokes = {

["Dragon"] = {corpseid = 5973, chance = 100, health = 12200, maxhealth = 12200},

["Dragon Lord"] = {corpseid = 2881, chance = 100, health = 12200, maxhealth = 12200},

["Demon"] = {corpseid = 5995, chance = 100, health = 12200, maxhealth = 12200},

}

 

Faça o mesmo processo do acima de copiar e colar embaixo e editar:

 

ocal pokes = {

["Dragon"] = {corpseid = 5973, chance = 100, health = 12200, maxhealth = 12200},

["Dragon Lord"] = {corpseid = 2881, chance = 100, health = 12200, maxhealth = 12200},

["Demon"] = {corpseid = 5995, chance = 100, health = 12200, maxhealth = 12200},

["Demon"] = {corpseid = 5995, chance = 100, health = 12200, maxhealth = 12200},

}

 

 

 

 

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)

 

<action itemid="4647;4645;4646;4644;4632;4633;4634;4635" event="script" value="surf.lua"/>

 

 

 

Depois va no script surf.lua em actions e repare nessa parte:

 

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)

}

 

Copie todas as 4 bordas e cole abaixo ficando:

 

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)

 

[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)

}

 

 

Depois mude os ids das bordas do lado << conforme as informaçoes do lado >>, ficando:

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)

 

[4633] = {x = -2, y = 0}, -- 4647 é o id da borda oeste (lado esquerdo do player)

[4635] = {x = 2, y = 0}, -- 4645 é o id da borda leste (lado direito do player)

[4634] = {x = 0, y = 2}, -- 4646 é o id da borda sul (abaixo do player)

[4632] = {x = 0, y = -2}, -- 4644 é o id da borda norte (acima do player)

}

 

Como adicionar mais pokes ao surf:

Va no script surf.lua em actions e repare nessa parte:

 

local pokes = {

["Dragon"] = {lookType=267, speed = 1500},

["Rat"] = {lookType=267, speed = 300},

}

 

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:

 

local pokes = {

["Dragon"] = {lookType=267, speed = 1500},

["Rat"] = {lookType=267, speed = 300},

["Demon"] = {lookType=268, speed = 600},

}

 

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:

 

 

...

function onLogin(cid)

local pokes = {

["Dragon"] = {lookType=267, speed = 1500},

["Rat"] = {lookType=267, speed = 300},

["Demon"] = {lookType=268, speed = 600},

}

 

if getPlayerStorageValue(cid, 63215) >= 1 then

local item = getPlayerItemById(cid, TRUE, pokeout)

local a = getDescription(item.uid):match("This is (.-)'s pokeball.")

doSetCreatureOutfit(cid, pokes[tostring(a)], -1)

end...

 

Como adicionar mais pokes no evolution:

Repare nessa parte do script evolution.lua em actions:

 

local pokes = {

["Dragon"] = {level = 1, evolution = "Dragon Lord", maxh = 2000},

}

 

local types = {

["Water"] = {itemid = 2277, "Horsea", "Goldeen", "Magikarp"},

["Venom"] = {itemid = 2278, "Zubat", "Ekans"},

["*******"] = {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"},

}

 

Bem voce deve copiar o primeiro monstro da tabela "pokes", e adicionar no final e mudar as configuraçoes:

 

local pokes = {

["Dragon"] = {level = 1, evolution = "Dragon Lord", maxh = 2000},

["Bulbasaur"] = {level = 30, evolution = "Ivysaur", maxh = 4000},

}

 

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:

 

local types = {

["Water"] = {itemid = 2277, "Horsea", "Goldeen", "Magikarp"},

["Venom"] = {itemid = 2278, "Zubat", "Ekans"},

["*******"] = {itemid = 2279, "Magnemite", "Pikachu"},

["Rock"] = {itemid = 2280, "Geodude", "Graveler"},

["Punch"] = {itemid = 2281, "Machop", "Machoke"},

["Leaf"] = {itemid = 2276, "Ivysaur", "Bulbasaur"},

["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"},

}

 

Como adicionar mais pokes no fly:

Repare nas partes iguais no fly.lua (talkaction) e no goback.lua(creaturescripts):

 

fly.lua:

 

 

local pokein, pokeout = 2222,2223

function onSay(cid, words, param)

local pokes = {

["Dragon"] = {lookType = 216, speed = 500},

}

 

 

goback.lua:

 

function onLogin(cid)

local pokes = {

["Dragon"] = {lookType=267, speed = 1500},

["Rat"] = {lookType=267, speed = 500},

}

 

local pokesfly = {

["Dragon"] = {lookType = 216, speed = 500},

}

 

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:

 

<flag convinceable="0"/>

 

Se estiver convinceable="0", mude para convinceable="1" ficando:

 

<flag convinceable="1"/>

 

Creditos Especiais:

Kydrai pela funçao "getItemsInContainerById"

MarcelloMkez

Mock por algumas funçoes do fly system dele.

LucasAurelio (eu) pela postagem e pelo trabalho do tópico e alguns scripts

 

 

 

Bugs, erros, duvidas, elogios no topico

 

 

Demonstraçao :

 

 

Link para o comentário
Compartilhar em outros sites

Haaam?

Isso quebra a cabeça de qualquer um to com derrame celebral de tentar entender oque está escrito.

Coloque cores,organize, coloque a tag

É necessário se cadastrar para acessar o conteúdo.

Tente deixar bem organizadinho se quiser agradecimentos e parabéns.[/font][/color][/b]

kko1F7P.gif

Ouma é v1ad0
Link para o comentário
Compartilhar em outros sites

Haaam?

Isso quebra a cabeça de qualquer um to com derrame celebral de tentar entender oque está escrito.

Coloque cores,organize, coloque a tag

É necessário se cadastrar para acessar o conteúdo.

Tente deixar bem organizadinho se quiser agradecimentos e parabéns.[/font][/color][/b]

 

Já Editei :D

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.