Jump to content

Recommended Posts

Posted
5 hours ago, Mobius said:

If anything does not work properly, is because it is inherited like that from a parent project.

 

You better start using retail videos as a reference, instead of misinterpreting what OFF files actually do.

These two statements directly contradict each other.

 

The issue with l2j is that it doesn't serialize the game logic, like anywhere at all. Movement = completely isolated from the rest of the game logic and working on its own with no ability to get returned value guarantees between two method calls; HP/MP/CP = fully concurrent getters/setters, same about inventory and so on and on and on.

So obviously, you cannot just take code from retail 'as is' (which is designed to run on a separate, designated game logic thread which doesn't exist in l2j) - still that doesn't mean the code is wrong or cannot be used. Only the l2j cancer has to be removed/reworked.

 

And yeah, if 50k sequential invocations of getCurrentHp [within a method of an AI script] can return different values, you are fucked no matter if you use l2off code or try to figure out things from playtesting or videos. Just saying.

Posted

DEV|Supreme you changed from L2jMobius to L2jUnity because you are nothing more than an opportunist and

at that time L2jUnity claimed to be the best. Being a fanboy ever since, there is nothing you can say to tickle my ears.

 

*real*savormix you are correct, even if you left something out of the box. You know I am not wrong.

 

I am bored explaining myself on this forum.

Last time I posted detailed information, that conflidicted with L2jUnity, my post was deleted.

And each time I rightfully explain myself, there are more L2jUnity members spamming my thread without consequences.

 

Lock my topic.

I am over with this crap.

Posted (edited)

I mean, not that I have a horse in this race, but the unity guys have proven to be far better developers than you.

If that wasn't the case you (and a lot of other people) wouldn't leech the shit out of them.

Edited by Elfocrash
Posted (edited)

1. How have they proven that? By making hate posts on my thread on how bad I am for over two years?

2. Newsflash! There is no leeching involved with a project, when its authors have shared their code for free.

3. Not only you have no horse. You have no idea on the full L2jMobius story.

 

 

Edited by Mobius
Typo.
Posted
1 minute ago, Mobius said:

*real*savormix you are correct, even if you left something out of the box. You know I am not wrong.

Well, you've got a very bold claim in your signature. And every time blame starts getting shifted, I remember just how glad I am to have moved to tool development rather than serverpack stuff. I mean, I am playing full international Fafurion/SoE build IN ENGLISH for 1.5 months now while Innova/NCwest/GameCoast suck on a hard cock (koreans are "busy" "preparing" their builds - sorry, but this is an epic joke).

 

Back on topic: Personally, I never saw a decent working inzone raid in l2j, since it always ends up being easier (usually) or harder and of a different dynamic than in l2off. Prime examples are Balok and Epic Tauti. REAL Epic Tauti you can defeat either because you have super DPS (and can advance stages before tauti can cast a skill), or by being lucky, because in l2off it can hide skill casts and also cast two skills in parallel (yes, these are long-standing bugs, I'll give you that).

If in L2J you can always see what Epic Tauti is casting, that makes the entire raid just a walk in the park.

 

And sorry, but just watching some Epic Tauti videos will not be enough to make it work the same way.

Posted

People should digest that L2j is an emulator.

We are not the company that made the real thing and we will never be able to read it's actual sources.

Posted
16 minutes ago, Mobius said:

1. How have they proven that? By making hate posts on my thread on how bad I am for over two years?

I've seen your code from the leeched version and I've seen Unity's code from the public version. There is quite the quality difference.

 

17 minutes ago, Mobius said:

2. Newsflash! There is no leeching involved with a project, when its authors have shared their code for free.

Are...are you...joking?

The fact that you are leeching code from a shared project doesn't mean it's not leeching. It's just leeching from a shared project. Nothing wrong with that per se. You are just doing it mainly because you are incapable of coding it on your own.

 

18 minutes ago, Mobius said:

3. Not only you have no horse. You have no idea on the full L2jMobius story.

And, quite frankly, I could not care less either about it.

Posted (edited)

The only thing this topic has proven,

is that there are so many non subscribers with access to my files, but I am the thief.

 

 

Edited by Mobius
How about making your forum template match your editor?
Posted
1 minute ago, Mobius said:

is that there are so many non subscribers with access to my files, but I am the thief.

You took a GNU GLPv3 open source project, privatised it and try to make a profit out of it.

 

You are not a thief. You are an open source license violator, which is equally illegal and punishable.

 

Ofc nobody cares, and neither will I, but it's the truth, so don't try to play the victim. Develop a better DRM if you wanna protect "your work" next time.

Posted (edited)
12 minutes ago, Mobius said:

People should digest that L2j is an emulator.

We are not the company that made the real thing and we will never be able to read it's actual sources.

And yet people emulating PS, PS2 or even software like MS DOS go really far to implement even subtle undocumented features simply to make it work like the real thing. So that you wouldn't fire up an application, work with it like normal, then suddenly you try to use a lesser known feature and BAM, the OS (and/or the application) is dead.

 

In L2 emulators I see so many people who keep talking that l2j is an emulator, yet all they want is to make their own MMO rather than make l2 work (at least comparably).

 

Also, who needs sources when the entire thing is just stuffed with stackguard macros - you know the vast majority of the function inputs and outputs; MSVCRT also makes the C++ collections easy to RE, so what more do you need? Guidance on how to RE the C++ input/output routines?

Edited by *real*savormix
Posted
2 minutes ago, Elfocrash said:

You took a GNU GLPv3 open source project, privatised it and try to make a profit out of it.

 

1. I can prove you wrong.

2. Does that make you feel less of a thief?

Posted (edited)
5 minutes ago, Mobius said:

1. I can prove you wrong.

2. Does that make you feel less of a thief?

1. No you can't. But even if you try, I won't be here to listen. Just wanted to beat a dead horse a little bit on a Sunday morning.

2. It actually doesn't make me feel like a thief at all. It feels like justice. Oh and btw, I was offered to files in order to work on them. I didn't have any personal interest in them and I deleted them once i finished.

 

Cya

Edited by Elfocrash
Posted
1 hour ago, Mobius said:

DEV|Supreme you changed from L2jMobius to L2jUnity because you are nothing more than an opportunist and

at that time L2jUnity claimed to be the best. Being a fanboy ever since, there is nothing you can say to tickle my ears.

 

(...)

And each time I rightfully explain myself, there are more L2jUnity members spamming my thread without consequences.

 

Lock my topic.

I am over with this crap.

 

Nop im not an opportunist, i have just saw the code from my own eyes and moved to the rightful owners.

I have also tried to help them making the code way better with their reviews and approvals.

 

Im also part of the main team.

 

Does that makes me a fanboy because my goals were achieved?

Guest
This topic is now closed to further replies.



  • Posts

    • Verify if following is supposed to be the way to handle movement npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(point.getX(), point.getY(), point.getZ())); For me, it's not enough. And if it's the case, whole AI system is probably buggy.
    • 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
  • Topics

×
×
  • Create New...