Jump to content

VegaS™

Forum Moderator
  • Posts

    656
  • Joined

  • Last visited

  • Days Won

    187
  • Feedback

    100%

Everything posted by VegaS™

  1. Go to Settings -> Preferences -> MISC. -> Autodetect character encoding (deselect it) [Hidden Content]
  2. Hello, we do not support cheating or hacking. Hacking / Cheating / Usebug M2Dev isn't a cheat and / or hack platform. We don't tolerate any messages about hacking, cheating on Metin2 and / or decrypting Metin2 clients from Metin2 private servers. Explaining how a bug works (Bug allowing you to have an advantage over other players within a game server...) is only tolerated if a fix and / or patch is associated with it.
  3. Thanks for the release, but if you do a quick search in the forum, you'll find that I released something similar to this 4 years ago.
  4. Hello, thank you for the release, but why did you share it as an executable when the entire project is open source? [Hidden Content] [Hidden Content] To be honest, I wouldn't use your executable when the original project is open-source. You could also upload the source to github, or sharing the changes you've made. Edit: You can get the original precompiled executable (Astyle/bin) as well as the most recent source code (3.1) from this link: [Hidden Content]
  5. uiParty.py [Hidden Content] You're missing HPPoisonGauge key from locale/xx/taskbar.py or uiscript/taskbar.py
  6. Thanks. but we don't need any visualizations, they were just for fun. Furthermore, only the administrator will run this tool locally a few times per year at most, it was only used to create that sql query for moving dead servers to archive, such as this one: Those packages are installed on the project environment rather than the operating system, so they will not interfere with anything. Basically, this tool has no benefits for owners/developers, it's just an internal tool for metin2dev administration, nothing special.
  7. Private Server Down Detector It's an open-source internal tool for Metin2dev, not for private servers. [Hidden Content] This tool is scanning the entire database.json file, which contains all topics in the private servers category, along with their associated content. The topic post is HTML code which is checked with a regex to find all valid hrefs links, as well as ignoring those in the 'ignored urls.json' file to avoid making unnecessary requests. The links are then tested with a HEAD request to determine whether or not the server is online. This will allow us to get rid of the servers that are no longer operational and tidy up the relevant forum category. Topics without URLs will be archived immediately. The output features are still being worked on, but the tool is fully functional: [x] Quickly generating a graph of the server statistics: [x] Offline [x] Online [x] Unknown (no urls) (TODO) [x] Generating a custom output file with the results of the scan. [x] Constructing an automatic query to move offline servers to the archive category. How to use Clone the repository git clone [Hidden Content].git Install the latest version of Python, 3.11 or higher. Install virtual environment: # Install virtualenv py -3 -m venv venv # Activate virtualenv (Windows) ./venv/scripts/activate # Activate virtualenv (Linux) source ./venv/bin/activate # Install the requirements pip install -r requirements.txt Available command line arguments (optional) --version - Show the version of the script --help - Show help message with available arguments --input - JSON database file default: database.json --output - Output path directory default: ./output --exclude - JSON excluded urls file default: ignored_urls.json --timeout - Timeout for HTTP requests default: None (wait until the request is finished) --logging - Enable console output default = True --domain - URL of the topic forum's domain default = [Hidden Content] --threads - The maximum number of threads that can be used for parallel processing default = None (all available threads) Run the script via the command line: python main.py --input ./database.json Namespace(input='database.json', output='output', exclude='ignored_urls.json', timeout=None, logging=False, threads=None, domain='[Hidden Content]') You can also run the script from your preferred IDE, such as PyCharm or VSCode and it will use the default arguments. How to contribute Fork the repository Create a new branch Make your changes Create a pull request Wait for the review Author Vegas007 License
  8. Whew, I stopped kissing my wife when I saw the Mali post notification...
  9. PythonItem.cpp [Hidden Content] PythonItem.h [Hidden Content]
  10. Thank you for the release, here's a small suggestion to improve your format time code. [Hidden Content] As a result, it can easily be extended to weeks or months.
  11. I wrote that at 7 a.m., and I had mostly read the main post, which was about how he wanted that specific function; I had not considered the 'changing empire quest logic,' my mistake.
  12. Guys, why are you always using quest flags? It's been 8 years since the source first appeared; we should avoid them because they're highly toxic; let's not use the database for everything when we already have everything in C++, it just needs to be properly accessed. [Hidden Content] party.h [Hidden Content] How-To-Use: if party.is_party() then local party_member_table = {party.party_get_all_member_pids()} local party_member_count = table.getn(party_member_table) -- Debug local party_member_string = table.concat(party_member_table, ", ") say(string.format("Party members: count(%d), pids(%s)", party_member_count, party_member_string)) end
  13. root/uiToolTip.py [Hidden Content] That is the simplest method, so you can easily adapt to it even if you have other functions that use or will use that function in the future.
  14. [Hidden Content] The points were not properly updated, which resulted in a bug on that bonus; even if you leave the party, you still have the bonus, with this fix should be fine.
  15. To complete this task in the quickest and most effective manner possible, we can develop a function that can accept an infinite number of parameters, which will effectively be transformed into a table. Concatenate all of the elements (each element must be able to be converted into a string), then add [ENTER] as a separator between concatened elements. So, based on that, I spent a few seconds playing around with Lua (I hate it), and here's what I came up with, without using loops and checks: [Hidden Content] questlib.lua [Hidden Content] quest_functions multi_say How-To-Use: multi_say( string.format('You have to pay %d yang.', 5000) ) -- You have to pay 5000 yang. multi_say( "The number list:", 300, 25.31, 400 ) -- The number list:[ENTER]1[ENTER]2[ENTER]3[ENTER]4[ENTER]5 multi_say( 'Facebook', 'Amazon', 'Apple' ) -- Facebook[ENTER]Amazon[ENTER]Apple If your lua version is incompatible with it, you must use this one:
  16. I don't really understand what you're trying to do, but you should do it on the server side if you want to be safe. char_item.cpp Use the following code: [Hidden Content] Inside of: [Hidden Content]
  17. Srcs/game/src/pvp.cpp bool CPVPManager::CanAttack(LPCHARACTER pkChr, LPCHARACTER pkVictim) { [...] if (pkChr && pkVictim && (pkChr->GetMountVnum() && pkVictim->GetMountVnum())) return false; [...] } Srcs/Client/InstanceBase.cpp bool CInstanceBase::IsAttackableInstance(CInstanceBase& rkInstVictim) { [...] if (IsMountingHorse() && rkInstVictim.IsMountingHorse()) return false; [...] } I don't really understand why you want to do this, but this is what you asked for. You can ignore the client part if you just want a server-side solution to not do damage.
  18. UPDATE: @ ReFreshreported to me that the fix created a small visual bug on skills, but I don't have enough time in this period to investigate it.
  19. GameLib/ActorInstanceMotion.cpp [Hidden Content] Replace BOOL CActorInstance::isLock() with this: [Hidden Content]
  20. Video with the fix: [Hidden Content] I just implemented right now that function and after some tests, I found that GetPartItemID was always set to 0 when you used an emotion with a weapon equipped, from here. The problem itself is the ChangeWeapon function, which is responsible for refreshing the weapon index and the refresh state of the wait motion, but that wasn't called properly because it always got blocked in the following condition: [Hidden Content] In order that when you unequip an item from the server, it's called the ChangeWeapon(0), which means eWapon = 0, and the GetPartItemID(CRaceData::PART_WEAPON) = 0 as well, since it was set from the previous use of motion. For fixing it, we just have to add into our condition if the eWeapon it's not 0, so it will let the function to work properly. [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.