-
Posts
1297 -
Joined
-
Last visited
-
Days Won
38 -
Feedback
100%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Posts posted by Syreldar
-
-
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)
-
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.
-
Just one piece of advice: Nobody works on promises.
By writing
QuoteIM 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.
- 1
-
Are you the server's admin and trying to implement this feature, or..?
-
31/08/2023:
- Structural update for ITEMS and DUNGEON_DATA.
-
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.
- 1
-
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.
- 1
-
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.
-
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
- 1
- 1
- 1
-
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
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.- 1
-
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?
- 1
-
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:
QuoteGroup 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:
QuoteJun 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
- 4
- 1
- 1
-
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.
- 1
-
1 minute ago, Natox said:
Its not a 100% drop, so i want add a skillbook on C++ on metinstone
You literally have a drop% arg, use it..
-
..?
Group Metin_of_Combat { Mob 8001 Type drop 1 50300 1 100 -- Skill Book }
Book drops are made via mob_drop_item.txt, the book vnum is 50300, it automatically gets its skill vnum upon creation.
-
..?
when kill with npc.is_pc() and pc.is_gm() and pc.get_map_index() == 182 begin local my_vid = pc.get_vid(); pc.select(npc.get_vid()); -- notice("You've been killed by a GM. You'll be warped to your village.") warp_to_village(); -- pc.select(my_vid); end -- when
-
-
Depending on where you inserted it, bonuses like penetrating hits could be at fault.
Be sure to place the check after bonuses such as critical and penetrating get evaluated, or simply return after setting damage to 1.
-
I solved the issue he had and updated my topic to match the change.
- 1
-
Just now, Draveniou1 said:
I will test on these now and come back with newer ones
If you have issues, contact me on discord instead of writing here. It's simpler.
- 1
-
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.
- 1
-
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.
- 1
-
13 minutes ago, Draveniou1 said:
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();
-
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.
Syreldar's quest functions
in Quests
Posted · Edited by Syreldar
26/09/2023: