Ir para conteúdo

Boost System Pokemon (Summon)


Flaah

Posts Recomendados

Ola galera do XTibia, estou com um projeto sério do pokemon que teve como inicio no ZERO.. bom até agora estava indo blzura, so que agora estou com um probleminha com um Boost system irado que o usuario @LuckOake fez e posto aqui, bom o problema seria:

Quando do uso a boost stone no limite de uso (5 veses), depois do Go/Back, ele volta a (boostar) o pokemon mesmo ja tendo limite de uso da stone, e começa a contagem do level denoovo.. por causa desse bug, o player pode (boostar) o pokemon até o infinito e além.. isso deixaria o OT um lixo kk' xD

Bom abaixo deixarei o Go/Back e o Sistema de Boost feito pelo @LuckOake

 

Go/Back:

local pokes = {
["Caterpie"] = {level = 1, go = "Caterpie, eu escolho você!", back = "Caterpie, bom trabalho. Volte!"},
["Metapod"] = {level = 1, 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
doPlayerSendTextMessage(cid, 25, "@$CloseAttackWindow")
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), 70)
doPlayerSendTextMessage(cid, 25, "@$CloseAttackWindow")
return doRemoveCreature(z)
end
end
end

elseif item.itemid == pokein then

if getTilePzInfo(getCreaturePosition(cid)) then
doPlayerSendTextMessage(cid, 25, "@$CloseAttackWindow")
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
doPlayerSendTextMessage(cid, 25, "@$CloseAttackWindow")
return doPlayerSendCancel(cid, "You can't use pokeball while surfing.")
end

if getPlayerStorageValue(cid, 62314) >= 1 then
doPlayerSendTextMessage(cid, 25, "@$CloseAttackWindow")
return doPlayerSendCancel(cid, "You can't use pokeball while flying.")
end

if getPlayerStorageValue(cid, 59987) >= 1 then
doPlayerSendTextMessage(cid, 25, "@$CloseAttackWindow")
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("/(.+)]")))
loadCdbar(cid)
doCreatureSetSkullType(pk, getItemAttribute(item.uid, "pokesex"))
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), 70)
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

 

 

Boost System:

<?xml version="1.0" encoding="ISO-8859-1"?>
<mod name="Summon Boost System" version="2.0" author="LuckOake" contact="none" enabled="yes">
-----------------------------------------------------------------------
<config name="boost"><![CDATA[
bstor = 17824 -- Storage do boost
percent = 20 -- Quantos por cento a vida do summon aumentará ao receber o Boost
maxboost = 5 -- Level máximo de boosting

function isSummon(cid)
return isMonster(cid) and isPlayer(getCreatureMaster(cid))
end

function getBoostingLevel(cid)
return getCreatureStorage(cid, bstor) == -1 and 0 or getCreatureStorage(cid, bstor)
end

function doCreatureBoost(cid, levels)
for i = 1, levels do
setCreatureMaxHealth(cid, getCreatureMaxHealth(cid)*(percent/50+1))
end
doCreatureAddHealth(cid, getCreatureMaxHealth(cid))
return doCreatureSetStorage(cid, bstor, getBoostingLevel(cid)+levels)
end
]]></config>
-----------------------------------------------------------------------
<action itemid="132" allowfaruse="1" event="script"><![CDATA[
domodlib('boost')
local pos = getCreaturePos(itemEx.uid)

if not isSummon(itemEx.uid) then
doPlayerSendCancel(cid, "You can only boost a summon.") return true
elseif getCreatureMaster(itemEx.uid) ~= cid then
doPlayerSendCancel(cid, "You can only boost your own summon.") return true
elseif getBoostingLevel(itemEx.uid) >= maxboost then
doPlayerSendCancel(cid, "Your summon is already at the max boosting level ("..maxboost..").") return true
end

doCreatureBoost(itemEx.uid, 1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You've boosted your "..getCreatureName(itemEx.uid)..". It's boosting level is now "..getBoostingLevel(itemEx.uid)..".")
doSendAnimatedText(pos, "BOOST +"..tostring(getBoostingLevel(itemEx.uid)), TEXTCOLOR_YELLOW)
registerCreatureEvent(itemEx.uid, "AttackBoost")
doSendDistanceShoot(getCreaturePos(cid), pos, 3)
doSendMagicEffect(getCreaturePos(itemEx.uid), 36)
doRemoveItem(item.uid, 1)
return true
]]></action>
-----------------------------------------------------------------------
<event type="attack" name="AttackBoost" event="script"><![CDATA[
function onAttack(cid, target)
registerCreatureEvent(target, "StatsBoost")
return true
end
]]></event>
-----------------------------------------------------------------------
<event type="statschange" name="StatsBoost" event="script"><![CDATA[
local overflow_protection = {}

function onStatsChange(cid, attacker, type, combat, value)
domodlib('boost')
if type == STATSCHANGE_HEALTHLOSS and value >= 1 then
if overflow_protection[attacker] then
overflow_protection[attacker] = nil
return true
end

local dmg = math.floor(value*(getBoostingLevel(attacker)/50+1))
overflow_protection[attacker] = true
doPlayerSendTextMessage(getCreatureMaster(attacker), MESSAGE_STATUS_DEFAULT, "Your "..getCreatureName(attacker).." deals "..dmg-value.." boost damage to "..(getMonsterInfo(getCreatureName(cid)).description)..".")
doTargetCombatHealth(attacker, cid, combat, -dmg, -dmg, CONST_ME_NONE)
return false
end
return true
end
]]></event>
</mod>

 

 

Bom é isso, VALENDO +REP

Link para o comentário
Compartilhar em outros sites

Área incorreta, tópico movido. Mais cuidado da próxima vez.

PS: Para pedidos e/ou dúvidas relacionados à servidores derivados (como Pokémon, no seu caso), opte por postar em Pedidos e dúvidas - Servidores derivados.

Link para o comentário
Compartilhar em outros sites

como eh do "0" n vou poder ter certeza dessa resposta mais vamos tenta né ;P

bom o pokemon do brun123 posteriormente editado por slicer, tem varios atributos incluidos no item, pelo que intendi vc n tem nos pokemons a tabela "boost" isso não eh simplesmente setado por storage, precisa de bastante configuração em cima...

pra corrigir vc tem q refazer a programação sendo adequada a seu servidor, ou procurar as functions certas para uso dele...

 

espero que tenha ajudado...

Link para o comentário
Compartilhar em outros sites

Mais o Boost System dele é de OTServer comum.

 

Minha duvida mesmo é registrar a storage no Go/Back, pra n resertar o boost system quando chamar e colocar pra fora o pokemon.

Aé meu ot n tem base com nenhum otserver de pokemon, meu ot é de tibia puro, por isso o zero kkkk, mais tenho a soucer do tibia puro 8.54.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...