Jump to content

Karbust

Management
  • Posts

    1161
  • Joined

  • Days Won

    10
  • Feedback

    100%

Everything posted by Karbust

  1. Every time you jump into a new code base it is always confusing, either you are proficient in the language or framework, or not. It takes time to adjust yourself to the new code, to know how it works and where is the most important parts are. Most of the most experienced devs in the metin2 scene have been around it for years, and the source only leaked in 2014.
  2. I have no problem with all you are saying because those are all valid points, except about the unpack part, code wise it can be obfuscated, by that order of ideas then C# apps also have their code always visible, that is a useless point to make. The patcher compressed with electron-builder on the normal compression mode occupies around 94MB to 98MB. Also, when needed I can write a node C++ package, had to do it for something to access the Windows API in more than one occasion. I use electron because I can use whatever I want to do the frontend, and electron is also extremely popular, I could be using MAUI, Avalonia, Qt, Tauri, and many others, but from all of them, only Electron and Tauri are well supported and can use web frontend technologies to develop the UI, for me that is a great and a trade I'm willing to make in memory usage. There is also Electron.NET, that uses Electron behind the scenes with a C# backend instead of Node.js but isn't very popular. And, like I already said, I'm not willing to learn Rust to use Tauri. I'm a web developer and I'm not locked to JavaScript/TypeScript, in fact on the backend I use ASP.NET C#, with React frontends. (Another thing, I hate Python, so not even dead I would even think of using it for anything other than the metin2 GUI.) And, to finalize, please contribute something useful to the community, 3 out of your 6 posts are complaining about Electron, pick a tool and do a patcher for the community, or share something else. It's because of minds like that that the metin2 scene doesn't evolve, always using the same thing for everything.
  3. And what is the problem of having a patcher made in electron? It is still good for a metin2 patcher, my services are even based on it. Also, is this a lot of memory? Could be lower using something like Tauri or even full C# or C++, but it is actually not that bad.
  4. I made it in electron for 2 reasons, I wanted to learn how to use for a long time, and because I could use React to do it, like a website. I agree electron uses a lot of memory and the bundle size is big, because it bundles the entire chromium browser. I have seen an alternative that uses the system browser API instead of bundling an entire browser, however, it is made in Rust, it is Tauri, I'm not interested in learning it. You are more than welcome to explore it, if you already know Rust then it should be pretty straightforward. It is easy to maintain a electron application because you can have it use the same code base as the main website (if that is something the developer wants to do), just needs to add some abstraction layers to determine what API to use, if the electron, or the browser, other than that, it just works. And by the way, Adobe software is written in C++ (Qt), as far as I know. MS Teams used to use Electron but changed to WebView2: [Hidden Content] But yeah, many companies use Electron for their applications because if makes deploying a product fast and easy.
  5. Hello everyone, Most of you already know me, and for those who don't, I have been a member of metin2.dev since 2014, in the metin2 scene since 2012, so definitely not one of the oldest on the scene. Started playing metin2 on a Portuguese private server (#EliteMT2) and because I liked the game, I started trying to understand how it works, it was the best thing I could have done and paved the ground to where I am today as a programmer and a degree in Computer Engineering. Most of my experience has been in programming, mostly web development (JavaScript, TypeScript, Node.js, .NET C#), but I dable in multiple areas, including Network Administrator at my current job. Managing a community as big as this one will be a challenge that I'm willing to take so that it can keep running smoothly. In the beginning I will be getting familiar with how it is already working and then start comming up with ideas to improve the community. Hope you receive me well and, if you have any issues, questions, ideas (all ideas are welcome), get in contact with me through discord (preferably) or a DM on the forum.
  6. On debug you have to update CORS, that's not needed when you build it. Add a console.log above the following line: [Hidden Content] Also add the variable name on line (between the parentisis) [Hidden Content] to be able to see what the error is. After you do this, the error will be shown on the Chromium DevTools that the patcher opens on debug.
  7. Those instructions are on the README and on the first post, edit the file config.ts with your variables and then run yarn run electron-pack to create the exe. The script to generate fhe files.json for the webserver is also on the first post and the README.
  8. What do you mean by "network Connection"? o.O
  9. You need to set the working directory to the folder where the client files are, by default the process ran by the debugger uses some VS folder as the work directory.
  10. The only way to disable Windows SmartScreen is with a EV Code Signing Certificate, and it’s only available for registered companies and has a strict verification process. Self-signed Code Signing Certificates are only recognized on the machine they were created. The other options is having an IV or OV Code Signing Certificate, but it doesn’t automatically remove the Windows SmartScreen, that only happens with EV, it needs to build reputation, only after that it will disappear. (Neither option is free, and there is a verification process and the certificate will have the name of the Individual or the Organization that was validated through the process. Depending on the country the verification can be lengthy, in Portugal I even had to get myself notarized and sign some documents for Sectigo on the notary.) On my patcher services I offer an addon for Code Signing, and I also sign my own client and other tools I may share with others on my services.
  11. I no longer compile those libs manually, I install them through vcpkg: ijg-libjpeg:x86-windows-static, version 9e#1 Plus, on my last post in this topic I said what worked for me when I compiled the libs.
  12. You could try following this tutorial made by @ Shogun [Hidden Content]
  13. Update Today I added ID, name and description to the skills. I've also added search and filters to the skills' tab (doesn't work on affects, only skills). Not all of them have ID/names/descriptions because the tab has Affects and Skills, and the name for the affects is set on the python side. I'll try to add them (manually) in the future. [Hidden Content]
  14. Update Today, at the request of @MachuP1chu, I added the skills icons to the website. [Hidden Content] In the future I intend on adding the skills' names, but for now, that's what I've done.
  15. No, those icons are not available on M2IconDB, mainly because they aren't really icons, they are all on the same image, parsing those images would be a pain for me. But could be something to probably add in the future.
  16. Good luck finding one, unless someone already made one and doesn't mind sharing... The database by default uses MyISAM, so no foreign key support, so not possible to generate the diagram from the DB. Plus some tables can have foreign keys of different tables, like the table item, the owner_id can either be the player.id or the account.id, depends on where the item is, inventory of safebox/mall...
  17. Added support for DNS names on the post. All changes needed are on config.cpp.
  18. Added support for DNS names. All the changes are on config.cpp.
  19. Hello guys So, now that Cloudflare R2 is in general availability, it's time to talk about it and how it can improve your metin2 servers, more specifically, the patcher. Tradicional CDNs and block storage are expensive and charge a lot for egress bandwidth, but Clouldflare, as always, doesn't charge for bandwidth, at all. Here is the pricing: [Hidden Content] Storage: 10GB/month (free), then $0.015/GB-month Class A Operations: 1 million requests/month, then $4.50/million requests Class B Operations: 10 million requests/month, then $0.36/million requests On Class A, the more important operations for the patcher are: PutObject, and, if you use cloudflare's dashboard, ListBuckets and ListObjects (or the equivalent AWS S3 commands on the script at the bottom). On Class B, the more important operations for the patcher are: GetObject, and, again, if you use cloudflare's dashboard, UsageSummary (or the equivalent AWS S3 commands on the script at the bottom). I made a small PowerShell script to download a lot of files from the storage: For ($i = 0; $i -lt 1000; $i++) { $ProgressPreference = 'SilentlyContinue' $combinedVariable = "C:\Users\Karbust\Desktop\test\metin2_$i.exe" $Response = Invoke-Webrequest -Uri [Hidden Content] custom domain>/metin2.exe -OutFile $combinedVariable } This was the usage metrics: They barely change, the 20 class B requests are basically all from UsageSummary (refreshing the page), and the Class A are ListBuckets and ListObjects. Why is that? Because by using a custom domain it will cache the requests. This is good to prevent GetObject flooding requests. Cloudflare, on free accounts (until Enterprise), can cache up to 512MB per file. Instead of relying on the default cache rules, you can change them, to something like this: When you make an update, you need to purge the cache, either purge it all or just the files you want. Tutorial Go to your cloudflare dashboard and access the R2 tab: There you will be asked to enable it. You will need to have a payment setup in the account. Then, after that's done, create a bucket, you can call it whatever you want: Then go you Settings and scroll down to the Domain Access section and add one: The domain must be in the same cloudflare account as the bucket. Now you can use that domain to access the files in the bucket. If you change the cache settings, you must do it on the domain you added. When you upload a file (or a folder), it will be something like this: To access that file, you do [Hidden Content], like this: [Hidden Content] If you have folders, just do [Hidden Content]. If you use my patcher: You just need to edit this variables: export const patchlistUrl = '[Hidden Content]' export const patchlistFolder = '[Hidden Content]' export const patchSliderUrl = '[Hidden Content]' export const patchSliderImages = '[Hidden Content]' Since you can't upload more than 100 files at the same time with the dashboard, I made a script in typescript to help with that: [Hidden Content] or M2DL The instructions are in the repository, but I will say this, add the files inside the uploads folder, then run the script. If try to upload a file which already exists and the MD5 hash matches, it will not be uploaded and will return a http error code 412. The end I decided to make this tutorial since many servers use either one or multiple VPS to have more bandwidth, and downloads can become slow if many players are downloading at the same time, and because Cloudflare doesn't charge for used bandwidth, and has a generous free tier can is more than enough for almost all server owners. Enjoy
  20. Sorry, my mistake, here's the correct query. Added a check to not select players in which the accounts that are don't have status OK. SELECT p.id, p.`name`, p.job, p.playtime, p.`level`, p.exp, g.`name` AS g_name, pi.empire FROM player.player AS p LEFT JOIN player.guild_member AS gm ON gm.pid = p.id LEFT JOIN player.guild AS g ON g.id = gm.guild_id INNER JOIN account.account AS a ON p.account_id = a.id INNER JOIN player.player_index AS pi ON p.account_id = pi.id WHERE p.`name` NOT LIKE '[%]%' AND a.`status` = 'OK' ORDER BY p.`level` DESC, p.exp DESC, playtime DESC LIMIT 100
  21. Use this queries instead For player ranking: SELECT p.id, p.`name`, p.job, p.playtime, p.`level`, p.exp, g.`name` AS g_name FROM player AS p INNER JOIN guild_member AS gm ON gm.pid = p.id INNER JOIN guild AS g ON g.id = gm.guild_id WHERE p.`name` NOT LIKE '[%]%' ORDER BY p.`level` DESC, p.exp DESC, playtime DESC LIMIT 100 For guild ranking: SELECT g.`name`, g.`level`, g.exp, g.win, g.draw, g.loss, g.ladder_point, p.`name`, p.id FROM player AS p INNER JOIN guild_member AS gm ON p.id = gm.pid INNER JOIN guild AS g ON g.id = gm.guild_id WHERE p.`name` NOT LIKE '[%]%' ORDER BY ladder_point DESC LIMIT 100
  22. Many hosts allow payments through cryptocurrency, mainly the ones that don't care about DMCA. For non-DMCA compliant hosts I'm not the best to answer, but I will leave this image here that I have found on some tor forum a while ago:
  23. If you know how to manage your server and how and where to host it, and most importantly, if you pay your taxes on it, GF and Webzen can't do anything, there are many companies that don't care about DMCA requests, and if your identity isn't leaked, there isn't anything GF can do against you legally, they don't know who you are.
×
×
  • 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.