Metin2 Automatic Mount Script
The purpose of this script is to provide a little more usability to M2Heat, to cut text using less time than the mounts, and to prevent the chore of closing the bot, getting on the mount and opening the bot again while cutting text (because there are no shortcut keys in the cheat and this process is a bit troublesome), this script.
Use:
Just put the script in the scripts folder in the folder where M2Heat is located.
What you need to do is to cut the text using the following:
Bot is a very easy way to do this.
Attack Hack tiếp theo là một hành động nhỏ.
There must be đá among the targets to be attacked.
There must be at least 1 metin stone within the set range.
After these conditions are met, the bot will attack the metin anyway, at this time this script will come into play, stop the bot, use the mount from the inventory and continue the bot. If there is no mount in the inventory, there is no point in using it anyway, but if you use it, nothing will happen, it will only constantly check if there is a mount in your inventory and if you get a new mount, it will start normally.
The script contains the VNUM value of most mount seals, if there is an incorrect VNUM or if your mount does not have a VNUM value, you can find it on the internet and add it.
Since M2Heat only supports using items from the inventory, unfortunately I cannot add something like getting off the mount immediately after the text is cut to the script.
Python
import heat
import const
import runner
import bot_state_manager
all_seals = [31017, 38200, 38201, 41334, 41335, 41340, 53002, 53003, 53007, 53008, 53009, 53010, 53011, 53012, 53013, 53014, 53015, 53016, 53017, 53018, 53019, 53020, 53022, 53023, 53222, 53223, 53224, 53225, 53226, 53227, 53228, 53229, 53233, 53234, 53235, 53242, 53243, 53244, 53245, 53246, 53247, 53248, 53249, 53250, 53251, 53256, 53260, 53261, 53262, 53263, 53264, 53301, 53302, 71114, 71115, 71116, 71117, 71118, 71119, 71120, 71121, 71125, 71126, 71127, 71128, 71131, 71132, 71133, 71134, 71137, 71138, 71139, 71140, 71141, 71142, 71164, 71165, 71166, 71171, 71172, 71177, 71182, 71183, 71184, 71185, 71186, 71187, 71192, 71193, 71197, 71198, 71222, 71223, 71224, 71225, 71226, 71227, 71228, 71229, 71231, 71232, 71234, 71250, 71251, 52000, 52001, 52002, 52003, 52004, 52005, 52006, 52007, 52008, 52009, 52010, 52011, 52012, 52013, 52014, 52016, 52017, 52018, 52019, 52022, 52023, 52024, 52025, 52027, 52028, 52029, 52030, 52031, 52032, 52101, 52102, 52103, 52104, 52105, 52106, 52107, 52108, 52109, 52110, 52111, 52112, 52113, 52114, 52115, 52116, 52117, 52118, 52119, 52120, 52121, 52122, 52123, 52124, 52125, 52126, 52127, 52128, 52129, 52130, 52131, 52132, 52133, 52134, 52135, 52136, 52137, 52138, 52139, 52140, 52141, 52142, 52143, 52144, 52145, 52146, 52147, 52148, 52149, 52150, 52151, 52152, 52153, 52154, 52155, 52156, 52157, 52158, 52159, 52160, 52161, 52162, 52163, 52164, 52165, 52166, 52167, 52168, 52169, 52170, 52171, 52172, 52173, 52174, 52175, 52176, 52177, 52178, 52179, 52180, 52181, 52182, 52183, 52184, 52185, 52186, 52187, 52188, 52189, 52190, 52191, 52192, 52193, 52194, 52195, 52196, 52197, 52198, 52199, 52200, 52201, 52202, 52203, 52204, 52205, 52206, 52207, 52208, 52209, 52210, 52211, 52212, 52213, 52214, 52215, 52216, 52217, 52218, 52219, 52220, 61610, 61611, 56004, 56005, 56006, 56007, 56008, 56009, 56010, 56011, 56012, 56013, 56014, 56015, 56016, 56017, 56018, 56019, 56020, 56021, 56022, 56023, 56024, 56025, 56026, 56027, 56028, 56029, 56030, 56031, 56032, 56033, 56034, 56035, 56036, 56037, 71233, 53001, 40436, 40437, 40438, 40439, 40440, 40441, 40496, 40497, 56038, 56039, 56040, 56041, 56042, 56043, 56044, 56045, 56046, 56047, 56048, 56049, 56050, 56051, 56052, 56053, 56054, 56056, 56057, 56058, 56059, 56060, 56061, 56062, 56063, 56064, 56065, 56066, 56067, 56068, 56069, 56075, 56076, 56077, 56078, 56079, 40711]
bot_state = bot_state_manager.instance
def check_mount():
if heat.network.phase() != "Game":
return
seal = None
for slot in range(180):
index = heat.player.get_item_index(const.INVENTORY, slot)
if index == 0:
continue
if index in all_seals:
seal = slot
break
costume = None
for slot in range(10):
index = heat.player.get_item_index(const.COSTUME, slot)
if index == 0:
continue
if index in all_seals:
costume = slot
break
if not seal and not costume:
return
config = heat.config_profile_manager.current
botting = config.botting
distance = config.distance
attack_hack = config.attack_hack
attack_types = config.attack_types
if not (botting and attack_hack and attack_types >= 32):
return
stones = heat.mobs(const.MOBS_STONE, distance)
if len(stones) <= 0:
return
if not costume:
bot_state.request_stop()
if bot_state.is_stopped():
heat.network.item_use(seal)
if costume and bot_state.is_stopped():
bot_state.request_resume()
job = runner.instance.add(check_mount, interval=500)
Have fun 🙂