Ir para conteúdo

[Spell] Crystal Wall 8.54+


jhon992

Posts Recomendados

Hoje vim trazer uma spell que criei a pedido de um membro e achei bem legal.

É uma spell que você controla para criar uma muralha em volta de seus inimigos, ela é otima para wars e servers derivados como de avatar, naruto.

Então primeiro vou posta o script dela e depois um video para melhor entendimento.

 

Vai em data/spells/scripts, duplica um arquivo e nomeia para "crystal wall" sem as aspas e nele cole:

--<Script by Jhon992>--

local stonesId = {8633,8634,8635,8636} -- ids dos diferente tipos de stones.
local timeRemove = 60 -- tempo para dumir as pedras em segundos.

function createObject(cid, position, stonesPosition)
if (isPlayer(cid)) then
if getPlayerLookDir(cid) == 0 then
	positions = {x=position.x, y=position.y-1, z=position.z}
elseif getPlayerLookDir(cid) == 1 then
	positions = {x=position.x+1, y=position.y, z=position.z}
elseif getPlayerLookDir(cid) == 2 then
	positions = {x=position.x, y=position.y+1, z=position.z}
elseif getPlayerLookDir(cid) == 3 then
	positions = {x=position.x-1, y=position.y, z=position.z}
end

if isWalkable(positions) then
	createStone(stonesPosition, positions, stonesId[math.random(1,#stonesId)], cid)
	addEvent(createObject, 500, cid, positions, stonesPosition)
else
	addEvent(removeStones, timeRemove*1000, stonesPosition)
end
end
end

function createStone(stonesPosition, positions, stone, cid)
doCreateItem(stone, 1, positions)
stonesPosition[(#stonesPosition)+1] = {x=positions.x, y=positions.y, z=positions.z, stackpos=1}
end

function removeStones(stonesPosition)
for i=1, #stonesPosition do
for o=1, 2 do
	stonesPosition[i] = {x=stonesPosition[i].x, y=stonesPosition[i].y, z=stonesPosition[i].z, stackpos=o}
	if isInArray(stonesId, getThingfromPos(stonesPosition[i]).itemid) then
		doRemoveItem(getThingfromPos(stonesPosition[i]).uid)
	end
end
end
end

function isWalkable(pos, creature, pz, proj) -- nord
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
local creature = getTopCreature(pos)
if creature.type > 0 then	return false end
if getTilePzInfo(pos) and not pz then return false end
local n = not proj and 3 or 2
for i = 0, 255 do
	pos.stackpos = i
	local tile = getTileThingByPos(pos)
	if tile.itemid ~= 0 and not isCreature(tile.uid) then
		if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
			return false
		end
	end
end
return true
end

function onCastSpell(cid, var)
local stonesPosition = {}
local position = getPlayerPosition(cid)
createObject(cid, position, stonesPosition)
   return true
end

 

E em data/spells/spells.xml a tag:

Obs: As tags serão diferentes dependendo da versão de seu ot. Tire como base de alguma outra tag e coloque as vocações de sua escolha.

<instant name="Crystal Wall" words="exevo crystal" lvl="45" mana="800" prem="1" blockwalls="1" exhaustion="2000" groups="3,2000" icon="127" needlearn="0" event="script" value="crystal wall.lua">
	<vocation id="1"/>
	<vocation id="2"/>
	<vocation id="5"/>
	<vocation id="6"/>
</instant>

 

Prontinho. happy.png

Você pode escolher o tempo que demorara para sumir os crystais e pode modificar os crystais por outros ids, apenas modificando as duas primeiras linhas do arquivo "crystal wall.lua".

Ela vai funcionar da seguinte maneira, quando você usa-sa ela ira criar crystais para a direção em que você esta virado e conforme você for modificando a direção os crystais vão saindo, até que encontre alguma barreira como players e itens que não se pode andar por cima.

 

Video:

Editado por Jhon992
Link para o comentário
Compartilhar em outros sites

  • 4 weeks later...
  • 2 months later...
  • 2 months later...

Tem como fazer uma spell de ataque com esse sistema? e na hora q acerta o monstro/player causa uma explosão :D

 

Tem sim e nem é tão difícil, tu é scripter .lua neh, só da uma pesquisadinha e uma modificada que tu faz. happy.png

Link para o comentário
Compartilhar em outros sites

  • 11 months later...
×
×
  • Criar Novo...