Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Hoje vou ensinar vocês a fazer uma quest com bastante RPG (e com um pouquinho de esforço talvez o melhor sistema já visto num OTSERV!!)
É uma quest que você tem um determinado tempo pra matar um monstro e entrar num teleporte ou a passagem será bloqueada
"tá, mas oque difere essa quest de qualquer script de arena que tenha aí pelo fórum?"
na verdade nada, mas no meu server eu coloquei um tempo bem ridículo (8 segundos) e é tecnicamente impossível chegar do outro lado.
"então você fez uma quest que não dá pra fazer, é isso mesmo?"
não meu caro amigo, é uma quest que foi feita pra ser pensada. Um dos players entra na quest e termina ela, daí outro player ativa a alavanca e ele passa.. fazendo com que o pessoal só consiga passar com a ajuda de um amigo.  Se você conseguir trabalhar em equipe em prol de um prêmio a sua recompensa é a oportunidade de fazer um pacto com as trevas.
"masoque??"  :LOL: 
isso mesmo que você entendeu, você ganha a chance de abrir mão da sua vida (literalmente) pra receber uma spell nova.


~~ Hoje eu vou ensinar a reproduzirem esse sistema caralhudo no server de vocês:


Tudo começa no map editor quando você vai fazer uma área + ou - igual a essa e colocar os seguintes actions/unique ids

1kra.jpg



b62l.jpg



Agora vamos aos scripts:
actions\scripts\newquest.lua

function onUse(cid, item, frompos, item2, topos)
local tempo = 8000
local wall1 = {x=612, y=345, z=7, stackpos=1}
local pos1 = getThingfromPos(wall1) 
local wall2 = {x=653, y=345, z=7, stackpos=1}
local pos2 = getThingfromPos(wall2) 
local monster1 = {x=615, y=345, z=7, stackpos=1}
local posmonster1 = getThingfromPos(monster1) 
local monster3 = {x=654, y=345, z=7, stackpos=1}
local idparede = 9788
local alavanca = {x=610, y=344, z=7, stackpos=1}
local alavancapos = getThingfromPos(alavanca) 


function wait1(wall1) 
doCreateItem(idparede,1,wall1)
end


function wait2(wall2) 
doCreateItem(idparede,1,wall2)
end


function wait3(alavanca)
doTransformItem(item.uid,1946) 
end






if item.uid == 7777 and item.itemid == 1945 then
if pos1.itemid ~= 0 and pos2.itemid ~= 0 then 
doRemoveItem(pos1.uid,5)
doSendMagicEffect(pos1,12) 
doRemoveItem(pos2.uid,5)
doSendMagicEffect(pos2,12) 
doCreateMonster("Juggernaut",monster1)
doSendMagicEffect(monster1,13) 
doPlayerSendTextMessage(cid,25, "You have ".. tempo/1000 .." seconds to finish the quest")
addEvent(wait1,tempo,wall1)
addEvent(wait2,tempo,wall2)
addEvent(wait3,tempo,alavanca)
else
doPlayerSendCancel(cid,"You can't start the quest twice.")
end
elseif item.uid == 7777 and item.itemid == 1946 then
doTransformItem(item.uid,item.itemid-1) 
for x = monster1.x, monster3.x do
for y = monster1.y, monster3.y do
for z = monster1.z, monster3.z do
local mob = getTopCreature({x=x, y=y, z=z}).uid
if mob ~= 0 and isMonster(mob) then
doRemoveCreature(mob) 
else
doPlayerSendCancel(cid,"Sorry, not possible.")
end
end
end
return true
end
end


return true 
end



actions\scripts\newquest2.lua

function onUse(cid)
local topos = {x=609, y=345, z=7, stackpos=1}
   if doTeleportThing(cid, topos) then
 doPlayerSendTextMessage(cid,19, "You have failed at my quest.") 
  doSendMagicEffect(topos,10)
 end
end


agora no actions.xml
<action uniqueid="7777" script="newquest.lua"/>
<action actionid="6666" script="newquest2.lua"/>

Feito isso você vai precisar preparar uma sala aonde o player será teleportado caso ele consiga passar e coloque uma alavanca nessa sala.
Na alavanca você deve colocar o actionid 6102 e uma plaquinha explicando sobre o pacto
daí você adiciona isso no actions.xml

<action actionid="6102" script="alavanca de magia.lua"/>

e crie o script 'alavanca de magia.lua' que deverá conter o seguinte:

function onUse(cid, item)


local magia = "Target Spell"
local vida = 200 -- quanto de vida vai remover da vida total


if getPlayerLearnedInstantSpell(cid, magia) then
doPlayerSendTextMessage(cid,25,"You are already in a pact with the Darkness.")
elseif doPlayerLearnInstantSpell(cid, magia) then
local pos = getCreaturePosition(cid)
local hp = getCreatureMaxHealth(cid)-vida
doSendAnimatedText(pos, "-"..vida , 180)
setCreatureMaxHealth(cid, hp)
doCreatureAddHealth(cid, -vida, COMBAT_LIFEDRAIN)
doSendMagicEffect(pos, 0)
doPlayerSendTextMessage(cid,19,"By switching the lever you agreed to let the darkness in and received the powers of "..magia..".")
end
end

Feito tudo isso agora só falta criar a magia Target Spell que no caso é essa daqui: 

--obs: essa spell foi feita se não me engano pelo Jhon992, em todo caso tá aqui o crédito do cara 
local config = {
                jumps = 15,
                walktime = 500
}


combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 66)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -15, 5, 5, 1.8, 3, -20, -40)


function onCastSpell(cid)
    function move(cid, pos, n)
        local n = n or 0
        if (n < config.jumps) then
            if (isCreature(cid)) then
                local pos = pos or getCreaturePosition(cid)
                local target = getCreatureTarget(cid)
                local dir = (target ~= 0) and getDirectionTo(pos, getCreaturePosition(target)) or getCreatureLookDirection(cid)
                local tpos = (target ~= 0) and getCreaturePosition(target)
                local newPos
                if ((target ~= 0) and ((pos.x == tpos.x) and (pos.y == tpos.y))) then
                    newPos = tpos
                else
                    newPos = getPosByDir(pos, dir)
                end
                if ((getTopCreature(newPos).uid == 0) and doTileQueryAdd(cid, newPos) ~= 1) then return false end
                doCombat(cid, combat, {
                    pos = newPos,
                    type = 2
                })
                addEvent(move, config.walktime, cid, newPos, n + 1)
            end
        end
    end
    move(cid)
    return true
end  


e colocar no spells.xml:

<instant name="Target Spell" words="exevo res" lvl="120" maglv="10" mana="500" exhaustion="3000" prem="0" needlearn="1" script="especiais/seguidor.lua">  
<vocation id="6"/>
<vocation id="7"/>
<vocation id="5"/>
<vocation id="8"/>
</instant>

FIM.

Agora você só precisa editar as actions pra rodarem de acordo com as posições do seu server então vamos às explicações:
SCRIPT1:
local tempo = 8000 ---- tempo até a porta fechar 

local wall1 = {x=612, y=345, z=7, stackpos=1} -- local da primeira pedra
local pos1 = getThingfromPos(wall1)
local wall2 = {x=653, y=345, z=7, stackpos=1} --- local da segunda pedra
local pos2 = getThingfromPos(wall2)
local monster1 = {x=615, y=345, z=7, stackpos=1} --- local que cria o monstro, no caso eu uso o Juggernaut mas vc pode editar dentro do script
local posmonster1 = getThingfromPos(monster1)
local monster3 = {x=654, y=345, z=7, stackpos=1} --- Ultima posição antes do teleporte, serve pra remover o monstro 
local idparede = 9788 --- id do obstáculo q será criado
local alavanca = {x=610, y=344, z=7, stackpos=1} -- POSIÇÃO DA ALAVANCA 
local alavancapos = getThingfromPos(alavanca) 

SCRIPT2:
local topos = {x=609, y=345, z=7, stackpos=1} -- posição que vai ser teleportado caso clique na alavanca de 'FAIL QUEST'

Espero que vocês tenham curtido  (y) 
Aqui tem mais duas imagens pra vocês 
Alavanca:

i9ku.jpg


Magia:

p844.jpg



EXPLICANDO A MAGIA: Os morcegos seguem a direção que você tá olhando, se vc tiver um target eles seguem o target.

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

  • Respostas 5
  • Visualizações 2k
  • Created
  • Última resposta

Top Posters In This Topic

Postado

O meu fica dando erro, fica falando que está não está achando o arquivo msvcp100.dl

  • 2 months later...
Postado

Olá, desculpe reviver o tópico, mas seu sistema é perfeito para meu ot (FoxWorld 8.4).

Tenho um pequeno probleminha :wacko: , é assim: Quando o player some da tela (no caso fica sem target) o script(apenas a magia) da um erro, pois precisa do target para segui-lo. 

 

o erro que da é esse:

[20/06/2014 18:04:17] Lua Script Error: [Spell Interface] 
[20/06/2014 18:04:17] in a timer event called from: 
[20/06/2014 18:04:17] data/spells/scripts/vip/target spell.lua:onCastSpell

[20/06/2014 18:04:17] data/spells/scripts/vip/target spell.lua:21: attempt to call global 'getCreatureLookDirection' (a nil value)
[20/06/2014 18:04:18] stack traceback:
[20/06/2014 18:04:18] 	data/spells/scripts/vip/target spell.lua:21: in function <data/spells/scripts/vip/target spell.lua:15>

Basicamente eu gostaria de pedir para arrumar o script da magia (se possível ) para continuar seguindo o player mesmo fora do target, ou, para o script parar/encerrar quando o target for perdido. 

Dês de já, obrigado.  :rock:   :wow:  :D:palmas:

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

Postado
  • Autor

testa agora: 

--obs: essa spell foi feita se não me engano pelo Jhon992, em todo caso tá aqui o crédito do cara local config = {
                jumps = 15,
                walktime = 500
}




combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 66)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -15, 5, 5, 1.8, 3, -20, -40)




function onCastSpell(cid)
    function move(cid, pos, n)
        local n = n or 0
        if (n < config.jumps) then
            if (isCreature(cid)) then
                local pos = pos or getCreaturePosition(cid)
if getCreatureTarget(cid) then
                local target = getCreatureTarget(cid)
else
local target == 0
end
                local dir = (target ~= 0) and getDirectionTo(pos, getCreaturePosition(target)) or getCreatureLookDirection(cid)
                local tpos = (target ~= 0) and getCreaturePosition(target)
                local newPos
                if ((target ~= 0) and ((pos.x == tpos.x) and (pos.y == tpos.y))) then
                    newPos = tpos
                else
                    newPos = getPosByDir(pos, dir)
                end
                if ((getTopCreature(newPos).uid == 0) and doTileQueryAdd(cid, newPos) ~= 1) then return false end
                doCombat(cid, combat, {
                    pos = newPos,
                    type = 2
                })
                addEvent(move, config.walktime, cid, newPos, n + 1)
            end
        end
    end
    move(cid)
    return true
end  

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.6k

Informação Importante

Confirmação de Termo