Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

E aí, pessoal!

 

Esses dias eu estava na vibe Harry Potter e antes de dormir acabei tendo a ideia de fazer uma spell inspirada na magia Piertotum Locomotor. Criei ela, e decidi compartilhar com vocês auhauah

 

Funcionamento:

Dois golems serão invocados e aprisionarão o inimigo com pedras durante um certo período. (R.I.P qualidade)

 

453524775_piertotumlocomotor.gif.e333cf96ce92a2cc0c1432cac6a21be6.gif

 

Vamos ao código (deixei alguns comentários explicando, mas está bem fácil de compreender o funcionamento, se tiver alguma dúvida pode comentar no tópico).

Primeiro, crie um arquivo.lua, e cole o script dentro:

Spoiler

local config = {
  creatures = {
    [1] = "Stone Golem",
    [2] = "Stone Golem",
  },
  item = 1285, -- ID das Pedras.
  time = 3, -- Duração das pedras (Segundos).
  effectSummons = 68, -- Efeito que aparecerá nas pedras/summons.
  castOnMonsters = true, -- False para não funcionar em monstros, e True para funcionar.
  message = "Now you're free to go.", -- Fala dos summons ao serem removidos no final da execução.
  messageCancel = "You already have summons.",
  messageFail = "It's not possible to cast this spell on monsters."
}

local function doCheckSummons(cid, effect, check)
  local summons = getCreatureSummons(cid)

  for _, pid in ipairs(summons) do
    if check == true then
      doSendMagicEffect(getThingPos(pid), effect)
      doCreatureSay(pid, config.message, TALKTYPE_MONSTER)
      doRemoveCreature(pid)
    elseif check == false then
      doSendMagicEffect(getThingPos(pid), effect)
    end
  end
end    

function onCastSpell(cid, var)
  local target = getCreatureTarget(cid)
  local pid = getThingPos(target)
  local summons = getCreatureSummons(cid)

  local aroundArea = {
    [1] = {x = pid.x - 1, y = pid.y - 1, z = pid.z}, -- Diagonal superior esquerda
    [2] = {x = pid.x, y = pid.y - 1, z = pid.z}, -- Norte 
    [3] = {x = pid.x + 1, y = pid.y - 1, z = pid.z}, -- Diagonal superior direita
    [4] = {x = pid.x + 1, y = pid.y, z = pid.z}, -- Leste
    [5] = {x = pid.x + 1, y = pid.y + 1, z = pid.z}, -- Diagonal inferior direita
    [6] = {x = pid.x, y = pid.y + 1, z = pid.z}, -- Sul
    [7] = {x = pid.x - 1, y = pid.y + 1, z = pid.z}, -- Diagonal inferior esquerda
    [8] = {x = pid.x - 1, y = pid.y, z = pid.z} -- Oeste
  }

  if (isMonster(target)) and (config.castOnMonsters == false) then
    doPlayerSendCancel(cid, config.messageFail)
    return false
  end

  if #summons <= 0 then
    
    for v, k in pairs(aroundArea) do
      if (not getTileInfo(k).house) and (not getTilePzInfo(k)) and (isWalkable(k)) and (not isPlayer(getTopCreature(k).uid)) then
        doSendMagicEffect(k, config.effectSummons)
        doCreateItem(config.item, 1, k)
        addEvent(function()
          local checkItem = getTileItemById(k, config.item).uid
          if checkItem >= 1 then
            doSendMagicEffect(k, config.effectSummons)
            doRemoveItem(getTileItemById(k, config.item).uid)
          end
        end, config.time * 1000
        )
      end
    end

    for v, k in pairs(config.creatures) do
      local closestTile = getClosestFreeTile(target, pid, true, false)
      if closestTile then
        local mob = doSummonCreature(config.creatures[v], closestTile)
        doConvinceCreature(cid, mob)
        doCheckSummons(cid, config.effectSummons, false)
      end
    end

    addEvent(function()
      if isPlayer(cid) then
        doCheckSummons(cid, config.effectSummons, true)
      end
    end, config.time * 1000)
  else
    doPlayerSendCancel(cid, config.messageFail)
    return false
  end
  return true
end

 

 

Feito isso, no arquivo spells.xml recomendo que deixem o parâmetro (needtarget="1"). Exemplo de tag:

	<instant name="Piertotum Locomotor" words="Piertotum Locomotor" lvl="200" mana="1000" needtarget="1" prem="0" exhaustion="10000" groups="1,1500" icon="87" needlearn="0" event="script" value="hogwarts/piertotum locomotor.lua">
		<vocation id="1"/>
		<vocation id="2"/>
	</instant>

 

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