Jump to content

Search the Community

Showing results for tags 'python'.

More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • Community
    • M2Dev
    • Offtopic
    • Games Talk
    • Music / Videos / Art
    • Member Representations
    • Services & Sales
  • Metin2
    • General
    • Questions and Answers
    • Frequently Asked Questions
    • Private Servers
    • Videos
  • Releases
    • General
    • Guides & HowTo
    • Tools
    • Programming & Scripts / Systems
    • Maps
    • Quests
    • Binaries & Clients / ServerFiles
    • 3D Models
    • 2D Graphics
    • Operating Systems
  • Temporary category
    • Temporary forum


There are no results to display.

There are no results to display.

Find results in...

Find results that contain...

Date Created

  • Start


Last Updated

  • Start


Filter by number of...


  • Start







Steam ID













Found 183 results

  1. Hi devs, I'd like to share a script I developed the other night whilst working on a project, this script is meant to improve the quality of life of Metin2 as often players find it hard to accurately tell the cooldown of skills and end up spamming their keyboards like many of us have. Preview: Without any further ado, let's dig right into coding this bad boy. We start with locale: Now we shall move onto root part: version 1.0 version 2.0 If you encounter any bugs or you have suggestions please let me know! Changes:
  2. Hey y'all. Question has been given, let me know.
  3. Hi there Devs, I would like to share my "little" system. If you aren't interested in the introduction/preview etc. and you just want to download it and put in to your server, just scroll down until the "[How-To] Set up" subtitle. The story Firstly let me tell this system's story. I've got an idea one year before, that it would be good if the players would be able to put their items into a "global" system where they could see the other player's items, and they could buy it for DC or gold (that time I worked with the latest vanilla core (not with the source)). Then in the following 8 days I made it (it took about 80-90 working hours). Originally the system was created for one of my friend's server. but this server has never started, and nobody used this system. After some mounts I've decided to publish it on the Hungarian forum, because it won't worth to work on it for long hours if nobody uses it and its just collecting dust on my computer. Then I've published it on the 2nd of December, 2014. After some time I've decided to translate it into English and I've got a new idea for a new feature. This feature was: the trade system (I will explain its working later). This idea inspired by one of the players (from a server where this system was able to use). He told me that it would be better if they could set the gold price via an item (what's value is very high). Then with more than 180 working hours (totally) behind my back I'm here. Overview [How-To] Set up Customizing the tradehouse Questions and Answers Notes changelog: 19th of August, 2015: I publicated the tradehouse here. my toDo list: add logging for the system (the released version don't log the actions in the tradehouse) Thanks for reading the topic, if you have any problem/remark feel free to ask it here or write me a PM. Have a good day!
  4. Hello everyone. It's a good day to share an old code with you. First of all you need to know: I don't help to install it. Don't even take the contact with me about it. The whole code is written by me, and reversed from official binaries. At the beginning do a backup for your files(srcs+pys) and READ CAREFULLY the readme. W/o brain.exe please close this tab, or your browser, thank you for your understanding. Preview: Download.exe Enjoy & #h4v3fun, pngr
  5. Intro This release will explain how to "convert" your root .py files to .c ones. Actually, Cython only converts those files to pure CPython code. Download NOTE: ALL THE FILES HAVE BEEN MOVED TO HOW-TO-CYTHON-MT2. EDIT: As requested by many people, you can download the compatible and clean official cn root dated 20131228-0034 without further edits: rootCn_20131228-0034_edit.rar uiscriptCn_20131228-0034.rar cN-serverinfo-edit.py Is Cython really worth it? Pros All the modules are compiled, and they can't be "extracted as .py" anymore.We can always disassemble the launcher with IDA, but the result will be pseudo-c code after waiting 6-8h of analyzing. Since we're not using .pyx files but directly .py ones, there's no "so much optimization".At least, 10% of performance increasing is guaranteed. Cons For testing purposes, it's heavy to maintain. Everytime you try to re-compile your root files, you should wait 5-10 minutes.You can always use the uncythonized root (.py files) when you perform tests, and compile cython whenever you will make an update in your live server. The launcher's size will increase ~10mb. You can actually pack it to save space.If you directly use a .pyd (still 10mb), the launcher's size won't increase. VideoTutorial Credits Me (lollo_9_1/martysama0134) Night (OST suggestion) Random Testers What's New:v2.0 The module's name check is now case-insensitive (colorInfo == colorinfo) Added a new function rootlib/uiscriptlib.getList() to retrieve a tuple of all the available cythonized modules. Now you can compile a uiscriptlib library from the uiscript*.py files! (implemented as __USE_EXTRA_CYTHON__) Added a sample ui.py containing the code to run uiscriptlib.
  6. Hello M2Dev, Battle Pass (9.06.2019) Description: (Click) Lucky Box - My version inspired from official servers 19.1 Update. (9.06.2019) Description: (Click) CONTACT: ● DISCORD: ZeNu#9145 ● SKYPE: devil.devil997 ● Private Message
  7. Hey, i want an phyton skript that talks to the warehouse manager pays 500 yang, chances the passwort and put a special item in the warehouse. So far so good: import player, event, net vid = player.GetTargetVID() net.SendOnClickPacket(vid) event.SelectAnswer(0, 1) event.SelectAnswer(1, 254) event.SelectAnswer(1, 0) This skript only talks the the marked npc. Im glad for any ideas
  8. https://i.gyazo.com/b72a19cfa9cbb9ad7b52342662f94e41.mp4 ### 0.1 Root / uiMessenger.py: # 1. Search: def OnLogin(self, groupIndex ... # 1. After: member.Online() self.OnRefreshList() # 1. Add: if not name in constInfo.ALREADY_NOTIFY_LIST: self.onlinePopup = uiCommon.OnlinePopup() self.onlinePopup.SetUserName(name) self.onlinePopup.SetEvent(ui.__mem_func__(self.OpenWhisper), "MOUSE_LEFT_BUTTON_UP", name) self.onlinePopup.SlideIn() constInfo.ALREADY_NOTIFY_LIST.append(name) # 1.1 After: def OnLogin(... Add: def OpenWhisper(self, eventType, userName): self.whisperButtonEvent(userName) ### 0.2 Root / constInfo.py: # 2. Add: ALREADY_NOTIFY_LIST = [] ### 0.3 Root / ui.py # 3 Search: class Board(Window): (....) # 3 REPLACE this class with: class Board(Window): CORNER_WIDTH = 32 CORNER_HEIGHT = 32 LINE_WIDTH = 128 LINE_HEIGHT = 128 LT = 0 LB = 1 RT = 2 RB = 3 L = 0 R = 1 T = 2 B = 3 BASE_PATH = "d:/ymir work/ui/pattern" IMAGES = { 'CORNER' : { 0 : "Board_Corner_LeftTop", 1 : "Board_Corner_LeftBottom", 2 : "Board_Corner_RightTop", 3 : "Board_Corner_RightBottom" }, 'BAR' : { 0 : "Board_Line_Left", 1 : "Board_Line_Right", 2 : "Board_Line_Top", 3 : "Board_Line_Bottom" }, 'FILL' : "Board_Base" } def __init__(self, layer = "UI"): Window.__init__(self, layer) self.skipMaxCheck = False self.MakeBoard() def MakeBoard(self): CornerFileNames = [ ] LineFileNames = [ ] for imageDictKey in (['CORNER', 'BAR']): for x in xrange(len(self.IMAGES[imageDictKey])): if imageDictKey == "CORNER": CornerFileNames.append("%s/%s.tga" % (self.BASE_PATH, self.IMAGES[imageDictKey][x])) elif imageDictKey == "BAR": LineFileNames.append("%s/%s.tga" % (self.BASE_PATH, self.IMAGES[imageDictKey][x])) self.Corners = [] for fileName in CornerFileNames: Corner = ExpandedImageBox() Corner.AddFlag("not_pick") Corner.LoadImage(fileName) Corner.SetParent(self) Corner.SetPosition(0, 0) Corner.Show() self.Corners.append(Corner) self.Lines = [] for fileName in LineFileNames: Line = ExpandedImageBox() Line.AddFlag("not_pick") Line.LoadImage(fileName) Line.SetParent(self) Line.SetPosition(0, 0) Line.Show() self.Lines.append(Line) self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT) self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0) self.Base = ExpandedImageBox() self.Base.AddFlag("not_pick") self.Base.LoadImage("%s/%s.tga" % (self.BASE_PATH, self.IMAGES['FILL'])) self.Base.SetParent(self) self.Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT) self.Base.Show() def __del__(self): Window.__del__(self) def SetSize(self, width, height): if not self.skipMaxCheck: width = max(self.CORNER_WIDTH*2, width) height = max(self.CORNER_HEIGHT*2, height) Window.SetSize(self, width, height) self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT) self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0) self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT) self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT) self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT) verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage) self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage) self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0) self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0) if self.Base: self.Base.SetRenderingRect(0, 0, horizontalShowingPercentage, verticalShowingPercentage) # 3 AFTER CLASS BOARD ADD THIS CLASS: class BorderB(Board): CORNER_WIDTH = 16 CORNER_HEIGHT = 16 LINE_WIDTH = 16 LINE_HEIGHT = 16 BASE_PATH = "d:/ymir work/ui/pattern" IMAGES = { 'CORNER' : { 0 : "border_b_left_top", 1 : "border_b_left_bottom", 2 : "border_b_right_top", 3 : "border_b_right_bottom" }, 'BAR' : { 0 : "border_b_left", 1 : "border_b_right", 2 : "border_b_top", 3 : "border_b_bottom" }, 'FILL' : "border_b_center" } def __init__(self): Board.__init__(self) self.eventFunc = { "MOUSE_LEFT_BUTTON_UP" : None, } self.eventArgs = { "MOUSE_LEFT_BUTTON_UP" : None, } def __del__(self): Board.__del__(self) self.eventFunc = None self.eventArgs = None def SetSize(self, width, height): Board.SetSize(self, width, height) def SetEvent(self, func, *args) : result = self.eventFunc.has_key(args[0]) if result : self.eventFunc[args[0]] = func self.eventArgs[args[0]] = args else : print "[ERROR] ui.py SetEvent, Can`t Find has_key : %s" % args[0] def OnMouseLeftButtonUp(self): if self.eventFunc["MOUSE_LEFT_BUTTON_UP"] : apply(self.eventFunc["MOUSE_LEFT_BUTTON_UP"], self.eventArgs["MOUSE_LEFT_BUTTON_UP"]) ### 0.4 Root / uiCommon.py # 4 Add this to the end of file: ### (Check if you have in this file import app ) class OnlinePopup(ui.BorderB): def __init__(self): ui.BorderB.__init__(self) self.isActiveSlide = False self.isActiveSlideOut = False self.endTime = 0 self.wndWidth = 0 self.textLine = ui.TextLine() self.textLine.SetParent(self) self.textLine.SetWindowHorizontalAlignCenter() self.textLine.SetWindowVerticalAlignCenter() self.textLine.SetHorizontalAlignCenter() self.textLine.SetVerticalAlignCenter() self.textLine.SetPosition(13, 0) self.textLine.Show() self.onlineImage = ui.ImageBox() self.onlineImage.SetParent(self) self.onlineImage.SetPosition(8, 8) self.onlineImage.LoadImage("d:/ymir work/ui/game/windows/messenger_list_online.sub") self.onlineImage.Show() def __del__(self): ui.BorderB.__del__(self) def SlideIn(self): self.SetTop() self.Show() self.isActiveSlide = True self.endTime = app.GetGlobalTimeStamp() + 5 def Close(self): self.Hide() def Destroy(self): self.Close() def SetUserName(self, name): self.textLine.SetText("Player %s is online." % str(name)) self.wndWidth = self.textLine.GetTextSize()[0] + 40 self.SetSize(self.wndWidth, 25) self.SetPosition(-self.wndWidth, wndMgr.GetScreenHeight() - 200) def OnUpdate(self): if self.isActiveSlide and self.isActiveSlide == True: x, y = self.GetLocalPosition() if x < 0: self.SetPosition(x + 4, y) if self.endTime - app.GetGlobalTimeStamp() <= 0 and self.isActiveSlideOut == False and self.isActiveSlide == True: self.isActiveSlide = False self.isActiveSlideOut = True if self.isActiveSlideOut and self.isActiveSlideOut == True: x, y = self.GetLocalPosition() if x > -(self.wndWidth): self.SetPosition(x - 4, y) if x <= -(self.wndWidth): self.isActiveSlideOut = False self.Close() ######## Please write in topic If i forgot something. ######## Images for board: https://mega.nz/#!O1ZjmQxY!tKJdWNXRP6Wgb3DGxzdFRNV9U-bfRIStwnq3ETd6gKo
  9. Introduction Hey, since I'm often asked if I can make an example for this or that in Python, I just post some of these examples in this thread from time to time. Usually they just end up in my trash (that's why the collection is small for now) but maybe it will help some of you to learn something. You are also welcome to post examples here and I will add them to the startpost. You have a wish for a certain example? Then write it in here. PS: These examples are designed very simple, so that they can be understood. Examples ui.ComoBox() ui.ScrollBar() with text ui.AniImageBox() as loading bar ui.ListBox() ui.ToggleButton() ui.RadioButtonGroup() ui.DragButton() ui.Bar(), ui.Box(), ui.Line() ui.Gauge(), ui.SliderBar() ui.TextLine(), ui.EditLine() Pagination Tabs DropDown Tree Category Navigation ListBox Search TextLineScrollable Class Collapsible window
  10. Hello devs. Here is my fix of lua color string. Look at screens. Here is the problem: And here is fixed screen: How to fix? Open uitip.py and find self.__AppendText(curTime, text) (must by Class TipBoard, not BigBoard) Repleace to: After go to last line of Class TipBoard and paste: Its all. Nothing hard. Fix by Blend.
  11. root/uiRefine.py root/constInfo.py Another idea: (you don't have to use this, is just a example, can add in tooltip where you can drop items which you need, you can add a listbox+scrollbar and send drops from server and cache it in dictionary.) [hide] [/hide]
  12. https://paste2.org/jjObstd1 Ameteur Video: https://youtu.be/UmPq8kQGSjM
  13. #Find in intrologin.py/def __OpenServerBoard(self): self.serverBoard.Show() #Add if self.idEditLine and self.idEditLine.IsFocus(): self.idEditLine.KillFocus() if self.pwdEditLine and self.pwdEditLine.IsFocus(): self.pwdEditLine.KillFocus()
  14. I have an issue about the quest window panel, if I open one from an npc, I can't click after the teleport if the window is opened at the moment of the teleport. But if I open one from the quest list (left on the screen) it won't get bugged. I create a new quest board, in ui.py. class QuestBoard(Window): CORNER_WIDTH = 64 CORNER_HEIGHT = 64 LINE_WIDTH = 64 LINE_HEIGHT = 64 BASE_WIDTH = 64 BASE_HEIGHT = 64 BOARD_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.8) LT = 0 LB = 1 RT = 2 RB = 3 L = 0 R = 1 T = 2 B = 3 def __init__(self, layer = "UI"): Window.__init__(self, layer) CornerFileNames = [ "d:/ymir work/ui/pattern/QuestBoard_Corner_"+dir+".png" for dir in ["LeftTop","LeftBottom","RightTop","RightBottom"] ] LineFileNames = [ "d:/ymir work/ui/pattern/QuestBoard_Line_"+dir+".png" for dir in ["Left","Right","Top","Bottom"] ] self.Corners = [] for fileName in CornerFileNames: Corner = ExpandedImageBox() Corner.AddFlag("attach") Corner.AddFlag("not_pick") Corner.LoadImage(fileName) Corner.SetParent(self) Corner.SetPosition(0, 0) Corner.Show() self.Corners.append(Corner) self.Lines = [] for fileName in LineFileNames: Line = ExpandedImageBox() Line.AddFlag("attach") Line.AddFlag("not_pick") Line.LoadImage(fileName) Line.SetParent(self) Line.SetPosition(0, 0) Line.Show() self.Lines.append(Line) Base = ExpandedImageBox() Base.SetParent(self) Base.AddFlag("not_pick") Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT) baseImage = "d:/ymir work/ui/pattern/QuestBoard_Base.png" Base.LoadImage(baseImage) Base.Show() self.Base = Base self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT) self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0) def __del__(self): Window.__del__(self) def SetSize(self, width, height): width = max(self.CORNER_WIDTH * 2, width) height = max(self.CORNER_HEIGHT * 2, height) Window.SetSize(self, width, height) self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT) self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0) self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT) self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT) self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT) verticalShowingPercentage = float((height - self.CORNER_HEIGHT * 2) - self.LINE_HEIGHT) / self.LINE_HEIGHT horizontalShowingPercentage = float((width - self.CORNER_WIDTH * 2) - self.LINE_WIDTH) / self.LINE_WIDTH self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage) self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage) self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0) self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0) if self.Base: verticalShowingPercentage = float((height - self.CORNER_HEIGHT * 2) - self.BASE_HEIGHT) / self.BASE_HEIGHT horizontalShowingPercentage = float((width - self.CORNER_WIDTH * 2) - self.BASE_WIDTH) / self.BASE_WIDTH self.Base.SetRenderingRect(0, 0, horizontalShowingPercentage, verticalShowingPercentage) def ShowInternal(self): self.Base.Show() for wnd in self.Lines: wnd.Show() for wnd in self.Corners: wnd.Show() def HideInternal(self): self.Base.Hide() for wnd in self.Lines: wnd.Hide() for wnd in self.Corners: wnd.Hide() elif Type == "questboard": parent.Children[Index] = QuestBoard() parent.Children[Index].SetParent(parent) self.LoadElementQuestBoard(parent.Children[Index], ElementValue, parent) And i create a new file, in uiscript. window = { "name" : "QuestDialog", "style" : ("float",),#"movable", "x" : 0, "y" : 0, "width" : 800, "height" : 450, "children" : ( { "name" : "board", "type" : "questboard", "style" : ("attach", "ignore_size",), "x" : 0, "y" : 0, "horizontal_align" : "center", "vertical_align" : "center", #"image" : "locale/de/ui/quest_board.png", "width" : 350, "height" : 350, }, ), } Thanks for the helping.
  15. Find in locale/xx/ui/loadingwindow.py: { "name" : "FullGage", "type" : "expanded_image", "x" : 40, "y" : 25, "image" : uiScriptLocale.LOCALE_UISCRIPT_PATH + "loading/gauge_full.dds", }, Add this; { "name" : "LoadingName_Text", "type" : "text", "x" : 190, "y" : -8, "text" : "", "vertical_align" : "center", }, Add in constInfo.py; loadingname = "" Find in root/introloading.py: self.loadingGage=self.GetChild("FullGage") Add this; self.loadingName_txt=self.GetChild("LoadingName_Text") Find: def __SetProgress(self, p): Change like this; def GetChName(self, p): import constInfo text = constInfo.loadingname uzunluk = len(text) asd = uzunluk*p/100 return text[0:asd] def __SetProgress(self, p): if self.loadingGage: self.loadingGage.SetPercentage(2+98*p/100, 100) name = self.GetChName(2+98*p/100) self.loadingName_txt.SetText(name) Last one if you use the official pack introselect(unpacked 2015 & 2018 packs), use this: If you use the fake official introselect or old introselet, use this:
  16. I have already shared my “LocaleStringBuilder” (locale_string.txt) translate script here on one of the topics but this time I also created for the quests (translate.lua) “LocaleQuestBuilder”. Now you can find them both on the same repository. Repository https://github.com/Owsap/LocaleString-LocaleQuest-Builder Information All the strings in locale_string.txt and locale_quest.txt are from the official v19.6.15 patch. In order to run the tools, you will need Python2. https://www.python.org/download/releases/2.7/ Hope it helps, see ya around...
  17. There are a lot of people which had problem with localeInfo because korean-characters and bad encoding, there's a clean file with refactored code. Removed all the code which isn't used like korean characters < bad encoding [runmain error / crash](editors problem) and more checks. Removed over 500 lines unused. Removed function mapping(**kwargs) and use constructor of dict > dict(**kwarg) which is same (**kwarg let you take arbitrary number of keyword arguments). Removed function CutMoneyString because is used just when locale is HongKong, CIBN. Removed check IsYMIR from function LoadLocaleData which load locale as locale/ymir or locale/we_korea. Removed GUILD_MARK_NOT_ENOUGH_LEVEL, GUILD_HEADQUARTER, GUILD_FACILITY, GUILD_OBJECT, MAP_TRENT02, MAP_WL, MAP_NUSLUCK, MAP_TREE2, LOGIN_FAILURE_WEB_BLOCK, LOGIN_FAILURE_BLOCK_LOGIN, CHANNEL_NOTIFY_FULL, now they're readed directly from locale_game.txt. Removed declared global variables. Removed checks for declaring LOCALE_FILE_NAME, FN_GM_MARK and use current path. Removed korean functions/lists/dictionaries/characters GetAuxiliaryWordType, JOBINFO_DATA_LIST, dictSingleWord, dictDoubleWord, etc. Removed unused things: locale mapping, 'all' list etc. Removed IN_GAME_SHOP_ENABLE declaration, should be declared inside of constInfo directly. Removed checks (locale path) - 949, 932 == app.GetDefaultCodePage(), IsHONGKONG, IsNEWCIBN() or IsCIBN10() from declaration of functions like (NumberToMoneyString, NumberToSecondaryCoinString, ...),now they're declared directly from old style (IsEUROPE() and not IsWE_KOREA() and not IsYMIR()). Added custom string format(format_string, *args, **kwargs) instead of %. (old-style). Added new checks inside of LoadLocaleFile for security: Check if token3 (token1=original_string, token2=return-string, token3=function) function name exist in our types (SA, SNA, SAA, SAN) then try to call it. Check if string line have no tabs. Diff-checker: (856 Removals + 301 Additions) https://www.diffchecker.com/v1Nwk2r0 [hide]Download link[/hide]
  18. I wrote this small tool in python to manage easly the server source in a unique script to run. The tool is written in Python 2.7 but it should works fine with next version. Basically, the tool can help you to build/touch/strip without navigate in the differents paths. The tool can perform: -Build: build game/db build game/db with clean build game&db (consecutively) build game&db with clean -Touch (which dont' create new file when is used with a wrong name): perform Touch of one or more files in game/src (by inserting the names separated with a space) perform Touch of one or more files in db/src (by inserting the names separated with a space) -Strip: Strip game (by copying it) Strip db (--same) Additional features: - the tool find if a file is edited $val seconds in the future (eg. if you have set a wrong date in your compiler) and it will touch the file automatically. - the tool is written in procedural python (no OOP) so you should read easly it even if you are not an expert with python. - You can run more than one commands in sequence by separating them with one of these character : ("&&","&","|"," ",'\t',"-",',') (es. : 1&9 -> build game and strip game) - the tool can get command-line arguments to perform what you need (you could take a look under to know the command you can pass) to-know: - To run a script in python in the compiler you need to have installed Python (i recommend python27 which i can guarantee it will works). If you haven't installed python you can do it by using pkg manager (pkg install pyhon27) or ports (cd /usr/ports/lang/python27 && make config-recursive && make install clean) - If you get some problem with the script you can post a comment in this thread to know the solution, anyway it should works perfectly with martysama source (most commonly used). - To run the script you should give 7XX octal permission. - To run the script you need to go at the same path where is the script and to use "./scriptname.py" to run it. - If you are creating the scriptfile using notepad++ (or some external editor) is possible to have a problem about the EOL character (you have to set it on "Unix EOL"). - You have way to enable/disable the question "exit?" when the build fail - To run the script you should put it on "Server" folder, when you can find game, db, common, etc. For any kind of problems i recommend you to write a comment in this thread (instead of pm) because another user could get same problem and find here the solution. i hope it would be usefull. byebye COMMANDLINE ARGUMENTS SCRIPT
  19. i'm developing a python script that i'm injecting using a python loader during the client runtime. i need to import the ctypes library but I have encountered many problems first i tried to import simply from script,believing that it is included in client from ctypes import windll and I got the error: 'No module named _ctypes' after I tried to link the script with the python 2.7 libraries using: sys.path.insert(0,'C:\\Windows\\SYSTEM32\\python27.zip') sys.path.insert(0,'C:\\Python27\\DLLs') sys.path.insert(0,'C:\\Python27\\lib') sys.path.insert(0,'C:\\Python27\\lib\\plat-win') sys.path.insert(0,'C:\\Python27\\lib\\lib-tk') sys.path.insert(0,'C:\\Python27') sys.path.insert(0,'C:\\Python27\\lib\\site-packages') but i failed again, and now i got error: R6034: An application has made an attempt to load the C runtime library incorrectly. followed by: 0204 03:26:37079 :: Traceback (most recent call last): 0204 03:26:37079 :: File "<string>", line 27, in <module> 0204 03:26:37080 :: File "system.py", line 184, in __hybrid_import 0204 03:26:37080 :: File "C:\Python27\lib\ctypes\__init__.py", line 10, in <module> 0204 03:26:37080 :: 0204 03:26:37080 :: from _ctypes import Union, Structure, Array 0204 03:26:37080 :: File "system.py", line 184, in __hybrid_import 0204 03:26:37080 :: ImportError 0204 03:26:37080 :: : 0204 03:26:37080 :: DLL load failed: A dynamic link library (DLL) initialization routine failed. 0204 03:26:37081 :: I hope someone else has encountered this and can help me. Thank you in advance
  20. Hello everyone, is my first release and it is something that many people already have, but for those who do not have it, I share it. Image: click here Then, let's start. root/contsinfo.py root/interfacemodule.py root/uiinventory.py: root/uitaskbar.py: locale_xx/locale/xx/ui/taskbar.py locale_xx/locale/xx/locale_interface.txt uiscript ---> Create a new file with this name expandedmoneytaskbar.py and paste this: One extra step: locale_xx/locale/xx/ui/inventorywindow.py or uiscript/inventorywindow.py or uiscript/inventorywindowex.py If you have this error: InventoryWindow.LoadWindow.BindObject - <type 'exceptions.AttributeError'>:'ImageBox' object has no attribute 'SetEvent' Then: open root/ui.py: If you do not have ENABLE_CHEQUE_SYSTEM and ENABLE_GEM_SYSTEM in your src client, then delete those parts of the code or open: UserInterface/PythonApplicationModule.cpp: I recommend putting this as long as you have cheque_system and gem_system (otherwise the interface is a little ugly) I hope it serves some people, greetings!!
  21. Hello, came by to share something simple yet helpful for players, someone requested me this feature that allows you to input money with k format on the pick money dialog window, this will enable you to input “1kk” instead of “1000000” Hope it comes in handy for who is planning to use it. GitHub Repository: https://github.com/Owsap/USE_MONEY_K_FORMAT
  22. Hello community, this is my first tool shared on the forum, hope it helps a lot as it helped me. I know @Mali61 has already shared the tool on the forum but mine is open source so you can change what ever you want. The code is not the best but it does what it's supposed to, good uses. Credits: @WLsj24 for setting up the base locale_string.txt for translations. Git: https://github.com/Owsap/LocaleString-LocaleQuest-Builder
  23. https://github.com/blackdragonx61/Metin2-Loading-Gauge-Improvement Before: After:
  24. Hello cowboys, since i was at job and i was bored while coding in other languages, i thought would be funny if i code something in Python, so an idea came in mind, doing a general text file loader for parsing different data, with different structs, normal variables, groups and lists, like ymir idea for parsing the files (.mse, .msa, .msm, .txt like mob_drop_item.txt, group.txt, etc) This tool can be used everywhere, for metin2 or else, i wrote this from scratch using ymir idea, also you can run it in any version of Python. If you use this for metin2, change USING_METIN2_CLIENT to True. benchmark.txt TextFileLoader.py Full source repository: [hide] https://github.com/Vegas007/Text-File-Loader [/hide]
  • 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.