diff options
| author | Kitzunu <24550914+Kitzunu@users.noreply.github.com> | 2021-05-04 13:28:13 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-04 13:28:13 +0200 |
| commit | 8eaf79663deb9d5d5af5c34af0eadab42d2dac3c (patch) | |
| tree | 080755d9f2382384e059984a70953657558b28d8 /docs | |
| parent | 386d092c28b608dba8b6b3236ccd069bac06c734 (diff) | |
| download | wiki-8eaf79663deb9d5d5af5c34af0eadab42d2dac3c.tar.gz wiki-8eaf79663deb9d5d5af5c34af0eadab42d2dac3c.tar.bz2 wiki-8eaf79663deb9d5d5af5c34af0eadab42d2dac3c.zip | |
chore(docs): SOP (#454)
* chore(docs): Code standards
* Create file-headers.md
* sql
* SOP
* issue tracker
* Update issue-tracker-standards.md
* Update issue-tracker-standards.md
* Update sql-standards.md
* Update SQL-Versioning.md
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/Dealing-with-SQL-files.md | 184 | ||||
| -rw-r--r-- | docs/SQL-Versioning.md | 2 | ||||
| -rw-r--r-- | docs/cpp-code-standards.md | 245 | ||||
| -rw-r--r-- | docs/file-headers.md | 23 | ||||
| -rw-r--r-- | docs/issue-tracker-standards.md | 66 | ||||
| -rw-r--r-- | docs/sql-standards.md | 140 | ||||
| -rw-r--r-- | docs/standard-operating-procedure.md | 9 |
7 files changed, 484 insertions, 185 deletions
diff --git a/docs/Dealing-with-SQL-files.md b/docs/Dealing-with-SQL-files.md deleted file mode 100644 index 8af93fe..0000000 --- a/docs/Dealing-with-SQL-files.md +++ /dev/null @@ -1,184 +0,0 @@ -# Dealing with SQL files - -## SQL basics - -If you are not confident with the SQL language, we suggest to read [this tutorial](http://www.w3schools.com/sql/default.asp) before starting. - -Also remember to: - -- always use [UPDATE](http://www.w3schools.com/sql/sql_update.asp) in order to change the value of fields of **existing rows** - -- use [INSERT](http://www.w3schools.com/sql/sql_insert.asp) in order to insert **new rows only**, but be sure to avoid import errors using [DELETE](http://www.w3schools.com/sql/sql_delete.asp) before INSERT - -- whenever possible, try to make your query **re-executable** (the same query can run twice without error) e.g. deleting before inserting - -- surround any table or field name with `backticks`, and string values with `single quotes`, example: - -```sql -UPDATE `table_name` SET `field_I_want_to_change` = 'new string value' WHERE `entry` = 10 ; -``` - -## Write compact code - -Compact code helps to keep the size of our SQL update files small, so installing/updating the ACDB will be faster. - -### INSERT - -Bad: - -```sql -INSERT INTO `table_1` VALUES (1000, ...); -INSERT INTO `table_1` VALUES (2000, ...); -INSERT INTO `table_1` VALUES (3000, ...); -``` - - -Good: - -```sql -INSERT INTO `table_1` VALUES -(1000, ...), -(2000, ...), -(3000, ...); -``` - -### DELETE - -Bad: - -```sql -DELETE FROM `table_1` WHERE `entry` = 1000; -DELETE FROM `table_1` WHERE `entry` = 2000; -DELETE FROM `table_1` WHERE `entry` = 3000; -``` - -Good: - -```sql -DELETE FROM `table_1` WHERE `entry` IN (1000, 2000, 3000); -``` - -### UPDATE - -Bad: - -```sql -UPDATE `table_1` SET `field_1` = 'someValue' WHERE `entry` = 1000; -UPDATE `table_1` SET `field_1` = 'someValue' WHERE `entry` = 2000; -UPDATE `table_1` SET `field_1` = 'someValue' WHERE `entry` = 3000; -``` - -Good: - -```sql -UPDATE `table_1` SET `field_1` = 'someValue' WHERE `entry` IN (1000, 2000, 3000); -``` - -## Use variables when necessary - -SQL variables help to make IDs/GUIDs more manageable, use them when needed: - -```sql -SET @FREE_GUID:=145211; - -DELETE FROM `creature` WHERE `guid` BETWEEN @FREE_GUID AND @FREE_GUID+5; -INSERT INTO `creature` VALUES -(@FREE_GUID+0, 1420, 530, 6785.898, -7607.692, 128.1121, 3.815103, 120, 0), -(@FREE_GUID+1, 1420, 530, 6753.482, -7647.198, 128.3187, 3.793595, 120, 0), -(@FREE_GUID+2, 2914, 530, 6830.517, -7396.761, 46.36444, 2.204267, 120, 0), -(@FREE_GUID+3, 2914, 530, 6967.708, -7464.932, 47.05861, 1.433785, 120, 0), -(@FREE_GUID+4, 2914, 530, 6764.093, -7363.276, 50.46708, 2.048597, 120, 0), -(@FREE_GUID+5, 2914, 530, 6703.647, -7402.308, 51.60884, 5.743487, 120, 0); -``` - -## Flags - -For flags (2^) columns, when you remove or add a flag, it is better not to override the existing value as flags are combined values. - -For example, given a flag with value `128`, this is how it would be to add, remove and invert it: - -```sql --- ADD AN EXTRA FLAG (|) -UPDATE `table_1` SET `field_1` = `field_1` | 128 WHERE `entry` = 1000; - --- REMOVE AN EXTRA FLAG (& ~) -UPDATE `table_1` SET `field_1` = `field_1` & ~128 WHERE `entry` = 1000; - --- INVERT A FLAG (if present = removed, if absent = added) (^) -UPDATE `table_1` SET `field_1` = `field_1` ^ 128 WHERE `entry` = 1000; -``` - -This way, you will make sure that your query will only affect that specific flag, leaving all the other flags unchanged. - -## How to create an sql update file - -This kind of procedure is pretty simple and allow not only developers, but also testers, to avoid multiple import of the same queries. - -Always make sure you are up to date with the main repository by quickly doing this beforehand: [Update and sync your fork](http://www.azerothcore.org/wiki/Syncing-your-fork). - -Then you need to create a new branch which will hold your SQL Update file: - -``` git -## Pick our main branch so other branches can be -## up to date when being created based on master. -git checkout master - -## Create a new branch and checkout to start working on it -git checkout -b this_will_fix_that_problem -``` - -Now that we are ready, generate the update file by: - -#### 1. Acessing the right folder - -Inside your local repository, you should have a folder in the path **data/sql/updates**. There we will find many **pending** folders: - - - pending_db_auth - - pending_db_characters - - pending_db_world - -The one you pick depends on the Databases that needs correction. For example, our query will update `creature.npcflags` and, for this reason, we will create an update SQL file inside pending_db_world due to the table belonging to the world database. - -``` SQL -UPDATE `creature_template` SET `npc_flag` = 128 WHERE `entry`= 1234; -``` - -#### 2. Run the create_sql.sh script with your bash console to generate the file. - -On **Windows**: - Use `git bash here` (right click on the folder) to open up the git console and execute the shell script by typing __./create_sql.sh__. - Don't close this console yet so we can use it to commit and push to our remote later on. - -On **Unix/Linux/OSX**: - run it from the terminal directly or with "bash create_sql.sh" or execute it with a double click. - -#### 3. Now you'll have a file called **rev_[a_long_number].sql** - -You can open it and add/type your queries into it. - -#### 4. Commit with Git and push to github - -On **Windows**: - Remember when we said not to close the terminal on windows? Now you only need to type the following commands into the - terminal and you will be ready to open a pull request with your fix. - -``` git -## Make sure you have your branch with the new fix checked out. -## Select all your modified files -git add . - -## Commit your changes (you can simply type "git commit -v" too) -git commit -v -m "Commit message here" - -## origin = your git remote (the url of your fork) -## Don't need to type git push origin this_will_fix_that_problem -## Because origin is our default remote and the branch will be the current one -git push -``` - --------- -This feature grants you ( dev / tester / user ) to: - -- create PR without going crazy with the alter table header, but avoiding multiple imports -- avoid wrong order of updates -- avoid data inconsistency if an sql generates an error diff --git a/docs/SQL-Versioning.md b/docs/SQL-Versioning.md index e8aee90..68b744a 100644 --- a/docs/SQL-Versioning.md +++ b/docs/SQL-Versioning.md @@ -66,4 +66,4 @@ As said before, we've a special workflow for PR to allow db data consistency for it requires some stuffs to be done on your PR's sql to be compatible with our import system and allow you to avoid double importing of same queries. -The how to is described under [Dealing-with-SQL-files](Dealing-with-SQL-files) article
\ No newline at end of file +The how to is described under [How to create a PR](How-to-create-a-PR) article
\ No newline at end of file diff --git a/docs/cpp-code-standards.md b/docs/cpp-code-standards.md new file mode 100644 index 0000000..15610f6 --- /dev/null +++ b/docs/cpp-code-standards.md @@ -0,0 +1,245 @@ +--- +tableofcontents: 1 +--- + +# C++ Code Standards + +## Intro + +### Why are conding standards important? + +It makes it easier for everyone to maintain and read the written code as well as it gives us more control over it. + +It can also act as a safe guard to prevent errors in the code. + +### Why is it important for everyone to follow the standards? + +We only accept code that is written to the standards, this means that a PR you want to contribute with can be merged faster if you follow the standards from the beginning. + +## Coding Standards + +### Tabs and Indents + +We never use tabs, instead we use spaces. + +One tab is equal to 4 spaces and that is what should be used throughout the whole project. + +Visual Studio: + +Tools -> Options -> Text Editor -> C/C++ -> Tabs -> Smart, 4, 4, Insert spaces. + +Notepad++: + +Settings -> Preferences -> Language -> Tab size: 4, Replace by space: checked + +### Comments + +Always comment code where it is not typical repeated code and where the code is not self-explanatory. + +Comments should either be placed dierectly above the code, or directly beside it. + +```cpp +// A Comment +if (a == b) + +if (a == b) +{ + a = b; // A Comment +``` + +### Whitespace + +Trailing whitespace is a not allowed. + +You should also not have unneeded spaces within a bracket. + +Wrong: + +```cpp +if( var ) +if ( var ) +``` + +Correct: + +```cpp +if (var) +``` + +### Brackets + +When we work with if or else statements, etc, we always use brackets. + +```cpp +if (var) +{ + me->DoA(); + me->DoB(); +} +else +{ + me->DoC(); +} +``` + +### Random numbers vs. Constants + +Constants makes the code easier to read and understand, they also provide a safe guard and prevents numbers from being hard-coded. + +Wrong: + +```cpp +if (player->GetQuestStatus(10090) == 1) +{ + me->RemoveFlag(58, 2); +} +``` + +Correct: + +```cpp +if (player->GetQuestStatus(QUEST_BEAT_UP) == QUEST_STATUS_INCOMPLETE) +{ + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); +} +``` + +### Enumerations vs. define + +It is strongly advised to avoid using #define for constants. use either a const variable or an enum if multiple variables can be grouped togehter. + +Enums must have a name. Separate constant on different enums depending on their type. + +```cpp +enum Spells +{ + SPELL_1 = 1111 + SPELL_2 = 2222 + SPELL_3 = 3333 +}; + +constexpr uint32 SPELL_4 = 4444; +``` + +### Standard prefixes for constants + +All constants that we store have a standardized prefix. + +| PREFIX | Comment | +| :----- | :------- | +| SPELL_ | Spell ID | +| NPC_ | [creature_template.entry](creature_template#entry) | +| ITEM_ | [item_template.entry](item_template#entry) | +| GO_ | [gameobject_template.entry](gameobject_template#entry) | +| QUEST_ | [quest_template.id](quest_template#id) | +| SAY_ | [creature_text.GroupID](creature_text#groupid) | +| EMOTE_ | [creature_text.GroupID](creature_text#groupid) Different prefix from SAY_ to show that this is an emote. | +| MODEL_ | Creature model, DisplayID | +| H_XX | Heroic mode prefix (goes before the other prefix) XX is max man amount from mode. (OBSOLETE AS OF PATCH 3.2 WITH SpellDifficulty.dbc) | +| RAID_XX | Raid mode prefix (goes before the other prefix) XX is max man amount from mode. (OBSOLETE AS OF PATCH 3.2 WITH SpellDifficulty.dbc) | +| EVENT_ | Event/Encounter identifier for instances | +| DATA_ | Identifiers in instance used for GUIDs/data not being event/encounter | +| ACHIEV_ | Achievement ID | + +Correct: + +``` +SPELL_ENRAGE +H_SPELL_ENRAGE +EVENT_ILLIDAN +DATA_ILLIDAN +ACHIEVE_MAKE_IT_COUNT +``` + +### Naming of variables and functions + +Never use HUNGARIAN NOTATION in variable names! + +for public/protected members or global variables: + +```cpp +uint64 SomeGuid; +uint32 ShadowBoltTimer; +uint8 ShadowBoltCount; +bool IsEnraged; +float HeightData; +``` + +for private members: + +```cpp +uint64 _someGuid; +uint32 _mapEntry; +uint8 _count; +bool _isDead; +float _heightData; +``` + +Methods are always UpperCamelCase and their parameters in lowerCamelCase + +```cpp +void DoSomething(uint32 someNumber) +{ + uint32 someOtherNumber = 5; +} +``` + +Always use 'f' after float values when declaring them to avoid compile warnings. + +```cpp +float posX = 234.3456f; +``` + +### WorldObjects + +We define WorldObjects in this way: + +```cpp + +GameObject* go; +Creature* creature; +Item* item; +Player* player; +Unit* unit; +``` + +We never use multiple declaration with pointers + +```cpp +Something* obj1, *obj2; +``` + +The proper way to do this is + +```cpp +Something* obj1; +Something* obj2; +``` + +References are defined in a similar way (& must be stuck to the type) + +```cpp +Creature& creature; +``` + +Never define Creature\* me; in a creature script! +'me' is the pointer to the scripted creature. + +### Defining const variables + +const keyword should always go after type name + +```cpp +Player const* player; // player object is constant +Unit* const unit; // pointer to the unit is constant +SpellEntry const* const spell; // both spell and pointer to spell are constant +``` + +### Static variables + +static keyword always should be put as first + +```cpp +static uint32 someVar = 5; +static float const otherVar = 1.0f; +```
\ No newline at end of file diff --git a/docs/file-headers.md b/docs/file-headers.md new file mode 100644 index 0000000..0e54e88 --- /dev/null +++ b/docs/file-headers.md @@ -0,0 +1,23 @@ +# File Headers + +To make the files clean we use a standard format for new file headers. + +XXXX = start year +YYYY = active year + +**Stand alone code from AzerothCore (No previous code from anyone):** + +```cpp +/* + * Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v3 license, you may redistribute it and/or modify it under version 3 of the License, or (at your option), any later version. + */ +``` + +**With previous code from external sources or developers:** + +```cpp +/* + * Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v3 license, you may redistribute it and/or modify it under version 3 of the License, or (at your option), any later version. + * Copyright (C) XXXX-YYYY external-teamname <url> + */ +``` diff --git a/docs/issue-tracker-standards.md b/docs/issue-tracker-standards.md new file mode 100644 index 0000000..505833a --- /dev/null +++ b/docs/issue-tracker-standards.md @@ -0,0 +1,66 @@ +# Issue Tracker Standards + +[>> Issue Tracker](https://github.com/azerothcore/azerothcore-wotlk/issues) + +**Always search for existing issues before you report your problem or incident.** + +**All reports are public. Never leave passwords or other confidential information visible in your report.** + +### Self Checklist + +- Am I using the latest version/revision of AzerothCore? Do you need to update and test again before reporting? + +- Am I using any custom modifications to the database or core that could cause the issue? + +- Am I using any module that could cause the issue? + +- Did I include which **revision/hash/commit** I am on? + +- Did I include which database **version** I am using? + +- Did I include which operating system I am using? + +- Did I include steps to reproduce the issue? + +- Did I explain what is wrong and what is the expected behavior? + +Issue template: + +``` +[//]: # (IF YOU DO NOT FILL THIS TEMPLATE OUT, WE WILL CLOSE YOUR ISSUE) +[//]: # (You should always read how to properly fill out the bug report before continuing. https://www.azerothcore.org/wiki/issue-tracker-standards) +[//]: # (For issues containing a fix, please create a Pull Request following this tutorial: https://www.azerothcore.org/wiki/How-to-create-a-PR) + +**CURRENT BEHAVIOUR:** +[//]: # (If this is a crash report you should post the crashlog. Upload it to https://gist.github.com/) + +**EXPECTED BLIZZLIKE BEHAVIOUR:** +[//]: # (What should happen instead) + +**SOURCE:** +[//]: # (If you can, include a source that can strengthen your claim) + +**STEPS TO REPRODUCE THE PROBLEM:** +[//]: # (Describe in a detailed step-by-step order how to reproduce the issue) + +1. +2. +3. + +**EXTRA NOTES:** +[//]: # (Any extra notes that can help solve the issue) + +**AC HASH/COMMIT:** +[//]: # (Always include the exact hash/commit you are using. Never write "latest"!) + +**OPERATING SYSTEM:** +[//]: # (Which OS are you running) + +**MODULES:** +[//]: # (Are you using any modules? List them here) + +**CUSTOMIZATIONS:** +[//]: # (Do you have any other customizations? List them here) +``` + +[>> Issue Tracker](https://github.com/azerothcore/azerothcore-wotlk/issues) diff --git a/docs/sql-standards.md b/docs/sql-standards.md new file mode 100644 index 0000000..e2c83ba --- /dev/null +++ b/docs/sql-standards.md @@ -0,0 +1,140 @@ +--- +tableofcontents: 1 +--- + +# SQL Standards + +## Queries + +### General standards + +We always use backticks \` around keywords. \`creature_loot_template\`. + +We always use single quotes around string values ' ' but NEVER around an integer. + +### INSERT & DELETE + +We always DELETE before an INSERT to ensure we always put fields in the query and that no errors occur. + +Wrong: + +```sql +INSERT INTO `creature_loot_template` (3, 884, 0, 40, 1, 1, 0, 1, 1, 'Comment'); +``` + +Correct: + +```sql +DELETE FROM `creature_loot_template` WHERE `entry` = 3 AND `item` = 884; +INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES +(3, 884, 0, 40, 1, 1, 0, 1, 1, 'Comment'); +``` + +### UPDATE + +Make sure your queries are precise so you avoid changing something you do not want to edit. + +Rule of thumb, always include all primary keys in your WHERE clause. + +Wrong: + +```sql +UPDATE `creature_loot_template` SET `Chance` = 100 WHERE `item` = 884; +``` + +Correct: + +```sql +UPDATE `creature_loot_template` SET `Chance` = 100 WHERE `entry` = 3 AND `item` = 884; +``` + +### Variables + +Variables can be good where you change the same entry in several places to avoid mistakes. + +Before: + +```sql +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 7727; + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 7727 AND `source_type` = 0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(7727, 0, 0, 0, 0, 0, 100, 0, 2000, 4000, 2000, 4000, 0, 11, 930, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Grimtotem Shaman - In Combat - Cast \'Chain Lightning\''), +(7727, 0, 1, 0, 2, 0, 100, 1, 0, 50, 0, 0, 0, 11, 8499, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Grimtotem Shaman - Between 0-50% Health - Cast \'Fire Nova\' (No Repeat)'), +(7727, 0, 2, 0, 2, 0, 100, 0, 0, 30, 0, 0, 0, 11, 8005, 64, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Grimtotem Shaman - Between 0-30% Health - Cast \'Healing Wave\''); +``` + +After: + +```sql +-- Grimtotem Shaman SAI +SET @ENTRY := 7727; +SET @SPELL1 := 930; +SET @SPELL2 := 8499; +SET @SPELL3 := 8005; + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = @ENTRY; + +DELETE FROM `smart_scripts` WHERE `entryorguid` = @ENTRY AND `source_type` = 0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(@ENTRY, 0, 0, 0, 0, 0, 100, 0, 2000, 4000, 2000, 4000, 0, 11, @SPELL1, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Grimtotem Shaman - In Combat - Cast \'Chain Lightning\''), +(@ENTRY, 0, 1, 0, 2, 0, 100, 1, 0, 50, 0, 0, 0, 11, @SPELL2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Grimtotem Shaman - Between 0-50% Health - Cast \'Fire Nova\' (No Repeat)'), +(@ENTRY, 0, 2, 0, 2, 0, 100, 0, 0, 30, 0, 0, 0, 11, @SPELL3, 64, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Grimtotem Shaman - Between 0-30% Health - Cast \'Healing Wave\''); +``` + + +### Compact queries + +We always keep the code as compact as possible to limit the size of the files and decrease the number of queries needed to run. + +Wrong: + +```sql +DELETE FROM `table_1` WHERE `entry` = 1000; +DELETE FROM `table_1` WHERE `entry` = 2000; +DELETE FROM `table_1` WHERE `entry` = 3000; + + +INSERT INTO `table_1` VALUES (1000, ...); +INSERT INTO `table_1` VALUES (2000, ...); +INSERT INTO `table_1` VALUES (3000, ...); + +UPDATE `table_1` SET `field_1` = 'someValue' WHERE `entry` = 1000; +UPDATE `table_1` SET `field_1` = 'someValue' WHERE `entry` = 2000; +UPDATE `table_1` SET `field_1` = 'someValue' WHERE `entry` = 3000; +``` + +Correct: + +```sql +DELETE FROM `table_1` WHERE `entry` IN (1000, 2000, 3000); + +INSERT INTO `table_1` VALUES +(1000, ...), +(2000, ...), +(3000, ...); + +UPDATE `table_1` SET `field_1` = 'someValue' WHERE `entry` IN (1000, 2000, 3000); +``` + +### Flags & Bits + +For fields in the database where we work with flags it is always preffered that we add or remove flags instead of overriding them. + +Wrong: + +```sql +UPDATE `creature_template` SET `mechanic_immune_mask` = 617299803 WHERE `entry` = 7727; +``` + +Correct: + +```sql +-- Adding flags +UPDATE `creature_template` SET `mechanic_immune_mask`=`mechanic_immune_mask`|64|256|1024 WHERE `entry` = 7727; + +-- Removing flags +UPDATE `creature_template` SET `mechanic_immune_mask`=`mechanic_immune_mask`&~(64|256|1024) WHERE `entry` = 7727; +``` + +**Note for SQL reviewers:** When we work with GUID's, make sure that we use as low entries as possible to fill out the gaps in the database. This can easily be done with tools like [Unused GUID Searcher](https://github.com/azerothcore/unused-guid-search). diff --git a/docs/standard-operating-procedure.md b/docs/standard-operating-procedure.md new file mode 100644 index 0000000..da6ada8 --- /dev/null +++ b/docs/standard-operating-procedure.md @@ -0,0 +1,9 @@ +# Standard Operating Procedure + +- [C++ Code Standards](cpp-code-standards) + +- [SQL Standards](sql-standards) + +- [File Headers](file-headers) + +- [Issue Tracker Standards](issue-tracker-standards) |
