Jump to content

Recommended Posts

Posted
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:

 


 

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.

Posted (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 by xdem
Posted

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

Posted (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 by ^Wyatt
Posted

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.

Posted (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 by ^Wyatt
Posted

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.

Posted

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:

Posted

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.

Posted

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.

Posted (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 by Leluche
Posted

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.

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.

×
×
  • Create New...