Jump to content

Recommended Posts

Posted
23 hours ago, UnderGames said:

 

Glad to hear it, you guys are welcome!

 

As for the quests - I know. But it's kinda on purpose.

 

This isn't our first server and we have a quite competitive community - in Gracia Final, it's extremely normal to see mage parties waaay ahead of the rest of the server at launch, both on level and gear.

 

With this setup (quests being slow, but raids having x7 drop rate), warrior parties are way more viable, since they will have a competitive option for gearing up.

 

Well the solution would be reducing the quest rates for only certain quests that meddle with the gameplay, and leaving the high drop/reward rate for the less important ones... It's a pity to butcher all the quests just because of few that are problematic

Posted (edited)
20 minutes ago, Herlitz said:

 

Well the solution would be reducing the quest rates for only certain quests that meddle with the gameplay, and leaving the high drop/reward rate for the less important ones... It's a pity to butcher all the quests just because of few that are problematic

 

Yes, I kinda agree with you, although we have our reasons. One would be - sadly, if you're familiar with L2OFF, there isn't an "easy way" for one to change the quest rates without breaking a lot of side stuff. I mean, it can be done, but it's actually the other way around - you would only touch the quests that you want to touch. But we have done it before, the thing is - it was a conscious decision not to do it this time around.

 

Speaking from experience now, and because I think it's an interesting topic to talk about, we have tried different variations of this setup over the years. Last year for example, we increased the quest rates for every "important" quest on Gracia Final, including Varka/Ketra for S Armors, FoG, IT, etc for S weapons, and so on. And while our players were happy at first, the differences between classes that are unbalanced on this chronicle became even bigger than before.

 

So we take into account our community as well, that happens to be very competitive in nature - consisting on several big groups of players who always try to take the most efficient route possible in order to win (and that was before we started giving prizes in USD!). So, everyone knows mage parties are extremely efficient in Gracia Final's early game, and having quests that boost their ability to quickly farm S-Grade weapon recipes, only helped their case. Basically if you were doing a warrior setup, you were dead on arrival, or your utility would only be reduced to having doombringers in order to support your side's mages.

 

Any other quests are basically worthless in Gracia Final and touching them would be kinda pointless. Also, since we like the competitive nature of our community, and the fact that the chronicle creates a bottleneck towards the midgame, our players are kinda forced to run into each other and engage in the open world - and compete for the leveling spot.

 

So our decision ends up being more like a "don't touch what's not broken", because players who seek a Gracia Final server actually want all of that, instead of a spoon-fed gearing system through instances and quests like High Five and so on. So at the end of the day, we decided to increase the drop rate for raids to x7 - incentivizing warrior setups and further giving people more reason to fight each other in the field :)

 

 

Edited by UnderGames
Posted (edited)

The Game Account creation for Istary - GF x15 is now online!
 

Starting now, you will be able to access your Master Account and create all the Game Accounts that you plan to use in the server.
 

- Account Panel: https://undergames.net/panel
- Server Info and Download links: https://www.undergames.net/foro/Thread-Istary-General-Info
 

We also remind you that today, at 20:00hs (GMT-3), the Character Creation will start! Which means - you will be able to access the server, but only up to the character creation/selection screen. You will be able to create your character(s), reserve your nicknames, and convert the Credits from your panel to Coins, in order to have everything ready and set up for launch day!
 

The clock is ticking for the grand opening! We will be waiting you all on the 4th of July, 20:00hs (GMT-3) for Istary's launch!

- The UnderGames Staff

Edited by UnderGames
Posted

In 24 hours from now, Istary will finally launch, and this year's biggest latin-american clash will start!

 

Join our community and fight for the top spot, tomorrow!

 

- Server Info and Download Links: https://www.undergames.net/info 
- Account Registration: https://www.undergames.net/panel
- Character creation: ONLINE!

 

We'll be seeing you ingame!

 

- The UnderGames Staff

Posted
1 hour ago, Doomus said:

100max online with boxes =)

 

Lol. Can I ask who are you? Because you seem to be fixated on hating on our server, hah.

 

Be my guest then. We open in 11 hours from now!

 

All of our servers have had 1500+ players. Here we had over 2000 game accounts (and counting) created in 48 hours.

 

But yes, the lone random maxcheaters hater sure knows best. By all means, join tonight and see for yourself :)

Posted

Wont join that sh1t server.. need donate for  more boxes etc... big clans will get free rune exp etc...  bots will run everywhere and i bet you wont ban/jail them... Or even u jail them but u unjail them by paying char out from jail =)

Posted
24 minutes ago, UnderGames said:

All of our servers have had 1500+ players. Here we had over 2000 game accounts (and counting) created in 48 hours.

 

2k accounts? seems like 1main+Box bd+Box sws+Box cov+Box spoil  

Posted

I don't understand. Are you just guessing things? Because you are failing horribly at doing so.

 

- In almost 4 years we have had 0 bot problems. We actually have a good protection system that takes care of most of them - the rest are hunted and banned by me personally.

- No clans receive any kind of benefits, or coins, or runes, or anything. No matter if they are big or small.

- As I said before (but I doubt you are actually reading any of my posts since you are just randomly hating on us), you don't need to donate in order to get anything from the shop. You can just get everything for adena if you want.

Posted
1 minute ago, rteshima said:

Arrancamos hoy con el clan Reich 50 ON!! Buena suerteeee

 

No esperaba recibir comentarios en español por estos lados! Bienvenidos y mucha suerte!! :wink:

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

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