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

Capture the flag Issues

Lightonia

Lightonia.servegame.com
Joined
Jun 4, 2007
Messages
492
Reaction score
9
Hi there, im having issues with CTF mod, my script mostly works but when someone takes the flag and captures it, it says Blue team flag: -1/3 captures. Im not sure how to fix this. Please help me out, would be much appreciated.

Im gonna send 3 replies of the rest of the code as it is too long.
First part of ctf.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="CTF" version="1.0" author="Doggynub" contact="otland.net" enabled="yes">
<config name="toto"><![CDATA[
--[[ Storage Settings]]--
Owner = 1900 -- put empty storage
FLAG2_INn = 44000 -- put empty storage
FLAG_IN = 44001 -- put empty storage
TEAM1_FLAGS = 33056 -- put empty storage
TEAM2_FLAGS = 33057 -- put empty storage
Event_Start = 3032 -- put empty storage
Event_timeend = 3033 -- put empty storage
Event_Tile_Close = 3039 -- put empty storage
joined = 2023 --put empty storage
Timer = 1010 --put empty storage
--------------------------------------
--[[ Places setting ]]--
BLUE_FLAG = {x=16799,y=16280,z=6} -- Blue flag Place
RED_FLAG = {x=16851,y=16280,z=6} --red flag Place
Tp_Place = {x=32310,y=32204,z=7} -- Place where the event teleport will be created.
Wait_Place = {x=16791, y=16345, z=7} -- Positions Players will  be sent when the enter event's teleport
frompos = {x=16787,y=16340,z=7} --start sqm in the waiting room(1 floor)
topos = {x=16795,y=16348,z=7} -- end sqm in the waiting room(1 floor)
Red_Position = {x=16849,y=16280,z=7} -- Red team temple pos
Blue_Position = {x=16801,y=16280,z=7} -- Blue team temple pos
---------------------------------------
--[[Event setting ]]--
Event_WaitTime = 5 -- time for the collection of player then event will start (in minutes)
Event_MaxTime = 15 --- in minutes ( this is the max time for an event to bb running )
Players_Speed = 175 -- put the level of base speed in event ( like if you want the speed of lvl 300 then wright 300)
TEAM2_NAME = "Red" -- team 2 name
TEAM1_NAME = "Blue" -- team 1 name
FLAG_SCORE = 3 -- score when team gets he wins
Teleport_On_Score = true -- this teleport all players to their team main position when some one score a flag , make false to disable.
Players_Least_Number = 4 -- this means if there is less than 2 players joined the event will be cancelled
Min_Join_Level = 100 -- min lvl for a player to join event
rewards_random = {    
             [60] = { -- Rewards of 60% , if it is then it will randomly give one of the items in the items verible if there you put more than one item there
                   items = {6542,2284,2433}
                 },
             [30] = { -- Rewards of 30%
                   items = {3982,9928,2496}
                 },
             [10] = { -- Rewards of 10%
                   items = {2309,6512,8890}
                 }
           }
]]></config>
<lib name="CTF-lib"><![CDATA[
function isTeamTwo(cid)
   return (isPlayer(cid) and getPlayerStorageValue(cid,5054) > -1)
end
function isTeamOne(cid)
   return (isPlayer(cid) and getPlayerStorageValue(cid,5055) > -1)
end
function resetTheTeams(cid)
   return (isPlayer(cid) and setPlayerStorageValue(cid,5054,-1) and setPlayerStorageValue(cid,5055,-1))
end
function setflagOwner(cid)
   return setPlayerStorageValue(cid,Owner,1)
end
function flagOwner(cid)
   return (isPlayer(cid) and getPlayerStorageValue(cid,Owner) > 0)
end
function releaseBF(cid)
   setGlobalStorageValue(FLAG_IN,-1)
   setPlayerStorageValue(cid,103, 0)
   setPlayerStorageValue(cid,Owner,-1)
return true
end
function releaseRF(cid)
   setGlobalStorageValue(FLAG2_INn,-1)
   setPlayerStorageValue(cid,103, 0)
   setPlayerStorageValue(cid,Owner,-1)
return true
end
function setFirstTeam(cid)
   return setPlayerStorageValue(cid,5055,1)
end
function setSecondTeam(cid)
   return setPlayerStorageValue(cid,5054,2)
end
function addToRed()
   return setGlobalStorageValue(TEAM2_FLAGS,getGlobalStorageValue(TEAM2_FLAGS)+1)
end
function addToBlue()
   return setGlobalStorageValue(TEAM1_FLAGS,getGlobalStorageValue(TEAM1_FLAGS)+1)
end
function getBlueScore()
   return getGlobalStorageValue(TEAM1_FLAGS)
end
function getRedScore()
   return getGlobalStorageValue(TEAM2_FLAGS)
end
function getTheSpeed(level)
   value = (220 +(2 *(level -1)))
   return value
end
function resetTheStorage()
   setGlobalStorageValue(Event_Start,-1)
   setGlobalStorageValue(Event_timeend,-1)
   setGlobalStorageValue(TEAM1_FLAGS,0)
   setGlobalStorageValue(FLAG2_INn,-1)
  setGlobalStorageValue(FLAG_IN,-1)
   setGlobalStorageValue(TEAM2_FLAGS,0)
return true
end
function blueStolen()
   return getGlobalStorageValue(FLAG_IN)
end
function redStolen()
   return getGlobalStorageValue(FLAG2_INn)
end
function giveReward(cid)
   local t = math.random(1,100)
   if t <= 10 then
     local rare = rewards_random[10].items[math.random(1,#rewards_random[10].items)]
     doPlayerAddItem(cid,rare,1)
     doPlayerSendTextMessage(cid,25,"Rare rate Reward : you won "..getItemNameById(rare)..".")
   elseif t > 10 and t <= 40 then
     local semi = rewards_random[30].items[math.random(1,#rewards_random[30].items)]
     doPlayerAddItem(cid,semi,1)
     doPlayerSendTextMessage(cid,25,"Semi rate Reward : you won "..getItemNameById(semi)..".")
   elseif t > 40 then
     local aver = rewards_random[60].items[math.random(1,#rewards_random[60].items)]
     doPlayerAddItem(cid,aver,1)
     doPlayerSendTextMessage(cid,25,"Averege rate Reward : you won "..getItemNameById(aver)..".")
   end
   return true
end
]]></lib>
<event type="login" name="Tutorial Login" event="script"><![CDATA[
domodlib('toto')
domodlib('CTF-lib')
function onLogin(cid)
   if getGlobalStorageValue(Event_Start) < 1 then
     if isTeamOne(cid) or isTeamTwo(cid) then
       resetTheTeams(cid)
     end
   end
   registerCreatureEvent(cid, "Attk")
   registerCreatureEvent(cid, "ctff")
   registerCreatureEvent(cid, "prepare")
return true
end
]]></event>
  <event type="combat" name="Attk" event="script"><![CDATA[
domodlib('toto')
domodlib('CTF-lib')
function onCombat(cid, target)
   if isTeamOne(cid) and isTeamOne(target) then
     return false
  end
  if isTeamTwo(cid) and isTeamTwo(target) then
  return false
  end
   return true
end
]]></event>
<event type="statschange" name="prepare" event="script"><![CDATA[
domodlib('toto')
domodlib('CTF-lib')
 
Second part of ctf.xml
Code:
local corpse_ids = {
     [0] = 3065, -- female
  [1] = 3058 -- male
}
function onStatsChange(cid, attacker, type, combat, value)
     if combat == COMBAT_HEALING then
       return true
  end
  if getCreatureHealth(cid) > value then
       return true
  end
     if getGlobalStorageValue(Event_Start) > 0 then
       if flagOwner(cid) then
         if isTeamOne(cid) then
           doItemSetAttribute(doCreateItem(corpse_ids[getPlayerSex(cid)], 1, getThingPos(cid)), "description", "You recognize "..getCreatureName(cid)..". He was killed by "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item").."[Flag Holder].")
           doTeleportThing(cid,Blue_Position,false)
           doSendMagicEffect(Blue_Position,10)
           doCreatureAddHealth(cid,getCreatureMaxHealth(cid))
           doCreatureAddMana(cid,getCreatureMaxMana(cid))
           releaseRF(cid)
               for _,cid in ipairs(getPlayersOnline()) do
                 if isTeamOne(cid) or isTeamTwo(cid) then           
                   doPlayerSendTextMessage(cid,22,getCreatureName(cid) .. " has died with the "..TEAM2_NAME.." team flag. The flag is returned back to the "..TEAM1_NAME.." team.")
                 end
               end
           return false
         elseif isTeamTwo(cid) then
           doItemSetAttribute(doCreateItem(corpse_ids[getPlayerSex(cid)], 1, getThingPos(cid)), "description", "You recognize "..getCreatureName(cid)..". He was killed by "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item").."[Flag Holder].")
           doTeleportThing(cid,Red_Position,false)
           doSendMagicEffect(Red_Position,10)
           doCreatureAddHealth(cid,getCreatureMaxHealth(cid))
           doCreatureAddMana(cid,getCreatureMaxMana(cid))
           releaseBF(cid)
               for _,cid in ipairs(getPlayersOnline()) do
                 if isTeamOne(cid) or isTeamTwo(cid) then           
                   doPlayerSendTextMessage(cid,22,getCreatureName(cid) .. " has died with the "..TEAM1_NAME.." team flag. The flag is returned back to the "..TEAM1_NAME.." team.")
                 end
               end
         return false
         end
       else
         if isTeamOne(cid) or isTeamTwo(cid) then
           doItemSetAttribute(doCreateItem(corpse_ids[getPlayerSex(cid)], 1, getThingPos(cid)), "description", "You recognize "..getCreatureName(cid)..". He was killed by "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item").."[Normal kill].")
           doTeleportThing(cid,( isTeamTwo(cid) and Red_Position or Blue_Position ),false)
           doSendMagicEffect(Red_Position,10)
           doCreatureAddHealth(cid,getCreatureMaxHealth(cid))
           doCreatureAddMana(cid,getCreatureMaxMana(cid))
           return false
         end
       end  
     end
return true
end
]]></event>
<movevent type="StepIn" actionid="6000" event="script"><![CDATA[
domodlib('toto')
domodlib('CTF-lib')
function eventEnds()
   doBroadcastMessage('CTF-Event : The '..TEAM2_NAME..' team won and reciaved their reward.')
    for _,cid in ipairs(getPlayersOnline()) do
       if isTeamTwo(cid) then
         doTeleportThing(cid,getTownTemplePosition(getPlayerTown(cid)),false)
         doSendMagicEffect(getTownTemplePosition(getPlayerTown(cid)),10)
        doRemoveConditions(cid,false)
        resetTheTeams(cid)
         doChangeSpeed(cid, getTheSpeed(getPlayerLevel(cid)) - getCreatureSpeed(cid))
         giveReward(cid)
       elseif isTeamOne(cid) then
         doTeleportThing(cid,getTownTemplePosition(getPlayerTown(cid)),false)
        doSendMagicEffect(getTownTemplePosition(getPlayerTown(cid)),10)
        doRemoveConditions(cid,false)
        doPlayerSendTextMessage(cid,22,'Your team have lost.')
         resetTheTeams(cid)
         doChangeSpeed(cid, getTheSpeed(getPlayerLevel(cid)) - getCreatureSpeed(cid))
       end
     end
  addEvent(resetTheStorage,5)
end
function onStepIn(cid, item, position, fromPosition)
   if getGlobalStorageValue(Event_Start) > 0 and getGlobalStorageValue(Event_timeend) > 0 then
     if isTeamTwo(cid) and redStolen() < 0 then
       if not flagOwner(cid) then
         doTeleportThing(cid, fromPosition,TRUE)
         doSendMagicEffect(getThingPos(cid),2)
         doPlayerSendTextMessage(cid, 27, "This is your team flag, you cant take it!")
       end
     elseif isTeamTwo(cid) and redStolen() > 0 and blueStolen() < 0 then
       doPlayerSendTextMessage(cid, 27, "Your team's Flag has been stolen, go get it back!")
       doTeleportThing(cid, fromPosition,TRUE)
       doSendMagicEffect(getThingPos(cid),2)
      return true
     end
  if isTeamTwo(cid) and flagOwner(cid) and blueStolen() > 0 and redStolen() < 0 then
       if getRedScore() == FLAG_SCORE -1 then
         addEvent(eventEnds,1000)
         addToRed()     
         doTeleportThing(cid, fromPosition,TRUE)
         doChangeSpeed(cid, getTheSpeed(Players_Speed) - getCreatureSpeed(cid) )
         releaseBF(cid)
           for _,tid in ipairs(getPlayersOnline()) do
             if isTeamOne(tid) or isTeamTwo(tid) then
               doPlayerSendTextMessage(tid,22,getCreatureName(cid) .. " have captured the last flag and earned match win to the ".. TEAM2_NAME.." team!")
             end
           end
       else
         releaseBF(cid)
         addToRed()     
         doTeleportThing(cid, fromPosition,TRUE)
         doChangeSpeed(cid, getTheSpeed(Players_Speed) - getCreatureSpeed(cid) )
           for _,tid in ipairs(getPlayersOnline()) do
             if isTeamOne(tid) or isTeamTwo(tid) then
               doPlayerSendTextMessage(tid,22,getCreatureName(cid) .. " have captured the flag and earned 1 point to the ".. TEAM2_NAME.." team!")
                 if Teleport_On_Score == true then
                   doTeleportThing(tid,( isTeamTwo(tid) and Red_Position or Blue_Position ), false)
                   doSendMagicEffect(getThingPos(tid),10)
                 end
             end
           end
       end
     end
     if isTeamOne(cid) then
       if blueStolen() < 0 and redStolen() > 0 then
    if flagOwner(cid) then
  doPlayerSendTextMessage(cid, 27, "You already holding the flag!")
    doTeleportThing(cid, fromPosition,TRUE)
      doSendMagicEffect(getThingPos(cid),2)
  elseif (not flagOwner(cid)) then
    doPlayerSendTextMessage(cid, 27, "Your Team mates already stole the oponent flag, defend him!")
    doTeleportThing(cid, fromPosition,TRUE)
      doSendMagicEffect(getThingPos(cid),2)
  end
       elseif blueStolen() > 0 and redStolen() < 0 then  
    doPlayerSendTextMessage(cid, 27, "Your team's flag is taken you can't capture or steel a flag!")
      doTeleportThing(cid, fromPosition,TRUE)
      doSendMagicEffect(getThingPos(cid),2)
       end
       if redStolen() < 0 and blueStolen() < 0 then
    setGlobalStorageValue(FLAG2_INn,1)
        setflagOwner(cid)
  setPlayerStorageValue(cid,103, os.time()+300)
  doTeleportThing(cid, fromPosition,TRUE)
           for _,tid in ipairs(getPlayersOnline()) do
      if isTeamOne(tid) or isTeamTwo(tid) then           
  doPlayerSendTextMessage(tid,22,getCreatureName(cid) .. " stolen the "..TEAM2_NAME.." team flag!")
             end
           end
       end
     end
   end
return true
end
]]> </movevent>
 
Third part of ctf.xml
Code:
<movevent type="StepIn" actionid="3435" event="script"><![CDATA[
domodlib('toto')
domodlib('CTF-lib')
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
   if getStorage(Event_Tile_Close) > 0 then
     if getPlayerLevel(cid) < Min_Join_Level then
      doTeleportThing(cid,fromPosition,false)
       doSendMagicEffect(fromPosition,10)
       doPlayerSendTextMessage(cid,21,"Only players of level "..Min_Join_Level.." are allowed to pass.")
     else
       doTeleportThing(cid,Wait_Place,false)
       doSendMagicEffect(Wait_Place,10)
     end
   else
     doTeleportThing(cid,fromPosition,false)
     doSendMagicEffect(fromPosition,10)
     doPlayerSendTextMessage(cid,21,"Come back later, event is closed now.")
   end
return true
end
]]> </movevent>
<movevent type="StepIn" actionid="6001" event="script"><![CDATA[
domodlib('toto')
domodlib('CTF-lib')
function eventEnded()
   if getGlobalStorageValue(Event_Start) > 0 and getGlobalStorageValue(Event_timeend) > 0 then
     doBroadcastMessage('CTF-Event : The '.. TEAM1_NAME..' team won and reciaved their reward.')
    for _,cid in ipairs(getPlayersOnline()) do
        if isTeamOne(cid) then
          doTeleportThing(cid,getTownTemplePosition(getPlayerTown(cid)),false)
           doSendMagicEffect(getTownTemplePosition(getPlayerTown(cid)),10)
           doRemoveConditions(cid,false)
           resetTheTeams(cid)
           doChangeSpeed(cid, getTheSpeed(getPlayerLevel(cid)) - getCreatureSpeed(cid))
           giveReward(cid)
         elseif isTeamTwo(cid) then
          doTeleportThing(cid,getTownTemplePosition(getPlayerTown(cid)),false)
           doSendMagicEffect(getTownTemplePosition(getPlayerTown(cid)),10)
           doRemoveConditions(cid,false)
        doPlayerSendTextMessage(cid,22,'Your team have lost.')
           resetTheTeams(cid)
           doChangeSpeed(cid, getTheSpeed(getPlayerLevel(cid)) - getCreatureSpeed(cid))
         end
       end
  end
  addEvent(resetTheStorage,5)
end
function onStepIn(cid, item, position, fromPosition)
   if getGlobalStorageValue(Event_Start) > 0 and getGlobalStorageValue(Event_timeend) > 0 then
     if isTeamOne(cid) and blueStolen() < 0 then
       if not flagOwner(cid) then
         doTeleportThing(cid, fromPosition,TRUE)
         doSendMagicEffect(getThingPos(cid),2)
         doPlayerSendTextMessage(cid, 27, "This is your team flag, you cant take it!")
       end
     elseif isTeamOne(cid) and blueStolen() > 0 and redStolen() < 0 then
       doPlayerSendTextMessage(cid, 27, "Your team's Flag has been stolen, go get it back!")
       doTeleportThing(cid, fromPosition,TRUE)
       doSendMagicEffect(getThingPos(cid),2)
  return true
     end
     if isTeamOne(cid) and flagOwner(cid) and redStolen() > 0 and blueStolen() < 0 then
       if getBlueScore() == FLAG_SCORE -1 then
         addEvent(eventEnded,1000)
         addToBlue()     
         doTeleportThing(cid, fromPosition,TRUE)
         doChangeSpeed(cid, getTheSpeed(Players_Speed) - getCreatureSpeed(cid) )
         releaseRF(cid)
           for _,tid in ipairs(getPlayersOnline()) do
             if isTeamOne(tid) or isTeamTwo(tid) then
               doPlayerSendTextMessage(tid,22,getCreatureName(cid) .. " have captured the last flag and earned match win to the ".. TEAM1_NAME.." team!")
             end
           end
       else
         releaseRF(cid)
         addToBlue()     
         doTeleportThing(cid, fromPosition,TRUE)
         doChangeSpeed(cid, getTheSpeed(Players_Speed) - getCreatureSpeed(cid) )
           for _,tid in ipairs(getPlayersOnline()) do
             if isTeamOne(tid) or isTeamTwo(tid) then
               doPlayerSendTextMessage(tid,22,getCreatureName(cid) .. " have captured the flag and earned 1 point to the ".. TEAM1_NAME.." team!")
                 if Teleport_On_Score == true then
                   doTeleportThing(tid,( isTeamTwo(tid) and Red_Position or Blue_Position ), false)
                   doSendMagicEffect(getThingPos(tid),10)
                 end
             end
           end
       end
     end
     if isTeamTwo(cid) then
       if blueStolen() > 0 and redStolen() < 0 then
        if flagOwner(cid) then
           doPlayerSendTextMessage(cid, 27, "You already holding the flag!")
    doTeleportThing(cid, fromPosition,TRUE)
      doSendMagicEffect(getThingPos(cid),2)
  elseif (not flagOwner(cid)) then
    doPlayerSendTextMessage(cid, 27, "Your Team mates already stole the oponent flag, defend him!")
    doTeleportThing(cid, fromPosition,TRUE)
      doSendMagicEffect(getThingPos(cid),2)
  end
       elseif redStolen() > 0 and blueStolen() < 0 then  
         doPlayerSendTextMessage(cid, 27, "Your team's flag is taken you can't capture or steel a flag!")
         doTeleportThing(cid, fromPosition,TRUE)
         doSendMagicEffect(getThingPos(cid),2)
       end
       if blueStolen() < 0 and redStolen() < 0 then
         setGlobalStorageValue(FLAG_IN,1)
        setflagOwner(cid)
         setPlayerStorageValue(cid,103, os.time()+300)
         doTeleportThing(cid, fromPosition,TRUE)   
  for _,tid in ipairs(getPlayersOnline()) do
             if isTeamOne(tid) or isTeamTwo(tid) then           
               doPlayerSendTextMessage(tid,22,getCreatureName(cid) .. " stolen the "..TEAM1_NAME.." team flag!")
             end
           end
       end
     end
   end
return true
end
]]> </movevent>
<globalevent name="ctf" interval="3600000" event="script"><![CDATA[
domodlib('toto')
domodlib('CTF-lib')
local players = {}
local bmale = createConditionObject(CONDITION_OUTFIT)
     setConditionParam(bmale, CONDITION_PARAM_TICKS, -1)
     addOutfitCondition(bmale, {lookType = math.random(128,134), lookHead = 115, lookBody =114, lookLegs = 81, lookFeet = 81, lookTypeEx = 0, lookAddons = 3})
   local bfemale = createConditionObject(CONDITION_OUTFIT)
     setConditionParam(bfemale, CONDITION_PARAM_TICKS, -1)
     addOutfitCondition(bfemale, {lookType = math.random(136,142), lookHead = 115, lookBody =114, lookLegs = 81, lookFeet = 81, 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})
   local fight = createConditionObject(CONDITION_INFIGHT)
     setConditionParam(fight, CONDITION_PARAM_TICKS, -1)
function eventEnd()
   if getGlobalStorageValue(Event_Start) > 0 and getGlobalStorageValue(Event_timeend) > 0 then
     if getRedScore() > getBlueScore() then
    doBroadcastMessage('CTF-Event : The '.. TEAM2_NAME..' team won and recieved their reward.')
         for _,cid in ipairs(getPlayersOnline()) do
           if isTeamTwo(cid) then
             doTeleportThing(cid,getTownTemplePosition(getPlayerTown(cid)),false)
             doSendMagicEffect(getTownTemplePosition(getPlayerTown(cid)),10)
             doRemoveConditions(cid,false)
             resetTheTeams(cid)
             doChangeSpeed(cid, getTheSpeed(getPlayerLevel(cid)) - getCreatureSpeed(cid))
             giveReward(cid)
           elseif isTeamOne(cid) then
             doTeleportThing(cid,getTownTemplePosition(getPlayerTown(cid)),false)
             doSendMagicEffect(getTownTemplePosition(getPlayerTown(cid)),10)
             doRemoveConditions(cid,false)
             doPlayerSendTextMessage(cid,22,'Your team have lost.')
             resetTheTeams(cid)
             doChangeSpeed(cid, getTheSpeed(getPlayerLevel(cid)) - getCreatureSpeed(cid))
           end
         end
     elseif getRedScore() < getBlueScore() then
    doBroadcastMessage('CTF-Event : The '.. TEAM1_NAME..' team won and recieved their reward.')
         for _,cid in ipairs(getPlayersOnline()) do
           if isTeamOne(cid) then
             doTeleportThing(cid,getTownTemplePosition(getPlayerTown(cid)),false)
             doSendMagicEffect(getTownTemplePosition(getPlayerTown(cid)),10)
             doRemoveConditions(cid,false)
             resetTheTeams(cid)
             doChangeSpeed(cid, getTheSpeed(getPlayerLevel(cid)) - getCreatureSpeed(cid))
             giveReward(cid)
           elseif isTeamTwo(cid) then
             doTeleportThing(cid,getTownTemplePosition(getPlayerTown(cid)),false)
             doSendMagicEffect(getTownTemplePosition(getPlayerTown(cid)),10)
             doRemoveConditions(cid,false)
             doPlayerSendTextMessage(cid,22,'Your team have lost.')
             resetTheTeams(cid)
             doChangeSpeed(cid, getTheSpeed(getPlayerLevel(cid)) - getCreatureSpeed(cid))
           end
         end
     elseif getRedScore() == getBlueScore() then
    doBroadcastMessage('CTF-Event : The Event ended with a draw between both teams.')
         for _,cid in ipairs(getPlayersOnline()) do
           if isTeamTwo(cid) or isTeamOne(cid) then
             doTeleportThing(cid,getTownTemplePosition(getPlayerTown(cid)),false)
             doSendMagicEffect(getTownTemplePosition(getPlayerTown(cid)),10)
             doRemoveConditions(cid,false)
             doPlayerSendTextMessage(cid,22,'It was a draw between both teams.')
             resetTheTeams(cid)
             doChangeSpeed(cid, getTheSpeed(getPlayerLevel(cid)) - getCreatureSpeed(cid))
           end
         end
     end
     addEvent(resetTheStorage,1000)
   end
end
 
Fourth and last part of ctf.xml
Code:
function eventStart()
   doSetStorage(Event_Tile_Close,-1)
   setGlobalStorageValue(Event_timeend,1)
   setGlobalStorageValue(Timer, os.time() + Event_MaxTime*60)
   addEvent(eventEnd,Event_MaxTime*60*1000)
  for v = frompos.x , topos.x do
         for k = frompos.y , topos.y do
           for i = 1, 200 do
             position = {x = v, y = k, z = 7, stackpos = i}
             pid = getThingfromPos(position).uid
               if(pid ~= nil and isPlayer(pid)) then
                 table.insert(players, pid)
               end
           end
         end
       end
       if math.mod(#players, 2) ~= 0 then   
         doTeleportThing(players[#players],getTownTemplePosition(getPlayerTown(players[#players])),false)
         doSendMagicEffect(getThingPosition(players[#players]),10)
         doPlayerSendTextMessage(players[#players], 19, "Sorry, you have been kicked from event to balance teams.")           
         table.remove(players)
  end
  if #players < Players_Least_Number then
         doBroadcastMessage("CTF event was cancelled because less than "..Players_Least_Number.." players joined")
         resetTheStorage()
           if #players > 0 then
             for i = 1,#players do
              doTeleportThing(players[i],getTownTemplePosition(getPlayerTown(players[i])),false)
          doSendMagicEffect(getThingPos(players[i]), 10)
            end
           end
       else   
            doBroadcastMessage("CTF started")
             for i = 1, math.floor(#players/2) do
               setFirstTeam(players[i])
             end
             for i = math.floor(#players/2)+1 , #players do
               setSecondTeam(players[i])
             end
             for _,cid in ipairs(getPlayersOnline()) do
               if isTeamOne(cid) then
                 if getPlayerSex(cid) == 1 then
                   doAddCondition(cid, bmale)
                 elseif getPlayerSex(cid) ~= 1 then
                   doAddCondition(cid, bfemale)
                 end
                 doAddCondition(cid, fight)
                 doTeleportThing(cid,Blue_Position,false)
                 doSendMagicEffect(Blue_Position, 10)
                 doChangeSpeed(cid, getTheSpeed(Players_Speed) - getCreatureSpeed(cid))
               elseif  isTeamTwo(cid) then
                 if getPlayerSex(cid) == 1 then
                   doAddCondition(cid, rmale)
                 elseif getPlayerSex(cid) ~= 1 then
                   doAddCondition(cid, rfemale)
                 end
                 doAddCondition(cid, fight)
                 doTeleportThing(cid,Red_Position,false)
                 doSendMagicEffect(Red_Position, 10)
                 doChangeSpeed(cid, getTheSpeed(Players_Speed) - getCreatureSpeed(cid))           
               end
             end   
             players = {}
  end
end
function onThink(interval)
  if getGlobalStorageValue(Event_Start) < 0 then
     setGlobalStorageValue(Event_Start,1)
     doSetStorage(Event_Tile_Close,1)
     doBroadcastMessage("CTF event is opened and teleport is created. It will start in "..Event_WaitTime.." minutes. The portal is located in the lower level of Thais boat.")
     players = {}
     if getTileItemById(Tp_Place, 1387).uid < 1 then
       doItemSetAttribute(doCreateItem(1387,1, Tp_Place), "aid", 3435)
     end
     f= Event_WaitTime - 1
       for i = 1,Event_WaitTime-1 do
         addEvent(doBroadcastMessage,i*60*1000,"CTF event is opened and teleport is created. It will start in "..f.." minutes. The portal is located in the lower level of Thais boat.")
         f= f-1
       end
     addEvent(eventStart,Event_WaitTime*60*1000)
   end
return true
end
]]></globalevent>
 <event type="think" name="ctff" event="script"><![CDATA[
domodlib('toto')
domodlib('CTF-lib')
local bl = BLUE_FLAG
local re = RED_FLAG
function onThink(interval)
   if getGlobalStorageValue(Event_Start) > 0 and getGlobalStorageValue(Event_timeend) > 0 then
  if redStolen() < 0 then
       doSendAnimatedText(re,"FLAG!",TEXTCOLOR_DARKRED)
       doSendMagicEffect(re, CONST_ME_SOUND_RED)
  end
  if blueStolen() < 0 then
       doSendAnimatedText(bl,"FLAG!",TEXTCOLOR_GREEN)
       doSendMagicEffect(bl, CONST_ME_SOUND_GREEN)
    end
  for _, cid in ipairs(getPlayersOnline()) do
  if flagOwner(cid) then
         if isTeamOne(cid) or isTeamTwo(cid) then
           if hasCondition(cid,CONDITION_HASTE) then
             doRemoveCondition(cid,CONDITION_HASTE)
           end
         end
         pl = getThingPos(cid)
           if isTeamTwo(cid) then
             if getPlayerStorageValue(cid,103) < os.time() then
               releaseBF(cid)
                 for _,cid in ipairs(getPlayersOnline()) do
                   if isTeamOne(cid) or isTeamTwo(cid) then                       
                     doPlayerSendTextMessage(cid,22,getCreatureName(cid) .. " wasted 5 minutes with FLAG."..TEAM2_NAME.." flag is again on spawn!")
                   end
                 end
             else
               doSendAnimatedText(pl,"FLAG!",TEXTCOLOR_GREEN)
               doSendMagicEffect(pl, CONST_ME_SOUND_GREEN)
             end
           elseif isTeamOne(cid) then
             if getPlayerStorageValue(cid,103) < os.time() then
               releaseRF(cid)
                 for _,cid in ipairs(getPlayersOnline()) do
                   if isTeamOne(cid) or isTeamTwo(cid) then                       
                     doPlayerSendTextMessage(cid,22,getCreatureName(cid) .. " wasted 5 minutes with FLAG."..TEAM1_NAME.." flag is again on spawn!")
                   end
                 end
             else
               doSendAnimatedText(pl,"FLAG!",COLOR_RED)
               doSendMagicEffect(pl, CONST_ME_SOUND_RED)
             end
           end
       end
     end
   end
  return true
end
]]></event>
<globalevent name="timer" interval="0.4" event="script"><![CDATA[
domodlib('toto')
domodlib('CTF-lib')
function onThink(interval)
   for _,cid in ipairs(getPlayersOnline()) do
     if isTeamOne(cid) or isTeamTwo(cid) then
       if getGlobalStorageValue(Event_Start) > 0 and getGlobalStorageValue(Event_timeend) > 0 then
         if getGlobalStorageValue(Timer)- os.time() >= 0 then
           doPlayerSendCancel(cid, "Time -> ".. os.date("%M:%S ",getGlobalStorageValue(Timer)- os.time()) .. "  |  ".. TEAM1_NAME.." Score : "..getBlueScore(cid).."/"..FLAG_SCORE.." captures  |  ".. TEAM2_NAME.." Score : "..getRedScore(cid).."/"..FLAG_SCORE.." captures")
         end
       end
     end
   end
return true
end
]]></globalevent>
<globalevent name="starting" type="startup" event="script"><![CDATA[
domodlib('toto')
domodlib('CTF-lib')
function onStartup()
   resetTheStorage()
 return true
end
]]></globalevent>
 
Back
Top