333 lines
13 KiB
Lua
333 lines
13 KiB
Lua
-----------------------------------
|
|
-- A Testing Time
|
|
-- Windurst M2-2
|
|
-----------------------------------
|
|
-- !addmission 2 4
|
|
-- Gate Guards
|
|
-- Rakoh Buuma - !pos 106 -5 -23 241
|
|
-- Mokyokyo - !pos -55 -8 227 238
|
|
-- Janshura-Rashura - !pos -227 -8 184 240
|
|
-- Zokima-Rokima - !pos 0 -16 124 239
|
|
--
|
|
-- Moreno-Toeno - !pos 169 -1.25 159 238
|
|
-----------------------------------
|
|
|
|
local mission = Mission:new(xi.mission.log_id.WINDURST, xi.mission.id.windurst.A_TESTING_TIME)
|
|
|
|
mission.reward =
|
|
{
|
|
rankPoints = 300,
|
|
}
|
|
|
|
local handleAcceptMission = function(player, csid, option, npc)
|
|
if option == 4 then
|
|
mission:begin(player)
|
|
player:setMissionStatus(mission.areaId, 1)
|
|
player:messageSpecial(zones[player:getZoneID()].text.YOU_ACCEPT_THE_MISSION)
|
|
end
|
|
end
|
|
|
|
local killCounter = function(mob, player, optParams)
|
|
local testVar = mission:getVar(player, 'KillCount')
|
|
mission:setVar(player, 'KillCount', testVar + 1)
|
|
end
|
|
|
|
local assessment = function(player, npc)
|
|
local currentTime = VanadielTime()
|
|
local endTime = mission:getVar(player, 'EndTime')
|
|
local killCount = mission:getVar(player, 'KillCount')
|
|
local completed = player:hasCompletedMission(mission.areaId, mission.missionId)
|
|
|
|
-- player took too long to speak under requirements in time, so they fail mission
|
|
if currentTime > endTime then
|
|
return mission:progressEvent(202)
|
|
end
|
|
|
|
-- player hasn't waited long enough to be assessed
|
|
if currentTime < endTime - xi.vanaTime.HOUR then
|
|
local hoursRemaining = math.ceil((endTime - currentTime) / xi.vanaTime.HOUR)
|
|
if completed then
|
|
return mission:progressEvent(204, 0, 0, 0, 0, 0, VanadielHour(), hoursRemaining, 0)
|
|
else
|
|
return mission:progressEvent(183, 0, VanadielHour(), hoursRemaining)
|
|
end
|
|
end
|
|
|
|
-- handle the events for first-time doing the mission
|
|
if not completed then
|
|
local event = completed and 208 or 198
|
|
|
|
if killCount >= 35 then
|
|
event = completed and 206 or 201
|
|
elseif killCount >= 30 then
|
|
event = completed and 209 or 200
|
|
elseif not completed and killCount >= 19 then
|
|
event = 199
|
|
end
|
|
|
|
return mission:progressEvent(event, 0, VanadielHour(), 1, killCount)
|
|
end
|
|
end
|
|
|
|
local failMission = function(player, csid, option, npc)
|
|
mission:setVar(player, 'EndTime', 0)
|
|
mission:setVar(player, 'KillCount', 0)
|
|
player:delKeyItem(xi.ki.CREATURE_COUNTER_MAGIC_DOLL)
|
|
player:setMissionStatus(mission.areaId, 0)
|
|
player:delMission(mission.areaId, mission.missionId)
|
|
end
|
|
|
|
local clearMission = function(player, csid, option, npc)
|
|
if mission:complete(player) then
|
|
player:delKeyItem(xi.ki.CREATURE_COUNTER_MAGIC_DOLL)
|
|
end
|
|
end
|
|
|
|
mission.sections =
|
|
{
|
|
-- Player is offered mission from a gate guard. Note that retail will have the
|
|
-- player be presented with the mission selection menu, choose, accept, and then
|
|
-- start the events below, where you accept it again.
|
|
-- Choosing to keep the existing flow we had already.
|
|
{
|
|
check = function(player, currentMission)
|
|
return currentMission == xi.mission.id.nation.NONE and
|
|
player:getNation() == mission.areaId and
|
|
not player:hasCompletedMission(mission.areaId, mission.missionId)
|
|
end,
|
|
|
|
[xi.zone.PORT_WINDURST] =
|
|
{
|
|
onEventFinish =
|
|
{
|
|
[78] = handleAcceptMission,
|
|
},
|
|
},
|
|
|
|
[xi.zone.WINDURST_WALLS] =
|
|
{
|
|
onEventFinish =
|
|
{
|
|
[93] = handleAcceptMission,
|
|
},
|
|
},
|
|
|
|
[xi.zone.WINDURST_WATERS] =
|
|
{
|
|
onEventFinish =
|
|
{
|
|
[111] = handleAcceptMission,
|
|
},
|
|
},
|
|
|
|
[xi.zone.WINDURST_WOODS] =
|
|
{
|
|
onEventFinish =
|
|
{
|
|
[114] = handleAcceptMission,
|
|
},
|
|
},
|
|
},
|
|
|
|
-- Mission has been accepted, these NPCs dialogue does not change during mission
|
|
{
|
|
check = function(player, currentMission)
|
|
return currentMission == mission.missionId
|
|
end,
|
|
|
|
[xi.zone.PORT_WINDURST] =
|
|
{
|
|
['Janshura-Rashura'] = mission:event(133),
|
|
['Nine_of_Clubs'] = mission:event(134),
|
|
['Puo_Rhen'] = mission:event(136),
|
|
['Ten_of_Clubs'] = mission:event(135),
|
|
},
|
|
|
|
[xi.zone.WINDURST_WALLS] =
|
|
{
|
|
['Chawo_Shipeynyo'] = mission:event(130),
|
|
['Keo-Koruo'] = mission:event(128),
|
|
['Pakke-Pokke'] = mission:event(129),
|
|
['Zokima-Rokima'] = mission:event(127),
|
|
},
|
|
|
|
[xi.zone.WINDURST_WATERS] =
|
|
{
|
|
['Akkeke'] = mission:event(190),
|
|
['Chomoro-Kyotoro'] = mission:event(195),
|
|
['Dagoza-Beruza'] = mission:event(178),
|
|
['Foi-Mui'] = mission:event(193),
|
|
['Fuepepe'] = mission:event(186),
|
|
['Kirarara'] = mission:event(188),
|
|
['Koko_Lihzeh'] = mission:event(191),
|
|
['Mashuu-Ajuu'] = mission:event(192),
|
|
['Mimomo'] = mission:event(196),
|
|
['Mokyokyo'] = mission:event(177),
|
|
['Paku-Nakku'] = mission:event(194),
|
|
['Panna-Donna'] = mission:event(179),
|
|
['Pechiru-Mashiru'] = mission:event(185),
|
|
['Rukuku'] = mission:event(189),
|
|
['Tauwawa'] = mission:event(187),
|
|
['Ten_of_Hearts'] = mission:event(180),
|
|
},
|
|
|
|
[xi.zone.WINDURST_WOODS] =
|
|
{
|
|
['Miiri-Wohri'] = mission:event(474),
|
|
['Rakoh_Buuma'] = mission:event(473),
|
|
['Sola_Jaab'] = mission:event(475),
|
|
['Tih_Pikeh'] = mission:event(476),
|
|
},
|
|
},
|
|
|
|
-- Talk to Moreno-Toeno (inside the Aurastery) at Windurst Waters, North (L-6)
|
|
{
|
|
check = function(player, currentMission, missionStatus)
|
|
return currentMission == mission.missionId and missionStatus == 1
|
|
end,
|
|
|
|
[xi.zone.WINDURST_WATERS] =
|
|
{
|
|
['Moreno-Toeno'] =
|
|
{
|
|
onTrigger = function(player, npc)
|
|
local completed = player:hasCompletedMission(mission.areaId, mission.missionId)
|
|
|
|
if not completed then
|
|
return mission:progressEvent(182) -- first time
|
|
elseif completed then
|
|
return mission:progressEvent(687) -- repeating
|
|
end
|
|
end,
|
|
},
|
|
|
|
onEventFinish =
|
|
{
|
|
[182] = function(player, csid, option, npc)
|
|
if option == 2 then
|
|
player:setMissionStatus(mission.areaId, 2)
|
|
npcUtil.giveKeyItem(player, xi.ki.CREATURE_COUNTER_MAGIC_DOLL)
|
|
mission:setVar(player, 'EndTime', VanadielTime() + xi.vanaTime.DAY)
|
|
end
|
|
end,
|
|
|
|
[687] = function(player, csid, option, npc)
|
|
if option == 2 then
|
|
player:setMissionStatus(mission.areaId, 2)
|
|
npcUtil.giveKeyItem(player, xi.ki.CREATURE_COUNTER_MAGIC_DOLL)
|
|
mission:setVar(player, 'EndTime', VanadielTime() + (2 * xi.vanaTime.DAY))
|
|
end
|
|
end,
|
|
},
|
|
},
|
|
},
|
|
|
|
-- Kill Tahrongi Canyon mobs if first time doing mission
|
|
{
|
|
check = function(player, currentMission, missionStatus)
|
|
return currentMission == mission.missionId and missionStatus == 2 and
|
|
not player:hasCompletedMission(mission.areaId, mission.missionId)
|
|
end,
|
|
|
|
[xi.zone.TAHRONGI_CANYON] =
|
|
{
|
|
['Air_Elemental'] = { onMobDeath = killCounter, },
|
|
['Akbaba'] = { onMobDeath = killCounter, },
|
|
['Barghest'] = { onMobDeath = killCounter, },
|
|
['Canyon_Crawler'] = { onMobDeath = killCounter, },
|
|
['Canyon_Rarab'] = { onMobDeath = killCounter, },
|
|
['Earth_Elemental'] = { onMobDeath = killCounter, },
|
|
['Goblin_Ambusher'] = { onMobDeath = killCounter, },
|
|
['Goblin_Archaeologist'] = { onMobDeath = killCounter, },
|
|
['Goblin_Digger'] = { onMobDeath = killCounter, },
|
|
['Goblin_Thug'] = { onMobDeath = killCounter, },
|
|
['Goblin_Tinkerer'] = { onMobDeath = killCounter, },
|
|
['Goblin_Weaver'] = { onMobDeath = killCounter, },
|
|
['Grenade'] = { onMobDeath = killCounter, },
|
|
['Habrok'] = { onMobDeath = killCounter, },
|
|
['Herbage_Hunter'] = { onMobDeath = killCounter, },
|
|
['Killer_Bee'] = { onMobDeath = killCounter, },
|
|
['Poltergeist'] = { onMobDeath = killCounter, },
|
|
['Pygmaioi'] = { onMobDeath = killCounter, },
|
|
['Serpopard_Ishtar'] = { onMobDeath = killCounter, },
|
|
['Skeleton_Sorcerer'] = { onMobDeath = killCounter, },
|
|
['Skeleton_Warrior'] = { onMobDeath = killCounter, },
|
|
['Strolling_Sapling'] = { onMobDeath = killCounter, },
|
|
['Wild_Dhalmel'] = { onMobDeath = killCounter, },
|
|
['Yagudo_Acolyte'] = { onMobDeath = killCounter, },
|
|
['Yagudo_Initiate'] = { onMobDeath = killCounter, },
|
|
['Yagudo_Mendicant'] = { onMobDeath = killCounter, },
|
|
['Yagudo_Persecutor'] = { onMobDeath = killCounter, },
|
|
['Yagudo_Piper'] = { onMobDeath = killCounter, },
|
|
['Yagudo_Scribe'] = { onMobDeath = killCounter, },
|
|
['Yara_Ma_Yha_Who'] = { onMobDeath = killCounter, },
|
|
},
|
|
},
|
|
|
|
-- Kill Buburimu Peninsula mobs if repeating mission
|
|
{
|
|
check = function(player, currentMission, missionStatus)
|
|
return currentMission == mission.missionId and missionStatus == 2 and
|
|
player:hasCompletedMission(mission.areaId, mission.missionId)
|
|
end,
|
|
|
|
[xi.zone.BUBURIMU_PENINSULA] =
|
|
{
|
|
['Air_Elemental'] = { onMobDeath = killCounter, },
|
|
['Backoo'] = { onMobDeath = killCounter, },
|
|
['Buburimboo'] = { onMobDeath = killCounter, },
|
|
['Bull_Dhalmel'] = { onMobDeath = killCounter, },
|
|
['Carnivorous_Crawler'] = { onMobDeath = killCounter, },
|
|
['Ghoul'] = { onMobDeath = killCounter, },
|
|
['Goblin_Ambusher'] = { onMobDeath = killCounter, },
|
|
['Goblin_Bounty_Hunter'] = { onMobDeath = killCounter, },
|
|
['Goblin_Butcher'] = { onMobDeath = killCounter, },
|
|
['Goblin_Gambler'] = { onMobDeath = killCounter, },
|
|
['Goblin_Leecher'] = { onMobDeath = killCounter, },
|
|
['Goblin_Mugger'] = { onMobDeath = killCounter, },
|
|
['Goblin_Tinkerer'] = { onMobDeath = killCounter, },
|
|
['Helldiver'] = { onMobDeath = killCounter, },
|
|
['Might_Rarab'] = { onMobDeath = killCounter, },
|
|
['Poison_Leech'] = { onMobDeath = killCounter, },
|
|
['Shoal_Pugil'] = { onMobDeath = killCounter, },
|
|
['Snipper'] = { onMobDeath = killCounter, },
|
|
['Sylvestre'] = { onMobDeath = killCounter, },
|
|
['Wake_Warder_Wanda'] = { onMobDeath = killCounter, },
|
|
['Water_Elemental'] = { onMobDeath = killCounter, },
|
|
['Will-o-the-Wisp'] = { onMobDeath = killCounter, },
|
|
['Zombie'] = { onMobDeath = killCounter, },
|
|
['Zu'] = { onMobDeath = killCounter, },
|
|
},
|
|
},
|
|
|
|
-- Speaking to Moreno-Toeno afterwards to be assessed.
|
|
{
|
|
check = function(player, currentMission, missionStatus)
|
|
return currentMission == mission.missionId and missionStatus == 2
|
|
end,
|
|
|
|
[xi.zone.WINDURST_WATERS] =
|
|
{
|
|
['Moreno-Toeno'] =
|
|
{
|
|
onTrigger = function(player, npc)
|
|
return assessment(player, npc)
|
|
end,
|
|
},
|
|
|
|
onEventFinish =
|
|
{
|
|
[198] = failMission,
|
|
[199] = failMission,
|
|
[202] = failMission,
|
|
[208] = failMission,
|
|
[200] = clearMission,
|
|
[201] = clearMission,
|
|
[206] = clearMission,
|
|
[209] = clearMission,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
return mission
|