Jump to content

friendtm

Member
  • Posts

    16
  • Joined

  • Last visited

  • Feedback

    0%

About friendtm

  • Birthday 12/16/1998

Informations

  • Gender
    Male

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

friendtm's Achievements

Explorer

Explorer (4/16)

  • Collaborator Rare
  • Dedicated
  • Reacting Well
  • First Post
  • Conversation Starter

Recent Badges

3

Reputation

  1. Balancing the game is not only drop percentages. It all depends on the systems you have and will be using on progression. It depends on a lot of things and i believe there is no right answer for your question. You just need to do your balancing and test. Re-balance and test. Re-balance and test. And that's it. There is no server that launches with perfect balance. People always complain about something and changes are made. You just need to find your formula.
  2. You should look for core syslog/syserr. In there, look for the timestamp and check what happened. Usually DCs go in there. Look in all cores, start with the 3.
  3. My issue with metin2 is that, no one is trying to improve the systems. Most of the recent systems are just more content. Nothing is actually "oh wow, quality of life". Its just more content, more grind, more items for people to waste money. Metin2 is soul-less right now. One thing i always felt wrong is that systems don't motivate you to actually use them. Why mining? Why fishing? Why joining a guild? I can't find a server that still has monarch system active. People remove taxes from shops without even knowing what they are for. Most people don't know that kingdoms have their own bank, their own yang. Why do i even have to choose a kingdom when i start? Why can't i start the game without a kingdom and have the freedom to join one later? Why is the main city the first map you see? Like, these things have always been the same. Servers just add more quests, items, maps, npcs but the loop is exactly the same. The systems are the same. The same QoL you had 10 years ago. I saw a Server Admin saying they would not implement an auction house because that removes the stands and the game feels dead. Dude, just put the auction house in the middle of the city and boom, "Visually dead" is solved. TLDR: Metin2 stopped evolving and remained adding content to the poor systems it already has. Nobody tries to actually improve the game, just make it different.
  4. I can't edit the post i did so i'm creating this one. I found the fix for my problem and actually, this might be common for everyone right now. Explaining the thing: The Client does a performance check. It basically divides what he renders by the time it takes. Under specific circumstances (wich i could not identify) the render is so fast that the measured time ends up being 0ms. With that, the client ends up trying a division by 0. Boom, crash. So, where is the fix to this? UserInterface\PythonApplication.cpp // Inside CPythonApplication::Process() // Look for: m_dwFaceAccCount += dwCurFaceCount; m_dwFaceAccTime += m_dwCurRenderTime; m_fFaceSpd=(m_dwFaceAccCount/m_dwFaceAccTime); // The fixed code: m_dwFaceAccCount += dwCurFaceCount; m_dwFaceAccTime += std::max<DWORD>(1, m_dwCurRenderTime); m_fFaceSpd = float(m_dwFaceAccCount) / float(m_dwFaceAccTime); So, basically, we make sure that the render time is at least 1ms and changed integer division to float divison. I've been testing and no more crashes. I don't know if this change will have impact on anything else, so, if you know something i don't, please don't be shy.
  5. Did anyone break Character Creation? I'm only trying it now, after 3 days of touching the files so probably something i did, but now im not sure. The problem seems to be related with granny . I did not touch those soooooooooooooooo.... Explaining my problem, i get this in ErrorLog: Exception Type: 0xc0000094 (Integer divided by 0) This happens when i click to create a new character. The client instantly crashed. In introcreate.py, it creates a preview of each race. I guess it might be catching a bad animation? I don't know.. I'll take a look at it, and if someone has the same problem, i'll be back with a fix, maybe, maybe not, i'll try. If not, well..... just hanging around.. EDIT 1: Added some tracer messages so i could understand what was failing/breaking point and now it does not crash. Amazing. I'll be back with awesome content.
  6. Not true. You have a lot of games developed in these recent years that still use this flow. Black Desert, Arena Breakout, other free games where you usually need to login first before the game launches, usually they check the game for updates outside of the client. So, no, Metin2 is not the only app doing it. Talking about this feature, i actually don't see a benefit, its just different. If you want to make your metin2 different, yes, but this does not make it better. Actually, the autopatcher is a faster flow then this one. The only benefit of this, is if you are able to bypass the autopatcher. In that case, the ingame check would force you to close the client and update. Other than that i don't see a benefit. Anyway, good thing, its the first time i see this implemented.
  7. This fixes the qc release binary. Debug binary works because it does not use optimization. That's good, thanks!
  8. It probably has to do with the inventory refresh. Check the implementation again where the code creates and assign the inventory locks.
  9. Hey, 4 years passed since last comment but here i am pushing activity on this one. I have a question related to the firewall just because i got confused about something. FreeBSD already has some firewalls (im using ipfw), and well configured you pretty much get the same rules as that firewall from service providers. My question is, what is the difference? Right now im developing in my local network (mounted image on vb) but had to work on security as someone decided to mess with my hobbie. I got my database ransomed... Anyway, im digressing. What is the difference between the firewalls? Why use the service provider's and not the freebsd one? Thanks.
  10. I tried with a hunting quest, it's working with gameforge strings at least. Anyway, probably won't work for every quest, i'll leave the debug for you guys. """ resolve_gameforge_refs.py Usage: python resolve_gameforge_refs.py --quest path/to/name_of_quest.quest --translate path/to/translate.lua --out path/to/name_of_resolved_quest.quest """ import argparse import re from pathlib import Path def parse_translate(path: Path) -> dict: text = path.read_text(encoding="utf-8", errors="ignore") assign_re = re.compile(r'^(gameforge(?:\.[A-Za-z0-9_]+)+)\s*=\s*(".*?")\s*$', re.M) mapping = {} for m in assign_re.finditer(text): key = m.group(1) val = m.group(2) mapping[key] = val return mapping def extract_tokens(quest_text: str) -> list[str]: return sorted(set(re.findall(r'\bgameforge(?:\.[A-Za-z0-9_]+)+', quest_text))) def replace_tokens(quest_text: str, mapping: dict) -> tuple[str, dict, list]: tokens = extract_tokens(quest_text) to_replace = {t: mapping[t] for t in tokens if t in mapping} missing = [t for t in tokens if t not in mapping] replaced = quest_text for key in sorted(to_replace.keys(), key=len, reverse=True): pattern = r'\b' + re.escape(key) + r'\b' replaced = re.sub(pattern, to_replace[key], replaced) return replaced, to_replace, missing def main(): ap = argparse.ArgumentParser() ap.add_argument("--quest", required=True, type=Path, help="Path to the quest file") ap.add_argument("--translate", required=True, type=Path, help="Path to translate.lua") ap.add_argument("--out", required=True, type=Path, help="Output path for resolved quest") args = ap.parse_args() quest_text = args.quest.read_text(encoding="utf-8", errors="ignore") mapping = parse_translate(args.translate) replaced_text, to_replace, missing = replace_tokens(quest_text, mapping) args.out.write_text(replaced_text, encoding="utf-8") print(f"Wrote: {args.out} ({args.out.stat().st_size} bytes)") print(f"Found {len(to_replace)} keys to replace out of {len(extract_tokens(quest_text))} tokens.") if missing: print("Missing keys (no translation found):") for k in missing: print(" -", k) if __name__ == "__main__": main()
  11. Hi everyone, again, i might be late on this one, BUT, i had a little problem with the inv_lock image positioning. They were offplace by a little margin. I found a way to fix this in uiinventory.py: def __CreateExtendInvenButton(self): # Parent to the slot window so we’re in the same local coordinate space slotWnd = self.GetChild("ItemSlot") self.ExInvenButton = [] board = self.GetChild("board") bL, bT = board.GetGlobalPosition() sL, sT = slotWnd.GetGlobalPosition() start_x = (sL - bL) + 2 start_y = (sT - bT) + 2 # Use the actual Y step your grid uses. 32 the default i guess, but # if you see a 1px drift per row, try 33 or 31. SLOT_Y_STEP = 32 for button_index in range(player.INVENTORY_LOCKED_PAGE_COUNT * 9): btn = ui.Button() btn.SetParent(board) # parent is board; positions are in board coords we computed above row = button_index % 9 btn.SetPosition(start_x, start_y + row * SLOT_Y_STEP) btn.SetUpVisual(EX_INVEN_COVER_IMG_CLOSE) btn.SetOverVisual(EX_INVEN_COVER_IMG_CLOSE) btn.SetDownVisual(EX_INVEN_COVER_IMG_CLOSE) btn.SetDisableVisual(EX_INVEN_COVER_IMG_CLOSE) btn.SetEvent(ui.__mem_func__(self.__ClickExtendInvenButton), button_index) btn.Hide() self.ExInvenButton.append(btn) So, instead of hardcoding the coordinates where the inv_lock should "spawn", we anchor to the actual ItemSlot position to compute it.
  12. I know i'm kinda late on this one, BUT, if you have the syserr: InventoryWindow.LoadWindow.BindObject - <type 'exceptions.KeyError'>:'Inventory_Tab_03' You are probably editing the wrong inventorywindow.py because there are 2. One is used when MALL is deactivated and another when MALL is active. See: (uiiventory.py) if ITEM_MALL_BUTTON_ENABLE: pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "InventoryWindow.py") else: pyScrLoader.LoadScriptFile(self, "UIScript/InventoryWindow.py") By Default, ITEM_MALL is True (See at top of the uiinventory.py) you need to edit inventorywindow.py in locale_xx/locale/xx/ui If ITEM_MALL is False, he will use inventorywindow.py in uiscript. I found this out because it happened to me and i was actually editing the wrong file.
  13. Just curious, but why isnt there py3 in Metin yet? No one wants to commit to the hard work or is there a reason?
  14. Looks Nice..
×
×
  • 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.