Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Olá pessoal, venho hoje aqui para postar um sistema de pokemon muito procurado, o famoso, Tm System. Siga o tutorial a risca ou seu trabalho será invão.

Quote

Seu Funcionameto: Basícamente funciona assim; ele adiciona um "Attack" novo a um pokemon ou substitui um existente, dependendo da vontado do player.

Versões testadas: Qualquer derivado do PDA

http://www.havencrest.co.uk/images/page-divider 2.jpg

Vamos ao que interessa, vá em actions.xml e cole a seguinte tag:

 

<action itemid="id do item que será usado" event="script" value="tmSystem.lua"/>

Atenção o item que será usado no system, não deve ter o attributo "Usable" ou você terá erros.

Agora crie um arquivo em {data/actions/scripts} chamado tmSystem.lua e cole o seguinte script dentro:

 

function onUse(cid, item, frompos, item2, topos)


local tm = tmabilities

local pokemon = getCreatureSummons(cid)[1]

local slotball = getPlayerSlotItem(cid, 8).uid

local tmname = getItemNameById(item2.itemid)

local i = item2.itemid


			    if #getCreatureSummons(cid) == 0 then

			    return doPlayerSendCancel(cid, "Need pokemon to learn a "..tmname..".")

			    end


			    if getItemAttribute(slotball, "TM") == tmname then

			    return doPlayerSendCancel(cid, "Your pokemon was learned this TM.")

			    end


		 if isInArray(tm[""..tmname..""], getPokemonName(pokemon)) then

				  doPlayerSetVocation(cid, 49)

				  openChannelDialog(cid)

						  else

						  doPlayerSendCancel(cid, "This TM not compatible in your pokemon.")

						  end


return true

end

http://www.havencrest.co.uk/images/page-divider 2.jpg Agora vamos em {creaturescripts.xml} e colaremos a seguinte tag:

 

<event type="joinchannel" name="TmChoose" event="script" value="tmsys.lua"/>

Agora crie o arquivo tmsys.lua em {creaturescripts/scripts} e cole isso dentro:

 

[CODE]

function onJoinChannel(cid, channelId, users, isTv)

if getPlayerVocation(cid) == 49 then

else return true end

local summon = getCreatureSummons(cid)[1]

local moves = movestable[getCreatureName(summon)]

local n = 1

for a = 1, 12 do

local b = getNewMoveTable(moves, a)

			    if b then

			    n = n + 1

			    end

end

for b = 13, 23 do

if channelId == b then

local tm = tmabilities

local pokemon = getCreatureSummons(cid)[1]

local slotball = getPlayerSlotItem(cid, 8).uid

local slotm = getPlayerSlotItem(cid, 9)

local tmname = getItemNameById(slotm.itemid)

								 if n >= channelId - 11 then

								 doPlayerSendTextMessage(cid, 27, "Congralutions! Your "..getPokemonName(pokemon).." learn a new TM ("..tmname..").")

							    doItemSetAttribute(slotball, "TM", tmname)

							    doItemSetAttribute(slotball, "TMN", channelId - 11)

								 doSendMagicEffect(getThingPosition(pokemon), 28)

								 doSendMagicEffect(getThingPosition(pokemon), 29)

								 doRemoveItem(slotm.uid)

if useKpdoDlls then

								 doUpdateMoves(cid)

end

								 else doPlayerSendCancel(cid, "Put tm on at last empty slot.")

								 end

return false

end

end

return true

end

http://www.havencrest.co.uk/images/page-divider 2.jpgNesta parte você precisa de muita atenção, você terá que criar 10 channels como no modelo abaixo:

 

<channel id="13" name="[Put on M1]">

<vocation id="49"/>

</channel>

 


<channel id="14" name="[Put on M2]">

<vocation id="49"/>

</channel>

Em channel id você seguira a ordem 13 a 23, em vocations id pode deixar do jeito que esta. Agora crie uma vocation com o id 49 ou cole a seguinte tag no vocations.xml:

 

<vocation id="49" name="TM" description="pokemon trainer" needpremium="0" gaincap="0" gainhp="55" gainmana="0" gainhpticks="0" gainhpamount="0" gainmanaticks="0" gainmanaamount="0" manamultiplier="1.1" attackspeed="-1" soulmax="251" gainsoulticks="-1" fromvoc="1" lessloss="0">

<formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/>

<skill fist="2" club="2" sword="2" axe="2" distance="2" shielding="2" fishing="2" experience="1.1"/>

</vocation>

Imagem Postada

http://www.havencrest.co.uk/images/page-divider 2.jpgAgora vamos em {data/lib} e crie um arquivo chamado tmSystem.lua e cole as seguintes linhas nele:

 

tmabilities = {

["Solar Beam"] = {"Blastoise", "Venusaur", "Charizard"},

["Fire Blast"] = {"Blastoise", "Venusaur", "Charizard"},

}

Nesta parte você edita, para cada magia[""] = nome dos pokemons que poderam ter essa magia por tm. Tipo do jeito que esta ai, se você for tentar colocar um fire blast em um bulba não vai pegar.. Para adicionar mais magias, basta copiar a linha e colocar o nome da magia nova e seus respectivos pokemons. http://www.havencrest.co.uk/images/page-divider 2.jpg Preste atenção, para cada magia feita, terá que haver um item com o nome da magia. E o id deste item deve ser colocado na tag da actions. ou seja(exemplo): abra o item.xml pegue o item que deseje usar e coloque o nome "Solar Beam"(do mesmo jeito da lib), pegue o id dele e cole na tag da actions. Espero que tenham intendido está parte. http://www.havencrest.co.uk/images/page-divider 2.jpg A ultima parte da instalção, vamos em {data/talkactions/scripts} e abra o arquivo move1.lua e substitua a parte de "if it = 1" até o ultimo "end" antes da parte "if not move then":

 

local msgs = {"use ", ""}


function doAlertReady(cid, id, movename, n, cd)

if not isCreature(cid) then return true end

local myball = getPlayerSlotItem(cid, 8)

if myball.itemid > 0 and getItemAttribute(myball.uid, cd) == "cd:"..id.."" then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getPokeballName(myball.uid).." - "..movename.." (m"..n..") is ready!")

return true

end

local p = getPokeballsInContainer(getPlayerSlotItem(cid, 3).uid)

if not p or #p <= 0 then return true end

for a = 1, #p do

if getItemAttribute(p[a], cd) == "cd:"..id.."" then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getPokeballName(p[a]).." - "..movename.." (m"..n..") is ready!")

return true

end

end

end


function onSay(cid, words, param, channel)



if param ~= "" then return true end

if string.len(words) > 3 then return true end


if #getCreatureSummons(cid) == 0 then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need a pokemon to use moves.")

return 0

end

					  --alterado v1.5

local mypoke = getCreatureSummons(cid)[1]


if getCreatureCondition(cid, CONDITION_EXHAUST) then return true end

if getCreatureName(mypoke) == "Evolution" then return true end


    if getCreatureName(mypoke) == "Ditto" or getCreatureName(mypoke) == "Shiny Ditto" then

	   name = getPlayerStorageValue(mypoke, 1010)   --edited

    else

	   name = getCreatureName(mypoke)

    end 


    --local name = getCreatureName(mypoke) == "Ditto" and getPlayerStorageValue(mypoke, 1010) or getCreatureName(mypoke)


local it = string.sub(words, 2, 3)

local move = movestable[name].move1

local cdzin = "move"..it..""

local slotball = getPlayerSlotItem(cid, 8).uid

local tmname = getItemAttribute(slotball, "TM")


if it == "2" then

if getItemAttribute(slotball, "TMN") == 2 then

			    move = {name = ""..tmname.."", level = 0, cd = 12, dist = 0, target = 0}

			    else

move = movestable[name].move2

			    end

elseif it == "3" then

			    if getItemAttribute(slotball, "TMN") == 3 then

			    move = {name = ""..tmname.."", level = 0, cd = 12, dist = 0, target = 0}

			    else

move = movestable[name].move3

			    end

elseif it == "4" then

			    if getItemAttribute(slotball, "TMN") == 4 then

			    move = {name = ""..tmname.."", level = 0, cd = 12, dist = 0, target = 0}

			    else

move = movestable[name].move4

			    end

elseif it == "5" then

			    if getItemAttribute(slotball, "TMN") == 5 then

			    move = {name = ""..tmname.."", level = 0, cd = 12, dist = 0, target = 0}

			    else

move = movestable[name].move5

			    end

elseif it == "6" then

			    if getItemAttribute(slotball, "TMN") == 6 then

			    move = {name = ""..tmname.."", level = 0, cd = 12, dist = 0, target = 0}

			    else

move = movestable[name].move6

			    end

elseif it == "7" then

			    if getItemAttribute(slotball, "TMN") == 7 then

			    move = {name = ""..tmname.."", level = 0, cd = 12, dist = 0, target = 0}

			    else

move = movestable[name].move7

			    end

elseif it == "8" then

			    if getItemAttribute(slotball, "TMN") == 8 then

			    move = {name = ""..tmname.."", level = 0, cd =15, dist = 0, target = 0}

			    else

move = movestable[name].move8

			    end

elseif it == "9" then

			    if getItemAttribute(slotball, "TMN") == 9 then

			    move = {name = ""..tmname.."", level = 0, cd = 12, dist = 0, target = 0}

			    else

move = movestable[name].move9

			    end

elseif it == "10" then

			    if getItemAttribute(slotball, "TMN") == 10 then

			    move = {name = ""..tmname.."", level = 0, cd = 12, dist = 0, target = 0}

			    else

move = movestable[name].move10

			    end

elseif it == "11" then

			    if getItemAttribute(slotball, "TMN") == 11 then

			    move = {name = ""..tmname.."", level = 0, cd = 12, dist = 0, target = 0}

			    else

move = movestable[name].move11

			    end

elseif it == "12" then

			    if getItemAttribute(slotball, "TMN") == 12 then

			    move = {name = ""..tmname.."", level = 0, cd = 12, dist = 0, target = 0}

			    else

move = movestable[name].move12

			    end

end


if not move then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.")

return true

end


if getPlayerLevel(cid) < move.level then

  doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need be atleast level "..move.level.." to use this move.")

  return true

    end


if getCD(getPlayerSlotItem(cid, 8).uid, cdzin) > 0 and getCD(getPlayerSlotItem(cid, 8).uid, cdzin) < (move.cd + 2) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have to wait "..getCD(getPlayerSlotItem(cid, 8).uid, cdzin).." seconds to use "..move.name.." again.")

return true

end


if getTileInfo(getThingPos(mypoke)).protection then

doPlayerSendCancel(cid, "Your pokemon cannot use moves while in protection zone.")

return true

end


if getPlayerStorageValue(mypoke, 3894) >= 1 then

    return doPlayerSendCancel(cid, "You can't attack because you is with fear") --alterado v1.3

    end

							 --alterado v1.6				 

if (move.name == "Team Slice" or move.name == "Team Claw") and #getCreatureSummons(cid) < 2 then	  

   doPlayerSendCancel(cid, "Your pokemon need be in a team for use this move!")

    return true

    end

																	 --alterado v1.6

if isCreature(getCreatureTarget(cid)) and isInArray(specialabilities["evasion"], getCreatureName(getCreatureTarget(cid))) and math.random(1, 100) <= 10 then

   local target = getCreatureTarget(cid)																					  


   if isCreature(getMasterTarget(target)) then   --alterado v1.6																  

	  doSendMagicEffect(getThingPos(target), 211)

	  doSendAnimatedText(getThingPos(target), "TOO BAD", 215)							   

	  doTeleportThing(target, getClosestFreeTile(target, getThingPos(mypoke)), false)

	  doSendMagicEffect(getThingPos(target), 211)

	  doFaceCreature(target, getThingPos(mypoke))	

	  return true	   --alterado v1.6

   end

end



if move.target == 1 then


if not isCreature(getCreatureTarget(cid)) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don\'t have any targets.")

return 0

end


if getCreatureCondition(getCreatureTarget(cid), CONDITION_INVISIBLE) then

return 0

end


if getCreatureHealth(getCreatureTarget(cid)) <= 0 then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your have already defeated your target.")

return 0

end


if not isCreature(getCreatureSummons(cid)[1]) then

return true

end


if getDistanceBetween(getThingPos(getCreatureSummons(cid)[1]), getThingPos(getCreatureTarget(cid))) > move.dist then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Get closer to the target to use this move.")

return 0

end


if not isSightClear(getThingPos(getCreatureSummons(cid)[1]), getThingPos(getCreatureTarget(cid)), false) then

return 0

end

end


local newid = 0


	    if isSleeping(mypoke) or isSilence(mypoke) then  --alterado v1.5

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry you can't do that right now.")

return 0

else

newid = setCD(getPlayerSlotItem(cid, 8).uid, cdzin, move.cd)

end


doCreatureSay(cid, ""..getPokeName(mypoke)..", "..msgs[math.random(#msgs)]..""..move.name.."!", TALKTYPE_SAY)


    local summons = getCreatureSummons(cid) --alterado v1.6


addEvent(doAlertReady, move.cd * 1000, cid, newid, move.name, it, cdzin)


for i = 2, #summons do

	   if isCreature(summons[i]) and getPlayerStorageValue(cid, 637501) >= 1 then

		  docastspell(summons[i], move.name)	    --alterado v1.6

	   end

    end


    docastspell(mypoke, move.name)

doCreatureAddCondition(cid, playerexhaust)


if useKpdoDlls then

doUpdateCooldowns(cid)

end


return 0

end

Até que enfim.. Se fizeram tudo certo o sistema vai funcionar se não.... Caso não itendam alguma parte da explicação podem me perguntar por aqui...

Creditos

Smix

Att,

Skyligh

Entrada Como Membro 14 / 08 / 2012

Entrada Como Suporte 05 / 12 / 2012

Saída Como Suporte 06 / 01 / 2013

sem_ta28.png

Contato : [email protected] / [email protected]

  • 2 years later...
  • 6 months later...
  • 6 years later...

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

Quem Está Navegando 0

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

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo