FJ
pedido

Steal System

Por Fjinst, 06 de fev. de 2016 em Scripts

8
1.7k
FjinstF
06 de fevereiro de 2016 às 15:06

Bom, básicamente eu gostaria de pedir a ajuda de vocês para criação de um script/magia de roubo de items de um monstro.

 

Explicando mais detalhadamente:

O Script funcionaria dessa maneira, teria uma tabela com o nome das criaturas que poderiam ser roubadas e do lado do nome das criaturas teria os ids de possiveis items que poderia ser roubado.

 

A magia se chamaria "roubo" como se fosse um exori frigo, exori mort, etc. teria uma chance de sucesso ou não, caso o monstro não esteja na lista, simplesmente não aconteceria nada com o monstro, só falaria que esse monstro não pode ser roubado

 

 

A tabela seria tipo assim

 

local config = {
chance = math.random(1,5),
monstro = {
--["monster_name"] = "loot",
["Rat"] = "2148", "2149",
},
}

 

 

 

Para quem tiver alguma dúvida, seria basicamente o sistema do ragnarok no qual uma subclasse do thief tem uma magia de furtar o monstro, não sei se é possivel fazer ou não, mas ta ai meu pedido para vocês.

Vale lembrar que só funcionaria para monstros que estão na tabela

Agradeço pela atenção.

Editado Fevereiro 6 por Fjinst

otherealityO
07 de fevereiro de 2016 às 03:35
Melhor resposta

Tenta aí, se der erro manda que eu vou de novo.

 

EDIT:

Não entendi se você queria uma chance diferente pra cada monstro ou não, nesse caso a chance é de 20% de dar certo pra todos os roubos.

EDIT2:

O player precisa de um target pra funcionar a magia, então se liga pra fazer a tag direitinho.

 

local MONSTROS = {
 --name 		 	  id1         	id2
["Rat"] = 		{item1 = 2149, item2 = 0000},
["Cave Rat"] = 	        {item1 = 2149, item2 = 0000},
["Bat"] = 		{item1 = 2149, item2 = 0000},
["Wolf"] = 		{item1 = 2149, item2 = 0000}
    }

function onCastSpell(cid, var)
	local chance = math.random(1,5)
	local monstro = MONSTROS[getCreatureName(getCreatureTarget(cid))]

	if chance ~= 1 then
		doPlayerSendCancel(cid, "voce nao conseguiu roubar.")
	return false
	end

	if monstro.item1 > 0 then
		doPlayerAddItem(cid, monstro.item1)
	end
	if monstro.item2 > 0 then
		doPlayerAddItem(cid, monstro.item2)
	end
	
return true
end

 

Editado Fevereiro 7 por OtheReality

FjinstF
07 de fevereiro de 2016 às 22:44

O script funcionou quase perfeito, o único problema foi quando o monstro não esta na lista, de monstros roubaveis

acontece o seguinte erro caso eu tente furtar um monstro que não esteja na lista

 

Também outro problema seria ao roubar o item, não roubar varios items e sim ou um item ou outro, no caso ta pegando os 2 items ao invez de ser 1

 

[07/02/2016 21:40:59] [Error - Spell Interface]
[07/02/2016 21:40:59] data/spells/scripts/test.lua:onCastSpell
[07/02/2016 21:40:59] Description:
[07/02/2016 21:41:00] data/spells/scripts/test.lua:20: attempt to index local 'monstro' (a nil value)
[07/02/2016 21:41:00] stack traceback:
[07/02/2016 21:41:00] data/spells/scripts/test.lua:20: in function <data/spells/scripts/test.lua:11>

otherealityO
07 de fevereiro de 2016 às 23:57

Tenta agora:

local MONSTROS = {
 --name 		 	  id1         	id2
["Rat"] = 		{item1 = 2149, item2 = 0000},
["Cave Rat"] = 	{item1 = 2149, item2 = 0000},
["Bat"] = 		{item1 = 2149, item2 = 0000},
["Wolf"] = 		{item1 = 2149, item2 = 0000}
    }
 
function onCastSpell(cid, var)
	local chance = math.random(1,5)
	local monstro = MONSTROS[getCreatureName(getCreatureTarget(cid))]
	
	if monstro == nil then
		doPlayerSendCancel(cid, "esse monstro nao e roubavel.")
	return false
	end
 
	if chance ~= 1 then
		doPlayerSendCancel(cid, "voce nao conseguiu roubar.")
	return false
	end
	
	if math.random(1, 2) == 1 then
		doPlayerAddItem(cid, monstro.item1)
	else
		if monstro.item2 > 0 then
			doPlayerAddItem(cid, monstro.item2)
		else
			doPlayerAddItem(cid, monstro.item1)
		end
	end
	
return true
end
FjinstF
08 de fevereiro de 2016 às 11:40

Bom, não sei se é possivel, mas tem como colocar para só conseguir roubar uma vez o mesmo monstro caso tenha roubado com sucesso?, se não já ficou perfeito o script, agradeço pela ajuda!

Editado Fevereiro 8 por Fjinst

otherealityO
08 de fevereiro de 2016 às 20:57

Não sei ao certo como fazer, ia ter que ficar tentando algumas coisas até dar certo, to meio ocupado com meu OT agr, sry.

FjinstF
08 de fevereiro de 2016 às 22:08

Beleza, valeu ai pela ajuda!

2 semanas depois...
FurabioF
16 de fevereiro de 2016 às 18:11

Tópico Movido
Este tópico foi movido de "OTServScriptingSuporte Scripting"
para "OTServScriptingSuporte ScriptingPedidos e dúvidas resolvidos - Scripting".