Page 1 of 1

Bug(?) - Missing Orb of Many Ways after defeating Golbug

Posted: Fri Jul 27, 2018 10:08 pm
by Grim13
Well, I'm not sure this is a bug rather than me being stupid somewhat - it's been a while since I've played this far in the regular campaign - but:

https://te4.org/characters/161289/tome/ ... d197c2b2ce

This character has defeated Golbug, has received the scroll from Last Hope, but is missing the Orb of Many Ways, meaning progress is at a dead end. The orb isn't in Reknor (not visible and not found by auto-exploring). As far as I know, this shouldn't be possible, but as stated above, I might just be missing something in a stupid way, in which case, apologies in advance.

If any additional information or files would be helpful, let me know - I did not include the log snippets because I continued play for a bit before going back to the portal and then hopped around trying to figure out if the orb was somewhere else / involved more quests, so I figure the log's long since lost any relevant information

Re: Bug(?) - Missing Orb of Many Ways after defeating Golbug

Posted: Sun Jul 29, 2018 5:59 am
by scsijon

Re: Bug(?) - Missing Orb of Many Ways after defeating Golbug

Posted: Sun Jul 29, 2018 4:40 pm
by Grim13
Thanks for the tip. I didn't think to look this up because I figured a progress-stiffling bug of this nature would be fixed already if it was known. Into the recycle bin goes the character, unfortunately.

Re: Bug(?) - Missing Orb of Many Ways after defeating Golbug

Posted: Sun Jul 29, 2018 9:08 pm
by BugReporter
@Grim13
Could you answer whether you entered unremarkable cave (or explored Eastern World Map) before completing Slazish Fen, please?

@scsijon
Very useful information. Thanks for sharing.

Speculations. As far as I can see both Krogar and Golbug can drop the orb. Maybe Golbug doesn't drop the orb because it was assigned to Krogar earlier.
If I understand it correctly it can be fixed by removing it first and then reassigning to a different boss. I couldn't figure out how to do that though.
I tried to apply the mechanism used by Rod of Recall to Orb of Many Ways. From a quick test it seems to work. Here are changes if anyone wants to test.
Commented out ..\data\zones\reknor\npcs.lua (L54) and ..\data\zones\unremarkable-cave\npcs.lua (L124).

Code: Select all

	resolvers.drops{chance=100, nb=1, {type="jewelry", subtype="orb", defined="ORB_MANY_WAYS"} },
In ..\mod\class\Game.lua

Code: Select all

	-- Create the entity to store various game state things
	self.state = GameState.new{}
	local birth_done = function()
		--Added for orb of many ways (1 line)
		self.state:allowOrbOfManyWays(true)
		if self.state.birth.__allow_rod_recall then self.state:allowRodRecall(true) self.state.birth.__allow_rod_recall = nil end
		if self.state.birth.__allow_transmo_chest and profile.mod.allow_build.birth_transmo_chest then
			self.state.birth.__allow_transmo_chest = nil
			local chest = self.zone:makeEntityByName(self.level, "object", "TRANSMO_CHEST")
			if chest then
				self.zone:addEntity(self.level, chest, "object")
				self.player:addObject(self.player:getInven("INVEN"), chest)
			end
		end
In ..\mod\class\GameState.lua

Code: Select all

--- Allow dropping the orb of many ways (4 lines)
function _M:allowOrbOfManyWays(v)
	if v == nil then return self.allow_drop_oomw end
	self.allow_drop_oomw = v
end
In ..\mod\class\NPC.lua

Code: Select all

function _M:die(src, death_note)
	if self.dead then self:disappear(src) self:deleteFromMap(game.level.map) if game.level:hasEntity(self) then game.level:removeEntity(self, true) end return true end

	if src and Faction:get(self.faction) and Faction:get(self.faction).hostile_on_attack then
		Faction:setFactionReaction(self.faction, src.faction, Faction:factionReaction(self.faction, src.faction) - self.rank, true)
	end

	-- Get angry if attacked by a friend
	if src and src ~= self and src.resolveSource and src.faction then
		local rsrc = src:resolveSource()
		local rid = rsrc.unique or rsrc.name

		-- Call for help if we become hostile
		for i = 1, #self.fov.actors_dist do
			local act = self.fov.actors_dist[i]
			if act and act ~= self and act:reactionToward(rsrc) >= 0 and self:reactionToward(act) > 0 and not act.dead and act.checkAngered then
				act:checkAngered(src, false, -101)
			end
		end
	end

	--Added for orb of many ways (11 lines)
	if (self.define_as == "GOLBUG" or self.define_as == "CORRUPTOR") and game.state:allowOrbOfManyWays() then
		local oomw = game.zone:makeEntityByName(game.level, "object", "ORB_MANY_WAYS")
		if oomw then
			if not game.player:canMove(self.x, self.y, true) then
				game.zone:addEntity(game.level, oomw, "object")
				game:getPlayer(true):addObject(game:getPlayer(true):getInven("INVEN"), oomw)
			else
				game.zone:addEntity(game.level, oomw, "object", self.x, self.y)
			end
		end
	end
	if self.rank >= 4 and game.state:allowRodRecall() and not self:attr("no_rod_recall") then
		local rod = game.zone:makeEntityByName(game.level, "object", "ROD_OF_RECALL")
		if rod then
			-- If the player can move to the space the NPC died on, drop in the normal way
			-- Else make absolutely sure they get the Rod of Recall by moving it to their inventory directly
			if not game.player:canMove(self.x, self.y, true) then
				game.zone:addEntity(game.level, rod, "object")
				game:getPlayer(true):addObject(game:getPlayer(true):getInven("INVEN"), rod)
				rod:identify(true)
			else
				game.zone:addEntity(game.level, rod, "object", self.x, self.y)
			end

			game.state:allowRodRecall(false)
			if self.define_as == "THE_MASTER" then world:gainAchievement("FIRST_BOSS_MASTER", src)
			elseif self.define_as == "GRAND_CORRUPTOR" then world:gainAchievement("FIRST_BOSS_GRAND_CORRUPTOR", src)
			elseif self.define_as == "PROTECTOR_MYSSIL" then world:gainAchievement("FIRST_BOSS_MYSSIL", src)
			elseif self.define_as == "URKIS" then world:gainAchievement("FIRST_BOSS_URKIS", src)
			end
		end
	end
	-- Ok the player managed to kill a boss dont bother him with tutorial anymore
	if self.rank >= 3.5 and not profile.mod.allow_build.tutorial_done then game:setAllowedBuild("tutorial_done") end

	return mod.class.Actor.die(self, src, death_note)
end
There should be no problems with Tannen because he drops a different orb. I'm not sure what happens if you quickly recall from Unremarkable Cave (after arriving there from the west) before Krogar dies and return to kill him after creating the portal in Last Hope.

Re: Bug(?) - Missing Orb of Many Ways after defeating Golbug

Posted: Sun Jul 29, 2018 9:34 pm
by Grim13
BugReporter wrote:@Grim13
Could you answer whether you entered unremarkable cave (or explored Eastern World Map) before completing Slazish Fen, please?
I did. I always pop into the cave when starting in the East just in case there's something good on the ground near the stairs. I guess that turns out to be a bad idea, but good catch.

Re: Bug(?) - Missing Orb of Many Ways after defeating Golbug

Posted: Tue Jul 31, 2018 9:18 pm
by BugReporter
Not a bad idea per se, but in this particular situation it's better to avoid the cave. However, it is only true if my hypothesis is correct.

What information do we have so far?
From the old topic:
1. Race/Class: Thalore Sun Paladin
2. Entered unremarkable cave before completing Slazish Fen [yes/no]: unknown
3. Log: Refused unique by name Orb of Many Ways mod.class.Object/Orb of Many Ways
This topic:
1. Race/Class: Cornac Sun Paladin
2. Entered unremarkable cave before completing Slazish Fen [yes/no]: yes
3. Log: unknown

Does anyone who played East start and not visited the Unremarkable Cave have this issue?

Edit. Found another topic with an explanation http://forums.te4.org/viewtopic.php?f=42&t=42978 . I should have searched in the first place, doh!