Jump to content

Gurgarath

Forum Moderator
  • Posts

    341
  • Joined

  • Last visited

  • Days Won

    6
  • Feedback

    100%

Everything posted by Gurgarath

  1. Love me some of that sweet old nostalgia post. I often dig up stuff like this on the internet, mostly to no avail. It is crazy how things we saw everywhere and everyday became vaporware in the span of just a few years or a cataclysmic digital event (Megaupload). I still remember how I was going crazy with my VirtualPC in the sweet year 2009 on my Vista desktop trying to make it handle the hamachi server. Good times
  2. Having an open source client would be excellent but the amount of work is crazy. Using OpenGL or Vulkan would be an alternative to DX, and a good one at that. But the amount of work is crazy for only a few % of the players (I am not taking into account the benefits it would bring to the game who are increasingly interesting other than cross-platform). Those players will usually just run Wine or a VM to make the game run, which shifts the compatibility work to the player
  3. Well, well, well. Syreldar is absolutely right and we should have checked. On the original mainline and novaline, the "Original" function is your "Fixed" function. Your "Original" is a completely custom function that of course doesn't work because of NULL checks on integers. I thought it was an original shenanigans as it wouldn't be unlikely, but no. By default, everyone has a working function, this tutorial is by essence not necessary. What sources do you use though?
  4. Hello, thanks for the tutorial, but I would still advise you to keep the nullptr checks for relevant parts. I don't think it will go null, but you never know until it gets null. int item_set_socket(lua_State* L) { CQuestManager& q = CQuestManager::instance(); LPITEM item = q.GetCurrentItem(); if (item == NULL) return 0; if (item && lua_isnumber(L, 1) && lua_isnumber(L, 2)) { int idx = (int) lua_tonumber(L, 1); int value = (int) lua_tonumber(L, 2); if (idx >=0 && idx < ITEM_SOCKET_MAX_NUM) item->SetSocket(idx, value); } return 0; }
  5. Hello, thank you for your share, but if you want REAL realtime information without making your database blow up because you send a thousand queries; use the game's API. Which will really send you real time statistics and will have a reallly really small impact on performances (as it is P2P querying between cores basically).
  6. There might have been a mistake on who it belongs. All credit in fact goes to @ arves100. When I talked with @ FrenchForeignLegion I said that the original source of the SDK might have been me (because I had it for years and sent it occasionally). But it turns out this is NOT the version I sent and that this is also an implementation and not only an SDK. I just wanted to clarify my part in this! Been using that for years now and it is really cool indeed!
  7. Thank you for telling me. It seems like my Mega.nz account just got nuked and everything except folders was removed. Why? I don't know. But if you ever have sensitive stuff on it, back-up it elsewhere. I indeed kept the file elsewhere and I did good. Here is the back-up link: Download Alternative download links → Alternate_1 or Alternate_2 or Alternate_3
  8. This is what I said in my own topic, except the PASSWORD() which I actually forgot (I already did not use MySQL5 hashing when I upgraded). This is this simple, indeed, drop-in replacement, just enclose reserved keywords from queries with backticks `, use another password encryption and execute queries with disabled strict mode
  9. Our answers cannot be clearer. It is basically a full tutorial on sources changes from MySQL <= 5.7 to MySQL 8. For the database export, basically read the errors and fix them. Most of them can be fixed by adding "INSERT IGNORE INTO" and by disabling MySQL strict mode in my.cnf (or session-wide, but prone to issues).
  10. Hello, fairly easy. It is a drop-in replacement basically and once you have compiled (which should only eventually trigger deprecations warnings), you will have to edit all the queries containing "reserved keywords" to enclose them with backticks `. One of the new one is "Window" as you can see and this is a keyword we use in our queries, notably in item.sql. [Hidden Content]
  11. I have updated the aforementioned post accordingly (two new suggestions): What's more, I have found another bug. Steps to reproduce: Make sure the MAI option is ticked Open a map Make sure a regen.txt file is present in the folder of the map Export the Atlas (MAI_Atlas) the MAI will contain "Monster Area Info" output on it, whether the tickbox is ticked or not. Work-around: Make sure the MAI option is ticked Open a map Make sure THERE IS NOT a regen.txt file is present in the folder of the map Export the Atlas (MAI_Atlas) the MAI will be perfectly fine Two new suggestions: Effects should be snapshotted and displayed in the Atlas. (Notably waterfalls or volcano smoke). Currently the do not appear It would be cool if the shadowmap was "casted" by the sun position when you press F11. Currently, they have a fixed direction, which can be contrary to the position of the shadow casted by the light position on terrain (Ex: Sun is at Noon, but shadowmap are casted to the east)
  12. There is an error with eventually the MAI (+ Shadow / Minimap) buffer. Steps to reproduce: Open a map Export atlas (it will work) Open another map Export atlas (it will crash) Work-around: Open a map Export atlas (it will work) Open another map Press Inser to reload Export atlas (it will work) I was able to reproduce it everytime with v44. Suggestion It would be really cool to be able to load json data for maps, effects, animations, basically whatever currently available in world editor. Edit Suggestion2 : It would also be cool to extend the Python Modules to generate shadowmap, heightmap, minimap and atlas (MAI and not MAI) as well as to replace textures (for example replace one texture by three textures in X proportion) Edit Suggestion3 : Allow .prt not to cast shadows. Grass casts a pretty bad patch of black on the map.
  13. Hello, There aren't really active forums anymore in Asia or in the US. However, the first ever forum was Chinese and is still open to this day, it's mcncc.com
  14. It would frankly be excellent to create a branch with epoll! There are high chances it would be more performant than libevent and eventually libev too as this is the base for both, despite losing a few feature (that in my opinion are not needed in our case anyway). I am glad to see this project gaining traction. -- About size_t and time_t, as long as those are not sent directly to the client (aka not in packet.h / input_main.cpp ...), it should be fairly fine. I haven't checked the usage in those sources so far but in my case I simply converted them to signed and unsigned 32bit integer (unless one doesn't use 32bit time_t on the client which is highly, highly, highly unlikely).
  15. Thank you for your release! I have seen a few libevent based binaries and sources ever since its first release in 2014 by iMer and I admit I was thrilled to expect yet another network poller like asio or libev or some others. Frankly well done for your project, this is exactly what makes us go forward as a community! Such project would give access to WSL or Docker to most people and I admit the vcpkg approach is a good idea! Thank you for your project and I am looking forward to more people to commit on this!
  16. Post the stacktrace, steps to reproduce, that would be more interesting
  17. Actually, this is likely more of a you problem than a system problem.
  18. There is a sense, but this is like putting a bandage on a wooden leg and it just masks the error. The error occur as skills from 112 and 119 are not used (no data), but due to the shifting due to additional data, this piece of code will execute, the SetSkill will get called by the client, the client will notice that there is no data and the client will crash / hang due to that. By removing this, it won't, but the skills will be broken nonetheless and the issues described in my post above will trigger. There is no reason however to add the piece of code he gave, people just have to make sure their player.sql is clean, or do one of the solution I gave.
  19. It is neither pointless nor useless, it is a good release all things considered. The fact that is isn't retroactively easy to put in place has more to do with the design flaws of the game more than the release itself. Of course cmdchat is not optimal, I myself said it, I am just giving eventual ways to do the system on the go without having to do a lot of work. The first solution is indeed the best!
  20. Do not do that on a live-server! It is an excellent tutorial, it works just fine and it is really cool. However, and like the following tutorial : Do not do it on a live server. For those wondering why the skills are completely broken, or why you have "skill.GetSkillType - Failed to find skill by 119" or why you have your character entirely broken, it is normal. I won't get into details, but all skill data, like quickslots, are stored in what we call a BLOB. When it comes to skill, all skill data, including passives and all classes from Warrior to Wolfman (if you have it), along with the skill level, are stored in this blob as hexadecimal. Depending on your datatype, it should be 1.49KB. However, if you add from tables.h a new byte, it will end up weighting 1.74KB. A direct result will be that the second line, which should start at offset 0x060 and end at offset 0x07F will have an additional byte, which will shift every skill result and end up overflowing into the next skill then, for example other columns. Well, in that case it is the other way around (it will read more than it should and end up short for the last skills) but your skills will be completely messed up anyway. You have tree solutions if you want to add this on a live-server : Rewrite skills to be stored in their own table instead of a BLOB in the player table, allowing you to properly extend data without having to mess with the Hexadecimal blob and export necessary data to the table. Properly understand the blob, then tinker with the data for every players to compensate this new BYTE. Replace every blob with a proper, reset one, but the impact will be a complete reset of every skill, for everyone. Bonus solution: Write your own version of the tutorial not impacting packets. For example through cmdchat, but it will be less clean, but that is what we used to do up to 2014 (legacy solution). Excellent tutorial however, I love this kind of quality of life, and it applies for both of what you shared!
  21. Good patch, thank you! The only reason I didn't do it this way is that I don't think people use the other polymorph marbles so I kept it simple. I personally do, but not like this, so I simply created a small helper function that I call to determine the adequate vnum. However, AutoGiveItem is better! uint32_t CHARACTER::GetAdequatePolymorphMarbleVnum(uint32_t dwMobVnum)
  22. Hello, thank you for your release but it is not a good or complete solution. Let me explain: It is better to not do "price * 1" as "price * 1" is simply equal to "price". pack2.items[i].price = item.price; In that case, both cases of the if are equal, you can then simply remove the following check and replace it with the code above. if (bOtherEmpire) pack2.items[i].price = item.price * 3; else pack2.items[i].price = item.price; Also, in shop.cpp you must remove the following piece of code for the change to be complete: if (it->second) // if other empire, price is triple dwPrice *= 3;
  23. Mine or Trial's? I didn't try Trial's, but about mine it's just related to a common game issue in which sometimes mounts without folders (or with wrong data) will not register your motion when walking and will only calculate it later on or on when idling (you can check that using /state while you move for example and notice that your coordinates don't move). It might actually be the cause of what you fixed in your screenshot, at least the symptoms looks similar!
×
×
  • 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.