Source L2 Acp (Account - Admin Control Panel)

130 posts in this topic

.Elfocrash    76

Hello and welcome to L2ACP
L2ACP is both an Account control panel but also an Admin control panel.
Every action in the system is INSTANT.
No more "you have to logout first" messages and such non-sense.
How does it work?
The gameserver will now also run a lightweight restful API which will handle the site requests.
The website which is hosted on my end handles and processes the user's actions and if they are valid it sends them to the server for further processing.
This enables use of the native l2j method calls and the use of the existing infrastructure.
This also enhances security as there are no database exposure anymore.
Reasons for sharing

  • To get a solid acp out there which is free for everyone
  • To see if people are interested in contributing
  • Nobody would buy this if i just hosted it myself
  • To show the competition that opensource projects can offer value

Feature list
For Players

  • Register l2 account
  • Change ingame password
  • Check player stats/info/inventory
  • Buy ingame items with donate points
  • Buy services with donate points (Change name, set nobless, reset pks, change sex)
  • Statistics (Top PVP, Top Pk, Top Online)
  • Donate with Paypal for Donate points

For Admins

  • Set the items sold in the store
  • Give items to players
  • Punish players (acc ban, char ban, jail, chat ban, kick)
  • Announce test
  • Live map of the players
  • The ability to spawn monsters anywhere in the map

The ACP is in active development and way more features are coming.
The site is fully responsive giving the user a great tablet or mobile experience.
L2ACP Preview

Lucky Wheel addition

Private stores
Server with private stores showcase a server set up with a great economy system
However it can be really hectic when a server is populated.
Players tend to look forever to find the item whey want.
Well the new L2ACP feature solves all that.
The user is able to buy and sell items from the ACP no matter if he is online or not.
You can also use the search functionality to search for the item that you want.
Here is a video preview:

L2ACP uses symmetric encryption for the payloads and an api key validation.
As long as they are changed you will have no problem with security. 
If you want to be 100% secure, make the server accept requests only from the ip that the site is hosted.
If you want to be 101% secure, then host them together and don't expose the api port.
Both L2ACP projects are licensed under GPLv2.
Here is a tldr of what that means.
Github repositories - (Please star the projects if you like them, it means a lot)
Gameserver Api written for aCis - https://github.com/Elfocrash/L2ACP-api
Website - https://github.com/Elfocrash/L2ACP-Web
 Test erver - http://test.l2acp.com
I don't claim to be an expert java developer, not even close.
The api side of things has definitely many things to be improved.
Pull requests are always welcome.
I will update this with more info soon.






How to build L2ACP API:



Already published 1677ad687d5ad5f6eb7ef421213d5276cf5f18e1 version:



How to host .NET Core project on IIS:



How to host .NET Core project on Linux with Nginix:



How to host .NET Core project on Linux with Apache:


Edited by .Elfocrash
  • Upvote 8

Share this post

Link to post
Share on other sites
DLDL    0

I will be updating the projects' Readme.rd very soon. Any installation instructions will go there.

If you still have issues after that i will provide a skype.

can you give me your'e skype ? 

Share this post

Link to post
Share on other sites
DLDL    0

You will need to adapt the API and remove the item and npc id range limitation from the webproject, but it shouldn't be hard,

if you can install it for me , i will be happy and if necessary i will pay you .

Share this post

Link to post
Share on other sites
melron    36

Can i ask why you shared it free?


p.s Yes i saw what you wrote up there, but i have to ask you again...

Why you shared it free?

Edited by melron

Share this post

Link to post
Share on other sites
.Elfocrash    76

Can i ask why you shared it free?


p.s Yes i saw what you wrote up there, but i have to ask you again...

Why you shared it free?

I made it as a prototype because it was a cool idea.

I knew people wouldn't spend on it because of the model so i chose to make it opensource.

I also don't need the money.


An extra reason is that i see many people selling similar stuff but way way more expensive. Now people have a free choice.

At the end of the day, developers wanna see that their software is being used.

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Posts

    • giving time for the accused to answer for himself its not something bad and maxtor should make it as a rule actually. yes some cases are 100% bannable but what if there is some info that change the whole situation?   plus there should also be a note to buyers not to pay all the money upfront but a part of it to "close the job" and when the job is done then get the rest, cause if you pay all the money in front and they are for example 200euros many tempted to scam get ban make new account...   and guess what paypal usually after a short of period cannot refund you usually thats a deadline for a work of amount of 200euros.   PS: [4:54:58 μμ] Dev-BruTuS: We have double deal we should see the deal conversation it will explain alot cause RIP english
    • set.getInteger("enchantmentLevel")   so that this part is what makes the option to add in the xml in MultisellData it calls it so
      // Feed with a new ingredient.
      entry.addIngredient (new Ingredient (set));
    •   I already tried to change it   set.getInteger("enchantmentLevel")   for   0   When I go to buy the item, do not come ++
    • Xml is missing enchantment level line. You could add default 0 in code. 
    • Hello, I'm testing here but it does not work on Ingredient.java
      has this _enchantmentLevel but is incomplete more when I add the error!         package net.sf.l2j.gameserver.model.multisell; import net.sf.l2j.gameserver.data.ItemTable; import net.sf.l2j.gameserver.model.item.kind.Armor; import net.sf.l2j.gameserver.model.item.kind.Item; import net.sf.l2j.gameserver.model.item.kind.Weapon; import net.sf.l2j.gameserver.templates.StatsSet; /**  * A datatype which is part of multisell system. It is either the "result" or the "required part" of a multisell action.  */ public class Ingredient {     private int _itemId;     private int _itemCount;     private int _enchantmentLevel;          private boolean _isTaxIngredient;     private boolean _maintainIngredient;          private Item _template = null;          public Ingredient(StatsSet set)     {         this(set.getInteger("id"), set.getInteger("count"),  set.getInteger("enchantmentLevel"), set.getBool("isTaxIngredient", false), set.getBool("maintainIngredient", false));     }          public Ingredient(int itemId, int itemCount, int enchantmentLevel, boolean isTaxIngredient, boolean maintainIngredient)     {         _itemId = itemId;         _itemCount = itemCount;         _enchantmentLevel = enchantmentLevel;         _isTaxIngredient = isTaxIngredient;         _maintainIngredient = maintainIngredient;                  if (_itemId > 0)             _template = ItemTable.getInstance().getTemplate(_itemId);     }          /**      * @return a new Ingredient instance with the same values as this.      */     public Ingredient getCopy()     {         return new Ingredient(_itemId, _itemCount, _enchantmentLevel, _isTaxIngredient, _maintainIngredient);     }          public final int getItemId()     {         return _itemId;     }          public final void setItemId(int itemId)     {         _itemId = itemId;     }          public final int getItemCount()     {         return _itemCount;     }          public final void setItemCount(int itemCount)     {         _itemCount = itemCount;     }          public final int getEnchantLevel()     {         return _enchantmentLevel;     }          public final void setEnchantLevel(int enchantmentLevel)     {         _enchantmentLevel = enchantmentLevel;     }          public final boolean isTaxIngredient()     {         return _isTaxIngredient;     }          public final void setIsTaxIngredient(boolean isTaxIngredient)     {         _isTaxIngredient = isTaxIngredient;     }          public final boolean getMaintainIngredient()     {         return _maintainIngredient;     }          public final void setMaintainIngredient(boolean maintainIngredient)     {         _maintainIngredient = maintainIngredient;     }          public final Item getTemplate()     {         return _template;     }          public final boolean isStackable()     {         return (_template == null) ? true : _template.isStackable();     }          public final boolean isArmorOrWeapon()     {         return (_template == null) ? false : (_template instanceof Armor) || (_template instanceof Weapon);     }          public final int getWeight()     {         return (_template == null) ? 0 : _template.getWeight();     } }  
  • Topics