Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fix] Guild point representative issues #6981

Merged
merged 2 commits into from
Feb 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 3 additions & 8 deletions scripts/globals/crafting/crafting_guild_master.lua
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,10 @@ local testItemTable =
[xi.guild.COOKING ] = { 4355, 4416, 4489, 4381, 4413, 4558, 4546, 4440, 4561, 5930 },
}

local function giveNewRank(player, guildId, skillId, newRank)
local function giveNewRank(player, skillId, newRank)
-- Raise rank.
player:setSkillRank(skillId, newRank)

-- Reset guild points for the day.
if player:getCharVar('[GUILD]currentGuild') == guildId + 1 then
player:setCharVar('[GUILD]daily_points', 1)
end

-- Set local var to complete trade after event.
player:setLocalVar('CompleteTrade', 1)
end
Expand Down Expand Up @@ -93,7 +88,7 @@ xi.crafting.guildMasterOnTrade = function(player, npc, trade)
guildId == xi.guild.FISHING
then
player:setCharVar(npcTable[npcName][6], 0)
giveNewRank(player, guildId, skillId, newRank)
giveNewRank(player, skillId, newRank)
player:startEvent(eventId, 0, 0, 0, 0, newRank, 1)
else
player:startEvent(eventId, 0, 0, 0, 0, newRank, 0)
Expand All @@ -104,7 +99,7 @@ xi.crafting.guildMasterOnTrade = function(player, npc, trade)
newRank > xi.craftRank.AMATEUR and
newRank < lastRank
then
giveNewRank(player, guildId, skillId, newRank)
giveNewRank(player, skillId, newRank)
player:startEvent(eventId, 0, 0, 0, 0, newRank, 0)
end
end
Expand Down
82 changes: 51 additions & 31 deletions scripts/globals/crafting/crafting_guild_points.lua
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,20 @@ local guildItemTable =
},
}

local function calculateKeyItemBitmask(player, rank, keyItemTable)
local keyItemBits = 0

for currentBit, keyItem in pairs(keyItemTable) do
if rank >= keyItem.rank then
if not player:hasKeyItem(keyItem.id) then
keyItemBits = bit.bor(keyItemBits, bit.lshift(1, currentBit))
end
end
end

return keyItemBits
end

-----------------------------------
-- NPC Events
-----------------------------------
Expand Down Expand Up @@ -234,46 +248,27 @@ xi.crafting.guildPointOnTrade = function(player, npc, trade, csid, guildId)
end

xi.crafting.guildPointOnTrigger = function(player, csid, guildId)
local currency = xi.crafting.guildTable[guildId][2]
local gpItem, remainingPoints = player:getCurrentGPItem(guildId)
local rank = player:getSkillRank(xi.crafting.guildTable[guildId][1])
local skillCap = (rank + 1) * 10
local keyItemBits = 0
local currency = xi.crafting.guildTable[guildId][2]
local keyItems = guildKeyItemTable[guildId]
local keyItemBits = calculateKeyItemBitmask(player, rank, guildKeyItemTable[guildId])

for currentBit, keyItem in pairs(keyItems) do
if rank >= keyItem.rank then
if not player:hasKeyItem(keyItem.id) then
keyItemBits = bit.bor(keyItemBits, bit.lshift(1, currentBit))
end
end
end

player:startEvent(csid, player:getCurrency(currency), player:getCharVar('[GUILD]currentGuild') - 1, gpItem, remainingPoints, skillCap, 0, keyItemBits)
player:startEvent(csid, player:getCurrency(currency), player:getCharVar('[GUILD]currentGuild') - 1, gpItem, remainingPoints, skillCap, 0, keyItemBits, 0)
end

xi.crafting.guildPointOnEventFinish = function(player, option, target, guildId)
local ID = zones[player:getZoneID()]
local rank = player:getSkillRank(xi.crafting.guildTable[guildId][1])
local category = bit.band(bit.rshift(option, 2), 3)
local currency = xi.crafting.guildTable[guildId][2]
local keyItems = guildKeyItemTable[guildId]
local items = guildItemTable[guildId]
xi.crafting.guildPointOnEventUpdate = function(player, option, target, guildId)
local category = bit.band(bit.rshift(option, 2), 3)

-- Contract Dialog.
if bit.tobit(option) == -1 and rank >= 3 then
local oldGuild = player:getCharVar('[GUILD]currentGuild') - 1
player:setCharVar('[GUILD]currentGuild', guildId + 1)

if oldGuild == -1 then
player:messageSpecial(ID.text.GUILD_NEW_CONTRACT, guildId)
else
player:messageSpecial(ID.text.GUILD_TERMINATE_CONTRACT, guildId, oldGuild)
player:setCharVar('[GUILD]daily_points', 1)
end
local ID = zones[player:getZoneID()]
local _, remainingPoints = player:getCurrentGPItem(guildId)
local rank = player:getSkillRank(xi.crafting.guildTable[guildId][1])
local skillCap = (rank + 1) * 10
local currency = xi.crafting.guildTable[guildId][2]
local keyItems = guildKeyItemTable[guildId]

-- GP Key Item Option.
elseif category == 3 then
if category == 3 then
local keyItem = keyItems[bit.band(bit.rshift(option, 5), 15) - 1]

if keyItem and rank >= keyItem.rank then
Expand All @@ -285,9 +280,12 @@ xi.crafting.guildPointOnEventFinish = function(player, option, target, guildId)
end
end

player:updateEvent(player:getCurrency(currency), player:getCharVar('[GUILD]currentGuild') - 1, keyItem.cost, remainingPoints, skillCap, 0, calculateKeyItemBitmask(player, rank, guildKeyItemTable[guildId]), 1)

-- GP Item Option.
elseif category == 2 or category == 1 then
local index = bit.band(option, 3)
local items = guildItemTable[guildId]
local item = items[(category - 1) * 4 + index]
local quantity = math.min(bit.rshift(option, 9), 12)
local cost = quantity * item.cost
Expand All @@ -312,6 +310,8 @@ xi.crafting.guildPointOnEventFinish = function(player, option, target, guildId)
end
end

player:updateEvent(player:getCurrency(currency), player:getCharVar('[GUILD]currentGuild') - 1, item.cost, remainingPoints, skillCap, 0, calculateKeyItemBitmask(player, rank, guildKeyItemTable[guildId]), 1)

-- HQ crystal Option.
elseif
category == 0 and
Expand All @@ -331,5 +331,25 @@ xi.crafting.guildPointOnEventFinish = function(player, option, target, guildId)
player:messageText(target, ID.text.NOT_HAVE_ENOUGH_GP, false, 6)
end
end

player:updateEvent(player:getCurrency(currency), player:getCharVar('[GUILD]currentGuild') - 1, crystal.cost, remainingPoints, skillCap, 0, calculateKeyItemBitmask(player, rank, guildKeyItemTable[guildId]), 1)
end
end

xi.crafting.guildPointOnEventFinish = function(player, option, guildId)
local ID = zones[player:getZoneID()]
local rank = player:getSkillRank(xi.crafting.guildTable[guildId][1])

-- Contract Dialog.
if bit.tobit(option) == -1 and rank >= 3 then
local oldGuild = player:getCharVar('[GUILD]currentGuild') - 1
player:setCharVar('[GUILD]currentGuild', guildId + 1)

if oldGuild == -1 then
player:messageSpecial(ID.text.GUILD_NEW_CONTRACT, guildId)
else
player:messageSpecial(ID.text.GUILD_TERMINATE_CONTRACT, guildId, oldGuild)
player:setCharVar('[GUILD]daily_points', 1)
end
end
end
4 changes: 2 additions & 2 deletions scripts/zones/Bastok_Markets/npcs/Ellard.lua
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ end

entity.onEventUpdate = function(player, csid, option, npc)
if csid == 340 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.GOLDSMITHING)
xi.crafting.guildPointOnEventUpdate(player, option, npc, xi.guild.GOLDSMITHING)
end
end

entity.onEventFinish = function(player, csid, option, npc)
if csid == 340 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.GOLDSMITHING)
xi.crafting.guildPointOnEventFinish(player, option, xi.guild.GOLDSMITHING)
elseif csid == 341 then
player:messageSpecial(ID.text.GP_OBTAINED, option)
end
Expand Down
4 changes: 2 additions & 2 deletions scripts/zones/Bastok_Mines/npcs/Hemewmew.lua
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ end

entity.onEventUpdate = function(player, csid, option, npc)
if csid == 206 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.ALCHEMY)
xi.crafting.guildPointOnEventUpdate(player, option, npc, xi.guild.ALCHEMY)
end
end

entity.onEventFinish = function(player, csid, option, npc)
if csid == 206 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.ALCHEMY)
xi.crafting.guildPointOnEventFinish(player, option, xi.guild.ALCHEMY)
elseif csid == 207 then
player:messageSpecial(ID.text.GP_OBTAINED, option)
end
Expand Down
4 changes: 2 additions & 2 deletions scripts/zones/Metalworks/npcs/Lorena.lua
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ end

entity.onEventUpdate = function(player, csid, option, npc)
if csid == 800 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.SMITHING)
xi.crafting.guildPointOnEventUpdate(player, option, npc, xi.guild.SMITHING)
end
end

entity.onEventFinish = function(player, csid, option, npc)
if csid == 800 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.SMITHING)
xi.crafting.guildPointOnEventFinish(player, option, xi.guild.SMITHING)
elseif csid == 801 then
player:messageSpecial(ID.text.GP_OBTAINED, option)
end
Expand Down
4 changes: 2 additions & 2 deletions scripts/zones/Northern_San_dOria/npcs/Andreas.lua
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ end

entity.onEventUpdate = function(player, csid, option, npc)
if csid == 731 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.WOODWORKING)
xi.crafting.guildPointOnEventUpdate(player, option, npc, xi.guild.WOODWORKING)
end
end

entity.onEventFinish = function(player, csid, option, npc)
if csid == 731 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.WOODWORKING)
xi.crafting.guildPointOnEventFinish(player, option, xi.guild.WOODWORKING)
elseif csid == 732 then
player:messageSpecial(ID.text.GP_OBTAINED, option)
end
Expand Down
4 changes: 2 additions & 2 deletions scripts/zones/Northern_San_dOria/npcs/Macuillie.lua
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ end

entity.onEventUpdate = function(player, csid, option, npc)
if csid == 729 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.SMITHING)
xi.crafting.guildPointOnEventUpdate(player, option, npc, xi.guild.SMITHING)
end
end

entity.onEventFinish = function(player, csid, option, npc)
if csid == 729 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.SMITHING)
xi.crafting.guildPointOnEventFinish(player, option, xi.guild.SMITHING)
elseif csid == 730 then
player:messageSpecial(ID.text.GP_OBTAINED, option)
end
Expand Down
4 changes: 2 additions & 2 deletions scripts/zones/Port_Windurst/npcs/Fennella.lua
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ end

entity.onEventUpdate = function(player, csid, option, npc)
if csid == 10020 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.FISHING)
xi.crafting.guildPointOnEventUpdate(player, option, npc, xi.guild.FISHING)
end
end

entity.onEventFinish = function(player, csid, option, npc)
if csid == 10020 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.FISHING)
xi.crafting.guildPointOnEventFinish(player, option, xi.guild.FISHING)
elseif csid == 10021 then
player:messageSpecial(ID.text.GP_OBTAINED, option)
end
Expand Down
4 changes: 2 additions & 2 deletions scripts/zones/Southern_San_dOria/npcs/Alivatand.lua
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ end

entity.onEventUpdate = function(player, csid, option, npc)
if csid == 690 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.LEATHERCRAFT)
xi.crafting.guildPointOnEventUpdate(player, option, npc, xi.guild.LEATHERCRAFT)
end
end

entity.onEventFinish = function(player, csid, option, npc)
if csid == 690 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.LEATHERCRAFT)
xi.crafting.guildPointOnEventFinish(player, option, xi.guild.LEATHERCRAFT)
elseif csid == 691 then
player:messageSpecial(ID.text.GP_OBTAINED, option)
end
Expand Down
4 changes: 2 additions & 2 deletions scripts/zones/Windurst_Waters/npcs/Qhum_Knaidjn.lua
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ end

entity.onEventUpdate = function(player, csid, option, npc)
if csid == 10024 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.COOKING)
xi.crafting.guildPointOnEventUpdate(player, option, npc, xi.guild.COOKING)
end
end

entity.onEventFinish = function(player, csid, option, npc)
if csid == 10024 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.COOKING)
xi.crafting.guildPointOnEventFinish(player, option, xi.guild.COOKING)
elseif csid == 10025 then
player:messageSpecial(ID.text.GP_OBTAINED, option)
end
Expand Down
4 changes: 2 additions & 2 deletions scripts/zones/Windurst_Woods/npcs/Hauh_Colphioh.lua
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ end

entity.onEventUpdate = function(player, csid, option, npc)
if csid == 10024 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.CLOTHCRAFT)
xi.crafting.guildPointOnEventUpdate(player, option, npc, xi.guild.CLOTHCRAFT)
end
end

entity.onEventFinish = function(player, csid, option, npc)
if csid == 10024 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.CLOTHCRAFT)
xi.crafting.guildPointOnEventFinish(player, option, xi.guild.CLOTHCRAFT)
elseif csid == 10025 then
player:messageSpecial(ID.text.GP_OBTAINED, option)
end
Expand Down
4 changes: 2 additions & 2 deletions scripts/zones/Windurst_Woods/npcs/Samigo-Pormigo.lua
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ end

entity.onEventUpdate = function(player, csid, option, npc)
if csid == 10022 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.BONECRAFT)
xi.crafting.guildPointOnEventUpdate(player, option, npc, xi.guild.BONECRAFT)
end
end

entity.onEventFinish = function(player, csid, option, npc)
if csid == 10022 then
xi.crafting.guildPointOnEventFinish(player, option, npc, xi.guild.BONECRAFT)
xi.crafting.guildPointOnEventFinish(player, option, xi.guild.BONECRAFT)
elseif csid == 10023 then
player:messageSpecial(ID.text.GP_OBTAINED, option)
end
Expand Down