• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua Snake System

ruttie239

New Member
Joined
Jul 10, 2010
Messages
95
Reaction score
1
I have a snake system but in the log of server it give this error :

Code:
[07/02/2012 10:37:41] [Error - Action Interface] 
[07/02/2012 10:37:41] In a timer event called from: 
[07/02/2012 10:37:41] data/actions/scripts/snakesys.lua:onUse
[07/02/2012 10:37:41] Description: 
[07/02/2012 10:37:41] (luaDoRemoveItem) Item not found

[07/02/2012 10:37:41] [Error - Action Interface] 
[07/02/2012 10:37:41] In a timer event called from: 
[07/02/2012 10:37:41] data/actions/scripts/snakesys.lua:onUse
[07/02/2012 10:37:41] Description: 
[07/02/2012 10:37:41] (luaDoRemoveItem) Item not found

Someone can help me?
 
Add this tag on actions.xml:
PHP:
<action itemid="9564" event="script" value="snakesys.lua"/>

on Data/actions/scripts create snakesys.lua
ad add this:
Lua Code:

PHP:
function onUse(cid, item, frompos, item2, topos)
	if not isPlayer(getGlobalStorageValue(SNAKE.freeglobalstorage)) then
		doTeleportThing(cid,SNAKE.controlpos)
		SNAKE.timer(cid,1,nil,item.actionid == 0 and 500 or item.actionid)
		doPlayerSendTextMessage(cid,25,'Hold key CTRL and use the arrows to control snake.')
		SNAKE.generateFood()
	else
		doPlayerSendTextMessage(cid,25,'Please wait.')
	end
end


Now if you use TFS 0.3.4 or less you need add dofile('data/lib/snakesys.lua') on functions.lua
If you use 0.3.6 or 0.3.5 only add snakesys.lua on data/lib
and set it on snakesys.lua

PHP:
--[[
Script by Mock the bear
]]
SNAKE = {
	_VERSION="1.0 by mock",
	---Snake config
	itemid=1739,
	freeglobalstorage=28103,
	itemFood=6394,
	controlpos={x=1013,y=1164,z=6},
	exitpos = {x=1009,y=1157,z=7},
	centerpos={x=1012,y=1163,z=7},
	timer = function(cid,n,pos_,time)
		local pos_ = pos_ or {{SNAKE.centerpos}}
		setGlobalStorageValue(SNAKE.freeglobalstorage,cid)
		if not isPlayer(cid) then
			SNAKE.clean()
			return
		end
			for i,pos in pairs(pos_) do
				SNAKE.find_and_delete(pos[1])
				if i == 1 then
					pos[2] = SNAKE.copypos(pos[1])
					pos[1] = getPosByDir({x=pos[1].x,y=pos[1].y,z=pos[1].z,stackpos=255},getCreatureLookDir(cid))
				else
					pos[2] = SNAKE.copypos(pos[1])
					pos[1] = pos_[i-1][2]
				end
				local ret,p,walk = SNAKE.check(pos[1])
				if ret == 1 or ret == 3 then
					addEvent(doTeleportThing,1000,cid,SNAKE.exitpos)
					addEvent(doCreatureSay,1100,cid,'Points '..(#pos_-1)..'.')
					SNAKE.clean()
					setGlobalStorageValue(SNAKE.freeglobalstorage,0)
					return
				end
				if ret == 2 then
					doRemoveItem(p.uid,-1)
					if p.itemid == SNAKE.itemFood then
						pos_[#pos_+1] = {pos[2],pos[2]}
						for i=1,5 do
							addEvent(doSendMagicEffect,100*i,pos[1],29)
						end
						SNAKE.generateFood()
					end
				end
				doCreateItem(SNAKE.itemid,1,pos[1])
 
			end
			local plpos = getCreaturePosition(cid)
			local generated = {}
			for i=0,3 do
				generated[i] = getPosByDir({x=SNAKE.controlpos.x,y=SNAKE.controlpos.y,z=SNAKE.controlpos.z},i)
			end
			for i,pos in pairs(generated) do
				if SNAKE.samepos(plpos,pos) then
 
					doTeleportThing(cid,SNAKE.controlpos,false)
				end
				addEvent(doSendMagicEffect,100,pos,56,cid)
			end
		addEvent(SNAKE.timer,time,cid,n,pos_,time)
	end,
	copypos = function(p)
		return {x=p.x,y=p.y,z=p.z,stackpos=p.stackpos}
	end,
	samepos = function(p1,p2)
		if p1.x == p2.x and p2.y == p2.y then
			return true
		end
		return false
	end,
	generateFood = function()
		local pp = {x=SNAKE.centerpos.x+math.random(-6,6),y=SNAKE.centerpos.y+math.random(-4,4),z=SNAKE.centerpos.z}
		for i=1,5 do
			addEvent(doSendMagicEffect,100*i,pp,30)
		end
		doCreateItem(SNAKE.itemFood,1,pp)
	end,
	clean = function()
		for y=-4,4 do
			for x=-6,6 do
				local pp = {x=SNAKE.centerpos.x+x,y=SNAKE.centerpos.y+y,z=SNAKE.centerpos.z}
				for i=250,255 do
					pp.stackpos = i
					local p = getThingFromPos(pp)
					if p.itemid ~= 0 then
						doRemoveItem(p.uid,-1)
						doSendMagicEffect(pp,15)
					end
				end
			end
		end
	end,
	check = function(pos)
		for i=1,10 do
			pos.stackpos = i
			local p = getThingFromPos(pos)
			if p.itemid == SNAKE.itemid then
				return 1,p,true
			elseif not SNAKE.isWalkable(pos) then
				return 3,p,false
			elseif p.itemid ~= 0 then
				return 2,p
			end
		end
		return false
	end,
	find_and_delete = function(pos)
		for i=0,255 do
			pos.stackpos = 255-i
			local p = getThingFromPos(pos)
			if p.itemid == SNAKE.itemid then
				return doRemoveItem(p.uid,1)
			end
		end
	end,
	isWalkable = function(pos, creature, proj, pz)-- by Nord
		if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
		if getTopCreature(pos).uid > 0 and creature then return false end
		if getTileInfo(pos).protection and pz then return false, true 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,
}

Done , Rep ++
 
data/actions/snakesys.lua
Code:
function onUse(cid, item, frompos, item2, topos)
	if not isPlayer(getGlobalStorageValue(SNAKE.freeglobalstorage)) then
		doTeleportThing(cid,SNAKE.controlpos)
		SNAKE.timer(cid,1,nil,item.actionid == 0 and 500 or item.actionid)
		doPlayerSendTextMessage(cid,25,'Hold key CTRL and use the arrows to control snake.')
		SNAKE.generateFood()
	else
		doPlayerSendTextMessage(cid,25,'Please wait.')
	end
end

data/lib/snakesys.lua
Code:
--[[
Script by Mock the bear
]]
SNAKE = {
	_VERSION="1.0 by mock",
	---Snake config
	itemid=1739,
	freeglobalstorage=28103,
	itemFood=6394,
	controlpos={x=232,y=245,z=7},
	exitpos = {x=232,y=236,z=7},
	centerpos={x=232,y=245,z=7},
	timer = function(cid,n,pos_,time)
		local pos_ = pos_ or {{SNAKE.centerpos}}
		setGlobalStorageValue(SNAKE.freeglobalstorage,cid)
		if not isPlayer(cid) then
			SNAKE.clean()
			return
		end
			for i,pos in pairs(pos_) do
				SNAKE.find_and_delete(pos[1])
				if i == 1 then
					pos[2] = SNAKE.copypos(pos[1])
					pos[1] = getPosByDir({x=pos[1].x,y=pos[1].y,z=pos[1].z,stackpos=255},getCreatureLookDir(cid))
				else
					pos[2] = SNAKE.copypos(pos[1])
					pos[1] = pos_[i-1][2]
				end
				local ret,p,walk = SNAKE.check(pos[1])
				if ret == 1 or ret == 3 then
					addEvent(doTeleportThing,1000,cid,SNAKE.exitpos)
					addEvent(doCreatureSay,1100,cid,'Points '..(#pos_-1)..'.')
					SNAKE.clean()
					setGlobalStorageValue(SNAKE.freeglobalstorage,0)
					return
				end
				if ret == 2 then
					doRemoveItem(p.uid,-1)
					if p.itemid == SNAKE.itemFood then
						pos_[#pos_+1] = {pos[2],pos[2]}
						for i=1,5 do
							addEvent(doSendMagicEffect,100*i,pos[1],29)
						end
						SNAKE.generateFood()
					end
				end
				doCreateItem(SNAKE.itemid,1,pos[1])
 
			end
			local plpos = getCreaturePosition(cid)
			local generated = {}
			for i=0,3 do
				generated[i] = getPosByDir({x=SNAKE.controlpos.x,y=SNAKE.controlpos.y,z=SNAKE.controlpos.z},i)
			end
			for i,pos in pairs(generated) do
				if SNAKE.samepos(plpos,pos) then
 
					doTeleportThing(cid,SNAKE.controlpos,false)
				end
				addEvent(doSendMagicEffect,100,pos,56,cid)
			end
		addEvent(SNAKE.timer,time,cid,n,pos_,time)
	end,
	copypos = function(p)
		return {x=p.x,y=p.y,z=p.z,stackpos=p.stackpos}
	end,
	samepos = function(p1,p2)
		if p1.x == p2.x and p2.y == p2.y then
			return true
		end
		return false
	end,
	generateFood = function()
		local pp = {x=SNAKE.centerpos.x+math.random(-6,6),y=SNAKE.centerpos.y+math.random(-4,4),z=SNAKE.centerpos.z}
		for i=1,5 do
			addEvent(doSendMagicEffect,100*i,pp,30)
		end
		doCreateItem(SNAKE.itemFood,1,pp)
	end,
	clean = function()
		for y=-4,4 do
			for x=-6,6 do
				local pp = {x=SNAKE.centerpos.x+x,y=SNAKE.centerpos.y+y,z=SNAKE.centerpos.z}
				for i=250,255 do
					pp.stackpos = i
					local p = getThingFromPos(pp)
					if p.itemid ~= 0 then
						doRemoveItem(p.uid,-1)
						doSendMagicEffect(pp,15)
					end
				end
			end
		end
	end,
	check = function(pos)
		for i=1,10 do
			pos.stackpos = i
			local p = getThingFromPos(pos)
			if p.itemid == SNAKE.itemid then
				return 1,p,true
			elseif not SNAKE.isWalkable(pos) then
				return 3,p,false
			elseif p.itemid ~= 0 then
				return 2,p
			end
		end
		return false
	end,
	find_and_delete = function(pos)
		for i=0,255 do
			pos.stackpos = 255-i
			local p = getThingFromPos(pos)
			if p.itemid == SNAKE.itemid then
				return doRemoveItem(p.uid,1)
			end
		end
	end,
	isWalkable = function(pos, creature, proj, pz)-- by Nord
		if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
		if getTopCreature(pos).uid > 0 and creature then return false end
		if getTileInfo(pos).protection and pz then return false, true 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,
}
 
Seron
You need see
[07/02/2012 10:37:41] [Error - Action Interface]
[07/02/2012 10:37:41] In a timer event called from:
[07/02/2012 10:37:41] data/actions/scripts/snakesys.lua:eek:nUse
[07/02/2012 10:37:41] Description:
[07/02/2012 10:37:41] (luaDoRemoveItem) Item not found

He need help in script, no need all system snake
lol
All are =
xd


I see function timer.. try for time
look:

Lua:
function onUse(cid, item, frompos, item2, topos)
    if not isPlayer(getGlobalStorageValue(SNAKE.freeglobalstorage)) then
        doTeleportThing(cid,SNAKE.controlpos)
        SNAKE.timer(cid,1,nil,item.actionid == 0 and 500 or item.actionid)
        doPlayerSendTextMessage(cid,25,'Hold key CTRL and use the arrows to control snake.')
        SNAKE.generateFood()
    else
        doPlayerSendTextMessage(cid,25,'Please wait.')
    end
end
 
Back
Top