DE
action

Mount System TFS 1.2 10.78

Por DeCarvalho, 24 de jul. de 2015 em Scripts

mount system
tfs 1.2
mount system tfs 1.2
resolvido
script
5
2.5k
DeCarvalhoD
24 de julho de 2015 às 02:34

Bem, em todo canto que procurei, o sistema de montaria 'domando', o mais novo era esse

 

 

 

local ACTION_RUN, ACTION_BREAK, ACTION_NONE, ACTION_ALL = 1, 2, 3, 4
local TYPE_MONSTER, TYPE_NPC, TYPE_ITEM, TYPE_ACTION, TYPE_UNIQUE = 1, 2, 3, 4, 5

local config = {
	[5907]	=	{NAME = 'Bear',					ID = 3,		TYPE = TYPE_MONSTER,	CHANCE = 20,	FAIL_MSG = { {1, 'The bear ran away.'}, {2, 'Oh no! The slingshot broke.'}, {3, 'The bear is trying to hit you with its claws.'} },SUCCESS_MSG = 'You have tamed the bear.'},
	[13295]	=	{NAME = 'Black Sheep',				ID = 4,		TYPE = TYPE_MONSTER,	CHANCE = 25,	FAIL_MSG = { {1, 'The black sheep ran away.'}, {2, 'Oh no! The reins were torn.'}, {3, 'The black sheep is trying to run away.'} },SUCCESS_MSG = 'You have tamed the sheep.'},
	[13293]	=	{NAME = 'Midnight Panther',			ID = 5,		TYPE = TYPE_MONSTER,	CHANCE = 40,	FAIL_MSG = { {1, 'The panther has escaped.'}, {2, 'The whip broke.'} },SUCCESS_MSG = 'You have tamed the panther.'},
	[13298]	=	{NAME = 'Terror Bird',				ID = 2,		TYPE = TYPE_MONSTER,	CHANCE = 15,	FAIL_MSG = { {1, 'The bird ran away.'}, {3, 'The terror bird is pecking you.'} }, SUCCESS_MSG = 'You have tamed the bird.'},
	[13247]	=	{NAME = 'Boar',					ID = 10,	TYPE = TYPE_MONSTER,	CHANCE = 40,	FAIL_MSG = { {1, 'The boar has run away'}, {3, 'The boar attacks you.'} }, SUCCESS_MSG = 'You have tamed the boar.'},
	[13305]	=	{NAME = 'Crustacea Gigantica',			ID = 7,		TYPE = TYPE_MONSTER,	CHANCE = 40,	FAIL_MSG = { {1, 'The crustacea has run away.'}, {2, 'The crustacea ate the shrimp.'} }, SUCCESS_MSG = 'You have tamed the crustacea.'},
	[13291]	=	{NAME = 'Undead Cavebear',			ID = 12,	TYPE = TYPE_MONSTER,	CHANCE = 40,	FAIL_MSG = { {1, 'The undead bear has run away.'} }, SUCCESS_MSG = 'You have tamed the skeleton.'},
	[13307]	=	{NAME = 'Wailing Widow',			ID = 1,		TYPE = TYPE_MONSTER,	CHANCE = 40,	FAIL_MSG = { {1, 'The widow has run away.'}, {2, 'The widow has eaten the sweet bait.'} }, SUCCESS_MSG = 'You have tamed the widow.'},
	[13292]	=	{NAME = 'inoperative tin lizzard',		ID = 8,		TYPE = TYPE_ITEM,	CHANCE = 40,	FAIL_MSG = { {2, 'The key broke inside.'} }, SUCCESS_MSG = 'You wind up the tin lizzard.'},
	[13294]	=	{NAME = 'Draptor',				ID = 6,		TYPE = TYPE_MONSTER,	CHANCE = 40,	FAIL_MSG = { {1, 'The draptor has run away.'}, {3, 'The draptor has fled.'} }, SUCCESS_MSG = 'You have tamed the draptor.'},
	[13536]	=	{NAME = 'Crystal Wolf',				ID = 16,	TYPE = TYPE_MONSTER,	CHANCE = 40,	FAIL_MSG = { {1, 'The wolf has run away.'} }, SUCCESS_MSG = 'You have tamed the wolf.'},
	[13539]	=	{NAME = 'Enraged White Deer',			ID = 18,	TYPE = TYPE_MONSTER,	CHANCE = 40,	FAIL_MSG = { {2, 'The cone broke.'}, {3, 'The deer has fled in fear.'} }, SUCCESS_MSG = 'You have tamed the deer.'},
	[13538]	=	{NAME = 'Panda',				ID = 19,	TYPE = TYPE_MONSTER,	CHANCE = 40,	FAIL_MSG = { {4, 'Panda ate the leaves and ran away.'} }, SUCCESS_MSG = 'You have tamed the panda.'},
	[13535]	=	{NAME = 'Dromedary',				ID = 20,	TYPE = TYPE_MONSTER,	CHANCE = 40,	FAIL_MSG = { {1, 'Dromedary has run away.'} }, SUCCESS_MSG = 'You have tamed the dromedary.'},
	[13498]	=	{NAME = 'Sandstone Scorpion',			ID = 21,	TYPE = TYPE_MONSTER,	CHANCE = 40,	FAIL_MSG = { {1, 'The scorpion has vanished.'}, {2, 'Scorpion broken the sceptre.'} }, SUCCESS_MSG = 'You have tamed the scorpion.'},
	[13537]	=	{NAME = 'Donkey',				ID = 13,	TYPE = TYPE_MONSTER,	CHANCE = 40,	FAIL_MSG = { {1, 'The witch has escaped!'} }, SUCCESS_MSG = 'You have tamed the mule.'},
	[13938]	=	{NAME = 'inoperative uniwheel',			ID = 15,	TYPE = TYPE_ITEM,	CHANCE = 40,	FAIL_MSG = { {3, 'The oil have no effect.'}, {2, 'Splosh!'} }, SUCCESS_MSG = 'The strange wheel seems to vibrate and slowly starts turning continuously.'},
	[13508]	=	{NAME = 'Slug',					ID = 14,	TYPE = TYPE_MONSTER,	CHANCE = 40,	FAIL_MSG = { {1, 'The slug has run away.'}, {3, 'The drug had no effect.'} }, SUCCESS_MSG = 'You have tamed the slug.'},
	[13939]	=	{NAME = 'Wild Horse',				ID = 17,	TYPE = TYPE_MONSTER,	CHANCE = 15,	FAIL_MSG = { {1, 'The horse runs away.'}, {2, 'The horse ate the oats.'} }, SUCCESS_MSG = 'You have tamed the horse.'},
	[15545]	=	{NAME = 'Manta Ray',				ID = 28,	TYPE = TYPE_MONSTER,	CHANCE = 30,	FAIL_MSG = { {1, 'The manta ray fled.'}, {3, 'The manta ray is trying to escape.'} }, SUCCESS_MSG = 'You have tamed the manta ray.'},
	[15546]	=	{NAME = 'Lady Bug',				ID = 27,	TYPE = TYPE_MONSTER,	CHANCE = 30,	FAIL_MSG = { {1, 'The ladybug got scared and ran away.'}, {3, 'The ladybug is trying to nibble.'} }, SUCCESS_MSG = 'You tame a lady bug.'},
	[18447]	=	{NAME = 'Ironblight',				ID = 29,	TYPE = TYPE_MONSTER,	CHANCE = 30,	FAIL_MSG = { {1, 'The ironblight managed to run away.'}, {2, 'Oh no! The magnet lost its power!'}, {3, 'The ironblight is fighting against the magnetic force.'} }, SUCCESS_MSG = 'You tamed the ironblight.'},
	[18449] =       {NAME = 'Dragonling',                  	        ID = 31,        TYPE = TYPE_MONSTER,    CHANCE = 30,    FAIL_MSG = { {1, "The dragonling got scared and ran away."}, {3, "The dragonling is trying to nibble."} }, SUCCESS_MSG = "You tamed a dragonling."},
	[18448]	=	{NAME = 'Magma Crawler',			ID = 30,	TYPE = TYPE_MONSTER,	CHANCE = 30,	FAIL_MSG = { {1, 'The magma crawler refused to drink wine and vanishes into thin air.'}, {2, 'Argh! The magma crawler pushed you and you spilled the glow wine!'}, {3, 'The magma crawler is smelling the glow wine suspiciously.'} }, SUCCESS_MSG = 'The magma crawler will accompany you as a friend from now on.'},
	[18516]	=	{NAME = 'Modified Gnarlhound', 			ID = 32,	TYPE = TYPE_MONSTER,	CHANCE = 100,	FAIL_MSG = { }, SUCCESS_MSG = 'You now own a modified gnarlhound.'},
	[21452] =       {NAME = 'Gravedigger',      		        ID = 39,        TYPE = TYPE_MONSTER,    CHANCE = 40,    FAIL_MSG = { {1, "The gravedigger got scared and ran away."}, {3, "The gravedigger is trying to nibble."} }, SUCCESS_MSG = "You tamed the hellgrip."},
	[20138]	=	{NAME = 'Water Buffalo',			ID = 35,	TYPE = TYPE_MONSTER,	CHANCE = 30,	FAIL_MSG = { {1, 'The water buffalo got scared and ran away.'}, {3, 'The water buffalo is trying to nibble.'} }, SUCCESS_MSG = 'You tamed a water buffalo.'},
	[22608]	=	{NAME = 'Shock Head', 				ID = 42,	TYPE = TYPE_MONSTER,	CHANCE = 30,	FAIL_MSG = { {1, 'The shock head ran away.'}, {3, 'The shock head is growling at you.'} }, SUCCESS_MSG = 'You tamed the shock head.'},
	[23550]	=	{NAME = 'Walker', 				ID = 43,	TYPE = TYPE_MONSTER,	CHANCE = 15,	FAIL_MSG = { {2, 'This walker is incompatible with your control unit.'}, {4, 'This walker is incompatible with your control unit.'} }, SUCCESS_MSG = 'You tamed the walker.'},
	[23880]	=	{NAME = 'Noble Lion', 				ID = 40,	TYPE = TYPE_MONSTER,	CHANCE = 30,	FAIL_MSG = { {2, 'The lion got scared and ran away.'}, {4, 'The lion is trying to nibble.'} }, SUCCESS_MSG = 'You tamed the lion.'}
}

local function doFailAction(cid, mount, pos, item, itemEx)
	local action, effect = mount.FAIL_MSG[math.random(#mount.FAIL_MSG)], CONST_ME_POFF
	if(action[1] == ACTION_RUN) then
		Creature(itemEx.uid):remove()
	elseif(action[1] == ACTION_BREAK) then
		effect = CONST_ME_BLOCKHIT
		Item(item.uid):remove(1)
	elseif(action[1] == ACTION_ALL) then
		Creature(itemEx.uid):remove()
		Item(item.uid):remove(1)
	end

	pos:sendMagicEffect(effect)
	Player(cid):say(action[2], TALKTYPE_MONSTER_SAY)
	return action
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
	local player = Player(cid)
	local targetMonster = Monster(itemEx.uid)
	local targetNpc = Npc(itemEx.uid)
	local targetItem = Item(itemEx.uid)
	local mount = config[item.itemid]
	if mount == nil or player:hasMount(mount.ID) then
		return false
	end

	local rand = math.random(100)
	--Monster Mount
	if targetMonster ~= nil and mount.TYPE == TYPE_MONSTER then
		if Creature(itemEx.uid):getMaster() then
			player:say('You can\'t tame a summon!', TALKTYPE_MONSTER_SAY)
			return true
		end

		if mount.NAME == targetMonster:getName() then
			if rand > mount.CHANCE then
				doFailAction(cid, mount, toPosition, item, itemEx)
				return true
			end

			player:addMount(mount.ID)
			player:say(mount.SUCCESS_MSG, TALKTYPE_MONSTER_SAY)
			targetMonster:remove()

			toPosition:sendMagicEffect(CONST_ME_MAGIC_GREEN)
			Item(item.uid):remove(1)
			return true
		end
	--NPC Mount
	elseif targetNpc ~= nil and mount.TYPE == TYPE_NPC then
		if mount.NAME == targetNpc:getName() then
			if rand > mount.CHANCE then
				doFailAction(cid, mount, toPosition, item, itemEx)
				return true
			end

			player:addMount(mount.ID)
			player:say(mount.SUCCESS_MSG, TALKTYPE_MONSTER_SAY)

			toPosition:sendMagicEffect(CONST_ME_MAGIC_GREEN)
			Item(item.uid):remove(1)
			return true
		end
	--Item Mount
	elseif targetItem ~= nil and mount.TYPE == TYPE_ITEM then
		if mount.NAME == targetItem:getName() then
			if rand > mount.CHANCE then
				doFailAction(cid, mount, toPosition, item, itemEx)
				return true
			end

			player:addMount(mount.ID)
			player:say(mount.SUCCESS_MSG, TALKTYPE_MONSTER_SAY)

			toPosition:sendMagicEffect(CONST_ME_MAGIC_GREEN)
			Item(item.uid):remove(1)
			return true
		end
	--Action Mount
	elseif itemEx.actionid > 0 and mount.TYPE == TYPE_ACTION then
		if(mount.NAME == itemEx.actionid) then
			if rand > mount.CHANCE then
				doFailAction(cid, mount, toPosition, item, itemEx)
				return true
			end

			player:addMount(mount.ID)
			player:say(mount.SUCCESS_MSG, TALKTYPE_MONSTER_SAY)

			toPosition:sendMagicEffect(CONST_ME_MAGIC_GREEN)
			Item(item.uid):remove(1)
			return true
		end
	--Unique Mount
	elseif itemEx.uid <= 65535 and mount.TYPE == TYPE_UNIQUE then
		if mount.NAME == itemEx.uid then
			if rand > mount.CHANCE then
				doFailAction(cid, mount, toPosition, item, itemEx)
				return true
			end

			player:addMount(mount.ID)
			player:say(mount.SUCCESS_MSG, TALKTYPE_MONSTER_SAY)

			toPosition:sendMagicEffect(CONST_ME_MAGIC_GREEN)
			Item(item.uid):remove(1)
			return true
		end
	end
	return false
end 
        <action itemid="13941" script="other/cup of molten gold.lua"/>
        <action itemid="5907" script="other/taming.lua"/>
	<action itemid="13247" script="other/taming.lua"/>
	<action itemid="13291" script="other/taming.lua"/>
	<action itemid="13292" script="other/taming.lua"/>
	<action itemid="13293" script="other/taming.lua"/>
	<action itemid="13294" script="other/taming.lua"/>
	<action itemid="13295" script="other/taming.lua"/>
	<action itemid="13298" script="other/taming.lua"/>
	<action itemid="13305" script="other/taming.lua"/>
	<action itemid="13307" script="other/taming.lua"/>
	<action itemid="13508" script="other/taming.lua"/>
	<action itemid="13535" script="other/taming.lua"/>
	<action itemid="13536" script="other/taming.lua"/>
	<action itemid="13537" script="other/taming.lua"/>
	<action itemid="13538" script="other/taming.lua"/>
	<action itemid="13539" script="other/taming.lua"/>
	<action itemid="13938" script="other/taming.lua"/>
	<action itemid="13939" script="other/taming.lua"/>
	<action itemid="13498" script="other/taming.lua"/>
	<action itemid="15545" script="other/taming.lua"/>
	<action itemid="15546" script="other/taming.lua"/>
	<action itemid="20138" script="other/taming.lua"/>
	<action itemid="21452" script="other/taming.lua"/>
	<action itemid="22608" script="other/taming.lua"/>
	<action itemid="18449" script="other/taming.lua"/>
	<action itemid="18447" script="other/taming.lua"/>
	<action itemid="18448" script="other/taming.lua"/>
	<action itemid="18516" script="other/taming.lua"/>
	<action itemid="18516" script="other/taming.lua"/>
	<action itemid="23550" script="other/taming.lua"/>
	<action itemid="23880" script="other/taming.lua"/>

 

 

 

Eu clico no item, a cruz de seleção aparece, e eu clico no urso e recebo a seguinte mensagem

"you cannot use this object"

 

Nenhum erro aparece no console.., alguém saberia identificar o problema ou ajudar a solucionar?

BrunoB
24 de julho de 2015 às 09:36
Melhor resposta

@,

 

Você pode tentar esse aqui...

 

Em data/actions/actions.xml:

<action itemid="5907" script="taming.lua" />
<action itemid="13247" script="taming.lua" />
<action itemid="13939" script="taming.lua" />
Em data/actions/scripts/taming.lua:

 

 

local TYPE_ITEM, TYPE_MONSTER, TYPE_NPC = 0, 2, 3

local config = {
	[5907] = { -- id do item
		name = 'bear', -- nome da criatura a domar
		id = 3, -- id da montaria
		type = TYPE_MONSTER, -- tipo da montaria
		chance = 20, -- chance de sucesso
		fail = {
			{run = true, text = 'The bear ran away.'}, -- mensagem se a criatura correr
			{broke = true, text = 'Oh no! The slingshot broke.'}, -- mensagem se o item quebrar
			{sound = 'GRRRRRRRRRRRR', text = 'The bear is trying to hit you with its claws.'} -- mensagem se nada acontecer
		},
		success = {sound = 'Grrrrrrr', text = 'You tamed the wild bear.'} -- mensagem se domar
	},

	[13247]	= {
		name = 'boar',
		id = 10,
		type = TYPE_MONSTER,
		chance = 40,
		fail = {
			{run = true, text = 'The boar ran away'},
			{broke = true, text = 'Oh no! The hunting horn broke!'},
			{sound = 'Grunt! Grunt!', text = 'The boar is refusing to obey the hunting horn.'}
		},
		success = {sound = 'Oink', text = 'You tamed the wild boar.'}
	},

	[13939]	= {
		name = 'wild horse',
		id = 17,
		type = TYPE_MONSTER,
		chance = 5,
		fail = {
			{run = true, text = 'With its last strength the horse the horse runs to safety.'},
			{broke = true, sound = 'Weeeheeeehee', text = 'The wild horse happily munches the sugar oat and runs on.'},
			{sound = 'Weeheheheehaaa!!', text = 'Weeeheeeehee.'}
		},
		success = {sound = '*snort*', text = 'The horse eats the sugar oat and accepts you as its new master.'}
	}
}

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
	local mount = config[item.itemid]
	if not mount then
		return false
	end

	local targetName = target:getName():lower()
	if mount.type ~= target.type
			or (mount.lookType and mount.lookType ~= target:getOutfit().lookType)
			or (mount.name and mount.name ~= targetName) then
		return false
	end

	if player:hasMount(mount.id) then
		player:say('You already tamed a ' .. (mount.mountName or targetName) .. '.', TALKTYPE_MONSTER_SAY)
		return true
	end

	if target.type == TYPE_MONSTER then
		if target:getMaster() then
			return false
		end
	end

	if math.random(100) > mount.chance then
		local action = mount.fail[math.random(#mount.fail)]
		if action.run then
			target:remove()
		elseif action.broke then
			item:remove(1)
		elseif action.destroyObject then
			addEvent(Game.createItem, 60 * 60 * 1000, target.itemid, 1, toPosition)
			target:remove()
		elseif action.removeTransformation then
			target:removeCondition(CONDITION_OUTFIT)
		end

		if action.sound then
			player:say(action.sound, TALKTYPE_MONSTER_SAY, false, 0, toPosition)
		end
		return true
	end

	player:addMount(mount.id)
	doCreatureSayWithRadius(player, mount.success.text, TALKTYPE_MONSTER_SAY, 2, 2)
	player:say(mount.success.sound, TALKTYPE_MONSTER_SAY, false, 0, toPosition)

	target:remove()
	item:remove(1)
	return true
end

 

Editado Julho 24 por Bruno Minervino

DeCarvalhoD
24 de julho de 2015 às 13:27

Ola, boa tarde, :/ não posso dar mais rep hoje .. enfim.. Testei com esse lua que passou mas eu recebo a seguinte msg de erro no console ao usar o item no mostro.

 

Lua Script Error: [Action Interface]
data/actions/scripts/other/taming.lua:onUse
data/actions/scripts/other/taming.lua:81: attempt to call global 'doCreatureSayWithRadius' (a nil value)
stack traceback:
        [C]: in function 'doCreatureSayWithRadius'
        data/actions/scripts/other/taming.lua:81: in function <data/actions/scripts/other/taming.lua:44>

procurando na internet o uso de doCreatureSayWithRadius eu vi que não atrapalharia se eu tirasse o WithRadius, pelo menos não vi como isso poderia atrapalhar.. ao remover ele cai em outro erro.. procurei mas não consegui achar uma maneira de fazer funcionar..

Lua Script Error: [Action Interface]
data/actions/scripts/other/taming.lua:onUse
data/actions/scripts/other/taming.lua:88: attempt to call method 'addAchievement' (a nil value)
stack traceback:
        [C]: in function 'addAchievement'
        data/actions/scripts/other/taming.lua:88: in function <data/actions/scripts/other/taming.lua
:44>

então para testar eu fiz -- player:addAchievement('Natural Born Cowboy') e funcionou normalmente.. diminuí a chance para testar se haveria falha..

 

funcionou, mas eu gostaria do achievement, então como fazer com esse addAchievement?

Editado Julho 24 por DkAngel

BrunoB
24 de julho de 2015 às 20:06

Bom, na verdade eu peguei do server orts https://github.com/orts/server, se quiser dar uma olhada.

Editei o tópico, realmente não precisa das funções que deu erro.

 

Dúvida sanada,

Att.

Tópico movido para dúvidas / pedidos resolvidos.

Editado Julho 24 por Bruno Minervino

DeCarvalhoD
24 de julho de 2015 às 21:42

Muito Obrigado :) e +rep pela ajuda :D