Jump to content


  • Posts

  • Joined

  • Last visited

About valdirk2

  • Birthday 06/22/1995


  • Nationality
  • Gender
  • Location

Social Networks

Recent Profile Visitors

671 profile views

valdirk2's Achievements


Contributor (5/14)

  • First Post
  • Collaborator
  • Conversation Starter
  • Week One Done
  • One Month Later

Recent Badges



  1. So there's something I'll have to research, because I don't know how to store this variable inside the binary. But thanks for the tips, now I know what path to take to create this system, I'm not very good with c++, but I'm learning. I also want to see how the cache system works inside the game, maybe I can do something there.
  2. I thought to store all this in a variable in python. Could python handle working with a variable with 100k of items? It would make a lot of difference in memory.
  3. I really thought about prioritizing performance in the "game". Whenever someone opens the item shop they send all the items currently in the shop available. Then the customer is concerned with filtering the items. And when any player adds an item it sends to all players connected the packet with the new item, without the need for any other query. Just the initial query when someone requests the items.
  4. Hello guys, I would like opinions from everyone. I'm setting up a global store for metin, a kind of auction, to retire offline stores. My idea is for players to advertise items they want to sell for a certain price, and these items are stored in a database. But my doubt is the following, what would be the most performative way to make this system, in relation to storing the items that are for sale. When the player opens the global store, simply the "game" sends several packets with all items currently available for sale (can be 1 to 1000kk of items in the database, but all summarized in just one query) and in pyhton i filter the items that will be displayed and paged to the player. Or send these items as needed, that is, every time the player searches for an item name or changes the page, the client asks for a request for 10 new items at a time, but this would cause a good amount of query to be processed. Each request would be necessary to always make a query to the database and return the items to players. I'm really in doubt which way would be more performatica, let the client get by with a large amount of data, or the "game" will send requests as needed.
  5. Hello gentlemen, I wonder if it is possible to trigger a quest using a command? For example /teleport And he opens a quest that I have related to that ... I know that there is another way to do that would be to put a login on the quest and send the index to the client ... However I would find it extremely easier to do this trigger using a command. Thank you to anyone who can help me.
  6. Well, come on, how can I start explaining why this topic. I am Brazilian and all the files that my text files are in UTF8, so I started checking the source of metin2 in search of leaving all files with UTF8 encoding and not having visual bugs. My source, server, client, etc ... is already totally in UTF8 without BOM. In this topic I will leave the FIX of a visual bug that I had in my quests when I add delay. Technically the problem is that UTF8 is multibyte, so the function that separated letter by letter always took a fixed value from the string encoded in utf8 ... thus giving shit. In EterLib/parser.cpp Technically the problem was solved. I am not very good with c ++, I found this solution in forums on the internet. If someone has a better solution just leave the feedback.
  7. I can only really congratulate you, how nice it is to study this kind of quality content. Congratulations, excellent.
  8. As it really feels good you read these types of content. Congratulations. Excellent reading.
  9. Could you add the output function? I wanted him to unzip the files in another folder, which I can select via the command line. I find it somewhat disorganized to leave the files unzipped inside the pack folder of the client.
  10. I understand, soon I make these checks to avoid a crash, and update the topic. And about using rapidjson, I for not have much knowledge with c++, I ended up just copying from the other functions that read the drops. But thanks for the feedback
  11. Hi guys I want to disclose a modification I made to my source to slightly improve the organization of common_drop_item.txt As always I notice, that I am not so familiar with c++, so this tutorial may contain some problem, for this reason I want to post and receive criticisms or opinions. I am also using google translator, I live in Brazil and I can only speak Portuguese First, I don't know if everyone knows, the common_drop_item is divided into 24 columns separated by TAB These columns are divided into 4 sections, from rank 0 to 3 That would be something like this PAWN S_PAWN KNIGHT S_KNIGHT In these sessions the first one is always ignored, because it could be some annotation or something The second is the initial level The third is the final level The fourth is the percentage The fifth is the item's VNUM And the sixth is the number of kill's, however investigating the source, I did not see a need in the field, after all in the function that reads these drops she also ignores. So what exactly did I do? I modified the function that reads common_drop_item, so that it looks like the later drop files. Separated by Group "Group Name" { Rank (int) "It would be from level 0 to 3" ID - Min Level - Max level - Percent - VNUM } I believe it is more organized and easy to change. Tutorial And common_drop_item will now look like this The common_drop_item I used was one that I believe is not modified, and with standard drops, if anyone needs it, I posted it here too. I put the common_drop_item files in github gits too. https://gist.github.com/rospirski/b6bffcd8108e8625128edf3b6e466eb8 I used a script I made in nodejs, to organize this file, and put these comments at the end with the name of each item. In case someone just needs to ask. Remembering that it is something experimental, I tested it here and it is working normally. Any criticism or suggestion just speak. Att: Rospirski
  12. I really only have this problem when I use npc_lock
  13. Hello guys, I have a very complicated problem to explain, and the most complicated way to solve. I'm using leaked marty files as a base. (Yes, I texted him to try to buy the current files and he never answered me.) So let's go to the problem, first I took the source, fixed some fixes, installed some systems. I also updated to use Clang, and all dependencies as static. That's basically what I did. Now the problem comes, I noticed that in the blacksmith NPC of the demon tower every time I clicked on it, and then closed the conversation, it presented this error in the syserr When I click "Close" it generates this error. And when I click "Cancel" it generates this error. Here's the quest I'm using And what I noticed that is generating this syserr is "npc.lock()" If I remove this npc.lock() from the line when 20075.chat.locale.deviltower_zone._170_npcChat with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and npc.lock() begin The errors stop. I also posted my Makefile that I made myself, even though I didn't have much sense of C and Makefiles I would be very grateful if anyone can help me with this problem. ??
  14. If I'm not mistaken, with "reload q" he already does that. In the files I'm working on, I don't use translate.lua, just locale.lua.
  15. I made a script to reload on locale_string I thought it was too easy, but I didn't even test it much. If you want to test. locale.cpp In function void locale_init(const char *filename) Add before FILE * fp = fopen (filename, "rb"); localeString.clear(); The function will look like this void locale_init(const char *filename) { localeString.clear(); FILE *fp = fopen(filename, "rb"); char *buf; if (!fp) return; fseek(fp, 0L, SEEK_END); int i = ftell(fp); fseek(fp, 0L, SEEK_SET); ... cmd_gm.cpp In function ACMD(do_reload) Add below case 'c': // cube // ·ÎÄà ÇÁ·Î¼¼½º¸¸ °»»êÇÑ´Ù. Cube_init(); break; this case 'l': ch->ChatPacket(CHAT_TYPE_INFO, "Reloading locale_string."); LocaleService_LoadLocaleStringFile(); break; I believe it's just that, I tested it quickly and it worked, I'm not sure on other channels.
  • 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.