Jump to content

Amun

Contributor
  • Posts

    216
  • Joined

  • Last visited

  • Days Won

    3
  • Feedback

    100%

Amun last won the day on April 11

Amun had the most liked content!

8 Followers

About Amun

Informations

  • Country
    Niger

Recent Profile Visitors

2641 profile views

Amun's Achievements

Experienced

Experienced (11/16)

  • Problem Solver Rare
  • Very Popular Rare
  • Very Important Person Rare
  • Dedicated
  • Reacting Well

Recent Badges

2.7k

Reputation

  1. Probably got a slap on the wrist and got told he wasn't a good boy. Then they left to do more important things, like drinking coffee or scratching their balls(and I can't blame them, it feels pretty good).
  2. Got any other articles? I have so many questions. Did they pay their taxes? Was it specifically related to M2? Did they get reported or did they just get caught with it because of other things? If so, who reported them? GF? What exactly is the story here?
  3. I don't know how to answer to this xD You're welcome, I love you too? You're welcome, have fun with it Yeah, well, that's just how it goes around here lmao Not really honorable if I had no choice, is it? xD Also, hell no, that would mean I'd have to go back and fix the rest of my topics out of sheer principle Edit, to not post another comment: Added precompiled FLAC/FLAC++ libraries and some build info, for those who need them/it. If you're going to build Flac yourself, keep in mind that there are some annoying CPU logs that you'll have to disable in their src.
  4. Due to unforeseen(but expected) circumstances -such as a very hungry little boy reselling my work- I have decided to make this version public. The hungry little boy is Backtrace/Mercury/Assembly/FrenchForeignLegion(and 100 other accounts that he's using for scamming). ### This version's features: - Proximity chat (local) - Guild chat (in-map) - Party chat (in-map) - Global/Master volume - Per-speaker volume handling (with the ability to pin speakers at the top of the list) - Configurable sampling frequency and channels (I still recommend sticking to 32kHz and 1 channel because of packet sizes.) - You can not speak over a channel unless hearing is also enabled - Sound reduction to prevent loud sounds from blasting your ears - Basic but functional sound detection to avoid unnecessary packets - FLAC encoding/decoding to reduce packet sizes wherever possible - ?? Fuck knows, I can't remember. ### Notes: - M2's networking doesn't handle partial packets. - You'll have to either: - Disable `IMPROVED_PACKET_ENCRYPTION`, or - Implement that part yourself(I won't help you with this, don't DM me.) - Don't bother with pull requests, this repo was released out of necessity, it won't receive any updates. - If you want to make changes, feel free to fork it. - The system has been live for over a year on multiple servers and tested by thousands of users. - If it doesn't work on your server, you did something wrong. #### QFlags - `/e voice_chat_disable 1/0` to enable/disable - `/e voice_chat_hear_yourself 1/0` to be able to hear yourself(only on test_server) ### Technologies used: - [Miniaudio - An audio playback and capture library for C and C++]([Hidden Content]) - [FLAC - Free losless audio codec]([Hidden Content]) All of my customers will receive an update with more features soon. This version received its last update on `28.01.2025` Good luck. UI Picture Github: [Hidden Content] or [Hidden Content] Backtrace and his boy: [Hidden Content] VT for archive: [Hidden Content]
  5. Pretty late to the party, I guess. First of all, you'll never have a null/nullptr in the set unless you specifically insert null/nullptr(which you won't, since it's inserted through CItem::Save). You can't just reassign it like you do with a vector. So that's useless, a dangling pointer will fall right through. Second of all, since now we can assume that all the items can be dangling pointers, your VID check will do nothing but delay the crash and fuck you in the ass when it does because the owner/customer will ask "Why did it crash" and you'll be like "Well, idunno, I already did the checks here, IT MUST BE YOUR FAULT". What you're doing there is hope that the VID is either still the same that it was before deleting the item or that it didn't happen for the memory to be rewritten and have another valid VID there(which can happen). And so that's gone as well, you're back to SaveSingleItem, which was where the problem(which isn't SaveSingleItem itself, that's totally fine) ended up to begin with(and will also crash since that doesn't just access a simple uint through a constant method). Takeaways: You didn't fix it, you just made it harder to happen. If you run ASAN it'll spit right in your face when it gets to GetVid and sees that the item is just dangling, which would've done so in SaveSingleItem anyway, so yeah, you just crashed 2 lines earlier. Ah, also, if you don't run ASAN or the server doesn't crash, your "invalid data" is still there as well and will still be sent to the db. Marty's idea seems interesting, but I assume it will still lead to crashes(which I prefer, rather than recovering and moving forward with invalid data) if you don't check the item before accessing it. Don't know enough about how he's doing/using it to make a point so I'll just stay away from that for now. I'd also rather cut my dick off than rewrite the entire source to handle what could happen once if somebody screws up. Just crash the damn server, fix it, and forget it even existed.
  6. Having a license and stopping the service if the terms are broken is one thing, stealing data(from both the genuine and the ones that use the cracked one) is another thing. If anyone's got a few k Eur on the side and wants to have some fun, here, freshly baked by ChatGPT: Relevant Laws in Portugal: 1. Unauthorized Access to Computer Systems (Código Penal Português, Art. 6 e Art. 7) In Portugal, unauthorized access to computer systems is classified as "crime informático" (cybercrime) under the Portuguese Penal Code (Código Penal). The relevant law is Article 6 of Law No. 109/2009, which establishes criminal liability for unauthorized access and interference in computer systems. Penalty: Up to 5 years of imprisonment or a heavy fine. Higher penalties apply if the access leads to data theft or is done with malicious intent. 2. Data Theft (Lei de Proteção de Dados Pessoais - GDPR) Portugal follows the EU GDPR regulations, which apply strict penalties for data theft or the unauthorized handling of personal information. Penalty under GDPR: Fines up to €20 million or 4% of global turnover. Portuguese Comissão Nacional de Proteção de Dados (CNPD) is responsible for enforcing GDPR in Portugal. 3. Fraud (Código Penal Português, Art. 217) Selling a source with a hidden backdoor is a form of fraud, defined under Article 217 of the Portuguese Penal Code as "burla informática" (computer fraud). Penalty: Up to 3 years of imprisonment or a fine. Higher penalties apply if the fraud is conducted through electronic means. 4. Copyright Infringement (Código do Direito de Autor e dos Direitos Conexos) The unauthorized sale of Metin2's source code constitutes copyright infringement under Portuguese Copyright Law (Law No. 50/2004). Penalty: Up to 3 years of imprisonment. Fines up to €30,000. Where to Report This in Portugal: 1. Polícia Judiciária (PJ) - Unidade Nacional de Combate ao Cibercrime e à Criminalidade Tecnológica (UNC3T) The Portuguese Judiciary Police (Polícia Judiciária) has a specialized unit for cybercrime. Website: https://www.policiajudiciaria.pt Contact: Email: [email protected] Phone: +351 21 723 3337 2. Comissão Nacional de Proteção de Dados (CNPD) Since GDPR violations are involved, you can also report this to the CNPD. Website: https://www.cnpd.pt Email: [email protected] Phone: +351 213 928 400 3. Europol Because this crime affects cross-border victims, you can report it to Europol’s European Cybercrime Centre (EC3). Website: https://www.europol.europa.eu Report form: https://www.europol.europa.eu/report-crime Steps to Protect Yourself: Gather Evidence: Save all communication (emails, messages, payment details). Document any suspicious behavior in the code. Report to Authorities: Portuguese Polícia Judiciária (UNC3T). CNPD for GDPR-related violations. Europol EC3 for cross-border cybercrime. Notify Gameforge Legal Department: Since Gameforge owns Metin2, they should be made aware of the situation. Go have fun, you crazy boys
  7. Seems like he just copy/pasted what was already in the source. Also: // fuck off bool CHARACTER::IsReflect() const { return m_pkMobInst && m_pkMobInst->m_IsReflect; } Edit: Is this even used on official? I see it's mostly used for zodiac stuff, but it doesn't seem to have a column in proto for when to start reflecting. Maybe somebody that plays the official could do a test and tell us if it's used and if the percentages are in the good ball park.
  8. Thanks for sharing, but I have a few things to point out on this The black screen: You weren't supposed to load them in the game phase. I've only done it this way to keep it simple and for everyone to know where to find the code and do the initial changes. You were supposed to load them in the loading phase, along with all the other things. VID Already exist: Don't know what to say about this one right now, but I'll have a look at it when I got some free time(which probably won't be very soon..) As for the last problem, it's unlikely that you'll ever hit the upper limit of uint16_t. There's space for 65k races, you wouldn't hit it even if you sent the entire mob list * 20, so I tend to think your problem is coming from some other place.
  9. Because the master was supposed to forward the shutdown packet to them. Anyhow, it was just a question I had, no bad intentions. That item ID thing is pretty strange and don't really see why it would happen, but thanks for the heads up
  10. Cool idea and thanks for sharing, but since all the cores(including db) flush the cache on shutdown anyway, why not just make the DB flush the cache(or kill itself) when it loses all the peers? That way you could just shut down the cores and let the db cut its wrists in the bath tub when it's left sad and alone in the world
  11. Hope I didn't miss anything The pic I mentioned(my packets are changed, I had to take it from original): I assume you already have the db table with 5 players, but if not, here's the query ALTER TABLE `player_index` ADD COLUMN `pid5` int(11) NOT NULL DEFAULT 0 AFTER `pid4`;
  12. @backtop I added this yesterday. Let me know if you fixed it and I'll send you mine if not.
  13. For this: def __AreAllSlotEmpty(self): for iSlot in xrange(self.SLOT_COUNT): if 0!=net.GetAccountCharacterSlotDataInteger(iSlot, net.ACCOUNT_CHARACTER_SLOT_ID): return 0 return 1 SLOT_COUNT should be 5, yes Have a look at what the empire is for that account in player_index. If it's 0, then your query isn't updating the table. If it's over 0, then the problem is either from the query that loads the player, a packet that you forgot to update, the client source or the root(but the root should be fine if you said you updated it). It's difficult to tell you exactly what to check because you have to check both sources and the root, so the problem could be anywhere. What you need to do is to go to the select empire part of the root and work your way up through the sources, then back down through the login path to make sure that everything's updated. Can't tell you more than that
  14. You should have PLAYER_PER_ACCOUNT in length iirc, but the problem isn't from here(should still fix them though) DWORD pids[PLAYER_PER_ACCOUNT]{}; for (int i = 0; i < PLAYER_PER_ACCOUNT; ++i) The problem is probably from root. If you're using the new UI, look for this def LoadCharacterData(self) : self.RefreshData() self.MainStream.All_ButtonInfoHide() for i in xrange(net.CHARACTER_SLOT_COUNT_MAX) : # This should be 5 If you're using the old UI, then it's probably this def __AreAllSlotEmpty(self): for iSlot in xrange(self.SLOT_COUNT): if 0!=net.GetAccountCharacterSlotDataInteger(iSlot, net.ACCOUNT_CHARACTER_SLOT_ID): return 0 return 1 Note: there could be other parts that need to be updated, but this is just what I found at first glance. If it's not from the root, then check your queries and your packets.
  15. That's part of the ITEM_BLEND, which are the potions that offer attack, critical, magic resistance, etc. It basically says that you can't use any other potion of that kind(ITEM_BLEND) after using a magic resistance one. Why? No idea what the actual intention was, but I remember that all the players were using that potion last because of this. Can you remove it? Yes, and it would probably make sense to do so.
×
×
  • 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.