Jump to content

Recommended Posts

Posted

I've been playing L2 again the last couple of months and it became pretty clear to me that many servers use bots to look populated.

 

However the bots are either running around for no reason or they are just plain stupid, making it pretty obvious that they are bots.

 

So i was wondering, if fake players are so in demand, should I make a fake players engine with extensive configuration and a fluent api for people to add their own custom behaviors if they want to?

 

I posted this a while ago. It is just a shitty code snippet that loads players based on a model player with random enchantments which just attacks stuff. I basically did that to see how many players l2 can render before it crashes.

 

 

However even on the video but mainly on my private messages, i got so many people that wanted to buy this (ofc i didnt sell it).

 

So my point is, are server owners so in need of a smart fake players engine?

Also are they willing to pay something like 100 euros for a license?

 

 

PS: Let's keep this clean and have a proper discussion.

  • Upvote 1
Posted (edited)

Players definitely hate it and so do I, but on the other hand, server owners will always be interested in such engines, even if they admit it or not. If all you want is to sell this system, there's nothing to worry about.

I developed something similar - a couple of years ago, but it never attracted me to keep developing it.

Edited by Trance
Posted (edited)

 

So my point is, are server owners so in need of a smart fake players engine?

Also are they willing to pay something like 100 euros for a license?

i think is low price ...

but you can't derided real players 

 

this engine can be smart but is not human never

always is like as bot ... if you add and message then all know ( is fake player )

Edited by pirama
Posted

It would be nice to have as an optional custom system.

 

But for starting I would recommend a payed mercenary / follower system.

Add fake players to your party/command channel that act like real players based on their class.

Posted (edited)

I doubt any serious server owner will use it, because the first time real players know there are bots on the server, moreover ADDED by server owner (ppl already cry when you got L2Walker users, that's not for the server owner to use it), they will simply leave server (such as those fake player counters found on russian fork such as Lucera).

 

If you want to grab money, I guess yeah you can code it. Not sure about sells quantity, and ratio price / spent time (probably 150-200€).

 

You will probably get money from russians though, they like such "idiot" stuff.

 

PS : MMOs already don't do that for monsters (NPCs), I doubt you can do it for humans objectives.

Edited by Tryskell
Posted

 

You will probably get money from russians though, they like such "idiot" stuff.

im sure they already using something like this

Posted

I doubt any serious server owner will use it, because the first time real players know there are bots on the server, moreover ADDED by server owner (ppl already cry when you got L2Walker users, that's not for the server owner to use it), they will simply leave server (such as those fake player counters found on russian fork such as Lucera).

 

If you want to grab money, I guess yeah you can code it. Not sure about sells quantity, and ratio price / spent time (probably 150-200€).

 

You will probably get money from russians though, they like such "idiot" stuff.

 

PS : MMOs already don't do that for monsters (NPCs), I doubt you can do it for humans objectives.

You'd be really surprised if you knew the servers owners that pmed me for that.

I could pay a couple of big servers to add some code i wrote for data mining and then i can create patterns based on human behavior to create a machine learning scenario.

 

It is both achievable and feasible. The real question is if it really worths the effort. It will definitely sell let's just face it.

They already do fake shouts and fake numbers and some even try bots (obvious ones).

Posted

You'd be really surprised if you knew the servers owners that pmed me for that.

I could pay a couple of big servers to add some code i wrote for data mining and then i can create patterns based on human behavior to create a machine learning scenario.

 

It is both achievable and feasible. The real question is if it really worths the effort. It will definitely sell let's just face it.

They already do fake shouts and fake numbers and some even try bots (obvious ones).

h5 serbers using simple phantom afk system towns, for looks more populated ;d

Posted

h5 serbers using simple phantom afk system towns, for looks more populated ;D

yeah i know. i had h5 server owners telling me that phantom is shit and that it causes crashes if you load too many players :D

Posted

Lower than 150-200€, with < 20 ppl I wouldn't mind coding that (if your point is to make money).

 

A successful server should make money regarding or not if this is an owner's target. Even if a server is not created to earn money, a successful one should earn thousands regardless what it has been built. Got it ?

Posted (edited)

You'd be really surprised if you knew the servers owners that pmed me for that.

I could pay a couple of big servers to add some code i wrote for data mining and then i can create patterns based on human behavior to create a machine learning scenario.

 

It is both achievable and feasible. The real question is if it really worths the effort. It will definitely sell let's just face it.

They already do fake shouts and fake numbers and some even try bots (obvious ones).

As long as you keep moving bots by auto-attack(from 1 target to another, or wait till it spawns), they would never be "like humans" . Big problem in that is too define moving path that bot would use, for that you have to work out with geoengine , so you would know where are obstacles and where are free spots, and how to put your node path so bot would move in forward direction over whole area that he is in, but not just in single spot.

So thats all not so simple, and that things come in way of every game developer, not only sneaky creator of l2 emulators =D

Edited by LightFusion
Posted

I think income from this will depend how good is it going to be. There are few levels of difficulty here:

Level 1: Characters looking as AFK users

Level 2: Characters running around towns, teleporting, logging in, logging out

Level 3: Single characters farming

Level 4: Farming party

 

For even lowest level you need to handle receiving messages, mails, party requests etc but that is easy. Imo it is not worth to spend so much time to make single farming characters with so good AI that normal player wouldnt notice.

You need to consider:

- Changing the location of the character - not like pathfinder but like a real player

- Reacting to pms, pvp, cursed weapons

- Running away from stronger monster?

- Random stops, delays

- Going to town for rebuff

- How will they act just after grand opening?

Posted

I think that use fake chars to "trick" your players as an Admin is a very very bad idea. You can create something perfect but it's always easy to spot a fake player like a bot player.

 

Maybe an admin can use fake player to create particular gameplay feature like a specific event or something like that. But i don't see nothing useful to use fake chars to populate your server.

 

:) 

 

Posted

A successful server should make money regarding or not if this is an owner's target. Even if a server is not created to earn money, a successful one should earn thousands regardless what it has been built. Got it ?

 

I don't speak on a server owner side, but on a developer side. It doesn't worth to code that, for money, if you don't make minimum 2 to 4k from it. Got it ?

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.
  • Topics

×
×
  • Create New...