• 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!

MoveEvent FootBall , automatic. [0.3.6 + 0.4]-Updated-

i updated this script to only use addEvent so the timer doesnt need to run every 1 second even when the game isnt being played. Also i removed the onstart global event, its not really needed being a check for the ball is made when the lever was pulled already. oh lastly i removed the rewards. ill edit this post when i remake them. im going to make an automatic wager system.
Note: only tested 2 matches on it but i didnt change much in the code so it should still work.
Lua:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Soccer" version="1.5" author="Damadger n Soul4Soul" contact="otland.net" enabled="yes">
<config name="tutorial_m"><![CDATA[
c = {
	speed = 250,   -- base speed for all players.
	players = 2,  -- ****Change to number of players per each team, but keep on mind by changing this you will add new positions for each team in : 1- in the team1pos varible | 2- in the destination verible
	pitchpos = {fromx = 361, fromy = 1246, tox = 381, toy = 1255, z = 7}, -- here you need to put the x and y from the farest north west sqm of the pitch, to the farest west east sqm in the pitch(including goal)
	ballpos = {x = 371, y = 1251, z = 7}, -- default position of ball in middle of pitch
	original = 120 , --match time ( it will be devided by 2 for each half)
	team1pos = {
        --Position of #TEAM_1# players standing to pull the lever
        {x = 369, y = 1257, z = 7},
		{x = 370, y = 1257, z = 7},
		--- Position of #TEAM_2# players standing to pull the lever
		{x = 372, y = 1257, z = 7},
        {x = 373, y = 1257, z = 7}
	},
	destination = {
	    --- team 1 pitch side
        {x = 374, y = 1250, z = 7},
        {x = 374, y = 1252, z = 7},
		--- team 2 pitch side
		{x = 368, y = 1250, z = 7},
		{x = 368, y = 1252, z = 7}
    },
	storage = 20107,
	BLUE_SCORE = 1223,
	RED_SCORE = 1224
}
]]></config>
<lib name="football-lib"><![CDATA[
function getSpeed(cid,level)
	value = (220 +(2 *(level -1)))
	return value
end

function addMatches(cid)
	return db.executeQuery("UPDATE `games_soccer` SET `matches` = `matches` + " .. 1 .. " WHERE `id`= '" .. getPlayerGUID(cid) .. "' LIMIT 1;")
end

function addGoal(cid)
	return db.executeQuery("UPDATE `games_soccer` SET `goals` = `goals` + " .. 1 .. " WHERE `id`= '" .. getPlayerGUID(cid) .. "' LIMIT 1;")
end

function addWin(cid)
	return db.executeQuery("UPDATE `games_soccer` SET `wins` = `wins` + " .. 1 .. " WHERE `id`= '" .. getPlayerGUID(cid) .. "' LIMIT 1;")
end
]]></lib>
<action uniqueid="20107" event="script"> <![CDATA[
	domodlib('tutorial_m')
	domodlib('football-lib')
	local bmale = createConditionObject(CONDITION_OUTFIT)
	setConditionParam(bmale, CONDITION_PARAM_TICKS, -1)
	addOutfitCondition(bmale, {lookType = math.random(128,134), lookHead = 88, lookBody = 88, lookLegs = 88, lookFeet = 88, lookTypeEx = 0, lookAddons = 3})
 
	local bfemale = createConditionObject(CONDITION_OUTFIT)
	setConditionParam(bfemale, CONDITION_PARAM_TICKS, -1)
	addOutfitCondition(bfemale, {lookType = math.random(136,142), lookHead = 88, lookBody = 88, lookLegs = 88, lookFeet = 88, lookTypeEx = 0, lookAddons = 3})
 
	local rmale = createConditionObject(CONDITION_OUTFIT)
	setConditionParam(rmale, CONDITION_PARAM_TICKS, -1)
	addOutfitCondition(rmale, {lookType = math.random(128,134), lookHead = 94, lookBody = 94, lookLegs = 94, lookFeet = 94, lookTypeEx = 0, lookAddons = 3})
 
	local rfemale = createConditionObject(CONDITION_OUTFIT)
	setConditionParam(rfemale, CONDITION_PARAM_TICKS, -1)
	addOutfitCondition(rfemale, {lookType = math.random(136,142),lookHead = 94, lookBody = 94, lookLegs = 94, lookFeet = 94, lookTypeEx = 0, lookAddons = 3})
 
function onUse(cid, item, fromPosition, itemEx, toPosition)
	if item.itemid == 1945 then
		local n = 1
		if getGlobalStorageValue(1222) > 0 then
			doPlayerSendCancel(cid,"There is a on going match right now, please come again later.")
			return true
		else
			setGlobalStorageValue(c.BLUE_SCORE,0)
			setGlobalStorageValue(c.RED_SCORE,0)
		end
		local players = {}
		for _, position in ipairs(c.team1pos) do
			local pid = getTopCreature(position).uid
			if(pid == 0 or not isPlayer(pid)) then
				doPlayerSendCancel(cid, "You need ".. c.players * 2 .." players to start the match.")
				return true
			end
			table.insert(players, pid)
		end
	
		for i, pid in ipairs(players) do
			setPlayerStorageValue(pid,c.storage,n)
			n = n+1
			doTeleportThing(pid, c.destination[getPlayerStorageValue(pid,c.storage)], false)
			doSendMagicEffect(c.destination[i], CONST_ME_ENERGYAREA)
		end
	
		for i, pid in ipairs(players) do
			addMatches(pid) --adds # of matches played
			if getPlayerStorageValue(pid,c.storage) > 0 and getPlayerStorageValue(pid,c.storage) <= c.players then
				doAddCondition(pid, ( getPlayerSex(cid) == 1 and bmale or bfemale) )
			elseif getPlayerStorageValue(pid,c.storage) > c.players  then
				doAddCondition(pid, ( getPlayerSex(cid) == 1 and rmale or rfemale) )
			end
		end
 
		for i = c.pitchpos.fromy, c.pitchpos.toy do
			for j = c.pitchpos.fromx, c.pitchpos.tox do
				local pos = {x = j, y = i, z = c.pitchpos.z}
				local ball = getTileItemById(pos,2109).uid
				if ball > 0 then
					doRemoveItem(ball)
				end
			end
		end
		if getTileItemById(c.ballpos,2109).uid < 1 then
			doCreateItem(2109,1,c.ballpos)
		end
		setGlobalStorageValue(1222,c.original)
		addEvent(timeKeeper, 1000, players) --1 second
		return item.itemid == 1945 and doTransformItem(item.uid,1946) or doTransformItem(item.uid,1945)
	end
end

	function timeKeeper(matchplayers)
		local half = c.original/2
		if getGlobalStorageValue(1222) >= 0 then
			setGlobalStorageValue(1222,getGlobalStorageValue(1222) - 1)
			addEvent(timeKeeper, 1000, matchplayers)
		else
			setGlobalStorageValue(c.BLUE_SCORE,0)
			setGlobalStorageValue(c.RED_SCORE,0)
		end
		for i = 1, #matchplayers do
			if getGlobalStorageValue(1222) >= 0 and getGlobalStorageValue(1222) < half then
				if getPlayerStorageValue(matchplayers[i],c.storage) > 0 then
					doPlayerSendCancel(matchplayers[i], "Time per half : "..( os.date("%M : %S",half)).."   |   Second half : "..( os.date("%M : %S",getGlobalStorageValue(1222))).."   |    Red : "..getGlobalStorageValue(c.RED_SCORE).." goals  *  Blue : "..getGlobalStorageValue(c.BLUE_SCORE).." goals")
				end           
			elseif getGlobalStorageValue(1222) >= half and getGlobalStorageValue(1222) <= c.original then
				if getPlayerStorageValue(matchplayers[i],c.storage) > 0 then
					doPlayerSendCancel(matchplayers[i], "Time per half : "..( os.date("%M : %S", half )).."   |   First half : "..( os.date("%M : %S",getGlobalStorageValue(1222))).."   |    Red : "..getGlobalStorageValue(c.RED_SCORE).." goals  *  Blue : "..getGlobalStorageValue(c.BLUE_SCORE).." goals")
				end
			end
			if getPlayerStorageValue(matchplayers[i],c.storage) > 0 then
				if getGlobalStorageValue(1222) < 0 then
					doChangeSpeed(matchplayers[i], getSpeed(matchplayers[i], getPlayerLevel(matchplayers[i])) - getCreatureSpeed(matchplayers[i]))
						if getGlobalStorageValue(c.RED_SCORE) > getGlobalStorageValue(c.BLUE_SCORE) then
							if getPlayerStorageValue(matchplayers[i],c.storage) > c.players then
								doPlayerSendTextMessage(matchplayers[i],25, "Your teams won the match.")
								addWin(matchplayers[i])
							elseif getPlayerStorageValue(matchplayers[i],c.storage) <= c.players then
								doPlayerSendTextMessage(matchplayers[i],22,"You team have lost. No reward for you!")
							end
						elseif getGlobalStorageValue(c.BLUE_SCORE) > getGlobalStorageValue(c.RED_SCORE) then
							if getPlayerStorageValue(matchplayers[i],c.storage) <= c.players then
								doPlayerSendTextMessage(matchplayers[i],25, "Your teams won the match.")
								addWin(matchplayers[i])
							elseif getPlayerStorageValue(matchplayers[i],c.storage) > c.players then
								doPlayerSendTextMessage(matchplayers[i],22,"You team have lost. No reward for you!")
							end
						else
							doPlayerSendTextMessage(matchplayers[i],22,"Neither of teams won. No rewards!")
						end
					doRemoveConditions(matchplayers[i], FALSE)
					doTeleportThing(matchplayers[i],getTownTemplePosition(getPlayerTown(matchplayers[i])))
					doSendMagicEffect(getTownTemplePosition(getPlayerTown(matchplayers[i])),10)
					setPlayerStorageValue(matchplayers[i],c.storage,-1)
				elseif getGlobalStorageValue(1222) == half then
					doTeleportThing(matchplayers[i], (getPlayerStorageValue(matchplayers[i],c.storage) <= c.players and c.destination[getPlayerStorageValue(matchplayers[i],c.storage)+c.players] or c.destination[getPlayerStorageValue(matchplayers[i],c.storage)-c.players]))
					doPlayerSendTextMessage(matchplayers[i],22,"Refree : Second half begins.")
					for i = 1, #c.destination do
						doSendMagicEffect(c.destination[i],10)
					end
					for i = c.pitchpos.fromy, c.pitchpos.toy do
						for j = c.pitchpos.fromx, c.pitchpos.tox do
							local pos = {x = j, y = i, z = c.pitchpos.z}
							local ball = getTileItemById(pos,2109).uid
							if ball > 0 then
								doRemoveItem(ball)
							end
						end
					end
					if getTileItemById(c.ballpos,2109).uid < 1 then
						doCreateItem(2109,1,c.ballpos)
					end
				end
			end
		end
		return true
	end
]]> </action>
<movevent type="AddItem" tileitem="1" fromaid="7070" toaid="7072" event="script"><![CDATA[
	domodlib('tutorial_m')
    domodlib('football-lib')
	function onAddItem(moveitem, tileitem, position, cid)
		if(moveitem.itemid ~= 2109) then
			doRemoveItem(moveitem.uid) 
		else
			if getGlobalStorageValue(1222) < 0 then
				doTeleportThing(moveitem.uid,c.ballpos)
			else
				if tileitem.actionid == 7070 then
					if getGlobalStorageValue(1222) >= c.original/2 then -- blue goal
						if getPlayerStorageValue(cid,c.storage) > 0 then      
	                        doTeleportThing(moveitem.uid,c.ballpos,false)
		                    addEvent(doSendAnimatedText,20,c.ballpos,getPlayerStorageValue(cid,c.storage) > c.players and "Goal!" or "Own goal!",getPlayerStorageValue(cid,c.storage) > c.players and TEXTCOLOR_LIGHTBLUE or TEXTCOLOR_RED)
				            setGlobalStorageValue( c.RED_SCORE, getGlobalStorageValue(c.RED_SCORE) +1)
                            if getPlayerStorageValue(cid,c.storage) > c.players then
						        addGoal(cid)
							end
		                    for _,tid in ipairs(getPlayersOnline()) do
					            if getPlayerStorageValue(tid,c.storage) > 0 then
		                            doTeleportThing(tid,c.destination[getPlayerStorageValue(tid,c.storage)])
                                    for i = 1, #c.destination do
		                                doSendMagicEffect(c.destination[i],10)
		                            end
		                        end    
		                    end
						end
					elseif getGlobalStorageValue(1222) < c.original/2 then -- red goal
						if getPlayerStorageValue(cid,c.storage) > 0 then      
							doTeleportThing(moveitem.uid,c.ballpos,false)
							addEvent(doSendAnimatedText,20,c.ballpos,getPlayerStorageValue(cid,c.storage) <= c.players and "Goal!" or "Own goal!",getPlayerStorageValue(cid,c.storage) <= c.players and TEXTCOLOR_LIGHTBLUE or TEXTCOLOR_RED)
							setGlobalStorageValue( c.BLUE_SCORE, getGlobalStorageValue(c.BLUE_SCORE) +1)
							if getPlayerStorageValue(cid,c.storage) <= c.players then
								addGoal(cid)
							end
		                    for _,tid in ipairs(getPlayersOnline()) do
								if getPlayerStorageValue(tid,c.storage) > 0 then
		                            doTeleportThing(tid, (getPlayerStorageValue(tid,c.storage) <= c.players and c.destination[getPlayerStorageValue(tid,c.storage)+c.players] or c.destination[getPlayerStorageValue(tid,c.storage)-c.players]))
                                    for i = 1, #c.destination do
		                                doSendMagicEffect(c.destination[i],10)
		                            end
		                        end    
		                    end
						end
					end
				elseif tileitem.actionid == 7071 then	
					if getGlobalStorageValue(1222) >= c.original/ 2 then --red goal
						if getPlayerStorageValue(cid,c.storage) > 0 then      
							doTeleportThing(moveitem.uid,c.ballpos,false)
							addEvent(doSendAnimatedText,20,c.ballpos,getPlayerStorageValue(cid,c.storage) <= c.players and "Goal!" or "Own goal!",getPlayerStorageValue(cid,c.storage) <= c.players and TEXTCOLOR_LIGHTBLUE or TEXTCOLOR_RED)
							setGlobalStorageValue( c.BLUE_SCORE, getGlobalStorageValue(c.BLUE_SCORE) +1)
                            if getPlayerStorageValue(cid,c.storage) <= c.players then
								addGoal(cid)
							end
		                    for _,tid in ipairs(getPlayersOnline()) do
					            if getPlayerStorageValue(tid,c.storage) > 0 then
		                            doTeleportThing(tid,c.destination[getPlayerStorageValue(tid,c.storage)])
                                    for i = 1, #c.destination do
		                                doSendMagicEffect(c.destination[i],10)
		                            end
		                        end    
		                    end
						end
					elseif getGlobalStorageValue(1222) < c.original / 2 then --blue
						if getPlayerStorageValue(cid,c.storage) > 0 then      
							doTeleportThing(moveitem.uid,c.ballpos,false)
							addEvent(doSendAnimatedText,20,c.ballpos,getPlayerStorageValue(cid,c.storage) > c.players and "Goal!" or "Own goal!",getPlayerStorageValue(cid,c.storage) > c.players and TEXTCOLOR_LIGHTBLUE or TEXTCOLOR_RED)
							setGlobalStorageValue( c.RED_SCORE, getGlobalStorageValue(c.RED_SCORE) +1)
						    if getPlayerStorageValue(cid,c.storage) > c.players then
								addGoal(cid)
							end
							for _,tid in ipairs(getPlayersOnline()) do
					            if getPlayerStorageValue(tid,c.storage) > 0 then
		                            doTeleportThing(tid, (getPlayerStorageValue(tid,c.storage) <= c.players and c.destination[getPlayerStorageValue(tid,c.storage)+c.players] or c.destination[getPlayerStorageValue(tid,c.storage)-c.players]))
                                    for i = 1, #c.destination do
		                                doSendMagicEffect(c.destination[i],10)
		                            end
		                        end    
		                    end
						end
					end	
				end
			end		  
		end
		return true
	end
]]> </movevent>
 
<movevent type="StepIn" actionid="7072" event="script"><![CDATA[
	domodlib('tutorial_m')
	domodlib('football-lib')
	function onStepIn(cid, item, position, fromPosition)
		if(getCreatureSpeed(cid) ~= speed) then 
			doRemoveCondition(cid, CONDITION_HASTE) 
			doChangeSpeed(cid, c.speed - getCreatureSpeed(cid)) 
		end 
		return true
	end
]]> </movevent>
</mod>
 
Last edited:
Dosnt work this script dont update win and goals in database and wrong team win -,- please help 0 error in console
 
i have bug in my script ; /
After half of match ball is not removed but there are 2 balls
(old and new)
Please help
 
Geek, I have a little bug... haha
If a player do a goal, the counter mark 2 goals...
1=2 goals
2=4 goals
3=6 goals
etc...

My mistake or script error?
 
Back
Top