DI

[Spell] Change Corpse

Por digo1040, 21 de out. de 2011 em Globalevents e Spells

otserv
tibia
script
26
7k
digo1040D
21 de outubro de 2011 às 17:55

Change Corpse

Eai pessoal, tava vendo alguns videos e encontrei um que falava sobre uma magia, change corpse, como procurei e não a encontrei resolvi fazer ela e ficou assim:

 

Versão Instant Spell:

 

Em spells/scripts crie um arquivo e coloque isso nele:

--< Digaao >--
local config = {
storage = 12456, -- storage que salva o delay da magia
time = 2 * 60, -- tempo que deve esperar para usar a magia em segundos
player = true, -- funciona com player true/false
monster = false, -- funciona com monstros true/false
npc = false, -- funciona com npc true/false
chance = 80, -- numero de 1 a 100 representando a chance de sucesso
}
function onCastSpell(cid, var)

local function doSend(pos1, pos2, num)
	doSendDistanceShoot(getCreaturePosition(pos1), getCreaturePosition(pos2), 4)
	doSendDistanceShoot(getCreaturePosition(pos2), getCreaturePosition(pos1), 4)
	if type(num) == "number" and num == 1 then
		if math.random(1, 100) <= config.chance then
			local pp1 = getCreaturePosition(pos1)
			local pp2 = getCreaturePosition(pos2)
			doTeleportThing(pos2, pp1)
			doTeleportThing(pos1, pp2)
		else
			doPlayerSendCancel(cid, "Opps que azar, tente denovo!")
		end
	end
	return true
end

local target = getCreatureTarget(cid)

if type(target) ~= "number" or target == 0 then
	doPlayerSendCancel(cid, "Você precisa selecionar alguma creature para fazer isso!")
	return false
end

	if (config.player == false and isPlayer(target)) or (isPlayer(target) and getPlayerAccess(target) > getPlayerAccess(cid)) or (config.monster == false and isMonster(target)) or (config.npc == false and isNpc(target)) then
	doPlayerSendCancel(cid, "Voce nao pode fazer isso com essa criatura!")
	return false
end

if getPlayerStorageValue(cid, config.storage) > os.time() then
	doPlayerSendCancel(cid, "Voce so pode utilizar essa magia a cada 2 minutos!")
			return false
else
	for i = 1, 7 do
		addEvent(doSend, i*250, cid, target, 0)
	end
	addEvent(doSend, 4*500, cid, target, 1)
	setPlayerStorageValue(cid, config.storage, os.time() + config.time)
end

return true
end

 

Tag XML no arquivo spells.xml:

<instant name="Change Corpse" words="change corpse" lvl="LEVEL PARA USAR A MAGIA" mana="MANA PARA USAR A MAGIA" aggressive="0" needtarget="1" exhaustion="1000" needlearn="0" event="script" value="nome do seu arquivo.lua">
<vocation id="1"/>
<vocation id="2"/>
<vocation id="3"/>
<vocation id="4"/>
<vocation id="5"/>
<vocation id="6"/>
<vocation id="7"/>
<vocation id="8"/>
</instant>

 

lvl => coloque o level minimo para usar a magia

mana => mana necessaria para utilizar a magia

needlearn => caso queira que precise aprender a magia coloque 1.

 

=> Caso queira utilizar palavras mágicas seguindo a lógica do global coloque: exeta sio ou exani sio <=

 

 

 

Versão Rune:

 

Em spells/scripts crie um arquivo e coloque isso nele:

--< Digaao >--
local config = {
	storage = 12456, -- storage que salva o delay da magia
	time = 2 * 60, -- tempo que deve esperar para usar a magia em segundos
	player = true, -- funciona com player true/false
	monster = false, -- funciona com monstros true/false
	npc = false, -- funciona com npc true/false
	chance = 80, -- numero de 1 a 100 representando a chance de sucesso
}
function onCastSpell(cid, var)

	local function doSend(pos1, pos2, num)
			doSendDistanceShoot(getCreaturePosition(pos1), getCreaturePosition(pos2), 4)
			doSendDistanceShoot(getCreaturePosition(pos2), getCreaturePosition(pos1), 4)
			if type(num) == "number" and num == 1 then
					if math.random(1, 100) <= config.chance then
							local pp1 = getCreaturePosition(pos1)
							local pp2 = getCreaturePosition(pos2)
							doTeleportThing(pos2, pp1)
							doTeleportThing(pos1, pp2)
					else
							doPlayerSendCancel(cid, "Opps que azar, tente denovo!")
					end
			end
			return true
	end

	local target = variantToNumber(var)

	if type(target) ~= "number" or target == 0 then
			doPlayerSendCancel(cid, "Você precisa selecionar alguma creature para fazer isso!")
			return false
	end

	if (config.player == false and isPlayer(target)) or (isPlayer(target) and getPlayerAccess(target) > getPlayerAccess(cid)) or (config.monster == false and isMonster(target)) or (config.npc == false and isNpc(target)) then
			doPlayerSendCancel(cid, "Voce nao pode fazer isso com essa criatura!")
			return false
	end

	if getPlayerStorageValue(cid, config.storage) > os.time() then
			doPlayerSendCancel(cid, "Voce so pode utilizar essa magia a cada 2 minutos!")
			return false
	else
			for i = 1, 7 do
					addEvent(doSend, i*250, cid, target, 0)
			end
			addEvent(doSend, 4*500, cid, target, 1)
			setPlayerStorageValue(cid, config.storage, os.time() + config.time)
	end

	return true
end

 

No spell.xml coloque isso:

<rune name="Change Corpse" id="ID DA RUNA" allowfaruse="1" charges="10" lvl="24" maglv="3" exhaustion="1000" needtarget="1" event="script" value="nome do seu script.lua"/>

ID DA RUNA => coloque o id da runa

 

Caso queira que o player possa criar a runa no spell.xml coloque também isso:

<conjure name="Change Corpse" words="PALAVRAS MAGICAS" lvl="28" mana="430" soul="3" prem="1" reagentId="2260" conjureId="ID DA RUNA" conjureCount="4" exhaustion="1000" needlearn="0" event="function" value="conjureRune">
<vocation id="1"/>
<vocation id="5"/>
</conjure>

PALAVRAS MAGICAS => Para deixar as magias semelhantes as do global recomendo utilizar: adani sio.

ID DA RUNA => Coloque o item id da runa.

 

 

 

 

Bom vamos as configs da magia:

storage => devido a natureza da magia recomendo que ela tenha um delay proprio (cd), entao coloque uma storage que ficara salvo esse delay.

time => defina o tempo em segundos do delay, para nao ter delay coloque 0.

player/monster/npc => voce define em quais creatures o char pode usar a magia, recomendo deixar somente os players como true; pois eles poderiam usá-la para entrar em alguma sala que tenha somente um npc, ou trocar de posição com um trainer.

chance => é a chance da magia ter sucesso (0-100) para funcionar todas as vezes coloque 100.

 

Bom é isso, espero que gostem positivo.gif

 

Segue o video com a chance corpse:

Editado Dezembro 10 por Digaao

LolkskyL
21 de outubro de 2011 às 18:24

Teria como colocar isso em uma RUNA?

Assim, usaria a rune no player que quize-se "trocar" o corpo e TCHARÃ! :worriedsmiley:

Editado Outubro 21 por Lolksky

superdrakoS
23 de outubro de 2011 às 10:57

-Digaao

 

Você errou no end la embaixo, colocou end]

Concerta ae, isso causa erro no script.

 

Rep+

digo1040D
24 de outubro de 2011 às 01:02

@ Drdrake9

Nem havia percebido, vlw

 

@ Lolksky

Coloquei a versão instant spell e rune da mágia :D

Editado Outubro 24 por Digaao

LolkskyL
24 de outubro de 2011 às 15:31

@ Drdrake9

Nem havia percebido, vlw

 

@ Lolksky

Coloquei a versão instant spell e rune da mágia :D

 

Pow o RUNE tem algo errado, eu uso a rune 1 vez vai de boa, ai eu vo usa depois fala que só posso usar dps de X minutos, só que passam os minutos e aparece a msm msg e não usa... e outra, mesmo eu usando a runa no player SEM funcionar, as changes gastam.

digo1040D
25 de outubro de 2011 às 16:17

Bom, mudei os return, com isso não vai gastar charges quando nao troca, a menos que "quebre" conforme a chance de nao funcionar. Quanto o delay, está funcionando corretamente, verifica o time que voce colocou :D

LolkskyL
26 de outubro de 2011 às 17:15

Bom, mudei os return, com isso não vai gastar charges quando nao troca, a menos que "quebre" conforme a chance de nao funcionar. Quanto o delay, está funcionando corretamente, verifica o time que voce colocou :D

 

O Delay ta certinho agora, mas continua gastando rune mesmo quando está entre intervalo de poder usar denovo... coloquei 100% de chance de dar certo, com intervalo de 3 minutos, mas nesse intervalo eu uso e a runa gasta ;s

1 mês depois...
Lym312yzL
21 de novembro de 2011 às 20:11

Digaoo, coloquei essa magia no meu ot 8.4, e da erro ao mecher quando coloco para nao usar em monsters e npcs, para a magia funcionar preciso deixar para monstros e npcs, isso acontece pq esse script decta por acess, certo?

Exemplo: monsters nao tem acess, porem no meu ot 8.4 os players tem acess 0, ou seja para funcionar teria que ser tutor, como eu coloco para player ter acess 1 ???

 

Se puder ajudar.....

E se mostrar como eu coloco esse tipo de delay eu outras magias agrdeco!

digo1040D
26 de novembro de 2011 às 13:11

Bom, na verdade ele só verifica o o access quando for player, mudei essa parte do access, talves ela tenha dado conflito, se continuar o erro, poste ele. Não precisa editar o access dos players ;D

 

Nesse delay é salvo em uma storage quando o player pode utilizar a magia novamente (os.time() + segundos), quando o player usar a magia ele verifica se já é essa data.

1 mês depois...
vitorvvmV
10 de dezembro de 2011 às 15:18

muito bom... mas cade o vídeo... mas o script ta bem feito ein... rep+

3 semanas depois...
TendoTenseiT
27 de dezembro de 2011 às 22:09

Aqui nõa funciona não da erro nem nada simplestemente vo usa não vai essa tag onde adiciono em attack spells,summon spells ou oq??

digo1040D
28 de dezembro de 2011 às 00:50

Aqui nõa funciona não da erro nem nada simplestemente vo usa não vai essa tag onde adiciono em attack spells,summon spells ou oq??

 

O primeiro codigo eh o script em lua, voce deve salvá-lo dentro da pasta scripts.

O segundo codigo é a tag xml, vc deve colocá-lo (ou colocá-los se voce for fazer por runa) dentro do arquivo spells.xml. Editando as informações em letras maiusculas e alterando o nome do arquivo.

1 mês depois...
TondesT
11 de janeiro de 2012 às 20:35

Veio como coloca essa spell 8.40 ?

responde aew ;]

digo1040D
14 de janeiro de 2012 às 15:58

Veio como coloca essa spell 8.40 ?

responde aew ;]

Se não estou enganado em 8.40 eh a mesma maneira. Mas não tenho um ot 8.40 para confirmar agora.

TondesT
14 de janeiro de 2012 às 18:17

Digaao você tem exevo aura bow ?si tiver posta ae pra nois ? cool.png