Jump to content

Maximilian

Advanced members
  • Content Count

    29
  • Joined

  • Last visited

  • Days Won

    4

Posts posted by Maximilian


  1. On 9/15/2022 at 4:57 PM, defohost said:

    @Maximilian Thank you for posting this. I was trying to find this info for a while now. As I am recreating the entire game in Unreal Engine I want to know what players hated about TOP. 

    Also, don't you think that boats were kind of useless? When I played TOP and the people I know spent about 1% of their game time on a boat. The rest was on land. So, the question is, should we move away from boats completely or bring more gameplay to boats? 

    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.

    • Like 1

  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.
     

    • Like 1
    • Thanks 1

  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 :P

    • Thanks 1

  5. 21 hours ago, Rinor said:

    @Maximilian you already sharing the fix, means you should give an example how you did it so people here can test to know if this exploits works in their files and apply the fix you shared, as diff devs uses diff files/extensions/addons.

    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. 36 minutes ago, Rinor said:

    @Maximilian This is an issue caused from the “exploit” or “missing code” at lua side which is related to the gem stack feature that CO has.

    Ex: keep like 2 or any amount of lv 1 gem (any gem) on invertory and extract a gem lv 2 or higher from equips (same gem that you have as lv 1 on invertory).

    Ex:  if you extracted a lv 5 gem of rage and you had 20x lv 1 or more in invertory then all those 20x will turn lv 5.

    This fix is already shared on forum on CO community topics by Angelix or Fritt one of them.

     

    This would probably fix the issue you mentioned (Not tested).

     

    Edit: If your not able to find the fix, let me know i’ll share it here.

    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. 11 hours ago, Dan said:

    This looks like CO files based on the client? If you are using CO server files, take a look at lua\plugin\gem.lua. That is where they load forge/combine function.

    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. 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:
    immagine.png.3819aa09ccb6bd6c1bb7f8ca831511de.png

    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:
    immagine.png.969bc47e0c69400322700779732abc86.png

    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.


    immagine.png.1ad560f7c3badaaac33c87eae1622b5f.png

    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

    • Like 1
    • Thanks 1

  10. 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 :

     

    immagine.png.f1af634f582a9c3e508d15919a71f9af.png

     

    Now, my intent is to change this default so that when I right-click it defaults to a "straight" view
    Similar to this:

     

    immagine.png.798d87b116acb321fdca6dd2e00d1760.png

     

    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 :)


  11. 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.


  12. 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.


  13. Yes , it works as intented.

    The only thing you have to be careful about is that if you close clients , the order continues to be the same, it doesn't fill the "hole".

    So if you have 4 open on 0 1 2 3 , close the last two 2 3 , and open two more , they will be on 0 1  as the first two.

    However it works really well. 

    Note : if you want to use it too , check how many cores your CPU has , and edit the "4" to be your number.

    • Like 1

  14. 10 minutes ago, Billy said:

     

     

    Thanks , however in my preliminary search I had arleadly found that method and didn't find it satisfactory.

    The main problem is that it would require a different shortcut for every affinity i wanted , so four shortcuts in my case (unless i misunderstood something), i would like one single start.bat that automatically determined which Core has the least number of game.exes running on it and it executed the new game.exe with that particular affinity.

    I hope i'm being clear enough , if i need to rephrase just ask :)


  15. I would suggest looking at "A [Class]'s Life" quests. (A Swordsman'sLiife from Peter , A Herbalist's Life from Gannon , and so on. Every class-quest bearing NPC has it)

    Instead of making 5 different quests and setting them to come up randomly , just make one quest with randomized goals.

     


  16. I am wondering if it is possible to edit the start.bat in such a way that every new Game.exe client opened is automatically set to have an affinity with the least busy CPU core.

    I realized while playing with many clients open that while the game lagged considerably with both CPU and RAM being under 50% usage , on further investigation i realized that one single core (the 0th) was doing all the work , processing for all the eleven clients i opened.

    Now , the fix was fairly trivial , going on task manager and setting the affinity for every game.exe to a different CPU core. Once i did so the lag completely disappeared.
    Doing so manually is a bit of a chore , and more importantly i often forget to do so.

    Is there a way to set the start.bat to recognize the affinities of the other game.exes and automatically setting the new process affine to the Core that has the least number of processes affine to it?

    Thank you in advance.


    And example : I have a 4 core CPU , 1st game, exe would be affine to CPU 0 , 2nd to CPU 1 , 3rd to CPU 2 , 4rth to CPU 3 , and then start repeating.


  17. 20 hours ago, Nobre said:

    you mean this site?

    http://piratia.arbah.ru/en/



    Thanks! I was used using arbah.ascaronia.ru and this link is offline , even googling didn't help finding a copy/another website.

     

     

    3 hours ago, V3ct0r said:

    This is a private development, you can only buy it from owner If he agrees.


    My interest was simply to find an equivalent alternative , i initally believed they were done for good.

     

     

    3 hours ago, V3ct0r said:

    Free alternatives (Russian section):


    Another reason for me to start learning Russian then :D , as soon as the exam session is done i'll get on with it :) 
     


  18. 2 hours ago, Gamez Pirates said:

    look at how to enforce policies so that there is a sense of 'tidyness' on the forum, rather than a pile of mess.



    Thank you , that's precisely what I wanted to convey .


  19. 51 minutes ago, Leba said:

    Taking that into account, why would they follow rules which are written somewhere, unless they are enforced?


    Pressure , the existence of commonly agreed upon rules even with a lack of strict enforcement could drastically lower the ammount of rule-breaking, simply because of peer pressure.

     

    53 minutes ago, Leba said:

    and they shouldn't be because it's in no-one's interest for this already small community to lose members.


    However that could lead to a loss of potential new membership , or people who avoid partecipating because they don't like the forum envoirment.

    I think that a relaxed form of enforcement , bans no longer than three days , no permas being more than acceptable for a small community.

    • Like 2

  20. Well , that's a part of my point.

    The lack of rules is the majority of the problem ; I indeed suggest the creation of general forum rules ,at least covering the basics (spam/hatespeech etc), I obviously agree that enforcement shouldn't become retroactive.

    However the quality of the community would improve once rules are in place , in my opinion.


  21. I hope not to come out as too harsh , however does this forum have actual moderation?

    I continually see one word posts , balantly offensive retorts/statements , the and some casual hatespeech / ableism .

    I am worried that it drives away the more polite of people , given that not everybody is peachy to be innundated of toxic comments if s/he dares to offer something.

    If the answer is negative , may I ask why it's the case?

    TL;DR : Imho the forum is a dump , we need the Hammer and Purges 

×
×
  • Create New...