-
Posts
656 -
Joined
-
Last visited
-
Days Won
187 -
Feedback
100%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Posts posted by VegaS™
-
-
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.
- 1
- 2
-
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.
- 1
-
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:
- 38
- 3
- 2
- 7
-
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
On 3/12/2023 at 7:25 PM, Kiwi said:Hello, thx for this share.
I have this error :
Spoiler0312 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
- 19
- 1
- 1
- 8
-
Excellent work , I'm looking forward to the next steps.
- 1
- 1
-
-
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:
QuoteIn 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.
- 1
-
Private Server Down Detector
It's an open-source internal tool for Metin2dev, not for private servers.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 aregex
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 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 filedefault: database.json
-
--output
- Output path directorydefault: ./output
-
--exclude
- JSON excluded urls filedefault: ignored_urls.json
-
--timeout
- Timeout for HTTP requestsdefault: None
(wait until the request is finished) -
--logging
- Enable console outputdefault = True
-
--domain
- URL of the topic forum's domaindefault = https://forum.metin2.dev/topic/
-
--threads
- The maximum number of threads that can be used for parallel processingdefault = 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 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
- 15
- 1
- 14
-
[x] Quickly generating a graph of the server statistics:
-
Whew, I stopped kissing my wife when I saw the Mali post notification...
- 1
- 3
- 1
- 2
-
-
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]
As a result, it can easily be extended to weeks or months.
- 105
- 1
- 1
- 3
- 1
- 20
- 1
- 18
-
-
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)
- 1
-
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.
- 2
-
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.
- party.h
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
- 16
- 1
- 2
-
-
-
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
- 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:
- 7
- 1
-
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):
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:
Inside of:
- 4
- 1
-
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.- 1
-
-
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 Contentvoid 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.
- 1
-
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:
- 16
- 2
- 1
- 3
-
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:
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.
- 18
- 2
- 2
- 5
LOCALE_STRING.TXT Korean bug
in Community Support - Questions & Answers
Posted
Go to Settings -> Preferences -> MISC. -> Autodetect character encoding (deselect it)