From 4494b30285b9ade2a5cf6a3aa74c648402c98e23 Mon Sep 17 00:00:00 2001 From: CuriousJorge Date: Wed, 16 Mar 2022 18:52:02 -0400 Subject: [PATCH] Quest fixes Etc5u1 & Etc5g1 - Added handling for the Ul'dah Inn NPC to re-issue an item as needed, otherwise play his other dialog. Music - Made it play current zone's music if no id present. --- Data/scripts/commands/gm/music.lua | 6 +-- Data/scripts/quests/etc/etc5g1.lua | 85 +++++++++--------------------- Data/scripts/quests/etc/etc5u1.lua | 40 ++++++++------ 3 files changed, 54 insertions(+), 77 deletions(-) diff --git a/Data/scripts/commands/gm/music.lua b/Data/scripts/commands/gm/music.lua index 0a761b14..e2445f75 100644 --- a/Data/scripts/commands/gm/music.lua +++ b/Data/scripts/commands/gm/music.lua @@ -3,15 +3,15 @@ properties = { parameters = "ss", description = [[ -Plays music to player. +Plays music to player, otherwise resets to the zone's music. +!music !music !music ]], } function onTrigger(player, argc, music, transition) - music = tonumber(music) or 0; + music = tonumber(music) or player.currentArea.bgmDay or 0; transition = tonumber(transition) or nil; - player:SendMessage(0x20, "", tostring(argc).." "..tostring(music).." "..tostring(transition)); player:ChangeMusic(music, transition); end; \ No newline at end of file diff --git a/Data/scripts/quests/etc/etc5g1.lua b/Data/scripts/quests/etc/etc5g1.lua index 5980b84e..dcfa21c1 100644 --- a/Data/scripts/quests/etc/etc5g1.lua +++ b/Data/scripts/quests/etc/etc5g1.lua @@ -33,6 +33,9 @@ SANSA = 1000239; ELYN = 1000411; RYD = 1000412; +-- Quest Items +ITEM_WANTED_GAUWYN = 10011243; + -- Quest Markers MRKR_ACORN_ORCHARD = 11082101; MRKR_NICOLIAUX = 11082102; @@ -49,30 +52,21 @@ end function onStateChange(player, quest, sequence) if (sequence == SEQ_ACCEPT) then - quest:SetENpc(OTOPA_POTTOPA, QFLAG_NORM); -- TO-DO: Check player inventory for quest-specific item before flagging? + local hasQuestItem = player:GetItemPackage(INVENTORY_NORMAL):HasItem(ITEM_WANTED_GAUWYN); + local otopaFlag = 0; + + if (hasQuestItem == false) then + otopaFlag = 2; + end + quest:SetENpc(OTOPA_POTTOPA, otopaFlag); quest:SetENpc(VKOROLON, QFLAG_NORM); -- Always shows despite interaction end if (sequence == SEQ_000) then - quest:SetENpc(VKOROLON); - quest:SetENpc(NICOLIAUX, QFLAG_NORM); - quest:SetENpc(POWLE); - quest:SetENpc(AUNILLIE); - quest:SetENpc(GAUWYN_THE_GANNET); - quest:SetENpc(HILDIBRAND); - quest:SetENpc(NASHU_MHAKARACCA); - quest:SetENPC(PRIVATE_AREA_ENTRANCE, QFLAG_MAP, false, true) - quest:SetENpc(PRIVATE_AREA_EXIT, QFLAG_NONE, false, true); + elseif (sequence == SEQ_010) then - quest:SetENpc(VKOROLON, QFLAG_REWARD); - quest:SetENpc(NICOLIAUX); - quest:SetENpc(POWLE); - quest:SetENpc(AUNILLIE); - quest:SetENpc(GAUWYN_THE_GANNET); - quest:SetENpc(HILDIBRAND); - quest:SetENpc(NASHU_MHAKARACCA); - quest:SetENpc(PRIVATE_AREA_EXIT, QFLAG_NONE, false, true); + end end @@ -82,52 +76,26 @@ function onTalk(player, quest, npc) if (sequence == SEQ_ACCEPT) then if (classId == OTOPA_POTTOPA) then - callClientFunction(player, "delegateEvent", player, quest, "processEventOTOPAPOTTOPAStart"); - giveWantedItem(player); + local hasQuestItem = player:GetItemPackage(INVENTORY_NORMAL):HasItem(ITEM_WANTED_GAUWYN); + + if (not hasQuestItem) then + callClientFunction(player, "delegateEvent", player, quest, "processEventOTOPAPOTTOPAStart"); + giveWantedItem(player); + npc:SetQuestGraphic(player, QFLAG_NONE); + else + callClientFunction(player, "delegateEvent", player, quest, "processEventOTOPAPOTTOPAStart_2"); + end + player:SendGameMessage(player, GetWorldMaster(), 51148, MESSAGE_TYPE_SYSTEM, 10011243, 2075); -- Log out in The Roost w/ item. + elseif (classId == VKOROLON) then -- This retail accurate. No dialog functions called. player:SendGameMessage(player, GetWorldMaster(), 51148, MESSAGE_TYPE_SYSTEM, 10011243, 2075); end elseif (sequence == SEQ_000) then - if (classId == VKOROLON) then - callClientFunction(player, "delegateEvent", player, quest, "processEvent_000_1"); -- This is a guess. - elseif (classId == NICOLIAUX) then - callClientFunction(player, "delegateEvent", player, quest, "processEvent_010") - attentionMessage(player, 25225, quest.GetQuestId()); -- objectives complete! - quest:UpdateENPCs(); -- Band-aid for a QFLAG_NORM issue - quest:StartSequence(SEQ_010); - elseif (classId == GAUWYN_THE_GANNET) then - callClientFunction(player, "delegateEvent", player, quest, "processEvent_010_2"); - elseif (classId == HILDIBRAND) then - callClientFunction(player, "delegateEvent", player, quest, "processEvent_010_3"); - elseif (classId == NASHU_MHAKARACCA) then - callClientFunction(player, "delegateEvent", player, quest, "processEvent_010_4"); - elseif (classId == AUNILLIE) then - callClientFunction(player, "delegateEvent", player, quest, "processEvent_010_5"); -- This is a guess. - elseif (classId == POWLE) then - callClientFunction(player, "delegateEvent", player, quest, "processEvent_010_6"); -- This is a guess. - - end + elseif (sequence == SEQ_010) then - if (classId == VKOROLON) then - callClientFunction(player, "delegateEvent", player, quest, "processEvent_020"); - callClientFunction(player, "delegateEvent", player, quest, "sqrwa", 500, 1, 1); - player:CompleteQuest(quest); - player:SendGameMessage(player, GetWorldMaster(), 51148, MESSAGE_TYPE_SYSTEM, 10011243, 1070); -- Log out in The Mizzenmast Inn w/ item. - elseif (classId == NICOLIAUX) then - callClientFunction(player, "delegateEvent", player, quest, "processEvent_010_1") -- This is a guess. - elseif (classId == GAUWYN_THE_GANNET) then - callClientFunction(player, "delegateEvent", player, quest, "processEvent_010_2"); - elseif (classId == HILDIBRAND) then - callClientFunction(player, "delegateEvent", player, quest, "processEvent_010_3"); - elseif (classId == NASHU_MHAKARACCA) then - callClientFunction(player, "delegateEvent", player, quest, "processEvent_010_4"); - elseif (classId == AUNILLIE) then - callClientFunction(player, "delegateEvent", player, quest, "processEvent_010_5"); -- This is a guess. - elseif (classId == POWLE) then - callClientFunction(player, "delegateEvent", player, quest, "processEvent_010_6"); -- This is a guess. - end + end player:EndEvent() @@ -140,7 +108,7 @@ function onPush(player, quest, npc) player:EndEvent(); if (npcClassId == PRIVATE_AREA_ENTRANCE) then - GetWorldManager():WarpToPrivateArea(player, "PrivateAreaMasterPast", 9999); + GetWorldManager():WarpToPrivateArea(player, "PrivateAreaMasterPast", 9999); -- Temp elseif (npcClassId == PRIVATE_AREA_EXIT) then GetWorldManager():WarpToPublicArea(player); end @@ -177,6 +145,5 @@ function giveWantedItem(player) player:SendMessage(MESSAGE_TYPE_SYSTEM, "", "[DEBUG] Server Error on adding item."); elseif (invCheck == INV_ERROR_SUCCESS) then player:SendGameMessage(player, GetWorldMaster(), 25246, MESSAGE_TYPE_SYSTEM_ERROR, ITEM_WANTED_GAUWYN, 1); - player:SendGameMessage(player, GetWorldMaster(), 51148, MESSAGE_TYPE_SYSTEM, 10011243, 3071); -- Log out in The Hourglass w/ item. end end \ No newline at end of file diff --git a/Data/scripts/quests/etc/etc5u1.lua b/Data/scripts/quests/etc/etc5u1.lua index 9e21becd..3d4e0174 100644 --- a/Data/scripts/quests/etc/etc5u1.lua +++ b/Data/scripts/quests/etc/etc5u1.lua @@ -21,8 +21,8 @@ OTOPA_POTTOPA = 1000864; GAUWYN_THE_GANNET = 1002065; HILDIBRAND = 1001995; NASHU_MHAKARACCA = 1001996; -PRIVATE_AREA_ENTRANCE = 0; -PRIVATE_AREA_EXIT = 0; +PRIVATE_AREA_ENTRANCE = 1090085; +PRIVATE_AREA_EXIT = 1290002; -- DefaultTalk NPCs? UBOKHN = 1000668; @@ -51,7 +51,13 @@ end function onStateChange(player, quest, sequence) if (sequence == SEQ_ACCEPT) then - quest:SetENpc(OTOPA_POTTOPA, QFLAG_NORM); -- TO-DO: Check player inventory for quest-specific item before flagging? + local hasQuestItem = player:GetItemPackage(INVENTORY_NORMAL):HasItem(ITEM_WANTED_GAUWYN); + local otopaFlag = 0; + + if (hasQuestItem == false) then + otopaFlag = 2; + end + quest:SetENpc(OTOPA_POTTOPA, otopaFlag); end if (sequence == SEQ_000) then @@ -59,14 +65,14 @@ function onStateChange(player, quest, sequence) quest:SetENpc(GAUWYN_THE_GANNET, QFLAG_NORM); quest:SetENpc(HILDIBRAND); quest:SetENpc(NASHU_MHAKARACCA); - quest:SetENPC(PRIVATE_AREA_ENTRANCE, QFLAG_MAP, false, true) - quest:SetENpc(PRIVATE_AREA_EXIT, QFLAG_NONE, false, true); + + --flagType, isTalkEnabled, isPushEnabled, isEmoteEnabled, isSpawned + quest:SetENpc(PRIVATE_AREA_ENTRANCE, QFLAG_MAP, false, true, false, true); elseif (sequence == SEQ_010) then quest:SetENpc(OTOPA_POTTOPA, QFLAG_REWARD); quest:SetENpc(GAUWYN_THE_GANNET); quest:SetENpc(HILDIBRAND); quest:SetENpc(NASHU_MHAKARACCA); - quest:SetENpc(PRIVATE_AREA_EXIT, QFLAG_NONE, false, true); end end @@ -76,10 +82,17 @@ function onTalk(player, quest, npc) if (sequence == SEQ_ACCEPT) then if (classId == OTOPA_POTTOPA) then - -- TO-DO: Add inventory check here? - callClientFunction(player, "delegateEvent", player, quest, "processEventOTOPAPOTTOPAStart"); - giveWantedItem(player); - --processEventOTOPAPOTTOPAStart_2 + local hasQuestItem = player:GetItemPackage(INVENTORY_NORMAL):HasItem(ITEM_WANTED_GAUWYN); + + if (not hasQuestItem) then + callClientFunction(player, "delegateEvent", player, quest, "processEventOTOPAPOTTOPAStart"); + giveWantedItem(player); + npc:SetQuestGraphic(player, QFLAG_NONE); + else + callClientFunction(player, "delegateEvent", player, quest, "processEventOTOPAPOTTOPAStart_2"); + end + + player:SendGameMessage(player, GetWorldMaster(), 51148, MESSAGE_TYPE_SYSTEM, 10011243, 3071); end elseif (sequence == SEQ_000) then @@ -121,10 +134,8 @@ function onPush(player, quest, npc) player:EndEvent(); if (npcClassId == PRIVATE_AREA_ENTRANCE) then - -- TO-DO: Needs spawn coordinates + Private Area arranged - GetWorldManager():WarpToPrivateArea(player, "PrivateAreaMasterPast", 9999); - elseif (npcClassId == PRIVATE_AREA_EXIT) then - GetWorldManager():WarpToPublicArea(player); + --TO-DO: Fill in the # below for the privateArea when it's made + --GetWorldManager():WarpToPrivateArea(player, "PrivateAreaMasterPast", #, -206.712, 195.148, 151.064, 1.821); end end @@ -159,6 +170,5 @@ function giveWantedItem(player) player:SendMessage(MESSAGE_TYPE_SYSTEM, "", "[DEBUG] Server Error on adding item."); elseif (invCheck == INV_ERROR_SUCCESS) then player:SendGameMessage(player, GetWorldMaster(), 25246, MESSAGE_TYPE_SYSTEM_ERROR, ITEM_WANTED_GAUWYN, 1); - player:SendGameMessage(player, GetWorldMaster(), 51148, MESSAGE_TYPE_SYSTEM, 10011243, 3071); -- Log out in The Hourglass w/ item. end end \ No newline at end of file