summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/remove_add_flags.md49
1 files changed, 49 insertions, 0 deletions
diff --git a/docs/remove_add_flags.md b/docs/remove_add_flags.md
new file mode 100644
index 0000000..76d0f7f
--- /dev/null
+++ b/docs/remove_add_flags.md
@@ -0,0 +1,49 @@
+# Remove and add flags from database columns
+
+### Introduction
+
+Just like in C++, SQL also has bitwise operators that can be used to manipulate bitmasks.
+
+If you're not familiar with Bitwise operators I recommend you to go read [this article about bit operations.](https://github.com/azerothcore/wiki/blob/master/docs/Bit-and_bytes-tutorial.md)
+
+### Adding a flag to a bitmask
+
+Lets take ```creature_template.npcflag``` for this example. Our entry 12345 is a vendor and his flag is wrong. For us to fix him we need to
+set it to 128. Someone not familiar with bits and bytes would probably change the value of this npc flag
+like this:
+
+``` SQL
+UPDATE `creature_template` SET `npcflag` = 128 WHERE `entry` = 12345;
+```
+
+In reality, the best way to operate these flags would be to take his already existing flag, and add the bit 128 to the bitmask.
+We use the bitwise operator 'OR' to get the desired output.
+
+``` SQL
+UPDATE `creature_template` SET `npcflag` = `npcflag` | 128 WHERE `entry` = 12345;
+```
+
+This way, we garantee we don't lose the value that was set before by replacing it with a new one, we can also track the commit that
+made the npc 12345 a vendor and also eliminates the calculations that the developer needs to do to get his final value for the flag.
+
+### Removing a flag from a bitmask
+
+If you read the bit operations, you probably assume that to remove a value, we will use the operator 'AND' and utilize the symbol that
+inverts the bitmask '~'.
+
+If you wanted to make a creature not a vendor anymore, one would have to run the following query:
+
+``` SQL
+UPDATE `creature_template` SET `npcflag` = `npcflag` & ~(128) WHERE `entry` = 12345;
+```
+
+Graphically, this would mean that , if he had a gossip and was also a vendor, he would have flags 1 and 128 which means that it was 129.
+In other words, the bit operation would look like the following.
+
+``` C++
+ AND OPERATION
+129 - 1 0 0 0 0 0 0 1
+~128 - 0 1 1 1 1 1 1 1
+-----------------------
+1 - 0 0 0 0 0 0 0 1
+```