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

[Suggestion]

HamTheKratos

Member
Joined
Jan 14, 2009
Messages
243
Reaction score
8
Location
I Dunno
^_^ guys i thought about an auto capture the flag event hehe:peace:

lets say for eg 10chars entered the tp after 2 min 5 went red team nd 5blue team , each team will be in a room with a monster when he gets killed a door opened so lets say red team killed him first the door opened they will take the flag to their area then when blue team opens the door trys to take the flag and after 10mins last team with flag wins a reward


ty
 
nvm found it. by:Existance :p

ata/globalevents/scripts/ctf.lua add:
Lua:
local t = {
	redPos = {x = 982, y = 1022, z = 7},
	bluePos = {x = 993, y = 1033, z = 7},
	redStorage = 15000,
	blueStorage = 15001,
	fromPos = {x = 1004, y = 1023, z = 7},
	toPos = {x = 1015, y = 1032, z = 7}
}
local conditionBlue = createConditionObject(CONDITION_OUTFIT)
	setConditionParam(conditionBlue, CONDITION_PARAM_TICKS, 1800 * 1000)
	addOutfitCondition(conditionBlue, {lookType = 130, lookHead = 87, lookBody = 87, lookLegs = 87, lookFeet = 87})
local conditionRed = createConditionObject(CONDITION_OUTFIT)
	setConditionParam(conditionRed, CONDITION_PARAM_TICKS, 1800 * 1000)
	addOutfitCondition(conditionRed, {lookType = 130, lookHead = 94, lookBody = 94, lookLegs = 94, lookFeet = 94})
local function teleportThing(minutes)
	local event = 0
	if minutes <= 0 then
		for _, cid in ipairs(getPlayersOnline()) do
			if isInRange(getThingPos(cid), t.fromPos, t.toPos) then
				if math.random(1, 3) < 3 then
					setPlayerStorageValue(cid, t.redStorage, 1)
					doAddCondition(cid, conditionRed)
					doTeleportThing(cid, t.redPos, true)
				else
					setPlayerStorageValue(cid, t.blueStorage, 1)
					doAddCondition(cid, conditionBlue)
					doTeleportThing(cid, t.bluePos, true)
				end
			end
		end
		return true
	end
	if minutes == 1 then
		doBroadcastMessage("Capture The Flag will begin in " .. minutes .. " minute!")
	elseif minutes <= 3 then
		doBroadcastMessage("Capture The Flag will begin in " .. minutes .. " minutes!")
	else
		doBroadcastMessage("Capture The Flag will begin in " .. minutes .. " minutes!")
	end
	event = addEvent(teleportThing, 60, minutes - 1)
	return true
end
function onThink(interval, lastExecution)
	return teleportThing(math.abs(math.ceil(1)))
end

globalevents.xml add;
Lua:
<globalevent name="ctf_event" interval="60" event="script" value="ctf.lua"/>

data/creaturescripts/scripts/ctf_target.lua add:
Lua:
local t = {
	redStorage = 15000,
	blueStorage = 15001
}
function onCombat(cid, target)
	if isPlayer(cid) and isPlayer(target) then
		if getPlayerStorageValue(cid, t.redStorage) == 1 and getPlayerStorageValue(target, t.redStorage) == 1 then
			return doPlayerSendCancel(cid, "You may not attack your team mates.") and false
		elseif getPlayerStorageValue(cid, t.blueStorage) == 1 and getPlayerStorageValue(target, t.blueStorage) == 1 then
			return doPlayerSendCancel(cid, "You may not attack your team mates.") and false
		end
	end
	return true
end

data/creaturescripts/scripts/stats_ctf.lua add:
Lua:
local t = {
	redPos = {x = 983, y = 1028, z = 7},
	bluePos = {x = 992, y = 1028, z = 7},
	redStorage = 15000,
	blueStorage = 15001,
	redFlag = 18000,
	blueFlag = 18001
}
function onStatsChange(cid, attacker, type, combat, value)
	if type == 1 then
		if getCreatureHealth(cid) <= value then
			if isPlayer(cid) and isCreature(attacker) then
				if getPlayerStorageValue(cid, t.redStorage) == 1 then
					if getPlayerStorageValue(cid, t.blueFlag) == 1 and getGlobalStorageValue(t.blueFlag) == 1 then
						setPlayerStorageValue(cid, t.blueFlag, -1)
						setGlobalStorageValue(t.blueFlag, -1)
						doBroadcastMessage(getCreatureName(cid) .. " has lost the Blue Flag!")
						doTeleportThing(cid, t.redPos, true)
					else
						doTeleportThing(cid, t.redPos, true)
					end
					doCreatureAddHealth(cid, getCreatureMaxHealth(cid), true)
					doCreatureAddMana(cid, getCreatureMaxMana(cid), true)
				elseif getPlayerStorageValue(cid, t.blueStorage) == 1 then
					if getPlayerStorageValue(cid, t.redFlag) == 1 and getGlobalStorageValue(t.redFlag) == 1 then
						setPlayerStorageValue(cid, t.redFlag, -1)
						setGlobalStorageValue(t.redFlag, -1)
						doTeleportThing(cid, t.bluePos, true)
						doBroadcastMessage(getCreatureName(cid) .. " has lost the Red Flag!")
					else
						doTeleportThing(cid, t.bluePos, true)
					end
					doCreatureAddHealth(cid, getCreatureMaxHealth(cid), true)
					doCreatureAddMana(cid, getCreatureMaxMana(cid), true)
				end
			end
			return false
		end
	end
	return true
end

creaturescripts.xml add:
Lua:
	<event type="statschange" name="stats_ctf" event="script" value="stats_ctf.lua"/>
	<event type="combat" name="ctf_target" event="script" value="ctf_target.lua"/>

login.lua add:
Lua:
	registerCreatureEvent(cid, "stats_ctf")
	registerCreatureEvent(cid, "ctf_target")

data/movements/scripts/test.lua add:
Lua:
local t = {
	redStorage = 15000,
	blueStorage = 15001,
	redFlag = 18000,
	blueFlag = 18001,
	redGoal = 19000,
	blueGoal = 19001,
	fromPos = {x = 982, y = 1022, z = 7},
	toPos = {x = 993, y = 1033, z = 7}
}
local function getPlayers()
	local thisTable = {}
	for x = t.fromPos.x, t.toPos.x do
		for y = t.fromPos.y, t.toPos.y do
			for z = t.fromPos.z, t.toPos.z do
				local myPos = {x = x, y = y, z = z}
				local player = getTopCreature(myPos).uid
				if player > 0 then table.insert(thisTable, player) else table.remove(thisTable, player) end
			end
		end
	end
	return {thisTable = thisTable}
end
local function repeatFlagOnPlayer(cid)
	local k = getThingPos(cid)
	local r = {
		{pos = {x = k.x + 2, y = k.y - 2, z = k.z}, delay = 300},
		{pos = {x = k.x + 2, y = k.y + 2, z = k.z}, delay = 300},
		{pos = {x = k.x - 2, y = k.y + 2, z = k.z}, delay = 300},
		{pos = {x = k.x - 2, y = k.y, z = k.z}, delay = 300},
		{pos = {x = k.x - 2, y = k.y - 2, z = k.z}, delay = 300},
		{pos = {x = k.x, y = k.y - 2, z = k.z}, delay = 300}
	}
	local effects = {27, 28, 29, 30}
	if isPlayer(cid) then
		if getPlayerStorageValue(cid, t.blueStorage) == 1 and getPlayerStorageValue(cid, t.redFlag) == 1 and getGlobalStorageValue(t.redFlag) == 1 then
			for i = 1, 6 do
				addEvent(doSendDistanceShoot, r[i].delay, r[i].pos, k, CONST_ME_FIREWORK_YELLOW)
			end
			for i = 1, 4 do
				addEvent(doSendMagicEffect, 1000, getThingPos(cid), effects[i])
			end
			return addEvent(repeatFlagOnPlayer, 1000, cid)
		elseif getPlayerStorageValue(cid, t.redStorage) == 1 and getPlayerStorageValue(cid, t.blueFlag) == 1 and getGlobalStorageValue(t.blueFlag) == 1 then
			for i = 1, 6 do
				addEvent(doSendDistanceShoot, r[i].delay, r[i].pos, k, CONST_ME_FIREWORK_YELLOW)
			end
			for i = 1, 4 do
				addEvent(doSendMagicEffect, 1000, getThingPos(cid), effects[i])
			end
			return addEvent(repeatFlagOnPlayer, 1000, cid)
		else
			return false
		end
	else
		return false
	end
end
function onStepIn(cid, item, position, fromPosition, toPosition, lastPosition, actor)
	if isPlayer(cid) then
		if item.actionid == 6000 then
			if getPlayerStorageValue(cid, t.redStorage) == 1 then
				if getPlayerStorageValue(cid, t.blueFlag) == -1 and getGlobalStorageValue(t.blueFlag) == -1 then
					setPlayerStorageValue(cid, t.blueFlag, 1)
					setGlobalStorageValue(t.blueFlag, 1)
					repeatFlagOnPlayer(cid)
					doBroadcastMessage(getCreatureName(cid) .. " has stolen the Blue Flag!")
				else
					doCreatureSay(cid, "The flag is not at home.", 19)
					doTeleportThing(cid, fromPosition, false)
				end
			else
				doCreatureSay(cid, "You may only pick up the opposite team flag.", 19)
				doTeleportThing(cid, fromPosition, false)
			end
		elseif item.actionid == 6001 then
			if getPlayerStorageValue(cid, t.blueStorage) == 1 then
				if getPlayerStorageValue(cid, t.redFlag) == -1 and getGlobalStorageValue(t.redFlag) == -1 then
					setPlayerStorageValue(cid, t.redFlag, 1)
					setGlobalStorageValue(t.redFlag, 1)
					repeatFlagOnPlayer(cid)
					doBroadcastMessage(getCreatureName(cid) .. " has stolen the Red flag!")
				else
					doCreatureSay(cid, "The flag is not at home.", 19)
					doTeleportThing(cid, fromPosition, false)
				end
			else
				doCreatureSay(cid, "The flag is not at home.", 19)
				doTeleportThing(cid, fromPosition, false)
			end
		end
		if item.actionid == 6002 then
			if getPlayerStorageValue(cid, t.redStorage) == 1 then
				if getPlayerStorageValue(cid, t.blueFlag) == 1 and getGlobalStorageValue(t.blueFlag) == 1 then
					setGlobalStorageValue(t.blueFlag, -1)
					setPlayerStorageValue(cid, t.blueFlag, -1)
					setGlobalStorageValue(t.redGoal, getGlobalStorageValue(t.redGoal)+1)
					doBroadcastMessage("Current CTF Game Score:\nRed Team: " .. getGlobalStorageValue(t.redGoal) .. "\nBlue Team: " .. getGlobalStorageValue(t.blueGoal) .. "\nTen Scores to win!", 20)
					doBroadcastMessage(getCreatureName(cid) .. " has scored 1 point for the Red Team!")
				else
					doCreatureSay(cid, "You dont have the flag.", 19)
					doTeleportThing(cid, fromPosition, false)
				end
			elseif getPlayerStorageValue(cid, t.blueStorage) == 1 then
				if getPlayerStorageValue(cid, t.redFlag) == 1 and getGlobalStorageValue(t.redFlag) == 1 then
					setGlobalStorageValue(t.redFlag, -1)
					setPlayerStorageValue(cid, t.redFlag, -1)
					setGlobalStorageValue(t.blueGoal, getGlobalStorageValue(t.blueGoal)+1)
					doBroadcastMessage("Current CTF Game Score:\nRed Team: " .. getGlobalStorageValue(t.redGoal) .. "\nBlue Team: " .. getGlobalStorageValue(t.blueGoal) .. "\nTen Scores to win!", 20)
					doBroadcastMessage(getCreatureName(cid) .. " has scored 1 point for the Blue Team!")
				else
					doCreatureSay(cid, "You dont have the flag.", 19)
					doTeleportThing(cid, fromPosition, false)
				end
			end
			if getGlobalStorageValue(t.blueGoal) == 10 and getGlobalStorageValue(t.redGoal) < 10 then
				for _, cid in ipairs(getPlayersOnline()) do
					if getPlayerStorageValue(cid, t.blueStorage) == 1 then
						setPlayerStorageValue(cid, t.blueStorage, -1)
						doPlayerAddItem(cid, 9020, math.random(1, 6))
					elseif getPlayerStorageValue(cid, t.redStorage) == 1 then
						setPlayerStorageValue(cid, t.redStorage, -1)
					end
					doRemoveCondition(cid, CONDITION_OUTFIT)
					setGlobalStorageValue(t.redGoal, 0)
					setGlobalStorageValue(t.blueGoal, 0)
				end
				local FF = getPlayers().thisTable
				if #FF > 1 then
					for _, hh in ipairs(FF) do
						doTeleportThing(hh, getTownTemplePosition(getPlayerTown(hh)), true)
					end
				end
			elseif getGlobalStorageValue(t.redGoal) == 10 and getGlobalStorageValue(t.blueGoal) < 10 then
				for _, cid in ipairs(getPlayersOnline()) do
					if getPlayerStorageValue(cid, t.redStorage) == 1 then
						setPlayerStorageValue(cid, t.redStorage, -1)
						doPlayerAddItem(cid, 9020, math.random(1, 6))
					elseif getPlayerStorageValue(cid, t.blueStorage) == 1 then
						setPlayerStorageValue(cid, t.blueStorage, -1)
					end
					doRemoveCondition(cid, CONDITION_OUTFIT)
					setGlobalStorageValue(t.redGoal, 0)
					setGlobalStorageValue(t.blueGoal, 0)
				end
				local F = getPlayers().thisTable
				if #F > 1 then
					for _, h in ipairs(F) do
						doTeleportThing(h, getTownTemplePosition(getPlayerTown(h)), true)
					end
				end
			end
		end
	else
		doRemoveCreature(cid)
	end
	return true
end

movements.xml:
Lua:
	<movevent type="StepIn" actionid="6000-6002" event="script" value="test.lua"/>

data/globalevents/scripts/start.lua add:
before return true
Lua:
setGlobalStorageValue(19000, 0)
setGlobalStorageValue(19001, 0)
 
Back
Top