Jump to content

Syreldar

Premium
  • Posts

    1297
  • Joined

  • Last visited

  • Days Won

    38
  • Feedback

    100%

Posts posted by Syreldar

  1. 26/09/2023:

    1. Added num_to_char(num).
    2. Added char_to_num(string).
    3. Added string_to_ascii_array(string).
    4. Added ascii_array_to_string(table).
    5. Added skill_level_to_id(num).
    6. Added skill_id_to_level(string).
    7. Added time_to_sec(num, string). (Kept the old functions as wrapper funcs for backwards compatibility)
    • Metin2 Dev 1
    • Love 1
  2. 13 hours ago, AndreiS said:

    Is any good this solution ?

    No. You're effectively changing how the skill works instead of fixing the issue (which I still don't get what it even is)

  3. When will you guys stop resorting to randoms to make services for you just to pay less? This is what happens.

    This forums has warnings as big as a house saying to ONLY BUY THINGS FROM TRUSTED MARKETPLACE-REGISTERED USERS.

    The moment you go to other ppl, that's on you man.

  4. Just one piece of advice: Nobody works on promises.

    By writing

    Quote

    IM NOT LOOKING FOR DEVS, PROGRAMMERS, OR ANY PAID SERVER IM ONLY LOOKING FOR SERIOUS STAFF MEMBERS TO TEST AND DEPLOY THE SERVER TOGETHER.

    You're basically saying they're gonna work for free until the server opens. Nobody will ever do that, servers take months to build up properly.

    You gotta pay ppl to work for you, or nobody ever will.

    • Good 1
  5. Didn't test, don't care, wrote in notepad in 5 min spare. This 'system' shouldn't be done in Lua btw.

    But if you really want make such an abomination, please, do things properly at the very least:

    define STUN_AFFECT_ID 210
    
    define FALSE_ITEMS_NUM 3 -- How many false items should be in the selection.
    define FAILED_COUNT_LIMIT 3 -- Warp to village when failing the captcha this amount of times.
    define METIN_KILL_LIMIT 50 -- Show captcha upon destroying this amount of metinstones.
    
    quest anti_bot_captcha begin
        state start begin
            function setting()
                return {
                    ["true_vnums"] = {101129, 9600, 12829, 2169, 11839, 12789, 71107, 79, 2099, 199, 2159, 3169, 2139, 5349, 1139, 101006, 12809, 7009, 13109, 7029, 189, 39, 7019, 29, 101005},
                    ["fake_vnums"] = {
                        11299, 17229, 7379, 2079, 101119, 20509, 2129, 18089, 11819, 129, 13089,
                        89, 69, 11849, 101141, 469, 12849, 101004, 16579, 2069, 101140, 14579, 169,
                        2039, 15459, 11899, 2019, 101144, 11499, 20259, 3199, 139, 101109, 7059, 2109,
                        13169, 17709, 14229, 2059, 7039, 99, 49, 101143, 13069, 18099, 11699, 479, 15449,
                        179, 2049, 5129, 20009, 59, 2089, 2379, 9830, 11829, 20759, 101142, 119, 2179, 2009,
                        2119, 16229, 11809, 101139, 19, 2029, 1349, 11859, 2179, 13149, 7049, 13129, 2149
                    }
                };
            end -- function
    
            function block_player()
                pc.setqf("status", 1); -- Unused, but can be useful.
                pc.affect_stun();
            end -- function
    
            function unblock_player()
                pc.setqf("status", 0); -- Unused, but can be useful.
                pc.setqf("kill_count", 0);
                pc.setqf("failed_count", 0);
                affect.remove(STUN_AFFECT_ID);
            end -- function
    
            function captcha_response(is_correct)
                if (is_correct) then
                    anti_bot_captcha.unblock_player();
                    return;
                end -- if
    
                pc.setqf("failed_count", pc.getqf("failed_count") + 1);
                if (pc.getqf("failed_count") >= FAILED_COUNT_LIMIT) then
                    pc.setqf("failed_count", 0);
                    notice("[Captcha] Fail limit reached. Warping you back to your village..")
                    warp_to_village();
                    return;
                end -- if
    
                say_reward(string.format("Wrong captcha! (Attempts remaining: %d)", FAILED_COUNT_LIMIT - pc.getqf("failed_count")))
                anti_bot_captcha.show_captcha();
            end -- function
    
            function show_captcha()
                local setting = anti_bot_captcha.setting();
                local true_item = table_get_random_item(setting["true_vnums"]);
    
                say("What is the name of this item?")
                say_item_vnum(true_item);
                say("[ENTER][ENTER]")
    
                local random_item, chosen_items = 0, {};
                table.insert(chosen_items, item_name(true_item));
      
                for _ = 1, FALSE_ITEMS_NUM do
                    -- table_get_random_item_except (https://metin2.dev/topic/15905-syreldars-quest-functions/)
                    random_item = table_get_random_item_except(setting["fake_vnums"], chosen_items);
                    table.insert(chosen_items, item_name(random_item));
                end -- for
    
                -- table_shuffle (https://metin2.dev/topic/15905-syreldars-quest-functions/)
                local options = table_shuffle(chosen_items);
                local selection = select(unpack(options));
                anti_bot_captcha.captcha_response(options[selection] == item_name(true_item))
            end -- function
    
            when kill with not npc.is_pc() and npc.is_metin() begin
                pc.setqf("kill_count", pc.getqf("kill_count")+1);
    
                if (pc.getqf("kill_count") >= METIN_KILL_LIMIT) then
                    anti_bot_captcha.block_player();
                    anti_bot_captcha.show_captcha();
                end -- if
            end -- when
        end -- state
    end -- quest

     

    Thanks for the contribution, I guess.

    • Love 1
  6. 3 minutes ago, Draveniou1 said:

    I know that

    but it never worked on my server I tried thousands of times

    Metin2 is metin2, the code is the same for every person on the planet. You were simply doing it wrong.

    • Think 1
  7. Place the correct files in the data folder serverside of the monster to fix, take them from the client.

    Then assign the monster to that folder in the mob_proto, and the problem is gone.

    There is no need to use c++ or weird workarounds for this.

  8. Substitute:

    quest lvl_110 begin
    	state start begin

    with:

    quest lvl_110 begin
    	state start begin
    		when login or levelup with pc.get_level() >= 110 begin
    			set_state(in_mission);
    		end -- when
    	end -- state
    
    	state in_mission begin

     

     

    Some more unrelated advice:

    1. Substitute:

    		when login or enter or levelup begin
    			local data = playerMission.returnData();
    			send_letter(data["missionData"]["missionName"]);
    		end

    1. With:

    		when letter begin
    			local data = playerMission.returnData();
    			send_letter(data["missionData"]["missionName"]);
    		end



    2. Substitute:

    	state run begin
    		when login or enter begin

    2. With:

    	state run begin
    		when letter begin

     

    3. Substitute:

    	state reward begin
    		when login or enter begin

    3. With:

    	state reward begin
    		when letter begin

     

    4. Substitute:

    			set_state("done");
    		end
    	end
    	
    	state done begin
    		when login or enter begin
    			clear_letter();
    			q.done();
    		end
    	end

    4. With:

    			clear_letter();
    			set_state("done");
    		end
    	end
    	
    	state done begin
    	end
    end

     

    • Metin2 Dev 1
    • Good 1
    • Love 1
  9. 2 hours ago, SlayerPro said:

    i add it and nothing happens ingame even if i made new character and i did add a level for the quest it just not working 

     

     

     

     

     i added you thank you guys in advance ❤️ 

      Hide contents
    SYSERR: Jul 11 15:05:33 :: RunState: LUA_ERROR: [string "lvl_110"]:1: attempt to index global `playerMission' (a nil value)
    SYSERR: Jul 11 15:05:33 :: WriteRunningStateToSyserr: LUA_ERROR: quest lvl_110.start click
    SYSERR: Jul 11 15:07:59 :: RunState: LUA_ERROR: [string "lvl_110"]:1: attempt to index global `playerMission' (a nil value)
    SYSERR: Jul 11 15:07:59 :: WriteRunningStateToSyserr: LUA_ERROR: quest lvl_110.start click
    SYSERR: Jul 11 15:08:50 :: RunState: LUA_ERROR: [string "lvl_110"]:1: attempt to index global `playerMission' (a nil value)
    SYSERR: Jul 11 15:08:50 :: WriteRunningStateToSyserr: LUA_ERROR: quest lvl_110.start click
    SYSERR: Jul 11 15:09:16 :: RunState: LUA_ERROR: [string "lvl_110"]:4: attempt to index global `playerMission' (a nil value)
    SYSERR: Jul 11 15:09:16 :: WriteRunningStateToSyserr: LUA_ERROR: quest lvl_110.start click
    SYSERR: Jul 11 15:09:43 :: RunState: LUA_ERROR: [string "lvl_110"]:1: attempt to index global `playerMission' (a nil value)
    SYSERR: Jul 11 15:09:43 :: WriteRunningStateToSyserr: LUA_ERROR: quest lvl_110.start click
    SYSERR: Jul 11 15:11:21 :: RunState: LUA_ERROR: [string "lvl_110"]:1: attempt to index global `playerMission' (a nil value)
    SYSERR: Jul 11 15:11:21 :: WriteRunningStateToSyserr: LUA_ERROR: quest lvl_110.start click
    SYSERR: Jul 11 15:24:59 :: RunState: LUA_ERROR: [string "lvl_110"]:4: attempt to index global `playerMission' (a nil value)
    SYSERR: Jul 11 15:24:59 :: WriteRunningStateToSyserr: LUA_ERROR: quest lvl_110.start click
    SYSERR: Jul 11 15:26:43 :: RunState: LUA_ERROR: [string "lvl_110"]:1: attempt to index global `playerMission' (a nil value)
    SYSERR: Jul 11 15:26:43 :: WriteRunningStateToSyserr: LUA_ERROR: quest lvl_110.start click
    SYSERR: Jul 11 15:38:11 :: RunState: LUA_ERROR: [string "lvl_110"]:1: attempt to index global `playerMission' (a nil value)
    SYSERR: Jul 11 15:38:11 :: WriteRunningStateToSyserr: LUA_ERROR: quest lvl_110.start click

     

     

    Your quest is called "lvl_110", therefore function calls refer to that "class".
    You have 2 solutions:

    1. Substitute all "playerMission." occurrences with "lvl_110."
    2. Call the quest "playerMission" instead of "lvl_110"

    But I assume there's a reason why you called the quest "lvl_110", so the first option is the go-to.

    • Love 1
  10. 3 hours ago, SlayerPro said:

     

     

     

     

    i like the coding and i install it but when i login ingame i see nothing . only blacksmith has .chat 

    https://metin2.download/picture/ZfdmIbf33NPqs5WfNFlrYi6i47kGW5Vy/.jpg

     

    i just changed the reward and required mob

    here is  a sample of my quest 

     

    quest lvl_110 begin
    	state start begin
    		function returnData()
    			local data = {
    				["missionData"] = {["missionName"] = "Player Mission I", ["missionFlag"] = "playerMissionKill"},
    				
    				["timeToComplete"] = {true, time_min_to_sec(60)},
    				["requireData"] = {{6856, 5}, {6895, 5}},
    				
    				["playerRewards"] = {["itemVnum"] = {83006, 30962, 30334}, ["itemCount"] = {1, 1, 1}}
    			};
    			
    			return data;
    		end
    		
    		function initializeData()
    			local data = playerMission.returnData();
    			
    			for index in data["requireData"] do
    				local strFlag = string.format("%s_%d", data["missionData"]["missionFlag"], data["requireData"][index][1]);
    				pc.setqf(strFlag, data["requireData"][index][2]);
    			end
    			
    			if (data["timeToComplete"][1]) then
    				return pc.setqf("playerMissionTime", get_time() + data["timeToComplete"][2]);
    			end return true;
    		end
    		
    		function initializeInfo()
    			local data = playerMission.returnData();
    			for index in data["requireData"] do
    				local strFlag = string.format("%s_%d", data["missionData"]["missionFlag"], data["requireData"][index][1]);
    				q.set_counter(string.format("Remaining %s:", mob_name(data["requireData"][index][2])), pc.getqf(strFlag));
    			end
    			
    			if (data["timeToComplete"][1]) then
    				if (pc.getqf("playerMissionTime") < get_time()) then
    					return false;
    				end
    				q.set_clock("Remaining Time:", pc.getqf("playerMissionTime") - get_time());
    			end
    			
    			return true;
    		end
    		
    		function isKillableMonster()
    			local data = playerMission.returnData();
    			local npcRace = npc.get_race();
    			
    			for index in data["requireData"] do
    				if (data["requireData"][index][1] == npcRace) then
    					return true;
    				end
    			end return false;
    		end
    		
    		when login or enter or levelup begin
    			local data = playerMission.returnData();
    			send_letter(data["missionData"]["missionName"]);
    		end
    		
    		when button or info begin
    			local data = playerMission.returnData();
    			
    			say_title(string.format("%s:[ENTER]", data["missionData"]["missionName"]))
    			say("Talk to Blacksmith if you want to accept the mission.")
    		end
    		
    		when 20016.chat."The Player Mission" begin
    			say_title(string.format("%s:[ENTER]", mob_name(npc.get_race())))
    			say("Do you wish to accept the mission?")
    			if (select("Yes, i do", "No, i don't") == 1) then
    				playerMission.initializeData();
    				set_state("run");
    				say("Your mission has been updated.")
    			end
    		end
    	end
    	
    	state run begin
    		when login or enter begin
    			local data = playerMission.returnData();
    			local initializeMissionInfo = playerMission.initializeInfo();
    			
    			if (not initializeMissionInfo) then
    				syschat(string.format("You failed mission: %s.", data["missionData"]["missionName"]))
    				set_state("done");
    				return;
    			end
    			
    			send_letter(data["missionData"]["missionName"]);
    		end
    		
    		when button or info begin
    			local data = playerMission.returnData();
    			
    			say_title(data["missionData"]["missionName"])
    			if (pc.getqf("playerMissionTime") < get_time()) then
    				syschat(string.format("You failed mission: %s.", data["missionData"]["missionName"]))
    				set_state("done");
    				return;
    			end
    			
    			say("You still must kill:[ENTER]")
    			for index in data["requireData"] do
    				local strFlag = string.format("%s_%d", data["missionData"]["missionFlag"], data["requireData"][index][1]);
    				if (pc.getqf(strFlag) > 0) then
    					say_reward(string.format("- %s - x%d", mob_name(data["requireData"][index][1]), pc.getqf(strFlag)))
    				end
    			end
    		end
    		
    		when kill with playerMission.isKillableMonster() begin
    			local data = playerMission.returnData();
    			local npcRace = npc.get_race();
    			local isMissionOver = true;
    			
    			if (pc.getqf("playerMissionTime") < get_time()) then
    				syschat(string.format("You failed mission: %s.", data["missionData"]["missionName"]))
    				set_state("done");
    				return;
    			end
    			
    			local npcFlag = string.format("%s_%d", data["missionData"]["missionFlag"], npcRace);
    			if (pc.getqf(npcFlag) < 1) then
    				return;
    			end
    			
    			pc.setqf(npcFlag, pc.getqf(npcFlag) - 1);
    			for index in data["requireData"] do
    				local strFlag = string.format("%s_%d", data["missionData"]["missionFlag"], data["requireData"][index][1]);
    				
    				if (pc.getqf(strFlag) > 0) then
    					isMissionOver = false;
    				end
    			end
    			
    			if (isMissionOver) then
    				set_state("reward");
    			end
    		end
    	end
    	
    	state reward begin
    		when login or enter begin
    			send_letter("*Player Mission Reward");
    		end
    		
    		when button or info begin
    			local data = playerMission.returnData();
    			
    			say_title("*Player Mission Reward")
    			say("Go back to Blacksmith to take your reward.")
    		end
    		
    		when 20016.chat."Your reward!" begin
    			local data = playerMission.returnData();
    			
    			say_title(string.format("%s:[ENTER]", mob_name(npc.get_race())))
    			say("You have succesfully completed the mission.[ENTER]Your reward is:")
    			
    			for index in data["playerRewards"]["itemVnum"] do
    				pc.give_item2(data["playerRewards"]["itemVnum"][index], data["playerRewards"]["itemCount"][index]);
    				say_reward(string.format("- %s - %d", item_name(data["playerRewards"]["itemVnum"][index]), data["playerRewards"]["itemCount"][index]))
    			end
    			
    			set_state("done");
    		end
    	end
    	
    	state done begin
    		when login or enter begin
    			clear_letter();
    			q.done();
    		end
    	end
    end

     

    Hi, can you explain the problem you get more thoroughly?

    • Love 1
  11. 3 hours ago, Braxy said:

     

    matching monster level (best chances [200]) a bit off monster level (184)
    iDeltaPercent 200, iRandRange 2000000      iDeltaPercent 184, iRandRange 2000000
    iPercent 20000000, iRandRange 2000000      iPercent 18400000, iRandRange 2000000 -- 1000 (mob_drop_chance)
    iPercent 20000000, iRandRange 2000000      iPercent 18400000, iRandRange 2000000 -- 1000 (mob_drop_chance)
    iPercent 20000000, iRandRange 2000000      iPercent 18400000, iRandRange 2000000 -- 1000 (mob_drop_chance)
    iPercent 400000, iRandRange 2000000        iPercent 368000, iRandRange 2000000 -- 20 (mob_drop_chance)
    iPercent 400000, iRandRange 2000000        iPercent 368000, iRandRange 2000000 -- 20 (mob_drop_chance)
    iPercent 140000, iRandRange 2000000        iPercent 128800, iRandRange 2000000 -- 7 (mob_drop_chance)

    I'm pretty sure 100% means "1000" in mob_drop_item not 400 ^^

    Test drop:

    Quote
    Group	Metin_Jeon-Un
    {
    	Mob	8027
    	Type	drop
    	1	151	1	5 --Ghost Fang Blade+1
    	2	152	1	15 --Ghost Fang Blade+2
    	3	153	1	10 --Ghost Fang Blade+3
    	4	5091	1	5 --Thunder Bird Bell+1
    	5	5092	1	15 --Thunder Bird Bell+2
    	6	5093	1	10 --Thunder Bird Bell+3
    	7	141	1	5 --Battle Sword+1
    	8	142	1	15 --Battle Sword+2
    	9	143	1	10 --Battle Sword+3
    	10	3131	1	5 --Partisan+1
    	11	3132	1	15 --Partisan+2
    	12	3133	1	10 --Partisan+3
    	13	1101	1	5 --Dragon Knife+1
    	14	1102	1	15 --Dragon Knife+2
    	15	1103	1	10 --Dragon Knife+3
    	16	7131	1	5 --Heavenly Bird Fan+1
    	17	7132	1	15 --Heavenly Bird Fan+2
    	18	7133	1	10 --Heavenly Bird Fan+3
    	19	2141	1	5 --Yellow Dragon Bow+1
    	20	2142	1	15 --Yellow Dragon Bow+2
    	21	2143	1	10 --Yellow Dragon Bow+3
    	22	11681	1	5 --Spirit Plate Armour+1
    	23	11682	1	15 --Spirit Plate Armour+2
    	24	11683	1	10 --Spirit Plate Armour+3
    	25	11881	1	5 --Baroness Dress+1
    	26	11882	1	15 --Baroness Dress+2
    	27	11883	1	10 --Baroness Dress+3
    	28	11481	1	5 --Fuchsia Suit+1
    	29	11482	1	15 --Fuchsia Suit+2
    	30	11483	1	10 --Fuchsia Suit+3
    	31	11281	1	5 --Dragon God Armour+1
    	32	11282	1	15 --Dragon God Armour+2
    	33	11283	1	10 --Dragon God Armour+3
    	34	17164	1	9 --Crystal Earrings+4
    	35	17165	1	24 --Crystal Earrings+5
    	36	17166	1	14 --Crystal Earrings+6
    	37	16164	1	9 --Crystal Necklace+4
    	38	16165	1	24 --Crystal Necklace+5
    	39	16166	1	14 --Crystal Necklace+6
    	40	14164	1	9 --Crystal Bracelet+4
    	41	14165	1	24 --Crystal Bracelet+5
    	42	14166	1	14 --Crystal Bracelet+6
    	43	70012	1	15 --Goddess Tear
    	44	70038	20	15 --Bravery Cape
    	45	25040	1	21 --Blessing Scroll
    	46	70048	1	20 --Cloak of Secrecy
    	47	70037	1	25 --Book of Forgetfulness
    	48	70014	1	25 --Blood Pill
    	49	72006	1	20 --Thief's Gloves
    	50	70005	1	20 --Experience Ring (1h)
    	51	27002	50	100 --Red Potion (M)
    	52	27003	30	200 --Red Potion (L)
    	53	27005	30	100 --Blue Potion (M)
    	54	27006	20	150 --Blue Potion (L)
    	55	50300	1	400 --Skill Book
    	56	70014	1	1 --Blood Pill
    	57	70037	1	1 --Book of Forgetfulness
    	58	100300	1	1 --Green Dragon Bean
    	59	6040	1	5 --Griffon Claw+0
    	60	6041	1	15 --Griffon Claw+1
    	61	6042	1	10 --Griffon Claw+2
    	62	21061	1	5 --Firellium Plate Armour+1
    	63	21062	1	15 --Firellium Plate Armour+2
    	64	21063	1	10 --Firellium Plate Armour+3
    }

    Drop debug:

    Quote
    Jun 29 11:50:55 :: Drop money : Attacker Kill
    Jun 29 11:50:55 :: ====== Drops ====== ##
    Jun 29 11:50:55 :: 	 iDeltaPercent: 100 ##
    Jun 29 11:50:55 :: 	 iRandRange: 4000000 ##
    Jun 29 11:50:55 :: > Drop item group ##
    Jun 29 11:50:55 :: 	 Ghost Fang Blade+1: 1.250000%. (iPct: 50000, Rnd: 1438690) ##
    Jun 29 11:50:55 :: 	 Ghost Fang Blade+2: 3.750000%. (iPct: 150000, Rnd: 3711975) ##
    Jun 29 11:50:55 :: 	 Ghost Fang Blade+3: 2.500000%. (iPct: 100000, Rnd: 732366) ##
    Jun 29 11:50:55 :: 	 Thunder Bird Bell+1: 1.250000%. (iPct: 50000, Rnd: 1230790) ##
    Jun 29 11:50:55 :: 	 Thunder Bird Bell+2: 3.750000%. (iPct: 150000, Rnd: 3170354) ##
    Jun 29 11:50:55 :: 	 Thunder Bird Bell+3: 2.500000%. (iPct: 100000, Rnd: 1623349) ##
    Jun 29 11:50:55 :: 	 Battle Sword+1: 1.250000%. (iPct: 50000, Rnd: 2255576) ##
    Jun 29 11:50:55 :: 	 Battle Sword+2: 3.750000%. (iPct: 150000, Rnd: 1396395) ##
    Jun 29 11:50:55 :: 	 Battle Sword+3: 2.500000%. (iPct: 100000, Rnd: 2512088) ##
    Jun 29 11:50:55 :: 	 Partisan+1: 1.250000%. (iPct: 50000, Rnd: 1549554) ##
    Jun 29 11:50:55 :: 	 Partisan+2: 3.750000%. (iPct: 150000, Rnd: 230977) ##
    Jun 29 11:50:55 :: 	 Partisan+3: 2.500000%. (iPct: 100000, Rnd: 499849) ##
    Jun 29 11:50:55 :: 	 Dragon Knives+1: 1.250000%. (iPct: 50000, Rnd: 292434) ##
    Jun 29 11:50:55 :: 	 Dragon Knives+2: 3.750000%. (iPct: 150000, Rnd: 2483301) ##
    Jun 29 11:50:55 :: 	 Dragon Knives+3: 2.500000%. (iPct: 100000, Rnd: 2389455) ##
    Jun 29 11:50:55 :: 	 Heavenly Bird Fan+1: 1.250000%. (iPct: 50000, Rnd: 335268) ##
    Jun 29 11:50:55 :: 	 Heavenly Bird Fan+2: 3.750000%. (iPct: 150000, Rnd: 181346) ##
    Jun 29 11:50:55 :: 	 Heavenly Bird Fan+3: 2.500000%. (iPct: 100000, Rnd: 2035073) ##
    Jun 29 11:50:55 :: 	 Yellow Dragon Bow+1: 1.250000%. (iPct: 50000, Rnd: 2044599) ##
    Jun 29 11:50:55 :: 	 Yellow Dragon Bow+2: 3.750000%. (iPct: 150000, Rnd: 1595131) ##
    Jun 29 11:50:55 :: 	 Yellow Dragon Bow+3: 2.500000%. (iPct: 100000, Rnd: 356197) ##
    Jun 29 11:50:55 :: 	 Spirit Plate Armour+1: 1.250000%. (iPct: 50000, Rnd: 1061675) ##
    Jun 29 11:50:55 :: 	 Spirit Plate Armour+2: 3.750000%. (iPct: 150000, Rnd: 1889814) ##
    Jun 29 11:50:55 :: 	 Spirit Plate Armour+3: 2.500000%. (iPct: 100000, Rnd: 1353407) ##
    Jun 29 11:50:55 :: 	 Baroness Dress+1: 1.250000%. (iPct: 50000, Rnd: 273977) ##
    Jun 29 11:50:55 :: 	 Baroness Dress+2: 3.750000%. (iPct: 150000, Rnd: 3305068) ##
    Jun 29 11:50:55 :: 	 Baroness Dress+3: 2.500000%. (iPct: 100000, Rnd: 2582783) ##
    Jun 29 11:50:55 :: 	 Fuchsia Suit+1: 1.250000%. (iPct: 50000, Rnd: 878985) ##
    Jun 29 11:50:55 :: 	 Fuchsia Suit+2: 3.750000%. (iPct: 150000, Rnd: 226598) ##
    Jun 29 11:50:55 :: 	 Fuchsia Suit+3: 2.500000%. (iPct: 100000, Rnd: 3818256) ##
    Jun 29 11:50:55 :: 	 Dragon God Armour+1: 1.250000%. (iPct: 50000, Rnd: 745464) ##
    Jun 29 11:50:55 :: 	 Dragon God Armour+2: 3.750000%. (iPct: 150000, Rnd: 1665287) ##
    Jun 29 11:50:55 :: 	 Dragon God Armour+3: 2.500000%. (iPct: 100000, Rnd: 3530231) ##
    Jun 29 11:50:55 :: 	 Crystal Earrings+4: 2.250000%. (iPct: 90000, Rnd: 1994181) ##
    Jun 29 11:50:55 :: 	 Crystal Earrings+5: 6.000000%. (iPct: 240000, Rnd: 3412428) ##
    Jun 29 11:50:55 :: 	 Crystal Earrings+6: 3.500000%. (iPct: 140000, Rnd: 2700584) ##
    Jun 29 11:50:55 :: 	 Crystal Necklace+4: 2.250000%. (iPct: 90000, Rnd: 3617530) ##
    Jun 29 11:50:55 :: 	 Crystal Necklace+5: 6.000000%. (iPct: 240000, Rnd: 1668003) ##
    Jun 29 11:50:55 :: 	 Crystal Necklace+6: 3.500000%. (iPct: 140000, Rnd: 613330) ##
    Jun 29 11:50:55 :: 	 Crystal Bracelet+4: 2.250000%. (iPct: 90000, Rnd: 2645969) ##
    Jun 29 11:50:55 :: 	 Crystal Bracelet+5: 6.000000%. (iPct: 240000, Rnd: 3733908) ##
    Jun 29 11:50:55 :: 	 Crystal Bracelet+6: 3.500000%. (iPct: 140000, Rnd: 1360658) ##
    Jun 29 11:50:55 :: 	 Goddess Tear: 3.750000%. (iPct: 150000, Rnd: 3145818) ##
    Jun 29 11:50:55 :: 	 Bravery Cape: 3.750000%. DROP! (iPct: 150000, Rnd: 26341) ##
    Jun 29 11:50:55 :: 	 Blessing Scroll: 5.250000%. (iPct: 210000, Rnd: 1535272) ##
    Jun 29 11:50:55 :: 	 Cloak of Secrecy: 5.000000%. (iPct: 200000, Rnd: 361609) ##
    Jun 29 11:50:55 :: 	 Book of Forgetfulness: 6.250000%. (iPct: 250000, Rnd: 541656) ##
    Jun 29 11:50:55 :: 	 Blood Pill: 6.250000%. DROP! (iPct: 250000, Rnd: 86696) ##
    Jun 29 11:50:55 :: 	 Thief's Gloves: 5.000000%. (iPct: 200000, Rnd: 2136786) ##
    Jun 29 11:50:55 :: 	 Experience Ring (1h): 5.000000%. (iPct: 200000, Rnd: 442892) ##
    Jun 29 11:50:55 :: 	 Red Potion (M): 25.000000%. (iPct: 1000000, Rnd: 3984234) ##
    Jun 29 11:50:55 :: 	 Red Potion (L): 50.000000%. DROP! (iPct: 2000000, Rnd: 542952) ##
    Jun 29 11:50:55 :: 	 Blue Potion (M): 25.000000%. DROP! (iPct: 1000000, Rnd: 258210) ##
    Jun 29 11:50:55 :: 	 Blue Potion (L): 37.500000%. DROP! (iPct: 1500000, Rnd: 379080) ##
    Jun 29 11:50:55 :: 	 Skill Book: 100.000000%. DROP! (iPct: 4000000, Rnd: 590968) ##
    Jun 29 11:50:55 :: 	 Blood Pill: 0.250000%. (iPct: 10000, Rnd: 393191) ##
    Jun 29 11:50:55 :: 	 Book of Forgetfulness: 0.250000%. (iPct: 10000, Rnd: 2185033) ##
    Jun 29 11:50:55 :: 	 Green Dragon Bean: 0.250000%. (iPct: 10000, Rnd: 2944501) ##
    Jun 29 11:50:55 :: 	 웅조파+0: 1.250000%. (iPct: 50000, Rnd: 527072) ##
    Jun 29 11:50:55 :: 	 웅조파+1: 3.750000%. (iPct: 150000, Rnd: 3853035) ##
    Jun 29 11:50:55 :: 	 웅조파+2: 2.500000%. DROP! (iPct: 100000, Rnd: 74182) ##
    Jun 29 11:50:55 :: 	 Firellium Plate Armour+1: 1.250000%. (iPct: 50000, Rnd: 3586943) ##
    Jun 29 11:50:55 :: 	 Firellium Plate Armour+2: 3.750000%. (iPct: 150000, Rnd: 1434840) ##
    Jun 29 11:50:55 :: 	 Firellium Plate Armour+3: 2.500000%. (iPct: 100000, Rnd: 2835209) ##

    In conclusion: Go back to J4M

    spacer.png

    • kekw 4
    • Scream 1
    • Lmao 1
  12. 2 hours ago, Natox said:

    Cause when i have 6 drop on metinstone if i have 2 skillbook (100%) with 4 objects 60 / 60 / 40 / 20 i not drop a skillbook or just 1

    That's why I'm asking for this solution and it will allow me to have a better rate

    What are you even talking about, drop%s are not adding up to 100. 100% is 400.

     

    Group	Metin_of_Combat
    {
    	Mob	8002
    	Type	drop
    	1	5000	1	20 --Copper Bell+0 -- 5%
    	2	11210	1	20 --Iron Plate Armour+0 -- 5%
    	3	11410	1	20 --Ivory Suit+0 -- 5%
    	4	11610	1	20 --Storm Plate Armour+0 -- 5%
    	5	11810	1	20 --Turquoise Clothing+0 -- 5%
    	6	27002	50	100 --Red Potion (M) -- 25%
    	7	27003	30	50 --Red Potion (L) -- 12.5%
    	8	27005	30	50 --Blue Potion (M) -- 12.5%
    	9	27006	20	50 --Blue Potion (L) -- 12.5%
    	10	50300	1	400 --Skill Book --100%
    }

    Ignore the comments, they're not fully accurate, but this is a perfectly valid drop from a metinstone.

    • Good 1
  13. 5 minutes ago, Draveniou1 said:
        if (single)
            if (AFFECT_REVIVE_INVISIBLE != pkAff->dwType)
                ComputePoints();
            else
                UpdatePacket();
        else
            UpdatePacket();

     

    Why are there 2 NULL? if it is suddenly activated to true what will happen?

    wdym?

    As you can read, the change I made adds an arg to the RemoveAffect function.

    The purpose of this arg is to make the func call behave differently based on an arbitrary condition, in this case we need it to not execute the ComputePoints() call inside the function, cause we need to only call it once AFTER all the good/bad affects have been cleared, so we do that at the end of their respecting funcs.

    I have already stated why we need to do that in the topic, it's cause ComputePoints() is a "heavy" function, and it will lag a bit by itself already, so calling it once per affect to clear is not only useless but is also what causes the lag we're talking about.

    • Love 1
  14. 1 minute ago, Draveniou1 said:

    i know your fix is ok as we give a chance to add people who have had such problems to their files 

    some don't want mainline or main sources

    I never said that your solution is not good I have seen these errors on 20 small servers Also the solution I suggested has already helped some people

    Read my message again, if possible.

    • Good 1
  15. 13 minutes ago, Draveniou1 said:

    You didn't understand, for example some serverfiles don't accept your fix 

    I have added your fix to some server files and there are problems 

    check video for you see problem .gif

     

    this problem exists in many servers 

    but your solution is still the best as long as you find the serverfiles to match it

    The change I posted has been tested on default mainlines, like all the releases I made.

    Also, I believe the code I changed is the same on every rev that has been leaked 9 years ago.

    In short, there's nothing wrong with my release.

     

    By the gif you just sent I believe the updatepacket is failing.

    Try to redo my changes except inside the RemoveAffect function use this code instead of the one you find in the release.
     

        if (single)
            if (AFFECT_REVIVE_INVISIBLE != pkAff->dwType)
                ComputePoints();
            else
                UpdatePacket();
        else
            UpdatePacket();

     

  16. 1 minute ago, Draveniou1 said:

    i have your fix  i have  problem's

    1o problem = warrior skill not clear  why?

    I made 2 .gifs after coding the fix, you can find them in the topic.

    It shows that warrior skills clear just fine.

×
×
  • 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.