Jump to content

Recommended Posts

Posted

Hello there, this is the latest feature I coded for my open source project and it will be implemented, soon after some additions. This system, which is really close to the instance system in the newer chronicles, allows to spawn npc at different dimensions and travel there. This allows you to host multiple events at the same place at the same time, host multiple farm/pvp areas at the same place at the same time, and much more. Players and mobs cannot see another players and another mobs who exist at a different dimension.I am going to do some more modifications before I commit it. Here, you can leach an early version of it.

 

 

Here, you can find the diff patch for l2jpes and the modified .sql:

http://pastebin.com/TxGmtJUn

http://www.4shared.com/document/gobiNCor/spawnlist.html?

 

For those who are going to test this on a live server and they already have spawnlist installed, run this at your mysql command line:

alter table `spawnlist` add column `dimensionid` int(3) NOT NULL DEFAULT '1' ; 

 

It is pretty similar with http://maxcheaters.com/forum/index.php?topic=279639.0.

 

Regards.

Posted

To spawn ingame a monster to a specific dimension just go to the dimension and use //spawn normally.

 

To spawn a monster in the coding part just set the selected dimension id to the l2spawn object.

Posted

+       private static void changeDimension(L2PlayerInstance player, int dimensionId) {
+               player.setDimensionId(dimensionId);
+              
+               for (L2Object object:L2World.getInstance().getAllVisibleObjects().values()) {
+                       if (object.getDimensionId() == player.getDimensionId()) {
+                               if (!player.getKnownList().knowsObject(object) && player.getKnownList().getDistanceToWatchObject(object) < 1800)
+                                       player.getKnownList().addKnownObject(object);
+                              
+                               if (!object.getKnownList().knowsObject(player) && object.getKnownList().getDistanceToWatchObject(player) < 1800)
+                                       object.getKnownList().addKnownObject(player);
+                       }else{
+                               if (player.getKnownList().knowsObject(object))
+                                       player.getKnownList().removeKnownObject(object);
+                              
+                               if (object.getKnownList().knowsObject(player))
+                                       object.getKnownList().removeKnownObject(player);
+                       }      
+               }

 

or just:

 

 

at L2Character:

@Override
public void setInstanceId(int i)
{
	super.setInstanceId(i);
	teleToLocation(getX(), getY(), getZ(), 1);
}

 

Your code is bugged, too bad of you...

 

where are the skill checks, TARGET_PARTY etc, they need instanceId check too.

 

btw check the Action.java clientpacket, it will be buggy if you dont add:

	if (obj.getInstanceId() != activeChar.getInstanceId())
	{
		activeChar.sendPacket(ActionFailed.STATIC_PACKET);
		return;
	}

 

to avoid some bugs, like Itention.FOLLOW from an object of different instance...

 

Just add the checks you miss many

Posted

+       private static void changeDimension(L2PlayerInstance player, int dimensionId) {
+               player.setDimensionId(dimensionId);
+              
+               for (L2Object object:L2World.getInstance().getAllVisibleObjects().values()) {
+                       if (object.getDimensionId() == player.getDimensionId()) {
+                               if (!player.getKnownList().knowsObject(object) && player.getKnownList().getDistanceToWatchObject(object) < 1800)
+                                       player.getKnownList().addKnownObject(object);
+                              
+                               if (!object.getKnownList().knowsObject(player) && object.getKnownList().getDistanceToWatchObject(player) < 1800)
+                                       object.getKnownList().addKnownObject(player);
+                       }else{
+                               if (player.getKnownList().knowsObject(object))
+                                       player.getKnownList().removeKnownObject(object);
+                              
+                               if (object.getKnownList().knowsObject(player))
+                                       object.getKnownList().removeKnownObject(player);
+                       }      
+               }

 

or just:

 

 

at L2Character:

@Override
public void setInstanceId(int i)
{
	super.setInstanceId(i);
	teleToLocation(getX(), getY(), getZ(), 1);
}

 

lol what?

 

Instance system is not implemented in interlude by default, where did you find setInstance?

 

About the other checks you are right, anyway it is an early version, that's why I haven't implement it yet.

Posted

setInstance = setDimension just the name changes, when I made this about some months ago I named it instance cause it was instance, so thats why you see instance, but does it really matter ? its the same thing, you update the KnowList manually (the dump way) and I did it with teleport which is the ideal for the specific work

Posted

setInstance = setDimension just the name changes, when I made this about some months ago I named it instance cause it was instance, so thats why you see instance, but does it really matter ? its the same thing, you update the KnowList manually (the dump way) and I did it with teleport which is the ideal for the specific work

 

In your code you use setinstance to change the player's instance, and then you reteleported him to the same position. Good, but how you tell the code that hey he has different instance id from the others, let's remove him from their knownlists.

 

In your code, teletolocation may need modification or else the instance id won't matter.

Posted

In your code you use setinstance to change the player's instance, and then you reteleported him to the same position. Good, but how you tell the code that hey he has different instance id from the others, let's remove him from their knownlists.

 

In your code, teletolocation may need modification or else the instance id won't matter.

 

teleport not only revalidates, it updates KnowList too, lol. And since you re-update the instance there is where the check comes

 

updateKnowList()

if (obj1.dimensionId != obj2.dimensionId)

        continue;

 

this runs during the teleport KnowList update

Posted

teleport not only revalidates, it updates KnowList too, lol

It does but in the terms of distance, visibility, etc not by instance id. You have to add the specific criteria by yourself to make it edit the knownlist by the instance id, too.

 

Who cares by the end, of the day, I am already working on the checks and a window to manage the dimensions.

Posted

So, the second version is out.

  • Added missing checks. (ty xdem for mentioning)
  • Added a window where you can manage* the dimensions.
  • Added config to set max available dimensions.

 

*You can only check how many object each dimension includes.

 

Some checks are propably still missing, I will have one more look before commiting it.

Posted

Update to Freya/h5?

Lol... instances already exist in freya/h5... try reading...

 

This system, which is really close to the instance system in the newer chronicles,

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


  • Posts

    • First, don't really follow the "main voice", moreover if you consider it an hobby. Simply do what you want, you got only one life so use it as you want. If you make it an hobby, it's exactly like piano, or velo - only practice makes you better.   Secondly, how do you learn things ? It's actually a really important question, since some can simply be scholar, read books (theory) then practice ; and some simply can't read books. I'm the second type, I hated school, I find it boring - my knowledge in Java comes from try-and-fail. You improve your coding style every year or so, I can myself rewrite my own code (which I already considered top-notched) after a while. You always learn something new - even if Java barely evolves. L2J is a fun way to learn programming, it's a giant sandbox where you can edit anything, and I believe it should be taken as it.   My own way of learning was as follow : Add existing customs, no matter what they are : the point is to know main classes used by L2J / customs. L2J is barely Java knowledge ; the true knowledge is to know WHAT to search in WHICH location (what I call, organization). You have to understand than EVERYTHING you think already exists, in a form on another, in the source code. A custom is only the association of the different mechanisms you found "here and there", glued together in a proper goal. Once you know main classes to edit, and the customs you added are compiling fine, the main point is to know WHAT exactly you DID. Try to understand WHY and WHERE you actually copied the code. Third point would be to MANIPULATE the customs you added in order to fit your wish. First edit little values, then logic conditions ; eventually add a new Config, or a new functionality to the custom. Fourth point would be to begin to craft your own ideas. Once again, EVERYTHING already exists, in a form or another. You want a cycled event ? You got Seven Signs main task as exemple. Npc ? Search any type of Npc and figure out what it does. Fifth point would be to understand Java - mostly containers (WHAT and WHERE to use them), variables types and main Java mechanisms (inheritance, static modifier, etc). You should also begin to cut your code into maintainable classes or methods. Java can actually run without optimization, but bigger your ideas, more optimized and well-thought it should be. It's direct saved time in the future, and you would thank yourself doing so. Main tips : ALWAYS use any type of versioning system - GIT or SVN. It allows to save your work, step by step and eventually revert back anytime you want if you terribly messed up. L2J is 80% organization knowledge, and 20% Java knowledge. Basically, if you know WHAT and WHERE to search, if you aren't dumb, it's easy to replicate and re-use things. Cherry on top is to use a already good coded pack to avoid copy-paste crap and get bad habits. Avoid any type of russian or brazilian packs, for exemple - their best ability is to leak someone's else code. Obviously you need some default sense of logic, but Java and programming in general help you to improve it.   Finally, most of your questions could be solved joining related Discord (at least for aCis, I can't speak for others) - from the moment your question was correctly asked (and you seemed to search for the answer). My community (and myself) welcomes newbies, but got some issues with noobies.   The simpliest is to try, fail and repeat until you succeed - it sounds stupid, but that's basically how life works.   PS : about Java ressources, before ChatGPT, it was mostly about stackoverflow website, and site like Baeldung's one. With ChatGPT and alike, you generally double-cross AI output to avoid fucked up answers. Also, care about AI, they are often hallucinating really hard, even today. They can give you complete wrong answer, you tell them they are wrong, and they say "indeed, I suck, sorry - here's a new fucked up answer". You shouldn't 100% rely over AI answer, even if that can give sometimes legit answers, full code or just skeletons of ideas.   PPS : I don't think there are reliable ressources regarding L2J itself, also most of the proposed code decays pretty fast if the source code is actually maintained (at least for aCis). Still, old coded customs for old aCis sources are actually a good beginner challenge to apply on latest source.
    • WTS: - AQ - Baium - Zaken  - Frintezza - Vesper Fighter Focus Fire Element   pm for detalis
    • We have the best price! L2Reborn.org Signature x1 Franz NEW!! 1KK = $20 HURRY TO BUY AT THE TOP PRICE discord - adver745645
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock