## viewing paste Unknown #17016 | Text

Posted on the
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 ``` &  - And.  |  - Or.         The bitwise operator AND (&) is used to test two values against each     other, and results in setting bits which are active in both arguments.     This can be used for a few things, but in Hercules this operator is     usually used to create bit-masks in scripts.                 The bitwise operator OR (|) sets to 1 a binary position if the binary     position of one of the numbers is 1. This way a variable can hold     several values we can check, known as bit-mask. A variable currently     can hold up to 32 bit-masks (from position 0 to position 1). This is a     cheap(skate) and easy way to avoid using arrays to store several     checks that a player can have.                 A bit-mask basically is (ab)using the variables bits to set various     options in one variable. With the current limit in variables it is     possible to store 32 different options in one variable (by using the     bits on position 0 to 31).           Example(s):         - Basic example of the & operator, bit example:                 10 & 2 = 2         Why? :                 10 = 2^1 + 2^3 (2 + 8), so in bits, it would be 1010                 2 = 2^1 (2), so in bits (same size) it would be 0010                 The & (AND) operator sets bits which are active (1) in both         arguments, so in the example 1010 & 0010, only the 2^1 bit is         active (1) in both. Resulting in the bit 0010, which is 2.         - Basic example of creating and using a bit-mask:                 .@options = 2|4|16; // (note: this is the same as 2+4+16, or 22)                 if (.@options & 1) mes "Option 1 is activated";                 if (.@options & 2) mes "Option 2 is activated";                 if (.@options & 4) mes "Option 3 is activated";                 if (.@options & 8) mes "Option 4 is activated";                 if (.@options & 16) mes "Option 5 is activated";         This would return the messages about option 2, 3 and 5 being shown     (since we've set the 2,4 and 16 bit to 1).  ^  - Xor.         The bitwise operator XOR (eXclusive OR) sets a binary position to 0 if     both numbers have the same value in the said position. On the other     hand, it sets to 1 if they have different values in the said binary     position. This is another way of setting and unsetting bits in     bit-masks.           Example:         - First let's set the quests that are currently in progress:                 inProgress = 1|8|16; // quest 1,8 and 16 are in progress         - After playing for a bit, the player starts another quest:                 if( inProgress&2 == 0 ){                         // this will set the bit for quest 2 (inProgress has that bit set to 0)                         inProgress = inProgress^2;                         mes "Quest 2: find a newbie and be helpful to him for an hour.";                         close;                 }         - After spending some time reading info on Xor's, the player finally       completes quest 1:                 if( inProgress&1 && isComplete ) {                         // this will unset the bit for quest 1 (inProgress has that bit set to 1)                         inProgress = inProgress^1;                         mes "Quest 1 complete!! You unlocked the secrets of the Xor dynasty, use them wisely.";                         close;                 }```
Viewed 658 times, submitted by Ancyker.