Skip to content

Commit

Permalink
Merge pull request #6981 from Xaver-DaRed/guild-points
Browse files Browse the repository at this point in the history
[Fix] Guild point representative issues
  • Loading branch information
zach2good authored Feb 8, 2025
2 parents de2a43e + 222dc58 commit 87fb709
Show file tree
Hide file tree
Showing 12 changed files with 74 additions and 59 deletions.
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

0 comments on commit 87fb709

Please sign in to comment.