Active Member Mind Rapist 188 Posted December 28, 2018 Active Member Share Posted December 28, 2018 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 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now