<?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>