Ir para conteúdo
  • Cadastre-se

(Resolvido)ERRO SNOWBALL


Ir para solução Resolvido por KotZletY,

Posts Recomendados

TFS 0.4
Tibia 8.60

Erro

 

http://i.imgur.com/YvKoOFc.png

 

Script postada pelo abslute no topic:

Porem muitos postaram esse erro e ele não ofereceu o devido suporte no topic, por talvez está sem tempo ou algo do tipo, se ele ou alguém puder ajudar serei muito grato.

Screenshot_6.png

Link para o post
Compartilhar em outros sites

Testa esse aqui

 

OBS: é um mod!

<?xml version="1.0" encoding="UTF-8"?>
	<mod name="Paintball event" version="1.0" author="Bogart" contact="otland.net" enabled="yes">
		<description>
			
		</description>
		<config name="config"><![CDATA[
		t = {
			main = {
				tfs_version = "0.3", --0.3 or 0.4
				positions = {
					paintball_spawn_area = {
						top_left = {x = 970, y = 1040, z = 4}, --Top left pos of spawning area
						bottom_right = {x = 975, y = 1046, z = 7}--bottom right pos of spawning area
					},
					waiting_room_area = {
						top_left = {x = 970, y = 1040, z = 7}, --Top left pos of the waiting room
						bottom_right = {x = 975, y = 1046, z = 7}--bottom right pos of the waiting room
					},
					tp_to_paintball = {x = 985, y = 1052, z = 7}, --pos where the tp will be created
					event_ending_pos = {x = 985, y = 1052, z = 7} --pos players will be sent after event ending
				},
				storages = {
					exhaust = 2455,
					is_in_event = 2460,
					score = 2465
				},
				misc = {
					status = 'on'
				},
				messages = {
					event_started = "Paintball event has started! there's a teleport near Thais temple!",--Message that will be broadcasted after the event has started
					event_ended = "Paintball event has ended!" --same but when event ends
				},
				event_config = {
					event_duration = 15, --minutes, 0 if it's an always-open event
					infinite_ammo = false,
					winner_gets_item = true,
					prize_item_id = 3051,
					decrease_score_on_death = true,
					points_per_kill = 1,
					randomize_player_start_pos = true,
					ammo_per_point = 100,
					reset_bullets_on_death = true,
					min_bullets_on_spawn = 100,
					start_automatically = false,
					use_waiting_room = false,
					waiting_time = 3 --minutes
				}
			},
			onShoot = {
				storages = {
					ammo = 2400
				},
				misc = {
					walls_id = {1115,1111,1112,5258,1385,1113},
					bullets_exhaust = 500, --in ms
					bullet_speed = 150
				},
				vars = {
					shootdir = 0
				}
			}
		}
		]]></config>
		<movevent type="StepIn" actionid ="2880" event="script"><![CDATA[
		domodlib('config')
		function onStepIn(cid, item, pos)
			local t_l = t.main.positions.paintball_spawn_area.top_left
			local b_r = t.main.positions.paintball_spawn_area.bottom_right
			doTeleportThing(cid, {x=math.random(t_l.x,b_r.x), y=math.random(t_l.y, b_r.y), z=math.random(t_l.z, b_r.z)})
			doPlayerSetStorageValue(cid, t.main.storages.is_in_event,1)
			doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn)
			doPlayerSetStorageValue(cid, t.main.storages.score, 0)
			doPlayerSendTextMessage(cid,27,"Welcome to paintball, here are the commands:\n!shoot bullet --This will shot a bullet.\n!shoot ammo --This will give you "..t.main.event_config.ammo_per_point.." bullets and take 1 point from your current score (you need at least 1 point to use this command).\n!shoot info --This will show you your current score and ammo, it'll also show the current high score of the event.\nIt is strongly recommended that you bind these commands to your hotkeys.")
		end
		]]></movevent>
		<globalevent name="StartPaintBall" interval="3600" event="script"><![CDATA[
		domodlib('config')
		function onThink(interval, lastExecution, thinkInterval)
			if t.main.event_config.start_automatically then
				doBroadcastMessage(t.main.messages.event_started, MESSAGE_STATUS_WARNING)
				if t.main.event_config.use_waiting_room then
					addEvent(moveToEvent, t.main.event_config.waiting_time*1000*60) 
					doCreateTeleport(1387,t.main.positions.waiting_room_area.top_left, t.main.positions.tp_to_paintball)
				else
					if t.main.tfs_version == "0.3" then 
						doItemSetAttribute(doCreateItem(1387, t.main.positions.tp_to_paintball), "aid", 2880)
					else
						doSetItemActionId(doCreateItem(1387, t.main.positions.tp_to_paintball),2880)
					end
					if(t.main.event_config.event_duration > 0) then
						addEvent(endPaintball, t.main.event_config.event_duration*1000*60)
					end
				end
			end
		return true
		end
		
		function endPaintball()
			local score = {}
			if not t.main.event_config.use_waiting_room then 
				doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid)
			end
			for _, pid in ipairs(getPlayersOnline()) do
				if getPlayerStorageValue(pid, t.main.storages.is_in_event) > 0 then
					table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, t.main.storages.score)})
					doPlayerSetStorageValue(pid, t.main.storages.is_in_event, 0)
					doPlayerSetStorageValue(pid, t.main.storages.score, 0)
					doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, 0)
					doTeleportThing(pid, t.main.positions.event_ending_pos)
				end
			end
			table.sort(score, function(a, b) return a[2] > b[2] end)
			if table.getn(score) > 0 then
				if t.main.event_config.winner_gets_item then
					for _, pid in ipairs(getPlayersOnline()) do
						if getCreatureName(pid) == score[1][1] then
							doPlayerAddItem(pid, t.main.event_config.prize_item_id)
							break
						end
					end
				end
				doBroadcastMessage("Paintball event has ended, "..score[1][1].." won paintball event with "..score[1][2].." points", MESSAGE_STATUS_WARNING)
			end
		end
		local t_l = t.main.positions.paintball_spawn_area.top_left
		local b_r = t.main.positions.paintball_spawn_area.bottom_right
		function moveToEvent()
			for _, pid in ipairs(getPlayersOnline()) do 
				if isInRange(getCreaturePosition(pid), t.main.positions.waiting_room_area.top_left, t.main.positions.waiting_room_area.bottom_right) then
					doTeleportThing(pid, {x=math.random(t_l.x,b_r.x), y=math.random(t_l.y, b_r.y), z=math.random(t_l.z, b_r.z)})
					doPlayerSetStorageValue(pid, t.main.storages.is_in_event,1)
					doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn)
					doPlayerSetStorageValue(pid, t.main.storages.score, 0)
					doPlayerSendTextMessage(pid,27,"Welcome to paintball, here are the commands:\n!shoot bullet --This will shot a bullet.\n!shoot ammo --This will give you "..t.main.event_config.ammo_per_point.." bullets and take 1 point from your current score (you need at least 1 point to use this command).\n!shoot info --This will show you your current score and ammo, it'll also show the current high score of the event.\nIt is strongly recommended that you bind these commands to your hotkeys.")
				end
			end
			doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid)
			addEvent(endPaintball, t.main.event_config.event_duration*1000*60)
		end
		]]></globalevent> 
		<talkaction words="!shoot" event="script"><![CDATA[
		domodlib('config')
		function onSay(cid, words, param, channel)
			local k = string.explode(param, ",")
			if(k[1] ~= nil) then 
				if(string.upper(k[1]) == 'END') and getPlayerGroupId(cid) >= 3 then
					endPaintball()
				end
				if(string.upper(k[1]) == 'START') and getPlayerGroupId(cid) >= 3 then
					doBroadcastMessage(t.main.messages.event_started, MESSAGE_STATUS_WARNING)
					if t.main.event_config.use_waiting_room then
						addEvent(moveToEvent, t.main.event_config.waiting_time*1000*60) 
						doCreateTeleport(1387,t.main.positions.waiting_room_area.top_left, t.main.positions.tp_to_paintball)
					else
						if t.main.tfs_version == "0.3" then 
							doItemSetAttribute(doCreateItem(1387, t.main.positions.tp_to_paintball), "aid", 2880)
						else
							doSetItemActionId(doCreateItem(1387, t.main.positions.tp_to_paintball),2880)
						end
						if(t.main.event_config.event_duration > 0) then
							addEvent(endPaintball, t.main.event_config.event_duration*1000*60)
						end
					end
				end
				if(string.upper(k[1]) == 'INFO') then
				local score = {}
				local output =  "You have " .. getPlayerStorageValue(cid, t.main.storages.score) .. " points.\nYou have "..getPlayerStorageValue(cid, t.onShoot.storages.ammo).." ammo left.\n------------------\nThe current high score in paintball is:\n"
					for _, pid in ipairs(getPlayersOnline()) do
						if getPlayerStorageValue(pid, t.main.storages.is_in_event) then
							table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, t.main.storages.score)})
						end
					end
				local lx = table.getn(score)
				if(lx > 3) then lx = 3 end 
					table.sort(score, function(a, b) return a[2] > b[2] end)
					for k = 1,lx do
						output = output .. k..". "..score[k][1] .." [".. score[k][2] .."].\n"
					end
				doPlayerPopupFYI(cid, output) 
				end
				if (string.upper(k[1]) == 'AMMO') then
					if(t.main.event_config.infinite_ammo) then 
						doPlayerSendTextMessage(cid, 27, "Ammo is infinite, there's no need to buy more.")
					else
						if getPlayerStorageValue(cid, t.main.storages.score) > 0 then
							doPlayerSetStorageValue(cid, t.main.storages.score, getPlayerStorageValue(cid, t.main.storages.score)-1)
							doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, getPlayerStorageValue(cid,t.onShoot.storages.ammo)+t.main.event_config.ammo_per_point)
							doPlayerSendTextMessage(cid, 27, "You have received " .. t.main.event_config.ammo_per_point .. " bullets and you have lost 1 score point.")
							doSendMagicEffect(getCreaturePosition(cid),4)
						else
							doPlayerSendTextMessage(cid, 27, "You do not have enough score points to buy ammo, you need ".. 1-(getPlayerStorageValue(cid, t.main.storages.score)).. " more.")			
						end
					end
				end
				if (string.upper(k[1]) == 'BULLET') then
					if(getPlayerStorageValue(cid, t.main.storages.is_in_event) == 1) then
						if getPlayerStorageValue(cid, t.main.storages.exhaust) <= 1 then
							if(getPlayerStorageValue(cid, t.onShoot.storages.ammo) > 0) then
								if t.main.misc.status == 'on' then
									if(t.main.event_config.infinite_ammo == false) then
										doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, getPlayerStorageValue(cid, t.onShoot.storages.ammo)-1)
									end
									doPlayerSetStorageValue(cid, t.main.storages.exhaust, 2)
									lineAnimation(getPlayerLookDirection(cid),getCreaturePosition(cid),12,cid,1,0,1,0,0,0,1,0)
									addEvent(doPlayerSetStorageValue,t.onShoot.misc.bullets_exhaust, cid, t.main.storages.exhaust,1)
								end
							else
								doPlayerSendCancel(cid, "You're out of ammo, exchange ammo for points with !shoot ammo or get killed for a recharge.")
								doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)	
							end
						else
							doPlayerSendCancel(cid, "Gun is on cooldown")
							doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
						end
					else
						doPlayerSendCancel(cid, "You need to be in the event.")
						doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
					end
				end
			end
		return true
		end


		function lineAnimation(lookDir,playerPos,effect,cid,fvar,fpos,ffound,fposV,fcheck,fvcid,floopCounter,fvpid, name)
		local var = fvar
		local pos = fpos
		local found = ffound
		local posV = fposV
		local check = fcheck
		local vcid = fvcid
		local loopCounter = floopCounter
		local vpid = fvpid
		local storage = t.main.storages.exhaust
			if var < 2 then
				vcid = cid
			end
			pos = playerPos
			if not isInWallArray(convert(lookDir,pos)) then--isInWallArray({x=convert(lookDir,pos).x, y=convert(lookDir,pos).y,z=convert(lookDir,pos).z}) then --isInArray(t.onShoot.misc.walls_id, getThingfromPos({x=convert(lookDir,pos).x, y=convert(lookDir,pos).y,z=convert(lookDir,pos).z, stackpos=0}).itemid) then
				doSendDistanceShoot(pos, convert(lookDir,pos),effect)
				pos = convert(lookDir,pos)
				var=var+1
				posV = convertV(lookDir,playerPos)
				for _, pid in ipairs(getPlayersOnline()) do
					if (getCreaturePosition(pid).x == pos.x and getCreaturePosition(pid).y == pos.y and getCreaturePosition(pid).z == pos.z) then
						--if loopCounter > 2 then
						vpid = pid
						--end
						if (vpid ~= vcid) then
							if var > 2 then
								if (getCreaturePosition(pid).x == posV.x and getCreaturePosition(pid).y == posV.y and getCreaturePosition(pid).z == posV.z) then
									killPlayer(pid,pos,getCreatureName(vcid))
									if (lookDir == 0) or (lookDir == 2) then 
										var = 6
									else
										var = 8
									end
								end
							end
							killPlayer(pid,pos,vcid)
							if (lookDir == 0) or (lookDir == 2) then
								var = 6
							else
								var = 8
							end
						end
					end
					loopCounter = loopCounter +1
				end	
				if (lookDir == 0) or (lookDir == 2) then
					if var ~= 6 then
						addEvent(lineAnimation, t.onShoot.misc.bullet_speed, lookDir,pos,effect,nil,var,pos,found,posV,check,vcid,loopCounter,vpid)
					else
						var = 1
					end
				else
					if var ~= 8 then
						addEvent(lineAnimation,  t.onShoot.misc.bullet_speed, lookDir,pos,effect,nil,var,pos,found,posV,check,vcid,loopCounter,vpid)
					else
						var = 1
					end
				end
			else
				doSendMagicEffect(convert(lookDir,pos),2)
				var = 1
			end
		end

		local ret = {}
		function convert(lookDir,pos)
		local positions = {
			[0] = {x = pos.x, y = pos.y-1, z = pos.z},
			[1] = {x = pos.x+1, y = pos.y, z = pos.z},
			[2] = {x = pos.x, y = pos.y+1, z = pos.z},
			[3] = {x = pos.x-1, y = pos.y, z = pos.z}
			}
			ret = positions[lookDir]
		return ret
		end


		local ret = {}
		function convertV(lookDir,pos)
		local positions = {
			[0] = {x = pos.x, y = pos.y+1, z = pos.z},
			[1] = {x = pos.x-1, y = pos.y, z = pos.z},
			[2] = {x = pos.x, y = pos.y-1, z = pos.z},
			[3] = {x = pos.x+1, y = pos.y, z = pos.z}
			}
			ret = positions[lookDir]
		return ret
		end
				
		function killPlayer(cid,pos, killer)
			local t_l = t.main.positions.paintball_spawn_area.top_left
			local b_r = t.main.positions.paintball_spawn_area.bottom_right
			doTeleportThing(cid, {x=math.random(t_l.x,b_r.x), y=math.random(t_l.y, b_r.y), z=math.random(t_l.z, b_r.z)})
			doSendMagicEffect(pos,2)
			doPlayerSendTextMessage(cid, 27, "You've been killed by "..getCreatureName(killer)..".")
			doPlayerSetStorageValue(killer, t.main.storages.score, getPlayerStorageValue(killer, t.main.storages.score)+t.main.event_config.points_per_kill)
			doPlayerSendTextMessage(killer, 27, "You've killed "..getCreatureName(cid)..".")
			doBroadcastMessage("[Event] Paintball: "..getCreatureName(killer).." has killed "..getCreatureName(cid)..".", MESSAGE_STATUS_WARNING)
			if t.main.event_config.decrease_score_on_death then
				doPlayerSetStorageValue(cid, t.main.storages.score, getPlayerStorageValue(cid, t.main.storages.score)-1)
			end
			if t.main.event_config.reset_bullets_on_death then
				doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn)
			end
		end
						
		function isInWallArray(pos)
			for k = 0, table.getn(t.onShoot.misc.walls_id) do
				if getTileItemById(pos, t.onShoot.misc.walls_id[k]).itemid == t.onShoot.misc.walls_id[k] then --this doesn't even make sense but tried other ways and it gave errors, so meh 2lazy2search 
					return true	
				end
			end
			return false
		end
		function endPaintball()
			local score = {}
			if not t.main.event_config.use_waiting_room then 
				doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid)
			end
			for _, pid in ipairs(getPlayersOnline()) do
				if getPlayerStorageValue(pid, t.main.storages.is_in_event) > 0 then
					table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, t.main.storages.score)})
					doPlayerSetStorageValue(pid, t.main.storages.is_in_event, 0)
					doPlayerSetStorageValue(pid, t.main.storages.score, 0)
					doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, 0)
					doTeleportThing(pid, t.main.positions.event_ending_pos)
				end
			end
			table.sort(score, function(a, b) return a[2] > b[2] end)
			if table.getn(score) > 0 then
				if t.main.event_config.winner_gets_item then
					for _, pid in ipairs(getPlayersOnline()) do
						if getCreatureName(pid) == score[1][1] then
							doPlayerAddItem(pid, t.main.event_config.prize_item_id)
							break
						end
					end
				end
			doBroadcastMessage("Painball event has ended, "..score[1][1].." won paintball event with "..score[1][2].." points", MESSAGE_STATUS_WARNING)
			end
		end
		local t_l = t.main.positions.paintball_spawn_area.top_left
		local b_r = t.main.positions.paintball_spawn_area.bottom_right
		function moveToEvent()
			for _, pid in ipairs(getPlayersOnline()) do 
				if isInRange(getCreaturePosition(pid), t.main.positions.waiting_room_area.top_left, t.main.positions.waiting_room_area.bottom_right) then
					doTeleportThing(pid, {x=math.random(t_l.x,b_r.x), y=math.random(t_l.y, b_r.y), z=math.random(t_l.z, b_r.z)})
					doPlayerSetStorageValue(pid, t.main.storages.is_in_event,1)
					doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn)
					doPlayerSetStorageValue(pid, t.main.storages.score, 0)
					doPlayerSendTextMessage(pid,27,"Welcome to paintball, here are the commands:\n!shoot bullet --This will shot a bullet.\n!shoot ammo --This will give you "..t.main.event_config.ammo_per_point.." bullets and take 1 point from your current score (you need at least 1 point to use this command).\n!shoot info --This will show you your current score and ammo, it'll also show the current high score of the event.\nIt is strongly recommended that you bind these commands to your hotkeys.")
				end
			end
			doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid)
			addEvent(endPaintball, t.main.event_config.event_duration*1000*60)
		end
		]]></talkaction>
	</mod>

 

Link para o post
Compartilhar em outros sites
6 minutos atrás, Weslley Kiyo disse:

Testa esse aqui

 

OBS: é um mod!


<?xml version="1.0" encoding="UTF-8"?>
	<mod name="Paintball event" version="1.0" author="Bogart" contact="otland.net" enabled="yes">
		<description>
			
		</description>
		<config name="config"><![CDATA[
		t = {
			main = {
				tfs_version = "0.3", --0.3 or 0.4
				positions = {
					paintball_spawn_area = {
						top_left = {x = 970, y = 1040, z = 4}, --Top left pos of spawning area
						bottom_right = {x = 975, y = 1046, z = 7}--bottom right pos of spawning area
					},
					waiting_room_area = {
						top_left = {x = 970, y = 1040, z = 7}, --Top left pos of the waiting room
						bottom_right = {x = 975, y = 1046, z = 7}--bottom right pos of the waiting room
					},
					tp_to_paintball = {x = 985, y = 1052, z = 7}, --pos where the tp will be created
					event_ending_pos = {x = 985, y = 1052, z = 7} --pos players will be sent after event ending
				},
				storages = {
					exhaust = 2455,
					is_in_event = 2460,
					score = 2465
				},
				misc = {
					status = 'on'
				},
				messages = {
					event_started = "Paintball event has started! there's a teleport near Thais temple!",--Message that will be broadcasted after the event has started
					event_ended = "Paintball event has ended!" --same but when event ends
				},
				event_config = {
					event_duration = 15, --minutes, 0 if it's an always-open event
					infinite_ammo = false,
					winner_gets_item = true,
					prize_item_id = 3051,
					decrease_score_on_death = true,
					points_per_kill = 1,
					randomize_player_start_pos = true,
					ammo_per_point = 100,
					reset_bullets_on_death = true,
					min_bullets_on_spawn = 100,
					start_automatically = false,
					use_waiting_room = false,
					waiting_time = 3 --minutes
				}
			},
			onShoot = {
				storages = {
					ammo = 2400
				},
				misc = {
					walls_id = {1115,1111,1112,5258,1385,1113},
					bullets_exhaust = 500, --in ms
					bullet_speed = 150
				},
				vars = {
					shootdir = 0
				}
			}
		}
		]]></config>
		<movevent type="StepIn" actionid ="2880" event="script"><![CDATA[
		domodlib('config')
		function onStepIn(cid, item, pos)
			local t_l = t.main.positions.paintball_spawn_area.top_left
			local b_r = t.main.positions.paintball_spawn_area.bottom_right
			doTeleportThing(cid, {x=math.random(t_l.x,b_r.x), y=math.random(t_l.y, b_r.y), z=math.random(t_l.z, b_r.z)})
			doPlayerSetStorageValue(cid, t.main.storages.is_in_event,1)
			doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn)
			doPlayerSetStorageValue(cid, t.main.storages.score, 0)
			doPlayerSendTextMessage(cid,27,"Welcome to paintball, here are the commands:\n!shoot bullet --This will shot a bullet.\n!shoot ammo --This will give you "..t.main.event_config.ammo_per_point.." bullets and take 1 point from your current score (you need at least 1 point to use this command).\n!shoot info --This will show you your current score and ammo, it'll also show the current high score of the event.\nIt is strongly recommended that you bind these commands to your hotkeys.")
		end
		]]></movevent>
		<globalevent name="StartPaintBall" interval="3600" event="script"><![CDATA[
		domodlib('config')
		function onThink(interval, lastExecution, thinkInterval)
			if t.main.event_config.start_automatically then
				doBroadcastMessage(t.main.messages.event_started, MESSAGE_STATUS_WARNING)
				if t.main.event_config.use_waiting_room then
					addEvent(moveToEvent, t.main.event_config.waiting_time*1000*60) 
					doCreateTeleport(1387,t.main.positions.waiting_room_area.top_left, t.main.positions.tp_to_paintball)
				else
					if t.main.tfs_version == "0.3" then 
						doItemSetAttribute(doCreateItem(1387, t.main.positions.tp_to_paintball), "aid", 2880)
					else
						doSetItemActionId(doCreateItem(1387, t.main.positions.tp_to_paintball),2880)
					end
					if(t.main.event_config.event_duration > 0) then
						addEvent(endPaintball, t.main.event_config.event_duration*1000*60)
					end
				end
			end
		return true
		end
		
		function endPaintball()
			local score = {}
			if not t.main.event_config.use_waiting_room then 
				doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid)
			end
			for _, pid in ipairs(getPlayersOnline()) do
				if getPlayerStorageValue(pid, t.main.storages.is_in_event) > 0 then
					table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, t.main.storages.score)})
					doPlayerSetStorageValue(pid, t.main.storages.is_in_event, 0)
					doPlayerSetStorageValue(pid, t.main.storages.score, 0)
					doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, 0)
					doTeleportThing(pid, t.main.positions.event_ending_pos)
				end
			end
			table.sort(score, function(a, b) return a[2] > b[2] end)
			if table.getn(score) > 0 then
				if t.main.event_config.winner_gets_item then
					for _, pid in ipairs(getPlayersOnline()) do
						if getCreatureName(pid) == score[1][1] then
							doPlayerAddItem(pid, t.main.event_config.prize_item_id)
							break
						end
					end
				end
				doBroadcastMessage("Paintball event has ended, "..score[1][1].." won paintball event with "..score[1][2].." points", MESSAGE_STATUS_WARNING)
			end
		end
		local t_l = t.main.positions.paintball_spawn_area.top_left
		local b_r = t.main.positions.paintball_spawn_area.bottom_right
		function moveToEvent()
			for _, pid in ipairs(getPlayersOnline()) do 
				if isInRange(getCreaturePosition(pid), t.main.positions.waiting_room_area.top_left, t.main.positions.waiting_room_area.bottom_right) then
					doTeleportThing(pid, {x=math.random(t_l.x,b_r.x), y=math.random(t_l.y, b_r.y), z=math.random(t_l.z, b_r.z)})
					doPlayerSetStorageValue(pid, t.main.storages.is_in_event,1)
					doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn)
					doPlayerSetStorageValue(pid, t.main.storages.score, 0)
					doPlayerSendTextMessage(pid,27,"Welcome to paintball, here are the commands:\n!shoot bullet --This will shot a bullet.\n!shoot ammo --This will give you "..t.main.event_config.ammo_per_point.." bullets and take 1 point from your current score (you need at least 1 point to use this command).\n!shoot info --This will show you your current score and ammo, it'll also show the current high score of the event.\nIt is strongly recommended that you bind these commands to your hotkeys.")
				end
			end
			doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid)
			addEvent(endPaintball, t.main.event_config.event_duration*1000*60)
		end
		]]></globalevent> 
		<talkaction words="!shoot" event="script"><![CDATA[
		domodlib('config')
		function onSay(cid, words, param, channel)
			local k = string.explode(param, ",")
			if(k[1] ~= nil) then 
				if(string.upper(k[1]) == 'END') and getPlayerGroupId(cid) >= 3 then
					endPaintball()
				end
				if(string.upper(k[1]) == 'START') and getPlayerGroupId(cid) >= 3 then
					doBroadcastMessage(t.main.messages.event_started, MESSAGE_STATUS_WARNING)
					if t.main.event_config.use_waiting_room then
						addEvent(moveToEvent, t.main.event_config.waiting_time*1000*60) 
						doCreateTeleport(1387,t.main.positions.waiting_room_area.top_left, t.main.positions.tp_to_paintball)
					else
						if t.main.tfs_version == "0.3" then 
							doItemSetAttribute(doCreateItem(1387, t.main.positions.tp_to_paintball), "aid", 2880)
						else
							doSetItemActionId(doCreateItem(1387, t.main.positions.tp_to_paintball),2880)
						end
						if(t.main.event_config.event_duration > 0) then
							addEvent(endPaintball, t.main.event_config.event_duration*1000*60)
						end
					end
				end
				if(string.upper(k[1]) == 'INFO') then
				local score = {}
				local output =  "You have " .. getPlayerStorageValue(cid, t.main.storages.score) .. " points.\nYou have "..getPlayerStorageValue(cid, t.onShoot.storages.ammo).." ammo left.\n------------------\nThe current high score in paintball is:\n"
					for _, pid in ipairs(getPlayersOnline()) do
						if getPlayerStorageValue(pid, t.main.storages.is_in_event) then
							table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, t.main.storages.score)})
						end
					end
				local lx = table.getn(score)
				if(lx > 3) then lx = 3 end 
					table.sort(score, function(a, b) return a[2] > b[2] end)
					for k = 1,lx do
						output = output .. k..". "..score[k][1] .." [".. score[k][2] .."].\n"
					end
				doPlayerPopupFYI(cid, output) 
				end
				if (string.upper(k[1]) == 'AMMO') then
					if(t.main.event_config.infinite_ammo) then 
						doPlayerSendTextMessage(cid, 27, "Ammo is infinite, there's no need to buy more.")
					else
						if getPlayerStorageValue(cid, t.main.storages.score) > 0 then
							doPlayerSetStorageValue(cid, t.main.storages.score, getPlayerStorageValue(cid, t.main.storages.score)-1)
							doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, getPlayerStorageValue(cid,t.onShoot.storages.ammo)+t.main.event_config.ammo_per_point)
							doPlayerSendTextMessage(cid, 27, "You have received " .. t.main.event_config.ammo_per_point .. " bullets and you have lost 1 score point.")
							doSendMagicEffect(getCreaturePosition(cid),4)
						else
							doPlayerSendTextMessage(cid, 27, "You do not have enough score points to buy ammo, you need ".. 1-(getPlayerStorageValue(cid, t.main.storages.score)).. " more.")			
						end
					end
				end
				if (string.upper(k[1]) == 'BULLET') then
					if(getPlayerStorageValue(cid, t.main.storages.is_in_event) == 1) then
						if getPlayerStorageValue(cid, t.main.storages.exhaust) <= 1 then
							if(getPlayerStorageValue(cid, t.onShoot.storages.ammo) > 0) then
								if t.main.misc.status == 'on' then
									if(t.main.event_config.infinite_ammo == false) then
										doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, getPlayerStorageValue(cid, t.onShoot.storages.ammo)-1)
									end
									doPlayerSetStorageValue(cid, t.main.storages.exhaust, 2)
									lineAnimation(getPlayerLookDirection(cid),getCreaturePosition(cid),12,cid,1,0,1,0,0,0,1,0)
									addEvent(doPlayerSetStorageValue,t.onShoot.misc.bullets_exhaust, cid, t.main.storages.exhaust,1)
								end
							else
								doPlayerSendCancel(cid, "You're out of ammo, exchange ammo for points with !shoot ammo or get killed for a recharge.")
								doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)	
							end
						else
							doPlayerSendCancel(cid, "Gun is on cooldown")
							doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
						end
					else
						doPlayerSendCancel(cid, "You need to be in the event.")
						doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
					end
				end
			end
		return true
		end


		function lineAnimation(lookDir,playerPos,effect,cid,fvar,fpos,ffound,fposV,fcheck,fvcid,floopCounter,fvpid, name)
		local var = fvar
		local pos = fpos
		local found = ffound
		local posV = fposV
		local check = fcheck
		local vcid = fvcid
		local loopCounter = floopCounter
		local vpid = fvpid
		local storage = t.main.storages.exhaust
			if var < 2 then
				vcid = cid
			end
			pos = playerPos
			if not isInWallArray(convert(lookDir,pos)) then--isInWallArray({x=convert(lookDir,pos).x, y=convert(lookDir,pos).y,z=convert(lookDir,pos).z}) then --isInArray(t.onShoot.misc.walls_id, getThingfromPos({x=convert(lookDir,pos).x, y=convert(lookDir,pos).y,z=convert(lookDir,pos).z, stackpos=0}).itemid) then
				doSendDistanceShoot(pos, convert(lookDir,pos),effect)
				pos = convert(lookDir,pos)
				var=var+1
				posV = convertV(lookDir,playerPos)
				for _, pid in ipairs(getPlayersOnline()) do
					if (getCreaturePosition(pid).x == pos.x and getCreaturePosition(pid).y == pos.y and getCreaturePosition(pid).z == pos.z) then
						--if loopCounter > 2 then
						vpid = pid
						--end
						if (vpid ~= vcid) then
							if var > 2 then
								if (getCreaturePosition(pid).x == posV.x and getCreaturePosition(pid).y == posV.y and getCreaturePosition(pid).z == posV.z) then
									killPlayer(pid,pos,getCreatureName(vcid))
									if (lookDir == 0) or (lookDir == 2) then 
										var = 6
									else
										var = 8
									end
								end
							end
							killPlayer(pid,pos,vcid)
							if (lookDir == 0) or (lookDir == 2) then
								var = 6
							else
								var = 8
							end
						end
					end
					loopCounter = loopCounter +1
				end	
				if (lookDir == 0) or (lookDir == 2) then
					if var ~= 6 then
						addEvent(lineAnimation, t.onShoot.misc.bullet_speed, lookDir,pos,effect,nil,var,pos,found,posV,check,vcid,loopCounter,vpid)
					else
						var = 1
					end
				else
					if var ~= 8 then
						addEvent(lineAnimation,  t.onShoot.misc.bullet_speed, lookDir,pos,effect,nil,var,pos,found,posV,check,vcid,loopCounter,vpid)
					else
						var = 1
					end
				end
			else
				doSendMagicEffect(convert(lookDir,pos),2)
				var = 1
			end
		end

		local ret = {}
		function convert(lookDir,pos)
		local positions = {
			[0] = {x = pos.x, y = pos.y-1, z = pos.z},
			[1] = {x = pos.x+1, y = pos.y, z = pos.z},
			[2] = {x = pos.x, y = pos.y+1, z = pos.z},
			[3] = {x = pos.x-1, y = pos.y, z = pos.z}
			}
			ret = positions[lookDir]
		return ret
		end


		local ret = {}
		function convertV(lookDir,pos)
		local positions = {
			[0] = {x = pos.x, y = pos.y+1, z = pos.z},
			[1] = {x = pos.x-1, y = pos.y, z = pos.z},
			[2] = {x = pos.x, y = pos.y-1, z = pos.z},
			[3] = {x = pos.x+1, y = pos.y, z = pos.z}
			}
			ret = positions[lookDir]
		return ret
		end
				
		function killPlayer(cid,pos, killer)
			local t_l = t.main.positions.paintball_spawn_area.top_left
			local b_r = t.main.positions.paintball_spawn_area.bottom_right
			doTeleportThing(cid, {x=math.random(t_l.x,b_r.x), y=math.random(t_l.y, b_r.y), z=math.random(t_l.z, b_r.z)})
			doSendMagicEffect(pos,2)
			doPlayerSendTextMessage(cid, 27, "You've been killed by "..getCreatureName(killer)..".")
			doPlayerSetStorageValue(killer, t.main.storages.score, getPlayerStorageValue(killer, t.main.storages.score)+t.main.event_config.points_per_kill)
			doPlayerSendTextMessage(killer, 27, "You've killed "..getCreatureName(cid)..".")
			doBroadcastMessage("[Event] Paintball: "..getCreatureName(killer).." has killed "..getCreatureName(cid)..".", MESSAGE_STATUS_WARNING)
			if t.main.event_config.decrease_score_on_death then
				doPlayerSetStorageValue(cid, t.main.storages.score, getPlayerStorageValue(cid, t.main.storages.score)-1)
			end
			if t.main.event_config.reset_bullets_on_death then
				doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn)
			end
		end
						
		function isInWallArray(pos)
			for k = 0, table.getn(t.onShoot.misc.walls_id) do
				if getTileItemById(pos, t.onShoot.misc.walls_id[k]).itemid == t.onShoot.misc.walls_id[k] then --this doesn't even make sense but tried other ways and it gave errors, so meh 2lazy2search 
					return true	
				end
			end
			return false
		end
		function endPaintball()
			local score = {}
			if not t.main.event_config.use_waiting_room then 
				doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid)
			end
			for _, pid in ipairs(getPlayersOnline()) do
				if getPlayerStorageValue(pid, t.main.storages.is_in_event) > 0 then
					table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, t.main.storages.score)})
					doPlayerSetStorageValue(pid, t.main.storages.is_in_event, 0)
					doPlayerSetStorageValue(pid, t.main.storages.score, 0)
					doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, 0)
					doTeleportThing(pid, t.main.positions.event_ending_pos)
				end
			end
			table.sort(score, function(a, b) return a[2] > b[2] end)
			if table.getn(score) > 0 then
				if t.main.event_config.winner_gets_item then
					for _, pid in ipairs(getPlayersOnline()) do
						if getCreatureName(pid) == score[1][1] then
							doPlayerAddItem(pid, t.main.event_config.prize_item_id)
							break
						end
					end
				end
			doBroadcastMessage("Painball event has ended, "..score[1][1].." won paintball event with "..score[1][2].." points", MESSAGE_STATUS_WARNING)
			end
		end
		local t_l = t.main.positions.paintball_spawn_area.top_left
		local b_r = t.main.positions.paintball_spawn_area.bottom_right
		function moveToEvent()
			for _, pid in ipairs(getPlayersOnline()) do 
				if isInRange(getCreaturePosition(pid), t.main.positions.waiting_room_area.top_left, t.main.positions.waiting_room_area.bottom_right) then
					doTeleportThing(pid, {x=math.random(t_l.x,b_r.x), y=math.random(t_l.y, b_r.y), z=math.random(t_l.z, b_r.z)})
					doPlayerSetStorageValue(pid, t.main.storages.is_in_event,1)
					doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn)
					doPlayerSetStorageValue(pid, t.main.storages.score, 0)
					doPlayerSendTextMessage(pid,27,"Welcome to paintball, here are the commands:\n!shoot bullet --This will shot a bullet.\n!shoot ammo --This will give you "..t.main.event_config.ammo_per_point.." bullets and take 1 point from your current score (you need at least 1 point to use this command).\n!shoot info --This will show you your current score and ammo, it'll also show the current high score of the event.\nIt is strongly recommended that you bind these commands to your hotkeys.")
				end
			end
			doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid)
			addEvent(endPaintball, t.main.event_config.event_duration*1000*60)
		end
		]]></talkaction>
	</mod>

 


É automático ?? Onde posso e onde não posso mexer ?

Link para o post
Compartilhar em outros sites
  • Solução

@Yago Blind. Só precisa de atenção, o erro foi dele, mas se a gente não consegui ver esses erros, ae é doze:

Spoiler

errro.png

 

 

O segundo erro no globalevents, você deve ter colocado errado a tag, uma letra a mais ou menos, pois está correto!

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites
11 minutos atrás, KotZletY disse:

@Yago Blind. Só precisa de atenção, o erro foi dele, mas se a gente não consegui ver esses erros, ae é doze:

  Mostrar conteúdo oculto

errro.png

 

 

O segundo erro no globalevents, você deve ter colocado errado a tag, uma letra a mais ou menos, pois está correto!


Pow passou despercebido por mim.
Arrumei as tags do globalevents , tb Muito obrigado. Daqui a pouco lhe dou REP++ pois ainda não virou as 24hrs e ja passei de 5.

@Edit , tem 
http://prntscr.com/e2uags esse erro aqui também pode me ajudar? 

Editado por Yago Blind. (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@Yago Blind. se não tiver rep, manda nude que também aceito! :dd60607ad67eb05ab6bf0476df20709b:

 

Haha, boa sorte! 

 

xD

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo