Ir para conteúdo
  • Cadastre-se

[PEDIDO] Transform ditto


Posts Recomendados

Bom, vou ensinar como fazer um ditto system igual pxg, ou seja, clona tipo(fire, water...), habilidades...

Ex: se eu clonar um charizard, ele fica tipo fire/flying, e eu posso usar fly...

 

CLIQUE NO BOTÃO A BAIXO PARA ABRIR O TUTORIAL

 

Vamos lá.

Adicionando script no order.lua(data/actions/scripts).

Substituia:

 

 


-------- TRANSFORM ---------- --alterado v1.7
if (getCreatureName(mysum) == "Ditto" or getCreatureName(mysum) == "Shiny Ditto") and isMonster(item2.uid) and pokes[getCreatureName(item2.uid)] then
if item2.uid == mysum then --edited
if isTransformed(mysum) then
deTransform(mysum, getItemAttribute(thisball.uid, "transTurn"))
markPos(mysum, unfix)
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["untransform"][math.random(1, #txt["untransform"])].."", 1)
if useKpdoDlls then
doUpdateMoves(cid) --alterado v1.9
end
return true
end
doPlayerSendCancel(cid, "Your ditto is not transformed.")
markPos(mysum, unfix)
return true
end

if getCreatureName(item2.uid) == "Ditto" or getCreatureName(item2.uid) == "Shiny Ditto" then --edited transform for shiny ditto
doPlayerSendCancel(cid, "Your ditto can't transform into another ditto.")
markPos(mysum, unfix)
return true
end

if getCreatureName(item2.uid) == getPlayerStorageValue(mysum, 1010) then
doPlayerSendCancel(cid, "Your ditto is already transformed into that pokemon.")
markPos(mysum, unfix)
return true
end

local cd = getCD(thisball.uid, "trans", 40)

if cd > 0 then
doPlayerSendCancel(cid, "Your pokemon is too tired to transform again. Cooldown: ("..getStringmytempo(cd)..")")
return true
end

if getHappiness(mysum) <= 50 then
doSendMagicEffect(getThingPos(mysum), happinessRate[1].effect)
markPos(mysum, unfix)
return true
end

local turn = getItemAttribute(thisball.uid, "transTurn")

if not turn or turn > 10 then
doItemSetAttribute(thisball.uid, "transTurn", 0)
else
doItemSetAttribute(thisball.uid, "transTurn", turn + 1)
end

local time = 140 + 2 * getPokemonLevel(mysum)

turn = getItemAttribute(thisball.uid, "transTurn")

markPos(mysum, unfix)
setPlayerStorageValue(mysum, 1010, getCreatureName(item2.uid))
doSetCreatureOutfit(mysum, {lookType = getPokemonXMLOutfit(getCreatureName(item2.uid))}, -1) --alterado v1.8
addEvent(deTransform, time * 1000, mysum, turn)
doSendMagicEffect(getThingPos(mysum), 184)
doCreatureSay(mysum, "TRANSFORM!", TALKTYPE_MONSTER)
local name = getCreatureName(item2.uid)
setCD(thisball.uid, "trans", 40)
doItemSetAttribute(thisball.uid, "transBegin", os.clock())
doSetItemAttribute(thisball.uid, "transLeft", time)
doSetItemAttribute(thisball.uid, "transOutfit", getPokemonXMLOutfit(getCreatureName(item2.uid))) --alterado v1.8
doSetItemAttribute(thisball.uid, "transName", getCreatureName(item2.uid))
doFaceCreature(mysum, getThingPos(item2.uid))
doPlayerSay(cid, ""..getPokeName(mysum)..", transform into "..getArticle(name).." "..name.."!", 1)

if useKpdoDlls then
doUpdateMoves(cid) --alterado v1.6
end

if dittoCopiesStatusToo then
setPlayerStorageValue(mysum, 1001, dittoBonus*getOffense(item2.uid))
setPlayerStorageValue(mysum, 1002, dittoBonus*getDefense(item2.uid))
setPlayerStorageValue(mysum, 1003, getSpeed(item2.uid))
setPlayerStorageValue(mysum, 1004, dittoBonus*getVitality(item2.uid))
setPlayerStorageValue(mysum, 1005, dittoBonus*getSpecialAttack(item2.uid))
------------------
local pct = getCreatureHealth(mysum) / getCreatureMaxHealth(mysum)
local vit = (getVitality(mysum) * getMasterLevel(mysum)) / 100
setCreatureMaxHealth(mysum, ( vit * HPperVITsummon )) --alterado v1.6
doCreatureAddHealth(mysum, pct * vit * HPperVITsummon)
end

return true
end

 

por:: 

 

 


-------- TRANSFORM ---------- --alterado v1.7
if (getCreatureName(mysum) == "Ditto") and getItemAttribute(thisball.uid, "ehditto") ~= -1 and isMonster(item2.uid) and pokes[getCreatureName(item2.uid)] then
local m = getCreatureMaster(cid)
local p = getPlayerSlotItem(m, 8)
local proibidossempre = {"Celebi", "Moltres", "Zapdos", "Suicune", "Entei", "Raikou", "Suicune", "Lugia", "Mewtwo", "Mew", "Shiny Rhydon", "Shiny Ariados", "Shiny Magneton", "Shiny Ninetales", "Shiny Politoed", "Shiny Stantler", "Shiny Dodrio", "Shiny Espeon", "Shiny Umbreon"} -- Nunca permitir
local proibidosboost = {"Shiny Dragonite", "Shiny Snorlax", "Shiny Gyarados", "Shiny Scyther"} -- Permitir se ditto for +50
local boost = getItemAttribute(thisball.uid, "boost") or 0
if getCreatureName(item2.uid) == "Ditto" or getCreatureName(item2.uid) == "Shiny Ditto" then
doPlayerSendCancel(cid, "Your ditto can't transform into another ditto.")
markPos(mysum, unfix)
return true
end
if isInArray(proibidossempre, getCreatureName(item2.uid)) then --Checa a lista
doPlayerSendCancel(cid, "Your ditto can't transform into that pokemon.")
markPos(mysum, unfix)
return true
end
if isInArray(proibidosboost, getCreatureName(item2.uid)) and boost < 50 then --Checa a lista
doPlayerSendCancel(cid, "Your ditto can't transform into that pokemon.")
markPos(mysum, unfix)
return true
end

if getCreatureName(item2.uid) == getPlayerStorageValue(mysum, 1010) then
doPlayerSendCancel(cid, "Your ditto is already transformed into that pokemon.")
markPos(mysum, unfix)
return true
end
markPos(mysum, unfix)
local name = getCreatureName(item2.uid)
setPlayerStorageValue(mysum, 1010, getCreatureName(item2.uid))
doItemSetAttribute(thisball.uid, "ehditto", 1)
doItemSetAttribute(thisball.uid, "poke", getCreatureName(item2.uid))
doUpdateMoves(cid)
doSetCreatureOutfit(mysum, getCreatureOutfit(item2.uid), -1)
doCreatureSay(mysum, "TRANSFORM!", TALKTYPE_MONSTER)
doFaceCreature(mysum, getThingPos(item2.uid))
doSendMagicEffect(getThingPos(mysum), 184)
doPlayerSay(cid, ""..getPokeName(mysum)..", transform into "..getArticle(name).." "..name.."!", 1)
return true
end
-----------------------------

 

Pronto, ele ja esta se transformando, mas e pra voltar?

Crie um arquivo.lua com nome de dittorevert na pasta "data/talkactions/scripts".

E dentro dele bote:

function onSay(cid, words, param, channel)
local thisball = getPlayerSlotItem(cid, 8)
if getItemAttribute(thisball.uid, "ehditto") then
doItemSetAttribute(thisball.uid, "poke",  "Ditto")
doItemSetAttribute(thisball.uid, "ehditto",  1)
end
end

Depois vá em talkactions.xml, localizado na pasta "data/talkactions" e insira esta linha:

              <talkaction log = "yes" words = "!revert" hide="yes" event = "script" value = "dittorevert.lua"/>

Perfeito, sistema funcionando, mas tem um problema, ele tem a mesma força do pokemon normal, como faço pra diminuir?

Simples, vá em "data/lib" e abra o "level system.lua".

Nele procure isso:

 

 


setPlayerStorageValue(pk, 1001, pokes[getCreatureName(pk)].offense * (getMasterLevel(pk) + getPokemonBoost(pk)))
setPlayerStorageValue(pk, 1002, pokes[getCreatureName(pk)].defense)
setPlayerStorageValue(pk, 1003, pokes[getCreatureName(pk)].agility)
setPlayerStorageValue(pk, 1004, pokes[getCreatureName(pk)].vitality * (getMasterLevel(pk) + getPokemonBoost(pk)))
setPlayerStorageValue(pk, 1005, pokes[getCreatureName(pk)].specialattack * (getMasterLevel(pk) + getPokemonBoost(pk)))

 

E substitua por isso:

 

 


if (getItemAttribute(item, "ehditto") == 1) then
setPlayerStorageValue(pk, 1001, (pokes[getCreatureName(pk)].offense * (getMasterLevel(pk) + getPokemonBoost(pk))) * 0.75)
setPlayerStorageValue(pk, 1002, (pokes[getCreatureName(pk)].defense) * 0.75)
setPlayerStorageValue(pk, 1003, pokes[getCreatureName(pk)].agility)
setPlayerStorageValue(pk, 1004, (pokes[getCreatureName(pk)].vitality * (getMasterLevel(pk) + getPokemonBoost(pk))) * 0.75)
setPlayerStorageValue(pk, 1005, (pokes[getCreatureName(pk)].specialattack * (getMasterLevel(pk) + getPokemonBoost(pk))) * 0.75)
else
setPlayerStorageValue(pk, 1001, pokes[getCreatureName(pk)].offense * (getMasterLevel(pk) + getPokemonBoost(pk)))
setPlayerStorageValue(pk, 1002, pokes[getCreatureName(pk)].defense)
setPlayerStorageValue(pk, 1003, pokes[getCreatureName(pk)].agility)
setPlayerStorageValue(pk, 1004, pokes[getCreatureName(pk)].vitality * (getMasterLevel(pk) + getPokemonBoost(pk)))
setPlayerStorageValue(pk, 1005, pokes[getCreatureName(pk)].specialattack * (getMasterLevel(pk) + getPokemonBoost(pk)))
end

 

PS: Como ali está "0.75", a força é diminuida em 1/4(um quarto).

Pode mudar para o quanto quiser.

EX:

0.50 -> 2/4.

0.25 -> 3/4.

 

Pronto, sistema feito. Mas assim não da de indentificar que é ditto, sendo assim possivel enganar outros players. Para isso, vá em "data/creaturescripts/scripts" abra look.lua e procure por:

table.insert(str, "\nIt contains "..getArticle(pokename).." "..pokename..".\n")

e substitua por:

if getItemAttribute(thing.uid, "ehditto") == 1 then
table.insert(str, "\nIt contains "..getArticle(pokename).." "..pokename.." (Ditto).\n")   
else
table.insert(str, "\nIt contains "..getArticle(pokename).." "..pokename..".\n") 
end

No Goback.lua(data/actions/scripts) e no Some Functions.lua(data/lib)  procure isso:

 

 


if getCreatureName(pk) == "Ditto" or getCreatureName(pk) == "Shiny Ditto" then --edited

local left = getItemAttribute(item.uid, "transLeft")
local name = getItemAttribute(item.uid, "transName")

if left and left > 0 then
setPlayerStorageValue(pk, 1010, name)
doSetCreatureOutfit(pk, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1)
addEvent(deTransform, left * 1000, pk, getItemAttribute(item.uid, "transTurn"))
doItemSetAttribute(item.uid, "transBegin", os.clock())
else
setPlayerStorageValue(pk, 1010, getCreatureName(pk) == "Ditto" and "Ditto" or "Shiny Ditto") --edited
end
end

E apague.

 

Em Some Functions.lua procure por:

 

 


function doAppear(cid) --Faz um poke q tava invisivel voltar a ser visivel...
if not isCreature(cid) then return true end
doRemoveCondition(cid, CONDITION_INVISIBLE)
doRemoveCondition(cid, CONDITION_OUTFIT)
doCreatureSetHideHealth(cid, false)
if getCreatureName(cid) == "Ditto" and pokes[getPlayerStorageValue(cid, 1010)] and getPlayerStorageValue(cid, 1010) ~= "Ditto" then
if isSummon(cid) then
local item = getPlayerSlotItem(getCreatureMaster(cid), 8)
doSetCreatureOutfit(cid, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1) --alterado v1.6.1
end
end
end

 

E deixe assim:

 

 


function doAppear(cid) --Faz um poke q tava invisivel voltar a ser visivel...
if not isCreature(cid) then return true end
doRemoveCondition(cid, CONDITION_INVISIBLE)
doRemoveCondition(cid, CONDITION_OUTFIT)
doCreatureSetHideHealth(cid, false)
end

 

Ainda no some functions.lua apague isso:

 


if getCreatureName(pokemon) == "Ditto" then
if isTransformed(pokemon) then
local left = getItemAttribute(pokeball.uid, "transLeft") - (os.clock() - getItemAttribute(pokeball.uid, "transBegin"))
doItemSetAttribute(pokeball.uid, "transLeft", left)
end
end

 

GIF do System:

 

 

OBS: Para que o ditto se transforme por completo, fale !revert puxe e bote ele novamente.

Qualquer bug, avisem.

PS: Se feito corretamente, não há bugs.

 

Créditos:: TsplayerT por Trazer até aqui! :D

GabrielSales e AnnaFeeh

 

DE REP+ PARA ME AJUDAR!

Editado por TsplayerT (veja o histórico de edições)

Meus Contatos!

 

Minhas Funções:

 

               Skype: TsplayerT

         Facebook: TakaFukushii

          YouTube: ADoseDupla

           Twitter: @_Splayer_

 

 

 

 

 

 

 

                             Mapper:▓▓▓▓▓▓▓▓▓▓ 97%

     Programmer:▓▓▓▓▓▒▒▒▒▒ 45%

             Scripter:▓▓▓▓▓▓▓▓▓▒ 83%

              Spriter:▓▓▓▓▓▓▒▒▒▒ 57%

    Gamemaster:▓▓▓▓▓▓▓▓▓▓ 99%

        Ot Creator:▓▓▓▓▓▓▓▒▒▒71%

Ot Client Maker:▓▓▓▓▓▓▓▒▒▒74%

 

Link para o post
Compartilhar em outros sites

Vlw

nada :D

Meus Contatos!

 

Minhas Funções:

 

               Skype: TsplayerT

         Facebook: TakaFukushii

          YouTube: ADoseDupla

           Twitter: @_Splayer_

 

 

 

 

 

 

 

                             Mapper:▓▓▓▓▓▓▓▓▓▓ 97%

     Programmer:▓▓▓▓▓▒▒▒▒▒ 45%

             Scripter:▓▓▓▓▓▓▓▓▓▒ 83%

              Spriter:▓▓▓▓▓▓▒▒▒▒ 57%

    Gamemaster:▓▓▓▓▓▓▓▓▓▓ 99%

        Ot Creator:▓▓▓▓▓▓▓▒▒▒71%

Ot Client Maker:▓▓▓▓▓▓▓▒▒▒74%

 

Link para o post
Compartilhar em outros sites
  • 2 years later...

Muito bom . Agora gostaria de sabe como por o black ditto no servido pois coloquei onti é não sei como fase pra eli trasforma

 

Link para o post
Compartilhar em outros sites
  • 7 years later...

[13/11/2023 02:24:21] [Error - TalkAction Interface] 
[13/11/2023 02:24:21] data/talkactions/scripts/move1.lua:onSay
[13/11/2023 02:24:21] Description: 
[13/11/2023 02:24:21] data/lib/cooldown bar.lua:97: attempt to call global 'isTransformed' (a nil value)
[13/11/2023 02:24:21] stack traceback:
[13/11/2023 02:24:21]     data/lib/cooldown bar.lua:97: in function 'doUpdateCooldowns'
[13/11/2023 02:24:21]     data/talkactions/scripts/move1.lua:177: in function <data/talkactions/scripts/move1.lua:20>

esta dando esse rro pra mim na move1

 

Em 20/07/2014 em 21:20, TsplayerT disse:

Bom, vou ensinar como fazer um ditto system igual pxg, ou seja, clona tipo(fire, water...), habilidades...

Ex: se eu clonar um charizard, ele fica tipo fire/flying, e eu posso usar fly...

 

CLIQUE NO BOTÃO A BAIXO PARA ABRIR O TUTORIAL

 

Conteúdo Oculto

 

 

por:: 

 

 

 

Conteúdo Oculto

 

 

Pronto, ele ja esta se transformando, mas e pra voltar?

Crie um arquivo.lua com nome de dittorevert na pasta "data/talkactions/scripts".

E dentro dele bote:

function onSay(cid, words, param, channel)
local thisball = getPlayerSlotItem(cid, 8)
if getItemAttribute(thisball.uid, "ehditto") then
doItemSetAttribute(thisball.uid, "poke",  "Ditto")
doItemSetAttribute(thisball.uid, "ehditto",  1)
end
end

Depois vá em talkactions.xml, localizado na pasta "data/talkactions" e insira esta linha:

              <talkaction log = "yes" words = "!revert" hide="yes" event = "script" value = "dittorevert.lua"/>

Perfeito, sistema funcionando, mas tem um problema, ele tem a mesma força do pokemon normal, como faço pra diminuir?

Simples, vá em "data/lib" e abra o "level system.lua".

Nele procure isso:

 

 

 

Conteúdo Oculto

 

 

E substitua por isso:

 

 

 

Conteúdo Oculto

 

 

PS: Como ali está "0.75", a força é diminuida em 1/4(um quarto).

Pode mudar para o quanto quiser.

EX:

0.50 -> 2/4.

0.25 -> 3/4.

 

Pronto, sistema feito. Mas assim não da de indentificar que é ditto, sendo assim possivel enganar outros players. Para isso, vá em "data/creaturescripts/scripts" abra look.lua e procure por:

table.insert(str, "\nIt contains "..getArticle(pokename).." "..pokename..".\n")

e substitua por:

if getItemAttribute(thing.uid, "ehditto") == 1 then
table.insert(str, "\nIt contains "..getArticle(pokename).." "..pokename.." (Ditto).\n")   
else
table.insert(str, "\nIt contains "..getArticle(pokename).." "..pokename..".\n") 
end

No Goback.lua(data/actions/scripts) e no Some Functions.lua(data/lib)  procure isso:

 

 

 

Conteúdo Oculto

 

E apague.

 

Em Some Functions.lua procure por:

 

 

 

Conteúdo Oculto

 

 

E deixe assim:

 

 

 

Conteúdo Oculto

 

 

Ainda no some functions.lua apague isso:

 

 

Conteúdo Oculto

 

 

GIF do System:

 

 

Conteúdo Oculto

 

 

OBS: Para que o ditto se transforme por completo, fale !revert puxe e bote ele novamente.

Qualquer bug, avisem.

PS: Se feito corretamente, não há bugs.

 

Créditos:: TsplayerT por Trazer até aqui! :D

 

 

Conteúdo Oculto

 

 

 

DE REP+ PARA ME AJUDAR!

estou tendo esse erro na distro 

[13/11/2023 02:24:21] [Error - TalkAction Interface] 
[13/11/2023 02:24:21] data/talkactions/scripts/move1.lua:onSay
[13/11/2023 02:24:21] Description: 
[13/11/2023 02:24:21] data/lib/cooldown bar.lua:97: attempt to call global 'isTransformed' (a nil value)
[13/11/2023 02:24:21] stack traceback:
[13/11/2023 02:24:21]     data/lib/cooldown bar.lua:97: in function 'doUpdateCooldowns'
[13/11/2023 02:24:21]     data/talkactions/scripts/move1.lua:177: in function <data/talkactions/scripts/move1.lua:20>

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo