Jump to content

Dragonsoul gem item drop bug


Recommended Posts

I'm having trouble with the item 30270 (dragonsoul gem). So here is the issue: The item cannot be dropped until after the char has become qualified (complete the Alchemist mission). I don't know what's wrong. I checked the source 1000 times and my quest is normal. I saw that this was commented in item_manager.cpp:

if (pkChr->GetLevel() >= 30 && (GetDropPerKillPct(50, 100, iDeltaPercent, "ds_drop") >= number(1, iRandRange)))
{
	const static DWORD dragon_soul_gemstone = 30270;
	if ((item = CreateItem(dragon_soul_gemstone, 1, 0, true)))
	{
		vec_item.push_back(item);
	}
}

So I uncommented it. Nothing changed. I also tried to modify it so the specific item keeps ownership until it gets purged. This is how I changed it:

 

if (pkChr->GetLevel() >= 30 && (GetDropPerKillPct(50, 100, iDeltaPercent, "ds_drop") >= number(1, iRandRange)))
{
	const static DWORD dragon_soul_gemstone = 30270;
	if ((item = CreateItem(dragon_soul_gemstone, 1, 0, true)))
	{
		item->SetOwnership (pkChr, item_floor_time);
		vec_item.push_back(item);
	}
}

where item_floor_time = 3 minutes. This didn't work either.

My quest:

Spoiler

quest dragon_soul begin
	state start begin
		when levelup or letter with pc.level >= 30 begin
			send_letter(gameforge.dragon_soul._1010_sendLetter)
			local v = find_npc_by_vnum(20001)
			
			if 0 != v then
				target.vid("__TARGET__", v, mob_name(20001))
			end
		end
		when info or button begin
			say(gameforge.dragon_soul._1020_say)
		end

		when 20001.chat.gameforge.dragon_soul._1030_npcChat with pc.level >= 30 begin
			target.delete("__TARGET__")

			say_title(mob_name(20001))
			say(gameforge.dragon_soul._1040_say)
			set_state(state_learning)
		end
	end
	state state_learning begin
		when letter begin
			send_letter(gameforge.dragon_soul._1050_sendLetter)
		end
		when info or button begin
			say(gameforge.dragon_soul._1060_say)
		end
		when kill begin
			if npc.is_pc() then
				return
			end
			------------
			if pc.get_map_index() >= 2400000 and pc.get_map_index() <= 2405000 or pc.get_map_index() >= 2350000 and pc.get_map_index() <= 2355000 then
			return
			else
			-----------------------
				if pc.getf("dragon_soul","drop_on") == 1 then
					if pc.count_item(30270) < 15 then
						if drop_gamble_with_flag("ds_drop") then
							
							game.drop_item_with_ownership(30270)
							
						end
					end
				end
			-------------------------
			end
			------------
		end
		when 20001.chat.gameforge.dragon_soul._1050_sendLetter begin
			say_title(mob_name(20001))
			if pc.count_item(30270) >= 10 then
				say(gameforge.dragon_soul._1070_say)
				pc.remove_item(30270, 10)
				ds.give_qualification()
				char_log(pc.get_player_id(), 'DS_QUALIFICATION', 'SUCCESS')
				pc.give_item2(50255)
				local today = math.floor(get_global_time() / 86400)
				pc.setf("dragon_soul", "eye_timestamp", today)
				pc.setf("dragon_soul", "eye_left", 3)
				set_state(state_farming)
			else
				say(gameforge.dragon_soul._1080_say)
			end
		end
	end
	state state_farming begin
		when letter begin
			send_letter(gameforge.dragon_soul._1090_sendLetter)
		end
		when info or button begin
			say(string.format(gameforge.dragon_soul._1100_say, pc.getf("dragon_soul", "eye_left")))
		end
		when kill begin
			if npc.is_pc() then
				return
			end
			---------
			if pc.get_map_index() >= 2400000 and pc.get_map_index() <= 2405000 or pc.get_map_index() >= 2350000 and pc.get_map_index() <= 2355000 then
			return
			else
			------------------------------------
				if pc.getf("dragon_soul","drop_on") == 1 then
				if drop_gamble_with_flag("ds_drop") then
					local eye_left = pc.getf("dragon_soul", "eye_left")
					local haved_gemstone_number = pc.count_item(30270)
					
					if eye_left > haved_gemstone_number / 10 then
						
						game.drop_item_with_ownership(30270)
						
					end
				end
				end
				----------------------------
			end
			-----------
		end
		when 30270.pick begin
			local eye_left = pc.getf("dragon_soul", "eye_left")
			if eye_left <= 0 then
				return
			end

			if pc.count_item(30270) >= 10 then
				pc.setf("dragon_soul", "eye_left", eye_left - 1)
				pc.remove_item(30270, 10)
				pc.give_item2(50255)
				if 1 == eye_left then
					notice_multiline(gameforge.dragon_soul._1110_notice, notice)
					set_state(state_closed_season)
				end
			end
		end
		when 20001.chat.gameforge.dragon_soul._1120_npcChat begin
			say_title(mob_name(20001))
			local today = math.floor(get_global_time() / 86400)
			if today == pc.getf("dragon_soul", "eye_timestamp") then
				say(gameforge.dragon_soul._1130_say)
			else
				say(gameforge.dragon_soul._1140_say)
				pc.setf("dragon_soul", "eye_timestamp", today)
				pc.setf("dragon_soul", "eye_left", 3)
				pc.setf("dragon_soul","drop_on",1)
			end	
		end
	end
	state state_closed_season begin
		when letter begin
			send_letter(gameforge.dragon_soul._1150_sendLetter)
		end
		when info or button begin
			say(gameforge.dragon_soul._1160_say)
			local today = math.floor(get_global_time() / 86400)
			if today == pc.getf("dragon_soul", "eye_timestamp") then
				say(gameforge.dragon_soul._1170_say)
			else
				say(gameforge.dragon_soul._1180_say)
			end
		end
		
		when 20001.chat.gameforge.dragon_soul._1090_sendLetter begin
			say_title(mob_name(20001))
			local today = math.floor(get_global_time() / 86400)
			if today == pc.getf("dragon_soul", "eye_timestamp") then
				say(gameforge.dragon_soul._1130_say)
			else
				say(gameforge.dragon_soul._1140_say)
				pc.setf("dragon_soul", "eye_timestamp", today)
				pc.setf("dragon_soul", "eye_left", 3)
				set_state(state_farming)
			end
		end
	end
	-- deprecated states. so, jump to new state.
	state state_1 begin
		when login begin
			set_state(state_learning)
		end
	end
	state state_2 begin
		when login begin
			set_state(state_learning)
		end
	end
	state state_3 begin
		when login begin
			set_state(state_closed_season)
		end
	end
end

 

 

  • Sad 1
Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

Announcements



×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.