Olá,
Existem vários sistemas de dive por Talkaction, eu sinceramente acho fraco o rpg quando se usa Talkaction. Assim resolvi fazer por Action.
Primeiramente vou explicar como é:
O sistema nada mais é do que fazer com que o player que precisa estar surfando possa ir para baixo d'agua.
No caso do meu script, o player precisa estar surfando e portando um determinado item (mascara de oxigenio).
Segue o Script:
Salve em um bloco de notas na pasta data/actions/scripts o script abaixo com o nome mascara.lua
local mascara = 12624
local pos = {x=0,y=0,z=0}
function onUse(cid, item, fromPosition, itemEx, toPosition)
pos = getCreaturePosition(cid)
pos.z = pos.z + 1
if getPlayerStorageValue(cid, 17000) >= 1 then
doPlayerSendCancel(cid, "You need surf to dive.")
return true
end
if getPlayerItemCount(cid, mascara) < 1 then
doPlayerSendCancel(cid, "You need a mask to dive.")
return true
end
doTeleportThing(cid,pos)
if isPlayer(cid) and getCreatureOutfit(cid).lookType == 814 then return false end
local checkpos = fromPosition
checkpos.stackpos = 0
if isInArray(waters, getTileInfo(checkpos).itemid) then
if getPlayerStorageValue(cid, 63215) >= 1 or getPlayerStorageValue(cid, 17000) >= 1 then
doSendMagicEffecte(fromPosition, direffects[getCreatureLookDir(cid) + 1])
end
end
if not isInArray(waters, getTileInfo(getThingPos(cid)).itemid) then
if getPlayerStorageValue(cid, 17000) >= 1 then return true end
if getPlayerStorageValue(cid, 63215) <= 0 then return true end
doRemoveCondition(cid, CONDITION_OUTFIT)
setPlayerStorageValue(cid, 63215, -1)
local item = getPlayerSlotItem(cid, 8)
local pokemon = getItemAttribute(item.uid, "poke")
local x = pokes[pokemon]
if not x then return true end
if getItemAttribute(item.uid, "nick") then
doCreatureSay(cid, getItemAttribute(item.uid, "nick")..", I'm tired of surfing!", 1)
else
doCreatureSay(cid, getItemAttribute(item.uid, "poke")..", I'm tired of surfing!", 1)
end
doSummonMonster(cid, pokemon)
local pk = getCreatureSummons(cid)[1]
if not isCreature(pk) then
pk = doCreateMonster(pokemon, backupPos)
if not isCreature(pk) then
doPlayerSendCancel(cid, "You can't stop surfing here.")
doTeleportThing(cid, fromPosition, false)
return true
end
doConvinceCreature(cid, pk)
end
doChangeSpeed(pk, getCreatureSpeed(cid))
doChangeSpeed(cid, -getCreatureSpeed(cid))
doChangeSpeed(cid, PlayerSpeed)
doTeleportThing(pk, fromPosition, false)
doTeleportThing(pk, getThingPos(cid), true)
doCreatureSetLookDir(pk, getCreatureLookDir(cid))
adjustStatus(pk, item.uid, true, false, true)
end
return true
end
explicando:
De vermelho é o id do item (mascara de oxigenio) que o player precisa ter na bag para poder dar dive.
No arquivo data/actions/Actions.xml adicione a seguinte tag.
<action itemid="8632" event="script" value="mascara.lua"/>
explicando:
O numero na cor verde é o id do item (redemunho), o qual deve ser colocado no mapa na água acima do local onde é undewater.
O Sistema funciona assim: Estando em Surf e com a Mascara de Oxigenio, basta dar use no Redemonho que será teleportado para a waypoint do script (cave).
obs.: É necessário que adicione uma escada ou espaço para rope, para que o player volte para a água (saindo do dive).
IMAGEM:
Creditos:
BobStriker - 100%
Fiz o script do 0 (zero) e muito rápido.
Pode estar bem simples, mas é funcional.
Duvidas e Sugestões, Comentem.
att.