Jump to content

LethalArms

Active+ Member
  • Posts

    69
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by LethalArms

  1. This is basically a system to complement my other system.

    With this you one can have a custom tag name behind the name/karma of the character
    As you can see on this picture
    .png
    Behind the character name and karma there's a red tag, this is achieved using this system. I didn't make it show the level by my personal choice but you can easily add it.

    I remember seeing another post on this forum about this, but i cant find it anymore not sure why, so i'm posting my own version.

     

    InstanceBaseEffect.cpp

    Search for CInstanceBase::UpdateTextTailLevel
    Below sprintf(szText, "Lv %d", level); 
    And before CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
    Add this
    if (IsGameMaster())
      {
        const char* name = GetNameString();
        size_t len = strcspn(name, "]");
        char *result = (char *)malloc((len + 1) * sizeof(char)); // Not sure why on client side needs to be like this
        strncpy(result, name, len +1);
        result[len + 1] = '\0';
    
        const char *tagDictionary[] = { 
          "[GM]", 
          "[SA]", 
          "[GA]",
          "[DEV]"
          };
    
        //Here you can also change the color of the tag
        const char *nameDictionary[] = {
          "|cffff0000[STAFF]",
          "|cffff0000[EQUIPA]",
          "|cffff0000[STAFF2]",
          "|cffff0000[DEVELOPER]"
          };
    
        int tagIndex = -1;
        for (int i = 0; i < sizeof(tagDictionary) / sizeof(tagDictionary[0]); ++i) {
          if (strcmp(result, tagDictionary[i]) == 0) {
            tagIndex = i;
            break;
          }
        }
    
        if (tagIndex != -1){
          sprintf(szText, nameDictionary[tagIndex]);
        }
        else{
          // This is just for if the code cant find any tag, it will default to this one.
          // You can also just delete this whole else statement and it will default to the level text
          sprintf(szText, "|cffff0000[TEST]");
        }
        free(result);
    
        CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
    }

     

    And thats all xD

    • Metin2 Dev 3
    • Good 1
    • Love 1
  2. EDIT: I found a better way to search for the tag

    On char.cpp

    Instead of

    #ifdef ENABLE_CUSTOM_TAG_EFFECTS
      	const char* name = GetName();
    	char result[5];
    	strncpy(result, name, 4);
    	result[4] = '\0';

    Make it like this
     

    #ifdef ENABLE_CUSTOM_TAG_EFFECTS
      	const char* name = GetName();
    	size_t len = strcspn(name, "]");
    	char result[len+1];
    	strncpy(result, name, len +1);
    	result[len + 1] = '\0';

     

    This way you can have any tag size without having to do any modification on the code, and for what i saw on my tests, if i increased from 4 chars to 5 it will have problems, this way there is no problem at all!!!

    • Metin2 Dev 2
    • Good 1
    • Love 1
  3. So ashika posted this a few days ago

    And since i couldnt find a way to show all of them ingame depending on the GM "class" i decided to make my own, its not that hard tbh, and i think it doesnt fck anything but if u find problems let me know.

    Here's the result
    4bc9eca32446806099f7fe9482594d4b.png

    First of all, the way the system works is by the GM name, so if it has [SA] or [GM] in name it will apply the effect for it.

    Server Side
    service.h
     

    #define ENABLE_CUSTOM_TAG_EFFECTS

     

    affect.h

    in enum EAffectBits
    search for the last enum (in my case is AFF_BITS_MAX)
    and before it add
     
    #ifdef ENABLE_CUSTOM_TAG_EFFECTS
    	AFF_GA,
    	AFF_GM,
    	AFF_SA,
    #endif

     

    on char.cpp

    Search for m_afAffectFlag.Set(AFF_YMIR);
    And replace it with this
    
    #ifdef ENABLE_CUSTOM_TAG_EFFECTS
      
      			
    			const char* name = GetName();
    			
    			// This will only search for the first 4 characters if u want more for tags such as [DEV] you will need to increase this values
    			char result[5];
    			strncpy(result, name, 4);
    			result[4] = '\0';
    
    			// This is where you change the tag
    			const char *tagDictionary[] = { 
    				"[GM]", 
    				"[SA]", 
    				"[GA]"
    			};
    
    			// This is where you change the effect name to what you put on affect.h
    			const EAffectBits nameDictionary[] = {
    				AFF_GM,
    				AFF_SA,
    				AFF_GA
    			};
    
    			int tagIndex = -1;
    			for (int i = 0; i < sizeof(tagDictionary) / sizeof(tagDictionary[0]); ++i) {
    				if (strcmp(result, tagDictionary[i]) == 0) {
    					tagIndex = i;
    					break;
    				}
    			}
    
    			if (tagIndex != -1) {
    				m_afAffectFlag.Set(nameDictionary[tagIndex]);
    			}
    			else{
    				m_afAffectFlag.Set(AFF_YMIR);
    			}
    #endif

     

    On client side

    locale_inc.h

    #define ENABLE_CUSTOM_TAG_EFFECTS

     

    InstanceBaseEffect.cpp

    On CInstanceBase::__SetAffect(
    Search case AFFECT_YMIR:
    Add below
    #ifdef ENABLE_CUSTOM_TAG_EFFECTS
    		case AFFECT_GA:
    		case AFFECT_GM:
    		case AFFECT_SA:
    #endif

     

    InstanceBase.h

    Search for AFFECT_NUM
    Add before
    #ifdef ENABLE_CUSTOM_TAG_EFFECTS
    			AFFECT_GA, // 50
    			AFFECT_GM, // 51
    			AFFECT_SA, // 52
    #endif

     

    InstanceBase.cpp

    On CInstanceBase::IsGameMaster()
    Add before return false
    #ifdef ENABLE_CUSTOM_TAG_EFFECTS
    	if (m_kAffectFlagContainer.IsSet(AFFECT_GA))
    		return true;
    	if (m_kAffectFlagContainer.IsSet(AFFECT_GM))
    		return true;
    	if (m_kAffectFlagContainer.IsSet(AFFECT_SA))
    		return true;
    #endif

     

    PythonCharacterModule.cpp

    Add next to the others
    #ifdef ENABLE_CUSTOM_TAG_EFFECTS
    	PyModule_AddIntConstant(poModule, "AFFECT_GA", CInstanceBase::AFFECT_GA);
    	PyModule_AddIntConstant(poModule, "AFFECT_GM", CInstanceBase::AFFECT_GM);
    	PyModule_AddIntConstant(poModule, "AFFECT_SA", CInstanceBase::AFFECT_SA);
    #endif

     

    This file is for the Faster Loading System found here on the forum, if u dont have it, you will need to add the effect on client/root/playersettingsmodule.py, i wont provide a code for cuz i dont really have a way to test it, but shouldn't be that hard

    PythonPlayerSettingsModule.cpp

    Find {pkBase.EFFECT_REFINED + 1
    Before add
    #ifdef ENABLE_CUSTOM_TAG_EFFECTS
    		  {pkBase.EFFECT_AFFECT + CInstanceBase::AFFECT_GA, "Bip01", "d:/ymir work/effect/team_ranks/ga.mse"},
    		  {pkBase.EFFECT_AFFECT + CInstanceBase::AFFECT_GM, "Bip01", "d:/ymir work/effect/team_ranks/gm.mse"},
    		  {pkBase.EFFECT_AFFECT + CInstanceBase::AFFECT_SA, "Bip01", "d:/ymir work/effect/team_ranks/sa.mse"},
    #endif

     

    Lastly, on client you will need to add ashika files where you want (in my case i added to etc/ymir work/effect/team_ranks/ and duplicate the gm.mse file (in this case 2 times), change the name to ga.mse and sa.mse, then will open them and at the end of the file there is going to be this line

    List TextureFiles
            {
                "gamemaster.tga"
            }

    change them acording to the effect you want, on this case, for GA is gameadmin.tga, for GM is gamemaster.tga and for SA is serveradmin.tga.

     

    And thats all, hope you all like it!

     

    • Metin2 Dev 2
    • Good 1
    • Love 4
  4. 15 minutes ago, Cripplez said:

    Thank you again it is perfect!

    just need to edit: loginAccount(account_index) -> self.loginAccount(account_index)

    Fixed, glad to know it works, gonna add it on the original post thanks!

     

    Also, you can easily make it show F1 - accountid, F2-accountid on the button like some servers have

     

    on def LoadAccounts():

    Find self.loginAcc0.SetText(ind[1])
    Replace with self.loginAcc0.SetText('F1 - ' + ind[1])
    
    Find self.loginAcc1.SetText(ind[1])
    Replace with self.loginAcc1.SetText('F2 - ' + ind[1])

     

    • Good 1
  5. 22 minutes ago, Cripplez said:

    Thank you 🙂 

    Do you think would be possible to adapt this code for this version too?

    So when you click F1 the first saved account will be loaded, if you click F2 will be loaded the second account, and the same thing for F3 and F4

    	def OnKeyDown(self, key):
    		# A fast method to login by keyboard shortcuts.
    		# Create a keyboard range enum as tuple from F1 to F4.
    		dikAvailableList = range(0x3B, 0x3E + 1)
    		if not key in dikAvailableList:
    			return
    
    		try:
    			# Creates a file object, which would be utilized to call other support methods associated with it.
    			# Change old_open method with open if you get error.
    			file = old_open('user//credentials', 'r')
    
    			try:
    				# Finds the given element in a list and returns its position.
    				account_index = dikAvailableList.index(key)
    				# Reads until EOF using readline() and returns a list containing the lines.
    				account_data = file.readlines().__getitem__(account_index)
    				# Returns a list of all the words in the string, using str as the separator.
    				account_data = account_data.split(':')
    				# Applies a function to all the items in an input list.
    				account_data = map(lambda item: item.rstrip(), account_data)
    				# Decode the password.
    				account_data[-1] = self.decode(self.__ReadSavedPassword(), next(reversed(account_data)))
    
    				# Connect to the server by using list [id, pw].
    				self.Connect(*account_data)
    			# Raised when a sequence subscript is out of range.
    			except IndexError:
    				pass
    
    			# A closed file cannot be read or written any more.
    			file.close()
    		# Raised when an I/O operation fails for an I/O-related reason, e.g., “file not found” or “disk full”.
    		except IOError:
    			return

     

    Yes and i think it can be done in a easier way than that, making use of the functions loginAccount, i'm currently trying to implement the Sash System on my server but as soon as i'm done with it, i will do that

     

    But this code might work, i didnt test it, but give it a try and let me know!

    Spoiler
    def OnKeyDown(self, key):
      dikAvailableList = range(0x3B, 0x3E + 1)
      if not key in dikAvailableList:
        return
      
      account_index = dikAvailableList.index(key)
      self.loginAccount(account_index)

     

     

    • Good 1
  6. Hi, i made some changes on this system so that it now can show multiple accounts slots and add/delete accounts easily
    I'm not an experienced programmer by any means, so bugs might happen and the code isn't the most efficient and clean, so if anyone has a suggestion let me know!

    https://metin2.dev/topic/20529-multiple-login-saver-system

    First i recommend installing his system first because i will only be listing the changes i made and this wont work without his system installed first
    Also, i will only show the steps to have 2 slots account, but they can easily be replicated to have multiple accounts.
    Implemented and Tested on TMP4 Server Files but most likely will work on any other server files.

     

    Be extremely careful with tabulations, i would recommend using Visual Studio Code or something similar to avoid problems with it

     

    Small video:
    .gif

    Icons used for save and delete account button (it doesn't have on hover and on click icons so you will have to add them yourself)
    Download -> 

    This is the hidden content, please
     or 
    This is the hidden content, please
     

     

    So lets start

    First delete the root/uiSelectCredentials.py  and uiscript/accountlistwindow files that wont be needed anymore
    root/introwindow.py (This is configured for my own interface so you will have to change positions according to yours)

    Spoiler
    	#Acc 0
    	{
    		"name": "Acc0",
    		"type": "button",
    		"x" : -160, "y" : -50,
    		"vertical_align": "center",
    		"horizontal_align" : "center",
    		"text": "|cffc8aa80",
    		"default_image" : BUTTON_CHITRA + "login_0.tga",
    		"over_image" : BUTTON_CHITRA + "login_1.tga",
    		"down_image" : BUTTON_CHITRA + "login_2.tga",
    	},
    	{
    		"name" : "DelAccount0",
    		"type" : "button",
    		"x" : -210, "y" : -50,
    		"vertical_align": "center",
    		"horizontal_align" : "center",
    		"text": "|cffc8aa80",
    		"default_image" : BUTTON_CHITRA + "del_button.tga",
    	},
    	{
    		"name" : "saveAccount0",
    		"type" : "button",
    		"x" : -230, "y" : -50,
    		"vertical_align": "center",
    		"horizontal_align" : "center",
    		"text": "|cffc8aa80",
    		"default_image" : BUTTON_CHITRA + "saveButton.tga",
    	},
    	#Acc 1
    	{
    		"name" : "Acc1",
    		"type" : "button",
    		"x" : -160,
    		"y" : -20,
    		"vertical_align" : "center",
    		"horizontal_align" : "center",
    		"text": "|cffc8aa80",
    		"default_image" : BUTTON_CHITRA + "login_0.tga",
    		"over_image" : BUTTON_CHITRA + "login_1.tga",
    		"down_image" : BUTTON_CHITRA + "login_2.tga",
    	},
    	{
    		"name" : "DelAccount1",
    		"type" : "button",
    		"x" : -210, "y" : -20,
    		"vertical_align": "center",
    		"horizontal_align" : "center",
    		"text": "|cffc8aa80",
    		"default_image" : BUTTON_CHITRA + "del_button.tga",
    	},
    	{
    		"name" : "saveAccount1",
    		"type" : "button",
    		"x" : -230, "y" : -20,
    		"vertical_align": "center",
    		"horizontal_align" : "center",
    		"text": "|cffc8aa80",
    		"default_image" : BUTTON_CHITRA + "saveButton.tga",
    	},

     

     

    root/intrologin.py (Remember you need to have the system from North implemented or you wont be able to find the correct lines)

    Spoiler

    REMEMBER, THIS IS ON PYTHON SO BE CAREFUL WITH TABULATIONS

    On def Open(self) Find:

    self.Show()

     

    Add before:

    self.LoadAccounts()

     

    Find:

    self.saveLoginButton        = GetObject("SaveLoginButton")
    self.loadCredentialButton    = GetObject("LoadCredentials")
    self.loginCredentialButton  = GetObject("LoginCredentials")

     

    And replace with:

    self.loginAcc0 = self.GetChild("Acc0")
    self.loginAcc1 = self.GetChild("Acc1")
    
    self.saveAcc0 = self.GetChild("saveAccount0")
    self.saveAcc1 = self.GetChild("saveAccount1")
    
    self.delAcc0 = self.GetChild("DelAccount0")
    self.delAcc1 = self.GetChild("DelAccount1")

     

    Next Find:

    self.saveLoginButton.SetEvent(ui.__mem_func__(self.__OnClickSaveLoginButton))
    
    self.loadCredentialButton.SetEvent(ui.__mem_func__(self.__OnClickLoadInfoButton))
    self.loginCredentialButton.SetEvent(ui.__mem_func__(self.__OnClickLoginAutoButton))

     

    And replace with:

    self.saveAcc0.SetEvent(ui.__mem_func__(self.selectAcc0IndexSave))
    self.saveAcc1.SetEvent(ui.__mem_func__(self.selectAcc1IndexSave))
    
    self.delAcc0.SetEvent(ui.__mem_func__(self.selectAcc0IndexDel))
    self.delAcc1.SetEvent(ui.__mem_func__(self.selectAcc1IndexDel))
    
    self.loginAcc0.SetEvent(ui.__mem_func__(self.selectAcc0IndexLogin))
    self.loginAcc1.SetEvent(ui.__mem_func__(self.selectAcc1IndexLogin))

     

    Find def __OnClickLoginButton(self) and add before

    	def LoadAccounts(self):
    		file_objectRead = open("user//credentials", "r")
    		credentials = file_objectRead.readlines()
    
    		for i in credentials:
    			ind = i.split(":")
    			if ind[0] == '0':
    				self.loginAcc0.SetText(ind[1])
    			elif ind[0] == '1':
    				self.loginAcc1.SetText(ind[1])
    			elif ind[0] == '2':
    				self.loginAcc2.SetText(ind[1])
    			elif ind[0] == '3':
    				self.loginAcc3.SetText(ind[1])
    
    		file_objectRead.close()

     

    Find def __OnClickLoginAutoButton and def __OnClickLoadInfoButton and def __OnClickSaveLoginButton and delete this functions, they are no longer needed (this step is optional and the it will work normally if u followed the steps correctly)

    Find def encode(self, key, clear) and add before:

    	def selectAcc0IndexSave(self):
    		self.saveAccount(0)
    
    	def selectAcc1IndexSave(self):
    		self.saveAccount(1)
    
    	def selectAcc0IndexDel(self):
    		self.delAccount(0)
    
    	def selectAcc1IndexDel(self):
    		self.delAccount(1)
    
    	def selectAcc0IndexLogin(self):
    		self.loginAccount(0)
    
    	def selectAcc1IndexLogin(self):
    		self.loginAccount(1)
    
    	def loginAccount(self, index):
    		file_object = open("user//credentials", "r")
    		credentials = file_object.readlines()
    
    		for i in credentials:
    			ind = i.split(":")
    			if ind[0] == str(index):
    				self.Connect("{}".format(ind[1]), "{}".format(self.decode(self.__ReadSavedPassword(),ind[2]) ))
    				break
    
    	def ClearAccounts(self):
    		self.loginAcc0.SetText('')
    		self.loginAcc1.SetText('')
    		self.loginAcc2.SetText('')
    		self.loginAcc3.SetText('')
    
    	def saveAccount(self, index):
    		id = self.idEditLine.GetText()
    		pwd = self.pwdEditLine.GetText()
    		keypw = self.__ReadSavedPassword()
    		pwd = self.encode(keypw, pwd)
    
    		if (len(id) == 0 or len(pwd) == 0):
    			self.PopupNotifyMessage("Please type ID and Password.")
    			return
    
    		try:
    			file_object = open("user//credentials", "a")
    		except:
    			file_object = open("user//credentials", "w")
    
    		file_objectRead = open("user//credentials", "r")
    		credentials = file_objectRead.readlines()
    		file_object.close()
    		file_object = open("user//credentials", "w")
    
    		for i in credentials:
    			ind = i.split(":")
    			if ind[0] != str(index):
    				file_object.write(i)
    
    		file_object.write("{}:{}:{}\n".format(index,id,pwd))
    		file_object.close()
    		file_objectRead.close()
    		self.PopupNotifyMessage("Conta Guardada.")
    		self.ClearAccounts()
    		self.LoadAccounts()
    
    	def delAccount(self, index):
    		try:
    			file_object = open("user//credentials", "a")
    		except:
    			file_object = open("user//credentials", "w")
    
    		file_objectRead = open("user//credentials", "r")
    		credentials = file_objectRead.readlines()
    		file_object.close()
    		file_object = open("user//credentials", "w")
    
    		for i in credentials:
    			ind = i.split(":")
    			if ind[0] != str(index):
    				file_object.write(i)
    
    		file_object.close()
    		file_objectRead.close()
    
    		self.PopupNotifyMessage("Conta Deletada.")
    		self.ClearAccounts()
    		self.LoadAccounts()

     

     

    I think i'm not missing anything but if you find any error let me know and i will update the post.
    Probably gonna try to do some changes on the code to make it easier to add more accounts, currently it's not that hard but can be better.

    Feel free to leave suggestions and help improve this!

    • Metin2 Dev 30
    • Good 9
    • Love 1
    • Love 24
  7. On 3/6/2023 at 1:49 PM, Alessio said:

                                                                                           

    Hidden Content

      

    Hi guys i want to share with you something that i made for myself, it isn't really special, i hope it will be helpfull with someone,
    inside these files you're gonna find everything you need to implement new official sets (Only english, i will translate the names for the other lenguages in the future), if something is missing or there is something wrong let me know and i will fix it (for the benefit of the future downloaders)
    Armors : Zodiac, Aurora, Magma, Whalebone, Fallout, Gloom, Kyanite and Serpent
    Weapons : Zodiac, Gloom, Serpent, Kyanite
    Helms : Dragon(lv100) and Gloom Dragon
    Boots : Fire and Oceanic shoes
    Accessories : Tourmaline and Jadite set (Fog,Sun,Dark and smoky)

    Usefull informations 
    inside the item proto and item.txt i have set the values for this items like they are level 1 items, so you can customize them for your needs, i have only edited refine_vnum and specular values so you don't have to do them by yourself ^^
    and inside the .msm files i have set the values at the very bottom "Shapedata 146 - Shapedata 153" and i have set the "ShapeIndex" value over 400k instead of 40k, so it's hard that this value is going to create any conflict if you're going to copy paste other official stuff inside that file with the official shapeindex of that items
    HowTo
    if you don't know how to implement this files give a look to this guide 

     

     IMPORTANT 
    the base of this files comes from TMP4 files and i have tested them only on that source so idk if you're going to have problems if you implement these inside another source
     

    Thanks

    to @ TMP4 for his source files and @ Deso for the updated .txt files

    The weapons models and textures are missing, do u have the download for them?

  8. If it gives this error to someone:
    fd2dfea14750d79bab89f3f196bd7815.png

    While compiling the server source

    go to src/common/item_lenght.h

    Search for enum EMaterialSubTypes and add at the end of the function this "MATERIAL_DS_CHANGE_ATTR,"

     

    • Metin2 Dev 1
  9. Not sure if it's a error or not (since i've found the same problem with other similar tools) but while exporting sura model, the bones of 2 of the fingers in the left hand always export bigger than the other fingers

    15b420741b0bed64a15466e8deaece4d.png

    The only way i found to kinda fix this was using grnreader or noesis and exporting to smd (if it was exported to fbx the problem also occurs)

  10. 11 hours ago, Ulthar said:

    Hello. Any syserr? Did you tried it without the "new" exchange window? Try without the "new one" and lets see is it sending yang or not ^^. If its, then the problem around  the exchange window 😄 If not, send me your uiexchange.py on pastebin. (upload it and send the link here)

    EDIT: No syserr's, not on client,or server cores,or anything
    With the "old" exchange window works fine

    66a38612033e9d2a85c144a9289e883e.png

    But with the "new" one, doesn't show the money and also doesn't trade it

    70d6c498360adefdc62bcf931f1f4d12.png

    Also if u could tell me how i remove that text under the exchange window and the target lvl i appreciate it

     

    root/uiExchange.py:

    https://pastebin.com/QgWh19f2

    uiScript/exchangedialog_new.py:

    https://pastebin.com/U4XEYBkB

    I had to disable the NEW_EXCHANGE_WINDOW variables on the server and client, but also had to remove the exchangedialog_new from the folder and also removed uiExchange, for some reason wasn't able to make the old exchange window work with them in the folder as a backup, like uiexchange_backup.py and exchangedialog_new_backup.py.

    Hope this info helps to solve my problem, thks in advance!

  11. So, i implemented a exchange window that i found and the Increase Max Yang tutorial from this forum. The max yang seems to work amazing, but i can't trade Yang, not sure if this is a bug of the exchange window or the max yang implementation, it just always stays at 0 on the exchange window, and doesn't send any yang to the other player, i've reimplemented max yang and exchange window, but still nothing

    Max Yang Link:

    The exchange window is from another forum, so i will not post the link here, but if needed i can send the files.

     

    I've tried searching on a lot of forums, and can't find an answer, tried fixing it my self (which didn't work, of course xD)

  12. Fixed the Error on the Heightmap tool, which basically was causing to show some weird lines on the finished heightmap, but it's fixed now, the mediafire link is the same.

     

    I was working on making the final result image a 16 bit image, since it already converts to a 16 bit png, but i still wasn't able to do it, and it was taking much of my time, and currently i'm more focused on other projects

  13. Download Center

    This is the hidden content, please

    So, i've been developing something, and i needed the minimaps and heightmap from metin2, and i was using the Map Converter tool that can be found here in the forum, but taking a screenshot of that tool (since it doesn't allow to export heightmap, only minimap), isn't the best of ways, so i made my own tool to do that, this took me a while, since i'm not a very experienced programmer...

    The tool is very simple to use (i believe), just move the whole map folder to where the python file is, and run the script and follow the instructions, it will also go with 2 maps already done, the final image will have the same name as the map folder name.

    Idk if anyone has done this, that release to the public the source code (Map converter tool creator didn't release source code i think), so if anyone needs the code or the tool, can use without any trouble, since this is also a backup for me, so i dont lose the tool xD

     

    It uses the python 3.10.5, and some libraries, so you will need to install them:

    PIL (pillow)

    Torchvision

    Numpy (i think this one already comes with python, not sure)

    OpenCV

     

    It's just .py files that you can look through the code, but either way, here's virus total scan of the .rar files

    This is the hidden content, please

    This is the hidden content, please

     

    The folders are only that big (8.31mb and 11.42mb) because both have 2 full map's folders on them, and one of them uses normal png, and the other uses 8bit png (that's why the 3.11mb difference)

     

    I did separate because idk, that's how i made them, and i guess i'm too lazy to combine them together lol

    Heightmap:

    This is the hidden content, please

    Minimap:

    This is the hidden content, please

    • Metin2 Dev 121
    • Eyes 3
    • Facepalm 1
    • Dislove 1
    • Not Good 1
    • Sad 1
    • Think 1
    • Confused 1
    • Lmao 1
    • Good 23
    • Love 5
    • Love 42
  14. 19 hours ago, ReFresh said:

    Wrong syntax in file or missing file in: locale/portugal/special_item_group.txt

    I didn't change anything on that file, but i will try anyway to put the one from that comes with the files to see if the error disappears can you tell me what the file is about? Since like item_proto is updated in the database, i'm thinking maybe that file is also updated in the database, and the fact that i edited some stuff on the db caused it to bug?

  15. I installed costume system, and it was working normally, then i went to disable the alchemy, and what i did was remove the dragon_soul quests, remove some items from item_proto and item_names, and remove DSS button from locale/xx/ui/inventorywindow.py, and the game didn't enter, i put my id and password, it says Connecting to the server, and then the message disappears and it does nothing, I'm again on the main menu, i've edited back everything i did, but for some reason it still isn't working, and i can't figure out why...

    Syserr on Client is clean

    Auth Syserr

    Spoiler

    SYSERR: Jul 25 23:42:04 :: pid_init: 
    Start of pid: 1284

    SYSERR: Jul 25 23:42:04 :: socket_bind: bind: Address already in use
    SYSERR: Jul 25 23:49:11 :: pid_init: 
    Start of pid: 1710

    SYSERR: Jul 25 23:49:11 :: socket_bind: bind: Address already in use
    SYSERR: Jul 26 00:04:47 :: pid_init: 
    Start of pid: 1797

    SYSERR: Jul 26 00:04:47 :: socket_bind: bind: Address already in use
     

     

    Channel1-first Syserr

    Spoiler

    SYSERR: Jul 25 23:42:10 :: pid_init: 
    Start of pid: 1296

    SYSERR: Jul 25 23:42:16 :: SetShopItems: Shop: no item table by item vnum #100100
    SYSERR: Jul 25 23:42:16 :: SetShopItems: Shop: no item table by item vnum #100100
    SYSERR: Jul 25 23:42:26 :: ReadSpecialDropItemFile: ReadSpecialDropItemFile : there is no item 110000 : node 용혼원석-보상용_기본
    SYSERR: Jul 25 23:42:26 :: Boot: cannot load SpecialItemGroup: locale/portugal/special_item_group.txt
    SYSERR: Jul 25 23:42:26 :: SpawnEventHelper: cannot get map base position 1
    SYSERR: Jul 25 23:42:26 :: SpawnEventHelper: cannot get map base position 3
    SYSERR: Jul 25 23:42:26 :: SpawnEventHelper: cannot get map base position 23
    SYSERR: Jul 25 23:42:26 :: SpawnEventHelper: cannot get map base position 43
    SYSERR: Jul 25 23:42:26 :: pid_deinit: 
    End of pid

    SYSERR: Jul 25 23:49:17 :: pid_init: 
    Start of pid: 1722

    SYSERR: Jul 25 23:49:22 :: SetShopItems: Shop: no item table by item vnum #100100
    SYSERR: Jul 25 23:49:22 :: SetShopItems: Shop: no item table by item vnum #100100
    SYSERR: Jul 25 23:49:33 :: ReadSpecialDropItemFile: ReadSpecialDropItemFile : there is no item 110000 : node 용혼원석-보상용_기본
    SYSERR: Jul 25 23:49:33 :: Boot: cannot load SpecialItemGroup: locale/portugal/special_item_group.txt
    SYSERR: Jul 25 23:49:33 :: SpawnEventHelper: cannot get map base position 1
    SYSERR: Jul 25 23:49:33 :: SpawnEventHelper: cannot get map base position 3
    SYSERR: Jul 25 23:49:33 :: SpawnEventHelper: cannot get map base position 23
    SYSERR: Jul 25 23:49:33 :: SpawnEventHelper: cannot get map base position 43
    SYSERR: Jul 25 23:49:33 :: pid_deinit: 
    End of pid

    SYSERR: Jul 26 00:04:53 :: pid_init: 
    Start of pid: 1809

    SYSERR: Jul 26 00:04:58 :: SetShopItems: Shop: no item table by item vnum #100100
    SYSERR: Jul 26 00:04:58 :: SetShopItems: Shop: no item table by item vnum #100100
    SYSERR: Jul 26 00:05:19 :: ReadSpecialDropItemFile: ReadSpecialDropItemFile : there is no item 110000 : node 용혼원석-보상용_기본
    SYSERR: Jul 26 00:05:19 :: Boot: cannot load SpecialItemGroup: locale/portugal/special_item_group.txt
    SYSERR: Jul 26 00:05:19 :: SpawnEventHelper: cannot get map base position 1
    SYSERR: Jul 26 00:05:19 :: SpawnEventHelper: cannot get map base position 3
    SYSERR: Jul 26 00:05:19 :: SpawnEventHelper: cannot get map base position 23
    SYSERR: Jul 26 00:05:19 :: SpawnEventHelper: cannot get map base position 43
    SYSERR: Jul 26 00:05:19 :: pid_deinit: 
    End of pid

    Channel1-game1 Syserr the same as Channel1-first

    Channel1-game2 Syserr is a bit different than Channel1-first/game1

    Spoiler

    SYSERR: Jul 25 23:42:06 :: pid_init: 
    Start of pid: 1288

    SYSERR: Jul 25 23:42:10 :: SetShopItems: Shop: no item table by item vnum #100100
    SYSERR: Jul 25 23:42:10 :: SetShopItems: Shop: no item table by item vnum #100100
    SYSERR: Jul 25 23:42:21 :: ReadSpecialDropItemFile: ReadSpecialDropItemFile : there is no item 110000 : node 용혼원석-보상용_기본
    SYSERR: Jul 25 23:42:21 :: Boot: cannot load SpecialItemGroup: locale/portugal/special_item_group.txt
    SYSERR: Jul 25 23:42:21 :: SpawnEventHelper: cannot get map base position 41
    SYSERR: Jul 25 23:42:21 :: ForAttrRegion: Cannot find SECTREE_MAP by map index 41
    SYSERR: Jul 25 23:42:21 :: ForAttrRegion: Cannot find SECTREE_MAP by map index 41
    SYSERR: Jul 25 23:42:21 :: ForAttrRegion: Cannot find SECTREE_MAP by map index 41
    SYSERR: Jul 25 23:42:21 :: ForAttrRegion: Cannot find SECTREE_MAP by map index 41
    SYSERR: Jul 25 23:42:21 :: pid_deinit: 
    End of pid

    SYSERR: Jul 25 23:49:13 :: pid_init: 
    Start of pid: 1714

    SYSERR: Jul 25 23:49:17 :: SetShopItems: Shop: no item table by item vnum #100100
    SYSERR: Jul 25 23:49:17 :: SetShopItems: Shop: no item table by item vnum #100100
    SYSERR: Jul 25 23:49:31 :: ReadSpecialDropItemFile: ReadSpecialDropItemFile : there is no item 110000 : node 용혼원석-보상용_기본
    SYSERR: Jul 25 23:49:31 :: Boot: cannot load SpecialItemGroup: locale/portugal/special_item_group.txt
    SYSERR: Jul 25 23:49:31 :: SpawnEventHelper: cannot get map base position 41
    SYSERR: Jul 25 23:49:31 :: ForAttrRegion: Cannot find SECTREE_MAP by map index 41
    SYSERR: Jul 25 23:49:31 :: ForAttrRegion: Cannot find SECTREE_MAP by map index 41
    SYSERR: Jul 25 23:49:31 :: ForAttrRegion: Cannot find SECTREE_MAP by map index 41
    SYSERR: Jul 25 23:49:31 :: ForAttrRegion: Cannot find SECTREE_MAP by map index 41
    SYSERR: Jul 25 23:49:31 :: pid_deinit: 
    End of pid

    SYSERR: Jul 26 00:04:49 :: pid_init: 
    Start of pid: 1801

    SYSERR: Jul 26 00:04:52 :: SetShopItems: Shop: no item table by item vnum #100100
    SYSERR: Jul 26 00:04:52 :: SetShopItems: Shop: no item table by item vnum #100100
    SYSERR: Jul 26 00:05:15 :: ReadSpecialDropItemFile: ReadSpecialDropItemFile : there is no item 110000 : node 용혼원석-보상용_기본
    SYSERR: Jul 26 00:05:15 :: Boot: cannot load SpecialItemGroup: locale/portugal/special_item_group.txt
    SYSERR: Jul 26 00:05:15 :: SpawnEventHelper: cannot get map base position 41
    SYSERR: Jul 26 00:05:15 :: ForAttrRegion: Cannot find SECTREE_MAP by map index 41
    SYSERR: Jul 26 00:05:15 :: ForAttrRegion: Cannot find SECTREE_MAP by map index 41
    SYSERR: Jul 26 00:05:15 :: ForAttrRegion: Cannot find SECTREE_MAP by map index 41
    SYSERR: Jul 26 00:05:15 :: ForAttrRegion: Cannot find SECTREE_MAP by map index 41
    SYSERR: Jul 26 00:05:15 :: pid_deinit: 
    End of pid

    34b88aa62859844080809a353fbcb82f.gif

     

    I've trying to find a fix for like the past 30minutes, if someone could help would be great

     

  16. 86dcfa00c8b5fd018c028296c825d3f5.gif

    I've tried searching a lot on the internet, and found some "solutions" but none worked, idk how it started, and i still couldn't figure out what is... Really need help on this... thks in advance...

    At first i thought it was because of 4/5 inventory, but then i saw the clip again and realized i didn't even had it installed, maybe the max yang? seems to be the only thing added

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