diff --git a/Makefile.am b/Makefile.am index 0d815cf1e..3bf0ad9de 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/NEWS b/NEWS index e4a7d1174..f897d58db 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,6 @@ = MaNGOS -- History of visible changes = -Copyright (c) 2005-2008 MaNGOS project +Copyright (c) 2005-2009 MaNGOS project See the COPYING file for copying conditions. diff --git a/README b/README index 8a1bb4e73..dc49c8224 100644 --- a/README +++ b/README @@ -1,6 +1,6 @@ = MaNGOS -- README = -Copyright (C) 2005-2008 MaNGOS project +Copyright (C) 2005-2009 MaNGOS project MaNGOS is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/configure.ac b/configure.ac index ec2c84de2..b193e6fe0 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS project +# Copyright (C) 2005-2009 MaNGOS project # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without diff --git a/contrib/Makefile.am b/contrib/Makefile.am index 653e691a1..d39f2caa8 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index 7bef1f077..05373165e 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -1,9 +1,30 @@ +/* + * Copyright (C) 2005-2009 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + #include #include #include #include #include #include +#include +#include +#include #include "../../src/framework/Platform/CompilerDefs.h" #if PLATFORM == PLATFORM_WINDOWS @@ -11,40 +32,90 @@ #define popen _popen #define pclose _pclose #define snprintf _snprintf +#define putenv _putenv #pragma warning (disable:4996) #else #include #endif +// max string sizes + +#define MAX_REMOTE 256 +#define MAX_MSG 16384 +#define MAX_PATH 2048 +#define MAX_BUF 2048 +#define MAX_CMD 2048 +#define MAX_HASH 256 +#define MAX_DB 256 + // config #define NUM_REMOTES 2 +#define NUM_DATABASES 3 -char remotes[NUM_REMOTES][256] = { +char remotes[NUM_REMOTES][MAX_REMOTE] = { "git@github.com:mangos/mangos.git", "git://github.com/mangos/mangos.git" // used for fetch if present }; +char remote_branch[MAX_REMOTE] = "master"; +char rev_file[MAX_PATH] = "src/shared/revision_nr.h"; +char sql_update_dir[MAX_PATH] = "sql/updates"; +char new_index_file[MAX_PATH] = ".git/git_id_index"; + +char databases[NUM_DATABASES][MAX_DB] = { + "characters", + "mangos", + "realmd" +}; + +char db_version_table[NUM_DATABASES][MAX_DB] = { + "character_db_version", + "db_version", + "realmd_db_version", +}; + +char db_sql_file[NUM_DATABASES][MAX_PATH] = { + "sql/characters.sql", + "sql/mangos.sql", + "sql/realmd.sql" +}; + bool allow_replace = false; bool local = false; bool do_fetch = false; +bool do_sql = false; +bool use_new_index = true; // aux -char origins[NUM_REMOTES][256]; +char origins[NUM_REMOTES][MAX_REMOTE]; int rev; -char head_message[16384]; -char write_file[2048]; +int last_sql_rev[NUM_DATABASES] = {0,0,0}; +int last_sql_nr[NUM_DATABASES] = {0,0,0}; + +char head_message[MAX_MSG]; +char path_prefix[MAX_PATH] = ""; +char base_path[MAX_PATH]; +char buffer[MAX_BUF]; +char cmd[MAX_CMD]; +char origin_hash[MAX_HASH]; +char last_sql_update[NUM_DATABASES][MAX_PATH]; +char old_index_cmd[MAX_CMD]; +char new_index_cmd[MAX_CMD]; + +std::set new_sql_updates; -char buffer[256]; FILE *cmd_pipe; bool find_path() { printf("+ finding path\n"); - char cur_path[2048], *ptr; - getcwd(cur_path, 2048); - int len = strnlen(cur_path, 2048); + char *ptr; + char cur_path[MAX_PATH]; + getcwd(cur_path, MAX_PATH); + int len = strlen(cur_path); + strncpy(base_path, cur_path, len+1); if(cur_path[len-1] == '/' || cur_path[len-1] == '\\') { @@ -58,17 +129,24 @@ bool find_path() for(ptr = cur_path-1; ptr = strchr(ptr+1, '\\'); count_back++); int count = std::max(count_fwd, count_back); - char prefix[2048] = "", path[2048]; + char path[MAX_PATH]; for(int i = 0; i < count; i++) { - snprintf(path, 2048, "%s.git", prefix); + snprintf(path, MAX_PATH, "%s.git", path_prefix); if(0 == chdir(path)) { chdir(cur_path); - snprintf(write_file, 2048, "%ssrc/shared/revision_nr.h", prefix); return true; } - strncat(prefix, "../", 2048); + strncat(path_prefix, "../", MAX_PATH); + + ptr = strrchr(base_path, '\\'); + if(ptr) *ptr = '\0'; + else + { + ptr = strrchr(base_path, '/'); + if(ptr) *ptr = '\0'; + } } return false; @@ -81,15 +159,15 @@ bool find_origin() return false; bool ret = false; - while(fgets(buffer, 256, cmd_pipe)) + while(fgets(buffer, MAX_BUF, cmd_pipe)) { - char name[256], remote[256]; + char name[256], remote[MAX_REMOTE]; sscanf(buffer, "%s %s", name, remote); for(int i = 0; i < NUM_REMOTES; i++) { if(strcmp(remote, remotes[i]) == 0) { - strncpy(origins[i], name, 256); + strncpy(origins[i], name, MAX_REMOTE); ret = true; } } @@ -101,9 +179,8 @@ bool find_origin() bool fetch_origin() { printf("+ fetching origin\n"); - char cmd[256]; // use the public clone url if present because the private may require a password - sprintf(cmd, "git fetch %s master", origins[1][0] ? origins[1] : origins[0]); + snprintf(cmd, MAX_CMD, "git fetch %s %s", (origins[1][0] ? origins[1] : origins[0]), remote_branch); int ret = system(cmd); return true; } @@ -111,24 +188,22 @@ bool fetch_origin() bool check_fwd() { printf("+ checking fast forward\n"); - char cmd[256]; - sprintf(cmd, "git log -n 1 --pretty=\"format:%%H\" %s/master", origins[1][0] ? origins[1] : origins[0]); + snprintf(cmd, MAX_CMD, "git log -n 1 --pretty=\"format:%%H\" %s/%s", (origins[1][0] ? origins[1] : origins[0]), remote_branch); if( (cmd_pipe = popen( cmd, "r" )) == NULL ) return false; - char hash[256]; - if(!fgets(buffer, 256, cmd_pipe)) return false; - strncpy(hash, buffer, 256); + if(!fgets(buffer, MAX_BUF, cmd_pipe)) return false; + strncpy(origin_hash, buffer, MAX_HASH); pclose(cmd_pipe); if( (cmd_pipe = popen( "git log --pretty=\"format:%H\"", "r" )) == NULL ) return false; bool found = false; - while(fgets(buffer, 256, cmd_pipe)) + while(fgets(buffer, MAX_BUF, cmd_pipe)) { - buffer[strnlen(buffer, 256) - 1] = '\0'; - if(strncmp(hash, buffer, 256) == 0) + buffer[strlen(buffer) - 1] = '\0'; + if(strncmp(origin_hash, buffer, MAX_BUF) == 0) { found = true; break; @@ -136,7 +211,13 @@ bool check_fwd() } pclose(cmd_pipe); - if(!found) printf("WARNING: non-fastforward, use rebase!\n"); + if(!found) + { + // with fetch you still get the latest rev, you just rebase afterwards and push + // without it you may not get the right rev + if(do_fetch) printf("WARNING: non-fastforward, use rebase!\n"); + else { printf("ERROR: non-fastforward, use rebase!\n"); return false; } + } return true; } @@ -157,14 +238,13 @@ bool find_rev() { if(!local && !origins[i][0]) continue; - char cmd[512]; - if(local) sprintf(cmd, "git log HEAD --pretty=\"format:%%s\""); - else sprintf(cmd, "git log %s/master --pretty=\"format:%%s\"", origins[i]); + if(local) snprintf(cmd, MAX_CMD, "git log HEAD --pretty=\"format:%%s\""); + else sprintf(cmd, "git log %s/%s --pretty=\"format:%%s\"", origins[i], remote_branch); if( (cmd_pipe = popen( cmd, "r" )) == NULL ) continue; int nr; - while(fgets(buffer, 256, cmd_pipe)) + while(fgets(buffer, MAX_BUF, cmd_pipe)) { nr = get_rev(buffer); if(nr >= rev) @@ -188,6 +268,19 @@ std::string generateHeader(char const* rev_str) return newData.str(); } +void system_switch_index(const char *cmd) +{ + // do the command for the original index and then for the new index + // both need to be updated with the changes before commit + // but the new index will contains only the desired changes + // while the old may contain others + system(cmd); + if(!use_new_index) return; + if(putenv(new_index_cmd) != 0) return; + system(cmd); + if(putenv(old_index_cmd) != 0) return; +} + bool write_rev() { printf("+ writing revision_nr.h\n"); @@ -195,10 +288,18 @@ bool write_rev() sprintf(rev_str, "%d", rev); std::string header = generateHeader(rev_str); - if(FILE* OutputFile = fopen(write_file,"wb")) + char prefixed_file[MAX_PATH]; + snprintf(prefixed_file, MAX_PATH, "%s%s", path_prefix, rev_file); + + if(FILE* OutputFile = fopen(prefixed_file, "wb")) { fprintf(OutputFile,"%s", header.c_str()); fclose(OutputFile); + + // add the file to both indices, to be committed later + snprintf(cmd, MAX_CMD, "git add %s", prefixed_file); + system_switch_index(cmd); + return true; } @@ -240,14 +341,460 @@ bool find_head_msg() bool amend_commit() { printf("+ amending last commit\n"); - char cmd[512]; - sprintf(cmd, "git commit --amend -F- %s", write_file); + + // commit the contents of the (new) index + if(use_new_index && putenv(new_index_cmd) != 0) return false; + snprintf(cmd, MAX_CMD, "git commit --amend -F-"); if( (cmd_pipe = popen( cmd, "w" )) == NULL ) return false; fprintf(cmd_pipe, "[%d] %s", rev, head_message); pclose(cmd_pipe); - + if(use_new_index && putenv(old_index_cmd) != 0) return false; + + return true; +} + +struct sql_update_info +{ + int rev; + int nr; + int db_idx; + char db[MAX_BUF]; + char table[MAX_BUF]; + bool has_table; +}; + +bool get_sql_update_info(const char *buffer, sql_update_info &info) +{ + info.table[0] = '\0'; + int dummy[3]; + if(sscanf(buffer, "%d_%d_%d", &dummy[0], &dummy[1], &dummy[2]) == 3) + return false; + + if(sscanf(buffer, "%d_%d_%[^_]_%[^.].sql", &info.rev, &info.nr, info.db, info.table) != 4 && + sscanf(buffer, "%d_%d_%[^.].sql", &info.rev, &info.nr, info.db) != 3) + { + info.rev = 0; // this may be set by the first scans, even if they fail + if(sscanf(buffer, "%d_%[^_]_%[^.].sql", &info.nr, info.db, info.table) != 3 && + sscanf(buffer, "%d_%[^.].sql", &info.nr, info.db) != 2) + return false; + } + + for(info.db_idx = 0; info.db_idx < NUM_DATABASES; info.db_idx++) + if(strncmp(info.db, databases[info.db_idx], MAX_DB) == 0) break; + info.has_table = (info.table[0] != '\0'); + return true; +} + +bool find_sql_updates() +{ + printf("+ finding new sql updates on HEAD\n"); + // add all updates from HEAD + snprintf(cmd, MAX_CMD, "git show HEAD:%s", sql_update_dir); + if( (cmd_pipe = popen( cmd, "r" )) == NULL ) + return false; + + // skip first two lines + if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; } + if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; } + + sql_update_info info; + + while(fgets(buffer, MAX_BUF, cmd_pipe)) + { + buffer[strlen(buffer) - 1] = '\0'; + if(!get_sql_update_info(buffer, info)) continue; + + if(info.db_idx == NUM_DATABASES) + { + if(info.rev > 0) printf("WARNING: incorrect database name for sql update %s\n", buffer); + continue; + } + + new_sql_updates.insert(buffer); + } + + pclose(cmd_pipe); + + // remove updates from the last commit also found on origin + snprintf(cmd, MAX_CMD, "git show %s:%s", origin_hash, sql_update_dir); + if( (cmd_pipe = popen( cmd, "r" )) == NULL ) + return false; + + // skip first two lines + if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; } + if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; } + + while(fgets(buffer, MAX_BUF, cmd_pipe)) + { + buffer[strlen(buffer) - 1] = '\0'; + if(!get_sql_update_info(buffer, info)) continue; + + // find the old update with the highest rev for each database + // (will be the required version for the new update) + std::set::iterator itr = new_sql_updates.find(buffer); + if(itr != new_sql_updates.end() ) + { + if(info.rev > 0 && (info.rev > last_sql_rev[info.db_idx] || + (info.rev == last_sql_rev[info.db_idx] && info.nr > last_sql_nr[info.db_idx]))) + { + last_sql_rev[info.db_idx] = info.rev; + last_sql_nr[info.db_idx] = info.nr; + sscanf(buffer, "%[^.]", last_sql_update[info.db_idx]); + } + new_sql_updates.erase(itr); + } + } + + pclose(cmd_pipe); + + if(!new_sql_updates.empty()) + { + for(std::set::iterator itr = new_sql_updates.begin(); itr != new_sql_updates.end(); ++itr) + printf("%s\n", itr->c_str()); + } + else + printf("WARNING: no new sql updates found.\n"); + + return true; +} + +bool copy_file(const char *src_file, const char *dst_file) +{ + FILE * fin = fopen( src_file, "rb" ); + if(!fin) return false; + FILE * fout = fopen( dst_file, "wb" ); + if(!fout) { fclose(fin); return false; } + + for(char c = getc(fin); !feof(fin); putc(c, fout), c = getc(fin)); + + fclose(fin); + fclose(fout); + return true; +} + +bool convert_sql_updates() +{ + if(new_sql_updates.empty()) return true; + + printf("+ converting sql updates\n"); + + // rename the sql update files and add the required update statement + for(std::set::iterator itr = new_sql_updates.begin(); itr != new_sql_updates.end(); ++itr) + { + sql_update_info info; + if(!get_sql_update_info(itr->c_str(), info)) return false; + if(info.db_idx == NUM_DATABASES) return false; + + // generating the new name should work for updates with or without a rev + char src_file[MAX_PATH], new_name[MAX_PATH], dst_file[MAX_PATH]; + snprintf(src_file, MAX_PATH, "%s%s/%s", path_prefix, sql_update_dir, itr->c_str()); + snprintf(new_name, MAX_PATH, "%d_%0*d_%s%s%s", rev, 2, info.nr, info.db, info.has_table ? "_" : "", info.table); + snprintf(dst_file, MAX_PATH, "%s%s/%s.sql", path_prefix, sql_update_dir, new_name); + + FILE * fin = fopen( src_file, "r" ); + if(!fin) return false; + FILE * fout = fopen( dst_file, "w" ); + if(!fout) { fclose(fin); return false; } + + // add the update requirements + fprintf(fout, "ALTER TABLE %s CHANGE COLUMN required_%s required_%s bit;\n\n", + db_version_table[info.db_idx], last_sql_update[info.db_idx], new_name); + + // skip the first one or two lines from the input + // if it already contains update requirements + if(fgets(buffer, MAX_BUF, fin)) + { + char dummy[MAX_BUF]; + if(sscanf(buffer, "ALTER TABLE %s CHANGE COLUMN required_%s required_%s bit", dummy, dummy, dummy) == 3) + { + if(fgets(buffer, MAX_BUF, fin) && buffer[0] != '\n') + fputs(buffer, fout); + } + else + fputs(buffer, fout); + } + + // copy the rest of the file + char c; + while( (c = getc(fin)) != EOF ) + putc(c, fout); + + fclose(fin); + fclose(fout); + + // rename the file in git + snprintf(cmd, MAX_CMD, "git add %s", dst_file); + system_switch_index(cmd); + snprintf(cmd, MAX_CMD, "git rm --quiet %s", src_file); + system_switch_index(cmd); + + // update the last sql update for the current database + strncpy(last_sql_update[info.db_idx], new_name, MAX_PATH); + } + + return true; +} + +bool generate_sql_makefile() +{ + if(new_sql_updates.empty()) return true; + + // find all files in the update dir + snprintf(cmd, MAX_CMD, "git show HEAD:%s", sql_update_dir); + if( (cmd_pipe = popen( cmd, "r" )) == NULL ) + return false; + + // skip first two lines + if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; } + if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; } + + char newname[MAX_PATH]; + std::set file_list; + sql_update_info info; + + while(fgets(buffer, MAX_BUF, cmd_pipe)) + { + buffer[strlen(buffer) - 1] = '\0'; + if(buffer[strlen(buffer) - 1] != '/' && + strncmp(buffer, "Makefile.am", MAX_BUF) != 0) + { + if(new_sql_updates.find(buffer) != new_sql_updates.end()) + { + if(!get_sql_update_info(buffer, info)) return false; + snprintf(newname, MAX_PATH, "%d_%0*d_%s%s%s.sql", rev, 2, info.nr, info.db, info.has_table ? "_" : "", info.table); + file_list.insert(newname); + } + else + file_list.insert(buffer); + } + } + + pclose(cmd_pipe); + + // write the makefile + char file_name[MAX_PATH]; + snprintf(file_name, MAX_PATH, "%s%s/Makefile.am", path_prefix, sql_update_dir); + FILE *fout = fopen(file_name, "w"); + if(!fout) { pclose(cmd_pipe); return false; } + + fprintf(fout, + "# Copyright (C) 2005-2009 MaNGOS \n" + "#\n" + "# This program is free software; you can redistribute it and/or modify\n" + "# it under the terms of the GNU General Public License as published by\n" + "# the Free Software Foundation; either version 2 of the License, or\n" + "# (at your option) any later version.\n" + "#\n" + "# This program is distributed in the hope that it will be useful,\n" + "# but WITHOUT ANY WARRANTY; without even the implied warranty of\n" + "# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" + "# GNU General Public License for more details.\n" + "#\n" + "# You should have received a copy of the GNU General Public License\n" + "# along with this program; if not, write to the Free Software\n" + "# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" + "\n" + "## Process this file with automake to produce Makefile.in\n" + "\n" + "## Sub-directories to parse\n" + "\n" + "## Change installation location\n" + "# datadir = mangos/%s\n" + "pkgdatadir = $(datadir)/mangos/%s\n" + "\n" + "## Files to be installed\n" + "# Install basic SQL files to datadir\n" + "pkgdata_DATA = \\\n", + sql_update_dir, sql_update_dir + ); + + for(std::set::iterator itr = file_list.begin(), next; itr != file_list.end(); ++itr) + { + next = itr; ++next; + fprintf(fout, "\t%s%s\n", itr->c_str(), next == file_list.end() ? "" : " \\"); + } + + fprintf(fout, + "\n## Additional files to include when running 'make dist'\n" + "# SQL update files, to upgrade database schema from older revisions\n" + "EXTRA_DIST = \\\n" + ); + + for(std::set::iterator itr = file_list.begin(), next; itr != file_list.end(); ++itr) + { + next = itr; ++next; + fprintf(fout, "\t%s%s\n", itr->c_str(), next == file_list.end() ? "" : " \\"); + } + + fclose(fout); + + snprintf(cmd, MAX_CMD, "git add %s%s/Makefile.am", path_prefix, sql_update_dir); + system_switch_index(cmd); + + return true; +} + +bool change_sql_database() +{ + if(new_sql_updates.empty()) return true; + printf("+ changing database sql files\n"); + + // rename the database files, copy their contents back + // and change the required update line + for(int i = 0; i < NUM_DATABASES; i++) + { + if(last_sql_update[i][0] == '\0') continue; + + char old_file[MAX_PATH], tmp_file[MAX_PATH], dummy[MAX_BUF]; + + snprintf(old_file, MAX_PATH, "%s%s", path_prefix, db_sql_file[i]); + snprintf(tmp_file, MAX_PATH, "%s%stmp", path_prefix, db_sql_file[i]); + + rename(old_file, tmp_file); + + FILE *fin = fopen( tmp_file, "r" ); + if(!fin) return false; + FILE *fout = fopen( old_file, "w" ); + if(!fout) return false; + + snprintf(dummy, MAX_CMD, "CREATE TABLE `%s` (\n", db_version_table[i]); + while(fgets(buffer, MAX_BUF, fin)) + { + fputs(buffer, fout); + if(strncmp(buffer, dummy, MAX_BUF) == 0) + break; + } + + while(1) + { + if(!fgets(buffer, MAX_BUF, fin)) return false; + if(sscanf(buffer, " `required_%s`", dummy) == 1) break; + fputs(buffer, fout); + } + + fprintf(fout, " `required_%s` bit(1) default NULL\n", last_sql_update[i]); + while(fgets(buffer, MAX_BUF, fin)) + fputs(buffer, fout); + + fclose(fin); + fclose(fout); + remove(tmp_file); + + snprintf(cmd, MAX_CMD, "git add %s", old_file); + system_switch_index(cmd); + } + return true; +} + +bool change_sql_history() +{ + snprintf(cmd, MAX_CMD, "git log HEAD --pretty=\"format:%%H\""); + if( (cmd_pipe = popen( cmd, "r" )) == NULL ) + return false; + + std::list hashes; + while(fgets(buffer, MAX_BUF, cmd_pipe)) + { + buffer[strlen(buffer) - 1] = '\0'; + if(strncmp(origin_hash, buffer, MAX_HASH) == 0) + break; + + hashes.push_back(buffer); + } + pclose(cmd_pipe); + if(hashes.empty()) return false; // must have at least one commit + if(hashes.size() < 2) return true; // only one commit, ok but nothing to do + + snprintf(cmd, MAX_CMD, "git reset --hard %s", origin_hash); + system(cmd); + + for(std::list::reverse_iterator next = hashes.rbegin(), itr = next++; next != hashes.rend(); ++itr, ++next) + { + // stage the changes from the orignal commit + snprintf(cmd, MAX_CMD, "git cherry-pick -n %s", itr->c_str()); + system(cmd); + + // remove changed and deleted files + snprintf(cmd, MAX_CMD, "git checkout HEAD %s%s", path_prefix, sql_update_dir); + system(cmd); + + // remove the newly added files + snprintf(cmd, MAX_CMD, "git diff --cached --diff-filter=A --name-only %s%s", path_prefix, sql_update_dir); + if( (cmd_pipe = popen( cmd, "r" )) == NULL ) + return false; + + while(fgets(buffer, MAX_BUF, cmd_pipe)) + { + buffer[strlen(buffer) - 1] = '\0'; + snprintf(cmd, MAX_CMD, "git rm -f --quiet %s%s", path_prefix, buffer); + system(cmd); + } + + pclose(cmd_pipe); + + // make a commit with the same author and message as the original one + + snprintf(cmd, MAX_CMD, "git commit -C %s", itr->c_str()); + system(cmd); + } + + snprintf(cmd, MAX_CMD, "git cherry-pick %s", hashes.begin()->c_str()); + system(cmd); + + return true; +} + +bool prepare_new_index() +{ + if(!use_new_index) return true; + + // only use a new index if there are staged changes that should be preserved + if( (cmd_pipe = popen( "git diff --cached", "r" )) == NULL ) + return false; + + if(!fgets(buffer, MAX_BUF, cmd_pipe)) + { + use_new_index = false; + pclose(cmd_pipe); + return true; + } + + pclose(cmd_pipe); + + printf("+ preparing new index\n"); + + // copy the existing index file to a new one + char src_file[MAX_PATH], dst_file[MAX_PATH]; + + char *old_index = getenv("GIT_INDEX_FILE"); + if(old_index) strncpy(src_file, old_index, MAX_PATH); + else snprintf(src_file, MAX_PATH, "%s.git/index", path_prefix); + snprintf(dst_file, MAX_PATH, "%s%s", path_prefix, new_index_file); + + if(!copy_file(src_file, dst_file)) return false; + + // doesn't seem to work with path_prefix + snprintf(new_index_cmd, MAX_CMD, "GIT_INDEX_FILE=%s/%s", base_path, new_index_file); + if(putenv(new_index_cmd) != 0) return false; + + // clear the new index + system("git reset -q --mixed HEAD"); + + // revert to old index + snprintf(old_index_cmd, MAX_CMD, "GIT_INDEX_FILE="); + if(putenv(old_index_cmd) != 0) return false; + return true; +} + +bool cleanup_new_index() +{ + if(!use_new_index) return true; + printf("+ cleaning up the new index\n"); + char idx_file[MAX_PATH]; + snprintf(idx_file, MAX_PATH, "%s%s", path_prefix, new_index_file); + remove(idx_file); return true; } @@ -258,40 +805,57 @@ int main(int argc, char *argv[]) for(int i = 1; i < argc; i++) { if(argv[i] == NULL) continue; - if(strncmp(argv[i], "-r", 2) == 0 || strncmp(argv[i], "--replace", 2) == 0) + if(strncmp(argv[i], "-r", 2) == 0 || strncmp(argv[i], "--replace", 9) == 0) allow_replace = true; - if(strncmp(argv[i], "-l", 2) == 0 || strncmp(argv[i], "--local", 2) == 0) + else if(strncmp(argv[i], "-l", 2) == 0 || strncmp(argv[i], "--local", 7) == 0) local = true; - if(strncmp(argv[i], "-f", 2) == 0 || strncmp(argv[i], "--fetch", 2) == 0) + else if(strncmp(argv[i], "-f", 2) == 0 || strncmp(argv[i], "--fetch", 7) == 0) do_fetch = true; - if(strncmp(argv[i], "-h", 2) == 0 || strncmp(argv[i], "--help", 2) == 0) + else if(strncmp(argv[i], "-s", 2) == 0 || strncmp(argv[i], "--sql", 5) == 0) + do_sql = true; + else if(strncmp(argv[i], "--branch=", 9) == 0) + snprintf(remote_branch, MAX_REMOTE, "%s", argv[i] + 9); + else if(strncmp(argv[i], "-h", 2) == 0 || strncmp(argv[i], "--help", 6) == 0) { printf("Usage: git_id [OPTION]\n"); printf("Generates a new rev number and updates revision_nr.h and the commit message.\n"); printf("Should be used just before push.\n"); - printf(" -h, --help show the usage\n"); - printf(" -r, --replace replace the rev number if it was already applied to the last\n"); - printf(" commit\n"); - printf(" -l, --local search for the highest rev number on HEAD\n"); - printf(" -f, --fetch fetch from origin before searching for the new rev\n"); + printf(" -h, --help show the usage\n"); + printf(" -r, --replace replace the rev number if it was already applied\n"); + printf(" to the last commit\n"); + printf(" -l, --local search for the highest rev number on HEAD\n"); + printf(" -f, --fetch fetch from origin before searching for the new rev\n"); + printf(" -s, --sql search for new sql updates and do all of the changes\n"); + printf(" for the new rev\n"); + printf(" --branch=BRANCH specify which remote branch to use\n"); return 0; } } - DO( find_path() ); + DO( find_path() ); if(!local) { - DO( find_origin() ); + DO( find_origin() ); if(do_fetch) - { - DO( fetch_origin() ); - DO( check_fwd() ); - } + DO( fetch_origin() ); + DO( check_fwd() ); } - DO( find_rev() ); - DO( find_head_msg() ); - DO( write_rev() ); - DO( amend_commit() ); + DO( find_rev() ); + DO( find_head_msg() ); + if(do_sql) + DO( find_sql_updates() ); + DO( prepare_new_index() ); + DO( write_rev() ); + if(do_sql) + { + DO( convert_sql_updates() ); + DO( generate_sql_makefile() ); + DO( change_sql_database() ); + } + DO( amend_commit() ); + DO( cleanup_new_index() ); + //if(do_sql) + // DO( change_sql_history() ); return 0; } diff --git a/doc/Makefile.am b/doc/Makefile.am index c42b41298..ef6954dcd 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/sql/Makefile.am b/sql/Makefile.am index b3d95a853..6577db6ef 100644 --- a/sql/Makefile.am +++ b/sql/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/sql/characters.sql b/sql/characters.sql index 0dffc512e..701a2cee8 100644 --- a/sql/characters.sql +++ b/sql/characters.sql @@ -21,7 +21,7 @@ DROP TABLE IF EXISTS `character_db_version`; CREATE TABLE `character_db_version` ( - `required_2008_12_22_19_characters_item_instance` bit(1) default NULL + `required_7075_01_characters_character_spell` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Last applied sql update to DB'; -- @@ -626,7 +626,6 @@ DROP TABLE IF EXISTS `character_spell`; CREATE TABLE `character_spell` ( `guid` int(11) unsigned NOT NULL default '0' COMMENT 'Global Unique Identifier', `spell` int(11) unsigned NOT NULL default '0' COMMENT 'Spell Identifier', - `slot` int(11) unsigned NOT NULL default '0', `active` tinyint(3) unsigned NOT NULL default '1', `disabled` tinyint(3) unsigned NOT NULL default '0', PRIMARY KEY (`guid`,`spell`) @@ -1216,7 +1215,6 @@ DROP TABLE IF EXISTS `pet_spell`; CREATE TABLE `pet_spell` ( `guid` int(11) unsigned NOT NULL default '0' COMMENT 'Global Unique Identifier', `spell` int(11) unsigned NOT NULL default '0' COMMENT 'Spell Identifier', - `slot` int(11) unsigned NOT NULL default '0', `active` int(11) unsigned NOT NULL default '0', PRIMARY KEY (`guid`,`spell`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Pet System'; diff --git a/sql/mangos.sql b/sql/mangos.sql index b529fb552..1854d1492 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -22,7 +22,7 @@ DROP TABLE IF EXISTS `db_version`; CREATE TABLE `db_version` ( `version` varchar(120) default NULL, - `required_6961_01_mangos_command` bit(1) default NULL + `required_7075_02_mangos_spell_learn_spell` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -36,6 +36,31 @@ INSERT INTO `db_version` VALUES /*!40000 ALTER TABLE `db_version` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `achievement_reward` +-- + +DROP TABLE IF EXISTS `achievement_reward`; +CREATE TABLE `achievement_reward` ( + `entry` mediumint(8) unsigned NOT NULL default '0', + `title_A` mediumint(8) unsigned NOT NULL default '0', + `title_H` mediumint(8) unsigned NOT NULL default '0', + `item` mediumint(8) unsigned NOT NULL default '0', + `sender` mediumint(8) unsigned NOT NULL default '0', + `subject` varchar(255) default NULL, + `text` text, + PRIMARY KEY (`entry`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Loot System'; + +-- +-- Dumping data for table `achievement_reward` +-- + +LOCK TABLES `achievement_reward` WRITE; +/*!40000 ALTER TABLE `achievement_reward` DISABLE KEYS */; +/*!40000 ALTER TABLE `achievement_reward` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `areatrigger_involvedrelation` -- @@ -160,7 +185,10 @@ INSERT INTO `battleground_template` VALUES (5,0,2,10,70,939,0,940,3.14159), (6,0,2,10,70,0,0,0,0), (7,0,0,0,0,1103,3.40156,1104,0.263892), -(8,0,2,10,70,1258,0,1259,3.14159); +(8,0,2,10,70,1258,0,1259,3.14159), +(9,0,0,0,0,1367,0,1368,0), +(10,5,5,10,80,1362,0,1363,0), +(11,5,5,10,80,1364,0,1365,0); /*!40000 ALTER TABLE `battleground_template` ENABLE KEYS */; UNLOCK TABLES; @@ -1539,8 +1567,8 @@ CREATE TABLE `item_template` ( `RequiredCityRank` mediumint(8) unsigned NOT NULL default '0', `RequiredReputationFaction` smallint(5) unsigned NOT NULL default '0', `RequiredReputationRank` smallint(5) unsigned NOT NULL default '0', - `maxcount` smallint(5) unsigned NOT NULL default '0', - `stackable` smallint(5) unsigned NOT NULL default '1', + `maxcount` smallint(5) NOT NULL default '-1', + `stackable` smallint(5) NOT NULL default '1', `ContainerSlots` tinyint(3) unsigned NOT NULL default '0', `StatsCount` tinyint(3) unsigned NOT NULL default '0', `stat_type1` tinyint(3) unsigned NOT NULL default '0', @@ -1761,6 +1789,41 @@ INSERT INTO `item_template` VALUES /*!40000 ALTER TABLE `item_template` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `locales_achievement_reward` +-- + +DROP TABLE IF EXISTS `locales_achievement_reward`; +CREATE TABLE `locales_achievement_reward` ( + `entry` mediumint(8) unsigned NOT NULL default '0', + `subject_loc1` varchar(100) NOT NULL default '', + `subject_loc2` varchar(100) NOT NULL default '', + `subject_loc3` varchar(100) NOT NULL default '', + `subject_loc4` varchar(100) NOT NULL default '', + `subject_loc5` varchar(100) NOT NULL default '', + `subject_loc6` varchar(100) NOT NULL default '', + `subject_loc7` varchar(100) NOT NULL default '', + `subject_loc8` varchar(100) NOT NULL default '', + `text_loc1` text default NULL, + `text_loc2` text default NULL, + `text_loc3` text default NULL, + `text_loc4` text default NULL, + `text_loc5` text default NULL, + `text_loc6` text default NULL, + `text_loc7` text default NULL, + `text_loc8` text default NULL, + PRIMARY KEY (`entry`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Dumping data for table `locales_achievement_reward` +-- + +LOCK TABLES `locales_achievement_reward` WRITE; +/*!40000 ALTER TABLE `locales_achievement_reward` DISABLE KEYS */; +/*!40000 ALTER TABLE `locales_achievement_reward` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `locales_creature` -- @@ -9288,10 +9351,10 @@ INSERT INTO `playercreateinfo` VALUES (6,7,1,215,-2917,-257,53), (6,11,1,215,-2917,-257,53), (7,1,0,1,-6240,331,383), -(7,4,0,1,-6340,331,383), +(7,4,0,1,-6240,331,383), (7,6,609,4298,2355.05,-5661.7, 426.026), -(7,8,0,1,-6340,331,383), -(7,9,0,1,-6340,331,383), +(7,8,0,1,-6240,331,383), +(7,9,0,1,-6240,331,383), (8,1,1,14,-618,-4251,39), (8,3,1,14,-618,-4251,39), (8,4,1,14,-618,-4251,39), @@ -9650,14 +9713,14 @@ INSERT INTO `playercreateinfo_action` VALUES (11,2,0,6603,0,0), (11,2,1,21084,0,0), (11,2,2,635,0,0), -(11,2,3,28880,0,0), +(11,2,3,59542,0,0), (11,2,10,159,128,0), (11,2,11,4540,128,0), (11,2,83,4540,128,0), (11,3,0,6603,0,0), (11,3,1,2973,0,0), (11,3,2,75,0,0), -(11,3,3,28880,0,0), +(11,3,3,59543,0,0), (11,3,10,159,128,0), (11,3,11,4540,128,0), (11,3,72,6603,0,0), @@ -9668,7 +9731,7 @@ INSERT INTO `playercreateinfo_action` VALUES (11,5,0,6603,0,0), (11,5,1,585,0,0), (11,5,2,2050,0,0), -(11,5,3,28880,0,0), +(11,5,3,59544,0,0), (11,5,10,159,128,0), (11,5,11,4540,128,0), (11,5,83,4540,128,0), @@ -9678,16 +9741,17 @@ INSERT INTO `playercreateinfo_action` VALUES (11,6,3,45462,0,0), (11,6,4,45902,0,0), (11,6,5,47541,0,0), +(11,6,6,59545,0,0), (11,7,0,6603,0,0), (11,7,1,403,0,0), (11,7,2,331,0,0), -(11,7,3,28880,0,0), +(11,7,3,59547,0,0), (11,7,10,159,128,0), (11,7,11,4540,128,0), (11,8,0,6603,0,0), (11,8,1,133,0,0), (11,8,2,168,0,0), -(11,8,3,28880,0,0), +(11,8,3,59548,0,0), (11,8,10,159,128,0), (11,8,11,4540,128,0), (11,8,83,4540,128,0); @@ -9726,7 +9790,6 @@ CREATE TABLE `playercreateinfo_spell` ( `class` tinyint(3) unsigned NOT NULL default '0', `Spell` mediumint(8) unsigned NOT NULL default '0', `Note` varchar(255) default NULL, - `Active` tinyint(3) unsigned NOT NULL default '1', PRIMARY KEY (`race`,`class`,`Spell`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; @@ -9737,2693 +9800,2798 @@ CREATE TABLE `playercreateinfo_spell` ( LOCK TABLES `playercreateinfo_spell` WRITE; /*!40000 ALTER TABLE `playercreateinfo_spell` DISABLE KEYS */; INSERT INTO `playercreateinfo_spell` VALUES -(1,1,78,'Heroic Strike',1), -(1,1,81,'Dodge',1), -(1,1,107,'Block',1), -(1,1,196,'One-Handed Axes',1), -(1,1,198,'One-Handed Maces',1), -(1,1,201,'One-Handed Swords',1), -(1,1,203,'Unarmed',1), -(1,1,204,'Defense',1), -(1,1,522,'SPELLDEFENSE(DND)',1), -(1,1,668,'Language Common',1), -(1,1,2382,'Generic',1), -(1,1,2457,'Battle Stance',1), -(1,1,2479,'Honorless Target',1), -(1,1,3050,'Detect',1), -(1,1,3365,'Opening',1), -(1,1,5301,'Defensive State(DND)',1), -(1,1,6233,'Closing',1), -(1,1,6246,'Closing',1), -(1,1,6247,'Opening',1), -(1,1,6477,'Opening',1), -(1,1,6478,'Opening',1), -(1,1,6603,'Attack',1), -(1,1,7266,'Duel',1), -(1,1,7267,'Grovel',1), -(1,1,7355,'Stuck',1), -(1,1,7376,'Defensive Stance Passive',0), -(1,1,7381,'Berserker Stance Passive',0), -(1,1,8386,'Attacking',1), -(1,1,8737,'Mail',1), -(1,1,9077,'Leather',1), -(1,1,9078,'Cloth',1), -(1,1,9116,'Shield',1), -(1,1,9125,'Generic',1), -(1,1,20597,'Sword Specialization',1), -(1,1,20598,'The Human Spirit',1), -(1,1,20599,'Diplomacy',1), -(1,1,20600,'Perception',1), -(1,1,20864,'Mace Specialization',1), -(1,1,21156,'Battle Stance Passive',0), -(1,1,21651,'Opening',1), -(1,1,21652,'Closing',1), -(1,1,22027,'Remove Insignia',1), -(1,1,22810,'Opening - No Text',1), -(1,1,32215,'Victorious State',1), -(1,2,81,'Dodge',1), -(1,2,107,'Block',1), -(1,2,198,'One-Handed Maces',1), -(1,2,199,'Two-Handed Maces',1), -(1,2,203,'Unarmed',1), -(1,2,204,'Defense',1), -(1,2,522,'SPELLDEFENSE(DND)',1), -(1,2,635,'Holy Light',1), -(1,2,668,'Language Common',1), -(1,2,2382,'Generic',1), -(1,2,2479,'Honorless Target',1), -(1,2,3050,'Detect',1), -(1,2,3365,'Opening',1), -(1,2,6233,'Closing',1), -(1,2,6246,'Closing',1), -(1,2,6247,'Opening',1), -(1,2,6477,'Opening',1), -(1,2,6478,'Opening',1), -(1,2,6603,'Attack',1), -(1,2,7266,'Duel',1), -(1,2,7267,'Grovel',1), -(1,2,7355,'Stuck',1), -(1,2,8386,'Attacking',1), -(1,2,8737,'Mail',1), -(1,2,9077,'Leather',1), -(1,2,9078,'Cloth',1), -(1,2,9116,'Shield',1), -(1,2,9125,'Generic',1), -(1,2,21084,'Seal of Righteousness',1), -(1,2,20597,'Sword Specialization',1), -(1,2,20598,'The Human Spirit',1), -(1,2,20599,'Diplomacy',1), -(1,2,20600,'Perception',1), -(1,2,20864,'Mace Specialization',1), -(1,2,21651,'Opening',1), -(1,2,21652,'Closing',1), -(1,2,22027,'Remove Insignia',1), -(1,2,22810,'Opening - No Text',1), -(1,2,27762,'Libram',1), -(1,4,81,'Dodge',1), -(1,4,203,'Unarmed',1), -(1,4,204,'Defense',1), -(1,4,522,'SPELLDEFENSE(DND)',1), -(1,4,668,'Language Common',1), -(1,4,1180,'Daggers',1), -(1,4,1752,'Sinister Strike',1), -(1,4,2098,'Eviscerate',1), -(1,4,2382,'Generic',1), -(1,4,2479,'Honorless Target',1), -(1,4,2567,'Thrown',1), -(1,4,2764,'Throw',1), -(1,4,3050,'Detect',1), -(1,4,3365,'Opening',1), -(1,4,6233,'Closing',1), -(1,4,6246,'Closing',1), -(1,4,6247,'Opening',1), -(1,4,6477,'Opening',1), -(1,4,6478,'Opening',1), -(1,4,6603,'Attack',1), -(1,4,7266,'Duel',1), -(1,4,7267,'Grovel',1), -(1,4,7355,'Stuck',1), -(1,4,8386,'Attacking',1), -(1,4,9077,'Leather',1), -(1,4,9078,'Cloth',1), -(1,4,9125,'Generic',1), -(1,4,16092,'Defensive State(DND)',1), -(1,4,20597,'Sword Specialization',1), -(1,4,20598,'The Human Spirit',1), -(1,4,20599,'Diplomacy',1), -(1,4,20600,'Perception',1), -(1,4,20864,'Mace Specialization',1), -(1,4,21184,'Rogue Passive(DND)',1), -(1,4,21651,'Opening',1), -(1,4,21652,'Closing',1), -(1,4,22027,'Remove Insignia',1), -(1,4,22810,'Opening - No Text',1), -(1,5,81,'Dodge',1), -(1,5,198,'One-Handed Maces',1), -(1,5,203,'Unarmed',1), -(1,5,204,'Defense',1), -(1,5,522,'SPELLDEFENSE(DND)',1), -(1,5,585,'Smite',1), -(1,5,668,'Language Common',1), -(1,5,2050,'Lesser Heal',1), -(1,5,2382,'Generic',1), -(1,5,2479,'Honorless Target',1), -(1,5,3050,'Detect',1), -(1,5,3365,'Opening',1), -(1,5,5009,'Wands',1), -(1,5,5019,'Shoot',1), -(1,5,6233,'Closing',1), -(1,5,6246,'Closing',1), -(1,5,6247,'Opening',1), -(1,5,6477,'Opening',1), -(1,5,6478,'Opening',1), -(1,5,6603,'Attack',1), -(1,5,7266,'Duel',1), -(1,5,7267,'Grovel',1), -(1,5,7355,'Stuck',1), -(1,5,8386,'Attacking',1), -(1,5,9078,'Cloth',1), -(1,5,9125,'Generic',1), -(1,5,20597,'Sword Specialization',1), -(1,5,20598,'The Human Spirit',1), -(1,5,20599,'Diplomacy',1), -(1,5,20600,'Perception',1), -(1,5,20864,'Mace Specialization',1), -(1,5,21651,'Opening',1), -(1,5,21652,'Closing',1), -(1,5,22027,'Remove Insignia',1), -(1,5,22810,'Opening - No Text',1), -(1,6,81,'Dodge',1), -(1,6,196,'One-Handed Axes',1), -(1,6,197,'Two-Handed Axes',1), -(1,6,200,'Polearms',1), -(1,6,201,'One-Handed Swords',1), -(1,6,202,'Two-Handed Swords',1), -(1,6,203,'Unarmed',1), -(1,6,204,'Defense',1), -(1,6,522,'SPELLDEFENSE (DND)',1), -(1,6,668,'Language Common',1), -(1,6,674,'Dual Wield',1), -(1,6,750,'Plate Mail',1), -(1,6,1843,'Disarm',1), -(1,6,2382,'Generic',1), -(1,6,2479,'Honorless Target',1), -(1,6,3050,'Detect',1), -(1,6,3127,'Parry',1), -(1,6,3275,'Linen Bandage',1), -(1,6,3276,'Heavy Linen Bandage',1), -(1,6,3277,'Wool Bandage',1), -(1,6,3278,'Heavy Wool Bandage',1), -(1,6,3365,'Opening',1), -(1,6,6233,'Closing',1), -(1,6,6246,'Closing',1), -(1,6,6247,'Opening',1), -(1,6,6477,'Opening',1), -(1,6,6478,'Opening',1), -(1,6,6603,'Attack',1), -(1,6,7266,'Duel',1), -(1,6,7267,'Grovel',1), -(1,6,7355,'Stuck',1), -(1,6,7928,'Silk Bandage',1), -(1,6,7929,'Heavy Silk Bandage',1), -(1,6,7934,'Anti-Venom',1), -(1,6,8386,'Attacking',1), -(1,6,8737,'Mail',1), -(1,6,9077,'Leather',1), -(1,6,9078,'Cloth',1), -(1,6,9125,'Generic',1), -(1,6,10840,'Mageweave Bandage',1), -(1,6,10841,'Heavy Mageweave Bandage',1), -(1,6,10846,'First Aid',1), -(1,6,18629,'Runecloth Bandage',1), -(1,6,18630,'Heavy Runecloth Bandage',1), -(1,6,20597,'Sword Specialization',1), -(1,6,20598,'The Human Spirit',1), -(1,6,20599,'Diplomacy',1), -(1,6,20864,'Mace Specialization',1), -(1,6,21651,'Opening',1), -(1,6,21652,'Closing',1), -(1,6,22027,'Remove Insignia',1), -(1,6,22810,'Opening - No Text',1), -(1,6,33391,'Journeyman Riding',1), -(1,6,45462,'Plague Strike',1), -(1,6,45477,'Icy Touch',1), -(1,6,45902,'Blood Strike',1), -(1,6,45903,'Offensive State (DND)',1), -(1,6,45927,'Summon Friend',1), -(1,6,47541,'Death Coil',1), -(1,6,48266,'Blood Presence',1), -(1,6,49410,'Forceful Deflection',1), -(1,6,49576,'Death Grip',1), -(1,6,52665,'Sigil',1), -(1,6,58985,'Perception',1), -(1,6,59752,'Every Man for Himself',1), -(1,6,59879,'Blood Plague',1), -(1,6,59921,'Frost Fever',1), -(1,6,61437,'Opening',1), -(1,6,61455,'Runic Focus',1), -(1,8,81,'Dodge',1), -(1,8,133,'Fireball',1), -(1,8,168,'Frost Armor',1), -(1,8,203,'Unarmed',1), -(1,8,204,'Defense',1), -(1,8,227,'Staves',1), -(1,8,522,'SPELLDEFENSE(DND)',1), -(1,8,668,'Language Common',1), -(1,8,2382,'Generic',1), -(1,8,2479,'Honorless Target',1), -(1,8,3050,'Detect',1), -(1,8,3365,'Opening',1), -(1,8,5009,'Wands',1), -(1,8,5019,'Shoot',1), -(1,8,6233,'Closing',1), -(1,8,6246,'Closing',1), -(1,8,6247,'Opening',1), -(1,8,6477,'Opening',1), -(1,8,6478,'Opening',1), -(1,8,6603,'Attack',1), -(1,8,7266,'Duel',1), -(1,8,7267,'Grovel',1), -(1,8,7355,'Stuck',1), -(1,8,8386,'Attacking',1), -(1,8,9078,'Cloth',1), -(1,8,9125,'Generic',1), -(1,8,20597,'Sword Specialization',1), -(1,8,20598,'The Human Spirit',1), -(1,8,20599,'Diplomacy',1), -(1,8,20600,'Perception',1), -(1,8,20864,'Mace Specialization',1), -(1,8,21651,'Opening',1), -(1,8,21652,'Closing',1), -(1,8,22027,'Remove Insignia',1), -(1,8,22810,'Opening - No Text',1), -(1,9,81,'Dodge',1), -(1,9,203,'Unarmed',1), -(1,9,204,'Defense',1), -(1,9,522,'SPELLDEFENSE(DND)',1), -(1,9,668,'Language Common',1), -(1,9,686,'Shadow Bolt',1), -(1,9,687,'Demon Skin',1), -(1,9,1180,'Daggers',1), -(1,9,2382,'Generic',1), -(1,9,2479,'Honorless Target',1), -(1,9,3050,'Detect',1), -(1,9,3365,'Opening',1), -(1,9,5009,'Wands',1), -(1,9,5019,'Shoot',1), -(1,9,6233,'Closing',1), -(1,9,6246,'Closing',1), -(1,9,6247,'Opening',1), -(1,9,6477,'Opening',1), -(1,9,6478,'Opening',1), -(1,9,6603,'Attack',1), -(1,9,7266,'Duel',1), -(1,9,7267,'Grovel',1), -(1,9,7355,'Stuck',1), -(1,9,8386,'Attacking',1), -(1,9,9078,'Cloth',1), -(1,9,9125,'Generic',1), -(1,9,20597,'Sword Specialization',1), -(1,9,20598,'The Human Spirit',1), -(1,9,20599,'Diplomacy',1), -(1,9,20600,'Perception',1), -(1,9,20864,'Mace Specialization',1), -(1,9,21651,'Opening',1), -(1,9,21652,'Closing',1), -(1,9,22027,'Remove Insignia',1), -(1,9,22810,'Opening - No Text',1), -(2,1,78,'Heroic Strike',1), -(2,1,81,'Dodge',1), -(2,1,107,'Block',1), -(2,1,196,'One-Handed Axes',1), -(2,1,197,'Two-Handed Axes',1), -(2,1,201,'One-Handed Swords',1), -(2,1,203,'Unarmed',1), -(2,1,204,'Defense',1), -(2,1,522,'SPELLDEFENSE(DND)',1), -(2,1,669,'Language Orcish',1), -(2,1,2382,'Generic',1), -(2,1,2457,'Battle Stance',1), -(2,1,2479,'Honorless Target',1), -(2,1,3050,'Detect',1), -(2,1,3365,'Opening',1), -(2,1,5301,'Defensive State(DND)',1), -(2,1,6233,'Closing',1), -(2,1,6246,'Closing',1), -(2,1,6247,'Opening',1), -(2,1,6477,'Opening',1), -(2,1,6478,'Opening',1), -(2,1,6603,'Attack',1), -(2,1,7266,'Duel',1), -(2,1,7267,'Grovel',1), -(2,1,7355,'Stuck',1), -(2,1,7376,'Defensive Stance Passive',0), -(2,1,7381,'Berserker Stance Passive',0), -(2,1,8386,'Attacking',1), -(2,1,8737,'Mail',1), -(2,1,9077,'Leather',1), -(2,1,9078,'Cloth',1), -(2,1,9116,'Shield',1), -(2,1,9125,'Generic',1), -(2,1,20572,'Blood Fury',1), -(2,1,20573,'Hardiness',1), -(2,1,20574,'Axe Specialization',1), -(2,1,21156,'Battle Stance Passive',0), -(2,1,21563,'Command',1), -(2,1,21651,'Opening',1), -(2,1,21652,'Closing',1), -(2,1,22027,'Remove Insignia',1), -(2,1,22810,'Opening - No Text',1), -(2,1,32215,'Victorious State',1), -(2,3,75,'Auto Shot',1), -(2,3,81,'Dodge',1), -(2,3,196,'One-Handed Axes',1), -(2,3,203,'Unarmed',1), -(2,3,204,'Defense',1), -(2,3,264,'Bows',1), -(2,3,522,'SPELLDEFENSE(DND)',1), -(2,3,669,'Language Orcish',1), -(2,3,2382,'Generic',1), -(2,3,2479,'Honorless Target',1), -(2,3,2973,'Raptor Strike',1), -(2,3,3050,'Detect',1), -(2,3,3365,'Opening',1), -(2,3,6233,'Closing',1), -(2,3,6246,'Closing',1), -(2,3,6247,'Opening',1), -(2,3,6477,'Opening',1), -(2,3,6478,'Opening',1), -(2,3,6603,'Attack',1), -(2,3,7266,'Duel',1), -(2,3,7267,'Grovel',1), -(2,3,7355,'Stuck',1), -(2,3,8386,'Attacking',1), -(2,3,9077,'Leather',1), -(2,3,9078,'Cloth',1), -(2,3,9125,'Generic',1), -(2,3,13358,'Defensive State(DND)',1), -(2,3,20572,'Blood Fury',1), -(2,3,20573,'Hardiness',1), -(2,3,20574,'Axe Specialization',1), -(2,3,20576,'Command',1), -(2,3,21651,'Opening',1), -(2,3,21652,'Closing',1), -(2,3,22027,'Remove Insignia',1), -(2,3,22810,'Opening - No Text',1), -(2,3,24949,'Defensive State 2(DND)',1), -(2,3,34082,'Advantaged State(DND)',1), -(2,4,81,'Dodge',1), -(2,4,203,'Unarmed',1), -(2,4,204,'Defense',1), -(2,4,522,'SPELLDEFENSE(DND)',1), -(2,4,669,'Language Orcish',1), -(2,4,1180,'Daggers',1), -(2,4,1752,'Sinister Strike',1), -(2,4,2098,'Eviscerate',1), -(2,4,2382,'Generic',1), -(2,4,2479,'Honorless Target',1), -(2,4,2567,'Thrown',1), -(2,4,2764,'Throw',1), -(2,4,3050,'Detect',1), -(2,4,3365,'Opening',1), -(2,4,6233,'Closing',1), -(2,4,6246,'Closing',1), -(2,4,6247,'Opening',1), -(2,4,6477,'Opening',1), -(2,4,6478,'Opening',1), -(2,4,6603,'Attack',1), -(2,4,7266,'Duel',1), -(2,4,7267,'Grovel',1), -(2,4,7355,'Stuck',1), -(2,4,8386,'Attacking',1), -(2,4,9077,'Leather',1), -(2,4,9078,'Cloth',1), -(2,4,9125,'Generic',1), -(2,4,16092,'Defensive State(DND)',1), -(2,4,20572,'Blood Fury',1), -(2,4,20573,'Hardiness',1), -(2,4,20574,'Axe Specialization',1), -(2,4,21184,'Rogue Passive(DND)',1), -(2,4,21563,'Command',1), -(2,4,21651,'Opening',1), -(2,4,21652,'Closing',1), -(2,4,22027,'Remove Insignia',1), -(2,4,22810,'Opening - No Text',1), -(2,6,81,'Dodge',1), -(2,6,196,'One-Handed Axes',1), -(2,6,197,'Two-Handed Axes',1), -(2,6,200,'Polearms',1), -(2,6,201,'One-Handed Swords',1), -(2,6,202,'Two-Handed Swords',1), -(2,6,203,'Unarmed',1), -(2,6,204,'Defense',1), -(2,6,522,'SPELLDEFENSE (DND)',1), -(2,6,669,'Language Orcish',1), -(2,6,674,'Dual Wield',1), -(2,6,750,'Plate Mail',1), -(2,6,1843,'Disarm',1), -(2,6,2382,'Generic',1), -(2,6,2479,'Honorless Target',1), -(2,6,3050,'Detect',1), -(2,6,3127,'Parry',1), -(2,6,3275,'Linen Bandage',1), -(2,6,3276,'Heavy Linen Bandage',1), -(2,6,3277,'Wool Bandage',1), -(2,6,3278,'Heavy Wool Bandage',1), -(2,6,3365,'Opening',1), -(2,6,6233,'Closing',1), -(2,6,6246,'Closing',1), -(2,6,6247,'Opening',1), -(2,6,6477,'Opening',1), -(2,6,6478,'Opening',1), -(2,6,6603,'Attack',1), -(2,6,7266,'Duel',1), -(2,6,7267,'Grovel',1), -(2,6,7355,'Stuck',1), -(2,6,7928,'Silk Bandage',1), -(2,6,7929,'Heavy Silk Bandage',1), -(2,6,7934,'Anti-Venom',1), -(2,6,8386,'Attacking',1), -(2,6,8737,'Mail',1), -(2,6,9077,'Leather',1), -(2,6,9078,'Cloth',1), -(2,6,9125,'Generic',1), -(2,6,10840,'Mageweave Bandage',1), -(2,6,10841,'Heavy Mageweave Bandage',1), -(2,6,10846,'First Aid',1), -(2,6,18629,'Runecloth Bandage',1), -(2,6,18630,'Heavy Runecloth Bandage',1), -(2,6,20572,'Blood Fury',1), -(2,6,20573,'Hardiness',1), -(2,6,20574,'Axe Specialization',1), -(2,6,21651,'Opening',1), -(2,6,21652,'Closing',1), -(2,6,22027,'Remove Insignia',1), -(2,6,22810,'Opening - No Text',1), -(2,6,33391,'Journeyman Riding',1), -(2,6,45462,'Plague Strike',1), -(2,6,45477,'Icy Touch',1), -(2,6,45902,'Blood Strike',1), -(2,6,45903,'Offensive State (DND)',1), -(2,6,45927,'Summon Friend',1), -(2,6,47541,'Death Coil',1), -(2,6,48266,'Blood Presence',1), -(2,6,49410,'Forceful Deflection',1), -(2,6,49576,'Death Grip',1), -(2,6,52665,'Sigil',1), -(2,6,54562,'Command',1), -(2,6,59879,'Blood Plague',1), -(2,6,59921,'Frost Fever',1), -(2,6,61437,'Opening',1), -(2,6,61455,'Runic Focus',1), -(2,7,81,'Dodge',1), -(2,7,107,'Block',1), -(2,7,198,'One-Handed Maces',1), -(2,7,203,'Unarmed',1), -(2,7,204,'Defense',1), -(2,7,227,'Staves',1), -(2,7,331,'Healing Wave',1), -(2,7,403,'Lightning Bolt',1), -(2,7,522,'SPELLDEFENSE(DND)',1), -(2,7,669,'Language Orcish',1), -(2,7,2382,'Generic',1), -(2,7,2479,'Honorless Target',1), -(2,7,3050,'Detect',1), -(2,7,3365,'Opening',1), -(2,7,6233,'Closing',1), -(2,7,6246,'Closing',1), -(2,7,6247,'Opening',1), -(2,7,6477,'Opening',1), -(2,7,6478,'Opening',1), -(2,7,6603,'Attack',1), -(2,7,7266,'Duel',1), -(2,7,7267,'Grovel',1), -(2,7,7355,'Stuck',1), -(2,7,8386,'Attacking',1), -(2,7,9077,'Leather',1), -(2,7,9078,'Cloth',1), -(2,7,9116,'Shield',1), -(2,7,9125,'Generic',1), -(2,7,20573,'Hardiness',1), -(2,7,20574,'Axe Specialization',1), -(2,7,21563,'Command',1), -(2,7,21651,'Opening',1), -(2,7,21652,'Closing',1), -(2,7,22027,'Remove Insignia',1), -(2,7,22810,'Opening - No Text',1), -(2,7,27763,'Totem',1), -(2,7,33697,'Blood Fury',1), -(2,9,81,'Dodge',1), -(2,9,203,'Unarmed',1), -(2,9,204,'Defense',1), -(2,9,522,'SPELLDEFENSE(DND)',1), -(2,9,669,'Language Orcish',1), -(2,9,686,'Shadow Bolt',1), -(2,9,687,'Demon Skin',1), -(2,9,1180,'Daggers',1), -(2,9,2382,'Generic',1), -(2,9,2479,'Honorless Target',1), -(2,9,3050,'Detect',1), -(2,9,3365,'Opening',1), -(2,9,5009,'Wands',1), -(2,9,5019,'Shoot',1), -(2,9,6233,'Closing',1), -(2,9,6246,'Closing',1), -(2,9,6247,'Opening',1), -(2,9,6477,'Opening',1), -(2,9,6478,'Opening',1), -(2,9,6603,'Attack',1), -(2,9,7266,'Duel',1), -(2,9,7267,'Grovel',1), -(2,9,7355,'Stuck',1), -(2,9,8386,'Attacking',1), -(2,9,9078,'Cloth',1), -(2,9,9125,'Generic',1), -(2,9,20573,'Hardiness',1), -(2,9,20574,'Axe Specialization',1), -(2,9,20575,'Command',1), -(2,9,21651,'Opening',1), -(2,9,21652,'Closing',1), -(2,9,22027,'Remove Insignia',1), -(2,9,22810,'Opening - No Text',1), -(2,9,33702,'Blood Fury',1), -(3,1,78,'Heroic Strike',1), -(3,1,81,'Dodge',1), -(3,1,107,'Block',1), -(3,1,196,'One-Handed Axes',1), -(3,1,197,'Two-Handed Axes',1), -(3,1,198,'One-Handed Maces',1), -(3,1,203,'Unarmed',1), -(3,1,204,'Defense',1), -(3,1,522,'SPELLDEFENSE(DND)',1), -(3,1,668,'Language Common',1), -(3,1,672,'Language Dwarven',1), -(3,1,2382,'Generic',1), -(3,1,2457,'Battle Stance',1), -(3,1,2479,'Honorless Target',1), -(3,1,2481,'Find Treasure',1), -(3,1,3050,'Detect',1), -(3,1,3365,'Opening',1), -(3,1,5301,'Defensive State(DND)',1), -(3,1,6233,'Closing',1), -(3,1,6246,'Closing',1), -(3,1,6247,'Opening',1), -(3,1,6477,'Opening',1), -(3,1,6478,'Opening',1), -(3,1,6603,'Attack',1), -(3,1,7266,'Duel',1), -(3,1,7267,'Grovel',1), -(3,1,7355,'Stuck',1), -(3,1,7376,'Defensive Stance Passive',0), -(3,1,7381,'Berserker Stance Passive',0), -(3,1,8386,'Attacking',1), -(3,1,8737,'Mail',1), -(3,1,9077,'Leather',1), -(3,1,9078,'Cloth',1), -(3,1,9116,'Shield',1), -(3,1,9125,'Generic',1), -(3,1,20594,'Stoneform',1), -(3,1,20595,'Gun Specialization',1), -(3,1,20596,'Frost Resistance',1), -(3,1,21156,'Battle Stance Passive',0), -(3,1,21651,'Opening',1), -(3,1,21652,'Closing',1), -(3,1,22027,'Remove Insignia',1), -(3,1,22810,'Opening - No Text',1), -(3,1,32215,'Victorious State',1), -(3,2,81,'Dodge',1), -(3,2,107,'Block',1), -(3,2,198,'One-Handed Maces',1), -(3,2,199,'Two-Handed Maces',1), -(3,2,203,'Unarmed',1), -(3,2,204,'Defense',1), -(3,2,522,'SPELLDEFENSE(DND)',1), -(3,2,635,'Holy Light',1), -(3,2,668,'Language Common',1), -(3,2,672,'Language Dwarven',1), -(3,2,2382,'Generic',1), -(3,2,2479,'Honorless Target',1), -(3,2,2481,'Find Treasure',1), -(3,2,3050,'Detect',1), -(3,2,3365,'Opening',1), -(3,2,6233,'Closing',1), -(3,2,6246,'Closing',1), -(3,2,6247,'Opening',1), -(3,2,6477,'Opening',1), -(3,2,6478,'Opening',1), -(3,2,6603,'Attack',1), -(3,2,7266,'Duel',1), -(3,2,7267,'Grovel',1), -(3,2,7355,'Stuck',1), -(3,2,8386,'Attacking',1), -(3,2,8737,'Mail',1), -(3,2,9077,'Leather',1), -(3,2,9078,'Cloth',1), -(3,2,9116,'Shield',1), -(3,2,9125,'Generic',1), -(3,2,21084,'Seal of Righteousness',1), -(3,2,20594,'Stoneform',1), -(3,2,20595,'Gun Specialization',1), -(3,2,20596,'Frost Resistance',1), -(3,2,21651,'Opening',1), -(3,2,21652,'Closing',1), -(3,2,22027,'Remove Insignia',1), -(3,2,22810,'Opening - No Text',1), -(3,2,27762,'Libram',1), -(3,3,75,'Auto Shot',1), -(3,3,81,'Dodge',1), -(3,3,196,'One-Handed Axes',1), -(3,3,203,'Unarmed',1), -(3,3,204,'Defense',1), -(3,3,266,'Guns',1), -(3,3,522,'SPELLDEFENSE(DND)',1), -(3,3,668,'Language Common',1), -(3,3,672,'Language Dwarven',1), -(3,3,2382,'Generic',1), -(3,3,2479,'Honorless Target',1), -(3,3,2481,'Find Treasure',1), -(3,3,2973,'Raptor Strike',1), -(3,3,3050,'Detect',1), -(3,3,3365,'Opening',1), -(3,3,6233,'Closing',1), -(3,3,6246,'Closing',1), -(3,3,6247,'Opening',1), -(3,3,6477,'Opening',1), -(3,3,6478,'Opening',1), -(3,3,6603,'Attack',1), -(3,3,7266,'Duel',1), -(3,3,7267,'Grovel',1), -(3,3,7355,'Stuck',1), -(3,3,8386,'Attacking',1), -(3,3,9077,'Leather',1), -(3,3,9078,'Cloth',1), -(3,3,9125,'Generic',1), -(3,3,13358,'Defensive State(DND)',1), -(3,3,20594,'Stoneform',1), -(3,3,20595,'Gun Specialization',1), -(3,3,20596,'Frost Resistance',1), -(3,3,21651,'Opening',1), -(3,3,21652,'Closing',1), -(3,3,22027,'Remove Insignia',1), -(3,3,22810,'Opening - No Text',1), -(3,3,24949,'Defensive State 2(DND)',1), -(3,3,34082,'Advantaged State(DND)',1), -(3,4,81,'Dodge',1), -(3,4,203,'Unarmed',1), -(3,4,204,'Defense',1), -(3,4,522,'SPELLDEFENSE(DND)',1), -(3,4,668,'Language Common',1), -(3,4,672,'Language Dwarven',1), -(3,4,1180,'Daggers',1), -(3,4,1752,'Sinister Strike',1), -(3,4,2098,'Eviscerate',1), -(3,4,2382,'Generic',1), -(3,4,2479,'Honorless Target',1), -(3,4,2481,'Find Treasure',1), -(3,4,2567,'Thrown',1), -(3,4,2764,'Throw',1), -(3,4,3050,'Detect',1), -(3,4,3365,'Opening',1), -(3,4,6233,'Closing',1), -(3,4,6246,'Closing',1), -(3,4,6247,'Opening',1), -(3,4,6477,'Opening',1), -(3,4,6478,'Opening',1), -(3,4,6603,'Attack',1), -(3,4,7266,'Duel',1), -(3,4,7267,'Grovel',1), -(3,4,7355,'Stuck',1), -(3,4,8386,'Attacking',1), -(3,4,9077,'Leather',1), -(3,4,9078,'Cloth',1), -(3,4,9125,'Generic',1), -(3,4,16092,'Defensive State(DND)',1), -(3,4,20594,'Stoneform',1), -(3,4,20595,'Gun Specialization',1), -(3,4,20596,'Frost Resistance',1), -(3,4,21184,'Rogue Passive(DND)',1), -(3,4,21651,'Opening',1), -(3,4,21652,'Closing',1), -(3,4,22027,'Remove Insignia',1), -(3,4,22810,'Opening - No Text',1), -(3,5,81,'Dodge',1), -(3,5,198,'One-Handed Maces',1), -(3,5,203,'Unarmed',1), -(3,5,204,'Defense',1), -(3,5,522,'SPELLDEFENSE(DND)',1), -(3,5,585,'Smite',1), -(3,5,668,'Language Common',1), -(3,5,672,'Language Dwarven',1), -(3,5,2050,'Lesser Heal',1), -(3,5,2382,'Generic',1), -(3,5,2479,'Honorless Target',1), -(3,5,2481,'Find Treasure',1), -(3,5,3050,'Detect',1), -(3,5,3365,'Opening',1), -(3,5,5009,'Wands',1), -(3,5,5019,'Shoot',1), -(3,5,6233,'Closing',1), -(3,5,6246,'Closing',1), -(3,5,6247,'Opening',1), -(3,5,6477,'Opening',1), -(3,5,6478,'Opening',1), -(3,5,6603,'Attack',1), -(3,5,7266,'Duel',1), -(3,5,7267,'Grovel',1), -(3,5,7355,'Stuck',1), -(3,5,8386,'Attacking',1), -(3,5,9078,'Cloth',1), -(3,5,9125,'Generic',1), -(3,5,20594,'Stoneform',1), -(3,5,20595,'Gun Specialization',1), -(3,5,20596,'Frost Resistance',1), -(3,5,21651,'Opening',1), -(3,5,21652,'Closing',1), -(3,5,22027,'Remove Insignia',1), -(3,5,22810,'Opening - No Text',1), -(3,6,81,'Dodge',1), -(3,6,196,'One-Handed Axes',1), -(3,6,197,'Two-Handed Axes',1), -(3,6,200,'Polearms',1), -(3,6,201,'One-Handed Swords',1), -(3,6,202,'Two-Handed Swords',1), -(3,6,203,'Unarmed',1), -(3,6,204,'Defense',1), -(3,6,522,'SPELLDEFENSE (DND)',1), -(3,6,668,'Language Common',1), -(3,6,672,'Language Dwarven',1), -(3,6,674,'Dual Wield',1), -(3,6,750,'Plate Mail',1), -(3,6,1843,'Disarm',1), -(3,6,2382,'Generic',1), -(3,6,2479,'Honorless Target',1), -(3,6,2481,'Find Treasure',1), -(3,6,3050,'Detect',1), -(3,6,3127,'Parry',1), -(3,6,3275,'Linen Bandage',1), -(3,6,3276,'Heavy Linen Bandage',1), -(3,6,3277,'Wool Bandage',1), -(3,6,3278,'Heavy Wool Bandage',1), -(3,6,3365,'Opening',1), -(3,6,6233,'Closing',1), -(3,6,6246,'Closing',1), -(3,6,6247,'Opening',1), -(3,6,6477,'Opening',1), -(3,6,6478,'Opening',1), -(3,6,6603,'Attack',1), -(3,6,7266,'Duel',1), -(3,6,7267,'Grovel',1), -(3,6,7355,'Stuck',1), -(3,6,7928,'Silk Bandage',1), -(3,6,7929,'Heavy Silk Bandage',1), -(3,6,7934,'Anti-Venom',1), -(3,6,8386,'Attacking',1), -(3,6,8737,'Mail',1), -(3,6,9077,'Leather',1), -(3,6,9078,'Cloth',1), -(3,6,9125,'Generic',1), -(3,6,10840,'Mageweave Bandage',1), -(3,6,10841,'Heavy Mageweave Bandage',1), -(3,6,10846,'First Aid',1), -(3,6,18629,'Runecloth Bandage',1), -(3,6,18630,'Heavy Runecloth Bandage',1), -(3,6,20594,'Stoneform',1), -(3,6,20595,'Gun Specialization',1), -(3,6,20596,'Frost Resistance',1), -(3,6,21651,'Opening',1), -(3,6,21652,'Closing',1), -(3,6,22027,'Remove Insignia',1), -(3,6,22810,'Opening - No Text',1), -(3,6,33391,'Journeyman Riding',1), -(3,6,45462,'Plague Strike',1), -(3,6,45477,'Icy Touch',1), -(3,6,45902,'Blood Strike',1), -(3,6,45903,'Offensive State (DND)',1), -(3,6,45927,'Summon Friend',1), -(3,6,47541,'Death Coil',1), -(3,6,48266,'Blood Presence',1), -(3,6,49410,'Forceful Deflection',1), -(3,6,49576,'Death Grip',1), -(3,6,52665,'Sigil',1), -(3,6,59224,'Mace Specialization',1), -(3,6,59879,'Blood Plague',1), -(3,6,59921,'Frost Fever',1), -(3,6,61437,'Opening',1), -(3,6,61455,'Runic Focus',1), -(4,1,78,'Heroic Strike',1), -(4,1,81,'Dodge',1), -(4,1,107,'Block',1), -(4,1,198,'One-Handed Maces',1), -(4,1,201,'One-Handed Swords',1), -(4,1,203,'Unarmed',1), -(4,1,204,'Defense',1), -(4,1,522,'SPELLDEFENSE(DND)',1), -(4,1,668,'Language Common',1), -(4,1,671,'Language Darnassian',1), -(4,1,1180,'Daggers',1), -(4,1,2382,'Generic',1), -(4,1,2457,'Battle Stance',1), -(4,1,2479,'Honorless Target',1), -(4,1,3050,'Detect',1), -(4,1,3365,'Opening',1), -(4,1,5301,'Defensive State(DND)',1), -(4,1,6233,'Closing',1), -(4,1,6246,'Closing',1), -(4,1,6247,'Opening',1), -(4,1,6477,'Opening',1), -(4,1,6478,'Opening',1), -(4,1,6603,'Attack',1), -(4,1,7266,'Duel',1), -(4,1,7267,'Grovel',1), -(4,1,7355,'Stuck',1), -(4,1,7376,'Defensive Stance Passive',0), -(4,1,7381,'Berserker Stance Passive',0), -(4,1,8386,'Attacking',1), -(4,1,8737,'Mail',1), -(4,1,9077,'Leather',1), -(4,1,9078,'Cloth',1), -(4,1,9116,'Shield',1), -(4,1,9125,'Generic',1), -(4,1,20580,'Shadowmeld',1), -(4,1,20582,'Quickness',1), -(4,1,20583,'Nature Resistance',1), -(4,1,20585,'Wisp Spirit',1), -(4,1,21009,'Shadowmeld Passive',1), -(4,1,21156,'Battle Stance Passive',0), -(4,1,21651,'Opening',1), -(4,1,21652,'Closing',1), -(4,1,22027,'Remove Insignia',1), -(4,1,22810,'Opening - No Text',1), -(4,1,32215,'Victorious State',1), -(4,3,75,'Auto Shot',1), -(4,3,81,'Dodge',1), -(4,3,203,'Unarmed',1), -(4,3,204,'Defense',1), -(4,3,264,'Bows',1), -(4,3,522,'SPELLDEFENSE(DND)',1), -(4,3,668,'Language Common',1), -(4,3,671,'Language Darnassian',1), -(4,3,1180,'Daggers',1), -(4,3,2382,'Generic',1), -(4,3,2479,'Honorless Target',1), -(4,3,2973,'Raptor Strike',1), -(4,3,3050,'Detect',1), -(4,3,3365,'Opening',1), -(4,3,6233,'Closing',1), -(4,3,6246,'Closing',1), -(4,3,6247,'Opening',1), -(4,3,6477,'Opening',1), -(4,3,6478,'Opening',1), -(4,3,6603,'Attack',1), -(4,3,7266,'Duel',1), -(4,3,7267,'Grovel',1), -(4,3,7355,'Stuck',1), -(4,3,8386,'Attacking',1), -(4,3,9077,'Leather',1), -(4,3,9078,'Cloth',1), -(4,3,9125,'Generic',1), -(4,3,13358,'Defensive State(DND)',1), -(4,3,20580,'Shadowmeld',1), -(4,3,20582,'Quickness',1), -(4,3,20583,'Nature Resistance',1), -(4,3,20585,'Wisp Spirit',1), -(4,3,21009,'Shadowmeld Passive',1), -(4,3,21651,'Opening',1), -(4,3,21652,'Closing',1), -(4,3,22027,'Remove Insignia',1), -(4,3,22810,'Opening - No Text',1), -(4,3,24949,'Defensive State 2(DND)',1), -(4,3,34082,'Advantaged State(DND)',1), -(4,4,81,'Dodge',1), -(4,4,203,'Unarmed',1), -(4,4,204,'Defense',1), -(4,4,522,'SPELLDEFENSE(DND)',1), -(4,4,668,'Language Common',1), -(4,4,671,'Language Darnassian',1), -(4,4,1180,'Daggers',1), -(4,4,1752,'Sinister Strike',1), -(4,4,2098,'Eviscerate',1), -(4,4,2382,'Generic',1), -(4,4,2479,'Honorless Target',1), -(4,4,2567,'Thrown',1), -(4,4,2764,'Throw',1), -(4,4,3050,'Detect',1), -(4,4,3365,'Opening',1), -(4,4,6233,'Closing',1), -(4,4,6246,'Closing',1), -(4,4,6247,'Opening',1), -(4,4,6477,'Opening',1), -(4,4,6478,'Opening',1), -(4,4,6603,'Attack',1), -(4,4,7266,'Duel',1), -(4,4,7267,'Grovel',1), -(4,4,7355,'Stuck',1), -(4,4,8386,'Attacking',1), -(4,4,9077,'Leather',1), -(4,4,9078,'Cloth',1), -(4,4,9125,'Generic',1), -(4,4,16092,'Defensive State(DND)',1), -(4,4,20580,'Shadowmeld',1), -(4,4,20582,'Quickness',1), -(4,4,20583,'Nature Resistance',1), -(4,4,20585,'Wisp Spirit',1), -(4,4,21009,'Shadowmeld Passive',1), -(4,4,21184,'Rogue Passive(DND)',1), -(4,4,21651,'Opening',1), -(4,4,21652,'Closing',1), -(4,4,22027,'Remove Insignia',1), -(4,4,22810,'Opening - No Text',1), -(4,5,81,'Dodge',1), -(4,5,198,'One-Handed Maces',1), -(4,5,203,'Unarmed',1), -(4,5,204,'Defense',1), -(4,5,522,'SPELLDEFENSE(DND)',1), -(4,5,585,'Smite',1), -(4,5,668,'Language Common',1), -(4,5,671,'Language Darnassian',1), -(4,5,2050,'Lesser Heal',1), -(4,5,2382,'Generic',1), -(4,5,2479,'Honorless Target',1), -(4,5,3050,'Detect',1), -(4,5,3365,'Opening',1), -(4,5,5009,'Wands',1), -(4,5,5019,'Shoot',1), -(4,5,6233,'Closing',1), -(4,5,6246,'Closing',1), -(4,5,6247,'Opening',1), -(4,5,6477,'Opening',1), -(4,5,6478,'Opening',1), -(4,5,6603,'Attack',1), -(4,5,7266,'Duel',1), -(4,5,7267,'Grovel',1), -(4,5,7355,'Stuck',1), -(4,5,8386,'Attacking',1), -(4,5,9078,'Cloth',1), -(4,5,9125,'Generic',1), -(4,5,20580,'Shadowmeld',1), -(4,5,20582,'Quickness',1), -(4,5,20583,'Nature Resistance',1), -(4,5,20585,'Wisp Spirit',1), -(4,5,21009,'Shadowmeld Passive',1), -(4,5,21651,'Opening',1), -(4,5,21652,'Closing',1), -(4,5,22027,'Remove Insignia',1), -(4,5,22810,'Opening - No Text',1), -(4,6,81,'Dodge',1), -(4,6,196,'One-Handed Axes',1), -(4,6,197,'Two-Handed Axes',1), -(4,6,200,'Polearms',1), -(4,6,201,'One-Handed Swords',1), -(4,6,202,'Two-Handed Swords',1), -(4,6,203,'Unarmed',1), -(4,6,204,'Defense',1), -(4,6,522,'SPELLDEFENSE (DND)',1), -(4,6,668,'Language Common',1), -(4,6,671,'Language Darnassian',1), -(4,6,674,'Dual Wield',1), -(4,6,750,'Plate Mail',1), -(4,6,1843,'Disarm',1), -(4,6,2382,'Generic',1), -(4,6,2479,'Honorless Target',1), -(4,6,3050,'Detect',1), -(4,6,3127,'Parry',1), -(4,6,3275,'Linen Bandage',1), -(4,6,3276,'Heavy Linen Bandage',1), -(4,6,3277,'Wool Bandage',1), -(4,6,3278,'Heavy Wool Bandage',1), -(4,6,3365,'Opening',1), -(4,6,6233,'Closing',1), -(4,6,6246,'Closing',1), -(4,6,6247,'Opening',1), -(4,6,6477,'Opening',1), -(4,6,6478,'Opening',1), -(4,6,6603,'Attack',1), -(4,6,7266,'Duel',1), -(4,6,7267,'Grovel',1), -(4,6,7355,'Stuck',1), -(4,6,7928,'Silk Bandage',1), -(4,6,7929,'Heavy Silk Bandage',1), -(4,6,7934,'Anti-Venom',1), -(4,6,8386,'Attacking',1), -(4,6,8737,'Mail',1), -(4,6,9077,'Leather',1), -(4,6,9078,'Cloth',1), -(4,6,9125,'Generic',1), -(4,6,10840,'Mageweave Bandage',1), -(4,6,10841,'Heavy Mageweave Bandage',1), -(4,6,10846,'First Aid',1), -(4,6,18629,'Runecloth Bandage',1), -(4,6,18630,'Heavy Runecloth Bandage',1), -(4,6,20582,'Quickness',1), -(4,6,20583,'Nature Resistance',1), -(4,6,20585,'Wisp Spirit',1), -(4,6,21651,'Opening',1), -(4,6,21652,'Closing',1), -(4,6,22027,'Remove Insignia',1), -(4,6,22810,'Opening - No Text',1), -(4,6,33391,'Journeyman Riding',1), -(4,6,45462,'Plague Strike',1), -(4,6,45477,'Icy Touch',1), -(4,6,45902,'Blood Strike',1), -(4,6,45903,'Offensive State (DND)',1), -(4,6,45927,'Summon Friend',1), -(4,6,47541,'Death Coil',1), -(4,6,48266,'Blood Presence',1), -(4,6,49410,'Forceful Deflection',1), -(4,6,49576,'Death Grip',1), -(4,6,52665,'Sigil',1), -(4,6,58984,'Shadowmeld',1), -(4,6,59879,'Blood Plague',1), -(4,6,59921,'Frost Fever',1), -(4,6,61437,'Opening',1), -(4,6,61455,'Runic Focus',1), -(4,11,81,'Dodge',1), -(4,11,203,'Unarmed',1), -(4,11,204,'Defense',1), -(4,11,227,'Staves',1), -(4,11,522,'SPELLDEFENSE(DND)',1), -(4,11,668,'Language Common',1), -(4,11,671,'Language Darnassian',1), -(4,11,1178,'Bear Form(Passive)',0), -(4,11,1180,'Daggers',1), -(4,11,2382,'Generic',1), -(4,11,2479,'Honorless Target',1), -(4,11,3025,'Cat Form(Passive)',0), -(4,11,3050,'Detect',1), -(4,11,3365,'Opening',1), -(4,11,5176,'Wrath',1), -(4,11,5185,'Healing Touch',1), -(4,11,5419,'Travel Form(Passive)',0), -(4,11,5420,'Tree of Life',0), -(4,11,5421,'Aquatic Form(Passive)',0), -(4,11,6233,'Closing',1), -(4,11,6246,'Closing',1), -(4,11,6247,'Opening',1), -(4,11,6477,'Opening',1), -(4,11,6478,'Opening',1), -(4,11,6603,'Attack',1), -(4,11,7266,'Duel',1), -(4,11,7267,'Grovel',1), -(4,11,7355,'Stuck',1), -(4,11,8386,'Attacking',1), -(4,11,9077,'Leather',1), -(4,11,9078,'Cloth',1), -(4,11,9125,'Generic',1), -(4,11,9635,'Dire Bear Form(Passive)',0), -(4,11,20580,'Shadowmeld',1), -(4,11,20582,'Quickness',1), -(4,11,20583,'Nature Resistance',1), -(4,11,20585,'Wisp Spirit',1), -(4,11,21009,'Shadowmeld Passive',1), -(4,11,21178,'Bear Form(Passive2)',0), -(4,11,21651,'Opening',1), -(4,11,21652,'Closing',1), -(4,11,22027,'Remove Insignia',1), -(4,11,22810,'Opening - No Text',1), -(4,11,24905,'Moonkin Form(Passive)',0), -(4,11,27764,'Fetish',1), -(4,11,33948,'Flight Form(Passive)',0), -(4,11,34123,'Tree of Life(Passive)',0), -(4,11,40121,'Swift Flight Form(Passive)',0), -(5,1,78,'Heroic Strike',1), -(5,1,81,'Dodge',1), -(5,1,107,'Block',1), -(5,1,201,'One-Handed Swords',1), -(5,1,202,'Two-Handed Swords',1), -(5,1,203,'Unarmed',1), -(5,1,204,'Defense',1), -(5,1,522,'SPELLDEFENSE(DND)',1), -(5,1,669,'Language Orcish',1), -(5,1,1180,'Daggers',1), -(5,1,2382,'Generic',1), -(5,1,2457,'Battle Stance',1), -(5,1,2479,'Honorless Target',1), -(5,1,3050,'Detect',1), -(5,1,3365,'Opening',1), -(5,1,5227,'Underwater Breathing',1), -(5,1,5301,'Defensive State(DND)',1), -(5,1,6233,'Closing',1), -(5,1,6246,'Closing',1), -(5,1,6247,'Opening',1), -(5,1,6477,'Opening',1), -(5,1,6478,'Opening',1), -(5,1,6603,'Attack',1), -(5,1,7266,'Duel',1), -(5,1,7267,'Grovel',1), -(5,1,7355,'Stuck',1), -(5,1,7376,'Defensive Stance Passive',0), -(5,1,7381,'Berserker Stance Passive',0), -(5,1,7744,'Will of the Forsaken',1), -(5,1,8386,'Attacking',1), -(5,1,8737,'Mail',1), -(5,1,9077,'Leather',1), -(5,1,9078,'Cloth',1), -(5,1,9116,'Shield',1), -(5,1,9125,'Generic',1), -(5,1,17737,'Language Gutterspeak',1), -(5,1,20577,'Cannibalize',1), -(5,1,20579,'Shadow Resistance',1), -(5,1,21156,'Battle Stance Passive',0), -(5,1,21651,'Opening',1), -(5,1,21652,'Closing',1), -(5,1,22027,'Remove Insignia',1), -(5,1,22810,'Opening - No Text',1), -(5,1,32215,'Victorious State',1), -(5,4,81,'Dodge',1), -(5,4,203,'Unarmed',1), -(5,4,204,'Defense',1), -(5,4,522,'SPELLDEFENSE(DND)',1), -(5,4,669,'Language Orcish',1), -(5,4,1180,'Daggers',1), -(5,4,1752,'Sinister Strike',1), -(5,4,2098,'Eviscerate',1), -(5,4,2382,'Generic',1), -(5,4,2479,'Honorless Target',1), -(5,4,2567,'Thrown',1), -(5,4,2764,'Throw',1), -(5,4,3050,'Detect',1), -(5,4,3365,'Opening',1), -(5,4,5227,'Underwater Breathing',1), -(5,4,6233,'Closing',1), -(5,4,6246,'Closing',1), -(5,4,6247,'Opening',1), -(5,4,6477,'Opening',1), -(5,4,6478,'Opening',1), -(5,4,6603,'Attack',1), -(5,4,7266,'Duel',1), -(5,4,7267,'Grovel',1), -(5,4,7355,'Stuck',1), -(5,4,7744,'Will of the Forsaken',1), -(5,4,8386,'Attacking',1), -(5,4,9077,'Leather',1), -(5,4,9078,'Cloth',1), -(5,4,9125,'Generic',1), -(5,4,16092,'Defensive State(DND)',1), -(5,4,17737,'Language Gutterspeak',1), -(5,4,20577,'Cannibalize',1), -(5,4,20579,'Shadow Resistance',1), -(5,4,21184,'Rogue Passive(DND)',1), -(5,4,21651,'Opening',1), -(5,4,21652,'Closing',1), -(5,4,22027,'Remove Insignia',1), -(5,4,22810,'Opening - No Text',1), -(5,5,81,'Dodge',1), -(5,5,198,'One-Handed Maces',1), -(5,5,203,'Unarmed',1), -(5,5,204,'Defense',1), -(5,5,522,'SPELLDEFENSE(DND)',1), -(5,5,585,'Smite',1), -(5,5,669,'Language Orcish',1), -(5,5,2050,'Lesser Heal',1), -(5,5,2382,'Generic',1), -(5,5,2479,'Honorless Target',1), -(5,5,3050,'Detect',1), -(5,5,3365,'Opening',1), -(5,5,5009,'Wands',1), -(5,5,5019,'Shoot',1), -(5,5,5227,'Underwater Breathing',1), -(5,5,6233,'Closing',1), -(5,5,6246,'Closing',1), -(5,5,6247,'Opening',1), -(5,5,6477,'Opening',1), -(5,5,6478,'Opening',1), -(5,5,6603,'Attack',1), -(5,5,7266,'Duel',1), -(5,5,7267,'Grovel',1), -(5,5,7355,'Stuck',1), -(5,5,7744,'Will of the Forsaken',1), -(5,5,8386,'Attacking',1), -(5,5,9078,'Cloth',1), -(5,5,9125,'Generic',1), -(5,5,17737,'Language Gutterspeak',1), -(5,5,20577,'Cannibalize',1), -(5,5,20579,'Shadow Resistance',1), -(5,5,21651,'Opening',1), -(5,5,21652,'Closing',1), -(5,5,22027,'Remove Insignia',1), -(5,5,22810,'Opening - No Text',1), -(5,6,81,'Dodge',1), -(5,6,196,'One-Handed Axes',1), -(5,6,197,'Two-Handed Axes',1), -(5,6,200,'Polearms',1), -(5,6,201,'One-Handed Swords',1), -(5,6,202,'Two-Handed Swords',1), -(5,6,203,'Unarmed',1), -(5,6,204,'Defense',1), -(5,6,522,'SPELLDEFENSE (DND)',1), -(5,6,669,'Language Orcish',1), -(5,6,674,'Dual Wield',1), -(5,6,750,'Plate Mail',1), -(5,6,1843,'Disarm',1), -(5,6,2382,'Generic',1), -(5,6,2479,'Honorless Target',1), -(5,6,3050,'Detect',1), -(5,6,3127,'Parry',1), -(5,6,3275,'Linen Bandage',1), -(5,6,3276,'Heavy Linen Bandage',1), -(5,6,3277,'Wool Bandage',1), -(5,6,3278,'Heavy Wool Bandage',1), -(5,6,3365,'Opening',1), -(5,6,5227,'Underwater Breathing',1), -(5,6,6233,'Closing',1), -(5,6,6246,'Closing',1), -(5,6,6247,'Opening',1), -(5,6,6477,'Opening',1), -(5,6,6478,'Opening',1), -(5,6,6603,'Attack',1), -(5,6,7266,'Duel',1), -(5,6,7267,'Grovel',1), -(5,6,7355,'Stuck',1), -(5,6,7744,'Will of the Forsaken',1), -(5,6,7928,'Silk Bandage',1), -(5,6,7929,'Heavy Silk Bandage',1), -(5,6,7934,'Anti-Venom',1), -(5,6,8386,'Attacking',1), -(5,6,8737,'Mail',1), -(5,6,9077,'Leather',1), -(5,6,9078,'Cloth',1), -(5,6,9125,'Generic',1), -(5,6,10840,'Mageweave Bandage',1), -(5,6,10841,'Heavy Mageweave Bandage',1), -(5,6,10846,'First Aid',1), -(5,6,17737,'Language Gutterspeak',1), -(5,6,18629,'Runecloth Bandage',1), -(5,6,18630,'Heavy Runecloth Bandage',1), -(5,6,20577,'Cannibalize',1), -(5,6,20579,'Shadow Resistance',1), -(5,6,21651,'Opening',1), -(5,6,21652,'Closing',1), -(5,6,22027,'Remove Insignia',1), -(5,6,22810,'Opening - No Text',1), -(5,6,33391,'Journeyman Riding',1), -(5,6,45462,'Plague Strike',1), -(5,6,45477,'Icy Touch',1), -(5,6,45902,'Blood Strike',1), -(5,6,45903,'Offensive State (DND)',1), -(5,6,45927,'Summon Friend',1), -(5,6,47541,'Death Coil',1), -(5,6,48266,'Blood Presence',1), -(5,6,49410,'Forceful Deflection',1), -(5,6,49576,'Death Grip',1), -(5,6,52665,'Sigil',1), -(5,6,59879,'Blood Plague',1), -(5,6,59921,'Frost Fever',1), -(5,6,61437,'Opening',1), -(5,6,61455,'Runic Focus',1), -(5,8,81,'Dodge',1), -(5,8,133,'Fireball',1), -(5,8,168,'Frost Armor',1), -(5,8,203,'Unarmed',1), -(5,8,204,'Defense',1), -(5,8,227,'Staves',1), -(5,8,522,'SPELLDEFENSE(DND)',1), -(5,8,669,'Language Orcish',1), -(5,8,2382,'Generic',1), -(5,8,2479,'Honorless Target',1), -(5,8,3050,'Detect',1), -(5,8,3365,'Opening',1), -(5,8,5009,'Wands',1), -(5,8,5019,'Shoot',1), -(5,8,5227,'Underwater Breathing',1), -(5,8,6233,'Closing',1), -(5,8,6246,'Closing',1), -(5,8,6247,'Opening',1), -(5,8,6477,'Opening',1), -(5,8,6478,'Opening',1), -(5,8,6603,'Attack',1), -(5,8,7266,'Duel',1), -(5,8,7267,'Grovel',1), -(5,8,7355,'Stuck',1), -(5,8,7744,'Will of the Forsaken',1), -(5,8,8386,'Attacking',1), -(5,8,9078,'Cloth',1), -(5,8,9125,'Generic',1), -(5,8,17737,'Language Gutterspeak',1), -(5,8,20577,'Cannibalize',1), -(5,8,20579,'Shadow Resistance',1), -(5,8,21651,'Opening',1), -(5,8,21652,'Closing',1), -(5,8,22027,'Remove Insignia',1), -(5,8,22810,'Opening - No Text',1), -(5,9,81,'Dodge',1), -(5,9,203,'Unarmed',1), -(5,9,204,'Defense',1), -(5,9,522,'SPELLDEFENSE(DND)',1), -(5,9,669,'Language Orcish',1), -(5,9,686,'Shadow Bolt',1), -(5,9,687,'Demon Skin',1), -(5,9,1180,'Daggers',1), -(5,9,2382,'Generic',1), -(5,9,2479,'Honorless Target',1), -(5,9,3050,'Detect',1), -(5,9,3365,'Opening',1), -(5,9,5009,'Wands',1), -(5,9,5019,'Shoot',1), -(5,9,5227,'Underwater Breathing',1), -(5,9,6233,'Closing',1), -(5,9,6246,'Closing',1), -(5,9,6247,'Opening',1), -(5,9,6477,'Opening',1), -(5,9,6478,'Opening',1), -(5,9,6603,'Attack',1), -(5,9,7266,'Duel',1), -(5,9,7267,'Grovel',1), -(5,9,7355,'Stuck',1), -(5,9,7744,'Will of the Forsaken',1), -(5,9,8386,'Attacking',1), -(5,9,9078,'Cloth',1), -(5,9,9125,'Generic',1), -(5,9,17737,'Language Gutterspeak',1), -(5,9,20577,'Cannibalize',1), -(5,9,20579,'Shadow Resistance',1), -(5,9,21651,'Opening',1), -(5,9,21652,'Closing',1), -(5,9,22027,'Remove Insignia',1), -(5,9,22810,'Opening - No Text',1), -(6,1,78,'Heroic Strike',1), -(6,1,81,'Dodge',1), -(6,1,107,'Block',1), -(6,1,196,'One-Handed Axes',1), -(6,1,198,'One-Handed Maces',1), -(6,1,199,'Two-Handed Maces',1), -(6,1,203,'Unarmed',1), -(6,1,204,'Defense',1), -(6,1,522,'SPELLDEFENSE(DND)',1), -(6,1,669,'Language Orcish',1), -(6,1,670,'Language Taurahe',1), -(6,1,2382,'Generic',1), -(6,1,2457,'Battle Stance',1), -(6,1,2479,'Honorless Target',1), -(6,1,3050,'Detect',1), -(6,1,3365,'Opening',1), -(6,1,5301,'Defensive State(DND)',1), -(6,1,6233,'Closing',1), -(6,1,6246,'Closing',1), -(6,1,6247,'Opening',1), -(6,1,6477,'Opening',1), -(6,1,6478,'Opening',1), -(6,1,6603,'Attack',1), -(6,1,7266,'Duel',1), -(6,1,7267,'Grovel',1), -(6,1,7355,'Stuck',1), -(6,1,7376,'Defensive Stance Passive',0), -(6,1,7381,'Berserker Stance Passive',0), -(6,1,8386,'Attacking',1), -(6,1,8737,'Mail',1), -(6,1,9077,'Leather',1), -(6,1,9078,'Cloth',1), -(6,1,9116,'Shield',1), -(6,1,9125,'Generic',1), -(6,1,20549,'War Stomp',1), -(6,1,20550,'Endurance',1), -(6,1,20551,'Nature Resistance',1), -(6,1,20552,'Cultivation',1), -(6,1,21156,'Battle Stance Passive',0), -(6,1,21651,'Opening',1), -(6,1,21652,'Closing',1), -(6,1,22027,'Remove Insignia',1), -(6,1,22810,'Opening - No Text',1), -(6,1,32215,'Victorious State',1), -(6,3,75,'Auto Shot',1), -(6,3,81,'Dodge',1), -(6,3,196,'One-Handed Axes',1), -(6,3,203,'Unarmed',1), -(6,3,204,'Defense',1), -(6,3,266,'Guns',1), -(6,3,522,'SPELLDEFENSE(DND)',1), -(6,3,669,'Language Orcish',1), -(6,3,670,'Language Taurahe',1), -(6,3,2382,'Generic',1), -(6,3,2479,'Honorless Target',1), -(6,3,2973,'Raptor Strike',1), -(6,3,3050,'Detect',1), -(6,3,3365,'Opening',1), -(6,3,6233,'Closing',1), -(6,3,6246,'Closing',1), -(6,3,6247,'Opening',1), -(6,3,6477,'Opening',1), -(6,3,6478,'Opening',1), -(6,3,6603,'Attack',1), -(6,3,7266,'Duel',1), -(6,3,7267,'Grovel',1), -(6,3,7355,'Stuck',1), -(6,3,8386,'Attacking',1), -(6,3,9077,'Leather',1), -(6,3,9078,'Cloth',1), -(6,3,9125,'Generic',1), -(6,3,13358,'Defensive State(DND)',1), -(6,3,20549,'War Stomp',1), -(6,3,20550,'Endurance',1), -(6,3,20551,'Nature Resistance',1), -(6,3,20552,'Cultivation',1), -(6,3,21651,'Opening',1), -(6,3,21652,'Closing',1), -(6,3,22027,'Remove Insignia',1), -(6,3,22810,'Opening - No Text',1), -(6,3,24949,'Defensive State 2(DND)',1), -(6,3,34082,'Advantaged State(DND)',1), -(6,6,81,'Dodge',1), -(6,6,196,'One-Handed Axes',1), -(6,6,197,'Two-Handed Axes',1), -(6,6,200,'Polearms',1), -(6,6,201,'One-Handed Swords',1), -(6,6,202,'Two-Handed Swords',1), -(6,6,203,'Unarmed',1), -(6,6,204,'Defense',1), -(6,6,522,'SPELLDEFENSE (DND)',1), -(6,6,669,'Language Orcish',1), -(6,6,670,'Language Taurahe',1), -(6,6,674,'Dual Wield',1), -(6,6,750,'Plate Mail',1), -(6,6,1843,'Disarm',1), -(6,6,2382,'Generic',1), -(6,6,2479,'Honorless Target',1), -(6,6,3050,'Detect',1), -(6,6,3127,'Parry',1), -(6,6,3275,'Linen Bandage',1), -(6,6,3276,'Heavy Linen Bandage',1), -(6,6,3277,'Wool Bandage',1), -(6,6,3278,'Heavy Wool Bandage',1), -(6,6,3365,'Opening',1), -(6,6,6233,'Closing',1), -(6,6,6246,'Closing',1), -(6,6,6247,'Opening',1), -(6,6,6477,'Opening',1), -(6,6,6478,'Opening',1), -(6,6,6603,'Attack',1), -(6,6,7266,'Duel',1), -(6,6,7267,'Grovel',1), -(6,6,7355,'Stuck',1), -(6,6,7928,'Silk Bandage',1), -(6,6,7929,'Heavy Silk Bandage',1), -(6,6,7934,'Anti-Venom',1), -(6,6,8386,'Attacking',1), -(6,6,8737,'Mail',1), -(6,6,9077,'Leather',1), -(6,6,9078,'Cloth',1), -(6,6,9125,'Generic',1), -(6,6,10840,'Mageweave Bandage',1), -(6,6,10841,'Heavy Mageweave Bandage',1), -(6,6,10846,'First Aid',1), -(6,6,18629,'Runecloth Bandage',1), -(6,6,18630,'Heavy Runecloth Bandage',1), -(6,6,20549,'War Stomp',1), -(6,6,20550,'Endurance',1), -(6,6,20551,'Nature Resistance',1), -(6,6,20552,'Cultivation',1), -(6,6,21651,'Opening',1), -(6,6,21652,'Closing',1), -(6,6,22027,'Remove Insignia',1), -(6,6,22810,'Opening - No Text',1), -(6,6,33391,'Journeyman Riding',1), -(6,6,45462,'Plague Strike',1), -(6,6,45477,'Icy Touch',1), -(6,6,45902,'Blood Strike',1), -(6,6,45903,'Offensive State (DND)',1), -(6,6,45927,'Summon Friend',1), -(6,6,47541,'Death Coil',1), -(6,6,48266,'Blood Presence',1), -(6,6,49410,'Forceful Deflection',1), -(6,6,49576,'Death Grip',1), -(6,6,52665,'Sigil',1), -(6,6,59879,'Blood Plague',1), -(6,6,59921,'Frost Fever',1), -(6,6,61437,'Opening',1), -(6,6,61455,'Runic Focus',1), -(6,7,81,'Dodge',1), -(6,7,107,'Block',1), -(6,7,198,'One-Handed Maces',1), -(6,7,203,'Unarmed',1), -(6,7,204,'Defense',1), -(6,7,227,'Staves',1), -(6,7,331,'Healing Wave',1), -(6,7,403,'Lightning Bolt',1), -(6,7,522,'SPELLDEFENSE(DND)',1), -(6,7,669,'Language Orcish',1), -(6,7,670,'Language Taurahe',1), -(6,7,2382,'Generic',1), -(6,7,2479,'Honorless Target',1), -(6,7,3050,'Detect',1), -(6,7,3365,'Opening',1), -(6,7,6233,'Closing',1), -(6,7,6246,'Closing',1), -(6,7,6247,'Opening',1), -(6,7,6477,'Opening',1), -(6,7,6478,'Opening',1), -(6,7,6603,'Attack',1), -(6,7,7266,'Duel',1), -(6,7,7267,'Grovel',1), -(6,7,7355,'Stuck',1), -(6,7,8386,'Attacking',1), -(6,7,9077,'Leather',1), -(6,7,9078,'Cloth',1), -(6,7,9116,'Shield',1), -(6,7,9125,'Generic',1), -(6,7,20549,'War Stomp',1), -(6,7,20550,'Endurance',1), -(6,7,20551,'Nature Resistance',1), -(6,7,20552,'Cultivation',1), -(6,7,21651,'Opening',1), -(6,7,21652,'Closing',1), -(6,7,22027,'Remove Insignia',1), -(6,7,22810,'Opening - No Text',1), -(6,7,27763,'Totem',1), -(6,11,81,'Dodge',1), -(6,11,198,'One-Handed Maces',1), -(6,11,203,'Unarmed',1), -(6,11,204,'Defense',1), -(6,11,227,'Staves',1), -(6,11,522,'SPELLDEFENSE(DND)',1), -(6,11,669,'Language Orcish',1), -(6,11,670,'Language Taurahe',1), -(6,11,1178,'Bear Form(Passive)',0), -(6,11,2382,'Generic',1), -(6,11,2479,'Honorless Target',1), -(6,11,3025,'Cat Form(Passive)',0), -(6,11,3050,'Detect',1), -(6,11,3365,'Opening',1), -(6,11,5176,'Wrath',1), -(6,11,5185,'Healing Touch',1), -(6,11,5419,'Travel Form(Passive)',0), -(6,11,5420,'Tree of Life',0), -(6,11,5421,'Aquatic Form(Passive)',0), -(6,11,6233,'Closing',1), -(6,11,6246,'Closing',1), -(6,11,6247,'Opening',1), -(6,11,6477,'Opening',1), -(6,11,6478,'Opening',1), -(6,11,6603,'Attack',1), -(6,11,7266,'Duel',1), -(6,11,7267,'Grovel',1), -(6,11,7355,'Stuck',1), -(6,11,8386,'Attacking',1), -(6,11,9077,'Leather',1), -(6,11,9078,'Cloth',1), -(6,11,9125,'Generic',1), -(6,11,9635,'Dire Bear Form(Passive)',0), -(6,11,20549,'War Stomp',1), -(6,11,20550,'Endurance',1), -(6,11,20551,'Nature Resistance',1), -(6,11,20552,'Cultivation',1), -(6,11,21178,'Bear Form(Passive2)',0), -(6,11,21651,'Opening',1), -(6,11,21652,'Closing',1), -(6,11,22027,'Remove Insignia',1), -(6,11,22810,'Opening - No Text',1), -(6,11,24905,'Moonkin Form(Passive)',0), -(6,11,27764,'Fetish',1), -(6,11,33948,'Flight Form(Passive)',0), -(6,11,34123,'Tree of Life(Passive)',0), -(6,11,40121,'Swift Flight Form(Passive)',0), -(7,1,78,'Heroic Strike',1), -(7,1,81,'Dodge',1), -(7,1,107,'Block',1), -(7,1,198,'One-Handed Maces',1), -(7,1,201,'One-Handed Swords',1), -(7,1,203,'Unarmed',1), -(7,1,204,'Defense',1), -(7,1,522,'SPELLDEFENSE(DND)',1), -(7,1,668,'Language Common',1), -(7,1,1180,'Daggers',1), -(7,1,2382,'Generic',1), -(7,1,2457,'Battle Stance',1), -(7,1,2479,'Honorless Target',1), -(7,1,3050,'Detect',1), -(7,1,3365,'Opening',1), -(7,1,5301,'Defensive State(DND)',1), -(7,1,6233,'Closing',1), -(7,1,6246,'Closing',1), -(7,1,6247,'Opening',1), -(7,1,6477,'Opening',1), -(7,1,6478,'Opening',1), -(7,1,6603,'Attack',1), -(7,1,7266,'Duel',1), -(7,1,7267,'Grovel',1), -(7,1,7340,'Language Gnomish',1), -(7,1,7355,'Stuck',1), -(7,1,7376,'Defensive Stance Passive',0), -(7,1,7381,'Berserker Stance Passive',0), -(7,1,8386,'Attacking',1), -(7,1,8737,'Mail',1), -(7,1,9077,'Leather',1), -(7,1,9078,'Cloth',1), -(7,1,9116,'Shield',1), -(7,1,9125,'Generic',1), -(7,1,20589,'Escape Artist',1), -(7,1,20591,'Expansive Mind',1), -(7,1,20592,'Arcane Resistance',1), -(7,1,20593,'Engineering Specialization',1), -(7,1,21156,'Battle Stance Passive',0), -(7,1,21651,'Opening',1), -(7,1,21652,'Closing',1), -(7,1,22027,'Remove Insignia',1), -(7,1,22810,'Opening - No Text',1), -(7,1,32215,'Victorious State',1), -(7,4,81,'Dodge',1), -(7,4,203,'Unarmed',1), -(7,4,204,'Defense',1), -(7,4,522,'SPELLDEFENSE(DND)',1), -(7,4,668,'Language Common',1), -(7,4,1180,'Daggers',1), -(7,4,1752,'Sinister Strike',1), -(7,4,2098,'Eviscerate',1), -(7,4,2382,'Generic',1), -(7,4,2479,'Honorless Target',1), -(7,4,2567,'Thrown',1), -(7,4,2764,'Throw',1), -(7,4,3050,'Detect',1), -(7,4,3365,'Opening',1), -(7,4,6233,'Closing',1), -(7,4,6246,'Closing',1), -(7,4,6247,'Opening',1), -(7,4,6477,'Opening',1), -(7,4,6478,'Opening',1), -(7,4,6603,'Attack',1), -(7,4,7266,'Duel',1), -(7,4,7267,'Grovel',1), -(7,4,7340,'Language Gnomish',1), -(7,4,7355,'Stuck',1), -(7,4,8386,'Attacking',1), -(7,4,9077,'Leather',1), -(7,4,9078,'Cloth',1), -(7,4,9125,'Generic',1), -(7,4,16092,'Defensive State(DND)',1), -(7,4,20589,'Escape Artist',1), -(7,4,20591,'Expansive Mind',1), -(7,4,20592,'Arcane Resistance',1), -(7,4,20593,'Engineering Specialization',1), -(7,4,21184,'Rogue Passive(DND)',1), -(7,4,21651,'Opening',1), -(7,4,21652,'Closing',1), -(7,4,22027,'Remove Insignia',1), -(7,4,22810,'Opening - No Text',1), -(7,6,81,'Dodge',1), -(7,6,196,'One-Handed Axes',1), -(7,6,197,'Two-Handed Axes',1), -(7,6,200,'Polearms',1), -(7,6,201,'One-Handed Swords',1), -(7,6,202,'Two-Handed Swords',1), -(7,6,203,'Unarmed',1), -(7,6,204,'Defense',1), -(7,6,522,'SPELLDEFENSE (DND)',1), -(7,6,668,'Language Common',1), -(7,6,674,'Dual Wield',1), -(7,6,750,'Plate Mail',1), -(7,6,1843,'Disarm',1), -(7,6,2382,'Generic',1), -(7,6,2479,'Honorless Target',1), -(7,6,3050,'Detect',1), -(7,6,3127,'Parry',1), -(7,6,3275,'Linen Bandage',1), -(7,6,3276,'Heavy Linen Bandage',1), -(7,6,3277,'Wool Bandage',1), -(7,6,3278,'Heavy Wool Bandage',1), -(7,6,3365,'Opening',1), -(7,6,6233,'Closing',1), -(7,6,6246,'Closing',1), -(7,6,6247,'Opening',1), -(7,6,6477,'Opening',1), -(7,6,6478,'Opening',1), -(7,6,6603,'Attack',1), -(7,6,7266,'Duel',1), -(7,6,7267,'Grovel',1), -(7,6,7340,'Language Gnomish',1), -(7,6,7355,'Stuck',1), -(7,6,7928,'Silk Bandage',1), -(7,6,7929,'Heavy Silk Bandage',1), -(7,6,7934,'Anti-Venom',1), -(7,6,8386,'Attacking',1), -(7,6,8737,'Mail',1), -(7,6,9077,'Leather',1), -(7,6,9078,'Cloth',1), -(7,6,9125,'Generic',1), -(7,6,10840,'Mageweave Bandage',1), -(7,6,10841,'Heavy Mageweave Bandage',1), -(7,6,10846,'First Aid',1), -(7,6,18629,'Runecloth Bandage',1), -(7,6,18630,'Heavy Runecloth Bandage',1), -(7,6,20589,'Escape Artist',1), -(7,6,20591,'Expansive Mind',1), -(7,6,20592,'Arcane Resistance',1), -(7,6,20593,'Engineering Specialization',1), -(7,6,21651,'Opening',1), -(7,6,21652,'Closing',1), -(7,6,22027,'Remove Insignia',1), -(7,6,22810,'Opening - No Text',1), -(7,6,33391,'Journeyman Riding',1), -(7,6,45462,'Plague Strike',1), -(7,6,45477,'Icy Touch',1), -(7,6,45902,'Blood Strike',1), -(7,6,45903,'Offensive State (DND)',1), -(7,6,45927,'Summon Friend',1), -(7,6,47541,'Death Coil',1), -(7,6,48266,'Blood Presence',1), -(7,6,49410,'Forceful Deflection',1), -(7,6,49576,'Death Grip',1), -(7,6,52665,'Sigil',1), -(7,6,59879,'Blood Plague',1), -(7,6,59921,'Frost Fever',1), -(7,6,61437,'Opening',1), -(7,6,61455,'Runic Focus',1), -(7,8,81,'Dodge',1), -(7,8,133,'Fireball',1), -(7,8,168,'Frost Armor',1), -(7,8,203,'Unarmed',1), -(7,8,204,'Defense',1), -(7,8,227,'Staves',1), -(7,8,522,'SPELLDEFENSE(DND)',1), -(7,8,668,'Language Common',1), -(7,8,2382,'Generic',1), -(7,8,2479,'Honorless Target',1), -(7,8,3050,'Detect',1), -(7,8,3365,'Opening',1), -(7,8,5009,'Wands',1), -(7,8,5019,'Shoot',1), -(7,8,6233,'Closing',1), -(7,8,6246,'Closing',1), -(7,8,6247,'Opening',1), -(7,8,6477,'Opening',1), -(7,8,6478,'Opening',1), -(7,8,6603,'Attack',1), -(7,8,7266,'Duel',1), -(7,8,7267,'Grovel',1), -(7,8,7340,'Language Gnomish',1), -(7,8,7355,'Stuck',1), -(7,8,8386,'Attacking',1), -(7,8,9078,'Cloth',1), -(7,8,9125,'Generic',1), -(7,8,20589,'Escape Artist',1), -(7,8,20591,'Expansive Mind',1), -(7,8,20592,'Arcane Resistance',1), -(7,8,20593,'Engineering Specialization',1), -(7,8,21651,'Opening',1), -(7,8,21652,'Closing',1), -(7,8,22027,'Remove Insignia',1), -(7,8,22810,'Opening - No Text',1), -(7,9,81,'Dodge',1), -(7,9,203,'Unarmed',1), -(7,9,204,'Defense',1), -(7,9,522,'SPELLDEFENSE(DND)',1), -(7,9,668,'Language Common',1), -(7,9,686,'Shadow Bolt',1), -(7,9,687,'Demon Skin',1), -(7,9,1180,'Daggers',1), -(7,9,2382,'Generic',1), -(7,9,2479,'Honorless Target',1), -(7,9,3050,'Detect',1), -(7,9,3365,'Opening',1), -(7,9,5009,'Wands',1), -(7,9,5019,'Shoot',1), -(7,9,6233,'Closing',1), -(7,9,6246,'Closing',1), -(7,9,6247,'Opening',1), -(7,9,6477,'Opening',1), -(7,9,6478,'Opening',1), -(7,9,6603,'Attack',1), -(7,9,7266,'Duel',1), -(7,9,7267,'Grovel',1), -(7,9,7340,'Language Gnomish',1), -(7,9,7355,'Stuck',1), -(7,9,8386,'Attacking',1), -(7,9,9078,'Cloth',1), -(7,9,9125,'Generic',1), -(7,9,20589,'Escape Artist',1), -(7,9,20591,'Expansive Mind',1), -(7,9,20592,'Arcane Resistance',1), -(7,9,20593,'Engineering Specialization',1), -(7,9,21651,'Opening',1), -(7,9,21652,'Closing',1), -(7,9,22027,'Remove Insignia',1), -(7,9,22810,'Opening - No Text',1), -(8,1,78,'Heroic Strike',1), -(8,1,81,'Dodge',1), -(8,1,107,'Block',1), -(8,1,196,'One-Handed Axes',1), -(8,1,203,'Unarmed',1), -(8,1,204,'Defense',1), -(8,1,522,'SPELLDEFENSE(DND)',1), -(8,1,669,'Language Orcish',1), -(8,1,1180,'Daggers',1), -(8,1,2382,'Generic',1), -(8,1,2457,'Battle Stance',1), -(8,1,2479,'Honorless Target',1), -(8,1,2567,'Thrown',1), -(8,1,2764,'Throw',1), -(8,1,3050,'Detect',1), -(8,1,3365,'Opening',1), -(8,1,5301,'Defensive State(DND)',1), -(8,1,6233,'Closing',1), -(8,1,6246,'Closing',1), -(8,1,6247,'Opening',1), -(8,1,6477,'Opening',1), -(8,1,6478,'Opening',1), -(8,1,6603,'Attack',1), -(8,1,7266,'Duel',1), -(8,1,7267,'Grovel',1), -(8,1,7341,'Language Troll',1), -(8,1,7355,'Stuck',1), -(8,1,7376,'Defensive Stance Passive',0), -(8,1,7381,'Berserker Stance Passive',0), -(8,1,8386,'Attacking',1), -(8,1,8737,'Mail',1), -(8,1,9077,'Leather',1), -(8,1,9078,'Cloth',1), -(8,1,9116,'Shield',1), -(8,1,9125,'Generic',1), -(8,1,20555,'Regeneration',1), -(8,1,20557,'Beast Slaying',1), -(8,1,20558,'Throwing Specialization',1), -(8,1,21156,'Battle Stance Passive',0), -(8,1,21651,'Opening',1), -(8,1,21652,'Closing',1), -(8,1,22027,'Remove Insignia',1), -(8,1,22810,'Opening - No Text',1), -(8,1,26290,'Bow Specialization',1), -(8,1,26296,'Berserking',1), -(8,1,32215,'Victorious State',1), -(8,3,75,'Auto Shot',1), -(8,3,81,'Dodge',1), -(8,3,196,'One-Handed Axes',1), -(8,3,203,'Unarmed',1), -(8,3,204,'Defense',1), -(8,3,264,'Bows',1), -(8,3,522,'SPELLDEFENSE(DND)',1), -(8,3,669,'Language Orcish',1), -(8,3,2382,'Generic',1), -(8,3,2479,'Honorless Target',1), -(8,3,2973,'Raptor Strike',1), -(8,3,3050,'Detect',1), -(8,3,3365,'Opening',1), -(8,3,6233,'Closing',1), -(8,3,6246,'Closing',1), -(8,3,6247,'Opening',1), -(8,3,6477,'Opening',1), -(8,3,6478,'Opening',1), -(8,3,6603,'Attack',1), -(8,3,7266,'Duel',1), -(8,3,7267,'Grovel',1), -(8,3,7341,'Language Troll',1), -(8,3,7355,'Stuck',1), -(8,3,8386,'Attacking',1), -(8,3,9077,'Leather',1), -(8,3,9078,'Cloth',1), -(8,3,9125,'Generic',1), -(8,3,13358,'Defensive State(DND)',1), -(8,3,20554,'Berserking',1), -(8,3,20555,'Regeneration',1), -(8,3,20557,'Beast Slaying',1), -(8,3,20558,'Throwing Specialization',1), -(8,3,21651,'Opening',1), -(8,3,21652,'Closing',1), -(8,3,22027,'Remove Insignia',1), -(8,3,22810,'Opening - No Text',1), -(8,3,24949,'Defensive State 2(DND)',1), -(8,3,26290,'Bow Specialization',1), -(8,3,34082,'Advantaged State(DND)',1), -(8,4,81,'Dodge',1), -(8,4,203,'Unarmed',1), -(8,4,204,'Defense',1), -(8,4,522,'SPELLDEFENSE(DND)',1), -(8,4,669,'Language Orcish',1), -(8,4,1180,'Daggers',1), -(8,4,1752,'Sinister Strike',1), -(8,4,2098,'Eviscerate',1), -(8,4,2382,'Generic',1), -(8,4,2479,'Honorless Target',1), -(8,4,2567,'Thrown',1), -(8,4,2764,'Throw',1), -(8,4,3050,'Detect',1), -(8,4,3365,'Opening',1), -(8,4,6233,'Closing',1), -(8,4,6246,'Closing',1), -(8,4,6247,'Opening',1), -(8,4,6477,'Opening',1), -(8,4,6478,'Opening',1), -(8,4,6603,'Attack',1), -(8,4,7266,'Duel',1), -(8,4,7267,'Grovel',1), -(8,4,7341,'Language Troll',1), -(8,4,7355,'Stuck',1), -(8,4,8386,'Attacking',1), -(8,4,9077,'Leather',1), -(8,4,9078,'Cloth',1), -(8,4,9125,'Generic',1), -(8,4,16092,'Defensive State(DND)',1), -(8,4,20555,'Regeneration',1), -(8,4,20557,'Beast Slaying',1), -(8,4,20558,'Throwing Specialization',1), -(8,4,21184,'Rogue Passive(DND)',1), -(8,4,21651,'Opening',1), -(8,4,21652,'Closing',1), -(8,4,22027,'Remove Insignia',1), -(8,4,22810,'Opening - No Text',1), -(8,4,26290,'Bow Specialization',1), -(8,4,26297,'Berserking',1), -(8,5,81,'Dodge',1), -(8,5,198,'One-Handed Maces',1), -(8,5,203,'Unarmed',1), -(8,5,204,'Defense',1), -(8,5,522,'SPELLDEFENSE(DND)',1), -(8,5,585,'Smite',1), -(8,5,669,'Language Orcish',1), -(8,5,2050,'Lesser Heal',1), -(8,5,2382,'Generic',1), -(8,5,2479,'Honorless Target',1), -(8,5,3050,'Detect',1), -(8,5,3365,'Opening',1), -(8,5,5009,'Wands',1), -(8,5,5019,'Shoot',1), -(8,5,6233,'Closing',1), -(8,5,6246,'Closing',1), -(8,5,6247,'Opening',1), -(8,5,6477,'Opening',1), -(8,5,6478,'Opening',1), -(8,5,6603,'Attack',1), -(8,5,7266,'Duel',1), -(8,5,7267,'Grovel',1), -(8,5,7341,'Language Troll',1), -(8,5,7355,'Stuck',1), -(8,5,8386,'Attacking',1), -(8,5,9078,'Cloth',1), -(8,5,9125,'Generic',1), -(8,5,20554,'Berserking',1), -(8,5,20555,'Regeneration',1), -(8,5,20557,'Beast Slaying',1), -(8,5,20558,'Throwing Specialization',1), -(8,5,21651,'Opening',1), -(8,5,21652,'Closing',1), -(8,5,22027,'Remove Insignia',1), -(8,5,22810,'Opening - No Text',1), -(8,5,26290,'Bow Specialization',1), -(8,6,81,'Dodge',1), -(8,6,196,'One-Handed Axes',1), -(8,6,197,'Two-Handed Axes',1), -(8,6,200,'Polearms',1), -(8,6,201,'One-Handed Swords',1), -(8,6,202,'Two-Handed Swords',1), -(8,6,203,'Unarmed',1), -(8,6,204,'Defense',1), -(8,6,522,'SPELLDEFENSE (DND)',1), -(8,6,669,'Language Orcish',1), -(8,6,674,'Dual Wield',1), -(8,6,750,'Plate Mail',1), -(8,6,1843,'Disarm',1), -(8,6,2382,'Generic',1), -(8,6,2479,'Honorless Target',1), -(8,6,3050,'Detect',1), -(8,6,3127,'Parry',1), -(8,6,3275,'Linen Bandage',1), -(8,6,3276,'Heavy Linen Bandage',1), -(8,6,3277,'Wool Bandage',1), -(8,6,3278,'Heavy Wool Bandage',1), -(8,6,3365,'Opening',1), -(8,6,6233,'Closing',1), -(8,6,6246,'Closing',1), -(8,6,6247,'Opening',1), -(8,6,6477,'Opening',1), -(8,6,6478,'Opening',1), -(8,6,6603,'Attack',1), -(8,6,7266,'Duel',1), -(8,6,7267,'Grovel',1), -(8,6,7341,'Language Troll',1), -(8,6,7355,'Stuck',1), -(8,6,7928,'Silk Bandage',1), -(8,6,7929,'Heavy Silk Bandage',1), -(8,6,7934,'Anti-Venom',1), -(8,6,8386,'Attacking',1), -(8,6,8737,'Mail',1), -(8,6,9077,'Leather',1), -(8,6,9078,'Cloth',1), -(8,6,9125,'Generic',1), -(8,6,10840,'Mageweave Bandage',1), -(8,6,10841,'Heavy Mageweave Bandage',1), -(8,6,10846,'First Aid',1), -(8,6,18629,'Runecloth Bandage',1), -(8,6,18630,'Heavy Runecloth Bandage',1), -(8,6,20555,'Regeneration',1), -(8,6,20557,'Beast Slaying',1), -(8,6,20558,'Throwing Specialization',1), -(8,6,21651,'Opening',1), -(8,6,21652,'Closing',1), -(8,6,22027,'Remove Insignia',1), -(8,6,22810,'Opening - No Text',1), -(8,6,26290,'Bow Specialization',1), -(8,6,33391,'Journeyman Riding',1), -(8,6,45462,'Plague Strike',1), -(8,6,45477,'Icy Touch',1), -(8,6,45902,'Blood Strike',1), -(8,6,45903,'Offensive State (DND)',1), -(8,6,45927,'Summon Friend',1), -(8,6,47541,'Death Coil',1), -(8,6,48266,'Blood Presence',1), -(8,6,49410,'Forceful Deflection',1), -(8,6,49576,'Death Grip',1), -(8,6,50621,'Berserking',1), -(8,6,52665,'Sigil',1), -(8,6,58943,'Da Voodoo Shuffle',1), -(8,6,59879,'Blood Plague',1), -(8,6,59921,'Frost Fever',1), -(8,6,61437,'Opening',1), -(8,6,61455,'Runic Focus',1), -(8,7,81,'Dodge',1), -(8,7,107,'Block',1), -(8,7,198,'One-Handed Maces',1), -(8,7,203,'Unarmed',1), -(8,7,204,'Defense',1), -(8,7,227,'Staves',1), -(8,7,331,'Healing Wave',1), -(8,7,403,'Lightning Bolt',1), -(8,7,522,'SPELLDEFENSE(DND)',1), -(8,7,669,'Language Orcish',1), -(8,7,2382,'Generic',1), -(8,7,2479,'Honorless Target',1), -(8,7,3050,'Detect',1), -(8,7,3365,'Opening',1), -(8,7,6233,'Closing',1), -(8,7,6246,'Closing',1), -(8,7,6247,'Opening',1), -(8,7,6477,'Opening',1), -(8,7,6478,'Opening',1), -(8,7,6603,'Attack',1), -(8,7,7266,'Duel',1), -(8,7,7267,'Grovel',1), -(8,7,7341,'Language Troll',1), -(8,7,7355,'Stuck',1), -(8,7,8386,'Attacking',1), -(8,7,9077,'Leather',1), -(8,7,9078,'Cloth',1), -(8,7,9116,'Shield',1), -(8,7,9125,'Generic',1), -(8,7,20554,'Berserking',1), -(8,7,20555,'Regeneration',1), -(8,7,20557,'Beast Slaying',1), -(8,7,20558,'Throwing Specialization',1), -(8,7,21651,'Opening',1), -(8,7,21652,'Closing',1), -(8,7,22027,'Remove Insignia',1), -(8,7,22810,'Opening - No Text',1), -(8,7,26290,'Bow Specialization',1), -(8,7,27763,'Totem',1), -(8,8,81,'Dodge',1), -(8,8,133,'Fireball',1), -(8,8,168,'Frost Armor',1), -(8,8,203,'Unarmed',1), -(8,8,204,'Defense',1), -(8,8,227,'Staves',1), -(8,8,522,'SPELLDEFENSE(DND)',1), -(8,8,669,'Language Orcish',1), -(8,8,2382,'Generic',1), -(8,8,2479,'Honorless Target',1), -(8,8,3050,'Detect',1), -(8,8,3365,'Opening',1), -(8,8,5009,'Wands',1), -(8,8,5019,'Shoot',1), -(8,8,6233,'Closing',1), -(8,8,6246,'Closing',1), -(8,8,6247,'Opening',1), -(8,8,6477,'Opening',1), -(8,8,6478,'Opening',1), -(8,8,6603,'Attack',1), -(8,8,7266,'Duel',1), -(8,8,7267,'Grovel',1), -(8,8,7341,'Language Troll',1), -(8,8,7355,'Stuck',1), -(8,8,8386,'Attacking',1), -(8,8,9078,'Cloth',1), -(8,8,9125,'Generic',1), -(8,8,20554,'Berserking',1), -(8,8,20555,'Regeneration',1), -(8,8,20557,'Beast Slaying',1), -(8,8,20558,'Throwing Specialization',1), -(8,8,21651,'Opening',1), -(8,8,21652,'Closing',1), -(8,8,22027,'Remove Insignia',1), -(8,8,22810,'Opening - No Text',1), -(8,8,26290,'Bow Specialization',1), -(10,2,81,'Dodge',1), -(10,2,107,'Block',1), -(10,2,201,'One-Handed Swords',1), -(10,2,202,'Two-Handed Swords',1), -(10,2,203,'Unarmed',1), -(10,2,204,'Defense',1), -(10,2,522,'SPELLDEFENSE(DND)',1), -(10,2,635,'Holy Light',1), -(10,2,669,'Language Orcish',1), -(10,2,813,'Language Thalassian',1), -(10,2,822,'Magic Resistance',1), -(10,2,2382,'Generic',1), -(10,2,2479,'Honorless Target',1), -(10,2,3050,'Detect',1), -(10,2,3365,'Opening',1), -(10,2,6233,'Closing',1), -(10,2,6246,'Closing',1), -(10,2,6247,'Opening',1), -(10,2,6477,'Opening',1), -(10,2,6478,'Opening',1), -(10,2,6603,'Attack',1), -(10,2,7266,'Duel',1), -(10,2,7267,'Grovel',1), -(10,2,7355,'Stuck',1), -(10,2,8386,'Attacking',1), -(10,2,8737,'Mail',1), -(10,2,9077,'Leather',1), -(10,2,9078,'Cloth',1), -(10,2,9116,'Shield',1), -(10,2,9125,'Generic',1), -(10,2,21084,'Seal of Righteousness',1), -(10,2,21651,'Opening',1), -(10,2,21652,'Closing',1), -(10,2,22027,'Remove Insignia',1), -(10,2,22810,'Opening - No Text',1), -(10,2,27762,'Libram',1), -(10,2,28730,'Arcane Torrent',1), -(10,2,28734,'Mana Tap',1), -(10,2,28877,'Arcane Affinity',1), -(10,3,75,'Auto Shot',1), -(10,3,81,'Dodge',1), -(10,3,203,'Unarmed',1), -(10,3,204,'Defense',1), -(10,3,264,'Bows',1), -(10,3,522,'SPELLDEFENSE(DND)',1), -(10,3,669,'Language Orcish',1), -(10,3,813,'Language Thalassian',1), -(10,3,822,'Magic Resistance',1), -(10,3,1180,'Daggers',1), -(10,3,2382,'Generic',1), -(10,3,2479,'Honorless Target',1), -(10,3,2973,'Raptor Strike',1), -(10,3,3050,'Detect',1), -(10,3,3365,'Opening',1), -(10,3,6233,'Closing',1), -(10,3,6246,'Closing',1), -(10,3,6247,'Opening',1), -(10,3,6477,'Opening',1), -(10,3,6478,'Opening',1), -(10,3,6603,'Attack',1), -(10,3,7266,'Duel',1), -(10,3,7267,'Grovel',1), -(10,3,7355,'Stuck',1), -(10,3,8386,'Attacking',1), -(10,3,9077,'Leather',1), -(10,3,9078,'Cloth',1), -(10,3,9125,'Generic',1), -(10,3,13358,'Defensive State(DND)',1), -(10,3,21651,'Opening',1), -(10,3,21652,'Closing',1), -(10,3,22027,'Remove Insignia',1), -(10,3,22810,'Opening - No Text',1), -(10,3,24949,'Defensive State 2(DND)',1), -(10,3,28730,'Arcane Torrent',1), -(10,3,28734,'Mana Tap',1), -(10,3,28877,'Arcane Affinity',1), -(10,3,34082,'Advantaged State(DND)',1), -(10,4,81,'Dodge',1), -(10,4,203,'Unarmed',1), -(10,4,204,'Defense',1), -(10,4,522,'SPELLDEFENSE(DND)',1), -(10,4,669,'Language Orcish',1), -(10,4,813,'Language Thalassian',1), -(10,4,822,'Magic Resistance',1), -(10,4,1180,'Daggers',1), -(10,4,1752,'Sinister Strike',1), -(10,4,2098,'Eviscerate',1), -(10,4,2382,'Generic',1), -(10,4,2479,'Honorless Target',1), -(10,4,2567,'Thrown',1), -(10,4,2764,'Throw',1), -(10,4,3050,'Detect',1), -(10,4,3365,'Opening',1), -(10,4,6233,'Closing',1), -(10,4,6246,'Closing',1), -(10,4,6247,'Opening',1), -(10,4,6477,'Opening',1), -(10,4,6478,'Opening',1), -(10,4,6603,'Attack',1), -(10,4,7266,'Duel',1), -(10,4,7267,'Grovel',1), -(10,4,7355,'Stuck',1), -(10,4,8386,'Attacking',1), -(10,4,9077,'Leather',1), -(10,4,9078,'Cloth',1), -(10,4,9125,'Generic',1), -(10,4,16092,'Defensive State(DND)',1), -(10,4,21184,'Rogue Passive(DND)',1), -(10,4,21651,'Opening',1), -(10,4,21652,'Closing',1), -(10,4,22027,'Remove Insignia',1), -(10,4,22810,'Opening - No Text',1), -(10,4,25046,'Arcane Torrent',1), -(10,4,28734,'Mana Tap',1), -(10,4,28877,'Arcane Affinity',1), -(10,5,81,'Dodge',1), -(10,5,198,'One-Handed Maces',1), -(10,5,203,'Unarmed',1), -(10,5,204,'Defense',1), -(10,5,522,'SPELLDEFENSE(DND)',1), -(10,5,585,'Smite',1), -(10,5,669,'Language Orcish',1), -(10,5,813,'Language Thalassian',1), -(10,5,822,'Magic Resistance',1), -(10,5,2050,'Lesser Heal',1), -(10,5,2382,'Generic',1), -(10,5,2479,'Honorless Target',1), -(10,5,3050,'Detect',1), -(10,5,3365,'Opening',1), -(10,5,5009,'Wands',1), -(10,5,5019,'Shoot',1), -(10,5,6233,'Closing',1), -(10,5,6246,'Closing',1), -(10,5,6247,'Opening',1), -(10,5,6477,'Opening',1), -(10,5,6478,'Opening',1), -(10,5,6603,'Attack',1), -(10,5,7266,'Duel',1), -(10,5,7267,'Grovel',1), -(10,5,7355,'Stuck',1), -(10,5,8386,'Attacking',1), -(10,5,9078,'Cloth',1), -(10,5,9125,'Generic',1), -(10,5,21651,'Opening',1), -(10,5,21652,'Closing',1), -(10,5,22027,'Remove Insignia',1), -(10,5,22810,'Opening - No Text',1), -(10,5,28730,'Arcane Torrent',1), -(10,5,28734,'Mana Tap',1), -(10,5,28877,'Arcane Affinity',1), -(10,6,81,'Dodge',1), -(10,6,196,'One-Handed Axes',1), -(10,6,197,'Two-Handed Axes',1), -(10,6,200,'Polearms',1), -(10,6,201,'One-Handed Swords',1), -(10,6,202,'Two-Handed Swords',1), -(10,6,203,'Unarmed',1), -(10,6,204,'Defense',1), -(10,6,522,'SPELLDEFENSE (DND)',1), -(10,6,669,'Language Orcish',1), -(10,6,674,'Dual Wield',1), -(10,6,750,'Plate Mail',1), -(10,6,813,'Language Thalassian',1), -(10,6,822,'Magic Resistance',1), -(10,6,1843,'Disarm',1), -(10,6,2382,'Generic',1), -(10,6,2479,'Honorless Target',1), -(10,6,3050,'Detect',1), -(10,6,3127,'Parry',1), -(10,6,3275,'Linen Bandage',1), -(10,6,3276,'Heavy Linen Bandage',1), -(10,6,3277,'Wool Bandage',1), -(10,6,3278,'Heavy Wool Bandage',1), -(10,6,3365,'Opening',1), -(10,6,6233,'Closing',1), -(10,6,6246,'Closing',1), -(10,6,6247,'Opening',1), -(10,6,6477,'Opening',1), -(10,6,6478,'Opening',1), -(10,6,6603,'Attack',1), -(10,6,7266,'Duel',1), -(10,6,7267,'Grovel',1), -(10,6,7355,'Stuck',1), -(10,6,7928,'Silk Bandage',1), -(10,6,7929,'Heavy Silk Bandage',1), -(10,6,7934,'Anti-Venom',1), -(10,6,8386,'Attacking',1), -(10,6,8737,'Mail',1), -(10,6,9077,'Leather',1), -(10,6,9078,'Cloth',1), -(10,6,9125,'Generic',1), -(10,6,10840,'Mageweave Bandage',1), -(10,6,10841,'Heavy Mageweave Bandage',1), -(10,6,10846,'First Aid',1), -(10,6,18629,'Runecloth Bandage',1), -(10,6,18630,'Heavy Runecloth Bandage',1), -(10,6,21651,'Opening',1), -(10,6,21652,'Closing',1), -(10,6,22027,'Remove Insignia',1), -(10,6,22810,'Opening - No Text',1), -(10,6,28877,'Arcane Affinity',1), -(10,6,33391,'Journeyman Riding',1), -(10,6,45462,'Plague Strike',1), -(10,6,45477,'Icy Touch',1), -(10,6,45902,'Blood Strike',1), -(10,6,45903,'Offensive State (DND)',1), -(10,6,45927,'Summon Friend',1), -(10,6,47541,'Death Coil',1), -(10,6,48266,'Blood Presence',1), -(10,6,49410,'Forceful Deflection',1), -(10,6,49576,'Death Grip',1), -(10,6,50613,'Arcane Torrent',1), -(10,6,52665,'Sigil',1), -(10,6,59879,'Blood Plague',1), -(10,6,59921,'Frost Fever',1), -(10,6,61437,'Opening',1), -(10,6,61455,'Runic Focus',1), -(10,8,81,'Dodge',1), -(10,8,133,'Fireball',1), -(10,8,168,'Frost Armor',1), -(10,8,203,'Unarmed',1), -(10,8,204,'Defense',1), -(10,8,227,'Staves',1), -(10,8,522,'SPELLDEFENSE(DND)',1), -(10,8,669,'Language Orcish',1), -(10,8,813,'Language Thalassian',1), -(10,8,822,'Magic Resistance',1), -(10,8,2382,'Generic',1), -(10,8,2479,'Honorless Target',1), -(10,8,3050,'Detect',1), -(10,8,3365,'Opening',1), -(10,8,5009,'Wands',1), -(10,8,5019,'Shoot',1), -(10,8,6233,'Closing',1), -(10,8,6246,'Closing',1), -(10,8,6247,'Opening',1), -(10,8,6477,'Opening',1), -(10,8,6478,'Opening',1), -(10,8,6603,'Attack',1), -(10,8,7266,'Duel',1), -(10,8,7267,'Grovel',1), -(10,8,7355,'Stuck',1), -(10,8,8386,'Attacking',1), -(10,8,9078,'Cloth',1), -(10,8,9125,'Generic',1), -(10,8,21651,'Opening',1), -(10,8,21652,'Closing',1), -(10,8,22027,'Remove Insignia',1), -(10,8,22810,'Opening - No Text',1), -(10,8,28730,'Arcane Torrent',1), -(10,8,28734,'Mana Tap',1), -(10,8,28877,'Arcane Affinity',1), -(10,9,81,'Dodge',1), -(10,9,203,'Unarmed',1), -(10,9,204,'Defense',1), -(10,9,522,'SPELLDEFENSE(DND)',1), -(10,9,669,'Language Orcish',1), -(10,9,686,'Shadow Bolt',1), -(10,9,687,'Demon Skin',1), -(10,9,813,'Language Thalassian',1), -(10,9,822,'Magic Resistance',1), -(10,9,1180,'Daggers',1), -(10,9,2382,'Generic',1), -(10,9,2479,'Honorless Target',1), -(10,9,3050,'Detect',1), -(10,9,3365,'Opening',1), -(10,9,5009,'Wands',1), -(10,9,5019,'Shoot',1), -(10,9,6233,'Closing',1), -(10,9,6246,'Closing',1), -(10,9,6247,'Opening',1), -(10,9,6477,'Opening',1), -(10,9,6478,'Opening',1), -(10,9,6603,'Attack',1), -(10,9,7266,'Duel',1), -(10,9,7267,'Grovel',1), -(10,9,7355,'Stuck',1), -(10,9,8386,'Attacking',1), -(10,9,9078,'Cloth',1), -(10,9,9125,'Generic',1), -(10,9,21651,'Opening',1), -(10,9,21652,'Closing',1), -(10,9,22027,'Remove Insignia',1), -(10,9,22810,'Opening - No Text',1), -(10,9,28730,'Arcane Torrent',1), -(10,9,28734,'Mana Tap',1), -(10,9,28877,'Arcane Affinity',1), -(11,1,78,'Heroic Strike',1), -(11,1,81,'Dodge',1), -(11,1,107,'Block',1), -(11,1,198,'One-Handed Maces',1), -(11,1,201,'One-Handed Swords',1), -(11,1,202,'Two-Handed Swords',1), -(11,1,203,'Unarmed',1), -(11,1,204,'Defense',1), -(11,1,522,'SPELLDEFENSE(DND)',1), -(11,1,668,'Language Common',1), -(11,1,2382,'Generic',1), -(11,1,2457,'Battle Stance',1), -(11,1,2479,'Honorless Target',1), -(11,1,3050,'Detect',1), -(11,1,3365,'Opening',1), -(11,1,5301,'Defensive State(DND)',1), -(11,1,6233,'Closing',1), -(11,1,6246,'Closing',1), -(11,1,6247,'Opening',1), -(11,1,6477,'Opening',1), -(11,1,6478,'Opening',1), -(11,1,6562,'Heroic Presence',1), -(11,1,6603,'Attack',1), -(11,1,7266,'Duel',1), -(11,1,7267,'Grovel',1), -(11,1,7355,'Stuck',1), -(11,1,7376,'Defensive Stance Passive',0), -(11,1,7381,'Berserker Stance Passive',0), -(11,1,8386,'Attacking',1), -(11,1,8737,'Mail',1), -(11,1,9077,'Leather',1), -(11,1,9078,'Cloth',1), -(11,1,9116,'Shield',1), -(11,1,9125,'Generic',1), -(11,1,20579,'Shadow Resistance',1), -(11,1,21156,'Battle Stance Passive',0), -(11,1,21651,'Opening',1), -(11,1,21652,'Closing',1), -(11,1,22027,'Remove Insignia',1), -(11,1,22810,'Opening - No Text',1), -(11,1,28875,'Gemcutting',1), -(11,1,28880,'Gift of the Naaru',1), -(11,1,29932,'Language Draenei',1), -(11,1,32215,'Victorious State',1), -(11,2,81,'Dodge',1), -(11,2,107,'Block',1), -(11,2,198,'One-Handed Maces',1), -(11,2,199,'Two-Handed Maces',1), -(11,2,203,'Unarmed',1), -(11,2,204,'Defense',1), -(11,2,522,'SPELLDEFENSE(DND)',1), -(11,2,635,'Holy Light',1), -(11,2,668,'Language Common',1), -(11,2,2382,'Generic',1), -(11,2,2479,'Honorless Target',1), -(11,2,3050,'Detect',1), -(11,2,3365,'Opening',1), -(11,2,6233,'Closing',1), -(11,2,6246,'Closing',1), -(11,2,6247,'Opening',1), -(11,2,6477,'Opening',1), -(11,2,6478,'Opening',1), -(11,2,6562,'Heroic Presence',1), -(11,2,6603,'Attack',1), -(11,2,7266,'Duel',1), -(11,2,7267,'Grovel',1), -(11,2,7355,'Stuck',1), -(11,2,8386,'Attacking',1), -(11,2,8737,'Mail',1), -(11,2,9077,'Leather',1), -(11,2,9078,'Cloth',1), -(11,2,9116,'Shield',1), -(11,2,9125,'Generic',1), -(11,2,21084,'Seal of Righteousness',1), -(11,2,20579,'Shadow Resistance',1), -(11,2,21651,'Opening',1), -(11,2,21652,'Closing',1), -(11,2,22027,'Remove Insignia',1), -(11,2,22810,'Opening - No Text',1), -(11,2,27762,'Libram',1), -(11,2,28875,'Gemcutting',1), -(11,2,28880,'Gift of the Naaru',1), -(11,2,29932,'Language Draenei',1), -(11,3,75,'Auto Shot',1), -(11,3,81,'Dodge',1), -(11,3,201,'One-Handed Swords',1), -(11,3,203,'Unarmed',1), -(11,3,204,'Defense',1), -(11,3,522,'SPELLDEFENSE(DND)',1), -(11,3,668,'Language Common',1), -(11,3,2382,'Generic',1), -(11,3,2479,'Honorless Target',1), -(11,3,2973,'Raptor Strike',1), -(11,3,3050,'Detect',1), -(11,3,3365,'Opening',1), -(11,3,5011,'Crossbows',1), -(11,3,6233,'Closing',1), -(11,3,6246,'Closing',1), -(11,3,6247,'Opening',1), -(11,3,6477,'Opening',1), -(11,3,6478,'Opening',1), -(11,3,6562,'Heroic Presence',1), -(11,3,6603,'Attack',1), -(11,3,7266,'Duel',1), -(11,3,7267,'Grovel',1), -(11,3,7355,'Stuck',1), -(11,3,8386,'Attacking',1), -(11,3,9077,'Leather',1), -(11,3,9078,'Cloth',1), -(11,3,9125,'Generic',1), -(11,3,13358,'Defensive State(DND)',1), -(11,3,20579,'Shadow Resistance',1), -(11,3,21651,'Opening',1), -(11,3,21652,'Closing',1), -(11,3,22027,'Remove Insignia',1), -(11,3,22810,'Opening - No Text',1), -(11,3,24949,'Defensive State 2(DND)',1), -(11,3,28875,'Gemcutting',1), -(11,3,28880,'Gift of the Naaru',1), -(11,3,29932,'Language Draenei',1), -(11,3,34082,'Advantaged State(DND)',1), -(11,5,81,'Dodge',1), -(11,5,198,'One-Handed Maces',1), -(11,5,203,'Unarmed',1), -(11,5,204,'Defense',1), -(11,5,522,'SPELLDEFENSE(DND)',1), -(11,5,585,'Smite',1), -(11,5,668,'Language Common',1), -(11,5,2050,'Lesser Heal',1), -(11,5,2382,'Generic',1), -(11,5,2479,'Honorless Target',1), -(11,5,3050,'Detect',1), -(11,5,3365,'Opening',1), -(11,5,5009,'Wands',1), -(11,5,5019,'Shoot',1), -(11,5,6233,'Closing',1), -(11,5,6246,'Closing',1), -(11,5,6247,'Opening',1), -(11,5,6477,'Opening',1), -(11,5,6478,'Opening',1), -(11,5,6603,'Attack',1), -(11,5,7266,'Duel',1), -(11,5,7267,'Grovel',1), -(11,5,7355,'Stuck',1), -(11,5,8386,'Attacking',1), -(11,5,9078,'Cloth',1), -(11,5,9125,'Generic',1), -(11,5,20579,'Shadow Resistance',1), -(11,5,21651,'Opening',1), -(11,5,21652,'Closing',1), -(11,5,22027,'Remove Insignia',1), -(11,5,22810,'Opening - No Text',1), -(11,5,28875,'Gemcutting',1), -(11,5,28878,'Inspiring Presence',1), -(11,5,28880,'Gift of the Naaru',1), -(11,5,29932,'Language Draenei',1), -(11,6,81,'Dodge',1), -(11,6,196,'One-Handed Axes',1), -(11,6,197,'Two-Handed Axes',1), -(11,6,200,'Polearms',1), -(11,6,201,'One-Handed Swords',1), -(11,6,202,'Two-Handed Swords',1), -(11,6,203,'Unarmed',1), -(11,6,204,'Defense',1), -(11,6,522,'SPELLDEFENSE (DND)',1), -(11,6,668,'Language Common',1), -(11,6,674,'Dual Wield',1), -(11,6,750,'Plate Mail',1), -(11,6,1843,'Disarm',1), -(11,6,2382,'Generic',1), -(11,6,2479,'Honorless Target',1), -(11,6,3050,'Detect',1), -(11,6,3127,'Parry',1), -(11,6,3275,'Linen Bandage',1), -(11,6,3276,'Heavy Linen Bandage',1), -(11,6,3277,'Wool Bandage',1), -(11,6,3278,'Heavy Wool Bandage',1), -(11,6,3365,'Opening',1), -(11,6,6233,'Closing',1), -(11,6,6246,'Closing',1), -(11,6,6247,'Opening',1), -(11,6,6477,'Opening',1), -(11,6,6478,'Opening',1), -(11,6,6562,'Heroic Presence',1), -(11,6,6603,'Attack',1), -(11,6,7266,'Duel',1), -(11,6,7267,'Grovel',1), -(11,6,7355,'Stuck',1), -(11,6,7928,'Silk Bandage',1), -(11,6,7929,'Heavy Silk Bandage',1), -(11,6,7934,'Anti-Venom',1), -(11,6,8386,'Attacking',1), -(11,6,8737,'Mail',1), -(11,6,9077,'Leather',1), -(11,6,9078,'Cloth',1), -(11,6,9125,'Generic',1), -(11,6,10840,'Mageweave Bandage',1), -(11,6,10841,'Heavy Mageweave Bandage',1), -(11,6,10846,'First Aid',1), -(11,6,18629,'Runecloth Bandage',1), -(11,6,18630,'Heavy Runecloth Bandage',1), -(11,6,21651,'Opening',1), -(11,6,21652,'Closing',1), -(11,6,22027,'Remove Insignia',1), -(11,6,22810,'Opening - No Text',1), -(11,6,28875,'Gemcutting',1), -(11,6,29932,'Language Draenei',1), -(11,6,33391,'Journeyman Riding',1), -(11,6,45462,'Plague Strike',1), -(11,6,45477,'Icy Touch',1), -(11,6,45902,'Blood Strike',1), -(11,6,45903,'Offensive State (DND)',1), -(11,6,45927,'Summon Friend',1), -(11,6,47541,'Death Coil',1), -(11,6,48266,'Blood Presence',1), -(11,6,49410,'Forceful Deflection',1), -(11,6,49576,'Death Grip',1), -(11,6,52665,'Sigil',1), -(11,6,59539,'Shadow Resistance',1), -(11,6,59545,'Gift of the Naaru',1), -(11,6,59879,'Blood Plague',1), -(11,6,59921,'Frost Fever',1), -(11,6,61437,'Opening',1), -(11,6,61455,'Runic Focus',1), -(11,7,81,'Dodge',1), -(11,7,107,'Block',1), -(11,7,198,'One-Handed Maces',1), -(11,7,203,'Unarmed',1), -(11,7,204,'Defense',1), -(11,7,227,'Staves',1), -(11,7,331,'Healing Wave',1), -(11,7,403,'Lightning Bolt',1), -(11,7,522,'SPELLDEFENSE(DND)',1), -(11,7,668,'Language Common',1), -(11,7,2382,'Generic',1), -(11,7,2479,'Honorless Target',1), -(11,7,3050,'Detect',1), -(11,7,3365,'Opening',1), -(11,7,6233,'Closing',1), -(11,7,6246,'Closing',1), -(11,7,6247,'Opening',1), -(11,7,6477,'Opening',1), -(11,7,6478,'Opening',1), -(11,7,6603,'Attack',1), -(11,7,7266,'Duel',1), -(11,7,7267,'Grovel',1), -(11,7,7355,'Stuck',1), -(11,7,8386,'Attacking',1), -(11,7,9077,'Leather',1), -(11,7,9078,'Cloth',1), -(11,7,9116,'Shield',1), -(11,7,9125,'Generic',1), -(11,7,20579,'Shadow Resistance',1), -(11,7,21651,'Opening',1), -(11,7,21652,'Closing',1), -(11,7,22027,'Remove Insignia',1), -(11,7,22810,'Opening - No Text',1), -(11,7,27763,'Totem',1), -(11,7,28875,'Gemcutting',1), -(11,7,28878,'Inspiring Presence',1), -(11,7,28880,'Gift of the Naaru',1), -(11,7,29932,'Language Draenei',1), -(11,8,81,'Dodge',1), -(11,8,133,'Fireball',1), -(11,8,168,'Frost Armor',1), -(11,8,203,'Unarmed',1), -(11,8,204,'Defense',1), -(11,8,227,'Staves',1), -(11,8,522,'SPELLDEFENSE(DND)',1), -(11,8,668,'Language Common',1), -(11,8,2382,'Generic',1), -(11,8,2479,'Honorless Target',1), -(11,8,3050,'Detect',1), -(11,8,3365,'Opening',1), -(11,8,5009,'Wands',1), -(11,8,5019,'Shoot',1), -(11,8,6233,'Closing',1), -(11,8,6246,'Closing',1), -(11,8,6247,'Opening',1), -(11,8,6477,'Opening',1), -(11,8,6478,'Opening',1), -(11,8,6603,'Attack',1), -(11,8,7266,'Duel',1), -(11,8,7267,'Grovel',1), -(11,8,7355,'Stuck',1), -(11,8,8386,'Attacking',1), -(11,8,9078,'Cloth',1), -(11,8,9125,'Generic',1), -(11,8,20579,'Shadow Resistance',1), -(11,8,21651,'Opening',1), -(11,8,21652,'Closing',1), -(11,8,22027,'Remove Insignia',1), -(11,8,22810,'Opening - No Text',1), -(11,8,28875,'Gemcutting',1), -(11,8,28878,'Inspiring Presence',1), -(11,8,28880,'Gift of the Naaru',1), -(11,8,29932,'Language Draenei',1); +(1,1,78,'Heroic Strike'), +(1,1,81,'Dodge'), +(1,1,107,'Block'), +(1,1,196,'One-Handed Axes'), +(1,1,198,'One-Handed Maces'), +(1,1,201,'One-Handed Swords'), +(1,1,203,'Unarmed'), +(1,1,204,'Defense'), +(1,1,522,'SPELLDEFENSE (DND)'), +(1,1,668,'Language Common'), +(1,1,1843,'Disarm'), +(1,1,2382,'Generic'), +(1,1,2457,'Battle Stance'), +(1,1,2479,'Honorless Target'), +(1,1,3050,'Detect'), +(1,1,3365,'Opening'), +(1,1,5301,'Defensive State (DND)'), +(1,1,6233,'Closing'), +(1,1,6246,'Closing'), +(1,1,6247,'Opening'), +(1,1,6477,'Opening'), +(1,1,6478,'Opening'), +(1,1,6603,'Attack'), +(1,1,7266,'Duel'), +(1,1,7267,'Grovel'), +(1,1,7355,'Stuck'), +(1,1,8386,'Attacking'), +(1,1,8737,'Mail'), +(1,1,9077,'Leather'), +(1,1,9078,'Cloth'), +(1,1,9116,'Shield'), +(1,1,9125,'Generic'), +(1,1,20597,'Sword Specialization'), +(1,1,20598,'The Human Spirit'), +(1,1,20599,'Diplomacy'), +(1,1,20864,'Mace Specialization'), +(1,1,21651,'Opening'), +(1,1,21652,'Closing'), +(1,1,22027,'Remove Insignia'), +(1,1,22810,'Opening - No Text'), +(1,1,32215,'Victorious State'), +(1,1,45927,'Summon Friend'), +(1,1,58985,'Perception'), +(1,1,59752,'Every Man for Himself'), +(1,1,61437,'Opening'), +(1,2,81,'Dodge'), +(1,2,107,'Block'), +(1,2,198,'One-Handed Maces'), +(1,2,199,'Two-Handed Maces'), +(1,2,203,'Unarmed'), +(1,2,204,'Defense'), +(1,2,522,'SPELLDEFENSE (DND)'), +(1,2,635,'Holy Light'), +(1,2,668,'Language Common'), +(1,2,1843,'Disarm'), +(1,2,2382,'Generic'), +(1,2,2479,'Honorless Target'), +(1,2,3050,'Detect'), +(1,2,3365,'Opening'), +(1,2,6233,'Closing'), +(1,2,6246,'Closing'), +(1,2,6247,'Opening'), +(1,2,6477,'Opening'), +(1,2,6478,'Opening'), +(1,2,6603,'Attack'), +(1,2,7266,'Duel'), +(1,2,7267,'Grovel'), +(1,2,7355,'Stuck'), +(1,2,8386,'Attacking'), +(1,2,8737,'Mail'), +(1,2,9077,'Leather'), +(1,2,9078,'Cloth'), +(1,2,9116,'Shield'), +(1,2,9125,'Generic'), +(1,2,20154,'Seal of Righteousness'), +(1,2,20597,'Sword Specialization'), +(1,2,20598,'The Human Spirit'), +(1,2,20599,'Diplomacy'), +(1,2,20864,'Mace Specialization'), +(1,2,21651,'Opening'), +(1,2,21652,'Closing'), +(1,2,22027,'Remove Insignia'), +(1,2,22810,'Opening - No Text'), +(1,2,27762,'Libram'), +(1,2,45927,'Summon Friend'), +(1,2,58985,'Perception'), +(1,2,59752,'Every Man for Himself'), +(1,2,61437,'Opening'), +(1,4,81,'Dodge'), +(1,4,203,'Unarmed'), +(1,4,204,'Defense'), +(1,4,522,'SPELLDEFENSE (DND)'), +(1,4,668,'Language Common'), +(1,4,1180,'Daggers'), +(1,4,1752,'Sinister Strike'), +(1,4,1843,'Disarm'), +(1,4,2098,'Eviscerate'), +(1,4,2382,'Generic'), +(1,4,2479,'Honorless Target'), +(1,4,2567,'Thrown'), +(1,4,2764,'Throw'), +(1,4,3050,'Detect'), +(1,4,3365,'Opening'), +(1,4,6233,'Closing'), +(1,4,6246,'Closing'), +(1,4,6247,'Opening'), +(1,4,6477,'Opening'), +(1,4,6478,'Opening'), +(1,4,6603,'Attack'), +(1,4,7266,'Duel'), +(1,4,7267,'Grovel'), +(1,4,7355,'Stuck'), +(1,4,8386,'Attacking'), +(1,4,9077,'Leather'), +(1,4,9078,'Cloth'), +(1,4,9125,'Generic'), +(1,4,16092,'Defensive State (DND)'), +(1,4,20597,'Sword Specialization'), +(1,4,20598,'The Human Spirit'), +(1,4,20599,'Diplomacy'), +(1,4,20864,'Mace Specialization'), +(1,4,21184,'Rogue Passive (DND)'), +(1,4,21651,'Opening'), +(1,4,21652,'Closing'), +(1,4,22027,'Remove Insignia'), +(1,4,22810,'Opening - No Text'), +(1,4,45927,'Summon Friend'), +(1,4,58985,'Perception'), +(1,4,59752,'Every Man for Himself'), +(1,4,61437,'Opening'), +(1,5,81,'Dodge'), +(1,5,198,'One-Handed Maces'), +(1,5,203,'Unarmed'), +(1,5,204,'Defense'), +(1,5,522,'SPELLDEFENSE (DND)'), +(1,5,585,'Smite'), +(1,5,668,'Language Common'), +(1,5,1843,'Disarm'), +(1,5,2050,'Lesser Heal'), +(1,5,2382,'Generic'), +(1,5,2479,'Honorless Target'), +(1,5,3050,'Detect'), +(1,5,3365,'Opening'), +(1,5,5009,'Wands'), +(1,5,5019,'Shoot'), +(1,5,6233,'Closing'), +(1,5,6246,'Closing'), +(1,5,6247,'Opening'), +(1,5,6477,'Opening'), +(1,5,6478,'Opening'), +(1,5,6603,'Attack'), +(1,5,7266,'Duel'), +(1,5,7267,'Grovel'), +(1,5,7355,'Stuck'), +(1,5,8386,'Attacking'), +(1,5,9078,'Cloth'), +(1,5,9125,'Generic'), +(1,5,20597,'Sword Specialization'), +(1,5,20598,'The Human Spirit'), +(1,5,20599,'Diplomacy'), +(1,5,20864,'Mace Specialization'), +(1,5,21651,'Opening'), +(1,5,21652,'Closing'), +(1,5,22027,'Remove Insignia'), +(1,5,22810,'Opening - No Text'), +(1,5,45927,'Summon Friend'), +(1,5,58985,'Perception'), +(1,5,59752,'Every Man for Himself'), +(1,5,61437,'Opening'), +(1,6,81,'Dodge'), +(1,6,196,'One-Handed Axes'), +(1,6,197,'Two-Handed Axes'), +(1,6,200,'Polearms'), +(1,6,201,'One-Handed Swords'), +(1,6,202,'Two-Handed Swords'), +(1,6,203,'Unarmed'), +(1,6,204,'Defense'), +(1,6,522,'SPELLDEFENSE (DND)'), +(1,6,668,'Language Common'), +(1,6,674,'Dual Wield'), +(1,6,750,'Plate Mail'), +(1,6,1843,'Disarm'), +(1,6,2382,'Generic'), +(1,6,2479,'Honorless Target'), +(1,6,3050,'Detect'), +(1,6,3127,'Parry'), +(1,6,3275,'Linen Bandage'), +(1,6,3276,'Heavy Linen Bandage'), +(1,6,3277,'Wool Bandage'), +(1,6,3278,'Heavy Wool Bandage'), +(1,6,3365,'Opening'), +(1,6,6233,'Closing'), +(1,6,6246,'Closing'), +(1,6,6247,'Opening'), +(1,6,6477,'Opening'), +(1,6,6478,'Opening'), +(1,6,6603,'Attack'), +(1,6,7266,'Duel'), +(1,6,7267,'Grovel'), +(1,6,7355,'Stuck'), +(1,6,7928,'Silk Bandage'), +(1,6,7929,'Heavy Silk Bandage'), +(1,6,7934,'Anti-Venom'), +(1,6,8386,'Attacking'), +(1,6,8737,'Mail'), +(1,6,9077,'Leather'), +(1,6,9078,'Cloth'), +(1,6,9125,'Generic'), +(1,6,10840,'Mageweave Bandage'), +(1,6,10841,'Heavy Mageweave Bandage'), +(1,6,10846,'First Aid'), +(1,6,18629,'Runecloth Bandage'), +(1,6,18630,'Heavy Runecloth Bandage'), +(1,6,20597,'Sword Specialization'), +(1,6,20598,'The Human Spirit'), +(1,6,20599,'Diplomacy'), +(1,6,20864,'Mace Specialization'), +(1,6,21651,'Opening'), +(1,6,21652,'Closing'), +(1,6,22027,'Remove Insignia'), +(1,6,22810,'Opening - No Text'), +(1,6,33391,'Journeyman Riding'), +(1,6,45462,'Plague Strike'), +(1,6,45477,'Icy Touch'), +(1,6,45902,'Blood Strike'), +(1,6,45903,'Offensive State (DND)'), +(1,6,45927,'Summon Friend'), +(1,6,47541,'Death Coil'), +(1,6,48266,'Blood Presence'), +(1,6,49410,'Forceful Deflection'), +(1,6,49576,'Death Grip'), +(1,6,52665,'Sigil'), +(1,6,58985,'Perception'), +(1,6,59752,'Every Man for Himself'), +(1,6,59879,'Blood Plague'), +(1,6,59921,'Frost Fever'), +(1,6,61437,'Opening'), +(1,6,61455,'Runic Focus'), +(1,8,81,'Dodge'), +(1,8,133,'Fireball'), +(1,8,168,'Frost Armor'), +(1,8,203,'Unarmed'), +(1,8,204,'Defense'), +(1,8,227,'Staves'), +(1,8,522,'SPELLDEFENSE (DND)'), +(1,8,668,'Language Common'), +(1,8,1843,'Disarm'), +(1,8,2382,'Generic'), +(1,8,2479,'Honorless Target'), +(1,8,3050,'Detect'), +(1,8,3365,'Opening'), +(1,8,5009,'Wands'), +(1,8,5019,'Shoot'), +(1,8,6233,'Closing'), +(1,8,6246,'Closing'), +(1,8,6247,'Opening'), +(1,8,6477,'Opening'), +(1,8,6478,'Opening'), +(1,8,6603,'Attack'), +(1,8,7266,'Duel'), +(1,8,7267,'Grovel'), +(1,8,7355,'Stuck'), +(1,8,8386,'Attacking'), +(1,8,9078,'Cloth'), +(1,8,9125,'Generic'), +(1,8,20597,'Sword Specialization'), +(1,8,20598,'The Human Spirit'), +(1,8,20599,'Diplomacy'), +(1,8,20864,'Mace Specialization'), +(1,8,21651,'Opening'), +(1,8,21652,'Closing'), +(1,8,22027,'Remove Insignia'), +(1,8,22810,'Opening - No Text'), +(1,8,45927,'Summon Friend'), +(1,8,58985,'Perception'), +(1,8,59752,'Every Man for Himself'), +(1,8,61437,'Opening'), +(1,9,81,'Dodge'), +(1,9,203,'Unarmed'), +(1,9,204,'Defense'), +(1,9,522,'SPELLDEFENSE (DND)'), +(1,9,668,'Language Common'), +(1,9,686,'Shadow Bolt'), +(1,9,687,'Demon Skin'), +(1,9,1180,'Daggers'), +(1,9,1843,'Disarm'), +(1,9,2382,'Generic'), +(1,9,2479,'Honorless Target'), +(1,9,3050,'Detect'), +(1,9,3365,'Opening'), +(1,9,5009,'Wands'), +(1,9,5019,'Shoot'), +(1,9,6233,'Closing'), +(1,9,6246,'Closing'), +(1,9,6247,'Opening'), +(1,9,6477,'Opening'), +(1,9,6478,'Opening'), +(1,9,6603,'Attack'), +(1,9,7266,'Duel'), +(1,9,7267,'Grovel'), +(1,9,7355,'Stuck'), +(1,9,8386,'Attacking'), +(1,9,9078,'Cloth'), +(1,9,9125,'Generic'), +(1,9,20597,'Sword Specialization'), +(1,9,20598,'The Human Spirit'), +(1,9,20599,'Diplomacy'), +(1,9,20864,'Mace Specialization'), +(1,9,21651,'Opening'), +(1,9,21652,'Closing'), +(1,9,22027,'Remove Insignia'), +(1,9,22810,'Opening - No Text'), +(1,9,45927,'Summon Friend'), +(1,9,58284,'Chaos Bolt Passive'), +(1,9,58985,'Perception'), +(1,9,59752,'Every Man for Himself'), +(1,9,61437,'Opening'), +(2,1,78,'Heroic Strike'), +(2,1,81,'Dodge'), +(2,1,107,'Block'), +(2,1,196,'One-Handed Axes'), +(2,1,197,'Two-Handed Axes'), +(2,1,201,'One-Handed Swords'), +(2,1,203,'Unarmed'), +(2,1,204,'Defense'), +(2,1,522,'SPELLDEFENSE (DND)'), +(2,1,669,'Language Orcish'), +(2,1,1843,'Disarm'), +(2,1,2382,'Generic'), +(2,1,2457,'Battle Stance'), +(2,1,2479,'Honorless Target'), +(2,1,3050,'Detect'), +(2,1,3365,'Opening'), +(2,1,5301,'Defensive State (DND)'), +(2,1,6233,'Closing'), +(2,1,6246,'Closing'), +(2,1,6247,'Opening'), +(2,1,6477,'Opening'), +(2,1,6478,'Opening'), +(2,1,6603,'Attack'), +(2,1,7266,'Duel'), +(2,1,7267,'Grovel'), +(2,1,7355,'Stuck'), +(2,1,8386,'Attacking'), +(2,1,8737,'Mail'), +(2,1,9077,'Leather'), +(2,1,9078,'Cloth'), +(2,1,9116,'Shield'), +(2,1,9125,'Generic'), +(2,1,20572,'Blood Fury'), +(2,1,20573,'Hardiness'), +(2,1,20574,'Axe Specialization'), +(2,1,21563,'Command'), +(2,1,21651,'Opening'), +(2,1,21652,'Closing'), +(2,1,22027,'Remove Insignia'), +(2,1,22810,'Opening - No Text'), +(2,1,32215,'Victorious State'), +(2,1,45927,'Summon Friend'), +(2,1,61437,'Opening'), +(2,3,75,'Auto Shot'), +(2,3,81,'Dodge'), +(2,3,196,'One-Handed Axes'), +(2,3,203,'Unarmed'), +(2,3,204,'Defense'), +(2,3,264,'Bows'), +(2,3,522,'SPELLDEFENSE (DND)'), +(2,3,669,'Language Orcish'), +(2,3,1843,'Disarm'), +(2,3,2382,'Generic'), +(2,3,2479,'Honorless Target'), +(2,3,2973,'Raptor Strike'), +(2,3,3050,'Detect'), +(2,3,3365,'Opening'), +(2,3,6233,'Closing'), +(2,3,6246,'Closing'), +(2,3,6247,'Opening'), +(2,3,6477,'Opening'), +(2,3,6478,'Opening'), +(2,3,6603,'Attack'), +(2,3,7266,'Duel'), +(2,3,7267,'Grovel'), +(2,3,7355,'Stuck'), +(2,3,8386,'Attacking'), +(2,3,9077,'Leather'), +(2,3,9078,'Cloth'), +(2,3,9125,'Generic'), +(2,3,13358,'Defensive State (DND)'), +(2,3,20572,'Blood Fury'), +(2,3,20573,'Hardiness'), +(2,3,20574,'Axe Specialization'), +(2,3,20576,'Command'), +(2,3,21651,'Opening'), +(2,3,21652,'Closing'), +(2,3,22027,'Remove Insignia'), +(2,3,22810,'Opening - No Text'), +(2,3,24949,'Defensive State 2 (DND)'), +(2,3,34082,'Advantaged State (DND)'), +(2,3,45927,'Summon Friend'), +(2,3,61437,'Opening'), +(2,4,81,'Dodge'), +(2,4,203,'Unarmed'), +(2,4,204,'Defense'), +(2,4,522,'SPELLDEFENSE (DND)'), +(2,4,669,'Language Orcish'), +(2,4,1180,'Daggers'), +(2,4,1752,'Sinister Strike'), +(2,4,1843,'Disarm'), +(2,4,2098,'Eviscerate'), +(2,4,2382,'Generic'), +(2,4,2479,'Honorless Target'), +(2,4,2567,'Thrown'), +(2,4,2764,'Throw'), +(2,4,3050,'Detect'), +(2,4,3365,'Opening'), +(2,4,6233,'Closing'), +(2,4,6246,'Closing'), +(2,4,6247,'Opening'), +(2,4,6477,'Opening'), +(2,4,6478,'Opening'), +(2,4,6603,'Attack'), +(2,4,7266,'Duel'), +(2,4,7267,'Grovel'), +(2,4,7355,'Stuck'), +(2,4,8386,'Attacking'), +(2,4,9077,'Leather'), +(2,4,9078,'Cloth'), +(2,4,9125,'Generic'), +(2,4,16092,'Defensive State (DND)'), +(2,4,20572,'Blood Fury'), +(2,4,20573,'Hardiness'), +(2,4,20574,'Axe Specialization'), +(2,4,21184,'Rogue Passive (DND)'), +(2,4,21563,'Command'), +(2,4,21651,'Opening'), +(2,4,21652,'Closing'), +(2,4,22027,'Remove Insignia'), +(2,4,22810,'Opening - No Text'), +(2,4,45927,'Summon Friend'), +(2,4,61437,'Opening'), +(2,6,81,'Dodge'), +(2,6,196,'One-Handed Axes'), +(2,6,197,'Two-Handed Axes'), +(2,6,200,'Polearms'), +(2,6,201,'One-Handed Swords'), +(2,6,202,'Two-Handed Swords'), +(2,6,203,'Unarmed'), +(2,6,204,'Defense'), +(2,6,522,'SPELLDEFENSE (DND)'), +(2,6,669,'Language Orcish'), +(2,6,674,'Dual Wield'), +(2,6,750,'Plate Mail'), +(2,6,1843,'Disarm'), +(2,6,2382,'Generic'), +(2,6,2479,'Honorless Target'), +(2,6,3050,'Detect'), +(2,6,3127,'Parry'), +(2,6,3275,'Linen Bandage'), +(2,6,3276,'Heavy Linen Bandage'), +(2,6,3277,'Wool Bandage'), +(2,6,3278,'Heavy Wool Bandage'), +(2,6,3365,'Opening'), +(2,6,6233,'Closing'), +(2,6,6246,'Closing'), +(2,6,6247,'Opening'), +(2,6,6477,'Opening'), +(2,6,6478,'Opening'), +(2,6,6603,'Attack'), +(2,6,7266,'Duel'), +(2,6,7267,'Grovel'), +(2,6,7355,'Stuck'), +(2,6,7928,'Silk Bandage'), +(2,6,7929,'Heavy Silk Bandage'), +(2,6,7934,'Anti-Venom'), +(2,6,8386,'Attacking'), +(2,6,8737,'Mail'), +(2,6,9077,'Leather'), +(2,6,9078,'Cloth'), +(2,6,9125,'Generic'), +(2,6,10840,'Mageweave Bandage'), +(2,6,10841,'Heavy Mageweave Bandage'), +(2,6,10846,'First Aid'), +(2,6,18629,'Runecloth Bandage'), +(2,6,18630,'Heavy Runecloth Bandage'), +(2,6,20572,'Blood Fury'), +(2,6,20573,'Hardiness'), +(2,6,20574,'Axe Specialization'), +(2,6,21651,'Opening'), +(2,6,21652,'Closing'), +(2,6,22027,'Remove Insignia'), +(2,6,22810,'Opening - No Text'), +(2,6,33391,'Journeyman Riding'), +(2,6,45462,'Plague Strike'), +(2,6,45477,'Icy Touch'), +(2,6,45902,'Blood Strike'), +(2,6,45903,'Offensive State (DND)'), +(2,6,45927,'Summon Friend'), +(2,6,47541,'Death Coil'), +(2,6,48266,'Blood Presence'), +(2,6,49410,'Forceful Deflection'), +(2,6,49576,'Death Grip'), +(2,6,52665,'Sigil'), +(2,6,54562,'Command'), +(2,6,59879,'Blood Plague'), +(2,6,59921,'Frost Fever'), +(2,6,61437,'Opening'), +(2,6,61455,'Runic Focus'), +(2,7,81,'Dodge'), +(2,7,107,'Block'), +(2,7,198,'One-Handed Maces'), +(2,7,203,'Unarmed'), +(2,7,204,'Defense'), +(2,7,227,'Staves'), +(2,7,331,'Healing Wave'), +(2,7,403,'Lightning Bolt'), +(2,7,522,'SPELLDEFENSE (DND)'), +(2,7,669,'Language Orcish'), +(2,7,1843,'Disarm'), +(2,7,2382,'Generic'), +(2,7,2479,'Honorless Target'), +(2,7,3050,'Detect'), +(2,7,3365,'Opening'), +(2,7,6233,'Closing'), +(2,7,6246,'Closing'), +(2,7,6247,'Opening'), +(2,7,6477,'Opening'), +(2,7,6478,'Opening'), +(2,7,6603,'Attack'), +(2,7,7266,'Duel'), +(2,7,7267,'Grovel'), +(2,7,7355,'Stuck'), +(2,7,8386,'Attacking'), +(2,7,9077,'Leather'), +(2,7,9078,'Cloth'), +(2,7,9116,'Shield'), +(2,7,9125,'Generic'), +(2,7,20573,'Hardiness'), +(2,7,20574,'Axe Specialization'), +(2,7,21563,'Command'), +(2,7,21651,'Opening'), +(2,7,21652,'Closing'), +(2,7,22027,'Remove Insignia'), +(2,7,22810,'Opening - No Text'), +(2,7,27763,'Totem'), +(2,7,33697,'Blood Fury'), +(2,7,45927,'Summon Friend'), +(2,7,61437,'Opening'), +(2,9,81,'Dodge'), +(2,9,203,'Unarmed'), +(2,9,204,'Defense'), +(2,9,522,'SPELLDEFENSE (DND)'), +(2,9,669,'Language Orcish'), +(2,9,686,'Shadow Bolt'), +(2,9,687,'Demon Skin'), +(2,9,1180,'Daggers'), +(2,9,1843,'Disarm'), +(2,9,2382,'Generic'), +(2,9,2479,'Honorless Target'), +(2,9,3050,'Detect'), +(2,9,3365,'Opening'), +(2,9,5009,'Wands'), +(2,9,5019,'Shoot'), +(2,9,6233,'Closing'), +(2,9,6246,'Closing'), +(2,9,6247,'Opening'), +(2,9,6477,'Opening'), +(2,9,6478,'Opening'), +(2,9,6603,'Attack'), +(2,9,7266,'Duel'), +(2,9,7267,'Grovel'), +(2,9,7355,'Stuck'), +(2,9,8386,'Attacking'), +(2,9,9078,'Cloth'), +(2,9,9125,'Generic'), +(2,9,20573,'Hardiness'), +(2,9,20574,'Axe Specialization'), +(2,9,20575,'Command'), +(2,9,21651,'Opening'), +(2,9,21652,'Closing'), +(2,9,22027,'Remove Insignia'), +(2,9,22810,'Opening - No Text'), +(2,9,33702,'Blood Fury'), +(2,9,45927,'Summon Friend'), +(2,9,58284,'Chaos Bolt Passive'), +(2,9,61437,'Opening'), +(3,1,78,'Heroic Strike'), +(3,1,81,'Dodge'), +(3,1,107,'Block'), +(3,1,196,'One-Handed Axes'), +(3,1,197,'Two-Handed Axes'), +(3,1,198,'One-Handed Maces'), +(3,1,203,'Unarmed'), +(3,1,204,'Defense'), +(3,1,522,'SPELLDEFENSE (DND)'), +(3,1,668,'Language Common'), +(3,1,672,'Language Dwarven'), +(3,1,1843,'Disarm'), +(3,1,2382,'Generic'), +(3,1,2457,'Battle Stance'), +(3,1,2479,'Honorless Target'), +(3,1,2481,'Find Treasure'), +(3,1,3050,'Detect'), +(3,1,3365,'Opening'), +(3,1,5301,'Defensive State (DND)'), +(3,1,6233,'Closing'), +(3,1,6246,'Closing'), +(3,1,6247,'Opening'), +(3,1,6477,'Opening'), +(3,1,6478,'Opening'), +(3,1,6603,'Attack'), +(3,1,7266,'Duel'), +(3,1,7267,'Grovel'), +(3,1,7355,'Stuck'), +(3,1,8386,'Attacking'), +(3,1,8737,'Mail'), +(3,1,9077,'Leather'), +(3,1,9078,'Cloth'), +(3,1,9116,'Shield'), +(3,1,9125,'Generic'), +(3,1,20594,'Stoneform'), +(3,1,20595,'Gun Specialization'), +(3,1,20596,'Frost Resistance'), +(3,1,21651,'Opening'), +(3,1,21652,'Closing'), +(3,1,22027,'Remove Insignia'), +(3,1,22810,'Opening - No Text'), +(3,1,32215,'Victorious State'), +(3,1,45927,'Summon Friend'), +(3,1,59224,'Mace Specialization'), +(3,1,61437,'Opening'), +(3,2,81,'Dodge'), +(3,2,107,'Block'), +(3,2,198,'One-Handed Maces'), +(3,2,199,'Two-Handed Maces'), +(3,2,203,'Unarmed'), +(3,2,204,'Defense'), +(3,2,522,'SPELLDEFENSE (DND)'), +(3,2,635,'Holy Light'), +(3,2,668,'Language Common'), +(3,2,672,'Language Dwarven'), +(3,2,1843,'Disarm'), +(3,2,2382,'Generic'), +(3,2,2479,'Honorless Target'), +(3,2,2481,'Find Treasure'), +(3,2,3050,'Detect'), +(3,2,3365,'Opening'), +(3,2,6233,'Closing'), +(3,2,6246,'Closing'), +(3,2,6247,'Opening'), +(3,2,6477,'Opening'), +(3,2,6478,'Opening'), +(3,2,6603,'Attack'), +(3,2,7266,'Duel'), +(3,2,7267,'Grovel'), +(3,2,7355,'Stuck'), +(3,2,8386,'Attacking'), +(3,2,8737,'Mail'), +(3,2,9077,'Leather'), +(3,2,9078,'Cloth'), +(3,2,9116,'Shield'), +(3,2,9125,'Generic'), +(3,2,20154,'Seal of Righteousness'), +(3,2,20594,'Stoneform'), +(3,2,20595,'Gun Specialization'), +(3,2,20596,'Frost Resistance'), +(3,2,21651,'Opening'), +(3,2,21652,'Closing'), +(3,2,22027,'Remove Insignia'), +(3,2,22810,'Opening - No Text'), +(3,2,27762,'Libram'), +(3,2,45927,'Summon Friend'), +(3,2,59224,'Mace Specialization'), +(3,2,61437,'Opening'), +(3,3,75,'Auto Shot'), +(3,3,81,'Dodge'), +(3,3,196,'One-Handed Axes'), +(3,3,203,'Unarmed'), +(3,3,204,'Defense'), +(3,3,266,'Guns'), +(3,3,522,'SPELLDEFENSE (DND)'), +(3,3,668,'Language Common'), +(3,3,672,'Language Dwarven'), +(3,3,1843,'Disarm'), +(3,3,2382,'Generic'), +(3,3,2479,'Honorless Target'), +(3,3,2481,'Find Treasure'), +(3,3,2973,'Raptor Strike'), +(3,3,3050,'Detect'), +(3,3,3365,'Opening'), +(3,3,6233,'Closing'), +(3,3,6246,'Closing'), +(3,3,6247,'Opening'), +(3,3,6477,'Opening'), +(3,3,6478,'Opening'), +(3,3,6603,'Attack'), +(3,3,7266,'Duel'), +(3,3,7267,'Grovel'), +(3,3,7355,'Stuck'), +(3,3,8386,'Attacking'), +(3,3,9077,'Leather'), +(3,3,9078,'Cloth'), +(3,3,9125,'Generic'), +(3,3,13358,'Defensive State (DND)'), +(3,3,20594,'Stoneform'), +(3,3,20595,'Gun Specialization'), +(3,3,20596,'Frost Resistance'), +(3,3,21651,'Opening'), +(3,3,21652,'Closing'), +(3,3,22027,'Remove Insignia'), +(3,3,22810,'Opening - No Text'), +(3,3,24949,'Defensive State 2 (DND)'), +(3,3,34082,'Advantaged State (DND)'), +(3,3,45927,'Summon Friend'), +(3,3,59224,'Mace Specialization'), +(3,3,61437,'Opening'), +(3,4,81,'Dodge'), +(3,4,203,'Unarmed'), +(3,4,204,'Defense'), +(3,4,522,'SPELLDEFENSE (DND)'), +(3,4,668,'Language Common'), +(3,4,672,'Language Dwarven'), +(3,4,1180,'Daggers'), +(3,4,1752,'Sinister Strike'), +(3,4,1843,'Disarm'), +(3,4,2098,'Eviscerate'), +(3,4,2382,'Generic'), +(3,4,2479,'Honorless Target'), +(3,4,2481,'Find Treasure'), +(3,4,2567,'Thrown'), +(3,4,2764,'Throw'), +(3,4,3050,'Detect'), +(3,4,3365,'Opening'), +(3,4,6233,'Closing'), +(3,4,6246,'Closing'), +(3,4,6247,'Opening'), +(3,4,6477,'Opening'), +(3,4,6478,'Opening'), +(3,4,6603,'Attack'), +(3,4,7266,'Duel'), +(3,4,7267,'Grovel'), +(3,4,7355,'Stuck'), +(3,4,8386,'Attacking'), +(3,4,9077,'Leather'), +(3,4,9078,'Cloth'), +(3,4,9125,'Generic'), +(3,4,16092,'Defensive State (DND)'), +(3,4,20594,'Stoneform'), +(3,4,20595,'Gun Specialization'), +(3,4,20596,'Frost Resistance'), +(3,4,21184,'Rogue Passive (DND)'), +(3,4,21651,'Opening'), +(3,4,21652,'Closing'), +(3,4,22027,'Remove Insignia'), +(3,4,22810,'Opening - No Text'), +(3,4,45927,'Summon Friend'), +(3,4,59224,'Mace Specialization'), +(3,4,61437,'Opening'), +(3,5,81,'Dodge'), +(3,5,198,'One-Handed Maces'), +(3,5,203,'Unarmed'), +(3,5,204,'Defense'), +(3,5,522,'SPELLDEFENSE (DND)'), +(3,5,585,'Smite'), +(3,5,668,'Language Common'), +(3,5,672,'Language Dwarven'), +(3,5,1843,'Disarm'), +(3,5,2050,'Lesser Heal'), +(3,5,2382,'Generic'), +(3,5,2479,'Honorless Target'), +(3,5,2481,'Find Treasure'), +(3,5,3050,'Detect'), +(3,5,3365,'Opening'), +(3,5,5009,'Wands'), +(3,5,5019,'Shoot'), +(3,5,6233,'Closing'), +(3,5,6246,'Closing'), +(3,5,6247,'Opening'), +(3,5,6477,'Opening'), +(3,5,6478,'Opening'), +(3,5,6603,'Attack'), +(3,5,7266,'Duel'), +(3,5,7267,'Grovel'), +(3,5,7355,'Stuck'), +(3,5,8386,'Attacking'), +(3,5,9078,'Cloth'), +(3,5,9125,'Generic'), +(3,5,20594,'Stoneform'), +(3,5,20595,'Gun Specialization'), +(3,5,20596,'Frost Resistance'), +(3,5,21651,'Opening'), +(3,5,21652,'Closing'), +(3,5,22027,'Remove Insignia'), +(3,5,22810,'Opening - No Text'), +(3,5,45927,'Summon Friend'), +(3,5,59224,'Mace Specialization'), +(3,5,61437,'Opening'), +(3,6,81,'Dodge'), +(3,6,196,'One-Handed Axes'), +(3,6,197,'Two-Handed Axes'), +(3,6,200,'Polearms'), +(3,6,201,'One-Handed Swords'), +(3,6,202,'Two-Handed Swords'), +(3,6,203,'Unarmed'), +(3,6,204,'Defense'), +(3,6,522,'SPELLDEFENSE (DND)'), +(3,6,668,'Language Common'), +(3,6,672,'Language Dwarven'), +(3,6,674,'Dual Wield'), +(3,6,750,'Plate Mail'), +(3,6,1843,'Disarm'), +(3,6,2382,'Generic'), +(3,6,2479,'Honorless Target'), +(3,6,2481,'Find Treasure'), +(3,6,3050,'Detect'), +(3,6,3127,'Parry'), +(3,6,3275,'Linen Bandage'), +(3,6,3276,'Heavy Linen Bandage'), +(3,6,3277,'Wool Bandage'), +(3,6,3278,'Heavy Wool Bandage'), +(3,6,3365,'Opening'), +(3,6,6233,'Closing'), +(3,6,6246,'Closing'), +(3,6,6247,'Opening'), +(3,6,6477,'Opening'), +(3,6,6478,'Opening'), +(3,6,6603,'Attack'), +(3,6,7266,'Duel'), +(3,6,7267,'Grovel'), +(3,6,7355,'Stuck'), +(3,6,7928,'Silk Bandage'), +(3,6,7929,'Heavy Silk Bandage'), +(3,6,7934,'Anti-Venom'), +(3,6,8386,'Attacking'), +(3,6,8737,'Mail'), +(3,6,9077,'Leather'), +(3,6,9078,'Cloth'), +(3,6,9125,'Generic'), +(3,6,10840,'Mageweave Bandage'), +(3,6,10841,'Heavy Mageweave Bandage'), +(3,6,10846,'First Aid'), +(3,6,18629,'Runecloth Bandage'), +(3,6,18630,'Heavy Runecloth Bandage'), +(3,6,20594,'Stoneform'), +(3,6,20595,'Gun Specialization'), +(3,6,20596,'Frost Resistance'), +(3,6,21651,'Opening'), +(3,6,21652,'Closing'), +(3,6,22027,'Remove Insignia'), +(3,6,22810,'Opening - No Text'), +(3,6,33391,'Journeyman Riding'), +(3,6,45462,'Plague Strike'), +(3,6,45477,'Icy Touch'), +(3,6,45902,'Blood Strike'), +(3,6,45903,'Offensive State (DND)'), +(3,6,45927,'Summon Friend'), +(3,6,47541,'Death Coil'), +(3,6,48266,'Blood Presence'), +(3,6,49410,'Forceful Deflection'), +(3,6,49576,'Death Grip'), +(3,6,52665,'Sigil'), +(3,6,59224,'Mace Specialization'), +(3,6,59879,'Blood Plague'), +(3,6,59921,'Frost Fever'), +(3,6,61437,'Opening'), +(3,6,61455,'Runic Focus'), +(4,1,78,'Heroic Strike'), +(4,1,81,'Dodge'), +(4,1,107,'Block'), +(4,1,198,'One-Handed Maces'), +(4,1,201,'One-Handed Swords'), +(4,1,203,'Unarmed'), +(4,1,204,'Defense'), +(4,1,522,'SPELLDEFENSE (DND)'), +(4,1,668,'Language Common'), +(4,1,671,'Language Darnassian'), +(4,1,1180,'Daggers'), +(4,1,1843,'Disarm'), +(4,1,2382,'Generic'), +(4,1,2457,'Battle Stance'), +(4,1,2479,'Honorless Target'), +(4,1,3050,'Detect'), +(4,1,3365,'Opening'), +(4,1,5301,'Defensive State (DND)'), +(4,1,6233,'Closing'), +(4,1,6246,'Closing'), +(4,1,6247,'Opening'), +(4,1,6477,'Opening'), +(4,1,6478,'Opening'), +(4,1,6603,'Attack'), +(4,1,7266,'Duel'), +(4,1,7267,'Grovel'), +(4,1,7355,'Stuck'), +(4,1,8386,'Attacking'), +(4,1,8737,'Mail'), +(4,1,9077,'Leather'), +(4,1,9078,'Cloth'), +(4,1,9116,'Shield'), +(4,1,9125,'Generic'), +(4,1,20582,'Quickness'), +(4,1,20583,'Nature Resistance'), +(4,1,20585,'Wisp Spirit'), +(4,1,21651,'Opening'), +(4,1,21652,'Closing'), +(4,1,22027,'Remove Insignia'), +(4,1,22810,'Opening - No Text'), +(4,1,32215,'Victorious State'), +(4,1,45927,'Summon Friend'), +(4,1,58984,'Shadowmelt'), +(4,1,61437,'Opening'), +(4,3,75,'Auto Shot'), +(4,3,81,'Dodge'), +(4,3,203,'Unarmed'), +(4,3,204,'Defense'), +(4,3,264,'Bows'), +(4,3,522,'SPELLDEFENSE (DND)'), +(4,3,668,'Language Common'), +(4,3,671,'Language Darnassian'), +(4,3,1180,'Daggers'), +(4,3,1843,'Disarm'), +(4,3,2382,'Generic'), +(4,3,2479,'Honorless Target'), +(4,3,2973,'Raptor Strike'), +(4,3,3050,'Detect'), +(4,3,3365,'Opening'), +(4,3,6233,'Closing'), +(4,3,6246,'Closing'), +(4,3,6247,'Opening'), +(4,3,6477,'Opening'), +(4,3,6478,'Opening'), +(4,3,6603,'Attack'), +(4,3,7266,'Duel'), +(4,3,7267,'Grovel'), +(4,3,7355,'Stuck'), +(4,3,8386,'Attacking'), +(4,3,9077,'Leather'), +(4,3,9078,'Cloth'), +(4,3,9125,'Generic'), +(4,3,13358,'Defensive State (DND)'), +(4,3,20582,'Quickness'), +(4,3,20583,'Nature Resistance'), +(4,3,20585,'Wisp Spirit'), +(4,3,21651,'Opening'), +(4,3,21652,'Closing'), +(4,3,22027,'Remove Insignia'), +(4,3,22810,'Opening - No Text'), +(4,3,24949,'Defensive State 2 (DND)'), +(4,3,34082,'Advantaged State (DND)'), +(4,3,45927,'Summon Friend'), +(4,3,58984,'Shadowmelt'), +(4,3,61437,'Opening'), +(4,4,81,'Dodge'), +(4,4,203,'Unarmed'), +(4,4,204,'Defense'), +(4,4,522,'SPELLDEFENSE (DND)'), +(4,4,668,'Language Common'), +(4,4,671,'Language Darnassian'), +(4,4,1180,'Daggers'), +(4,4,1752,'Sinister Strike'), +(4,4,1843,'Disarm'), +(4,4,2098,'Eviscerate'), +(4,4,2382,'Generic'), +(4,4,2479,'Honorless Target'), +(4,4,2567,'Thrown'), +(4,4,2764,'Throw'), +(4,4,3050,'Detect'), +(4,4,3365,'Opening'), +(4,4,6233,'Closing'), +(4,4,6246,'Closing'), +(4,4,6247,'Opening'), +(4,4,6477,'Opening'), +(4,4,6478,'Opening'), +(4,4,6603,'Attack'), +(4,4,7266,'Duel'), +(4,4,7267,'Grovel'), +(4,4,7355,'Stuck'), +(4,4,8386,'Attacking'), +(4,4,9077,'Leather'), +(4,4,9078,'Cloth'), +(4,4,9125,'Generic'), +(4,4,16092,'Defensive State (DND)'), +(4,4,20582,'Quickness'), +(4,4,20583,'Nature Resistance'), +(4,4,20585,'Wisp Spirit'), +(4,4,21184,'Rogue Passive (DND)'), +(4,4,21651,'Opening'), +(4,4,21652,'Closing'), +(4,4,22027,'Remove Insignia'), +(4,4,22810,'Opening - No Text'), +(4,4,45927,'Summon Friend'), +(4,4,58984,'Shadowmelt'), +(4,4,61437,'Opening'), +(4,5,81,'Dodge'), +(4,5,198,'One-Handed Maces'), +(4,5,203,'Unarmed'), +(4,5,204,'Defense'), +(4,5,522,'SPELLDEFENSE (DND)'), +(4,5,585,'Smite'), +(4,5,668,'Language Common'), +(4,5,671,'Language Darnassian'), +(4,5,1843,'Disarm'), +(4,5,2050,'Lesser Heal'), +(4,5,2382,'Generic'), +(4,5,2479,'Honorless Target'), +(4,5,3050,'Detect'), +(4,5,3365,'Opening'), +(4,5,5009,'Wands'), +(4,5,5019,'Shoot'), +(4,5,6233,'Closing'), +(4,5,6246,'Closing'), +(4,5,6247,'Opening'), +(4,5,6477,'Opening'), +(4,5,6478,'Opening'), +(4,5,6603,'Attack'), +(4,5,7266,'Duel'), +(4,5,7267,'Grovel'), +(4,5,7355,'Stuck'), +(4,5,8386,'Attacking'), +(4,5,9078,'Cloth'), +(4,5,9125,'Generic'), +(4,5,20582,'Quickness'), +(4,5,20583,'Nature Resistance'), +(4,5,20585,'Wisp Spirit'), +(4,5,21651,'Opening'), +(4,5,21652,'Closing'), +(4,5,22027,'Remove Insignia'), +(4,5,22810,'Opening - No Text'), +(4,5,45927,'Summon Friend'), +(4,5,58984,'Shadowmelt'), +(4,5,61437,'Opening'), +(4,6,81,'Dodge'), +(4,6,196,'One-Handed Axes'), +(4,6,197,'Two-Handed Axes'), +(4,6,200,'Polearms'), +(4,6,201,'One-Handed Swords'), +(4,6,202,'Two-Handed Swords'), +(4,6,203,'Unarmed'), +(4,6,204,'Defense'), +(4,6,522,'SPELLDEFENSE (DND)'), +(4,6,668,'Language Common'), +(4,6,671,'Language Darnassian'), +(4,6,674,'Dual Wield'), +(4,6,750,'Plate Mail'), +(4,6,1843,'Disarm'), +(4,6,2382,'Generic'), +(4,6,2479,'Honorless Target'), +(4,6,3050,'Detect'), +(4,6,3127,'Parry'), +(4,6,3275,'Linen Bandage'), +(4,6,3276,'Heavy Linen Bandage'), +(4,6,3277,'Wool Bandage'), +(4,6,3278,'Heavy Wool Bandage'), +(4,6,3365,'Opening'), +(4,6,6233,'Closing'), +(4,6,6246,'Closing'), +(4,6,6247,'Opening'), +(4,6,6477,'Opening'), +(4,6,6478,'Opening'), +(4,6,6603,'Attack'), +(4,6,7266,'Duel'), +(4,6,7267,'Grovel'), +(4,6,7355,'Stuck'), +(4,6,7928,'Silk Bandage'), +(4,6,7929,'Heavy Silk Bandage'), +(4,6,7934,'Anti-Venom'), +(4,6,8386,'Attacking'), +(4,6,8737,'Mail'), +(4,6,9077,'Leather'), +(4,6,9078,'Cloth'), +(4,6,9125,'Generic'), +(4,6,10840,'Mageweave Bandage'), +(4,6,10841,'Heavy Mageweave Bandage'), +(4,6,10846,'First Aid'), +(4,6,18629,'Runecloth Bandage'), +(4,6,18630,'Heavy Runecloth Bandage'), +(4,6,20582,'Quickness'), +(4,6,20583,'Nature Resistance'), +(4,6,20585,'Wisp Spirit'), +(4,6,21651,'Opening'), +(4,6,21652,'Closing'), +(4,6,22027,'Remove Insignia'), +(4,6,22810,'Opening - No Text'), +(4,6,33391,'Journeyman Riding'), +(4,6,45462,'Plague Strike'), +(4,6,45477,'Icy Touch'), +(4,6,45902,'Blood Strike'), +(4,6,45903,'Offensive State (DND)'), +(4,6,45927,'Summon Friend'), +(4,6,47541,'Death Coil'), +(4,6,48266,'Blood Presence'), +(4,6,49410,'Forceful Deflection'), +(4,6,49576,'Death Grip'), +(4,6,52665,'Sigil'), +(4,6,58984,'Shadowmeld'), +(4,6,59879,'Blood Plague'), +(4,6,59921,'Frost Fever'), +(4,6,61437,'Opening'), +(4,6,61455,'Runic Focus'), +(4,11,81,'Dodge'), +(4,11,203,'Unarmed'), +(4,11,204,'Defense'), +(4,11,227,'Staves'), +(4,11,522,'SPELLDEFENSE (DND)'), +(4,11,668,'Language Common'), +(4,11,671,'Language Darnassian'), +(4,11,1180,'Daggers'), +(4,11,1843,'Disarm'), +(4,11,2382,'Generic'), +(4,11,2479,'Honorless Target'), +(4,11,3050,'Detect'), +(4,11,3365,'Opening'), +(4,11,5176,'Wrath'), +(4,11,5185,'Healing Touch'), +(4,11,6233,'Closing'), +(4,11,6246,'Closing'), +(4,11,6247,'Opening'), +(4,11,6477,'Opening'), +(4,11,6478,'Opening'), +(4,11,6603,'Attack'), +(4,11,7266,'Duel'), +(4,11,7267,'Grovel'), +(4,11,7355,'Stuck'), +(4,11,8386,'Attacking'), +(4,11,9077,'Leather'), +(4,11,9078,'Cloth'), +(4,11,9125,'Generic'), +(4,11,20582,'Quickness'), +(4,11,20583,'Nature Resistance'), +(4,11,20585,'Wisp Spirit'), +(4,11,21651,'Opening'), +(4,11,21652,'Closing'), +(4,11,22027,'Remove Insignia'), +(4,11,22810,'Opening - No Text'), +(4,11,27764,'Fetish'), +(4,11,45927,'Summon Friend'), +(4,11,58984,'Shadowmelt'), +(4,11,61437,'Opening'), +(5,1,78,'Heroic Strike'), +(5,1,81,'Dodge'), +(5,1,107,'Block'), +(5,1,201,'One-Handed Swords'), +(5,1,202,'Two-Handed Swords'), +(5,1,203,'Unarmed'), +(5,1,204,'Defense'), +(5,1,522,'SPELLDEFENSE (DND)'), +(5,1,669,'Language Orcish'), +(5,1,1180,'Daggers'), +(5,1,1843,'Disarm'), +(5,1,2382,'Generic'), +(5,1,2457,'Battle Stance'), +(5,1,2479,'Honorless Target'), +(5,1,3050,'Detect'), +(5,1,3365,'Opening'), +(5,1,5227,'Underwater Breathing'), +(5,1,5301,'Defensive State (DND)'), +(5,1,6233,'Closing'), +(5,1,6246,'Closing'), +(5,1,6247,'Opening'), +(5,1,6477,'Opening'), +(5,1,6478,'Opening'), +(5,1,6603,'Attack'), +(5,1,7266,'Duel'), +(5,1,7267,'Grovel'), +(5,1,7355,'Stuck'), +(5,1,7744,'Will of the Forsaken'), +(5,1,8386,'Attacking'), +(5,1,8737,'Mail'), +(5,1,9077,'Leather'), +(5,1,9078,'Cloth'), +(5,1,9116,'Shield'), +(5,1,9125,'Generic'), +(5,1,17737,'Language Gutterspeak'), +(5,1,20577,'Cannibalize'), +(5,1,20579,'Shadow Resistance'), +(5,1,21651,'Opening'), +(5,1,21652,'Closing'), +(5,1,22027,'Remove Insignia'), +(5,1,22810,'Opening - No Text'), +(5,1,32215,'Victorious State'), +(5,1,45927,'Summon Friend'), +(5,1,61437,'Opening'), +(5,4,81,'Dodge'), +(5,4,203,'Unarmed'), +(5,4,204,'Defense'), +(5,4,522,'SPELLDEFENSE (DND)'), +(5,4,669,'Language Orcish'), +(5,4,1180,'Daggers'), +(5,4,1752,'Sinister Strike'), +(5,4,1843,'Disarm'), +(5,4,2098,'Eviscerate'), +(5,4,2382,'Generic'), +(5,4,2479,'Honorless Target'), +(5,4,2567,'Thrown'), +(5,4,2764,'Throw'), +(5,4,3050,'Detect'), +(5,4,3365,'Opening'), +(5,4,5227,'Underwater Breathing'), +(5,4,6233,'Closing'), +(5,4,6246,'Closing'), +(5,4,6247,'Opening'), +(5,4,6477,'Opening'), +(5,4,6478,'Opening'), +(5,4,6603,'Attack'), +(5,4,7266,'Duel'), +(5,4,7267,'Grovel'), +(5,4,7355,'Stuck'), +(5,4,7744,'Will of the Forsaken'), +(5,4,8386,'Attacking'), +(5,4,9077,'Leather'), +(5,4,9078,'Cloth'), +(5,4,9125,'Generic'), +(5,4,16092,'Defensive State (DND)'), +(5,4,17737,'Language Gutterspeak'), +(5,4,20577,'Cannibalize'), +(5,4,20579,'Shadow Resistance'), +(5,4,21184,'Rogue Passive (DND)'), +(5,4,21651,'Opening'), +(5,4,21652,'Closing'), +(5,4,22027,'Remove Insignia'), +(5,4,22810,'Opening - No Text'), +(5,4,45927,'Summon Friend'), +(5,4,61437,'Opening'), +(5,5,81,'Dodge'), +(5,5,198,'One-Handed Maces'), +(5,5,203,'Unarmed'), +(5,5,204,'Defense'), +(5,5,522,'SPELLDEFENSE (DND)'), +(5,5,585,'Smite'), +(5,5,669,'Language Orcish'), +(5,5,1843,'Disarm'), +(5,5,2050,'Lesser Heal'), +(5,5,2382,'Generic'), +(5,5,2479,'Honorless Target'), +(5,5,3050,'Detect'), +(5,5,3365,'Opening'), +(5,5,5009,'Wands'), +(5,5,5019,'Shoot'), +(5,5,5227,'Underwater Breathing'), +(5,5,6233,'Closing'), +(5,5,6246,'Closing'), +(5,5,6247,'Opening'), +(5,5,6477,'Opening'), +(5,5,6478,'Opening'), +(5,5,6603,'Attack'), +(5,5,7266,'Duel'), +(5,5,7267,'Grovel'), +(5,5,7355,'Stuck'), +(5,5,7744,'Will of the Forsaken'), +(5,5,8386,'Attacking'), +(5,5,9078,'Cloth'), +(5,5,9125,'Generic'), +(5,5,17737,'Language Gutterspeak'), +(5,5,20577,'Cannibalize'), +(5,5,20579,'Shadow Resistance'), +(5,5,21651,'Opening'), +(5,5,21652,'Closing'), +(5,5,22027,'Remove Insignia'), +(5,5,22810,'Opening - No Text'), +(5,5,45927,'Summon Friend'), +(5,5,61437,'Opening'), +(5,6,81,'Dodge'), +(5,6,196,'One-Handed Axes'), +(5,6,197,'Two-Handed Axes'), +(5,6,200,'Polearms'), +(5,6,201,'One-Handed Swords'), +(5,6,202,'Two-Handed Swords'), +(5,6,203,'Unarmed'), +(5,6,204,'Defense'), +(5,6,522,'SPELLDEFENSE (DND)'), +(5,6,669,'Language Orcish'), +(5,6,674,'Dual Wield'), +(5,6,750,'Plate Mail'), +(5,6,1843,'Disarm'), +(5,6,2382,'Generic'), +(5,6,2479,'Honorless Target'), +(5,6,3050,'Detect'), +(5,6,3127,'Parry'), +(5,6,3275,'Linen Bandage'), +(5,6,3276,'Heavy Linen Bandage'), +(5,6,3277,'Wool Bandage'), +(5,6,3278,'Heavy Wool Bandage'), +(5,6,3365,'Opening'), +(5,6,5227,'Underwater Breathing'), +(5,6,6233,'Closing'), +(5,6,6246,'Closing'), +(5,6,6247,'Opening'), +(5,6,6477,'Opening'), +(5,6,6478,'Opening'), +(5,6,6603,'Attack'), +(5,6,7266,'Duel'), +(5,6,7267,'Grovel'), +(5,6,7355,'Stuck'), +(5,6,7744,'Will of the Forsaken'), +(5,6,7928,'Silk Bandage'), +(5,6,7929,'Heavy Silk Bandage'), +(5,6,7934,'Anti-Venom'), +(5,6,8386,'Attacking'), +(5,6,8737,'Mail'), +(5,6,9077,'Leather'), +(5,6,9078,'Cloth'), +(5,6,9125,'Generic'), +(5,6,10840,'Mageweave Bandage'), +(5,6,10841,'Heavy Mageweave Bandage'), +(5,6,10846,'First Aid'), +(5,6,17737,'Language Gutterspeak'), +(5,6,18629,'Runecloth Bandage'), +(5,6,18630,'Heavy Runecloth Bandage'), +(5,6,20577,'Cannibalize'), +(5,6,20579,'Shadow Resistance'), +(5,6,21651,'Opening'), +(5,6,21652,'Closing'), +(5,6,22027,'Remove Insignia'), +(5,6,22810,'Opening - No Text'), +(5,6,33391,'Journeyman Riding'), +(5,6,45462,'Plague Strike'), +(5,6,45477,'Icy Touch'), +(5,6,45902,'Blood Strike'), +(5,6,45903,'Offensive State (DND)'), +(5,6,45927,'Summon Friend'), +(5,6,47541,'Death Coil'), +(5,6,48266,'Blood Presence'), +(5,6,49410,'Forceful Deflection'), +(5,6,49576,'Death Grip'), +(5,6,52665,'Sigil'), +(5,6,59879,'Blood Plague'), +(5,6,59921,'Frost Fever'), +(5,6,61437,'Opening'), +(5,6,61455,'Runic Focus'), +(5,8,81,'Dodge'), +(5,8,133,'Fireball'), +(5,8,168,'Frost Armor'), +(5,8,203,'Unarmed'), +(5,8,204,'Defense'), +(5,8,227,'Staves'), +(5,8,522,'SPELLDEFENSE (DND)'), +(5,8,669,'Language Orcish'), +(5,8,1843,'Disarm'), +(5,8,2382,'Generic'), +(5,8,2479,'Honorless Target'), +(5,8,3050,'Detect'), +(5,8,3365,'Opening'), +(5,8,5009,'Wands'), +(5,8,5019,'Shoot'), +(5,8,5227,'Underwater Breathing'), +(5,8,6233,'Closing'), +(5,8,6246,'Closing'), +(5,8,6247,'Opening'), +(5,8,6477,'Opening'), +(5,8,6478,'Opening'), +(5,8,6603,'Attack'), +(5,8,7266,'Duel'), +(5,8,7267,'Grovel'), +(5,8,7355,'Stuck'), +(5,8,7744,'Will of the Forsaken'), +(5,8,8386,'Attacking'), +(5,8,9078,'Cloth'), +(5,8,9125,'Generic'), +(5,8,17737,'Language Gutterspeak'), +(5,8,20577,'Cannibalize'), +(5,8,20579,'Shadow Resistance'), +(5,8,21651,'Opening'), +(5,8,21652,'Closing'), +(5,8,22027,'Remove Insignia'), +(5,8,22810,'Opening - No Text'), +(5,8,45927,'Summon Friend'), +(5,8,61437,'Opening'), +(5,9,81,'Dodge'), +(5,9,203,'Unarmed'), +(5,9,204,'Defense'), +(5,9,522,'SPELLDEFENSE (DND)'), +(5,9,669,'Language Orcish'), +(5,9,686,'Shadow Bolt'), +(5,9,687,'Demon Skin'), +(5,9,1180,'Daggers'), +(5,9,1843,'Disarm'), +(5,9,2382,'Generic'), +(5,9,2479,'Honorless Target'), +(5,9,3050,'Detect'), +(5,9,3365,'Opening'), +(5,9,5009,'Wands'), +(5,9,5019,'Shoot'), +(5,9,5227,'Underwater Breathing'), +(5,9,6233,'Closing'), +(5,9,6246,'Closing'), +(5,9,6247,'Opening'), +(5,9,6477,'Opening'), +(5,9,6478,'Opening'), +(5,9,6603,'Attack'), +(5,9,7266,'Duel'), +(5,9,7267,'Grovel'), +(5,9,7355,'Stuck'), +(5,9,7744,'Will of the Forsaken'), +(5,9,8386,'Attacking'), +(5,9,9078,'Cloth'), +(5,9,9125,'Generic'), +(5,9,17737,'Language Gutterspeak'), +(5,9,20577,'Cannibalize'), +(5,9,20579,'Shadow Resistance'), +(5,9,21651,'Opening'), +(5,9,21652,'Closing'), +(5,9,22027,'Remove Insignia'), +(5,9,22810,'Opening - No Text'), +(5,9,45927,'Summon Friend'), +(5,9,58284,'Chaos Bolt Passive'), +(5,9,61437,'Opening'), +(6,1,78,'Heroic Strike'), +(6,1,81,'Dodge'), +(6,1,107,'Block'), +(6,1,196,'One-Handed Axes'), +(6,1,198,'One-Handed Maces'), +(6,1,199,'Two-Handed Maces'), +(6,1,203,'Unarmed'), +(6,1,204,'Defense'), +(6,1,522,'SPELLDEFENSE (DND)'), +(6,1,669,'Language Orcish'), +(6,1,670,'Language Taurahe'), +(6,1,1843,'Disarm'), +(6,1,2382,'Generic'), +(6,1,2457,'Battle Stance'), +(6,1,2479,'Honorless Target'), +(6,1,3050,'Detect'), +(6,1,3365,'Opening'), +(6,1,5301,'Defensive State (DND)'), +(6,1,6233,'Closing'), +(6,1,6246,'Closing'), +(6,1,6247,'Opening'), +(6,1,6477,'Opening'), +(6,1,6478,'Opening'), +(6,1,6603,'Attack'), +(6,1,7266,'Duel'), +(6,1,7267,'Grovel'), +(6,1,7355,'Stuck'), +(6,1,8386,'Attacking'), +(6,1,8737,'Mail'), +(6,1,9077,'Leather'), +(6,1,9078,'Cloth'), +(6,1,9116,'Shield'), +(6,1,9125,'Generic'), +(6,1,20549,'War Stomp'), +(6,1,20550,'Endurance'), +(6,1,20551,'Nature Resistance'), +(6,1,20552,'Cultivation'), +(6,1,21651,'Opening'), +(6,1,21652,'Closing'), +(6,1,22027,'Remove Insignia'), +(6,1,22810,'Opening - No Text'), +(6,1,32215,'Victorious State'), +(6,1,45927,'Summon Friend'), +(6,1,61437,'Opening'), +(6,3,75,'Auto Shot'), +(6,3,81,'Dodge'), +(6,3,196,'One-Handed Axes'), +(6,3,203,'Unarmed'), +(6,3,204,'Defense'), +(6,3,266,'Guns'), +(6,3,522,'SPELLDEFENSE (DND)'), +(6,3,669,'Language Orcish'), +(6,3,670,'Language Taurahe'), +(6,3,1843,'Disarm'), +(6,3,2382,'Generic'), +(6,3,2479,'Honorless Target'), +(6,3,2973,'Raptor Strike'), +(6,3,3050,'Detect'), +(6,3,3365,'Opening'), +(6,3,6233,'Closing'), +(6,3,6246,'Closing'), +(6,3,6247,'Opening'), +(6,3,6477,'Opening'), +(6,3,6478,'Opening'), +(6,3,6603,'Attack'), +(6,3,7266,'Duel'), +(6,3,7267,'Grovel'), +(6,3,7355,'Stuck'), +(6,3,8386,'Attacking'), +(6,3,9077,'Leather'), +(6,3,9078,'Cloth'), +(6,3,9125,'Generic'), +(6,3,13358,'Defensive State (DND)'), +(6,3,20549,'War Stomp'), +(6,3,20550,'Endurance'), +(6,3,20551,'Nature Resistance'), +(6,3,20552,'Cultivation'), +(6,3,21651,'Opening'), +(6,3,21652,'Closing'), +(6,3,22027,'Remove Insignia'), +(6,3,22810,'Opening - No Text'), +(6,3,24949,'Defensive State 2 (DND)'), +(6,3,34082,'Advantaged State (DND)'), +(6,3,45927,'Summon Friend'), +(6,3,61437,'Opening'), +(6,6,81,'Dodge'), +(6,6,196,'One-Handed Axes'), +(6,6,197,'Two-Handed Axes'), +(6,6,200,'Polearms'), +(6,6,201,'One-Handed Swords'), +(6,6,202,'Two-Handed Swords'), +(6,6,203,'Unarmed'), +(6,6,204,'Defense'), +(6,6,522,'SPELLDEFENSE (DND)'), +(6,6,669,'Language Orcish'), +(6,6,670,'Language Taurahe'), +(6,6,674,'Dual Wield'), +(6,6,750,'Plate Mail'), +(6,6,1843,'Disarm'), +(6,6,2382,'Generic'), +(6,6,2479,'Honorless Target'), +(6,6,3050,'Detect'), +(6,6,3127,'Parry'), +(6,6,3275,'Linen Bandage'), +(6,6,3276,'Heavy Linen Bandage'), +(6,6,3277,'Wool Bandage'), +(6,6,3278,'Heavy Wool Bandage'), +(6,6,3365,'Opening'), +(6,6,6233,'Closing'), +(6,6,6246,'Closing'), +(6,6,6247,'Opening'), +(6,6,6477,'Opening'), +(6,6,6478,'Opening'), +(6,6,6603,'Attack'), +(6,6,7266,'Duel'), +(6,6,7267,'Grovel'), +(6,6,7355,'Stuck'), +(6,6,7928,'Silk Bandage'), +(6,6,7929,'Heavy Silk Bandage'), +(6,6,7934,'Anti-Venom'), +(6,6,8386,'Attacking'), +(6,6,8737,'Mail'), +(6,6,9077,'Leather'), +(6,6,9078,'Cloth'), +(6,6,9125,'Generic'), +(6,6,10840,'Mageweave Bandage'), +(6,6,10841,'Heavy Mageweave Bandage'), +(6,6,10846,'First Aid'), +(6,6,18629,'Runecloth Bandage'), +(6,6,18630,'Heavy Runecloth Bandage'), +(6,6,20549,'War Stomp'), +(6,6,20550,'Endurance'), +(6,6,20551,'Nature Resistance'), +(6,6,20552,'Cultivation'), +(6,6,21651,'Opening'), +(6,6,21652,'Closing'), +(6,6,22027,'Remove Insignia'), +(6,6,22810,'Opening - No Text'), +(6,6,33391,'Journeyman Riding'), +(6,6,45462,'Plague Strike'), +(6,6,45477,'Icy Touch'), +(6,6,45902,'Blood Strike'), +(6,6,45903,'Offensive State (DND)'), +(6,6,45927,'Summon Friend'), +(6,6,47541,'Death Coil'), +(6,6,48266,'Blood Presence'), +(6,6,49410,'Forceful Deflection'), +(6,6,49576,'Death Grip'), +(6,6,52665,'Sigil'), +(6,6,59879,'Blood Plague'), +(6,6,59921,'Frost Fever'), +(6,6,61437,'Opening'), +(6,6,61455,'Runic Focus'), +(6,7,81,'Dodge'), +(6,7,107,'Block'), +(6,7,198,'One-Handed Maces'), +(6,7,203,'Unarmed'), +(6,7,204,'Defense'), +(6,7,227,'Staves'), +(6,7,331,'Healing Wave'), +(6,7,403,'Lightning Bolt'), +(6,7,522,'SPELLDEFENSE (DND)'), +(6,7,669,'Language Orcish'), +(6,7,670,'Language Taurahe'), +(6,7,1843,'Disarm'), +(6,7,2382,'Generic'), +(6,7,2479,'Honorless Target'), +(6,7,3050,'Detect'), +(6,7,3365,'Opening'), +(6,7,6233,'Closing'), +(6,7,6246,'Closing'), +(6,7,6247,'Opening'), +(6,7,6477,'Opening'), +(6,7,6478,'Opening'), +(6,7,6603,'Attack'), +(6,7,7266,'Duel'), +(6,7,7267,'Grovel'), +(6,7,7355,'Stuck'), +(6,7,8386,'Attacking'), +(6,7,9077,'Leather'), +(6,7,9078,'Cloth'), +(6,7,9116,'Shield'), +(6,7,9125,'Generic'), +(6,7,20549,'War Stomp'), +(6,7,20550,'Endurance'), +(6,7,20551,'Nature Resistance'), +(6,7,20552,'Cultivation'), +(6,7,21651,'Opening'), +(6,7,21652,'Closing'), +(6,7,22027,'Remove Insignia'), +(6,7,22810,'Opening - No Text'), +(6,7,27763,'Totem'), +(6,7,45927,'Summon Friend'), +(6,7,61437,'Opening'), +(6,11,81,'Dodge'), +(6,11,198,'One-Handed Maces'), +(6,11,203,'Unarmed'), +(6,11,204,'Defense'), +(6,11,227,'Staves'), +(6,11,522,'SPELLDEFENSE (DND)'), +(6,11,669,'Language Orcish'), +(6,11,670,'Language Taurahe'), +(6,11,1843,'Disarm'), +(6,11,2382,'Generic'), +(6,11,2479,'Honorless Target'), +(6,11,3050,'Detect'), +(6,11,3365,'Opening'), +(6,11,5176,'Wrath'), +(6,11,5185,'Healing Touch'), +(6,11,6233,'Closing'), +(6,11,6246,'Closing'), +(6,11,6247,'Opening'), +(6,11,6477,'Opening'), +(6,11,6478,'Opening'), +(6,11,6603,'Attack'), +(6,11,7266,'Duel'), +(6,11,7267,'Grovel'), +(6,11,7355,'Stuck'), +(6,11,8386,'Attacking'), +(6,11,9077,'Leather'), +(6,11,9078,'Cloth'), +(6,11,9125,'Generic'), +(6,11,20549,'War Stomp'), +(6,11,20550,'Endurance'), +(6,11,20551,'Nature Resistance'), +(6,11,20552,'Cultivation'), +(6,11,21651,'Opening'), +(6,11,21652,'Closing'), +(6,11,22027,'Remove Insignia'), +(6,11,22810,'Opening - No Text'), +(6,11,27764,'Fetish'), +(6,11,45927,'Summon Friend'), +(6,11,61437,'Opening'), +(7,1,78,'Heroic Strike'), +(7,1,81,'Dodge'), +(7,1,107,'Block'), +(7,1,198,'One-Handed Maces'), +(7,1,201,'One-Handed Swords'), +(7,1,203,'Unarmed'), +(7,1,204,'Defense'), +(7,1,522,'SPELLDEFENSE (DND)'), +(7,1,668,'Language Common'), +(7,1,1180,'Daggers'), +(7,1,1843,'Disarm'), +(7,1,2382,'Generic'), +(7,1,2457,'Battle Stance'), +(7,1,2479,'Honorless Target'), +(7,1,3050,'Detect'), +(7,1,3365,'Opening'), +(7,1,5301,'Defensive State (DND)'), +(7,1,6233,'Closing'), +(7,1,6246,'Closing'), +(7,1,6247,'Opening'), +(7,1,6477,'Opening'), +(7,1,6478,'Opening'), +(7,1,6603,'Attack'), +(7,1,7266,'Duel'), +(7,1,7267,'Grovel'), +(7,1,7340,'Language Gnomish'), +(7,1,7355,'Stuck'), +(7,1,8386,'Attacking'), +(7,1,8737,'Mail'), +(7,1,9077,'Leather'), +(7,1,9078,'Cloth'), +(7,1,9116,'Shield'), +(7,1,9125,'Generic'), +(7,1,20589,'Escape Artist'), +(7,1,20591,'Expansive Mind'), +(7,1,20592,'Arcane Resistance'), +(7,1,20593,'Engineering Specialization'), +(7,1,21651,'Opening'), +(7,1,21652,'Closing'), +(7,1,22027,'Remove Insignia'), +(7,1,22810,'Opening - No Text'), +(7,1,32215,'Victorious State'), +(7,1,45927,'Summon Friend'), +(7,1,61437,'Opening'), +(7,4,81,'Dodge'), +(7,4,203,'Unarmed'), +(7,4,204,'Defense'), +(7,4,522,'SPELLDEFENSE (DND)'), +(7,4,668,'Language Common'), +(7,4,1180,'Daggers'), +(7,4,1752,'Sinister Strike'), +(7,4,1843,'Disarm'), +(7,4,2098,'Eviscerate'), +(7,4,2382,'Generic'), +(7,4,2479,'Honorless Target'), +(7,4,2567,'Thrown'), +(7,4,2764,'Throw'), +(7,4,3050,'Detect'), +(7,4,3365,'Opening'), +(7,4,6233,'Closing'), +(7,4,6246,'Closing'), +(7,4,6247,'Opening'), +(7,4,6477,'Opening'), +(7,4,6478,'Opening'), +(7,4,6603,'Attack'), +(7,4,7266,'Duel'), +(7,4,7267,'Grovel'), +(7,4,7340,'Language Gnomish'), +(7,4,7355,'Stuck'), +(7,4,8386,'Attacking'), +(7,4,9077,'Leather'), +(7,4,9078,'Cloth'), +(7,4,9125,'Generic'), +(7,4,16092,'Defensive State (DND)'), +(7,4,20589,'Escape Artist'), +(7,4,20591,'Expansive Mind'), +(7,4,20592,'Arcane Resistance'), +(7,4,20593,'Engineering Specialization'), +(7,4,21184,'Rogue Passive (DND)'), +(7,4,21651,'Opening'), +(7,4,21652,'Closing'), +(7,4,22027,'Remove Insignia'), +(7,4,22810,'Opening - No Text'), +(7,4,45927,'Summon Friend'), +(7,4,61437,'Opening'), +(7,6,81,'Dodge'), +(7,6,196,'One-Handed Axes'), +(7,6,197,'Two-Handed Axes'), +(7,6,200,'Polearms'), +(7,6,201,'One-Handed Swords'), +(7,6,202,'Two-Handed Swords'), +(7,6,203,'Unarmed'), +(7,6,204,'Defense'), +(7,6,522,'SPELLDEFENSE (DND)'), +(7,6,668,'Language Common'), +(7,6,674,'Dual Wield'), +(7,6,750,'Plate Mail'), +(7,6,1843,'Disarm'), +(7,6,2382,'Generic'), +(7,6,2479,'Honorless Target'), +(7,6,3050,'Detect'), +(7,6,3127,'Parry'), +(7,6,3275,'Linen Bandage'), +(7,6,3276,'Heavy Linen Bandage'), +(7,6,3277,'Wool Bandage'), +(7,6,3278,'Heavy Wool Bandage'), +(7,6,3365,'Opening'), +(7,6,6233,'Closing'), +(7,6,6246,'Closing'), +(7,6,6247,'Opening'), +(7,6,6477,'Opening'), +(7,6,6478,'Opening'), +(7,6,6603,'Attack'), +(7,6,7266,'Duel'), +(7,6,7267,'Grovel'), +(7,6,7340,'Language Gnomish'), +(7,6,7355,'Stuck'), +(7,6,7928,'Silk Bandage'), +(7,6,7929,'Heavy Silk Bandage'), +(7,6,7934,'Anti-Venom'), +(7,6,8386,'Attacking'), +(7,6,8737,'Mail'), +(7,6,9077,'Leather'), +(7,6,9078,'Cloth'), +(7,6,9125,'Generic'), +(7,6,10840,'Mageweave Bandage'), +(7,6,10841,'Heavy Mageweave Bandage'), +(7,6,10846,'First Aid'), +(7,6,18629,'Runecloth Bandage'), +(7,6,18630,'Heavy Runecloth Bandage'), +(7,6,20589,'Escape Artist'), +(7,6,20591,'Expansive Mind'), +(7,6,20592,'Arcane Resistance'), +(7,6,20593,'Engineering Specialization'), +(7,6,21651,'Opening'), +(7,6,21652,'Closing'), +(7,6,22027,'Remove Insignia'), +(7,6,22810,'Opening - No Text'), +(7,6,33391,'Journeyman Riding'), +(7,6,45462,'Plague Strike'), +(7,6,45477,'Icy Touch'), +(7,6,45902,'Blood Strike'), +(7,6,45903,'Offensive State (DND)'), +(7,6,45927,'Summon Friend'), +(7,6,47541,'Death Coil'), +(7,6,48266,'Blood Presence'), +(7,6,49410,'Forceful Deflection'), +(7,6,49576,'Death Grip'), +(7,6,52665,'Sigil'), +(7,6,59879,'Blood Plague'), +(7,6,59921,'Frost Fever'), +(7,6,61437,'Opening'), +(7,6,61455,'Runic Focus'), +(7,8,81,'Dodge'), +(7,8,133,'Fireball'), +(7,8,168,'Frost Armor'), +(7,8,203,'Unarmed'), +(7,8,204,'Defense'), +(7,8,227,'Staves'), +(7,8,522,'SPELLDEFENSE (DND)'), +(7,8,668,'Language Common'), +(7,8,1843,'Disarm'), +(7,8,2382,'Generic'), +(7,8,2479,'Honorless Target'), +(7,8,3050,'Detect'), +(7,8,3365,'Opening'), +(7,8,5009,'Wands'), +(7,8,5019,'Shoot'), +(7,8,6233,'Closing'), +(7,8,6246,'Closing'), +(7,8,6247,'Opening'), +(7,8,6477,'Opening'), +(7,8,6478,'Opening'), +(7,8,6603,'Attack'), +(7,8,7266,'Duel'), +(7,8,7267,'Grovel'), +(7,8,7340,'Language Gnomish'), +(7,8,7355,'Stuck'), +(7,8,8386,'Attacking'), +(7,8,9078,'Cloth'), +(7,8,9125,'Generic'), +(7,8,20589,'Escape Artist'), +(7,8,20591,'Expansive Mind'), +(7,8,20592,'Arcane Resistance'), +(7,8,20593,'Engineering Specialization'), +(7,8,21651,'Opening'), +(7,8,21652,'Closing'), +(7,8,22027,'Remove Insignia'), +(7,8,22810,'Opening - No Text'), +(7,8,45927,'Summon Friend'), +(7,8,61437,'Opening'), +(7,9,81,'Dodge'), +(7,9,203,'Unarmed'), +(7,9,204,'Defense'), +(7,9,522,'SPELLDEFENSE (DND)'), +(7,9,668,'Language Common'), +(7,9,686,'Shadow Bolt'), +(7,9,687,'Demon Skin'), +(7,9,1180,'Daggers'), +(7,9,1843,'Disarm'), +(7,9,2382,'Generic'), +(7,9,2479,'Honorless Target'), +(7,9,3050,'Detect'), +(7,9,3365,'Opening'), +(7,9,5009,'Wands'), +(7,9,5019,'Shoot'), +(7,9,6233,'Closing'), +(7,9,6246,'Closing'), +(7,9,6247,'Opening'), +(7,9,6477,'Opening'), +(7,9,6478,'Opening'), +(7,9,6603,'Attack'), +(7,9,7266,'Duel'), +(7,9,7267,'Grovel'), +(7,9,7340,'Language Gnomish'), +(7,9,7355,'Stuck'), +(7,9,8386,'Attacking'), +(7,9,9078,'Cloth'), +(7,9,9125,'Generic'), +(7,9,20589,'Escape Artist'), +(7,9,20591,'Expansive Mind'), +(7,9,20592,'Arcane Resistance'), +(7,9,20593,'Engineering Specialization'), +(7,9,21651,'Opening'), +(7,9,21652,'Closing'), +(7,9,22027,'Remove Insignia'), +(7,9,22810,'Opening - No Text'), +(7,9,45927,'Summon Friend'), +(7,9,61437,'Opening'), +(8,1,78,'Heroic Strike'), +(8,1,81,'Dodge'), +(8,1,107,'Block'), +(8,1,196,'One-Handed Axes'), +(8,1,203,'Unarmed'), +(8,1,204,'Defense'), +(8,1,522,'SPELLDEFENSE (DND)'), +(8,1,669,'Language Orcish'), +(8,1,1180,'Daggers'), +(8,1,1843,'Disarm'), +(8,1,2382,'Generic'), +(8,1,2457,'Battle Stance'), +(8,1,2479,'Honorless Target'), +(8,1,2567,'Thrown'), +(8,1,2764,'Throw'), +(8,1,3050,'Detect'), +(8,1,3365,'Opening'), +(8,1,5301,'Defensive State (DND)'), +(8,1,6233,'Closing'), +(8,1,6246,'Closing'), +(8,1,6247,'Opening'), +(8,1,6477,'Opening'), +(8,1,6478,'Opening'), +(8,1,6603,'Attack'), +(8,1,7266,'Duel'), +(8,1,7267,'Grovel'), +(8,1,7341,'Language Troll'), +(8,1,7355,'Stuck'), +(8,1,8386,'Attacking'), +(8,1,8737,'Mail'), +(8,1,9077,'Leather'), +(8,1,9078,'Cloth'), +(8,1,9116,'Shield'), +(8,1,9125,'Generic'), +(8,1,20555,'Regeneration'), +(8,1,20557,'Beast Slaying'), +(8,1,20558,'Throwing Specialization'), +(8,1,21651,'Opening'), +(8,1,21652,'Closing'), +(8,1,22027,'Remove Insignia'), +(8,1,22810,'Opening - No Text'), +(8,1,26290,'Bow Specialization'), +(8,1,26296,'Berserking'), +(8,1,32215,'Victorious State'), +(8,1,45927,'Summon Friend'), +(8,1,58943,'Da Voodoo Shuffle'), +(8,1,61437,'Opening'), +(8,3,75,'Auto Shot'), +(8,3,81,'Dodge'), +(8,3,196,'One-Handed Axes'), +(8,3,203,'Unarmed'), +(8,3,204,'Defense'), +(8,3,264,'Bows'), +(8,3,522,'SPELLDEFENSE (DND)'), +(8,3,669,'Language Orcish'), +(8,3,1843,'Disarm'), +(8,3,2382,'Generic'), +(8,3,2479,'Honorless Target'), +(8,3,2973,'Raptor Strike'), +(8,3,3050,'Detect'), +(8,3,3365,'Opening'), +(8,3,6233,'Closing'), +(8,3,6246,'Closing'), +(8,3,6247,'Opening'), +(8,3,6477,'Opening'), +(8,3,6478,'Opening'), +(8,3,6603,'Attack'), +(8,3,7266,'Duel'), +(8,3,7267,'Grovel'), +(8,3,7341,'Language Troll'), +(8,3,7355,'Stuck'), +(8,3,8386,'Attacking'), +(8,3,9077,'Leather'), +(8,3,9078,'Cloth'), +(8,3,9125,'Generic'), +(8,3,13358,'Defensive State (DND)'), +(8,3,20554,'Berserking'), +(8,3,20555,'Regeneration'), +(8,3,20557,'Beast Slaying'), +(8,3,20558,'Throwing Specialization'), +(8,3,21651,'Opening'), +(8,3,21652,'Closing'), +(8,3,22027,'Remove Insignia'), +(8,3,22810,'Opening - No Text'), +(8,3,24949,'Defensive State 2 (DND)'), +(8,3,26290,'Bow Specialization'), +(8,3,34082,'Advantaged State (DND)'), +(8,3,45927,'Summon Friend'), +(8,3,58943,'Da Voodoo Shuffle'), +(8,3,61437,'Opening'), +(8,4,81,'Dodge'), +(8,4,203,'Unarmed'), +(8,4,204,'Defense'), +(8,4,522,'SPELLDEFENSE (DND)'), +(8,4,669,'Language Orcish'), +(8,4,1180,'Daggers'), +(8,4,1752,'Sinister Strike'), +(8,4,1843,'Disarm'), +(8,4,2098,'Eviscerate'), +(8,4,2382,'Generic'), +(8,4,2479,'Honorless Target'), +(8,4,2567,'Thrown'), +(8,4,2764,'Throw'), +(8,4,3050,'Detect'), +(8,4,3365,'Opening'), +(8,4,6233,'Closing'), +(8,4,6246,'Closing'), +(8,4,6247,'Opening'), +(8,4,6477,'Opening'), +(8,4,6478,'Opening'), +(8,4,6603,'Attack'), +(8,4,7266,'Duel'), +(8,4,7267,'Grovel'), +(8,4,7341,'Language Troll'), +(8,4,7355,'Stuck'), +(8,4,8386,'Attacking'), +(8,4,9077,'Leather'), +(8,4,9078,'Cloth'), +(8,4,9125,'Generic'), +(8,4,16092,'Defensive State (DND)'), +(8,4,20555,'Regeneration'), +(8,4,20557,'Beast Slaying'), +(8,4,20558,'Throwing Specialization'), +(8,4,21184,'Rogue Passive (DND)'), +(8,4,21651,'Opening'), +(8,4,21652,'Closing'), +(8,4,22027,'Remove Insignia'), +(8,4,22810,'Opening - No Text'), +(8,4,26290,'Bow Specialization'), +(8,4,26297,'Berserking'), +(8,4,45927,'Summon Friend'), +(8,4,58943,'Da Voodoo Shuffle'), +(8,4,61437,'Opening'), +(8,5,81,'Dodge'), +(8,5,198,'One-Handed Maces'), +(8,5,203,'Unarmed'), +(8,5,204,'Defense'), +(8,5,522,'SPELLDEFENSE (DND)'), +(8,5,585,'Smite'), +(8,5,669,'Language Orcish'), +(8,5,1843,'Disarm'), +(8,5,2050,'Lesser Heal'), +(8,5,2382,'Generic'), +(8,5,2479,'Honorless Target'), +(8,5,3050,'Detect'), +(8,5,3365,'Opening'), +(8,5,5009,'Wands'), +(8,5,5019,'Shoot'), +(8,5,6233,'Closing'), +(8,5,6246,'Closing'), +(8,5,6247,'Opening'), +(8,5,6477,'Opening'), +(8,5,6478,'Opening'), +(8,5,6603,'Attack'), +(8,5,7266,'Duel'), +(8,5,7267,'Grovel'), +(8,5,7341,'Language Troll'), +(8,5,7355,'Stuck'), +(8,5,8386,'Attacking'), +(8,5,9078,'Cloth'), +(8,5,9125,'Generic'), +(8,5,20554,'Berserking'), +(8,5,20555,'Regeneration'), +(8,5,20557,'Beast Slaying'), +(8,5,20558,'Throwing Specialization'), +(8,5,21651,'Opening'), +(8,5,21652,'Closing'), +(8,5,22027,'Remove Insignia'), +(8,5,22810,'Opening - No Text'), +(8,5,26290,'Bow Specialization'), +(8,5,45927,'Summon Friend'), +(8,5,58943,'Da Voodoo Shuffle'), +(8,5,61437,'Opening'), +(8,6,81,'Dodge'), +(8,6,196,'One-Handed Axes'), +(8,6,197,'Two-Handed Axes'), +(8,6,200,'Polearms'), +(8,6,201,'One-Handed Swords'), +(8,6,202,'Two-Handed Swords'), +(8,6,203,'Unarmed'), +(8,6,204,'Defense'), +(8,6,522,'SPELLDEFENSE (DND)'), +(8,6,669,'Language Orcish'), +(8,6,674,'Dual Wield'), +(8,6,750,'Plate Mail'), +(8,6,1843,'Disarm'), +(8,6,2382,'Generic'), +(8,6,2479,'Honorless Target'), +(8,6,3050,'Detect'), +(8,6,3127,'Parry'), +(8,6,3275,'Linen Bandage'), +(8,6,3276,'Heavy Linen Bandage'), +(8,6,3277,'Wool Bandage'), +(8,6,3278,'Heavy Wool Bandage'), +(8,6,3365,'Opening'), +(8,6,6233,'Closing'), +(8,6,6246,'Closing'), +(8,6,6247,'Opening'), +(8,6,6477,'Opening'), +(8,6,6478,'Opening'), +(8,6,6603,'Attack'), +(8,6,7266,'Duel'), +(8,6,7267,'Grovel'), +(8,6,7341,'Language Troll'), +(8,6,7355,'Stuck'), +(8,6,7928,'Silk Bandage'), +(8,6,7929,'Heavy Silk Bandage'), +(8,6,7934,'Anti-Venom'), +(8,6,8386,'Attacking'), +(8,6,8737,'Mail'), +(8,6,9077,'Leather'), +(8,6,9078,'Cloth'), +(8,6,9125,'Generic'), +(8,6,10840,'Mageweave Bandage'), +(8,6,10841,'Heavy Mageweave Bandage'), +(8,6,10846,'First Aid'), +(8,6,18629,'Runecloth Bandage'), +(8,6,18630,'Heavy Runecloth Bandage'), +(8,6,20555,'Regeneration'), +(8,6,20557,'Beast Slaying'), +(8,6,20558,'Throwing Specialization'), +(8,6,21651,'Opening'), +(8,6,21652,'Closing'), +(8,6,22027,'Remove Insignia'), +(8,6,22810,'Opening - No Text'), +(8,6,26290,'Bow Specialization'), +(8,6,33391,'Journeyman Riding'), +(8,6,45462,'Plague Strike'), +(8,6,45477,'Icy Touch'), +(8,6,45902,'Blood Strike'), +(8,6,45903,'Offensive State (DND)'), +(8,6,45927,'Summon Friend'), +(8,6,47541,'Death Coil'), +(8,6,48266,'Blood Presence'), +(8,6,49410,'Forceful Deflection'), +(8,6,49576,'Death Grip'), +(8,6,50621,'Berserking'), +(8,6,52665,'Sigil'), +(8,6,58943,'Da Voodoo Shuffle'), +(8,6,59879,'Blood Plague'), +(8,6,59921,'Frost Fever'), +(8,6,61437,'Opening'), +(8,6,61455,'Runic Focus'), +(8,7,81,'Dodge'), +(8,7,107,'Block'), +(8,7,198,'One-Handed Maces'), +(8,7,203,'Unarmed'), +(8,7,204,'Defense'), +(8,7,227,'Staves'), +(8,7,331,'Healing Wave'), +(8,7,403,'Lightning Bolt'), +(8,7,522,'SPELLDEFENSE (DND)'), +(8,7,669,'Language Orcish'), +(8,7,1843,'Disarm'), +(8,7,2382,'Generic'), +(8,7,2479,'Honorless Target'), +(8,7,3050,'Detect'), +(8,7,3365,'Opening'), +(8,7,6233,'Closing'), +(8,7,6246,'Closing'), +(8,7,6247,'Opening'), +(8,7,6477,'Opening'), +(8,7,6478,'Opening'), +(8,7,6603,'Attack'), +(8,7,7266,'Duel'), +(8,7,7267,'Grovel'), +(8,7,7341,'Language Troll'), +(8,7,7355,'Stuck'), +(8,7,8386,'Attacking'), +(8,7,9077,'Leather'), +(8,7,9078,'Cloth'), +(8,7,9116,'Shield'), +(8,7,9125,'Generic'), +(8,7,20554,'Berserking'), +(8,7,20555,'Regeneration'), +(8,7,20557,'Beast Slaying'), +(8,7,20558,'Throwing Specialization'), +(8,7,21651,'Opening'), +(8,7,21652,'Closing'), +(8,7,22027,'Remove Insignia'), +(8,7,22810,'Opening - No Text'), +(8,7,26290,'Bow Specialization'), +(8,7,27763,'Totem'), +(8,7,45927,'Summon Friend'), +(8,7,58943,'Da Voodoo Shuffle'), +(8,7,61437,'Opening'), +(8,8,81,'Dodge'), +(8,8,133,'Fireball'), +(8,8,168,'Frost Armor'), +(8,8,203,'Unarmed'), +(8,8,204,'Defense'), +(8,8,227,'Staves'), +(8,8,522,'SPELLDEFENSE (DND)'), +(8,8,669,'Language Orcish'), +(8,8,1843,'Disarm'), +(8,8,2382,'Generic'), +(8,8,2479,'Honorless Target'), +(8,8,3050,'Detect'), +(8,8,3365,'Opening'), +(8,8,5009,'Wands'), +(8,8,5019,'Shoot'), +(8,8,6233,'Closing'), +(8,8,6246,'Closing'), +(8,8,6247,'Opening'), +(8,8,6477,'Opening'), +(8,8,6478,'Opening'), +(8,8,6603,'Attack'), +(8,8,7266,'Duel'), +(8,8,7267,'Grovel'), +(8,8,7341,'Language Troll'), +(8,8,7355,'Stuck'), +(8,8,8386,'Attacking'), +(8,8,9078,'Cloth'), +(8,8,9125,'Generic'), +(8,8,20554,'Berserking'), +(8,8,20555,'Regeneration'), +(8,8,20557,'Beast Slaying'), +(8,8,20558,'Throwing Specialization'), +(8,8,21651,'Opening'), +(8,8,21652,'Closing'), +(8,8,22027,'Remove Insignia'), +(8,8,22810,'Opening - No Text'), +(8,8,26290,'Bow Specialization'), +(8,8,45927,'Summon Friend'), +(8,8,58943,'Da Voodoo Shuffle'), +(8,8,61437,'Opening'), +(10,2,81,'Dodge'), +(10,2,107,'Block'), +(10,2,201,'One-Handed Swords'), +(10,2,202,'Two-Handed Swords'), +(10,2,203,'Unarmed'), +(10,2,204,'Defense'), +(10,2,522,'SPELLDEFENSE (DND)'), +(10,2,635,'Holy Light'), +(10,2,669,'Language Orcish'), +(10,2,813,'Language Thalassian'), +(10,2,822,'Magic Resistance'), +(10,2,2382,'Generic'), +(10,2,2479,'Honorless Target'), +(10,2,3050,'Detect'), +(10,2,3365,'Opening'), +(10,2,6233,'Closing'), +(10,2,6246,'Closing'), +(10,2,6247,'Opening'), +(10,2,6477,'Opening'), +(10,2,6478,'Opening'), +(10,2,6603,'Attack'), +(10,2,7266,'Duel'), +(10,2,7267,'Grovel'), +(10,2,7355,'Stuck'), +(10,2,8386,'Attacking'), +(10,2,8737,'Mail'), +(10,2,9077,'Leather'), +(10,2,9078,'Cloth'), +(10,2,9116,'Shield'), +(10,2,9125,'Generic'), +(10,2,21084,'Seal of Righteousness'), +(10,2,21651,'Opening'), +(10,2,21652,'Closing'), +(10,2,22027,'Remove Insignia'), +(10,2,22810,'Opening - No Text'), +(10,2,27762,'Libram'), +(10,2,28730,'Arcane Torrent'), +(10,2,28734,'Mana Tap'), +(10,2,28877,'Arcane Affinity'), +(10,3,75,'Auto Shot'), +(10,3,81,'Dodge'), +(10,3,203,'Unarmed'), +(10,3,204,'Defense'), +(10,3,264,'Bows'), +(10,3,522,'SPELLDEFENSE (DND)'), +(10,3,669,'Language Orcish'), +(10,3,813,'Language Thalassian'), +(10,3,822,'Magic Resistance'), +(10,3,1180,'Daggers'), +(10,3,2382,'Generic'), +(10,3,2479,'Honorless Target'), +(10,3,2973,'Raptor Strike'), +(10,3,3050,'Detect'), +(10,3,3365,'Opening'), +(10,3,6233,'Closing'), +(10,3,6246,'Closing'), +(10,3,6247,'Opening'), +(10,3,6477,'Opening'), +(10,3,6478,'Opening'), +(10,3,6603,'Attack'), +(10,3,7266,'Duel'), +(10,3,7267,'Grovel'), +(10,3,7355,'Stuck'), +(10,3,8386,'Attacking'), +(10,3,9077,'Leather'), +(10,3,9078,'Cloth'), +(10,3,9125,'Generic'), +(10,3,13358,'Defensive State (DND)'), +(10,3,21651,'Opening'), +(10,3,21652,'Closing'), +(10,3,22027,'Remove Insignia'), +(10,3,22810,'Opening - No Text'), +(10,3,24949,'Defensive State 2 (DND)'), +(10,3,28730,'Arcane Torrent'), +(10,3,28734,'Mana Tap'), +(10,3,28877,'Arcane Affinity'), +(10,3,34082,'Advantaged State (DND)'), +(10,4,81,'Dodge'), +(10,4,203,'Unarmed'), +(10,4,204,'Defense'), +(10,4,522,'SPELLDEFENSE (DND)'), +(10,4,669,'Language Orcish'), +(10,4,813,'Language Thalassian'), +(10,4,822,'Magic Resistance'), +(10,4,1180,'Daggers'), +(10,4,1752,'Sinister Strike'), +(10,4,2098,'Eviscerate'), +(10,4,2382,'Generic'), +(10,4,2479,'Honorless Target'), +(10,4,2567,'Thrown'), +(10,4,2764,'Throw'), +(10,4,3050,'Detect'), +(10,4,3365,'Opening'), +(10,4,6233,'Closing'), +(10,4,6246,'Closing'), +(10,4,6247,'Opening'), +(10,4,6477,'Opening'), +(10,4,6478,'Opening'), +(10,4,6603,'Attack'), +(10,4,7266,'Duel'), +(10,4,7267,'Grovel'), +(10,4,7355,'Stuck'), +(10,4,8386,'Attacking'), +(10,4,9077,'Leather'), +(10,4,9078,'Cloth'), +(10,4,9125,'Generic'), +(10,4,16092,'Defensive State (DND)'), +(10,4,21184,'Rogue Passive (DND)'), +(10,4,21651,'Opening'), +(10,4,21652,'Closing'), +(10,4,22027,'Remove Insignia'), +(10,4,22810,'Opening - No Text'), +(10,4,25046,'Arcane Torrent'), +(10,4,28734,'Mana Tap'), +(10,4,28877,'Arcane Affinity'), +(10,5,81,'Dodge'), +(10,5,198,'One-Handed Maces'), +(10,5,203,'Unarmed'), +(10,5,204,'Defense'), +(10,5,522,'SPELLDEFENSE (DND)'), +(10,5,585,'Smite'), +(10,5,669,'Language Orcish'), +(10,5,813,'Language Thalassian'), +(10,5,822,'Magic Resistance'), +(10,5,2050,'Lesser Heal'), +(10,5,2382,'Generic'), +(10,5,2479,'Honorless Target'), +(10,5,3050,'Detect'), +(10,5,3365,'Opening'), +(10,5,5009,'Wands'), +(10,5,5019,'Shoot'), +(10,5,6233,'Closing'), +(10,5,6246,'Closing'), +(10,5,6247,'Opening'), +(10,5,6477,'Opening'), +(10,5,6478,'Opening'), +(10,5,6603,'Attack'), +(10,5,7266,'Duel'), +(10,5,7267,'Grovel'), +(10,5,7355,'Stuck'), +(10,5,8386,'Attacking'), +(10,5,9078,'Cloth'), +(10,5,9125,'Generic'), +(10,5,21651,'Opening'), +(10,5,21652,'Closing'), +(10,5,22027,'Remove Insignia'), +(10,5,22810,'Opening - No Text'), +(10,5,28730,'Arcane Torrent'), +(10,5,28734,'Mana Tap'), +(10,5,28877,'Arcane Affinity'), +(10,6,81,'Dodge'), +(10,6,196,'One-Handed Axes'), +(10,6,197,'Two-Handed Axes'), +(10,6,200,'Polearms'), +(10,6,201,'One-Handed Swords'), +(10,6,202,'Two-Handed Swords'), +(10,6,203,'Unarmed'), +(10,6,204,'Defense'), +(10,6,522,'SPELLDEFENSE (DND)'), +(10,6,669,'Language Orcish'), +(10,6,674,'Dual Wield'), +(10,6,750,'Plate Mail'), +(10,6,813,'Language Thalassian'), +(10,6,822,'Magic Resistance'), +(10,6,1843,'Disarm'), +(10,6,2382,'Generic'), +(10,6,2479,'Honorless Target'), +(10,6,3050,'Detect'), +(10,6,3127,'Parry'), +(10,6,3275,'Linen Bandage'), +(10,6,3276,'Heavy Linen Bandage'), +(10,6,3277,'Wool Bandage'), +(10,6,3278,'Heavy Wool Bandage'), +(10,6,3365,'Opening'), +(10,6,6233,'Closing'), +(10,6,6246,'Closing'), +(10,6,6247,'Opening'), +(10,6,6477,'Opening'), +(10,6,6478,'Opening'), +(10,6,6603,'Attack'), +(10,6,7266,'Duel'), +(10,6,7267,'Grovel'), +(10,6,7355,'Stuck'), +(10,6,7928,'Silk Bandage'), +(10,6,7929,'Heavy Silk Bandage'), +(10,6,7934,'Anti-Venom'), +(10,6,8386,'Attacking'), +(10,6,8737,'Mail'), +(10,6,9077,'Leather'), +(10,6,9078,'Cloth'), +(10,6,9125,'Generic'), +(10,6,10840,'Mageweave Bandage'), +(10,6,10841,'Heavy Mageweave Bandage'), +(10,6,10846,'First Aid'), +(10,6,18629,'Runecloth Bandage'), +(10,6,18630,'Heavy Runecloth Bandage'), +(10,6,21651,'Opening'), +(10,6,21652,'Closing'), +(10,6,22027,'Remove Insignia'), +(10,6,22810,'Opening - No Text'), +(10,6,28877,'Arcane Affinity'), +(10,6,33391,'Journeyman Riding'), +(10,6,45462,'Plague Strike'), +(10,6,45477,'Icy Touch'), +(10,6,45902,'Blood Strike'), +(10,6,45903,'Offensive State (DND)'), +(10,6,45927,'Summon Friend'), +(10,6,47541,'Death Coil'), +(10,6,48266,'Blood Presence'), +(10,6,49410,'Forceful Deflection'), +(10,6,49576,'Death Grip'), +(10,6,50613,'Arcane Torrent'), +(10,6,52665,'Sigil'), +(10,6,59879,'Blood Plague'), +(10,6,59921,'Frost Fever'), +(10,6,61437,'Opening'), +(10,6,61455,'Runic Focus'), +(10,8,81,'Dodge'), +(10,8,133,'Fireball'), +(10,8,168,'Frost Armor'), +(10,8,203,'Unarmed'), +(10,8,204,'Defense'), +(10,8,227,'Staves'), +(10,8,522,'SPELLDEFENSE (DND)'), +(10,8,669,'Language Orcish'), +(10,8,813,'Language Thalassian'), +(10,8,822,'Magic Resistance'), +(10,8,2382,'Generic'), +(10,8,2479,'Honorless Target'), +(10,8,3050,'Detect'), +(10,8,3365,'Opening'), +(10,8,5009,'Wands'), +(10,8,5019,'Shoot'), +(10,8,6233,'Closing'), +(10,8,6246,'Closing'), +(10,8,6247,'Opening'), +(10,8,6477,'Opening'), +(10,8,6478,'Opening'), +(10,8,6603,'Attack'), +(10,8,7266,'Duel'), +(10,8,7267,'Grovel'), +(10,8,7355,'Stuck'), +(10,8,8386,'Attacking'), +(10,8,9078,'Cloth'), +(10,8,9125,'Generic'), +(10,8,21651,'Opening'), +(10,8,21652,'Closing'), +(10,8,22027,'Remove Insignia'), +(10,8,22810,'Opening - No Text'), +(10,8,28730,'Arcane Torrent'), +(10,8,28734,'Mana Tap'), +(10,8,28877,'Arcane Affinity'), +(10,9,81,'Dodge'), +(10,9,203,'Unarmed'), +(10,9,204,'Defense'), +(10,9,522,'SPELLDEFENSE (DND)'), +(10,9,669,'Language Orcish'), +(10,9,686,'Shadow Bolt'), +(10,9,687,'Demon Skin'), +(10,9,813,'Language Thalassian'), +(10,9,822,'Magic Resistance'), +(10,9,1180,'Daggers'), +(10,9,2382,'Generic'), +(10,9,2479,'Honorless Target'), +(10,9,3050,'Detect'), +(10,9,3365,'Opening'), +(10,9,5009,'Wands'), +(10,9,5019,'Shoot'), +(10,9,6233,'Closing'), +(10,9,6246,'Closing'), +(10,9,6247,'Opening'), +(10,9,6477,'Opening'), +(10,9,6478,'Opening'), +(10,9,6603,'Attack'), +(10,9,7266,'Duel'), +(10,9,7267,'Grovel'), +(10,9,7355,'Stuck'), +(10,9,8386,'Attacking'), +(10,9,9078,'Cloth'), +(10,9,9125,'Generic'), +(10,9,21651,'Opening'), +(10,9,21652,'Closing'), +(10,9,22027,'Remove Insignia'), +(10,9,22810,'Opening - No Text'), +(10,9,28730,'Arcane Torrent'), +(10,9,28734,'Mana Tap'), +(10,9,28877,'Arcane Affinity'), +(11,1,78,'Heroic Strike'), +(11,1,81,'Dodge'), +(11,1,107,'Block'), +(11,1,198,'One-Handed Maces'), +(11,1,201,'One-Handed Swords'), +(11,1,202,'Two-Handed Swords'), +(11,1,203,'Unarmed'), +(11,1,204,'Defense'), +(11,1,522,'SPELLDEFENSE (DND)'), +(11,1,668,'Language Common'), +(11,1,1843,'Disarm'), +(11,1,2382,'Generic'), +(11,1,2457,'Battle Stance'), +(11,1,2479,'Honorless Target'), +(11,1,3050,'Detect'), +(11,1,3365,'Opening'), +(11,1,5301,'Defensive State (DND)'), +(11,1,6233,'Closing'), +(11,1,6246,'Closing'), +(11,1,6247,'Opening'), +(11,1,6477,'Opening'), +(11,1,6478,'Opening'), +(11,1,6562,'Heroic Presence'), +(11,1,6603,'Attack'), +(11,1,7266,'Duel'), +(11,1,7267,'Grovel'), +(11,1,7355,'Stuck'), +(11,1,8386,'Attacking'), +(11,1,8737,'Mail'), +(11,1,9077,'Leather'), +(11,1,9078,'Cloth'), +(11,1,9116,'Shield'), +(11,1,9125,'Generic'), +(11,1,21651,'Opening'), +(11,1,21652,'Closing'), +(11,1,22027,'Remove Insignia'), +(11,1,22810,'Opening - No Text'), +(11,1,28875,'Gemcutting'), +(11,1,28880,'Gift of the Naaru'), +(11,1,29932,'Language Draenei'), +(11,1,32215,'Victorious State'), +(11,1,45927,'Summon Friend'), +(11,1,59221,'Shadow Resistance'), +(11,1,61437,'Opening'), +(11,2,81,'Dodge'), +(11,2,107,'Block'), +(11,2,198,'One-Handed Maces'), +(11,2,199,'Two-Handed Maces'), +(11,2,203,'Unarmed'), +(11,2,204,'Defense'), +(11,2,522,'SPELLDEFENSE (DND)'), +(11,2,635,'Holy Light'), +(11,2,668,'Language Common'), +(11,2,1843,'Disarm'), +(11,2,2382,'Generic'), +(11,2,2479,'Honorless Target'), +(11,2,3050,'Detect'), +(11,2,3365,'Opening'), +(11,2,6233,'Closing'), +(11,2,6246,'Closing'), +(11,2,6247,'Opening'), +(11,2,6477,'Opening'), +(11,2,6478,'Opening'), +(11,2,6562,'Heroic Presence'), +(11,2,6603,'Attack'), +(11,2,7266,'Duel'), +(11,2,7267,'Grovel'), +(11,2,7355,'Stuck'), +(11,2,8386,'Attacking'), +(11,2,8737,'Mail'), +(11,2,9077,'Leather'), +(11,2,9078,'Cloth'), +(11,2,9116,'Shield'), +(11,2,9125,'Generic'), +(11,2,21084,'Seal of Righteousness'), +(11,2,21651,'Opening'), +(11,2,21652,'Closing'), +(11,2,22027,'Remove Insignia'), +(11,2,22810,'Opening - No Text'), +(11,2,27762,'Libram'), +(11,2,28875,'Gemcutting'), +(11,2,29932,'Language Draenei'), +(11,2,45927,'Summon Friend'), +(11,2,59221,'Shadow Resistance'), +(11,2,59542,'Gift of the Naaru'), +(11,2,61437,'Opening'), +(11,3,75,'Auto Shot'), +(11,3,81,'Dodge'), +(11,3,201,'One-Handed Swords'), +(11,3,203,'Unarmed'), +(11,3,204,'Defense'), +(11,3,522,'SPELLDEFENSE (DND)'), +(11,3,668,'Language Common'), +(11,3,1843,'Disarm'), +(11,3,2382,'Generic'), +(11,3,2479,'Honorless Target'), +(11,3,2973,'Raptor Strike'), +(11,3,3050,'Detect'), +(11,3,3365,'Opening'), +(11,3,5011,'Crossbows'), +(11,3,6233,'Closing'), +(11,3,6246,'Closing'), +(11,3,6247,'Opening'), +(11,3,6477,'Opening'), +(11,3,6478,'Opening'), +(11,3,6562,'Heroic Presence'), +(11,3,6603,'Attack'), +(11,3,7266,'Duel'), +(11,3,7267,'Grovel'), +(11,3,7355,'Stuck'), +(11,3,8386,'Attacking'), +(11,3,9077,'Leather'), +(11,3,9078,'Cloth'), +(11,3,9125,'Generic'), +(11,3,13358,'Defensive State (DND)'), +(11,3,21651,'Opening'), +(11,3,21652,'Closing'), +(11,3,22027,'Remove Insignia'), +(11,3,22810,'Opening - No Text'), +(11,3,24949,'Defensive State 2 (DND)'), +(11,3,28875,'Gemcutting'), +(11,3,29932,'Language Draenei'), +(11,3,34082,'Advantaged State (DND)'), +(11,3,45927,'Summon Friend'), +(11,3,59221,'Shadow Resistance'), +(11,3,59543,'Gift of the Naaru'), +(11,3,61437,'Opening'), +(11,5,81,'Dodge'), +(11,5,198,'One-Handed Maces'), +(11,5,203,'Unarmed'), +(11,5,204,'Defense'), +(11,5,522,'SPELLDEFENSE (DND)'), +(11,5,585,'Smite'), +(11,5,668,'Language Common'), +(11,5,1843,'Disarm'), +(11,5,2050,'Lesser Heal'), +(11,5,2382,'Generic'), +(11,5,2479,'Honorless Target'), +(11,5,3050,'Detect'), +(11,5,3365,'Opening'), +(11,5,5009,'Wands'), +(11,5,5019,'Shoot'), +(11,5,6233,'Closing'), +(11,5,6246,'Closing'), +(11,5,6247,'Opening'), +(11,5,6477,'Opening'), +(11,5,6478,'Opening'), +(11,5,6603,'Attack'), +(11,5,7266,'Duel'), +(11,5,7267,'Grovel'), +(11,5,7355,'Stuck'), +(11,5,8386,'Attacking'), +(11,5,9078,'Cloth'), +(11,5,9125,'Generic'), +(11,5,21651,'Opening'), +(11,5,21652,'Closing'), +(11,5,22027,'Remove Insignia'), +(11,5,22810,'Opening - No Text'), +(11,5,28875,'Gemcutting'), +(11,5,28878,'Inspiring Presence'), +(11,5,29932,'Language Draenei'), +(11,5,45927,'Summon Friend'), +(11,5,59221,'Shadow Resistance'), +(11,5,59544,'Gift of the Naaru'), +(11,5,61437,'Opening'), +(11,6,81,'Dodge'), +(11,6,196,'One-Handed Axes'), +(11,6,197,'Two-Handed Axes'), +(11,6,200,'Polearms'), +(11,6,201,'One-Handed Swords'), +(11,6,202,'Two-Handed Swords'), +(11,6,203,'Unarmed'), +(11,6,204,'Defense'), +(11,6,522,'SPELLDEFENSE (DND)'), +(11,6,668,'Language Common'), +(11,6,674,'Dual Wield'), +(11,6,750,'Plate Mail'), +(11,6,1843,'Disarm'), +(11,6,2382,'Generic'), +(11,6,2479,'Honorless Target'), +(11,6,3050,'Detect'), +(11,6,3127,'Parry'), +(11,6,3275,'Linen Bandage'), +(11,6,3276,'Heavy Linen Bandage'), +(11,6,3277,'Wool Bandage'), +(11,6,3278,'Heavy Wool Bandage'), +(11,6,3365,'Opening'), +(11,6,6233,'Closing'), +(11,6,6246,'Closing'), +(11,6,6247,'Opening'), +(11,6,6477,'Opening'), +(11,6,6478,'Opening'), +(11,6,6562,'Heroic Presence'), +(11,6,6603,'Attack'), +(11,6,7266,'Duel'), +(11,6,7267,'Grovel'), +(11,6,7355,'Stuck'), +(11,6,7928,'Silk Bandage'), +(11,6,7929,'Heavy Silk Bandage'), +(11,6,7934,'Anti-Venom'), +(11,6,8386,'Attacking'), +(11,6,8737,'Mail'), +(11,6,9077,'Leather'), +(11,6,9078,'Cloth'), +(11,6,9125,'Generic'), +(11,6,10840,'Mageweave Bandage'), +(11,6,10841,'Heavy Mageweave Bandage'), +(11,6,10846,'First Aid'), +(11,6,18629,'Runecloth Bandage'), +(11,6,18630,'Heavy Runecloth Bandage'), +(11,6,21651,'Opening'), +(11,6,21652,'Closing'), +(11,6,22027,'Remove Insignia'), +(11,6,22810,'Opening - No Text'), +(11,6,28875,'Gemcutting'), +(11,6,29932,'Language Draenei'), +(11,6,33391,'Journeyman Riding'), +(11,6,45462,'Plague Strike'), +(11,6,45477,'Icy Touch'), +(11,6,45902,'Blood Strike'), +(11,6,45903,'Offensive State (DND)'), +(11,6,45927,'Summon Friend'), +(11,6,47541,'Death Coil'), +(11,6,48266,'Blood Presence'), +(11,6,49410,'Forceful Deflection'), +(11,6,49576,'Death Grip'), +(11,6,52665,'Sigil'), +(11,6,59221,'Shadow Resistance'), +(11,6,59539,'Shadow Resistance'), +(11,6,59545,'Gift of the Naaru'), +(11,6,59879,'Blood Plague'), +(11,6,59921,'Frost Fever'), +(11,6,61437,'Opening'), +(11,6,61455,'Runic Focus'), +(11,7,81,'Dodge'), +(11,7,107,'Block'), +(11,7,198,'One-Handed Maces'), +(11,7,203,'Unarmed'), +(11,7,204,'Defense'), +(11,7,227,'Staves'), +(11,7,331,'Healing Wave'), +(11,7,403,'Lightning Bolt'), +(11,7,522,'SPELLDEFENSE (DND)'), +(11,7,668,'Language Common'), +(11,7,1843,'Disarm'), +(11,7,2382,'Generic'), +(11,7,2479,'Honorless Target'), +(11,7,3050,'Detect'), +(11,7,3365,'Opening'), +(11,7,6233,'Closing'), +(11,7,6246,'Closing'), +(11,7,6247,'Opening'), +(11,7,6477,'Opening'), +(11,7,6478,'Opening'), +(11,7,6603,'Attack'), +(11,7,7266,'Duel'), +(11,7,7267,'Grovel'), +(11,7,7355,'Stuck'), +(11,7,8386,'Attacking'), +(11,7,9077,'Leather'), +(11,7,9078,'Cloth'), +(11,7,9116,'Shield'), +(11,7,9125,'Generic'), +(11,7,21651,'Opening'), +(11,7,21652,'Closing'), +(11,7,22027,'Remove Insignia'), +(11,7,22810,'Opening - No Text'), +(11,7,27763,'Totem'), +(11,7,28875,'Gemcutting'), +(11,7,28878,'Inspiring Presence'), +(11,7,29932,'Language Draenei'), +(11,7,45927,'Summon Friend'), +(11,7,59221,'Shadow Resistance'), +(11,7,59547,'Gift of the Naaru'), +(11,7,61437,'Opening'), +(11,8,81,'Dodge'), +(11,8,133,'Fireball'), +(11,8,168,'Frost Armor'), +(11,8,203,'Unarmed'), +(11,8,204,'Defense'), +(11,8,227,'Staves'), +(11,8,522,'SPELLDEFENSE (DND)'), +(11,8,668,'Language Common'), +(11,8,1843,'Disarm'), +(11,8,2382,'Generic'), +(11,8,2479,'Honorless Target'), +(11,8,3050,'Detect'), +(11,8,3365,'Opening'), +(11,8,5009,'Wands'), +(11,8,5019,'Shoot'), +(11,8,6233,'Closing'), +(11,8,6246,'Closing'), +(11,8,6247,'Opening'), +(11,8,6477,'Opening'), +(11,8,6478,'Opening'), +(11,8,6603,'Attack'), +(11,8,7266,'Duel'), +(11,8,7267,'Grovel'), +(11,8,7355,'Stuck'), +(11,8,8386,'Attacking'), +(11,8,9078,'Cloth'), +(11,8,9125,'Generic'), +(11,8,21651,'Opening'), +(11,8,21652,'Closing'), +(11,8,22027,'Remove Insignia'), +(11,8,22810,'Opening - No Text'), +(11,8,28875,'Gemcutting'), +(11,8,28878,'Inspiring Presence'), +(11,8,29932,'Language Draenei'), +(11,8,45927,'Summon Friend'), +(11,8,59221,'Shadow Resistance'), +(11,8,59548,'Gift of the Naaru'), +(11,8,61437,'Opening'); /*!40000 ALTER TABLE `playercreateinfo_spell` ENABLE KEYS */; UNLOCK TABLES; @@ -13466,6 +13634,16 @@ INSERT INTO spell_chain VALUES (48159,34917,34914,4,0), (48160,48159,34914,5,0), /*------------------ +-- (129) First Aid +------------------*/ +/*First Aid*/ +(3273,0,3273,1,0), +(3274,3273,3273,2,0), +(7924,3274,3273,3,0), +(10846,7924,3273,4,0), +(27028,10846,3273,5,0), +(45542,27028,3273,6,0), +/*------------------ -- (134) Feral Combat (Druid) ------------------*/ /*Bash*/ @@ -13691,6 +13869,64 @@ INSERT INTO spell_chain VALUES (58431,27022,1510,5,0), (58434,58431,1510,6,0), /*------------------ +-- (164) Blacksmithing +------------------*/ +/*Blacksmithing*/ +(2018,0,2018,1,0), +(3100,2018,2018,2,0), +(3538,3100,2018,3,0), +(9785,3538,2018,4,0), +(9787,9785,2018,5,0), +(9788,9785,2018,5,0), +(29844,9785,2018,5,0), +(17039,9787,2018,6,0), +(17040,9787,2018,6,0), +(17041,9787,2018,6,0), +(51300,29844,2018,6,0), +/*------------------ +-- (165) Leatherworking +------------------*/ +/*Leatherworking*/ +(2108,0,2108,1,0), +(3104,2108,2108,2,0), +(3811,3104,2108,3,0), +(10662,3811,2108,4,0), +(10656,10662,2108,5,0), +(10658,10662,2108,5,0), +(10660,10662,2108,5,0), +(32549,10662,2108,5,0), +(51302,32549,2108,6,0), +/*------------------ +-- (171) Alchemy +------------------*/ +/* Alchemy */ +(2259,0,2259,1,0), +(3101,2259,2259,2,0), +(3464,3101,2259,3,0), +(11611,3464,2259,4,0), +(28596,11611,2259,5,0), +(28672,11611,2259,5,0), +(28675,11611,2259,5,0), +(28677,11611,2259,5,0), +(51304,28596,2259,6,0), +/*------------------ +-- (182) Herbalizm +------------------*/ +/*Herb Gathering*/ +(2366,0,2366,1,0), +(2368,2366,2366,2,0), +(3570,2368,2366,3,0), +(11993,3570,2366,4,0), +(28695,11993,2366,5,0), +(50300,28695,2366,6,0), +/*Lifeblood*/ +(55428,0,55428,1,0), +(55480,55428,55428,2,0), +(55500,55480,55428,3,0), +(55501,55500,55428,4,0), +(55502,55501,55428,5,0), +(55503,55502,55428,6,0), +/*------------------ -- (184) Retribution (Paladin) ------------------*/ /*Blessingof Might*/ @@ -13726,7 +13962,34 @@ INSERT INTO spell_chain VALUES (27150,10301,7294,6,0), (54043,27150,7294,7,0), /*------------------ ---(188) Pet - Imp +-- (185) Cooking +------------------*/ +/*Cooking*/ +(2550,0,2550,1,0), +(3102,2550,2550,2,0), +(3413,3102,2550,3,0), +(18260,3413,2550,4,0), +(33359,18260,2550,5,0), +(51296,33359,2550,6,0), +/*------------------ +-- (186) Mining +------------------*/ +/*Mining*/ +(2575,0,2575,1,0), +(2576,2575,2575,2,0), +(3564,2576,2575,3,0), +(10248,3564,2575,4,0), +(29354,10248,2575,5,0), +(50310,29354,2575,6,0), +/*Toughness*/ +(53120,0,53120,1,0), +(53121,53120,53120,2,0), +(53122,53121,53120,3,0), +(53123,53122,53120,4,0), +(53124,53123,53120,5,0), +(53040,53124,53120,6,0), +/*------------------ +-- (188) Pet - Imp ------------------*/ /*Blood Pact*/ (6307,0,6307,1,0), @@ -13775,6 +14038,19 @@ INSERT INTO spell_chain VALUES (19244,0,19244,1,0), (19647,19244,19244,2,0), /*------------------ +-- (197) Tailoring +------------------*/ +/*Tailoring*/ +(3908,0,3908,1,0), +(3909,3908,3908,2,0), +(3910,3909,3908,3,0), +(12180,3910,3908,4,0), +(26790,12180,3908,5,0), +(26797,12180,3908,5,0), +(26798,12180,3908,5,0), +(26801,12180,3908,5,0), +(51309,26790,3908,6,0), +/*------------------ --(203)Pet-Spider --(208)Pet-Wolf --(212)Pet-Crocolisk @@ -13796,6 +14072,18 @@ INSERT INTO spell_chain VALUES (52473,27050,17253,10,0), (52474,52473,17253,11,0), /*------------------ +-- (202) Engineering +------------------*/ +/*Engineering*/ +(4036,0,4036,1,0), +(4037,4036,4036,2,0), +(4038,4037,4036,3,0), +(12656,4038,4036,4,0), +(20219,12656,4036,5,0), +(20222,12656,4036,5,0), +(30350,12656,4036,5,0), +(51306,30350,4036,6,0), +/*------------------ -- (204) Pet - Voidwalker ------------------*/ /*Consume Shadows*/ @@ -14339,6 +14627,16 @@ INSERT INTO spell_chain VALUES (27047,14921,2649,8,0), (61676,27047,2649,9,0), /*------------------ +-- (333) Enchanting +------------------*/ +/*Enchanting*/ +(7411,0,7411,1,0), +(7412,7411,7411,2,0), +(7413,7412,7411,3,0), +(13920,7413,7411,4,0), +(28029,13920,7411,5,0), +(51313,28029,7411,6,0), +/*------------------ --(354)Demonology ------------------*/ /*Banish*/ @@ -14536,16 +14834,26 @@ INSERT INTO spell_chain VALUES (47841,30405,30108,4,0), (47843,47841,30108,5,0), /*------------------ ---(373)Enhancement +-- (356) Fishing ------------------*/ -/*FireResistanceTotem*/ +/*Fishing*/ +(7620,0,7620,1,0), +(7731,7620,7620,2,0), +(7732,7731,7620,3,0), +(18248,7732,7620,4,0), +(33095,18248,7620,5,0), +(51294,33095,7620,6,0), +/*------------------ +--(373) Enhancement +------------------*/ +/*Fire Resistance Totem*/ (8184,0,8184,1,0), (10537,8184,8184,2,0), (10538,10537,8184,3,0), (25563,10538,8184,4,0), (58737,25563,8184,5,0), (58739,58737,8184,6,0), -/*FlametongueTotem*/ +/*Flametongue Totem*/ (8227,0,8227,1,0), (8249,8227,8227,2,0), (10526,8249,8227,3,0), @@ -14554,7 +14862,7 @@ INSERT INTO spell_chain VALUES (58649,25557,8227,6,0), (58652,58649,8227,7,0), (58656,58652,8227,8,0), -/*FlametongueWeapon*/ +/*Flametongue Weapon*/ (8024,0,8024,1,0), (8027,8024,8024,2,0), (8030,8027,8024,3,0), @@ -14565,14 +14873,14 @@ INSERT INTO spell_chain VALUES (58785,25489,8024,8,0), (58789,58785,8024,9,0), (58790,58789,8024,10,0), -/*FrostResistanceTotem*/ +/*Frost Resistance Totem*/ (8181,0,8181,1,0), (10478,8181,8181,2,0), (10479,10478,8181,3,0), (25560,10479,8181,4,0), (58741,25560,8181,5,0), (58745,58741,8181,6,0), -/*FrostbrandWeapon*/ +/*Frostbrand Weapon*/ (8033,0,8033,1,0), (8038,8033,8033,2,0), (10456,8038,8033,3,0), @@ -14603,19 +14911,19 @@ INSERT INTO spell_chain VALUES (25472,25469,324,9,0), (49280,25472,324,10,0), (49281,49280,324,11,0), -/*NatureResistanceTotem*/ +/*Nature Resistance Totem*/ (10595,0,10595,1,0), (10600,10595,10595,2,0), (10601,10600,10595,3,0), (25574,10601,10595,4,0), (58746,25574,10595,5,0), (58749,58746,10595,6,0), -/*RockbiterWeapon*/ +/*Rockbiter Weapon*/ (8017,0,8017,1,0), (8018,8017,8017,2,0), (8019,8018,8017,3,0), (10399,8019,8017,4,0), -/*StoneskinTotem*/ +/*Stoneskin Totem*/ (8071,0,8071,1,0), (8154,8071,8071,2,0), (8155,8154,8071,3,0), @@ -14626,7 +14934,7 @@ INSERT INTO spell_chain VALUES (25509,25508,8071,8,0), (58751,25509,8071,9,0), (58753,58751,8071,10,0), -/*StrengthofEarthTotem*/ +/*Strength of Earth Totem*/ (8075,0,8075,1,0), (8160,8075,8075,2,0), (8161,8160,8075,3,0), @@ -14786,10 +15094,10 @@ INSERT INTO spell_chain VALUES (25464,10473,8056,5,0), (49235,25464,8056,6,0), (49236,49235,8056,7,0), -/*LavaBurst*/ +/*Lava Burst*/ (51505,0,51505,1,0), (60043,51505,51505,2,0), -/*LightningBolt*/ +/*Lightning Bolt*/ (403,0,403,1,0), (529,403,403,2,0), (548,529,403,3,0), @@ -14804,7 +15112,7 @@ INSERT INTO spell_chain VALUES (25449,25448,403,12,0), (49237,25449,403,13,0), (49238,49237,403,14,0), -/*MagmaTotem*/ +/*Magma Totem*/ (8190,0,8190,1,0), (10585,8190,8190,2,0), (10586,10585,8190,3,0), @@ -14815,7 +15123,7 @@ INSERT INTO spell_chain VALUES /*Purge*/ (370,0,370,1,0), (8012,370,370,2,0), -/*SearingTotem*/ +/*Searing Totem*/ (3599,0,3599,1,0), (6363,3599,3599,2,0), (6364,6363,3599,3,0), @@ -14826,7 +15134,7 @@ INSERT INTO spell_chain VALUES (58699,25533,3599,8,0), (58703,58699,3599,9,0), (58704,58703,3599,10,0), -/*StoneclawTotem*/ +/*Stoneclaw Totem*/ (5730,0,5730,1,0), (6390,5730,5730,2,0), (6391,6390,5730,3,0), @@ -14837,11 +15145,33 @@ INSERT INTO spell_chain VALUES (58580,25525,5730,8,0), (58581,58580,5730,9,0), (58582,58581,5730,10,0), -/*TotemofWrath*/ +/*Totemof Wrath*/ (30706,0,30706,1,0), (57720,30706,30706,2,0), (57721,57720,30706,3,0), (57722,57721,30706,4,0), +/*Thunderstorm*/ +(51490,0,51490,1,0), +(59156,51490,51490,2,0), +(59158,59156,51490,3,0), +(59159,59158,51490,4,0), +/*------------------ +-- (393) Skinning +------------------*/ +/*Skinning*/ +(8613,0,8613,1,0), +(8617,8613,8613,2,0), +(8618,8617,8613,3,0), +(10768,8618,8613,4,0), +(32678,10768,8613,5,0), +(50305,32678,8613,6,0), +/*Master of Anatomy*/ +(53125,0,53125,1,0), +(53662,53125,53125,2,0), +(53663,53662,53125,3,0), +(53664,53663,53125,4,0), +(53665,53664,53125,5,0), +(53666,53665,53125,6,0), /*------------------ --(573)Restoration ------------------*/ @@ -15345,6 +15675,16 @@ INSERT INTO spell_chain VALUES (25011,25010,24844,5,0), (25012,25011,24844,6,0), /*------------------ +-- (755) Jewelcrafting +------------------*/ +/*Jewelcrafting*/ +(25229,0,25229,1,0), +(25230,25229,25229,2,0), +(28894,25230,25229,3,0), +(28895,28894,25229,4,0), +(28897,28895,25229,5,0), +(51311,28897,25229,6,0), +/*------------------ --(761)Pet-Felguard ------------------*/ /*Anguish*/ @@ -15363,6 +15703,14 @@ INSERT INTO spell_chain VALUES (30198,30194,30151,3,0), (47996,30198,30151,4,0), /*------------------ +-- (762) Riding +------------------*/ +/*Riding*/ +(33388,0,33388,1,0), +(33391,33388,33388,2,0), +(34090,33391,33388,3,0), +(34091,34090,33388,4,0), +/*------------------ --(763)Pet-Dragonhawk ------------------*/ /*FireBreath*/ @@ -15529,6 +15877,16 @@ INSERT INTO spell_chain VALUES (51378,51376,49194,3,0), (51379,51378,49194,4,0), /*------------------ +-- (773) Inscription +------------------*/ +/*Inscription*/ +(45357,0,45357,1,0), +(45358,45357,45357,2,0), +(45359,45358,45357,3,0), +(45360,45359,45357,4,0), +(45361,45360,45357,5,0), +(45363,45361,45357,6,0), +/*------------------ --(780)Pet-ExoticChimaera ------------------*/ /*FroststormBreath*/ @@ -15587,129 +15945,7 @@ INSERT INTO spell_chain VALUES (61195,61194,61193,3,0), (61196,61195,61193,4,0), (61197,61196,61193,5,0), -(61198,61197,61193,6,0), -/*------------------ ---Professions -------------------*/ -/*Alchemy*/ -(2259,0,2259,1,0), -(3101,2259,2259,2,0), -(3464,3101,2259,3,0), -(11611,3464,2259,4,0), -(28596,11611,2259,5,0), -(28672,11611,2259,5,0), -(28675,11611,2259,5,0), -(28677,11611,2259,5,0), -(51304,28596,2259,6,0), -/*Blacksmithing*/ -(2018,0,2018,1,0), -(3100,2018,2018,2,0), -(3538,3100,2018,3,0), -(9785,3538,2018,4,0), -(9787,9785,2018,5,0), -(9788,9785,2018,5,0), -(29844,9785,2018,5,0), -(17039,9787,2018,6,0), -(17040,9787,2018,6,0), -(17041,9787,2018,6,0), -(51300,29844,2018,6,0), -/*Cooking*/ -(2550,0,2550,1,0), -(3102,2550,2550,2,0), -(3413,3102,2550,3,0), -(18260,3413,2550,4,0), -(33359,18260,2550,5,0), -(51296,33359,2550,6,0), -/*Enchanting*/ -(7411,0,7411,1,0), -(7412,7411,7411,2,0), -(7413,7412,7411,3,0), -(13920,7413,7411,4,0), -(28029,13920,7411,5,0), -(51313,28029,7411,6,0), -/*Engineering*/ -(4036,0,4036,1,0), -(4037,4036,4036,2,0), -(4038,4037,4036,3,0), -(12656,4038,4036,4,0), -(20219,12656,4036,5,0), -(20222,12656,4036,5,0), -(30350,12656,4036,5,0), -(51306,30350,4036,6,0), -/*First Aid*/ -(3273,0,3273,1,0), -(3274,3273,3273,2,0), -(7924,3274,3273,3,0), -(10846,7924,3273,4,0), -(27028,10846,3273,5,0), -(45542,27028,3273,6,0), -/*Fishing*/ -(7620,0,7620,1,0), -(7731,7620,7620,2,0), -(7732,7731,7620,3,0), -(18248,7732,7620,4,0), -(33095,18248,7620,5,0), -(51294,33095,7620,6,0), -/*Herb Gathering*/ -(2366,0,2366,1,0), -(2368,2366,2366,2,0), -(3570,2368,2366,3,0), -(11993,3570,2366,4,0), -(28695,11993,2366,5,0), -(50300,28695,2366,6,0), -/*Inscription*/ -(45357,0,45357,1,0), -(45358,45357,45357,2,0), -(45359,45358,45357,3,0), -(45360,45359,45357,4,0), -(45361,45360,45357,5,0), -(45363,45361,45357,6,0), -/*Jewelcrafting*/ -(25229,0,25229,1,0), -(25230,25229,25229,2,0), -(28894,25230,25229,3,0), -(28895,28894,25229,4,0), -(28897,28895,25229,5,0), -(51311,28897,25229,6,0), -/*Leatherworking*/ -(2108,0,2108,1,0), -(3104,2108,2108,2,0), -(3811,3104,2108,3,0), -(10662,3811,2108,4,0), -(10656,10662,2108,5,0), -(10658,10662,2108,5,0), -(10660,10662,2108,5,0), -(32549,10662,2108,5,0), -(51302,32549,2108,6,0), -/*Mining*/ -(2575,0,2575,1,0), -(2576,2575,2575,2,0), -(3564,2576,2575,3,0), -(10248,3564,2575,4,0), -(29354,10248,2575,5,0), -(50310,29354,2575,6,0), -/*Riding*/ -(33388,0,33388,1,0), -(33391,33388,33388,2,0), -(34090,33391,33388,3,0), -(34091,34090,33388,4,0), -/*Skinning*/ -(8613,0,8613,1,0), -(8617,8613,8613,2,0), -(8618,8617,8613,3,0), -(10768,8618,8613,4,0), -(32678,10768,8613,5,0), -(50305,32678,8613,6,0), -/*Tailoring*/ -(3908,0,3908,1,0), -(3909,3908,3908,2,0), -(3910,3909,3908,3,0), -(12180,3910,3908,4,0), -(26790,12180,3908,5,0), -(26797,12180,3908,5,0), -(26798,12180,3908,5,0), -(26801,12180,3908,5,0), -(51309,26790,3908,6,0); +(61198,61197,61193,6,0); /*!40000 ALTER TABLE `spell_chain` ENABLE KEYS */; UNLOCK TABLES; @@ -15841,6 +16077,7 @@ DROP TABLE IF EXISTS `spell_learn_spell`; CREATE TABLE `spell_learn_spell` ( `entry` smallint(5) unsigned NOT NULL default '0', `SpellID` smallint(5) unsigned NOT NULL default '0', + `Active` tinyint(3) unsigned NOT NULL default '1', PRIMARY KEY (`entry`,`SpellID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Item System'; @@ -15851,19 +16088,38 @@ CREATE TABLE `spell_learn_spell` ( LOCK TABLES `spell_learn_spell` WRITE; /*!40000 ALTER TABLE `spell_learn_spell` DISABLE KEYS */; INSERT INTO `spell_learn_spell` VALUES -(5784,33388), -(13819,33388), -(17002,24867), -(23161,33391), -(23214,33391), -(24866,24864), -(33872,47179), -(33873,47180), -(33943,34090), -(34767,33391), -(34769,33388), -(53428,53341), -(53428,53343); +(71,7376,0), +(768,3025,0), +(783,5419,0), +(1066,5421,0), +(2457,21156,0), +(2458,7381,0), +(5487,1178,0), +(5487,21178,0), +(5784,33388,1), +(9634,9635,0), +(9634,21178,0), +(13819,33388,1), +(17002,24867,0), +(23161,33391,1), +(23214,33391,1), +(24858,24905,0), +(24866,24864,0), +(33872,47179,0), +(33873,47180,0), +(33891,5420,0), +(33891,34123,0), +(33943,33948,0), +(33943,34090,1), +(33943,34764,0), +(34767,33391,1), +(34769,33388,1), +(40123,40121,0), +(40123,40122,0), +(53428,53341,1), +(53428,53343,1), +(58984,21009,1); + /*!40000 ALTER TABLE `spell_learn_spell` ENABLE KEYS */; UNLOCK TABLES; @@ -15934,7 +16190,9 @@ CREATE TABLE `spell_proc_event` ( `entry` smallint(5) unsigned NOT NULL default '0', `SchoolMask` tinyint(4) NOT NULL default '0', `SpellFamilyName` smallint(5) unsigned NOT NULL default '0', - `SpellFamilyMask` bigint(20) unsigned NOT NULL default '0', + `SpellFamilyMask0` int(10) unsigned NOT NULL default '0', + `SpellFamilyMask1` int(10) unsigned NOT NULL default '0', + `SpellFamilyMask2` int(10) unsigned NOT NULL default '0', `procFlags` int(10) unsigned NOT NULL default '0', `procEx` int(10) unsigned NOT NULL default '0', `ppmRate` float NOT NULL default '0', @@ -15950,687 +16208,828 @@ CREATE TABLE `spell_proc_event` ( LOCK TABLES `spell_proc_event` WRITE; /*!40000 ALTER TABLE `spell_proc_event` DISABLE KEYS */; INSERT INTO `spell_proc_event` VALUES -(324, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(325, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(905, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(945, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(974, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(1463, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(3232, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(5952, 0x00000000, 8, 0x0000000100000001, 0x00000000, 0x00000000, 0, 0, 0), -(6346, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000100, 0, 0, 0), -(7383, 0x00000001, 0, 0x0000000000000000, 0x00000000, 0x00000100, 0, 0, 0), -(7434, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(8134, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(8178, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(8494, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(8495, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(9452, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(9782, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(9784, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(9799, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(10191, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(10192, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(10193, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(10431, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(10432, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(11095, 0x00000000, 3, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), -(11103, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(11119, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(11120, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(11129, 0x00000000, 3, 0x0000004000C00017, 0x00000000, 0x00000000, 0, 0, 0), -(11180, 0x00000010, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(11185, 0x00000000, 3, 0x0000000000000080, 0x00050000, 0x00000000, 0, 0, 0), -(11255, 0x00000000, 3, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), -(12169, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(12281, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), -(12289, 0x00000000, 4, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(12298, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(12311, 0x00000000, 4, 0x0000000100000800, 0x00000000, 0x00000000, 0, 0, 0), -(12317, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12319, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12322, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), -(12357, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(12358, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(12487, 0x00000000, 3, 0x0000000000000080, 0x00050000, 0x00000000, 0, 0, 0), -(12488, 0x00000000, 3, 0x0000000000000080, 0x00050000, 0x00000000, 0, 0, 0), -(12598, 0x00000000, 3, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), -(12668, 0x00000000, 4, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(12724, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(12725, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(12726, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(12727, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(12797, 0x00000000, 4, 0x0000000000000400, 0x00000000, 0x00000000, 0, 0, 0), -(12799, 0x00000000, 4, 0x0000000000000400, 0x00000000, 0x00000000, 0, 0, 0), -(12812, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), -(12813, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), -(12814, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), -(12815, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), -(12834, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12846, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12847, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12848, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12849, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12867, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12872, 0x00000000, 3, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), -(12873, 0x00000000, 3, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), -(12958, 0x00000000, 4, 0x0000000100000800, 0x00000000, 0x00000000, 0, 0, 0), -(12966, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(12967, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(12968, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(12969, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(12970, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(12971, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12972, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12973, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12974, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12999, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 4, 0, 0), -(13000, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 6, 0, 0), -(13001, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 8, 0, 0), -(13002, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 10, 0, 0), -(13045, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(13046, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(13047, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(13048, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(13165, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(13754, 0x00000000, 8, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), -(13867, 0x00000000, 8, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), -(13983, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000018, 0, 0, 0), -(14070, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000018, 0, 0, 0), -(14071, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000018, 0, 0, 0), -(14156, 0x00000000, 8, 0x00000000003E0000, 0x00000000, 0x00000000, 0, 0, 0), -(14160, 0x00000000, 8, 0x00000000003E0000, 0x00000000, 0x00000000, 0, 0, 0), -(14161, 0x00000000, 8, 0x00000000003E0000, 0x00000000, 0x00000000, 0, 0, 0), -(14186, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), -(14190, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), -(14193, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), -(14194, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), -(14195, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), -(14318, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(14319, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(14320, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(14321, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(14322, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(14531, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(14774, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(14892, 0x00000000, 6, 0x0000000410001E00, 0x00000000, 0x00000002, 0, 0, 0), -(15088, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(15128, 0x00000004, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(15268, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), -(15277, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 6, 0, 0), -(15286, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(15323, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), -(15324, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), -(15325, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), -(15326, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), -(15337, 0x00000000, 6, 0x0000000200002000, 0x00000000, 0x00000002, 0, 0, 0), -(15338, 0x00000000, 6, 0x0000000200002000, 0x00000000, 0x00000002, 0, 0, 0), -(15346, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 6, 0, 0), -(15362, 0x00000000, 6, 0x0000000410001E00, 0x00000000, 0x00000002, 0, 0, 0), -(15363, 0x00000000, 6, 0x0000000410001E00, 0x00000000, 0x00000002, 0, 0, 0), -(15600, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1, 0, 0), -(16164, 0x00000000, 11, 0x0000000090100003, 0x00000000, 0x00000002, 0, 0, 0), -(16176, 0x00000000, 11, 0x00000000000001C0, 0x00000000, 0x00000002, 0, 0, 0), -(16180, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000002, 0, 0, 0), -(16196, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000002, 0, 0, 0), -(16198, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000002, 0, 0, 0), -(16235, 0x00000000, 11, 0x00000000000001C0, 0x00000000, 0x00000002, 0, 0, 0), -(16240, 0x00000000, 11, 0x00000000000001C0, 0x00000000, 0x00000002, 0, 0, 0), -(16256, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16257, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(16277, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(16278, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(16279, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(16280, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(16281, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16282, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16283, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16284, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16487, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16489, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16492, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16550, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16620, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), -(16624, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(16850, 0x00000000, 7, 0x0000000000000004, 0x00000000, 0x00000000, 0, 0, 0), -(16864, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), -(16880, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16923, 0x00000000, 7, 0x0000000000000004, 0x00000000, 0x00000000, 0, 0, 0), -(16924, 0x00000000, 7, 0x0000000000000004, 0x00000000, 0x00000000, 0, 0, 0), -(16952, 0x00000000, 7, 0x0000040000039000, 0x00000000, 0x00000002, 0, 0, 0), -(16954, 0x00000000, 7, 0x0000040000039000, 0x00000000, 0x00000002, 0, 0, 0), -(16958, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16961, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(17106, 0x00000000, 7, 0x0000000000080000, 0x00000000, 0x00000000, 0, 0, 0), -(17107, 0x00000000, 7, 0x0000000000080000, 0x00000000, 0x00000000, 0, 0, 0), -(17108, 0x00000000, 7, 0x0000000000080000, 0x00000000, 0x00000000, 0, 0, 0), -(17364, 0x00000008, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(17495, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(17793, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), -(17794, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000001, 0, 0, 0), -(17796, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), -(17797, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(17798, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(17799, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(17800, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(17801, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), -(17802, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), -(17803, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), -(18073, 0x00000000, 5, 0x0000008000000060, 0x00000000, 0x00000000, 0, 0, 0), -(18094, 0x00000000, 5, 0x000000000000000A, 0x00000000, 0x00000000, 0, 0, 0), -(18095, 0x00000000, 5, 0x000000000000000A, 0x00000000, 0x00000000, 0, 0, 0), -(18096, 0x00000000, 5, 0x0000008000000060, 0x00000000, 0x00000000, 0, 0, 0), -(18119, 0x00000000, 5, 0x000010C0000003E5, 0x00000000, 0x00000000, 0, 0, 0), -(18120, 0x00000000, 5, 0x000010C0000003E5, 0x00000000, 0x00000000, 0, 0, 0), -(18820, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(19184, 0x00000000, 9, 0x0000200000000014, 0x00000000, 0x00000000, 0, 0, 0), -(19228, 0x00000000, 0, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), -(19232, 0x00000000, 9, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), -(19233, 0x00000000, 9, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), -(19387, 0x00000000, 9, 0x0000200000000014, 0x00000000, 0x00000000, 0, 0, 0), -(19388, 0x00000000, 9, 0x0000200000000014, 0x00000000, 0x00000000, 0, 0, 0), -(19572, 0x00000000, 9, 0x0000000000800000, 0x00004000, 0x00000000, 0, 0, 0), -(19573, 0x00000000, 9, 0x0000000000800000, 0x00004000, 0x00000000, 0, 0, 0), -(20049, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(20056, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(20057, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(20128, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(20131, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(20132, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(20164, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 5, 0, 0), -(20165, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 20, 0, 0), -(20166, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 20, 0, 0), -(20182, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(20210, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), -(20212, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), -(20213, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), -(20214, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), -(20215, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), -(20234, 0x00000000, 10, 0x0000000000008000, 0x00000000, 0x00000000, 0, 0, 0), -(20235, 0x00000000, 10, 0x0000000000008000, 0x00000000, 0x00000000, 0, 0, 0), -(20375, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 7, 0, 0), -(20500, 0x00000000, 4, 0x0000000010000000, 0x00000000, 0x00000000, 0, 0, 0), -(20501, 0x00000000, 4, 0x0000000010000000, 0x00000000, 0x00000000, 0, 0, 0), -(20705, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(20911, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), -(20925, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(20927, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(20928, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(21185, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(21882, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(21890, 0x00000000, 4, 0x0000036C2A764EEF, 0x00000000, 0x00000000, 0, 0, 0), -(22007, 0x00000000, 3, 0x0000000000200021, 0x00000000, 0x00010000, 0, 0, 0), -(22618, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(22648, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(23547, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), -(23548, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(23551, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000000, 0, 0, 0), -(23552, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(23572, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000000, 0, 0, 0), -(23578, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), -(23581, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), -(23602, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(23686, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), -(23688, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(23689, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 4, 0, 0), -(23695, 0x00000000, 4, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(23721, 0x00000000, 9, 0x0000000000000800, 0x00000000, 0x00000000, 0, 0, 0), -(23920, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), -(24353, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(24389, 0x00000000, 3, 0x0000004000C00017, 0x00000000, 0x00000000, 0, 0, 0), -(24398, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(24658, 0x00000000, 0, 0x0000000000000000, 0x00014110, 0x00000000, 0, 0, 0), -(24905, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 15, 0, 0), -(24932, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 6), -(25050, 0x00000004, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(25296, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(25469, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(25472, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(25669, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1, 0, 0), -(25899, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), -(25988, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(26016, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), -(26107, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000064, 0, 0, 0), -(26119, 0x00000000, 10, 0x0000000090100003, 0x00000000, 0x00010000, 0, 0, 0), -(26128, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 0), -(26135, 0x00000000, 10, 0x0000000000800000, 0x00000000, 0x00010000, 0, 0, 0), -(26480, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(26605, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(27044, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(27131, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(27179, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(27419, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(27498, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(27521, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(27656, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(27774, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(27787, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(27811, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(27815, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(27816, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(28592, 0x00000010, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(28593, 0x00000010, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(28716, 0x00000000, 7, 0x0000000000000010, 0x00048000, 0x00000000, 0, 0, 0), -(28719, 0x00000000, 7, 0x0000000000000020, 0x00000000, 0x00000002, 0, 0, 0), -(28744, 0x00000000, 7, 0x0000000000000040, 0x00044000, 0x00000000, 0, 0, 0), -(28752, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(28789, 0x00000000, 10, 0x00000000C0000000, 0x00000000, 0x00000000, 0, 0, 0), -(28802, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(28809, 0x00000000, 6, 0x0000000000001000, 0x00000000, 0x00000002, 0, 0, 0), -(28812, 0x00000000, 8, 0x0000000002000006, 0x00000000, 0x00000002, 0, 0, 0), -(28816, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(28823, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000000, 0, 0, 0), -(28847, 0x00000000, 7, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), -(28849, 0x00000000, 11, 0x0000000000000080, 0x00000000, 0x00000000, 0, 0, 0), -(29074, 0x00000014, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(29075, 0x00000014, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(29076, 0x00000014, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(29150, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29179, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(29180, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(29385, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 7, 0, 0), -(29441, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 1), -(29444, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 1), -(29455, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(29501, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29593, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), -(29594, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), -(29624, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29625, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29626, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29632, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29633, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29634, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29635, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29636, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29637, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29801, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(29834, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(29838, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(29977, 0x00000000, 3, 0x0000004000C00017, 0x00000000, 0x00000000, 0, 0, 0), -(30003, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), -(30160, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30293, 0x00000000, 5, 0x000000C000000381, 0x00000000, 0x00000000, 0, 0, 0), -(30295, 0x00000000, 5, 0x000000C000000381, 0x00000000, 0x00000000, 0, 0, 0), -(30296, 0x00000000, 5, 0x000000C000000381, 0x00000000, 0x00000000, 0, 0, 0), -(30299, 0x00000024, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(30301, 0x00000024, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(30302, 0x00000024, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(30675, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), -(30678, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), -(30679, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), -(30680, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), -(30681, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), -(30701, 0x0000001C, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(30705, 0x0000001C, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(30802, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30803, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30804, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30805, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30806, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30807, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30808, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30809, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30810, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30811, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30823, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 10.5, 0, 0), -(30881, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), -(30883, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), -(30884, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), -(30885, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), -(30886, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), -(30937, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(31124, 0x00000000, 8, 0x000000002000000E, 0x00000000, 0x00000000, 0, 0, 0), -(31126, 0x00000000, 8, 0x000000002000000E, 0x00000000, 0x00000000, 0, 0, 0), -(31244, 0x00000000, 8, 0x00000009003E0000, 0x00000000, 0x00000004, 0, 0, 0), -(31245, 0x00000000, 8, 0x00000009003E0000, 0x00000000, 0x00000004, 0, 0, 0), -(31394, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(31569, 0x00000000, 3, 0x0000000000010000, 0x00000000, 0x00000000, 0, 0, 0), -(31570, 0x00000000, 3, 0x0000000000010000, 0x00000000, 0x00000000, 0, 0, 0), -(31785, 0x00000000, 0, 0x0000000000000000, 0x00008800, 0x00000000, 0, 0, 0), -(31794, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(31801, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 20, 0, 0), -(31833, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), -(31835, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), -(31836, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), -(31904, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(32385, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), -(32387, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), -(32392, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), -(32393, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), -(32394, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), -(32587, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(32593, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(32594, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(32642, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(32734, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(32748, 0x00000000, 8, 0x0000000100000000, 0x00000140, 0x00000000, 0, 0, 0), -(32776, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(32777, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(32837, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 45), -(32844, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), -(32885, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33076, 0x00000000, 0, 0x0000000000000000, 0x000A02A8, 0x00000000, 0, 0, 0), -(33089, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(33127, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 7, 0, 0), -(33142, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33145, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33146, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33150, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33151, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33154, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33191, 0x00000000, 6, 0x0000040000808000, 0x00000000, 0x00000000, 0, 0, 0), -(33192, 0x00000000, 6, 0x0000040000808000, 0x00000000, 0x00000000, 0, 0, 0), -(33193, 0x00000000, 6, 0x0000040000808000, 0x00000000, 0x00000000, 0, 0, 0), -(33299, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(33510, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 5, 0, 0), -(33648, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33719, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), -(33736, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(33746, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(33757, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(33759, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(33776, 0x00000000, 0, 0x0000000000000000, 0x00008800, 0x00000000, 0, 0, 0), -(33881, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33882, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33883, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34080, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 0), -(34138, 0x00000000, 11, 0x0000000000000080, 0x00000000, 0x00000000, 0, 0, 0), -(34139, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), -(34258, 0x00000000, 10, 0x0000000800000400, 0x00000000, 0x00000000, 0, 0, 0), -(34262, 0x00000000, 10, 0x0000000000800000, 0x00000000, 0x00010000, 0, 0, 0), -(34320, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34355, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(34497, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34498, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34499, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34500, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34502, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34503, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34584, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), -(34586, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1.5, 0, 0), -(34598, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), -(34749, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 0), -(34753, 0x00000000, 6, 0x0000000400001800, 0x00000000, 0x00000000, 0, 0, 0), -(34774, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1.5, 0, 20), -(34783, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), -(34827, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(34859, 0x00000000, 6, 0x0000000400001800, 0x00000000, 0x00000000, 0, 0, 0), -(34860, 0x00000000, 6, 0x0000000400001800, 0x00000000, 0x00000000, 0, 0, 0), -(34914, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(34916, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(34917, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(34935, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 8), -(34938, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 8), -(34939, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 8), -(34950, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34954, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(35077, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), -(35080, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1, 0, 60), -(35083, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), -(35086, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), -(35100, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(35102, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(35103, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(35121, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(36096, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), -(36111, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(37165, 0x00000000, 8, 0x0000000000200400, 0x00000000, 0x00000000, 0, 0, 0), -(37168, 0x00000000, 8, 0x00000009003E0000, 0x00000000, 0x00000000, 0, 0, 0), -(37170, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1, 0, 0), -(37173, 0x00000000, 8, 0x000001062CBC0598, 0x00000000, 0x00000000, 0, 0, 30), -(37189, 0x00000000, 10, 0x00000000C0000000, 0x00000000, 0x00000002, 0, 0, 60), -(37193, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(37195, 0x00000000, 10, 0x0000000000800000, 0x00000000, 0x00000000, 0, 0, 0), -(37197, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 45), -(37213, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(37214, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(37227, 0x00000000, 11, 0x00000000000001C0, 0x00000000, 0x00000002, 0, 0, 60), -(37237, 0x00000000, 11, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), -(37247, 0x00000008, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 45), -(37377, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(37384, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(37443, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(37514, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), -(37516, 0x00000000, 4, 0x0000000000000400, 0x00000000, 0x00000000, 0, 0, 0), -(37519, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000030, 0, 0, 0), -(37523, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(37528, 0x00000000, 4, 0x0000000000000004, 0x00000000, 0x00000000, 0, 0, 0), -(37536, 0x00000000, 4, 0x0000000000010000, 0x00000000, 0x00000000, 0, 0, 0), -(37568, 0x00000000, 6, 0x0000000000000800, 0x00000000, 0x00000000, 0, 0, 0), -(37594, 0x00000000, 6, 0x0000000000001000, 0x00000000, 0x00000000, 0, 0, 0), -(37600, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(37601, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(37603, 0x00000000, 6, 0x0000000000008000, 0x00000000, 0x00000000, 0, 0, 0), -(37655, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), -(37657, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 3), -(38026, 0x00000001, 0, 0x0000000000000000, 0x00000000, 0x00000100, 0, 0, 0), -(38031, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(38290, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1.6, 0, 0), -(38326, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(38327, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(38334, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), -(38347, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(38350, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(38394, 0x00000000, 5, 0x0000000000000006, 0x00000000, 0x00000000, 0, 0, 0), -(38857, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(39027, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(39372, 0x00000030, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(39437, 0x00000004, 5, 0x000000C000001364, 0x00000000, 0x00010000, 0, 0, 0), -(39442, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000001, 0, 0, 0), -(39443, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(39530, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(39958, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0.7, 0, 40), -(40407, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 6, 0, 0), -(40438, 0x00000000, 6, 0x0000000000008040, 0x00000000, 0x00000000, 0, 0, 0), -(40442, 0x00000000, 7, 0x0000044000000014, 0x00000000, 0x00000000, 0, 0, 0), -(40444, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(40458, 0x00000000, 4, 0x0000060102000000, 0x00000000, 0x00000000, 0, 0, 0), -(40463, 0x00000000, 11, 0x0000001000000081, 0x00000000, 0x00000000, 0, 0, 0), -(40470, 0x00000000, 10, 0x00000000C0800000, 0x00000000, 0x00000000, 0, 0, 0), -(40475, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(40478, 0x00000000, 5, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(40482, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(40485, 0x00000000, 9, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), -(40899, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(41034, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(41260, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(41262, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(41381, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000100, 0, 0, 0), -(41393, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), -(41434, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 45), -(41469, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 7, 0, 0), -(41635, 0x00000000, 0, 0x0000000000000000, 0x000A02A8, 0x00000000, 0, 0, 0), -(41989, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0.5, 0, 0), -(42083, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 45), -(42135, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 90), -(42136, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 90), -(42368, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), -(42370, 0x00000000, 11, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), -(43019, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(43020, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(43338, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(43443, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), -(43726, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), -(43728, 0x00000000, 11, 0x0000000000000080, 0x00000000, 0x00000000, 0, 0, 0), -(43737, 0x00000000, 7, 0x0000044000000000, 0x00000000, 0x00000000, 0, 0, 10), -(43739, 0x00000000, 7, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(43741, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), -(43745, 0x00000000, 10, 0x0000020000000000, 0x00000000, 0x00000000, 0, 0, 0), -(43748, 0x00000000, 11, 0x0000000090100000, 0x00000000, 0x00000000, 0, 0, 0), -(43750, 0x00000000, 11, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(43819, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(44404, 0x00000000, 3, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), -(44835, 0x00000000, 7, 0x0000008000000000, 0x00000010, 0x00000000, 0, 0, 0), -(45054, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 15), -(45057, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), -(45234, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(45243, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(45244, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(45354, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), -(45481, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), -(45482, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), -(45483, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), -(45484, 0x00000000, 0, 0x0000000000000000, 0x00004000, 0x00000000, 0, 0, 45), -(46025, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(46092, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), -(46098, 0x00000000, 11, 0x0000000000000080, 0x00000000, 0x00000000, 0, 0, 0), -(46569, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), -(46662, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 20), -(46832, 0x00000000, 7, 0x0000000000000001, 0x00000000, 0x00010000, 0, 0, 0), -(46854, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(46855, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(46867, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(46913, 0x00000000, 4, 0x0000040000000000, 0x00000000, 0x00000002, 0, 0, 0), -(46914, 0x00000000, 4, 0x0000040000000000, 0x00000000, 0x00000002, 0, 0, 0), -(46915, 0x00000000, 4, 0x0000040000000000, 0x00000000, 0x00000002, 0, 0, 0), -(46916, 0x00000000, 4, 0x0000040000000000, 0x00000000, 0x00000002, 0, 0, 0), -(46951, 0x00000000, 4, 0x0000004000000400, 0x00000000, 0x00000000, 0, 0, 0), -(46952, 0x00000000, 0, 0x0000004000000400, 0x00000000, 0x00000000, 0, 0, 0), -(46953, 0x00000000, 0, 0x0000004000000400, 0x00000000, 0x00000000, 0, 0, 0), -(47509, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(47511, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(47515, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(48835, 0x00000000, 10, 0x0000000800000000, 0x00000000, 0x00000000, 0, 0, 0), -(48837, 0x00000000, 11, 0x0000000090100000, 0x00000000, 0x00000000, 0, 0, 0), -(48951, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(48952, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(48988, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(49018, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(49137, 0x00000000, 15, 0x0000400000000000, 0x00000000, 0x00000000, 0, 0, 0), -(49188, 0x00000000, 15, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(49208, 0x00000000, 15, 0x0000000000440000, 0x00000000, 0x00000000, 0, 0, 0), -(49222, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(49280, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(49281, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(49283, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(49284, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(49503, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(49504, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(49529, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(49530, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(49531, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(49532, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(49657, 0x00000000, 15, 0x0000400000000000, 0x00000000, 0x00000000, 0, 0, 0), -(50781, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51123, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51127, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51128, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51129, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51130, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51346, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(51349, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(51352, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(51359, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(51466, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51470, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51625, 0x00000000, 8, 0x000000001000A000, 0x00000000, 0x00000000, 0, 0, 0), -(51626, 0x00000000, 8, 0x000000001000A000, 0x00000000, 0x00000000, 0, 0, 0), -(51627, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), -(51628, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), -(51629, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), -(51634, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51635, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51636, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51664, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), -(51665, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), -(51667, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), -(51668, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), -(51669, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), -(51672, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 1), -(51674, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 1), -(51679, 0x00000000, 8, 0x0000000100000001, 0x00000000, 0x00000000, 0, 0, 0), -(51692, 0x00000000, 8, 0x0000000000000200, 0x00000000, 0x00000002, 0, 0, 0), -(51696, 0x00000000, 8, 0x0000000000000200, 0x00000000, 0x00000002, 0, 0, 0), -(51698, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 1), -(51700, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 1), -(51701, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 1), -(52420, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), -(52423, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), -(52898, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(53137, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(53138, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(53215, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(53216, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(53217, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(53221, 0x00000000, 9, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), -(53222, 0x00000000, 9, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), -(53224, 0x00000000, 9, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), -(53256, 0x00000000, 9, 0x0080000100000800, 0x00000000, 0x00000002, 0, 0, 0), -(53259, 0x00000000, 9, 0x0080000100000800, 0x00000000, 0x00000002, 0, 0, 0), -(53260, 0x00000000, 9, 0x0080000100000800, 0x00000000, 0x00000002, 0, 0, 0), -(53290, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), -(53291, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), -(53292, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), -(53293, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), -(53294, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), -(53380, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), -(53381, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), -(53382, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), -(53383, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), -(53384, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), -(53486, 0x00000000, 10, 0x0002800000800000, 0x00000000, 0x00000002, 0, 0, 0), -(53488, 0x00000000, 10, 0x0002800000800000, 0x00000000, 0x00000002, 0, 0, 0), -(53569, 0x00000000, 10, 0x0000000000200000, 0x00000000, 0x00000002, 0, 0, 0), -(53576, 0x00000000, 10, 0x0000000000200000, 0x00000000, 0x00000002, 0, 0, 0), -(54149, 0x00000000, 10, 0x0000000000200000, 0x00000000, 0x00000002, 0, 0, 0), -(54486, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), -(54488, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), -(54489, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), -(54490, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), -(54738, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(54841, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(55620, 0x00000000, 15, 0x0800000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(55623, 0x00000000, 15, 0x0800000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(55666, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(55667, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(55668, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(55669, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(55670, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(55689, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(56342, 0x00000000, 9, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), -(56343, 0x00000000, 9, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), -(56344, 0x00000000, 9, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), -(56451, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(56611, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(56612, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(56613, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(56614, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(56636, 0x00000000, 4, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), -(56637, 0x00000000, 4, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), -(56638, 0x00000000, 4, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), -(56821, 0x00000000, 8, 0x0000000000000002, 0x00000000, 0x00000002, 0, 0, 0), -(56822, 0x00000000, 15, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(56834, 0x00000000, 15, 0x0000000000440000, 0x00000000, 0x00000000, 0, 0, 0), -(56835, 0x00000000, 15, 0x0000000000440000, 0x00000000, 0x00000000, 0, 0, 0), -(57878, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 0), -(57880, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 0), -(57881, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 0), -(58357, 0x00000000, 4, 0x0000000000000040, 0x00000000, 0x00000002, 0, 0, 0), -(58364, 0x00000000, 4, 0x0000000000000400, 0x00000000, 0x00000000, 0, 0, 0), -(58372, 0x00000000, 4, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(58386, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), -(58616, 0x00000000, 15, 0x0000000000040000, 0x00000000, 0x00000000, 0, 0, 0), -(58620, 0x00000000, 15, 0x0000400000000000, 0x00000000, 0x00000000, 0, 0, 0), -(58626, 0x00000000, 15, 0x0000000002000000, 0x00000000, 0x00000000, 0, 0, 0), -(58631, 0x00000000, 15, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(58642, 0x00000000, 15, 0x0800000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(58644, 0x00000000, 15, 0x0000000400000000, 0x00000000, 0x00000000, 0, 0, 0), -(58647, 0x00000000, 15, 0x0000000400000000, 0x00000000, 0x00000000, 0, 0, 0), -(58676, 0x00000000, 15, 0x0000000800000000, 0x00000000, 0x00000000, 0, 0, 0), -(58677, 0x00000000, 15, 0x0000000000002000, 0x00000000, 0x00000000, 0, 0, 0), -(58872, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(58874, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(58901, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(59057, 0x00000000, 15, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(59176, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(59327, 0x00000000, 15, 0x0000000008000000, 0x00000000, 0x00000000, 0, 0, 0), -(59725, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), -(60537, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(60572, 0x00000000, 11, 0x0000000090100000, 0x00000000, 0x00000000, 0, 0, 0), -(60617, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), -(60826, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(61324, 0x00000000, 10, 0x0002000000000000, 0x00000000, 0x00000000, 0, 0, 0); +( 324, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 325, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 905, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 945, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 974, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 1463, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +( 3232, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +( 5952, 0x00000000, 8, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +( 6346, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0.000000, 0.000000, 0), +( 7383, 0x00000001, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0.000000, 0.000000, 0), +( 7434, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +( 8134, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 8178, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +( 8494, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +( 8495, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +( 9452, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +( 9782, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +( 9784, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +( 9799, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(10191, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(10192, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(10193, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(10431, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(10432, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(11095, 0x00000000, 3, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(11119, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(11120, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(11129, 0x00000000, 3, 0x00C00017, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(11180, 0x00000010, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(11185, 0x00000000, 3, 0x00000080, 0x00000000, 0x00000000, 0x00050000, 0x00000000, 0.000000, 0.000000, 0), +(11255, 0x00000000, 3, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12169, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12281, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12289, 0x00000000, 4, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12298, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12311, 0x00000000, 4, 0x00000800, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12317, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12319, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12322, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(12487, 0x00000000, 3, 0x00000080, 0x00000000, 0x00000000, 0x00050000, 0x00000000, 0.000000, 0.000000, 0), +(12488, 0x00000000, 3, 0x00000080, 0x00000000, 0x00000000, 0x00050000, 0x00000000, 0.000000, 0.000000, 0), +(12598, 0x00000000, 3, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12668, 0x00000000, 4, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12724, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12725, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12726, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12727, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12797, 0x00000000, 4, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12799, 0x00000000, 4, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12812, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12813, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12814, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12815, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12834, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12846, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12847, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12848, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12849, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12867, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12872, 0x00000000, 3, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12873, 0x00000000, 3, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12958, 0x00000000, 4, 0x00000800, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12966, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12967, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12968, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12969, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12970, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12971, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12972, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12973, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12974, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12999, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 4.000000, 0.000000, 0), +(13000, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), +(13001, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 8.000000, 0.000000, 0), +(13002, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 10.000000, 0.000000, 0), +(13045, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(13046, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(13047, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(13048, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(13165, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(13754, 0x00000000, 8, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(13867, 0x00000000, 8, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(13983, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000018, 0.000000, 0.000000, 0), +(14070, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000018, 0.000000, 0.000000, 0), +(14071, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000018, 0.000000, 0.000000, 0), +(14156, 0x00000000, 8, 0x003E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14160, 0x00000000, 8, 0x003E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14161, 0x00000000, 8, 0x003E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14186, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14190, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14193, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14194, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14195, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14318, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14319, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14320, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14321, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14322, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14531, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14774, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14892, 0x00000000, 6, 0x10001E00, 0x00010004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15088, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15128, 0x00000004, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15268, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15277, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), +(15286, 0x00000020, 6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15323, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15324, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15325, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15326, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15337, 0x00000000, 6, 0x00002000, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15338, 0x00000000, 6, 0x00002000, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15346, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), +(15362, 0x00000000, 6, 0x10001E00, 0x00010004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15363, 0x00000000, 6, 0x10001E00, 0x00010004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15600, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 0), +(16164, 0x00000000, 11, 0x90100003, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16176, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16180, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16196, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16198, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16235, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16240, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16256, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16257, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16277, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16278, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16279, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16280, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16281, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16282, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16283, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16284, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16487, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16489, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16492, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16550, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16620, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(16624, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(16850, 0x00000000, 7, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(16864, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(16880, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16923, 0x00000000, 7, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(16924, 0x00000000, 7, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(16952, 0x00000000, 7, 0x00039000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16954, 0x00000000, 7, 0x00039000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16958, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16961, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17106, 0x00000000, 7, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17107, 0x00000000, 7, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17108, 0x00000000, 7, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17364, 0x00000008, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17495, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(17793, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17794, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0.000000, 0.000000, 0), +(17796, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17797, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17798, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17799, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17800, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17801, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17802, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17803, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(18073, 0x00000000, 5, 0x00000060, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18094, 0x00000000, 5, 0x0000000A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18095, 0x00000000, 5, 0x0000000A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18096, 0x00000000, 5, 0x00000060, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18119, 0x00000000, 5, 0x000003E5, 0x000010C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18120, 0x00000000, 5, 0x000003E5, 0x000010C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18820, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(19184, 0x00000000, 9, 0x00000014, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19228, 0x00000000, 0, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19232, 0x00000000, 9, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19233, 0x00000000, 9, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19387, 0x00000000, 9, 0x00000014, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19388, 0x00000000, 9, 0x00000014, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19572, 0x00000000, 9, 0x00800000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0), +(19573, 0x00000000, 9, 0x00800000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0), +(20049, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20056, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20057, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20128, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20131, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20132, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20164, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5.000000, 0.000000, 0), +(20165, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 20.000000, 0.000000, 0), +(20166, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 20.000000, 0.000000, 0), +(20182, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20210, 0x00000000, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20212, 0x00000000, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20213, 0x00000000, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20214, 0x00000000, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20215, 0x00000000, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20234, 0x00000000, 10, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(20235, 0x00000000, 10, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(20375, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(20500, 0x00000000, 4, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(20501, 0x00000000, 4, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(20705, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20911, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(20925, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20927, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20928, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(21185, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(21882, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(21890, 0x00000000, 4, 0x2A764EEF, 0x0000036C, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(22007, 0x00000000, 3, 0x00200021, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(22618, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(22648, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(23547, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(23548, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(23551, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(23552, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(23572, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(23578, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(23581, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(23602, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(23686, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(23688, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(23689, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 4.000000, 0.000000, 0), +(23695, 0x00000000, 4, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(23721, 0x00000000, 9, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(23920, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(24353, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(24389, 0x00000000, 3, 0x00C00017, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(24398, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(24658, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00014110, 0x00000000, 0.000000, 0.000000, 0), +(24905, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 15.000000, 0.000000, 0), +(24932, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 6), +(25050, 0x00000004, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(25296, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(25469, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(25472, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(25669, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 0), +(25899, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(25988, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(26016, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(26107, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000064, 0.000000, 0.000000, 0), +(26119, 0x00000000, 10, 0x90100003, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(26128, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 0), +(26135, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(26480, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(26605, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(27044, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(27131, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(27179, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(27419, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(27498, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(27521, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(27656, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(27774, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(27787, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(27811, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(27815, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(27816, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28592, 0x00000010, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28593, 0x00000010, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28716, 0x00000000, 7, 0x00000010, 0x00000000, 0x00000000, 0x00048000, 0x00000000, 0.000000, 0.000000, 0), +(28719, 0x00000000, 7, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28744, 0x00000000, 7, 0x00000040, 0x00000000, 0x00000000, 0x00044000, 0x00000000, 0.000000, 0.000000, 0), +(28752, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28789, 0x00000000, 10, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28802, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(28809, 0x00000000, 6, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28812, 0x00000000, 8, 0x02000006, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28816, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(28823, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28847, 0x00000000, 7, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28849, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(29074, 0x00000014, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29075, 0x00000014, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29076, 0x00000014, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29150, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29179, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29180, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29385, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(29441, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 1), +(29444, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 1), +(29455, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(29501, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29593, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(29594, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(29624, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29625, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29626, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29632, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29633, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29634, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29635, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29636, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29637, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29801, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29834, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(29838, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(29977, 0x00000000, 3, 0x00C00017, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30003, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(30160, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30293, 0x00000000, 5, 0x00000381, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30295, 0x00000000, 5, 0x00000381, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30296, 0x00000000, 5, 0x00000381, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30299, 0x00000024, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30301, 0x00000024, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30302, 0x00000024, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30675, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30678, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30679, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30680, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30681, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30701, 0x0000001C, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30705, 0x0000001C, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30802, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30803, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30804, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30805, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30806, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30807, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30808, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30809, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30810, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30811, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30823, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 10.500000, 0.000000, 0), +(30881, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30883, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30884, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30885, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30886, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30937, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31124, 0x00000000, 8, 0x2000000E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31126, 0x00000000, 8, 0x2000000E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31244, 0x00000000, 8, 0x003E0000, 0x00000009, 0x00000000, 0x00000000, 0x00000004, 0.000000, 0.000000, 0), +(31245, 0x00000000, 8, 0x003E0000, 0x00000009, 0x00000000, 0x00000000, 0x00000004, 0.000000, 0.000000, 0), +(31394, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31569, 0x00000000, 3, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31570, 0x00000000, 3, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31785, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00008800, 0x00000000, 0.000000, 0.000000, 0), +(31794, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(31801, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 20.000000, 0.000000, 0), +(31833, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31835, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31836, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31876, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31877, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31878, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31904, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32385, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32387, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32392, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32393, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32394, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32409, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32587, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32593, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(32594, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(32642, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32734, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(32748, 0x00000000, 8, 0x00000000, 0x00000001, 0x00000000, 0x00000140, 0x00000000, 0.000000, 0.000000, 0), +(32776, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32777, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32837, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 45), +(32844, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(32885, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33076, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0), +(33089, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(33127, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(33142, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33145, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33146, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33150, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33151, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33154, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33191, 0x00000000, 6, 0x00808000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(33192, 0x00000000, 6, 0x00808000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(33193, 0x00000000, 6, 0x00808000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(33299, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(33510, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5.000000, 0.000000, 0), +(33648, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33719, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(33736, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(33746, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(33757, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(33759, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(33776, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00008800, 0x00000000, 0.000000, 0.000000, 0), +(33881, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33882, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33883, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33953, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 45), +(34080, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 0), +(34138, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34139, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34258, 0x00000000, 10, 0x00000400, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34262, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(34320, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34355, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(34497, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34498, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34499, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34500, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34502, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34503, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34584, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(34586, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.500000, 0.000000, 0), +(34598, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(34749, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 0), +(34753, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34774, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.500000, 0.000000, 20), +(34783, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(34827, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(34859, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34860, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34914, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34916, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34917, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34935, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 8), +(34938, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 8), +(34939, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 8), +(34950, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34954, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(35077, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(35080, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 60), +(35083, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(35086, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(35100, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(35102, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(35103, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(35121, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(36096, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(36111, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(36541, 0x00000004, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37165, 0x00000000, 8, 0x00200400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37168, 0x00000000, 8, 0x003E0000, 0x00000009, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37170, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 0), +(37173, 0x00000000, 8, 0x2CBC0598, 0x00000106, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(37189, 0x00000000, 10, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 60), +(37193, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(37195, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37197, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 45), +(37213, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(37214, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37227, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 60), +(37237, 0x00000000, 11, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(37247, 0x00000008, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 45), +(37377, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37379, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37384, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37443, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(37514, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(37516, 0x00000000, 4, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37519, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000030, 0.000000, 0.000000, 0), +(37523, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(37528, 0x00000000, 4, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37536, 0x00000000, 4, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37568, 0x00000000, 6, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37594, 0x00000000, 6, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37600, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37601, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37603, 0x00000000, 6, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37655, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(37657, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 3), +(38026, 0x00000001, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0.000000, 0.000000, 0), +(38031, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(38290, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.600000, 0.000000, 0), +(38326, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(38327, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(38334, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(38347, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(38350, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(38394, 0x00000000, 5, 0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(38857, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(39027, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(39372, 0x00000030, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(39437, 0x00000004, 5, 0x00001364, 0x000000C0, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(39442, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0.000000, 0.000000, 0), +(39443, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(39530, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(39958, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.700000, 0.000000, 40), +(40407, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), +(40438, 0x00000000, 6, 0x00008040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40442, 0x00000000, 7, 0x00000014, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40444, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(40458, 0x00000000, 4, 0x02000000, 0x00000601, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40463, 0x00000000, 11, 0x00000081, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40470, 0x00000000, 10, 0xC0800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40475, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(40478, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40482, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(40485, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40899, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(41034, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(41260, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(41262, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(41381, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0.000000, 0.000000, 0), +(41393, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(41434, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 45), +(41469, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(41635, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0), +(41989, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.500000, 0.000000, 0), +(42083, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), +(42135, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 90), +(42136, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 90), +(42368, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(42370, 0x00000000, 11, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43019, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(43020, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(43338, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(43443, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(43726, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43728, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43737, 0x00000000, 7, 0x00000000, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(43739, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43741, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43745, 0x00000000, 10, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43748, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43750, 0x00000000, 11, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43819, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(44404, 0x00000000, 3, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44445, 0x00000000, 3, 0x00000013, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44446, 0x00000000, 3, 0x00000013, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44448, 0x00000000, 3, 0x00000013, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44449, 0x00000000, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(44469, 0x00000000, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(44470, 0x00000000, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(44471, 0x00000000, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(44472, 0x00000000, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(44546, 0x00000000, 3, 0x020002A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44548, 0x00000000, 3, 0x020002A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44549, 0x00000000, 3, 0x020002A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44835, 0x00000000, 7, 0x00000000, 0x00000080, 0x00000000, 0x00000010, 0x00000000, 0.000000, 0.000000, 0), +(45054, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 15), +(45057, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(45234, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(45243, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(45244, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(45354, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(45481, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(45482, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(45483, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(45484, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 45), +(46025, 0x00000020, 6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46092, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46098, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46569, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(46662, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 20), +(46832, 0x00000000, 7, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(46854, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46855, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46867, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46913, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46914, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46915, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46916, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46951, 0x00000000, 4, 0x00000400, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46952, 0x00000000, 0, 0x00000400, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46953, 0x00000000, 0, 0x00000400, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47195, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(47196, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(47197, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(47201, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47202, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47203, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47204, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47205, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47232, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47234, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47235, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47245, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47246, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47247, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47258, 0x00000000, 5, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47259, 0x00000000, 5, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47260, 0x00000000, 5, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47263, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 20), +(47264, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 20), +(47265, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 20), +(47509, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47511, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47515, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47516, 0x00000000, 6, 0x00001800, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47517, 0x00000000, 6, 0x00001800, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47535, 0x00000000, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47536, 0x00000000, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47537, 0x00000000, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47538, 0x00000000, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47539, 0x00000000, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47549, 0x00000000, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47551, 0x00000000, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47552, 0x00000000, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47555, 0x00000000, 6, 0x00001800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47556, 0x00000000, 6, 0x00001800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47557, 0x00000000, 6, 0x00001800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47572, 0x00000000, 6, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47580, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47581, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47582, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48110, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0), +(48111, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0), +(48112, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0), +(48113, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0), +(48159, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48160, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48483, 0x00000000, 7, 0x00008800, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48484, 0x00000000, 7, 0x00008800, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48485, 0x00000000, 7, 0x00008800, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48496, 0x00000000, 7, 0x00000060, 0x02000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(48499, 0x00000000, 7, 0x00000060, 0x02000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(48500, 0x00000000, 7, 0x00000060, 0x02000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(48506, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48510, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48511, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48516, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 30), +(48521, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 30), +(48525, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 30), +(48833, 0x00000000, 7, 0x00000000, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48835, 0x00000000, 10, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48837, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48951, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(48952, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(48988, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(49018, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49137, 0x00000000, 15, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49188, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49208, 0x00000000, 15, 0x00440000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49222, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49280, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49281, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49283, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49284, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49503, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(49504, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(49529, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49530, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49531, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49532, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49622, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(49657, 0x00000000, 15, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(50781, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51123, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51127, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51128, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51129, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51130, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51346, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(51349, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(51352, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(51359, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(51466, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51470, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51474, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(51478, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(51556, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51557, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51558, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51562, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51563, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51564, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51565, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51566, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51625, 0x00000000, 8, 0x1000A000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51626, 0x00000000, 8, 0x1000A000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51627, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(51628, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(51629, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(51634, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51635, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51636, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51664, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51665, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51667, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51668, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51669, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51672, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 1), +(51674, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 1), +(51679, 0x00000000, 8, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51692, 0x00000000, 8, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51696, 0x00000000, 8, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51698, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 1), +(51700, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 1), +(51701, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 1), +(52020, 0x00000000, 7, 0x00008000, 0x00100000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52127, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52129, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52131, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52134, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52136, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52138, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52420, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(52423, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(52795, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52797, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52798, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52799, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52800, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52898, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53137, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53138, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53215, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53216, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53217, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53221, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53222, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53224, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53228, 0x00000000, 9, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53232, 0x00000000, 9, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53256, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53259, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53260, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53290, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53291, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53292, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53293, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53294, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53380, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53381, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53382, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53383, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53384, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53486, 0x00000000, 10, 0x00800000, 0x00028000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53488, 0x00000000, 10, 0x00800000, 0x00028000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53551, 0x00000000, 10, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53552, 0x00000000, 10, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53553, 0x00000000, 10, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53569, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53576, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53601, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(53671, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53673, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54149, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(54151, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54154, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54155, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54278, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(54486, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54488, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54489, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54490, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54738, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(54747, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(54749, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(54754, 0x00000000, 7, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54841, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(54936, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54937, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54939, 0x00000000, 10, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55440, 0x00000000, 11, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55620, 0x00000000, 15, 0x00000001, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55623, 0x00000000, 15, 0x00000001, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55666, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55667, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55668, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55669, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55670, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55677, 0x00000000, 6, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55680, 0x00000000, 6, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55689, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56218, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56342, 0x00000000, 9, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56343, 0x00000000, 9, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56344, 0x00000000, 9, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56364, 0x00000000, 3, 0x00000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56451, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(56611, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56612, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56613, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56614, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56636, 0x00000000, 4, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56637, 0x00000000, 4, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56638, 0x00000000, 4, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56821, 0x00000000, 8, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56822, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56834, 0x00000000, 15, 0x00440000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56835, 0x00000000, 15, 0x00440000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(57878, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 0), +(57880, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 0), +(57881, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 0), +(57960, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(58357, 0x00000000, 4, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(58364, 0x00000000, 4, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58372, 0x00000000, 4, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58386, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(58435, 0x00000000, 5, 0x00000002, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58436, 0x00000000, 5, 0x00000002, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58437, 0x00000000, 5, 0x00000002, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58616, 0x00000000, 15, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58620, 0x00000000, 15, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58626, 0x00000000, 15, 0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58631, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58642, 0x00000000, 15, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58644, 0x00000000, 15, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58647, 0x00000000, 15, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58676, 0x00000000, 15, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58677, 0x00000000, 15, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58872, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(58874, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(58901, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(59057, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(59176, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(59327, 0x00000000, 15, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(59725, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(60132, 0x00000000, 15, 0x00000000, 0x08020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60170, 0x00000000, 5, 0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60172, 0x00000000, 5, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(60200, 0x00000000, 15, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(60493, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(60503, 0x00000000, 4, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60537, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(60564, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60571, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60572, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60573, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60574, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60575, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60617, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(60710, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60717, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60719, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60722, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60724, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60726, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60770, 0x00000000, 11, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60818, 0x00000000, 10, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60826, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(61188, 0x00000000, 5, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(61324, 0x00000000, 10, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); /*!40000 ALTER TABLE `spell_proc_event` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/realmd.sql b/sql/realmd.sql index b2b881499..4d08c776a 100644 --- a/sql/realmd.sql +++ b/sql/realmd.sql @@ -21,7 +21,7 @@ DROP TABLE IF EXISTS `realmd_db_version`; CREATE TABLE `realmd_db_version` ( - `required_2008_11_07_04_realmd_account` bit(1) default NULL + `required_6976_01_realmd_realmd_db_version` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Last applied sql update to DB'; -- diff --git a/sql/tools/Makefile.am b/sql/tools/Makefile.am index dabcc67cd..49a79346e 100644 --- a/sql/tools/Makefile.am +++ b/sql/tools/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/sql/tools/README b/sql/tools/README index f5953acef..1b9cdd79b 100644 --- a/sql/tools/README +++ b/sql/tools/README @@ -1,6 +1,6 @@ = MaNGOS -- README = -Copyright (c) 2005-2008 MaNGOS +Copyright (c) 2005-2009 MaNGOS See the COPYING file for copying conditions. diff --git a/sql/updates/6970_01_mangos_playercreateinfo.sql b/sql/updates/6970_01_mangos_playercreateinfo.sql new file mode 100644 index 000000000..a6d774738 --- /dev/null +++ b/sql/updates/6970_01_mangos_playercreateinfo.sql @@ -0,0 +1,7 @@ +ALTER TABLE db_version CHANGE COLUMN required_6961_01_mangos_command required_6970_01_mangos_playercreateinfo bit; + +DELETE FROM `playercreateinfo` WHERE `race`=7 AND `class` IN (4,8,9); +INSERT INTO `playercreateinfo` VALUES +(7,4,0,1,-6240,331,383), +(7,8,0,1,-6240,331,383), +(7,9,0,1,-6240,331,383); diff --git a/sql/updates/6976_01_realmd_realmd_db_version.sql b/sql/updates/6976_01_realmd_realmd_db_version.sql new file mode 100644 index 000000000..0ebbb2c82 --- /dev/null +++ b/sql/updates/6976_01_realmd_realmd_db_version.sql @@ -0,0 +1 @@ +ALTER TABLE realmd_db_version CHANGE COLUMN required_2008_11_07_04_realmd_account required_6976_01_realmd_realmd_db_version bit; \ No newline at end of file diff --git a/sql/updates/6976_02_characters_character_db_version.sql b/sql/updates/6976_02_characters_character_db_version.sql new file mode 100644 index 000000000..5fc192058 --- /dev/null +++ b/sql/updates/6976_02_characters_character_db_version.sql @@ -0,0 +1 @@ +ALTER TABLE character_db_version CHANGE COLUMN required_2008_12_22_19_characters_item_instance required_6976_02_characters_character_db_version bit; \ No newline at end of file diff --git a/sql/updates/7002_01_mangos_spell_chain.sql b/sql/updates/7002_01_mangos_spell_chain.sql new file mode 100644 index 000000000..1ec5c5c03 --- /dev/null +++ b/sql/updates/7002_01_mangos_spell_chain.sql @@ -0,0 +1,9 @@ +ALTER TABLE db_version CHANGE COLUMN required_6970_01_mangos_playercreateinfo required_7002_01_mangos_spell_chain bit; + +DELETE FROM `spell_chain` WHERE `spell_id` IN (51490,59156,59158,59159); + +INSERT INTO `spell_chain` VALUES +(51490,0,51490,1,0), +(59156,51490,51490,2,0), +(59158,59156,51490,3,0), +(59159,59158,51490,4,0); diff --git a/sql/updates/7015_01_mangos_item_template.sql b/sql/updates/7015_01_mangos_item_template.sql new file mode 100644 index 000000000..bdf9a92e7 --- /dev/null +++ b/sql/updates/7015_01_mangos_item_template.sql @@ -0,0 +1,14 @@ +ALTER TABLE db_version CHANGE COLUMN required_7002_01_mangos_spell_chain required_7015_01_mangos_item_template bit; + +UPDATE item_template + SET maxcount = 0 WHERE maxcount > 32000; + +UPDATE item_template + SET stackable = 0 WHERE stackable > 32000; + +ALTER TABLE item_template + CHANGE COLUMN maxcount maxcount smallint(5) NOT NULL default '-1', + CHANGE COLUMN stackable stackable smallint(5) NOT NULL default '1'; + +UPDATE item_template + SET stackable = -1 WHERE stackable = 0; diff --git a/sql/updates/7024_01_mangos_spell_chain.sql b/sql/updates/7024_01_mangos_spell_chain.sql new file mode 100644 index 000000000..858e8506e --- /dev/null +++ b/sql/updates/7024_01_mangos_spell_chain.sql @@ -0,0 +1,31 @@ +ALTER TABLE db_version CHANGE COLUMN required_7015_01_mangos_item_template required_7024_01_mangos_spell_chain bit; + +/* Lifeblood (Herbalizm) */ +DELETE FROM `spell_chain` WHERE `spell_id` IN (55428,55480,55500,55501,55502,55503); +INSERT INTO `spell_chain` VALUES +(55428,0,55428,1,0), +(55480,55428,55428,2,0), +(55500,55480,55428,3,0), +(55501,55500,55428,4,0), +(55502,55501,55428,5,0), +(55503,55502,55428,6,0); + +/* Toughness (Mining) */ +DELETE FROM `spell_chain` WHERE `spell_id` IN (53120,53121,53122,53123,53124,53040); +INSERT INTO `spell_chain` VALUES +(53120,0,53120,1,0), +(53121,53120,53120,2,0), +(53122,53121,53120,3,0), +(53123,53122,53120,4,0), +(53124,53123,53120,5,0), +(53040,53124,53120,6,0); + +/* Master of Anatomy (Skinning) */ +DELETE FROM `spell_chain` WHERE `spell_id` IN (53125,53662,53663,53664,53665,53666); +INSERT INTO `spell_chain` VALUES +(53125,0,53125,1,0), +(53662,53125,53125,2,0), +(53663,53662,53125,3,0), +(53664,53663,53125,4,0), +(53665,53664,53125,5,0), +(53666,53665,53125,6,0); diff --git a/sql/updates/7026_01_mangos_battleground_template.sql b/sql/updates/7026_01_mangos_battleground_template.sql new file mode 100644 index 000000000..9da034c3e --- /dev/null +++ b/sql/updates/7026_01_mangos_battleground_template.sql @@ -0,0 +1,7 @@ +ALTER TABLE db_version CHANGE COLUMN required_7024_01_mangos_spell_chain required_7026_01_mangos_battleground_template bit; + +DELETE FROM battleground_template WHERE id IN (9,10,11); +INSERT INTO battleground_template VALUES +(9,0,0,0,0,1367,0,1368,0), +(10,5,5,10,80,1362,0,1363,0), +(11,5,5,10,80,1364,0,1365,0); diff --git a/sql/updates/7031_01_mangos_spell_proc_event.sql b/sql/updates/7031_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..d10f099fb --- /dev/null +++ b/sql/updates/7031_01_mangos_spell_proc_event.sql @@ -0,0 +1,25 @@ +ALTER TABLE db_version CHANGE COLUMN required_7026_01_mangos_battleground_template required_7031_01_mangos_spell_proc_event bit; + +-- (44445) Hot Streak (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44445); +INSERT INTO `spell_proc_event` VALUES (44445, 0x00, 3, 0x0000100000000013, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (44446) Hot Streak (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44446); +INSERT INTO `spell_proc_event` VALUES (44446, 0x00, 3, 0x0000100000000013, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (44448) Hot Streak (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44448); +INSERT INTO `spell_proc_event` VALUES (44448, 0x00, 3, 0x0000100000000013, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (54939) Glyph of Divinity () +DELETE FROM `spell_proc_event` WHERE `entry` IN (54939); +INSERT INTO `spell_proc_event` VALUES (54939, 0x00, 10, 0x0000000000008000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (54936) Glyph of Flash of Light () +DELETE FROM `spell_proc_event` WHERE `entry` IN (54936); +INSERT INTO `spell_proc_event` VALUES (54936, 0x00, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (54937) Glyph of Holy Light () +DELETE FROM `spell_proc_event` WHERE `entry` IN (54937); +INSERT INTO `spell_proc_event` VALUES (54937, 0x00, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); \ No newline at end of file diff --git a/sql/updates/7033_01_mangos_spell_proc_event.sql b/sql/updates/7033_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..b95cbf93f --- /dev/null +++ b/sql/updates/7033_01_mangos_spell_proc_event.sql @@ -0,0 +1,78 @@ +ALTER TABLE db_version CHANGE COLUMN required_7031_01_mangos_spell_proc_event required_7033_01_mangos_spell_proc_event bit; + +-- (48516) Eclipse (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48516); +INSERT INTO `spell_proc_event` VALUES (48516, 0x00, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0.000000, 0.000000, 30); + +-- (48521) Eclipse (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48521); +INSERT INTO `spell_proc_event` VALUES (48521, 0x00, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0.000000, 0.000000, 30); + +-- (48525) Eclipse (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48525); +INSERT INTO `spell_proc_event` VALUES (48525, 0x00, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0.000000, 0.000000, 30); + +-- (48496) Living Seed (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48496); +INSERT INTO `spell_proc_event` VALUES (48496, 0x00, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (48499) Living Seed (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48499); +INSERT INTO `spell_proc_event` VALUES (48499, 0x00, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (48500) Living Seed (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48500); +INSERT INTO `spell_proc_event` VALUES (48500, 0x00, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (53228) Rapid Recuperation (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (53228); +INSERT INTO `spell_proc_event` VALUES (53228, 0x00, 9, 0x0000000000000020, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (53232) Rapid Recuperation (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (53232); +INSERT INTO `spell_proc_event` VALUES (53232, 0x00, 9, 0x0000000000000020, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (55440) Glyph of Healing Wave () +DELETE FROM `spell_proc_event` WHERE `entry` IN (55440); +INSERT INTO `spell_proc_event` VALUES (55440, 0x00, 11, 0x0000000000000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (52795) Borrowed Time (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (52795); +INSERT INTO `spell_proc_event` VALUES (52795, 0x00, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (52797) Borrowed Time (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (52797); +INSERT INTO `spell_proc_event` VALUES (52797, 0x00, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (52798) Borrowed Time (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (52798); +INSERT INTO `spell_proc_event` VALUES (52798, 0x00, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (52799) Borrowed Time (Rank 4) +DELETE FROM `spell_proc_event` WHERE `entry` IN (52799); +INSERT INTO `spell_proc_event` VALUES (52799, 0x00, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (52800) Borrowed Time (Rank 5) +DELETE FROM `spell_proc_event` WHERE `entry` IN (52800); +INSERT INTO `spell_proc_event` VALUES (52800, 0x00, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (55677) Glyph of Dispel Magic () +DELETE FROM `spell_proc_event` WHERE `entry` IN (55677); +INSERT INTO `spell_proc_event` VALUES (55677, 0x00, 6, 0x0000000100000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (55680) Glyph of Prayer of Healing () +DELETE FROM `spell_proc_event` WHERE `entry` IN (55680); +INSERT INTO `spell_proc_event` VALUES (55680, 0x00, 6, 0x0000000000000200, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (47572) Psychic Horror (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47572); +INSERT INTO `spell_proc_event` VALUES (47572, 0x00, 6, 0x0000000000010000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (48159) Vampiric Touch (Rank 4) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48159); +INSERT INTO `spell_proc_event` VALUES (48159, 0x20, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (48160) Vampiric Touch (Rank 5) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48160); +INSERT INTO `spell_proc_event` VALUES (48160, 0x20, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + diff --git a/sql/updates/7034_01_mangos_spell_proc_event.sql b/sql/updates/7034_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..c7bc44bc4 --- /dev/null +++ b/sql/updates/7034_01_mangos_spell_proc_event.sql @@ -0,0 +1,798 @@ +ALTER TABLE db_version CHANGE COLUMN required_7033_01_mangos_spell_proc_event required_7034_01_mangos_spell_proc_event bit; + +DROP TABLE IF EXISTS `spell_proc_event`; +CREATE TABLE `spell_proc_event` ( + `entry` smallint(5) unsigned NOT NULL default '0', + `SchoolMask` tinyint(4) NOT NULL default '0', + `SpellFamilyName` smallint(5) unsigned NOT NULL default '0', + `SpellFamilyMask0` int(10) unsigned NOT NULL default '0', + `SpellFamilyMask1` int(10) unsigned NOT NULL default '0', + `SpellFamilyMask2` int(10) unsigned NOT NULL default '0', + `procFlags` int(10) unsigned NOT NULL default '0', + `procEx` int(10) unsigned NOT NULL default '0', + `ppmRate` float NOT NULL default '0', + `CustomChance` float NOT NULL default '0', + `Cooldown` int(10) unsigned NOT NULL default '0', + PRIMARY KEY (`entry`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +INSERT INTO `spell_proc_event` VALUES +( 324, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 325, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 905, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 945, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 974, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 1463, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +( 3232, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +( 5952, 0x00000000, 8, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +( 6346, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0.000000, 0.000000, 0), +( 7383, 0x00000001, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0.000000, 0.000000, 0), +( 7434, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +( 8134, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 8178, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +( 8494, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +( 8495, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +( 9452, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +( 9782, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +( 9784, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +( 9799, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(10191, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(10192, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(10193, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(10431, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(10432, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(11095, 0x00000000, 3, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(11119, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(11120, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(11129, 0x00000000, 3, 0x00C00017, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(11180, 0x00000010, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(11185, 0x00000000, 3, 0x00000080, 0x00000000, 0x00000000, 0x00050000, 0x00000000, 0.000000, 0.000000, 0), +(11255, 0x00000000, 3, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12169, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12281, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12289, 0x00000000, 4, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12298, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12311, 0x00000000, 4, 0x00000800, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12317, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12319, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12322, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(12487, 0x00000000, 3, 0x00000080, 0x00000000, 0x00000000, 0x00050000, 0x00000000, 0.000000, 0.000000, 0), +(12488, 0x00000000, 3, 0x00000080, 0x00000000, 0x00000000, 0x00050000, 0x00000000, 0.000000, 0.000000, 0), +(12598, 0x00000000, 3, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12668, 0x00000000, 4, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12724, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12725, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12726, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12727, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12797, 0x00000000, 4, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12799, 0x00000000, 4, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12812, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12813, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12814, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12815, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12834, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12846, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12847, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12848, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12849, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12867, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12872, 0x00000000, 3, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12873, 0x00000000, 3, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12958, 0x00000000, 4, 0x00000800, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12966, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12967, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12968, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12969, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12970, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12971, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12972, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12973, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12974, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12999, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 4.000000, 0.000000, 0), +(13000, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), +(13001, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 8.000000, 0.000000, 0), +(13002, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 10.000000, 0.000000, 0), +(13045, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(13046, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(13047, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(13048, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(13165, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(13754, 0x00000000, 8, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(13867, 0x00000000, 8, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(13983, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000018, 0.000000, 0.000000, 0), +(14070, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000018, 0.000000, 0.000000, 0), +(14071, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000018, 0.000000, 0.000000, 0), +(14156, 0x00000000, 8, 0x003E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14160, 0x00000000, 8, 0x003E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14161, 0x00000000, 8, 0x003E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14186, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14190, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14193, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14194, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14195, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14318, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14319, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14320, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14321, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14322, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14531, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14774, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14892, 0x00000000, 6, 0x10001E00, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15088, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15128, 0x00000004, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15268, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15277, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), +(15286, 0x00000020, 6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15323, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15324, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15325, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15326, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15337, 0x00000000, 6, 0x00002000, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15338, 0x00000000, 6, 0x00002000, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15346, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), +(15362, 0x00000000, 6, 0x10001E00, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15363, 0x00000000, 6, 0x10001E00, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15600, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 0), +(16164, 0x00000000, 11, 0x90100003, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16176, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16180, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16196, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16198, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16235, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16240, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16256, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16257, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16277, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16278, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16279, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16280, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16281, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16282, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16283, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16284, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16487, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16489, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16492, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16550, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16620, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(16624, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(16850, 0x00000000, 7, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(16864, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(16880, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16923, 0x00000000, 7, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(16924, 0x00000000, 7, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(16952, 0x00000000, 7, 0x00039000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16954, 0x00000000, 7, 0x00039000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16958, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16961, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17106, 0x00000000, 7, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17107, 0x00000000, 7, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17108, 0x00000000, 7, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17364, 0x00000008, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17495, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(17793, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17794, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0.000000, 0.000000, 0), +(17796, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17797, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17798, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17799, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17800, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17801, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17802, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17803, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(18073, 0x00000000, 5, 0x00000060, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18094, 0x00000000, 5, 0x0000000A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18095, 0x00000000, 5, 0x0000000A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18096, 0x00000000, 5, 0x00000060, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18119, 0x00000000, 5, 0x000003E5, 0x000010C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18120, 0x00000000, 5, 0x000003E5, 0x000010C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18820, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(19184, 0x00000000, 9, 0x00000014, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19228, 0x00000000, 0, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19232, 0x00000000, 9, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19233, 0x00000000, 9, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19387, 0x00000000, 9, 0x00000014, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19388, 0x00000000, 9, 0x00000014, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19572, 0x00000000, 9, 0x00800000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0), +(19573, 0x00000000, 9, 0x00800000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0), +(20049, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20056, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20057, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20128, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20131, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20132, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20164, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5.000000, 0.000000, 0), +(20165, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 20.000000, 0.000000, 0), +(20166, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 20.000000, 0.000000, 0), +(20182, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20210, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20212, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20213, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20214, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20215, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20234, 0x00000000, 10, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(20235, 0x00000000, 10, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(20375, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(20500, 0x00000000, 4, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(20501, 0x00000000, 4, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(20705, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20911, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(20925, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20927, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20928, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(21185, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(21882, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(21890, 0x00000000, 4, 0x2A764EEF, 0x0000036C, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(22007, 0x00000000, 3, 0x00200021, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(22618, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(22648, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(23547, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(23548, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(23551, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(23552, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(23572, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(23578, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(23581, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(23602, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(23686, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(23688, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(23689, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 4.000000, 0.000000, 0), +(23695, 0x00000000, 4, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(23721, 0x00000000, 9, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(23920, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(24353, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(24389, 0x00000000, 3, 0x00C00017, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(24398, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(24658, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00014110, 0x00000000, 0.000000, 0.000000, 0), +(24905, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 15.000000, 0.000000, 0), +(24932, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 6), +(25050, 0x00000004, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(25296, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(25469, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(25472, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(25669, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 0), +(25899, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(25988, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(26016, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(26107, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000064, 0.000000, 0.000000, 0), +(26119, 0x00000000, 10, 0x90100003, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(26128, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 0), +(26135, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(26480, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(26605, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(27044, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(27131, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(27179, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(27419, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(27498, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(27521, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(27656, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(27774, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(27787, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(27811, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(27815, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(27816, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28592, 0x00000010, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28593, 0x00000010, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28716, 0x00000000, 7, 0x00000010, 0x00000000, 0x00000000, 0x00048000, 0x00000000, 0.000000, 0.000000, 0), +(28719, 0x00000000, 7, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28744, 0x00000000, 7, 0x00000040, 0x00000000, 0x00000000, 0x00044000, 0x00000000, 0.000000, 0.000000, 0), +(28752, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28789, 0x00000000, 10, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28802, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(28809, 0x00000000, 6, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28812, 0x00000000, 8, 0x02000006, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28816, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(28823, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28847, 0x00000000, 7, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28849, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(29074, 0x00000014, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29075, 0x00000014, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29076, 0x00000014, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29150, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29179, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29180, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29385, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(29441, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 1), +(29444, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 1), +(29455, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(29501, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29593, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(29594, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(29624, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29625, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29626, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29632, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29633, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29634, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29635, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29636, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29637, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29801, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29834, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(29838, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(29977, 0x00000000, 3, 0x00C00017, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30003, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(30160, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30293, 0x00000000, 5, 0x00000381, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30295, 0x00000000, 5, 0x00000381, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30296, 0x00000000, 5, 0x00000381, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30299, 0x00000024, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30301, 0x00000024, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30302, 0x00000024, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30675, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30678, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30679, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30680, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30681, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30701, 0x0000001C, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30705, 0x0000001C, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30802, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30803, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30804, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30805, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30806, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30807, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30808, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30809, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30810, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30811, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30823, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 10.500000, 0.000000, 0), +(30881, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30883, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30884, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30885, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30886, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30937, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31124, 0x00000000, 8, 0x2000000E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31126, 0x00000000, 8, 0x2000000E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31244, 0x00000000, 8, 0x003E0000, 0x00000009, 0x00000000, 0x00000000, 0x00000004, 0.000000, 0.000000, 0), +(31245, 0x00000000, 8, 0x003E0000, 0x00000009, 0x00000000, 0x00000000, 0x00000004, 0.000000, 0.000000, 0), +(31394, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31569, 0x00000000, 3, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31570, 0x00000000, 3, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31785, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00008800, 0x00000000, 0.000000, 0.000000, 0), +(31794, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(31801, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 20.000000, 0.000000, 0), +(31833, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31835, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31836, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31904, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32385, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32387, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32392, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32393, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32394, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32587, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32593, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(32594, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(32642, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32734, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(32748, 0x00000000, 8, 0x00000000, 0x00000001, 0x00000000, 0x00000140, 0x00000000, 0.000000, 0.000000, 0), +(32776, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32777, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32837, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 45), +(32844, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(32885, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33076, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0), +(33089, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(33127, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(33142, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33145, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33146, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33150, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33151, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33154, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33191, 0x00000000, 6, 0x00808000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(33192, 0x00000000, 6, 0x00808000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(33193, 0x00000000, 6, 0x00808000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(33299, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(33510, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5.000000, 0.000000, 0), +(33648, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33719, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(33736, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(33746, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(33757, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(33759, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(33776, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00008800, 0x00000000, 0.000000, 0.000000, 0), +(33881, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33882, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33883, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34080, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 0), +(34138, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34139, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34258, 0x00000000, 10, 0x00000400, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34262, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(34320, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34355, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(34497, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34498, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34499, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34500, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34502, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34503, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34584, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(34586, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.500000, 0.000000, 0), +(34598, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(34749, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 0), +(34753, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34774, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.500000, 0.000000, 20), +(34783, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(34827, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(34859, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34860, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34914, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34916, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34917, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34935, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 8), +(34938, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 8), +(34939, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 8), +(34950, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34954, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(35077, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(35080, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 60), +(35083, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(35086, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(35100, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(35102, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(35103, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(35121, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(36096, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(36111, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37165, 0x00000000, 8, 0x00200400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37168, 0x00000000, 8, 0x003E0000, 0x00000009, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37170, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 0), +(37173, 0x00000000, 8, 0x2CBC0598, 0x00000106, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(37189, 0x00000000, 10, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 60), +(37193, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(37195, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37197, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 45), +(37213, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(37214, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37227, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 60), +(37237, 0x00000000, 11, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(37247, 0x00000008, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 45), +(37377, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37384, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37443, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(37514, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(37516, 0x00000000, 4, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37519, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000030, 0.000000, 0.000000, 0), +(37523, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(37528, 0x00000000, 4, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37536, 0x00000000, 4, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37568, 0x00000000, 6, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37594, 0x00000000, 6, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37600, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37601, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37603, 0x00000000, 6, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37655, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(37657, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 3), +(38026, 0x00000001, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0.000000, 0.000000, 0), +(38031, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(38290, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.600000, 0.000000, 0), +(38326, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(38327, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(38334, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(38347, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(38350, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(38394, 0x00000000, 5, 0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(38857, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(39027, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(39372, 0x00000030, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(39437, 0x00000004, 5, 0x00001364, 0x000000C0, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(39442, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0.000000, 0.000000, 0), +(39443, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(39530, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(39958, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.700000, 0.000000, 40), +(40407, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), +(40438, 0x00000000, 6, 0x00008040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40442, 0x00000000, 7, 0x00000014, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40444, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(40458, 0x00000000, 4, 0x02000000, 0x00000601, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40463, 0x00000000, 11, 0x00000081, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40470, 0x00000000, 10, 0xC0800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40475, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(40478, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40482, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(40485, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40899, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(41034, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(41260, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(41262, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(41381, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0.000000, 0.000000, 0), +(41393, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(41434, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 45), +(41469, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(41635, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0), +(41989, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.500000, 0.000000, 0), +(42083, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), +(42135, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 90), +(42136, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 90), +(42368, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(42370, 0x00000000, 11, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43019, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(43020, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(43338, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(43443, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(43726, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43728, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43737, 0x00000000, 7, 0x00000000, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(43739, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43741, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43745, 0x00000000, 10, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43748, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43750, 0x00000000, 11, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43819, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(44404, 0x00000000, 3, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44445, 0x00000000, 3, 0x00000013, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44446, 0x00000000, 3, 0x00000013, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44448, 0x00000000, 3, 0x00000013, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44835, 0x00000000, 7, 0x00000000, 0x00000080, 0x00000000, 0x00000010, 0x00000000, 0.000000, 0.000000, 0), +(45054, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 15), +(45057, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(45234, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(45243, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(45244, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(45354, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(45481, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(45482, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(45483, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(45484, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 45), +(46025, 0x00000020, 6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46092, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46098, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46569, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(46662, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 20), +(46832, 0x00000000, 7, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(46854, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46855, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46867, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46913, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46914, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46915, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46916, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46951, 0x00000000, 4, 0x00000400, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46952, 0x00000000, 0, 0x00000400, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46953, 0x00000000, 0, 0x00000400, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47195, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(47196, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(47197, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(47201, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47202, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47203, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47204, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47205, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47232, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47234, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47235, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47245, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47246, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47247, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47258, 0x00000000, 5, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47259, 0x00000000, 5, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47260, 0x00000000, 5, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47263, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 20), +(47264, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 20), +(47265, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 20), +(47509, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47511, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47515, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47516, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47517, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47535, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47536, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47537, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47538, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47539, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47572, 0x00000000, 6, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47580, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47581, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47582, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48159, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48160, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48483, 0x00000000, 7, 0x00008800, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48484, 0x00000000, 7, 0x00008800, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48485, 0x00000000, 7, 0x00008800, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48496, 0x00000000, 7, 0x00000060, 0x02000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(48499, 0x00000000, 7, 0x00000060, 0x02000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(48500, 0x00000000, 7, 0x00000060, 0x02000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(48506, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48510, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48511, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48516, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 30), +(48521, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 30), +(48525, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 30), +(48833, 0x00000000, 7, 0x00000000, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48835, 0x00000000, 10, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48837, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48951, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(48952, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(48988, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(49018, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49137, 0x00000000, 15, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49188, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49208, 0x00000000, 15, 0x00440000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49222, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49280, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49281, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49283, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49284, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49503, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(49504, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(49529, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49530, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49531, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49532, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49622, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(49657, 0x00000000, 15, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(50781, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51123, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51127, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51128, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51129, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51130, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51346, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(51349, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(51352, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(51359, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(51466, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51470, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51562, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51563, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51564, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51565, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51566, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51625, 0x00000000, 8, 0x1000A000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51626, 0x00000000, 8, 0x1000A000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51627, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(51628, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(51629, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(51634, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51635, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51636, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51664, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51665, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51667, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51668, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51669, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51672, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 1), +(51674, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 1), +(51679, 0x00000000, 8, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51692, 0x00000000, 8, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51696, 0x00000000, 8, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51698, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 1), +(51700, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 1), +(51701, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 1), +(52020, 0x00000000, 7, 0x00008000, 0x00100000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52127, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52129, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52131, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52134, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52136, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52138, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52420, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(52423, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(52795, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52797, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52798, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52799, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52800, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52898, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53137, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53138, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53215, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53216, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53217, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53221, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53222, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53224, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53228, 0x00000000, 9, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53232, 0x00000000, 9, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53256, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53259, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53260, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53290, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53291, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53292, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53293, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53294, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53380, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53381, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53382, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53383, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53384, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53486, 0x00000000, 10, 0x00800000, 0x00028000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53488, 0x00000000, 10, 0x00800000, 0x00028000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53551, 0x00000000, 10, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53552, 0x00000000, 10, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53553, 0x00000000, 10, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53569, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53576, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(54149, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(54486, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54488, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54489, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54490, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54738, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(54754, 0x00000000, 7, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54841, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(54936, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54937, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54939, 0x00000000, 10, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55440, 0x00000000, 11, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55620, 0x00000000, 15, 0x00000001, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55623, 0x00000000, 15, 0x00000001, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55666, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55667, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55668, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55669, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55670, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55677, 0x00000000, 6, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55680, 0x00000000, 6, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55689, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56218, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56342, 0x00000000, 9, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56343, 0x00000000, 9, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56344, 0x00000000, 9, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56364, 0x00000000, 3, 0x00000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56451, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(56611, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56612, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56613, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56614, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56636, 0x00000000, 4, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56637, 0x00000000, 4, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56638, 0x00000000, 4, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56821, 0x00000000, 8, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56822, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56834, 0x00000000, 15, 0x00440000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56835, 0x00000000, 15, 0x00440000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(57878, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 0), +(57880, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 0), +(57881, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 0), +(57960, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(58357, 0x00000000, 4, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(58364, 0x00000000, 4, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58372, 0x00000000, 4, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58386, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(58435, 0x00000000, 5, 0x00000002, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58436, 0x00000000, 5, 0x00000002, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58437, 0x00000000, 5, 0x00000002, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58616, 0x00000000, 15, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58620, 0x00000000, 15, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58626, 0x00000000, 15, 0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58631, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58642, 0x00000000, 15, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58644, 0x00000000, 15, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58647, 0x00000000, 15, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58676, 0x00000000, 15, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58677, 0x00000000, 15, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58872, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(58874, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(58901, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(59057, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(59176, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(59327, 0x00000000, 15, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(59725, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(60132, 0x00000000, 15, 0x00000000, 0x08020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60172, 0x00000000, 5, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(60200, 0x00000000, 15, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(60537, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(60564, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60571, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60572, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60573, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60574, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60575, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60617, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(60710, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60717, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60719, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60722, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60724, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60726, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60770, 0x00000000, 11, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60818, 0x00000000, 10, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60826, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(61324, 0x00000000, 10, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); \ No newline at end of file diff --git a/sql/updates/7040_01_mangos_achievement_reward.sql b/sql/updates/7040_01_mangos_achievement_reward.sql new file mode 100644 index 000000000..0402a0025 --- /dev/null +++ b/sql/updates/7040_01_mangos_achievement_reward.sql @@ -0,0 +1,36 @@ +ALTER TABLE db_version CHANGE COLUMN required_7034_01_mangos_spell_proc_event required_7040_01_mangos_achievement_reward bit; + +DROP TABLE IF EXISTS `achievement_reward`; +CREATE TABLE `achievement_reward` ( + `entry` mediumint(8) unsigned NOT NULL default '0', + `title_A` mediumint(8) unsigned NOT NULL default '0', + `title_H` mediumint(8) unsigned NOT NULL default '0', + `item` mediumint(8) unsigned NOT NULL default '0', + `sender` mediumint(8) unsigned NOT NULL default '0', + `subject` varchar(255) default NULL, + `text` text, + PRIMARY KEY (`entry`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Loot System'; + + +DROP TABLE IF EXISTS `locales_achievement_reward`; +CREATE TABLE `locales_achievement_reward` ( + `entry` mediumint(8) unsigned NOT NULL default '0', + `subject_loc1` varchar(100) NOT NULL default '', + `subject_loc2` varchar(100) NOT NULL default '', + `subject_loc3` varchar(100) NOT NULL default '', + `subject_loc4` varchar(100) NOT NULL default '', + `subject_loc5` varchar(100) NOT NULL default '', + `subject_loc6` varchar(100) NOT NULL default '', + `subject_loc7` varchar(100) NOT NULL default '', + `subject_loc8` varchar(100) NOT NULL default '', + `text_loc1` text default NULL, + `text_loc2` text default NULL, + `text_loc3` text default NULL, + `text_loc4` text default NULL, + `text_loc5` text default NULL, + `text_loc6` text default NULL, + `text_loc7` text default NULL, + `text_loc8` text default NULL, + PRIMARY KEY (`entry`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/sql/updates/7044_01_mangos_spell_proc_event.sql b/sql/updates/7044_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..576d5611a --- /dev/null +++ b/sql/updates/7044_01_mangos_spell_proc_event.sql @@ -0,0 +1,17 @@ +ALTER TABLE db_version CHANGE COLUMN required_7040_01_mangos_achievement_reward required_7044_01_mangos_spell_proc_event bit; + +-- (48110) Prayer of Mending (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48110); +INSERT INTO `spell_proc_event` VALUES (48110, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0); + +-- (48112) Prayer of Mending (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48112); +INSERT INTO `spell_proc_event` VALUES (48112, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0); + +-- (48111) Prayer of Mending (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48111); +INSERT INTO `spell_proc_event` VALUES (48111, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0); + +-- (48113) Prayer of Mending (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48113); +INSERT INTO `spell_proc_event` VALUES (48113, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0); \ No newline at end of file diff --git a/sql/updates/7047_01_characters_character_spell.sql b/sql/updates/7047_01_characters_character_spell.sql new file mode 100644 index 000000000..a0f3abc8d --- /dev/null +++ b/sql/updates/7047_01_characters_character_spell.sql @@ -0,0 +1,11 @@ +ALTER TABLE character_db_version CHANGE COLUMN required_6976_02_characters_character_db_version required_7047_01_characters_character_spell bit; + +DELETE FROM `character_spell` WHERE `spell` IN ('28880', 59542, 59543, 59544, 59545, 59547, 59548); + +INSERT INTO character_spell SELECT characters.guid as guid, 28880, 4294967295, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 1; +INSERT INTO character_spell SELECT characters.guid as guid, 59542, 4294967295, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 2; +INSERT INTO character_spell SELECT characters.guid as guid, 59543, 4294967295, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 3; +INSERT INTO character_spell SELECT characters.guid as guid, 59544, 4294967295, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 5; +INSERT INTO character_spell SELECT characters.guid as guid, 59545, 4294967295, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 6; +INSERT INTO character_spell SELECT characters.guid as guid, 59547, 4294967295, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 7; +INSERT INTO character_spell SELECT characters.guid as guid, 59548, 4294967295, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 8; diff --git a/sql/updates/7047_02_mangos_playercreateinfo_action.sql b/sql/updates/7047_02_mangos_playercreateinfo_action.sql new file mode 100644 index 000000000..894334b86 --- /dev/null +++ b/sql/updates/7047_02_mangos_playercreateinfo_action.sql @@ -0,0 +1,11 @@ +ALTER TABLE db_version CHANGE COLUMN required_7044_01_mangos_spell_proc_event required_7047_02_mangos_playercreateinfo_action bit; + +DELETE FROM `playercreateinfo_action` WHERE `action` IN ('28880', 59542, 59543, 59544, 59545, 59547, 59548); +INSERT INTO `playercreateinfo_action` VALUES +(11,1,74,28880,0,0), +(11,2,3,59542,0,0), +(11,3,3,59543,0,0), +(11,5,3,59544,0,0), +(11,6,6,59545,0,0), +(11,7,3,59547,0,0), +(11,8,3,59548,0,0); \ No newline at end of file diff --git a/sql/updates/7047_03_mangos_playercreateinfo_spell.sql b/sql/updates/7047_03_mangos_playercreateinfo_spell.sql new file mode 100644 index 000000000..c82490788 --- /dev/null +++ b/sql/updates/7047_03_mangos_playercreateinfo_spell.sql @@ -0,0 +1,12 @@ +ALTER TABLE db_version CHANGE COLUMN required_7047_02_mangos_playercreateinfo_action required_7047_03_mangos_playercreateinfo_spell bit; + +DELETE FROM `playercreateinfo_spell` WHERE `Spell` IN ('28880', 59542, 59543, 59544, 59545, 59547, 59548); + +INSERT INTO `playercreateinfo_spell` VALUES +(11,1,28880,'Gift of the Naaru',1), +(11,2,59542,'Gift of the Naaru',1), +(11,3,59543,'Gift of the Naaru',1), +(11,5,59544,'Gift of the Naaru',1), +(11,6,59545,'Gift of the Naaru',1), +(11,7,59547,'Gift of the Naaru',1), +(11,8,59548,'Gift of the Naaru',1); \ No newline at end of file diff --git a/sql/updates/7050_01_mangos_spell_proc_event.sql b/sql/updates/7050_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..bd01cabdd --- /dev/null +++ b/sql/updates/7050_01_mangos_spell_proc_event.sql @@ -0,0 +1,13 @@ +ALTER TABLE db_version CHANGE COLUMN required_7047_03_mangos_playercreateinfo_spell required_7050_01_mangos_spell_proc_event bit; + +-- (34753) Holy Concentration (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (34753); +INSERT INTO `spell_proc_event` VALUES (34753, 0x00, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (34859) Holy Concentration (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (34859); +INSERT INTO `spell_proc_event` VALUES (34859, 0x00, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (34860) Holy Concentration (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (34860); +INSERT INTO `spell_proc_event` VALUES (34860, 0x00, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); \ No newline at end of file diff --git a/sql/updates/7051_01_mangos_spell_proc_event.sql b/sql/updates/7051_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..8775ee158 --- /dev/null +++ b/sql/updates/7051_01_mangos_spell_proc_event.sql @@ -0,0 +1,41 @@ +ALTER TABLE db_version CHANGE COLUMN required_7050_01_mangos_spell_proc_event required_7051_01_mangos_spell_proc_event bit; + +-- (44546) Brain Freeze (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44546); +INSERT INTO `spell_proc_event` VALUES (44546, 0x00, 3, 0x020002A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (44548) Brain Freeze (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44548); +INSERT INTO `spell_proc_event` VALUES (44548, 0x00, 3, 0x020002A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (44549) Brain Freeze (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44549); +INSERT INTO `spell_proc_event` VALUES (44549, 0x00, 3, 0x020002A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (44449) Burnout (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44449); +INSERT INTO `spell_proc_event` VALUES (44449, 0x00, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (44469) Burnout (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44469); +INSERT INTO `spell_proc_event` VALUES (44469, 0x00, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (44470) Burnout (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44470); +INSERT INTO `spell_proc_event` VALUES (44470, 0x00, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (44471) Burnout (Rank 4) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44471); +INSERT INTO `spell_proc_event` VALUES (44471, 0x00, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (44472) Burnout (Rank 5) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44472); +INSERT INTO `spell_proc_event` VALUES (44472, 0x00, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (54747) Burning Determination (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (54747); +INSERT INTO `spell_proc_event` VALUES (54747, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); + +-- (54749) Burning Determination (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (54749); +INSERT INTO `spell_proc_event` VALUES (54749, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); diff --git a/sql/updates/7052_01_mangos_spell_proc_event.sql b/sql/updates/7052_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..a59e3526d --- /dev/null +++ b/sql/updates/7052_01_mangos_spell_proc_event.sql @@ -0,0 +1,13 @@ +ALTER TABLE db_version CHANGE COLUMN required_7051_01_mangos_spell_proc_event required_7052_01_mangos_spell_proc_event bit; + +-- (47549) Improved Holy Concentration (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47549); +INSERT INTO `spell_proc_event` VALUES (47549, 0x00, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (47551) Improved Holy Concentration (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47551); +INSERT INTO `spell_proc_event` VALUES (47551, 0x00, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (47552) Improved Holy Concentration (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47552); +INSERT INTO `spell_proc_event` VALUES (47552, 0x00, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); \ No newline at end of file diff --git a/sql/updates/7053_01_mangos_spell_proc_event.sql b/sql/updates/7053_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..5d29f5d40 --- /dev/null +++ b/sql/updates/7053_01_mangos_spell_proc_event.sql @@ -0,0 +1,62 @@ +ALTER TABLE db_version CHANGE COLUMN required_7052_01_mangos_spell_proc_event required_7053_01_mangos_spell_proc_event bit; + +-- (60493) Dying Curse () +DELETE FROM `spell_proc_event` WHERE `entry` IN (60493); +INSERT INTO `spell_proc_event` VALUES (60493, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45); + +-- (60503) Taste for Blood () +DELETE FROM `spell_proc_event` WHERE `entry` IN (60503); +INSERT INTO `spell_proc_event` VALUES (60503, 0x00, 4, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (61188) Chaotic Mind () +DELETE FROM `spell_proc_event` WHERE `entry` IN (61188); +INSERT INTO `spell_proc_event` VALUES (61188, 0x00, 5, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (60170) Corruption Triggers Crit () +DELETE FROM `spell_proc_event` WHERE `entry` IN (60170); +INSERT INTO `spell_proc_event` VALUES (60170, 0x00, 5, 0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (36541) Curse of Burning Shadows () +DELETE FROM `spell_proc_event` WHERE `entry` IN (36541); +INSERT INTO `spell_proc_event` VALUES (36541, 0x04, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (54278) Empowered Imp () +DELETE FROM `spell_proc_event` WHERE `entry` IN (54278); +INSERT INTO `spell_proc_event` VALUES (54278, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (37379) Flameshadow () +DELETE FROM `spell_proc_event` WHERE `entry` IN (37379); +INSERT INTO `spell_proc_event` VALUES (37379, 0x20, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (53671) Judgements of the Pure (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (53671); +INSERT INTO `spell_proc_event` VALUES (53671, 0x00, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (53673) Judgements of the Pure (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (53673); +INSERT INTO `spell_proc_event` VALUES (53673, 0x00, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (54151) Judgements of the Pure (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (54151); +INSERT INTO `spell_proc_event` VALUES (54151, 0x00, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (54154) Judgements of the Pure (Rank 4) +DELETE FROM `spell_proc_event` WHERE `entry` IN (54154); +INSERT INTO `spell_proc_event` VALUES (54154, 0x00, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (54155) Judgements of the Pure (Rank 5) +DELETE FROM `spell_proc_event` WHERE `entry` IN (54155); +INSERT INTO `spell_proc_event` VALUES (54155, 0x00, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (31876) Judgements of the Wise (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (31876); +INSERT INTO `spell_proc_event` VALUES (31876, 0x00, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (31877) Judgements of the Wise (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (31877); +INSERT INTO `spell_proc_event` VALUES (31877, 0x00, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (31878) Judgements of the Wise (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (31878); +INSERT INTO `spell_proc_event` VALUES (31878, 0x00, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + diff --git a/sql/updates/7056_01_mangos_spell_proc_event.sql b/sql/updates/7056_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..c4788253e --- /dev/null +++ b/sql/updates/7056_01_mangos_spell_proc_event.sql @@ -0,0 +1,25 @@ +ALTER TABLE db_version CHANGE COLUMN required_7053_01_mangos_spell_proc_event required_7056_01_mangos_spell_proc_event bit; + +-- (20210) Illumination (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (20210); +INSERT INTO `spell_proc_event` VALUES (20210, 0x00, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (20212) Illumination (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (20212); +INSERT INTO `spell_proc_event` VALUES (20212, 0x00, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (20213) Illumination (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (20213); +INSERT INTO `spell_proc_event` VALUES (20213, 0x00, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (20214) Illumination (Rank 4) +DELETE FROM `spell_proc_event` WHERE `entry` IN (20214); +INSERT INTO `spell_proc_event` VALUES (20214, 0x00, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (20215) Illumination (Rank 5) +DELETE FROM `spell_proc_event` WHERE `entry` IN (20215); +INSERT INTO `spell_proc_event` VALUES (20215, 0x00, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (33953) Essence of Life () +DELETE FROM `spell_proc_event` WHERE `entry` IN (33953); +INSERT INTO `spell_proc_event` VALUES (33953, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 45); \ No newline at end of file diff --git a/sql/updates/7059_01_characters_character_spell.sql b/sql/updates/7059_01_characters_character_spell.sql new file mode 100644 index 000000000..6280798cc --- /dev/null +++ b/sql/updates/7059_01_characters_character_spell.sql @@ -0,0 +1,4 @@ +ALTER TABLE character_db_version CHANGE COLUMN required_7047_01_characters_character_spell required_7059_01_characters_character_spell bit; + +ALTER TABLE character_spell + DROP slot; diff --git a/sql/updates/7059_02_characters_pet_spell.sql b/sql/updates/7059_02_characters_pet_spell.sql new file mode 100644 index 000000000..e2ee87b9f --- /dev/null +++ b/sql/updates/7059_02_characters_pet_spell.sql @@ -0,0 +1,4 @@ +ALTER TABLE character_db_version CHANGE COLUMN required_7059_01_characters_character_spell required_7059_02_characters_pet_spell bit; + +ALTER TABLE pet_spell + DROP slot; diff --git a/sql/updates/7060_01_mangos_spell_proc_event.sql b/sql/updates/7060_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..dbe87be7f --- /dev/null +++ b/sql/updates/7060_01_mangos_spell_proc_event.sql @@ -0,0 +1,31 @@ +ALTER TABLE db_version CHANGE COLUMN required_7056_01_mangos_spell_proc_event required_7060_01_mangos_spell_proc_event bit; + +-- (51556) Ancestral Awakening (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (51556); +INSERT INTO `spell_proc_event` VALUES (51556, 0x00, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (51557) Ancestral Awakening (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (51557); +INSERT INTO `spell_proc_event` VALUES (51557, 0x00, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (51558) Ancestral Awakening (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (51558); +INSERT INTO `spell_proc_event` VALUES (51558, 0x00, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (47555) Serendipity (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47555); +INSERT INTO `spell_proc_event` VALUES (47555, 0x00, 6, 0x00001800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (47556) Serendipity (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47556); +INSERT INTO `spell_proc_event` VALUES (47556, 0x00, 6, 0x00001800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (47557) Serendipity (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47557); +INSERT INTO `spell_proc_event` VALUES (47557, 0x00, 6, 0x00001800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (32409) Shadow Word: Death () +DELETE FROM `spell_proc_event` WHERE `entry` IN (32409); +INSERT INTO `spell_proc_event` VALUES (32409, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + + diff --git a/sql/updates/7061_01_mangos_spell_proc_event.sql b/sql/updates/7061_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..a4f85f40f --- /dev/null +++ b/sql/updates/7061_01_mangos_spell_proc_event.sql @@ -0,0 +1,41 @@ +ALTER TABLE db_version CHANGE COLUMN required_7060_01_mangos_spell_proc_event required_7061_01_mangos_spell_proc_event bit; + +-- (47516) Grace (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47516); +INSERT INTO `spell_proc_event` VALUES (47516, 0x00, 6, 0x00001800, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (47517) Grace (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47517); +INSERT INTO `spell_proc_event` VALUES (47517, 0x00, 6, 0x00001800, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (14892) Inspiration (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (14892); +INSERT INTO `spell_proc_event` VALUES (14892, 0x00, 6, 0x10001E00, 0x00010004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (15362) Inspiration (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (15362); +INSERT INTO `spell_proc_event` VALUES (15362, 0x00, 6, 0x10001E00, 0x00010004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (15363) Inspiration (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (15363); +INSERT INTO `spell_proc_event` VALUES (15363, 0x00, 6, 0x10001E00, 0x00010004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (47535) Rapture (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47535); +INSERT INTO `spell_proc_event` VALUES (47535, 0x00, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); + +-- (47536) Rapture (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47536); +INSERT INTO `spell_proc_event` VALUES (47536, 0x00, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); + +-- (47537) Rapture (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47537); +INSERT INTO `spell_proc_event` VALUES (47537, 0x00, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); + +-- (47538) Rapture (Rank 4) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47538); +INSERT INTO `spell_proc_event` VALUES (47538, 0x00, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); + +-- (47539) Rapture (Rank 5) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47539); +INSERT INTO `spell_proc_event` VALUES (47539, 0x00, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); diff --git a/sql/updates/7063_01_mangos_spell_proc_event.sql b/sql/updates/7063_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..d3bbbe754 --- /dev/null +++ b/sql/updates/7063_01_mangos_spell_proc_event.sql @@ -0,0 +1,13 @@ +ALTER TABLE db_version CHANGE COLUMN required_7061_01_mangos_spell_proc_event required_7063_01_mangos_spell_proc_event bit; + +-- (51474) Astral Shift (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (51474); +INSERT INTO `spell_proc_event` VALUES (51474, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); + +-- (51478) Astral Shift (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (51478); +INSERT INTO `spell_proc_event` VALUES (51478, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); + +-- (53601) Sacred Shield (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (53601); +INSERT INTO `spell_proc_event` VALUES (53601, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6); \ No newline at end of file diff --git a/sql/updates/7067_01_mangos_playercreateinfo_spell.sql b/sql/updates/7067_01_mangos_playercreateinfo_spell.sql new file mode 100644 index 000000000..b26adb333 --- /dev/null +++ b/sql/updates/7067_01_mangos_playercreateinfo_spell.sql @@ -0,0 +1,6 @@ +ALTER TABLE db_version CHANGE COLUMN required_7063_01_mangos_spell_proc_event required_7067_01_mangos_playercreateinfo_spell bit; + +ALTER TABLE playercreateinfo_spell + DROP COLUMN Active; + +DELETE FROM playercreateinfo_spell WHERE Spell IN (1178,3025,5419,5420,5421,7376,7381,9635,21156,21178,24905,33948,34123,40121); diff --git a/sql/updates/7067_02_mangos_spell_learn_spell.sql b/sql/updates/7067_02_mangos_spell_learn_spell.sql new file mode 100644 index 000000000..9c16468af --- /dev/null +++ b/sql/updates/7067_02_mangos_spell_learn_spell.sql @@ -0,0 +1,33 @@ +ALTER TABLE db_version CHANGE COLUMN required_7067_01_mangos_playercreateinfo_spell required_7067_02_mangos_spell_learn_spell bit; + +ALTER TABLE spell_learn_spell + ADD COLUMN Active tinyint(3) unsigned NOT NULL default '1' AFTER SpellID; + +DELETE FROM spell_learn_spell WHERE Entry IN ( + 71,768,783,1066,2458,2457,5487,5487,9634,9634,17002,24858,24866, + 33872,33873,33891,33891,33943,33943,33943,40123,40123 +); + +INSERT INTO spell_learn_spell VALUES +(71,7376,0), +(768,3025,0), +(783,5419,0), +(1066,5421,0), +(2457,21156,0), +(2458,7381,0), +(5487,1178,0), +(5487,21178,0), +(9634,9635,0), +(9634,21178,0), +(17002,24867,0), +(24858,24905,0), +(24866,24864,0), +(33872,47179,0), +(33873,47180,0), +(33891,5420,0), +(33891,34123,0), +(33943,33948,0), +(33943,34090,1), +(33943,34764,0), +(40123,40121,0), +(40123,40122,0); diff --git a/sql/updates/7067_03_characters_character_spell.sql b/sql/updates/7067_03_characters_character_spell.sql new file mode 100644 index 000000000..7dd212210 --- /dev/null +++ b/sql/updates/7067_03_characters_character_spell.sql @@ -0,0 +1,3 @@ +ALTER TABLE character_db_version CHANGE COLUMN required_7059_02_characters_pet_spell required_7067_03_characters_character_spell bit; + +DELETE FROM `character_spell` WHERE `spell` IN (7376,3025,5419,5421,21156,7381,1178,21178,9635,21178,24905,5420,34123,33948,34090,34764,40121,40122); diff --git a/sql/updates/7074_01_mangos_playercreateinfo_spell.sql b/sql/updates/7074_01_mangos_playercreateinfo_spell.sql new file mode 100644 index 000000000..7bf0b6775 --- /dev/null +++ b/sql/updates/7074_01_mangos_playercreateinfo_spell.sql @@ -0,0 +1,2797 @@ +ALTER TABLE db_version CHANGE COLUMN required_7067_02_mangos_spell_learn_spell required_7074_01_mangos_playercreateinfo_spell bit; + +DELETE FROM `playercreateinfo_spell`; + +INSERT INTO `playercreateinfo_spell` VALUES +(1,1,78,'Heroic Strike'), +(1,1,81,'Dodge'), +(1,1,107,'Block'), +(1,1,196,'One-Handed Axes'), +(1,1,198,'One-Handed Maces'), +(1,1,201,'One-Handed Swords'), +(1,1,203,'Unarmed'), +(1,1,204,'Defense'), +(1,1,522,'SPELLDEFENSE (DND)'), +(1,1,668,'Language Common'), +(1,1,1843,'Disarm'), +(1,1,2382,'Generic'), +(1,1,2457,'Battle Stance'), +(1,1,2479,'Honorless Target'), +(1,1,3050,'Detect'), +(1,1,3365,'Opening'), +(1,1,5301,'Defensive State (DND)'), +(1,1,6233,'Closing'), +(1,1,6246,'Closing'), +(1,1,6247,'Opening'), +(1,1,6477,'Opening'), +(1,1,6478,'Opening'), +(1,1,6603,'Attack'), +(1,1,7266,'Duel'), +(1,1,7267,'Grovel'), +(1,1,7355,'Stuck'), +(1,1,8386,'Attacking'), +(1,1,8737,'Mail'), +(1,1,9077,'Leather'), +(1,1,9078,'Cloth'), +(1,1,9116,'Shield'), +(1,1,9125,'Generic'), +(1,1,20597,'Sword Specialization'), +(1,1,20598,'The Human Spirit'), +(1,1,20599,'Diplomacy'), +(1,1,20864,'Mace Specialization'), +(1,1,21651,'Opening'), +(1,1,21652,'Closing'), +(1,1,22027,'Remove Insignia'), +(1,1,22810,'Opening - No Text'), +(1,1,32215,'Victorious State'), +(1,1,45927,'Summon Friend'), +(1,1,58985,'Perception'), +(1,1,59752,'Every Man for Himself'), +(1,1,61437,'Opening'), +(1,2,81,'Dodge'), +(1,2,107,'Block'), +(1,2,198,'One-Handed Maces'), +(1,2,199,'Two-Handed Maces'), +(1,2,203,'Unarmed'), +(1,2,204,'Defense'), +(1,2,522,'SPELLDEFENSE (DND)'), +(1,2,635,'Holy Light'), +(1,2,668,'Language Common'), +(1,2,1843,'Disarm'), +(1,2,2382,'Generic'), +(1,2,2479,'Honorless Target'), +(1,2,3050,'Detect'), +(1,2,3365,'Opening'), +(1,2,6233,'Closing'), +(1,2,6246,'Closing'), +(1,2,6247,'Opening'), +(1,2,6477,'Opening'), +(1,2,6478,'Opening'), +(1,2,6603,'Attack'), +(1,2,7266,'Duel'), +(1,2,7267,'Grovel'), +(1,2,7355,'Stuck'), +(1,2,8386,'Attacking'), +(1,2,8737,'Mail'), +(1,2,9077,'Leather'), +(1,2,9078,'Cloth'), +(1,2,9116,'Shield'), +(1,2,9125,'Generic'), +(1,2,20154,'Seal of Righteousness'), +(1,2,20597,'Sword Specialization'), +(1,2,20598,'The Human Spirit'), +(1,2,20599,'Diplomacy'), +(1,2,20864,'Mace Specialization'), +(1,2,21651,'Opening'), +(1,2,21652,'Closing'), +(1,2,22027,'Remove Insignia'), +(1,2,22810,'Opening - No Text'), +(1,2,27762,'Libram'), +(1,2,45927,'Summon Friend'), +(1,2,58985,'Perception'), +(1,2,59752,'Every Man for Himself'), +(1,2,61437,'Opening'), +(1,4,81,'Dodge'), +(1,4,203,'Unarmed'), +(1,4,204,'Defense'), +(1,4,522,'SPELLDEFENSE (DND)'), +(1,4,668,'Language Common'), +(1,4,1180,'Daggers'), +(1,4,1752,'Sinister Strike'), +(1,4,1843,'Disarm'), +(1,4,2098,'Eviscerate'), +(1,4,2382,'Generic'), +(1,4,2479,'Honorless Target'), +(1,4,2567,'Thrown'), +(1,4,2764,'Throw'), +(1,4,3050,'Detect'), +(1,4,3365,'Opening'), +(1,4,6233,'Closing'), +(1,4,6246,'Closing'), +(1,4,6247,'Opening'), +(1,4,6477,'Opening'), +(1,4,6478,'Opening'), +(1,4,6603,'Attack'), +(1,4,7266,'Duel'), +(1,4,7267,'Grovel'), +(1,4,7355,'Stuck'), +(1,4,8386,'Attacking'), +(1,4,9077,'Leather'), +(1,4,9078,'Cloth'), +(1,4,9125,'Generic'), +(1,4,16092,'Defensive State (DND)'), +(1,4,20597,'Sword Specialization'), +(1,4,20598,'The Human Spirit'), +(1,4,20599,'Diplomacy'), +(1,4,20864,'Mace Specialization'), +(1,4,21184,'Rogue Passive (DND)'), +(1,4,21651,'Opening'), +(1,4,21652,'Closing'), +(1,4,22027,'Remove Insignia'), +(1,4,22810,'Opening - No Text'), +(1,4,45927,'Summon Friend'), +(1,4,58985,'Perception'), +(1,4,59752,'Every Man for Himself'), +(1,4,61437,'Opening'), +(1,5,81,'Dodge'), +(1,5,198,'One-Handed Maces'), +(1,5,203,'Unarmed'), +(1,5,204,'Defense'), +(1,5,522,'SPELLDEFENSE (DND)'), +(1,5,585,'Smite'), +(1,5,668,'Language Common'), +(1,5,1843,'Disarm'), +(1,5,2050,'Lesser Heal'), +(1,5,2382,'Generic'), +(1,5,2479,'Honorless Target'), +(1,5,3050,'Detect'), +(1,5,3365,'Opening'), +(1,5,5009,'Wands'), +(1,5,5019,'Shoot'), +(1,5,6233,'Closing'), +(1,5,6246,'Closing'), +(1,5,6247,'Opening'), +(1,5,6477,'Opening'), +(1,5,6478,'Opening'), +(1,5,6603,'Attack'), +(1,5,7266,'Duel'), +(1,5,7267,'Grovel'), +(1,5,7355,'Stuck'), +(1,5,8386,'Attacking'), +(1,5,9078,'Cloth'), +(1,5,9125,'Generic'), +(1,5,20597,'Sword Specialization'), +(1,5,20598,'The Human Spirit'), +(1,5,20599,'Diplomacy'), +(1,5,20864,'Mace Specialization'), +(1,5,21651,'Opening'), +(1,5,21652,'Closing'), +(1,5,22027,'Remove Insignia'), +(1,5,22810,'Opening - No Text'), +(1,5,45927,'Summon Friend'), +(1,5,58985,'Perception'), +(1,5,59752,'Every Man for Himself'), +(1,5,61437,'Opening'), +(1,6,81,'Dodge'), +(1,6,196,'One-Handed Axes'), +(1,6,197,'Two-Handed Axes'), +(1,6,200,'Polearms'), +(1,6,201,'One-Handed Swords'), +(1,6,202,'Two-Handed Swords'), +(1,6,203,'Unarmed'), +(1,6,204,'Defense'), +(1,6,522,'SPELLDEFENSE (DND)'), +(1,6,668,'Language Common'), +(1,6,674,'Dual Wield'), +(1,6,750,'Plate Mail'), +(1,6,1843,'Disarm'), +(1,6,2382,'Generic'), +(1,6,2479,'Honorless Target'), +(1,6,3050,'Detect'), +(1,6,3127,'Parry'), +(1,6,3275,'Linen Bandage'), +(1,6,3276,'Heavy Linen Bandage'), +(1,6,3277,'Wool Bandage'), +(1,6,3278,'Heavy Wool Bandage'), +(1,6,3365,'Opening'), +(1,6,6233,'Closing'), +(1,6,6246,'Closing'), +(1,6,6247,'Opening'), +(1,6,6477,'Opening'), +(1,6,6478,'Opening'), +(1,6,6603,'Attack'), +(1,6,7266,'Duel'), +(1,6,7267,'Grovel'), +(1,6,7355,'Stuck'), +(1,6,7928,'Silk Bandage'), +(1,6,7929,'Heavy Silk Bandage'), +(1,6,7934,'Anti-Venom'), +(1,6,8386,'Attacking'), +(1,6,8737,'Mail'), +(1,6,9077,'Leather'), +(1,6,9078,'Cloth'), +(1,6,9125,'Generic'), +(1,6,10840,'Mageweave Bandage'), +(1,6,10841,'Heavy Mageweave Bandage'), +(1,6,10846,'First Aid'), +(1,6,18629,'Runecloth Bandage'), +(1,6,18630,'Heavy Runecloth Bandage'), +(1,6,20597,'Sword Specialization'), +(1,6,20598,'The Human Spirit'), +(1,6,20599,'Diplomacy'), +(1,6,20864,'Mace Specialization'), +(1,6,21651,'Opening'), +(1,6,21652,'Closing'), +(1,6,22027,'Remove Insignia'), +(1,6,22810,'Opening - No Text'), +(1,6,33391,'Journeyman Riding'), +(1,6,45462,'Plague Strike'), +(1,6,45477,'Icy Touch'), +(1,6,45902,'Blood Strike'), +(1,6,45903,'Offensive State (DND)'), +(1,6,45927,'Summon Friend'), +(1,6,47541,'Death Coil'), +(1,6,48266,'Blood Presence'), +(1,6,49410,'Forceful Deflection'), +(1,6,49576,'Death Grip'), +(1,6,52665,'Sigil'), +(1,6,58985,'Perception'), +(1,6,59752,'Every Man for Himself'), +(1,6,59879,'Blood Plague'), +(1,6,59921,'Frost Fever'), +(1,6,61437,'Opening'), +(1,6,61455,'Runic Focus'), +(1,8,81,'Dodge'), +(1,8,133,'Fireball'), +(1,8,168,'Frost Armor'), +(1,8,203,'Unarmed'), +(1,8,204,'Defense'), +(1,8,227,'Staves'), +(1,8,522,'SPELLDEFENSE (DND)'), +(1,8,668,'Language Common'), +(1,8,1843,'Disarm'), +(1,8,2382,'Generic'), +(1,8,2479,'Honorless Target'), +(1,8,3050,'Detect'), +(1,8,3365,'Opening'), +(1,8,5009,'Wands'), +(1,8,5019,'Shoot'), +(1,8,6233,'Closing'), +(1,8,6246,'Closing'), +(1,8,6247,'Opening'), +(1,8,6477,'Opening'), +(1,8,6478,'Opening'), +(1,8,6603,'Attack'), +(1,8,7266,'Duel'), +(1,8,7267,'Grovel'), +(1,8,7355,'Stuck'), +(1,8,8386,'Attacking'), +(1,8,9078,'Cloth'), +(1,8,9125,'Generic'), +(1,8,20597,'Sword Specialization'), +(1,8,20598,'The Human Spirit'), +(1,8,20599,'Diplomacy'), +(1,8,20864,'Mace Specialization'), +(1,8,21651,'Opening'), +(1,8,21652,'Closing'), +(1,8,22027,'Remove Insignia'), +(1,8,22810,'Opening - No Text'), +(1,8,45927,'Summon Friend'), +(1,8,58985,'Perception'), +(1,8,59752,'Every Man for Himself'), +(1,8,61437,'Opening'), +(1,9,81,'Dodge'), +(1,9,203,'Unarmed'), +(1,9,204,'Defense'), +(1,9,522,'SPELLDEFENSE (DND)'), +(1,9,668,'Language Common'), +(1,9,686,'Shadow Bolt'), +(1,9,687,'Demon Skin'), +(1,9,1180,'Daggers'), +(1,9,1843,'Disarm'), +(1,9,2382,'Generic'), +(1,9,2479,'Honorless Target'), +(1,9,3050,'Detect'), +(1,9,3365,'Opening'), +(1,9,5009,'Wands'), +(1,9,5019,'Shoot'), +(1,9,6233,'Closing'), +(1,9,6246,'Closing'), +(1,9,6247,'Opening'), +(1,9,6477,'Opening'), +(1,9,6478,'Opening'), +(1,9,6603,'Attack'), +(1,9,7266,'Duel'), +(1,9,7267,'Grovel'), +(1,9,7355,'Stuck'), +(1,9,8386,'Attacking'), +(1,9,9078,'Cloth'), +(1,9,9125,'Generic'), +(1,9,20597,'Sword Specialization'), +(1,9,20598,'The Human Spirit'), +(1,9,20599,'Diplomacy'), +(1,9,20864,'Mace Specialization'), +(1,9,21651,'Opening'), +(1,9,21652,'Closing'), +(1,9,22027,'Remove Insignia'), +(1,9,22810,'Opening - No Text'), +(1,9,45927,'Summon Friend'), +(1,9,58284,'Chaos Bolt Passive'), +(1,9,58985,'Perception'), +(1,9,59752,'Every Man for Himself'), +(1,9,61437,'Opening'), +(2,1,78,'Heroic Strike'), +(2,1,81,'Dodge'), +(2,1,107,'Block'), +(2,1,196,'One-Handed Axes'), +(2,1,197,'Two-Handed Axes'), +(2,1,201,'One-Handed Swords'), +(2,1,203,'Unarmed'), +(2,1,204,'Defense'), +(2,1,522,'SPELLDEFENSE (DND)'), +(2,1,669,'Language Orcish'), +(2,1,1843,'Disarm'), +(2,1,2382,'Generic'), +(2,1,2457,'Battle Stance'), +(2,1,2479,'Honorless Target'), +(2,1,3050,'Detect'), +(2,1,3365,'Opening'), +(2,1,5301,'Defensive State (DND)'), +(2,1,6233,'Closing'), +(2,1,6246,'Closing'), +(2,1,6247,'Opening'), +(2,1,6477,'Opening'), +(2,1,6478,'Opening'), +(2,1,6603,'Attack'), +(2,1,7266,'Duel'), +(2,1,7267,'Grovel'), +(2,1,7355,'Stuck'), +(2,1,8386,'Attacking'), +(2,1,8737,'Mail'), +(2,1,9077,'Leather'), +(2,1,9078,'Cloth'), +(2,1,9116,'Shield'), +(2,1,9125,'Generic'), +(2,1,20572,'Blood Fury'), +(2,1,20573,'Hardiness'), +(2,1,20574,'Axe Specialization'), +(2,1,21563,'Command'), +(2,1,21651,'Opening'), +(2,1,21652,'Closing'), +(2,1,22027,'Remove Insignia'), +(2,1,22810,'Opening - No Text'), +(2,1,32215,'Victorious State'), +(2,1,45927,'Summon Friend'), +(2,1,61437,'Opening'), +(2,3,75,'Auto Shot'), +(2,3,81,'Dodge'), +(2,3,196,'One-Handed Axes'), +(2,3,203,'Unarmed'), +(2,3,204,'Defense'), +(2,3,264,'Bows'), +(2,3,522,'SPELLDEFENSE (DND)'), +(2,3,669,'Language Orcish'), +(2,3,1843,'Disarm'), +(2,3,2382,'Generic'), +(2,3,2479,'Honorless Target'), +(2,3,2973,'Raptor Strike'), +(2,3,3050,'Detect'), +(2,3,3365,'Opening'), +(2,3,6233,'Closing'), +(2,3,6246,'Closing'), +(2,3,6247,'Opening'), +(2,3,6477,'Opening'), +(2,3,6478,'Opening'), +(2,3,6603,'Attack'), +(2,3,7266,'Duel'), +(2,3,7267,'Grovel'), +(2,3,7355,'Stuck'), +(2,3,8386,'Attacking'), +(2,3,9077,'Leather'), +(2,3,9078,'Cloth'), +(2,3,9125,'Generic'), +(2,3,13358,'Defensive State (DND)'), +(2,3,20572,'Blood Fury'), +(2,3,20573,'Hardiness'), +(2,3,20574,'Axe Specialization'), +(2,3,20576,'Command'), +(2,3,21651,'Opening'), +(2,3,21652,'Closing'), +(2,3,22027,'Remove Insignia'), +(2,3,22810,'Opening - No Text'), +(2,3,24949,'Defensive State 2 (DND)'), +(2,3,34082,'Advantaged State (DND)'), +(2,3,45927,'Summon Friend'), +(2,3,61437,'Opening'), +(2,4,81,'Dodge'), +(2,4,203,'Unarmed'), +(2,4,204,'Defense'), +(2,4,522,'SPELLDEFENSE (DND)'), +(2,4,669,'Language Orcish'), +(2,4,1180,'Daggers'), +(2,4,1752,'Sinister Strike'), +(2,4,1843,'Disarm'), +(2,4,2098,'Eviscerate'), +(2,4,2382,'Generic'), +(2,4,2479,'Honorless Target'), +(2,4,2567,'Thrown'), +(2,4,2764,'Throw'), +(2,4,3050,'Detect'), +(2,4,3365,'Opening'), +(2,4,6233,'Closing'), +(2,4,6246,'Closing'), +(2,4,6247,'Opening'), +(2,4,6477,'Opening'), +(2,4,6478,'Opening'), +(2,4,6603,'Attack'), +(2,4,7266,'Duel'), +(2,4,7267,'Grovel'), +(2,4,7355,'Stuck'), +(2,4,8386,'Attacking'), +(2,4,9077,'Leather'), +(2,4,9078,'Cloth'), +(2,4,9125,'Generic'), +(2,4,16092,'Defensive State (DND)'), +(2,4,20572,'Blood Fury'), +(2,4,20573,'Hardiness'), +(2,4,20574,'Axe Specialization'), +(2,4,21184,'Rogue Passive (DND)'), +(2,4,21563,'Command'), +(2,4,21651,'Opening'), +(2,4,21652,'Closing'), +(2,4,22027,'Remove Insignia'), +(2,4,22810,'Opening - No Text'), +(2,4,45927,'Summon Friend'), +(2,4,61437,'Opening'), +(2,6,81,'Dodge'), +(2,6,196,'One-Handed Axes'), +(2,6,197,'Two-Handed Axes'), +(2,6,200,'Polearms'), +(2,6,201,'One-Handed Swords'), +(2,6,202,'Two-Handed Swords'), +(2,6,203,'Unarmed'), +(2,6,204,'Defense'), +(2,6,522,'SPELLDEFENSE (DND)'), +(2,6,669,'Language Orcish'), +(2,6,674,'Dual Wield'), +(2,6,750,'Plate Mail'), +(2,6,1843,'Disarm'), +(2,6,2382,'Generic'), +(2,6,2479,'Honorless Target'), +(2,6,3050,'Detect'), +(2,6,3127,'Parry'), +(2,6,3275,'Linen Bandage'), +(2,6,3276,'Heavy Linen Bandage'), +(2,6,3277,'Wool Bandage'), +(2,6,3278,'Heavy Wool Bandage'), +(2,6,3365,'Opening'), +(2,6,6233,'Closing'), +(2,6,6246,'Closing'), +(2,6,6247,'Opening'), +(2,6,6477,'Opening'), +(2,6,6478,'Opening'), +(2,6,6603,'Attack'), +(2,6,7266,'Duel'), +(2,6,7267,'Grovel'), +(2,6,7355,'Stuck'), +(2,6,7928,'Silk Bandage'), +(2,6,7929,'Heavy Silk Bandage'), +(2,6,7934,'Anti-Venom'), +(2,6,8386,'Attacking'), +(2,6,8737,'Mail'), +(2,6,9077,'Leather'), +(2,6,9078,'Cloth'), +(2,6,9125,'Generic'), +(2,6,10840,'Mageweave Bandage'), +(2,6,10841,'Heavy Mageweave Bandage'), +(2,6,10846,'First Aid'), +(2,6,18629,'Runecloth Bandage'), +(2,6,18630,'Heavy Runecloth Bandage'), +(2,6,20572,'Blood Fury'), +(2,6,20573,'Hardiness'), +(2,6,20574,'Axe Specialization'), +(2,6,21651,'Opening'), +(2,6,21652,'Closing'), +(2,6,22027,'Remove Insignia'), +(2,6,22810,'Opening - No Text'), +(2,6,33391,'Journeyman Riding'), +(2,6,45462,'Plague Strike'), +(2,6,45477,'Icy Touch'), +(2,6,45902,'Blood Strike'), +(2,6,45903,'Offensive State (DND)'), +(2,6,45927,'Summon Friend'), +(2,6,47541,'Death Coil'), +(2,6,48266,'Blood Presence'), +(2,6,49410,'Forceful Deflection'), +(2,6,49576,'Death Grip'), +(2,6,52665,'Sigil'), +(2,6,54562,'Command'), +(2,6,59879,'Blood Plague'), +(2,6,59921,'Frost Fever'), +(2,6,61437,'Opening'), +(2,6,61455,'Runic Focus'), +(2,7,81,'Dodge'), +(2,7,107,'Block'), +(2,7,198,'One-Handed Maces'), +(2,7,203,'Unarmed'), +(2,7,204,'Defense'), +(2,7,227,'Staves'), +(2,7,331,'Healing Wave'), +(2,7,403,'Lightning Bolt'), +(2,7,522,'SPELLDEFENSE (DND)'), +(2,7,669,'Language Orcish'), +(2,7,1843,'Disarm'), +(2,7,2382,'Generic'), +(2,7,2479,'Honorless Target'), +(2,7,3050,'Detect'), +(2,7,3365,'Opening'), +(2,7,6233,'Closing'), +(2,7,6246,'Closing'), +(2,7,6247,'Opening'), +(2,7,6477,'Opening'), +(2,7,6478,'Opening'), +(2,7,6603,'Attack'), +(2,7,7266,'Duel'), +(2,7,7267,'Grovel'), +(2,7,7355,'Stuck'), +(2,7,8386,'Attacking'), +(2,7,9077,'Leather'), +(2,7,9078,'Cloth'), +(2,7,9116,'Shield'), +(2,7,9125,'Generic'), +(2,7,20573,'Hardiness'), +(2,7,20574,'Axe Specialization'), +(2,7,21563,'Command'), +(2,7,21651,'Opening'), +(2,7,21652,'Closing'), +(2,7,22027,'Remove Insignia'), +(2,7,22810,'Opening - No Text'), +(2,7,27763,'Totem'), +(2,7,33697,'Blood Fury'), +(2,7,45927,'Summon Friend'), +(2,7,61437,'Opening'), +(2,9,81,'Dodge'), +(2,9,203,'Unarmed'), +(2,9,204,'Defense'), +(2,9,522,'SPELLDEFENSE (DND)'), +(2,9,669,'Language Orcish'), +(2,9,686,'Shadow Bolt'), +(2,9,687,'Demon Skin'), +(2,9,1180,'Daggers'), +(2,9,1843,'Disarm'), +(2,9,2382,'Generic'), +(2,9,2479,'Honorless Target'), +(2,9,3050,'Detect'), +(2,9,3365,'Opening'), +(2,9,5009,'Wands'), +(2,9,5019,'Shoot'), +(2,9,6233,'Closing'), +(2,9,6246,'Closing'), +(2,9,6247,'Opening'), +(2,9,6477,'Opening'), +(2,9,6478,'Opening'), +(2,9,6603,'Attack'), +(2,9,7266,'Duel'), +(2,9,7267,'Grovel'), +(2,9,7355,'Stuck'), +(2,9,8386,'Attacking'), +(2,9,9078,'Cloth'), +(2,9,9125,'Generic'), +(2,9,20573,'Hardiness'), +(2,9,20574,'Axe Specialization'), +(2,9,20575,'Command'), +(2,9,21651,'Opening'), +(2,9,21652,'Closing'), +(2,9,22027,'Remove Insignia'), +(2,9,22810,'Opening - No Text'), +(2,9,33702,'Blood Fury'), +(2,9,45927,'Summon Friend'), +(2,9,58284,'Chaos Bolt Passive'), +(2,9,61437,'Opening'), +(3,1,78,'Heroic Strike'), +(3,1,81,'Dodge'), +(3,1,107,'Block'), +(3,1,196,'One-Handed Axes'), +(3,1,197,'Two-Handed Axes'), +(3,1,198,'One-Handed Maces'), +(3,1,203,'Unarmed'), +(3,1,204,'Defense'), +(3,1,522,'SPELLDEFENSE (DND)'), +(3,1,668,'Language Common'), +(3,1,672,'Language Dwarven'), +(3,1,1843,'Disarm'), +(3,1,2382,'Generic'), +(3,1,2457,'Battle Stance'), +(3,1,2479,'Honorless Target'), +(3,1,2481,'Find Treasure'), +(3,1,3050,'Detect'), +(3,1,3365,'Opening'), +(3,1,5301,'Defensive State (DND)'), +(3,1,6233,'Closing'), +(3,1,6246,'Closing'), +(3,1,6247,'Opening'), +(3,1,6477,'Opening'), +(3,1,6478,'Opening'), +(3,1,6603,'Attack'), +(3,1,7266,'Duel'), +(3,1,7267,'Grovel'), +(3,1,7355,'Stuck'), +(3,1,8386,'Attacking'), +(3,1,8737,'Mail'), +(3,1,9077,'Leather'), +(3,1,9078,'Cloth'), +(3,1,9116,'Shield'), +(3,1,9125,'Generic'), +(3,1,20594,'Stoneform'), +(3,1,20595,'Gun Specialization'), +(3,1,20596,'Frost Resistance'), +(3,1,21651,'Opening'), +(3,1,21652,'Closing'), +(3,1,22027,'Remove Insignia'), +(3,1,22810,'Opening - No Text'), +(3,1,32215,'Victorious State'), +(3,1,45927,'Summon Friend'), +(3,1,59224,'Mace Specialization'), +(3,1,61437,'Opening'), +(3,2,81,'Dodge'), +(3,2,107,'Block'), +(3,2,198,'One-Handed Maces'), +(3,2,199,'Two-Handed Maces'), +(3,2,203,'Unarmed'), +(3,2,204,'Defense'), +(3,2,522,'SPELLDEFENSE (DND)'), +(3,2,635,'Holy Light'), +(3,2,668,'Language Common'), +(3,2,672,'Language Dwarven'), +(3,2,1843,'Disarm'), +(3,2,2382,'Generic'), +(3,2,2479,'Honorless Target'), +(3,2,2481,'Find Treasure'), +(3,2,3050,'Detect'), +(3,2,3365,'Opening'), +(3,2,6233,'Closing'), +(3,2,6246,'Closing'), +(3,2,6247,'Opening'), +(3,2,6477,'Opening'), +(3,2,6478,'Opening'), +(3,2,6603,'Attack'), +(3,2,7266,'Duel'), +(3,2,7267,'Grovel'), +(3,2,7355,'Stuck'), +(3,2,8386,'Attacking'), +(3,2,8737,'Mail'), +(3,2,9077,'Leather'), +(3,2,9078,'Cloth'), +(3,2,9116,'Shield'), +(3,2,9125,'Generic'), +(3,2,20154,'Seal of Righteousness'), +(3,2,20594,'Stoneform'), +(3,2,20595,'Gun Specialization'), +(3,2,20596,'Frost Resistance'), +(3,2,21651,'Opening'), +(3,2,21652,'Closing'), +(3,2,22027,'Remove Insignia'), +(3,2,22810,'Opening - No Text'), +(3,2,27762,'Libram'), +(3,2,45927,'Summon Friend'), +(3,2,59224,'Mace Specialization'), +(3,2,61437,'Opening'), +(3,3,75,'Auto Shot'), +(3,3,81,'Dodge'), +(3,3,196,'One-Handed Axes'), +(3,3,203,'Unarmed'), +(3,3,204,'Defense'), +(3,3,266,'Guns'), +(3,3,522,'SPELLDEFENSE (DND)'), +(3,3,668,'Language Common'), +(3,3,672,'Language Dwarven'), +(3,3,1843,'Disarm'), +(3,3,2382,'Generic'), +(3,3,2479,'Honorless Target'), +(3,3,2481,'Find Treasure'), +(3,3,2973,'Raptor Strike'), +(3,3,3050,'Detect'), +(3,3,3365,'Opening'), +(3,3,6233,'Closing'), +(3,3,6246,'Closing'), +(3,3,6247,'Opening'), +(3,3,6477,'Opening'), +(3,3,6478,'Opening'), +(3,3,6603,'Attack'), +(3,3,7266,'Duel'), +(3,3,7267,'Grovel'), +(3,3,7355,'Stuck'), +(3,3,8386,'Attacking'), +(3,3,9077,'Leather'), +(3,3,9078,'Cloth'), +(3,3,9125,'Generic'), +(3,3,13358,'Defensive State (DND)'), +(3,3,20594,'Stoneform'), +(3,3,20595,'Gun Specialization'), +(3,3,20596,'Frost Resistance'), +(3,3,21651,'Opening'), +(3,3,21652,'Closing'), +(3,3,22027,'Remove Insignia'), +(3,3,22810,'Opening - No Text'), +(3,3,24949,'Defensive State 2 (DND)'), +(3,3,34082,'Advantaged State (DND)'), +(3,3,45927,'Summon Friend'), +(3,3,59224,'Mace Specialization'), +(3,3,61437,'Opening'), +(3,4,81,'Dodge'), +(3,4,203,'Unarmed'), +(3,4,204,'Defense'), +(3,4,522,'SPELLDEFENSE (DND)'), +(3,4,668,'Language Common'), +(3,4,672,'Language Dwarven'), +(3,4,1180,'Daggers'), +(3,4,1752,'Sinister Strike'), +(3,4,1843,'Disarm'), +(3,4,2098,'Eviscerate'), +(3,4,2382,'Generic'), +(3,4,2479,'Honorless Target'), +(3,4,2481,'Find Treasure'), +(3,4,2567,'Thrown'), +(3,4,2764,'Throw'), +(3,4,3050,'Detect'), +(3,4,3365,'Opening'), +(3,4,6233,'Closing'), +(3,4,6246,'Closing'), +(3,4,6247,'Opening'), +(3,4,6477,'Opening'), +(3,4,6478,'Opening'), +(3,4,6603,'Attack'), +(3,4,7266,'Duel'), +(3,4,7267,'Grovel'), +(3,4,7355,'Stuck'), +(3,4,8386,'Attacking'), +(3,4,9077,'Leather'), +(3,4,9078,'Cloth'), +(3,4,9125,'Generic'), +(3,4,16092,'Defensive State (DND)'), +(3,4,20594,'Stoneform'), +(3,4,20595,'Gun Specialization'), +(3,4,20596,'Frost Resistance'), +(3,4,21184,'Rogue Passive (DND)'), +(3,4,21651,'Opening'), +(3,4,21652,'Closing'), +(3,4,22027,'Remove Insignia'), +(3,4,22810,'Opening - No Text'), +(3,4,45927,'Summon Friend'), +(3,4,59224,'Mace Specialization'), +(3,4,61437,'Opening'), +(3,5,81,'Dodge'), +(3,5,198,'One-Handed Maces'), +(3,5,203,'Unarmed'), +(3,5,204,'Defense'), +(3,5,522,'SPELLDEFENSE (DND)'), +(3,5,585,'Smite'), +(3,5,668,'Language Common'), +(3,5,672,'Language Dwarven'), +(3,5,1843,'Disarm'), +(3,5,2050,'Lesser Heal'), +(3,5,2382,'Generic'), +(3,5,2479,'Honorless Target'), +(3,5,2481,'Find Treasure'), +(3,5,3050,'Detect'), +(3,5,3365,'Opening'), +(3,5,5009,'Wands'), +(3,5,5019,'Shoot'), +(3,5,6233,'Closing'), +(3,5,6246,'Closing'), +(3,5,6247,'Opening'), +(3,5,6477,'Opening'), +(3,5,6478,'Opening'), +(3,5,6603,'Attack'), +(3,5,7266,'Duel'), +(3,5,7267,'Grovel'), +(3,5,7355,'Stuck'), +(3,5,8386,'Attacking'), +(3,5,9078,'Cloth'), +(3,5,9125,'Generic'), +(3,5,20594,'Stoneform'), +(3,5,20595,'Gun Specialization'), +(3,5,20596,'Frost Resistance'), +(3,5,21651,'Opening'), +(3,5,21652,'Closing'), +(3,5,22027,'Remove Insignia'), +(3,5,22810,'Opening - No Text'), +(3,5,45927,'Summon Friend'), +(3,5,59224,'Mace Specialization'), +(3,5,61437,'Opening'), +(3,6,81,'Dodge'), +(3,6,196,'One-Handed Axes'), +(3,6,197,'Two-Handed Axes'), +(3,6,200,'Polearms'), +(3,6,201,'One-Handed Swords'), +(3,6,202,'Two-Handed Swords'), +(3,6,203,'Unarmed'), +(3,6,204,'Defense'), +(3,6,522,'SPELLDEFENSE (DND)'), +(3,6,668,'Language Common'), +(3,6,672,'Language Dwarven'), +(3,6,674,'Dual Wield'), +(3,6,750,'Plate Mail'), +(3,6,1843,'Disarm'), +(3,6,2382,'Generic'), +(3,6,2479,'Honorless Target'), +(3,6,2481,'Find Treasure'), +(3,6,3050,'Detect'), +(3,6,3127,'Parry'), +(3,6,3275,'Linen Bandage'), +(3,6,3276,'Heavy Linen Bandage'), +(3,6,3277,'Wool Bandage'), +(3,6,3278,'Heavy Wool Bandage'), +(3,6,3365,'Opening'), +(3,6,6233,'Closing'), +(3,6,6246,'Closing'), +(3,6,6247,'Opening'), +(3,6,6477,'Opening'), +(3,6,6478,'Opening'), +(3,6,6603,'Attack'), +(3,6,7266,'Duel'), +(3,6,7267,'Grovel'), +(3,6,7355,'Stuck'), +(3,6,7928,'Silk Bandage'), +(3,6,7929,'Heavy Silk Bandage'), +(3,6,7934,'Anti-Venom'), +(3,6,8386,'Attacking'), +(3,6,8737,'Mail'), +(3,6,9077,'Leather'), +(3,6,9078,'Cloth'), +(3,6,9125,'Generic'), +(3,6,10840,'Mageweave Bandage'), +(3,6,10841,'Heavy Mageweave Bandage'), +(3,6,10846,'First Aid'), +(3,6,18629,'Runecloth Bandage'), +(3,6,18630,'Heavy Runecloth Bandage'), +(3,6,20594,'Stoneform'), +(3,6,20595,'Gun Specialization'), +(3,6,20596,'Frost Resistance'), +(3,6,21651,'Opening'), +(3,6,21652,'Closing'), +(3,6,22027,'Remove Insignia'), +(3,6,22810,'Opening - No Text'), +(3,6,33391,'Journeyman Riding'), +(3,6,45462,'Plague Strike'), +(3,6,45477,'Icy Touch'), +(3,6,45902,'Blood Strike'), +(3,6,45903,'Offensive State (DND)'), +(3,6,45927,'Summon Friend'), +(3,6,47541,'Death Coil'), +(3,6,48266,'Blood Presence'), +(3,6,49410,'Forceful Deflection'), +(3,6,49576,'Death Grip'), +(3,6,52665,'Sigil'), +(3,6,59224,'Mace Specialization'), +(3,6,59879,'Blood Plague'), +(3,6,59921,'Frost Fever'), +(3,6,61437,'Opening'), +(3,6,61455,'Runic Focus'), +(4,1,78,'Heroic Strike'), +(4,1,81,'Dodge'), +(4,1,107,'Block'), +(4,1,198,'One-Handed Maces'), +(4,1,201,'One-Handed Swords'), +(4,1,203,'Unarmed'), +(4,1,204,'Defense'), +(4,1,522,'SPELLDEFENSE (DND)'), +(4,1,668,'Language Common'), +(4,1,671,'Language Darnassian'), +(4,1,1180,'Daggers'), +(4,1,1843,'Disarm'), +(4,1,2382,'Generic'), +(4,1,2457,'Battle Stance'), +(4,1,2479,'Honorless Target'), +(4,1,3050,'Detect'), +(4,1,3365,'Opening'), +(4,1,5301,'Defensive State (DND)'), +(4,1,6233,'Closing'), +(4,1,6246,'Closing'), +(4,1,6247,'Opening'), +(4,1,6477,'Opening'), +(4,1,6478,'Opening'), +(4,1,6603,'Attack'), +(4,1,7266,'Duel'), +(4,1,7267,'Grovel'), +(4,1,7355,'Stuck'), +(4,1,8386,'Attacking'), +(4,1,8737,'Mail'), +(4,1,9077,'Leather'), +(4,1,9078,'Cloth'), +(4,1,9116,'Shield'), +(4,1,9125,'Generic'), +(4,1,20582,'Quickness'), +(4,1,20583,'Nature Resistance'), +(4,1,20585,'Wisp Spirit'), +(4,1,21651,'Opening'), +(4,1,21652,'Closing'), +(4,1,22027,'Remove Insignia'), +(4,1,22810,'Opening - No Text'), +(4,1,32215,'Victorious State'), +(4,1,45927,'Summon Friend'), +(4,1,58984,'Shadowmelt'), +(4,1,61437,'Opening'), +(4,3,75,'Auto Shot'), +(4,3,81,'Dodge'), +(4,3,203,'Unarmed'), +(4,3,204,'Defense'), +(4,3,264,'Bows'), +(4,3,522,'SPELLDEFENSE (DND)'), +(4,3,668,'Language Common'), +(4,3,671,'Language Darnassian'), +(4,3,1180,'Daggers'), +(4,3,1843,'Disarm'), +(4,3,2382,'Generic'), +(4,3,2479,'Honorless Target'), +(4,3,2973,'Raptor Strike'), +(4,3,3050,'Detect'), +(4,3,3365,'Opening'), +(4,3,6233,'Closing'), +(4,3,6246,'Closing'), +(4,3,6247,'Opening'), +(4,3,6477,'Opening'), +(4,3,6478,'Opening'), +(4,3,6603,'Attack'), +(4,3,7266,'Duel'), +(4,3,7267,'Grovel'), +(4,3,7355,'Stuck'), +(4,3,8386,'Attacking'), +(4,3,9077,'Leather'), +(4,3,9078,'Cloth'), +(4,3,9125,'Generic'), +(4,3,13358,'Defensive State (DND)'), +(4,3,20582,'Quickness'), +(4,3,20583,'Nature Resistance'), +(4,3,20585,'Wisp Spirit'), +(4,3,21651,'Opening'), +(4,3,21652,'Closing'), +(4,3,22027,'Remove Insignia'), +(4,3,22810,'Opening - No Text'), +(4,3,24949,'Defensive State 2 (DND)'), +(4,3,34082,'Advantaged State (DND)'), +(4,3,45927,'Summon Friend'), +(4,3,58984,'Shadowmelt'), +(4,3,61437,'Opening'), +(4,4,81,'Dodge'), +(4,4,203,'Unarmed'), +(4,4,204,'Defense'), +(4,4,522,'SPELLDEFENSE (DND)'), +(4,4,668,'Language Common'), +(4,4,671,'Language Darnassian'), +(4,4,1180,'Daggers'), +(4,4,1752,'Sinister Strike'), +(4,4,1843,'Disarm'), +(4,4,2098,'Eviscerate'), +(4,4,2382,'Generic'), +(4,4,2479,'Honorless Target'), +(4,4,2567,'Thrown'), +(4,4,2764,'Throw'), +(4,4,3050,'Detect'), +(4,4,3365,'Opening'), +(4,4,6233,'Closing'), +(4,4,6246,'Closing'), +(4,4,6247,'Opening'), +(4,4,6477,'Opening'), +(4,4,6478,'Opening'), +(4,4,6603,'Attack'), +(4,4,7266,'Duel'), +(4,4,7267,'Grovel'), +(4,4,7355,'Stuck'), +(4,4,8386,'Attacking'), +(4,4,9077,'Leather'), +(4,4,9078,'Cloth'), +(4,4,9125,'Generic'), +(4,4,16092,'Defensive State (DND)'), +(4,4,20582,'Quickness'), +(4,4,20583,'Nature Resistance'), +(4,4,20585,'Wisp Spirit'), +(4,4,21184,'Rogue Passive (DND)'), +(4,4,21651,'Opening'), +(4,4,21652,'Closing'), +(4,4,22027,'Remove Insignia'), +(4,4,22810,'Opening - No Text'), +(4,4,45927,'Summon Friend'), +(4,4,58984,'Shadowmelt'), +(4,4,61437,'Opening'), +(4,5,81,'Dodge'), +(4,5,198,'One-Handed Maces'), +(4,5,203,'Unarmed'), +(4,5,204,'Defense'), +(4,5,522,'SPELLDEFENSE (DND)'), +(4,5,585,'Smite'), +(4,5,668,'Language Common'), +(4,5,671,'Language Darnassian'), +(4,5,1843,'Disarm'), +(4,5,2050,'Lesser Heal'), +(4,5,2382,'Generic'), +(4,5,2479,'Honorless Target'), +(4,5,3050,'Detect'), +(4,5,3365,'Opening'), +(4,5,5009,'Wands'), +(4,5,5019,'Shoot'), +(4,5,6233,'Closing'), +(4,5,6246,'Closing'), +(4,5,6247,'Opening'), +(4,5,6477,'Opening'), +(4,5,6478,'Opening'), +(4,5,6603,'Attack'), +(4,5,7266,'Duel'), +(4,5,7267,'Grovel'), +(4,5,7355,'Stuck'), +(4,5,8386,'Attacking'), +(4,5,9078,'Cloth'), +(4,5,9125,'Generic'), +(4,5,20582,'Quickness'), +(4,5,20583,'Nature Resistance'), +(4,5,20585,'Wisp Spirit'), +(4,5,21651,'Opening'), +(4,5,21652,'Closing'), +(4,5,22027,'Remove Insignia'), +(4,5,22810,'Opening - No Text'), +(4,5,45927,'Summon Friend'), +(4,5,58984,'Shadowmelt'), +(4,5,61437,'Opening'), +(4,6,81,'Dodge'), +(4,6,196,'One-Handed Axes'), +(4,6,197,'Two-Handed Axes'), +(4,6,200,'Polearms'), +(4,6,201,'One-Handed Swords'), +(4,6,202,'Two-Handed Swords'), +(4,6,203,'Unarmed'), +(4,6,204,'Defense'), +(4,6,522,'SPELLDEFENSE (DND)'), +(4,6,668,'Language Common'), +(4,6,671,'Language Darnassian'), +(4,6,674,'Dual Wield'), +(4,6,750,'Plate Mail'), +(4,6,1843,'Disarm'), +(4,6,2382,'Generic'), +(4,6,2479,'Honorless Target'), +(4,6,3050,'Detect'), +(4,6,3127,'Parry'), +(4,6,3275,'Linen Bandage'), +(4,6,3276,'Heavy Linen Bandage'), +(4,6,3277,'Wool Bandage'), +(4,6,3278,'Heavy Wool Bandage'), +(4,6,3365,'Opening'), +(4,6,6233,'Closing'), +(4,6,6246,'Closing'), +(4,6,6247,'Opening'), +(4,6,6477,'Opening'), +(4,6,6478,'Opening'), +(4,6,6603,'Attack'), +(4,6,7266,'Duel'), +(4,6,7267,'Grovel'), +(4,6,7355,'Stuck'), +(4,6,7928,'Silk Bandage'), +(4,6,7929,'Heavy Silk Bandage'), +(4,6,7934,'Anti-Venom'), +(4,6,8386,'Attacking'), +(4,6,8737,'Mail'), +(4,6,9077,'Leather'), +(4,6,9078,'Cloth'), +(4,6,9125,'Generic'), +(4,6,10840,'Mageweave Bandage'), +(4,6,10841,'Heavy Mageweave Bandage'), +(4,6,10846,'First Aid'), +(4,6,18629,'Runecloth Bandage'), +(4,6,18630,'Heavy Runecloth Bandage'), +(4,6,20582,'Quickness'), +(4,6,20583,'Nature Resistance'), +(4,6,20585,'Wisp Spirit'), +(4,6,21651,'Opening'), +(4,6,21652,'Closing'), +(4,6,22027,'Remove Insignia'), +(4,6,22810,'Opening - No Text'), +(4,6,33391,'Journeyman Riding'), +(4,6,45462,'Plague Strike'), +(4,6,45477,'Icy Touch'), +(4,6,45902,'Blood Strike'), +(4,6,45903,'Offensive State (DND)'), +(4,6,45927,'Summon Friend'), +(4,6,47541,'Death Coil'), +(4,6,48266,'Blood Presence'), +(4,6,49410,'Forceful Deflection'), +(4,6,49576,'Death Grip'), +(4,6,52665,'Sigil'), +(4,6,58984,'Shadowmeld'), +(4,6,59879,'Blood Plague'), +(4,6,59921,'Frost Fever'), +(4,6,61437,'Opening'), +(4,6,61455,'Runic Focus'), +(4,11,81,'Dodge'), +(4,11,203,'Unarmed'), +(4,11,204,'Defense'), +(4,11,227,'Staves'), +(4,11,522,'SPELLDEFENSE (DND)'), +(4,11,668,'Language Common'), +(4,11,671,'Language Darnassian'), +(4,11,1180,'Daggers'), +(4,11,1843,'Disarm'), +(4,11,2382,'Generic'), +(4,11,2479,'Honorless Target'), +(4,11,3050,'Detect'), +(4,11,3365,'Opening'), +(4,11,5176,'Wrath'), +(4,11,5185,'Healing Touch'), +(4,11,6233,'Closing'), +(4,11,6246,'Closing'), +(4,11,6247,'Opening'), +(4,11,6477,'Opening'), +(4,11,6478,'Opening'), +(4,11,6603,'Attack'), +(4,11,7266,'Duel'), +(4,11,7267,'Grovel'), +(4,11,7355,'Stuck'), +(4,11,8386,'Attacking'), +(4,11,9077,'Leather'), +(4,11,9078,'Cloth'), +(4,11,9125,'Generic'), +(4,11,20582,'Quickness'), +(4,11,20583,'Nature Resistance'), +(4,11,20585,'Wisp Spirit'), +(4,11,21651,'Opening'), +(4,11,21652,'Closing'), +(4,11,22027,'Remove Insignia'), +(4,11,22810,'Opening - No Text'), +(4,11,27764,'Fetish'), +(4,11,45927,'Summon Friend'), +(4,11,58984,'Shadowmelt'), +(4,11,61437,'Opening'), +(5,1,78,'Heroic Strike'), +(5,1,81,'Dodge'), +(5,1,107,'Block'), +(5,1,201,'One-Handed Swords'), +(5,1,202,'Two-Handed Swords'), +(5,1,203,'Unarmed'), +(5,1,204,'Defense'), +(5,1,522,'SPELLDEFENSE (DND)'), +(5,1,669,'Language Orcish'), +(5,1,1180,'Daggers'), +(5,1,1843,'Disarm'), +(5,1,2382,'Generic'), +(5,1,2457,'Battle Stance'), +(5,1,2479,'Honorless Target'), +(5,1,3050,'Detect'), +(5,1,3365,'Opening'), +(5,1,5227,'Underwater Breathing'), +(5,1,5301,'Defensive State (DND)'), +(5,1,6233,'Closing'), +(5,1,6246,'Closing'), +(5,1,6247,'Opening'), +(5,1,6477,'Opening'), +(5,1,6478,'Opening'), +(5,1,6603,'Attack'), +(5,1,7266,'Duel'), +(5,1,7267,'Grovel'), +(5,1,7355,'Stuck'), +(5,1,7744,'Will of the Forsaken'), +(5,1,8386,'Attacking'), +(5,1,8737,'Mail'), +(5,1,9077,'Leather'), +(5,1,9078,'Cloth'), +(5,1,9116,'Shield'), +(5,1,9125,'Generic'), +(5,1,17737,'Language Gutterspeak'), +(5,1,20577,'Cannibalize'), +(5,1,20579,'Shadow Resistance'), +(5,1,21651,'Opening'), +(5,1,21652,'Closing'), +(5,1,22027,'Remove Insignia'), +(5,1,22810,'Opening - No Text'), +(5,1,32215,'Victorious State'), +(5,1,45927,'Summon Friend'), +(5,1,61437,'Opening'), +(5,4,81,'Dodge'), +(5,4,203,'Unarmed'), +(5,4,204,'Defense'), +(5,4,522,'SPELLDEFENSE (DND)'), +(5,4,669,'Language Orcish'), +(5,4,1180,'Daggers'), +(5,4,1752,'Sinister Strike'), +(5,4,1843,'Disarm'), +(5,4,2098,'Eviscerate'), +(5,4,2382,'Generic'), +(5,4,2479,'Honorless Target'), +(5,4,2567,'Thrown'), +(5,4,2764,'Throw'), +(5,4,3050,'Detect'), +(5,4,3365,'Opening'), +(5,4,5227,'Underwater Breathing'), +(5,4,6233,'Closing'), +(5,4,6246,'Closing'), +(5,4,6247,'Opening'), +(5,4,6477,'Opening'), +(5,4,6478,'Opening'), +(5,4,6603,'Attack'), +(5,4,7266,'Duel'), +(5,4,7267,'Grovel'), +(5,4,7355,'Stuck'), +(5,4,7744,'Will of the Forsaken'), +(5,4,8386,'Attacking'), +(5,4,9077,'Leather'), +(5,4,9078,'Cloth'), +(5,4,9125,'Generic'), +(5,4,16092,'Defensive State (DND)'), +(5,4,17737,'Language Gutterspeak'), +(5,4,20577,'Cannibalize'), +(5,4,20579,'Shadow Resistance'), +(5,4,21184,'Rogue Passive (DND)'), +(5,4,21651,'Opening'), +(5,4,21652,'Closing'), +(5,4,22027,'Remove Insignia'), +(5,4,22810,'Opening - No Text'), +(5,4,45927,'Summon Friend'), +(5,4,61437,'Opening'), +(5,5,81,'Dodge'), +(5,5,198,'One-Handed Maces'), +(5,5,203,'Unarmed'), +(5,5,204,'Defense'), +(5,5,522,'SPELLDEFENSE (DND)'), +(5,5,585,'Smite'), +(5,5,669,'Language Orcish'), +(5,5,1843,'Disarm'), +(5,5,2050,'Lesser Heal'), +(5,5,2382,'Generic'), +(5,5,2479,'Honorless Target'), +(5,5,3050,'Detect'), +(5,5,3365,'Opening'), +(5,5,5009,'Wands'), +(5,5,5019,'Shoot'), +(5,5,5227,'Underwater Breathing'), +(5,5,6233,'Closing'), +(5,5,6246,'Closing'), +(5,5,6247,'Opening'), +(5,5,6477,'Opening'), +(5,5,6478,'Opening'), +(5,5,6603,'Attack'), +(5,5,7266,'Duel'), +(5,5,7267,'Grovel'), +(5,5,7355,'Stuck'), +(5,5,7744,'Will of the Forsaken'), +(5,5,8386,'Attacking'), +(5,5,9078,'Cloth'), +(5,5,9125,'Generic'), +(5,5,17737,'Language Gutterspeak'), +(5,5,20577,'Cannibalize'), +(5,5,20579,'Shadow Resistance'), +(5,5,21651,'Opening'), +(5,5,21652,'Closing'), +(5,5,22027,'Remove Insignia'), +(5,5,22810,'Opening - No Text'), +(5,5,45927,'Summon Friend'), +(5,5,61437,'Opening'), +(5,6,81,'Dodge'), +(5,6,196,'One-Handed Axes'), +(5,6,197,'Two-Handed Axes'), +(5,6,200,'Polearms'), +(5,6,201,'One-Handed Swords'), +(5,6,202,'Two-Handed Swords'), +(5,6,203,'Unarmed'), +(5,6,204,'Defense'), +(5,6,522,'SPELLDEFENSE (DND)'), +(5,6,669,'Language Orcish'), +(5,6,674,'Dual Wield'), +(5,6,750,'Plate Mail'), +(5,6,1843,'Disarm'), +(5,6,2382,'Generic'), +(5,6,2479,'Honorless Target'), +(5,6,3050,'Detect'), +(5,6,3127,'Parry'), +(5,6,3275,'Linen Bandage'), +(5,6,3276,'Heavy Linen Bandage'), +(5,6,3277,'Wool Bandage'), +(5,6,3278,'Heavy Wool Bandage'), +(5,6,3365,'Opening'), +(5,6,5227,'Underwater Breathing'), +(5,6,6233,'Closing'), +(5,6,6246,'Closing'), +(5,6,6247,'Opening'), +(5,6,6477,'Opening'), +(5,6,6478,'Opening'), +(5,6,6603,'Attack'), +(5,6,7266,'Duel'), +(5,6,7267,'Grovel'), +(5,6,7355,'Stuck'), +(5,6,7744,'Will of the Forsaken'), +(5,6,7928,'Silk Bandage'), +(5,6,7929,'Heavy Silk Bandage'), +(5,6,7934,'Anti-Venom'), +(5,6,8386,'Attacking'), +(5,6,8737,'Mail'), +(5,6,9077,'Leather'), +(5,6,9078,'Cloth'), +(5,6,9125,'Generic'), +(5,6,10840,'Mageweave Bandage'), +(5,6,10841,'Heavy Mageweave Bandage'), +(5,6,10846,'First Aid'), +(5,6,17737,'Language Gutterspeak'), +(5,6,18629,'Runecloth Bandage'), +(5,6,18630,'Heavy Runecloth Bandage'), +(5,6,20577,'Cannibalize'), +(5,6,20579,'Shadow Resistance'), +(5,6,21651,'Opening'), +(5,6,21652,'Closing'), +(5,6,22027,'Remove Insignia'), +(5,6,22810,'Opening - No Text'), +(5,6,33391,'Journeyman Riding'), +(5,6,45462,'Plague Strike'), +(5,6,45477,'Icy Touch'), +(5,6,45902,'Blood Strike'), +(5,6,45903,'Offensive State (DND)'), +(5,6,45927,'Summon Friend'), +(5,6,47541,'Death Coil'), +(5,6,48266,'Blood Presence'), +(5,6,49410,'Forceful Deflection'), +(5,6,49576,'Death Grip'), +(5,6,52665,'Sigil'), +(5,6,59879,'Blood Plague'), +(5,6,59921,'Frost Fever'), +(5,6,61437,'Opening'), +(5,6,61455,'Runic Focus'), +(5,8,81,'Dodge'), +(5,8,133,'Fireball'), +(5,8,168,'Frost Armor'), +(5,8,203,'Unarmed'), +(5,8,204,'Defense'), +(5,8,227,'Staves'), +(5,8,522,'SPELLDEFENSE (DND)'), +(5,8,669,'Language Orcish'), +(5,8,1843,'Disarm'), +(5,8,2382,'Generic'), +(5,8,2479,'Honorless Target'), +(5,8,3050,'Detect'), +(5,8,3365,'Opening'), +(5,8,5009,'Wands'), +(5,8,5019,'Shoot'), +(5,8,5227,'Underwater Breathing'), +(5,8,6233,'Closing'), +(5,8,6246,'Closing'), +(5,8,6247,'Opening'), +(5,8,6477,'Opening'), +(5,8,6478,'Opening'), +(5,8,6603,'Attack'), +(5,8,7266,'Duel'), +(5,8,7267,'Grovel'), +(5,8,7355,'Stuck'), +(5,8,7744,'Will of the Forsaken'), +(5,8,8386,'Attacking'), +(5,8,9078,'Cloth'), +(5,8,9125,'Generic'), +(5,8,17737,'Language Gutterspeak'), +(5,8,20577,'Cannibalize'), +(5,8,20579,'Shadow Resistance'), +(5,8,21651,'Opening'), +(5,8,21652,'Closing'), +(5,8,22027,'Remove Insignia'), +(5,8,22810,'Opening - No Text'), +(5,8,45927,'Summon Friend'), +(5,8,61437,'Opening'), +(5,9,81,'Dodge'), +(5,9,203,'Unarmed'), +(5,9,204,'Defense'), +(5,9,522,'SPELLDEFENSE (DND)'), +(5,9,669,'Language Orcish'), +(5,9,686,'Shadow Bolt'), +(5,9,687,'Demon Skin'), +(5,9,1180,'Daggers'), +(5,9,1843,'Disarm'), +(5,9,2382,'Generic'), +(5,9,2479,'Honorless Target'), +(5,9,3050,'Detect'), +(5,9,3365,'Opening'), +(5,9,5009,'Wands'), +(5,9,5019,'Shoot'), +(5,9,5227,'Underwater Breathing'), +(5,9,6233,'Closing'), +(5,9,6246,'Closing'), +(5,9,6247,'Opening'), +(5,9,6477,'Opening'), +(5,9,6478,'Opening'), +(5,9,6603,'Attack'), +(5,9,7266,'Duel'), +(5,9,7267,'Grovel'), +(5,9,7355,'Stuck'), +(5,9,7744,'Will of the Forsaken'), +(5,9,8386,'Attacking'), +(5,9,9078,'Cloth'), +(5,9,9125,'Generic'), +(5,9,17737,'Language Gutterspeak'), +(5,9,20577,'Cannibalize'), +(5,9,20579,'Shadow Resistance'), +(5,9,21651,'Opening'), +(5,9,21652,'Closing'), +(5,9,22027,'Remove Insignia'), +(5,9,22810,'Opening - No Text'), +(5,9,45927,'Summon Friend'), +(5,9,58284,'Chaos Bolt Passive'), +(5,9,61437,'Opening'), +(6,1,78,'Heroic Strike'), +(6,1,81,'Dodge'), +(6,1,107,'Block'), +(6,1,196,'One-Handed Axes'), +(6,1,198,'One-Handed Maces'), +(6,1,199,'Two-Handed Maces'), +(6,1,203,'Unarmed'), +(6,1,204,'Defense'), +(6,1,522,'SPELLDEFENSE (DND)'), +(6,1,669,'Language Orcish'), +(6,1,670,'Language Taurahe'), +(6,1,1843,'Disarm'), +(6,1,2382,'Generic'), +(6,1,2457,'Battle Stance'), +(6,1,2479,'Honorless Target'), +(6,1,3050,'Detect'), +(6,1,3365,'Opening'), +(6,1,5301,'Defensive State (DND)'), +(6,1,6233,'Closing'), +(6,1,6246,'Closing'), +(6,1,6247,'Opening'), +(6,1,6477,'Opening'), +(6,1,6478,'Opening'), +(6,1,6603,'Attack'), +(6,1,7266,'Duel'), +(6,1,7267,'Grovel'), +(6,1,7355,'Stuck'), +(6,1,8386,'Attacking'), +(6,1,8737,'Mail'), +(6,1,9077,'Leather'), +(6,1,9078,'Cloth'), +(6,1,9116,'Shield'), +(6,1,9125,'Generic'), +(6,1,20549,'War Stomp'), +(6,1,20550,'Endurance'), +(6,1,20551,'Nature Resistance'), +(6,1,20552,'Cultivation'), +(6,1,21651,'Opening'), +(6,1,21652,'Closing'), +(6,1,22027,'Remove Insignia'), +(6,1,22810,'Opening - No Text'), +(6,1,32215,'Victorious State'), +(6,1,45927,'Summon Friend'), +(6,1,61437,'Opening'), +(6,3,75,'Auto Shot'), +(6,3,81,'Dodge'), +(6,3,196,'One-Handed Axes'), +(6,3,203,'Unarmed'), +(6,3,204,'Defense'), +(6,3,266,'Guns'), +(6,3,522,'SPELLDEFENSE (DND)'), +(6,3,669,'Language Orcish'), +(6,3,670,'Language Taurahe'), +(6,3,1843,'Disarm'), +(6,3,2382,'Generic'), +(6,3,2479,'Honorless Target'), +(6,3,2973,'Raptor Strike'), +(6,3,3050,'Detect'), +(6,3,3365,'Opening'), +(6,3,6233,'Closing'), +(6,3,6246,'Closing'), +(6,3,6247,'Opening'), +(6,3,6477,'Opening'), +(6,3,6478,'Opening'), +(6,3,6603,'Attack'), +(6,3,7266,'Duel'), +(6,3,7267,'Grovel'), +(6,3,7355,'Stuck'), +(6,3,8386,'Attacking'), +(6,3,9077,'Leather'), +(6,3,9078,'Cloth'), +(6,3,9125,'Generic'), +(6,3,13358,'Defensive State (DND)'), +(6,3,20549,'War Stomp'), +(6,3,20550,'Endurance'), +(6,3,20551,'Nature Resistance'), +(6,3,20552,'Cultivation'), +(6,3,21651,'Opening'), +(6,3,21652,'Closing'), +(6,3,22027,'Remove Insignia'), +(6,3,22810,'Opening - No Text'), +(6,3,24949,'Defensive State 2 (DND)'), +(6,3,34082,'Advantaged State (DND)'), +(6,3,45927,'Summon Friend'), +(6,3,61437,'Opening'), +(6,6,81,'Dodge'), +(6,6,196,'One-Handed Axes'), +(6,6,197,'Two-Handed Axes'), +(6,6,200,'Polearms'), +(6,6,201,'One-Handed Swords'), +(6,6,202,'Two-Handed Swords'), +(6,6,203,'Unarmed'), +(6,6,204,'Defense'), +(6,6,522,'SPELLDEFENSE (DND)'), +(6,6,669,'Language Orcish'), +(6,6,670,'Language Taurahe'), +(6,6,674,'Dual Wield'), +(6,6,750,'Plate Mail'), +(6,6,1843,'Disarm'), +(6,6,2382,'Generic'), +(6,6,2479,'Honorless Target'), +(6,6,3050,'Detect'), +(6,6,3127,'Parry'), +(6,6,3275,'Linen Bandage'), +(6,6,3276,'Heavy Linen Bandage'), +(6,6,3277,'Wool Bandage'), +(6,6,3278,'Heavy Wool Bandage'), +(6,6,3365,'Opening'), +(6,6,6233,'Closing'), +(6,6,6246,'Closing'), +(6,6,6247,'Opening'), +(6,6,6477,'Opening'), +(6,6,6478,'Opening'), +(6,6,6603,'Attack'), +(6,6,7266,'Duel'), +(6,6,7267,'Grovel'), +(6,6,7355,'Stuck'), +(6,6,7928,'Silk Bandage'), +(6,6,7929,'Heavy Silk Bandage'), +(6,6,7934,'Anti-Venom'), +(6,6,8386,'Attacking'), +(6,6,8737,'Mail'), +(6,6,9077,'Leather'), +(6,6,9078,'Cloth'), +(6,6,9125,'Generic'), +(6,6,10840,'Mageweave Bandage'), +(6,6,10841,'Heavy Mageweave Bandage'), +(6,6,10846,'First Aid'), +(6,6,18629,'Runecloth Bandage'), +(6,6,18630,'Heavy Runecloth Bandage'), +(6,6,20549,'War Stomp'), +(6,6,20550,'Endurance'), +(6,6,20551,'Nature Resistance'), +(6,6,20552,'Cultivation'), +(6,6,21651,'Opening'), +(6,6,21652,'Closing'), +(6,6,22027,'Remove Insignia'), +(6,6,22810,'Opening - No Text'), +(6,6,33391,'Journeyman Riding'), +(6,6,45462,'Plague Strike'), +(6,6,45477,'Icy Touch'), +(6,6,45902,'Blood Strike'), +(6,6,45903,'Offensive State (DND)'), +(6,6,45927,'Summon Friend'), +(6,6,47541,'Death Coil'), +(6,6,48266,'Blood Presence'), +(6,6,49410,'Forceful Deflection'), +(6,6,49576,'Death Grip'), +(6,6,52665,'Sigil'), +(6,6,59879,'Blood Plague'), +(6,6,59921,'Frost Fever'), +(6,6,61437,'Opening'), +(6,6,61455,'Runic Focus'), +(6,7,81,'Dodge'), +(6,7,107,'Block'), +(6,7,198,'One-Handed Maces'), +(6,7,203,'Unarmed'), +(6,7,204,'Defense'), +(6,7,227,'Staves'), +(6,7,331,'Healing Wave'), +(6,7,403,'Lightning Bolt'), +(6,7,522,'SPELLDEFENSE (DND)'), +(6,7,669,'Language Orcish'), +(6,7,670,'Language Taurahe'), +(6,7,1843,'Disarm'), +(6,7,2382,'Generic'), +(6,7,2479,'Honorless Target'), +(6,7,3050,'Detect'), +(6,7,3365,'Opening'), +(6,7,6233,'Closing'), +(6,7,6246,'Closing'), +(6,7,6247,'Opening'), +(6,7,6477,'Opening'), +(6,7,6478,'Opening'), +(6,7,6603,'Attack'), +(6,7,7266,'Duel'), +(6,7,7267,'Grovel'), +(6,7,7355,'Stuck'), +(6,7,8386,'Attacking'), +(6,7,9077,'Leather'), +(6,7,9078,'Cloth'), +(6,7,9116,'Shield'), +(6,7,9125,'Generic'), +(6,7,20549,'War Stomp'), +(6,7,20550,'Endurance'), +(6,7,20551,'Nature Resistance'), +(6,7,20552,'Cultivation'), +(6,7,21651,'Opening'), +(6,7,21652,'Closing'), +(6,7,22027,'Remove Insignia'), +(6,7,22810,'Opening - No Text'), +(6,7,27763,'Totem'), +(6,7,45927,'Summon Friend'), +(6,7,61437,'Opening'), +(6,11,81,'Dodge'), +(6,11,198,'One-Handed Maces'), +(6,11,203,'Unarmed'), +(6,11,204,'Defense'), +(6,11,227,'Staves'), +(6,11,522,'SPELLDEFENSE (DND)'), +(6,11,669,'Language Orcish'), +(6,11,670,'Language Taurahe'), +(6,11,1843,'Disarm'), +(6,11,2382,'Generic'), +(6,11,2479,'Honorless Target'), +(6,11,3050,'Detect'), +(6,11,3365,'Opening'), +(6,11,5176,'Wrath'), +(6,11,5185,'Healing Touch'), +(6,11,6233,'Closing'), +(6,11,6246,'Closing'), +(6,11,6247,'Opening'), +(6,11,6477,'Opening'), +(6,11,6478,'Opening'), +(6,11,6603,'Attack'), +(6,11,7266,'Duel'), +(6,11,7267,'Grovel'), +(6,11,7355,'Stuck'), +(6,11,8386,'Attacking'), +(6,11,9077,'Leather'), +(6,11,9078,'Cloth'), +(6,11,9125,'Generic'), +(6,11,20549,'War Stomp'), +(6,11,20550,'Endurance'), +(6,11,20551,'Nature Resistance'), +(6,11,20552,'Cultivation'), +(6,11,21651,'Opening'), +(6,11,21652,'Closing'), +(6,11,22027,'Remove Insignia'), +(6,11,22810,'Opening - No Text'), +(6,11,27764,'Fetish'), +(6,11,45927,'Summon Friend'), +(6,11,61437,'Opening'), +(7,1,78,'Heroic Strike'), +(7,1,81,'Dodge'), +(7,1,107,'Block'), +(7,1,198,'One-Handed Maces'), +(7,1,201,'One-Handed Swords'), +(7,1,203,'Unarmed'), +(7,1,204,'Defense'), +(7,1,522,'SPELLDEFENSE (DND)'), +(7,1,668,'Language Common'), +(7,1,1180,'Daggers'), +(7,1,1843,'Disarm'), +(7,1,2382,'Generic'), +(7,1,2457,'Battle Stance'), +(7,1,2479,'Honorless Target'), +(7,1,3050,'Detect'), +(7,1,3365,'Opening'), +(7,1,5301,'Defensive State (DND)'), +(7,1,6233,'Closing'), +(7,1,6246,'Closing'), +(7,1,6247,'Opening'), +(7,1,6477,'Opening'), +(7,1,6478,'Opening'), +(7,1,6603,'Attack'), +(7,1,7266,'Duel'), +(7,1,7267,'Grovel'), +(7,1,7340,'Language Gnomish'), +(7,1,7355,'Stuck'), +(7,1,8386,'Attacking'), +(7,1,8737,'Mail'), +(7,1,9077,'Leather'), +(7,1,9078,'Cloth'), +(7,1,9116,'Shield'), +(7,1,9125,'Generic'), +(7,1,20589,'Escape Artist'), +(7,1,20591,'Expansive Mind'), +(7,1,20592,'Arcane Resistance'), +(7,1,20593,'Engineering Specialization'), +(7,1,21651,'Opening'), +(7,1,21652,'Closing'), +(7,1,22027,'Remove Insignia'), +(7,1,22810,'Opening - No Text'), +(7,1,32215,'Victorious State'), +(7,1,45927,'Summon Friend'), +(7,1,61437,'Opening'), +(7,4,81,'Dodge'), +(7,4,203,'Unarmed'), +(7,4,204,'Defense'), +(7,4,522,'SPELLDEFENSE (DND)'), +(7,4,668,'Language Common'), +(7,4,1180,'Daggers'), +(7,4,1752,'Sinister Strike'), +(7,4,1843,'Disarm'), +(7,4,2098,'Eviscerate'), +(7,4,2382,'Generic'), +(7,4,2479,'Honorless Target'), +(7,4,2567,'Thrown'), +(7,4,2764,'Throw'), +(7,4,3050,'Detect'), +(7,4,3365,'Opening'), +(7,4,6233,'Closing'), +(7,4,6246,'Closing'), +(7,4,6247,'Opening'), +(7,4,6477,'Opening'), +(7,4,6478,'Opening'), +(7,4,6603,'Attack'), +(7,4,7266,'Duel'), +(7,4,7267,'Grovel'), +(7,4,7340,'Language Gnomish'), +(7,4,7355,'Stuck'), +(7,4,8386,'Attacking'), +(7,4,9077,'Leather'), +(7,4,9078,'Cloth'), +(7,4,9125,'Generic'), +(7,4,16092,'Defensive State (DND)'), +(7,4,20589,'Escape Artist'), +(7,4,20591,'Expansive Mind'), +(7,4,20592,'Arcane Resistance'), +(7,4,20593,'Engineering Specialization'), +(7,4,21184,'Rogue Passive (DND)'), +(7,4,21651,'Opening'), +(7,4,21652,'Closing'), +(7,4,22027,'Remove Insignia'), +(7,4,22810,'Opening - No Text'), +(7,4,45927,'Summon Friend'), +(7,4,61437,'Opening'), +(7,6,81,'Dodge'), +(7,6,196,'One-Handed Axes'), +(7,6,197,'Two-Handed Axes'), +(7,6,200,'Polearms'), +(7,6,201,'One-Handed Swords'), +(7,6,202,'Two-Handed Swords'), +(7,6,203,'Unarmed'), +(7,6,204,'Defense'), +(7,6,522,'SPELLDEFENSE (DND)'), +(7,6,668,'Language Common'), +(7,6,674,'Dual Wield'), +(7,6,750,'Plate Mail'), +(7,6,1843,'Disarm'), +(7,6,2382,'Generic'), +(7,6,2479,'Honorless Target'), +(7,6,3050,'Detect'), +(7,6,3127,'Parry'), +(7,6,3275,'Linen Bandage'), +(7,6,3276,'Heavy Linen Bandage'), +(7,6,3277,'Wool Bandage'), +(7,6,3278,'Heavy Wool Bandage'), +(7,6,3365,'Opening'), +(7,6,6233,'Closing'), +(7,6,6246,'Closing'), +(7,6,6247,'Opening'), +(7,6,6477,'Opening'), +(7,6,6478,'Opening'), +(7,6,6603,'Attack'), +(7,6,7266,'Duel'), +(7,6,7267,'Grovel'), +(7,6,7340,'Language Gnomish'), +(7,6,7355,'Stuck'), +(7,6,7928,'Silk Bandage'), +(7,6,7929,'Heavy Silk Bandage'), +(7,6,7934,'Anti-Venom'), +(7,6,8386,'Attacking'), +(7,6,8737,'Mail'), +(7,6,9077,'Leather'), +(7,6,9078,'Cloth'), +(7,6,9125,'Generic'), +(7,6,10840,'Mageweave Bandage'), +(7,6,10841,'Heavy Mageweave Bandage'), +(7,6,10846,'First Aid'), +(7,6,18629,'Runecloth Bandage'), +(7,6,18630,'Heavy Runecloth Bandage'), +(7,6,20589,'Escape Artist'), +(7,6,20591,'Expansive Mind'), +(7,6,20592,'Arcane Resistance'), +(7,6,20593,'Engineering Specialization'), +(7,6,21651,'Opening'), +(7,6,21652,'Closing'), +(7,6,22027,'Remove Insignia'), +(7,6,22810,'Opening - No Text'), +(7,6,33391,'Journeyman Riding'), +(7,6,45462,'Plague Strike'), +(7,6,45477,'Icy Touch'), +(7,6,45902,'Blood Strike'), +(7,6,45903,'Offensive State (DND)'), +(7,6,45927,'Summon Friend'), +(7,6,47541,'Death Coil'), +(7,6,48266,'Blood Presence'), +(7,6,49410,'Forceful Deflection'), +(7,6,49576,'Death Grip'), +(7,6,52665,'Sigil'), +(7,6,59879,'Blood Plague'), +(7,6,59921,'Frost Fever'), +(7,6,61437,'Opening'), +(7,6,61455,'Runic Focus'), +(7,8,81,'Dodge'), +(7,8,133,'Fireball'), +(7,8,168,'Frost Armor'), +(7,8,203,'Unarmed'), +(7,8,204,'Defense'), +(7,8,227,'Staves'), +(7,8,522,'SPELLDEFENSE (DND)'), +(7,8,668,'Language Common'), +(7,8,1843,'Disarm'), +(7,8,2382,'Generic'), +(7,8,2479,'Honorless Target'), +(7,8,3050,'Detect'), +(7,8,3365,'Opening'), +(7,8,5009,'Wands'), +(7,8,5019,'Shoot'), +(7,8,6233,'Closing'), +(7,8,6246,'Closing'), +(7,8,6247,'Opening'), +(7,8,6477,'Opening'), +(7,8,6478,'Opening'), +(7,8,6603,'Attack'), +(7,8,7266,'Duel'), +(7,8,7267,'Grovel'), +(7,8,7340,'Language Gnomish'), +(7,8,7355,'Stuck'), +(7,8,8386,'Attacking'), +(7,8,9078,'Cloth'), +(7,8,9125,'Generic'), +(7,8,20589,'Escape Artist'), +(7,8,20591,'Expansive Mind'), +(7,8,20592,'Arcane Resistance'), +(7,8,20593,'Engineering Specialization'), +(7,8,21651,'Opening'), +(7,8,21652,'Closing'), +(7,8,22027,'Remove Insignia'), +(7,8,22810,'Opening - No Text'), +(7,8,45927,'Summon Friend'), +(7,8,61437,'Opening'), +(7,9,81,'Dodge'), +(7,9,203,'Unarmed'), +(7,9,204,'Defense'), +(7,9,522,'SPELLDEFENSE (DND)'), +(7,9,668,'Language Common'), +(7,9,686,'Shadow Bolt'), +(7,9,687,'Demon Skin'), +(7,9,1180,'Daggers'), +(7,9,1843,'Disarm'), +(7,9,2382,'Generic'), +(7,9,2479,'Honorless Target'), +(7,9,3050,'Detect'), +(7,9,3365,'Opening'), +(7,9,5009,'Wands'), +(7,9,5019,'Shoot'), +(7,9,6233,'Closing'), +(7,9,6246,'Closing'), +(7,9,6247,'Opening'), +(7,9,6477,'Opening'), +(7,9,6478,'Opening'), +(7,9,6603,'Attack'), +(7,9,7266,'Duel'), +(7,9,7267,'Grovel'), +(7,9,7340,'Language Gnomish'), +(7,9,7355,'Stuck'), +(7,9,8386,'Attacking'), +(7,9,9078,'Cloth'), +(7,9,9125,'Generic'), +(7,9,20589,'Escape Artist'), +(7,9,20591,'Expansive Mind'), +(7,9,20592,'Arcane Resistance'), +(7,9,20593,'Engineering Specialization'), +(7,9,21651,'Opening'), +(7,9,21652,'Closing'), +(7,9,22027,'Remove Insignia'), +(7,9,22810,'Opening - No Text'), +(7,9,45927,'Summon Friend'), +(7,9,61437,'Opening'), +(8,1,78,'Heroic Strike'), +(8,1,81,'Dodge'), +(8,1,107,'Block'), +(8,1,196,'One-Handed Axes'), +(8,1,203,'Unarmed'), +(8,1,204,'Defense'), +(8,1,522,'SPELLDEFENSE (DND)'), +(8,1,669,'Language Orcish'), +(8,1,1180,'Daggers'), +(8,1,1843,'Disarm'), +(8,1,2382,'Generic'), +(8,1,2457,'Battle Stance'), +(8,1,2479,'Honorless Target'), +(8,1,2567,'Thrown'), +(8,1,2764,'Throw'), +(8,1,3050,'Detect'), +(8,1,3365,'Opening'), +(8,1,5301,'Defensive State (DND)'), +(8,1,6233,'Closing'), +(8,1,6246,'Closing'), +(8,1,6247,'Opening'), +(8,1,6477,'Opening'), +(8,1,6478,'Opening'), +(8,1,6603,'Attack'), +(8,1,7266,'Duel'), +(8,1,7267,'Grovel'), +(8,1,7341,'Language Troll'), +(8,1,7355,'Stuck'), +(8,1,8386,'Attacking'), +(8,1,8737,'Mail'), +(8,1,9077,'Leather'), +(8,1,9078,'Cloth'), +(8,1,9116,'Shield'), +(8,1,9125,'Generic'), +(8,1,20555,'Regeneration'), +(8,1,20557,'Beast Slaying'), +(8,1,20558,'Throwing Specialization'), +(8,1,21651,'Opening'), +(8,1,21652,'Closing'), +(8,1,22027,'Remove Insignia'), +(8,1,22810,'Opening - No Text'), +(8,1,26290,'Bow Specialization'), +(8,1,26296,'Berserking'), +(8,1,32215,'Victorious State'), +(8,1,45927,'Summon Friend'), +(8,1,58943,'Da Voodoo Shuffle'), +(8,1,61437,'Opening'), +(8,3,75,'Auto Shot'), +(8,3,81,'Dodge'), +(8,3,196,'One-Handed Axes'), +(8,3,203,'Unarmed'), +(8,3,204,'Defense'), +(8,3,264,'Bows'), +(8,3,522,'SPELLDEFENSE (DND)'), +(8,3,669,'Language Orcish'), +(8,3,1843,'Disarm'), +(8,3,2382,'Generic'), +(8,3,2479,'Honorless Target'), +(8,3,2973,'Raptor Strike'), +(8,3,3050,'Detect'), +(8,3,3365,'Opening'), +(8,3,6233,'Closing'), +(8,3,6246,'Closing'), +(8,3,6247,'Opening'), +(8,3,6477,'Opening'), +(8,3,6478,'Opening'), +(8,3,6603,'Attack'), +(8,3,7266,'Duel'), +(8,3,7267,'Grovel'), +(8,3,7341,'Language Troll'), +(8,3,7355,'Stuck'), +(8,3,8386,'Attacking'), +(8,3,9077,'Leather'), +(8,3,9078,'Cloth'), +(8,3,9125,'Generic'), +(8,3,13358,'Defensive State (DND)'), +(8,3,20554,'Berserking'), +(8,3,20555,'Regeneration'), +(8,3,20557,'Beast Slaying'), +(8,3,20558,'Throwing Specialization'), +(8,3,21651,'Opening'), +(8,3,21652,'Closing'), +(8,3,22027,'Remove Insignia'), +(8,3,22810,'Opening - No Text'), +(8,3,24949,'Defensive State 2 (DND)'), +(8,3,26290,'Bow Specialization'), +(8,3,34082,'Advantaged State (DND)'), +(8,3,45927,'Summon Friend'), +(8,3,58943,'Da Voodoo Shuffle'), +(8,3,61437,'Opening'), +(8,4,81,'Dodge'), +(8,4,203,'Unarmed'), +(8,4,204,'Defense'), +(8,4,522,'SPELLDEFENSE (DND)'), +(8,4,669,'Language Orcish'), +(8,4,1180,'Daggers'), +(8,4,1752,'Sinister Strike'), +(8,4,1843,'Disarm'), +(8,4,2098,'Eviscerate'), +(8,4,2382,'Generic'), +(8,4,2479,'Honorless Target'), +(8,4,2567,'Thrown'), +(8,4,2764,'Throw'), +(8,4,3050,'Detect'), +(8,4,3365,'Opening'), +(8,4,6233,'Closing'), +(8,4,6246,'Closing'), +(8,4,6247,'Opening'), +(8,4,6477,'Opening'), +(8,4,6478,'Opening'), +(8,4,6603,'Attack'), +(8,4,7266,'Duel'), +(8,4,7267,'Grovel'), +(8,4,7341,'Language Troll'), +(8,4,7355,'Stuck'), +(8,4,8386,'Attacking'), +(8,4,9077,'Leather'), +(8,4,9078,'Cloth'), +(8,4,9125,'Generic'), +(8,4,16092,'Defensive State (DND)'), +(8,4,20555,'Regeneration'), +(8,4,20557,'Beast Slaying'), +(8,4,20558,'Throwing Specialization'), +(8,4,21184,'Rogue Passive (DND)'), +(8,4,21651,'Opening'), +(8,4,21652,'Closing'), +(8,4,22027,'Remove Insignia'), +(8,4,22810,'Opening - No Text'), +(8,4,26290,'Bow Specialization'), +(8,4,26297,'Berserking'), +(8,4,45927,'Summon Friend'), +(8,4,58943,'Da Voodoo Shuffle'), +(8,4,61437,'Opening'), +(8,5,81,'Dodge'), +(8,5,198,'One-Handed Maces'), +(8,5,203,'Unarmed'), +(8,5,204,'Defense'), +(8,5,522,'SPELLDEFENSE (DND)'), +(8,5,585,'Smite'), +(8,5,669,'Language Orcish'), +(8,5,1843,'Disarm'), +(8,5,2050,'Lesser Heal'), +(8,5,2382,'Generic'), +(8,5,2479,'Honorless Target'), +(8,5,3050,'Detect'), +(8,5,3365,'Opening'), +(8,5,5009,'Wands'), +(8,5,5019,'Shoot'), +(8,5,6233,'Closing'), +(8,5,6246,'Closing'), +(8,5,6247,'Opening'), +(8,5,6477,'Opening'), +(8,5,6478,'Opening'), +(8,5,6603,'Attack'), +(8,5,7266,'Duel'), +(8,5,7267,'Grovel'), +(8,5,7341,'Language Troll'), +(8,5,7355,'Stuck'), +(8,5,8386,'Attacking'), +(8,5,9078,'Cloth'), +(8,5,9125,'Generic'), +(8,5,20554,'Berserking'), +(8,5,20555,'Regeneration'), +(8,5,20557,'Beast Slaying'), +(8,5,20558,'Throwing Specialization'), +(8,5,21651,'Opening'), +(8,5,21652,'Closing'), +(8,5,22027,'Remove Insignia'), +(8,5,22810,'Opening - No Text'), +(8,5,26290,'Bow Specialization'), +(8,5,45927,'Summon Friend'), +(8,5,58943,'Da Voodoo Shuffle'), +(8,5,61437,'Opening'), +(8,6,81,'Dodge'), +(8,6,196,'One-Handed Axes'), +(8,6,197,'Two-Handed Axes'), +(8,6,200,'Polearms'), +(8,6,201,'One-Handed Swords'), +(8,6,202,'Two-Handed Swords'), +(8,6,203,'Unarmed'), +(8,6,204,'Defense'), +(8,6,522,'SPELLDEFENSE (DND)'), +(8,6,669,'Language Orcish'), +(8,6,674,'Dual Wield'), +(8,6,750,'Plate Mail'), +(8,6,1843,'Disarm'), +(8,6,2382,'Generic'), +(8,6,2479,'Honorless Target'), +(8,6,3050,'Detect'), +(8,6,3127,'Parry'), +(8,6,3275,'Linen Bandage'), +(8,6,3276,'Heavy Linen Bandage'), +(8,6,3277,'Wool Bandage'), +(8,6,3278,'Heavy Wool Bandage'), +(8,6,3365,'Opening'), +(8,6,6233,'Closing'), +(8,6,6246,'Closing'), +(8,6,6247,'Opening'), +(8,6,6477,'Opening'), +(8,6,6478,'Opening'), +(8,6,6603,'Attack'), +(8,6,7266,'Duel'), +(8,6,7267,'Grovel'), +(8,6,7341,'Language Troll'), +(8,6,7355,'Stuck'), +(8,6,7928,'Silk Bandage'), +(8,6,7929,'Heavy Silk Bandage'), +(8,6,7934,'Anti-Venom'), +(8,6,8386,'Attacking'), +(8,6,8737,'Mail'), +(8,6,9077,'Leather'), +(8,6,9078,'Cloth'), +(8,6,9125,'Generic'), +(8,6,10840,'Mageweave Bandage'), +(8,6,10841,'Heavy Mageweave Bandage'), +(8,6,10846,'First Aid'), +(8,6,18629,'Runecloth Bandage'), +(8,6,18630,'Heavy Runecloth Bandage'), +(8,6,20555,'Regeneration'), +(8,6,20557,'Beast Slaying'), +(8,6,20558,'Throwing Specialization'), +(8,6,21651,'Opening'), +(8,6,21652,'Closing'), +(8,6,22027,'Remove Insignia'), +(8,6,22810,'Opening - No Text'), +(8,6,26290,'Bow Specialization'), +(8,6,33391,'Journeyman Riding'), +(8,6,45462,'Plague Strike'), +(8,6,45477,'Icy Touch'), +(8,6,45902,'Blood Strike'), +(8,6,45903,'Offensive State (DND)'), +(8,6,45927,'Summon Friend'), +(8,6,47541,'Death Coil'), +(8,6,48266,'Blood Presence'), +(8,6,49410,'Forceful Deflection'), +(8,6,49576,'Death Grip'), +(8,6,50621,'Berserking'), +(8,6,52665,'Sigil'), +(8,6,58943,'Da Voodoo Shuffle'), +(8,6,59879,'Blood Plague'), +(8,6,59921,'Frost Fever'), +(8,6,61437,'Opening'), +(8,6,61455,'Runic Focus'), +(8,7,81,'Dodge'), +(8,7,107,'Block'), +(8,7,198,'One-Handed Maces'), +(8,7,203,'Unarmed'), +(8,7,204,'Defense'), +(8,7,227,'Staves'), +(8,7,331,'Healing Wave'), +(8,7,403,'Lightning Bolt'), +(8,7,522,'SPELLDEFENSE (DND)'), +(8,7,669,'Language Orcish'), +(8,7,1843,'Disarm'), +(8,7,2382,'Generic'), +(8,7,2479,'Honorless Target'), +(8,7,3050,'Detect'), +(8,7,3365,'Opening'), +(8,7,6233,'Closing'), +(8,7,6246,'Closing'), +(8,7,6247,'Opening'), +(8,7,6477,'Opening'), +(8,7,6478,'Opening'), +(8,7,6603,'Attack'), +(8,7,7266,'Duel'), +(8,7,7267,'Grovel'), +(8,7,7341,'Language Troll'), +(8,7,7355,'Stuck'), +(8,7,8386,'Attacking'), +(8,7,9077,'Leather'), +(8,7,9078,'Cloth'), +(8,7,9116,'Shield'), +(8,7,9125,'Generic'), +(8,7,20554,'Berserking'), +(8,7,20555,'Regeneration'), +(8,7,20557,'Beast Slaying'), +(8,7,20558,'Throwing Specialization'), +(8,7,21651,'Opening'), +(8,7,21652,'Closing'), +(8,7,22027,'Remove Insignia'), +(8,7,22810,'Opening - No Text'), +(8,7,26290,'Bow Specialization'), +(8,7,27763,'Totem'), +(8,7,45927,'Summon Friend'), +(8,7,58943,'Da Voodoo Shuffle'), +(8,7,61437,'Opening'), +(8,8,81,'Dodge'), +(8,8,133,'Fireball'), +(8,8,168,'Frost Armor'), +(8,8,203,'Unarmed'), +(8,8,204,'Defense'), +(8,8,227,'Staves'), +(8,8,522,'SPELLDEFENSE (DND)'), +(8,8,669,'Language Orcish'), +(8,8,1843,'Disarm'), +(8,8,2382,'Generic'), +(8,8,2479,'Honorless Target'), +(8,8,3050,'Detect'), +(8,8,3365,'Opening'), +(8,8,5009,'Wands'), +(8,8,5019,'Shoot'), +(8,8,6233,'Closing'), +(8,8,6246,'Closing'), +(8,8,6247,'Opening'), +(8,8,6477,'Opening'), +(8,8,6478,'Opening'), +(8,8,6603,'Attack'), +(8,8,7266,'Duel'), +(8,8,7267,'Grovel'), +(8,8,7341,'Language Troll'), +(8,8,7355,'Stuck'), +(8,8,8386,'Attacking'), +(8,8,9078,'Cloth'), +(8,8,9125,'Generic'), +(8,8,20554,'Berserking'), +(8,8,20555,'Regeneration'), +(8,8,20557,'Beast Slaying'), +(8,8,20558,'Throwing Specialization'), +(8,8,21651,'Opening'), +(8,8,21652,'Closing'), +(8,8,22027,'Remove Insignia'), +(8,8,22810,'Opening - No Text'), +(8,8,26290,'Bow Specialization'), +(8,8,45927,'Summon Friend'), +(8,8,58943,'Da Voodoo Shuffle'), +(8,8,61437,'Opening'), +(10,2,81,'Dodge'), +(10,2,107,'Block'), +(10,2,201,'One-Handed Swords'), +(10,2,202,'Two-Handed Swords'), +(10,2,203,'Unarmed'), +(10,2,204,'Defense'), +(10,2,522,'SPELLDEFENSE (DND)'), +(10,2,635,'Holy Light'), +(10,2,669,'Language Orcish'), +(10,2,813,'Language Thalassian'), +(10,2,822,'Magic Resistance'), +(10,2,2382,'Generic'), +(10,2,2479,'Honorless Target'), +(10,2,3050,'Detect'), +(10,2,3365,'Opening'), +(10,2,6233,'Closing'), +(10,2,6246,'Closing'), +(10,2,6247,'Opening'), +(10,2,6477,'Opening'), +(10,2,6478,'Opening'), +(10,2,6603,'Attack'), +(10,2,7266,'Duel'), +(10,2,7267,'Grovel'), +(10,2,7355,'Stuck'), +(10,2,8386,'Attacking'), +(10,2,8737,'Mail'), +(10,2,9077,'Leather'), +(10,2,9078,'Cloth'), +(10,2,9116,'Shield'), +(10,2,9125,'Generic'), +(10,2,21084,'Seal of Righteousness'), +(10,2,21651,'Opening'), +(10,2,21652,'Closing'), +(10,2,22027,'Remove Insignia'), +(10,2,22810,'Opening - No Text'), +(10,2,27762,'Libram'), +(10,2,28730,'Arcane Torrent'), +(10,2,28734,'Mana Tap'), +(10,2,28877,'Arcane Affinity'), +(10,3,75,'Auto Shot'), +(10,3,81,'Dodge'), +(10,3,203,'Unarmed'), +(10,3,204,'Defense'), +(10,3,264,'Bows'), +(10,3,522,'SPELLDEFENSE (DND)'), +(10,3,669,'Language Orcish'), +(10,3,813,'Language Thalassian'), +(10,3,822,'Magic Resistance'), +(10,3,1180,'Daggers'), +(10,3,2382,'Generic'), +(10,3,2479,'Honorless Target'), +(10,3,2973,'Raptor Strike'), +(10,3,3050,'Detect'), +(10,3,3365,'Opening'), +(10,3,6233,'Closing'), +(10,3,6246,'Closing'), +(10,3,6247,'Opening'), +(10,3,6477,'Opening'), +(10,3,6478,'Opening'), +(10,3,6603,'Attack'), +(10,3,7266,'Duel'), +(10,3,7267,'Grovel'), +(10,3,7355,'Stuck'), +(10,3,8386,'Attacking'), +(10,3,9077,'Leather'), +(10,3,9078,'Cloth'), +(10,3,9125,'Generic'), +(10,3,13358,'Defensive State (DND)'), +(10,3,21651,'Opening'), +(10,3,21652,'Closing'), +(10,3,22027,'Remove Insignia'), +(10,3,22810,'Opening - No Text'), +(10,3,24949,'Defensive State 2 (DND)'), +(10,3,28730,'Arcane Torrent'), +(10,3,28734,'Mana Tap'), +(10,3,28877,'Arcane Affinity'), +(10,3,34082,'Advantaged State (DND)'), +(10,4,81,'Dodge'), +(10,4,203,'Unarmed'), +(10,4,204,'Defense'), +(10,4,522,'SPELLDEFENSE (DND)'), +(10,4,669,'Language Orcish'), +(10,4,813,'Language Thalassian'), +(10,4,822,'Magic Resistance'), +(10,4,1180,'Daggers'), +(10,4,1752,'Sinister Strike'), +(10,4,2098,'Eviscerate'), +(10,4,2382,'Generic'), +(10,4,2479,'Honorless Target'), +(10,4,2567,'Thrown'), +(10,4,2764,'Throw'), +(10,4,3050,'Detect'), +(10,4,3365,'Opening'), +(10,4,6233,'Closing'), +(10,4,6246,'Closing'), +(10,4,6247,'Opening'), +(10,4,6477,'Opening'), +(10,4,6478,'Opening'), +(10,4,6603,'Attack'), +(10,4,7266,'Duel'), +(10,4,7267,'Grovel'), +(10,4,7355,'Stuck'), +(10,4,8386,'Attacking'), +(10,4,9077,'Leather'), +(10,4,9078,'Cloth'), +(10,4,9125,'Generic'), +(10,4,16092,'Defensive State (DND)'), +(10,4,21184,'Rogue Passive (DND)'), +(10,4,21651,'Opening'), +(10,4,21652,'Closing'), +(10,4,22027,'Remove Insignia'), +(10,4,22810,'Opening - No Text'), +(10,4,25046,'Arcane Torrent'), +(10,4,28734,'Mana Tap'), +(10,4,28877,'Arcane Affinity'), +(10,5,81,'Dodge'), +(10,5,198,'One-Handed Maces'), +(10,5,203,'Unarmed'), +(10,5,204,'Defense'), +(10,5,522,'SPELLDEFENSE (DND)'), +(10,5,585,'Smite'), +(10,5,669,'Language Orcish'), +(10,5,813,'Language Thalassian'), +(10,5,822,'Magic Resistance'), +(10,5,2050,'Lesser Heal'), +(10,5,2382,'Generic'), +(10,5,2479,'Honorless Target'), +(10,5,3050,'Detect'), +(10,5,3365,'Opening'), +(10,5,5009,'Wands'), +(10,5,5019,'Shoot'), +(10,5,6233,'Closing'), +(10,5,6246,'Closing'), +(10,5,6247,'Opening'), +(10,5,6477,'Opening'), +(10,5,6478,'Opening'), +(10,5,6603,'Attack'), +(10,5,7266,'Duel'), +(10,5,7267,'Grovel'), +(10,5,7355,'Stuck'), +(10,5,8386,'Attacking'), +(10,5,9078,'Cloth'), +(10,5,9125,'Generic'), +(10,5,21651,'Opening'), +(10,5,21652,'Closing'), +(10,5,22027,'Remove Insignia'), +(10,5,22810,'Opening - No Text'), +(10,5,28730,'Arcane Torrent'), +(10,5,28734,'Mana Tap'), +(10,5,28877,'Arcane Affinity'), +(10,6,81,'Dodge'), +(10,6,196,'One-Handed Axes'), +(10,6,197,'Two-Handed Axes'), +(10,6,200,'Polearms'), +(10,6,201,'One-Handed Swords'), +(10,6,202,'Two-Handed Swords'), +(10,6,203,'Unarmed'), +(10,6,204,'Defense'), +(10,6,522,'SPELLDEFENSE (DND)'), +(10,6,669,'Language Orcish'), +(10,6,674,'Dual Wield'), +(10,6,750,'Plate Mail'), +(10,6,813,'Language Thalassian'), +(10,6,822,'Magic Resistance'), +(10,6,1843,'Disarm'), +(10,6,2382,'Generic'), +(10,6,2479,'Honorless Target'), +(10,6,3050,'Detect'), +(10,6,3127,'Parry'), +(10,6,3275,'Linen Bandage'), +(10,6,3276,'Heavy Linen Bandage'), +(10,6,3277,'Wool Bandage'), +(10,6,3278,'Heavy Wool Bandage'), +(10,6,3365,'Opening'), +(10,6,6233,'Closing'), +(10,6,6246,'Closing'), +(10,6,6247,'Opening'), +(10,6,6477,'Opening'), +(10,6,6478,'Opening'), +(10,6,6603,'Attack'), +(10,6,7266,'Duel'), +(10,6,7267,'Grovel'), +(10,6,7355,'Stuck'), +(10,6,7928,'Silk Bandage'), +(10,6,7929,'Heavy Silk Bandage'), +(10,6,7934,'Anti-Venom'), +(10,6,8386,'Attacking'), +(10,6,8737,'Mail'), +(10,6,9077,'Leather'), +(10,6,9078,'Cloth'), +(10,6,9125,'Generic'), +(10,6,10840,'Mageweave Bandage'), +(10,6,10841,'Heavy Mageweave Bandage'), +(10,6,10846,'First Aid'), +(10,6,18629,'Runecloth Bandage'), +(10,6,18630,'Heavy Runecloth Bandage'), +(10,6,21651,'Opening'), +(10,6,21652,'Closing'), +(10,6,22027,'Remove Insignia'), +(10,6,22810,'Opening - No Text'), +(10,6,28877,'Arcane Affinity'), +(10,6,33391,'Journeyman Riding'), +(10,6,45462,'Plague Strike'), +(10,6,45477,'Icy Touch'), +(10,6,45902,'Blood Strike'), +(10,6,45903,'Offensive State (DND)'), +(10,6,45927,'Summon Friend'), +(10,6,47541,'Death Coil'), +(10,6,48266,'Blood Presence'), +(10,6,49410,'Forceful Deflection'), +(10,6,49576,'Death Grip'), +(10,6,50613,'Arcane Torrent'), +(10,6,52665,'Sigil'), +(10,6,59879,'Blood Plague'), +(10,6,59921,'Frost Fever'), +(10,6,61437,'Opening'), +(10,6,61455,'Runic Focus'), +(10,8,81,'Dodge'), +(10,8,133,'Fireball'), +(10,8,168,'Frost Armor'), +(10,8,203,'Unarmed'), +(10,8,204,'Defense'), +(10,8,227,'Staves'), +(10,8,522,'SPELLDEFENSE (DND)'), +(10,8,669,'Language Orcish'), +(10,8,813,'Language Thalassian'), +(10,8,822,'Magic Resistance'), +(10,8,2382,'Generic'), +(10,8,2479,'Honorless Target'), +(10,8,3050,'Detect'), +(10,8,3365,'Opening'), +(10,8,5009,'Wands'), +(10,8,5019,'Shoot'), +(10,8,6233,'Closing'), +(10,8,6246,'Closing'), +(10,8,6247,'Opening'), +(10,8,6477,'Opening'), +(10,8,6478,'Opening'), +(10,8,6603,'Attack'), +(10,8,7266,'Duel'), +(10,8,7267,'Grovel'), +(10,8,7355,'Stuck'), +(10,8,8386,'Attacking'), +(10,8,9078,'Cloth'), +(10,8,9125,'Generic'), +(10,8,21651,'Opening'), +(10,8,21652,'Closing'), +(10,8,22027,'Remove Insignia'), +(10,8,22810,'Opening - No Text'), +(10,8,28730,'Arcane Torrent'), +(10,8,28734,'Mana Tap'), +(10,8,28877,'Arcane Affinity'), +(10,9,81,'Dodge'), +(10,9,203,'Unarmed'), +(10,9,204,'Defense'), +(10,9,522,'SPELLDEFENSE (DND)'), +(10,9,669,'Language Orcish'), +(10,9,686,'Shadow Bolt'), +(10,9,687,'Demon Skin'), +(10,9,813,'Language Thalassian'), +(10,9,822,'Magic Resistance'), +(10,9,1180,'Daggers'), +(10,9,2382,'Generic'), +(10,9,2479,'Honorless Target'), +(10,9,3050,'Detect'), +(10,9,3365,'Opening'), +(10,9,5009,'Wands'), +(10,9,5019,'Shoot'), +(10,9,6233,'Closing'), +(10,9,6246,'Closing'), +(10,9,6247,'Opening'), +(10,9,6477,'Opening'), +(10,9,6478,'Opening'), +(10,9,6603,'Attack'), +(10,9,7266,'Duel'), +(10,9,7267,'Grovel'), +(10,9,7355,'Stuck'), +(10,9,8386,'Attacking'), +(10,9,9078,'Cloth'), +(10,9,9125,'Generic'), +(10,9,21651,'Opening'), +(10,9,21652,'Closing'), +(10,9,22027,'Remove Insignia'), +(10,9,22810,'Opening - No Text'), +(10,9,28730,'Arcane Torrent'), +(10,9,28734,'Mana Tap'), +(10,9,28877,'Arcane Affinity'), +(11,1,78,'Heroic Strike'), +(11,1,81,'Dodge'), +(11,1,107,'Block'), +(11,1,198,'One-Handed Maces'), +(11,1,201,'One-Handed Swords'), +(11,1,202,'Two-Handed Swords'), +(11,1,203,'Unarmed'), +(11,1,204,'Defense'), +(11,1,522,'SPELLDEFENSE (DND)'), +(11,1,668,'Language Common'), +(11,1,1843,'Disarm'), +(11,1,2382,'Generic'), +(11,1,2457,'Battle Stance'), +(11,1,2479,'Honorless Target'), +(11,1,3050,'Detect'), +(11,1,3365,'Opening'), +(11,1,5301,'Defensive State (DND)'), +(11,1,6233,'Closing'), +(11,1,6246,'Closing'), +(11,1,6247,'Opening'), +(11,1,6477,'Opening'), +(11,1,6478,'Opening'), +(11,1,6562,'Heroic Presence'), +(11,1,6603,'Attack'), +(11,1,7266,'Duel'), +(11,1,7267,'Grovel'), +(11,1,7355,'Stuck'), +(11,1,8386,'Attacking'), +(11,1,8737,'Mail'), +(11,1,9077,'Leather'), +(11,1,9078,'Cloth'), +(11,1,9116,'Shield'), +(11,1,9125,'Generic'), +(11,1,21651,'Opening'), +(11,1,21652,'Closing'), +(11,1,22027,'Remove Insignia'), +(11,1,22810,'Opening - No Text'), +(11,1,28875,'Gemcutting'), +(11,1,28880,'Gift of the Naaru'), +(11,1,29932,'Language Draenei'), +(11,1,32215,'Victorious State'), +(11,1,45927,'Summon Friend'), +(11,1,59221,'Shadow Resistance'), +(11,1,61437,'Opening'), +(11,2,81,'Dodge'), +(11,2,107,'Block'), +(11,2,198,'One-Handed Maces'), +(11,2,199,'Two-Handed Maces'), +(11,2,203,'Unarmed'), +(11,2,204,'Defense'), +(11,2,522,'SPELLDEFENSE (DND)'), +(11,2,635,'Holy Light'), +(11,2,668,'Language Common'), +(11,2,1843,'Disarm'), +(11,2,2382,'Generic'), +(11,2,2479,'Honorless Target'), +(11,2,3050,'Detect'), +(11,2,3365,'Opening'), +(11,2,6233,'Closing'), +(11,2,6246,'Closing'), +(11,2,6247,'Opening'), +(11,2,6477,'Opening'), +(11,2,6478,'Opening'), +(11,2,6562,'Heroic Presence'), +(11,2,6603,'Attack'), +(11,2,7266,'Duel'), +(11,2,7267,'Grovel'), +(11,2,7355,'Stuck'), +(11,2,8386,'Attacking'), +(11,2,8737,'Mail'), +(11,2,9077,'Leather'), +(11,2,9078,'Cloth'), +(11,2,9116,'Shield'), +(11,2,9125,'Generic'), +(11,2,21084,'Seal of Righteousness'), +(11,2,21651,'Opening'), +(11,2,21652,'Closing'), +(11,2,22027,'Remove Insignia'), +(11,2,22810,'Opening - No Text'), +(11,2,27762,'Libram'), +(11,2,28875,'Gemcutting'), +(11,2,29932,'Language Draenei'), +(11,2,45927,'Summon Friend'), +(11,2,59221,'Shadow Resistance'), +(11,2,59542,'Gift of the Naaru'), +(11,2,61437,'Opening'), +(11,3,75,'Auto Shot'), +(11,3,81,'Dodge'), +(11,3,201,'One-Handed Swords'), +(11,3,203,'Unarmed'), +(11,3,204,'Defense'), +(11,3,522,'SPELLDEFENSE (DND)'), +(11,3,668,'Language Common'), +(11,3,1843,'Disarm'), +(11,3,2382,'Generic'), +(11,3,2479,'Honorless Target'), +(11,3,2973,'Raptor Strike'), +(11,3,3050,'Detect'), +(11,3,3365,'Opening'), +(11,3,5011,'Crossbows'), +(11,3,6233,'Closing'), +(11,3,6246,'Closing'), +(11,3,6247,'Opening'), +(11,3,6477,'Opening'), +(11,3,6478,'Opening'), +(11,3,6562,'Heroic Presence'), +(11,3,6603,'Attack'), +(11,3,7266,'Duel'), +(11,3,7267,'Grovel'), +(11,3,7355,'Stuck'), +(11,3,8386,'Attacking'), +(11,3,9077,'Leather'), +(11,3,9078,'Cloth'), +(11,3,9125,'Generic'), +(11,3,13358,'Defensive State (DND)'), +(11,3,21651,'Opening'), +(11,3,21652,'Closing'), +(11,3,22027,'Remove Insignia'), +(11,3,22810,'Opening - No Text'), +(11,3,24949,'Defensive State 2 (DND)'), +(11,3,28875,'Gemcutting'), +(11,3,29932,'Language Draenei'), +(11,3,34082,'Advantaged State (DND)'), +(11,3,45927,'Summon Friend'), +(11,3,59221,'Shadow Resistance'), +(11,3,59543,'Gift of the Naaru'), +(11,3,61437,'Opening'), +(11,5,81,'Dodge'), +(11,5,198,'One-Handed Maces'), +(11,5,203,'Unarmed'), +(11,5,204,'Defense'), +(11,5,522,'SPELLDEFENSE (DND)'), +(11,5,585,'Smite'), +(11,5,668,'Language Common'), +(11,5,1843,'Disarm'), +(11,5,2050,'Lesser Heal'), +(11,5,2382,'Generic'), +(11,5,2479,'Honorless Target'), +(11,5,3050,'Detect'), +(11,5,3365,'Opening'), +(11,5,5009,'Wands'), +(11,5,5019,'Shoot'), +(11,5,6233,'Closing'), +(11,5,6246,'Closing'), +(11,5,6247,'Opening'), +(11,5,6477,'Opening'), +(11,5,6478,'Opening'), +(11,5,6603,'Attack'), +(11,5,7266,'Duel'), +(11,5,7267,'Grovel'), +(11,5,7355,'Stuck'), +(11,5,8386,'Attacking'), +(11,5,9078,'Cloth'), +(11,5,9125,'Generic'), +(11,5,21651,'Opening'), +(11,5,21652,'Closing'), +(11,5,22027,'Remove Insignia'), +(11,5,22810,'Opening - No Text'), +(11,5,28875,'Gemcutting'), +(11,5,28878,'Inspiring Presence'), +(11,5,29932,'Language Draenei'), +(11,5,45927,'Summon Friend'), +(11,5,59221,'Shadow Resistance'), +(11,5,59544,'Gift of the Naaru'), +(11,5,61437,'Opening'), +(11,6,81,'Dodge'), +(11,6,196,'One-Handed Axes'), +(11,6,197,'Two-Handed Axes'), +(11,6,200,'Polearms'), +(11,6,201,'One-Handed Swords'), +(11,6,202,'Two-Handed Swords'), +(11,6,203,'Unarmed'), +(11,6,204,'Defense'), +(11,6,522,'SPELLDEFENSE (DND)'), +(11,6,668,'Language Common'), +(11,6,674,'Dual Wield'), +(11,6,750,'Plate Mail'), +(11,6,1843,'Disarm'), +(11,6,2382,'Generic'), +(11,6,2479,'Honorless Target'), +(11,6,3050,'Detect'), +(11,6,3127,'Parry'), +(11,6,3275,'Linen Bandage'), +(11,6,3276,'Heavy Linen Bandage'), +(11,6,3277,'Wool Bandage'), +(11,6,3278,'Heavy Wool Bandage'), +(11,6,3365,'Opening'), +(11,6,6233,'Closing'), +(11,6,6246,'Closing'), +(11,6,6247,'Opening'), +(11,6,6477,'Opening'), +(11,6,6478,'Opening'), +(11,6,6562,'Heroic Presence'), +(11,6,6603,'Attack'), +(11,6,7266,'Duel'), +(11,6,7267,'Grovel'), +(11,6,7355,'Stuck'), +(11,6,7928,'Silk Bandage'), +(11,6,7929,'Heavy Silk Bandage'), +(11,6,7934,'Anti-Venom'), +(11,6,8386,'Attacking'), +(11,6,8737,'Mail'), +(11,6,9077,'Leather'), +(11,6,9078,'Cloth'), +(11,6,9125,'Generic'), +(11,6,10840,'Mageweave Bandage'), +(11,6,10841,'Heavy Mageweave Bandage'), +(11,6,10846,'First Aid'), +(11,6,18629,'Runecloth Bandage'), +(11,6,18630,'Heavy Runecloth Bandage'), +(11,6,21651,'Opening'), +(11,6,21652,'Closing'), +(11,6,22027,'Remove Insignia'), +(11,6,22810,'Opening - No Text'), +(11,6,28875,'Gemcutting'), +(11,6,29932,'Language Draenei'), +(11,6,33391,'Journeyman Riding'), +(11,6,45462,'Plague Strike'), +(11,6,45477,'Icy Touch'), +(11,6,45902,'Blood Strike'), +(11,6,45903,'Offensive State (DND)'), +(11,6,45927,'Summon Friend'), +(11,6,47541,'Death Coil'), +(11,6,48266,'Blood Presence'), +(11,6,49410,'Forceful Deflection'), +(11,6,49576,'Death Grip'), +(11,6,52665,'Sigil'), +(11,6,59221,'Shadow Resistance'), +(11,6,59539,'Shadow Resistance'), +(11,6,59545,'Gift of the Naaru'), +(11,6,59879,'Blood Plague'), +(11,6,59921,'Frost Fever'), +(11,6,61437,'Opening'), +(11,6,61455,'Runic Focus'), +(11,7,81,'Dodge'), +(11,7,107,'Block'), +(11,7,198,'One-Handed Maces'), +(11,7,203,'Unarmed'), +(11,7,204,'Defense'), +(11,7,227,'Staves'), +(11,7,331,'Healing Wave'), +(11,7,403,'Lightning Bolt'), +(11,7,522,'SPELLDEFENSE (DND)'), +(11,7,668,'Language Common'), +(11,7,1843,'Disarm'), +(11,7,2382,'Generic'), +(11,7,2479,'Honorless Target'), +(11,7,3050,'Detect'), +(11,7,3365,'Opening'), +(11,7,6233,'Closing'), +(11,7,6246,'Closing'), +(11,7,6247,'Opening'), +(11,7,6477,'Opening'), +(11,7,6478,'Opening'), +(11,7,6603,'Attack'), +(11,7,7266,'Duel'), +(11,7,7267,'Grovel'), +(11,7,7355,'Stuck'), +(11,7,8386,'Attacking'), +(11,7,9077,'Leather'), +(11,7,9078,'Cloth'), +(11,7,9116,'Shield'), +(11,7,9125,'Generic'), +(11,7,21651,'Opening'), +(11,7,21652,'Closing'), +(11,7,22027,'Remove Insignia'), +(11,7,22810,'Opening - No Text'), +(11,7,27763,'Totem'), +(11,7,28875,'Gemcutting'), +(11,7,28878,'Inspiring Presence'), +(11,7,29932,'Language Draenei'), +(11,7,45927,'Summon Friend'), +(11,7,59221,'Shadow Resistance'), +(11,7,59547,'Gift of the Naaru'), +(11,7,61437,'Opening'), +(11,8,81,'Dodge'), +(11,8,133,'Fireball'), +(11,8,168,'Frost Armor'), +(11,8,203,'Unarmed'), +(11,8,204,'Defense'), +(11,8,227,'Staves'), +(11,8,522,'SPELLDEFENSE (DND)'), +(11,8,668,'Language Common'), +(11,8,1843,'Disarm'), +(11,8,2382,'Generic'), +(11,8,2479,'Honorless Target'), +(11,8,3050,'Detect'), +(11,8,3365,'Opening'), +(11,8,5009,'Wands'), +(11,8,5019,'Shoot'), +(11,8,6233,'Closing'), +(11,8,6246,'Closing'), +(11,8,6247,'Opening'), +(11,8,6477,'Opening'), +(11,8,6478,'Opening'), +(11,8,6603,'Attack'), +(11,8,7266,'Duel'), +(11,8,7267,'Grovel'), +(11,8,7355,'Stuck'), +(11,8,8386,'Attacking'), +(11,8,9078,'Cloth'), +(11,8,9125,'Generic'), +(11,8,21651,'Opening'), +(11,8,21652,'Closing'), +(11,8,22027,'Remove Insignia'), +(11,8,22810,'Opening - No Text'), +(11,8,28875,'Gemcutting'), +(11,8,28878,'Inspiring Presence'), +(11,8,29932,'Language Draenei'), +(11,8,45927,'Summon Friend'), +(11,8,59221,'Shadow Resistance'), +(11,8,59548,'Gift of the Naaru'), +(11,8,61437,'Opening'); diff --git a/sql/updates/7075_01_characters_character_spell.sql b/sql/updates/7075_01_characters_character_spell.sql new file mode 100644 index 000000000..4e6ef7ea9 --- /dev/null +++ b/sql/updates/7075_01_characters_character_spell.sql @@ -0,0 +1,13 @@ +ALTER TABLE character_db_version CHANGE COLUMN required_7067_03_characters_character_spell required_7075_01_characters_character_spell bit; + +DELETE FROM character_spell WHERE `spell` IN ( + 20580, /*old Shadowmeld*/ + 20600, /*Perception*/ + 21009, /*old Shadowmeld Passive and new Elusiveness (learned as racial passive)*/ + 21184 /*old Seal of Righteousness*/ +); + + +/*old Shadow Resistance, leaned as racial passive of race 5 */ +DELETE FROM character_spell USING character_spell INNER JOIN characters ON character_spell.guid = characters.guid +WHERE character_spell.spell = 20579 AND characters.race <> 5; diff --git a/sql/updates/7075_02_mangos_spell_learn_spell.sql b/sql/updates/7075_02_mangos_spell_learn_spell.sql new file mode 100644 index 000000000..4aec0314a --- /dev/null +++ b/sql/updates/7075_02_mangos_spell_learn_spell.sql @@ -0,0 +1,6 @@ +ALTER TABLE db_version CHANGE COLUMN required_7074_01_mangos_playercreateinfo_spell required_7075_02_mangos_spell_learn_spell bit; + +DELETE FROM spell_learn_spell WHERE Entry = 58984; + +INSERT INTO spell_learn_spell VALUES +(58984,21009,1); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 719867fa7..33bc07947 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -104,6 +104,37 @@ pkgdata_DATA = \ 6960_01_mangos_command.sql \ 6960_02_mangos_string.sql \ 6961_01_mangos_command.sql \ + 6970_01_mangos_playercreateinfo.sql \ + 6976_01_realmd_realmd_db_version.sql \ + 6976_02_characters_character_db_version.sql \ + 7002_01_mangos_spell_chain.sql \ + 7015_01_mangos_item_template.sql \ + 7024_01_mangos_spell_chain.sql \ + 7026_01_mangos_battleground_template.sql \ + 7031_01_mangos_spell_proc_event.sql \ + 7033_01_mangos_spell_proc_event.sql \ + 7034_01_mangos_spell_proc_event.sql \ + 7040_01_mangos_achievement_reward.sql \ + 7044_01_mangos_spell_proc_event.sql \ + 7047_01_characters_character_spell.sql \ + 7047_02_mangos_playercreateinfo_action.sql \ + 7047_03_mangos_playercreateinfo_spell.sql \ + 7050_01_mangos_spell_proc_event.sql \ + 7051_01_mangos_spell_proc_event.sql \ + 7052_01_mangos_spell_proc_event.sql \ + 7053_01_mangos_spell_proc_event.sql \ + 7056_01_mangos_spell_proc_event.sql \ + 7059_01_characters_character_spell.sql \ + 7059_02_characters_pet_spell.sql \ + 7060_01_mangos_spell_proc_event.sql \ + 7061_01_mangos_spell_proc_event.sql \ + 7063_01_mangos_spell_proc_event.sql \ + 7067_01_mangos_playercreateinfo_spell.sql \ + 7067_02_mangos_spell_learn_spell.sql \ + 7067_03_characters_character_spell.sql \ + 7074_01_mangos_playercreateinfo_spell.sql \ + 7075_01_characters_character_spell.sql \ + 7075_02_mangos_spell_learn_spell.sql \ README ## Additional files to include when running 'make dist' @@ -188,4 +219,35 @@ EXTRA_DIST = \ 6960_01_mangos_command.sql \ 6960_02_mangos_string.sql \ 6961_01_mangos_command.sql \ + 6970_01_mangos_playercreateinfo.sql \ + 6976_01_realmd_realmd_db_version.sql \ + 6976_02_characters_character_db_version.sql \ + 7002_01_mangos_spell_chain.sql \ + 7015_01_mangos_item_template.sql \ + 7024_01_mangos_spell_chain.sql \ + 7026_01_mangos_battleground_template.sql \ + 7031_01_mangos_spell_proc_event.sql \ + 7033_01_mangos_spell_proc_event.sql \ + 7034_01_mangos_spell_proc_event.sql \ + 7040_01_mangos_achievement_reward.sql \ + 7044_01_mangos_spell_proc_event.sql \ + 7047_01_characters_character_spell.sql \ + 7047_02_mangos_playercreateinfo_action.sql \ + 7047_03_mangos_playercreateinfo_spell.sql \ + 7050_01_mangos_spell_proc_event.sql \ + 7051_01_mangos_spell_proc_event.sql \ + 7052_01_mangos_spell_proc_event.sql \ + 7053_01_mangos_spell_proc_event.sql \ + 7056_01_mangos_spell_proc_event.sql \ + 7059_01_characters_character_spell.sql \ + 7059_02_characters_pet_spell.sql \ + 7060_01_mangos_spell_proc_event.sql \ + 7061_01_mangos_spell_proc_event.sql \ + 7063_01_mangos_spell_proc_event.sql \ + 7067_01_mangos_playercreateinfo_spell.sql \ + 7067_02_mangos_spell_learn_spell.sql \ + 7067_03_characters_character_spell.sql \ + 7074_01_mangos_playercreateinfo_spell.sql \ + 7075_01_characters_character_spell.sql \ + 7075_02_mangos_spell_learn_spell.sql \ README diff --git a/sql/updates/README b/sql/updates/README index 2b0c8974b..6f14366c6 100644 --- a/sql/updates/README +++ b/sql/updates/README @@ -1,6 +1,6 @@ = MaNGOS -- README = -Copyright (c) 2005-2008 MaNGOS +Copyright (c) 2005-2009 MaNGOS See the COPYING file for copying conditions. diff --git a/src/Makefile.am b/src/Makefile.am index abf76a649..da5fc636f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/bindings/Makefile.am b/src/bindings/Makefile.am index 9080b8d31..2cc0efde4 100644 --- a/src/bindings/Makefile.am +++ b/src/bindings/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/bindings/universal/Makefile.am b/src/bindings/universal/Makefile.am index d2914329a..9c605004c 100644 --- a/src/bindings/universal/Makefile.am +++ b/src/bindings/universal/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/bindings/universal/ScriptMgr.cpp b/src/bindings/universal/ScriptMgr.cpp index e2e7349cb..2045386ac 100644 --- a/src/bindings/universal/ScriptMgr.cpp +++ b/src/bindings/universal/ScriptMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/bindings/universal/ScriptMgr.h b/src/bindings/universal/ScriptMgr.h index 415aa23cc..a05edf493 100644 --- a/src/bindings/universal/ScriptMgr.h +++ b/src/bindings/universal/ScriptMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/bindings/universal/Scripts/sc_default.cpp b/src/bindings/universal/Scripts/sc_default.cpp index d4a98feaa..bcb0e3302 100644 --- a/src/bindings/universal/Scripts/sc_default.cpp +++ b/src/bindings/universal/Scripts/sc_default.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/bindings/universal/Scripts/sc_defines.cpp b/src/bindings/universal/Scripts/sc_defines.cpp index f0c732cdd..0f12248d2 100644 --- a/src/bindings/universal/Scripts/sc_defines.cpp +++ b/src/bindings/universal/Scripts/sc_defines.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/bindings/universal/Scripts/sc_defines.h b/src/bindings/universal/Scripts/sc_defines.h index 6343c02fb..d9c9fde22 100644 --- a/src/bindings/universal/Scripts/sc_defines.h +++ b/src/bindings/universal/Scripts/sc_defines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/bindings/universal/config.h b/src/bindings/universal/config.h index 1541db505..a88e03cb8 100644 --- a/src/bindings/universal/config.h +++ b/src/bindings/universal/config.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/bindings/universal/system.cpp b/src/bindings/universal/system.cpp index a59b24c7d..6589f0fae 100644 --- a/src/bindings/universal/system.cpp +++ b/src/bindings/universal/system.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Dynamic/FactoryHolder.h b/src/framework/Dynamic/FactoryHolder.h index 1c3eea8bc..d564da4a7 100644 --- a/src/framework/Dynamic/FactoryHolder.h +++ b/src/framework/Dynamic/FactoryHolder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Dynamic/ObjectRegistry.h b/src/framework/Dynamic/ObjectRegistry.h index e78874d4b..068d5cd13 100644 --- a/src/framework/Dynamic/ObjectRegistry.h +++ b/src/framework/Dynamic/ObjectRegistry.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/Grid.h b/src/framework/GameSystem/Grid.h index 8d2751e9a..f1c826da0 100644 --- a/src/framework/GameSystem/Grid.h +++ b/src/framework/GameSystem/Grid.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/GridLoader.h b/src/framework/GameSystem/GridLoader.h index e73913638..cde606646 100644 --- a/src/framework/GameSystem/GridLoader.h +++ b/src/framework/GameSystem/GridLoader.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/GridRefManager.h b/src/framework/GameSystem/GridRefManager.h index cf9d4207f..021f0fe8c 100644 --- a/src/framework/GameSystem/GridRefManager.h +++ b/src/framework/GameSystem/GridRefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/GridReference.h b/src/framework/GameSystem/GridReference.h index afd118c7f..57440b5a2 100644 --- a/src/framework/GameSystem/GridReference.h +++ b/src/framework/GameSystem/GridReference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/NGrid.h b/src/framework/GameSystem/NGrid.h index 60fcbaaa8..b93e5d9a9 100644 --- a/src/framework/GameSystem/NGrid.h +++ b/src/framework/GameSystem/NGrid.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/TypeContainer.h b/src/framework/GameSystem/TypeContainer.h index 849a33385..894027c2f 100644 --- a/src/framework/GameSystem/TypeContainer.h +++ b/src/framework/GameSystem/TypeContainer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/TypeContainerFunctions.h b/src/framework/GameSystem/TypeContainerFunctions.h index 1e6685f32..ebfcb1b86 100644 --- a/src/framework/GameSystem/TypeContainerFunctions.h +++ b/src/framework/GameSystem/TypeContainerFunctions.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/TypeContainerFunctionsPtr.h b/src/framework/GameSystem/TypeContainerFunctionsPtr.h index 3673668e5..82028782b 100644 --- a/src/framework/GameSystem/TypeContainerFunctionsPtr.h +++ b/src/framework/GameSystem/TypeContainerFunctionsPtr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/TypeContainerVisitor.h b/src/framework/GameSystem/TypeContainerVisitor.h index b6e8da9c6..7ffd14a92 100644 --- a/src/framework/GameSystem/TypeContainerVisitor.h +++ b/src/framework/GameSystem/TypeContainerVisitor.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Makefile.am b/src/framework/Makefile.am index 2a62943ab..a519dad42 100644 --- a/src/framework/Makefile.am +++ b/src/framework/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/framework/Network/SocketDefines.h b/src/framework/Network/SocketDefines.h index 2d82f8e05..9658cd60f 100644 --- a/src/framework/Network/SocketDefines.h +++ b/src/framework/Network/SocketDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Platform/CompilerDefs.h b/src/framework/Platform/CompilerDefs.h index 3d88bbcec..e835491b4 100644 --- a/src/framework/Platform/CompilerDefs.h +++ b/src/framework/Platform/CompilerDefs.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Platform/Define.h b/src/framework/Platform/Define.h index 0f6b4cd46..5602bb365 100644 --- a/src/framework/Platform/Define.h +++ b/src/framework/Platform/Define.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Policies/CreationPolicy.h b/src/framework/Policies/CreationPolicy.h index 43312d130..528f6cbbf 100644 --- a/src/framework/Policies/CreationPolicy.h +++ b/src/framework/Policies/CreationPolicy.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Policies/ObjectLifeTime.cpp b/src/framework/Policies/ObjectLifeTime.cpp index 0bbb0e4e2..8f56ddb26 100644 --- a/src/framework/Policies/ObjectLifeTime.cpp +++ b/src/framework/Policies/ObjectLifeTime.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Policies/ObjectLifeTime.h b/src/framework/Policies/ObjectLifeTime.h index f93283dde..dab37a98c 100644 --- a/src/framework/Policies/ObjectLifeTime.h +++ b/src/framework/Policies/ObjectLifeTime.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Policies/Singleton.h b/src/framework/Policies/Singleton.h index 2f77a1d16..9502fb120 100644 --- a/src/framework/Policies/Singleton.h +++ b/src/framework/Policies/Singleton.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Policies/SingletonImp.h b/src/framework/Policies/SingletonImp.h index d0ff54f1d..f1f5eaa17 100644 --- a/src/framework/Policies/SingletonImp.h +++ b/src/framework/Policies/SingletonImp.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Policies/ThreadingModel.h b/src/framework/Policies/ThreadingModel.h index 9f8eddb30..cb2f79259 100644 --- a/src/framework/Policies/ThreadingModel.h +++ b/src/framework/Policies/ThreadingModel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/ByteConverter.h b/src/framework/Utilities/ByteConverter.h index 199edcb6c..c4bf7029a 100644 --- a/src/framework/Utilities/ByteConverter.h +++ b/src/framework/Utilities/ByteConverter.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/Callback.h b/src/framework/Utilities/Callback.h index 1e2e07ab9..c2ed36421 100644 --- a/src/framework/Utilities/Callback.h +++ b/src/framework/Utilities/Callback.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/CountedReference/Reference.h b/src/framework/Utilities/CountedReference/Reference.h index c06a2eba3..8fd513bb5 100644 --- a/src/framework/Utilities/CountedReference/Reference.h +++ b/src/framework/Utilities/CountedReference/Reference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/CountedReference/ReferenceHolder.h b/src/framework/Utilities/CountedReference/ReferenceHolder.h index 821a240cc..d0bb2cb3e 100644 --- a/src/framework/Utilities/CountedReference/ReferenceHolder.h +++ b/src/framework/Utilities/CountedReference/ReferenceHolder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/CountedReference/ReferenceImpl.h b/src/framework/Utilities/CountedReference/ReferenceImpl.h index a1a7b352b..cd0143748 100644 --- a/src/framework/Utilities/CountedReference/ReferenceImpl.h +++ b/src/framework/Utilities/CountedReference/ReferenceImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/EventProcessor.cpp b/src/framework/Utilities/EventProcessor.cpp index 2bcf6a46a..74e1a73fa 100644 --- a/src/framework/Utilities/EventProcessor.cpp +++ b/src/framework/Utilities/EventProcessor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/EventProcessor.h b/src/framework/Utilities/EventProcessor.h index 350db5bb5..e395dd3f6 100644 --- a/src/framework/Utilities/EventProcessor.h +++ b/src/framework/Utilities/EventProcessor.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/LinkedList.h b/src/framework/Utilities/LinkedList.h index 9e6f9249c..092ce9ffe 100644 --- a/src/framework/Utilities/LinkedList.h +++ b/src/framework/Utilities/LinkedList.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/LinkedReference/RefManager.h b/src/framework/Utilities/LinkedReference/RefManager.h index 080133371..319c3ebf2 100644 --- a/src/framework/Utilities/LinkedReference/RefManager.h +++ b/src/framework/Utilities/LinkedReference/RefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/LinkedReference/Reference.h b/src/framework/Utilities/LinkedReference/Reference.h index 3c84704dc..d74723a42 100644 --- a/src/framework/Utilities/LinkedReference/Reference.h +++ b/src/framework/Utilities/LinkedReference/Reference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/TypeList.h b/src/framework/Utilities/TypeList.h index a94e4a280..090f5aeba 100644 --- a/src/framework/Utilities/TypeList.h +++ b/src/framework/Utilities/TypeList.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/UnorderedMap.h b/src/framework/Utilities/UnorderedMap.h index 32a436f42..3a9a401a4 100644 --- a/src/framework/Utilities/UnorderedMap.h +++ b/src/framework/Utilities/UnorderedMap.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AccountMgr.cpp b/src/game/AccountMgr.cpp index 3060554a9..a10b0575f 100644 --- a/src/game/AccountMgr.cpp +++ b/src/game/AccountMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,11 +23,7 @@ #include "Policies/SingletonImp.h" #include "Util.h" -#ifdef DO_POSTGRESQL -extern DatabasePostgre loginDatabase; -#else -extern DatabaseMysql loginDatabase; -#endif +extern DatabaseType loginDatabase; INSTANTIATE_SINGLETON_1(AccountMgr); diff --git a/src/game/AccountMgr.h b/src/game/AccountMgr.h index 1b74c7134..86d09312c 100644 --- a/src/game/AccountMgr.h +++ b/src/game/AccountMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index e4e26dec1..fb6684892 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,8 +27,13 @@ #include "GameEvent.h" #include "World.h" #include "SpellMgr.h" +#include "ProgressBar.h" -const CriteriaCastSpellRequirement AchievementMgr::criteriaCastSpellRequirements[CRITERIA_CAST_SPELL_REQ_COUNT] = +#include "Policies/SingletonImp.h" + +INSTANTIATE_SINGLETON_1(AchievementGlobalMgr); + +const CriteriaCastSpellRequirement AchievementGlobalMgr::m_criteriaCastSpellRequirements[CRITERIA_CAST_SPELL_REQ_COUNT] = { {5272, 3057, 0, 0}, {5273, 2784, 0, 0}, @@ -76,68 +81,6 @@ const CriteriaCastSpellRequirement AchievementMgr::criteriaCastSpellRequirements {6320, 0, CLASS_PALADIN, RACE_DRAENEI}, {6321, 0, CLASS_HUNTER, RACE_DWARF}, {6662, 31261, 0, 0} - }; - -const AchievementReward AchievementMgr::achievementRewards[ACHIEVEMENT_REWARD_COUNT] = - { - // achievementId, horde titleid, alliance titleid, itemid - {45, 0, 0, 43348}, - {46, 78, 78, 0}, - {230, 72, 72, 0}, - {456, 139, 139, 0}, - {614, 0, 0, 44223}, - {619, 0, 0, 44224}, - {714, 47, 47, 0}, - {762, 130, 130, 0}, - {870, 127, 126, 0}, - {871, 144, 144, 0}, - {876, 0, 0, 43349}, - {907, 48, 48, 0}, - {913, 74, 74, 0}, - {942, 79, 79, 0}, - {943, 79, 79, 0}, - {945, 131, 131, 0}, - {948, 130, 130, 0}, - {953, 132, 132, 0}, - {978, 81, 81, 0}, - {1015, 77, 77, 0}, - {1021, 0, 0, 40643}, - {1038, 75, 75, 0}, - {1039, 76, 76, 0}, - {1163, 128, 128, 0}, - {1174, 82, 82, 0}, - {1175, 72, 72, 0}, - {1250, 0, 0, 40653}, - {1400, 120, 120, 0}, - {1402, 122, 122, 0}, - {1516, 83, 83, 0}, - {1563, 84, 84, 0}, - {1656, 124, 124, 0}, - {1657, 124, 124, 0}, - {1658, 129, 129, 0}, - {1681, 125, 125, 43300}, - {1682, 125, 125, 43300}, - {1683, 133, 133, 0}, - {1684, 133, 133, 0}, - {1691, 134, 134, 0}, - {1692, 134, 134, 0}, - {1693, 135, 135, 0}, - {1707, 135, 135, 0}, - {1784, 84, 84, 0}, - {1793, 137, 137, 0}, - {1956, 0, 0, 43824}, - {2051, 140, 140, 0}, - {2054, 121, 121, 0}, - {2096, 0, 0, 44430}, - {2136, 0, 0, 0},// <- TODO: find item for spell 59961 - {2137, 0, 0, 0},// <- TODO: find item for spell 60021 - {2138, 0, 0, 0},// <- TODO: find item for spell 59976 - {2143, 0, 0, 44178}, - {2144, 0, 0, 0},// <- TODO: find item for spell 60024 - {2145, 0, 0, 0},// <- TODO: find item for spell 60024 - {2186, 141, 141, 0}, - {2187, 142, 142, 0}, - {2188, 143, 143, 0} }; AchievementMgr::AchievementMgr(Player *player) @@ -363,8 +306,8 @@ void AchievementMgr::CheckAllAchievementCriteria() */ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1, uint32 miscvalue2, Unit *unit, uint32 time) { - sLog.outString("AchievementMgr::UpdateAchievementCriteria(%u, %u, %u, %u)", type, miscvalue1, miscvalue2, time); - AchievementCriteriaEntryList const& achievementCriteriaList = objmgr.GetAchievementCriteriaByType(type); + sLog.outDetail("AchievementMgr::UpdateAchievementCriteria(%u, %u, %u, %u)", type, miscvalue1, miscvalue2, time); + AchievementCriteriaEntryList const& achievementCriteriaList = achievementmgr.GetAchievementCriteriaByType(type); for(AchievementCriteriaEntryList::const_iterator i = achievementCriteriaList.begin(); i!=achievementCriteriaList.end(); ++i) { AchievementCriteriaEntry const *achievementCriteria = (*i); @@ -523,19 +466,9 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui { if (!miscvalue1 || miscvalue1 != achievementCriteria->cast_spell.spellID) continue; + // those requirements couldn't be found in the dbc - - const CriteriaCastSpellRequirement *requirement = NULL; - for (uint32 i=0; iID) - { - requirement = &criteriaCastSpellRequirements[i]; - break; - } - } - - if (requirement) + if (CriteriaCastSpellRequirement const* requirement = AchievementGlobalMgr::GetCriteriaCastSpellRequirement(achievementCriteria)) { if (!unit) continue; @@ -549,6 +482,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui if (requirement->playerClass && (unit->GetTypeId() != TYPEID_PLAYER || unit->getClass()!=requirement->playerClass)) continue; } + SetCriteriaProgress(achievementCriteria, 1, true); break; } @@ -614,7 +548,26 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui SetCriteriaProgress(achievementCriteria, 1); break; } + case ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT: + case ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT: + { + // miscvalue1 = itemid + // miscvalue2 = diced value + if(!miscvalue1) + continue; + if(miscvalue2 != achievementCriteria->roll_greed_on_loot.rollValue) + continue; + ItemPrototype const *pProto = objmgr.GetItemPrototype( miscvalue1 ); + uint32 requiredItemLevel = 0; + if (achievementCriteria->ID == 2412 || achievementCriteria->ID == 2358) + requiredItemLevel = 185; + + if(!pProto || pProto->ItemLevel flags & (ACHIEVEMENT_FLAG_REALM_FIRST_REACH | ACHIEVEMENT_FLAG_REALM_FIRST_KILL)) { // someone on this realm has already completed that achievement - if(objmgr.allCompletedAchievements.find(achievement->ID)!=objmgr.allCompletedAchievements.end()) + if(achievementmgr.IsRealmCompleted(achievement)) return false; } @@ -678,6 +631,8 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve return m_completedAchievements.find(achievementCriteria->complete_achievement.linkedAchievement) != m_completedAchievements.end(); case ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL: return progress->counter >= achievementCriteria->reach_skill_level.skillLevel; + case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT: + return progress->counter >= achievementCriteria->complete_quest_count.totalQuestCount; case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE: return progress->counter >= achievementCriteria->complete_quests_in_zone.questCount; case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST: @@ -710,6 +665,9 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve return progress->counter >= achievementCriteria->gain_exalted_reputation.numberOfExaltedFactions; case ACHIEVEMENT_CRITERIA_TYPE_EXPLORE_AREA: return progress->counter >= 1; + case ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT: + case ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT: + return progress->counter >= achievementCriteria->roll_greed_on_loot.count; // handle all statistic-only criteria here case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND: @@ -764,7 +722,7 @@ AchievementCompletionState AchievementMgr::GetAchievementCompletionState(Achieve void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry, uint32 newValue, bool relative) { - sLog.outString("AchievementMgr::SetCriteriaProgress(%u, %u)", entry->ID, newValue); + sLog.outDetail("AchievementMgr::SetCriteriaProgress(%u, %u)", entry->ID, newValue); CriteriaProgress *progress = NULL; CriteriaProgressMap::iterator iter = m_criteriaProgress.find(entry->ID); @@ -772,7 +730,7 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry, if(iter == m_criteriaProgress.end()) { progress = &m_criteriaProgress[entry->ID]; - progress->counter = 0; + progress->counter = newValue; progress->date = time(NULL); } else @@ -802,7 +760,7 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry, void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) { - sLog.outString("AchievementMgr::CompletedAchievement(%u)", achievement->ID); + sLog.outDetail("AchievementMgr::CompletedAchievement(%u)", achievement->ID); if(achievement->flags & ACHIEVEMENT_FLAG_COUNTER || m_completedAchievements.find(achievement->ID)!=m_completedAchievements.end()) return; @@ -814,55 +772,58 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) // don't insert for ACHIEVEMENT_FLAG_REALM_FIRST_KILL since otherwise only the first group member would reach that achievement // TODO: where do set this instead? if(!(achievement->flags & ACHIEVEMENT_FLAG_REALM_FIRST_KILL)) - objmgr.allCompletedAchievements.insert(achievement->ID); + achievementmgr.SetRealmCompleted(achievement); UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT); - // reward items and titles - AchievementReward const* reward = NULL; - for (uint32 i=0; iID) - { - reward = &achievementRewards[i]; - break; - } - } + // reward items and titles if any + AchievementReward const* reward = achievementmgr.GetAchievementReward(achievement); - if (reward) + // no rewards + if(!reward) + return; + + // titles + if(uint32 titleId = reward->titleId[GetPlayer()->GetTeam() == HORDE?0:1]) { - sLog.outString("achiev %u, title= %u, %u", reward->achievementId, reward->titleId[0], reward->titleId[1]); - uint32 titleId = reward->titleId[GetPlayer()->GetTeam() == HORDE?0:1]; if(CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(titleId)) GetPlayer()->SetTitle(titleEntry); + } - if (reward->itemId) + // mail + if(reward->sender) + { + Item* item = reward->itemId ? Item::CreateItem(reward->itemId,1,GetPlayer ()) : NULL; + + MailItemsInfo mi; + if(item) { - ItemPrototype const *pProto = objmgr.GetItemPrototype( reward->itemId ); + // save new item before send + item->SaveToDB(); // save for prevent lost at next mail load, if send fail then item will deleted - if(!pProto) + // item + mi.AddItem(item->GetGUIDLow(), item->GetEntry(), item); + } + + int loc_idx = GetPlayer()->GetSession()->GetSessionDbLocaleIndex(); + + // subject and text + std::string subject = reward->subject; + std::string text = reward->text; + if ( loc_idx >= 0 ) + { + if(AchievementRewardLocale const* loc = achievementmgr.GetAchievementRewardLocale(achievement)) { - GetPlayer()->SendEquipError( EQUIP_ERR_ITEM_NOT_FOUND, NULL, NULL ); - return; - } - - ItemPosCountVec dest; - uint32 no_space = 0; - uint8 msg = GetPlayer()->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, reward->itemId, 1, &no_space ); - - if( msg != EQUIP_ERR_OK ) - { - GetPlayer()->SendEquipError( msg, NULL, NULL ); - return; - } - Item* pItem = GetPlayer()->StoreNewItem( dest, reward->itemId, true); - - if(!pItem) - { - GetPlayer()->SendEquipError( EQUIP_ERR_ITEM_NOT_FOUND, NULL, NULL ); - return; + if (loc->subject.size() > size_t(loc_idx) && !loc->subject[loc_idx].empty()) + subject = loc->subject[loc_idx]; + if (loc->text.size() > size_t(loc_idx) && !loc->text[loc_idx].empty()) + text = loc->text[loc_idx]; } } + + uint32 itemTextId = objmgr.CreateItemText( text ); + + WorldSession::SendMailTo(GetPlayer(), MAIL_CREATURE, MAIL_STATIONERY_NORMAL, reward->sender, GetPlayer()->GetGUIDLow(), subject, itemTextId , &mi, 0, 0, MAIL_CHECK_MASK_NONE); } } @@ -908,3 +869,217 @@ void AchievementMgr::BuildAllDataPacket(WorldPacket *data) *data << int32(-1); } + +//========================================================== +AchievementCriteriaEntryList const& AchievementGlobalMgr::GetAchievementCriteriaByType(AchievementCriteriaTypes type) +{ + return m_AchievementCriteriasByType[type]; +} + +void AchievementGlobalMgr::LoadAchievementCriteriaList() +{ + for (uint32 entryId = 0; entryIdrequiredType].push_back(criteria); + } +} + + +void AchievementGlobalMgr::LoadCompletedAchievements() +{ + QueryResult *result = CharacterDatabase.Query("SELECT achievement FROM character_achievement GROUP BY achievement"); + + if(!result) + return; + + do + { + Field *fields = result->Fetch(); + m_allCompletedAchievements.insert(fields[0].GetUInt32()); + } while(result->NextRow()); + + delete result; +} + +void AchievementGlobalMgr::LoadRewards() +{ + m_achievementRewards.clear(); // need for reload case + + // 0 1 2 3 4 5 6 + QueryResult *result = WorldDatabase.Query("SELECT entry, title_A, title_H, item, sender, subject, text FROM achievement_reward"); + + if(!result) + { + barGoLink bar(1); + + bar.step(); + + sLog.outString(""); + sLog.outString(">> Loaded 0 achievement rewards. DB table `achievement_reward` is empty."); + return; + } + + barGoLink bar(result->GetRowCount()); + + do + { + Field *fields = result->Fetch(); + bar.step(); + + uint32 entry = fields[0].GetUInt32(); + if (!sAchievementStore.LookupEntry(entry)) + { + sLog.outErrorDb( "Table `achievement_reward` has wrong achievement (Entry: %u), ignore", entry); + continue; + } + + AchievementReward reward; + reward.titleId[0] = fields[1].GetUInt32(); + reward.titleId[1] = fields[2].GetUInt32(); + reward.itemId = fields[3].GetUInt32(); + reward.sender = fields[4].GetUInt32(); + reward.subject = fields[5].GetCppString(); + reward.text = fields[6].GetCppString(); + + if ((reward.titleId[0]==0)!=(reward.titleId[1]==0)) + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) has title (A: %u H: %u) only for one from teams.", entry, reward.titleId[0], reward.titleId[1]); + + // must be title or mail at least + if (!reward.titleId[0] && !reward.titleId[1] && !reward.sender) + { + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) not have title or item reward data, ignore.", entry); + continue; + } + + if (reward.titleId[0]) + { + CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(reward.titleId[0]); + if (!titleEntry) + { + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) has invalid title id (%u) in `title_A`, set to 0", entry, reward.titleId[0]); + reward.titleId[0] = 0; + } + } + + if (reward.titleId[1]) + { + CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(reward.titleId[1]); + if (!titleEntry) + { + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) has invalid title id (%u) in `title_A`, set to 0", entry, reward.titleId[1]); + reward.titleId[1] = 0; + } + } + + //check mail data before item for report including wrong item case + if (reward.sender) + { + if (!objmgr.GetCreatureTemplate(reward.sender)) + { + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) has invalid creature entry %u as sender, mail reward skipped.", entry, reward.sender); + reward.sender = 0; + } + } + else + { + if (reward.itemId) + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) not have sender data but have item reward, item will not rewarded", entry); + + if (!reward.subject.empty()) + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) not have sender data but have mail subject.", entry); + + if (!reward.text.empty()) + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) not have sender data but have mail text.", entry); + } + + if (reward.itemId) + { + if (!objmgr.GetItemPrototype(reward.itemId)) + { + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) has invalid item id %u, reward mail will be without item.", entry, reward.itemId); + reward.itemId = 0; + } + } + + m_achievementRewards[entry] = reward; + + } while (result->NextRow()); + + delete result; + + sLog.outString(); + sLog.outString( ">> Loaded %u achievement reward locale strings", m_achievementRewardLocales.size() ); +} + +void AchievementGlobalMgr::LoadRewardLocales() +{ + m_achievementRewardLocales.clear(); // need for reload case + + QueryResult *result = WorldDatabase.Query("SELECT entry,subject_loc1,text_loc1,subject_loc2,text_loc2,subject_loc3,text_loc3,subject_loc4,text_loc4,subject_loc5,text_loc5,subject_loc6,text_loc6,subject_loc7,text_loc7,subject_loc8,text_loc8 FROM locales_achievement_reward"); + + if(!result) + { + barGoLink bar(1); + + bar.step(); + + sLog.outString(""); + sLog.outString(">> Loaded 0 achievement reward locale strings. DB table `locales_achievement_reward` is empty."); + return; + } + + barGoLink bar(result->GetRowCount()); + + do + { + Field *fields = result->Fetch(); + bar.step(); + + uint32 entry = fields[0].GetUInt32(); + + if(m_achievementRewards.find(entry)==m_achievementRewards.end()) + { + sLog.outErrorDb( "Table `locales_achievement_reward` (Entry: %u) has locale strings for not existed achievement reward .", entry); + continue; + } + + AchievementRewardLocale& data = m_achievementRewardLocales[entry]; + + for(int i = 1; i < MAX_LOCALE; ++i) + { + std::string str = fields[1+2*(i-1)].GetCppString(); + if(!str.empty()) + { + int idx = objmgr.GetOrNewIndexForLocale(LocaleConstant(i)); + if(idx >= 0) + { + if(data.subject.size() <= idx) + data.subject.resize(idx+1); + + data.subject[idx] = str; + } + } + str = fields[1+2*(i-1)+1].GetCppString(); + if(!str.empty()) + { + int idx = objmgr.GetOrNewIndexForLocale(LocaleConstant(i)); + if(idx >= 0) + { + if(data.text.size() <= idx) + data.text.resize(idx+1); + + data.text[idx] = str; + } + } + } + } while (result->NextRow()); + + delete result; + + sLog.outString(); + sLog.outString( ">> Loaded %u achievement reward locale strings", m_achievementRewardLocales.size() ); +} diff --git a/src/game/AchievementMgr.h b/src/game/AchievementMgr.h index 6392a9fc6..a34729519 100644 --- a/src/game/AchievementMgr.h +++ b/src/game/AchievementMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,13 +19,19 @@ #define __MANGOS_ACHIEVEMENTMGR_H #include "Common.h" +#include "Policies/Singleton.h" #include "Database/DBCEnums.h" #include "Database/DBCStores.h" #include "Database/DatabaseEnv.h" +#include +#include + #define CRITERIA_CAST_SPELL_REQ_COUNT 46 #define ACHIEVEMENT_REWARD_COUNT 57 +typedef std::list AchievementCriteriaEntryList; + struct CriteriaProgress { uint32 counter; @@ -43,11 +49,24 @@ struct CriteriaCastSpellRequirement struct AchievementReward { - uint32 achievementId; uint32 titleId[2]; uint32 itemId; + uint32 sender; + std::string subject; + std::string text; }; +typedef std::map AchievementRewards; + +struct AchievementRewardLocale +{ + std::vector subject; + std::vector text; +}; + +typedef std::map AchievementRewardLocales; + + struct CompletedAchievementData { time_t date; @@ -95,7 +114,61 @@ class AchievementMgr Player* m_player; CriteriaProgressMap m_criteriaProgress; CompletedAchievementMap m_completedAchievements; - static const CriteriaCastSpellRequirement criteriaCastSpellRequirements[]; - static const AchievementReward achievementRewards[]; }; + +class AchievementGlobalMgr +{ + public: + AchievementCriteriaEntryList const& GetAchievementCriteriaByType(AchievementCriteriaTypes type); + + AchievementReward const* GetAchievementReward(AchievementEntry const* achievement) const + { + AchievementRewards::const_iterator iter = m_achievementRewards.find(achievement->ID); + return iter!=m_achievementRewards.end() ? &iter->second : NULL; + } + + AchievementRewardLocale const* GetAchievementRewardLocale(AchievementEntry const* achievement) const + { + AchievementRewardLocales::const_iterator iter = m_achievementRewardLocales.find(achievement->ID); + return iter!=m_achievementRewardLocales.end() ? &iter->second : NULL; + } + + static CriteriaCastSpellRequirement const * GetCriteriaCastSpellRequirement(AchievementCriteriaEntry const *achievementCriteria) + { + for (uint32 i=0; i < CRITERIA_CAST_SPELL_REQ_COUNT; ++i) + if (m_criteriaCastSpellRequirements[i].achievementCriteriaId == achievementCriteria->ID) + return &m_criteriaCastSpellRequirements[i]; + + return NULL; + } + + bool IsRealmCompleted(AchievementEntry const* achievement) const + { + return m_allCompletedAchievements.find(achievement->ID) != m_allCompletedAchievements.end(); + } + + void SetRealmCompleted(AchievementEntry const* achievement) + { + m_allCompletedAchievements.insert(achievement->ID); + } + + void LoadAchievementCriteriaList(); + void LoadCompletedAchievements(); + void LoadRewards(); + void LoadRewardLocales(); + private: + static const CriteriaCastSpellRequirement m_criteriaCastSpellRequirements[]; + + // store achievement criterias by type to speed up lookup + AchievementCriteriaEntryList m_AchievementCriteriasByType[ACHIEVEMENT_CRITERIA_TYPE_TOTAL]; + + typedef std::set AllCompletedAchievements; + AllCompletedAchievements m_allCompletedAchievements; + + AchievementRewards m_achievementRewards; + AchievementRewardLocales m_achievementRewardLocales; +}; + +#define achievementmgr MaNGOS::Singleton::Instance() + #endif diff --git a/src/game/AddonHandler.cpp b/src/game/AddonHandler.cpp index df2ed01a0..b5322542a 100644 --- a/src/game/AddonHandler.cpp +++ b/src/game/AddonHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AddonHandler.h b/src/game/AddonHandler.h index 95c89b662..7d083b159 100644 --- a/src/game/AddonHandler.h +++ b/src/game/AddonHandler.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AggressorAI.cpp b/src/game/AggressorAI.cpp index 25244e7a2..52f7dbf49 100644 --- a/src/game/AggressorAI.cpp +++ b/src/game/AggressorAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AggressorAI.h b/src/game/AggressorAI.h index e51a4e61e..c67bed34d 100644 --- a/src/game/AggressorAI.h +++ b/src/game/AggressorAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AnimalRandomMovementGenerator.h b/src/game/AnimalRandomMovementGenerator.h index dc42c6e0c..6619cf87e 100644 --- a/src/game/AnimalRandomMovementGenerator.h +++ b/src/game/AnimalRandomMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ArenaTeam.cpp b/src/game/ArenaTeam.cpp index 5f1dfdb93..8fa06e38b 100644 --- a/src/game/ArenaTeam.cpp +++ b/src/game/ArenaTeam.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ArenaTeam.h b/src/game/ArenaTeam.h index ba19c53f9..1a4170687 100644 --- a/src/game/ArenaTeam.h +++ b/src/game/ArenaTeam.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ArenaTeamHandler.cpp b/src/game/ArenaTeamHandler.cpp index ea0567ed5..f2a71f8c1 100644 --- a/src/game/ArenaTeamHandler.cpp +++ b/src/game/ArenaTeamHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -171,7 +171,7 @@ void WorldSession::HandleArenaTeamInviteAcceptOpcode(WorldPacket & /*recv_data*/ if(!at) return; - if(_player->GetArenaTeamId(at->GetType())) + if(_player->GetArenaTeamId(at->GetSlot())) { SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S,"","",ERR_ALREADY_IN_ARENA_TEAM); // already in arena team that size return; diff --git a/src/game/AuctionHouse.cpp b/src/game/AuctionHouse.cpp index 8ec7d402d..11ab1adf9 100644 --- a/src/game/AuctionHouse.cpp +++ b/src/game/AuctionHouse.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AuctionHouseObject.h b/src/game/AuctionHouseObject.h index 5cc51692c..077991e8c 100644 --- a/src/game/AuctionHouseObject.h +++ b/src/game/AuctionHouseObject.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Bag.cpp b/src/game/Bag.cpp index e0919ce36..2f967752e 100644 --- a/src/game/Bag.cpp +++ b/src/game/Bag.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Bag.h b/src/game/Bag.h index 21458546e..ad36b6aa0 100644 --- a/src/game/Bag.h +++ b/src/game/Bag.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGround.cpp b/src/game/BattleGround.cpp index ebb95536e..24b64ad22 100644 --- a/src/game/BattleGround.cpp +++ b/src/game/BattleGround.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGround.h b/src/game/BattleGround.h index 1e92dfaea..6727c1a97 100644 --- a/src/game/BattleGround.h +++ b/src/game/BattleGround.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -151,9 +151,10 @@ enum BattleGroundQueueTypeId BATTLEGROUND_QUEUE_WS = 2, BATTLEGROUND_QUEUE_AB = 3, BATTLEGROUND_QUEUE_EY = 4, - BATTLEGROUND_QUEUE_2v2 = 5, - BATTLEGROUND_QUEUE_3v3 = 6, - BATTLEGROUND_QUEUE_5v5 = 7, + BATTLEGROUND_QUEUE_SA = 5, + BATTLEGROUND_QUEUE_2v2 = 6, + BATTLEGROUND_QUEUE_3v3 = 7, + BATTLEGROUND_QUEUE_5v5 = 8, }; enum ScoreType diff --git a/src/game/BattleGroundAA.cpp b/src/game/BattleGroundAA.cpp index 585e1caa5..cc2404614 100644 --- a/src/game/BattleGroundAA.cpp +++ b/src/game/BattleGroundAA.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundAA.h b/src/game/BattleGroundAA.h index 8a81c8c0c..767e4eb55 100644 --- a/src/game/BattleGroundAA.h +++ b/src/game/BattleGroundAA.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundAB.cpp b/src/game/BattleGroundAB.cpp index 5200a3f5f..0a5186937 100644 --- a/src/game/BattleGroundAB.cpp +++ b/src/game/BattleGroundAB.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundAB.h b/src/game/BattleGroundAB.h index dc3b8c2f8..97615dc1c 100644 --- a/src/game/BattleGroundAB.h +++ b/src/game/BattleGroundAB.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundAV.cpp b/src/game/BattleGroundAV.cpp index 9421e97b5..99866f3f8 100644 --- a/src/game/BattleGroundAV.cpp +++ b/src/game/BattleGroundAV.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundAV.h b/src/game/BattleGroundAV.h index 11bd08b9e..c77a6af88 100644 --- a/src/game/BattleGroundAV.h +++ b/src/game/BattleGroundAV.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundBE.cpp b/src/game/BattleGroundBE.cpp index 81e47c721..cb38b0b80 100644 --- a/src/game/BattleGroundBE.cpp +++ b/src/game/BattleGroundBE.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundBE.h b/src/game/BattleGroundBE.h index df46efbfd..c66d1b1b9 100644 --- a/src/game/BattleGroundBE.h +++ b/src/game/BattleGroundBE.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundDS.cpp b/src/game/BattleGroundDS.cpp new file mode 100644 index 000000000..276c0c84c --- /dev/null +++ b/src/game/BattleGroundDS.cpp @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2005-2009 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "Player.h" +#include "BattleGround.h" +#include "BattleGroundDS.h" + +BattleGroundDS::BattleGroundDS() +{ + +} + +BattleGroundDS::~BattleGroundDS() +{ + +} + +void BattleGroundDS::Update(time_t diff) +{ + BattleGround::Update(diff); +} + +void BattleGroundDS::AddPlayer(Player *plr) +{ + BattleGround::AddPlayer(plr); + //create score and add it to map, default values are set in constructor + BattleGroundDSScore* sc = new BattleGroundDSScore; + + m_PlayerScores[plr->GetGUID()] = sc; +} + +void BattleGroundDS::RemovePlayer(Player * /*plr*/, uint64 /*guid*/) +{ +} + +void BattleGroundDS::HandleKillPlayer(Player* player, Player* killer) +{ + BattleGround::HandleKillPlayer(player, killer); +} + +void BattleGroundDS::HandleAreaTrigger(Player * /*Source*/, uint32 /*Trigger*/) +{ +} + +bool BattleGroundDS::SetupBattleGround() +{ + return true; +} diff --git a/src/game/BattleGroundDS.h b/src/game/BattleGroundDS.h new file mode 100644 index 000000000..afcb8f092 --- /dev/null +++ b/src/game/BattleGroundDS.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2005-2009 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef __BATTLEGROUNDDS_H +#define __BATTLEGROUNDDS_H + +class BattleGround; + +class BattleGroundDSScore : public BattleGroundScore +{ + public: + BattleGroundDSScore() {}; + virtual ~BattleGroundDSScore() {}; + //TODO fix me +}; + +class BattleGroundDS : public BattleGround +{ + friend class BattleGroundMgr; + + public: + BattleGroundDS(); + ~BattleGroundDS(); + void Update(time_t diff); + + /* inherited from BattlegroundClass */ + virtual void AddPlayer(Player *plr); + void RemovePlayer(Player *plr, uint64 guid); + void HandleAreaTrigger(Player *Source, uint32 Trigger); + bool SetupBattleGround(); + void HandleKillPlayer(Player* player, Player *killer); +}; +#endif diff --git a/src/game/BattleGroundEY.cpp b/src/game/BattleGroundEY.cpp index 279816b34..7adca00f4 100644 --- a/src/game/BattleGroundEY.cpp +++ b/src/game/BattleGroundEY.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundEY.h b/src/game/BattleGroundEY.h index 0e57eaa61..8e19472b2 100644 --- a/src/game/BattleGroundEY.h +++ b/src/game/BattleGroundEY.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundHandler.cpp b/src/game/BattleGroundHandler.cpp index 7375cc3e7..323ec1a73 100644 --- a/src/game/BattleGroundHandler.cpp +++ b/src/game/BattleGroundHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundMgr.cpp b/src/game/BattleGroundMgr.cpp index 58da27968..fe97ecca3 100644 --- a/src/game/BattleGroundMgr.cpp +++ b/src/game/BattleGroundMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,6 +27,9 @@ #include "BattleGroundBE.h" #include "BattleGroundAA.h" #include "BattleGroundRL.h" +#include "BattleGroundSA.h" +#include "BattleGroundDS.h" +#include "BattleGroundRV.h" #include "SharedDefines.h" #include "Policies/SingletonImp.h" #include "MapManager.h" @@ -1193,6 +1196,15 @@ void BattleGroundMgr::BuildBattleGroundStatusPacket(WorldPacket *data, BattleGro case BATTLEGROUND_RL: *data << uint8(8); break; + case BATTLEGROUND_SA: + *data << uint8(9); + break; + case BATTLEGROUND_DS: + *data << uint8(10); + break; + case BATTLEGROUND_RV: + *data << uint8(11); + break; default: // unknown *data << uint8(0); break; @@ -1469,6 +1481,15 @@ BattleGround * BattleGroundMgr::CreateNewBattleGround(uint32 bgTypeId) case BATTLEGROUND_RL: bg = new BattleGroundRL(*(BattleGroundRL*)bg_template); break; + case BATTLEGROUND_SA: + bg = new BattleGroundSA(*(BattleGroundSA*)bg_template); + break; + case BATTLEGROUND_DS: + bg = new BattleGroundDS(*(BattleGroundDS*)bg_template); + break; + case BATTLEGROUND_RV: + bg = new BattleGroundRV(*(BattleGroundRV*)bg_template); + break; default: //bg = new BattleGround; return 0; @@ -1515,6 +1536,9 @@ uint32 BattleGroundMgr::CreateBattleGround(uint32 bgTypeId, uint32 MinPlayersPer case BATTLEGROUND_AA: bg = new BattleGroundAA; break; case BATTLEGROUND_EY: bg = new BattleGroundEY; break; case BATTLEGROUND_RL: bg = new BattleGroundRL; break; + case BATTLEGROUND_SA: bg = new BattleGroundSA; break; + case BATTLEGROUND_DS: bg = new BattleGroundDS; break; + case BATTLEGROUND_RV: bg = new BattleGroundRV; break; default:bg = new BattleGround; break; // placeholder for non implemented BG } @@ -1835,10 +1859,14 @@ uint32 BattleGroundMgr::BGQueueTypeId(uint32 bgTypeId, uint8 arenaType) const return BATTLEGROUND_QUEUE_AV; case BATTLEGROUND_EY: return BATTLEGROUND_QUEUE_EY; + case BATTLEGROUND_SA: + return BATTLEGROUND_QUEUE_SA; case BATTLEGROUND_AA: case BATTLEGROUND_NA: case BATTLEGROUND_RL: case BATTLEGROUND_BE: + case BATTLEGROUND_DS: + case BATTLEGROUND_RV: switch(arenaType) { case ARENA_TYPE_2v2: @@ -1867,6 +1895,8 @@ uint32 BattleGroundMgr::BGTemplateId(uint32 bgQueueTypeId) const return BATTLEGROUND_AV; case BATTLEGROUND_QUEUE_EY: return BATTLEGROUND_EY; + case BATTLEGROUND_QUEUE_SA: + return BATTLEGROUND_SA; case BATTLEGROUND_QUEUE_2v2: case BATTLEGROUND_QUEUE_3v3: case BATTLEGROUND_QUEUE_5v5: diff --git a/src/game/BattleGroundMgr.h b/src/game/BattleGroundMgr.h index d8db225ed..ad11436fc 100644 --- a/src/game/BattleGroundMgr.h +++ b/src/game/BattleGroundMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,7 +34,7 @@ typedef std::deque BGFreeSlotQueueType; #define MAX_BATTLEGROUND_TYPES 12 // each BG type will be in array -#define MAX_BATTLEGROUND_QUEUE_TYPES 8 +#define MAX_BATTLEGROUND_QUEUE_TYPES 9 #define BATTLEGROUND_ARENA_POINT_DISTRIBUTION_DAY 86400 // seconds in a day diff --git a/src/game/BattleGroundNA.cpp b/src/game/BattleGroundNA.cpp index 385de1211..63bfed9e8 100644 --- a/src/game/BattleGroundNA.cpp +++ b/src/game/BattleGroundNA.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundNA.h b/src/game/BattleGroundNA.h index a44460919..64ccf0a5a 100644 --- a/src/game/BattleGroundNA.h +++ b/src/game/BattleGroundNA.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundRL.cpp b/src/game/BattleGroundRL.cpp index bf3b5b029..ee9beb181 100644 --- a/src/game/BattleGroundRL.cpp +++ b/src/game/BattleGroundRL.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundRL.h b/src/game/BattleGroundRL.h index dd000ce13..2c0a67778 100644 --- a/src/game/BattleGroundRL.h +++ b/src/game/BattleGroundRL.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundRV.cpp b/src/game/BattleGroundRV.cpp new file mode 100644 index 000000000..20c7d11f8 --- /dev/null +++ b/src/game/BattleGroundRV.cpp @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2005-2009 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "Player.h" +#include "BattleGround.h" +#include "BattleGroundRV.h" + +BattleGroundRV::BattleGroundRV() +{ + +} + +BattleGroundRV::~BattleGroundRV() +{ + +} + +void BattleGroundRV::Update(time_t diff) +{ + BattleGround::Update(diff); +} + +void BattleGroundRV::AddPlayer(Player *plr) +{ + BattleGround::AddPlayer(plr); + //create score and add it to map, default values are set in constructor + BattleGroundRVScore* sc = new BattleGroundRVScore; + + m_PlayerScores[plr->GetGUID()] = sc; +} + +void BattleGroundRV::RemovePlayer(Player * /*plr*/, uint64 /*guid*/) +{ +} + +void BattleGroundRV::HandleKillPlayer(Player* player, Player* killer) +{ + BattleGround::HandleKillPlayer(player, killer); +} + +void BattleGroundRV::HandleAreaTrigger(Player * /*Source*/, uint32 /*Trigger*/) +{ +} + +bool BattleGroundRV::SetupBattleGround() +{ + return true; +} diff --git a/src/game/BattleGroundRV.h b/src/game/BattleGroundRV.h new file mode 100644 index 000000000..9f515e35b --- /dev/null +++ b/src/game/BattleGroundRV.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2005-2009 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef __BATTLEGROUNDRV_H +#define __BATTLEGROUNDRV_H + +class BattleGround; + +class BattleGroundRVScore : public BattleGroundScore +{ + public: + BattleGroundRVScore() {}; + virtual ~BattleGroundRVScore() {}; + //TODO fix me +}; + +class BattleGroundRV : public BattleGround +{ + friend class BattleGroundMgr; + + public: + BattleGroundRV(); + ~BattleGroundRV(); + void Update(time_t diff); + + /* inherited from BattlegroundClass */ + virtual void AddPlayer(Player *plr); + void RemovePlayer(Player *plr, uint64 guid); + void HandleAreaTrigger(Player *Source, uint32 Trigger); + bool SetupBattleGround(); + void HandleKillPlayer(Player* player, Player *killer); +}; +#endif diff --git a/src/game/BattleGroundSA.cpp b/src/game/BattleGroundSA.cpp new file mode 100644 index 000000000..d7bc422ca --- /dev/null +++ b/src/game/BattleGroundSA.cpp @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2005-2009 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "BattleGround.h" +#include "BattleGroundSA.h" + +BattleGroundSA::BattleGroundSA() +{ + +} + +BattleGroundSA::~BattleGroundSA() +{ + +} + +void BattleGroundSA::Update(time_t diff) +{ + BattleGround::Update(diff); +} + +void BattleGroundSA::AddPlayer(Player *plr) +{ + BattleGround::AddPlayer(plr); + //create score and add it to map, default values are set in constructor + BattleGroundSAScore* sc = new BattleGroundSAScore; + + m_PlayerScores[plr->GetGUID()] = sc; +} + +void BattleGroundSA::RemovePlayer(Player* /*plr*/,uint64 /*guid*/) +{ + +} + +void BattleGroundSA::HandleAreaTrigger(Player *Source, uint32 Trigger) +{ + // this is wrong way to implement these things. On official it done by gameobject spell cast. + if(GetStatus() != STATUS_IN_PROGRESS) + return; +} + +void BattleGroundSA::UpdatePlayerScore(Player* Source, uint32 type, uint32 value) +{ + + std::map::iterator itr = m_PlayerScores.find(Source->GetGUID()); + + if(itr == m_PlayerScores.end()) // player not found... + return; + + BattleGround::UpdatePlayerScore(Source,type,value); +} diff --git a/src/game/BattleGroundSA.h b/src/game/BattleGroundSA.h new file mode 100644 index 000000000..6727c7a1f --- /dev/null +++ b/src/game/BattleGroundSA.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2009 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __BATTLEGROUNDSA_H +#define __BATTLEGROUNDSA_H + +class BattleGround; + +class BattleGroundSAScore : public BattleGroundScore +{ + public: + BattleGroundSAScore() {}; + virtual ~BattleGroundSAScore() {}; +}; + +class BattleGroundSA : public BattleGround +{ + friend class BattleGroundMgr; + + public: + BattleGroundSA(); + ~BattleGroundSA(); + void Update(time_t diff); + + /* inherited from BattlegroundClass */ + virtual void AddPlayer(Player *plr); + + void RemovePlayer(Player *plr,uint64 guid); + void HandleAreaTrigger(Player *Source, uint32 Trigger); + //bool SetupBattleGround(); + + /* Scorekeeping */ + void UpdatePlayerScore(Player *Source, uint32 type, uint32 value); + + private: +}; +#endif diff --git a/src/game/BattleGroundWS.cpp b/src/game/BattleGroundWS.cpp index 53c67c16f..6e70739fa 100644 --- a/src/game/BattleGroundWS.cpp +++ b/src/game/BattleGroundWS.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundWS.h b/src/game/BattleGroundWS.h index cf6857085..56a7b3061 100644 --- a/src/game/BattleGroundWS.h +++ b/src/game/BattleGroundWS.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Calendar.cpp b/src/game/Calendar.cpp index cebf7252e..0c1efb20f 100644 --- a/src/game/Calendar.cpp +++ b/src/game/Calendar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Calendar.h b/src/game/Calendar.h index 94e4ff103..7a86afa7d 100644 --- a/src/game/Calendar.h +++ b/src/game/Calendar.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CalendarHandler.cpp b/src/game/CalendarHandler.cpp index 9c69e3a91..103da3eb9 100644 --- a/src/game/CalendarHandler.cpp +++ b/src/game/CalendarHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Cell.h b/src/game/Cell.h index b0ff85d89..f826b9e06 100644 --- a/src/game/Cell.h +++ b/src/game/Cell.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CellImpl.h b/src/game/CellImpl.h index b673bad76..7302820bb 100644 --- a/src/game/CellImpl.h +++ b/src/game/CellImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Channel.cpp b/src/game/Channel.cpp index d1dee730c..5f43cfb11 100644 --- a/src/game/Channel.cpp +++ b/src/game/Channel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Channel.h b/src/game/Channel.h index 55ebf57ea..8a0c94492 100644 --- a/src/game/Channel.h +++ b/src/game/Channel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ChannelHandler.cpp b/src/game/ChannelHandler.cpp index 3a3a73e97..b14b644b9 100644 --- a/src/game/ChannelHandler.cpp +++ b/src/game/ChannelHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ChannelMgr.h b/src/game/ChannelMgr.h index 124afec5c..fac5626ef 100644 --- a/src/game/ChannelMgr.h +++ b/src/game/ChannelMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cpp index 4589dc60e..42132fea2 100644 --- a/src/game/CharacterHandler.cpp +++ b/src/game/CharacterHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -64,7 +64,7 @@ bool LoginQueryHolder::Initialize() res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADGROUP, "SELECT leaderGuid FROM group_member WHERE memberGuid ='%u'", GUID_LOPART(m_guid)); res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADBOUNDINSTANCES, "SELECT id, permanent, map, difficulty, resettime FROM character_instance LEFT JOIN instance ON instance = id WHERE guid = '%u'", GUID_LOPART(m_guid)); res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADAURAS, "SELECT caster_guid,spell,effect_index,stackcount,amount,maxduration,remaintime,remaincharges FROM character_aura WHERE guid = '%u'", GUID_LOPART(m_guid)); - res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADSPELLS, "SELECT spell,slot,active,disabled FROM character_spell WHERE guid = '%u'", GUID_LOPART(m_guid)); + res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADSPELLS, "SELECT spell,active,disabled FROM character_spell WHERE guid = '%u'", GUID_LOPART(m_guid)); res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADQUESTSTATUS, "SELECT quest,status,rewarded,explored,timer,mobcount1,mobcount2,mobcount3,mobcount4,itemcount1,itemcount2,itemcount3,itemcount4 FROM character_queststatus WHERE guid = '%u'", GUID_LOPART(m_guid)); res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADDAILYQUESTSTATUS,"SELECT quest,time FROM character_queststatus_daily WHERE guid = '%u'", GUID_LOPART(m_guid)); res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADTUTORIALS, "SELECT tut0,tut1,tut2,tut3,tut4,tut5,tut6,tut7 FROM character_tutorial WHERE account = '%u' AND realmid = '%u'", GetAccountId(), realmID); @@ -809,7 +809,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder * holder) // Set FFA PvP for non GM in non-rest mode if(sWorld.IsFFAPvPRealm() && !pCurrChar->isGameMaster() && !pCurrChar->HasFlag(PLAYER_FLAGS,PLAYER_FLAGS_RESTING) ) - pCurrChar->SetFlag(PLAYER_FLAGS,PLAYER_FLAGS_FFA_PVP); + pCurrChar->SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); if(pCurrChar->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_CONTESTED_PVP)) pCurrChar->SetContestedPvP(); diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index 2e0165ad6..449267f87 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,6 +31,7 @@ #include "MapManager.h" #include "GridNotifiersImpl.h" #include "CellImpl.h" +#include "AccountMgr.h" bool ChatHandler::load_command_table = true; @@ -200,6 +201,7 @@ ChatCommand * ChatHandler::getCommandTable() { "anim", SEC_GAMEMASTER, false, &ChatHandler::HandleAnimCommand, "", NULL }, { "lootrecipient", SEC_GAMEMASTER, false, &ChatHandler::HandleGetLootRecipient, "", NULL }, { "arena", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugArenaCommand, "", NULL }, + { "sendlargepacket",SEC_ADMINISTRATOR, false, &ChatHandler::HandleSendLargePacketCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; @@ -625,6 +627,55 @@ bool ChatHandler::isAvailable(ChatCommand const& cmd) const return m_session->GetSecurity() >= cmd.SecurityLevel; } +bool ChatHandler::HasLowerSecurity(Player* target, uint64 guid, bool strong) +{ + WorldSession* target_session = NULL; + uint32 target_account = 0; + + if (target) + target_session = target->GetSession(); + else if (guid) + target_account = objmgr.GetPlayerAccountIdByGUID(guid); + + if(!target_session && !target_account) + { + SendSysMessage(LANG_PLAYER_NOT_FOUND); + SetSentErrorMessage(true); + return true; + } + + return HasLowerSecurityAccount(target_session,target_account,strong); +} + +bool ChatHandler::HasLowerSecurityAccount(WorldSession* target, uint32 target_account, bool strong) +{ + uint32 target_sec; + + // allow everything from console and RA console + if (!m_session) + return false; + + // ignore only for non-players for non strong checks (when allow apply command at least to same sec level) + if (m_session->GetSecurity() > SEC_PLAYER && !strong && !sWorld.getConfig(CONFIG_GM_LOWER_SECURITY)) + return false; + + if (target) + target_sec = target->GetSecurity(); + else if (target_account) + target_sec = accmgr.GetSecurity(target_account); + else + return true; // caller must report error for (target==NULL && target_account==0) + + if (m_session->GetSecurity() < target_sec || strong && m_session->GetSecurity() <= target_sec) + { + SendSysMessage(LANG_YOURS_SECURITY_IS_LOW); + SetSentErrorMessage(true); + return true; + } + + return false; +} + bool ChatHandler::hasStringAbbr(const char* name, const char* part) { // non "" command diff --git a/src/game/Chat.h b/src/game/Chat.h index d8e93b2c1..12352f88a 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -77,6 +77,8 @@ class ChatHandler virtual bool isAvailable(ChatCommand const& cmd) const; virtual bool needReportToTarget(Player* chr) const; + bool HasLowerSecurity(Player* target, uint64 guid, bool strong = false); + bool HasLowerSecurityAccount(WorldSession* target, uint32 account, bool strong = false); void SendGlobalSysMessage(const char *str); @@ -434,6 +436,7 @@ class ChatHandler bool HandleGetLootRecipient(const char * args); bool HandleDebugArenaCommand(const char * args); bool HandleSpawnVehicle(const char * args); + bool HandleSendLargePacketCommand(const char * args); Player* getSelectedPlayer(); Creature* getSelectedCreature(); diff --git a/src/game/ChatHandler.cpp b/src/game/ChatHandler.cpp index a6e05aa64..ea5061001 100644 --- a/src/game/ChatHandler.cpp +++ b/src/game/ChatHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -190,7 +190,7 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) Player *player = objmgr.GetPlayer(to.c_str()); uint32 tSecurity = GetSecurity(); - uint32 pSecurity = player ? player->GetSession()->GetSecurity() : 0; + uint32 pSecurity = player ? player->GetSession()->GetSecurity() : SEC_PLAYER; if(!player || tSecurity == SEC_PLAYER && pSecurity > SEC_PLAYER && !player->isAcceptWhispers()) { WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1)); diff --git a/src/game/CombatHandler.cpp b/src/game/CombatHandler.cpp index db164ef6b..86605c397 100644 --- a/src/game/CombatHandler.cpp +++ b/src/game/CombatHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ConfusedMovementGenerator.cpp b/src/game/ConfusedMovementGenerator.cpp index c4152a237..79040760f 100644 --- a/src/game/ConfusedMovementGenerator.cpp +++ b/src/game/ConfusedMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ConfusedMovementGenerator.h b/src/game/ConfusedMovementGenerator.h index f023901ce..95fe1b703 100644 --- a/src/game/ConfusedMovementGenerator.h +++ b/src/game/ConfusedMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Corpse.cpp b/src/game/Corpse.cpp index 83358c3b3..7071fed80 100644 --- a/src/game/Corpse.cpp +++ b/src/game/Corpse.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Corpse.h b/src/game/Corpse.h index 08c772c75..9c219066f 100644 --- a/src/game/Corpse.h +++ b/src/game/Corpse.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp index 5c41bd477..30195fa52 100644 --- a/src/game/Creature.cpp +++ b/src/game/Creature.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -1536,7 +1536,7 @@ void Creature::Respawn() } } -bool Creature::IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges) +bool Creature::IsImmunedToSpell(SpellEntry const* spellInfo) { if (!spellInfo) return false; @@ -1544,7 +1544,7 @@ bool Creature::IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges) if (GetCreatureInfo()->MechanicImmuneMask & (1 << (spellInfo->Mechanic - 1))) return true; - return Unit::IsImmunedToSpell(spellInfo, useCharges); + return Unit::IsImmunedToSpell(spellInfo); } bool Creature::IsImmunedToSpellEffect(uint32 effect, uint32 mechanic) const @@ -1596,7 +1596,9 @@ SpellEntry const *Creature::reachWithSpellAttack(Unit *pVictim) // continue; if( dist > range || dist < minrange ) continue; - if(HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED)) + if(spellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED)) + continue; + if(spellInfo->PreventionType == SPELL_PREVENTION_TYPE_PACIFY && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED)) continue; return spellInfo; } @@ -1640,7 +1642,9 @@ SpellEntry const *Creature::reachWithSpellCure(Unit *pVictim) // continue; if( dist > range || dist < minrange ) continue; - if(HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED)) + if(spellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED)) + continue; + if(spellInfo->PreventionType == SPELL_PREVENTION_TYPE_PACIFY && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED)) continue; return spellInfo; } diff --git a/src/game/Creature.h b/src/game/Creature.h index 86daa0500..8bb1f868d 100644 --- a/src/game/Creature.h +++ b/src/game/Creature.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -212,6 +212,8 @@ struct CreatureInfo return SKILL_HERBALISM; else if(type_flags & CREATURE_TYPEFLAGS_MININGLOOT) return SKILL_MINING; + else if(type_flags & CREATURE_TYPEFLAGS_ENGINEERLOOT) + return SKILL_ENGINERING; else return SKILL_SKINNING; // normal case } @@ -425,7 +427,7 @@ class MANGOS_DLL_SPEC Creature : public Unit bool isCanIneractWithBattleMaster(Player* player, bool msg) const; bool isCanTrainingAndResetTalentsOf(Player* pPlayer) const; bool IsOutOfThreatArea(Unit* pVictim) const; - bool IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges = false); + bool IsImmunedToSpell(SpellEntry const* spellInfo); // redefine Unit::IsImmunedToSpell bool IsImmunedToSpellEffect(uint32 effect, uint32 mechanic) const; // redefine Unit::IsImmunedToSpellEffect diff --git a/src/game/CreatureAI.cpp b/src/game/CreatureAI.cpp index e551dd004..b4f916f34 100644 --- a/src/game/CreatureAI.cpp +++ b/src/game/CreatureAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CreatureAI.h b/src/game/CreatureAI.h index 5b4ed0545..4a8fb267e 100644 --- a/src/game/CreatureAI.h +++ b/src/game/CreatureAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CreatureAIImpl.h b/src/game/CreatureAIImpl.h index c9f22a730..70dd02167 100644 --- a/src/game/CreatureAIImpl.h +++ b/src/game/CreatureAIImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CreatureAIRegistry.cpp b/src/game/CreatureAIRegistry.cpp index b76a7211a..7790ff992 100644 --- a/src/game/CreatureAIRegistry.cpp +++ b/src/game/CreatureAIRegistry.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CreatureAIRegistry.h b/src/game/CreatureAIRegistry.h index adf6d73ab..bdc6c5ae0 100644 --- a/src/game/CreatureAIRegistry.h +++ b/src/game/CreatureAIRegistry.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CreatureAISelector.cpp b/src/game/CreatureAISelector.cpp index 25a2cd184..f9a76095f 100644 --- a/src/game/CreatureAISelector.cpp +++ b/src/game/CreatureAISelector.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CreatureAISelector.h b/src/game/CreatureAISelector.h index ed53a135c..d568a40e2 100644 --- a/src/game/CreatureAISelector.h +++ b/src/game/CreatureAISelector.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/DestinationHolder.cpp b/src/game/DestinationHolder.cpp index 4c22ff824..2a2321128 100644 --- a/src/game/DestinationHolder.cpp +++ b/src/game/DestinationHolder.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/DestinationHolder.h b/src/game/DestinationHolder.h index bc6f4ac47..72ee77762 100644 --- a/src/game/DestinationHolder.h +++ b/src/game/DestinationHolder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/DestinationHolderImp.h b/src/game/DestinationHolderImp.h index 3043c44e2..911f9d2be 100644 --- a/src/game/DestinationHolderImp.h +++ b/src/game/DestinationHolderImp.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/DuelHandler.cpp b/src/game/DuelHandler.cpp index 65d50ee87..a355931e5 100644 --- a/src/game/DuelHandler.cpp +++ b/src/game/DuelHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/DynamicObject.cpp b/src/game/DynamicObject.cpp index b288dcb85..a8a124c1f 100644 --- a/src/game/DynamicObject.cpp +++ b/src/game/DynamicObject.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/DynamicObject.h b/src/game/DynamicObject.h index 9662397d2..6299fa782 100644 --- a/src/game/DynamicObject.h +++ b/src/game/DynamicObject.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/FleeingMovementGenerator.cpp b/src/game/FleeingMovementGenerator.cpp index d5c21f186..655e9da36 100644 --- a/src/game/FleeingMovementGenerator.cpp +++ b/src/game/FleeingMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/FleeingMovementGenerator.h b/src/game/FleeingMovementGenerator.h index 7f4028fc8..ec3d3f91a 100644 --- a/src/game/FleeingMovementGenerator.h +++ b/src/game/FleeingMovementGenerator.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2005-2008 MaNGOS +* Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/FollowerRefManager.h b/src/game/FollowerRefManager.h index 3dfbd647e..e2e9f48a7 100644 --- a/src/game/FollowerRefManager.h +++ b/src/game/FollowerRefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/FollowerReference.cpp b/src/game/FollowerReference.cpp index 31b925b11..25df0c065 100644 --- a/src/game/FollowerReference.cpp +++ b/src/game/FollowerReference.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/FollowerReference.h b/src/game/FollowerReference.h index 1d2996aba..8286c47e1 100644 --- a/src/game/FollowerReference.h +++ b/src/game/FollowerReference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Formulas.h b/src/game/Formulas.h index 43e77d333..a00e523d1 100644 --- a/src/game/Formulas.h +++ b/src/game/Formulas.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GMTicketHandler.cpp b/src/game/GMTicketHandler.cpp index ace7d97ec..c33968221 100644 --- a/src/game/GMTicketHandler.cpp +++ b/src/game/GMTicketHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GMTicketMgr.cpp b/src/game/GMTicketMgr.cpp index e843e48c8..e122daac8 100644 --- a/src/game/GMTicketMgr.cpp +++ b/src/game/GMTicketMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GMTicketMgr.h b/src/game/GMTicketMgr.h index 5f7bf69ea..65487da0a 100644 --- a/src/game/GMTicketMgr.h +++ b/src/game/GMTicketMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GameEvent.cpp b/src/game/GameEvent.cpp index e94d7c1d7..3ec42bb65 100644 --- a/src/game/GameEvent.cpp +++ b/src/game/GameEvent.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GameEvent.h b/src/game/GameEvent.h index 7cfb0f1c4..a60fb59c5 100644 --- a/src/game/GameEvent.h +++ b/src/game/GameEvent.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp index 433493492..aefe57b09 100644 --- a/src/game/GameObject.cpp +++ b/src/game/GameObject.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GameObject.h b/src/game/GameObject.h index 3865a23c8..fdae7a18f 100644 --- a/src/game/GameObject.h +++ b/src/game/GameObject.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GlobalEvents.cpp b/src/game/GlobalEvents.cpp index 219086c61..2a03c05f8 100644 --- a/src/game/GlobalEvents.cpp +++ b/src/game/GlobalEvents.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -53,7 +53,7 @@ static void CorpsesEraseCallBack(QueryResult *result, bool bones) { if(!ObjectAccessor::Instance().ConvertCorpseForPlayer(player_guid)) { - sLog.outDebug("Corpse %u not found in world. Delete from DB.",guidlow); + sLog.outDebug("Corpse %u not found in world or bones creating forbidden. Delete from DB.",guidlow); CharacterDatabase.PExecute("DELETE FROM corpse WHERE guid = '%u'",guidlow); } } diff --git a/src/game/GlobalEvents.h b/src/game/GlobalEvents.h index fc493ab9e..2314244da 100644 --- a/src/game/GlobalEvents.h +++ b/src/game/GlobalEvents.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GossipDef.cpp b/src/game/GossipDef.cpp index 1f186f965..63eeb5991 100644 --- a/src/game/GossipDef.cpp +++ b/src/game/GossipDef.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GossipDef.h b/src/game/GossipDef.h index 7cde0c3b1..5ddfb10de 100644 --- a/src/game/GossipDef.h +++ b/src/game/GossipDef.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GridDefines.h b/src/game/GridDefines.h index ced42871b..03e8cc100 100644 --- a/src/game/GridDefines.h +++ b/src/game/GridDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GridNotifiers.cpp b/src/game/GridNotifiers.cpp index 8c611815b..e449e7d30 100644 --- a/src/game/GridNotifiers.cpp +++ b/src/game/GridNotifiers.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GridNotifiers.h b/src/game/GridNotifiers.h index bea2ad269..f0f4e406f 100644 --- a/src/game/GridNotifiers.h +++ b/src/game/GridNotifiers.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GridNotifiersImpl.h b/src/game/GridNotifiersImpl.h index 602d3d247..8244f6371 100644 --- a/src/game/GridNotifiersImpl.h +++ b/src/game/GridNotifiersImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GridStates.cpp b/src/game/GridStates.cpp index 392829737..1bace7c27 100644 --- a/src/game/GridStates.cpp +++ b/src/game/GridStates.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GridStates.h b/src/game/GridStates.h index 8e2e6eeec..873dc15ad 100644 --- a/src/game/GridStates.h +++ b/src/game/GridStates.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Group.cpp b/src/game/Group.cpp index 8279f4c82..3b411227d 100644 --- a/src/game/Group.cpp +++ b/src/game/Group.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -727,6 +727,8 @@ void Group::CountTheRoll(Rolls::iterator rollI, uint32 NumberOfPlayers) if(player && player->GetSession()) { + player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT, roll->itemid, maxresul); + ItemPosCountVec dest; LootItem *item = &(roll->getLoot()->items[roll->itemSlot]); uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, roll->itemid, item->count ); @@ -772,6 +774,8 @@ void Group::CountTheRoll(Rolls::iterator rollI, uint32 NumberOfPlayers) if(player && player->GetSession()) { + player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT, roll->itemid, maxresul); + ItemPosCountVec dest; LootItem *item = &(roll->getLoot()->items[roll->itemSlot]); uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, roll->itemid, item->count ); diff --git a/src/game/Group.h b/src/game/Group.h index 94fbb9d72..4d01115bb 100644 --- a/src/game/Group.h +++ b/src/game/Group.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GroupHandler.cpp b/src/game/GroupHandler.cpp index d5e641129..51fc8cb7c 100644 --- a/src/game/GroupHandler.cpp +++ b/src/game/GroupHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GroupRefManager.h b/src/game/GroupRefManager.h index 72bcbdb71..35c45e16c 100644 --- a/src/game/GroupRefManager.h +++ b/src/game/GroupRefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GroupReference.cpp b/src/game/GroupReference.cpp index 6c9bd38dc..ce29a3dff 100644 --- a/src/game/GroupReference.cpp +++ b/src/game/GroupReference.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GroupReference.h b/src/game/GroupReference.h index 7d8d8a922..04f296312 100644 --- a/src/game/GroupReference.h +++ b/src/game/GroupReference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GuardAI.cpp b/src/game/GuardAI.cpp index 5672f149b..255930f5b 100644 --- a/src/game/GuardAI.cpp +++ b/src/game/GuardAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GuardAI.h b/src/game/GuardAI.h index 092e222ed..365e3af75 100644 --- a/src/game/GuardAI.h +++ b/src/game/GuardAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Guild.cpp b/src/game/Guild.cpp index ec5c0a4c7..4ffdf958d 100644 --- a/src/game/Guild.cpp +++ b/src/game/Guild.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Guild.h b/src/game/Guild.h index 1a4cdf9a5..d1c1e322e 100644 --- a/src/game/Guild.h +++ b/src/game/Guild.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -218,12 +218,12 @@ struct GuildBankTab struct GuildItemPosCount { - GuildItemPosCount(uint8 _slot, uint8 _count) : slot(_slot), count(_count) {} + GuildItemPosCount(uint8 _slot, uint32 _count) : slot(_slot), count(_count) {} bool isContainedIn(std::vector const& vec) const; uint8 slot; - uint8 count; + uint32 count; }; typedef std::vector GuildItemPosCountVec; diff --git a/src/game/GuildHandler.cpp b/src/game/GuildHandler.cpp index 1c7249362..f71223603 100644 --- a/src/game/GuildHandler.cpp +++ b/src/game/GuildHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -373,7 +373,7 @@ void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket) guild->ChangeRank(plGuid, (slot->RankId+1)); // Put record into guildlog - guild->LogGuildEvent(GUILD_EVENT_LOG_DEMOTE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), (slot->RankId+1)); + guild->LogGuildEvent(GUILD_EVENT_LOG_DEMOTE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), slot->RankId); WorldPacket data(SMSG_GUILD_EVENT, (2+30)); // guess size data << (uint8)GE_DEMOTION; diff --git a/src/game/HomeMovementGenerator.cpp b/src/game/HomeMovementGenerator.cpp index 7b166e8ec..ae336b614 100644 --- a/src/game/HomeMovementGenerator.cpp +++ b/src/game/HomeMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/HomeMovementGenerator.h b/src/game/HomeMovementGenerator.h index 7ce0678ec..52bd60166 100644 --- a/src/game/HomeMovementGenerator.h +++ b/src/game/HomeMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/HostilRefManager.cpp b/src/game/HostilRefManager.cpp index e0cc01280..149f91494 100644 --- a/src/game/HostilRefManager.cpp +++ b/src/game/HostilRefManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/HostilRefManager.h b/src/game/HostilRefManager.h index 576597a52..64f6988cc 100644 --- a/src/game/HostilRefManager.h +++ b/src/game/HostilRefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/IdleMovementGenerator.cpp b/src/game/IdleMovementGenerator.cpp index 217ca35b4..370099ebd 100644 --- a/src/game/IdleMovementGenerator.cpp +++ b/src/game/IdleMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/IdleMovementGenerator.h b/src/game/IdleMovementGenerator.h index c74774562..e602f8ef8 100644 --- a/src/game/IdleMovementGenerator.h +++ b/src/game/IdleMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/InstanceData.cpp b/src/game/InstanceData.cpp index b90c9b656..394aa5837 100644 --- a/src/game/InstanceData.cpp +++ b/src/game/InstanceData.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/InstanceData.h b/src/game/InstanceData.h index a610b8036..b40b3893b 100644 --- a/src/game/InstanceData.h +++ b/src/game/InstanceData.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Item.cpp b/src/game/Item.cpp index cbdcc0ca6..bd0dc187e 100644 --- a/src/game/Item.cpp +++ b/src/game/Item.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -888,8 +888,8 @@ Item* Item::CreateItem( uint32 item, uint32 count, Player const* player ) ItemPrototype const *pProto = objmgr.GetItemPrototype( item ); if( pProto ) { - if ( count > pProto->Stackable ) - count = pProto->Stackable; + if ( count > pProto->GetMaxStackSize()) + count = pProto->GetMaxStackSize(); assert(count !=0 && "pProto->Stackable==0 but checked at loading already"); diff --git a/src/game/Item.h b/src/game/Item.h index de0b0c79c..a124d318a 100644 --- a/src/game/Item.h +++ b/src/game/Item.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -230,7 +230,7 @@ class MANGOS_DLL_SPEC Item : public Object uint32 GetCount() const { return GetUInt32Value (ITEM_FIELD_STACK_COUNT); } void SetCount(uint32 value) { SetUInt32Value (ITEM_FIELD_STACK_COUNT, value); } - uint32 GetMaxStackCount() const { return GetProto()->Stackable; } + uint32 GetMaxStackCount() const { return GetProto()->GetMaxStackSize(); } uint8 GetGemCountWithID(uint32 GemID) const; uint8 GetSlot() const {return m_slot;} diff --git a/src/game/ItemEnchantmentMgr.cpp b/src/game/ItemEnchantmentMgr.cpp index 1971200bc..ea9e7ef18 100644 --- a/src/game/ItemEnchantmentMgr.cpp +++ b/src/game/ItemEnchantmentMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ItemEnchantmentMgr.h b/src/game/ItemEnchantmentMgr.h index d2d60dc17..543f773ab 100644 --- a/src/game/ItemEnchantmentMgr.h +++ b/src/game/ItemEnchantmentMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ItemHandler.cpp b/src/game/ItemHandler.cpp index 795a76deb..eb4303b23 100644 --- a/src/game/ItemHandler.cpp +++ b/src/game/ItemHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -344,8 +344,8 @@ void WorldSession::HandleItemQuerySingleOpcode( WorldPacket & recv_data ) data << pProto->RequiredCityRank; data << pProto->RequiredReputationFaction; data << pProto->RequiredReputationRank; - data << pProto->MaxCount; - data << pProto->Stackable; + data << int32(pProto->MaxCount); + data << int32(pProto->Stackable); data << pProto->ContainerSlots; data << pProto->StatsCount; // item stats count for(int i = 0; i < pProto->StatsCount; i++) diff --git a/src/game/ItemPrototype.h b/src/game/ItemPrototype.h index 5328308b4..a4c0bb96e 100644 --- a/src/game/ItemPrototype.h +++ b/src/game/ItemPrototype.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -509,8 +509,8 @@ struct ItemPrototype uint32 RequiredCityRank; uint32 RequiredReputationFaction; // id from Faction.dbc uint32 RequiredReputationRank; - uint32 MaxCount; - uint32 Stackable; + int32 MaxCount; // <=0: no limit + int32 Stackable; // 0: not allowed, -1: put in player coin info tab and don't limit stacking (so 1 slot) uint32 ContainerSlots; uint32 StatsCount; _ItemStat ItemStat[10]; @@ -619,6 +619,8 @@ struct ItemPrototype return 0; } + + uint32 GetMaxStackSize() const { return Stackable > 0 ? uint32(Stackable) : uint32(0x7FFFFFFF-1); } }; struct ItemLocale diff --git a/src/game/LFGHandler.cpp b/src/game/LFGHandler.cpp index 8f261c7ff..c44f17c75 100644 --- a/src/game/LFGHandler.cpp +++ b/src/game/LFGHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Language.h b/src/game/Language.h index 666b8fa9c..207361889 100644 --- a/src/game/Language.h +++ b/src/game/Language.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Level0.cpp b/src/game/Level0.cpp index b6012d47c..2b52f11d7 100644 --- a/src/game/Level0.cpp +++ b/src/game/Level0.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index f86ada89a..71888e8c0 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -111,6 +111,10 @@ bool ChatHandler::HandleNpcWhisperCommand(const char* args) uint64 receiver_guid= atol(receiver_str); + // check online security + if (HasLowerSecurity(objmgr.GetPlayer(receiver_guid), 0)) + return false; + pCreature->Whisper(text,receiver_guid); return true; @@ -342,6 +346,10 @@ bool ChatHandler::HandleNamegoCommand(const char* args) Player *chr = objmgr.GetPlayer(name.c_str()); if (chr) { + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + if(chr->IsBeingTeleported()==true) { PSendSysMessage(LANG_IS_TELEPORTED, chr->GetName()); @@ -402,6 +410,10 @@ bool ChatHandler::HandleNamegoCommand(const char* args) } else if (uint64 guid = objmgr.GetPlayerGUIDByName(name)) { + // check offline security + if (HasLowerSecurity(NULL, guid)) + return false; + PSendSysMessage(LANG_SUMMONING, name.c_str(),GetMangosString(LANG_OFFLINE)); // in point where GM stay @@ -442,6 +454,10 @@ bool ChatHandler::HandleGonameCommand(const char* args) Player *chr = objmgr.GetPlayer(name.c_str()); if (chr) { + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + Map* cMap = chr->GetMap(); if(cMap->IsBattleGroundOrArena()) { @@ -535,6 +551,10 @@ bool ChatHandler::HandleGonameCommand(const char* args) if (uint64 guid = objmgr.GetPlayerGUIDByName(name)) { + // check offline security + if (HasLowerSecurity(NULL, guid)) + return false; + PSendSysMessage(LANG_APPEARING_AT, name.c_str()); // to point where player stay (if loaded) @@ -574,6 +594,10 @@ bool ChatHandler::HandleRecallCommand(const char* args) chr = getSelectedPlayer(); if(!chr) chr = m_session->GetPlayer(); + + // check online security + else if (HasLowerSecurity(chr, 0)) + return false; } else { @@ -594,6 +618,10 @@ bool ChatHandler::HandleRecallCommand(const char* args) SetSentErrorMessage(true); return false; } + + // check online security + if (HasLowerSecurity(chr, 0)) + return false; } if(chr->IsBeingTeleported()) @@ -632,6 +660,10 @@ bool ChatHandler::HandleModifyKnownTitlesCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + uint64 titles2 = titles; for(int i=1; i < sCharTitlesStore.GetNumRows(); ++i) @@ -681,6 +713,10 @@ bool ChatHandler::HandleModifyHPCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + PSendSysMessage(LANG_YOU_CHANGE_HP, chr->GetName(), hp, hpm); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_YOURS_HP_CHANGED, GetName(), hp, hpm); @@ -725,6 +761,10 @@ bool ChatHandler::HandleModifyManaCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + PSendSysMessage(LANG_YOU_CHANGE_MANA, chr->GetName(), mana, manam); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_YOURS_MANA_CHANGED, GetName(), mana, manam); @@ -770,6 +810,10 @@ bool ChatHandler::HandleModifyEnergyCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + PSendSysMessage(LANG_YOU_CHANGE_ENERGY, chr->GetName(), energy/10, energym/10); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_YOURS_ENERGY_CHANGED, GetName(), energy/10, energym/10); @@ -817,6 +861,10 @@ bool ChatHandler::HandleModifyRageCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + PSendSysMessage(LANG_YOU_CHANGE_RAGE, chr->GetName(), rage/10, ragem/10); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_YOURS_RAGE_CHANGED, GetName(), rage/10, ragem/10); @@ -975,6 +1023,10 @@ bool ChatHandler::HandleModifySpellCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + PSendSysMessage(LANG_YOU_CHANGE_SPELLFLATID, spellflatid, val, mark, chr->GetName()); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_YOURS_SPELLFLATID_CHANGED, GetName(), spellflatid, val, mark); @@ -1005,6 +1057,11 @@ bool ChatHandler::HandleModifyTalentCommand (const char* args) SetSentErrorMessage(true); return false; } + + // check online security + if (HasLowerSecurity(player, 0)) + return false; + player->SetFreeTalentPoints(tp); return true; } @@ -1029,6 +1086,10 @@ bool ChatHandler::HandleTaxiCheatCommand(const char* args) chr=m_session->GetPlayer(); } + // check online security + else if (HasLowerSecurity(chr, 0)) + return false; + if (argstr == "on") { chr->SetTaxiCheater(true); @@ -1076,6 +1137,10 @@ bool ChatHandler::HandleModifyASpeedCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + if(chr->isInFlight()) { PSendSysMessage(LANG_CHAR_IN_FLIGHT,chr->GetName()); @@ -1118,6 +1183,10 @@ bool ChatHandler::HandleModifySpeedCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + if(chr->isInFlight()) { PSendSysMessage(LANG_CHAR_IN_FLIGHT,chr->GetName()); @@ -1157,6 +1226,10 @@ bool ChatHandler::HandleModifySwimCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + if(chr->isInFlight()) { PSendSysMessage(LANG_CHAR_IN_FLIGHT,chr->GetName()); @@ -1196,6 +1269,10 @@ bool ChatHandler::HandleModifyBWalkCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + if(chr->isInFlight()) { PSendSysMessage(LANG_CHAR_IN_FLIGHT,chr->GetName()); @@ -1235,6 +1312,10 @@ bool ChatHandler::HandleModifyFlyCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + PSendSysMessage(LANG_YOU_CHANGE_FLY_SPEED, FSpeed, chr->GetName()); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_YOURS_FLY_SPEED_CHANGED, GetName(), FSpeed); @@ -1266,6 +1347,10 @@ bool ChatHandler::HandleModifyScaleCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + PSendSysMessage(LANG_YOU_CHANGE_SIZE, Scale, chr->GetName()); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_YOURS_SIZE_CHANGED, GetName(), Scale); @@ -1509,6 +1594,10 @@ bool ChatHandler::HandleModifyMountCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + PSendSysMessage(LANG_YOU_GIVE_MOUNT, chr->GetName()); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_MOUNT_GIVED, GetName()); @@ -1546,6 +1635,10 @@ bool ChatHandler::HandleModifyMoneyCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + int32 addmoney = atoi((char*)args); uint32 moneyuser = chr->GetMoney(); @@ -1598,6 +1691,10 @@ bool ChatHandler::HandleModifyBitCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + char* pField = strtok((char*)args, " "); if (!pField) return false; @@ -1650,6 +1747,10 @@ bool ChatHandler::HandleModifyHonorCommand (const char* args) return false; } + // check online security + if (HasLowerSecurity(target, 0)) + return false; + int32 amount = (uint32)atoi(args); target->ModifyHonorPoints(amount); @@ -1990,6 +2091,9 @@ bool ChatHandler::HandleNameTeleCommand(const char * args) Player *chr = objmgr.GetPlayer(name.c_str()); if (chr) { + // check online security + if (HasLowerSecurity(chr, 0)) + return false; if(chr->IsBeingTeleported()==true) { @@ -2016,8 +2120,13 @@ bool ChatHandler::HandleNameTeleCommand(const char * args) } else if (uint64 guid = objmgr.GetPlayerGUIDByName(name.c_str())) { + // check offline security + if (HasLowerSecurity(NULL, guid)) + return false; + PSendSysMessage(LANG_TELEPORTING_TO, name.c_str(), GetMangosString(LANG_OFFLINE), tele->name.c_str()); - Player::SavePositionInDB(tele->mapId,tele->position_x,tele->position_y,tele->position_z,tele->orientation,MapManager::Instance().GetZoneId(tele->mapId,tele->position_x,tele->position_y),guid); + Player::SavePositionInDB(tele->mapId,tele->position_x,tele->position_y,tele->position_z,tele->orientation, + MapManager::Instance().GetZoneId(tele->mapId,tele->position_x,tele->position_y,tele->position_z),guid); } else PSendSysMessage(LANG_NO_PLAYER, name.c_str()); @@ -2039,6 +2148,10 @@ bool ChatHandler::HandleGroupTeleCommand(const char * args) return false; } + // check online security + if (HasLowerSecurity(player, 0)) + return false; + // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r GameTele const* tele = extractGameTeleFromLink((char*)args); if(!tele) @@ -2063,6 +2176,10 @@ bool ChatHandler::HandleGroupTeleCommand(const char * args) if(!pl || !pl->GetSession() ) continue; + // check online security + if (HasLowerSecurity(pl, 0)) + return false; + if(pl->IsBeingTeleported()) { PSendSysMessage(LANG_IS_TELEPORTED, pl->GetName()); @@ -2112,6 +2229,10 @@ bool ChatHandler::HandleGroupgoCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(player, 0)) + return false; + Group *grp = player->GetGroup(); if(!grp) @@ -2142,6 +2263,10 @@ bool ChatHandler::HandleGroupgoCommand(const char* args) if(!pl || pl==m_session->GetPlayer() || !pl->GetSession() ) continue; + // check online security + if (HasLowerSecurity(pl, 0)) + return false; + if(pl->IsBeingTeleported()==true) { PSendSysMessage(LANG_IS_TELEPORTED, pl->GetName()); diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp index 27ff8c291..6ea8c6b6d 100644 --- a/src/game/Level2.cpp +++ b/src/game/Level2.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -86,27 +86,11 @@ bool ChatHandler::HandleMuteCommand(const char* args) Player *chr = objmgr.GetPlayer(guid); - // check security - uint32 account_id = 0; - uint32 security = 0; - - if (chr) - { - account_id = chr->GetSession()->GetAccountId(); - security = chr->GetSession()->GetSecurity(); - } - else - { - account_id = objmgr.GetPlayerAccountIdByGUID(guid); - security = accmgr.GetSecurity(account_id); - } - - if(m_session && security >= m_session->GetSecurity()) - { - SendSysMessage(LANG_YOURS_SECURITY_IS_LOW); - SetSentErrorMessage(true); + // must have strong lesser security level + if(HasLowerSecurity (chr,guid,true)) return false; - } + + uint32 account_id = chr ? chr->GetSession()->GetAccountId() : objmgr.GetPlayerAccountIdByGUID(guid); time_t mutetime = time(NULL) + notspeaktime*60; @@ -152,27 +136,11 @@ bool ChatHandler::HandleUnmuteCommand(const char* args) Player *chr = objmgr.GetPlayer(guid); - // check security - uint32 account_id = 0; - uint32 security = 0; - - if (chr) - { - account_id = chr->GetSession()->GetAccountId(); - security = chr->GetSession()->GetSecurity(); - } - else - { - account_id = objmgr.GetPlayerAccountIdByGUID(guid); - security = accmgr.GetSecurity(account_id); - } - - if(m_session && security >= m_session->GetSecurity()) - { - SendSysMessage(LANG_YOURS_SECURITY_IS_LOW); - SetSentErrorMessage(true); + // must have strong lesser security level + if(HasLowerSecurity (chr,guid,true)) return false; - } + + uint32 account_id = chr ? chr->GetSession()->GetAccountId() : objmgr.GetPlayerAccountIdByGUID(guid); if (chr) { @@ -668,6 +636,10 @@ bool ChatHandler::HandleModifyRepCommand(const char * args) return false; } + // check online security + if (HasLowerSecurity(target, 0)) + return false; + char* factionTxt = extractKeyFromLink((char*)args,"Hfaction"); if(!factionTxt) return false; @@ -1239,6 +1211,11 @@ bool ChatHandler::HandleDeMorphCommand(const char* /*args*/) if(!target) target = m_session->GetPlayer(); + + // check online security + else if (target->GetTypeId() == TYPEID_PLAYER && HasLowerSecurity((Player*)target, 0)) + return false; + target->DeMorph(); return true; @@ -1632,6 +1609,10 @@ bool ChatHandler::HandleMorphCommand(const char* args) if(!target) target = m_session->GetPlayer(); + // check online security + else if (target->GetTypeId() == TYPEID_PLAYER && HasLowerSecurity((Player*)target, 0)) + return false; + target->SetDisplayId(display_id); return true; @@ -1700,6 +1681,10 @@ bool ChatHandler::HandleKickPlayerCommand(const char *args) return false; } + // check online security + if (HasLowerSecurity(player, 0)) + return false; + player->GetSession()->KickPlayer(); } else @@ -1719,6 +1704,11 @@ bool ChatHandler::HandleKickPlayerCommand(const char *args) return false; } + // check online security + Player* player = ObjectAccessor::Instance().FindPlayerByName(name.c_str()); + if (player && HasLowerSecurity(player, 0)) + return false; + if(sWorld.KickPlayer(name)) { PSendSysMessage(LANG_COMMAND_KICKMESSAGE,name.c_str()); @@ -1789,6 +1779,10 @@ bool ChatHandler::HandlePInfoCommand(const char* args) // get additional information from Player object if(target) { + // check online security + if (HasLowerSecurity(target, 0)) + return false; + targetGUID = target->GetGUID(); name = target->GetName(); // re-read for case getSelectedPlayer() target accId = target->GetSession()->GetAccountId(); @@ -1800,6 +1794,10 @@ bool ChatHandler::HandlePInfoCommand(const char* args) // get additional information from DB else { + // check offline security + if (HasLowerSecurity(NULL, targetGUID)) + return false; + // 0 QueryResult *result = CharacterDatabase.PQuery("SELECT totaltime FROM characters WHERE guid = '%u'", GUID_LOPART(targetGUID)); if (!result) @@ -3343,12 +3341,20 @@ bool ChatHandler::HandleRenameCommand(const char* args) if(target) { + // check online security + if (HasLowerSecurity(target, 0)) + return false; + PSendSysMessage(LANG_RENAME_PLAYER, target->GetName()); target->SetAtLoginFlag(AT_LOGIN_RENAME); CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '1' WHERE guid = '%u'", target->GetGUIDLow()); } else { + // check offline security + if (HasLowerSecurity(NULL, targetGUID)) + return false; + PSendSysMessage(LANG_RENAME_PLAYER_GUID, oldname.c_str(), GUID_LOPART(targetGUID)); CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '1' WHERE guid = '%u'", GUID_LOPART(targetGUID)); } @@ -3517,6 +3523,10 @@ bool ChatHandler::HandleAddHonorCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(target, 0)) + return false; + uint32 amount = (uint32)atoi(args); target->RewardHonor(NULL, 1, amount); return true; @@ -3532,6 +3542,10 @@ bool ChatHandler::HandleHonorAddKillCommand(const char* /*args*/) return false; } + // check online security + if (target->GetTypeId() == TYPEID_PLAYER && HasLowerSecurity((Player*)target, 0)) + return false; + m_session->GetPlayer()->RewardHonor(target, 1); return true; } @@ -3546,6 +3560,10 @@ bool ChatHandler::HandleUpdateHonorFieldsCommand(const char* /*args*/) return false; } + // check online security + if (HasLowerSecurity(target, 0)) + return false; + target->UpdateHonorFields(); return true; } @@ -3788,6 +3806,10 @@ bool ChatHandler::HandleCombatStopCommand(const char* args) player = m_session->GetPlayer(); } + // check online security + if (HasLowerSecurity(player, 0)) + return false; + player->CombatStop(); player->getHostilRefManager().deleteReferences(); return true; @@ -4025,6 +4047,10 @@ bool ChatHandler::HandleRepairitemsCommand(const char* /*args*/) return false; } + // check online security + if (HasLowerSecurity(target, 0)) + return false; + // Repair items target->DurabilityRepairAll(false, 0, false); @@ -4048,6 +4074,10 @@ bool ChatHandler::HandleWaterwalkCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(player, 0)) + return false; + if (strncmp(args, "on", 3) == 0) player->SetMovement(MOVE_WATER_WALK); // ON else if (strncmp(args, "off", 4) == 0) diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index 5383ecfcb..44f626210 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -54,7 +54,6 @@ //reload commands bool ChatHandler::HandleReloadAllCommand(const char*) { - HandleReloadAreaTriggerTeleportCommand(""); HandleReloadSkillFishingBaseLevelCommand(""); HandleReloadAllAreaCommand(""); @@ -697,7 +696,6 @@ bool ChatHandler::HandleAccountSetGmLevelCommand(const char* args) std::string targetAccountName; uint32 targetAccountId = 0; - uint32 targetSecurity = 0; /// only target player different from self allowed (if targetPlayer!=NULL then not console) Player* targetPlayer = getSelectedPlayer(); @@ -711,13 +709,6 @@ bool ChatHandler::HandleAccountSetGmLevelCommand(const char* args) arg2 = arg1; targetAccountId = targetPlayer->GetSession()->GetAccountId(); - targetSecurity = targetPlayer->GetSession()->GetSecurity(); - if(!accmgr.GetName(targetAccountId,targetAccountName)) - { - PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,targetAccountName.c_str()); - SetSentErrorMessage(true); - return false; - } } else { @@ -734,7 +725,12 @@ bool ChatHandler::HandleAccountSetGmLevelCommand(const char* args) } targetAccountId = accmgr.GetId(targetAccountName); - targetSecurity = accmgr.GetSecurity(targetAccountId); + if(!targetAccountId) + { + PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,targetAccountName.c_str()); + SetSentErrorMessage(true); + return false; + } } int32 gm = (int32)atoi(arg2); @@ -745,12 +741,14 @@ bool ChatHandler::HandleAccountSetGmLevelCommand(const char* args) return false; } - /// m_session==NULL only for console - uint32 plSecurity = m_session ? m_session->GetSecurity() : SEC_CONSOLE; - /// can set security level only for target with less security and to less security that we have /// This is also reject self apply in fact - if(targetSecurity >= plSecurity || uint32(gm) >= plSecurity ) + if(HasLowerSecurityAccount(NULL,targetAccountId,true)) + return false; + + /// account can't set security to same or grater level, need more power GM or console + uint32 plSecurity = m_session ? m_session->GetSecurity() : SEC_CONSOLE; + if (uint32(gm) >= plSecurity ) { SendSysMessage(LANG_YOURS_SECURITY_IS_LOW); SetSentErrorMessage(true); @@ -799,19 +797,10 @@ bool ChatHandler::HandleAccountSetPasswordCommand(const char* args) return false; } - uint32 targetSecurity = accmgr.GetSecurity(targetAccountId); - - /// m_session==NULL only for console - uint32 plSecurity = m_session ? m_session->GetSecurity() : SEC_CONSOLE; - /// can set password only for target with less security /// This is also reject self apply in fact - if (targetSecurity >= plSecurity) - { - SendSysMessage (LANG_YOURS_SECURITY_IS_LOW); - SetSentErrorMessage (true); + if(HasLowerSecurityAccount (NULL,targetAccountId,true)) return false; - } if (strcmp(szPassword1,szPassword2)) { @@ -2718,7 +2707,7 @@ bool ChatHandler::HandleLookupSpellCommand(const char* args) bool talent = (talentCost > 0); bool passive = IsPassiveSpell(id); - bool active = target && (target->HasAura(id,0) || target->HasAura(id,1) || target->HasAura(id,2)); + bool active = target && target->HasAura(id); // unit32 used to prevent interpreting uint8 as char at output // find rank of learned spell for learning spell, or talent rank @@ -6193,8 +6182,15 @@ bool ChatHandler::HandleAccountSetAddonCommand(const char* args) SetSentErrorMessage(true); return false; } + } + // Let set addon state only for lesser (strong) security level + // or to self account + if (m_session && m_session->GetAccountId () != account_id && + HasLowerSecurityAccount (NULL,account_id,true)) + return false; + int lev=atoi(szExp); //get int anyway (0 if error) if(lev < 0) return false; @@ -6289,17 +6285,17 @@ bool ChatHandler::HandleSendItemsCommand(const char* args) } uint32 item_count = itemCountStr ? atoi(itemCountStr) : 1; - if(item_count < 1 || item_proto->MaxCount && item_count > item_proto->MaxCount) + if(item_count < 1 || item_proto->MaxCount > 0 && item_count > uint32(item_proto->MaxCount)) { PSendSysMessage(LANG_COMMAND_INVALID_ITEM_COUNT, item_count,item_id); SetSentErrorMessage(true); return false; } - while(item_count > item_proto->Stackable) + while(item_count > item_proto->GetMaxStackSize()) { - items.push_back(ItemPair(item_id,item_proto->Stackable)); - item_count -= item_proto->Stackable; + items.push_back(ItemPair(item_id,item_proto->GetMaxStackSize())); + item_count -= item_proto->GetMaxStackSize(); } items.push_back(ItemPair(item_id,item_count)); diff --git a/src/game/LootHandler.cpp b/src/game/LootHandler.cpp index f9c26fd29..57d1b6910 100644 --- a/src/game/LootHandler.cpp +++ b/src/game/LootHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -372,14 +372,22 @@ void WorldSession::DoLootRelease( uint64 lguid ) Item *pItem = player->GetItemByGuid(lguid ); if(!pItem) return; - if( (pItem->GetProto()->BagFamily & BAG_FAMILY_MASK_MINING_SUPP) && - pItem->GetProto()->Class == ITEM_CLASS_TRADE_GOODS && - pItem->GetCount() >= 5) + + ItemPrototype const* proto = pItem->GetProto(); + + // destroy only 5 items from stack in case prospecting and milling + if( (proto->BagFamily & (BAG_FAMILY_MASK_MINING_SUPP|BAG_FAMILY_MASK_HERBS)) && + proto->Class == ITEM_CLASS_TRADE_GOODS) { pItem->m_lootGenerated = false; pItem->loot.clear(); - uint32 count = 5; + uint32 count = pItem->GetCount(); + + // >=5 checked in spell code, but will work for cheating cases also with removing from another stacks. + if(count > 5) + count = 5; + player->DestroyItemCount(pItem, count, true); } else diff --git a/src/game/LootMgr.cpp b/src/game/LootMgr.cpp index a559b7b6f..030db9011 100644 --- a/src/game/LootMgr.cpp +++ b/src/game/LootMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/LootMgr.h b/src/game/LootMgr.h index 4d218f2df..6f8289d31 100644 --- a/src/game/LootMgr.h +++ b/src/game/LootMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Mail.cpp b/src/game/Mail.cpp index 1bca38aac..0b6fbd2c7 100644 --- a/src/game/Mail.cpp +++ b/src/game/Mail.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Mail.h b/src/game/Mail.h index e7adf6202..9fcb8df4b 100644 --- a/src/game/Mail.h +++ b/src/game/Mail.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Makefile.am b/src/game/Makefile.am index 44c7898a0..d3d2e7839 100644 --- a/src/game/Makefile.am +++ b/src/game/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -49,18 +49,24 @@ libmangosgame_a_SOURCES = \ BattleGroundAB.cpp \ BattleGroundAV.cpp \ BattleGroundBE.cpp \ + BattleGroundDS.cpp \ BattleGroundEY.cpp \ BattleGroundNA.cpp \ BattleGroundRL.cpp \ + BattleGroundRV.cpp \ + BattleGroundSA.cpp \ BattleGroundWS.cpp \ BattleGround.h \ BattleGroundAA.h \ BattleGroundAB.h \ BattleGroundAV.h \ BattleGroundBE.h \ + BattleGroundDS.h \ BattleGroundEY.h \ BattleGroundNA.h \ BattleGroundRL.h \ + BattleGroundRV.h \ + BattleGroundSA.h \ BattleGroundWS.h \ BattleGroundHandler.cpp \ BattleGroundMgr.cpp \ diff --git a/src/game/Map.cpp b/src/game/Map.cpp index d2f8c06a9..bba8e945a 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -1076,7 +1076,7 @@ float Map::GetHeight(float x, float y, float z, bool pUseVmaps) const } } -uint16 Map::GetAreaFlag(float x, float y ) const +uint16 Map::GetAreaFlag(float x, float y, float z) const { //local x,y coords float lx,ly; @@ -1094,11 +1094,30 @@ uint16 Map::GetAreaFlag(float x, float y ) const // ensure GridMap is loaded const_cast(this)->EnsureGridCreated(GridPair(63-gx,63-gy)); + uint16 areaflag; if(GridMaps[gx][gy]) - return GridMaps[gx][gy]->area_flag[(int)(lx)][(int)(ly)]; + areaflag = GridMaps[gx][gy]->area_flag[(int)(lx)][(int)(ly)]; // this used while not all *.map files generated (instances) else - return GetAreaFlagByMapId(i_id); + areaflag = GetAreaFlagByMapId(i_id); + + //FIXME: some hacks for areas above or underground for ground area + // required for area specific spells/etc, until map/vmap data + // not provided correct areaflag with this hacks + switch(areaflag) + { + // Acherus: The Ebon Hold (Plaguelands: The Scarlet Enclave) + case 1984: // Plaguelands: The Scarlet Enclave + case 2076: // Death's Breach (Plaguelands: The Scarlet Enclave) + case 2745: // The Noxious Pass (Plaguelands: The Scarlet Enclave) + if(z > 350.0f) areaflag = 2048; break; + // Acherus: The Ebon Hold (Eastern Plaguelands) + case 856: // The Noxious Glade (Eastern Plaguelands) + case 2456: // Death's Breach (Eastern Plaguelands) + if(z > 350.0f) areaflag = 1950; break; + } + + return areaflag; } uint8 Map::GetTerrainType(float x, float y ) const diff --git a/src/game/Map.h b/src/game/Map.h index 70137a614..5b9c3781a 100644 --- a/src/game/Map.h +++ b/src/game/Map.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -182,7 +182,7 @@ class MANGOS_DLL_SPEC Map : public GridRefManager, public MaNGOS::Obj float GetHeight(float x, float y, float z, bool pCheckVMap=true) const; bool IsInWater(float x, float y, float z) const; // does not use z pos. This is for future use - uint16 GetAreaFlag(float x, float y ) const; + uint16 GetAreaFlag(float x, float y, float z) const; uint8 GetTerrainType(float x, float y ) const; float GetWaterLevel(float x, float y ) const; bool IsUnderWater(float x, float y, float z) const; @@ -190,14 +190,14 @@ class MANGOS_DLL_SPEC Map : public GridRefManager, public MaNGOS::Obj static uint32 GetAreaId(uint16 areaflag,uint32 map_id); static uint32 GetZoneId(uint16 areaflag,uint32 map_id); - uint32 GetAreaId(float x, float y) const + uint32 GetAreaId(float x, float y, float z) const { - return GetAreaId(GetAreaFlag(x,y),i_id); + return GetAreaId(GetAreaFlag(x,y,z),i_id); } - uint32 GetZoneId(float x, float y) const + uint32 GetZoneId(float x, float y, float z) const { - return GetZoneId(GetAreaFlag(x,y),i_id); + return GetZoneId(GetAreaFlag(x,y,z),i_id); } virtual void MoveAllCreaturesInMoveList(); diff --git a/src/game/MapInstanced.cpp b/src/game/MapInstanced.cpp index 37ce4522a..a89238ff9 100644 --- a/src/game/MapInstanced.cpp +++ b/src/game/MapInstanced.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MapInstanced.h b/src/game/MapInstanced.h index 030716853..0a998e50d 100644 --- a/src/game/MapInstanced.h +++ b/src/game/MapInstanced.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MapManager.cpp b/src/game/MapManager.cpp index 03f080dd9..9a7d1c20e 100644 --- a/src/game/MapManager.cpp +++ b/src/game/MapManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MapManager.h b/src/game/MapManager.h index 43ba884a9..30bfead45 100644 --- a/src/game/MapManager.h +++ b/src/game/MapManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -45,13 +45,13 @@ class MANGOS_DLL_DECL MapManager : public MaNGOS::Singleton(this)->_GetBaseMap(id); } void DeleteInstance(uint32 mapid, uint32 instanceId); - inline uint16 GetAreaFlag(uint32 mapid, float x, float y) const + inline uint16 GetAreaFlag(uint32 mapid, float x, float y, float z) const { Map const* m = GetBaseMap(mapid); - return m->GetAreaFlag(x, y); + return m->GetAreaFlag(x, y, z); } - inline uint32 GetAreaId(uint32 mapid, float x, float y) { return Map::GetAreaId(GetAreaFlag(mapid, x, y),mapid); } - inline uint32 GetZoneId(uint32 mapid, float x, float y) { return Map::GetZoneId(GetAreaFlag(mapid, x, y),mapid); } + inline uint32 GetAreaId(uint32 mapid, float x, float y, float z) { return Map::GetAreaId(GetAreaFlag(mapid, x, y, z),mapid); } + inline uint32 GetZoneId(uint32 mapid, float x, float y, float z) { return Map::GetZoneId(GetAreaFlag(mapid, x, y, z),mapid); } void Initialize(void); void Update(time_t); diff --git a/src/game/MapRefManager.h b/src/game/MapRefManager.h index bfd0ca12e..02f8b2ea4 100644 --- a/src/game/MapRefManager.h +++ b/src/game/MapRefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MapReference.h b/src/game/MapReference.h index e58e06cf8..3879da51c 100644 --- a/src/game/MapReference.h +++ b/src/game/MapReference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp index 3eed7737f..ac6f8ffe8 100644 --- a/src/game/MiscHandler.cpp +++ b/src/game/MiscHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -808,7 +808,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket & recv_data) GetPlayer()->SetRestType(REST_TYPE_IN_TAVERN); if(sWorld.IsFFAPvPRealm()) - GetPlayer()->RemoveFlag(PLAYER_FLAGS,PLAYER_FLAGS_FFA_PVP); + GetPlayer()->RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); return; } diff --git a/src/game/MotionMaster.cpp b/src/game/MotionMaster.cpp index 23beef949..c82869fe7 100644 --- a/src/game/MotionMaster.cpp +++ b/src/game/MotionMaster.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MotionMaster.h b/src/game/MotionMaster.h index b4a19cd86..bccc73327 100644 --- a/src/game/MotionMaster.h +++ b/src/game/MotionMaster.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MovementGenerator.cpp b/src/game/MovementGenerator.cpp index 9266858d3..4e1543598 100644 --- a/src/game/MovementGenerator.cpp +++ b/src/game/MovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MovementGenerator.h b/src/game/MovementGenerator.h index 5d95a5a96..2653ea636 100644 --- a/src/game/MovementGenerator.h +++ b/src/game/MovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MovementGeneratorImpl.h b/src/game/MovementGeneratorImpl.h index 83df8325b..fb0d449fb 100644 --- a/src/game/MovementGeneratorImpl.h +++ b/src/game/MovementGeneratorImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp index 8d34e7ec7..fcf5a4661 100644 --- a/src/game/MovementHandler.cpp +++ b/src/game/MovementHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -248,7 +248,7 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data ) // 14.57 can be calculated by resolving damageperc formular below to 0 if (z_diff >= 14.57f && !target->isDead() && !target->isGameMaster() && !target->HasAuraType(SPELL_AURA_HOVER) && !target->HasAuraType(SPELL_AURA_FEATHER_FALL) && - !target->HasAuraType(SPELL_AURA_FLY) && !target->IsImmunedToDamage(SPELL_SCHOOL_MASK_NORMAL,true) ) + !target->HasAuraType(SPELL_AURA_FLY) && !target->IsImmunedToDamage(SPELL_SCHOOL_MASK_NORMAL) ) { //Safe fall, fall height reduction int32 safe_fall = target->GetTotalAuraModifier(SPELL_AURA_SAFE_FALL); diff --git a/src/game/NPCHandler.cpp b/src/game/NPCHandler.cpp index e7ac60265..498902ebe 100644 --- a/src/game/NPCHandler.cpp +++ b/src/game/NPCHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/NPCHandler.h b/src/game/NPCHandler.h index 8ae245876..4ecf77378 100644 --- a/src/game/NPCHandler.h +++ b/src/game/NPCHandler.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/NullCreatureAI.cpp b/src/game/NullCreatureAI.cpp index 62113c230..c3e048d48 100644 --- a/src/game/NullCreatureAI.cpp +++ b/src/game/NullCreatureAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/NullCreatureAI.h b/src/game/NullCreatureAI.h index 642669e72..661571b97 100644 --- a/src/game/NullCreatureAI.h +++ b/src/game/NullCreatureAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Object.cpp b/src/game/Object.cpp index ebd2279b7..d44f73145 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -1044,12 +1044,12 @@ void WorldObject::_Create( uint32 guidlow, HighGuid guidhigh, uint32 mapid ) uint32 WorldObject::GetZoneId() const { - return MapManager::Instance().GetBaseMap(m_mapId)->GetZoneId(m_positionX,m_positionY); + return MapManager::Instance().GetBaseMap(m_mapId)->GetZoneId(m_positionX,m_positionY,m_positionZ); } uint32 WorldObject::GetAreaId() const { - return MapManager::Instance().GetBaseMap(m_mapId)->GetAreaId(m_positionX,m_positionY); + return MapManager::Instance().GetBaseMap(m_mapId)->GetAreaId(m_positionX,m_positionY,m_positionZ); } InstanceData* WorldObject::GetInstanceData() diff --git a/src/game/Object.h b/src/game/Object.h index 6abd05203..27b1f8fb8 100644 --- a/src/game/Object.h +++ b/src/game/Object.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -416,7 +416,7 @@ class MANGOS_DLL_SPEC WorldObject : public Object float GetDistance2d(const WorldObject* obj) const; float GetDistance2d(const float x, const float y) const; float GetDistanceZ(const WorldObject* obj) const; - bool IsInMap(const WorldObject* obj) const { return GetMapId()==obj->GetMapId() && GetInstanceId()==obj->GetInstanceId(); } + bool IsInMap(const WorldObject* obj) const { return IsInWorld() && obj->IsInWorld() && GetMapId()==obj->GetMapId() && GetInstanceId()==obj->GetInstanceId(); } bool IsWithinDistInMap(const WorldObject* obj, const float dist2compare, const bool is3D = true) const; bool IsWithinLOS(const float x, const float y, const float z ) const; bool IsWithinLOSInMap(const WorldObject* obj) const; diff --git a/src/game/ObjectAccessor.cpp b/src/game/ObjectAccessor.cpp index a1305e7f7..53b6c245f 100644 --- a/src/game/ObjectAccessor.cpp +++ b/src/game/ObjectAccessor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,6 +36,7 @@ #include "Opcodes.h" #include "ObjectDefines.h" #include "MapInstanced.h" +#include "World.h" #include @@ -430,7 +431,7 @@ ObjectAccessor::AddCorpsesToGrid(GridPair const& gridpair,GridType& grid,Map* ma } Corpse* -ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid) +ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid, bool insignia) { Corpse *corpse = GetCorpseForPlayerGUID(player_guid); if(!corpse) @@ -456,7 +457,10 @@ ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid) Corpse *bones = NULL; // create the bones only if the map and the grid is loaded at the corpse's location - if(map && !map->IsRemovalGrid(corpse->GetPositionX(), corpse->GetPositionY())) + // ignore bones creating option in case insignia + if (map && (insignia || + (map->IsBattleGroundOrArena() ? sWorld.getConfig(CONFIG_DEATH_BONES_BG_OR_ARENA) : sWorld.getConfig(CONFIG_DEATH_BONES_WORLD))) && + !map->IsRemovalGrid(corpse->GetPositionX(), corpse->GetPositionY())) { // Create bones, don't change Corpse bones = new Corpse; diff --git a/src/game/ObjectAccessor.h b/src/game/ObjectAccessor.h index ff33a9f6c..eb09f6385 100644 --- a/src/game/ObjectAccessor.h +++ b/src/game/ObjectAccessor.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -192,7 +192,7 @@ class MANGOS_DLL_DECL ObjectAccessor : public MaNGOS::Singleton + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ObjectGridLoader.cpp b/src/game/ObjectGridLoader.cpp index 0e1731e24..b2735df3b 100644 --- a/src/game/ObjectGridLoader.cpp +++ b/src/game/ObjectGridLoader.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ObjectGridLoader.h b/src/game/ObjectGridLoader.h index 1590ba5c2..6022ba23a 100644 --- a/src/game/ObjectGridLoader.h +++ b/src/game/ObjectGridLoader.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index f492192e1..4566bf2a6 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -580,22 +580,6 @@ void ObjectMgr::LoadCreatureLocales() sLog.outString( ">> Loaded %u creature locale strings", mCreatureLocaleMap.size() ); } -void ObjectMgr::LoadCompletedAchievements() -{ - QueryResult *result = CharacterDatabase.Query("SELECT achievement FROM character_achievement GROUP BY achievement"); - - if(!result) - return; - - do - { - Field *fields = result->Fetch(); - allCompletedAchievements.insert(fields[0].GetUInt32()); - } while(result->NextRow()); - - delete result; -} - void ObjectMgr::LoadNpcOptionLocales() { mNpcOptionLocaleMap.clear(); // need for reload case @@ -1672,14 +1656,30 @@ void ObjectMgr::LoadItemPrototypes() const_cast(proto)->RequiredSkill = 0; } - if(!(proto->AllowableClass & CLASSMASK_ALL_PLAYABLE)) { - sLog.outErrorDb("Item (Entry: %u) not have in `AllowableClass` any playable classes (%u) and can't be equipped.",i,proto->AllowableClass); - } - if(!(proto->AllowableRace & RACEMASK_ALL_PLAYABLE)) - { - sLog.outErrorDb("Item (Entry: %u) not have in `AllowableRace` any playable races (%u) and can't be equipped.",i,proto->AllowableRace); + // can be used in equip slot, as page read use in inventory, or spell casting at use + bool req = proto->InventoryType!=INVTYPE_NON_EQUIP || proto->PageText; + if(!req) + { + for (int j = 0; j < 5; ++j) + { + if(proto->Spells[j].SpellId) + { + req = true; + break; + } + } + } + + if(req) + { + if(!(proto->AllowableClass & CLASSMASK_ALL_PLAYABLE)) + sLog.outErrorDb("Item (Entry: %u) not have in `AllowableClass` any playable classes (%u) and can't be equipped or use.",i,proto->AllowableClass); + + if(!(proto->AllowableRace & RACEMASK_ALL_PLAYABLE)) + sLog.outErrorDb("Item (Entry: %u) not have in `AllowableRace` any playable races (%u) and can't be equipped or use.",i,proto->AllowableRace); + } } if(proto->RequiredSpell && !sSpellStore.LookupEntry(proto->RequiredSpell)) @@ -1705,11 +1705,22 @@ void ObjectMgr::LoadItemPrototypes() else if(proto->RequiredReputationRank > MIN_REPUTATION_RANK) sLog.outErrorDb("Item (Entry: %u) has RequiredReputationFaction ==0 but RequiredReputationRank > 0, rank setting is useless.",i); + if(proto->MaxCount < -1) + { + sLog.outErrorDb("Item (Entry: %u) has too large negative in maxcount (%i), replace by value (-1) no storing limits.",i,proto->MaxCount); + const_cast(proto)->MaxCount = -1; + } + if(proto->Stackable==0) { - sLog.outErrorDb("Item (Entry: %u) has wrong value in stackable (%u), replace by default 1.",i,proto->Stackable); + sLog.outErrorDb("Item (Entry: %u) has wrong value in stackable (%i), replace by default 1.",i,proto->Stackable); const_cast(proto)->Stackable = 1; } + else if(proto->Stackable < -1) + { + sLog.outErrorDb("Item (Entry: %u) has too large negative in stackable (%i), replace by value (-1) no stacking limits.",i,proto->Stackable); + const_cast(proto)->Stackable = -1; + } else if(proto->Stackable > 255) { sLog.outErrorDb("Item (Entry: %u) has too large value in stackable (%u), replace by hardcoded upper limit (255).",i,proto->Stackable); @@ -2214,8 +2225,8 @@ void ObjectMgr::LoadPlayerInfo() // Load playercreate spells { - // 0 1 2 3 - QueryResult *result = WorldDatabase.Query("SELECT race, class, Spell, Active FROM playercreateinfo_spell"); + // 0 1 2 + QueryResult *result = WorldDatabase.Query("SELECT race, class, Spell FROM playercreateinfo_spell"); uint32 count = 0; @@ -2250,7 +2261,7 @@ void ObjectMgr::LoadPlayerInfo() } PlayerInfo* pInfo = &playerInfo[current_race][current_class]; - pInfo->spell.push_back(CreateSpellPair(fields[2].GetUInt16(), fields[3].GetUInt8())); + pInfo->spell.push_back(fields[2].GetUInt32()); bar.step(); ++count; @@ -4858,7 +4869,7 @@ void ObjectMgr::LoadGraveyardZones() WorldSafeLocsEntry const *ObjectMgr::GetClosestGraveYard(float x, float y, float z, uint32 MapId, uint32 team) { // search for zone associated closest graveyard - uint32 zoneId = MapManager::Instance().GetZoneId(MapId,x,y); + uint32 zoneId = MapManager::Instance().GetZoneId(MapId,x,y,z); // Simulate std. algorithm: // found some graveyard associated to (ghost_zone,ghost_map) @@ -5127,6 +5138,9 @@ void ObjectMgr::LoadAreaTriggerTeleports() sLog.outString( ">> Loaded %u area trigger teleport definitions", count ); } +/* + * Searches for the areatrigger which teleports players out of the given map + */ AreaTrigger const* ObjectMgr::GetGoBackTrigger(uint32 Map) const { const MapEntry *mapEntry = sMapStore.LookupEntry(Map); @@ -5143,6 +5157,23 @@ AreaTrigger const* ObjectMgr::GetGoBackTrigger(uint32 Map) const return NULL; } +/** + * Searches for the areatrigger which teleports players to the given map + */ +AreaTrigger const* ObjectMgr::GetMapEntranceTrigger(uint32 Map) const +{ + for (AreaTriggerMap::const_iterator itr = mAreaTriggers.begin(); itr != mAreaTriggers.end(); ++itr) + { + if(itr->second.target_mapId == Map) + { + AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(itr->first); + if(atEntry) + return &itr->second; + } + } + return NULL; +} + void ObjectMgr::SetHighestGuids() { QueryResult *result = CharacterDatabase.Query( "SELECT MAX(guid) FROM characters" ); @@ -6286,23 +6317,6 @@ int ObjectMgr::GetOrNewIndexForLocale( LocaleConstant loc ) return m_LocalForIndex.size()-1; } -AchievementCriteriaEntryList const& ObjectMgr::GetAchievementCriteriaByType(AchievementCriteriaTypes type) -{ - return m_AchievementCriteriasByType[type]; -} - -void ObjectMgr::LoadAchievementCriteriaList() -{ - for (uint32 entryId = 0; entryIdrequiredType].push_back(criteria); - } -} - void ObjectMgr::LoadBattleMastersEntry() { mBattleMastersMap.clear(); // need for reload case diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index 825237bfc..eac5a6bf2 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -242,8 +242,6 @@ typedef std::list CacheNpcOptionList; typedef UNORDERED_MAP CacheVendorItemMap; typedef UNORDERED_MAP CacheTrainerSpellMap; -typedef std::list AchievementCriteriaEntryList; - enum SkillRangeType { SKILL_RANGE_LANGUAGE, // 300..300 @@ -466,6 +464,7 @@ class ObjectMgr } AreaTrigger const* GetGoBackTrigger(uint32 Map) const; + AreaTrigger const* GetMapEntranceTrigger(uint32 Map) const; uint32 GetAreaTriggerScriptId(uint32 trigger_id); @@ -566,7 +565,6 @@ class ObjectMgr void LoadNpcTextId(); void LoadVendors(); void LoadTrainerSpell(); - void LoadCompletedAchievements(); std::string GeneratePetName(uint32 entry); uint32 GetBaseXP(uint32 level); @@ -771,14 +769,13 @@ class ObjectMgr void AddVendorItem(uint32 entry,uint32 item, uint32 maxcount, uint32 incrtime, uint32 ExtendedCost); bool RemoveVendorItem(uint32 entry,uint32 item); bool IsVendorItemValid( uint32 vendor_entry, uint32 item, uint32 maxcount, uint32 ptime, uint32 ExtendedCost, Player* pl = NULL, std::set* skip_vendors = NULL ) const; - void LoadAchievementCriteriaList(); - AchievementCriteriaEntryList const& GetAchievementCriteriaByType(AchievementCriteriaTypes type); - std::set allCompletedAchievements; void LoadScriptNames(); ScriptNameMap &GetScriptNames() { return m_scriptNames; } const char * GetScriptName(uint32 id) { return id < m_scriptNames.size() ? m_scriptNames[id].c_str() : ""; } uint32 GetScriptId(const char *name); + + int GetOrNewIndexForLocale(LocaleConstant loc); protected: // first free id for selected id type @@ -847,7 +844,6 @@ class ObjectMgr typedef std::vector LocalForIndex; LocalForIndex m_LocalForIndex; - int GetOrNewIndexForLocale(LocaleConstant loc); int DBCLocaleIndex; @@ -901,9 +897,6 @@ class ObjectMgr CacheNpcTextIdMap m_mCacheNpcTextIdMap; CacheVendorItemMap m_mCacheVendorItemMap; CacheTrainerSpellMap m_mCacheTrainerSpellMap; - - // store achievement criterias by type to speed up lookup - AchievementCriteriaEntryList m_AchievementCriteriasByType[ACHIEVEMENT_CRITERIA_TYPE_TOTAL]; }; #define objmgr MaNGOS::Singleton::Instance() diff --git a/src/game/ObjectPosSelector.cpp b/src/game/ObjectPosSelector.cpp index 6855e21f8..899dfec3f 100644 --- a/src/game/ObjectPosSelector.cpp +++ b/src/game/ObjectPosSelector.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ObjectPosSelector.h b/src/game/ObjectPosSelector.h index bc4de0c1d..840506111 100644 --- a/src/game/ObjectPosSelector.h +++ b/src/game/ObjectPosSelector.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Opcodes.cpp b/src/game/Opcodes.cpp index 3c4b276ce..39bdc2f94 100644 --- a/src/game/Opcodes.cpp +++ b/src/game/Opcodes.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Opcodes.h b/src/game/Opcodes.h index 9ff83f852..544e5ca96 100644 --- a/src/game/Opcodes.h +++ b/src/game/Opcodes.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Path.h b/src/game/Path.h index 71564dada..086293c38 100644 --- a/src/game/Path.h +++ b/src/game/Path.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp index 47edf16a6..93894e4d3 100644 --- a/src/game/Pet.cpp +++ b/src/game/Pet.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -1078,7 +1078,7 @@ void Pet::_SaveSpellCooldowns() void Pet::_LoadSpells() { - QueryResult *result = CharacterDatabase.PQuery("SELECT spell,slot,active FROM pet_spell WHERE guid = '%u'",m_charmInfo->GetPetNumber()); + QueryResult *result = CharacterDatabase.PQuery("SELECT spell,active FROM pet_spell WHERE guid = '%u'",m_charmInfo->GetPetNumber()); if(result) { @@ -1086,7 +1086,7 @@ void Pet::_LoadSpells() { Field *fields = result->Fetch(); - addSpell(fields[0].GetUInt16(), fields[2].GetUInt16(), PETSPELL_UNCHANGED, fields[1].GetUInt16()); + addSpell(fields[0].GetUInt16(), fields[1].GetUInt16(), PETSPELL_UNCHANGED); } while( result->NextRow() ); @@ -1103,7 +1103,7 @@ void Pet::_SaveSpells() if (itr->second->state == PETSPELL_REMOVED || itr->second->state == PETSPELL_CHANGED) CharacterDatabase.PExecute("DELETE FROM pet_spell WHERE guid = '%u' and spell = '%u'", m_charmInfo->GetPetNumber(), itr->first); if (itr->second->state == PETSPELL_NEW || itr->second->state == PETSPELL_CHANGED) - CharacterDatabase.PExecute("INSERT INTO pet_spell (guid,spell,slot,active) VALUES ('%u', '%u', '%u','%u')", m_charmInfo->GetPetNumber(), itr->first, itr->second->slotId,itr->second->active); + CharacterDatabase.PExecute("INSERT INTO pet_spell (guid,spell,active) VALUES ('%u', '%u', '%u')", m_charmInfo->GetPetNumber(), itr->first, itr->second->active); if (itr->second->state == PETSPELL_REMOVED) _removeSpell(itr->first); @@ -1221,7 +1221,7 @@ void Pet::_SaveAuras() { CharacterDatabase.PExecute("INSERT INTO pet_aura (guid,caster_guid,spell,effect_index,stackcount,amount,maxduration,remaintime,remaincharges) " "VALUES ('%u', '" I64FMTD "', '%u', '%u', '%u', '%d', '%d', '%d', '%d')", - m_charmInfo->GetPetNumber(), itr2->second->GetCasterGUID(),(uint32)itr2->second->GetId(), (uint32)itr2->second->GetEffIndex(), stackCounter, itr2->second->GetModifier()->m_amount,int(itr2->second->GetAuraMaxDuration()),int(itr2->second->GetAuraDuration()),int(itr2->second->m_procCharges)); + m_charmInfo->GetPetNumber(), itr2->second->GetCasterGUID(),(uint32)itr2->second->GetId(), (uint32)itr2->second->GetEffIndex(), stackCounter, itr2->second->GetModifier()->m_amount,int(itr2->second->GetAuraMaxDuration()),int(itr2->second->GetAuraDuration()),int(itr2->second->GetAuraCharges())); } } } @@ -1239,7 +1239,7 @@ void Pet::_SaveAuras() } } -bool Pet::addSpell(uint16 spell_id, uint16 active, PetSpellState state, uint16 slot_id, PetSpellType type) +bool Pet::addSpell(uint16 spell_id, uint16 active, PetSpellState state, PetSpellType type) { SpellEntry const *spellInfo = sSpellStore.LookupEntry(spell_id); if (!spellInfo) @@ -1299,7 +1299,6 @@ bool Pet::addSpell(uint16 spell_id, uint16 active, PetSpellState state, uint16 s if(spellmgr.GetFirstSpellInChain(itr->first) == chainstart) { - slot_id = itr->second->slotId; newspell->active = itr->second->active; if(newspell->active == ACT_ENABLED) @@ -1311,21 +1310,6 @@ bool Pet::addSpell(uint16 spell_id, uint16 active, PetSpellState state, uint16 s } } - uint16 tmpslot = slot_id; - - if (tmpslot == 0xffff) - { - uint16 maxid = 0; - PetSpellMap::iterator itr; - for (itr = m_spells.begin(); itr != m_spells.end(); ++itr) - { - if(itr->second->state == PETSPELL_REMOVED) continue; - if (itr->second->slotId > maxid) maxid = itr->second->slotId; - } - tmpslot = maxid + 1; - } - - newspell->slotId = tmpslot; m_spells[spell_id] = newspell; if (IsPassiveSpell(spell_id)) @@ -1589,7 +1573,7 @@ void Pet::LearnPetPassives() if(petStore != sPetFamilySpellsStore.end()) { for(PetFamilySpellsSet::const_iterator petSet = petStore->second.begin(); petSet != petStore->second.end(); ++petSet) - addSpell(*petSet, ACT_DECIDE, PETSPELL_NEW, 0xffff, PETSPELL_FAMILY); + addSpell(*petSet, ACT_DECIDE, PETSPELL_NEW, PETSPELL_FAMILY); } } diff --git a/src/game/Pet.h b/src/game/Pet.h index 174d49ad4..383089280 100644 --- a/src/game/Pet.h +++ b/src/game/Pet.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -66,7 +66,6 @@ enum PetSpellType struct PetSpell { - uint16 slotId; uint16 active; PetSpellState state : 16; @@ -189,7 +188,7 @@ class Pet : public Creature void _LoadSpells(); void _SaveSpells(); - bool addSpell(uint16 spell_id,uint16 active = ACT_DECIDE, PetSpellState state = PETSPELL_NEW, uint16 slot_id=0xffff, PetSpellType type = PETSPELL_NORMAL); + bool addSpell(uint16 spell_id,uint16 active = ACT_DECIDE, PetSpellState state = PETSPELL_NEW, PetSpellType type = PETSPELL_NORMAL); bool learnSpell(uint16 spell_id); void learnLevelupSpells(); bool unlearnSpell(uint16 spell_id); diff --git a/src/game/PetAI.cpp b/src/game/PetAI.cpp index 144b2d7f8..80613ae2f 100644 --- a/src/game/PetAI.cpp +++ b/src/game/PetAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/PetAI.h b/src/game/PetAI.h index 27b56c25f..00edf864e 100644 --- a/src/game/PetAI.h +++ b/src/game/PetAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/PetHandler.cpp b/src/game/PetHandler.cpp index 1a34358f0..a79b6f1d5 100644 --- a/src/game/PetHandler.cpp +++ b/src/game/PetHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -246,9 +246,6 @@ void WorldSession::HandlePetAction( WorldPacket & recv_data ) case SPELL_FAILED_REQUIRES_SPELL_FOCUS: data << uint32(spellInfo->RequiresSpellFocus); break; - case SPELL_FAILED_REQUIRES_AREA: - data << uint32(spellInfo->AreaId); - break; } SendPacket(&data); } diff --git a/src/game/PetitionsHandler.cpp b/src/game/PetitionsHandler.cpp index 712d8bc36..181c0556a 100644 --- a/src/game/PetitionsHandler.cpp +++ b/src/game/PetitionsHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 5457be6c6..5893d43ed 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -247,6 +247,15 @@ uint32 PlayerTaxi::GetCurrentTaxiPath() const return path; } +std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi) +{ + ss << "'"; + for(int i = 0; i < TaxiMaskSize; ++i) + ss << taxi.m_taximask[i] << " "; + ss << "'"; + return ss; +} + //== Player ==================================================== const int32 Player::ReputationRank_Length[MAX_REPUTATION_RANK] = {36000, 3000, 3000, 3000, 6000, 12000, 21000, 1000}; @@ -594,13 +603,6 @@ bool Player::Create( uint32 guidlow, const std::string& name, uint8 race, uint8 SetUInt32Value( PLAYER_FIELD_TODAY_CONTRIBUTION, 0 ); SetUInt32Value( PLAYER_FIELD_YESTERDAY_CONTRIBUTION, 0 ); - for(uint32 i = 0; i < sGlyphSlotStore.GetNumRows(); ++i) - { - GlyphSlotEntry const * gs = sGlyphSlotStore.LookupEntry(i); - if(gs && gs->Order) - SetGlyphSlot(gs->Order - 1, gs->Id); - } - // set starting level uint32 start_level = getClass() != CLASS_DEATH_KNIGHT ? sWorld.getConfig(CONFIG_START_PLAYER_LEVEL) @@ -651,7 +653,7 @@ bool Player::Create( uint32 guidlow, const std::string& name, uint8 race, uint8 } // original spells - learnDefaultSpells(true); + learnDefaultSpells(); // original action bar std::list::const_iterator action_itr[4]; @@ -705,7 +707,9 @@ bool Player::Create( uint32 guidlow, const std::string& name, uint8 race, uint8 continue; } - uint32 count = iProto->Stackable; // max stack by default (mostly 1) + // max stack by default (mostly 1), 1 for infinity stackable + uint32 count = iProto->Stackable > 0 ? uint32(iProto->Stackable) : 1; + if(iProto->Class==ITEM_CLASS_CONSUMABLE && iProto->SubClass==ITEM_SUBCLASS_FOOD) { switch(iProto->Spells[0].SpellCategory) @@ -1368,7 +1372,7 @@ void Player::BuildEnumData( QueryResult * result, WorldPacket * p_data ) *p_data << uint8(getLevel()); // player level // do not use GetMap! it will spawn a new instance since the bound instances are not loaded - uint32 zoneId = MapManager::Instance().GetZoneId(GetMapId(), GetPositionX(),GetPositionY()); + uint32 zoneId = MapManager::Instance().GetZoneId(GetMapId(), GetPositionX(),GetPositionY(),GetPositionZ()); sLog.outDebug("Player::BuildEnumData: m:%u, x:%f, y:%f, z:%f zone:%u", GetMapId(), GetPositionX(), GetPositionY(), GetPositionZ(), zoneId); *p_data << uint32(zoneId); *p_data << uint32(GetMapId()); @@ -1983,7 +1987,7 @@ void Player::SetGameMaster(bool on) setFaction(35); SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GM); - RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_FFA_PVP); + RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); ResetContestedPvP(); getHostilRefManager().setOnlineOfflineState(false); @@ -1997,7 +2001,7 @@ void Player::SetGameMaster(bool on) // restore FFA PvP Server state if(sWorld.IsFFAPvPRealm()) - SetFlag(PLAYER_FLAGS,PLAYER_FLAGS_FFA_PVP); + SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); // restore FFA PvP area state, remove not allowed for GM mounts UpdateArea(m_areaUpdateId); @@ -2372,9 +2376,10 @@ void Player::InitStatsForLevel(bool reapplyMods) SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE ); // must be set // cleanup player flags (will be re-applied if need at aura load), to avoid have ghost flag without ghost aura, for example. - RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK | PLAYER_FLAGS_DND | PLAYER_FLAGS_GM | PLAYER_FLAGS_GHOST | PLAYER_FLAGS_FFA_PVP); + RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK | PLAYER_FLAGS_DND | PLAYER_FLAGS_GM | PLAYER_FLAGS_GHOST); SetByteValue(UNIT_FIELD_BYTES_1, 2, 0x00); // one form stealth modified bytes + RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP | UNIT_BYTE2_FLAG_SANCTUARY); // restore if need some important flags SetUInt32Value(PLAYER_FIELD_BYTES2, 0 ); // flags empty by default @@ -2523,13 +2528,13 @@ void Player::AddNewMailDeliverTime(time_t deliver_time) } } -bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, uint16 slot_id, bool disabled) +bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool disabled) { SpellEntry const *spellInfo = sSpellStore.LookupEntry(spell_id); if (!spellInfo) { // do character spell book cleanup (all characters) - if(loading && !learning) // spell load case + if(!IsInWorld() && !learning) // spell load case { sLog.outError("Player::addSpell: Non-existed in SpellStore spell #%u request, deleting for all characters in `character_spell`.",spell_id); CharacterDatabase.PExecute("DELETE FROM character_spell WHERE spell = '%u'",spell_id); @@ -2543,7 +2548,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, if(!SpellMgr::IsSpellValid(spellInfo,this,false)) { // do character spell book cleanup (all characters) - if(loading && !learning) // spell load case + if(!IsInWorld() && !learning) // spell load case { sLog.outError("Player::addSpell: Broken spell #%u learning not allowed, deleting for all characters in `character_spell`.",spell_id); CharacterDatabase.PExecute("DELETE FROM character_spell WHERE spell = '%u'",spell_id); @@ -2567,8 +2572,8 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, { itr->second->active = active; - // loading && !learning == explicitly load from DB and then exist in it already and set correctly - if(loading && !learning) + // !IsInWorld() && !learning == explicitly load from DB and then exist in it already and set correctly + if(!IsInWorld() && !learning) itr->second->state = PLAYERSPELL_UNCHANGED; else if(itr->second->state != PLAYERSPELL_NEW) itr->second->state = PLAYERSPELL_CHANGED; @@ -2607,7 +2612,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, default: // known not saved yet spell (new or modified) { // can be in case spell loading but learned at some previous spell loading - if(loading && !learning) + if(!IsInWorld() && !learning) itr->second->state = PLAYERSPELL_UNCHANGED; return false; @@ -2640,8 +2645,8 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, // non talent spell: learn low ranks (recursive call) else if(uint32 prev_spell = spellmgr.GetPrevSpellInChain(spell_id)) { - if(loading) // at spells loading, no output, but allow save - addSpell(prev_spell,active,true,loading,SPELL_WITHOUT_SLOT_ID,disabled); + if(!IsInWorld()) // at spells loading, no output, but allow save + addSpell(prev_spell,active,true,disabled); else // at normal learning learnSpell(prev_spell); } @@ -2666,7 +2671,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, { if(spellmgr.IsHighRankOfSpell(spell_id,itr->first)) { - if(!loading) // not send spell (re-/over-)learn packets at loading + if(IsInWorld()) // not send spell (re-/over-)learn packets at loading { WorldPacket data(SMSG_SUPERCEDED_SPELL, (4)); data << uint16(itr->first); @@ -2681,7 +2686,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, } else if(spellmgr.IsHighRankOfSpell(itr->first,spell_id)) { - if(!loading) // not send spell (re-/over-)learn packets at loading + if(IsInWorld()) // not send spell (re-/over-)learn packets at loading { WorldPacket data(SMSG_SUPERCEDED_SPELL, (4)); data << uint16(spell_id); @@ -2699,23 +2704,6 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, } } - uint16 tmpslot=slot_id; - - if (tmpslot == SPELL_WITHOUT_SLOT_ID) - { - uint16 maxid = 0; - PlayerSpellMap::iterator itr; - for (itr = m_spells.begin(); itr != m_spells.end(); ++itr) - { - if(itr->second->state == PLAYERSPELL_REMOVED) - continue; - if (itr->second->slotId > maxid) - maxid = itr->second->slotId; - } - tmpslot = maxid + 1; - } - - newspell->slotId = tmpslot; m_spells[spell_id] = newspell; // return false if spell disabled @@ -2735,23 +2723,27 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, // also cast passive spells (including all talents without SPELL_EFFECT_LEARN_SPELL) with additional checks else if (IsPassiveSpell(spell_id)) { - // if spell doesn't require a stance or the player is in the required stance - if( ( !spellInfo->Stances && - spell_id != 5420 && spell_id != 5419 && spell_id != 7376 && - spell_id != 7381 && spell_id != 21156 && spell_id != 21009 && - spell_id != 21178 && spell_id != 33948 && spell_id != 40121 ) || - m_form != 0 && (spellInfo->Stances & (1<<(m_form-1))) || - (spell_id == 5420 && m_form == FORM_TREE) || - (spell_id == 5419 && m_form == FORM_TRAVEL) || - (spell_id == 7376 && m_form == FORM_DEFENSIVESTANCE) || - (spell_id == 7381 && m_form == FORM_BERSERKERSTANCE) || - (spell_id == 21156 && m_form == FORM_BATTLESTANCE)|| - (spell_id == 21178 && (m_form == FORM_BEAR || m_form == FORM_DIREBEAR) ) || - (spell_id == 33948 && m_form == FORM_FLIGHT) || - (spell_id == 40121 && m_form == FORM_FLIGHT_EPIC) ) + bool need_cast = false; + + switch(spell_id) + { + // some spells not have stance data expacted cast at form change or present + case 5420: need_cast = (m_form == FORM_TREE); break; + case 5419: need_cast = (m_form == FORM_TRAVEL); break; + case 7376: need_cast = (m_form == FORM_DEFENSIVESTANCE); break; + case 7381: need_cast = (m_form == FORM_BERSERKERSTANCE); break; + case 21156: need_cast = (m_form == FORM_BATTLESTANCE); break; + case 21178: need_cast = (m_form == FORM_BEAR || m_form == FORM_DIREBEAR); break; + case 33948: need_cast = (m_form == FORM_FLIGHT); break; + case 34764: need_cast = (m_form == FORM_FLIGHT); break; + case 40121: need_cast = (m_form == FORM_FLIGHT_EPIC); break; + case 40122: need_cast = (m_form == FORM_FLIGHT_EPIC); break; + // another spells have proper stance data + default: need_cast = !spellInfo->Stances || m_form != 0 && (spellInfo->Stances & (1<<(m_form-1))); break; + } //Check CasterAuraStates - if (!spellInfo->CasterAuraState || HasAuraState(AuraState(spellInfo->CasterAuraState))) - CastSpell(this, spell_id, true); + if (need_cast && (!spellInfo->CasterAuraState || HasAuraState(AuraState(spellInfo->CasterAuraState)))) + CastSpell(this, spell_id, true); } else if( IsSpellHaveEffect(spellInfo,SPELL_EFFECT_SKILL_STEP) ) { @@ -2834,14 +2826,14 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, { if(!itr->second.autoLearned) { - if(loading) // at spells loading, no output, but allow save - addSpell(itr->second.spell,true,true,loading); + if(!IsInWorld() || !itr->second.active) // at spells loading, no output, but allow save + addSpell(itr->second.spell,itr->second.active,true,false); else // at normal learning learnSpell(itr->second.spell); } } - if(!loading) + if(IsInWorld()) { GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL); GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS); @@ -2858,7 +2850,7 @@ void Player::learnSpell(uint32 spell_id) bool disabled = (itr != m_spells.end()) ? itr->second->disabled : false; bool active = disabled ? itr->second->active : true; - bool learning = addSpell(spell_id,active); + bool learning = addSpell(spell_id,active,true,false); // learn all disabled higher ranks (recursive) SpellChainMapNext const& nextMap = spellmgr.GetSpellChainNext(); @@ -2869,8 +2861,8 @@ void Player::learnSpell(uint32 spell_id) learnSpell(i->second); } - // prevent duplicated entires in spell book - if(!learning) + // prevent duplicated entires in spell book, also not send if not in world (loading) + if(!learning || !IsInWorld ()) return; WorldPacket data(SMSG_LEARNED_SPELL, 4); @@ -3008,6 +3000,8 @@ void Player::removeSpell(uint32 spell_id, bool disabled) for(SpellLearnSpellMap::const_iterator itr2 = spell_begin; itr2 != spell_end; ++itr2) removeSpell(itr2->second.spell, disabled); + + // TODO: recast if need lesser ranks spell for passive with IsPassiveSpellStackableWithRanks } void Player::RemoveArenaSpellCooldowns() @@ -4837,22 +4831,8 @@ void Player::UpdateWeaponSkill (WeaponAttackType attType) UpdateAllCritPercentages(); } -void Player::UpdateCombatSkills(Unit *pVictim, WeaponAttackType attType, MeleeHitOutcome outcome, bool defence) +void Player::UpdateCombatSkills(Unit *pVictim, WeaponAttackType attType, bool defence) { -/* Not need, this checked on call this func from trigger system - switch(outcome) - { - case MELEE_HIT_CRIT: - case MELEE_HIT_DODGE: - case MELEE_HIT_PARRY: - case MELEE_HIT_BLOCK: - case MELEE_HIT_BLOCK_CRIT: - return; - - default: - break; - } -*/ uint32 plevel = getLevel(); // if defense than pVictim == attacker uint32 greylevel = MaNGOS::XP::GetGrayLevel(plevel); uint32 moblevel = pVictim->getLevelForTarget(this); @@ -5325,7 +5305,7 @@ void Player::CheckExploreSystem() if (isInFlight()) return; - uint16 areaFlag=MapManager::Instance().GetBaseMap(GetMapId())->GetAreaFlag(GetPositionX(),GetPositionY()); + uint16 areaFlag=MapManager::Instance().GetBaseMap(GetMapId())->GetAreaFlag(GetPositionX(),GetPositionY(),GetPositionZ()); if(areaFlag==0xffff) return; int offset = areaFlag / 32; @@ -6167,16 +6147,17 @@ uint32 Player::GetZoneIdFromDB(uint64 guid) if (!zone) { // stored zone is zero, use generic and slow zone detection - result = CharacterDatabase.PQuery("SELECT map,position_x,position_y FROM characters WHERE guid='%u'", guidLow); + result = CharacterDatabase.PQuery("SELECT map,position_x,position_y,position_z FROM characters WHERE guid='%u'", guidLow); if( !result ) return 0; fields = result->Fetch(); uint32 map = fields[0].GetUInt32(); float posx = fields[1].GetFloat(); float posy = fields[2].GetFloat(); + float posz = fields[3].GetFloat(); delete result; - zone = MapManager::Instance().GetZoneId(map,posx,posy); + zone = MapManager::Instance().GetZoneId(map,posx,posy,posz); CharacterDatabase.PExecute("UPDATE characters SET zone='%u' WHERE guid='%u'", zone, guidLow); } @@ -6195,14 +6176,14 @@ void Player::UpdateArea(uint32 newArea) if(area && (area->flags & AREA_FLAG_ARENA)) { if(!isGameMaster()) - SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_FFA_PVP); + SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); } else { // remove ffa flag only if not ffapvp realm // removal in sanctuaries and capitals is handled in zone update - if(HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_FFA_PVP) && !sWorld.IsFFAPvPRealm()) - RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_FFA_PVP); + if(HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP) && !sWorld.IsFFAPvPRealm()) + RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); } UpdateAreaDependentAuras(newArea); @@ -6258,7 +6239,7 @@ void Player::UpdateZone(uint32 newZone) { SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY); if(sWorld.IsFFAPvPRealm()) - RemoveFlag(PLAYER_FLAGS,PLAYER_FLAGS_FFA_PVP); + RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); } else { @@ -6272,7 +6253,7 @@ void Player::UpdateZone(uint32 newZone) InnEnter(time(0),GetMapId(),0,0,0); if(sWorld.IsFFAPvPRealm()) - RemoveFlag(PLAYER_FLAGS,PLAYER_FLAGS_FFA_PVP); + RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); } else // anywhere else { @@ -6286,7 +6267,7 @@ void Player::UpdateZone(uint32 newZone) SetRestType(REST_TYPE_NO); if(sWorld.IsFFAPvPRealm()) - SetFlag(PLAYER_FLAGS,PLAYER_FLAGS_FFA_PVP); + SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); } } else // not in tavern (leave city then) @@ -6296,7 +6277,7 @@ void Player::UpdateZone(uint32 newZone) // Set player to FFA PVP when not in rested environment. if(sWorld.IsFFAPvPRealm()) - SetFlag(PLAYER_FLAGS,PLAYER_FLAGS_FFA_PVP); + SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); } } } @@ -7139,7 +7120,7 @@ void Player::RemovedInsignia(Player* looterPlr) // We have to convert player corpse to bones, not to be able to resurrect there // SpawnCorpseBones isn't handy, 'cos it saves player while he in BG - Corpse *bones = ObjectAccessor::Instance().ConvertCorpseForPlayer(GetGUID()); + Corpse *bones = ObjectAccessor::Instance().ConvertCorpseForPlayer(GetGUID(),true); if (!bones) return; @@ -7514,37 +7495,46 @@ void Player::SendInitWorldStates() case 1537: case 2257: case 2918: - NumberOfFields = 6; + NumberOfFields = 8; + break; + case 139: + NumberOfFields = 41; + break; + case 1377: + NumberOfFields = 15; break; case 2597: - NumberOfFields = 81; + NumberOfFields = 83; break; case 3277: - NumberOfFields = 14; + NumberOfFields = 16; break; case 3358: case 3820: - NumberOfFields = 38; + NumberOfFields = 40; break; case 3483: - NumberOfFields = 22; + NumberOfFields = 27; + break; + case 3518: + NumberOfFields = 39; break; case 3519: - NumberOfFields = 36; + NumberOfFields = 38; break; case 3521: - NumberOfFields = 35; + NumberOfFields = 37; break; case 3698: case 3702: case 3968: - NumberOfFields = 9; + NumberOfFields = 11; break; case 3703: - NumberOfFields = 9; + NumberOfFields = 11; break; default: - NumberOfFields = 10; + NumberOfFields = 12; break; } @@ -7559,6 +7549,10 @@ void Player::SendInitWorldStates() data << uint32(0x8d5) << uint32(0x0); // 4 data << uint32(0x8d4) << uint32(0x0); // 5 data << uint32(0x8d3) << uint32(0x0); // 6 + // 7 1 - Arena season in progress, 0 - end of season + data << uint32(0xC77) << uint32(sWorld.getConfig(CONFIG_ARENA_SEASON_IN_PROGRESS)); + // 8 Arena season id + data << uint32(0xF3D) << uint32(sWorld.getConfig(CONFIG_ARENA_SEASON_ID)); if(mapid == 530) // Outland { data << uint32(0x9bf) << uint32(0x0); // 7 @@ -8599,12 +8593,12 @@ uint8 Player::_CanTakeMoreSimilarItems(uint32 entry, uint32 count, Item* pItem, } // no maximum - if(pProto->MaxCount == 0) + if(pProto->MaxCount <= 0) return EQUIP_ERR_OK; uint32 curcount = GetItemCount(pProto->ItemId,true,pItem); - if( curcount + count > pProto->MaxCount ) + if (curcount + count > uint32(pProto->MaxCount)) { if(no_space_count) *no_space_count = count +curcount - pProto->MaxCount; @@ -8663,16 +8657,16 @@ uint8 Player::_CanStoreItem_InSpecificSlot( uint8 bag, uint8 slot, ItemPosCountV if(slot >= KEYRING_SLOT_START && slot < KEYRING_SLOT_START+GetMaxKeyringSize() && !(pProto->BagFamily & BAG_FAMILY_MASK_KEYS)) return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; - // vanitypet case - if(slot >= VANITYPET_SLOT_START && slot < VANITYPET_SLOT_END && !(pProto->BagFamily & BAG_FAMILY_MASK_VANITY_PETS)) + // vanitypet case (disabled until proper implement) + if(slot >= VANITYPET_SLOT_START && slot < VANITYPET_SLOT_END && !(false /*pProto->BagFamily & BAG_FAMILY_MASK_VANITY_PETS*/)) return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; - // currencytoken case - if(slot >= CURRENCYTOKEN_SLOT_START && slot < CURRENCYTOKEN_SLOT_END && !(pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS)) + // currencytoken case (disabled until proper implement) + if(slot >= CURRENCYTOKEN_SLOT_START && slot < CURRENCYTOKEN_SLOT_END && !(false /*pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS*/)) return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; - // guestbag case - if(slot >= QUESTBAG_SLOT_START && slot < QUESTBAG_SLOT_END && !(pProto->BagFamily & BAG_FAMILY_MASK_QUEST_ITEMS)) + // guestbag case (disabled until proper implement) + if(slot >= QUESTBAG_SLOT_START && slot < QUESTBAG_SLOT_END && !(false /*pProto->BagFamily & BAG_FAMILY_MASK_QUEST_ITEMS*/)) return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; // prevent cheating @@ -8694,7 +8688,7 @@ uint8 Player::_CanStoreItem_InSpecificSlot( uint8 bag, uint8 slot, ItemPosCountV } // non empty stack with space - need_space = pProto->Stackable; + need_space = pProto->GetMaxStackSize(); } // non empty slot, check item type else @@ -8704,10 +8698,11 @@ uint8 Player::_CanStoreItem_InSpecificSlot( uint8 bag, uint8 slot, ItemPosCountV return EQUIP_ERR_ITEM_CANT_STACK; // check free space - if(pItem2->GetCount() >= pProto->Stackable) + if(pItem2->GetCount() >= pProto->GetMaxStackSize()) return EQUIP_ERR_ITEM_CANT_STACK; - need_space = pProto->Stackable - pItem2->GetCount(); + // free stack space or infinity + need_space = pProto->GetMaxStackSize() - pItem2->GetCount(); } if(need_space > count) @@ -8761,9 +8756,9 @@ uint8 Player::_CanStoreItem_InBag( uint8 bag, ItemPosCountVec &dest, ItemPrototy if( pItem2 ) { - if(pItem2->GetEntry() == pProto->ItemId && pItem2->GetCount() < pProto->Stackable ) + if(pItem2->GetEntry() == pProto->ItemId && pItem2->GetCount() < pProto->GetMaxStackSize()) { - uint32 need_space = pProto->Stackable - pItem2->GetCount(); + uint32 need_space = pProto->GetMaxStackSize() - pItem2->GetCount(); if(need_space > count) need_space = count; @@ -8780,7 +8775,7 @@ uint8 Player::_CanStoreItem_InBag( uint8 bag, ItemPosCountVec &dest, ItemPrototy } else { - uint32 need_space = pProto->Stackable; + uint32 need_space = pProto->GetMaxStackSize(); if(need_space > count) need_space = count; @@ -8818,9 +8813,9 @@ uint8 Player::_CanStoreItem_InInventorySlots( uint8 slot_begin, uint8 slot_end, if( pItem2 ) { - if(pItem2->GetEntry() == pProto->ItemId && pItem2->GetCount() < pProto->Stackable ) + if(pItem2->GetEntry() == pProto->ItemId && pItem2->GetCount() < pProto->GetMaxStackSize()) { - uint32 need_space = pProto->Stackable - pItem2->GetCount(); + uint32 need_space = pProto->GetMaxStackSize() - pItem2->GetCount(); if(need_space > count) need_space = count; ItemPosCount newPosition = ItemPosCount((INVENTORY_SLOT_BAG_0 << 8) | j, need_space); @@ -8836,7 +8831,7 @@ uint8 Player::_CanStoreItem_InInventorySlots( uint8 slot_begin, uint8 slot_end, } else { - uint32 need_space = pProto->Stackable; + uint32 need_space = pProto->GetMaxStackSize(); if(need_space > count) need_space = count; @@ -8915,7 +8910,7 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 if( bag != NULL_BAG ) { // search stack in bag for merge to - if( pProto->Stackable > 1 ) + if( pProto->Stackable != 1 ) { if( bag == INVENTORY_SLOT_BAG_0 ) // inventory { @@ -9006,6 +9001,7 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; } } + /* until proper implementation else if(pProto->BagFamily & BAG_FAMILY_MASK_VANITY_PETS) { res = _CanStoreItem_InInventorySlots(VANITYPET_SLOT_START,VANITYPET_SLOT_END,dest,pProto,count,false,pItem,bag,slot); @@ -9026,6 +9022,8 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; } } + */ + /* until proper implementation else if(pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS) { res = _CanStoreItem_InInventorySlots(CURRENCYTOKEN_SLOT_START,CURRENCYTOKEN_SLOT_END,dest,pProto,count,false,pItem,bag,slot); @@ -9046,6 +9044,8 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; } } + */ + /* until proper implementation else if(pProto->BagFamily & BAG_FAMILY_MASK_QUEST_ITEMS) { res = _CanStoreItem_InInventorySlots(QUESTBAG_SLOT_START,QUESTBAG_SLOT_END,dest,pProto,count,false,pItem,bag,slot); @@ -9066,6 +9066,7 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; } } + */ res = _CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START,INVENTORY_SLOT_ITEM_END,dest,pProto,count,false,pItem,bag,slot); if(res!=EQUIP_ERR_OK) @@ -9113,7 +9114,7 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 // not specific bag or have space for partly store only in specific bag // search stack for merge to - if( pProto->Stackable > 1 ) + if( pProto->Stackable != 1 ) { res = _CanStoreItem_InInventorySlots(KEYRING_SLOT_START,QUESTBAG_SLOT_END,dest,pProto,count,true,pItem,bag,slot); if(res!=EQUIP_ERR_OK) @@ -9213,7 +9214,8 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; } } - else if(pProto->BagFamily & BAG_FAMILY_MASK_VANITY_PETS) + /* until proper implementation + else if(false pProto->BagFamily & BAG_FAMILY_MASK_VANITY_PETS) { res = _CanStoreItem_InInventorySlots(VANITYPET_SLOT_START,VANITYPET_SLOT_END,dest,pProto,count,false,pItem,bag,slot); if(res!=EQUIP_ERR_OK) @@ -9233,7 +9235,9 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; } } - else if(pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS) + */ + /* until proper implementation + else if(false pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS) { res = _CanStoreItem_InInventorySlots(CURRENCYTOKEN_SLOT_START,CURRENCYTOKEN_SLOT_END,dest,pProto,count,false,pItem,bag,slot); if(res!=EQUIP_ERR_OK) @@ -9253,7 +9257,9 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; } } - else if(pProto->BagFamily & BAG_FAMILY_MASK_QUEST_ITEMS) + */ + /* until proper implementation + else if(false pProto->BagFamily & BAG_FAMILY_MASK_QUEST_ITEMS) { res = _CanStoreItem_InInventorySlots(QUESTBAG_SLOT_START,QUESTBAG_SLOT_END,dest,pProto,count,false,pItem,bag,slot); if(res!=EQUIP_ERR_OK) @@ -9273,6 +9279,7 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; } } + */ for(int i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++) { @@ -9447,14 +9454,14 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const return res; // search stack for merge to - if( pProto->Stackable > 1 ) + if( pProto->Stackable != 1 ) { bool b_found = false; for(int t = KEYRING_SLOT_START; t < KEYRING_SLOT_END; t++) { pItem2 = GetItemByPos( INVENTORY_SLOT_BAG_0, t ); - if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_keys[t-KEYRING_SLOT_START] + pItem->GetCount() <= pProto->Stackable ) + if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_keys[t-KEYRING_SLOT_START] + pItem->GetCount() <= pProto->GetMaxStackSize()) { inv_keys[t-KEYRING_SLOT_START] += pItem->GetCount(); b_found = true; @@ -9466,7 +9473,7 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const for(int t = VANITYPET_SLOT_START; t < VANITYPET_SLOT_END; t++) { pItem2 = GetItemByPos( INVENTORY_SLOT_BAG_0, t ); - if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_pets[t-VANITYPET_SLOT_START] + pItem->GetCount() <= pProto->Stackable ) + if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_pets[t-VANITYPET_SLOT_START] + pItem->GetCount() <= pProto->GetMaxStackSize()) { inv_pets[t-VANITYPET_SLOT_START] += pItem->GetCount(); b_found = true; @@ -9478,7 +9485,7 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const for(int t = CURRENCYTOKEN_SLOT_START; t < CURRENCYTOKEN_SLOT_END; t++) { pItem2 = GetItemByPos( INVENTORY_SLOT_BAG_0, t ); - if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_tokens[t-CURRENCYTOKEN_SLOT_START] + pItem->GetCount() <= pProto->Stackable ) + if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_tokens[t-CURRENCYTOKEN_SLOT_START] + pItem->GetCount() <= pProto->GetMaxStackSize()) { inv_tokens[t-CURRENCYTOKEN_SLOT_START] += pItem->GetCount(); b_found = true; @@ -9490,7 +9497,7 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const for(int t = QUESTBAG_SLOT_START; t < QUESTBAG_SLOT_END; t++) { pItem2 = GetItemByPos( INVENTORY_SLOT_BAG_0, t ); - if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_quests[t-QUESTBAG_SLOT_START] + pItem->GetCount() <= pProto->Stackable ) + if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_quests[t-QUESTBAG_SLOT_START] + pItem->GetCount() <= pProto->GetMaxStackSize()) { inv_quests[t-QUESTBAG_SLOT_START] += pItem->GetCount(); b_found = true; @@ -9502,7 +9509,7 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const for(int t = INVENTORY_SLOT_ITEM_START; t < INVENTORY_SLOT_ITEM_END; t++) { pItem2 = GetItemByPos( INVENTORY_SLOT_BAG_0, t ); - if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_slot_items[t-INVENTORY_SLOT_ITEM_START] + pItem->GetCount() <= pProto->Stackable ) + if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_slot_items[t-INVENTORY_SLOT_ITEM_START] + pItem->GetCount() <= pProto->GetMaxStackSize()) { inv_slot_items[t-INVENTORY_SLOT_ITEM_START] += pItem->GetCount(); b_found = true; @@ -9519,7 +9526,7 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const for(uint32 j = 0; j < pBag->GetBagSize(); j++) { pItem2 = GetItemByPos( t, j ); - if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_bags[t-INVENTORY_SLOT_BAG_START][j] + pItem->GetCount() <= pProto->Stackable ) + if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_bags[t-INVENTORY_SLOT_BAG_START][j] + pItem->GetCount() <= pProto->GetMaxStackSize()) { inv_bags[t-INVENTORY_SLOT_BAG_START][j] += pItem->GetCount(); b_found = true; @@ -9551,6 +9558,7 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const if (b_found) continue; + /* until proper implementation if(pProto->BagFamily & BAG_FAMILY_MASK_VANITY_PETS) { for(uint32 t = VANITYPET_SLOT_START; t < VANITYPET_SLOT_END; ++t) @@ -9565,7 +9573,8 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const } if (b_found) continue; - + */ + /* until proper implementation if(pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS) { for(uint32 t = CURRENCYTOKEN_SLOT_START; t < CURRENCYTOKEN_SLOT_END; ++t) @@ -9580,7 +9589,8 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const } if (b_found) continue; - + */ + /* until proper implementation if(pProto->BagFamily & BAG_FAMILY_MASK_QUEST_ITEMS) { for(uint32 t = QUESTBAG_SLOT_START; t < QUESTBAG_SLOT_END; ++t) @@ -9595,6 +9605,7 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const } if (b_found) continue; + */ for(int t = INVENTORY_SLOT_BAG_START; !b_found && t < INVENTORY_SLOT_BAG_END; t++) { @@ -9934,7 +9945,7 @@ uint8 Player::CanBankItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, Item *p } // search stack in bag for merge to - if( pProto->Stackable > 1 ) + if( pProto->Stackable != 1 ) { if( bag == INVENTORY_SLOT_BAG_0 ) { @@ -9986,7 +9997,7 @@ uint8 Player::CanBankItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, Item *p // not specific bag or have space for partly store only in specific bag // search stack for merge to - if( pProto->Stackable > 1 ) + if( pProto->Stackable != 1 ) { // in slots res = _CanStoreItem_InInventorySlots(BANK_SLOT_ITEM_START,BANK_SLOT_ITEM_END,dest,pProto,count,true,pItem,bag,slot); @@ -11174,7 +11185,7 @@ void Player::SwapItem( uint16 src, uint16 dst ) // can be merge/fill if(msg == EQUIP_ERR_OK) { - if( pSrcItem->GetCount() + pDstItem->GetCount() <= pSrcItem->GetProto()->Stackable ) + if( pSrcItem->GetCount() + pDstItem->GetCount() <= pSrcItem->GetProto()->GetMaxStackSize()) { RemoveItem(srcbag, srcslot, true); @@ -11190,8 +11201,8 @@ void Player::SwapItem( uint16 src, uint16 dst ) } else { - pSrcItem->SetCount( pSrcItem->GetCount() + pDstItem->GetCount() - pSrcItem->GetProto()->Stackable ); - pDstItem->SetCount( pSrcItem->GetProto()->Stackable ); + pSrcItem->SetCount( pSrcItem->GetCount() + pDstItem->GetCount() - pSrcItem->GetProto()->GetMaxStackSize()); + pDstItem->SetCount( pSrcItem->GetProto()->GetMaxStackSize()); pSrcItem->SetState(ITEM_CHANGED, this); pDstItem->SetState(ITEM_CHANGED, this); if( IsInWorld() ) @@ -13887,7 +13898,6 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) uint32 transGUID = fields[24].GetUInt32(); Relocate(fields[6].GetFloat(),fields[7].GetFloat(),fields[8].GetFloat(),fields[10].GetFloat()); - SetFallInformation(0, fields[8].GetFloat()); SetMapId(fields[9].GetUInt32()); SetDifficulty(fields[32].GetUInt32()); // may be changed in _LoadGroup @@ -13940,6 +13950,16 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) // getmap calls won't create new maps SetInstanceId(map->GetInstanceId()); + // if the player is in an instance and it has been reset in the meantime teleport him to the entrance + if(GetInstanceId() && !sInstanceSaveManager.GetInstanceSave(GetInstanceId())) + { + AreaTrigger const* at = objmgr.GetMapEntranceTrigger(GetMapId()); + if(at) + Relocate(at->target_X, at->target_Y, at->target_Z, at->target_Orientation); + else + sLog.outError("Player %s(GUID: %u) logged in to a reset instance (map: %u) and there is no aretrigger leading to this map. Thus he can't be ported back to the entrance. This _might_ be an exploit attempt.", GetName(), GetGUIDLow(), GetMapId()); + } + SaveRecallPosition(); if (transGUID != 0) @@ -14141,6 +14161,8 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) // after spell load InitTalentForLevel(); learnSkillRewardedSpells(); + learnDefaultSpells(); + // after spell load, learn rewarded spell if need also _LoadQuestStatus(holder->GetResult(PLAYER_LOGIN_QUERY_LOADQUESTSTATUS)); @@ -14211,6 +14233,9 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) // flight will started later } + // has to be called after last Relocate() in Player::LoadFromDB + SetFallInformation(0, GetPositionZ()); + _LoadSpellCooldowns(holder->GetResult(PLAYER_LOGIN_QUERY_LOADSPELLCOOLDOWNS)); // Spell code allow apply any auras to dead character in load time in aura/spell/item loading @@ -14380,7 +14405,7 @@ void Player::_LoadAuras(QueryResult *result, uint32 timediff) remaincharges = spellproto->procCharges; } else - remaincharges = -1; + remaincharges = 0; //do not load single target auras (unless they were cast by the player) if (caster_guid != GetGUID() && IsSingleTargetSpell(spellproto)) @@ -14905,7 +14930,7 @@ void Player::_LoadSpells(QueryResult *result) delete itr->second; m_spells.clear(); - //QueryResult *result = CharacterDatabase.PQuery("SELECT spell,slot,active FROM character_spell WHERE guid = '%u'",GetGUIDLow()); + //QueryResult *result = CharacterDatabase.PQuery("SELECT spell,active,disabled FROM character_spell WHERE guid = '%u'",GetGUIDLow()); if(result) { @@ -14913,7 +14938,7 @@ void Player::_LoadSpells(QueryResult *result) { Field *fields = result->Fetch(); - addSpell(fields[0].GetUInt16(), fields[2].GetBool(), false, true, fields[1].GetUInt16(), fields[3].GetBool()); + addSpell(fields[0].GetUInt16(), fields[1].GetBool(), false, fields[2].GetBool()); } while( result->NextRow() ); @@ -15306,12 +15331,11 @@ void Player::SaveToDB() ss << GetUInt32Value(i) << " "; } - ss << "', '"; - - for( i = 0; i < 8; i++ ) - ss << m_taxi.GetTaximask(i) << " "; - ss << "', "; + + ss << m_taxi; // string with TaxiMaskSize numbers + + ss << ", "; ss << (inworld ? 1 : 0); ss << ", "; @@ -15471,7 +15495,7 @@ void Player::_SaveAuras() { CharacterDatabase.PExecute("INSERT INTO character_aura (guid,caster_guid,spell,effect_index,stackcount,amount,maxduration,remaintime,remaincharges) " "VALUES ('%u', '" I64FMTD "' ,'%u', '%u', '%u', '%d', '%d', '%d', '%d')", - GetGUIDLow(), itr2->second->GetCasterGUID(), (uint32)itr2->second->GetId(), (uint32)itr2->second->GetEffIndex(), stackCounter, itr2->second->GetModifier()->m_amount,int(itr2->second->GetAuraMaxDuration()),int(itr2->second->GetAuraDuration()),int(itr2->second->m_procCharges)); + GetGUIDLow(), itr2->second->GetCasterGUID(), (uint32)itr2->second->GetId(), (uint32)itr2->second->GetEffIndex(), stackCounter, itr2->second->GetModifier()->m_amount,int(itr2->second->GetAuraMaxDuration()),int(itr2->second->GetAuraDuration()),int(itr2->second->GetAuraCharges())); } } } @@ -15677,7 +15701,7 @@ void Player::_SaveSpells() if (itr->second->state == PLAYERSPELL_REMOVED || itr->second->state == PLAYERSPELL_CHANGED) CharacterDatabase.PExecute("DELETE FROM character_spell WHERE guid = '%u' and spell = '%u'", GetGUIDLow(), itr->first); if (itr->second->state == PLAYERSPELL_NEW || itr->second->state == PLAYERSPELL_CHANGED) - CharacterDatabase.PExecute("INSERT INTO character_spell (guid,spell,slot,active,disabled) VALUES ('%u', '%u', '%u','%u','%u')", GetGUIDLow(), itr->first, itr->second->slotId,itr->second->active ? 1 : 0,itr->second->disabled ? 1 : 0); + CharacterDatabase.PExecute("INSERT INTO character_spell (guid,spell,active,disabled) VALUES ('%u', '%u', '%u', '%u')", GetGUIDLow(), itr->first, itr->second->active ? 1 : 0,itr->second->disabled ? 1 : 0); if (itr->second->state == PLAYERSPELL_REMOVED) _removeSpell(itr->first); @@ -17886,22 +17910,18 @@ void Player::resetSpells() learnQuestRewardedSpells(); } -void Player::learnDefaultSpells(bool loading) +void Player::learnDefaultSpells() { // learn default race/class spells PlayerInfo const *info = objmgr.GetPlayerInfo(getRace(),getClass()); - std::list::const_iterator spell_itr; - for (spell_itr = info->spell.begin(); spell_itr!=info->spell.end(); ++spell_itr) + for (PlayerCreateInfoSpells::const_iterator itr = info->spell.begin(); itr!=info->spell.end(); ++itr) { - uint16 tspell = spell_itr->first; - if (tspell) - { - sLog.outDebug("PLAYER: Adding initial spell, id = %u",tspell); - if(loading || !spell_itr->second) // not care about passive spells or loading case - addSpell(tspell,spell_itr->second); - else // but send in normal spell in game learn case - learnSpell(tspell); - } + uint32 tspell = *itr; + sLog.outDebug("PLAYER (Class: %u Race: %u): Adding initial spell, id = %u",uint32(getClass()),uint32(getRace()), tspell); + if(!IsInWorld()) // will send in INITIAL_SPELLS in list anyway at map add + addSpell(tspell,true,true,false); + else // but send in normal spell in game learn case + learnSpell(tspell); } } @@ -18056,7 +18076,7 @@ void Player::SendAurasForTarget(Unit *target) // level data << uint8(aura->GetAuraLevel()); // charges - data << uint8(aura->m_procCharges >= 0 ? aura->m_procCharges : 0 ); + data << uint8(aura->GetAuraCharges()); if(!(auraFlags & AFLAG_NOT_CASTER)) { @@ -18668,25 +18688,34 @@ void Player::UpdateAreaDependentAuras( uint32 newArea ) for(AuraMap::iterator iter = m_Auras.begin(); iter != m_Auras.end();) { // use m_zoneUpdateId for speed: UpdateArea called from UpdateZone or instead UpdateZone in both cases m_zoneUpdateId up-to-date - if(!IsSpellAllowedInLocation(iter->second->GetSpellProto(),GetMapId(),m_zoneUpdateId,newArea)) + if(GetSpellAllowedInLocationError(iter->second->GetSpellProto(),GetMapId(),m_zoneUpdateId,newArea)!=0) RemoveAura(iter); else ++iter; } - // unmount if enter in this subzone - if( newArea == 35) - RemoveSpellsCausingAura(SPELL_AURA_MOUNTED); - // Dragonmaw Illusion - else if( newArea == 3759 || newArea == 3966 || newArea == 3939 ) + // some auras applied at subzone enter + switch(newArea) { - if( GetDummyAura(40214) ) - { - if( !HasAura(40216,0) ) - CastSpell(this,40216,true); - if( !HasAura(42016,0) ) - CastSpell(this,42016,true); - } + // Dragonmaw Illusion + case 3759: // Netherwing Ledge + case 3939: // Dragonmaw Fortress + case 3966: // Dragonmaw Base Camp + if( GetDummyAura(40214) ) + { + if( !HasAura(40216,0) ) + CastSpell(this,40216,true); + if( !HasAura(42016,0) ) + CastSpell(this,42016,true); + } + break; + // Dominion Over Acherus + case 4281: // Acherus: The Ebon Hold + case 4342: // Acherus: The Ebon Hold + if( HasSpell(51721) ) + if( !HasAura(51721,0) ) + CastSpell(this,51721,true); + break; } } @@ -18899,6 +18928,11 @@ uint32 Player::GetBarberShopCost(uint8 newhairstyle, uint8 newhaircolor, uint8 n void Player::InitGlyphsForLevel() { + for(uint32 i = 0; i < sGlyphSlotStore.GetNumRows(); ++i) + if(GlyphSlotEntry const * gs = sGlyphSlotStore.LookupEntry(i)) + if(gs->Order) + SetGlyphSlot(gs->Order - 1, gs->Id); + uint32 level = getLevel(); uint32 value = 0; diff --git a/src/game/Player.h b/src/game/Player.h index 60200d892..659f70bb8 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -72,14 +72,11 @@ enum PlayerSpellState struct PlayerSpell { - uint16 slotId : 16; PlayerSpellState state : 8; bool active : 1; bool disabled : 1; }; -#define SPELL_WITHOUT_SLOT_ID uint16(-1) - // Spell modifier (used for modify other spells) struct SpellModifier { @@ -143,8 +140,6 @@ enum ActionButtonType typedef std::map ActionButtonList; -typedef std::pair CreateSpellPair; - struct PlayerCreateInfoItem { PlayerCreateInfoItem(uint32 id, uint32 amount) : item_id(id), item_amount(amount) {} @@ -176,6 +171,8 @@ struct PlayerLevelInfo uint8 stats[MAX_STATS]; }; +typedef std::list PlayerCreateInfoSpells; + struct PlayerInfo { // existence checked by displayId != 0 // existence checked by displayId != 0 @@ -191,7 +188,7 @@ struct PlayerInfo uint16 displayId_m; uint16 displayId_f; PlayerCreateInfoItems item; - std::list spell; + PlayerCreateInfoSpells spell; std::list action[4]; PlayerLevelInfo* levelInfo; //[level-1] 0..MaxPlayerLevel-1 @@ -417,16 +414,18 @@ enum PlayerFlags PLAYER_FLAGS_GM = 0x00000008, PLAYER_FLAGS_GHOST = 0x00000010, PLAYER_FLAGS_RESTING = 0x00000020, - PLAYER_FLAGS_FFA_PVP = 0x00000080, + PLAYER_FLAGS_UNK7 = 0x00000040, + PLAYER_FLAGS_UNK8 = 0x00000080, // pre-3.0.3 PLAYER_FLAGS_FFA_PVP flag for FFA PVP state PLAYER_FLAGS_CONTESTED_PVP = 0x00000100, // Player has been involved in a PvP combat and will be attacked by contested guards PLAYER_FLAGS_IN_PVP = 0x00000200, PLAYER_FLAGS_HIDE_HELM = 0x00000400, PLAYER_FLAGS_HIDE_CLOAK = 0x00000800, - PLAYER_FLAGS_UNK1 = 0x00001000, // played long time - PLAYER_FLAGS_UNK2 = 0x00002000, // played too long time - PLAYER_FLAGS_UNK3 = 0x00008000, // strange visual effect (2.0.1), looks like PLAYER_FLAGS_GHOST flag - PLAYER_FLAGS_UNK4 = 0x00010000, // pre-3.0.3 PLAYER_FLAGS_SANCTUARY flag for player entered sanctuary - PLAYER_FLAGS_UNK5 = 0x00020000, // taxi benchmark mode (on/off) (2.0.1) + PLAYER_FLAGS_UNK13 = 0x00001000, // played long time + PLAYER_FLAGS_UNK14 = 0x00002000, // played too long time + PLAYER_FLAGS_UNK15 = 0x00004000, + PLAYER_FLAGS_UNK16 = 0x00008000, // strange visual effect (2.0.1), looks like PLAYER_FLAGS_GHOST flag + PLAYER_FLAGS_UNK17 = 0x00010000, // pre-3.0.3 PLAYER_FLAGS_SANCTUARY flag for player entered sanctuary + PLAYER_FLAGS_UNK18 = 0x00020000, // taxi benchmark mode (on/off) (2.0.1) PLAYER_FLAGS_PVP_TIMER = 0x00040000, // 3.0.2, pvp timer active (after you disable pvp manually) }; @@ -729,10 +728,10 @@ enum QuestBagSlots struct ItemPosCount { - ItemPosCount(uint16 _pos, uint8 _count) : pos(_pos), count(_count) {} + ItemPosCount(uint16 _pos, uint32 _count) : pos(_pos), count(_count) {} bool isContainedIn(std::vector const& vec) const; uint16 pos; - uint8 count; + uint32 count; }; typedef std::vector ItemPosCountVec; @@ -898,9 +897,7 @@ class MANGOS_DLL_SPEC PlayerTaxi // Nodes void InitTaxiNodesForLevel(uint32 race, uint32 chrClass, uint32 level); void LoadTaxiMask(const char* data); - void SaveTaxiMask(const char* data); - uint32 GetTaximask( uint8 index ) const { return m_taximask[index]; } bool IsTaximaskNodeKnown(uint32 nodeidx) const { uint8 field = uint8((nodeidx - 1) / 32); @@ -936,11 +933,15 @@ class MANGOS_DLL_SPEC PlayerTaxi return GetTaxiDestination(); } bool empty() const { return m_TaxiDestinations.empty(); } + + friend std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi); private: TaxiMask m_taximask; std::deque m_TaxiDestinations; }; +std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi); + class MANGOS_DLL_SPEC Player : public Unit { friend class WorldSession; @@ -1466,11 +1467,11 @@ class MANGOS_DLL_SPEC Player : public Unit void SendProficiency(uint8 pr1, uint32 pr2); void SendInitialSpells(); - bool addSpell(uint32 spell_id, bool active, bool learning = true, bool loading = false, uint16 slot_id=SPELL_WITHOUT_SLOT_ID, bool disabled = false); + bool addSpell(uint32 spell_id, bool active, bool learning, bool disabled); void learnSpell(uint32 spell_id); void removeSpell(uint32 spell_id, bool disabled = false); void resetSpells(); - void learnDefaultSpells(bool loading = false); + void learnDefaultSpells(); void learnQuestRewardedSpells(); void learnQuestRewardedSpells(Quest const* quest); @@ -1735,7 +1736,7 @@ class MANGOS_DLL_SPEC Player : public Unit void UpdateDefense(); void UpdateWeaponSkill (WeaponAttackType attType); - void UpdateCombatSkills(Unit *pVictim, WeaponAttackType attType, MeleeHitOutcome outcome, bool defence); + void UpdateCombatSkills(Unit *pVictim, WeaponAttackType attType, bool defence); void SetSkill(uint32 id, uint16 currVal, uint16 maxVal); uint16 GetMaxSkillValue(uint32 skill) const; // max + perm. bonus diff --git a/src/game/PlayerDump.cpp b/src/game/PlayerDump.cpp index b533cab6c..7712ec0f5 100644 --- a/src/game/PlayerDump.cpp +++ b/src/game/PlayerDump.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/PlayerDump.h b/src/game/PlayerDump.h index 5991b7445..37c8f76eb 100644 --- a/src/game/PlayerDump.h +++ b/src/game/PlayerDump.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/PointMovementGenerator.cpp b/src/game/PointMovementGenerator.cpp index 2835ad2f2..5da26c9bf 100644 --- a/src/game/PointMovementGenerator.cpp +++ b/src/game/PointMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/PointMovementGenerator.h b/src/game/PointMovementGenerator.h index 27c6005ad..d21c364d8 100644 --- a/src/game/PointMovementGenerator.h +++ b/src/game/PointMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/QueryHandler.cpp b/src/game/QueryHandler.cpp index 08f4a4db7..f05df8478 100644 --- a/src/game/QueryHandler.cpp +++ b/src/game/QueryHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -289,7 +289,7 @@ void WorldSession::HandleCorpseQueryOpcode(WorldPacket & /*recv_data*/) float z = corpse->GetPositionZ(); int32 corpsemapid = _player->GetMapId(); - if(Map *map = corpse->GetMap()) + if(Map *map = MapManager::Instance().FindMap(corpse->GetMapId(), corpse->GetInstanceId())) { if(map->IsDungeon()) { diff --git a/src/game/QuestDef.cpp b/src/game/QuestDef.cpp index 1e2cd6021..80e65209f 100644 --- a/src/game/QuestDef.cpp +++ b/src/game/QuestDef.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/QuestDef.h b/src/game/QuestDef.h index 8c173fdb7..f29168a49 100644 --- a/src/game/QuestDef.h +++ b/src/game/QuestDef.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/QuestHandler.cpp b/src/game/QuestHandler.cpp index bbb3fa764..72b966e6b 100644 --- a/src/game/QuestHandler.cpp +++ b/src/game/QuestHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -176,7 +176,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode( WorldPacket & recv_data ) bool destroyItem = true; for(int i = 0; i < QUEST_OBJECTIVES_COUNT; i++) { - if ((qInfo->ReqItemId[i] == ((Item*)pObject)->GetEntry()) && (((Item*)pObject)->GetProto()->MaxCount != 0)) + if ((qInfo->ReqItemId[i] == ((Item*)pObject)->GetEntry()) && (((Item*)pObject)->GetProto()->MaxCount > 0)) { destroyItem = false; break; diff --git a/src/game/RandomMovementGenerator.cpp b/src/game/RandomMovementGenerator.cpp index e09b8e8ee..d1d77eea2 100644 --- a/src/game/RandomMovementGenerator.cpp +++ b/src/game/RandomMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/RandomMovementGenerator.h b/src/game/RandomMovementGenerator.h index 83dfecb0d..15df97d01 100644 --- a/src/game/RandomMovementGenerator.h +++ b/src/game/RandomMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ReactorAI.cpp b/src/game/ReactorAI.cpp index a3037cc55..91fa808ed 100644 --- a/src/game/ReactorAI.cpp +++ b/src/game/ReactorAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ReactorAI.h b/src/game/ReactorAI.h index 117156bb5..b0ebacc26 100644 --- a/src/game/ReactorAI.h +++ b/src/game/ReactorAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ScriptCalls.cpp b/src/game/ScriptCalls.cpp index d258ea199..7dd85ee6b 100644 --- a/src/game/ScriptCalls.cpp +++ b/src/game/ScriptCalls.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ScriptCalls.h b/src/game/ScriptCalls.h index d2aafd507..b075693f8 100644 --- a/src/game/ScriptCalls.h +++ b/src/game/ScriptCalls.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 882311934..84b0899ce 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -280,7 +280,7 @@ enum ItemQualities #define SPELL_ATTR_EX2_UNK2 0x00000004 // 2 #define SPELL_ATTR_EX2_UNK3 0x00000008 // 3 #define SPELL_ATTR_EX2_UNK4 0x00000010 // 4 -#define SPELL_ATTR_EX2_UNK5 0x00000020 // 5 +#define SPELL_ATTR_EX2_AUTOREPEAT_FLAG 0x00000020 // 5 #define SPELL_ATTR_EX2_UNK6 0x00000040 // 6 #define SPELL_ATTR_EX2_UNK7 0x00000080 // 7 #define SPELL_ATTR_EX2_UNK8 0x00000100 // 8 not set in 3.0.3 @@ -557,8 +557,8 @@ enum SpellEffects SPELL_EFFECT_DISPEL = 38, SPELL_EFFECT_LANGUAGE = 39, SPELL_EFFECT_DUAL_WIELD = 40, - SPELL_EFFECT_SUMMON_WILD = 41, - SPELL_EFFECT_SUMMON_GUARDIAN = 42, + SPELL_EFFECT_JUMP = 41, + SPELL_EFFECT_JUMP2 = 42, SPELL_EFFECT_TELEPORT_UNITS_FACE_CASTER= 43, SPELL_EFFECT_SKILL_STEP = 44, SPELL_EFFECT_ADD_HONOR = 45, @@ -613,7 +613,7 @@ enum SpellEffects SPELL_EFFECT_SELF_RESURRECT = 94, SPELL_EFFECT_SKINNING = 95, SPELL_EFFECT_CHARGE = 96, - SPELL_EFFECT_SUMMON_CRITTER = 97, + SPELL_EFFECT_97 = 97, SPELL_EFFECT_KNOCK_BACK = 98, SPELL_EFFECT_DISENCHANT = 99, SPELL_EFFECT_INEBRIATE = 100, @@ -628,7 +628,7 @@ enum SpellEffects SPELL_EFFECT_SUMMON_DEAD_PET = 109, SPELL_EFFECT_DESTROY_ALL_TOTEMS = 110, SPELL_EFFECT_DURABILITY_DAMAGE = 111, - SPELL_EFFECT_SUMMON_DEMON = 112, + SPELL_EFFECT_112 = 112, SPELL_EFFECT_RESURRECT_NEW = 113, SPELL_EFFECT_ATTACK_ME = 114, SPELL_EFFECT_DURABILITY_DAMAGE_PCT = 115, @@ -686,26 +686,28 @@ enum AuraState AURA_STATE_DEFENSE = 1, // C | AURA_STATE_HEALTHLESS_20_PERCENT = 2, // CcT | AURA_STATE_BERSERKING = 3, // C T | - //AURA_STATE_UNKNOWN4 = 4, // c t| some limitation to charge spells (?) and target test spells + AURA_STATE_FROZEN = 4, // c t| frozen target AURA_STATE_JUDGEMENT = 5, // C | //AURA_STATE_UNKNOWN6 = 6, // | not used AURA_STATE_HUNTER_PARRY = 7, // C | AURA_STATE_ROGUE_ATTACK_FROM_STEALTH = 7, // C | FIX ME: not implemented yet! - //AURA_STATE_UNKNOWN7c = 7, // c | random/focused bursts spells (?) + //AURA_STATE_UNKNOWN7 = 7, // c | random/focused bursts spells (?) //AURA_STATE_UNKNOWN8 = 8, // | not used //AURA_STATE_UNKNOWN9 = 9, // | not used AURA_STATE_WARRIOR_VICTORY_RUSH = 10, // C | warrior victory rush - AURA_STATE_HUNTER_CRIT_STRIKE = 10, // C | hunter crit strike - AURA_STATE_CRIT = 11, // C | + //AURA_STATE_UNKNOWN11 = 11, // t| AURA_STATE_FAERIE_FIRE = 12, // c t| AURA_STATE_HEALTHLESS_35_PERCENT = 13, // C T | AURA_STATE_IMMOLATE = 14, // T | AURA_STATE_SWIFTMEND = 15, // T | AURA_STATE_DEADLY_POISON = 16, // T | - AURA_STATE_FORBEARANCE = 17, // c t| - AURA_STATE_WEAKENED_SOUL = 18, // t| - AURA_STATE_HYPOTHERMIA = 19, // c | - AURA_STATE_HEALTH_ABOVE_75_PERCENT = 23, // C | not implemented yet + //AURA_STATE_UNKNOWN17 = 17, // C | + //AURA_STATE_UNKNOWN18 = 18, // C t| + //AURA_STATE_UNKNOWN19 = 19, // | not used + //AURA_STATE_UNKNOWN20 = 20, // c | only (45317 Suicide) + //AURA_STATE_UNKNOWN21 = 21, // | not used + //AURA_STATE_UNKNOWN22 = 22, // C | not implemented yet (Requires Evasive Charges to use) + AURA_STATE_HEALTH_ABOVE_75_PERCENT = 23, // C | }; // Spell mechanics @@ -829,7 +831,7 @@ enum Targets TARGET_SUMMON = 48, TARGET_AREAEFFECT_CUSTOM_2 = 52, TARGET_CURRENT_ENEMY_COORDINATES = 53, // set unit coordinates as dest, only 16 target B imlemented - TARGET_RANDOM_RAID_MEMBER = 56, + TARGET_ALL_RAID_AROUND_CASTER = 56, TARGET_SINGLE_FRIEND_2 = 57, TARGET_AREAEFFECT_PARTY_AND_CLASS = 61, TARGET_DUELVSPLAYER_COORDINATES = 63, @@ -1566,9 +1568,10 @@ enum CreatureFamily enum CreatureTypeFlags { - CREATURE_TYPEFLAGS_TAMEABLE = 0x0001, - CREATURE_TYPEFLAGS_HERBLOOT = 0x0100, - CREATURE_TYPEFLAGS_MININGLOOT = 0x0200 + CREATURE_TYPEFLAGS_TAMEABLE = 0x0001, + CREATURE_TYPEFLAGS_HERBLOOT = 0x0100, + CREATURE_TYPEFLAGS_MININGLOOT = 0x0200, + CREATURE_TYPEFLAGS_ENGINEERLOOT = 0x8000 }; enum CreatureEliteType @@ -1904,6 +1907,7 @@ enum CorpseDynFlags #define SPELL_ID_PASSIVE_RESURRECTION_SICKNESS 15007 #define SPELL_ID_WEAPON_SWITCH_COOLDOWN_1_5s 6119 #define SPELL_ID_WEAPON_SWITCH_COOLDOWN_1_0s 6123 +#define SPELL_ID_AUTOSHOT 75 // used for checks in other spells interruption enum WeatherType { @@ -2072,7 +2076,9 @@ enum SummonType SUMMON_TYPE_CRITTER3 = 307, SUMMON_TYPE_UNKNOWN5 = 409, SUMMON_TYPE_UNKNOWN2 = 427, - SUMMON_TYPE_POSESSED2 = 428 + SUMMON_TYPE_POSESSED2 = 428, + SUMMON_TYPE_FORCE_OF_NATURE = 669, + SUMMON_TYPE_GUARDIAN2 = 1161 }; enum ResponseCodes diff --git a/src/game/SkillDiscovery.cpp b/src/game/SkillDiscovery.cpp index fa4bd977a..7a2281428 100644 --- a/src/game/SkillDiscovery.cpp +++ b/src/game/SkillDiscovery.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SkillDiscovery.h b/src/game/SkillDiscovery.h index 651ead552..781712662 100644 --- a/src/game/SkillDiscovery.h +++ b/src/game/SkillDiscovery.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SkillExtraItems.cpp b/src/game/SkillExtraItems.cpp index eebb443d4..a9363e000 100644 --- a/src/game/SkillExtraItems.cpp +++ b/src/game/SkillExtraItems.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SkillExtraItems.h b/src/game/SkillExtraItems.h index 2afe0ddd2..f348f033c 100644 --- a/src/game/SkillExtraItems.h +++ b/src/game/SkillExtraItems.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SkillHandler.cpp b/src/game/SkillHandler.cpp index 298544924..c5d190e7c 100644 --- a/src/game/SkillHandler.cpp +++ b/src/game/SkillHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SocialMgr.cpp b/src/game/SocialMgr.cpp index 6973bc352..b7dba46a9 100644 --- a/src/game/SocialMgr.cpp +++ b/src/game/SocialMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SocialMgr.h b/src/game/SocialMgr.h index 0a7f822a7..a06cde39a 100644 --- a/src/game/SocialMgr.h +++ b/src/game/SocialMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index b0dec3481..a80590bdb 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -298,7 +298,7 @@ Spell::Spell( Unit* Caster, SpellEntry const *info, bool triggered, uint64 origi break; default: // Wands - if (m_spellInfo->AttributesEx3 & SPELL_ATTR_EX3_REQ_WAND) + if (m_spellInfo->AttributesEx2 & SPELL_ATTR_EX2_AUTOREPEAT_FLAG) m_attackType = RANGED_ATTACK; else m_attackType = BASE_ATTACK; @@ -351,11 +351,8 @@ Spell::Spell( Unit* Caster, SpellEntry const *info, bool triggered, uint64 origi m_glyphIndex = 0; m_triggeredByAuraSpell = NULL; - //Auto Shot & Shoot - if( m_spellInfo->AttributesEx2 == 0x000020 && !triggered ) - m_autoRepeat = true; - else - m_autoRepeat = false; + //Auto Shot & Shoot (wand) + m_autoRepeat = IsAutoRepeatRangedSpell(m_spellInfo); m_runesState = 0; m_powerCost = 0; // setup to correct value in Spell::prepare, don't must be used before. @@ -424,7 +421,7 @@ void Spell::FillTargetMap() case TARGET_ALL_AROUND_CASTER: if( m_spellInfo->EffectImplicitTargetB[i]==TARGET_ALL_PARTY || m_spellInfo->EffectImplicitTargetB[i]==TARGET_ALL_FRIENDLY_UNITS_AROUND_CASTER || - m_spellInfo->EffectImplicitTargetB[i]==TARGET_RANDOM_RAID_MEMBER ) + m_spellInfo->EffectImplicitTargetB[i]==TARGET_ALL_RAID_AROUND_CASTER ) { SetTargetMap(i,m_spellInfo->EffectImplicitTargetB[i],tmpUnitMap); } @@ -584,14 +581,12 @@ void Spell::FillTargetMap() tmpUnitMap.push_back(m_caster); break; case SPELL_EFFECT_SUMMON_CHANGE_ITEM: - case SPELL_EFFECT_SUMMON_WILD: - case SPELL_EFFECT_SUMMON_GUARDIAN: case SPELL_EFFECT_TRANS_DOOR: case SPELL_EFFECT_ADD_FARSIGHT: case SPELL_EFFECT_APPLY_GLYPH: case SPELL_EFFECT_STUCK: + case SPELL_EFFECT_FEED_PET: case SPELL_EFFECT_DESTROY_ALL_TOTEMS: - case SPELL_EFFECT_SUMMON_DEMON: case SPELL_EFFECT_SKILL: tmpUnitMap.push_back(m_caster); break; @@ -602,7 +597,6 @@ void Spell::FillTargetMap() case SPELL_EFFECT_ENCHANT_ITEM: case SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY: case SPELL_EFFECT_DISENCHANT: - case SPELL_EFFECT_FEED_PET: case SPELL_EFFECT_PROSPECTING: case SPELL_EFFECT_MILLING: if(m_targets.getItemTarget()) @@ -705,6 +699,9 @@ void Spell::prepareDataForTriggerSystem() case SPELLFAMILY_WARLOCK: // For Hellfire Effect / Rain of Fire / Seed of Corruption triggers need do it if (m_spellInfo->SpellFamilyFlags & 0x0000800000000060LL) m_canTrigger = true; break; + case SPELLFAMILY_PRIEST: // For Penance heal/damage triggers need do it + if (m_spellInfo->SpellFamilyFlags & 0x0001800000000000LL) m_canTrigger = true; + break; case SPELLFAMILY_HUNTER: // Hunter Explosive Trap Effect/Immolation Trap Effect/Frost Trap Aura/Snake Trap Effect if (m_spellInfo->SpellFamilyFlags & 0x0000200000000014LL) m_canTrigger = true; break; @@ -725,21 +722,30 @@ void Spell::prepareDataForTriggerSystem() m_procVictim = PROC_FLAG_TAKEN_MELEE_SPELL_HIT; break; case SPELL_DAMAGE_CLASS_RANGED: - m_procAttacker = PROC_FLAG_SUCCESSFUL_RANGED_SPELL_HIT; - m_procVictim = PROC_FLAG_TAKEN_RANGED_SPELL_HIT; - break; - default: - if (IsPositiveSpell(m_spellInfo->Id)) // Check for positive spell + // Auto attack + if (m_spellInfo->AttributesEx2 & SPELL_ATTR_EX2_AUTOREPEAT_FLAG) { - m_procAttacker = PROC_FLAG_SUCCESSFUL_POSITIVE_SPELL; - m_procVictim = PROC_FLAG_TAKEN_POSITIVE_SPELL; + m_procAttacker = PROC_FLAG_SUCCESSFUL_RANGED_HIT; + m_procVictim = PROC_FLAG_TAKEN_RANGED_HIT; } - else if (m_spellInfo->Id == 5019) // Wands + else // Ranged spell attack { m_procAttacker = PROC_FLAG_SUCCESSFUL_RANGED_SPELL_HIT; m_procVictim = PROC_FLAG_TAKEN_RANGED_SPELL_HIT; } - else + break; + default: + if (IsPositiveSpell(m_spellInfo->Id)) // Check for positive spell + { + m_procAttacker = PROC_FLAG_SUCCESSFUL_POSITIVE_SPELL; + m_procVictim = PROC_FLAG_TAKEN_POSITIVE_SPELL; + } + else if (m_spellInfo->AttributesEx2 & SPELL_ATTR_EX2_AUTOREPEAT_FLAG) // Wands auto attack + { + m_procAttacker = PROC_FLAG_SUCCESSFUL_RANGED_HIT; + m_procVictim = PROC_FLAG_TAKEN_RANGED_HIT; + } + else // Negative spell { m_procAttacker = PROC_FLAG_SUCCESSFUL_NEGATIVE_SPELL_HIT; m_procVictim = PROC_FLAG_TAKEN_NEGATIVE_SPELL_HIT; @@ -1000,21 +1006,8 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target) caster->DealSpellDamage(&damageInfo, true); - // Shadow Word: Death - deals damage equal to damage done to caster if victim is not killed - if (m_spellInfo->SpellFamilyName == SPELLFAMILY_PRIEST && m_spellInfo->SpellFamilyFlags&0x0000000200000000LL && - caster != unitTarget && unitTarget->isAlive()) - { - // Redirect damage to caster if victim Alive - damageInfo.target = caster; - damageInfo.absorb = 0; - damageInfo.resist = 0; - damageInfo.blocked = 0; - // Send log damage message to client - caster->SendSpellNonMeleeDamageLog(&damageInfo); - caster->DealSpellDamage(&damageInfo, true); - } // Judgement of Blood - else if (m_spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN && m_spellInfo->SpellFamilyFlags & 0x0000000800000000LL && m_spellInfo->SpellIconID==153) + if (m_spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN && m_spellInfo->SpellFamilyFlags & 0x0000000800000000LL && m_spellInfo->SpellIconID==153) { int32 damagePoint = damageInfo.damage * 33 / 100; m_caster->CastCustomSpell(m_caster, 32220, &damagePoint, NULL, NULL, true); @@ -1070,8 +1063,8 @@ void Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask) // Recheck immune (only for delayed spells) if( m_spellInfo->speed && ( - unit->IsImmunedToDamage(GetSpellSchoolMask(m_spellInfo),true) || - unit->IsImmunedToSpell(m_spellInfo,true) )) + unit->IsImmunedToDamage(GetSpellSchoolMask(m_spellInfo)) || + unit->IsImmunedToSpell(m_spellInfo))) { m_caster->SendSpellMiss(unit, m_spellInfo->Id, SPELL_MISS_IMMUNE); return; @@ -1090,6 +1083,15 @@ void Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask) if( m_caster != unit ) { + // Recheck UNIT_FLAG_NON_ATTACKABLE for delayed spells + if (m_spellInfo->speed > 0.0f && + unit->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE) && + unit->GetCharmerOrOwnerGUID() != m_caster->GetGUID()) + { + m_caster->SendSpellMiss(unit, m_spellInfo->Id, SPELL_MISS_EVADE); + return; + } + if( !m_caster->IsFriendlyTo(unit) ) { // for delayed spells ignore not visible explicit target @@ -1521,6 +1523,7 @@ void Spell::SetTargetMap(uint32 i,uint32 cur,std::list &TagUnitMap) case TARGET_ALL_PARTY_AROUND_CASTER: case TARGET_ALL_PARTY_AROUND_CASTER_2: case TARGET_ALL_PARTY: + case TARGET_ALL_RAID_AROUND_CASTER: { Player *pTarget = m_caster->GetCharmerOrOwnerPlayerOrPlayerItself(); Group *pGroup = pTarget ? pTarget->GetGroup() : NULL; @@ -1534,7 +1537,9 @@ void Spell::SetTargetMap(uint32 i,uint32 cur,std::list &TagUnitMap) Player* Target = itr->getSource(); // IsHostileTo check duel and controlled by enemy - if( Target && Target->GetSubGroup()==subgroup && !m_caster->IsHostileTo(Target) ) + if( Target && + (cur==TARGET_ALL_RAID_AROUND_CASTER || Target->GetSubGroup()==subgroup) && + !m_caster->IsHostileTo(Target) ) { if( m_caster->IsWithinDistInMap(Target, radius) ) TagUnitMap.push_back(Target); @@ -1555,12 +1560,6 @@ void Spell::SetTargetMap(uint32 i,uint32 cur,std::list &TagUnitMap) TagUnitMap.push_back(pet); } }break; - case TARGET_RANDOM_RAID_MEMBER: - { - if (m_caster->GetTypeId() == TYPEID_PLAYER) - if(Player* target = ((Player*)m_caster)->GetNextRandomRaidMember(radius)) - TagUnitMap.push_back(target); - }break; case TARGET_SINGLE_FRIEND: case TARGET_SINGLE_FRIEND_2: { @@ -2066,7 +2065,7 @@ void Spell::prepare(SpellCastTargets * targets, Aura* triggeredByAura) m_caster->m_Events.AddEvent(Event, m_caster->m_Events.CalculateTime(1)); //Prevent casting at cast another spell (ServerSide check) - if(m_caster->IsNonMeleeSpellCasted(false, true) && m_cast_count) + if(m_caster->IsNonMeleeSpellCasted(false, true, true) && m_cast_count) { SendCastResult(SPELL_FAILED_SPELL_IN_PROGRESS); finish(false); @@ -2272,8 +2271,12 @@ void Spell::handle_immediate() // start channeling if applicable if(IsChanneledSpell(m_spellInfo)) { - m_spellState = SPELL_STATE_CASTING; - SendChannelStart(GetSpellDuration(m_spellInfo)); + int32 duration = GetSpellDuration(m_spellInfo); + if (duration) + { + m_spellState = SPELL_STATE_CASTING; + SendChannelStart(duration); + } } // process immediate effects (items, ground, etc.) also initialize some variables @@ -2455,7 +2458,7 @@ void Spell::SendSpellCooldown() // shoot spells used equipped item cooldown values already assigned in GetAttackTime(RANGED_ATTACK) // prevent 0 cooldowns set by another way - if (rec <= 0 && catrec <= 0 && (cat == 76 || cat == 351)) + if (rec <= 0 && catrec <= 0 && (cat == 76 || IsAutoRepeatRangedSpell(m_spellInfo) && m_spellInfo->Id != SPELL_ID_AUTOSHOT)) rec = _player->GetAttackTime(RANGED_ATTACK); // Now we have cooldown data (if found any), time to apply mods @@ -2493,7 +2496,7 @@ void Spell::SendSpellCooldown() if(*i_scset == m_spellInfo->Id) // skip main spell, already handled above continue; - _player->AddSpellCooldown(m_spellInfo->Id, m_CastItem ? m_CastItem->GetEntry() : 0, catrecTime); + _player->AddSpellCooldown(*i_scset, m_CastItem ? m_CastItem->GetEntry() : 0, catrecTime); } } } @@ -2689,6 +2692,68 @@ void Spell::finish(bool ok) ((Player*)m_caster)->ClearComboPoints(); } + // Post effects apply on spell targets in some spells + if(!m_UniqueTargetInfo.empty()) + { + uint32 spellId = 0; + switch(m_spellInfo->SpellFamilyName) + { + case SPELLFAMILY_GENERIC: + { + if (m_spellInfo->Mechanic == MECHANIC_BANDAGE) // Bandages + spellId = 11196; // Recently Bandaged + else if(m_spellInfo->SpellIconID == 1662 && m_spellInfo->AttributesEx & 0x20) // Blood Fury (Racial) + spellId = 23230; // Blood Fury - Healing Reduction + break; + } + case SPELLFAMILY_MAGE: + { + if (m_spellInfo->SpellFamilyFlags&0x0000008000000000LL) // Ice Block + spellId = 41425; // Hypothermia + break; + } + case SPELLFAMILY_PRIEST: + { + if (m_spellInfo->Mechanic == MECHANIC_SHIELD && + m_spellInfo->SpellIconID == 566) // Power Word: Shield + spellId = 6788; // Weakened Soul + break; + } + case SPELLFAMILY_PALADIN: + { + if (m_spellInfo->SpellFamilyFlags&0x0000000000400080LL) // Divine Shield, Divine Protection or Hand of Protection + spellId = 25771; // Forbearance + break; + } + case SPELLFAMILY_SHAMAN: + { + if (m_spellInfo->Id == 2825) // Bloodlust + spellId = 57724; // Sated + else if (m_spellInfo->Id == 32182) // Heroism + spellId = 57723; // Exhaustion + break; + } + default: + break; + } + if (spellId) + { + for(std::list::iterator ihit= m_UniqueTargetInfo.begin();ihit != m_UniqueTargetInfo.end();++ihit) + { + Unit* unit = m_caster->GetGUID()==ihit->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, ihit->targetGUID); + if (unit) + { +// TODO: fix me use cast spell (now post spell can immune by this spell) +// m_caster->CastSpell(unit, spellId, true, m_CastItem); + SpellEntry const *AdditionalSpellInfo = sSpellStore.LookupEntry(spellId); + if (!AdditionalSpellInfo) + continue; + Aura* AdditionalAura = CreateAura(AdditionalSpellInfo, 0, &m_currentBasePoints[0], unit, m_caster, m_CastItem); + unit->AddAura(AdditionalAura); + } + } + } + } // call triggered spell only at successful cast (after clear combo points -> for add some if need) if(!m_TriggerSpells.empty()) TriggerSpell(); @@ -2732,8 +2797,8 @@ void Spell::SendCastResult(uint8 result) case 45373: // Bloodberry Elixir data << uint32(4075); break; - default: // default case - data << uint32(m_spellInfo->AreaId); + default: // default case (don't must be) + data << uint32(0); break; } break; @@ -3208,7 +3273,7 @@ void Spell::TakeCastItem() if (charges) { (charges > 0) ? --charges : ++charges; // abs(charges) less at 1 after use - if (proto->Stackable < 2) + if (proto->Stackable == 1) m_CastItem->SetSpellCharges(i, charges); m_CastItem->SetState(ITEM_CHANGED, (Player*)m_caster); } @@ -3535,6 +3600,12 @@ uint8 Spell::CanCast(bool strict) if(m_spellInfo->CasterAuraStateNot && m_caster->HasAuraState(AuraState(m_spellInfo->CasterAuraStateNot))) return SPELL_FAILED_CASTER_AURASTATE; + // Caster aura req check if need + if(m_spellInfo->casterAuraSpell && !m_caster->HasAura(m_spellInfo->casterAuraSpell)) + return SPELL_FAILED_CASTER_AURASTATE; + if(m_spellInfo->excludeCasterAuraSpell && m_caster->HasAura(m_spellInfo->excludeCasterAuraSpell)) + return SPELL_FAILED_CASTER_AURASTATE; + // cancel autorepeat spells if cast start when moving // (not wand currently autorepeat cast delayed to moving stop anyway in spell update code) if( m_caster->GetTypeId()==TYPEID_PLAYER && ((Player*)m_caster)->isMoving() ) @@ -3553,6 +3624,12 @@ uint8 Spell::CanCast(bool strict) if(m_spellInfo->TargetAuraStateNot && target->HasAuraState(AuraState(m_spellInfo->TargetAuraStateNot))) return SPELL_FAILED_TARGET_AURASTATE; + // Target aura req check if need + if(m_spellInfo->targetAuraSpell && !target->HasAura(m_spellInfo->targetAuraSpell)) + return SPELL_FAILED_CASTER_AURASTATE; + if(m_spellInfo->excludeTargetAuraSpell && target->HasAura(m_spellInfo->excludeTargetAuraSpell)) + return SPELL_FAILED_CASTER_AURASTATE; + if(target != m_caster) { // target state requirements (apply to non-self only), to allow cast affects to self like Dirty Deeds @@ -3628,7 +3705,7 @@ uint8 Spell::CanCast(bool strict) if(IsPositiveSpell(m_spellInfo->Id)) { - if(target->IsImmunedToSpell(m_spellInfo,false)) + if(target->IsImmunedToSpell(m_spellInfo)) return SPELL_FAILED_TARGET_AURASTATE; } @@ -3671,8 +3748,8 @@ uint8 Spell::CanCast(bool strict) return SPELL_FAILED_NOT_IN_ARENA; // zone check - if(!IsSpellAllowedInLocation(m_spellInfo,m_caster->GetMapId(),m_caster->GetZoneId(),m_caster->GetAreaId())) - return SPELL_FAILED_REQUIRES_AREA; + if(uint8 res= GetSpellAllowedInLocationError(m_spellInfo,m_caster->GetMapId(),m_caster->GetZoneId(),m_caster->GetAreaId())) + return res; // not let players cast spells at mount (and let do it to creatures) if( m_caster->IsMounted() && m_caster->GetTypeId()==TYPEID_PLAYER && !m_IsTriggeredSpell && @@ -3824,7 +3901,7 @@ uint8 Spell::CanCast(bool strict) } } - if(!m_triggeredByAuraSpell) + if(!m_IsTriggeredSpell) if(uint8 castResult = CheckRange(strict)) return castResult; @@ -3833,7 +3910,7 @@ uint8 Spell::CanCast(bool strict) return castResult; } - if(!m_triggeredByAuraSpell) // triggered spell not affected by stun/etc + if(!m_IsTriggeredSpell) // triggered spell not affected by stun/etc if(uint8 castResult = CheckCasterAuras()) return castResult; @@ -3935,7 +4012,11 @@ uint8 Spell::CanCast(bool strict) } case SPELL_EFFECT_FEED_PET: { - if (m_caster->GetTypeId() != TYPEID_PLAYER || !m_targets.getItemTarget() ) + if (m_caster->GetTypeId() != TYPEID_PLAYER) + return SPELL_FAILED_BAD_TARGETS; + + Item* foodItem = m_targets.getItemTarget(); + if(!foodItem) return SPELL_FAILED_BAD_TARGETS; Pet* pet = m_caster->GetPet(); @@ -3943,10 +4024,10 @@ uint8 Spell::CanCast(bool strict) if(!pet) return SPELL_FAILED_NO_PET; - if(!pet->HaveInDiet(m_targets.getItemTarget()->GetProto())) + if(!pet->HaveInDiet(foodItem->GetProto())) return SPELL_FAILED_WRONG_PET_FOOD; - if(!pet->GetCurrentFoodBenefitLevel(m_targets.getItemTarget()->GetProto()->ItemLevel)) + if(!pet->GetCurrentFoodBenefitLevel(foodItem->GetProto()->ItemLevel)) return SPELL_FAILED_FOOD_LOWLEVEL; if(m_caster->isInCombat() || pet->isInCombat()) @@ -4149,9 +4230,7 @@ uint8 Spell::CanCast(bool strict) break; } - // This is generic summon effect now and don't make this check for summon types similar - // SPELL_EFFECT_SUMMON_CRITTER, SPELL_EFFECT_SUMMON_WILD or SPELL_EFFECT_SUMMON_GUARDIAN. - // These won't show up in m_caster->GetPetGUID() + // This is generic summon effect case SPELL_EFFECT_SUMMON: { switch(m_spellInfo->EffectMiscValueB[i]) @@ -4171,10 +4250,8 @@ uint8 Spell::CanCast(bool strict) } break; } - // Don't make this check for SPELL_EFFECT_SUMMON_CRITTER, SPELL_EFFECT_SUMMON_WILD or SPELL_EFFECT_SUMMON_GUARDIAN. - // These won't show up in m_caster->GetPetGUID() + // Not used for summon? case SPELL_EFFECT_SUMMON_PHANTASM: - case SPELL_EFFECT_SUMMON_DEMON: { if(m_caster->GetPetGUID()) return SPELL_FAILED_ALREADY_HAVE_SUMMON; @@ -4298,10 +4375,7 @@ uint8 Spell::CanCast(bool strict) return SPELL_FAILED_NO_MOUNTS_ALLOWED; // Ignore map check if spell have AreaId. AreaId already checked and this prevent special mount spells - if (m_caster->GetTypeId()==TYPEID_PLAYER && !sMapStore.LookupEntry(m_caster->GetMapId())->IsMountAllowed() && !m_IsTriggeredSpell && !m_spellInfo->AreaId) - return SPELL_FAILED_NO_MOUNTS_ALLOWED; - - if (m_caster->GetAreaId()==35) + if (m_caster->GetTypeId()==TYPEID_PLAYER && !sMapStore.LookupEntry(m_caster->GetMapId())->IsMountAllowed() && !m_IsTriggeredSpell && !m_spellInfo->AreaGroupId) return SPELL_FAILED_NO_MOUNTS_ALLOWED; ShapeshiftForm form = m_caster->m_form; @@ -5254,6 +5328,12 @@ bool Spell::CheckTarget( Unit* target, uint32 eff ) return false; } + // Check Aura spell req (need for AoE spells) + if(m_spellInfo->targetAuraSpell && !target->HasAura(m_spellInfo->targetAuraSpell)) + return false; + if (m_spellInfo->excludeTargetAuraSpell && target->HasAura(m_spellInfo->excludeTargetAuraSpell)) + return false; + // Check targets for not_selectable unit flag and remove // A player can cast spells on his pet (or other controlled unit) though in any state if (target != m_caster && target->GetCharmerOrOwnerGUID() != m_caster->GetGUID()) @@ -5344,7 +5424,7 @@ Unit* Spell::SelectMagnetTarget() bool Spell::IsNeedSendToClient() const { - return m_spellInfo->SpellVisual!=0 || IsChanneledSpell(m_spellInfo) || + return m_spellInfo->SpellVisual[0] || m_spellInfo->SpellVisual[1] || IsChanneledSpell(m_spellInfo) || m_spellInfo->speed > 0.0f || !m_triggeredByAuraSpell && !m_IsTriggeredSpell; } diff --git a/src/game/Spell.h b/src/game/Spell.h index 2d2367028..e32e32d1f 100644 --- a/src/game/Spell.h +++ b/src/game/Spell.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SpellAuraDefines.h b/src/game/SpellAuraDefines.h index 18f354fc1..5d401b2f2 100644 --- a/src/game/SpellAuraDefines.h +++ b/src/game/SpellAuraDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 89ec19055..79358118c 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -337,11 +337,11 @@ pAuraHandler AuraHandler[TOTAL_AURAS]= }; Aura::Aura(SpellEntry const* spellproto, uint32 eff, int32 *currentBasePoints, Unit *target, Unit *caster, Item* castItem) : -m_procCharges(0), m_spellmod(NULL), m_effIndex(eff), m_caster_guid(0), m_target(target), -m_timeCla(1000), m_castItemGuid(castItem?castItem->GetGUID():0), m_auraSlot(MAX_AURAS), -m_positive(false), m_permanent(false), m_isPeriodic(false), m_isTrigger(false), m_isAreaAura(false), -m_isPersistent(false), m_updated(false), m_removeMode(AURA_REMOVE_BY_DEFAULT), m_isRemovedOnShapeLost(true), m_in_use(false), -m_periodicTimer(0), m_PeriodicEventId(0), m_AuraDRGroup(DIMINISHING_NONE) +m_spellmod(NULL), m_caster_guid(0), m_castItemGuid(castItem?castItem->GetGUID():0), m_target(target), +m_timeCla(1000), m_periodicTimer(0), m_removeMode(AURA_REMOVE_BY_DEFAULT), m_AuraDRGroup(DIMINISHING_NONE), +m_effIndex(eff), m_auraSlot(MAX_AURAS), m_auraFlags(AFLAG_NONE), m_auraLevel(1), m_procCharges(0), m_stackAmount(1), +m_positive(false), m_permanent(false), m_isPeriodic(false), m_isTrigger(false), m_isAreaAura(false), m_isPersistent(false), +m_updated(false), m_isRemovedOnShapeLost(true), m_in_use(false) { assert(target); @@ -415,15 +415,9 @@ m_periodicTimer(0), m_PeriodicEventId(0), m_AuraDRGroup(DIMINISHING_NONE) m_isDeathPersist = IsDeathPersistentSpell(m_spellProto); - if(m_spellProto->procCharges) - { - m_procCharges = m_spellProto->procCharges; - - if(modOwner) - modOwner->ApplySpellMod(GetId(), SPELLMOD_CHARGES, m_procCharges); - } - else - m_procCharges = -1; + m_procCharges = m_spellProto->procCharges; + if(modOwner) + modOwner->ApplySpellMod(GetId(), SPELLMOD_CHARGES, m_procCharges); m_isRemovedOnShapeLost = (m_caster_guid==m_target->GetGUID() && m_spellProto->Stances && !(m_spellProto->AttributesEx2 & 0x80000) && !(m_spellProto->Attributes & 0x10000)); @@ -774,6 +768,7 @@ void AreaAura::Update(uint32 diff) if(actualSpellInfo != GetSpellProto()) actualBasePoints = actualSpellInfo->EffectBasePoints[m_effIndex]; AreaAura *aur = new AreaAura(actualSpellInfo, m_effIndex, &actualBasePoints, (*tIter), caster, NULL); + aur->SetAuraDuration(GetAuraDuration()); (*tIter)->AddAura(aur); } } @@ -895,12 +890,12 @@ void Aura::_AddAura() if(!m_target) return; - // we can found aura in NULL_AURA_SLOT and then need store state instead check slot != NULL_AURA_SLOT - bool samespell = false; + // Second aura if some spell bool secondaura = false; + // Try find slot for aura uint8 slot = NULL_AURA_SLOT; - - for(uint8 i = 0; i < 3; i++) + // Lookup for some spell auras (and get slot from it) + for(uint8 i = 0; i < m_effIndex; i++) { Unit::spellEffectPair spair = Unit::spellEffectPair(GetId(), i); for(Unit::AuraMap::const_iterator itr = m_target->GetAuras().lower_bound(spair); itr != m_target->GetAuras().upper_bound(spair); ++itr) @@ -908,18 +903,30 @@ void Aura::_AddAura() // allow use single slot only by auras from same caster if(itr->second->GetCasterGUID()==GetCasterGUID()) { - samespell = true; - if (m_effIndex > itr->second->GetEffIndex()) - secondaura = true; slot = itr->second->GetAuraSlot(); + secondaura = true; break; } } - - if(samespell) + if (secondaura) break; } - + // Lookup free slot + if (!secondaura && m_target->GetVisibleAurasCount() < MAX_AURAS) + { + Unit::VisibleAuraMap const *visibleAuras = m_target->GetVisibleAuras(); + for(uint8 i = 0; i < MAX_AURAS; ++i) + { + Unit::VisibleAuraMap::const_iterator itr = visibleAuras->find(i); + if(itr == visibleAuras->end()) + { + slot = i; + // update for out of range group members (on 1 slot use) + m_target->UpdateAuraForGroup(slot); + break; + } + } + } // not call total regen auras at adding switch (m_modifier.m_auraname) { @@ -945,60 +952,44 @@ void Aura::_AddAura() if((!m_isPassive || (caster && caster->GetTypeId() == TYPEID_UNIT && ((Creature*)caster)->isTotem())) && (m_spellProto->Effect[GetEffIndex()] != SPELL_EFFECT_APPLY_AREA_AURA_ENEMY || m_target != caster)) { - if(!samespell) // new slot need + SetAuraSlot( slot ); + if(slot < MAX_AURAS) // slot found send data to client { - if(m_target->GetVisibleAurasCount() < MAX_AURAS) - { - Unit::VisibleAuraMap const *visibleAuras = m_target->GetVisibleAuras(); - for(uint8 i = 0; i < MAX_AURAS; ++i) - { - Unit::VisibleAuraMap::const_iterator itr = visibleAuras->find(i); - if(itr == visibleAuras->end()) - { - slot = i; - break; - } - } - } - - SetAuraSlot( slot ); - - // Not update fields for not first spell's aura, all data already in fields - if(!secondaura) - { - if(slot < MAX_AURAS) // slot found - { - SetAura(false); - SetAuraFlags((1 << GetEffIndex()) | AFLAG_NOT_CASTER | ((GetAuraMaxDuration() > 0) ? AFLAG_DURATION : AFLAG_NONE) | (IsPositive() ? AFLAG_POSITIVE : AFLAG_NEGATIVE)); - SetAuraLevel(caster ? caster->getLevel() : sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL)); - UpdateAuraCharges(); - SendAuraUpdate(false); - - // update for out of range group members - m_target->UpdateAuraForGroup(slot); - } - } - } - else // use found slot - { - SetAuraSlot( slot ); - // Not recalculate stack count for second aura of the same spell - if (!secondaura) - UpdateSlotCounterAndDuration(true); + SetAura(false); + SetAuraFlags((1 << GetEffIndex()) | AFLAG_NOT_CASTER | ((GetAuraMaxDuration() > 0) ? AFLAG_DURATION : AFLAG_NONE) | (IsPositive() ? AFLAG_POSITIVE : AFLAG_NEGATIVE)); + SetAuraLevel(caster ? caster->getLevel() : sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL)); + SendAuraUpdate(false); } - // Update Seals information - if( IsSealSpell(GetSpellProto()) ) - m_target->ModifyAuraState(AURA_STATE_JUDGEMENT, true); - - // Conflagrate aura state - if (GetSpellProto()->SpellFamilyName == SPELLFAMILY_WARLOCK && (GetSpellProto()->SpellFamilyFlags & 4)) - m_target->ModifyAuraState(AURA_STATE_IMMOLATE, true); - - if(GetSpellProto()->SpellFamilyName == SPELLFAMILY_DRUID - && (GetSpellProto()->SpellFamilyFlags == 0x40 || GetSpellProto()->SpellFamilyFlags == 0x10)) + //***************************************************** + // Update target aura state flag (at 1 aura apply) + // TODO: Make it easer + //***************************************************** + if (!secondaura) { - m_target->ModifyAuraState(AURA_STATE_SWIFTMEND, true); + // Update Seals information + if( IsSealSpell(GetSpellProto()) ) + m_target->ModifyAuraState(AURA_STATE_JUDGEMENT, true); + + // Conflagrate aura state on Immolate + if (m_spellProto->SpellFamilyName == SPELLFAMILY_WARLOCK && m_spellProto->SpellFamilyFlags & 4) + m_target->ModifyAuraState(AURA_STATE_IMMOLATE, true); + + // Faerie Fire (druid versions) + if( m_spellProto->SpellFamilyName == SPELLFAMILY_DRUID && m_spellProto->SpellFamilyFlags & 0x0000000000000400LL) + m_target->ModifyAuraState(AURA_STATE_FAERIE_FIRE, true); + + // Victorious + if( m_spellProto->SpellFamilyName == SPELLFAMILY_WARRIOR && m_spellProto->SpellFamilyFlags & 0x0004000000000000LL) + m_target->ModifyAuraState(AURA_STATE_WARRIOR_VICTORY_RUSH, true); + + // Swiftmend state on Regrowth & Rejuvenation + if(m_spellProto->SpellFamilyName == SPELLFAMILY_DRUID && m_spellProto->SpellFamilyFlags & 0x50 ) + m_target->ModifyAuraState(AURA_STATE_SWIFTMEND, true); + + // Deadly poison aura state + if(m_spellProto->SpellFamilyName == SPELLFAMILY_ROGUE && m_spellProto->SpellFamilyFlags & 0x10000) + m_target->ModifyAuraState(AURA_STATE_DEADLY_POISON, true); } } } @@ -1036,8 +1027,7 @@ void Aura::_RemoveAura() if(m_target->GetVisibleAura(slot) == 0) return; - bool samespell = false; - bool sameaura = false; + bool lastaura = true; // find other aura in same slot (current already removed from list) for(uint8 i = 0; i < 3; i++) @@ -1047,30 +1037,30 @@ void Aura::_RemoveAura() { if(itr->second->GetAuraSlot()==slot) { - samespell = true; - - if(GetEffIndex()==i) - sameaura = true; - + lastaura = false; break; } } - if(samespell) + if(!lastaura) break; } // only remove icon when the last aura of the spell is removed (current aura already removed from list) - if (!samespell) + if (lastaura) { SetAura(true); SetAuraFlags(AFLAG_NONE); SetAuraLevel(0); - SetAuraCharges(0); SendAuraUpdate(true); // update for out of range group members m_target->UpdateAuraForGroup(slot); + //***************************************************** + // Update target aura state flag (at last aura remove) + // TODO: Make it easer + //***************************************************** + // Update Seals information if( IsSealSpell(GetSpellProto()) ) m_target->ModifyAuraState(AURA_STATE_JUDGEMENT,false); @@ -1078,16 +1068,22 @@ void Aura::_RemoveAura() if (GetSpellProto()->SpellFamilyName == SPELLFAMILY_WARLOCK && (GetSpellProto()->SpellFamilyFlags & 4)) m_target->ModifyAuraState(AURA_STATE_IMMOLATE, false); + // Faerie Fire (druid versions) + if( m_spellProto->SpellFamilyName == SPELLFAMILY_DRUID && m_spellProto->SpellFamilyFlags & 0x0000000000000400LL) + m_target->ModifyAuraState(AURA_STATE_FAERIE_FIRE, false); + + // Victorious + if( m_spellProto->SpellFamilyName == SPELLFAMILY_WARRIOR && m_spellProto->SpellFamilyFlags & 0x0004000000000000LL) + m_target->ModifyAuraState(AURA_STATE_WARRIOR_VICTORY_RUSH, false); + // Swiftmend aura state - if(GetSpellProto()->SpellFamilyName == SPELLFAMILY_DRUID - && (GetSpellProto()->SpellFamilyFlags == 0x40 || GetSpellProto()->SpellFamilyFlags == 0x10)) + if(GetSpellProto()->SpellFamilyName == SPELLFAMILY_DRUID && GetSpellProto()->SpellFamilyFlags & 0x50) { bool found = false; Unit::AuraList const& RejorRegr = m_target->GetAurasByType(SPELL_AURA_PERIODIC_HEAL); for(Unit::AuraList::const_iterator i = RejorRegr.begin(); i != RejorRegr.end(); ++i) { - if((*i)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_DRUID - && ((*i)->GetSpellProto()->SpellFamilyFlags == 0x40 || (*i)->GetSpellProto()->SpellFamilyFlags == 0x10) ) + if((*i)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_DRUID && (*i)->GetSpellProto()->SpellFamilyFlags & 0x50 ) { found = true; break; @@ -1097,6 +1093,26 @@ void Aura::_RemoveAura() m_target->ModifyAuraState(AURA_STATE_SWIFTMEND, false); } + // Deadly poison aura state + if(m_spellProto->SpellFamilyName == SPELLFAMILY_ROGUE && m_spellProto->SpellFamilyFlags & 0x10000) + { + // current aura already removed, search present of another + bool found = false; + Unit::AuraList const& auras = m_target->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); + for(Unit::AuraList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr) + { + SpellEntry const* itr_spell = (*itr)->GetSpellProto(); + if(itr_spell && itr_spell->SpellFamilyName==SPELLFAMILY_ROGUE && itr_spell->SpellFamilyFlags & 0x10000) + { + found = true; + break; + } + } + // this has been last deadly poison aura + if(!found) + m_target->ModifyAuraState(AURA_STATE_DEADLY_POISON,false); + } + // reset cooldown state for spells if(caster && caster->GetTypeId() == TYPEID_PLAYER) { @@ -1104,8 +1120,6 @@ void Aura::_RemoveAura() ((Player*)caster)->SendCooldownEvent(GetSpellProto()); } } - else if(sameaura) // decrease count for spell, only for same aura effect, or this spell auras in remove process. - UpdateSlotCounterAndDuration(false); } void Aura::SendAuraUpdate(bool remove) @@ -1124,7 +1138,7 @@ void Aura::SendAuraUpdate(bool remove) uint8 auraFlags = GetAuraFlags(); data << uint8(auraFlags); data << uint8(GetAuraLevel()); - data << uint8(m_procCharges >= 0 ? m_procCharges : 0); + data << uint8(m_procCharges ? m_procCharges : m_stackAmount); if(!(auraFlags & AFLAG_NOT_CASTER)) { @@ -1140,35 +1154,51 @@ void Aura::SendAuraUpdate(bool remove) m_target->SendMessageToSet(&data, true); } -void Aura::UpdateSlotCounterAndDuration(bool add) +void Aura::SetStackAmount(uint8 stackAmount) { - uint8 slot = GetAuraSlot(); - if(slot >= MAX_AURAS) - return; - - // calculate amount of similar auras by same effect index (similar different spells) - int8 count = 0; - - // calculate auras and update durations in case aura adding - Unit::AuraList const& aura_list = m_target->GetAurasByType(GetModifier()->m_auraname); - for(Unit::AuraList::const_iterator i = aura_list.begin();i != aura_list.end(); ++i) + if (stackAmount != m_stackAmount) { - if( (*i)->GetId()==GetId() && (*i)->GetEffIndex()==m_effIndex && - (*i)->GetCasterGUID()==GetCasterGUID() ) + Unit *target = GetTarget(); + Unit *caster = GetCaster(); + if (!target || !caster) + return; + m_stackAmount = stackAmount; + int32 amount = m_stackAmount * caster->CalculateSpellDamage(m_spellProto, m_effIndex, m_currentBasePoints, target); + // Reapply if amount change + if (amount!=m_modifier.m_amount) { - ++count; - - if(add) - (*i)->SetAuraDuration(GetAuraDuration()); + ApplyModifier(false, true); + m_modifier.m_amount = amount; + ApplyModifier(true, true); } } + RefreshAura(); +} - // at aura add aura not added yet, at aura remove aura already removed - // in field stored (count-1) - if(!add) - --count; +bool Aura::modStackAmount(int32 num) +{ + // Can`t mod + if (!m_spellProto->StackAmount) + return true; - SetAuraCharges(count); + // Modify stack but limit it + int32 stackAmount = m_stackAmount + num; + if (stackAmount > m_spellProto->StackAmount) + stackAmount = m_spellProto->StackAmount; + else if (stackAmount <=0) // Last aura from stack removed + { + m_stackAmount = 0; + return true; // need remove aura + } + + // Update stack amount + SetStackAmount(stackAmount); + return false; +} + +void Aura::RefreshAura() +{ + m_duration = m_maxduration; SendAuraUpdate(false); } @@ -1208,7 +1238,8 @@ void Aura::HandleAddModifier(bool apply, bool Real) case 34754: // Clearcasting case 34936: // Backlash case 48108: // Hot Streak - m_procCharges = 1; + case 57761: // Fireball! + SetAuraCharges(1); break; } @@ -1236,11 +1267,7 @@ void Aura::HandleAddModifier(bool apply, bool Real) mod->mask = (uint64)ptr[0] | (uint64)ptr[1]<<32; mod->mask2= (uint64)ptr[2]; - - if (m_procCharges > 0) - mod->charges = m_procCharges; - else - mod->charges = 0; + mod->charges = m_procCharges; m_spellmod = mod; } @@ -2119,6 +2146,25 @@ void Aura::HandleAuraDummy(bool apply, bool Real) m_target->CastSpell(m_target,47287,true,NULL,this); return; } + + if (caster && m_removeMode == AURA_REMOVE_BY_DEATH) + { + // Stop caster Arcane Missle chanelling on death + if (m_spellProto->SpellFamilyName == SPELLFAMILY_MAGE && + m_spellProto->SpellFamilyFlags&0x0000000000000800LL) + { + caster->InterruptSpell(CURRENT_CHANNELED_SPELL); + return; + } + // Stop caster Penance chanelling on death + if (m_spellProto->SpellFamilyName == SPELLFAMILY_PRIEST && + m_spellProto->SpellFamilyFlags2 & 0x00000080) + { + caster->InterruptSpell(CURRENT_CHANNELED_SPELL); + return; + } + + } } // AT APPLY & REMOVE @@ -2159,12 +2205,6 @@ void Aura::HandleAuraDummy(bool apply, bool Real) m_target->RemoveAurasDueToSpell(spellId); return; } - // Victorious - if(GetId()==32216 && m_target->getClass()==CLASS_WARRIOR) - { - m_target->ModifyAuraState(AURA_STATE_WARRIOR_VICTORY_RUSH, apply); - return; - } //Summon Fire Elemental if (GetId() == 40133 && caster) { @@ -2196,12 +2236,6 @@ void Aura::HandleAuraDummy(bool apply, bool Real) } case SPELLFAMILY_MAGE: { - // Hypothermia - if( GetId()==41425 ) - { - m_target->ModifyAuraState(AURA_STATE_HYPOTHERMIA,apply); - return; - } break; } case SPELLFAMILY_DRUID: @@ -2230,8 +2264,11 @@ void Aura::HandleAuraDummy(bool apply, bool Real) return; // final heal - if(m_target->IsInWorld()) - m_target->CastCustomSpell(m_target,33778,&m_modifier.m_amount,NULL,NULL,true,NULL,this,GetCasterGUID()); + if(m_target->IsInWorld() && m_stackAmount > 0) + { + int32 amount = m_modifier.m_amount / m_stackAmount; + m_target->CastCustomSpell(m_target,33778,&amount,NULL,NULL,true,NULL,this,GetCasterGUID()); + } } return; } @@ -3523,13 +3560,18 @@ void Aura::HandleAuraModRoot(bool apply, bool Real) if(!Real) return; + // Frost root aura -> freeze/unfreeze target + if (GetSpellSchoolMask(m_spellProto) & SPELL_SCHOOL_MASK_FROST) + m_target->ModifyAuraState(AURA_STATE_FROZEN, apply); + uint32 apply_stat = UNIT_STAT_ROOT; if (apply) { m_target->addUnitState(UNIT_STAT_ROOT); m_target->SetUInt64Value (UNIT_FIELD_TARGET, 0); - // probably wrong - m_target->SetFlag(UNIT_FIELD_FLAGS,(apply_stat<<16)); +// probably wrong (this add skinable flag) +// TODO: find correct flag +// m_target->SetFlag(UNIT_FIELD_FLAGS,(apply_stat<<16)); //Save last orientation if( m_target->getVictim() ) @@ -3555,8 +3597,9 @@ void Aura::HandleAuraModRoot(bool apply, bool Real) return; m_target->clearUnitState(UNIT_STAT_ROOT); - // probably wrong - m_target->RemoveFlag(UNIT_FIELD_FLAGS,(apply_stat<<16)); +// probably wrong (this add skinable flag) +// TODO: find correct flag +// m_target->RemoveFlag(UNIT_FIELD_FLAGS,(apply_stat<<16)); if(!m_target->hasUnitState(UNIT_STAT_STUNNED)) // prevent allow move if have also stun effect { @@ -3610,15 +3653,11 @@ void Aura::HandleAuraModSilence(bool apply, bool Real) return; // Search Mana Tap auras on caster - int32 energy = 0; - Unit::AuraList const& m_dummyAuras = caster->GetAurasByType(SPELL_AURA_DUMMY); - for(Unit::AuraList::const_iterator i = m_dummyAuras.begin(); i != m_dummyAuras.end(); ++i) - if ((*i)->GetId() == 28734) - ++energy; - if (energy) + Aura * dummy = caster->GetDummyAura(28734); + if (dummy) { - energy *= 10; - caster->CastCustomSpell(caster, 25048, &energy, NULL, NULL, true); + int32 bp = dummy->GetStackAmount() * 10; + caster->CastCustomSpell(caster, 25048, &bp, NULL, NULL, true); caster->RemoveAurasDueToSpell(28734); } } @@ -3843,17 +3882,6 @@ void Aura::HandleModMechanicImmunity(bool apply, bool Real) m_target->ApplySpellImmune(GetId(),IMMUNITY_MECHANIC,m_modifier.m_miscvalue,apply); - // special cases - switch(m_modifier.m_miscvalue) - { - case MECHANIC_INVULNERABILITY: - m_target->ModifyAuraState(AURA_STATE_FORBEARANCE,apply); - break; - case MECHANIC_SHIELD: - m_target->ModifyAuraState(AURA_STATE_WEAKENED_SOUL,apply); - break; - } - // Bestial Wrath if ( GetSpellProto()->SpellFamilyName == SPELLFAMILY_HUNTER && GetSpellProto()->SpellIconID == 1680) { @@ -4022,8 +4050,7 @@ void Aura::HandleAuraProcTriggerSpell(bool apply, bool Real) switch (GetId()) { case 28200: // Ascendance (Talisman of Ascendance trinket) - m_procCharges = 6; - UpdateAuraCharges(); + SetAuraCharges(6); break; default: break; } @@ -4050,13 +4077,6 @@ void Aura::HandlePeriodicTriggerSpell(bool apply, bool Real) m_isPeriodic = apply; m_isTrigger = apply; - - // Curse of the Plaguebringer - if (!apply && m_spellProto->Id == 29213 && m_removeMode!=AURA_REMOVE_BY_DISPEL) - { - // Cast Wrath of the Plaguebringer if not dispelled - m_target->CastSpell(m_target, 29214, true, 0, this); - } } void Aura::HandlePeriodicEnergize(bool apply, bool Real) @@ -4074,13 +4094,6 @@ void Aura::HandlePeriodicHeal(bool apply, bool Real) m_isPeriodic = apply; - // only at real apply - if (Real && apply && GetSpellProto()->Mechanic == MECHANIC_BANDAGE) - { - // provided m_target as original caster to prevent apply aura caster selection for this negative buff - m_target->CastSpell(m_target,11196,true,NULL,this,m_target->GetGUID()); - } - // For prevent double apply bonuses bool loading = (m_target->GetTypeId() == TYPEID_PLAYER && ((Player*)m_target)->GetSession()->PlayerLoading()); @@ -4132,16 +4145,19 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real) Unit *caster = GetCaster(); + // Custom damage calculation after + if (!apply || loading || !caster) + return; + switch (m_spellProto->SpellFamilyName) { case SPELLFAMILY_GENERIC: { // Pounce Bleed - if ( m_spellProto->SpellIconID == 147 && m_spellProto->SpellVisual == 0 ) + if ( m_spellProto->SpellIconID == 147 && m_spellProto->SpellVisual[0] == 0 ) { // $AP*0.18/6 bonus per tick - if (apply && !loading && caster) - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 3 / 100); + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 3 / 100); return; } break; @@ -4151,16 +4167,12 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real) // Rend if (m_spellProto->SpellFamilyFlags & 0x0000000000000020LL) { - // 0.00743*(($MWB+$mwb)/2+$AP/14*$MWS) bonus per tick - if (apply && !loading && caster) - { - float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK); - int32 mws = caster->GetAttackTime(BASE_ATTACK); - float mwb_min = caster->GetWeaponDamageRange(BASE_ATTACK,MINDAMAGE); - float mwb_max = caster->GetWeaponDamageRange(BASE_ATTACK,MAXDAMAGE); - // WARNING! in 3.0 multiplier 0.00743f change to 0.6 - m_modifier.m_amount+=int32(((mwb_min+mwb_max)/2+ap*mws/14000)*0.00743f); - } + // $0.2*(($MWB+$mwb)/2+$AP/14*$MWS) bonus per tick + float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK); + int32 mws = caster->GetAttackTime(BASE_ATTACK); + float mwb_min = caster->GetWeaponDamageRange(BASE_ATTACK,MINDAMAGE); + float mwb_max = caster->GetWeaponDamageRange(BASE_ATTACK,MAXDAMAGE); + m_modifier.m_amount+=int32(((mwb_min+mwb_max)/2+ap*mws/14000)*0.2f); return; } break; @@ -4170,90 +4182,78 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real) // Rake if (m_spellProto->SpellFamilyFlags & 0x0000000000001000LL) { - // $AP*0.06/3 bonus per tick - if (apply && !loading && caster) - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 2 / 100); + // $AP*0.06 bonus per tick + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 6 / 100); return; } // Lacerate if (m_spellProto->SpellFamilyFlags & 0x000000010000000000LL) { // $AP*0.05/5 bonus per tick - if (apply && !loading && caster) - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) / 100); + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) / 100); return; } // Rip if (m_spellProto->SpellFamilyFlags & 0x000000000000800000LL) { - // $AP * min(0.06*$cp, 0.24)/6 [Yes, there is no difference, whether 4 or 5 CPs are being used] - if (apply && !loading && caster && caster->GetTypeId() == TYPEID_PLAYER) + // 0.01*$AP*cp + if (caster->GetTypeId() != TYPEID_PLAYER) + return; + + uint8 cp = ((Player*)caster)->GetComboPoints(); + + // Idol of Feral Shadows. Cant be handled as SpellMod in SpellAura:Dummy due its dependency from CPs + Unit::AuraList const& dummyAuras = caster->GetAurasByType(SPELL_AURA_DUMMY); + for(Unit::AuraList::const_iterator itr = dummyAuras.begin(); itr != dummyAuras.end(); ++itr) { - uint8 cp = ((Player*)caster)->GetComboPoints(); - - // Idol of Feral Shadows. Cant be handled as SpellMod in SpellAura:Dummy due its dependency from CPs - Unit::AuraList const& dummyAuras = caster->GetAurasByType(SPELL_AURA_DUMMY); - for(Unit::AuraList::const_iterator itr = dummyAuras.begin(); itr != dummyAuras.end(); ++itr) + if((*itr)->GetId()==34241) { - if((*itr)->GetId()==34241) - { - m_modifier.m_amount += cp * (*itr)->GetModifier()->m_amount; - break; - } + m_modifier.m_amount += cp * (*itr)->GetModifier()->m_amount; + break; } - - if (cp > 4) cp = 4; - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * cp / 100); } + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * cp / 100); + return; + } + // Lock Jaw + if (m_spellProto->SpellFamilyFlags & 0x1000000000000000LL) + { + // 0.15*$AP + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 15 / 100); return; } break; } case SPELLFAMILY_ROGUE: { - // Deadly poison aura state - if((m_spellProto->SpellFamilyFlags & 0x10000) && m_spellProto->SpellVisual[0]==5100) - { - if(apply) - m_target->ModifyAuraState(AURA_STATE_DEADLY_POISON,true); - else - { - // current aura already removed, search present of another - bool found = false; - Unit::AuraList const& auras = m_target->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); - for(Unit::AuraList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr) - { - SpellEntry const* itr_spell = (*itr)->GetSpellProto(); - if(itr_spell && itr_spell->SpellFamilyName==SPELLFAMILY_ROGUE && (itr_spell->SpellFamilyFlags & 0x10000) && itr_spell->SpellVisual[0]==5100) - { - found = true; - break; - } - } - // this has been last deadly poison aura - if(!found) - m_target->ModifyAuraState(AURA_STATE_DEADLY_POISON,false); - } - return; - } // Rupture if (m_spellProto->SpellFamilyFlags & 0x000000000000100000LL) { - // Dmg/tick = $AP*min(0.01*$cp, 0.03) [Like Rip: only the first three CP increase the contribution from AP] - if (apply && !loading && caster && caster->GetTypeId() == TYPEID_PLAYER) - { - uint8 cp = ((Player*)caster)->GetComboPoints(); - if (cp > 3) cp = 3; - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * cp / 100); - } + if (caster->GetTypeId() != TYPEID_PLAYER) + return; + //1 point : ${($m1+$b1*1+0.015*$AP)*4} damage over 8 secs + //2 points: ${($m1+$b1*2+0.024*$AP)*5} damage over 10 secs + //3 points: ${($m1+$b1*3+0.03*$AP)*6} damage over 12 secs + //4 points: ${($m1+$b1*4+0.03428571*$AP)*7} damage over 14 secs + //5 points: ${($m1+$b1*5+0.0375*$AP)*8} damage over 16 secs + float AP_per_combo[] = {0, 0.015f, 0.024, 0.03, 0.03428571, 0.0375}; + uint8 cp = ((Player*)caster)->GetComboPoints(); + if (cp > 5) cp = 5; + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * AP_per_combo[cp]); return; } // Garrote if (m_spellProto->SpellFamilyFlags & 0x000000000000000100LL) { - // $AP*0.18/6 bonus per tick - if (apply && !loading && caster) - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 3 / 100); + // $AP*0.07 bonus per tick + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 7 / 100); + return; + } + // Deadly Poison + if (m_spellProto->SpellFamilyFlags & 0x0000000000010000) + { + // 0.08*$AP / 4 * amount of stack + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 2 * GetStackAmount() / 100); return; } break; @@ -4264,16 +4264,14 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real) if (m_spellProto->SpellFamilyFlags & 0x0000000000004000LL) { // $RAP*0.1/5 bonus per tick - if (apply && !loading && caster) - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(RANGED_ATTACK) * 10 / 500); + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(RANGED_ATTACK) * 10 / 500); return; } // Immolation Trap if (m_spellProto->SpellFamilyFlags & 0x0000000000000004LL && m_spellProto->SpellIconID == 678) { // $RAP*0.1/5 bonus per tick - if (apply && !loading && caster) - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(RANGED_ATTACK) * 10 / 500); + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(RANGED_ATTACK) * 10 / 500); return; } break; @@ -4283,27 +4281,37 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real) // Consecration if (m_spellProto->SpellFamilyFlags & 0x0000000000000020LL) { - if (apply && !loading) + // ($m1+0.04*$SPH+0.04*$AP) + float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK); + int32 holy = caster->SpellBaseDamageBonus(GetSpellSchoolMask(m_spellProto)) + + caster->SpellBaseDamageBonusForVictim(GetSpellSchoolMask(m_spellProto), m_target); + m_modifier.m_amount += int32(0.04f*holy + 0.04f*ap); + + // Improved Consecration - Libram of the Eternal Rest + Unit::AuraList const& classScripts = caster->GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); + for(Unit::AuraList::const_iterator k = classScripts.begin(); k != classScripts.end(); ++k) { - if(Unit* caster = GetCaster()) + switch((*k)->GetModifier()->m_miscvalue) { - Unit::AuraList const& classScripts = caster->GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); - for(Unit::AuraList::const_iterator k = classScripts.begin(); k != classScripts.end(); ++k) + case 5147: { int32 tickcount = GetSpellDuration(m_spellProto) / m_spellProto->EffectAmplitude[m_effIndex]; - switch((*k)->GetModifier()->m_miscvalue) - { - case 5147: // Improved Consecration - Libram of the Eternal Rest - { - m_modifier.m_amount += (*k)->GetModifier()->m_amount / tickcount; - break; - } - } + m_modifier.m_amount += (*k)->GetModifier()->m_amount / tickcount; + break; } } } return; } + // Seal of Vengeance 0.013*$SPH+0.025*$AP per tick (also can stack) + if(m_spellProto->SpellFamilyFlags & 0x0000080000000000LL) + { + float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK); + int32 holy = caster->SpellBaseDamageBonus(GetSpellSchoolMask(m_spellProto)) + + caster->SpellBaseDamageBonusForVictim(GetSpellSchoolMask(m_spellProto), m_target); + m_modifier.m_amount += int32((0.013f*holy + 0.025f*ap) * GetStackAmount()); + return; + } break; } default: @@ -4367,14 +4375,6 @@ void Aura::HandleAuraModResistance(bool apply, bool Real) m_target->ApplyResistanceBuffModsMod(SpellSchools(x),m_positive,m_modifier.m_amount, apply); } } - - // Faerie Fire (druid versions) - if( m_spellProto->SpellIconID == 109 && - m_spellProto->SpellFamilyName == SPELLFAMILY_DRUID && - m_spellProto->SpellFamilyFlags & 0x0000000000000400LL ) - { - m_target->ModifyAuraState(AURA_STATE_FAERIE_FIRE,apply); - } } void Aura::HandleAuraModBaseResistancePCT(bool apply, bool Real) @@ -4682,7 +4682,7 @@ void Aura::HandleModPowerRegen(bool apply, bool Real) // drinking else if( GetId() == 20577 ) { // cannibalize anim - m_target->HandleEmoteCommand(398); + m_target->HandleEmoteCommand(EMOTE_STATE_CANNIBALIZE); } // Warrior talent, gain 1 rage every 3 seconds while in combat @@ -5032,11 +5032,9 @@ void Aura::HandleAuraModRangedAttackPowerOfStatPercent(bool apply, bool Real) if(!Real) return; - if(m_target->GetTypeId() == TYPEID_PLAYER && (m_target->getClassMask() & CLASSMASK_WAND_USERS)!=0) - return; - // Recalculate bonus - ((Player*)m_target)->UpdateAttackPowerAndDamage(true); + if(m_target->GetTypeId() == TYPEID_PLAYER && !(m_target->getClassMask() & CLASSMASK_WAND_USERS)) + ((Player*)m_target)->UpdateAttackPowerAndDamage(true); } void Aura::HandleAuraModAttackPowerOfStatPercent(bool apply, bool Real) @@ -5045,11 +5043,9 @@ void Aura::HandleAuraModAttackPowerOfStatPercent(bool apply, bool Real) if(!Real) return; - if(m_target->GetTypeId() == TYPEID_PLAYER && (m_target->getClassMask() & CLASSMASK_WAND_USERS)!=0) - return; - // Recalculate bonus - ((Player*)m_target)->UpdateAttackPowerAndDamage(false); + if(m_target->GetTypeId() == TYPEID_PLAYER) + ((Player*)m_target)->UpdateAttackPowerAndDamage(false); } /********************************/ @@ -5306,6 +5302,7 @@ void Aura::HandleShapeshiftBoosts(bool apply) break; case FORM_FLIGHT: spellId = 33948; + spellId2 = 34764; break; case FORM_FLIGHT_EPIC: spellId = 40122; @@ -5780,10 +5777,10 @@ void Aura::PeriodicTick() data << uint32(1); data << uint32(m_modifier.m_auraname); data << (uint32)pdamage; + data << uint32(0); // overkill data << (uint32)GetSpellSchoolMask(GetSpellProto()); // will be mask in 2.4.x data << (uint32)absorb; data << (uint32)resist; - data << uint32(0); // wotlk m_target->SendMessageToSet(&data,true); Unit* target = m_target; // aura can be deleted in DealDamage @@ -6046,7 +6043,7 @@ void Aura::PeriodicTick() sLog.outDetail("PeriodicTick: %u (TypeId: %u) power leech of %u (TypeId: %u) for %u dmg inflicted by %u", GUID_LOPART(GetCasterGUID()), GuidHigh2TypeId(GUID_HIPART(GetCasterGUID())), m_target->GetGUIDLow(), m_target->GetTypeId(), pdamage, GetId()); - if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue > 4) + if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue >= MAX_POWERS) break; Powers power = Powers(m_modifier.m_miscvalue); @@ -6101,7 +6098,7 @@ void Aura::PeriodicTick() sLog.outDetail("PeriodicTick: %u (TypeId: %u) energize %u (TypeId: %u) for %u dmg inflicted by %u", GUID_LOPART(GetCasterGUID()), GuidHigh2TypeId(GUID_HIPART(GetCasterGUID())), m_target->GetGUIDLow(), m_target->GetTypeId(), pdamage, GetId()); - if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue > 4) + if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue >= MAX_POWERS) break; Powers power = Powers(m_modifier.m_miscvalue); @@ -6593,15 +6590,24 @@ void Aura::PeriodicDummyTick() case SPELLFAMILY_SHAMAN: { // Astral Shift -// if (spell->Id == 52179) -// return; + if (spell->Id == 52179) + { + // Periodic need for remove visual on stun/fear/silence lost + if (!(m_target->GetUInt32Value(UNIT_FIELD_FLAGS)&(UNIT_FLAG_STUNNED|UNIT_FLAG_FLEEING|UNIT_FLAG_SILENCED))) + m_target->RemoveAurasDueToSpell(52179); + return; + } break; } case SPELLFAMILY_DEATHKNIGHT: { // Death and Decay -// if (spell->SpellFamilyFlags & 0x0000000000000020LL) -// return; + if (spell->SpellFamilyFlags & 0x0000000000000020LL) + { + if (caster) + caster->CastCustomSpell(m_target, 52212, &m_modifier.m_amount, NULL, NULL, true, 0, this); + return; + } // Raise Dead // if (spell->SpellFamilyFlags & 0x0000000000001000LL) // return; diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h index 3baf5c303..66ca5bc77 100644 --- a/src/game/SpellAuras.h +++ b/src/game/SpellAuras.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -256,15 +256,29 @@ class MANGOS_DLL_SPEC Aura uint8 GetAuraLevel() const { return m_auraLevel; } void SetAuraLevel(uint8 level) { m_auraLevel = level; } uint8 GetAuraCharges() const { return m_procCharges; } - void SetAuraCharges(uint8 charges) { m_procCharges = charges; } + void SetAuraCharges(uint8 charges) + { + if (m_procCharges == charges) + return; + m_procCharges = charges; + SendAuraUpdate(false); + } + bool DropAuraCharge() // return true if last charge dropped + { + if (m_procCharges == 0) + return false; + m_procCharges--; + SendAuraUpdate(false); + return m_procCharges == 0; + } + void SetAura(bool remove) { m_target->SetVisibleAura(m_auraSlot, remove ? 0 : GetId()); } void SendAuraUpdate(bool remove); - void UpdateAuraCharges() - { - // only aura in slot with charges and without stack limitation - if (m_auraSlot < MAX_AURAS && m_procCharges >= 1 && GetSpellProto()->StackAmount==0) - SendAuraUpdate(false); - } + + int8 GetStackAmount() {return m_stackAmount;} + void SetStackAmount(uint8 num); + bool modStackAmount(int32 num); // return true if last charge dropped + void RefreshAura(); bool IsPositive() { return m_positive; } void SetNegative() { m_positive = false; } @@ -286,14 +300,10 @@ class MANGOS_DLL_SPEC Aura void _AddAura(); void _RemoveAura(); - void TriggerSpell(); - bool IsUpdated() { return m_updated; } void SetUpdated(bool val) { m_updated = val; } void SetRemoveMode(AuraRemoveMode mode) { m_removeMode = mode; } - int32 m_procCharges; - virtual Unit* GetTriggerTarget() const { return m_target; } // add/remove SPELL_AURA_MOD_SHAPESHIFT (36) linked auras @@ -303,6 +313,7 @@ class MANGOS_DLL_SPEC Aura void setDiminishGroup(DiminishingGroup group) { m_AuraDRGroup = group; } DiminishingGroup getDiminishGroup() const { return m_AuraDRGroup; } + void TriggerSpell(); void PeriodicTick(); void PeriodicDummyTick(); @@ -313,22 +324,28 @@ class MANGOS_DLL_SPEC Aura Modifier m_modifier; SpellModifier *m_spellmod; - uint32 m_effIndex; + SpellEntry const *m_spellProto; - int32 m_currentBasePoints; // cache SpellEntry::EffectBasePoints and use for set custom base points - uint64 m_caster_guid; Unit* m_target; - int32 m_maxduration; - int32 m_duration; - int32 m_timeCla; + uint64 m_caster_guid; uint64 m_castItemGuid; // it is NOT safe to keep a pointer to the item because it may get deleted time_t m_applyTime; - AuraRemoveMode m_removeMode; + int32 m_currentBasePoints; // cache SpellEntry::EffectBasePoints and use for set custom base points + int32 m_maxduration; // Max aura duration + int32 m_duration; // Current time + int32 m_timeCla; // Timer for power per sec calcultion + int32 m_periodicTimer; // Timer for periodic auras - uint8 m_auraSlot; - uint8 m_auraFlags; - uint8 m_auraLevel; + AuraRemoveMode m_removeMode:8; // Store info for know remove aura reason + DiminishingGroup m_AuraDRGroup:8; // Diminishing + + uint8 m_effIndex; // Aura effect index in spell + uint8 m_auraSlot; // Aura slot on unit (for show in client) + uint8 m_auraFlags; // Aura info flag (for send data to client) + uint8 m_auraLevel; // Aura level (store caster level for correct show level dep amount) + uint8 m_procCharges; // Aura charges (0 for infinite) + uint8 m_stackAmount; // Aura stack amount bool m_positive:1; bool m_permanent:1; @@ -339,14 +356,10 @@ class MANGOS_DLL_SPEC Aura bool m_isPersistent:1; bool m_isDeathPersist:1; bool m_isRemovedOnShapeLost:1; - bool m_updated:1; + bool m_updated:1; // Prevent remove aura by stack if set bool m_in_use:1; // true while in Aura::ApplyModifier call - int32 m_periodicTimer; - uint32 m_PeriodicEventId; - DiminishingGroup m_AuraDRGroup; private: - void UpdateSlotCounterAndDuration(bool add); void CleanupTriggeredSpells(); }; diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 91a88851f..5dfdbb9d3 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -98,8 +98,8 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]= &Spell::EffectDispel, // 38 SPELL_EFFECT_DISPEL &Spell::EffectUnused, // 39 SPELL_EFFECT_LANGUAGE &Spell::EffectDualWield, // 40 SPELL_EFFECT_DUAL_WIELD - &Spell::EffectSummonWild, // 41 SPELL_EFFECT_SUMMON_WILD - &Spell::EffectSummonGuardian, // 42 SPELL_EFFECT_SUMMON_GUARDIAN + &Spell::EffectUnused, // 41 SPELL_EFFECT_JUMP + &Spell::EffectUnused, // 42 SPELL_EFFECT_JUMP2 &Spell::EffectTeleUnitsFaceCaster, // 43 SPELL_EFFECT_TELEPORT_UNITS_FACE_CASTER &Spell::EffectLearnSkill, // 44 SPELL_EFFECT_SKILL_STEP &Spell::EffectAddHonor, // 45 SPELL_EFFECT_ADD_HONOR honor/pvp related @@ -154,7 +154,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]= &Spell::EffectSelfResurrect, // 94 SPELL_EFFECT_SELF_RESURRECT &Spell::EffectSkinning, // 95 SPELL_EFFECT_SKINNING &Spell::EffectCharge, // 96 SPELL_EFFECT_CHARGE - &Spell::EffectSummonCritter, // 97 SPELL_EFFECT_SUMMON_CRITTER + &Spell::EffectUnused, // 97 SPELL_EFFECT_97 &Spell::EffectKnockBack, // 98 SPELL_EFFECT_KNOCK_BACK &Spell::EffectDisEnchant, // 99 SPELL_EFFECT_DISENCHANT &Spell::EffectInebriate, //100 SPELL_EFFECT_INEBRIATE @@ -169,7 +169,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]= &Spell::EffectSummonDeadPet, //109 SPELL_EFFECT_SUMMON_DEAD_PET &Spell::EffectDestroyAllTotems, //110 SPELL_EFFECT_DESTROY_ALL_TOTEMS &Spell::EffectDurabilityDamage, //111 SPELL_EFFECT_DURABILITY_DAMAGE - &Spell::EffectSummonDemon, //112 SPELL_EFFECT_SUMMON_DEMON + &Spell::EffectUnused, //112 SPELL_EFFECT_112 &Spell::EffectResurrectNew, //113 SPELL_EFFECT_RESURRECT_NEW &Spell::EffectTaunt, //114 SPELL_EFFECT_ATTACK_ME &Spell::EffectDurabilityDamagePCT, //115 SPELL_EFFECT_DURABILITY_DAMAGE_PCT @@ -384,6 +384,14 @@ void Spell::EffectSchoolDMG(uint32 effect_idx) // Heroic Throw ${$m1+$AP*.50} else if(m_spellInfo->SpellFamilyFlags & 0x0000000100000000LL) damage+= uint32(m_caster->GetTotalAttackPowerValue(BASE_ATTACK) * 0.5f); + // Shockwave ${$m3/100*$AP} + else if(m_spellInfo->SpellFamilyFlags & 0x0000800000000000LL) + { + int32 pct = m_caster->CalculateSpellDamage(m_spellInfo, 2, m_spellInfo->EffectBasePoints[2], unitTarget); + if (pct > 0) + damage+= int32(m_caster->GetTotalAttackPowerValue(BASE_ATTACK) * pct / 100); + break; + } break; } case SPELLFAMILY_WARLOCK: @@ -397,6 +405,13 @@ void Spell::EffectSchoolDMG(uint32 effect_idx) } break; } + case SPELLFAMILY_PRIEST: + { + // Shadow Word: Death - deals damage equal to damage done to caster + if (m_spellInfo->SpellFamilyFlags & 0x0000000200000000LL) + m_caster->CastCustomSpell(m_caster, 32409, &damage, 0, 0, true); + break; + } case SPELLFAMILY_DRUID: { // Ferocious Bite @@ -473,31 +488,29 @@ void Spell::EffectSchoolDMG(uint32 effect_idx) // consume from stack dozes not more that have combo-points if(uint32 combo = ((Player*)m_caster)->GetComboPoints()) { - // count consumed deadly poison doses at target - uint32 doses = 0; - - // remove consumed poison doses + Aura *poison = 0; + // Lookup for Deadly poison (only attacker applied) Unit::AuraList const& auras = unitTarget->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); for(Unit::AuraList::const_iterator itr = auras.begin(); itr!=auras.end() && combo;) - { - // Deadly poison (only attacker applied) - if( (*itr)->GetSpellProto()->SpellFamilyName==SPELLFAMILY_ROGUE && ((*itr)->GetSpellProto()->SpellFamilyFlags & 0x10000) && - (*itr)->GetSpellProto()->SpellVisual[0]==5100 && (*itr)->GetCasterGUID()==m_caster->GetGUID() ) + if( (*itr)->GetSpellProto()->SpellFamilyName==SPELLFAMILY_ROGUE && + (*itr)->GetSpellProto()->SpellFamilyFlags & 0x10000 && + (*itr)->GetCasterGUID()==m_caster->GetGUID() ) { - --combo; - ++doses; - - unitTarget->RemoveSingleAuraFromStack((*itr)->GetId(), (*itr)->GetEffIndex()); - - itr = auras.begin(); + poison = *itr; + break; } - else - ++itr; + // count consumed deadly poison doses at target + if (poison) + { + uint32 spellId = poison->GetId(); + uint32 doses = poison->GetStackAmount(); + if (doses > combo) + doses = combo; + for (int i=0; i< doses; i++) + unitTarget->RemoveSingleSpellAurasFromStack(spellId); + damage *= doses; + damage += int32(((Player*)m_caster)->GetTotalAttackPowerValue(BASE_ATTACK) * 0.03f * doses); } - - damage *= doses; - damage += int32(((Player*)m_caster)->GetTotalAttackPowerValue(BASE_ATTACK) * 0.03f * doses); - // Eviscerate and Envenom Bonus Damage (item set effect) if(m_caster->GetDummyAura(37169)) damage += ((Player*)m_caster)->GetComboPoints()*40; @@ -565,19 +578,25 @@ void Spell::EffectSchoolDMG(uint32 effect_idx) } case SPELLFAMILY_PALADIN: { - // Judgement of Vengeance + // Judgement of Vengeance ${1+0.22*$SPH+0.14*$AP} + 10% for each application of Holy Vengeance on the target if((m_spellInfo->SpellFamilyFlags & 0x800000000LL) && m_spellInfo->SpellIconID==2292) { + float ap = m_caster->GetTotalAttackPowerValue(BASE_ATTACK); + int32 holy = m_caster->SpellBaseDamageBonus(GetSpellSchoolMask(m_spellInfo)) + + m_caster->SpellBaseDamageBonusForVictim(GetSpellSchoolMask(m_spellInfo), unitTarget); + damage+=int32(ap * 0.14f) + int32(holy * 22 / 100); + // Get stack of Holy Vengeance on the target added by caster uint32 stacks = 0; Unit::AuraList const& auras = unitTarget->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); for(Unit::AuraList::const_iterator itr = auras.begin(); itr!=auras.end(); ++itr) if((*itr)->GetId() == 31803 && (*itr)->GetCasterGUID()==m_caster->GetGUID()) - ++stacks; - if(!stacks) - //No damage if the target isn't affected by this - damage = -1; - else - damage *= stacks; + { + stacks = (*itr)->GetStackAmount(); + break; + } + // + 10% for each application of Holy Vengeance on the target + if(stacks) + damage += damage * stacks * 10 /100; } // Avenger's Shield ($m1+0.07*$SPH+0.07*$AP) else if(m_spellInfo->SpellFamilyFlags & 0x0000000000004000LL) @@ -936,16 +955,12 @@ void Spell::EffectDummy(uint32 i) } case 28730: // Arcane Torrent (Mana) { - int32 count = 0; - Unit::AuraList const& m_dummyAuras = m_caster->GetAurasByType(SPELL_AURA_DUMMY); - for(Unit::AuraList::const_iterator i = m_dummyAuras.begin(); i != m_dummyAuras.end(); ++i) - if ((*i)->GetId() == 28734) - ++count; - if (count) - { - m_caster->RemoveAurasDueToSpell(28734); - int32 bp = damage * count; + Aura * dummy = m_caster->GetDummyAura(28734); + if (dummy) + { + int32 bp = damage * dummy->GetStackAmount(); m_caster->CastCustomSpell(m_caster, 28733, &bp, NULL, NULL, true); + m_caster->RemoveAurasDueToSpell(28734); } return; } @@ -1289,38 +1304,55 @@ void Spell::EffectDummy(uint32 i) } break; case SPELLFAMILY_WARLOCK: - //Life Tap (only it have this with dummy effect) - if (m_spellInfo->SpellFamilyFlags == 0x40000) + // Life Tap + if (m_spellInfo->SpellFamilyFlags & 0x0000000000040000LL) { - float cost = m_currentBasePoints[0]+1; - - if(Player* modOwner = m_caster->GetSpellModOwner()) - modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_COST, cost,this); - - int32 dmg = m_caster->SpellDamageBonus(m_caster, m_spellInfo,uint32(cost > 0 ? cost : 0), SPELL_DIRECT_DAMAGE); - - if(int32(m_caster->GetHealth()) > dmg) + // In 303 exist spirit depend + uint32 spirit = m_caster->GetStat(STAT_SPIRIT); + switch (m_spellInfo->Id) + { + case 1454: damage+=spirit; break; + case 1455: damage+=spirit*15/10; break; + case 1456: damage+=spirit*2; break; + case 11687: damage+=spirit*25/10; break; + case 11688: + case 11689: + case 27222: + case 57946: damage+=spirit*3; break; + default: + sLog.outError("Spell::EffectDummy: %u Life Tap need set spirit multipler", m_spellInfo->Id); + return; + } +// Think its not need (also need remove Life Tap from SpellDamageBonus or add new value) +// damage = m_caster->SpellDamageBonus(m_caster, m_spellInfo,uint32(damage > 0 ? damage : 0), SPELL_DIRECT_DAMAGE); + if(int32(unitTarget->GetHealth()) > damage) { // Shouldn't Appear in Combat Log - m_caster->ModifyHealth(-dmg); - - int32 mana = dmg; + unitTarget->ModifyHealth(-damage); + int32 mana = damage; + // Improved Life Tap mod Unit::AuraList const& auraDummy = m_caster->GetAurasByType(SPELL_AURA_DUMMY); for(Unit::AuraList::const_iterator itr = auraDummy.begin(); itr != auraDummy.end(); ++itr) { - // only Imp. Life Tap have this in combination with dummy aura if((*itr)->GetSpellProto()->SpellFamilyName==SPELLFAMILY_WARLOCK && (*itr)->GetSpellProto()->SpellIconID == 208) mana = ((*itr)->GetModifier()->m_amount + 100)* mana / 100; } - - m_caster->CastCustomSpell(m_caster,31818,&mana,NULL,NULL,true,NULL); + m_caster->CastCustomSpell(unitTarget, 31818, &mana, NULL, NULL, true); // Mana Feed - int32 manaFeedVal = m_caster->CalculateSpellDamage(m_spellInfo,1, m_spellInfo->EffectBasePoints[1],m_caster); - manaFeedVal = manaFeedVal * mana / 100; + int32 manaFeedVal = 0; + Unit::AuraList const& mod = m_caster->GetAurasByType(SPELL_AURA_ADD_FLAT_MODIFIER); + for(Unit::AuraList::const_iterator itr = mod.begin(); itr != mod.end(); ++itr) + { + if((*itr)->GetSpellProto()->SpellFamilyName==SPELLFAMILY_WARLOCK && (*itr)->GetSpellProto()->SpellIconID == 1982) + manaFeedVal+= (*itr)->GetModifier()->m_amount; + } if(manaFeedVal > 0) - m_caster->CastCustomSpell(m_caster,32553,&manaFeedVal,NULL,NULL,true,NULL); + { + manaFeedVal = manaFeedVal * mana / 100; + m_caster->CastCustomSpell(m_caster, 32553, &manaFeedVal, NULL, NULL, true, NULL); + } } else SendCastResult(SPELL_FAILED_FIZZLE); @@ -1328,6 +1360,30 @@ void Spell::EffectDummy(uint32 i) } break; case SPELLFAMILY_PRIEST: + // Penance + if (m_spellInfo->SpellFamilyFlags & 0x0080000000000000LL) + { + if (!unitTarget) + return; + + int hurt = 0; + int heal = 0; + switch(m_spellInfo->Id) + { + case 47540: hurt = 47758; heal = 47757; break; + case 53005: hurt = 53001; heal = 52986; break; + case 53006: hurt = 53002; heal = 52987; break; + case 53007: hurt = 53003; heal = 52988; break; + default: + sLog.outError("Spell::EffectDummy: Spell %u Penance need set correct heal/damage spell", m_spellInfo->Id); + return; + } + if (m_caster->IsFriendlyTo(unitTarget)) + m_caster->CastSpell(unitTarget, heal, true, 0); + else + m_caster->CastSpell(unitTarget, hurt, true, 0); + return; + } switch(m_spellInfo->Id ) { case 28598: // Touch of Weakness triggered spell @@ -1435,32 +1491,6 @@ void Spell::EffectDummy(uint32 i) m_damage+= damage; return; } - // Kill command - if(m_spellInfo->SpellFamilyFlags & 0x00080000000000LL) - { - if(m_caster->getClass()!=CLASS_HUNTER) - return; - - // clear hunter crit aura state - m_caster->ModifyAuraState(AURA_STATE_HUNTER_CRIT_STRIKE,false); - - // additional damage from pet to pet target - Pet* pet = m_caster->GetPet(); - if(!pet || !pet->getVictim()) - return; - - uint32 spell_id = 0; - switch (m_spellInfo->Id) - { - case 34026: spell_id = 34027; break; // rank 1 - default: - sLog.outError("Spell::EffectDummy: Spell %u not handled in KC",m_spellInfo->Id); - return; - } - - pet->CastSpell(pet->getVictim(), spell_id, true); - return; - } switch(m_spellInfo->Id) { @@ -1519,6 +1549,8 @@ void Spell::EffectDummy(uint32 i) case 20930: hurt = 25902; heal = 25903; break; case 27174: hurt = 27176; heal = 27175; break; case 33072: hurt = 33073; heal = 33074; break; + case 48824: hurt = 48822; heal = 48820; break; + case 48825: hurt = 48823; heal = 48821; break; default: sLog.outError("Spell::EffectDummy: Spell %u not handled in HS",m_spellInfo->Id); return; @@ -1634,6 +1666,8 @@ void Spell::EffectDummy(uint32 i) //Shaman Rockbiter Weapon if (m_spellInfo->SpellFamilyFlags == 0x400000) { + // TODO: use expect spell for enchant (if exist talent) + // In 3.0.3 no mods present for rockbiter uint32 spell_id = 0; switch(m_spellInfo->Id) { @@ -1641,11 +1675,6 @@ void Spell::EffectDummy(uint32 i) case 8018: spell_id = 36750; break; // Rank 2 case 8019: spell_id = 36755; break; // Rank 3 case 10399: spell_id = 36759; break; // Rank 4 - case 16314: spell_id = 36763; break; // Rank 5 - case 16315: spell_id = 36766; break; // Rank 6 - case 16316: spell_id = 36771; break; // Rank 7 - case 25479: spell_id = 36775; break; // Rank 8 - case 25485: spell_id = 36499; break; // Rank 9 default: sLog.outError("Spell::EffectDummy: Spell %u not handled in RW",m_spellInfo->Id); return; @@ -1694,7 +1723,29 @@ void Spell::EffectDummy(uint32 i) m_caster->CastCustomSpell(unitTarget,39609,&EffectBasePoints0,NULL,NULL,true,NULL,NULL,m_originalCasterGUID); return; } - + // Lava Lash + if (m_spellInfo->SpellFamilyFlags2 & 0x00000004) + { + if (m_caster->GetTypeId()!=TYPEID_PLAYER) + return; + Item *item = ((Player*)m_caster)->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND); + if (item) + { + // Damage is increased if your off-hand weapon is enchanted with Flametongue. + Unit::AuraList const& auraDummy = m_caster->GetAurasByType(SPELL_AURA_DUMMY); + for(Unit::AuraList::const_iterator itr = auraDummy.begin(); itr != auraDummy.end(); ++itr) + { + if( (*itr)->GetSpellProto()->SpellFamilyName==SPELLFAMILY_SHAMAN && + (*itr)->GetSpellProto()->SpellFamilyFlags & 0x0000000000200000LL && + (*itr)->GetCastItemGUID() == item->GetGUID()) + { + m_damage += m_damage * damage / 100; + return; + } + } + } + return; + } break; } @@ -1854,11 +1905,9 @@ void Spell::EffectTriggerSpell(uint32 i) { // remove all harmful spells on you... if( // ignore positive and passive auras - !iter->second->IsPositive() && !iter->second->IsPassive() && + !iter->second->IsPositive() && !iter->second->IsPassive() && // ignore physical auras - (GetSpellSchoolMask(iter->second->GetSpellProto()) & SPELL_SCHOOL_MASK_NORMAL)==0 && - // ignore immunity persistent spells - !( iter->second->GetSpellProto()->AttributesEx & 0x10000 ) ) + (GetSpellSchoolMask(iter->second->GetSpellProto()) & SPELL_SCHOOL_MASK_NORMAL)==0 ) { m_caster->RemoveAurasDueToSpell(iter->second->GetSpellProto()->Id); iter = Auras.begin(); @@ -1953,12 +2002,7 @@ void Spell::EffectTriggerMissileSpell(uint32 effect_idx) if (m_CastItem) DEBUG_LOG("WORLD: cast Item spellId - %i", spellInfo->Id); - Spell *spell = new Spell(m_caster, spellInfo, true, m_originalCasterGUID ); - - SpellCastTargets targets; - targets.setDestination(m_targets.m_destX,m_targets.m_destY,m_targets.m_destZ); - spell->m_CastItem = m_CastItem; - spell->prepare(&targets, NULL); + m_caster->CastSpell(m_targets.m_destX, m_targets.m_destY, m_targets.m_destZ, spellInfo, true, m_CastItem, 0, m_originalCasterGUID); } void Spell::EffectTeleportUnits(uint32 i) @@ -2197,31 +2241,6 @@ void Spell::EffectApplyAura(uint32 i) if(!Aur) return; - // TODO Make a way so it works for every related spell! - if(unitTarget->GetTypeId()==TYPEID_PLAYER) // Negative buff should only be applied on players - { - uint32 spellId = 0; - if(m_spellInfo->CasterAuraStateNot==AURA_STATE_WEAKENED_SOUL || m_spellInfo->TargetAuraStateNot==AURA_STATE_WEAKENED_SOUL) - spellId = 6788; // Weakened Soul - else if(m_spellInfo->CasterAuraStateNot==AURA_STATE_FORBEARANCE || m_spellInfo->TargetAuraStateNot==AURA_STATE_FORBEARANCE) - spellId = 25771; // Forbearance - else if(m_spellInfo->CasterAuraStateNot==AURA_STATE_HYPOTHERMIA) - spellId = 41425; // Hypothermia - else if (m_spellInfo->Mechanic == MECHANIC_BANDAGE) // Bandages - spellId = 11196; // Recently Bandaged - else if( (m_spellInfo->AttributesEx & 0x20) && (m_spellInfo->AttributesEx2 & 0x20000) ) - spellId = 23230; // Blood Fury - Healing Reduction - - SpellEntry const *AdditionalSpellInfo = sSpellStore.LookupEntry(spellId); - if (AdditionalSpellInfo) - { - // applied at target by target - Aura* AdditionalAura = CreateAura(AdditionalSpellInfo, 0, &m_currentBasePoints[0], unitTarget,unitTarget, 0); - unitTarget->AddAura(AdditionalAura); - sLog.outDebug("Spell: Additional Aura is: %u", AdditionalSpellInfo->EffectApplyAuraName[0]); - } - } - // Prayer of Mending (jump animation), we need formal caster instead original for correct animation if( m_spellInfo->SpellFamilyName == SPELLFAMILY_PRIEST && (m_spellInfo->SpellFamilyFlags & 0x00002000000000LL)) m_caster->CastSpell(unitTarget, 41637, true, NULL, Aur, m_originalCasterGUID); @@ -2274,7 +2293,8 @@ void Spell::EffectPowerDrain(uint32 i) unitTarget->ModifyPower(drain_power,-new_damage); - if(drain_power == POWER_MANA) + // Don`t restore from self drain + if(drain_power == POWER_MANA && m_caster != unitTarget) { float manaMultiplier = m_spellInfo->EffectMultipleValue[i]; if(manaMultiplier==0) @@ -2572,8 +2592,8 @@ void Spell::DoCreateItem(uint32 i, uint32 itemtype) if (num_to_add < 1) num_to_add = 1; - if (num_to_add > pProto->Stackable) - num_to_add = pProto->Stackable; + if (num_to_add > pProto->GetMaxStackSize()) + num_to_add = pProto->GetMaxStackSize(); // init items_count to 1, since 1 item will be created regardless of specialization int items_count=1; @@ -2696,6 +2716,8 @@ void Spell::EffectEnergize(uint32 i) if(m_spellInfo->EffectMiscValue[i] < 0 || m_spellInfo->EffectMiscValue[i] >= MAX_POWERS) return; + Powers power = Powers(m_spellInfo->EffectMiscValue[i]); + // Some level depends spells int multiplier = 0; int level_diff = 0; @@ -2726,8 +2748,6 @@ void Spell::EffectEnergize(uint32 i) if(damage < 0) return; - Powers power = Powers(m_spellInfo->EffectMiscValue[i]); - if(unitTarget->GetMaxPower(power) == 0) return; @@ -3163,6 +3183,8 @@ void Spell::EffectSummonType(uint32 i) case SUMMON_TYPE_GUARDIAN: case SUMMON_TYPE_POSESSED: case SUMMON_TYPE_POSESSED2: + case SUMMON_TYPE_FORCE_OF_NATURE: + case SUMMON_TYPE_GUARDIAN2: EffectSummonGuardian(i); break; case SUMMON_TYPE_WILD: @@ -4243,21 +4265,22 @@ void Spell::EffectWeaponDmg(uint32 i) // Devastate bonus and sunder armor refresh else if(m_spellInfo->SpellVisual[0] == 671 && m_spellInfo->SpellIconID == 1508) { - customBonusDamagePercentMod = true; - bonusDamagePercentMod = 0.0f; // only applied if auras found - - Unit::AuraList const& list = unitTarget->GetAurasByType(SPELL_AURA_MOD_RESISTANCE); - for(Unit::AuraList::const_iterator itr=list.begin();itr!=list.end();++itr) + uint32 stack = 0; + // Need refresh all Sunder Armor auras from this caster + Unit::AuraMap& suAuras = unitTarget->GetAuras(); + for(Unit::AuraMap::iterator itr = suAuras.begin(); itr != suAuras.end(); ++itr) { - SpellEntry const *proto = (*itr)->GetSpellProto(); - if(proto->SpellVisual[0] == 406 && proto->SpellIconID == 565) + SpellEntry const *spellInfo = (*itr).second->GetSpellProto(); + if( spellInfo->SpellFamilyName == SPELLFAMILY_WARRIOR && + spellInfo->SpellFamilyFlags & 0x0000000000004000LL && + (*itr).second->GetCasterGUID() == m_caster->GetGUID()) { - int32 duration = GetSpellDuration(proto); - (*itr)->SetAuraDuration(duration); - (*itr)->SendAuraUpdate(false); - bonusDamagePercentMod += 1.0f; // +100% + (*itr).second->RefreshAura(); + stack = (*itr).second->GetStackAmount(); } } + if (stack) + spell_bonus += stack * CalculateDamage(2, unitTarget); } break; } @@ -4623,6 +4646,8 @@ void Spell::EffectScriptEffect(uint32 effIndex) case 11729: case 11730: case 27230: + case 47871: + case 47878: { uint32 itemtype; uint32 rank = 0; @@ -4641,13 +4666,15 @@ void Spell::EffectScriptEffect(uint32 effIndex) } } - static uint32 const itypes[6][3] = { + static uint32 const itypes[8][3] = { { 5512,19004,19005}, // Minor Healthstone { 5511,19006,19007}, // Lesser Healthstone { 5509,19008,19009}, // Healthstone { 5510,19010,19011}, // Greater Healthstone { 9421,19012,19013}, // Major Healthstone - {22103,22104,22105} // Master Healthstone + {22103,22104,22105}, // Master Healthstone + {36889,36890,36891}, // Demonic Healthstone + {36892,36893,36894} // Fel Healthstone }; switch(m_spellInfo->Id) @@ -4658,6 +4685,8 @@ void Spell::EffectScriptEffect(uint32 effIndex) case 11729: itemtype=itypes[3][rank];break; // Greater Healthstone case 11730: itemtype=itypes[4][rank];break; // Major Healthstone case 27230: itemtype=itypes[5][rank];break; // Master Healthstone + case 47871: itemtype=itypes[6][rank];break; // Demonic Healthstone + case 47878: itemtype=itypes[7][rank];break; // Fel Healthstone default: return; } @@ -4666,12 +4695,11 @@ void Spell::EffectScriptEffect(uint32 effIndex) } // Brittle Armor - need remove one 24575 Brittle Armor aura case 24590: - unitTarget->RemoveSingleAuraFromStack(24575, 0); - unitTarget->RemoveSingleAuraFromStack(24575, 1); + unitTarget->RemoveSingleSpellAurasFromStack(24575); return; // Mercurial Shield - need remove one 26464 Mercurial Shield aura case 26465: - unitTarget->RemoveSingleAuraFromStack(26464, 0); + unitTarget->RemoveSingleSpellAurasFromStack(26464); return; // Orb teleport spells case 25140: @@ -4922,8 +4950,7 @@ void Spell::EffectScriptEffect(uint32 effIndex) if (!(familyFlag & 0x000000800000C000LL)) continue; // Refresh aura duration - aura->SetAuraDuration(aura->GetAuraMaxDuration()); - aura->SendAuraUpdate(false); + aura->RefreshAura(); // Serpent Sting - Instantly deals 40% of the damage done by your Serpent Sting. if (familyFlag & 0x0000000000004000LL && aura->GetEffIndex() == 0) @@ -5409,7 +5436,8 @@ void Spell::EffectFeedPet(uint32 i) Player *_player = (Player*)m_caster; - if(!itemTarget) + Item* foodItem = m_targets.getItemTarget(); + if(!foodItem) return; Pet *pet = _player->GetPet(); @@ -5419,15 +5447,15 @@ void Spell::EffectFeedPet(uint32 i) if(!pet->isAlive()) return; - int32 benefit = pet->GetCurrentFoodBenefitLevel(itemTarget->GetProto()->ItemLevel); + int32 benefit = pet->GetCurrentFoodBenefitLevel(foodItem->GetProto()->ItemLevel); if(benefit <= 0) return; uint32 count = 1; - _player->DestroyItemCount(itemTarget,count,true); + _player->DestroyItemCount(foodItem,count,true); // TODO: fix crash when a spell has two effects, both pointed at the same item target - m_caster->CastCustomSpell(m_caster,m_spellInfo->EffectTriggerSpell[i],&benefit,NULL,NULL,true); + m_caster->CastCustomSpell(pet,m_spellInfo->EffectTriggerSpell[i],&benefit,NULL,NULL,true); } void Spell::EffectDismissPet(uint32 /*i*/) diff --git a/src/game/SpellHandler.cpp b/src/game/SpellHandler.cpp index 5e3d660b0..2063fa34b 100644 --- a/src/game/SpellHandler.cpp +++ b/src/game/SpellHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 5ae1bc199..0a136f4fd 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -169,6 +169,13 @@ SpellSpecific GetSpellSpecific(uint32 spellId) if (spellInfo->Dispel == DISPEL_POISON) return SPELL_STING; + // only hunter aspects have this (but not all aspects in hunter family) + if( spellInfo->SpellFamilyFlags & 0x0044000000380000LL || spellInfo->SpellFamilyFlags2 & 0x00003010) + return SPELL_ASPECT; + + if( spellInfo->SpellFamilyFlags2 & 0x00000002 ) + return SPELL_TRACKER; + break; } case SPELLFAMILY_PALADIN: @@ -182,9 +189,9 @@ SpellSpecific GetSpellSpecific(uint32 spellId) if ((spellInfo->SpellFamilyFlags & 0x00000820180400LL) && (spellInfo->AttributesEx3 & 0x200)) return SPELL_JUDGEMENT; - for (int i = 0; i < 3; i++) // TODO: fix it for WotLK!!! + for (int i = 0; i < 3; i++) { - // only paladin auras have this + // only paladin auras have this (for palaldin class family) if (spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AREA_AURA_RAID) return SPELL_AURA; } @@ -200,6 +207,11 @@ SpellSpecific GetSpellSpecific(uint32 spellId) case SPELLFAMILY_POTION: return spellmgr.GetSpellElixirSpecific(spellInfo->Id); + + case SPELLFAMILY_DEATHKNIGHT: + if ((spellInfo->Attributes & 0x10) && (spellInfo->AttributesEx2 & 0x10) && (spellInfo->AttributesEx4 & 0x200000)) + return SPELL_PRESENCE; + break; } // only warlock armor/skin have this (in additional to family cases) @@ -208,20 +220,6 @@ SpellSpecific GetSpellSpecific(uint32 spellId) return SPELL_WARLOCK_ARMOR; } - // only hunter aspects have this (but not all aspects in hunter family) - if( spellInfo->activeIconID == 122 && (GetSpellSchoolMask(spellInfo) & SPELL_SCHOOL_MASK_NATURE) && - (spellInfo->Attributes & 0x50000) != 0 && (spellInfo->Attributes & 0x9000010) == 0) - { - return SPELL_ASPECT; - } - - for(int i = 0; i < 3; i++) - if( spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AURA && ( - spellInfo->EffectApplyAuraName[i] == SPELL_AURA_TRACK_CREATURES || - spellInfo->EffectApplyAuraName[i] == SPELL_AURA_TRACK_RESOURCES || - spellInfo->EffectApplyAuraName[i] == SPELL_AURA_TRACK_STEALTHED ) ) - return SPELL_TRACKER; - // elixirs can have different families, but potion most ofc. if(SpellSpecific sp = spellmgr.GetSpellElixirSpecific(spellInfo->Id)) return sp; @@ -245,6 +243,7 @@ bool IsSingleFromSpellSpecificPerCaster(uint32 spellSpec1,uint32 spellSpec2) case SPELL_MAGE_POLYMORPH: case SPELL_POSITIVE_SHOUT: case SPELL_JUDGEMENT: + case SPELL_PRESENCE: return spellSpec1==spellSpec2; case SPELL_BATTLE_ELIXIR: return spellSpec2==SPELL_BATTLE_ELIXIR @@ -816,15 +815,12 @@ void SpellMgr::LoadSpellProcEvents() uint32 count = 0; - // 0 1 2 3 4 5 6 7 8 - QueryResult *result = WorldDatabase.Query("SELECT entry, SchoolMask, SpellFamilyName, SpellFamilyMask, procFlags, procEx, ppmRate, CustomChance, Cooldown FROM spell_proc_event"); + // 0 1 2 3 4 5 6 7 8 9 10 + QueryResult *result = WorldDatabase.Query("SELECT entry, SchoolMask, SpellFamilyName, SpellFamilyMask0, SpellFamilyMask1, SpellFamilyMask2, procFlags, procEx, ppmRate, CustomChance, Cooldown FROM spell_proc_event"); if( !result ) { - barGoLink bar( 1 ); - bar.step(); - sLog.outString(); sLog.outString( ">> Loaded %u spell proc event conditions", count ); return; @@ -851,12 +847,13 @@ void SpellMgr::LoadSpellProcEvents() spe.schoolMask = fields[1].GetUInt32(); spe.spellFamilyName = fields[2].GetUInt32(); - spe.spellFamilyMask = fields[3].GetUInt64(); - spe.procFlags = fields[4].GetUInt32(); - spe.procEx = fields[5].GetUInt32(); - spe.ppmRate = fields[6].GetFloat(); - spe.customChance = fields[7].GetFloat(); - spe.cooldown = fields[8].GetUInt32(); + spe.spellFamilyMask = (uint64)fields[3].GetUInt32()|((uint64)fields[4].GetUInt32()<<32); + spe.spellFamilyMask2= fields[5].GetUInt32(); + spe.procFlags = fields[6].GetUInt32(); + spe.procEx = fields[7].GetUInt32(); + spe.ppmRate = fields[8].GetFloat(); + spe.customChance = fields[9].GetFloat(); + spe.cooldown = fields[10].GetUInt32(); mSpellProcEventMap[entry] = spe; @@ -891,7 +888,7 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const * spellP return false; // Always trigger for this - if (EventProcFlag & (PROC_FLAG_KILLED | PROC_FLAG_KILL_AND_GET_XP)) + if (EventProcFlag & (PROC_FLAG_KILLED | PROC_FLAG_KILL)) return true; if (spellProcEvent) // Exist event data @@ -917,9 +914,10 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const * spellP return false; // spellFamilyName is Ok need check for spellFamilyMask if present - if(spellProcEvent->spellFamilyMask) + if(spellProcEvent->spellFamilyMask || spellProcEvent->spellFamilyMask2) { - if ((spellProcEvent->spellFamilyMask & procSpell->SpellFamilyFlags) == 0) + if ((spellProcEvent->spellFamilyMask & procSpell->SpellFamilyFlags ) == 0 && + (spellProcEvent->spellFamilyMask2 & procSpell->SpellFamilyFlags2) == 0) return false; active = true; // Spell added manualy -> so its active spell } @@ -1131,7 +1129,7 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons case SPELLFAMILY_ROGUE: { // Garrote-Silence -> Garrote (multi-family check) - if( spellInfo_1->SpellIconID == 498 && spellInfo_1->SpellVisual == 0 && spellInfo_2->SpellIconID == 498 ) + if( spellInfo_1->SpellIconID == 498 && spellInfo_1->SpellVisual[0] == 0 && spellInfo_2->SpellIconID == 498 ) return false; break; @@ -1194,7 +1192,7 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons //Corruption & Seed of corruption if( spellInfo_1->SpellIconID == 313 && spellInfo_2->SpellIconID == 1932 || spellInfo_2->SpellIconID == 313 && spellInfo_1->SpellIconID == 1932 ) - if(spellInfo_1->SpellVisual != 0 && spellInfo_2->SpellVisual != 0) + if(spellInfo_1->SpellVisual[0] != 0 && spellInfo_2->SpellVisual[0] != 0) return true; // can't be stacked // Corruption and Unstable Affliction @@ -1591,6 +1589,8 @@ void SpellMgr::LoadSpellChains() ++count; } while( result->NextRow() ); + delete result; + // additional integrity checks for(SpellChainMap::iterator i = mSpellChains.begin(); i != mSpellChains.end(); ++i) { @@ -1639,8 +1639,6 @@ void SpellMgr::LoadSpellChains() } } - delete result; - sLog.outString(); sLog.outString( ">> Loaded %u spell chain records", count ); } @@ -1685,7 +1683,8 @@ void SpellMgr::LoadSpellLearnSpells() { mSpellLearnSpells.clear(); // need for reload case - QueryResult *result = WorldDatabase.Query("SELECT entry, SpellID FROM spell_learn_spell"); + // 0 1 2 + QueryResult *result = WorldDatabase.Query("SELECT entry, SpellID, Active FROM spell_learn_spell"); if(!result) { barGoLink bar( 1 ); @@ -1709,6 +1708,7 @@ void SpellMgr::LoadSpellLearnSpells() SpellLearnSpellNode node; node.spell = fields[1].GetUInt32(); + node.active = fields[2].GetBool(); node.autoLearned= false; if(!sSpellStore.LookupEntry(spell_id)) @@ -1745,6 +1745,7 @@ void SpellMgr::LoadSpellLearnSpells() { SpellLearnSpellNode dbc_node; dbc_node.spell = entry->EffectTriggerSpell[i]; + dbc_node.active = true; // all dbc based learned spells is active (show in spell book or hide by client itself) // ignore learning not existed spells (broken/outdated/or generic learnig spell 483 if(!sSpellStore.LookupEntry(dbc_node.spell)) @@ -2251,11 +2252,24 @@ bool SpellMgr::IsSpellValid(SpellEntry const* spellInfo, Player* pl, bool msg) return true; } -bool IsSpellAllowedInLocation(SpellEntry const *spellInfo,uint32 map_id,uint32 zone_id,uint32 area_id) +uint8 GetSpellAllowedInLocationError(SpellEntry const *spellInfo,uint32 map_id,uint32 zone_id,uint32 area_id) { // normal case - if( spellInfo->AreaId > 0 && spellInfo->AreaId != zone_id && spellInfo->AreaId != area_id ) - return false; + if( spellInfo->AreaGroupId > 0) + { + bool found = false; + + AreaGroupEntry const* groupEntry = sAreaGroupStore.LookupEntry(spellInfo->AreaGroupId); + if(groupEntry) + { + for (uint8 i=0; i<7; i++) + if( groupEntry->AreaId[i] == zone_id || groupEntry->AreaId[i] == area_id ) + found = true; + } + + if(!found) + return SPELL_FAILED_INCORRECT_AREA; + } // elixirs (all area dependent elixirs have family SPELLFAMILY_POTION, use this for speedup) if(spellInfo->SpellFamilyName==SPELLFAMILY_POTION) @@ -2265,28 +2279,28 @@ bool IsSpellAllowedInLocation(SpellEntry const *spellInfo,uint32 map_id,uint32 z if(mask & ELIXIR_BATTLE_MASK) { if(spellInfo->Id==45373) // Bloodberry Elixir - return zone_id==4075; + return zone_id==4075 ? 0 : SPELL_FAILED_REQUIRES_AREA; } if(mask & ELIXIR_UNSTABLE_MASK) { // in the Blade's Edge Mountains Plateaus and Gruul's Lair. - return zone_id ==3522 || map_id==565; + return zone_id ==3522 || map_id==565 ? 0 : SPELL_FAILED_INCORRECT_AREA; } if(mask & ELIXIR_SHATTRATH_MASK) { // in Tempest Keep, Serpentshrine Cavern, Caverns of Time: Mount Hyjal, Black Temple, Sunwell Plateau if(zone_id ==3607 || map_id==534 || map_id==564 || zone_id==4075) - return true; + return 0; MapEntry const* mapEntry = sMapStore.LookupEntry(map_id); if(!mapEntry) - return false; + return SPELL_FAILED_INCORRECT_AREA; - return mapEntry->multimap_id==206; + return mapEntry->multimap_id==206 ? 0 : SPELL_FAILED_INCORRECT_AREA; } // elixirs not have another limitations - return true; + return 0; } } @@ -2298,25 +2312,28 @@ bool IsSpellAllowedInLocation(SpellEntry const *spellInfo,uint32 map_id,uint32 z { MapEntry const* mapEntry = sMapStore.LookupEntry(map_id); if(!mapEntry) - return false; + return SPELL_FAILED_INCORRECT_AREA; - return mapEntry->multimap_id==206; + return mapEntry->multimap_id==206 ? 0 : SPELL_FAILED_REQUIRES_AREA; } case 41617: // Cenarion Mana Salve case 41619: // Cenarion Healing Salve { MapEntry const* mapEntry = sMapStore.LookupEntry(map_id); if(!mapEntry) - return false; + return SPELL_FAILED_INCORRECT_AREA; - return mapEntry->multimap_id==207; + return mapEntry->multimap_id==207 ? 0 : SPELL_FAILED_REQUIRES_AREA; } case 40216: // Dragonmaw Illusion case 42016: // Dragonmaw Illusion - return area_id == 3759 || area_id == 3966 || area_id == 3939; + return area_id == 3759 || area_id == 3966 || area_id == 3939 ? 0 : SPELL_FAILED_INCORRECT_AREA; + case 51721: // Dominion Over Acherus + case 54055: // Dominion Over Acherus + return area_id == 4281 || area_id == 4342 ? 0 : SPELL_FAILED_INCORRECT_AREA; } - return true; + return 0; } void SpellMgr::LoadSkillLineAbilityMap() diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index d7870cccc..8189cd7cb 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -273,7 +273,8 @@ enum SpellSpecific SPELL_JUDGEMENT = 13, SPELL_BATTLE_ELIXIR = 14, SPELL_GUARDIAN_ELIXIR = 15, - SPELL_FLASK_ELIXIR = 16 + SPELL_FLASK_ELIXIR = 16, + SPELL_PRESENCE = 17 }; SpellSpecific GetSpellSpecific(uint32 spellId); @@ -314,6 +315,15 @@ int32 CompareAuraRanks(uint32 spellId_1, uint32 effIndex_1, uint32 spellId_2, ui bool IsSingleFromSpellSpecificPerCaster(uint32 spellSpec1,uint32 spellSpec2); bool IsPassiveSpell(uint32 spellId); +inline bool IsPassiveSpellStackableWithRanks(SpellEntry const* spellProto) +{ + if(!IsPassiveSpell(spellProto->Id)) + return false; + + return !IsSpellHaveEffect(spellProto,SPELL_EFFECT_APPLY_AURA); +} + + inline bool IsDeathPersistentSpell(SpellEntry const *spellInfo) { switch(spellInfo->Id) @@ -341,7 +351,7 @@ bool IsSingleTargetSpells(SpellEntry const *spellInfo1, SpellEntry const *spellI bool IsAuraAddedBySpell(uint32 auraType, uint32 spellId); -bool IsSpellAllowedInLocation(SpellEntry const *spellInfo,uint32 map_id,uint32 zone_id,uint32 area_id); +uint8 GetSpellAllowedInLocationError(SpellEntry const *spellInfo,uint32 map_id,uint32 zone_id,uint32 area_id); inline bool IsAreaEffectTarget( Targets target ) { @@ -352,15 +362,16 @@ inline bool IsAreaEffectTarget( Targets target ) case TARGET_ALL_ENEMY_IN_AREA_INSTANT: case TARGET_ALL_PARTY_AROUND_CASTER: case TARGET_ALL_AROUND_CASTER: + case TARGET_IN_FRONT_OF_CASTER: case TARGET_ALL_ENEMY_IN_AREA_CHANNELED: case TARGET_ALL_FRIENDLY_UNITS_AROUND_CASTER: + case TARGET_ALL_FRIENDLY_UNITS_IN_AREA: case TARGET_ALL_PARTY: case TARGET_ALL_PARTY_AROUND_CASTER_2: case TARGET_AREAEFFECT_PARTY: case TARGET_AREAEFFECT_CUSTOM_2: + case TARGET_ALL_RAID_AROUND_CASTER: case TARGET_AREAEFFECT_PARTY_AND_CLASS: - case TARGET_IN_FRONT_OF_CASTER: - case TARGET_ALL_FRIENDLY_UNITS_IN_AREA: return true; default: break; @@ -404,6 +415,11 @@ inline bool isSpellBreakStealth(SpellEntry const* spellInfo) return !(spellInfo->AttributesEx & SPELL_ATTR_EX_NOT_BREAK_STEALTH); } +inline bool IsAutoRepeatRangedSpell(SpellEntry const* spellInfo) +{ + return (spellInfo->Attributes & SPELL_ATTR_RANGED) && (spellInfo->AttributesEx2 & SPELL_ATTR_EX2_AUTOREPEAT_FLAG); +} + uint8 GetErrorAtShapeshiftedCast (SpellEntry const *spellInfo, uint32 form); inline bool IsChanneledSpell(SpellEntry const* spellInfo) @@ -431,6 +447,17 @@ inline uint32 GetSpellMechanicMask(SpellEntry const* spellInfo, int32 effect) return mask; } +inline uint32 GetAllSpellMechanicMask(SpellEntry const* spellInfo) +{ + uint32 mask = 0; + if (spellInfo->Mechanic) + mask |= 1<Mechanic; + for (int i=0; i< 3; ++i) + if (spellInfo->EffectMechanic[i]) + mask |= 1<EffectMechanic[i]; + return mask; +} + inline Mechanics GetEffectMechanic(SpellEntry const* spellInfo, int32 effect) { if (spellInfo->EffectMechanic[effect]) @@ -467,7 +494,7 @@ enum ProcFlags PROC_FLAG_NONE = 0x00000000, PROC_FLAG_KILLED = 0x00000001, // 00 Killed by agressor - PROC_FLAG_KILL_AND_GET_XP = 0x00000002, // 01 Kill that yields experience or honor + PROC_FLAG_KILL = 0x00000002, // 01 Kill target (in most cases need XP/Honor reward) PROC_FLAG_SUCCESSFUL_MILEE_HIT = 0x00000004, // 02 Successful melee auto attack PROC_FLAG_TAKEN_MELEE_HIT = 0x00000008, // 03 Taken damage from melee auto attack hit @@ -539,7 +566,8 @@ struct SpellProcEventEntry { uint32 schoolMask; // if nonzero - bit mask for matching proc condition based on spell candidate's school: Fire=2, Mask=1<<(2-1)=2 uint32 spellFamilyName; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyNamer value - uint64 spellFamilyMask; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags (like auras 107 and 108 do) + uint64 spellFamilyMask; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags (like auras 107 and 108 do) + uint32 spellFamilyMask2; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags2 (like auras 107 and 108 do) uint32 procFlags; // bitmask for matching proc event uint32 procEx; // proc Extend info (see ProcFlagsEx) float ppmRate; // for melee (ranged?) damage spells - proc rate per minute. if zero, falls back to flat chance from Spell.dbc @@ -665,6 +693,7 @@ typedef std::map SpellLearnSkillMap; struct SpellLearnSpellNode { uint32 spell; + bool active; // show in spellbook or not bool autoLearned; }; diff --git a/src/game/StatSystem.cpp b/src/game/StatSystem.cpp index a4127e832..a369bc3ec 100644 --- a/src/game/StatSystem.cpp +++ b/src/game/StatSystem.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -261,12 +261,12 @@ void Player::UpdateAttackPowerAndDamage(bool ranged ) { switch(getClass()) { - case CLASS_WARRIOR: val2 = level*3.0f + GetStat(STAT_STRENGTH)*2.0f - 20.0f; break; - case CLASS_PALADIN: val2 = level*3.0f + GetStat(STAT_STRENGTH)*2.0f - 20.0f; break; + case CLASS_WARRIOR: val2 = level*3.0f + GetStat(STAT_STRENGTH)*2.0f - 20.0f; break; + case CLASS_PALADIN: val2 = level*3.0f + GetStat(STAT_STRENGTH)*2.0f - 20.0f; break; case CLASS_DEATH_KNIGHT: val2 = level*3.0f + GetStat(STAT_STRENGTH)*2.0f - 20.0f; break; - case CLASS_ROGUE: val2 = level*2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f; break; - case CLASS_HUNTER: val2 = level*2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f; break; - case CLASS_SHAMAN: val2 = level*2.0f + GetStat(STAT_STRENGTH)*2.0f - 20.0f; break; + case CLASS_ROGUE: val2 = level*2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f; break; + case CLASS_HUNTER: val2 = level*2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f; break; + case CLASS_SHAMAN: val2 = level*2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f; break; case CLASS_DRUID: { //Check if Predatory Strikes is skilled @@ -318,21 +318,21 @@ void Player::UpdateAttackPowerAndDamage(bool ranged ) float attPowerMod = GetModifierValue(unitMod, TOTAL_VALUE); //add dynamic flat mods - if ((getClassMask() & CLASSMASK_WAND_USERS)==0) + if( ranged ) { - if( ranged ) + if ((getClassMask() & CLASSMASK_WAND_USERS)==0) { - AuraList const& mRAPbyIntellect = GetAurasByType(SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT); - for(AuraList::const_iterator i = mRAPbyIntellect.begin();i != mRAPbyIntellect.end(); ++i) - attPowerMod += int32(GetStat(Stats((*i)->GetModifier()->m_miscvalue)) * (*i)->GetModifier()->m_amount / 100.0f); - } - else - { - AuraList const& mRAPbyIntellect = GetAurasByType(SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT); - for(AuraList::const_iterator i = mRAPbyIntellect.begin();i != mRAPbyIntellect.end(); ++i) + AuraList const& mRAPbyStat = GetAurasByType(SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT); + for(AuraList::const_iterator i = mRAPbyStat.begin();i != mRAPbyStat.end(); ++i) attPowerMod += int32(GetStat(Stats((*i)->GetModifier()->m_miscvalue)) * (*i)->GetModifier()->m_amount / 100.0f); } } + else + { + AuraList const& mAPbyStat = GetAurasByType(SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT); + for(AuraList::const_iterator i = mAPbyStat.begin();i != mAPbyStat.end(); ++i) + attPowerMod += int32(GetStat(Stats((*i)->GetModifier()->m_miscvalue)) * (*i)->GetModifier()->m_amount / 100.0f); + } float attPowerMultiplier = GetModifierValue(unitMod, TOTAL_PCT) - 1.0f; diff --git a/src/game/TargetedMovementGenerator.cpp b/src/game/TargetedMovementGenerator.cpp index 53dc2acdc..e0a25477f 100644 --- a/src/game/TargetedMovementGenerator.cpp +++ b/src/game/TargetedMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/TargetedMovementGenerator.h b/src/game/TargetedMovementGenerator.h index 87fda16e9..478c54fe3 100644 --- a/src/game/TargetedMovementGenerator.h +++ b/src/game/TargetedMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/TaxiHandler.cpp b/src/game/TaxiHandler.cpp index 391268011..ac8f21542 100644 --- a/src/game/TaxiHandler.cpp +++ b/src/game/TaxiHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/TemporarySummon.cpp b/src/game/TemporarySummon.cpp index 0d653b2b2..d24e3ba83 100644 --- a/src/game/TemporarySummon.cpp +++ b/src/game/TemporarySummon.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/TemporarySummon.h b/src/game/TemporarySummon.h index c49e1ad17..002e2da0c 100644 --- a/src/game/TemporarySummon.h +++ b/src/game/TemporarySummon.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ThreatManager.cpp b/src/game/ThreatManager.cpp index 069115493..7932d46c4 100644 --- a/src/game/ThreatManager.cpp +++ b/src/game/ThreatManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -265,11 +265,12 @@ HostilReference* ThreatContainer::selectNextVictim(Creature* pAttacker, HostilRe { HostilReference* currentRef = NULL; bool found = false; + bool noPriorityTargetFound = false; std::list::iterator lastRef = iThreatList.end(); lastRef--; - for(std::list::iterator iter = iThreatList.begin(); iter != iThreatList.end() && !found; ++iter) + for(std::list::iterator iter = iThreatList.begin(); iter != iThreatList.end() && !found;) { currentRef = (*iter); @@ -277,14 +278,23 @@ HostilReference* ThreatContainer::selectNextVictim(Creature* pAttacker, HostilRe assert(target); // if the ref has status online the target must be there ! // some units are prefered in comparison to others - if(iter != lastRef && (target->IsImmunedToDamage(pAttacker->GetMeleeDamageSchoolMask(), false) || - target->hasUnitState(UNIT_STAT_CONFUSED | UNIT_STAT_FLEEING) - ) ) + if(!noPriorityTargetFound && (target->IsImmunedToDamage(pAttacker->GetMeleeDamageSchoolMask()) || target->hasNegativeAuraWithInterruptFlag(AURA_INTERRUPT_FLAG_DAMAGE)) ) { - // current victim is a second choice target, so don't compare threat with it below - if(currentRef == pCurrentVictim) - pCurrentVictim = NULL; - continue; + if(iter != lastRef) + { + // current victim is a second choice target, so don't compare threat with it below + if(currentRef == pCurrentVictim) + pCurrentVictim = NULL; + ++iter; + continue; + } + else + { + // if we reached to this point, everyone in the threatlist is a second choice target. In such a situation the target with the highest threat should be attacked. + noPriorityTargetFound = true; + iter = iThreatList.begin(); + continue; + } } if(!pAttacker->IsOutOfThreatArea(target)) // skip non attackable currently targets @@ -312,6 +322,7 @@ HostilReference* ThreatContainer::selectNextVictim(Creature* pAttacker, HostilRe break; } } + ++iter; } if(!found) currentRef = NULL; diff --git a/src/game/ThreatManager.h b/src/game/ThreatManager.h index e5e3fdcfa..b6e2d3da0 100644 --- a/src/game/ThreatManager.h +++ b/src/game/ThreatManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Totem.cpp b/src/game/Totem.cpp index 5f21b7cd9..504e3ce3e 100644 --- a/src/game/Totem.cpp +++ b/src/game/Totem.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -159,7 +159,7 @@ void Totem::SetTypeBySummonSpell(SpellEntry const * spellProto) m_type = TOTEM_STATUE; //Jewelery statue } -bool Totem::IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges) +bool Totem::IsImmunedToSpell(SpellEntry const* spellInfo) { for (int i=0;i<3;i++) { @@ -172,5 +172,5 @@ bool Totem::IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges) continue; } } - return Creature::IsImmunedToSpell(spellInfo, useCharges); + return Creature::IsImmunedToSpell(spellInfo); } diff --git a/src/game/Totem.h b/src/game/Totem.h index 33ace85c6..df4abaada 100644 --- a/src/game/Totem.h +++ b/src/game/Totem.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -53,7 +53,7 @@ class Totem : public Creature void UpdateAttackPowerAndDamage(bool /*ranged*/ ) {} void UpdateDamagePhysical(WeaponAttackType /*attType*/) {} - bool IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges = false); + bool IsImmunedToSpell(SpellEntry const* spellInfo); protected: TotemType m_type; diff --git a/src/game/TotemAI.cpp b/src/game/TotemAI.cpp index 572a8b04d..d86b86a71 100644 --- a/src/game/TotemAI.cpp +++ b/src/game/TotemAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/TotemAI.h b/src/game/TotemAI.h index 6861e7ba0..c0759b075 100644 --- a/src/game/TotemAI.h +++ b/src/game/TotemAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/TradeHandler.cpp b/src/game/TradeHandler.cpp index 601807eef..0a315e3c5 100644 --- a/src/game/TradeHandler.cpp +++ b/src/game/TradeHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Transports.cpp b/src/game/Transports.cpp index c5606aff9..d0de6afd4 100644 --- a/src/game/Transports.cpp +++ b/src/game/Transports.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Transports.h b/src/game/Transports.h index ab48ee9a9..c6ef2a3a4 100644 --- a/src/game/Transports.h +++ b/src/game/Transports.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Traveller.h b/src/game/Traveller.h index 2d112896f..51ea73651 100644 --- a/src/game/Traveller.h +++ b/src/game/Traveller.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index a339e1baa..fcc496a55 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -68,20 +68,6 @@ static bool isNonTriggerAura[TOTAL_AURAS]; // Prepare lists static bool procPrepared = InitTriggerAuraData(); -bool IsPassiveStackableSpell( uint32 spellId ) -{ - if(!IsPassiveSpell(spellId)) - return false; - - SpellEntry const* spellProto = sSpellStore.LookupEntry(spellId); - if(!spellProto) - return false; - if (spellProto->procFlags) - return false; - - return true; -} - Unit::Unit() : WorldObject(), i_motionMaster(this), m_ThreatManager(this), m_HostilRefManager(this) { @@ -230,6 +216,7 @@ void Unit::Update( uint32 p_time ) ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, GetHealth() < GetMaxHealth()*0.20f); ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, GetHealth() < GetMaxHealth()*0.35f); + ModifyAuraState(AURA_STATE_HEALTH_ABOVE_75_PERCENT, GetHealth() > GetMaxHealth()*0.75f); i_motionMaster.UpdateMotion(p_time); } @@ -559,10 +546,8 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa // call kill spell proc event (before real die and combat stop to triggering auras removed at death/combat stop) if(player && player!=pVictim) { - if(player->RewardPlayerAndGroupAtKill(pVictim)) - player->ProcDamageAndSpell(pVictim, PROC_FLAG_KILL_AND_GET_XP, PROC_FLAG_KILLED, PROC_EX_NONE, 0); - else - player->ProcDamageAndSpell(pVictim, PROC_FLAG_NONE, PROC_FLAG_KILLED,PROC_EX_NONE, 0); + player->RewardPlayerAndGroupAtKill(pVictim); + player->ProcDamageAndSpell(pVictim, PROC_FLAG_KILL, PROC_FLAG_KILLED, PROC_EX_NONE, 0); } DEBUG_LOG("DealDamageAttackStop"); @@ -1146,10 +1131,7 @@ void Unit::DealSpellDamage(SpellNonMeleeDamage *damageInfo, bool durabilityLoss) { SpellEntry const *spellInfo = (*itr).second->GetSpellProto(); if( spellInfo->AttributesEx3 & 0x40000 && spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN && ((*itr).second->GetCasterGUID() == GetGUID())) - { - (*itr).second->SetAuraDuration((*itr).second->GetAuraMaxDuration()); - (*itr).second->SendAuraUpdate(false); - } + (*itr).second->RefreshAura(); } } // Call default DealDamage @@ -1205,7 +1187,7 @@ void Unit::CalculateMeleeDamage(Unit *pVictim, uint32 damage, CalcDamageInfo *da } // Physical Immune check - if(damageInfo->target->IsImmunedToDamage(SpellSchoolMask(damageInfo->damageSchoolMask),true)) + if(damageInfo->target->IsImmunedToDamage(SpellSchoolMask(damageInfo->damageSchoolMask))) { damageInfo->HitInfo |= HITINFO_NORMALSWING; damageInfo->TargetState = VICTIMSTATE_IS_IMMUNE; @@ -1505,10 +1487,7 @@ void Unit::DealMeleeDamage(CalcDamageInfo *damageInfo, bool durabilityLoss) { SpellEntry const *spellInfo = (*itr).second->GetSpellProto(); if( spellInfo->AttributesEx3 & 0x40000 && spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN && ((*itr).second->GetCasterGUID() == GetGUID())) - { - (*itr).second->SetAuraDuration((*itr).second->GetAuraMaxDuration()); - (*itr).second->SendAuraUpdate(false); - } + (*itr).second->RefreshAura(); } } @@ -1642,89 +1621,235 @@ void Unit::CalcAbsorbResist(Unit *pVictim,SpellSchoolMask schoolMask, DamageEffe int32 RemainingDamage = damage - *resist; + // Get unit state (need for some absorb check) + uint32 unitflag = pVictim->GetUInt32Value(UNIT_FIELD_FLAGS); + // Need remove expired auras after + bool existExpired = false; // absorb without mana cost - int32 reflectDamage = 0; - Aura* reflectAura = NULL; AuraList const& vSchoolAbsorb = pVictim->GetAurasByType(SPELL_AURA_SCHOOL_ABSORB); - for(AuraList::const_iterator i = vSchoolAbsorb.begin(), next; i != vSchoolAbsorb.end() && RemainingDamage > 0; i = next) + for(AuraList::const_iterator i = vSchoolAbsorb.begin(); i != vSchoolAbsorb.end() && RemainingDamage > 0; ++i) { - next = i; ++next; - - if (((*i)->GetModifier()->m_miscvalue & schoolMask)==0) + Modifier* mod = (*i)->GetModifier(); + if (!(mod->m_miscvalue & schoolMask)) continue; - // Cheat Death - if((*i)->GetSpellProto()->SpellFamilyName==SPELLFAMILY_ROGUE && (*i)->GetSpellProto()->SpellIconID == 2109) - { - if (((Player*)pVictim)->HasSpellCooldown(31231)) - continue; - if (pVictim->GetHealth() <= RemainingDamage) - { - int32 chance = (*i)->GetModifier()->m_amount; - if (roll_chance_i(chance)) - { - pVictim->CastSpell(pVictim,31231,true); - ((Player*)pVictim)->AddSpellCooldown(31231,0,time(NULL)+60); + SpellEntry const* spellProto = (*i)->GetSpellProto(); - // with health > 10% lost health until health==10%, in other case no losses - uint32 health10 = pVictim->GetMaxHealth()/10; - RemainingDamage = pVictim->GetHealth() > health10 ? pVictim->GetHealth() - health10 : 0; - } - } + // Max Amount can be absorbed by this aura + int32 currentAbsorb = mod->m_amount; + + // Found empty aura (umpossible but..) + if (currentAbsorb <=0) + { + existExpired = true; continue; } - - int32 currentAbsorb; - - // Reflective Shield - if ((pVictim != this) && (*i)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_PRIEST && (*i)->GetSpellProto()->SpellFamilyFlags == 0x1) + // Handle custom absorb auras + // TODO: try find better way + switch(spellProto->SpellFamilyName) { - if(Unit* caster = (*i)->GetCaster()) + case SPELLFAMILY_GENERIC: { - AuraList const& vOverRideCS = caster->GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); - for(AuraList::const_iterator k = vOverRideCS.begin(); k != vOverRideCS.end(); ++k) + // Astral Shift + if (spellProto->SpellIconID == 3066) { - switch((*k)->GetModifier()->m_miscvalue) + //reduces all damage taken while stun, fear or silence + if (unitflag & (UNIT_FLAG_STUNNED|UNIT_FLAG_FLEEING|UNIT_FLAG_SILENCED)) + RemainingDamage -= RemainingDamage * currentAbsorb / 100; + continue; + } + // Nerves of Steel + if (spellProto->SpellIconID == 2115) + { + // while affected by Stun and Fear + if (unitflag&(UNIT_FLAG_STUNNED|UNIT_FLAG_FLEEING)) + RemainingDamage -= RemainingDamage * currentAbsorb / 100; + continue; + } + // Spell Deflection + if (spellProto->SpellIconID == 3006) + { + // You have a chance equal to your Parry chance + if (damagetype == DIRECT_DAMAGE && // Only for direct damage + roll_chance_f(pVictim->GetUnitParryChance())) // Roll chance + RemainingDamage -= RemainingDamage * currentAbsorb / 100; + continue; + } + // Reflective Shield (Lady Malande boss) + if (spellProto->Id == 41475) + { + int32 reflectDamage = 0; + if(RemainingDamage < currentAbsorb) + reflectDamage = RemainingDamage / 2; + else + reflectDamage = currentAbsorb / 2; + pVictim->CastCustomSpell(this, 33619, &reflectDamage, NULL, NULL, true, NULL, *i); + break; + } + if (spellProto->Id == 39228 || // Argussian Compass + spellProto->Id == 60218) // Essence of Gossamer + { + // Max absorb stored in 1 dummy effect + if (spellProto->EffectBasePoints[1] < currentAbsorb) + currentAbsorb = spellProto->EffectBasePoints[1]; + break; + } + break; + } + case SPELLFAMILY_DRUID: + { + // Primal Tenacity + if (spellProto->SpellIconID == 2253) + { + //reduces all damage taken while Stunned + if (unitflag & UNIT_FLAG_STUNNED) + RemainingDamage -= RemainingDamage * currentAbsorb / 100; + continue; + } + break; + } + case SPELLFAMILY_ROGUE: + { + // Cheat Death + if(spellProto->SpellIconID == 2109) + { + if (pVictim->GetTypeId()==TYPEID_PLAYER && // Only players + pVictim->GetHealth() <= RemainingDamage && // Only if damage kill + !((Player*)pVictim)->HasSpellCooldown(31231) && // Only if no cooldown + roll_chance_i(currentAbsorb)) // Only if roll { - case 5065: // Rank 1 - case 5064: // Rank 2 - case 5063: // Rank 3 - case 5062: // Rank 4 - case 5061: // Rank 5 - { - if(RemainingDamage >= (*i)->GetModifier()->m_amount) - reflectDamage = (*i)->GetModifier()->m_amount * (*k)->GetModifier()->m_amount/100; - else - reflectDamage = (*k)->GetModifier()->m_amount * RemainingDamage/100; - reflectAura = *i; - - } break; - default: break; + pVictim->CastSpell(pVictim,31231,true); + ((Player*)pVictim)->AddSpellCooldown(31231,0,time(NULL)+60); + // with health > 10% lost health until health==10%, in other case no losses + uint32 health10 = pVictim->GetMaxHealth()/10; + RemainingDamage = pVictim->GetHealth() > health10 ? pVictim->GetHealth() - health10 : 0; } - - if(reflectDamage) - break; + continue; } + break; } + case SPELLFAMILY_PRIEST: + { + // Reflective Shield + if (spellProto->SpellFamilyFlags == 0x1) + { + if (pVictim == this) + break; + Unit* caster = (*i)->GetCaster(); + if (!caster) + break; + int32 reflectDamage = 0; + AuraList const& vOverRideCS = caster->GetAurasByType(SPELL_AURA_DUMMY); + for(AuraList::const_iterator k = vOverRideCS.begin(); k != vOverRideCS.end(); ++k) + { + switch((*k)->GetModifier()->m_miscvalue) + { + case 5065: // Rank 1 + case 5064: // Rank 2 + case 5063: // Rank 3 + { + if(RemainingDamage >= currentAbsorb) + reflectDamage = (*k)->GetModifier()->m_amount * currentAbsorb/100; + else + reflectDamage = (*k)->GetModifier()->m_amount * RemainingDamage/100; + } break; + default: break; + } + if (reflectDamage) + { + pVictim->CastCustomSpell(this, 33619, &reflectDamage, NULL, NULL, true, NULL, *i); + break; + } + } + break; + } + break; + } + case SPELLFAMILY_SHAMAN: + { + // Astral Shift + if (spellProto->SpellIconID == 3066) + { + //reduces all damage taken while stun, fear or silence + if (unitflag & (UNIT_FLAG_STUNNED|UNIT_FLAG_FLEEING|UNIT_FLAG_SILENCED)) + RemainingDamage -= RemainingDamage * currentAbsorb / 100; + continue; + } + break; + } + case SPELLFAMILY_DEATHKNIGHT: + { + // Shadow of Death + if (spellProto->SpellIconID == 1958) + { + // TODO: absorb only while transform + continue; + } + // Anti-Magic Shell (on self) + if (spellProto->Id == 48707) + { + // damage absorbed by Anti-Magic Shell energizes the DK with additional runic power. + // This, if I'm not mistaken, shows that we get back ~2% of the absorbed damage as runic power. + int32 absorbed = RemainingDamage * currentAbsorb / 100; + int32 regen = absorbed * 2 / 10; + pVictim->CastCustomSpell(pVictim, 49088, ®en, 0, 0, true, 0, *i); + RemainingDamage -= absorbed; + continue; + } + // Anti-Magic Shell (on single party/raid member) + if (spellProto->Id == 50462) + { + RemainingDamage -= RemainingDamage * currentAbsorb / 100; + continue; + } + // Anti-Magic Zone + if (spellProto->Id == 50461) + { + Unit* caster = (*i)->GetCaster(); + if (!caster) + continue; + int32 absorbed = RemainingDamage * currentAbsorb / 100; + int32 canabsorb = caster->GetHealth(); + if (canabsorb < absorbed) + absorbed = canabsorb; + DealDamage(caster, absorbed, NULL, damagetype, schoolMask, 0, false); + RemainingDamage -= absorbed; + continue; + } + break; + } + default: + break; } - if (RemainingDamage >= (*i)->GetModifier()->m_amount) - { - currentAbsorb = (*i)->GetModifier()->m_amount; - pVictim->RemoveAurasDueToSpell((*i)->GetId()); - next = vSchoolAbsorb.begin(); - } - else - { + // currentAbsorb - damage can be absorbed by shield + // If need absorb less damage + if (RemainingDamage < currentAbsorb) currentAbsorb = RemainingDamage; - (*i)->GetModifier()->m_amount -= RemainingDamage; - } RemainingDamage -= currentAbsorb; + + // Reduce shield amount + mod->m_amount-=currentAbsorb; + // Need remove it later + if (mod->m_amount<=0) + existExpired = true; + } + + // Remove all expired absorb auras + if (existExpired) + { + for(AuraList::const_iterator i = vSchoolAbsorb.begin(), next; i != vSchoolAbsorb.end();) + { + if ((*i)->GetModifier()->m_amount<=0) + { + pVictim->RemoveAurasDueToSpell((*i)->GetId()); + i = vSchoolAbsorb.begin(); + } + else + ++i; + } } - // do not cast spells while looping auras; auras can get invalid otherwise - if (reflectDamage) - pVictim->CastCustomSpell(this, 33619, &reflectDamage, NULL, NULL, true, NULL, reflectAura); // absorb by mana cost AuraList const& vManaShield = pVictim->GetAurasByType(SPELL_AURA_MANA_SHIELD); @@ -1906,10 +2031,10 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst(const Unit *pVictim, WeaponAttackT // Useful if want to specify crit & miss chances for melee, else it could be removed DEBUG_LOG("MELEE OUTCOME: miss %f crit %f dodge %f parry %f block %f", miss_chance,crit_chance,dodge_chance,parry_chance,block_chance); - return RollMeleeOutcomeAgainst(pVictim, attType, int32(crit_chance*100), int32(miss_chance*100), int32(dodge_chance*100),int32(parry_chance*100),int32(block_chance*100), false); + return RollMeleeOutcomeAgainst(pVictim, attType, int32(crit_chance*100), int32(miss_chance*100), int32(dodge_chance*100),int32(parry_chance*100),int32(block_chance*100)); } -MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttackType attType, int32 crit_chance, int32 miss_chance, int32 dodge_chance, int32 parry_chance, int32 block_chance, bool SpellCasted ) const +MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttackType attType, int32 crit_chance, int32 miss_chance, int32 dodge_chance, int32 parry_chance, int32 block_chance) const { if(pVictim->GetTypeId()==TYPEID_UNIT && ((Creature*)pVictim)->IsInEvadeMode()) return MELEE_HIT_EVADE; @@ -1922,7 +2047,6 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttack // bonus from skills is 0.04% int32 skillBonus = 4 * ( attackerWeaponSkill - victimMaxSkillValueForLevel ); - int32 skillBonus2 = 4 * ( attackerMaxSkillValueForLevel - victimDefenseSkill ); int32 sum = 0, tmp = 0; int32 roll = urand (0, 10000); @@ -2003,16 +2127,6 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttack && ((tmp -= skillBonus) > 0) && (roll < (sum += tmp))) { - // Critical chance - tmp = crit_chance + skillBonus2; - if ( GetTypeId() == TYPEID_PLAYER && SpellCasted && tmp > 0 ) - { - if ( roll_chance_i(tmp/100)) - { - DEBUG_LOG ("RollMeleeOutcomeAgainst: BLOCKED CRIT"); - return MELEE_HIT_BLOCK_CRIT; - } - } DEBUG_LOG ("RollMeleeOutcomeAgainst: BLOCK <%d, %d)", sum-tmp, sum); return MELEE_HIT_BLOCK; } @@ -2020,7 +2134,7 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttack } // Critical chance - tmp = crit_chance + skillBonus2; + tmp = crit_chance; if (tmp > 0 && roll < (sum += tmp)) { @@ -2029,7 +2143,7 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttack } // Max 40% chance to score a glancing blow against mobs that are higher level (can do only players and pets and not with ranged weapon) - if( attType != RANGED_ATTACK && !SpellCasted && + if( attType != RANGED_ATTACK && (GetTypeId() == TYPEID_PLAYER || ((Creature*)this)->isPet()) && pVictim->GetTypeId() != TYPEID_PLAYER && !((Creature*)pVictim)->isPet() && getLevel() < pVictim->getLevelForTarget(this) ) @@ -2048,10 +2162,14 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttack } } - if(GetTypeId()!=TYPEID_PLAYER && !(((Creature*)this)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_CRUSH) && !((Creature*)this)->isPet() ) + // mobs can score crushing blows if they're 4 or more levels above victim + if (getLevelForTarget(pVictim) >= pVictim->getLevelForTarget(this) + 4 && + // can be from by creature (if can) or from controlled player that considered as creature + (GetTypeId()!=TYPEID_PLAYER && !((Creature*)this)->isPet() && + !(((Creature*)this)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_CRUSH) || + GetTypeId()==TYPEID_PLAYER && GetCharmerOrOwnerGUID())) { - // mobs can score crushing blows if they're 3 or more levels above victim - // or when their weapon skill is 15 or more above victim's defense skill + // when their weapon skill is 15 or more above victim's defense skill tmp = victimDefenseSkill; int32 tmpmax = victimMaxSkillValueForLevel; // having defense above your maximum (from items, talents etc.) has no effect @@ -2161,15 +2279,23 @@ bool Unit::isSpellBlocked(Unit *pVictim, SpellEntry const *spellProto, WeaponAtt { if (pVictim->HasInArc(M_PI,this)) { + /* Currently not exist spells with ignore block // Ignore combat result aura (parry/dodge check on prepare) AuraList const& ignore = GetAurasByType(SPELL_AURA_IGNORE_COMBAT_RESULT); for(AuraList::const_iterator i = ignore.begin(); i != ignore.end(); ++i) { if (!(*i)->isAffectedOnSpell(spellProto)) continue; - if ((*i)->GetModifier()->m_miscvalue == MELEE_HIT_BLOCK) + if ((*i)->GetModifier()->m_miscvalue == ) return false; } + */ + + // Check creatures flags_extra for disable block + if(pVictim->GetTypeId()==TYPEID_UNIT && + ((Creature*)pVictim)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_BLOCK ) + return false; + float blockChance = GetUnitBlockChance(); blockChance += (GetWeaponSkillValue(attackType) - pVictim->GetMaxSkillValueForLevel() )*0.04; if (roll_chance_f(blockChance)) @@ -2264,7 +2390,13 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit *pVictim, SpellEntry const *spell) // Can`t parry canParry = false; } - + // Check creatures flags_extra for disable parry + if(pVictim->GetTypeId()==TYPEID_UNIT) + { + uint32 flagEx = ((Creature*)pVictim)->GetCreatureInfo()->flags_extra; + if( flagEx & CREATURE_FLAG_EXTRA_NO_PARRY ) + canParry = false; + } // Ignore combat result aura AuraList const& ignore = GetAurasByType(SPELL_AURA_IGNORE_COMBAT_RESULT); for(AuraList::const_iterator i = ignore.begin(); i != ignore.end(); ++i) @@ -2399,8 +2531,8 @@ SpellMissInfo Unit::SpellHitResult(Unit *pVictim, SpellEntry const *spell, bool if (pVictim->GetTypeId()==TYPEID_UNIT && ((Creature*)pVictim)->IsInEvadeMode()) return SPELL_MISS_EVADE; - // Check for immune (use charges) - if (pVictim->IsImmunedToSpell(spell,true)) + // Check for immune + if (pVictim->IsImmunedToSpell(spell)) return SPELL_MISS_IMMUNE; // All positive spells can`t miss @@ -2408,8 +2540,8 @@ SpellMissInfo Unit::SpellHitResult(Unit *pVictim, SpellEntry const *spell, bool if (IsPositiveSpell(spell->Id)) return SPELL_MISS_NONE; - // Check for immune (use charges) - if (pVictim->IsImmunedToDamage(GetSpellSchoolMask(spell),true)) + // Check for immune + if (pVictim->IsImmunedToDamage(GetSpellSchoolMask(spell))) return SPELL_MISS_IMMUNE; // Try victim reflect spell @@ -2659,6 +2791,9 @@ float Unit::GetUnitCriticalChance(WeaponAttackType attackType, const Unit *pVict crit -= ((Player*)pVictim)->GetRatingBonusValue(CR_CRIT_TAKEN_MELEE); } + // Apply crit chance from defence skill + crit += (int32(GetMaxSkillValueForLevel(pVictim)) - int32(pVictim->GetDefenseSkillValue(this))) * 0.04f; + if (crit < 0.0f) crit = 0.0f; return crit; @@ -2786,7 +2921,7 @@ void Unit::_UpdateAutoRepeatSpell() if ( (GetTypeId() == TYPEID_PLAYER && ((Player*)this)->isMoving()) || IsNonMeleeSpellCasted(false,false,true) ) { // cancel wand shoot - if(m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Category == 351) + if(m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Id != SPELL_ID_AUTOSHOT) InterruptSpell(CURRENT_AUTOREPEAT_SPELL); m_AutoRepeatFirstCast = true; return; @@ -2839,7 +2974,7 @@ void Unit::SetCurrentCastedSpell( Spell * pSpell ) if ( m_currentSpells[CURRENT_AUTOREPEAT_SPELL] ) { // break autorepeat if not Auto Shot - if (m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Category == 351) + if (m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Id != SPELL_ID_AUTOSHOT) InterruptSpell(CURRENT_AUTOREPEAT_SPELL); m_AutoRepeatFirstCast = true; } @@ -2853,14 +2988,14 @@ void Unit::SetCurrentCastedSpell( Spell * pSpell ) // it also does break autorepeat if not Auto Shot if ( m_currentSpells[CURRENT_AUTOREPEAT_SPELL] && - m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Category == 351 ) + m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Id != SPELL_ID_AUTOSHOT ) InterruptSpell(CURRENT_AUTOREPEAT_SPELL); } break; case CURRENT_AUTOREPEAT_SPELL: { // only Auto Shoot does not break anything - if (pSpell->m_spellInfo->Category == 351) + if (pSpell->m_spellInfo->Id != SPELL_ID_AUTOSHOT) { // generic autorepeats break generic non-delayed and channeled non-delayed spells InterruptSpell(CURRENT_GENERIC_SPELL,false); @@ -3202,55 +3337,51 @@ bool Unit::AddAura(Aura *Aur) // passive and persistent auras can stack with themselves any number of times if (!Aur->IsPassive() && !Aur->IsPersistent()) { - // replace aura if next will > spell StackAmount - if(aurSpellInfo->StackAmount) + for(AuraMap::iterator i2 = m_Auras.lower_bound(spair); i2 != m_Auras.upper_bound(spair); ++i2) { - if(m_Auras.count(spair) >= aurSpellInfo->StackAmount) - RemoveAura(i,AURA_REMOVE_BY_STACK); - } - // if StackAmount==0 not allow auras from same caster - else - { - for(AuraMap::iterator i2 = m_Auras.lower_bound(spair); i2 != m_Auras.upper_bound(spair); ++i2) + if(i2->second->GetCasterGUID()==Aur->GetCasterGUID()) { - if(i2->second->GetCasterGUID()==Aur->GetCasterGUID()) + // Aura can stack on self -> Stack it; + if(aurSpellInfo->StackAmount) { + i2->second->modStackAmount(1); + delete Aur; + return false; + } + // can be only single (this check done at _each_ aura add + RemoveAura(i2,AURA_REMOVE_BY_STACK); + break; + } + + bool stop = false; + switch(aurSpellInfo->EffectApplyAuraName[Aur->GetEffIndex()]) + { + // DoT/HoT/etc + case SPELL_AURA_PERIODIC_DAMAGE: // allow stack + case SPELL_AURA_PERIODIC_DAMAGE_PERCENT: + case SPELL_AURA_PERIODIC_LEECH: + case SPELL_AURA_PERIODIC_HEAL: + case SPELL_AURA_OBS_MOD_HEALTH: + case SPELL_AURA_PERIODIC_MANA_LEECH: + case SPELL_AURA_PERIODIC_ENERGIZE: + case SPELL_AURA_OBS_MOD_MANA: + case SPELL_AURA_POWER_BURN_MANA: + break; + default: // not allow // can be only single (this check done at _each_ aura add RemoveAura(i2,AURA_REMOVE_BY_STACK); - break; - } - - bool stop = false; - switch(aurSpellInfo->EffectApplyAuraName[Aur->GetEffIndex()]) - { - // DoT/HoT/etc - case SPELL_AURA_PERIODIC_DAMAGE: // allow stack - case SPELL_AURA_PERIODIC_DAMAGE_PERCENT: - case SPELL_AURA_PERIODIC_LEECH: - case SPELL_AURA_PERIODIC_HEAL: - case SPELL_AURA_OBS_MOD_HEALTH: - case SPELL_AURA_PERIODIC_MANA_LEECH: - case SPELL_AURA_PERIODIC_ENERGIZE: - case SPELL_AURA_OBS_MOD_MANA: - case SPELL_AURA_POWER_BURN_MANA: - break; - default: // not allow - // can be only single (this check done at _each_ aura add - RemoveAura(i2,AURA_REMOVE_BY_STACK); - stop = true; - break; - } - - if(stop) + stop = true; break; } + + if(stop) + break; } } } - // passive auras stack with all (except passive spell proc auras) - if ((!Aur->IsPassive() || !IsPassiveStackableSpell(Aur->GetId())) && - !(Aur->GetId() == 20584 || Aur->GetId() == 8326)) + // passive auras not stacable with other ranks + if (!IsPassiveSpellStackableWithRanks(aurSpellInfo)) { if (!RemoveNoStackAurasDueToAura(Aur)) { @@ -3345,6 +3476,14 @@ bool Unit::RemoveNoStackAurasDueToAura(Aura *Aur) return false; uint32 spellId = Aur->GetId(); + + // passive spell special case (only non stackable with ranks) + if(IsPassiveSpell(spellId)) + { + if(IsPassiveSpellStackableWithRanks(spellProto)) + return true; + } + uint32 effIndex = Aur->GetEffIndex(); SpellSpecific spellId_spec = GetSpellSpecific(spellId); @@ -3363,9 +3502,11 @@ bool Unit::RemoveNoStackAurasDueToAura(Aura *Aur) uint32 i_spellId = i_spellProto->Id; + // early checks that spellId is passive non stackable spell if(IsPassiveSpell(i_spellId)) { - if(IsPassiveStackableSpell(i_spellId)) + // passive non-stackable spells not stackable only for same caster + if(Aur->GetCasterGUID()!=i->second->GetCasterGUID()) continue; // passive non-stackable spells not stackable only with another rank of same spell @@ -3589,7 +3730,16 @@ void Unit::RemoveSingleAuraFromStack(uint32 spellId, uint32 effindex) { AuraMap::iterator iter = m_Auras.find(spellEffectPair(spellId, effindex)); if(iter != m_Auras.end()) - RemoveAura(iter); + { + if (iter->second->modStackAmount(-1)) + RemoveAura(iter); + } +} + +void Unit::RemoveSingleSpellAurasFromStack(uint32 spellId) +{ + for (int i=0; i<3; ++i) + RemoveSingleAuraFromStack(spellId, i); } void Unit::RemoveAurasDueToSpell(uint32 spellId, Aura* except) @@ -3800,6 +3950,17 @@ Aura* Unit::GetAura(uint32 spellId, uint32 effindex) return NULL; } +bool Unit::HasAura(uint32 spellId) const +{ + for (int i = 0; i < 3 ; ++i) + { + AuraMap::const_iterator iter = m_Auras.find(spellEffectPair(spellId, i)); + if (iter != m_Auras.end()) + return true; + } + return false; +} + void Unit::AddDynObject(DynamicObject* dynObj) { m_dynObjGUIDs.push_back(dynObj->GetGUID()); @@ -4032,7 +4193,7 @@ void Unit::SendAttackStateUpdate(CalcDamageInfo *damageInfo) data << (uint32)damageInfo->resist; // Resist } - data << (uint32)damageInfo->TargetState; + data << (uint8)damageInfo->TargetState; data << (uint32)0; data << (uint32)0; @@ -4252,15 +4413,14 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu if (!procSpell || procSpell->Id == 24659) return false; // Need remove one 24659 aura - RemoveSingleAuraFromStack(24659, 0); - RemoveSingleAuraFromStack(24659, 1); + RemoveSingleSpellAurasFromStack(24659); return true; } // Restless Strength case 24661: { // Need remove one 24662 aura - RemoveSingleAuraFromStack(24662, 0); + RemoveSingleSpellAurasFromStack(24662); return true; } // Adaptive Warding (Frostfire Regalia set) @@ -4342,7 +4502,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu case 33493: { // Cast finish spell at last charge - if (triggeredByAura->m_procCharges > 1) + if (triggeredByAura->GetAuraCharges() > 1) return false; target = this; @@ -4542,6 +4702,23 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu } return false; } + // Living Seed + case 48504: + { + triggered_spell_id = 48503; + basepoints0 = triggeredByAura->GetModifier()->m_amount; + target = this; + break; + } + // Vampiric Touch (generic, used by some boss) + case 52723: + case 60501: + { + triggered_spell_id = 52724; + basepoints0 = damage / 2; + target = this; + break; + } } break; } @@ -4566,7 +4743,8 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu return false; // mana cost save - basepoints0 = procSpell->manaCost * triggeredByAura->GetModifier()->m_amount/100; + int32 cost = procSpell->manaCost + procSpell->ManaCostPercentage * GetCreateMana() / 100; + basepoints0 = cost * triggeredByAura->GetModifier()->m_amount/100; if( basepoints0 <=0 ) return false; @@ -4574,6 +4752,43 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu triggered_spell_id = 29077; break; } + // Hot Streak + if (dummySpell->SpellIconID == 2999) + { + if (triggeredByAura->GetEffIndex()!=0) + return true; + Aura *counter = GetAura(triggeredByAura->GetId(), 1); + if (!counter) + return true; + + // Count spell criticals in a row in second aura + Modifier *mod = counter->GetModifier(); + if (procEx & PROC_EX_CRITICAL_HIT) + { + mod->m_amount *=2; + if (mod->m_amount < 100) // not enough + return true; + // Crititcal counted -> roll chance + if (roll_chance_i(triggeredByAura->GetModifier()->m_amount)) + CastSpell(this, 48108, true, castItem, triggeredByAura); + } + mod->m_amount = 25; + return true; + } + // Burnout + if (dummySpell->SpellIconID == 2998) + { + if(!procSpell) + return false; + + int32 cost = procSpell->manaCost + procSpell->ManaCostPercentage * GetCreateMana() / 100; + basepoints0 = cost * triggeredByAura->GetModifier()->m_amount/100; + if( basepoints0 <=0 ) + return false; + triggered_spell_id = 44450; + target = this; + break; + } // Incanter's Regalia set (add trigger chance to Mana Shield) if (dummySpell->SpellFamilyFlags & 0x0000000000008000LL) { @@ -4612,7 +4827,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu case 11129: { //last charge and crit - if (triggeredByAura->m_procCharges <= 1 && (procEx & PROC_EX_CRITICAL_HIT) ) + if (triggeredByAura->GetAuraCharges() <= 1 && (procEx & PROC_EX_CRITICAL_HIT) ) { RemoveAurasDueToSpell(28682); //-> remove Combustion auras return true; // charge counting (will removed) @@ -4642,15 +4857,8 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu if (procSpell == 0 || !(procEx & (PROC_EX_NORMAL_HIT|PROC_EX_CRITICAL_HIT)) || this == pVictim) return false; // Need stun or root mechanic - if (procSpell->Mechanic != MECHANIC_ROOT && procSpell->Mechanic != MECHANIC_STUN) - { - int32 i; - for (i=0; i<3; i++) - if (procSpell->EffectMechanic[i] == MECHANIC_ROOT || procSpell->EffectMechanic[i] == MECHANIC_STUN) - break; - if (i == 3) - return false; - } + if (!(GetAllSpellMechanicMask(procSpell) & ((1<Id) { @@ -4776,6 +4984,13 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu pVictim->CastCustomSpell(pVictim,34919,&basepoints0,NULL,NULL,true,castItem,triggeredByAura); return true; // no hidden cooldown } + // Divine Aegis + if (dummySpell->SpellIconID == 2820) + { + basepoints0 = damage * triggeredByAura->GetModifier()->m_amount/100; + triggered_spell_id = 47753; + break; + } switch(dummySpell->Id) { // Vampiric Embrace @@ -4906,6 +5121,39 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu break; } } + // Eclipse + if (dummySpell->SpellIconID == 2856) + { + if (!procSpell) + return false; + // Only 0 aura can proc + if (triggeredByAura->GetEffIndex()!=0) + return true; + // Wrath crit + if (procSpell->SpellFamilyFlags & 0x0000000000000001LL) + { + if (!roll_chance_i(60)) + return false; + triggered_spell_id = 48518; + target = this; + break; + } + // Starfire crit + if (procSpell->SpellFamilyFlags & 0x0000000000000004LL) + { + triggered_spell_id = 48517; + target = this; + break; + } + return false; + } + // Living Seed + else if (dummySpell->SpellIconID == 2860) + { + triggered_spell_id = 48504; + basepoints0 = triggeredByAura->GetModifier()->m_amount * damage / 100; + break; + } break; } case SPELLFAMILY_ROGUE: @@ -4929,11 +5177,6 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu if(!procSpell) return false; - // only rogue's finishing moves (maybe need additional checks) - if( procSpell->SpellFamilyName!=SPELLFAMILY_ROGUE || - (procSpell->SpellFamilyFlags & SPELLFAMILYFLAG_ROGUE__FINISHING_MOVE) == 0) - return false; - // energy cost save basepoints0 = procSpell->manaCost * triggeredByAura->GetModifier()->m_amount/100; if(basepoints0 <= 0) @@ -4966,48 +5209,15 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu } case SPELLFAMILY_PALADIN: { - // TODO: spell list, formula change in 3.0.3 - // Seal of Righteousness - melee proc dummy + // Seal of Righteousness - melee proc dummy (addition ${$MWS*(0.022*$AP+0.044*$SPH)} damage) if (dummySpell->SpellFamilyFlags&0x000000008000000LL && triggeredByAura->GetEffIndex()==0) { - if(GetTypeId() != TYPEID_PLAYER) - return false; - - uint32 spellId; - switch (triggeredByAura->GetId()) - { - case 21084: spellId = 25742; break; // Rank 1 - case 20287: spellId = 25740; break; // Rank 2 - case 20288: spellId = 25739; break; // Rank 3 - case 20289: spellId = 25738; break; // Rank 4 - case 20290: spellId = 25737; break; // Rank 5 - case 20291: spellId = 25736; break; // Rank 6 - case 20292: spellId = 25735; break; // Rank 7 - case 20293: spellId = 25713; break; // Rank 8 - case 27155: spellId = 27156; break; // Rank 9 - default: - sLog.outError("Unit::HandleDummyAuraProc: non handled possibly SoR (Id = %u)", triggeredByAura->GetId()); - return false; - } - Item *item = ((Player*)this)->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND); - float speed = (item ? item->GetProto()->Delay : BASE_ATTACK_TIME)/1000.0f; - - float damageBasePoints; - if(item && item->GetProto()->InventoryType == INVTYPE_2HWEAPON) - // two hand weapon - damageBasePoints=1.20f*triggeredByAura->GetModifier()->m_amount * 1.2f * 1.03f * speed/100.0f + 1; - else - // one hand weapon/no weapon - damageBasePoints=0.85f*ceil(triggeredByAura->GetModifier()->m_amount * 1.2f * 1.03f * speed/100.0f) - 1; - - int32 damagePoint = int32(damageBasePoints + 0.03f * (GetWeaponDamageRange(BASE_ATTACK,MINDAMAGE)+GetWeaponDamageRange(BASE_ATTACK,MAXDAMAGE))/2.0f) + 1; - - // apply damage bonuses manually - if(damagePoint >= 0) - damagePoint = SpellDamageBonus(pVictim, dummySpell, damagePoint, SPELL_DIRECT_DAMAGE); - - CastCustomSpell(pVictim,spellId,&damagePoint,NULL,NULL,true,NULL, triggeredByAura); - return true; // no hidden cooldown + triggered_spell_id = 25742; + float ap = GetTotalAttackPowerValue(BASE_ATTACK); + int32 holy = SpellBaseDamageBonus(SPELL_SCHOOL_MASK_HOLY) + + SpellBaseDamageBonusForVictim(SPELL_SCHOOL_MASK_HOLY, pVictim); + basepoints0 = GetAttackTime(BASE_ATTACK) * int32(ap*0.022f + 0.044f * holy) / 1000; + break; } // Seal of Blood do damage trigger if(dummySpell->SpellFamilyFlags & 0x0000040000000000LL) @@ -5063,8 +5273,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu } break; } - // TODO: fix basepoint calculation (changed in 3.0.3) - // Seal of Vengeance + // Seal of Vengeance (damage calc on apply aura) case 31801: { if(effIndex != 0) // effect 1,2 used by seal unleashing code @@ -5115,6 +5324,33 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu break; } + // Glyph of Divinity + case 54939: + { + // Lookup base amount mana restore + for (int i=0; i<3;i++) + if (procSpell->Effect[i] == SPELL_EFFECT_ENERGIZE) + { + int32 mana = procSpell->EffectBasePoints[i]; + CastCustomSpell(this, 54986, 0, &mana, 0, true, castItem, triggeredByAura); + break; + } + return true; + } + // Glyph of Flash of Light + case 54936: + { + triggered_spell_id = 54957; + basepoints0 = triggeredByAura->GetModifier()->m_amount*damage/100; + break; + } + // Glyph of Holy Light + case 54937: + { + triggered_spell_id = 54968; + basepoints0 = triggeredByAura->GetModifier()->m_amount*damage/100; + break; + } } break; } @@ -5173,14 +5409,19 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu if( cooldown && ((Player*)this)->HasSpellCooldown(dummySpell->Id)) return false; + // Now amount of extra power stored in 1 effect of Enchant spell + // Get it by item enchant id uint32 spellId; switch (castItem->GetEnchantmentId(EnchantmentSlot(TEMP_ENCHANTMENT_SLOT))) { - case 283: spellId = 33757; break; //1 Rank - case 284: spellId = 33756; break; //2 Rank - case 525: spellId = 33755; break; //3 Rank - case 1669:spellId = 33754; break; //4 Rank - case 2636:spellId = 33727; break; //5 Rank + case 283: spellId = 8232; break; // 1 Rank + case 284: spellId = 8235; break; // 2 Rank + case 525: spellId = 10486; break; // 3 Rank + case 1669:spellId = 16362; break; // 4 Rank + case 2636:spellId = 25505; break; // 5 Rank + case 3785:spellId = 58801; break; // 6 Rank + case 3786:spellId = 58803; break; // 7 Rank + case 3787:spellId = 58804; break; // 8 Rank default: { sLog.outError("Unit::HandleDummyAuraProc: non handled item enchantment (rank?) %u for spell id: %u (Windfury)", @@ -5196,7 +5437,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu return false; } - int32 extra_attack_power = CalculateSpellDamage(windfurySpellEntry,0,windfurySpellEntry->EffectBasePoints[0],pVictim); + int32 extra_attack_power = CalculateSpellDamage(windfurySpellEntry, 1, windfurySpellEntry->EffectBasePoints[1], pVictim); // Off-Hand case if ( castItem->GetSlot() == EQUIPMENT_SLOT_OFFHAND ) @@ -5254,15 +5495,22 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu target = this; break; } + // Glyph of Healing Wave + case 55440: + { + // Not proc from self heals + if (this==pVictim) + return false; + basepoints0 = triggeredByAura->GetModifier()->m_amount * damage / 100; + target = this; + triggered_spell_id = 55533; + break; + } } // Earth Shield if(dummySpell->SpellFamilyFlags & 0x0000040000000000LL) { - if(GetTypeId() != TYPEID_PLAYER) - return false; - - // heal basepoints0 = triggeredByAura->GetModifier()->m_amount; target = this; triggered_spell_id = 379; @@ -5335,6 +5583,33 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu } break; } + case SPELLFAMILY_DEATHKNIGHT: + { + // Vendetta + if (dummySpell->SpellFamilyFlags & 0x0000000000010000LL) + { + basepoints0 = triggeredByAura->GetModifier()->m_amount * GetMaxHealth() / 100; + triggered_spell_id = 50181; + target = this; + break; + } + // Necrosis + else if (dummySpell->SpellIconID == 2709) + { + basepoints0 = triggeredByAura->GetModifier()->m_amount * damage / 100; + triggered_spell_id = 51460; + break; + } + // Butchery + else if (dummySpell->SpellIconID == 2664) + { + basepoints0 = triggeredByAura->GetModifier()->m_amount; + triggered_spell_id = 50163; + target = this; + break; + } + break; + } default: break; } @@ -5710,8 +5985,8 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB return false; // procspell is triggered spell but we need mana cost of original casted spell uint32 originalSpellId = procSpell->Id; - // Holy Shock - if(procSpell->SpellFamilyFlags & 0x00200000) + // Holy Shock heal + if(procSpell->SpellFamilyFlags & 0x0001000000000000LL) { switch(procSpell->Id) { @@ -5720,6 +5995,8 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB case 25903: originalSpellId = 20930; break; case 27175: originalSpellId = 27174; break; case 33074: originalSpellId = 33072; break; + case 48820: originalSpellId = 48824; break; + case 48821: originalSpellId = 48825; break; default: sLog.outError("Unit::HandleProcTriggerSpell: Spell %u not handled in HShock",procSpell->Id); return false; @@ -5732,7 +6009,8 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB return false; } // percent stored in effect 1 (class scripts) base points - basepoints0 = originalSpell->manaCost*(auraSpellInfo->EffectBasePoints[1]+1)/100; + int32 cost = originalSpell->manaCost + originalSpell->ManaCostPercentage * GetCreateMana() / 100; + basepoints0 = cost*(auraSpellInfo->EffectBasePoints[1]+1)/100; trigger_spell_id = 20272; target = this; } @@ -5743,14 +6021,10 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB return false; // stacking CastSpell(this, 37658, true, NULL, triggeredByAura); - // counting - uint32 count = 0; - AuraList const& dummyAura = GetAurasByType(SPELL_AURA_DUMMY); - for(AuraList::const_iterator itr = dummyAura.begin(); itr != dummyAura.end(); ++itr) - if((*itr)->GetId()==37658) - ++count; + + Aura * dummy = GetDummyAura(37658); // release at 3 aura in stack (cont contain in basepoint of trigger aura) - if(count < triggerAmount) + if(!dummy || dummy->GetStackAmount() < triggerAmount) return false; RemoveAurasDueToSpell(37658); @@ -5764,17 +6038,14 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB return false; // stacking CastSpell(this, 54842, true, NULL, triggeredByAura); + // counting - uint32 count = 0; - AuraList const& dummyAura = GetAurasByType(SPELL_AURA_DUMMY); - for(AuraList::const_iterator itr = dummyAura.begin(); itr != dummyAura.end(); ++itr) - if((*itr)->GetId()==54842) - ++count; + Aura * dummy = GetDummyAura(54842); // release at 3 aura in stack (cont contain in basepoint of trigger aura) - if(count < triggerAmount) + if(!dummy || dummy->GetStackAmount() < triggerAmount) return false; - RemoveAurasDueToSpell(54842); + RemoveAurasDueToSpell(54842); trigger_spell_id = 54843; target = pVictim; } @@ -6000,6 +6271,50 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB return false; break; } + // Brain Freeze + case 57761: + { + if(!procSpell) + return false; + // For trigger from Blizzard need exist Improved Blizzard + if (procSpell->SpellFamilyName==SPELLFAMILY_MAGE && procSpell->SpellFamilyFlags & 0x0000000000000080) + { + bool found = false; + AuraList const& mOverrideClassScript = GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); + for(AuraList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i) + { + int32 script = (*i)->GetModifier()->m_miscvalue; + if(script==836 || script==988 || script==989) + { + found=true; + break; + } + } + if(!found) + return false; + } + break; + } + // Astral Shift + case 52179: + { + if(!procSpell) + return false; + // Need stun, fear or silence mechanic + if (!(GetAllSpellMechanicMask(procSpell) & ((1<HasSpellCooldown(trigger_spell_id)) @@ -6024,7 +6339,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB return true; } -bool Unit::HandleOverrideClassScriptAuraProc(Unit *pVictim, Aura *triggeredByAura, SpellEntry const *procSpell, uint32 cooldown) +bool Unit::HandleOverrideClassScriptAuraProc(Unit *pVictim, uint32 damage, Aura *triggeredByAura, SpellEntry const *procSpell, uint32 cooldown) { int32 scriptId = triggeredByAura->GetModifier()->m_miscvalue; @@ -6091,6 +6406,16 @@ bool Unit::HandleOverrideClassScriptAuraProc(Unit *pVictim, Aura *triggeredByAur case 5497: // Improved Mana Gems (Serpent-Coil Braid) triggered_spell_id = 37445; // Mana Surge break; + case 8152: // Serendipity + { + // if heal your target over maximum health + if (pVictim->GetHealth() + damage < pVictim->GetMaxHealth()) + return false; + int32 cost = procSpell->manaCost + procSpell->ManaCostPercentage * GetCreateMana() / 100; + int32 basepoints0 = cost * triggeredByAura->GetModifier()->m_amount/100; + CastCustomSpell(this, 47762, &basepoints0, 0, 0, true, 0, triggeredByAura); + return true; + } } // not processed @@ -6236,7 +6561,7 @@ bool Unit::IsHostileTo(Unit const* unit) const return false; // PvP FFA state - if(pTester->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_FFA_PVP) && pTarget->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_FFA_PVP)) + if(pTester->HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP) && pTarget->HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP)) return true; //= PvP states @@ -6345,7 +6670,7 @@ bool Unit::IsFriendlyTo(Unit const* unit) const return true; // PvP FFA state - if(pTester->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_FFA_PVP) && pTarget->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_FFA_PVP)) + if(pTester->HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP) && pTarget->HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP)) return false; //= PvP states @@ -6852,7 +7177,7 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3 { //Molten Fury case 4920: case 4919: - if(pVictim->HasAuraState(AURA_STATE_HEALTHLESS_20_PERCENT)) + if(pVictim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT)) TakenTotalMod *= (100.0f+(*i)->GetModifier()->m_amount)/100.0f; break; } } @@ -7239,14 +7564,22 @@ bool Unit::isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolM { switch((*i)->GetModifier()->m_miscvalue) { - case 849: crit_chance+= 10.0f; break; //Shatter Rank 1 - case 910: crit_chance+= 20.0f; break; //Shatter Rank 2 - case 911: crit_chance+= 30.0f; break; //Shatter Rank 3 - case 912: crit_chance+= 40.0f; break; //Shatter Rank 4 - case 913: crit_chance+= 50.0f; break; //Shatter Rank 5 + case 849: crit_chance+= 17.0f; break; //Shatter Rank 1 + case 910: crit_chance+= 34.0f; break; //Shatter Rank 2 + case 911: crit_chance+= 50.0f; break; //Shatter Rank 3 } } } + // Glyph of Shadowburn + if (spellProto->SpellFamilyName == SPELLFAMILY_WARLOCK && + spellProto->SpellFamilyFlags & 0x0000000000000080 && + pVictim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT)) + { + AuraList const& mOverrideClassScript = GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); + for(AuraList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i) + if((*i)->GetModifier()->m_miscvalue == 7917) + crit_chance+=(*i)->GetModifier()->m_amount; + } } break; } @@ -7256,7 +7589,6 @@ bool Unit::isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolM if (pVictim) { crit_chance = GetUnitCriticalChance(attackType, pVictim); - crit_chance+= (int32(GetMaxSkillValueForLevel(pVictim)) - int32(pVictim->GetDefenseSkillValue(this))) * 0.04f; crit_chance+= GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_SPELL_CRIT_CHANCE_SCHOOL, schoolMask); } break; @@ -7535,7 +7867,7 @@ int32 Unit::SpellBaseHealingBonusForVictim(SpellSchoolMask schoolMask, Unit *pVi return AdvertisedBenefit; } -bool Unit::IsImmunedToDamage(SpellSchoolMask shoolMask, bool useCharges) +bool Unit::IsImmunedToDamage(SpellSchoolMask shoolMask) { //If m_immuneToSchool type contain this school type, IMMUNE damage. SpellImmuneList const& schoolList = m_spellImmune[IMMUNITY_SCHOOL]; @@ -7552,7 +7884,7 @@ bool Unit::IsImmunedToDamage(SpellSchoolMask shoolMask, bool useCharges) return false; } -bool Unit::IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges) +bool Unit::IsImmunedToSpell(SpellEntry const* spellInfo) { if (!spellInfo) return false; @@ -8757,8 +9089,11 @@ int32 Unit::CalculateSpellDamage(SpellEntry const* spellProto, uint8 effect_inde int32 randomPoints = int32(spellProto->EffectDieSides[effect_index] + level * randomPointsPerLevel); float comboDamage = spellProto->EffectPointsPerComboPoint[effect_index]; - // prevent random generator from getting confused by spells casted with Unit::CastCustomSpell - int32 randvalue = spellProto->EffectBaseDice[effect_index] >= randomPoints ? spellProto->EffectBaseDice[effect_index]:irand(spellProto->EffectBaseDice[effect_index], randomPoints); + // range can have possitive and negative values, so order its for irand + int32 randvalue = int32(spellProto->EffectBaseDice[effect_index]) >= randomPoints + ? irand(randomPoints, int32(spellProto->EffectBaseDice[effect_index])) + : irand(int32(spellProto->EffectBaseDice[effect_index]), randomPoints); + int32 value = basePoints + randvalue; //random damage if(comboDamage != 0 && unitPlayer && target && (target->GetGUID() == unitPlayer->GetComboTarget())) @@ -9546,11 +9881,7 @@ void CharmInfo::SetPetNumber(uint32 petnumber, bool statwindow) bool Unit::isFrozen() const { - AuraList const& mRoot = GetAurasByType(SPELL_AURA_MOD_ROOT); - for(AuraList::const_iterator i = mRoot.begin(); i != mRoot.end(); ++i) - if( GetSpellSchoolMask((*i)->GetSpellProto()) & SPELL_SCHOOL_MASK_FROST) - return true; - return false; + return HasAuraState(AURA_STATE_FROZEN); } struct ProcTriggeredData @@ -9651,18 +9982,8 @@ uint32 createProcExtendMask(SpellNonMeleeDamage *damageInfo, SpellMissInfo missC return procEx; } -static int deep = 0; void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, SpellEntry const * procSpell, uint32 damage ) { - deep ++; - if (deep > 5) - { - sLog.outError("Prevent possible stack owerflow in Unit::ProcDamageAndSpellFor"); - if (procSpell) - sLog.outError(" Spell %u", procSpell->Id); - deep--; - return; - } // For melee/ranged based attack need update skills and set some Aura states if (procFlag & MELEE_BASED_TRIGGER_MASK) { @@ -9673,7 +9994,7 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag if (procExtra&(PROC_EX_NORMAL_HIT|PROC_EX_MISS|PROC_EX_RESIST)) { if (pTarget->GetTypeId() != TYPEID_PLAYER && pTarget->GetCreatureType() != CREATURE_TYPE_CRITTER) - ((Player*)this)->UpdateCombatSkills(pTarget, attType, MELEE_HIT_MISS, isVictim); + ((Player*)this)->UpdateCombatSkills(pTarget, attType, isVictim); } // Update defence if player is victim and parry/dodge/block if (isVictim && procExtra&(PROC_EX_DODGE|PROC_EX_PARRY|PROC_EX_BLOCK)) @@ -9725,17 +10046,6 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag ((Player*)this)->AddComboPoints(pTarget, 1); StartReactiveTimer( REACTIVE_OVERPOWER ); } - // Enable AURA_STATE_CRIT on crit - if (procExtra & PROC_EX_CRITICAL_HIT) - { - ModifyAuraState(AURA_STATE_CRIT, true); - StartReactiveTimer( REACTIVE_CRIT ); - if(getClass()==CLASS_HUNTER) - { - ModifyAuraState(AURA_STATE_HUNTER_CRIT_STRIKE, true); - StartReactiveTimer( REACTIVE_HUNTER_CRIT ); - } - } } } } @@ -9746,11 +10056,16 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag for(AuraMap::const_iterator itr = GetAuras().begin(); itr!= GetAuras().end(); ++itr) { SpellProcEventEntry const* spellProcEvent = NULL; - if(!IsTriggeredAtSpellProcEvent(itr->second, procSpell, procFlag, procExtra, attType, isVictim, (damage > 0), spellProcEvent)) + if(!IsTriggeredAtSpellProcEvent(pTarget, itr->second, procSpell, procFlag, procExtra, attType, isVictim, (damage > 0), spellProcEvent)) continue; procTriggered.push_back( ProcTriggeredData(spellProcEvent, itr->second) ); } + + // Nothing found + if (procTriggered.empty()) + return; + // Handle effects proceed this time for(ProcTriggeredList::iterator i = procTriggered.begin(); i != procTriggered.end(); ++i) { @@ -9785,7 +10100,7 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag Modifier *auraModifier = triggeredByAura->GetModifier(); SpellEntry const *spellInfo = triggeredByAura->GetSpellProto(); uint32 effIndex = triggeredByAura->GetEffIndex(); - bool useCharges = triggeredByAura->m_procCharges > 0; + bool useCharges = triggeredByAura->GetAuraCharges() > 0; // For players set spell cooldown if need uint32 cooldown = 0; if (GetTypeId() == TYPEID_PLAYER && spellProcEvent && spellProcEvent->cooldown) @@ -9828,7 +10143,7 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag case SPELL_AURA_OVERRIDE_CLASS_SCRIPTS: { sLog.outDebug("ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id,(isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId()); - if (!HandleOverrideClassScriptAuraProc(pTarget, triggeredByAura, procSpell, cooldown)) + if (!HandleOverrideClassScriptAuraProc(pTarget, damage, triggeredByAura, procSpell, cooldown)) continue; break; } @@ -9848,22 +10163,6 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag continue; break; } - case SPELL_AURA_MOD_STUN: - // Remove by default, but if charge exist drop it - if (triggeredByAura->m_procCharges == 0) - removedSpells.push_back(triggeredByAura->GetId()); - break; - case SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS: - case SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS: - // Hunter's Mark (1-4 Rangs) - if (spellInfo->SpellFamilyName == SPELLFAMILY_HUNTER && (spellInfo->SpellFamilyFlags&0x0000000000000400LL)) - { - uint32 basevalue = triggeredByAura->GetBasePoints(); - auraModifier->m_amount += basevalue/10; - if (auraModifier->m_amount > basevalue*4) - auraModifier->m_amount = basevalue*4; - } - break; case SPELL_AURA_MOD_CASTING_SPEED: // Skip melee hits or instant cast spells if (procSpell == NULL || GetSpellCastTime(procSpell) == 0) @@ -9904,18 +10203,16 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag AuraMap::const_iterator upper = GetAuras().upper_bound(i->triggeredByAura_SpellPair); for(AuraMap::const_iterator itr = lower; itr!= upper; ++itr) { - if(itr->second == i->triggeredByAura) + // If last charge dropped add spell to remove list + if(itr->second == i->triggeredByAura && triggeredByAura->DropAuraCharge()) { - triggeredByAura->m_procCharges -=1; - triggeredByAura->UpdateAuraCharges(); - if (triggeredByAura->m_procCharges <= 0) - removedSpells.push_back(triggeredByAura->GetId()); + removedSpells.push_back(triggeredByAura->GetId()); break; } } } } - if (removedSpells.size()) + if (!removedSpells.empty()) { // Sort spells and remove dublicates removedSpells.sort(); @@ -9924,7 +10221,6 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag for(RemoveSpellList::const_iterator i = removedSpells.begin(); i != removedSpells.end();i++) RemoveAurasDueToSpell(*i); } - deep--; } SpellSchoolMask Unit::GetMeleeDamageSchoolMask() const @@ -10177,7 +10473,6 @@ void Unit::ClearComboPointHolders() void Unit::ClearAllReactives() { - for(int i=0; i < MAX_REACTIVE; ++i) m_reactiveTimer[i] = 0; @@ -10185,11 +10480,6 @@ void Unit::ClearAllReactives() ModifyAuraState(AURA_STATE_DEFENSE, false); if (getClass() == CLASS_HUNTER && HasAuraState( AURA_STATE_HUNTER_PARRY)) ModifyAuraState(AURA_STATE_HUNTER_PARRY, false); - if (HasAuraState( AURA_STATE_CRIT)) - ModifyAuraState(AURA_STATE_CRIT, false); - if (getClass() == CLASS_HUNTER && HasAuraState( AURA_STATE_HUNTER_CRIT_STRIKE) ) - ModifyAuraState(AURA_STATE_HUNTER_CRIT_STRIKE, false); - if(getClass() == CLASS_WARRIOR && GetTypeId() == TYPEID_PLAYER) ((Player*)this)->ClearComboPoints(); } @@ -10217,14 +10507,6 @@ void Unit::UpdateReactives( uint32 p_time ) if ( getClass() == CLASS_HUNTER && HasAuraState(AURA_STATE_HUNTER_PARRY)) ModifyAuraState(AURA_STATE_HUNTER_PARRY, false); break; - case REACTIVE_CRIT: - if (HasAuraState(AURA_STATE_CRIT)) - ModifyAuraState(AURA_STATE_CRIT, false); - break; - case REACTIVE_HUNTER_CRIT: - if ( getClass() == CLASS_HUNTER && HasAuraState(AURA_STATE_HUNTER_CRIT_STRIKE) ) - ModifyAuraState(AURA_STATE_HUNTER_CRIT_STRIKE, false); - break; case REACTIVE_OVERPOWER: if(getClass() == CLASS_WARRIOR && GetTypeId() == TYPEID_PLAYER) ((Player*)this)->ClearComboPoints(); @@ -10291,6 +10573,16 @@ Unit* Unit::SelectNearbyTarget() const return *tcIter; } +bool Unit::hasNegativeAuraWithInterruptFlag(uint32 flag) +{ + for (AuraMap::iterator iter = m_Auras.begin(); iter != m_Auras.end(); ++iter) + { + if (!iter->second->IsPositive() && iter->second->GetSpellProto()->AuraInterruptFlags & flag) + return true; + } + return false; +} + void Unit::ApplyAttackTimePercentMod( WeaponAttackType att,float val, bool apply ) { if(val > 0) @@ -10543,7 +10835,7 @@ Pet* Unit::CreateTamedPetFrom(Creature* creatureTarget,uint32 spell_id) return pet; } -bool Unit::IsTriggeredAtSpellProcEvent(Aura* aura, SpellEntry const* procSpell, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const*& spellProcEvent ) +bool Unit::IsTriggeredAtSpellProcEvent(Unit *pVictim, Aura* aura, SpellEntry const* procSpell, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const*& spellProcEvent ) { SpellEntry const* spellProto = aura->GetSpellProto (); @@ -10573,7 +10865,17 @@ bool Unit::IsTriggeredAtSpellProcEvent(Aura* aura, SpellEntry const* procSpell, if(!SpellMgr::IsSpellProcEventCanTriggeredBy(spellProcEvent, EventProcFlag, procSpell, procFlag, procExtra, active)) return false; - // Aura added by spell can`t trogger from self (prevent drop cahres/do triggers) + // In most cases req get honor or XP from kill + if (EventProcFlag & PROC_FLAG_KILL && GetTypeId() == TYPEID_PLAYER) + { + bool allow = ((Player*)this)->isHonorOrXPTarget(pVictim); + // Shadow Word: Death - can trigger from every kill + if (aura->GetId() == 32409) + allow = true; + if (!allow) + return false; + } + // Aura added by spell can`t trogger from self (prevent drop charges/do triggers) // But except periodic triggers (can triggered from self) if(procSpell && procSpell->Id == spellProto->Id && !(spellProto->procFlags&PROC_FLAG_ON_TAKE_PERIODIC)) return false; @@ -10632,10 +10934,10 @@ bool Unit::HandleMeandingAuraProc( Aura* triggeredByAura ) uint64 caster_guid = triggeredByAura->GetCasterGUID(); // jumps - int32 jumps = triggeredByAura->m_procCharges-1; + int32 jumps = triggeredByAura->GetAuraCharges()-1; // current aura expire - triggeredByAura->m_procCharges = 1; // will removed at next charges decrease + triggeredByAura->SetAuraCharges(1); // will removed at next charges decrease // next target selection if(jumps > 0 && GetTypeId()==TYPEID_PLAYER && IS_PLAYER_GUID(caster_guid)) diff --git a/src/game/Unit.h b/src/game/Unit.h index f266130f4..376e59cf8 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -584,8 +584,9 @@ struct DiminishingReturn enum MeleeHitOutcome { MELEE_HIT_EVADE, MELEE_HIT_MISS, MELEE_HIT_DODGE, MELEE_HIT_BLOCK, MELEE_HIT_PARRY, - MELEE_HIT_GLANCING, MELEE_HIT_CRIT, MELEE_HIT_CRUSHING, MELEE_HIT_NORMAL, MELEE_HIT_BLOCK_CRIT + MELEE_HIT_GLANCING, MELEE_HIT_CRIT, MELEE_HIT_CRUSHING, MELEE_HIT_NORMAL }; + struct CleanDamage { CleanDamage(uint32 _damage, WeaponAttackType _attackType, MeleeHitOutcome _hitOutCome) : @@ -742,14 +743,12 @@ struct CharmInfo enum ReactiveType { - REACTIVE_DEFENSE = 1, - REACTIVE_HUNTER_PARRY = 2, - REACTIVE_CRIT = 3, - REACTIVE_HUNTER_CRIT = 4, - REACTIVE_OVERPOWER = 5 + REACTIVE_DEFENSE = 0, + REACTIVE_HUNTER_PARRY = 1, + REACTIVE_OVERPOWER = 2 }; -#define MAX_REACTIVE 6 +#define MAX_REACTIVE 3 #define MAX_TOTEM 4 // delay time next attack to prevent client attack animation problems @@ -823,6 +822,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject void CombatStop(bool cast = false); void CombatStopWithPets(bool cast = false); Unit* SelectNearbyTarget() const; + bool hasNegativeAuraWithInterruptFlag(uint32 flag); void addUnitState(uint32 f) { m_state |= f; } bool hasUnitState(const uint32 f) const { return (m_state & f); } @@ -946,7 +946,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject float GetPPMProcChance(uint32 WeaponSpeed, float PPM) const; MeleeHitOutcome RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttackType attType) const; - MeleeHitOutcome RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttackType attType, int32 crit_chance, int32 miss_chance, int32 dodge_chance, int32 parry_chance, int32 block_chance, bool SpellCasted ) const; + MeleeHitOutcome RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttackType attType, int32 crit_chance, int32 miss_chance, int32 dodge_chance, int32 parry_chance, int32 block_chance) const; bool isVendor() const { return HasFlag( UNIT_NPC_FLAGS, UNIT_NPC_FLAG_VENDOR ); } bool isTrainer() const { return HasFlag( UNIT_NPC_FLAGS, UNIT_NPC_FLAG_TRAINER ); } @@ -985,7 +985,10 @@ class MANGOS_DLL_SPEC Unit : public WorldObject bool HasAuraType(AuraType auraType) const; bool HasAura(uint32 spellId, uint32 effIndex) const - { return m_Auras.find(spellEffectPair(spellId, effIndex)) != m_Auras.end(); } + { + return m_Auras.find(spellEffectPair(spellId, effIndex)) != m_Auras.end(); + } + bool HasAura(uint32 spellId) const; bool virtual HasSpell(uint32 /*spellID*/) const { return false; } @@ -1084,6 +1087,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject void RemoveAura(AuraMap::iterator &i, AuraRemoveMode mode = AURA_REMOVE_BY_DEFAULT); void RemoveAura(uint32 spellId, uint32 effindex, Aura* except = NULL); + void RemoveSingleSpellAurasFromStack(uint32 spellId); void RemoveSingleAuraFromStack(uint32 spellId, uint32 effindex); void RemoveAurasDueToSpell(uint32 spellId, Aura* except = NULL); void RemoveAurasDueToItemSpell(Item* castItem,uint32 spellId); @@ -1310,9 +1314,9 @@ class MANGOS_DLL_SPEC Unit : public WorldObject void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply); void ApplySpellDispelImmunity(const SpellEntry * spellProto, DispelType type, bool apply); - virtual bool IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges = false); + virtual bool IsImmunedToSpell(SpellEntry const* spellInfo); // redefined in Creature - bool IsImmunedToDamage(SpellSchoolMask meleeSchoolMask, bool useCharges = false); + bool IsImmunedToDamage(SpellSchoolMask meleeSchoolMask); virtual bool IsImmunedToSpellEffect(uint32 effect, uint32 mechanic) const; // redefined in Creature @@ -1437,11 +1441,11 @@ class MANGOS_DLL_SPEC Unit : public WorldObject void SendAttackStop(Unit* victim); // only from AttackStop(Unit*) void SendAttackStart(Unit* pVictim); // only from Unit::AttackStart(Unit*) - bool IsTriggeredAtSpellProcEvent( Aura* aura, SpellEntry const* procSpell, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const*& spellProcEvent ); + bool IsTriggeredAtSpellProcEvent(Unit *pVictim, Aura* aura, SpellEntry const* procSpell, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const*& spellProcEvent ); bool HandleDummyAuraProc( Unit *pVictim, uint32 damage, Aura* triggredByAura, SpellEntry const *procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); bool HandleHasteAuraProc( Unit *pVictim, uint32 damage, Aura* triggredByAura, SpellEntry const *procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); bool HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggredByAura, SpellEntry const *procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); - bool HandleOverrideClassScriptAuraProc(Unit *pVictim, Aura* triggredByAura, SpellEntry const *procSpell, uint32 cooldown); + bool HandleOverrideClassScriptAuraProc(Unit *pVictim, uint32 damage, Aura* triggredByAura, SpellEntry const *procSpell, uint32 cooldown); bool HandleMeandingAuraProc(Aura* triggeredByAura); uint32 m_state; // Even derived shouldn't modify diff --git a/src/game/UnitEvents.h b/src/game/UnitEvents.h index 0359d7c36..3f42afd9f 100644 --- a/src/game/UnitEvents.h +++ b/src/game/UnitEvents.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/UpdateData.cpp b/src/game/UpdateData.cpp index 6113f64b1..7d668299f 100644 --- a/src/game/UpdateData.cpp +++ b/src/game/UpdateData.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/UpdateData.h b/src/game/UpdateData.h index aff6d47e5..9b7884e5a 100644 --- a/src/game/UpdateData.h +++ b/src/game/UpdateData.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/UpdateFields.h b/src/game/UpdateFields.h index 09953bea5..031d70187 100644 --- a/src/game/UpdateFields.h +++ b/src/game/UpdateFields.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/UpdateMask.h b/src/game/UpdateMask.h index 14a31f2ac..d356799f6 100644 --- a/src/game/UpdateMask.h +++ b/src/game/UpdateMask.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Vehicle.cpp b/src/game/Vehicle.cpp index 4e1153a16..b533609d7 100644 --- a/src/game/Vehicle.cpp +++ b/src/game/Vehicle.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Vehicle.h b/src/game/Vehicle.h index 7fd8b60c4..6d9c7cd79 100644 --- a/src/game/Vehicle.h +++ b/src/game/Vehicle.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/VoiceChatHandler.cpp b/src/game/VoiceChatHandler.cpp index a3100ed1f..741957610 100644 --- a/src/game/VoiceChatHandler.cpp +++ b/src/game/VoiceChatHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/WaypointManager.cpp b/src/game/WaypointManager.cpp index 7478f8efe..47e2c606d 100644 --- a/src/game/WaypointManager.cpp +++ b/src/game/WaypointManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -300,7 +300,8 @@ void WaypointManager::CheckTextsExistance(std::set& ids) { for (int i = 0; i < pmItr->second.size(); ++i) { - if (!pmItr->second[i].behavior) + WaypointBehavior* be = pmItr->second[i].behavior; + if (!be) continue; // Now we check text existence and put all zero texts ids to the end of array @@ -309,29 +310,29 @@ void WaypointManager::CheckTextsExistance(std::set& ids) int zeroCount = 0; for (int j = 0; j < MAX_WAYPOINT_TEXT; ++j) { - if (!pmItr->second[i].behavior->textid[j]) + if (!be->textid[j]) { ++zeroCount; continue; } else { - if (!objmgr.GetMangosStringLocale(pmItr->second[i].behavior->textid[j])) + if (!objmgr.GetMangosStringLocale(be->textid[j])) { - sLog.outErrorDb("ERROR: Some waypoint has textid%u with not existing %u text.", j, pmItr->second[i].behavior->textid[j]); - pmItr->second[i].behavior->textid[j] = 0; + sLog.outErrorDb("ERROR: Some waypoint has textid%u with not existing %u text.", j, be->textid[j]); + be->textid[j] = 0; ++zeroCount; continue; } else - ids.erase(pmItr->second[i].behavior->textid[j]); + ids.erase(be->textid[j]); // Shifting check if (zeroCount) { // Correct textid but some zeros leading, so move it forward. - pmItr->second[i].behavior->textid[j-zeroCount] = pmItr->second[i].behavior->textid[j]; - pmItr->second[i].behavior->textid[j] = 0; + be->textid[j-zeroCount] = be->textid[j]; + be->textid[j] = 0; } } } diff --git a/src/game/WaypointManager.h b/src/game/WaypointManager.h index 939d7f2af..0f155ad41 100644 --- a/src/game/WaypointManager.h +++ b/src/game/WaypointManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -45,7 +45,7 @@ struct WaypointNode float orientation; uint32 delay; WaypointBehavior * behavior; - WaypointNode() {} + WaypointNode() : x(0.0f), y(0.0f), z(0.0f), orientation(0.0f), delay(0), behavior(NULL) {} WaypointNode(float _x, float _y, float _z, float _o, uint32 _delay, WaypointBehavior * _behavior) : x(_x), y(_y), z(_z), orientation(_o), delay(_delay), behavior(_behavior) {} }; diff --git a/src/game/WaypointMovementGenerator.cpp b/src/game/WaypointMovementGenerator.cpp index 64061487c..7679ef2d3 100644 --- a/src/game/WaypointMovementGenerator.cpp +++ b/src/game/WaypointMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/WaypointMovementGenerator.h b/src/game/WaypointMovementGenerator.h index d6cb21752..785940d0f 100644 --- a/src/game/WaypointMovementGenerator.h +++ b/src/game/WaypointMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Weather.cpp b/src/game/Weather.cpp index 0a4fe9edb..5e7c6cf27 100644 --- a/src/game/Weather.cpp +++ b/src/game/Weather.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Weather.h b/src/game/Weather.h index 2ed41783a..d7f10bebd 100644 --- a/src/game/Weather.h +++ b/src/game/Weather.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/World.cpp b/src/game/World.cpp index c4771d945..74be1cbe8 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -35,6 +35,7 @@ #include "SkillDiscovery.h" #include "World.h" #include "AccountMgr.h" +#include "AchievementMgr.h" #include "ObjectMgr.h" #include "SpellMgr.h" #include "Chat.h" @@ -762,6 +763,8 @@ void World::LoadConfigSettings(bool reload) m_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE] = sConfig.GetBoolDefault("Battleground.QueueAnnouncer.Enable", false); m_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY] = sConfig.GetBoolDefault("Battleground.QueueAnnouncer.PlayerOnly", false); m_configs[CONFIG_ARENA_QUEUE_ANNOUNCER_ENABLE] = sConfig.GetBoolDefault("Arena.QueueAnnouncer.Enable", false); + m_configs[CONFIG_ARENA_SEASON_ID] = sConfig.GetIntDefault ("Arena.ArenaSeason.ID", 1); + m_configs[CONFIG_ARENA_SEASON_IN_PROGRESS] = sConfig.GetBoolDefault("Arena.ArenaSeason.InProgress", true); m_configs[CONFIG_CAST_UNSTUCK] = sConfig.GetBoolDefault("CastUnstuck", true); m_configs[CONFIG_INSTANCE_RESET_TIME_HOUR] = sConfig.GetIntDefault("Instance.ResetTimeHour", 4); @@ -796,6 +799,7 @@ void World::LoadConfigSettings(bool reload) sLog.outError("GM.StartLevel (%i) must be in range 1..%u. Set to %u.", m_configs[CONFIG_START_GM_LEVEL], MAX_LEVEL, MAX_LEVEL); m_configs[CONFIG_START_GM_LEVEL] = MAX_LEVEL; } + m_configs[CONFIG_GM_LOWER_SECURITY] = sConfig.GetBoolDefault("GM.LowerSecurity", false); m_configs[CONFIG_GROUP_VISIBILITY] = sConfig.GetIntDefault("Visibility.GroupMode",0); @@ -911,6 +915,8 @@ void World::LoadConfigSettings(bool reload) m_configs[CONFIG_DEATH_SICKNESS_LEVEL] = sConfig.GetIntDefault("Death.SicknessLevel", 11); m_configs[CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVP] = sConfig.GetBoolDefault("Death.CorpseReclaimDelay.PvP", true); m_configs[CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVE] = sConfig.GetBoolDefault("Death.CorpseReclaimDelay.PvE", true); + m_configs[CONFIG_DEATH_BONES_WORLD] = sConfig.GetBoolDefault("Death.Bones.World", true); + m_configs[CONFIG_DEATH_BONES_BG_OR_ARENA] = sConfig.GetBoolDefault("Death.Bones.BattlegroundOrArena", true); m_configs[CONFIG_THREAT_RADIUS] = sConfig.GetIntDefault("ThreatRadius", 100); @@ -1067,12 +1073,6 @@ void World::SetInitialWorldSettings() sLog.outString( "Loading InstanceTemplate" ); objmgr.LoadInstanceTemplate(); - sLog.outString( "Loading AchievementCriteriaList..." ); - objmgr.LoadAchievementCriteriaList(); - - sLog.outString( "Loading completed achievements..." ); - objmgr.LoadCompletedAchievements(); - sLog.outString( "Loading SkillLineAbilityMultiMap Data..." ); spellmgr.LoadSkillLineAbilityMap(); @@ -1231,6 +1231,18 @@ void World::SetInitialWorldSettings() sLog.outString( "Loading Skill Fishing base level requirements..." ); objmgr.LoadFishingBaseSkillLevel(); + sLog.outString( "Loading AchievementCriteriaList..." ); + achievementmgr.LoadAchievementCriteriaList(); + + sLog.outString( "Loading achievement rewards..." ); + achievementmgr.LoadRewards(); + + sLog.outString( "Loading achievement reward locale strings..." ); + achievementmgr.LoadRewardLocales(); + + sLog.outString( "Loading completed achievements..." ); + achievementmgr.LoadCompletedAchievements(); + ///- Load dynamic data tables from the database sLog.outString( "Loading Auctions..." ); objmgr.LoadAuctionItems(); diff --git a/src/game/World.h b/src/game/World.h index 5ef3a9526..98622effe 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -129,6 +129,7 @@ enum WorldConfigs CONFIG_GM_IN_WHO_LIST, CONFIG_GM_LOG_TRADE, CONFIG_START_GM_LEVEL, + CONFIG_GM_LOWER_SECURITY, CONFIG_GROUP_VISIBILITY, CONFIG_MAIL_DELIVERY_DELAY, CONFIG_UPTIME_UPDATE, @@ -171,6 +172,8 @@ enum WorldConfigs CONFIG_DEATH_SICKNESS_LEVEL, CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVP, CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVE, + CONFIG_DEATH_BONES_WORLD, + CONFIG_DEATH_BONES_BG_OR_ARENA, CONFIG_THREAT_RADIUS, CONFIG_INSTANT_LOGOUT, CONFIG_DISABLE_BREATHING, @@ -184,6 +187,8 @@ enum WorldConfigs CONFIG_ARENA_AUTO_DISTRIBUTE_POINTS, CONFIG_ARENA_AUTO_DISTRIBUTE_INTERVAL_DAYS, CONFIG_ARENA_QUEUE_ANNOUNCER_ENABLE, + CONFIG_ARENA_SEASON_ID, + CONFIG_ARENA_SEASON_IN_PROGRESS, CONFIG_BATTLEGROUND_PREMATURE_FINISH_TIMER, CONFIG_SKILL_MILLING, CONFIG_VALUE_COUNT diff --git a/src/game/WorldLog.cpp b/src/game/WorldLog.cpp index 062da0d5b..07399001c 100644 --- a/src/game/WorldLog.cpp +++ b/src/game/WorldLog.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/WorldLog.h b/src/game/WorldLog.h index e9309e4d1..de8475dd0 100644 --- a/src/game/WorldLog.h +++ b/src/game/WorldLog.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/WorldSession.cpp b/src/game/WorldSession.cpp index 858f33717..bcebb7ff7 100644 --- a/src/game/WorldSession.cpp +++ b/src/game/WorldSession.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -307,6 +307,10 @@ void WorldSession::LogoutPlayer(bool Save) if(_player->InBattleGround()) _player->LeaveBattleground(); + ///- Teleport to home if the player is in an invalid instance + if(!_player->m_InstanceValid && !_player->isGameMaster()) + _player->TeleportTo(_player->m_homebindMapId, _player->m_homebindX, _player->m_homebindY, _player->m_homebindZ, _player->GetOrientation()); + for (int i=0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; i++) { if(int32 bgTypeId = _player->GetBattleGroundQueueId(i)) @@ -548,9 +552,12 @@ void WorldSession::SetAccountData(uint32 type, time_t time_, std::string data) m_accountData[type].Data = data; uint32 acc = GetAccountId(); + + CharacterDatabase.BeginTransaction (); CharacterDatabase.PExecute("DELETE FROM account_data WHERE account='%u' AND type='%u'", acc, type); CharacterDatabase.escape_string(data); CharacterDatabase.PExecute("INSERT INTO account_data VALUES ('%u','%u','%u','%s')", acc, type, (uint32)time_, data.c_str()); + CharacterDatabase.CommitTransaction (); } void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo *mi) diff --git a/src/game/WorldSession.h b/src/game/WorldSession.h index b4c5bd095..d48b388a9 100644 --- a/src/game/WorldSession.h +++ b/src/game/WorldSession.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/WorldSocket.cpp b/src/game/WorldSocket.cpp index 9d40d398b..5bc447d25 100644 --- a/src/game/WorldSocket.cpp +++ b/src/game/WorldSocket.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -61,14 +61,8 @@ struct ServerPktHeader if(isLargePacket()) { sLog.outDebug("initializing large server to client packet. Size: %u, cmd: %u", size, cmd); - header= new uint8[5]; header[headerIndex++] = 0x80|(0xFF &(size>>16)); } - else - { - header= new uint8[4]; - } - header[headerIndex++] = 0xFF &(size>>8); header[headerIndex++] = 0xFF &size; @@ -76,11 +70,6 @@ struct ServerPktHeader header[headerIndex++] = 0xFF & (cmd>>8); } - ~ServerPktHeader() - { - delete[] header; - } - uint8 getHeaderLength() { // cmd = 2 bytes, size= 2||3bytes @@ -93,7 +82,7 @@ struct ServerPktHeader } const uint32 size; - uint8 *header; + uint8 header[5]; }; struct ClientPktHeader @@ -122,6 +111,9 @@ m_OverSpeedPings (0), m_LastPingTime (ACE_Time_Value::zero) { reference_counting_policy ().value (ACE_Event_Handler::Reference_Counting_Policy::ENABLED); + + msg_queue()->high_water_mark(8*1024*1024); + msg_queue()->low_water_mark(8*1024*1024); } WorldSocket::~WorldSocket (void) @@ -135,10 +127,6 @@ WorldSocket::~WorldSocket (void) closing_ = true; peer ().close (); - - WorldPacket* pct; - while (m_PacketQueue.dequeue_head (pct) == 0) - delete pct; } bool WorldSocket::IsClosed (void) const @@ -198,18 +186,35 @@ int WorldSocket::SendPacket (const WorldPacket& pct) sWorldLog.Log ("\n\n"); } - if (iSendPacket (pct) == -1) + ServerPktHeader header(pct.size()+2, pct.GetOpcode()); + m_Crypt.EncryptSend ( header.header, header.getHeaderLength()); + + if (m_OutBuffer->space () >= pct.size () + header.getHeaderLength() && msg_queue()->is_empty()) { - WorldPacket* npct; + // Put the packet on the buffer. + if (m_OutBuffer->copy ((char*) header.header, header.getHeaderLength()) == -1) + ACE_ASSERT (false); - ACE_NEW_RETURN (npct, WorldPacket (pct), -1); + if (!pct.empty ()) + if (m_OutBuffer->copy ((char*) pct.contents (), pct.size ()) == -1) + ACE_ASSERT (false); + } + else + { + // Enqueue the packet. + ACE_Message_Block* mb; - // NOTE maybe check of the size of the queue can be good ? - // to make it bounded instead of unbounded - if (m_PacketQueue.enqueue_tail (npct) == -1) + ACE_NEW_RETURN(mb, ACE_Message_Block(pct.size () + header.getHeaderLength()), -1); + + mb->copy((char*) header.header, header.getHeaderLength()); + + if (!pct.empty ()) + mb->copy((const char*)pct.contents(), pct.size ()); + + if(msg_queue()->enqueue_tail(mb,(ACE_Time_Value*)&ACE_Time_Value::zero) == -1) { - delete npct; - sLog.outError ("WorldSocket::SendPacket: m_PacketQueue.enqueue_tail failed"); + sLog.outError("WorldSocket::SendPacket enqueue_tail"); + mb->release(); return -1; } } @@ -334,7 +339,7 @@ int WorldSocket::handle_output (ACE_HANDLE) const size_t send_len = m_OutBuffer->length (); if (send_len == 0) - return cancel_wakeup_output (Guard); + return handle_output_queue (Guard); #ifdef MSG_NOSIGNAL ssize_t n = peer ().send (m_OutBuffer->rd_ptr (), send_len, MSG_NOSIGNAL); @@ -364,15 +369,73 @@ int WorldSocket::handle_output (ACE_HANDLE) { m_OutBuffer->reset (); - if (!iFlushPacketQueue ()) - return cancel_wakeup_output (Guard); - else - return schedule_wakeup_output (Guard); + return handle_output_queue (Guard); } ACE_NOTREACHED (return 0); } +int WorldSocket::handle_output_queue (GuardType& g) +{ + if(msg_queue()->is_empty()) + return cancel_wakeup_output(g); + + ACE_Message_Block *mblk; + + if(msg_queue()->dequeue_head(mblk, (ACE_Time_Value*)&ACE_Time_Value::zero) == -1) + { + sLog.outError("WorldSocket::handle_output_queue dequeue_head"); + return -1; + } + + const size_t send_len = mblk->length (); + +#ifdef MSG_NOSIGNAL + ssize_t n = peer ().send (mblk->rd_ptr (), send_len, MSG_NOSIGNAL); +#else + ssize_t n = peer ().send (mblk->rd_ptr (), send_len); +#endif // MSG_NOSIGNAL + + if (n == 0) + { + mblk->release(); + + return -1; + } + else if (n == -1) + { + if (errno == EWOULDBLOCK || errno == EAGAIN) + { + msg_queue()->enqueue_head(mblk, (ACE_Time_Value*) &ACE_Time_Value::zero); + return schedule_wakeup_output (g); + } + + mblk->release(); + return -1; + } + else if (n < send_len) //now n > 0 + { + mblk->rd_ptr (static_cast (n)); + + if (msg_queue()->enqueue_head(mblk, (ACE_Time_Value*) &ACE_Time_Value::zero) == -1) + { + sLog.outError("WorldSocket::handle_output_queue enqueue_head"); + mblk->release(); + return -1; + } + + return schedule_wakeup_output (g); + } + else //now n == send_len + { + mblk->release(); + + return msg_queue()->is_empty() ? cancel_wakeup_output(g) : ACE_Event_Handler::WRITE_MASK; + } + + ACE_NOTREACHED(return -1); +} + int WorldSocket::handle_close (ACE_HANDLE h, ACE_Reactor_Mask) { // Critical section @@ -400,10 +463,15 @@ int WorldSocket::Update (void) if (closing_) return -1; - if (m_OutActive || m_OutBuffer->length () == 0) + if (m_OutActive || (m_OutBuffer->length () == 0 && msg_queue()->is_empty())) return 0; - return handle_output (get_handle ()); + int ret; + do + ret = handle_output (get_handle ()); + while( ret > 0 ); + + return ret; } int WorldSocket::handle_input_header (void) @@ -997,53 +1065,3 @@ int WorldSocket::HandlePing (WorldPacket& recvPacket) packet << ping; return SendPacket (packet); } - -int WorldSocket::iSendPacket (const WorldPacket& pct) -{ - ServerPktHeader header(pct.size()+2, pct.GetOpcode()); - if (m_OutBuffer->space () < pct.size () + header.getHeaderLength()) - { - errno = ENOBUFS; - return -1; - } - - - m_Crypt.EncryptSend ( header.header, header.getHeaderLength()); - - if (m_OutBuffer->copy ((char*) header.header, header.getHeaderLength()) == -1) - ACE_ASSERT (false); - - if (!pct.empty ()) - if (m_OutBuffer->copy ((char*) pct.contents (), pct.size ()) == -1) - ACE_ASSERT (false); - - return 0; -} - -bool WorldSocket::iFlushPacketQueue () -{ - WorldPacket *pct; - bool haveone = false; - - while (m_PacketQueue.dequeue_head (pct) == 0) - { - if (iSendPacket (*pct) == -1) - { - if (m_PacketQueue.enqueue_head (pct) == -1) - { - delete pct; - sLog.outError ("WorldSocket::iFlushPacketQueue m_PacketQueue->enqueue_head"); - return false; - } - - break; - } - else - { - haveone = true; - delete pct; - } - } - - return haveone; -} diff --git a/src/game/WorldSocket.h b/src/game/WorldSocket.h index c6857cccd..ee0a3c2b0 100644 --- a/src/game/WorldSocket.h +++ b/src/game/WorldSocket.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -101,9 +101,6 @@ class WorldSocket : protected WorldHandler typedef ACE_Thread_Mutex LockType; typedef ACE_Guard GuardType; - /// Queue for storing packets for which there is no space. - typedef ACE_Unbounded_Queue< WorldPacket* > PacketQueueT; - /// Check if socket is closed. bool IsClosed (void) const; @@ -159,6 +156,9 @@ class WorldSocket : protected WorldHandler int cancel_wakeup_output (GuardType& g); int schedule_wakeup_output (GuardType& g); + /// Drain the queue if its not empty. + int handle_output_queue (GuardType& g); + /// process one incoming packet. /// @param new_pct received packet ,note that you need to delete it. int ProcessIncoming (WorldPacket* new_pct); @@ -169,16 +169,6 @@ class WorldSocket : protected WorldHandler /// Called by ProcessIncoming() on CMSG_PING. int HandlePing (WorldPacket& recvPacket); - /// Try to write WorldPacket to m_OutBuffer ,return -1 if no space - /// Need to be called with m_OutBufferLock lock held - int iSendPacket (const WorldPacket& pct); - - /// Flush m_PacketQueue if there are packets in it - /// Need to be called with m_OutBufferLock lock held - /// @return true if it wrote to the buffer ( AKA you need - /// to mark the socket for output ). - bool iFlushPacketQueue (); - private: /// Time in which the last ping was received ACE_Time_Value m_LastPingTime; @@ -218,10 +208,6 @@ class WorldSocket : protected WorldHandler /// Size of the m_OutBuffer. size_t m_OutBufferSize; - /// Here are stored packets for which there was no space on m_OutBuffer, - /// this allows not-to kick player if its buffer is overflowed. - PacketQueueT m_PacketQueue; - /// True if the socket is registered with the reactor for output bool m_OutActive; diff --git a/src/game/WorldSocketMgr.cpp b/src/game/WorldSocketMgr.cpp index 610d0ac57..8c5883926 100644 --- a/src/game/WorldSocketMgr.cpp +++ b/src/game/WorldSocketMgr.cpp @@ -1,20 +1,20 @@ /* -* Copyright (C) 2005-2008,2007 MaNGOS -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ + * Copyright (C) 2005-2009 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ /** \file WorldSocketMgr.cpp * \ingroup u2w diff --git a/src/game/WorldSocketMgr.h b/src/game/WorldSocketMgr.h index 70ab1a0a0..75c98a1c9 100644 --- a/src/game/WorldSocketMgr.h +++ b/src/game/WorldSocketMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008,2007 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/debugcmds.cpp b/src/game/debugcmds.cpp index a67ef3203..67412301d 100644 --- a/src/game/debugcmds.cpp +++ b/src/game/debugcmds.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -576,3 +576,13 @@ bool ChatHandler::HandleSpawnVehicle(const char* args) return true; } + +bool ChatHandler::HandleSendLargePacketCommand(const char* args) +{ + const char* stuffingString = "This is a dummy string to push the packet's size beyond 128000 bytes. "; + std::ostringstream ss; + while(strlen(ss.str().c_str()) < 128000) + ss << stuffingString; + SendSysMessage(ss.str().c_str()); + return true; +} diff --git a/src/mangosd/CliRunnable.cpp b/src/mangosd/CliRunnable.cpp index d4c635660..7575b0dad 100644 --- a/src/mangosd/CliRunnable.cpp +++ b/src/mangosd/CliRunnable.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -80,19 +80,10 @@ bool ChatHandler::HandleAccountDeleteCommand(const char* args) } /// Commands not recommended call from chat, but support anyway - if(m_session) - { - uint32 targetSecurity = accmgr.GetSecurity(account_id); - - /// can delete only for account with less security - /// This is also reject self apply in fact - if (targetSecurity >= m_session->GetSecurity()) - { - SendSysMessage (LANG_YOURS_SECURITY_IS_LOW); - SetSentErrorMessage (true); - return false; - } - } + /// can delete only for account with less security + /// This is also reject self apply in fact + if(HasLowerSecurityAccount (NULL,account_id,true)) + return false; AccountOpResult result = accmgr.DeleteAccount(account_id); switch(result) diff --git a/src/mangosd/CliRunnable.h b/src/mangosd/CliRunnable.h index 71d7417e6..d07405dc5 100644 --- a/src/mangosd/CliRunnable.h +++ b/src/mangosd/CliRunnable.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/Main.cpp b/src/mangosd/Main.cpp index 939afe0ca..043e1c0b4 100644 --- a/src/mangosd/Main.cpp +++ b/src/mangosd/Main.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/Makefile.am b/src/mangosd/Makefile.am index f93316fad..73a385d4e 100644 --- a/src/mangosd/Makefile.am +++ b/src/mangosd/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/Master.cpp b/src/mangosd/Master.cpp index f5ef907bb..8cb59c930 100644 --- a/src/mangosd/Master.cpp +++ b/src/mangosd/Master.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/Master.h b/src/mangosd/Master.h index 5449a3505..777824f26 100644 --- a/src/mangosd/Master.h +++ b/src/mangosd/Master.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/RASocket.cpp b/src/mangosd/RASocket.cpp index f3bdf4fd3..dca788232 100644 --- a/src/mangosd/RASocket.cpp +++ b/src/mangosd/RASocket.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/RASocket.h b/src/mangosd/RASocket.h index d9acb8284..30f3394d5 100644 --- a/src/mangosd/RASocket.h +++ b/src/mangosd/RASocket.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/WorldRunnable.cpp b/src/mangosd/WorldRunnable.cpp index 87d7e78a9..2e97f97c2 100644 --- a/src/mangosd/WorldRunnable.cpp +++ b/src/mangosd/WorldRunnable.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/WorldRunnable.h b/src/mangosd/WorldRunnable.h index 712c7b67c..3ed2a9cde 100644 --- a/src/mangosd/WorldRunnable.h +++ b/src/mangosd/WorldRunnable.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/mangosd.conf.dist.in b/src/mangosd/mangosd.conf.dist.in index 3e5cc502a..c0f099640 100644 --- a/src/mangosd/mangosd.conf.dist.in +++ b/src/mangosd/mangosd.conf.dist.in @@ -346,9 +346,9 @@ LogColors = "" # # Expansion # Allow server use content from expansion -# 2 - check expansion 2 maps existence, and if client support expansion 2 and account have +# Default: 2 - check expansion 2 maps existence, and if client support expansion 2 and account have # expansion 2 setting then allow visit expansion 2 maps, allow create new class character) -# Default: 1 - check expansion 1 maps existence, and if client support expansion 1 and account have +# 1 - check expansion 1 maps existence, and if client support expansion 1 and account have # expansion 1 setting then allow visit expansion 1 maps, allow create new races character) # 0 - not check expansion maps existence, not allow wisit its, not allow create new race or new class # characters, ignore account expansion setting) @@ -870,6 +870,11 @@ Channel.SilentlyGMJoin = 0 # GM starting level (1-100) # Default: 1 # +# GM.LowerSecurity +# Disallow a lower security member to interact with a higher one using commands +# Default: 0 (disable) +# 1 (enable) +# ################################################################################################################### GM.LoginState = 2 @@ -880,6 +885,7 @@ GM.InGMList = 0 GM.InWhoList = 0 GM.LogTrade = 1 GM.StartLevel = 1 +GM.LowerSecurity = 0 ################################################################################################################### # VISIBILITY AND RADIUSES @@ -1052,6 +1058,12 @@ Visibility.Distance.Grey.Object = 10 # Default: 1 (enabled) # 0 (disabled) # +# Death.Bones.World +# Death.Bones.BattlegroundOrArena +# Enabled/disabled creating bones instead corpse at resurrection (in normal zones/instacnes, or battleground/arenas) +# Default: 1 (enabled) +# 0 (disabled) +# ################################################################################################################### Rate.Health = 1 @@ -1105,6 +1117,8 @@ DurabilityLossChance.Block = 0.05 Death.SicknessLevel = 11 Death.CorpseReclaimDelay.PvP = 1 Death.CorpseReclaimDelay.PvE = 1 +Death.Bones.World = 1 +Death.Bones.BattlegroundOrArena = 1 ################################################################################################################### # @@ -1127,12 +1141,21 @@ Death.CorpseReclaimDelay.PvE = 1 # in days # Default: 7 (weekly) # +# ArenaSeason.ID: current area season id show in client +# Default: 1 +# +# ArenaSeason.InProgress: current area season state +# Default: 1 (active) +# 0 (finished) +# ################################################################################################################### Arena.MaxRatingDifference = 0 Arena.RatingDiscardTimer = 60000 Arena.AutoDistributePoints = 0 Arena.AutoDistributeInterval = 7 +Arena.ArenaSeason.ID = 1 +Arena.ArenaSeason.InProgress = 1 ################################################################################################################### # diff --git a/src/mangosd/mangosd.rc b/src/mangosd/mangosd.rc index 43fcf5bbb..a0c4a231e 100644 --- a/src/mangosd/mangosd.rc +++ b/src/mangosd/mangosd.rc @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/realmd/AuthCodes.h b/src/realmd/AuthCodes.h index ff52987b3..89f4cf90b 100644 --- a/src/realmd/AuthCodes.h +++ b/src/realmd/AuthCodes.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/realmd/AuthSocket.cpp b/src/realmd/AuthSocket.cpp index e1759e7e0..820979a09 100644 --- a/src/realmd/AuthSocket.cpp +++ b/src/realmd/AuthSocket.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/realmd/AuthSocket.h b/src/realmd/AuthSocket.h index 0ed37587b..c78b4c69f 100644 --- a/src/realmd/AuthSocket.h +++ b/src/realmd/AuthSocket.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/realmd/Main.cpp b/src/realmd/Main.cpp index 930fd00a7..59b6081ef 100644 --- a/src/realmd/Main.cpp +++ b/src/realmd/Main.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/realmd/Makefile.am b/src/realmd/Makefile.am index 8930f5445..6de5189c3 100644 --- a/src/realmd/Makefile.am +++ b/src/realmd/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/realmd/RealmList.cpp b/src/realmd/RealmList.cpp index a25e495b0..a5352d0d9 100644 --- a/src/realmd/RealmList.cpp +++ b/src/realmd/RealmList.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -48,7 +48,6 @@ void RealmList::UpdateRealm( uint32 ID, const std::string& name, const std::stri Realm& realm = m_realms[name]; realm.m_ID = ID; - realm.name = name; realm.icon = icon; realm.color = color; realm.timezone = timezone; diff --git a/src/realmd/RealmList.h b/src/realmd/RealmList.h index f3e04c07d..40e3956e8 100644 --- a/src/realmd/RealmList.h +++ b/src/realmd/RealmList.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,7 +28,6 @@ /// Storage object for a realm struct Realm { - std::string name; std::string address; uint8 icon; uint8 color; diff --git a/src/realmd/realmd.rc b/src/realmd/realmd.rc index 4ce3301fb..d4740b5a4 100644 --- a/src/realmd/realmd.rc +++ b/src/realmd/realmd.rc @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/AuthCrypt.cpp b/src/shared/Auth/AuthCrypt.cpp index 27dce1d6d..7686cdd81 100644 --- a/src/shared/Auth/AuthCrypt.cpp +++ b/src/shared/Auth/AuthCrypt.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/AuthCrypt.h b/src/shared/Auth/AuthCrypt.h index a14e4d900..5717f72ec 100644 --- a/src/shared/Auth/AuthCrypt.h +++ b/src/shared/Auth/AuthCrypt.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/BigNumber.cpp b/src/shared/Auth/BigNumber.cpp index 9d0a23599..25cf94eac 100644 --- a/src/shared/Auth/BigNumber.cpp +++ b/src/shared/Auth/BigNumber.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/BigNumber.h b/src/shared/Auth/BigNumber.h index 9614b1e53..f787c4135 100644 --- a/src/shared/Auth/BigNumber.h +++ b/src/shared/Auth/BigNumber.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/Hmac.cpp b/src/shared/Auth/Hmac.cpp index bd8473946..d0517aad7 100644 --- a/src/shared/Auth/Hmac.cpp +++ b/src/shared/Auth/Hmac.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/Hmac.h b/src/shared/Auth/Hmac.h index 8157849f4..3e0dacc3b 100644 --- a/src/shared/Auth/Hmac.h +++ b/src/shared/Auth/Hmac.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/Makefile.am b/src/shared/Auth/Makefile.am index 0088e432d..b7a2de5fc 100644 --- a/src/shared/Auth/Makefile.am +++ b/src/shared/Auth/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/Sha1.cpp b/src/shared/Auth/Sha1.cpp index 1e192c782..f5bb7cc32 100644 --- a/src/shared/Auth/Sha1.cpp +++ b/src/shared/Auth/Sha1.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/Sha1.h b/src/shared/Auth/Sha1.h index 35202b773..b4b640adb 100644 --- a/src/shared/Auth/Sha1.h +++ b/src/shared/Auth/Sha1.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/ByteBuffer.h b/src/shared/ByteBuffer.h index cca7216c8..e8f661ce4 100644 --- a/src/shared/ByteBuffer.h +++ b/src/shared/ByteBuffer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Common.cpp b/src/shared/Common.cpp index e7224bc5e..24c68bb1d 100644 --- a/src/shared/Common.cpp +++ b/src/shared/Common.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Common.h b/src/shared/Common.h index 0fc544fc6..ab65d0743 100644 --- a/src/shared/Common.h +++ b/src/shared/Common.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Config/Config.cpp b/src/shared/Config/Config.cpp index 8aa9293c2..1d27c7775 100644 --- a/src/shared/Config/Config.cpp +++ b/src/shared/Config/Config.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Config/Config.h b/src/shared/Config/Config.h index cff2fa523..e09dffe38 100644 --- a/src/shared/Config/Config.h +++ b/src/shared/Config/Config.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Config/ConfigEnv.h b/src/shared/Config/ConfigEnv.h index 6c61aeb93..c0603a2b2 100644 --- a/src/shared/Config/ConfigEnv.h +++ b/src/shared/Config/ConfigEnv.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Config/Makefile.am b/src/shared/Config/Makefile.am index c33c8e456..8bfed3b3c 100644 --- a/src/shared/Config/Makefile.am +++ b/src/shared/Config/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DBCEnums.h b/src/shared/Database/DBCEnums.h index 4f406c9cc..69784cf22 100644 --- a/src/shared/Database/DBCEnums.h +++ b/src/shared/Database/DBCEnums.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2005-2008 MaNGOS +* Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DBCStores.cpp b/src/shared/Database/DBCStores.cpp index 0ae6f663b..518765bd7 100644 --- a/src/shared/Database/DBCStores.cpp +++ b/src/shared/Database/DBCStores.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,6 +30,7 @@ typedef std::map AreaFlagByAreaID; typedef std::map AreaFlagByMapID; DBCStorage sAreaStore(AreaTableEntryfmt); +DBCStorage sAreaGroupStore(AreaGroupEntryfmt); static AreaFlagByAreaID sAreaFlagByAreaID; static AreaFlagByMapID sAreaFlagByMapID; // for instances without generated *.map files @@ -215,6 +216,7 @@ void LoadDBCStores(const std::string& dataPath) LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAchievementStore, dbcPath,"Achievement.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAchievementCriteriaStore, dbcPath,"Achievement_Criteria.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAreaTriggerStore, dbcPath,"AreaTrigger.dbc"); + LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAreaGroupStore, dbcPath,"AreaGroup.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBankBagSlotPricesStore, dbcPath,"BankBagSlotPrices.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBattlemasterListStore, dbcPath,"BattlemasterList.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBarberShopStyleStore, dbcPath,"BarberShopStyle.dbc"); diff --git a/src/shared/Database/DBCStores.h b/src/shared/Database/DBCStores.h index 8143ec704..b7ba96b61 100644 --- a/src/shared/Database/DBCStores.h +++ b/src/shared/Database/DBCStores.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -133,6 +133,7 @@ class DBCStorage extern DBCStorage sAchievementStore; extern DBCStorage sAchievementCriteriaStore; extern DBCStorage sAreaStore;// recommend access using functions +extern DBCStorage sAreaGroupStore; extern DBCStorage sAreaTriggerStore; extern DBCStorage sBankBagSlotPricesStore; extern DBCStorage sBarberShopStyleStore; diff --git a/src/shared/Database/DBCStructure.h b/src/shared/Database/DBCStructure.h index 839687f3d..5a2a96761 100644 --- a/src/shared/Database/DBCStructure.h +++ b/src/shared/Database/DBCStructure.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -325,6 +325,12 @@ struct AchievementCriteriaEntry uint32 rollValue; // 3 uint32 count; // 4 } roll_need_on_loot; + // ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT= 51 + struct + { + uint32 rollValue; // 3 + uint32 count; // 4 + } roll_greed_on_loot; // ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS = 52 struct @@ -485,6 +491,12 @@ struct AreaTableEntry uint32 team; // 28 }; +struct AreaGroupEntry +{ + uint32 AreaGroupId; // 0 + uint32 AreaId[7]; // 1-7 +}; + struct AreaTriggerEntry { uint32 id; // 0 m_ID @@ -1070,10 +1082,10 @@ struct SpellEntry uint32 TargetAuraState; // 18 m_targetAuraState uint32 CasterAuraStateNot; // 19 m_excludeCasterAuraState uint32 TargetAuraStateNot; // 20 m_excludeTargetAuraState - //uint32 casterAuraSpell; // 21 m_casterAuraSpell not used - //uint32 targetAuraSpell; // 22 m_targetAuraSpell not used - //uint32 excludeCasterAuraSpell; // 23 m_excludeCasterAuraSpell not used - //uint32 excludeTargetAuraSpell; // 24 m_excludeTargetAuraSpell not used + uint32 casterAuraSpell; // 21 m_casterAuraSpell + uint32 targetAuraSpell; // 22 m_targetAuraSpell + uint32 excludeCasterAuraSpell; // 23 m_excludeCasterAuraSpell + uint32 excludeTargetAuraSpell; // 24 m_excludeTargetAuraSpell uint32 CastingTimeIndex; // 25 m_castingTimeIndex uint32 RecoveryTime; // 26 m_recoveryTime uint32 CategoryRecoveryTime; // 27 m_categoryRecoveryTime @@ -1152,7 +1164,7 @@ struct SpellEntry //uint32 MinReputation; // 223 m_minReputation not used //uint32 RequiredAuraVision; // 224 m_requiredAuraVision not used uint32 TotemCategory[2]; // 225-226 m_requiredTotemCategoryID - int32 AreaId; // 227 m_requiredAreasID + int32 AreaGroupId; // 227 m_requiredAreaGroupId uint32 SchoolMask; // 228 m_schoolMask uint32 runeCostID; // 229 m_runeCostID //uint32 spellMissileID; // 230 m_spellMissileID not used diff --git a/src/shared/Database/DBCfmt.cpp b/src/shared/Database/DBCfmt.cpp index b78608c2d..b5a1843bc 100644 --- a/src/shared/Database/DBCfmt.cpp +++ b/src/shared/Database/DBCfmt.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,6 +19,7 @@ const char Achievementfmt[]="niixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiixixxxxxxxxxxxxxxxxxxxi"; const char AchievementCriteriafmt[]="niiiiiiiixxxxxxxxxxxxxxxxxiixix"; const char AreaTableEntryfmt[]="iiinixxxxxissssssssssssssssxixxxxxxx"; +const char AreaGroupEntryfmt[]="niiiiiii"; const char AreaTriggerEntryfmt[]="niffffffff"; const char BankBagSlotPricesEntryfmt[]="ni"; const char BarberShopStyleEntryfmt[]="nixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiii"; @@ -69,7 +70,7 @@ const char SkillLineAbilityfmt[]="niiiixxiiiiixx"; const char SoundEntriesfmt[]="nxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; const char SpellCastTimefmt[]="nixx"; const char SpellDurationfmt[]="niii"; -const char SpellEntryfmt[]="niiiiiiiiixiiiiiiiiiixxxxiiiiiiiiiiiiiiiiiiifxiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffffffiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiifffiiiiiiiiiiiiixssssssssssssssssxssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiiiiiiiiiiixfffxxxiiiiix"; +const char SpellEntryfmt[]="niiiiiiiiixiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifxiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffffffiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiifffiiiiiiiiiiiiixssssssssssssssssxssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiiiiiiiiiiixfffxxxiiiiix"; const char SpellFocusObjectfmt[]="nxxxxxxxxxxxxxxxxx"; const char SpellItemEnchantmentfmt[]="nxiiiiiixxxiiissssssssssssssssxiiiixx"; const char SpellItemEnchantmentConditionfmt[]="nbbbbbxxxxxbbbbbbbbbbiiiiiXXXXX"; diff --git a/src/shared/Database/Database.cpp b/src/shared/Database/Database.cpp index 030db7705..6747adf6a 100644 --- a/src/shared/Database/Database.cpp +++ b/src/shared/Database/Database.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/Database.h b/src/shared/Database/Database.h index 4b62617c4..16713b211 100644 --- a/src/shared/Database/Database.h +++ b/src/shared/Database/Database.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DatabaseEnv.h b/src/shared/Database/DatabaseEnv.h index 88cb05710..a446aee41 100644 --- a/src/shared/Database/DatabaseEnv.h +++ b/src/shared/Database/DatabaseEnv.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DatabaseImpl.h b/src/shared/Database/DatabaseImpl.h index d7f8c43e2..084ee6c82 100644 --- a/src/shared/Database/DatabaseImpl.h +++ b/src/shared/Database/DatabaseImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DatabaseMysql.cpp b/src/shared/Database/DatabaseMysql.cpp index e8a944feb..b14848769 100644 --- a/src/shared/Database/DatabaseMysql.cpp +++ b/src/shared/Database/DatabaseMysql.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DatabaseMysql.h b/src/shared/Database/DatabaseMysql.h index 271fc5c9b..8e8a113df 100644 --- a/src/shared/Database/DatabaseMysql.h +++ b/src/shared/Database/DatabaseMysql.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DatabasePostgre.cpp b/src/shared/Database/DatabasePostgre.cpp index 734e46962..a572a8320 100644 --- a/src/shared/Database/DatabasePostgre.cpp +++ b/src/shared/Database/DatabasePostgre.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DatabasePostgre.h b/src/shared/Database/DatabasePostgre.h index 52372dd7c..f985b549e 100644 --- a/src/shared/Database/DatabasePostgre.h +++ b/src/shared/Database/DatabasePostgre.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DatabaseSqlite.cpp b/src/shared/Database/DatabaseSqlite.cpp index 7bf879f44..f3ffeaaa6 100644 --- a/src/shared/Database/DatabaseSqlite.cpp +++ b/src/shared/Database/DatabaseSqlite.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DatabaseSqlite.h b/src/shared/Database/DatabaseSqlite.h index d067585a3..b5a5ac40d 100644 --- a/src/shared/Database/DatabaseSqlite.h +++ b/src/shared/Database/DatabaseSqlite.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/Field.cpp b/src/shared/Database/Field.cpp index 0521eb0bf..592865d9f 100644 --- a/src/shared/Database/Field.cpp +++ b/src/shared/Database/Field.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/Field.h b/src/shared/Database/Field.h index 631c97db5..9235c394f 100644 --- a/src/shared/Database/Field.h +++ b/src/shared/Database/Field.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/Makefile.am b/src/shared/Database/Makefile.am index d28f9b960..31c24917b 100644 --- a/src/shared/Database/Makefile.am +++ b/src/shared/Database/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/MySQLDelayThread.h b/src/shared/Database/MySQLDelayThread.h index 026f823f1..5355b0b8a 100644 --- a/src/shared/Database/MySQLDelayThread.h +++ b/src/shared/Database/MySQLDelayThread.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/PGSQLDelayThread.h b/src/shared/Database/PGSQLDelayThread.h index eafe27bb5..7ad2b5084 100644 --- a/src/shared/Database/PGSQLDelayThread.h +++ b/src/shared/Database/PGSQLDelayThread.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/QueryResult.h b/src/shared/Database/QueryResult.h index ca6d11923..3ce00e702 100644 --- a/src/shared/Database/QueryResult.h +++ b/src/shared/Database/QueryResult.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/QueryResultMysql.cpp b/src/shared/Database/QueryResultMysql.cpp index 87f2c9883..755a5532b 100644 --- a/src/shared/Database/QueryResultMysql.cpp +++ b/src/shared/Database/QueryResultMysql.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/QueryResultMysql.h b/src/shared/Database/QueryResultMysql.h index b31dbe8a6..2d00d09f4 100644 --- a/src/shared/Database/QueryResultMysql.h +++ b/src/shared/Database/QueryResultMysql.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/QueryResultPostgre.cpp b/src/shared/Database/QueryResultPostgre.cpp index 98033ab60..aaae46c96 100644 --- a/src/shared/Database/QueryResultPostgre.cpp +++ b/src/shared/Database/QueryResultPostgre.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/QueryResultPostgre.h b/src/shared/Database/QueryResultPostgre.h index a0002769e..b5f7978c0 100644 --- a/src/shared/Database/QueryResultPostgre.h +++ b/src/shared/Database/QueryResultPostgre.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/QueryResultSqlite.cpp b/src/shared/Database/QueryResultSqlite.cpp index 53adb72cc..b0f9df607 100644 --- a/src/shared/Database/QueryResultSqlite.cpp +++ b/src/shared/Database/QueryResultSqlite.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/QueryResultSqlite.h b/src/shared/Database/QueryResultSqlite.h index 2952c50c1..28ced54c4 100644 --- a/src/shared/Database/QueryResultSqlite.h +++ b/src/shared/Database/QueryResultSqlite.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/SQLStorage.cpp b/src/shared/Database/SQLStorage.cpp index 5badcc2e1..ec47d7887 100644 --- a/src/shared/Database/SQLStorage.cpp +++ b/src/shared/Database/SQLStorage.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/SQLStorage.h b/src/shared/Database/SQLStorage.h index 69275c155..e6ba01ee0 100644 --- a/src/shared/Database/SQLStorage.h +++ b/src/shared/Database/SQLStorage.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/SQLStorageImpl.h b/src/shared/Database/SQLStorageImpl.h index 4f10c6eee..b820d6861 100644 --- a/src/shared/Database/SQLStorageImpl.h +++ b/src/shared/Database/SQLStorageImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/SqlDelayThread.cpp b/src/shared/Database/SqlDelayThread.cpp index b6220fed4..91952cb43 100644 --- a/src/shared/Database/SqlDelayThread.cpp +++ b/src/shared/Database/SqlDelayThread.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/SqlDelayThread.h b/src/shared/Database/SqlDelayThread.h index 7d3187a98..ed52633e3 100644 --- a/src/shared/Database/SqlDelayThread.h +++ b/src/shared/Database/SqlDelayThread.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/SqlOperations.cpp b/src/shared/Database/SqlOperations.cpp index 70a1ff056..e42677208 100644 --- a/src/shared/Database/SqlOperations.cpp +++ b/src/shared/Database/SqlOperations.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/SqlOperations.h b/src/shared/Database/SqlOperations.h index 41ae69edb..7e27c1174 100644 --- a/src/shared/Database/SqlOperations.h +++ b/src/shared/Database/SqlOperations.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/dbcfile.cpp b/src/shared/Database/dbcfile.cpp index 1e3d8eeb3..0cfc7ada3 100644 --- a/src/shared/Database/dbcfile.cpp +++ b/src/shared/Database/dbcfile.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/dbcfile.h b/src/shared/Database/dbcfile.h index b2c4bb2d3..74e6b6f3f 100644 --- a/src/shared/Database/dbcfile.h +++ b/src/shared/Database/dbcfile.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Errors.h b/src/shared/Errors.h index 7ded28065..546da27b1 100644 --- a/src/shared/Errors.h +++ b/src/shared/Errors.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Log.cpp b/src/shared/Log.cpp index f5d05139b..904ac704a 100644 --- a/src/shared/Log.cpp +++ b/src/shared/Log.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Log.h b/src/shared/Log.h index 391a93d86..85fac5ed3 100644 --- a/src/shared/Log.h +++ b/src/shared/Log.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Makefile.am b/src/shared/Makefile.am index c393e6826..087f0ec20 100644 --- a/src/shared/Makefile.am +++ b/src/shared/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/shared/MemoryLeaks.cpp b/src/shared/MemoryLeaks.cpp index e9dc390cb..ef7e36c3b 100644 --- a/src/shared/MemoryLeaks.cpp +++ b/src/shared/MemoryLeaks.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/MemoryLeaks.h b/src/shared/MemoryLeaks.h index fceb9d6f4..85d04e670 100644 --- a/src/shared/MemoryLeaks.h +++ b/src/shared/MemoryLeaks.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/PacketLog.cpp b/src/shared/PacketLog.cpp index 06e19bd97..184e9e9b9 100644 --- a/src/shared/PacketLog.cpp +++ b/src/shared/PacketLog.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/PacketLog.h b/src/shared/PacketLog.h index 925e07ed7..a0ae06d33 100644 --- a/src/shared/PacketLog.h +++ b/src/shared/PacketLog.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/ProgressBar.cpp b/src/shared/ProgressBar.cpp index 602070569..b66890129 100644 --- a/src/shared/ProgressBar.cpp +++ b/src/shared/ProgressBar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/ProgressBar.h b/src/shared/ProgressBar.h index 71c0f323f..f889ee0fd 100644 --- a/src/shared/ProgressBar.h +++ b/src/shared/ProgressBar.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/ServiceWin32.cpp b/src/shared/ServiceWin32.cpp index 09c5cd907..0b5e446a4 100644 --- a/src/shared/ServiceWin32.cpp +++ b/src/shared/ServiceWin32.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/shared/ServiceWin32.h b/src/shared/ServiceWin32.h index 4890f8166..924680969 100644 --- a/src/shared/ServiceWin32.h +++ b/src/shared/ServiceWin32.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/shared/Timer.h b/src/shared/Timer.h index 14e261608..c258fdcee 100644 --- a/src/shared/Timer.h +++ b/src/shared/Timer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Util.cpp b/src/shared/Util.cpp index eabd33ad0..b670c85ee 100644 --- a/src/shared/Util.cpp +++ b/src/shared/Util.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,27 +34,27 @@ static MTRandTSS mtRand; int32 irand (int32 min, int32 max) { - return int32 (mtRand.get ().randInt (max - min)) + min; + return int32 (mtRand.get ().randInt (max - min)) + min; } uint32 urand (uint32 min, uint32 max) { - return mtRand.get ().randInt (max - min) + min; + return mtRand.get ().randInt (max - min) + min; } int32 rand32 () { - return mtRand.get ().randInt (); + return mtRand.get ().randInt (); } double rand_norm(void) { - return mtRand.get ().randExc (); + return mtRand.get ().randExc (); } double rand_chance (void) { - return mtRand.get ().randExc (100.0); + return mtRand.get ().randExc (100.0); } Tokens StrSplit(const std::string &src, const std::string &sep) diff --git a/src/shared/Util.h b/src/shared/Util.h index 6a77d9c9a..8fa4faacf 100644 --- a/src/shared/Util.h +++ b/src/shared/Util.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/WorldPacket.h b/src/shared/WorldPacket.h index 7e8029c21..d038db86c 100644 --- a/src/shared/WorldPacket.h +++ b/src/shared/WorldPacket.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 299924ce0..f80374027 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "6967" + #define REVISION_NR "7076" #endif // __REVISION_NR_H__ diff --git a/src/shared/vmap/BaseModel.cpp b/src/shared/vmap/BaseModel.cpp index 98d8f9cd4..4a131c46a 100644 --- a/src/shared/vmap/BaseModel.cpp +++ b/src/shared/vmap/BaseModel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/BaseModel.h b/src/shared/vmap/BaseModel.h index 79a2865df..f9bc977b0 100644 --- a/src/shared/vmap/BaseModel.h +++ b/src/shared/vmap/BaseModel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/CoordModelMapping.cpp b/src/shared/vmap/CoordModelMapping.cpp index ff70b3426..2ce40dd8f 100644 --- a/src/shared/vmap/CoordModelMapping.cpp +++ b/src/shared/vmap/CoordModelMapping.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/CoordModelMapping.h b/src/shared/vmap/CoordModelMapping.h index dd4f86cc1..71b516311 100644 --- a/src/shared/vmap/CoordModelMapping.h +++ b/src/shared/vmap/CoordModelMapping.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/DebugCmdLogger.cpp b/src/shared/vmap/DebugCmdLogger.cpp index 73037d5ac..080afa3fb 100644 --- a/src/shared/vmap/DebugCmdLogger.cpp +++ b/src/shared/vmap/DebugCmdLogger.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/DebugCmdLogger.h b/src/shared/vmap/DebugCmdLogger.h index 955e0e391..b9cc05cec 100644 --- a/src/shared/vmap/DebugCmdLogger.h +++ b/src/shared/vmap/DebugCmdLogger.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/IVMapManager.h b/src/shared/vmap/IVMapManager.h index 0cfc12a80..d4b776d8d 100644 --- a/src/shared/vmap/IVMapManager.h +++ b/src/shared/vmap/IVMapManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/Makefile.am b/src/shared/vmap/Makefile.am index 3ec6557bc..14ace12f0 100644 --- a/src/shared/vmap/Makefile.am +++ b/src/shared/vmap/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/ManagedModelContainer.cpp b/src/shared/vmap/ManagedModelContainer.cpp index 919c0ecf2..90e774536 100644 --- a/src/shared/vmap/ManagedModelContainer.cpp +++ b/src/shared/vmap/ManagedModelContainer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/ManagedModelContainer.h b/src/shared/vmap/ManagedModelContainer.h index baa9167a9..b08bcb852 100644 --- a/src/shared/vmap/ManagedModelContainer.h +++ b/src/shared/vmap/ManagedModelContainer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/ModelContainer.cpp b/src/shared/vmap/ModelContainer.cpp index 654c63869..ff4f9358b 100644 --- a/src/shared/vmap/ModelContainer.cpp +++ b/src/shared/vmap/ModelContainer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/ModelContainer.h b/src/shared/vmap/ModelContainer.h index b1a0f1737..729da5795 100644 --- a/src/shared/vmap/ModelContainer.h +++ b/src/shared/vmap/ModelContainer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/NodeValueAccess.h b/src/shared/vmap/NodeValueAccess.h index 764b8dfa6..d3a3273d6 100644 --- a/src/shared/vmap/NodeValueAccess.h +++ b/src/shared/vmap/NodeValueAccess.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/ShortBox.h b/src/shared/vmap/ShortBox.h index 6263e9358..32a1b37e3 100644 --- a/src/shared/vmap/ShortBox.h +++ b/src/shared/vmap/ShortBox.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/ShortVector.h b/src/shared/vmap/ShortVector.h index 65a237fd8..cbb143c22 100644 --- a/src/shared/vmap/ShortVector.h +++ b/src/shared/vmap/ShortVector.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/SubModel.cpp b/src/shared/vmap/SubModel.cpp index df10977ea..17ca10fd8 100644 --- a/src/shared/vmap/SubModel.cpp +++ b/src/shared/vmap/SubModel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/SubModel.h b/src/shared/vmap/SubModel.h index 537be864a..eff14033e 100644 --- a/src/shared/vmap/SubModel.h +++ b/src/shared/vmap/SubModel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/TileAssembler.cpp b/src/shared/vmap/TileAssembler.cpp index 2fd708137..acd1e8c97 100644 --- a/src/shared/vmap/TileAssembler.cpp +++ b/src/shared/vmap/TileAssembler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/TileAssembler.h b/src/shared/vmap/TileAssembler.h index 7a2c16bf7..7829e01db 100644 --- a/src/shared/vmap/TileAssembler.h +++ b/src/shared/vmap/TileAssembler.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/TreeNode.cpp b/src/shared/vmap/TreeNode.cpp index 6e580a5b8..2c2ba9d79 100644 --- a/src/shared/vmap/TreeNode.cpp +++ b/src/shared/vmap/TreeNode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/TreeNode.h b/src/shared/vmap/TreeNode.h index 058225fce..96a1389ce 100644 --- a/src/shared/vmap/TreeNode.h +++ b/src/shared/vmap/TreeNode.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2005-2008 MaNGOS +* Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/VMapDefinitions.h b/src/shared/vmap/VMapDefinitions.h index 04c31a2b6..3d21c7289 100644 --- a/src/shared/vmap/VMapDefinitions.h +++ b/src/shared/vmap/VMapDefinitions.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/VMapFactory.cpp b/src/shared/vmap/VMapFactory.cpp index 5a5af7b45..7a8e68c6c 100644 --- a/src/shared/vmap/VMapFactory.cpp +++ b/src/shared/vmap/VMapFactory.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/VMapFactory.h b/src/shared/vmap/VMapFactory.h index db23ab582..e9d41c51f 100644 --- a/src/shared/vmap/VMapFactory.h +++ b/src/shared/vmap/VMapFactory.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/VMapManager.cpp b/src/shared/vmap/VMapManager.cpp index 49fec68b5..ec5d87006 100644 --- a/src/shared/vmap/VMapManager.cpp +++ b/src/shared/vmap/VMapManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/VMapManager.h b/src/shared/vmap/VMapManager.h index 5e2c32092..3d9057f91 100644 --- a/src/shared/vmap/VMapManager.h +++ b/src/shared/vmap/VMapManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/VMapTools.h b/src/shared/vmap/VMapTools.h index 4122f420e..d59d9e6bb 100644 --- a/src/shared/vmap/VMapTools.h +++ b/src/shared/vmap/VMapTools.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2005-2008 MaNGOS +* Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/tools/Makefile.am b/src/tools/Makefile.am index 7b68544e1..81040a495 100644 --- a/src/tools/Makefile.am +++ b/src/tools/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/tools/genrevision/Makefile.am b/src/tools/genrevision/Makefile.am index 814c60790..3f60ac14a 100644 --- a/src/tools/genrevision/Makefile.am +++ b/src/tools/genrevision/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/tools/genrevision/genrevision.cpp b/src/tools/genrevision/genrevision.cpp index a9e39d93c..ace3a0bbe 100644 --- a/src/tools/genrevision/genrevision.cpp +++ b/src/tools/genrevision/genrevision.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/win/VC71/game.vcproj b/win/VC71/game.vcproj index b6827360d..78764d30f 100644 --- a/win/VC71/game.vcproj +++ b/win/VC71/game.vcproj @@ -185,6 +185,12 @@ + + + + @@ -212,6 +218,18 @@ + + + + + + + + diff --git a/win/VC80/game.vcproj b/win/VC80/game.vcproj index 723262a65..0102369f0 100644 --- a/win/VC80/game.vcproj +++ b/win/VC80/game.vcproj @@ -418,6 +418,14 @@ RelativePath="..\..\src\game\BattleGroundBE.h" > + + + + @@ -454,6 +462,22 @@ RelativePath="..\..\src\game\BattleGroundRL.h" > + + + + + + + + diff --git a/win/VC90/game.vcproj b/win/VC90/game.vcproj index 5bf136772..37cf9c487 100644 --- a/win/VC90/game.vcproj +++ b/win/VC90/game.vcproj @@ -420,6 +420,14 @@ RelativePath="..\..\src\game\BattleGroundBE.h" > + + + + @@ -456,6 +464,22 @@ RelativePath="..\..\src\game\BattleGroundRL.h" > + + + + + + + + diff --git a/win/mangosdVC80.sln b/win/mangosdVC80.sln index 4440cd0b8..a1e677c88 100644 --- a/win/mangosdVC80.sln +++ b/win/mangosdVC80.sln @@ -138,12 +138,12 @@ Global {04BAF755-0D67-46F8-B1C6-77AE5368F3CB}.Release|x64.Build.0 = Release|x64 {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|Win32.ActiveCfg = Debug|Win32 {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|Win32.Build.0 = Debug|Win32 - {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|x64.ActiveCfg = Debug|x64 - {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|x64.Build.0 = Debug|x64 + {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|x64.ActiveCfg = Debug|Win32 + {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|x64.Build.0 = Debug|Win32 {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|Win32.ActiveCfg = Release|Win32 {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|Win32.Build.0 = Release|Win32 - {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|x64.ActiveCfg = Release|x64 - {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|x64.Build.0 = Release|x64 + {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|x64.ActiveCfg = Release|Win32 + {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|x64.Build.0 = Release|Win32 {AD537C9A-FECA-1BAD-6757-8A6348EA12C8}.Debug|Win32.ActiveCfg = Debug|Win32 {AD537C9A-FECA-1BAD-6757-8A6348EA12C8}.Debug|Win32.Build.0 = Debug|Win32 {AD537C9A-FECA-1BAD-6757-8A6348EA12C8}.Debug|x64.ActiveCfg = Debug|x64 diff --git a/win/mangosdVC90.sln b/win/mangosdVC90.sln index 02a13a939..22c8fcb47 100644 --- a/win/mangosdVC90.sln +++ b/win/mangosdVC90.sln @@ -138,12 +138,12 @@ Global {04BAF755-0D67-46F8-B1C6-77AE5368F3CB}.Release|x64.Build.0 = Release|x64 {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|Win32.ActiveCfg = Debug|Win32 {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|Win32.Build.0 = Debug|Win32 - {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|x64.ActiveCfg = Debug|x64 - {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|x64.Build.0 = Debug|x64 + {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|x64.ActiveCfg = Debug|Win32 + {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|x64.Build.0 = Debug|Win32 {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|Win32.ActiveCfg = Release|Win32 {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|Win32.Build.0 = Release|Win32 - {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|x64.ActiveCfg = Release|x64 - {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|x64.Build.0 = Release|x64 + {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|x64.ActiveCfg = Release|Win32 + {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|x64.Build.0 = Release|Win32 {BD537C9A-FECA-1BAD-6757-8A6348EA12C8}.Debug|Win32.ActiveCfg = Debug|Win32 {BD537C9A-FECA-1BAD-6757-8A6348EA12C8}.Debug|Win32.Build.0 = Debug|Win32 {BD537C9A-FECA-1BAD-6757-8A6348EA12C8}.Debug|x64.ActiveCfg = Debug|x64