Jump to content

VegaS™

Forum Moderator
  • Posts

    656
  • Joined

  • Last visited

  • Days Won

    187
  • Feedback

    100%

Posts posted by VegaS™

  1. 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.

    • kekw 1
    • Lmao 2
  2. Hello, thank you for the release, but why did you share it as an executable when the entire project is open source?

    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:

    This is the hidden content, please

    • Metin2 Dev 38
    • Eyes 3
    • Good 2
    • Love 7
  3. On 8/3/2020 at 9:04 AM, Bizzy said:

    little problem when leader is still online https://metin2.download/picture/W493l36DrXnkyLql6E3cYAPslse9Xxqw/.png hp bar dont refreash pls help

    On 4/24/2020 at 6:45 PM, SorinSmon said:

    when making party and the leader go offline appear this in syser and i understand is because of this.

    • uiParty.py

    This is the hidden content, please

    On 3/12/2023 at 7:25 PM, Kiwi said:

    Hello, thx for this share.

    I have this error :

    Spoiler
    0312 17:56:15767 ::   File "networkModule.py", line 285, in SetGamePhase
    
    0312 17:56:15767 ::   File "game.py", line 140, in __init__
    
    0312 17:56:15767 ::   File "interfaceModule.py", line 756, in MakeInterface
    
    0312 17:56:15767 ::   File "interfaceModule.py", line 364, in __MakeTaskBar
    
    0312 17:56:15767 ::   File "uiTaskBar.py", line 839, in LoadWindow
    
    0312 17:56:15767 ::   File "ui.py", line 6216, in GetChild
    
    0312 17:56:15767 :: KeyError
    0312 17:56:15767 :: :
    0312 17:56:15767 :: 'HPPoisonGauge'
    0312 17:56:15767 ::

     

    You're missing HPPoisonGauge key from locale/xx/taskbar.py or uiscript/taskbar.py

    • Metin2 Dev 19
    • Eyes 1
    • Good 1
    • Love 8
  4. 13 hours ago, Helia01 said:

    Good release. But why create something from scratch if there are grafana+prometheus and grafana+InfluxDB and zabbix? and many similar ready-made solutions ..

    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:.png

    Quote

    In addition, it would be much easier to create a docker image on the basis of which a potential user could raise his container if necessary. This would get rid of OS pollution with all sorts of packages.

    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.

    • Metin2 Dev 1
  5. Private Server Down Detector

     
    ⚠️ It's an open-source internal tool for Metin2dev, not for private servers.

    This is the hidden content, please

    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.

    screenshot.png

    The output features are still being worked on, but the tool is fully functional:

    1. [x] Quickly generating a graph of the server statistics:
      • [x] Offline
      • [x] Online
      • [x] Unknown (no urls) (TODO)
    2. [x] Generating a custom output file with the results of the scan.
    3. [x] Constructing an automatic query to move offline servers to the archive category.

    How to use

    • Clone the repository
    git clone https://github.com/Metin2-Dev/down-detector-private-servers.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 = https://forum.metin2.dev/topic/
    • --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='https://metin2.dev/topic/')

    You can also run the script from your preferred IDE, such as PyCharm drawing or VSCode drawing 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

    This is the hidden content, please

    License

    License: MIT

    • Metin2 Dev 15
    • Good 1
    • Love 14
  6. Thank you for the release, here's a small suggestion to improve your format time code.

    9 hours ago, filipw1 said:
    	def FormatTime(self, time):
    		text = ""
    
    		d = time // (24 * 3600)
    		time = time % (24 * 3600)
    		h = time // 3600
    		time %= 3600
    		m = time // 60
    		time %= 60
    		s = time
    
    		if d:
    			text += "%dd " % d
    		if text or h:
    			text += "%dg " % h
    		if text or m:
    			text += "%dm " % m
    		if text or s:
    			text += "%ds " % s
    
    		return text[:-1]

     

    This is the hidden content, please

    As a result, it can easily be extended to weeks or months.

    • Metin2 Dev 105
    • Facepalm 1
    • Angry 1
    • Not Good 3
    • Think 1
    • Good 20
    • Love 1
    • Love 18
  7. 7 minutes ago, dotMatryx said:

    What's auto& 's meaning exactly?I just read this..

    automatically detects and assigns a data type to the variable with which it is used

    Why are you using the address symbol? &

    (I know only C that's why i am asking about address symbol)

     

    https://stackoverflow.com/questions/26541920/is-it-a-good-practice-to-use-const-auto-in-a-range-for-to-process-the-element

    uc?id=1rKoEe-TnRRdGoMxhQw2oWp4nX1_UEgdh

    • Love 1
  8. 23 minutes ago, Syreldar said:

    Good. That fixes the first part of the issue: The party member pids not being taken into account for characters in different cores/channels.

    However, that still won't do, it requires more work: Your solution assumes that the party stays valid through channels, but as I previously stated, when a group member logins in a different one they will be without a party in that channel, parties are channel-exclusive.

    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.

    • Love 2
  9. 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.

     

    uc?id=1QDs4rFWMHLwJQZqOQhahQJciqjsxn_1Z

    This is the hidden content, please

    • party.h

    This is the hidden content, please

    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

     

    • Metin2 Dev 16
    • Good 1
    • Love 2
  10. 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:

    https://metin2.download/picture/xJ9JOg5mrhJNY4Nj7GAMqsKXRk0liefU/.gif

    • questlib.lua

    This is the hidden content, please

    • 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:

    Spoiler


    This is the hidden content, please

     

    • Metin2 Dev 7
    • Love 1
  11. On 7/6/2022 at 11:59 PM, ReFresh said:

    But it still isn't what I'm searching.

    In ItemData.cpp (Client) exist this (this is blocking item unequip when shopping or exchanging):

      Hide contents
    BOOL CItemData::IsEquipment() const
    {
    	switch (GetType())
    	{
    		//BLOCK ITEM UNEQUIP WHEN SHOPPING
    		case ITEM_TYPE_WEAPON:
    		case ITEM_TYPE_ARMOR:
    
    			return TRUE;
    			break;
    	}
    
    	return FALSE;
    }

    I need to find the same function, but for equipping the specific item types.

     

    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:

    This is the hidden content, please

    Inside of:

    This is the hidden content, please

    • Metin2 Dev 4
    • Eyes 1
  12. Quote

    I want players with mounts not to be able to attack other players while on their mounts.

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

    • Good 1
  13. On 6/15/2022 at 3:47 AM, VegaS™ said:

    Video with the  fix: https://metin2.download/video/gV3x7RhoJZsJnMY6C61nEvmBOGrvnNn0/.mp4

    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

     

    void CInstanceBase::ChangeWeapon(DWORD eWeapon)
    {
    	if (eWeapon == m_GraphicThingInstance.GetPartItemID(CRaceData::PART_WEAPON))
    		return;
    
    	if (SetWeapon(eWeapon))
    		RefreshState(CRaceMotionData::NAME_WAIT, true);
    }

     

     

    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

     

    	// Search for the following condition:
    	if (eWeapon == m_GraphicThingInstance.GetPartItemID(CRaceData::PART_WEAPON))
      	// Replace it with:
    	if (eWeapon && eWeapon == m_GraphicThingInstance.GetPartItemID(CRaceData::PART_WEAPON))

     

     

    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.

    • Good 1
  14. 1 hour ago, WeedHex said:

    I thought a thing!

    May be cool also to stop the emotion animation when the char moves? Because if you think the ninja archer can't attack to stop the phase. Other games (Fortnite for eg.) use this way too.

    • GameLib/ActorInstanceMotion.cpp

    https://metin2.download/video/2aqONkr36fTYmcXsHD7Nw7FJlTkGYH6H/.mp4

    Replace BOOL CActorInstance::isLock() with this:

    This is the hidden content, please

    • Metin2 Dev 16
    • Good 2
    • Love 1
    • Love 3
  15. On 6/13/2022 at 1:03 AM, ReFresh said:

    https://www.youtube.com/watch?v=PPfHZHogehE
    Someone got an solution for that? Still got no idea, how to fix it. 

    Video with the  fix: https://metin2.download/video/gV3x7RhoJZsJnMY6C61nEvmBOGrvnNn0/.mp4

    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:

    This is the hidden content, please

    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.

    This is the hidden content, please

    • Metin2 Dev 18
    • Good 2
    • Love 2
    • Love 5
×
×
  • 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.