Xanderॐ Posted September 25, 2013 Posted September 25, 2013 Hello, this is a system I created that allows multiple servers to use a global chat. In other words players from different servers can talk to each others. You can add servers to your server's allow list and broadcast/receive messages only to/from them. How to get it: Compiled version: I compiled a version using Java 7 which you can download here https://mega.co.nz/#!RRklGTDB!e-E0z2pt4FNtnjJekaeXC2DXvI80pO_YAv0kFfvrd40. Compile it from source: This is a maven project hosted on github and can work in any Java server. You will need Git to download it and Maven 2 to build it. Install git and Maven on your system (Those that are familiar with eclipse egit and m2eclipse) you could easily integrate this process to your Eclipse platform ). After installing those two utilities run the following command: 1)git clone https://github.com/Issle/crossl2jserver.git This will download the project on your computer. Enter in the project folder. You will know you are there if there's a file called pom.xml. If so run the following command: 2)mvn assembly:assembly If the command executes sucessfully in the target folder you will find a file called : crossL2JServer-0.0.1-SNAPSHOT-jar-with-dependencies.jar. This is the library file you will use in your L2JServer pack. Now download a patch that is suitable for your own project to activate the system. How to implement in your project. In your gameserver add the following code: Injector injector = Guice.createInjector(new AssemblyModule()); ServerManager manager = injector.getInstance(ServerManager.class); manager.setPrivateKeyPath("C:/myserver/private.key"); //SET YOUR PATH HREE manager.setPublicKeyPath("C:/myserver/public/key"); //SET YOUR PATH HERE manager.setServerKeylistPath("C:/myserver/keys/"); //SET YOUR PATH HERE manager.initialize(); TransportService service = injector.getInstance(TransportService.class); service.setHost("localhost"); //SET YOUR SERVER IP HERE service.setMessageHandler(new IMessageHandler(){ @Override public void handleMessage(Message m) { //TODO: Add here your code that prints the message into chat ( global / trade whatever ). }}); service.initialize(); In a chathandler of your choice ( TellAll, Trade etc ) add a variable: @Inject TransportService service; and in the code that handles the chat message (handleChat()) write service.sendMessage(new Message("", Config.SERVER_NAME, activeChar.getName(), text)); If you are not familiar with Java wait for a patch for your type of pack. I'm going to create patches when I find some volunteers that want to test with me ( since it needs more than one server on different ips ) to check good. So it goes without saying, that I need some volunteers that will add it to their testserver pack and test it together with me. Be sure you know how to add a patch and have basic understanding on how to code in java.
xdem Posted September 25, 2013 Posted September 25, 2013 (edited) with the same thinking you can export charInfo so people can see each other (even pvp ?) from other servers Unfortunetly I fail to understand that, since most of the packets incuding CreatureSay use objectId so the client will understand which object triggered that packet, there will be a mess with 2 different servers since they will have different databases thus possible same object oid(s) ? Edited September 25, 2013 by xdem
Xanderॐ Posted September 25, 2013 Author Posted September 25, 2013 I wouldn't go as far as syncing two servers over this for multiple reasons. One , its HTTP, slower than raw sockets. Second, the reason you mentioned on objectids. Generally syncing two servers is a hell of a job. So lets stay on syncing server chats for now. Much easier to do :P
^Wyatt Posted September 25, 2013 Posted September 25, 2013 (edited) And what's the point of doing this? I mean... which utility can have to talk to players of another server? Spam? More e-wars? "Come to my server, it's better"? Can be funny to code it but totally useless, IMO. Edited September 25, 2013 by ^Wyatt
Xanderॐ Posted September 25, 2013 Author Posted September 25, 2013 Theres a concept called server alliance. Sometimes one authority has multiple servers. Take for example rpg-club. Obviously sharing a public key with another server means you "trust" it and the contents it sends. So it usually is a server hosted by the same staff.
^Wyatt Posted September 25, 2013 Posted September 25, 2013 (edited) Even if it's from the same staff, where is the point of doing it? I can't even find one :rage: Btw, some time ago I saw a feature that connected servers and allowed to pvp each other, in that case I can see the point, but... chat? Edited September 25, 2013 by ^Wyatt
Xanderॐ Posted September 25, 2013 Author Posted September 25, 2013 Even if it's from the same staff, where is the point of doing it? I can't even find one :rage: Hey, I'm not gonna share the awesome staff we have in L2JPrim, I keep them for me :P Besides that having a more "active" chat gives the feeling of a warm and active server in an l2j world of 100ppl max per server.
^Wyatt Posted September 25, 2013 Posted September 25, 2013 Hey, I'm not gonna share the awesome staff we have in L2JPrim, I keep them for me :P Besides that having a more "active" chat gives the feeling of a warm and active server in an l2j world of 100ppl max per server. I can just see spam and e-wars, maybe it could bring more action to a server with -100 people, but with others.. spam spam cry ban bun! My last post, I'm a spammer :rage:
Xanderॐ Posted September 25, 2013 Author Posted September 25, 2013 e-wars is what most ppl in L2 live for ;) Imagine this getting cross-server ... I don't know about you, but I really enjoy boasting about how great my clan is compared to clans from other servers. Maybe it's just me.
Tryskell Posted September 26, 2013 Posted September 26, 2013 I join also Wyatt on the useful question, notably about Trade chat... Until you introduce special events where one server has to do something while another do another thing, and both results are shared amongst servers, I don't get the use. It really has few, if not a single use overall. If you want to make a USEFUL chat concept, see what Cryptic did for STO and Neverwinter, aka your ACCOUNT is linked to your friend/ban lists and not a single characters. Meaning if you register ONE character you register the whole list. That avoids scams, that avoids to add back your whole lists, that avoids "what is your new name" questions, and it got (sorry but it's true) a better use of your time. It's registered under a playername@accountname form. If your server got only 100 ppl on, you should consider to simply close it or edit the gameplay. That's not adding a shared chat ppl will stay on :P. Otherwise the code is clean, you can use "try ()" to avoid the "finally" if it's only about closing stuff, Java 7 feature.
Java-man Posted September 26, 2013 Posted September 26, 2013 Leluche, it is good coded, but you don't think using ioc and http for messaging are big overhead for this small system ?
Xanderॐ Posted September 26, 2013 Author Posted September 26, 2013 (edited) HTTP is indeed overhead. It could be done with sockets too. But it's how about time I learn something new ( hmm maybe netty too :P ). As for Inversion of control and dependency injection, I don't see why it's a big deal to do runtime injection compared to compile time. I mean yea, there's some extra resource ugage, but so minimal. Edited September 26, 2013 by Leluche
Java-man Posted September 27, 2013 Posted September 27, 2013 HTTP is indeed overhead. It could be done with sockets too. But it's how about time I learn something new ( hmm maybe netty too :P ). As for Inversion of control and dependency injection, I don't see why it's a big deal to do runtime injection compared to compile time. I mean yea, there's some extra resource ugage, but so minimal. Learning is cool. But you use guice only few times for DI. I think it doesn't worth that. And netty is great framework. You precisely shall try it.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now