diff options
| author | Pondaveia <43385840+Pondaveia@users.noreply.github.com> | 2019-05-03 21:07:57 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-05-03 21:07:57 +0100 |
| commit | 22a8415d0953261ad9e64148060fce2896695df7 (patch) | |
| tree | 4faccd0152d2e55a71bdbda04a587979830a553b | |
| parent | 6cf47a462475f8eaecbf4a59f847a9699f897c1b (diff) | |
| download | wiki-22a8415d0953261ad9e64148060fce2896695df7.tar.gz wiki-22a8415d0953261ad9e64148060fce2896695df7.tar.bz2 wiki-22a8415d0953261ad9e64148060fce2896695df7.zip | |
[Documentation] How to Remove and add flags (#43)
* Create remove_add_flags.md
* Update remove_add_flags.md
| -rw-r--r-- | docs/remove_add_flags.md | 49 |
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 +``` |
