Jump to content
  • 0

frozen isInsideZone()


wongerlt

Question

It's not seem little nonsense on frozen this functions?

public static final int ZONE_PVP = 1;
	
	/** The Constant ZONE_PEACE. */
	public static final int ZONE_PEACE = 2;
	
	/** The Constant ZONE_SIEGE. */
	public static final int ZONE_SIEGE = 4;
	
	/** The Constant ZONE_MOTHERTREE. */
	public static final int ZONE_MOTHERTREE = 8;
	
	/** The Constant ZONE_CLANHALL. */
	public static final int ZONE_CLANHALL = 16;
	
	/** The Constant ZONE_UNUSED. */
	public static final int ZONE_UNUSED = 32;
	
	/** The Constant ZONE_NOLANDING. */
	public static final int ZONE_NOLANDING = 64;
	
	/** The Constant ZONE_WATER. */
	public static final int ZONE_WATER = 128;
	
	/** The Constant ZONE_JAIL. */
	public static final int ZONE_JAIL = 256;
	public static final int ZONE_EVENT = 257;
	/** The Constant ZONE_MONSTERTRACK. */
	public static final int ZONE_MONSTERTRACK = 512;
	
	/** The Constant ZONE_SWAMP. */
	public static final int ZONE_SWAMP = 1024;
	
	/** The Constant ZONE_NOSUMMONFRIEND. */
	public static final int ZONE_NOSUMMONFRIEND = 2048;
	
	/** The Constant ZONE_OLY. */
	public static final int ZONE_OLY = 4096;
	
	/** The Constant ZONE_NOHQ. */
	public static final int ZONE_NOHQ = 8192;
	
	/** The Constant ZONE_DANGERAREA. */
	public static final int ZONE_DANGERAREA = 16384;
	
	/** The Constant ZONE_NOSTORE. */
	public static final int ZONE_NOSTORE = 32768;
	
	/** The Constant ZONE_MULTIFUNCTION. */
	public static final int ZONE_MULTIFUNCTION = 67229;
	public static final int ZONE_GRAND = 134458;

	/** The _current zones. */
	private int _currentZones = 0;

	/**
	 * Checks if is inside zone.
	 * @param zone the zone
	 * @return true, if is inside zone
	 */
	public boolean isInsideZone(final int zone)
	{
		return (_currentZones & zone) != 0;
	}
	/**
	 * Sets the inside zone.
	 * @param zone the zone
	 * @param state the state
	 */
	public void setInsideZone(final int zone, final boolean state)
	{
		if (state)
		{
			_currentZones |= zone;
		}
		else if (isInsideZone(zone))
		{
			_currentZones ^= zone;
		}
	}
	

 

Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 1

it is 'hardcoded'. for better performance change it by urself.

 

8 |= 2 is like 8 = 8 | 2 .  = 10 (see that like 8+= 2)

 

it means

   1000 (binary)

|  0010 (binary)

  ----------

   1010 (binary)= 10 (decimal)

 

| is bitwise OR

 

possible results: 0,1 . return 1 as result if either of its inputs are 1 and will produce a 0 output if both of its inputs are 0.

 

see this

 

0     0     =     0

0     1     =     1

1     0     =     1

1     1     =     1

 

 

 

8 & 2 = 0 .

it means

    1000 (binary)

&  0010 (binary)

    ---------

    0000 (binary)= 0 (decimal)

 

& is bitwise AND.

 

possible results : 0,1. to get 1 as result both of the bits must be 1. otherwise the result will be 0.

 

see this:

 

0     0     =     0

0     1     =     0

1     0     =     0

1     1     =     1

 

 

 

 

8 ^= 2  is like 8 = 8 ^ 2 . = 10

it means

   1000 (binary)

^  0010 (binary)

   ---------

    1010 (binary) = 10 (decimal)

 

^ is a bitwise XOR

 

results 0,1. to get 1 as result must have only 1 of the bits the value 1.

 

see this:

 

 

0     0     =     0

0     1     =     1

1     0     =     1

1     1     =     0

 

One live example:

 

you are entering in oly zone.

 

setIsInsideZone(ZONE_OLY);

_currentZones from 0 will be 1000000000000

 

isInsideZone(ZONE_MOTHERTREE) 

ZONE_MOTHERTREE = 0000000001000

 

so... to get the result 1 of every pair , must both bits have value 1...  the result :

 

     4096

 &         8

---------------

0

 

 

     1000000000000 (binary) = 4096 (dec)

&   0000000001000 (binary) = 8 (dec)

------------------------------------

      0000000000000 (binary) = 0 (dec) 

 

isInsideZone:

return (_currentZones & zone) != 0;

 

Edited by melron
  • Thanks 1
Link to comment
Share on other sites

  • 0
58 minutes ago, tazerman2 said:

in acis is isInsideZone(ZoneId.ZONE_MULTIFUNCTION)

in frozen is .isInsideZone(L2Character.ZONE_MULTIFUNCTION)

i not understand how it can work with frozen code?

Link to comment
Share on other sites

  • 0

The addition or substraction of one of those zones never melt with another zone id (ex = the 3 first zones added don't reach 32, which is the next zone), therefore you can add/substract as much as you want. It is commonly used for zones ids, inventory slots, clan priviledges, etc.

 

Concerning the performance, if you wanted to make it more readable that would end under a List of Enum ZoneId, which is far bigger to exploit/edit than a simple int.

Edited by Tryskell
Link to comment
Share on other sites

  • 0

fak is hard to understand for me :D 

Example im entering clan hall zone.

character.setInsideZone(L2Character.ZONE_CLANHALL, true);

and clan hall is in town.

character.setInsideZone(L2Character.ZONE_PEACE, true);

 

now  by checking in what zones im are result is: ZONE_PEACE, ZONE_CLANHALL, ZONE_MULTIFUNCTION, ZONE_GRAND (why this zones are in list?)

Link to comment
Share on other sites

  • 0
41 minutes ago, wongerlt said:

fak is hard to understand for me :D 

Example im entering clan hall zone.

character.setInsideZone(L2Character.ZONE_CLANHALL, true);

and clan hall is in town.

character.setInsideZone(L2Character.ZONE_PEACE, true);

 

now  by checking in what zones im are result is: ZONE_PEACE, ZONE_CLANHALL, ZONE_MULTIFUNCTION, ZONE_GRAND (why this zones are in list?)

because you have wrong values in those zones.

 

you have to double their value from the previous one.

since the ZONE_NOSTORE = 32768 , the ZONE_MULTIFUNCTION must be ZONE_NOSTORE*2 .. 

32768*2=65536

public static final int ZONE_MULTIFUNCTION = 65536;
public static final int ZONE_GRAND = 131072;

 

zone grand = multifunction * 2

 

and the next one will be zone_grand * 2 = 262144

Edited by melron
  • Thanks 1
Link to comment
Share on other sites

  • 0
16 minutes ago, wongerlt said:

and i do it, but how i make mistake with calculator , idk :D

Thanks now work.

just a wrong move at your calcs nothing serious :p

Edited by melron
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


  • Posts

    • I am selling the essence project which includes versions 388 and 439 that have been running for over 2 years or (447 as custom PVP like Pride). I have a test server for you to test them out. If you are really interested in it then contact my seller at discord: kiwi7106. Price: 4000 Euro P/s: This is a project that I have spent a lot of money and time developing, so if you are not interested in it, please get out of this topic, thank you. P/s 2: If you find the price too expensive, it's best to skip this article and find another project and don't comment negatively on my topic, thank you.
    • Someone ask me for this, it should work on any client that has Kamael race, preview:     Installation - there are two ways to install depending on how you want to use it:   Method 1: If you want to completely replace the original, do:   Copy all lines from your armorgrp to Notepad++, press Ctrl+H, check the "match whole word" option and replace:   kamael.Mkamael_m000_w_ad00   by:   AvengersKamaelWings.Avengers_MKamael_m001_w_ad00   Then replace:   MKamael.Mkamael_m000_t00_w   by:   AvengersKamaelWings.MKamael_m001_t00_w   Now repeat the same process with the female, replace:   kamael.Fkamael_m000_w_ad00   by:   AvengersKamaelWings.Avengers_FKamael_m001_w_ad00   Then replace:   FKamael.Fkamael_m000_t00_w   by:   AvengersKamaelWings.FKamael_m001_t00_w   You're done, paste everything back into File Edit and save!   Method 2: If you only want to replace in specific sets, execute the above process only on the armorgrp of those sets.   Repack by: AvengersTeamBr Password: LadrãoDeFrango      
    • 用于解密、加密和编辑 .u 文件的工具。
    • It's always awesome when you find someone who not only delivers great quality but also does it way ahead of schedule. Makes you feel like you hit the jackpot, right? I'm new around here, just stumbled upon this forum, and seeing posts like yours really gives me hope that there are some real pros hanging out in this community.
  • Topics

×
×
  • Create New...