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

Windows Random Crash

DukeeH

Active Member
Joined
Dec 6, 2010
Messages
550
Solutions
3
Reaction score
39
Hello, I need some help, i'm getting random crashes, no error box or warning. I wan't to know if is there something to compile with that generates some log that can tell me what is causing the crash.
Is some script, cause i already compiled 0.3.6 v5 (otswe), 0.3.6 (lost server), and both servers appear to have a good uptime for others. & tried to compile 0.4, crashing too.
I use windows 2003 server x64. compiled with stian's dev (no errors when compiling).

Thanks,
DukeeH.
 
after a random time online, it close & give that send error report window.

edit;
compiled with "-D__EXCEPTION_TRACER__"
where i can find the log? i can't find it.
 
Last edited:
task manager performance > PF Usage > 1,24~ GB (has 4 GB)
you should be checking RAM usage, not pagefile but that's probably irrelevant :p
Are all of the servers getting this exact error when you host them?
he's getting an APPCRASH event, no errors

forget about exception tracer, compile in debug mode & run it via gdb
would recommend moving to linux :p
 
Last edited:
what linux is the best & easy one? a cobination of both. :p
& linux is reeeally more stable?

edit-
by compile in debug mode what you mean?
 
Last edited:
debian (preferred) or ubuntu (easier for complete newcomers) could be suitable :p

hit Debug in devcpp, but maybe it won't work right away because it uses rm instead of del
 
## Trying to Compile with debug, wait.
Error after clicking debug.
Code:
  CreateProcess(NULL, rm -f obj//actions.o obj//admin.o obj//allocator.o obj//baseevents.o obj//beds.o obj//chat.o obj//combat.o obj//condition.o obj//configmanager.o obj//connection.o obj//container.o obj//creature.o obj//creatureevent.o obj//cylinder.o obj//database.o obj//databasemanager.o obj//databasemysql.o obj//databasesqlite.o obj//depot.o obj//dispatcher.o obj//exception.o obj//fileloader.o obj//game.o obj//gameservers.o obj//globalevent.o obj//group.o obj//house.o obj//housetile.o obj//ioban.o obj//ioguild.o obj//iologindata.o obj//iomap.o obj//iomapserialize.o obj//item.o obj//itemattributes.o obj//items.o obj//luascript.o obj//mailbox.o obj//manager.o obj//map.o obj//monster.o obj//monsters.o obj//movement.o obj//networkmessage.o obj//npc.o obj//otserv.o obj//outfit.o obj//outputmessage.o obj//party.o obj//player.o obj//position.o obj//protocol.o obj//protocolgame.o obj//protocolhttp.o obj//protocollogin.o obj//protocolold.o obj//quests.o obj//raids.o obj//scheduler.o obj//scriptmanager.o obj//server.o obj//spawn.o obj//spells.o obj//status.o obj//talkaction.o obj//teleport.o obj//textlogger.o obj//thing.o obj//tile.o obj//tools.o obj//trashholder.o obj//vocation.o obj//waitlist.o obj//weapons.o obj//TheForgottenServer_private.res TheForgottenServer.exe, ...) failed.

Another doubt...
XML:
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

Everytime, someone that wins relog shows up this: "23:35 You need to free some space then relog to take your reward." mensage & he gets money, so if he keeps reloging, he gets the mensage & money everytime.
What can be? if you want all the script i can post.
 
Lua:
function recieveLateReward(cid)
	local id = getCreatureStorage(cid, itemToGet)
	if id ~= -1 then
		if doPlayerAddItemEx(cid, doCreateItemEx(id, getCreatureStorage(cid, countItemToGet))) ~= RETURNVALUE_NOERROR then
			doPlayerSendTextMessage(cid, MESSAGE_TYPES["warning"], "You need to free some space then relog to take your reward.")
		else
			doCreatureSetStorage(cid, itemToGet) 
			doCreatureSetStorage(cid, countItemToGet)
			doPlayerSendTextMessage(cid, MESSAGE_TYPES["info"], "You have recieved your reward.")
		end
	end
end
create a dummy file C:/Windows/rm.exe from twunk_32.exe (copy and rename)
 
Last edited:
got a mensage, i don't know if it worked.
"Nothing to be done for `all'. "

if worked, i just follow that gnu link u've sended, & run the server?
 
@Cyko
XML:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Team Event" version="2.0" author="Damadgerz" contact="[email protected]" enabled="yes">
 <description>
 
Full auto Team BattleEvent(v2.0) for 0.4 :
 
		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 was tested on 0.4 latest one 4626, should work on lower rev too.
 
		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 = 156, y = 48, z = 7} --Place where the event tp will be created
 
waitRoomPlace = {x = 961, y = 216, z = 8} --Place of the waitnig room (the place ppl will wait for team to be full)
 
waitRoomDimensions = { --Enter the start pos[top left sqm] and end pos[bottom right sqm] of waitnig room here
							startPos = {x = 957, y = 214, z = 8}, 
							endPos = {x = 966, y = 219, z = 8}
							}
 
 
eventPlaceDimensions = { --Enter the start pos[top left sqm] and end pos[bottom right sqm] of event place here
							startPos = {x = 892, y = 185, z = 9}, 
							endPos = {x = 1023, y = 244, z = 9}
							}
blueTeamPos = {x = 900, y = 229, z = 9}
redTeamPos = {x = 1015, y = 196, z = 9}
 
 
--// General settings
 
recruitTime = 2 --Time in minutes to gather players to event, will broadcast event started each min
 
minimumPlayersJoins = 4 --If the number of layer joined is less than that then event would be cancelled
 
balanceTeams = true --This will balance number of players in both teams the extra player will be kicked out of event
 
 
removeTeleportOnEventEnd = false --if you want to remove the tp when the event finish set it to true, normally tp will just be diabled
 
eventMaxTime = 15 --Time in minutes, this is the max time event will be running. After checks are caried winner is declared
 
showEventSats = true --This is like a timer that is always there about event stats (time,oponents left, teammates left). It appears in the cancel messages place.
 
sendLeftPlayers = true --Well this will send to all alive players the names& numebr of the oponents left each interval defined down			
intervalToSendLeftPlayers = 15 --interval(in seconds) to sendLeftPlayers , must be more than 10 sec
 
 
countDownOnStart = true --Well this occurs when players are teleported to their places in the arena , so if this is true it start to count down to the joined players then when count down finish they can start killing each other(event really begins)
 
countDownFrom = 10 --Starts count down from this number when event start, if above is set true 			
 
minJoinLevel = 100 --minimm lvl that can join event
 
rewards = { --Example [%] = {  {itemid/name, count}  ,..........}	count isnt more than 100
 
					[35] = { {2160,50} },
					[20] = { {2160,100} },
					[45] = { {2160,25} }
				}
 
			--[[ Note : make sure if you edited % that sum should be equal to 100, you can add more % elements to suit your needs also more items if you want in each %
					[65],[25],[10] -> is the % of this item to be found the rest is clear ,items in each % and it will be chosen randomly]]--
 
 
 ]]></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)
	local id = getCreatureStorage(cid, itemToGet)
	if id ~= -1 then
		if doPlayerAddItemEx(cid, doCreateItemEx(id, getCreatureStorage(cid, countItemToGet))) == RETURNVALUE_NOERROR then
			doPlayerSendTextMessage(cid, MESSAGE_TYPES["warning"], "You need to free some space then relog to take your reward.")
		else
			doCreatureSetStorage(cid, itemToGet) 
			doCreatureSetStorage(cid, countItemToGet)
			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="22:00:00" event="script"><![CDATA[
domodlib('teamFunctions')
 
function onTime()
	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,"Evento de war começa em "..(i == 0 and recruitTime or recruitTime-i).." minutos. Não há perda de item/exp. Teleport no templo.",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>
still getting that red mensage & money every login.
 
Back
Top