Jump to content

Amun

Contributor
  • Posts

    199
  • Joined

  • Last visited

  • Days Won

    1
  • Feedback

    100%

Everything posted by Amun

  1. // char.h void ClearStone(); // Replace with void ClearStone(LPCHARACTER pkKiller = nullptr); // char.cpp void CHARACTER::ClearStone() // Replace with this void CHARACTER::ClearStone(LPCHARACTER pkKiller) { if (!m_set_pkChrSpawnedBy.empty()) { // Kill all monsters I spawned. FuncDeadSpawnedByStone f(pkKiller); std::for_each(m_set_pkChrSpawnedBy.begin(), m_set_pkChrSpawnedBy.end(), f); m_set_pkChrSpawnedBy.clear(); } if (!m_pkChrStone) return; m_pkChrStone->m_set_pkChrSpawnedBy.erase(this); m_pkChrStone = nullptr; } // Find this struct and replace it struct FuncDeadSpawnedByStone { private: LPCHARACTER m_pkKiller; public: FuncDeadSpawnedByStone(LPCHARACTER pkKiller) : m_pkKiller(pkKiller) {} void operator () (LPCHARACTER ch) { ch->Dead(m_pkKiller); ch->SetStone(nullptr); } }; // char_battle.cpp if (IsStone()) ClearStone(); // replace with if (IsStone()) ClearStone(pkKiller); I didn't even try to compile it. Lemme know if it works
  2. if (get_dword_time() - ch->GetLastAttackTime() < 5000) return; I assume you don't want them blocked on the horse, so just block the riding. Global search in game for ch->StartRiding(); and do your magic wherever you want. You may want to change that 5k with a global variable.
  3. Le us know if he sent the payment for the fix
  4. Ye, lemme read 200 topics real quick to see if you posted it. xD Sorry, that was mean. I meant: Apologies, my lord, I didn't mean to steal your likes. I shall be spanked at once
  5. ResetFrame: This is used in the 2018 root to reset animations. It's already implemented in the source, but wasn't included in the module. If anyone needs it: PythonWindowManagerModule.cpp PyObject* wndMgrAniResetFrame(PyObject* poSelf, PyObject* poArgs) { UI::CWindow* pWindow; if (!PyTuple_GetWindow(poArgs, 0, &pWindow)) return Py_BuildException(); if (!pWindow) return Py_BuildException(); ((UI::CAniImageBox*)pWindow)->ResetFrame(); return Py_BuildNone(); } { "ResetFrame", wndMgrAniResetFrame, METH_VARARGS }, root, ui.py: # find class AniImageBox(Window): # find def SetEndFrameEvent # add def ResetFrame(self): wndMgr.ResetFrame(self.hWnd)
  6. [Hidden Content] [Hidden Content] [Hidden Content]
  7. Ah, yes, I see what you mean. It does, indeed, freeze when keeping the button pressed and then clicking the window. Also, yeah, I went through all of those forum topics/stackoverflow questions/docs.. It's been a while, but I remember there were many things to take into consideration when making the game loop. I will fix this(button thingy) as well at some point, but I can't promise anything because I won't have a lot of free time for the next month or so.
  8. Ah, yes, I just noticed now. If you want the transition to be done instantly, keep the thread opened at all times and just let it know when it can and can't call Process, instead of triggering a new future whenever you click the bar. ez
  9. Yes, and I said that in the readme. If you want to avoid that, load npclist ahead of time and send the entities before the game world is shown. I didn't bother to make that as well because I wanted to keep it simple, so that everyone(or most people) can understand what's going on. If you consider that to be a big problem and have the knowledge to do what I said earlier, you can do it and post it here, so that everyone can use. Unfortunately, I'm extremely busy at the moment, so I won't be able to work on community stuff for a while. Cheers! - Amun
  10. Actually, it does. I can use the keyboard normally(move, attack, write) while dragging/keeping the window(left click). I've not thought about fixing the right click as well(for some reason). Also, I was extremely busy, so I've not checked to see if Dumita's change will help in that regard. These being said, however, you can trigger/close the thread when entering and exiting the context menu. I don't see why you wouldn't be able to use the same solution for the right click as well. Edit: Just noticed(forgot about it) I also have a video of me moving when dragging the client: Regards, Amun
  11. Fucking ask Elendos, you donut. If you bought the files, I'm sure you'll get help from the creators. If you've not bought the files, fuck off, we don't offer support for leaks.
  12. Made a year ago. Let me know if I missed anything(or if you need a tutorial on how to change it in the source) Here's the repo: [Hidden Content] or M2DL
  13. No need for explanations. I made this a year ago so, if I missed anything, please let me know. Here's the tut: [Hidden Content] or M2DL
  14. Tested on x86 client/server. Fix for x64 server/x86 client coming soon. If I left something out, feel free to let me know and I'll update the tutorial. I only use Visual Studio/Windows - No tutorial for FreeBSD yet. I'll do it in the future, if no one comes further with it. Here it is: [Hidden Content] or M2DL I uploaded the precompiled libs as well(for the lazy fucks who don't want to learn how to do it themselves). This will also fix your(invisible/white/broken) Guild Mark problem for whoever tried to update to 1.8 and didn't enable JPG support Good luck
  15. Don't know, I didn't think that far. I just made this shit for getting the entire pack ready for packing. I don't make granular updates, I'm just downloading the entire client, pack it, and bye(hence, the script). Feel free to test/extend it to your needs. Update: It'll replace the file with the new one. [Hidden Content] Update2: If you want granular updates, just add a function that recursively checks against your current pack folder using exists(path) Update3: Here, I've done it for you from os import listdir from os.path import exists, join, isdir #CONFIGS target_folder = "processed_from_raw_pack" pack_folder = "pack"#check against it recursively to see what's new in the target_folder f = open("diff.txt", "w") missing_files = ["MISSING_FILES\n"] can_add_section_separator = False def CheckAgainstOldPack(current_path = []): global can_add_section_separator for file in listdir(join(target_folder, *current_path)): current_path.append(file) _file_in_old_pack = join(pack_folder, *current_path) if isdir(_file_in_old_pack): CheckAgainstOldPack(current_path) current_path.pop(-1) continue if not exists(_file_in_old_pack): try:# Some files have fucked up names print("MISSING ", _file_in_old_pack) missing_files.append(_file_in_old_pack+"\n") can_add_section_separator = True except: pass current_path.pop(-1) if can_add_section_separator:#only add after each section of files, to simbolise different folders missing_files.append("\n") can_add_section_separator = False CheckAgainstOldPack() f.writelines(missing_files) f.close() Video: Edit it to remove the files if you need to. You can also timestamp the diffs and use them to reverse one of your updates as well(if needed), just read the list and remove the file, ez.
  16. Good evening, fellow citizens of the forum, This is a script that automatically moves and creates folders for the official clients posted in "Official Unpacked Updates", getting them ready for packing. Video: Good luck, - Amun Update: Lol, I forgot to add the code xD
  17. Skip this part, you don't need it anymore. Scroll down. The game loop freezes when dragging/resizing the window. This is an attempt at fixing that. We'll open a thread and call "Process()" from there when we receive WM_ENTERSIZEMOVE and then shut it down when receiving WM_EXITSIZEMOVE, continuing our main game loop. There's also the option of creating a timer when entering WM_ENTERSIZEMOVE, calling "Process()" when receiving WM_TIMER and killing it when receiving WM_EXITSIZEMOVE, but there's quite a big delay till the timer starts and it's also not very reliable, so.. Note: This is HIGHLY experimental, and it might result in data races and crash the client. Even though I tested it as good as I could and tried to make sure the main thread's loop doesn't resume before ending the future, it's still a possibility for that to happen when you least expect it. Video: Code: Github or M2DL Many thanks to @limefor taking the time to test it. Good luck! UPDATE: Forget everything I gave you the last time, here's the complete fix: UPDATE2: Blocked right click as well, thanks @ CORKY If there's anything else that needs blocking/changing, let me know and I'll update the topic.
  18. Topic/code updated. Apologies for the bump.
  19. This is the first version(made a month ago). No isolation from normal fishing or ON/OFF switch and no key exchange/validation, but it's working. Let me know if I forgot any assets/pieces of code and I'll update the repo. Code: [Hidden Content] or M2DL Little GIF: Don't message me. If you have problems, post them here. Good luck!
  20. No need for a description, here's the code: [Hidden Content] or [Hidden Content] Q: Is this the best way to do it? Is there a better way? A: Don't know, don't care. That's how I've done it, get over it. Q: Any checks you didn't add? A: There might be some stuff that I missed/forgot about(done it in a rush). If you notice something, let me know and I'll update the code accordingly. Q: It's not working for me. Support? A: Only in the topic(when I have time), don't fucking message me.
  21. Don't push it, the dude already gave you everything you asked for/needed. Read the root files, use your brain(if you have any), and do it yourself. If you can't read/write code at a basic level, you shouldn't be here, and that's a fact. Start here: [Hidden Content]
×
×
  • 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.