Jump to content

Recommended Posts

Posted
  On 8/16/2022 at 2:42 PM, vampir said:

I think when I joined the team couple of years ago and L2 was very popular, tales had about 3,5-4k on weekends. I had to do some Network IO optimizations, because MMOExecutableQueue had a bottleneck. 

Expand  

 

LOL

Posted (edited)
  On 8/15/2022 at 9:16 AM, An4rchy said:

 

No private server has over 5k players, unless it's 2007 and even then, servers would lag like hell with such amounts of players. Tales was notorious for p2w, paid clans, fake online and stuff like that, so .online showing 15k is normal for servers like that, it doesn't mean it's anywhere near the truth tho. Hell, even on Eola we showed 1400 online when there was ~500 real + shops/fakes/fake .online.

Expand  

no paid clans , at gathering tales had 2,9k ppl in giran with boxes , adrenaline confirmed 

  

  On 8/16/2022 at 9:22 AM, xdem said:

 

lmao u think knowlist is the problem? knowlist is just a safety pillow for the client, the real and only issue is the client the server doesn't care it scales vertically

 

The client won't render more than a few hundreds of server object per region, not to mention what its able to render per fov, its well bellow 300, no matter the machine, runs similarly on a low end 2007 pc and a 2022 high end pc, so by definition a server wont break the 2k-3k barrier ever, (the point where players get frustrated with severe client performance and quit is probably lower than that).

 

now, the 5k+ online is a joke (not to mention the 15k+), its ape grade marketing for ultimate trashcan fanbois like achylek, who can not appreciate reality and rely on fake large numbers to play the server.

 

5k+ can be done only with world sharding (instances/channels/etc) there's no such implementation on and L2 server ever including the official ones, (WoW does something similar)

 

A decent high online number is something around 600 capped to 1400, you can claim that this is 3k+ the apes will believe this instantly (they like to feel that they are part of something important)

Expand  

i know even official serbers have capped 6-8k online since l2 wont handle more ppl, 

 

since me was adrenaline user me know how every server had online, sorry me drunked my inglish bad 

Edited by AchYlek
Posted (edited)
  On 8/17/2022 at 11:12 AM, AchYlek said:

no paid clans , at gathering tales had 2,9k ppl in giran with boxes , adrenaline confirmed 

  

i know even official serbers have capped 6-8k online since l2 wont handle more ppl, 

 

since me was adrenaline user me know how every server had online, sorry me drunked my inglish bad 

Expand  

 

bullshit, adrenaline gets the server's online info from login server packets that can be easily faked by the server, a fool being fooled is not something new you are welcome ! You have not a single idea how the server works, its impossible for adrenaline to know a realistic online count without porting to every single region of the server in an instant its impossible to do it

Edited by xdem
Posted
  On 8/17/2022 at 1:14 PM, xdem said:

 

bullshit, adrenaline gets the server's online info from login server packets that can be easily faked by the server, a fool being fooled is not something new you are welcome ! You have not a single idea how the server works, its impossible for adrenaline to know a realistic online count without porting to every single region of the server in an instant its impossible to do it

Expand  

That's not true. Official servers used real online count in those packets, so it was a reliable source of online count information.

 

Adrenaline is also perfectly capable of finding out how many characters are present in Giran or any other region, so it was easy to find out how many people attend gatherings. Fake online characters would be counted in such case too, but we never used them on tales.

Posted
  On 8/17/2022 at 2:31 PM, vampir said:

That's not true. Official servers used real online count in those packets, so it was a reliable source of online count information.

 

Adrenaline is also perfectly capable of finding out how many characters are present in Giran or any other region, so it was easy to find out how many people attend gatherings. Fake online characters would be counted in such case too, but we never used them on tales.

Expand  

 

How is it perfectly capable ? This is unreliable the server can fake it very easily, and for the sake of the conversation we are talking about whole server online counts which is transmitted from the LoginServer, it can be faked with ease.

 

Adrenaline can't find the online count reliably, a decent developer is one step ahead of it in this matter.

Posted (edited)
  On 8/17/2022 at 4:19 PM, xdem said:

 

How is it perfectly capable ? This is unreliable the server can fake it very easily, and for the sake of the conversation we are talking about whole server online counts which is transmitted from the LoginServer, it can be faked with ease.

 

Adrenaline can't find the online count reliably, a decent developer is one step ahead of it in this matter.

Expand  

damn rly u said this? even dead l2net can count real online , adrenaline count online at  loc, but though it u can find real online 

 

me found only this photka https://i.imgur.com/r9AqdaX.jpeg and its 2k15 photka i think when devs had no idea about phantoms

Edited by AchYlek
Posted
  On 8/17/2022 at 7:40 PM, AchYlek said:

damn rly u said this? even dead l2net can count real online , adrenaline count online at  loc, but though it u can find real online 

 

me found only this photka https://i.imgur.com/r9AqdaX.jpeg and its 2k15 photka i think when devs had no idea about phantoms

Expand  

 

told you the total online is offered by the server and can be totally faked by the developer at any time, adrenaline can't ever know the real online as there's no magic way to know, but to trust that whatever the server claims is true

Posted

what is on screen shows number of players bot sees in range, adr never used auth server for anything.

 

Back to maybe 2 years ago, off servers still allowed unauthed access to direct server stats (c_version with proto -3), and when covid hit chronos/naia/classic was at its online cap of 5.5k-6k most of the day. L2j ppl might be unaware, but off servers had login queue added many years ago, because servers were often full (back when game was still doing good).

Posted (edited)
  On 8/16/2022 at 9:22 AM, xdem said:

 

lmao u think knowlist is the problem? knowlist is just a safety pillow for the client, the real and only issue is the client the server doesn't care it scales vertically

 

Expand  

 

Well it's true if you have 5k players in your known objects it's gonna be an issue for the client, but there's many ways to limit the players that are rendered.

 

They should have just updated to newer unreal technologies with goddess of destruction chronicle coming out, but I can understand why they didn't; their population was 1/10 by that time so it was unnecessary.

 

-

 

Server-side, there could be some issues with huge online if there's heavy operations done while iterating online players, but you're most likely right it's not like it runs on i5 4gb ram nowadays.

 

-

 

Adrenaline detects online count most likely by the packets sent by the server, it's 10 second job to fake these numbers. I can make server look Heavy with 5 online players and send 3450 players count. Unless they've got a more sophisticated way of doing this which I doubt is possible.

Edited by An4rchy
Posted (edited)
  On 8/25/2022 at 9:41 AM, An4rchy said:

 

Well it's true if you have 5k players in your known objects it's gonna be an issue for the client, but there's many ways to limit the players that are rendered.

 

They should have just updated to newer unreal technologies with goddess of destruction chronicle coming out, but I can understand why they didn't; their population was 1/10 by that time so it was unnecessary.

 

-

 

Server-side, there could be some issues with huge online if there's heavy operations done while iterating online players, but you're most likely right it's not like it runs on i5 4gb ram nowadays.

 

-

 

Adrenaline detects online count most likely by the packets sent by the server, it's 10 second job to fake these numbers. I can make server look Heavy with 5 online players and send 3450 players count. Unless they've got a more sophisticated way of doing this which I doubt is possible.

Expand  

 

the bottleneck doesn't really have to do with rendering or some internal that can be improved, its a CPU bottleneck on the network level of the engine, as you increase the server objects linearly the work of the CPU on the network level raises exponentially and the current architecture of L2 networking can't handle that 

Edited by xdem
Posted (edited)
  On 8/25/2022 at 12:31 PM, xdem said:

 

the bottleneck doesn't really have to do with rendering or some internal that can be improved, its a CPU bottleneck on the network level of the engine, as you increase the server objects linearly the work of the CPU on the network level raises exponentially and the current architecture of L2 networking can't handle that 

Expand  

 

You could be right, but I doubt client networking bottlenecks the CPU (unless the server floods the client with identical packets, where there should be appropriate checks by the client to avoid doing the same thing over and over). It sounds a bit dumb too if they didn't optimize CPU operations in the engine to handle huge amounts of players.

 

Generally I don't think logic/networking takes more time than the shaders processing and calculating as well as the rendering, but I could be wrong. I haven't really gone into detail of how UE2 rendering pipeline works or how L2 handles logic/networking.

Edited by An4rchy
Posted
  On 8/26/2022 at 6:54 AM, An4rchy said:

 

You could be right, but I doubt client networking bottlenecks the CPU (unless the server floods the client with identical packets, where there should be appropriate checks by the client to avoid doing the same thing over and over). It sounds a bit dumb too if they didn't optimize CPU operations in the engine to handle huge amounts of players.

 

Generally I don't think logic/networking takes more time than the shaders processing and calculating as well as the rendering, but I could be wrong. I haven't really gone into detail of how UE2 rendering pipeline works or how L2 handles logic/networking.

Expand  

 

I didn't said it bottlenecks your CPU, it's just not able to utilize it correctly due to its architectural design, you can try to lower your graphics settings etc, you won't notice a difference so my guess is that the lag is internal and networking is my first suspect 

Posted (edited)
  On 8/26/2022 at 9:38 AM, xdem said:

 

I didn't said it bottlenecks your CPU, it's just not able to utilize it correctly due to its architectural design, you can try to lower your graphics settings etc, you won't notice a difference so my guess is that the lag is internal and networking is my first suspect 

Expand  

 

Lowering your graphics can only make a difference if you lower the field of view distance (it's an option in Classic client) so that it doesn't render objects that are far away. Even though this improves fps issues, it's not fun to play like this, specially if you're hunting specific monsters or looking for a certain player because they're simply not visible unless you get close to them.

 

However this makes me wonder if they even include concepts such as batch rendering, texture resolution optimizations or proper LOD management. It's most likely all optimized and included since unreal engine has been the leading 3d game engine for years (even back then) but it's still shocking that ncsoft never changed/optimized their networking/logic architecture even after all these years, specially since it causes such fps issues.

Edited by An4rchy
Posted
  On 8/25/2022 at 12:31 PM, xdem said:

 

the bottleneck doesn't really have to do with rendering or some internal that can be improved, its a CPU bottleneck on the network level of the engine, as you increase the server objects linearly the work of the CPU on the network level raises exponentially and the current architecture of L2 networking can't handle that 

Expand  

That's not true. Long time ago I made a test, in which I spawned few thousand NPCs, that didn't have random animation, movement or any other trigger for sending packet except for initial NpcInfo. Client was very, very slow in rendering them, but even after few minutes you can notice that it will settle with limited amount of NPCs that are rendered. When you move around in such environment, NPCs far away will be deleted, while those closer to you will be rendered. This happens without any NpcInfo packets being sent, so client stores them in memory even though they are not shown.

 

I can't say what exactly is the problem, but for sure it's not easy to fix.

Posted
  On 8/27/2022 at 7:52 PM, vampir said:

That's not true. Long time ago I made a test, in which I spawned few thousand NPCs, that didn't have random animation, movement or any other trigger for sending packet except for initial NpcInfo. Client was very, very slow in rendering them, but even after few minutes you can notice that it will settle with limited amount of NPCs that are rendered. When you move around in such environment, NPCs far away will be deleted, while those closer to you will be rendered. This happens without any NpcInfo packets being sent, so client stores them in memory even though they are not shown.

 

I can't say what exactly is the problem, but for sure it's not easy to fix.

Expand  

 

This can still be caused by the internal architecture of the engine as xdem said, but I still think it's got more to do with the rendering process. I mean it was made during 2002-2004 most likely when mmorpgs were few due to this reason (and many more ofcourse), chances are they never updated their code since people got used to it and population kept decreasing after C5-Interlude.

 

I don't think it's fixable unless you remake the game in a newer engine cause you basically need to rework the whole engine with newer faster technologies like ECS system or rendering stuff like I mentioned in a previous reply.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.




  • Posts

    • hello, i want to wtt my charracter in l2elmorelab 1x harbor for 1.5kkk adena in l2reborn 10x new. Or if you interested tell me your offer. :)) Clean Mail 30 lvl Cleric Naked   Updated.
    • package ai.npc.NFWalker; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import l2r.gameserver.enums.CtrlIntention; import l2r.gameserver.model.Location; import l2r.gameserver.model.actor.L2Npc; import l2r.gameserver.model.quest.Quest; import l2r.gameserver.network.clientpackets.Say2; import l2r.gameserver.network.serverpackets.NpcSay; public class NFWalkerAI extends Quest { private static final int WALKER_NPC_ID = 20116; private final Map<String, Route> routes = new HashMap<>(); private final Map<Integer, Integer> npcIndexes = new HashMap<>(); private final Map<Integer, Boolean> npcReverse = new HashMap<>(); private final Map<Integer, String> npcCurrentRoute = new HashMap<>(); public NFWalkerAI() { super(-1, NFWalkerAI.class.getSimpleName(), "ai/npc/NFWalker"); loadRoutes(); addSpawnId(WALKER_NPC_ID); } private void loadRoutes() { // Route 1 Data Route route1 = new Route("route1"); route1.addPoint(new RoutePoint(0, 149363, 172341, -941, 0, false, "")); route1.addPoint(new RoutePoint(1, 148568, 172328, -980, 5, true, "Puff")); route1.addPoint(new RoutePoint(2, 148536, 172792, -980, 0, false, "")); // Route 2 Data Route route2 = new Route("route2"); route2.addPoint(new RoutePoint(0, 149363, 172341, -941, 0, false, "")); route2.addPoint(new RoutePoint(1, 150248, 172328, -980, 5, true, "Rise my children! Bring me the servants of the god! Let them be offered to our god Bifrons!")); route2.addPoint(new RoutePoint(2, 150248, 172776, -980, 0, false, "")); // Add routes to the map routes.put("route1", route1); routes.put("route2", route2); } @Override public String onSpawn(L2Npc npc) { if (npc.getId() == WALKER_NPC_ID) { selectInitialRouteForNpc(npc); } return super.onSpawn(npc); } @Override public String onAdvEvent(String event, L2Npc npc, l2r.gameserver.model.actor.instance.L2PcInstance player) { if (event.equalsIgnoreCase("move")) { moveNpc(npc); } else if (event.equalsIgnoreCase("check_reached")) { checkIfReached(npc); } return null; } private void moveNpc(L2Npc npc) { String routeName = npcCurrentRoute.get(npc.getObjectId()); Route route = routes.get(routeName); Integer pointIndex = npcIndexes.get(npc.getObjectId()); if (route != null && pointIndex != null) { RoutePoint point = route.getPoints().get(pointIndex); if (point.isRun()) { npc.setRunning(); } else { npc.setWalking(); } if (!point.getChat().isEmpty()) { npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), point.getChat())); } npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(point.getX(), point.getY(), point.getZ())); // Log movement intention System.out.println("NPC " + npc.getObjectId() + " moving to " + point.getX() + ", " + point.getY() + ", " + point.getZ()); // Schedule a check to see if the NPC has reached its destination startQuestTimer("check_reached", 1000, npc, null); } } private void checkIfReached(L2Npc npc) { String routeName = npcCurrentRoute.get(npc.getObjectId()); Route route = routes.get(routeName); Integer pointIndex = npcIndexes.get(npc.getObjectId()); if (route != null && pointIndex != null) { RoutePoint point = route.getPoints().get(pointIndex); Location currentLocation = npc.getLocation(); Location targetLocation = new Location(point.getX(), point.getY(), point.getZ()); // Check if the NPC has reached the target location if (currentLocation.equals(targetLocation)) { // Log that the NPC has reached the target System.out.println("NPC " + npc.getObjectId() + " reached target " + targetLocation); // Schedule the next movement startQuestTimer("move", point.getDelay() * 1000, npc, null); if (!npcReverse.get(npc.getObjectId())) { pointIndex++; if (pointIndex >= route.getPoints().size()) { npcReverse.put(npc.getObjectId(), true); pointIndex = route.getPoints().size() - 1; } } else { pointIndex--; if (pointIndex < 0) { npcReverse.put(npc.getObjectId(), false); pointIndex = 0; // Choose a new route after completing the current one in both directions switchRouteForNpc(npc); return; } } npcIndexes.put(npc.getObjectId(), pointIndex); } else { // Check again after 1 second startQuestTimer("check_reached", 1000, npc, null); } } } private void selectInitialRouteForNpc(L2Npc npc) { // Randomly select either route1 or route2 String selectedRouteName = "route" + (new Random().nextInt(2) + 1); npcCurrentRoute.put(npc.getObjectId(), selectedRouteName); npcIndexes.put(npc.getObjectId(), 0); npcReverse.put(npc.getObjectId(), false); startQuestTimer("move", 5000, npc, null); // Log initial route selection System.out.println("NPC " + npc.getObjectId() + " selected initial route " + selectedRouteName); } private void switchRouteForNpc(L2Npc npc) { String currentRoute = npcCurrentRoute.get(npc.getObjectId()); String newRoute = currentRoute.equals("route1") ? "route2" : "route1"; npcCurrentRoute.put(npc.getObjectId(), newRoute); npcIndexes.put(npc.getObjectId(), 0); npcReverse.put(npc.getObjectId(), false); startQuestTimer("move", 5000, npc, null); // Log route switching System.out.println("NPC " + npc.getObjectId() + " switched to route " + newRoute); } private static class Route { private List<RoutePoint> points = new ArrayList<>(); public Route(String name) { } public void addPoint(RoutePoint point) { points.add(point); } public List<RoutePoint> getPoints() { return points; } } private static class RoutePoint { private int id; private int x, y, z, delay; private boolean run; private String chat; public RoutePoint(int id, int x, int y, int z, int delay, boolean run, String chat) { this.id = id; this.x = x; this.y = y; this.z = z; this.delay = delay; this.run = run; this.chat = chat; } public int getId() { return id; } public int getX() { return x; } public int getY() { return y; } public int getZ() { return z; } public int getDelay() { return delay; } public boolean isRun() { return run; } public String getChat() { return chat; } } } I looking for help, with this, the npc not start to move. Im trying to create, an NPC wich have multiple walk routes basic logic is  random pick a route complite the route  like Route 1 start form zero (0 -> 1 -> 2(or more) -> 1 -> 0) When the npc return to 0, the script should pic the other route and start again.  And if there is a message like point 1 here     "route1.addPoint(new RoutePoint(1, 148568, 172328, -980, 5, true, "Puff"));" The npc should display the chat message. Currently my problem is the npc not moving, but if I manage it to start moving its randomly move between the route 1 and 2 set of coordinates. Currently for me its  a nightmare. I hope anyone can help somhow.
    • We are certainly not an ambulance, but we will definitely cure you of blacklists and empty pockets. Live freely with SX! Each of you will receive a trial version of SX to familiarize yourself with the product, all you have to do is post in this thread
    • qual e o valor pra atualizar o java da soucer ?
  • Topics

×
×
  • Create New...