Jump to content


Advanced members
  • Content Count

  • Joined

  • Last visited

  • Days Won


Maximilian last won the day on January 28

Maximilian had the most liked content!

Community Reputation

25 Neutral

1 Follower

About Maximilian

  • Rank
    Cabin Boy

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. The issue is not "boats or no boats", it's that they feel like two totally disconnected games most of the time. There is some interesting gameplay part of sea bossing, outside 40-60+ sea voys ganging up on a single mob/boss all sea game mechanics are sluggish, the time needed to simply get from a place to another is too long and farming items in the sea is extremely flat. It feels like the original devs gave up on the sea in the first quarter of the game. My approach if I were to re-structure that would be : increase baseline boat speed, do not have the "boat" as an item the player makes, but as an intrinsic part of the character, have every character have at least some of their skill useable in the sea (with different effects), Triple overall monster density, so the sea isn't as deserted, and take a hard look at consumables, perhaps making some manufacturing easier, or take out some basics (like hp and fuel) out of manufacturing and have it more accessible, It'd be very hard to take the sea completely out of the game without it feeling like a different game, but at least having it as a less miserable experience would improve overall enjoyment of that aspect. Thing is, this game does a thing that games shouldn't do, It shoehorns players in very small but optimal tasks, there is not much agency/choice of what to do with your time outside dungeons, there are "optimal" things that are way better time investments than others, while a "meta game" would exist, it should also be taken in account that time investment in a specific thing should yield rewards within a standard deviation of the mean IMO. This is true for all mechanics, not just the sea, look at class repeatable "life quests" (not story quests) for example.
  2. Okay, sadly there wasn't much activity here, not that I expected much else. So, I have two main sections for this discussion, in a subset of one I think @V3ct0r can provide some insight. "Feel" and "Mechanics", there is some interplay between the two, but I think we can separate things a bit. At the end there will be an extra section with some opinion of mine. Now, let's be aware that a lot of this was intentional bad design so that the original developers could sell the solution. Look at this: Problem: Characters are overall slow, walking (or sailing) sucks. MOYLO Solution: Buy move speed necklaces Actual Solution: Increase base ms by 10-15% for characters, about 30% for ships Problem: SP regeneration is dreadful MOYLO Solution: buy a pet & teach it standard meditation Actual Solution: Increase base SP regeneration Problem: A character with baseline stats/gear is basically useless MOYLO Solution: Create a mandatory, very expensive, stat boost stick (pets) Actual Solution: Balance stats ⇾ attribute conversion differently, shift investment in more incremental/distributed steps. The one I summoned @V3ct0r for Problem: Client ⇾ Server and Sever ⇾ Client response times are awful. Character actions cannot be aborted quickly, responsiveness is terrible. I've done only some very superficial packet analysis, and to me, it looks like there's an intended cap on how quickly sever and client communicate, I don't know the details because I have only a very superficial ability to read C++, but only looking at the sheer amount of packets other games send in comparison this game sends a pitiful amount. To me, it also seems like the server sends excessive useless information to the client, especially for rendering other characters, and too little of what matters (other characters moving using skills, etc.) I think a good test for this is "chain following", if Char A is followed by Char B that is followed by char C, the server has to, process the fact that A is moving, tell B, process that B is moving, tell C, process that C is moving. I don't see why a server in 2022 shouldn't be able to manage it basically flawlessly. Solution: I have no clue how this would be improved from an implementation angle, but it's something that I want to explore. Now let's go into the more "Gameplay" aspects of it: Grind for the sake of grind Simply put, some things are excessively inaccessible. Either because you need to win six lotteries in a row, or because things are stacked in such an unlikely manner that there is not even a point to pursue them. Take life skills as an example, some are fairly nice mechanics, cooking and low-level manufacturing are genuinely enjoyable. However, high level manufacturing requires rarer and rarer wood, which means that it's a pure time-sink to get stacks of an item that drops 1-2% of the times. This shows absolutely no respect for the player's time, and leads players to just choose not to do that, but do something simpler, with a quicker return on investment. Some are actually plain useless, Analyzing has 3 useful catalysts out of six, 2 out of 3 are useful basically because they generate gold. Crafting, besides having a 50% flat chance of failure before even beginning, has an incredibly bloated list of possible items, making even the fact of something interesting a lottery, and it's completely skewed towards high-value items (lv 7 UG blueprints). "Life quest chains" are a promising concept implemented terribly, at high level every character is expected to farm Sea mobs and Sea items, which is plain ridiculous. This leads to my last comment: The economic aspect There's no quicker way to ruin any game than to have a bad economy. What's a bad economy, you might ask. We all know the problem that too easy gold creates on games, hyperinflation turns down people because they see everything too expensive, and they quit. And yes, it's a problem, but I'd say that most people are aware of it. Well, it's not the biggest problem, because I'd argue that gold sinks are easy to come up with. The problem is resource availability, given that this game has certain items that are only available through Mall purchase this creates two problems: Overabundance and Scarcity. Yes, they're opposites, but they coexist, the problem of Overabundance is about the items being created literally from thin air, from an in-game perspective there is no effort/time investment needed to get those powerful items, a theoretical player with limitless wealth could create endless amounts of those items. But the economic structure of the game doesn't force those people to rely in any major way on other players, to grow a pet you can spend literally 0gp and only care about buying the marriage materials. Now, obviously in more vanilla style servers, there is still some co-reliance, so there is a somewhat healthy economy. But this doesn't last forever, which leads to the next problem. Scarcity, when a server is mature, most of the expert players have "maxed" their main characters, there's not much they demand, they want mostly consumables, they don't need to invest much more into the game to maintain their status. And at the same time, they are the most powerful, so they naturally win more. This is what makes a server basically die of old age, the economy dries up, people lose interest, and it stops being enjoyable for everybody. There are more nuances I wanted to get in, but this post is already a massive wall of text, so I'll leave some days for people to read, think and critique this.
  3. Sorry for the provocative title, but I want to hopefully start a discussion about this. I've been involved off-and-on in this community for the past 15 years of my life, and I think as most here do, we like, or even love, the game. But we mostly do because of a sense of nostalgia. It was part of our youth, our formative years, I personally started learning English thanks to being daily exposed to it in ToP official servers But I was too poor for them, so then I moved to private servers, met a lot of people, some smart, some stupid, some kind and some toxic. I was a kid then, and I didn't have much to contribute, but I learned a lot, I started exploring the very basics of programming, overall I feel it has been a positive experience. However, that's an experience, and I think that if you're here then yours is probably similar. That doesn't change the fact that the base game, and here I refer to the vanilla v1 version, is a terrible game. Now, some of us are attached to the "vanilla feel" (I'm part of that group) and some of us hate it, and play on more "customized" versions. I think it's time to reconsider our preconceptions, identify the problems, and think how to approach them. This isn't a "feature request", this isn't a "team search", this isn't me pitching an idea of mine as the solution to all problems there are. My proposal is to discuss what is awful about the game, and to propose potential solutions. A lot of work has been done already, but my superficial analysis is that a lot of it looks unfocused, or overly specific, useful, but it doesn't change the overall experience of the game. Yeah, the offline stall is an amazing quality of life feature, and I love it. But why do I like it the most? Well, the main reason honestly is that I can level up my pets while offline. It basically is a workaround for a terrible game mechanic. Technical problems require technical solutions, however, I'm of the firm belief that this isn't a technical problem, this game was meant to have those problems so that the solution could be sold to the player. What I feel like that I can give back to the community, is some insight of the economic context we are in. This game was structured to do what it did in the old servers, have problems so that solutions could be sold to the players, we can't fix it because it's not broken. We'd need to some degree re-define "vanilla" re-design core parts of the gameplay, make things worth doing, so we can finally enjoy the game. But there's a very real problem, how do you finance people that manage a game when the community is very small? That's not a technical problem, but it's a very big reason why there can't be a single server that doesn't sell power for dollars, and there is not much that can be done about it directly, we'd need a community 10 times the size to completely move to a different monetization method. So, I'll leave this here, throw your opinions in the comments, please keep them constructive and write down what you feel is a problem and propose a solution, or what you think could be a first step in the direction of said solution. Ask people you know to contribute, if you feel that it could help. I'll summarize and add my own in a week or so, if this post catches enough momentum. Have a good day.
  4. I'd recommend trying to find a different approach, software solutions for this kind of problems usually aren't good solutions because software is plain simply unreliable. As Vector correctly mentioned, but I think he didn't stress it enough, people will find a way around it. If there's an incentive big enough, people will use proxies or other ways around it. I'd suggest pursuing different approaches, limit entrance by level, require expensive items/resources to join the map, if the marginal cost of entering with another client is higher than the marginal reward then people will not do it. So I'd tackle the issue by fine-tuning the costs/reward more than finding a technical solution to make it "impossible" for people to join, that's simply not a realistic way to solve the problem. Remember, there's always a dev better than you
  5. Use gm commands to lock inventory and try. Note: the main C++ function checks for some locks, so you can either disable the checks temporary for testing purposes or set the lock that's not checked which is the bLock boolean value. I will not explain how a non-gm can acquire the particular lock because probably a lot of servers are unsafe. You should have all the information needed if you actually own a server and have access to GM level commands.
  6. Another fix that came to my attention: the forcible flag: i = RemoveChaItem ( role , ItemID1 , 1 , 2 , BagItem1 , 2 , 1 , 0) the last attribute of this function is "0" which sets forcible deletion to false, when the function is set as: i = RemoveChaItem ( role , ItemID1 , 1 , 2 , BagItem1 , 2 , 1 , 1) Forcible deletion is set to true, which means that items are deleted even when the character's inventory is locked.
  7. Honestly, I do not see how they are related. The issue I am talking about stems from the fact that locked inventories prevent items from being deleted from the inventory, and the vanilla lua "begin_unite_item" function does not interrupt when items fail to be deleted. CO files have nothing to do with it, do not get confused by the fact that the screenshots show that the server I tested this on - with the GM's permission - has a CO-based client. If I read CO's sourcecode correctly this exploit does not work when CO's begin_unite_item is used, because CO uses an AddItem function which in the server c++ code checks for the inventory being locked or not, however the vanilla function doesn't add any item, it just increases the level attribute of one of the two gems used in combining. Having the function return 0 when item deletion files fixes the issue.
  8. The screenshots are taken in a server that alleges to use CO server files, so there's empirical evidence of this working. Furthermore not every server is using the custom gem.lua function, most are likely using the vulnerable one. @Dan I checked the function in gem.lua I think that there's a problem on it too if i == 0 or j == 0 or k == 0 then LG( "Hecheng_BS" , "Delete item failed" ) return -- does not return a value end -- this part of the function should probably be the following: if i == 0 or j == 0 or k == 0 then LG( "Hecheng_BS" , "Delete item failed" ) return 0 end
  9. No that's checked by the server, this kind of inventory-locking is non-trivial to acquire, I'm sorry but I do not want to disclose any more information on how that's achievable since this bug will likely be exploitable in several major servers untill this gets more attention.
  10. Hello everybody. Recently, a very damaging bug came to my attention, it's possible with a bit of manipulation to combine gems without destroying any in the process. I will not exactly explain how to fully reproduce it so if people were to notice this before server-owners did. The bug works this way: while the inventory is locked, no items can be deleted from it. This is usually not a problem because GiveItem does not work either, it will just give you an error. This is an example in said situation: When analyzing items while the inventory is locked, no abuse is possible because while no items are deleted from the player's inventory, no items can be added to it either, thus "operation failed" being added to the system message. However, if we were to look at the combining function : "begin_unite_item" function begin_unite_item (...) local arg = {...} local Check_CanUnite = 0 Check_CanUnite = can_unite_item_main ( arg ) if Check_CanUnite == 0 then return 0 end local role = 0 local ItemBag = {} local ItemCount = {} local ItemBagCount = {} local Get_Count = 4 local ItemReadCount = 0 local ItemReadNow = 1 local ItemReadNext = 0 local ItemBag_Now = 0 local ItemCount_Now = 0 local ItemBagCount_Num = 0 role , ItemBag , ItemCount , ItemBagCount , ItemBag_Now , ItemCount_Now , ItemBagCount_Num = Read_Table ( arg ) local BagItem1 = ItemBag [0] local BagItem2 = ItemBag [1] local BagItem3 = ItemBag [2] local BagItem1 = arg [3] local BagItem2 = arg [6] local BagItem3 = arg [9] local Item1 = GetChaItem ( role , 2 , BagItem1 ) local Item2 = GetChaItem ( role , 2 , BagItem2 ) local Item3 = GetChaItem ( role , 2 , BagItem3 ) local ItemID1 = GetItemID ( Item1 ) local ItemID2 = GetItemID ( Item2 ) local ItemID3 = GetItemID ( Item3 ) local ItemType2 = GetItemType ( Item2 ) local Item2_Lv = Get_StoneLv ( Item2 ) local Item3_Lv = Get_StoneLv ( Item3 ) local i = 0 local j = 0 i = RemoveChaItem ( role , ItemID1 , 1 , 2 , BagItem1 , 2 , 1 , 0) j = RemoveChaItem ( role , ItemID3 , 1 , 2 , BagItem3 , 2 , 1 , 0) if i == 0 or j == 0 then -- important part LG( "Hecheng_BS" , "Delete item failed" ) end Item2_Lv =Item2_Lv + 1 -- important part 2 Set_StoneLv ( Item2 , Item2_Lv ) -- important part 3 local Money_Need = getunite_money_main ( arg ) local Money_Have = GetChaAttr ( role , ATTR_GD ) Money_Have = Money_Have - Money_Need SetCharaAttr ( Money_Have , role , ATTR_GD ) ALLExAttrSet( role ) local Sklv = 1 local StateLv = GetChaStateLv ( role , STATE_HCGLJB ) Sklv = Sklv + StateLv local b = Check_CG_HechengBS ( Item2_Lv , ItemType2 , Sklv ) if b == 0 then -- important part 3 i = RemoveChaItem ( role , ItemID2 , 1 , 2 , BagItem2 , 2 , 1 , 0) if i == 0 then LG( "Hecheng_BS" , "Delete item failed" ) end local cha_name = GetChaDefaultName ( role ) LG( "JingLian_ShiBai" , "Player"..cha_name.."Gem combining failed" ) SystemNotice( role , "Very sorry, combining has failed. Gem has vanished...") return 2 end local cha_name = GetChaDefaultName ( role ) LG( "JingLian_ShiBai" , "Player"..cha_name.."Gem combining successful" ) return 1 end As you can see, this script does not "give" any item, it sets the gem level to 1 higher than it originally was. Therefore, if people were able to lock their inventory. They would prevent the deletion of their gem, and get one of their gems upgraded. Furthermore, this would work even if the combining were to fail given that the deletion of the gem due to failure happens *after* the gem level is increased, and items are not deleted when inventory is locked. The fix is trivially simple, just have the function stop when items are supposed to get deleted, like this : Or whatever suits your code-base, interrupt the function when items that should be deleted aren't. if i == 0 or j == 0 then LG( "Hecheng_BS" , "Delete item failed" ) return 0 end If any site admin wants any further proof I will oblige, however I will not go into detail on the process a player can use to lock their inventory in such a way. I would suggest to also check other functions which have the same behavior when items aren't deleted, I don't think any is susceptible to this same exploitation, but you never know. A screenshot of the bug in action: Before this I had 1 refining gem level 2 and two level 1 in my inventory, after I had two level two and one level one. And now one is level three one is level two and one is level one Neither the level 2 nor the level 1 of previous gem combinings got deleted
  11. By default, the camera angle - by that I intend the angle which the camera defaults when you double-right click on the screen - is this : Now, my intent is to change this default so that when I right-click it defaults to a "straight" view Similar to this: This probably isn't perfect, but It'd be enough to understand where this default is set, so I can try different values and figure out which is the correct one. Any help is appreciated
  12. You need to add an item use function to the item and have it output a refining gem. I would suggest you to dig into the server files for items with a similar behavior and try to implement it yourself, it's mostly copy and paste
  13. You can use archive.org to see in the past for (almost) any website. I picked a random date in 2011 as an example : https://web.archive.org/web/20101201084458/http://forum.serverdev.net:80/index.php So even if the official archive is gone , you'll be able to use this.
  14. I am not a complete beginnier , i'm not completely unaware how programming works. However as the most here know there is an impossibly large chasm between a rough understanding and a level of understanding which enables to actually do things. So my question isn't only about "what languages should i learn". I know it's C++ / Lua / SQL / HTML / PHP , maybe python for ancillary tool creation. My question is in the specific : in what parts of those languages i should focus on? My main issue with programming has been mainly one : i'm bored by the the basics but overwhelmed by the complexity after those basics. Any suggestion/learning resource is welcome , thank you for you time.
  15. I am searching without any sucess the part where the multiplier given by the level diffence between the character and the mob is calculated. I pretty much scoured the whole exp_and_level.lua but likely missed it, any help would be apreciated. Note : not development related , but i'm making an excell sheet which would calculate how many mobs does it take to reach a particular level , and i would keep track of the level difference. Thanks in advance.
  • Create New...