Hello, as the title sais im trying to do monster hunt event which should work like that, if i kill monster1, i get + 1 point, monster2 +2 points, monster 3 + 3points etc. For now all i have made is:
<?xml version="1.0" encoding="ISO-8859-1"?>
<mod name="Bad Saiyans Hunt Event" version="8.6" author="Vodkart" contact="" enabled="yes">
<config name="hunt_config"><![CDATA[
Hunt = {
storages = {171421, 181921}, -- storage Count
players = {min = 1, max = 50}, -- min, max players no evento
minLevel = 20, -- level minimo para entrar no event
rewards = {{2160,10},{2494,1}}, -- premios que vai receber
timeToStartEvent = 30, -- segundos para começar o evento
CheckTime = 5, -- time to check event
teleport = {{x=646, y=391, z=7}, {x=1020 , y=1041, z=7}}, --teleport position, position the player goes to
arena = {{x=988,y=1011,z=7},{x=1053,y=1057,z=7}} -- start and end position of the area
}
Hunt_Days = {
["Monday"] = {"09:00","21:00"},
["Tuesday"] = {"09:00","21:00"},
["Wednesday"] = {"09:00","21:00"},
["Thursday"] = {"09:00","21:00"},
["Friday"] = {"09:00","21:00"},
["Saturday"] = {"09:00",'21:00'},
["Sunday"] = {"09:00","15:00"}
}
function removeHuntTp()
local t = getTileItemById(Hunt.teleport[1], 1387).uid
return t > 0 and doRemoveItem(t) and doSendMagicEffect(Hunt.teleport[1], CONST_ME_POFF)
end
function ZerarStorHunt()
setGlobalStorageValue(Hunt.storages[1], 0)
setGlobalStorageValue(Hunt.storages[2], 0)
end
function getPlayersInHuntEvent()
local t = {}
for _, pid in pairs(getPlayersOnline()) do
if isInRange(getPlayerPosition(pid), Hunt.arena[1], Hunt.arena[2]) then
t[#t+1] = pid
end
end
return t
end
function getHuntRewards(cid, items)
local backpack = doPlayerAddItem(cid, 1999, 1) -- backpackID
for _, i_i in ipairs(items) do
local item, amount = i_i[1],i_i[2]
if isItemStackable(item) or amount == 1 then
doAddContainerItem(backpack, item, amount)
else
for i = 1, amount do
doAddContainerItem(backpack, item, 1)
end
end
end
end
function winMonsterEvent()
local max_sto, winner = 0, 0
local monster = getGlobalStorageValue(1819211)
for _, pid in pairs(getPlayersOnline()) do
local sto = getGlobalStorageValue(pid, 1714210)
if sto > max_sto then
max_sto = sto
winner = cid
end
end
if isPlayer(winner) then
temple = getPlayerMasterPos(cid)
local artigo = getPlayerSex(winner) == 0 and "The player" or "The player"
doBroadcastMessage(artigo.." "..getCreatureName(winner).." gained "..getGlobalStorageValue(winner, 1714210).." points and won the event!")
for _, prize in pairs(premios) do
doPlayerAddItem(winner, prize[1], prize[2])
end
doPlayerAddMoney(winner, gold)
for _, cid in pairs(getPlayersInHuntEvent()) do
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
end
else
doBroadcastMessage("[Monster Hunter Event] The event ended and there was no winner.")
setGlobalStorageValue(1819211, 0)
for _, cid in pairs(getPlayersInHuntEvent()) do
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
end
ZerarStorHunt()
end
end
function CheckHuntEvent(delay)
local time = 5
if getGlobalStorageValue(Hunt.storages[1]) ~= (Hunt.players.max+1) then
if delay > 0 and getGlobalStorageValue(Hunt.storages[1]) < Hunt.players.max then
doBroadcastMessage("[Bad Saiyans Hunt Event] Starting in " .. delay .. " minutes! The teleport will be closed when the event start!", MESSAGE_STATUS_WARNING)
elseif delay == 0 and getGlobalStorageValue(Hunt.storages[1]) < Hunt.players.min then
for _, cid in pairs(getPlayersInHuntEvent()) do
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
end
removeHuntTp()
doBroadcastMessage("The Bad Saiyans Hunt event could not start because of to few players participating.\n At least " .. Hunt.players.min .. " players is needed!", MESSAGE_STATUS_WARNING)
ZerarStorHunt()
elseif delay == 0 and getGlobalStorageValue(Hunt.storages[1]) >= Hunt.players.min then
removeHuntTp()
doBroadcastMessage("Good Lucky! The event will start on "..Hunt.timeToStartEvent.." seconds. get ready!")
addEvent(winMonsterEvent, time*1000*60)
end
addEvent(CheckHuntEvent, 60000, delay-1)
end
end
]]></config>
<globalevent name="Hunt_Start" interval="60000" event="script"><![CDATA[
domodlib('hunt_config')
function onThink(interval, lastExecution)
if Hunt_Days[os.date("%A")] then
local hrs = tostring(os.date("%X")):sub(1, 5)
if isInArray(Hunt_Days[os.date("%A")], hrs) and getGlobalStorageValue(Hunt.storages[2]) <= 0 then
local tp = doCreateItem(1387, 1, Hunt.teleport[1])
doItemSetAttribute(tp, "aid", 46111)
CheckHuntEvent(Hunt.CheckTime)
setGlobalStorageValue(Hunt.storages[1], 0)
end
end
return true
end]]></globalevent>
<event type="login" name="Hunt_Login" event="script"><![CDATA[
domodlib('hunt_config')
function onLogin(cid)
registerCreatureEvent(cid, "HuntBatle")
if isInRange(getPlayerPosition(cid), Hunt.arena[1], Hunt.arena[2]) then
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
end
return true
end]]></event>
<event type="combat" name="HuntBatle" event="script"><![CDATA[
domodlib('hunt_config')
if isPlayer(cid) and isPlayer(target) and isInRange(getPlayerPosition(cid), Hunt.arena[1], Hunt.arena[2]) then
doPlayerSendCancel(cid, "You may not attack this player.")
return false
end
return true
]]></event>
<movevent type="StepIn" actionid ="46111" event="script"><![CDATA[
domodlib('hunt_config')
function onStepIn(cid, item, position, fromPosition)
local time = 5
if not isPlayer(cid) then return true end
if getPlayerAccess(cid) > 3 then return doTeleportThing(cid, Hunt.teleport[2]) end
if getPlayerLevel(cid) < Hunt.minLevel then
doTeleportThing(cid, fromPosition, true)
doPlayerSendCancel(cid, "You need to be at least level " .. Hunt.minLevel .. ".")
doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE)
return true
end
if getGlobalStorageValue(Hunt.storages[1]) <= Hunt.players.max then
doTeleportThing(cid, Hunt.teleport[2])
setGlobalStorageValue(Hunt.storages[1], getGlobalStorageValue(Hunt.storages[1])+1)
doBroadcastMessage(getPlayerName(cid) .. " entered the Bad Saiyans Hunt Event! Currently " .. getGlobalStorageValue(Hunt.storages[1]) .. " players have joined!", MESSAGE_STATUS_CONSOLE_RED)
if getGlobalStorageValue(Hunt.storages[1]) == Hunt.players.max then
setGlobalStorageValue(Hunt.storages[1], getGlobalStorageValue(Hunt.storages[1])+1)
removeHuntTp()
doBroadcastMessage("The event will start on "..Hunt.timeToStartEvent.." seconds. get ready!")
addEvent(winMonsterEvent, time*1000*60)
end
end
return true
end]]></movevent>
<talkaction words="/huntstart;!huntstart" access="5" event="buffer"><![CDATA[
domodlib('hunt_config')
if getGlobalStorageValue(Hunt.storages[2]) > 0 then
doPlayerSendCancel(cid, "The event is already starting.") return true
elseif not param or not tonumber(param) then
doPlayerSendCancel(cid, "Use only numbers.") return true
end
local param = tonumber(param) <= 0 and 1 or tonumber(param)
local tp = doCreateItem(1387, 1, Hunt.teleport[1])
doItemSetAttribute(tp, "aid", 46111)
CheckHuntEvent(tonumber(param))
setGlobalStorageValue(Hunt.storages[1], 0)
setGlobalStorageValue(Hunt.storages[2], 1)
]]></talkaction>
<globalevent name="HuntDebug-Start" type="start" event="buffer"><![CDATA[
domodlib('hunt_config')
ZerarStorHunt()
return true]]></globalevent>
</mod>
And its all works fine, it runs on days, talkaction works too but the problem is with
function winMonsterEvent()
Because it always give a winner to the admin even if he got storage -1 or no winner ; /
I also added monster with script:
function onKill(cid, target, lastHit)
if isMonster ( target ) and
getCreatureName ( target ) == 'Bad Raditz [EVENT]' and
getGlobalStorageValue ( cid ,1714210) > 0 then
doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE, 'You have killd 1 of event monster.')
setGlobalStorageValue(cid,1714210, getGlobalStorageValue(cid, 1714210) + 1)
end
return true
end
wanned to add later more monsters that give more than +1 stor value but ... first need to finish this, what am i doing wrong? no error in console, nothing, any tips / help or maybe better ideas?
And the 2nd thing, how to make it 3 winners?
/ edit
I try to compare the event with this one (not sure can i add link if not please delete this edit) but atleast it might be helpfull
Its edited fire storm event + this one from link if it might help
Im using tibia 8.6 tfs 0,4 rev 3777