Ir para conteúdo
  • 0

[ Resolvido ]Conflito Entre Dois Eventos.


hique12

Pergunta

ajudem por favor.

tenho um server e nele tenho dois eventos o Zombie Event -> http://www.xtibia.co...-pagina-gesior/ e o team war -> http://www.xtibia.co...to-team-battle/

 

quando inicia o zombie, abre o tp entramos, mudei o minimo para 2 players, entrou eu e um amigo e mais o god, então marcou a msg em vermelho 3 online no zombie event e tal, ai quando deu os 5min q era pra começar o evento apareceu escrito 18:21 Team-Battle event was cancelled as only 0 players joined o que normalmente aparece para o team battle qndo não há ngm.

 

meu sistema zombie.

Globalevents/scripts/zombie event.lua

 

local config = {

playerCount = 2001, -- Global storage for counting the players left/entered in the event

zombieCount = 2002, -- Global storage for counting the zombies in the event

teleportActionId = 2000, -- Action id of the teleport needed for the movement script

teleportPosition = {x = 82, y = 59, z = 7, stackpos = 1}, -- Where the teleport will be created

teleportToPosition = {x = 940, y = 970, z = 12}, -- Where the teleport will take you

teleportId = 1387, -- Id of the teleport

timeToStartEvent = 5, -- Minutes, after these minutes the teleport will be removed and the event will be declared started

timeBetweenSpawns = 20, -- Seconds between each spawn of zombie

zombieName = "event zombie", -- Name of the zombie that should be summoned

playersNeededToStartEvent = 2, -- Players needed before the zombies can spawn.

 

-- Should be the same as in the creaturescript!

-- The zombies will spawn randomly inside this area

fromPosition = {x = 890, y = 929, z = 12}, -- top left cornor of the playground

toPosition = {x = 984, y = 1013, z = 12}, -- bottom right cornor of the playground

}

 

function onTimer()

local tp = doCreateTeleport(config.teleportId, config.teleportToPosition, config.teleportPosition)

doItemSetAttribute(tp, "aid", config.teleportActionId)

doBroadcastMessage("Zombie event starting in " .. config.timeToStartEvent .. " minutes! The teleport will be closed when the event start!", MESSAGE_STATUS_WARNING)

setGlobalStorageValue(config.playerCount, 0)

setGlobalStorageValue(config.zombieCount, 0)

addEvent(startEvent, config.timeToStartEvent * 1000 * 60)

print(getGlobalStorageValue(2001))

end

 

function startEvent()

local get = getThingfromPos(config.teleportPosition)

if get.itemid == config.teleportId then

doRemoveItem(get.uid, 1)

end

 

local fromp, top = config.fromPosition, config.toPosition

 

if getGlobalStorageValue(config.playerCount) >= config.playersNeededToStartEvent then

addEvent(spawnZombie, config.timeBetweenSpawns * 1000)

doBroadcastMessage("Good luck in the zombie event people! The teleport has closed!", MESSAGE_STATUS_WARNING)

 

for x = fromp.x, top.x do

for y = fromp.y, top.y do

for z = fromp.z, top.z do

areapos = {x = x, y = y, z = z, stackpos = 253}

getPlayers = getThingfromPos(areapos)

if isPlayer(getPlayers.uid) then

doPlayerSendTextMessage(getPlayers.uid, MESSAGE_EVENT_ADVANCE, "The first zombie will spawn in " .. config.timeBetweenSpawns .. " seconds! Good luck!")

end

end

end

end

else

doBroadcastMessage("The Zombie event could not start because of to few players participating.\n At least " .. config.playersNeededToStartEvent .. " players is needed!", MESSAGE_STATUS_WARNING)

for x = fromp.x, top.x do

for y = fromp.y, top.y do

for z = fromp.z, top.z do

areapos = {x = x, y = y, z = z, stackpos = 253}

getPlayers = getThingfromPos(areapos)

if isPlayer(getPlayers.uid) then

doTeleportThing(getPlayers.uid, getTownTemplePosition(getPlayerTown(getPlayers.uid)), false)

doSendMagicEffect(getPlayerPosition(getPlayers.uid), CONST_ME_TELEPORT)

end

end

end

end

end

end

 

function spawnZombie()

if getGlobalStorageValue(config.playerCount) >= 2 then

pos = {x = math.random(config.fromPosition.x, config.toPosition.x), y = math.random(config.fromPosition.y, config.toPosition.y), z = math.random(config.fromPosition.z, config.toPosition.z)}

doSummonCreature(config.zombieName, pos)

doSendMagicEffect(pos, CONST_ME_MORTAREA)

setGlobalStorageValue(config.zombieCount, getGlobalStorageValue(config.zombieCount)+1)

doBroadcastMessage("A zombie has spawned! There is currently " .. getGlobalStorageValue(config.zombieCount) .. " zombies in the zombie event!", MESSAGE_STATUS_CONSOLE_RED)

addEvent(spawnZombie, config.timeBetweenSpawns * 1000)

end

end

 

 

Movements/scripts/zombie event.lua

 

local config = {

playerCount = 2001, -- Global storage for counting the players in the event

maxPlayers = 15, -- Max players who can participate

 

}

 

function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)

if getGlobalStorageValue(config.playerCount) < config.maxPlayers then

setGlobalStorageValue(config.playerCount, getGlobalStorageValue(config.playerCount)+1)

if getGlobalStorageValue(config.playerCount) == config.maxPlayers then

doBroadcastMessage("O Zombie Event está cheio agora [" .. getGlobalStorageValue(config.playerCount) .. " players]! O evento irá começar em breve.")

else

doBroadcastMessage(getPlayerName(cid) .. " entraram no Zombie Event! atualmente " .. getGlobalStorageValue(config.playerCount) .. " players entraram.", MESSAGE_STATUS_CONSOLE_RED)

end

else

addEvent(tpBack, 1000, cid, fromPosition)

doPlayerSendCancel(cid, "O Evento está cheio. There is already " .. config.maxPlayers .. " players participating in the quest.")

return false

end

print(getStorage(config.playerCount) .. " Jogadores em Zombie Event.")

return true

end

 

function tpBack(cid, fromPosition)

doTeleportThing(cid, fromPosition, true)

doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)

end

 

 

Creaturescripts/scripts/zombie event.lua

local config = {

playerCount = 2001, -- Global storage for counting the players left/entered in the event

 

goblet = 5805, -- id of the gold goblet you'll get when finishing the event.

rewards = {2195, 2152, 2160}, -- You will get this + a gold goblet with your name on.

-- {moneyId, count, using? 1 for using moneyReward, 0 for not using.}

moneyReward = {2160, 10, 1},

 

-- Should be same as in the globalevent!

-- The zombies will spawn randomly inside this area

fromPosition = {x = 898, y = 946, z = 12}, -- top left cornor of the playground

toPosition = {x = 973, y = 1000, z = 12}, -- bottom right cornor of the playground

}

 

function onStatsChange(cid, attacker, type, combat, value)

if isPlayer(cid) and isMonster(attacker) then

if isInArea(getPlayerPosition(cid), config.fromPosition, config.toPosition) then

if getGlobalStorageValue(config.playerCount) >= 2 then

doBroadcastMessage(getPlayerName(cid) .. " have been eated by Zombies!", MESSAGE_STATUS_CONSOLE_RED)

local corpse = doCreateItem(3058, 1, getPlayerPosition(cid))

doItemSetAttribute(corpse, "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")..".")

doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)

doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)

doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)

setGlobalStorageValue(config.playerCount, getGlobalStorageValue(config.playerCount)-1)

elseif getGlobalStorageValue(config.playerCount) == 1 then

if isInArea(getPlayerPosition(cid), config.fromPosition, config.toPosition) then

doBroadcastMessage(getPlayerName(cid) .. " ganhou o Zombie event! Congratulations!", MESSAGE_STATUS_WARNING)

local goblet = doPlayerAddItem(cid, config.goblet, 1)

doItemSetAttribute(goblet, "description", "ganhou " .. getPlayerName(cid) .. " para ganhar o Zombie Event.")

local corpse = doCreateItem(3058, 1, getPlayerPosition(cid))

doItemSetAttribute(corpse, "description", "You recognize " .. getCreatureName(cid) .. ". Foi morto por "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item")..".")

doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)

doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)

doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)

for _,items in ipairs(config.rewards) do

doPlayerAddItem(cid, items, 1)

end

if config.moneyReward[3] == 1 then

doPlayerAddItem(cid, config.moneyReward[1], config.moneyReward[2])

end

end

 

for x = config.fromPosition.x, config.toPosition.x do

for y = config.fromPosition.y, config.toPosition.y do

for z = config.fromPosition.z, config.toPosition.z do

areapos = {x = x, y = y, z = z, stackpos = 253}

getMonsters = getThingfromPos(areapos)

if isMonster(getMonsters.uid) then

doRemoveCreature(getMonsters.uid)

end

end

end

end

end

return false

end

end

return true

end

 

 

Meu sistema do Team Battle:

 

Mod/teamwar.xml

 

 

<?xml version="1.0" encoding="UTF-8"?>

<mod name="Team Event" version="2.0" author="Damadgerz" contact="support@lualand.net" enabled="yes">

<description>

Full auto Team BattleEvent(v2.0) for 0.3.6PL1 :

 

1- I currently rescripted this event from scratch again.

 

2- This version is much more better than the one before, it is more cleaner, clearer and with more options.

 

3- This version dislike the previous one , was tested on 0.3.6PL1 and works just fine.

 

4- Removed the npc part it is now based on tp creation.

 

5- More silent boradcasting for in event progress and no spam, I hope!

 

6- you now get the options to show event stats on cancel msg area and (to / not to) show left players with names each x interval.

 

8- Team balancer have been added to only balance count in both teams.

 

9- Added a countdown option before fight starts.

 

10- Now starts on a defined time every day

 

</description>

 

<config name="teamSetting"><![CDATA[

--[[Local Config]]--

 

--//storages

 

inBlue = 9900

inRed = 9901

joiner = 9907

 

blueKills = 9902

redKills = 9903

 

eventRecruiting = 9904

eventStarted = 9905

eventTime = 9906

 

itemToGet = 9908

countItemToGet = 9909

 

nextExecute = 9910

 

blueCount = 9911

redCount = 9912

 

--// Positions

 

teleporterPosition = {x = 161, y = 52, z = 6}

 

waitRoomPlace = {x = 1040, y = 449, z = 7}

 

waitRoomDimensions = {

startPos = {x = 1033, y = 443, z = 7},

endPos = {x = 1046, y = 553, z = 7}

}

 

 

eventPlaceDimensions = {

startPos = {x = 1047, y = 438, z = 7},

endPos = {x = 1085, y = 463, z = 7}

}

blueTeamPos = {x = 1048, y = 451, z = 7}

redTeamPos = {x = 1084, y = 451, z = 7}

 

 

--// General settings

 

recruitTime = 2

 

minimumPlayersJoins = 2

 

balanceTeams = true

 

 

removeTeleportOnEventEnd = true

 

eventMaxTime = 10

 

showEventSats = true

 

 

sendLeftPlayers = true

intervalToSendLeftPlayers = 11

 

 

countDownOnStart = true

 

 

countDownFrom = 10

 

minJoinLevel = 100

 

rewards = {

 

[50] = { {2476,1} , {"gold coin",500} },

[30] = { {"golden armor",1} , {2152,90} },

[20] = { {"dragon scale mail",1} , {"crystal coin",10} }

}

]]></config>

<lib name="teamFunctions"><![CDATA[

domodlib('teamSetting')

 

--[[Conditions don't touch]]--

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})

 

local infight = createConditionObject(CONDITION_INFIGHT,-1)

--[[Local Config]]--

 

--[[Functions]]--

 

-- General info

function isFightOn()

return getStorage(eventStarted) > 0

end

function isRecruitOn()

return getStorage(eventRecruiting) > 0

end

function getMinJoinLevel()

return minJoinLevel

end

function getJoiners()

joiners = {}

for _,cid in ipairs(getPlayersOnline()) do

if isJoiner(cid) then

if isInRecruitArea(cid) or isInFightArea(cid) then

table.insert(joiners,cid)

end

end

end

return joiners

end

 

function getLeftMembersNames(team)

str = "Oponents left("..#team..") :"

left = ""

for k,cid in ipairs(team) do left = (left ..""..(k == 1 and "" or ", ")..""..getCreatureName(cid).."["..getPlayerLevel(cid).."]" ) end

str = str .." " .. (left == "" and "none" or left).. "."

return str

end

function disPlayEventStats()

if not showEventSats then return false end

if getStorage(eventTime) - os.time() <= 0 then return false end

 

left = os.date("%M:%S",(getStorage(eventTime) - os.time()))

for _,cid in ipairs(getJoiners()) do

oponentsLeft = isBlue(cid) and #getRedMembers() or #getBlueMembers()

teamMatesLeft = isBlue(cid) and math.max(0,#getBlueMembers()-1) or math.max(0,#getRedMembers()-1)

doPlayerSendCancel(cid,"Time left: ".. left.." || Oponents left: "..oponentsLeft.."/"..oponentCount(cid).." || Team-mates left: "..teamMatesLeft.."/".. math.max(0,matesCount(cid)-1))

end

 

end

 

function doSendLeftPlayers()

if not sendLeftPlayers then return false end

if intervalToSendLeftPlayers <= 10 then return false end

for _,cid in ipairs(getJoiners()) do

doPlayerSendTextMessage(cid,MESSAGE_TYPES["orange"],getLeftMembersNames(isRed(cid) and getBlueMembers() or getRedMembers()))

end

end

 

function getBlueMembers()

members = {}

for _,cid in ipairs(getPlayersOnline()) do

if isBlue(cid) then

table.insert(members,cid)

end

end

return members

end

function getRedMembers()

members = {}

for _,cid in ipairs(getPlayersOnline()) do

if isRed(cid) then

table.insert(members,cid)

end

end

return members

end

 

 

-- starting fight

 

function startRecruiting()

doSetStorage(eventRecruiting,1)

end

function startEvent()

doSetStorage(eventRecruiting,-1)

 

if removeTeleportOnEventEnd then

tp = getTileItemById(teleporterPosition,1387).uid

if tp > 0 then doRemoveItem(tp) end

end

 

if not balanceTeams() then

resetEvent()

return false

end

for _,cid in ipairs(getBlueMembers()) do

doTeleportThing(cid,blueTeamPos,false)

doSendMagicEffect(getThingPos(cid),10)

end

setBlueCount(#getBlueMembers())

for _,cid in ipairs(getRedMembers()) do

doTeleportThing(cid,redTeamPos,false)

doSendMagicEffect(getThingPos(cid),10)

end

setRedCount(#getRedMembers())

startCountDown()

return true

end

 

function setBlueCount(count)

doSetStorage(blueCount,-1)

doSetStorage(blueCount,count)

end

function oponentCount(cid)

return isBlue(cid) and getStorage(redCount) or getStorage(blueCount)

end

function matesCount(cid)

return isBlue(cid) and getStorage(blueCount) or getStorage(redCount)

end

 

function setRedCount(count)

doSetStorage(redCount,-1)

doSetStorage(redCount,count)

end

function balanceTeams()

members = getJoiners()

if #members < minimumPlayersJoins then

doBroadcastMessage("Team-Battle event was cancelled as only ".. #members .. " players joined.")

return false

end

if (math.mod(#members,2) ~= 0) then

kicked = members[#members]

clearTeamEventStorages(kicked)

doPlayerSendTextMessage(kicked,MESSAGE_TYPES["info"],"Sorry, you have been kicked out of event for balancing both teams.")

end

count = 1

for _,cid in ipairs(getJoiners()) do

if (math.mod(count,2) ~= 0) then

addToBlue(cid)

else

addToRed(cid)

end

count = count + 1

end

return true

end

function startCountDown()

if(countDownOnStart) then

for _,cid in ipairs(getJoiners()) do

doCreatureSetNoMove(cid,true)

for i = 0,countDownFrom do

addEvent(doPlayerSendTextMessage,i*1000, cid, MESSAGE_TYPES["info"], (i == 0 and countDownFrom or countDownFrom-i) )

end

end

addEvent(startFight,(countDownFrom+1)*1000)

else

startFight()

end

end

function startFight()

doSetStorage(eventStarted,1)

for _,cid in ipairs(getJoiners()) do

doCreatureSetNoMove(cid,false)

doPlayerSendTextMessage(cid,MESSAGE_TYPES["warning"],"Fight Starts!")

end

addEvent(endTeamEvent,eventMaxTime*60*1000,"maxTime")

doSetStorage(eventTime,os.time()+eventMaxTime*60)

end

 

function teleportToWaitRoom(cid)

doTeleportThing(cid,waitRoomPlace)

doSendMagicEffect(waitRoomPlace,10)

if getPlayerGroupId(cid) < 4 then

addToJoiners(cid)

end

doPlayerSendTextMessage(cid,MESSAGE_TYPES["blue"],"Please be patient till the event starts and don't logout.")

return true

end

 

 

 

-- Modifing teams & checking member states

function isBlue(cid)

return (getPlayerStorageValue(cid,inBlue) > 0)

end

function isRed(cid)

return (getPlayerStorageValue(cid,inRed) > 0)

end

function isJoiner(cid)

return (getPlayerStorageValue(cid,joiner) > 0)

end

function addToBlue(cid)

setPlayerStorageValue(cid,inBlue,1)

doAddCondition(cid, (getPlayerSex(cid) == 1) and bmale or bfemale)

doAddCondition(cid,infight)

end

function addToRed(cid)

setPlayerStorageValue(cid,inRed,1)

doAddCondition(cid, (getPlayerSex(cid) == 1) and rmale or rfemale)

doAddCondition(cid,infight)

end

function addToJoiners(cid)

setPlayerStorageValue(cid,joiner,1)

end

function removeFromBlue(cid)

setPlayerStorageValue(cid,inBlue,-1)

end

function removeFromRed(cid)

setPlayerStorageValue(cid,inRed,-1)

end

function removeFromjoiners(cid)

setPlayerStorageValue(cid,joiner,-1)

end

function isInRecruitArea(cid)

return isInRange(getThingPos(cid),waitRoomDimensions.startPos,waitRoomDimensions.endPos)

end

function isInFightArea(cid)

return isInRange(getThingPos(cid),eventPlaceDimensions.startPos,eventPlaceDimensions.endPos)

end

function clearTeamEventStorages(cid)

if isInRecruitArea(cid) or isInFightArea(cid) then

doTeleportThing(cid,getTownTemplePosition(getPlayerTown(cid)))

doSendMagicEffect(getThingPos(cid),10)

end

 

if isFightOn() then

if isJoiner(cid) then

if isBlue(cid) then

addRedKills()

elseif isRed(cid) then

addBlueKills()

end

doPlayerSendTextMessage(cid,MESSAGE_TYPES["orange"],"You have died in Team-Battle Event.")

end

end

 

removeFromjoiners(cid)

removeFromBlue(cid)

removeFromRed(cid)

doRemoveConditions(cid, false)

 

end

function haveUnrecivedReward(cid)

return getPlayerStorageValue(cid,itemToGet) > 0 and getPlayerStorageValue(cid,countItemToGet) > 0

end

function recieveLateReward(cid)

if haveUnrecivedReward(cid) then

if not doPlayerAddItem(cid,getPlayerStorageValue(cid,itemToGet),getPlayerStorageValue(cid,countItemToGet),false) then

msg = "You need to free some space then relog to take your reward."

doPlayerSendTextMessage(cid,MESSAGE_TYPES["warning"],msg)

else

setPlayerStorageValue(cid,itemToGet,-1)

setPlayerStorageValue(cid,countItemToGet,-1)

doPlayerSendTextMessage(cid,MESSAGE_TYPES["info"],"You have recieved your reward.")

end

end

end

 

-- Win or lose

function thereIsAWinner()

if redWon() or blueWon() then

return true

end

return false

end

function blueWon()

return( (#getBlueMembers() > 0 ) and ( #getRedMembers() == 0) )

end

function redWon()

return( (#getRedMembers() > 0) and (#getBlueMembers() == 0) )

end

function isDraw()

return #getBlueMembers() == #getRedMembers()

end

function getWinner()

if #getBlueMembers() > #getRedMembers() then

return {getBlueMembers(),getRedMembers(),"Blue team won."}

elseif #getRedMembers() > #getBlueMembers() then

return {getRedMembers(),getBlueMembers(),"Red team won."}

else

return { {},{},"it was a draw."}

end

end

 

 

-- Adding kills

function addBlueKills()

doSetStorage(blueKills, math.max(1,getStorage(blueKills)+1))

end

function addRedKills()

doSetStorage(redKills, math.max(1,getStorage(redKills)+1))

end

 

-- Ending event

 

function endTeamEvent(type)

if isFightOn() then

doSetStorage(eventStarted,-1)

doBroadcastMessage("Team-Battle event ended and "..getWinner()[3])

if not isDraw() then

win(getWinner()[1],type)

lose(getWinner()[2],type)

else

draw()

end

end

addEvent(resetEvent,2 * 1000) --- tp player to home remove all storages and reset event global storages

end

 

function getPercent()

rand= math.random(1,100)

prev = 0

chosenItem = 0

for k, v in pairs(rewards) do

if rand > prev and rand <= k+prev then

chosenItem = k

break

else

prev = k+prev

end

end

return chosenItem

end

 

function generateReward(cid)

percent = getPercent()

if percent == 0 then

print("Error in the reward item. Please inform Doggynub.")

return true

end

 

randomizer = rewards[percent][math.random(1,#rewards[percent])]

item = not tonumber(randomizer[1]) and getItemIdByName(randomizer[1]) or randomizer[1]

count = isItemStackable(item) and math.min(randomizer[2],100) or 1

if item == nil or item == 0 then

print("Error in the item format. Please inform Doggynub.")

return true

end

 

msg = "You have won ".. (count == 1 and "a" or count) .." " .. getItemNameById(item) .. "" .. (count == 1 and "" or "s").."."

 

if not doPlayerAddItem(cid,item,count,false) then

msg = msg.. "You need to free some space then relog to take your reward."

setPlayerStorageValue(cid,itemToGet,item)

setPlayerStorageValue(cid,countItemToGet,count)

end

 

doPlayerSendTextMessage(cid,MESSAGE_TYPES["white"],msg)

 

end

 

 

 

function generateStatsMessage(cid, type, stats)

msg = {

["KO"] = { ["win"] = "Event ended. Your team have won by killing all oponent's team members. You will recieve your reward shortly, check incoming messages.",

["lose"] = "Event ended. Your team have lost as the Oponent team killed all your team's members."

},

["maxTime"] = {

["win"] = "Event max-time finished and your team have won. You will recieve your reward shortly, check incoming messages.",

["lose"] = "Event max-time finished and your team have lost.",

["draw"] = "Event max-time finished and it is a draw.(no team won)"

}

}

doPlayerSendTextMessage(cid,MESSAGE_TYPES["info"],msg[type][stats])

 

end

function win(winners,type)

for _,cid in ipairs(winners) do

generateStatsMessage(cid, type, "win")

generateReward(cid)

end

end

function lose(losers,type)

for _,cid in ipairs(losers) do

generateStatsMessage(cid, type, "lose")

end

end

function draw()

for _,cid in ipairs(getJoiners()) do

generateStatsMessage(cid, "maxTime", "draw")

end

end

 

function resetEvent()

doSetStorage(eventRecruiting,-1)

doSetStorage(nextExecute,-1)

doSetStorage(eventStarted,-1)

doSetStorage(eventTime,-1)

doSetStorage(blueKills,-1)

doSetStorage(redKills,-1)

for _,cid in ipairs(getPlayersOnline()) do

if isBlue(cid) or isRed(cid) or isJoiner(cid) then

clearTeamEventStorages(cid)

end

end

end

 

 

]]></lib>

<event type="login" name="teambattleLogin" event="script"><![CDATA[

domodlib('teamFunctions')

 

function onLogin(cid)

clearTeamEventStorages(cid)

recieveLateReward(cid)

 

registerCreatureEvent(cid, "teamEventStats")

registerCreatureEvent(cid, "teambattleLogout")

registerCreatureEvent(cid, "teambattleCombat")

return true

end

]]></event>

<event type="combat" name="teambattleCombat" event="script"><![CDATA[

domodlib('teamFunctions')

 

function onCombat(cid, target)

if isFightOn() then

if isBlue(cid) and isBlue(target) then

return false

end

if isRed(cid) and isRed(target) then

return false

end

end

return true

end

 

]]></event>

<event type="logout" name="teambattleLogout" event="script"><![CDATA[

domodlib('teamFunctions')

 

function onLogout(cid)

clearTeamEventStorages(cid)

if thereIsAWinner() then

endTeamEvent("KO")

end

return true

end

 

]]></event>

<event type="statschange" name="teamEventStats" event="script"><![CDATA[

domodlib('teamFunctions')

 

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 isInFightArea(cid) and isFightOn() then

if isBlue(cid) or isRed(cid) then

corpse = doCreateItem(corpse_ids[getPlayerSex(cid)], 1, getThingPos(cid))

doCreateItem(2016, 2, getThingPos(cid))

clearTeamEventStorages(cid)

doItemSetAttribute(corpse, "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")..".n[Team-Event kill]")

doCreatureAddHealth(cid,getCreatureMaxHealth(cid))

if thereIsAWinner() then

endTeamEvent("KO")

end

 

return false

 

end

 

end

 

return true

end

]]></event>

 

<globalevent name = "teamBattleStart" time="20:15" event="script"><![CDATA[

domodlib('teamFunctions')

 

function onTimer()

resetEvent()

if getTileItemById(teleporterPosition,1387).uid < 1 then

tp = doCreateItem(1387,1,teleporterPosition)

doItemSetAttribute(tp, "aid", 9990)

end

 

startRecruiting()

for i = 0, recruitTime-1 do

addEvent(doBroadcastMessage, i * 60* 1000,"Team-Battle event is recruting players by entering event tp. Fight begins in "..(i == 0 and recruitTime or recruitTime-i).." minutes.",MESSAGE_TYPES["warning"])

end

 

addEvent(startEvent, recruitTime * 60 * 1000)

 

return true

end

 

 

]]></globalevent>

 

<globalevent name = "teamBattletime" interval="1" event="script"><![CDATA[

domodlib('teamFunctions')

 

function onThink()

if isFightOn() then

disPlayEventStats()

 

if getStorage(nextExecute) == -1 or getStorage(nextExecute) <= os.time() then

doSendLeftPlayers()

doSetStorage(nextExecute,os.time()+intervalToSendLeftPlayers)

end

end

return true

end

 

]]></globalevent>

<movevent type="StepIn" actionid="9990" event="script"><![CDATA[

domodlib('teamFunctions')

 

function onStepIn(cid, item, position, fromPosition)

if not isRecruitOn() then

doPlayerSendTextMessage(cid,MESSAGE_TYPES["orange"],"Event isn't currently opened.")

doTeleportThing(cid,fromPosition)

doSendMagicEffect(fromPosition,2)

return true

end

if getPlayerLevel(cid) < getMinJoinLevel() then

doPlayerSendTextMessage(cid,MESSAGE_TYPES["orange"],"Only players of level ".. getMinJoinLevel().. "+ can join this event.")

doTeleportThing(cid,fromPosition)

return true

end

teleportToWaitRoom(cid)

return true

end

 

 

]]> </movevent>

</mod>

 

Editado por hique12
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

mas sim, era no zombie q estavamos quereno participar os tps estão longe um do outro, os horarios são diferentes tbm, entramo no tp do zombie e flo q em 5min começaria o jogo, ai depois de 5min apareceu escrito 18:21 Team-Battle event was cancelled as only 0 players joined sendo q nem havia iniciado o team battle.

Link para o comentário
Compartilhar em outros sites

  • 0

Kra os script parecem ser um pouco grandes e eu to meio sem tempo por causa q to fazendo uns custom script...

Posso te da uma dica, ve se tu nao coloco algum storage igual nos dois event, geralmente esses eventos usam mts storages iguais. Vo fica de olho ake no topico e tu vai postando se acha algum erro na onde eu falei.

Abrass

Link para o comentário
Compartilhar em outros sites

  • 0

Caralho, que falta de paciencia em ajudar em galera. Algo simples assim ...

 

Nos dois scripts existem as funções globais startEvent(...)

logo elas entram em conflito SIM.

 

À duas formas de concertar isso:

1- Troque startEvent por startZombie ou startTeamWar em uma das duas, ou nas duas.

2- Transforme em duas funções locais. (local startEvent(...)) * Não sei se funciona mas teoria acho que sim.

 

Boa sorte.

 

LEIA APENAS APÓS TENTAR RESOLVER SOZINHO:

 

Se você não conseguiu resolver sozinho troque tudo em seu: globalevents/scripts/zombie event.lua por isso:

local config = {
playerCount = 2001, -- Global storage for counting the players left/entered in the event
zombieCount = 2002, -- Global storage for counting the zombies in the event
teleportActionId = 2000, -- Action id of the teleport needed for the movement script
teleportPosition = {x = 82, y = 59, z = 7, stackpos = 1}, -- Where the teleport will be created
teleportToPosition = {x = 940, y = 970, z = 12}, -- Where the teleport will take you
teleportId = 1387, -- Id of the teleport
timeToStartEvent = 5, -- Minutes, after these minutes the teleport will be removed and the event will be declared started
timeBetweenSpawns = 20, -- Seconds between each spawn of zombie
zombieName = "event zombie", -- Name of the zombie that should be summoned
playersNeededToStartEvent = 2, -- Players needed before the zombies can spawn.

-- Should be the same as in the creaturescript!
-- The zombies will spawn randomly inside this area
fromPosition = {x = 890, y = 929, z = 12}, -- top left cornor of the playground
toPosition = {x = 984, y = 1013, z = 12}, -- bottom right cornor of the playground
}

function onTimer()
local tp = doCreateTeleport(config.teleportId, config.teleportToPosition, config.teleportPosition)
doItemSetAttribute(tp, "aid", config.teleportActionId)
doBroadcastMessage("Zombie event starting in " .. config.timeToStartEvent .. " minutes! The teleport will be closed when the event start!", MESSAGE_STATUS_WARNING)
setGlobalStorageValue(config.playerCount, 0)
setGlobalStorageValue(config.zombieCount, 0)
addEvent(startZombie, config.timeToStartEvent * 1000 * 60)
print(getGlobalStorageValue(2001))
end

function startZombie()
local get = getThingfromPos(config.teleportPosition)
if get.itemid == config.teleportId then
doRemoveItem(get.uid, 1)
end

local fromp, top = config.fromPosition, config.toPosition

if getGlobalStorageValue(config.playerCount) >= config.playersNeededToStartEvent then
addEvent(spawnZombie, config.timeBetweenSpawns * 1000)
doBroadcastMessage("Good luck in the zombie event people! The teleport has closed!", MESSAGE_STATUS_WARNING)

for x = fromp.x, top.x do
for y = fromp.y, top.y do
for z = fromp.z, top.z do
areapos = {x = x, y = y, z = z, stackpos = 253}
getPlayers = getThingfromPos(areapos)
if isPlayer(getPlayers.uid) then
doPlayerSendTextMessage(getPlayers.uid, MESSAGE_EVENT_ADVANCE, "The first zombie will spawn in " .. config.timeBetweenSpawns .. " seconds! Good luck!")
end
end
end
end
else
doBroadcastMessage("The Zombie event could not start because of to few players participating.\n At least " .. config.playersNeededToStartEvent .. " players is needed!", MESSAGE_STATUS_WARNING)
for x = fromp.x, top.x do
for y = fromp.y, top.y do
for z = fromp.z, top.z do
areapos = {x = x, y = y, z = z, stackpos = 253}
getPlayers = getThingfromPos(areapos)
if isPlayer(getPlayers.uid) then
doTeleportThing(getPlayers.uid, getTownTemplePosition(getPlayerTown(getPlayers.uid)), false)
doSendMagicEffect(getPlayerPosition(getPlayers.uid), CONST_ME_TELEPORT)
end
end
end
end
end
end

function spawnZombie()
if getGlobalStorageValue(config.playerCount) >= 2 then
pos = {x = math.random(config.fromPosition.x, config.toPosition.x), y = math.random(config.fromPosition.y, config.toPosition.y), z = math.random(config.fromPosition.z, config.toPosition.z)}
doSummonCreature(config.zombieName, pos)
doSendMagicEffect(pos, CONST_ME_MORTAREA)
setGlobalStorageValue(config.zombieCount, getGlobalStorageValue(config.zombieCount)+1)
doBroadcastMessage("A zombie has spawned! There is currently " .. getGlobalStorageValue(config.zombieCount) .. " zombies in the zombie event!", MESSAGE_STATUS_CONSOLE_RED)
addEvent(spawnZombie, config.timeBetweenSpawns * 1000)
end
end

 

Editado por Byerne
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...