mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-09 22:20:24 +00:00
Merge and fix the loot update branch, ready for merge I think
This commit is contained in:
@@ -97,7 +97,6 @@ void repair_a_high_waypoint(Map *map, PathNode *it) {
|
||||
}
|
||||
} else {
|
||||
z_no_map_count++;
|
||||
//printf("Missed: (%.3f, %.3f, %.3f)\n", it->x, it->y, it->z);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -199,8 +198,6 @@ RESTART_WP_REDUCE:
|
||||
//we are removing the second one
|
||||
wp_reduce_count++;
|
||||
|
||||
//printf("pos=%d/%d\n", pos, g->nodes.size());
|
||||
//printf("trail = 0x%x(0x%x) (%.3f, %.3f, %.3f)\n",
|
||||
// *trail, second, (*trail)->x, (*trail)->y, (*trail)->z);
|
||||
//trail = cur2;
|
||||
|
||||
@@ -277,7 +274,6 @@ void break_long_lines(list<PathGraph*> &db_paths) {
|
||||
if(len2 < cutlen2)
|
||||
continue;
|
||||
|
||||
//printf("Cut (%.3f,%.3f,%.3f) -> (%.3f,%.3f,%.3f) d2=%.3f\n", e->from->x, e->from->y, e->from->z, e->to->x, e->to->y, e->to->z, len2);
|
||||
|
||||
float len = sqrt(len2);
|
||||
v1.x = (e->to->x - e->from->x)/len;
|
||||
@@ -297,7 +293,6 @@ void break_long_lines(list<PathGraph*> &db_paths) {
|
||||
ee = new PathEdge(last_node, n);
|
||||
last_node = n;
|
||||
|
||||
//printf(" (%.3f,%.3f,%.3f) -> (%.3f,%.3f,%.3f) d2=%.3f\n", ee->from->x, ee->from->y, ee->from->z, ee->to->x, ee->to->y, ee->to->z, e->from->Dist2(e->to));
|
||||
g->edges.push_back(ee);
|
||||
g->nodes.push_back(n);
|
||||
|
||||
@@ -967,7 +962,6 @@ run an algorithm to remove redundancy:
|
||||
RESTART_GRID_CLEAN:
|
||||
cur = big->nodes.begin();
|
||||
end = big->nodes.end();
|
||||
//printf("Starting clean at pos %d with %d nodes\n", cur_pos, big->nodes.size());
|
||||
for(r = 0; r < cur_pos; r++)
|
||||
cur++;
|
||||
for(; cur != end; cur++, cur_pos++, stat++) {
|
||||
@@ -989,16 +983,13 @@ RESTART_GRID_CLEAN:
|
||||
if(n == f)
|
||||
continue;
|
||||
if(n->Dist2(f) > ce2) {
|
||||
//printf("Dist %f, ce2 %f\n", n->Dist2(f), ce2);
|
||||
continue;
|
||||
}
|
||||
//printf("Distbbb %f, ce2 %f, (%f,%f), (%f,%f)\n", n->Dist2(f), ce2, n->x, n->y, f->x, f->y);
|
||||
|
||||
#ifdef COMBINE_CHECK_ALL_LOS
|
||||
//we should merge these. Now we wanna check to make sure combining
|
||||
//them will not cause the old node's edges to become invalid.
|
||||
|
||||
//printf("Checking combine LOS on %d, with %d edges.\n", r, big->edges.size());
|
||||
badlos = false;
|
||||
|
||||
if(node_edges.count(f) == 1) {
|
||||
@@ -1618,7 +1609,6 @@ void count_crossing_lines(list<PathEdge *> &edges, PathGraph *out, PathGraph *ex
|
||||
|
||||
|
||||
if(count >= CROSS_REDUCE_COUNT) {
|
||||
//printf("Edge crosses %d edges.\n", count);
|
||||
out->edges.push_back(e);
|
||||
cross_edge_count++;
|
||||
cross_list[e] = hits;
|
||||
@@ -1847,7 +1837,6 @@ QTNode *build_quadtree(Map *map, PathGraph *big) {
|
||||
end = _root->nodes.end();
|
||||
//int findex = 0;
|
||||
for(; curs != end; curs++) {
|
||||
//printf("Started With node index %d (0x%x)\n", findex++, *curs);
|
||||
}
|
||||
|
||||
_root->divideYourself(0);
|
||||
@@ -1915,7 +1904,6 @@ bool write_path_file(QTNode *_root, PathGraph *big, const char *file, vector< ve
|
||||
end = big->nodes.end();
|
||||
int nn = 0;
|
||||
for(; cur != end; cur++, curn++, nn++) {
|
||||
//printf("Filling node %d/%d n=0x%x, lb=0x%x, curl=0x%x/0x%x\n", nn, index, *cur, linkBlock, curl, &linkBlock[eoffset]);
|
||||
n = *cur;
|
||||
if(n == NULL) {
|
||||
printf("Got NULL node building quadtree, WTF.");
|
||||
@@ -1926,7 +1914,6 @@ int nn = 0;
|
||||
curn->z = n->z;
|
||||
curn->link_offset = eoffset;
|
||||
curn->distance = n->longest_path;
|
||||
//printf("Node %d: (%.2f,%.2f,%.2f) LO %d, D %d\n", nn, curn->x, curn->y, curn->z, curn->link_offset, curn->distance);
|
||||
|
||||
int ecount = 0;
|
||||
cur4 = big->edges.begin();
|
||||
@@ -1939,7 +1926,6 @@ int nn = 0;
|
||||
curl = &linkBlock[eoffset];
|
||||
curl->dest_node = e->to->node_id;
|
||||
curl->reach = e->normal_reach;
|
||||
//printf("\tLinkFrom %d: dest %d, reach %d\n", eoffset, curl->dest_node, curl->reach);
|
||||
from_edges[e] = ecount;
|
||||
ecount++;
|
||||
eoffset++;
|
||||
@@ -1948,7 +1934,6 @@ int nn = 0;
|
||||
curl = &linkBlock[eoffset];
|
||||
curl->dest_node = e->from->node_id;
|
||||
curl->reach = e->reverse_reach;
|
||||
//printf("\tLinkTo %d: dest %d, reach %d\n", eoffset, curl->dest_node, curl->reach);
|
||||
to_edges[e] = ecount;
|
||||
ecount++;
|
||||
eoffset++;
|
||||
@@ -1959,7 +1944,6 @@ int nn = 0;
|
||||
printf("ERROR: a node has more than %d links, number will be truncated!", PATH_LINK_OFFSET_NONE-1);
|
||||
}
|
||||
curn->link_count = ecount;
|
||||
//printf("Used up to slot %d of %d in links\n", eoffset, head.link_count);
|
||||
}
|
||||
|
||||
//write vertexBlock
|
||||
|
||||
@@ -297,7 +297,6 @@ void color_disjoint_graphs(
|
||||
if(n->color != 0)
|
||||
continue; //allready visited
|
||||
|
||||
//printf("New Color at: (%.3f,%.3f,%.3f)\n", n->x, n->y, n->z);
|
||||
|
||||
cc = 1;
|
||||
djc = 0;
|
||||
@@ -457,7 +456,6 @@ void calc_path_lengths(Map *map, MyGraph &vg, PathGraph *big, map<PathEdge *, Ed
|
||||
|
||||
int longest = longest_dists[n->node_id];
|
||||
//n->longest_path = longest;
|
||||
//printf("Node %d's longest path is %d\n", n->node_id, longest);
|
||||
|
||||
if(longest < shortest) {
|
||||
shortest = longest;
|
||||
@@ -476,7 +474,6 @@ printf("The tree's root is %d\n", shortest_node);
|
||||
n->longest_path = 0;
|
||||
else
|
||||
n->longest_path = root_dists[n->node_id];
|
||||
//printf("Node %d's distance from root is %d\n", n->node_id, root_dists[n->node_id]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -86,17 +86,14 @@ void QTNode::fillBlocks(PathTree_Struct *heads, PathPointRef *flist, unsigned lo
|
||||
head->miny = miny;
|
||||
head->maxy = maxy;
|
||||
head->flags = 0;
|
||||
//printf("Node %u: (%.2f -> %.2f, %.2f -> %.2f)\n", hindex-1, head->minx, head->maxx, head->miny, head->maxy);
|
||||
|
||||
//rearranged to give all QT nodes a node list
|
||||
head->nodelist.count = nodes.size();
|
||||
head->nodelist.offset = findex;
|
||||
//printf(" Final node with %u nodes, list offset %lu.\n", head->nodes.count, head->nodes.offset);
|
||||
list<PathNode *>::iterator curs,end;
|
||||
curs = nodes.begin();
|
||||
end = nodes.end();
|
||||
for(; curs != end; curs++) {
|
||||
//printf("Got to node index %d (0x%x)\n", findex, *curs);
|
||||
PathNode *cur = *curs;
|
||||
flist[findex] = cur->node_id;
|
||||
findex++;
|
||||
@@ -283,7 +280,6 @@ void QTNode::buildVertexes() {
|
||||
}
|
||||
|
||||
bool QTNode::IsInNode(const QTNode *n, const PathNode *o) {
|
||||
//printf("IIN: (%.3f,%.3f) in (%.3f -> %.3f, %.3f -> %.3f)\n", o->x, o->y, n->minx, n->maxx, n->miny, n->maxy);
|
||||
if( o->x >= n->minx && o->x < n->maxx
|
||||
&& o->y >= n->miny && o->y < n->maxy )
|
||||
return(true);
|
||||
|
||||
@@ -257,7 +257,6 @@ long BSPCountNodes(BSP_Node *tree, long node_number) {
|
||||
|
||||
|
||||
long BSPFindRegion(BSP_Node *tree, long node_number, long region) {
|
||||
//printf("Find Region %ld in node %ld\n", region, node_number);
|
||||
if(node_number<1) {
|
||||
printf("Something went wrong\n");
|
||||
exit(1);
|
||||
@@ -329,7 +328,6 @@ long BSPFindNode(BSP_Node *tree, long node_number, float x, float y, float z) {
|
||||
|
||||
|
||||
long BSPMarkRegion(BSP_Node *tree, long node_number, long region, int region_type) {
|
||||
//printf("Find Region %ld in node %ld\n", region, node_number);
|
||||
if(node_number<1) {
|
||||
printf("Something went wrong\n");
|
||||
exit(1);
|
||||
|
||||
@@ -584,12 +584,10 @@ void QTNode::fillBlocks(nodeHeader *heads, unsigned long *flist, unsigned long &
|
||||
head->miny = miny;
|
||||
head->maxy = maxy;
|
||||
head->flags = 0;
|
||||
//printf("Node %u: (%.2f -> %.2f, %.2f -> %.2f)\n", hindex-1, head->minx, head->maxx, head->miny, head->maxy);
|
||||
if(final) {
|
||||
head->flags |= nodeFinal;
|
||||
head->faces.count = faces.size();
|
||||
head->faces.offset = findex;
|
||||
//printf(" Final node with %u faces, list offset %lu.\n", head->faces.count, head->faces.offset);
|
||||
unsigned long r;
|
||||
for(r = 0; r < head->faces.count; r++) {
|
||||
flist[findex] = faces[r].index;
|
||||
|
||||
@@ -178,7 +178,6 @@ const char *PFSLoader::FindExtension(const char *ext) {
|
||||
int elen = strlen(ext);
|
||||
|
||||
for(i = 0; i < this->count; ++i) {
|
||||
//printf("Look for %s: got %s\n", ext, this->filenames[i]);
|
||||
int flen = strlen(this->filenames[i]);
|
||||
if(flen <= elen)
|
||||
continue;
|
||||
@@ -197,7 +196,6 @@ int PFSLoader::GetFile(char *name, uchar **buf, int *len) {
|
||||
Lower(name);
|
||||
|
||||
for(i = 0; i < this->count; ++i) {
|
||||
//printf("Look for %s: got %s\n", name, this->filenames[i]);
|
||||
if(!strcmp(this->filenames[i], name)) {
|
||||
fseek(this->fp, this->files[i], SEEK_SET);
|
||||
fread(&s3d_dir, sizeof(struct_directory), 1, this->fp);
|
||||
|
||||
@@ -151,7 +151,6 @@ int line_count = 0;
|
||||
var = (char *) buffer;
|
||||
line_count++;
|
||||
|
||||
// printf("%s %s\n", val, var);
|
||||
|
||||
if(strlen(var) == 0 || strlen(val) == 0) {
|
||||
++buffer;
|
||||
@@ -166,7 +165,6 @@ int line_count = 0;
|
||||
mlist[j].basetex = new char[val_len + 1];
|
||||
memcpy(mlist[j].basetex, val, val_len + 1);
|
||||
++mat_count;
|
||||
// printf("%i: Basetex: %s\n", j + 1, mlist[j].basetex);
|
||||
++j;
|
||||
}
|
||||
else if(val[0] != 'e' && val[1] != '_' && ((var[0] != 'e' && var[1] != '_') || !strcmp(val, "e_fShininess0"))) {
|
||||
@@ -179,7 +177,6 @@ int line_count = 0;
|
||||
memcpy(mlist[j].name, val, val_len + 1);
|
||||
continue;
|
||||
}
|
||||
// printf("Named: %s\n", mlist[j].name);
|
||||
}
|
||||
|
||||
buffer += var_len + 1;
|
||||
@@ -321,7 +318,6 @@ printf("%d tris start at %d (0x%x)\n", zm->poly_count, (buffer-ter_orig), (buffe
|
||||
}
|
||||
zm->polys[j] = new Polygon;
|
||||
|
||||
//printf(" v1=%d, v2=%d, v3=%d, g=%d, unk=%d\n", ttri->v1, ttri->v2, ttri->v3, ttri->group, ttri->unk);
|
||||
|
||||
if(ttri->v1 >= zm->vert_count && errored < 10) {
|
||||
printf("Tri %d/%d (s %d) @0x%x: invalid v1: %d >= %d\n", i, zm->poly_count, skipped, (buffer-ter_orig), ttri->v1, zm->vert_count);
|
||||
|
||||
@@ -271,7 +271,6 @@ long BSPCountNodes(BSP_Node *tree, long node_number) {
|
||||
|
||||
|
||||
long BSPFindRegion(BSP_Node *tree, long node_number, long region) {
|
||||
//printf("Find Region %ld in node %ld\n", region, node_number);
|
||||
if(node_number<1) {
|
||||
printf("Something went wrong\n");
|
||||
exit(1);
|
||||
@@ -343,7 +342,6 @@ long BSPFindNode(BSP_Node *tree, long node_number, float x, float y, float z) {
|
||||
|
||||
|
||||
long BSPMarkRegion(BSP_Node *tree, long node_number, long region, int region_type) {
|
||||
//printf("Find Region %ld in node %ld\n", region, node_number);
|
||||
if(node_number<1) {
|
||||
printf("Something went wrong\n");
|
||||
exit(1);
|
||||
|
||||
@@ -447,12 +447,10 @@ void QTNode::fillBlocks(nodeHeader *heads, unsigned long *flist, unsigned long &
|
||||
head->miny = miny;
|
||||
head->maxy = maxy;
|
||||
head->flags = 0;
|
||||
//printf("Node %u: (%.2f -> %.2f, %.2f -> %.2f)\n", hindex-1, head->minx, head->maxx, head->miny, head->maxy);
|
||||
if(final) {
|
||||
head->flags |= nodeFinal;
|
||||
head->faces.count = faces.size();
|
||||
head->faces.offset = findex;
|
||||
//printf(" Final node with %u faces, list offset %lu.\n", head->faces.count, head->faces.offset);
|
||||
unsigned long r;
|
||||
for(r = 0; r < head->faces.count; r++) {
|
||||
flist[findex] = faces[r].index;
|
||||
|
||||
@@ -98,7 +98,6 @@ string GetToken(uchar *&Buffer, int &Position)
|
||||
++Position;
|
||||
}
|
||||
++Position;
|
||||
//printf("Returning %s\n", Token.c_str());
|
||||
return Token;
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,6 @@ FRAG_CONSTRUCTOR(Data03) {
|
||||
memcpy(tex->filenames[i], buf, fnlen);
|
||||
decode((uchar *) tex->filenames[i], fnlen);
|
||||
|
||||
//printf("fnlen is %d, %s\n", fnlen, tex->filenames[i]);
|
||||
// Derision: Not sure why this check is here, but need to check fnlen is >=18
|
||||
if(fnlen>=18) {
|
||||
if(tex->filenames[i][fnlen - 8] == '.')
|
||||
@@ -188,7 +187,6 @@ FRAG_CONSTRUCTOR(Data22) {
|
||||
long Frag36Ref;
|
||||
if(data->flags==0x181) {
|
||||
Frag36Ref = *((long *) (data6area+20));
|
||||
//printf("Frag 36 reference?: %ld\n", *((long *) (data6area+20)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -107,7 +107,6 @@ int Zonv4Loader::Open(char *base_path, char *zone_name, Archive *archive)
|
||||
for(unsigned int i = 0; i < this->datloader.model_data.ModelNames.size(); ++i)
|
||||
{
|
||||
char tmp[200];
|
||||
//printf("Opening %s.mod\n", this->datloader.model_data.ModelNames[i].c_str());
|
||||
sprintf(tmp, "%s.mod", this->datloader.model_data.ModelNames[i].c_str());
|
||||
|
||||
char *str = tmp;
|
||||
|
||||
@@ -119,8 +119,6 @@ int main() {
|
||||
snprintf(bptr, 128, "' WHERE id=%lu", id);
|
||||
|
||||
// printf("Query: '%s'\n", outbuffer);
|
||||
//printf(outbuffer);
|
||||
//printf(";\n");
|
||||
/* if(mysql_query(&out, outbuffer) != 0) {
|
||||
failed_count++;
|
||||
printf(" Error updating char id %lu: %s\n", id, mysql_error(&m));
|
||||
|
||||
@@ -113,8 +113,6 @@ fprintf(stderr, "Char '%s' skill %d = %d\n", row[1], r, in_pp->skills[r]);
|
||||
snprintf(bptr, 128, "' WHERE id=%lu", id);
|
||||
|
||||
// printf("Query: '%s'\n", outbuffer);
|
||||
//printf(outbuffer);
|
||||
//printf(";\n");
|
||||
/* if(mysql_query(&out, outbuffer) != 0) {
|
||||
failed_count++;
|
||||
printf(" Error updating char id %lu: %s\n", id, mysql_error(&m));
|
||||
|
||||
@@ -1,539 +0,0 @@
|
||||
#ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# sed 's/0x[0-9a-fA-F]{4}/0x0000/g'
|
||||
#Unknown Mapping:
|
||||
#OP_Action2 -> OP_Damage
|
||||
#OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
#Name Differences:
|
||||
#OP_CancelInvite -> OP_GroupCancelInvite
|
||||
#OP_GMFind -> OP_FindPersonRequest
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0292 #used for unknown explorer
|
||||
#world packets
|
||||
OP_ApproveWorld=0x41b1 # ShowEQ 06/29/05
|
||||
OP_LogServer=0x4668 # EQEmu 06/29/05
|
||||
OP_MOTD=0x7fea # EQEmu 06/29/05
|
||||
OP_SendLoginInfo=0x2792 # EQEmu 06/29/05
|
||||
OP_DeleteCharacter=0x0920 # ShowEQ 06/29/05
|
||||
OP_SendCharInfo=0x732c # EQEmu 06/29/05
|
||||
OP_ExpansionInfo=0x5c78 # EQEmu 06/29/05
|
||||
OP_CharacterCreate=0x6160 # EQEmu 06/29/05
|
||||
OP_RandomNameGenerator=0x23d4 # ShowEQ 06/29/05
|
||||
OP_GuildsList=0x6957 # ShowEQ 06/29/05
|
||||
OP_ApproveName=0x46b1 # EQEmu 06/29/05
|
||||
OP_EnterWorld=0x7262 # EQEmu 06/29/05
|
||||
OP_PostEnterWorld=0x0df0 # EQEmu 06/29/05
|
||||
OP_World_Client_CRC1=0x254d # ShowEQ 06/29/05
|
||||
OP_World_Client_CRC2=0x16c9 # ShowEQ 06/29/05
|
||||
OP_SetChatServer=0x6238 # EQEmu 06/29/05
|
||||
OP_SetChatServer2=0x6536 # EQEmu 06/29/05
|
||||
OP_ZoneServerInfo=0x407c # EQEmu 06/29/05
|
||||
OP_WorldComplete=0x509d # EQEmu 06/29/05
|
||||
OP_WorldClientReady=0x5e99 # EQEmu 06/29/05 (Guess - Doodman)
|
||||
OP_WorldUnknown001=0x7510 # EQEmu 06/29/05 (New to 6/29)
|
||||
OP_SendSystemStats=0x681b # anonymous system stats reporting
|
||||
OP_WorldLogout=0x7186
|
||||
OP_ZoneUnavail=0x6d95
|
||||
OP_WorldLevelTooHigh=0x583b # world->client. Cancels zone in.
|
||||
OP_CharInacessable=0x28aa # world->client. Cancels zone in.
|
||||
#OP_InvalidLoginPassword=0x52A4
|
||||
|
||||
#Zone in opcodes
|
||||
OP_ZoneEntry=0x2ec9 # ShowEQ 06/29/05
|
||||
OP_ZoneInUnknown=0x0000
|
||||
OP_AckPacket=0x7752 # ShowEQ 06/29/05
|
||||
OP_NewZone=0x7ac5 # ShowEQ 06/29/05
|
||||
OP_ReqClientSpawn=0x0e76 # ShowEQ 06/29/05
|
||||
OP_ZoneSpawns=0x5ee8 # ShowEQ 06/29/05
|
||||
OP_CharInventory=0x15ff # EQEmu 06/29/05
|
||||
OP_SetServerFilter=0x7709 # ShowEQ 06/29/05
|
||||
OP_LockoutTimerInfo=0x7c12 # EQEmu 06/29/05
|
||||
OP_SendZonepoints=0x775d # EQEmu 06/29/05
|
||||
OP_SpawnDoor=0x4c24 # ShowEQ 06/29/05
|
||||
OP_ReqNewZone=0x47c9 # ShowEQ 06/29/05
|
||||
OP_PlayerProfile=0x75df # ShowEQ 06/29/05
|
||||
OP_TimeOfDay=0x1580 # ShowEQ 06/29/05
|
||||
OP_SendAATable=0x367d # ShowEQ 06/29/05
|
||||
OP_ZoneServerReady=0x0000 #dosent exist in this version
|
||||
|
||||
|
||||
OP_Logout=0x0701 # EQEmu 06/29/05
|
||||
OP_LogoutReply=0x48c2 # ShowEQ 06/29/05 (OP_Logout)
|
||||
OP_PreLogoutReply=0x711e #0 len packet sent during logout/zoning
|
||||
OP_LevelUpdate=0x6d44 # ShowEQ 06/29/05
|
||||
OP_MobUpdate=0x0000
|
||||
OP_Stamina=0x74ab # ShowEQ 06/29/05
|
||||
|
||||
#Petition Opcodes
|
||||
OP_PetitionSearch=0x2aec #search term for petition
|
||||
OP_PetitionSearchResults=0x2aec #(list of?) matches from search
|
||||
OP_PetitionSearchText=0x0000 #text results of search
|
||||
OP_Petition=0x251f #0x73cb
|
||||
OP_PetitionUpdate=0x3813 #guess
|
||||
OP_PetitionCheckout=0x0000
|
||||
OP_PetitionCheckIn=0x0000
|
||||
OP_PetitionQue=0x0000
|
||||
OP_PetitionUnCheckout=0x0000
|
||||
OP_PetitionDelete=0x0000
|
||||
OP_DeletePetition=0x0000
|
||||
OP_PetitionResolve=0x6ea9 #0x688f # ShowEQ 5/11/05
|
||||
OP_PDeletePetition=0x0000
|
||||
OP_PetitionBug=0x0000
|
||||
OP_PetitionRefresh=0x0000
|
||||
OP_PetitionCheckout2=0x0000
|
||||
OP_PetitionViewPetition=0x0000
|
||||
|
||||
#Guild Opcodes
|
||||
OP_ZoneGuildList=0x68AC
|
||||
OP_GuildMemberList=0x147d # ShowEQ 06/29/05
|
||||
OP_GuildMemberUpdate=0x4cc7 # ShowEQ 06/29/05
|
||||
OP_GuildMemberLevelUpdate=0x0000 #dosent exist in this version.
|
||||
OP_GuildRemove=0x6cce # EQEmu - Doodman (found 8/26/05
|
||||
OP_GuildPeace=0x0e37 # EQEmu - Doodman (found 8/26/05
|
||||
OP_GuildWar=0x186d # EQEmu - Doodman (found 8/26/05
|
||||
OP_GuildLeader=0x1ef1 # EQEmu - Doodman (found 8/26/05)
|
||||
OP_GuildDemote=0x1f46 # EQEmu - Doodman (found 8/26/05)
|
||||
OP_GuildMOTD=0x21ed # ShowEQ 06/29/05
|
||||
OP_SetGuildMOTD=0x475a # EQEmu - Doodman (found 8/26/05)
|
||||
OP_GetGuildsList=0x7fec # ShowEQ 06/29/05
|
||||
OP_GuildInvite=0x61d0 # EQEmu - Doodman (found 8/26/05)
|
||||
OP_GuildPublicNote=0x17a2 # EQEmu - Doodman (found 8/26/05)
|
||||
OP_GuildDelete=0x5a4d # EQEmu - Doodman (found 8/26/05
|
||||
OP_GuildInviteAccept=0x0179 # EQEmu - Doodman (found 8/26/05)
|
||||
OP_GetGuildMOTD=0x3246
|
||||
OP_GetGuildMOTDReply=0x5B14
|
||||
OP_GuildManageBanker=0x3d1e
|
||||
OP_GuildBank=0x0000
|
||||
#guild opcodes: 549F (clear guild?), 0x0695, 0x0AC0, 0x1864, 0x32cf, 0x4cc7,
|
||||
# 0x461A, 0x6966, 0x7085
|
||||
|
||||
|
||||
#GM/guide opcodes
|
||||
OP_GMServers=0x3387 #/servers
|
||||
OP_GMBecomeNPC=0x7864 #/becomenpc
|
||||
OP_GMZoneRequest=0x61ff #/zone
|
||||
OP_GMSearchCorpse=0x7f3e #/searchcorpse
|
||||
OP_GMHideMe=0x0581 #/hideme
|
||||
OP_GMGoto=0x69c8 #/goto
|
||||
OP_GMDelCorpse=0x727a #/delcorpse
|
||||
OP_GMApproval=0x0000
|
||||
OP_GMToggle=0x5ce2 #/toggle
|
||||
OP_GMZoneRequest2=0x0000
|
||||
OP_GMSummon=0x3383 #/summon
|
||||
OP_GMEmoteZone=0x3905 #/emotezone
|
||||
OP_GMFind=0x5e6a #/find
|
||||
OP_GMKick=0x1cee #/kick
|
||||
OP_GMNameChange=0x0000
|
||||
|
||||
OP_SafePoint=0x0000
|
||||
OP_Bind_Wound=0x4796
|
||||
OP_GMTraining=0x613d
|
||||
OP_GMEndTraining=0x181c
|
||||
OP_GMTrainSkill=0x3838
|
||||
OP_GMEndTrainingResponse=0x0a94
|
||||
OP_Animation=0x0b71 # EQEmu 06/29/05
|
||||
OP_Taunt=0x5306
|
||||
OP_Stun=0x7DCF
|
||||
OP_MoneyUpdate=0x425c
|
||||
OP_SendAAStats=0x5966 # EQEmu 06/29/05
|
||||
OP_SendExpZonein=0x0587 # ShowEQ 06/29/05
|
||||
OP_RespondAA=0x35e8
|
||||
OP_UpdateAA=0x0000
|
||||
OP_IncreaseStats=0x0000
|
||||
OP_ReadBook=0x1496
|
||||
OP_CombatAbility=0x5e55
|
||||
OP_Dye=0x773f # ShowEQ 06/29/05
|
||||
OP_Consume=0x7a83 # ShowEQ 06/29/05
|
||||
OP_Begging=0x2c81 # ShowEQ 06/29/05
|
||||
OP_InspectRequest=0x2403
|
||||
OP_Action2=0x0000 # ShowEQ 06/29/05
|
||||
OP_BeginCast=0x3990 # ShowEQ 06/29/05
|
||||
OP_WhoAllRequest=0x5cdd # ShowEQ 06/29/05
|
||||
OP_ColoredText=0x4bc6 # ShowEQ 06/29/05
|
||||
OP_Consent=0x1081 # ShowEQ 06/29/05
|
||||
OP_LFGCommand=0x022f # ShowEQ 06/29/05
|
||||
OP_LFGGetMatchesRequest=0x6f82 # ShowEQ 06/29/05
|
||||
OP_LFGAppearance=0x024d
|
||||
OP_LFGResponse=0x1fe1 # ShowEQ 5/11/05
|
||||
OP_LFGGetMatchesResponse=0x06c5 # ShowEQ 06/29/05
|
||||
OP_LootItem=0x2acf # ShowEQ 06/29/05
|
||||
OP_Bug=0x3eba # ShowEQ 06/29/05
|
||||
OP_BoardBoat=0x67c9 # ShowEQ 06/29/05
|
||||
OP_Save=0x6d9b # ShowEQ 06/29/05
|
||||
OP_Camp=0x2844 # ShowEQ 06/29/05
|
||||
OP_EndLootRequest=0x7fe4 # ShowEQ 06/29/05
|
||||
OP_LoadSpellSet=0x403e # ShowEQ 06/29/05
|
||||
OP_AutoAttack=0x6c47 # ShowEQ 06/29/05
|
||||
OP_AutoFire=0x6c53
|
||||
OP_Consider=0x2717 # ShowEQ 06/29/05
|
||||
OP_Emote=0x55bc # ShowEQ 06/29/05
|
||||
OP_PetCommands=0x58b2 # ShowEQ 06/29/05
|
||||
OP_PetBuffWindow=0x4e31
|
||||
OP_SpawnAppearance=0x18b7 # ShowEQ 06/29/05
|
||||
OP_DeleteSpawn=0x1a64 # ShowEQ 06/29/05
|
||||
OP_FormattedMessage=0x42cd # ShowEQ 06/29/05
|
||||
OP_WhoAllResponse=0x6686 # ShowEQ 06/29/05
|
||||
OP_AutoAttack2=0x0fa6 # ShowEQ 06/29/05
|
||||
OP_SetRunMode=0x0342 # ShowEQ 06/29/05
|
||||
OP_SimpleMessage=0x5a48 # ShowEQ 06/29/05
|
||||
OP_SaveOnZoneReq=0x2baf # ShowEQ 06/29/05
|
||||
OP_MoveDoor=0x0ef7 # ShowEQ 06/29/05
|
||||
OP_SenseHeading=0x5666 # ShowEQ 06/29/05
|
||||
OP_Buff=0x33dc # ShowEQ 06/29/05
|
||||
OP_LootComplete=0x20b2 # ShowEQ 06/29/05
|
||||
OP_EnvDamage=0x0990
|
||||
OP_Split=0x6a53 # ShowEQ 06/29/05
|
||||
OP_Surname=0x48fe # ShowEQ 06/29/05
|
||||
OP_ClearSurname=0x0000
|
||||
OP_MoveItem=0x7657 # ShowEQ 06/29/05
|
||||
OP_FaceChange=0x763b # ShowEQ 06/29/05
|
||||
OP_ItemPacket=0x3397 # ShowEQ 06/29/05
|
||||
OP_ItemLinkResponse=0x1d43 # ShowEQ 06/29/05
|
||||
OP_ClientReady=0x5e20 # ShowEQ 06/29/05
|
||||
OP_ZoneChange=0x60ef # ShowEQ 06/29/05
|
||||
OP_MemorizeSpell=0x05ac # ShowEQ 06/29/05
|
||||
OP_ItemLinkClick=0x53e5 # ShowEQ 06/29/05
|
||||
OP_SwapSpell=0x36b2 # ShowEQ 06/29/05
|
||||
OP_Forage=0x7c32 # ShowEQ 06/29/05
|
||||
OP_ConsentResponse=0x6380 # ShowEQ 06/29/05
|
||||
OP_BazaarSearch=0x524e # ShowEQ 06/29/05
|
||||
OP_NewSpawn=0x4f11 # ShowEQ 06/29/05
|
||||
OP_WearChange=0x601d # ShowEQ 06/29/05
|
||||
OP_Action=0x4513 # ShowEQ 06/29/05
|
||||
OP_SpecialMesg=0x5ef7 # ShowEQ 06/29/05
|
||||
OP_Bazaar=0x0000
|
||||
OP_LeaveBoat=0x7187 # ShowEQ 06/29/05
|
||||
OP_Weather=0x65ca # ShowEQ 06/29/05
|
||||
OP_LFPGetMatchesRequest=0x45d0 # ShowEQ 06/29/05
|
||||
OP_Illusion=0x7441 # ShowEQ 06/29/05
|
||||
OP_TargetMouse=0x2274 # ShowEQ 06/29/05
|
||||
OP_InspectAnswer=0x2dd6 # ShowEQ 06/29/05
|
||||
OP_GMKill=0x692c # ShowEQ 06/29/05
|
||||
OP_MoneyOnCorpse=0x2fca # ShowEQ 06/29/05
|
||||
OP_ClickDoor=0x700d # ShowEQ 06/29/05
|
||||
OP_LootRequest=0x2316 # ShowEQ 06/29/05
|
||||
OP_YellForHelp=0x2e20 # ShowEQ 06/29/05
|
||||
OP_ManaChange=0x0b2d # ShowEQ 06/29/05
|
||||
OP_ConsentDeny=0x4e8c # ShowEQ 06/29/05
|
||||
OP_LFPCommand=0x35a6 # ShowEQ 06/29/05
|
||||
OP_RandomReply=0x6cd5 # ShowEQ 06/29/05
|
||||
OP_DenyResponse=0x7c66 # ShowEQ 06/29/05
|
||||
OP_ConsiderCorpse=0x673c # ShowEQ 06/29/05
|
||||
OP_CorpseDrag=0x50c0 #
|
||||
OP_CorpseDrop=0x7c7c #
|
||||
OP_ConfirmDelete=0x28f2 # ShowEQ 06/29/05
|
||||
OP_MobHealth=0x3d2d # ShowEQ 06/29/05
|
||||
OP_SkillUpdate=0x6a93 # ShowEQ 06/29/05
|
||||
OP_RandomReq=0x21e0 # ShowEQ 06/29/05
|
||||
OP_CastSpell=0x4839 # ShowEQ 06/29/05
|
||||
OP_ClientUpdate=0x14cb # ShowEQ 06/29/05
|
||||
OP_MobUpdate=0x0000 #not used anymore, here for backwards compat
|
||||
OP_Report=0x0375 # ShowEQ 06/29/05
|
||||
OP_GroundSpawn=0x736b # ShowEQ 06/29/05
|
||||
OP_TargetCommand=0x6563 #0x0dfe # ShowEQ 06/29/05
|
||||
OP_TargetHoTT=0x3ef6
|
||||
OP_LFPGetMatchesResponse=0x63fe # ShowEQ 06/29/05
|
||||
OP_Jump=0x4dbc # ShowEQ 06/29/05
|
||||
OP_ExpUpdate=0x5ecd # ShowEQ 06/29/05
|
||||
OP_AAAction=0x3af4 # ShowEQ 06/29/05
|
||||
OP_Death=0x5188 # ShowEQ 06/29/05
|
||||
OP_BecomeCorpse=0x128c
|
||||
OP_GMLastName=0x0c81 # ShowEQ 06/29/05
|
||||
OP_InitialMobHealth=0x2ecc # ShowEQ 06/29/05
|
||||
OP_Mend=0x14ef # ShowEQ 06/29/05
|
||||
OP_MendHPUpdate=0x1ffa # ShowEQ 5/11/05
|
||||
OP_Feedback=0x224d # ShowEQ 06/29/05
|
||||
OP_TGB=0x5e51 # ShowEQ 06/29/05
|
||||
OP_InterruptCast=0x0db3
|
||||
OP_Damage=0x1848 # ShowEQ 06/29/05 (OP_Action2)
|
||||
OP_ChannelMessage=0x1004 # ShowEQ 06/29/05 (OP_CommonMessage)
|
||||
OP_LevelAppearance=0x358e
|
||||
OP_MultiLineMsg=0x0000
|
||||
OP_Charm=0x10a1
|
||||
OP_DeleteSpell=0x3fe6
|
||||
OP_ApproveZone=0x0000
|
||||
OP_Assist=0x5D02
|
||||
OP_AugmentItem=0x539b
|
||||
OP_BazaarInspect=0x0000
|
||||
OP_AAExpUpdate=0x6dd8 # ShowEQ 06/29/05
|
||||
OP_ClientError=0x0000
|
||||
OP_DeleteItem=0x1c4a
|
||||
OP_DeleteCharge=0x0841
|
||||
OP_ControlBoat=0x0000
|
||||
OP_DumpName=0x0000
|
||||
OP_FeignDeath=0x2ad8
|
||||
OP_Fishing=0x0b36
|
||||
OP_Heartbeat=0x0000
|
||||
OP_InstillDoubt=0x389e
|
||||
OP_ItemName=0x0000
|
||||
OP_LDoNButton=0x0000
|
||||
OP_LDoNOpen=0x083b
|
||||
OP_MoveCoin=0x1dd9
|
||||
OP_ReloadUI=0x0000
|
||||
OP_ZonePlayerToBind=0x385e # FNW Discovered on Feb 9, 2007
|
||||
OP_Translocate=0x78c1
|
||||
OP_Sacrifice=0x5f62
|
||||
OP_ApplyPoison=0x4298
|
||||
|
||||
#bazaar trader stuff stuff:
|
||||
#become and buy from
|
||||
#Server->Client: [ Opcode: OP_Unknown (0x2403) Size: 8 ]
|
||||
# 0: 46 01 00 00 39 01 00 00 | F...9...
|
||||
OP_TraderDelItem=0x0da9
|
||||
OP_BecomeTrader=0x66f9
|
||||
OP_TraderShop=0x19d8
|
||||
OP_TraderItemUpdate=0x0000
|
||||
OP_Trader=0x0681
|
||||
OP_ShopItem=0x0000
|
||||
OP_TraderBuy=0x0f8e # ShowEQ 06/29/05
|
||||
OP_Barter=0x7460
|
||||
|
||||
#pc/npc trading
|
||||
OP_TradeRequest=0x372f # ShowEQ 06/29/05
|
||||
OP_TradeAcceptClick=0x0065 # ShowEQ 06/29/05
|
||||
OP_TradeRequestAck=0x4048 # ShowEQ 06/29/05
|
||||
OP_TradeCoins=0x34c1
|
||||
OP_FinishTrade=0x6014
|
||||
OP_CancelTrade=0x2dc1 # ShowEQ 06/29/05
|
||||
OP_TradeMoneyUpdate=0x3e63 #not sure
|
||||
|
||||
#merchant crap
|
||||
OP_ShopPlayerSell=0x0e13 # ShowEQ 06/29/05
|
||||
OP_ShopEnd=0x7e03 # ShowEQ 06/29/05
|
||||
OP_ShopEndConfirm=0x0000
|
||||
OP_ShopPlayerBuy=0x221e
|
||||
OP_ShopRequest=0x3c4b # ShowEQ 06/29/05
|
||||
OP_ShopDelItem=0x0000 #0x0da9 maybe, 16 bytes though
|
||||
|
||||
#tradeskill stuff:
|
||||
OP_ClickObject=0x0f47 # ShowEQ 06/29/05
|
||||
OP_ClickObjectAction=0x6937 # EQEMu 06/29/05
|
||||
OP_RecipeDetails=0x0353 # EQEMu 06/29/05
|
||||
OP_RecipesFavorite=0x23f0
|
||||
OP_RecipesSearch=0x31f8 # EQEmu 06/29/05
|
||||
OP_RecipeReply=0x4ea2 # EQEmu 06/29/05
|
||||
OP_RecipeAutoCombine=0x7822
|
||||
OP_TradeSkillCombine=0x0b40 # ShowEQ 06/29/05
|
||||
|
||||
OP_RequestDuel=0x28e1
|
||||
OP_DuelResponse=0x2e78
|
||||
OP_DuelResponse2=0x3bad #when accepted
|
||||
|
||||
OP_RezzComplete=0x60fa
|
||||
OP_RezzRequest=0x417a
|
||||
OP_RezzAnswer=0x6219
|
||||
OP_SafeFallSuccess=0x5309
|
||||
OP_Shielding=0x0000
|
||||
OP_TargetReject=0x0000
|
||||
OP_TestBuff=0x0000
|
||||
OP_Track=0x5205 # ShowEQ 06/29/05
|
||||
OP_TrackTarget=0x71ae
|
||||
OP_TrackUnknown=0x74e1 #size 0 right after OP_Track
|
||||
|
||||
#Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x60b6 #open guild tribute master window
|
||||
OP_OpenTributeMaster=0x512e #open tribute master window
|
||||
OP_OpenTributeReply=0x0000 #reply to open request
|
||||
OP_SelectTribute=0x625d #clicking on a tribute, and text reply
|
||||
OP_TributeItem=0x6f6c #donating an item
|
||||
OP_TributeMoney=0x27b3 #donating money
|
||||
OP_TributeNPC=0x0000 #seems to be missing now
|
||||
OP_TributeToggle=0x2688 #activating/deactivating tribute
|
||||
OP_TributeTimer=0x4665 #a 4 byte tier update, 10 minutes for seconds
|
||||
OP_TributePointUpdate=0x6463 #16 byte point packet
|
||||
OP_TributeUpdate=0x5639 # ShowEQ 06/29/05
|
||||
OP_GuildTributeInfo=0x5e3d # EQEmu 06/29/05
|
||||
OP_TributeInfo=0x152d # EQEmu 06/29/05
|
||||
OP_SendGuildTributes=0x5e3a # request packet, 4 bytes
|
||||
OP_SendTributes=0x067a # request packet, 4 bytes, migth be backwards
|
||||
OP_CloseTributeMaster=0x7f25 #sent by client when they close window
|
||||
|
||||
#Adventure packets:
|
||||
OP_LeaveAdventure=0x0c0d
|
||||
OP_AdventureFinish=0x3906
|
||||
OP_AdventureInfoRequest=0x2aaf #right click adventure recruiter
|
||||
OP_AdventureInfo=0x1db5 #text reply to right click
|
||||
OP_AdventureRequest=0x43fd
|
||||
OP_AdventureDetails=0x3f26
|
||||
OP_AdventureData=0x0677
|
||||
OP_AdventureUpdate=0x64ac
|
||||
OP_AdventureMerchantRequest=0x0950
|
||||
OP_AdventureMerchantResponse=0x4416
|
||||
OP_AdventureMerchantPurchase=0x413d
|
||||
OP_AdventureMerchantSell=0x0097
|
||||
OP_AdventurePointsUpdate=0x420a #not sure, followed purchase
|
||||
OP_AdventureStatsRequest=0x5fc7
|
||||
OP_AdventureStatsReply=0x56cd
|
||||
OP_AdventureLeaderboardRequest=0x230a
|
||||
OP_AdventureLeaderboardReply=0x0d0f
|
||||
# request stats: 0x5fc7, reply 0x56cd
|
||||
# request leaderboard: 0x230a, reply 0x0d0f
|
||||
|
||||
#Group Opcodes
|
||||
OP_GroupDisband=0x4033 # ShowEQ 06/29/05
|
||||
OP_GroupInvite=0x3853 # ShowEQ 06/29/05
|
||||
OP_GroupFollow=0x1b48 # ShowEQ 06/29/05
|
||||
OP_GroupUpdate=0x66ba # ShowEQ 06/29/05
|
||||
OP_GroupAcknowledge=0x0797
|
||||
OP_GroupCancelInvite=0x42c9 # ShowEQ 06/29/05
|
||||
OP_GroupDelete=0x0000
|
||||
OP_GroupFollow2=0x0000 #used with GroupInvite2
|
||||
OP_GroupInvite2=0x1f27 #this is sometimes sent instead of OP_GroupInvite
|
||||
OP_CancelInvite=0x0000
|
||||
|
||||
OP_RaidJoin=0x0000 # ShowEQ 06/29/05
|
||||
OP_RaidInvite=0x1f21 # ShowEQ 06/29/05
|
||||
OP_RaidUpdate=0x1974 # EQEmu 06/29/05
|
||||
|
||||
|
||||
OP_ZoneComplete=0x0000
|
||||
OP_ItemLinkText=0x0000
|
||||
OP_ClearObject=0x8258
|
||||
OP_DisciplineUpdate=0x7180
|
||||
OP_DisciplineTimer=0x53df
|
||||
OP_LocInfo=0x0000
|
||||
OP_FindPersonRequest=0x3c41 # ShowEQ 06/29/05
|
||||
OP_FindPersonReply=0x5711
|
||||
OP_ForceFindPerson=0x0000
|
||||
OP_LoginComplete=0x0000
|
||||
OP_Sound=0x4a1d
|
||||
#OP_Zone_MissingName01=0x0000 #remove on recompile
|
||||
OP_MobRename=0x3230
|
||||
OP_BankerChange=0x6a5b
|
||||
|
||||
#Rogue packets
|
||||
OP_SenseTraps=0x24ab # ShowEQ 06/29/05
|
||||
OP_PickPocket=0x4a2a
|
||||
OP_DisarmTraps=0x0000
|
||||
OP_Disarm=0x17d9
|
||||
OP_Hide=0x6f64 # ShowEQ 06/29/05
|
||||
OP_Sneak=0x4312 # ShowEQ 06/29/05
|
||||
|
||||
#Task packets
|
||||
#task complete related: 0x54eb (24 bytes), 0x4c8c (8 bytes), 0x6a1d (4 bytes)
|
||||
OP_TaskActivityComplete=0x54eb
|
||||
OP_CompletedTasks=0x53c4 # ShowEQ 06/29/05
|
||||
OP_TaskDescription=0x682d # ShowEQ 06/29/05
|
||||
OP_TaskActivity=0x3ba8 # ShowEQ 06/29/05
|
||||
OP_TaskMemberList=0x09b6 #not sure
|
||||
OP_OpenNewTasksWindow=0x5e7c #combined with OP_AvaliableTask I think
|
||||
OP_AvaliableTask=0x0000
|
||||
OP_AcceptNewTask=0x207f
|
||||
OP_TaskHistoryRequest=0x3274
|
||||
OP_TaskHistoryReply=0x009c
|
||||
OP_CancelTask=0x4c8c
|
||||
OP_DeclineAllTasks=0x207f #not sure, 12 bytes
|
||||
|
||||
|
||||
OP_RequestClientZoneChange=0x1235
|
||||
OP_PurchaseLeadershipAA=0x07f1
|
||||
OP_UpdateLeadershipAA=0x3eec
|
||||
OP_LeadershipExpUpdate=0x7416
|
||||
OP_LeadershipExpToggle=0x17bf
|
||||
OP_GroupUpdateLeaderAA=0x4c3f
|
||||
OP_MarkNPC=0x5b37
|
||||
OP_ClearNPCMarks=0x1794
|
||||
OP_DoGroupLeadershipAbility=0x4ffe
|
||||
OP_DelegateAbility=0x56eb
|
||||
|
||||
#The following 4 Opcodes are for SoF only:
|
||||
OP_FinishWindow=0x0000 #Trevius 03/15/09
|
||||
OP_FinishWindow2=0x0000 #Trevius 03/15/09
|
||||
OP_ItemVerifyRequest=0x0000 #Trevius 03/15/09
|
||||
OP_ItemVerifyReply=0x0000 #Trevius 03/15/09
|
||||
|
||||
#discovered opcodes not yet used:
|
||||
OP_CrashDump=0x6d5d
|
||||
OP_PlayMP3=0x0000
|
||||
OP_FriendsWho=0x41db
|
||||
OP_MoveLogRequest=0x78e8 #gone I think
|
||||
OP_MoveLogDisregard=0x0000 #gone I think
|
||||
OP_ReclaimCrystals=0x12fd
|
||||
OP_CrystalCountUpdate=0x0000
|
||||
OP_DynamicWall=0x0000
|
||||
OP_CustomTitles=0x2a28 # ShowEQ 06/29/05
|
||||
OP_RequestTitles=0x5eba # EQEmu 06/29/05
|
||||
OP_SendTitleList=0x3e89 # EQEmu 06/29/05
|
||||
OP_SetTitle=0x1f22 # EQEmu 06/29/05
|
||||
OP_SetTitleReply=0x5eab # EQEmu 06/29/05
|
||||
OP_Bandolier=0x6f0c
|
||||
OP_PotionBelt=0x0719
|
||||
OP_OpenDiscordMerchant=0x0000 #8 bytes
|
||||
OP_DiscordMerchantInventory=0x0000 #long item packet
|
||||
OP_GiveMoney=0x56d4 #16 bytes, pp, gp, sp, cp.
|
||||
OP_OnLevelMessage=0x1dde
|
||||
OP_PopupResponse=0x3816
|
||||
OP_RequestKnowledgeBase=0x7584
|
||||
OP_KnowledgeBase=0x4a52
|
||||
OP_PlayerUnderWorld=0x46d9
|
||||
OP_PVPStats=0x5cc0
|
||||
OP_PVPLeaderBoardRequest=0x61d2
|
||||
OP_PVPLeaderBoardReply=0x1a59
|
||||
OP_PVPLeaderBoardDetailsRequest=0x06a2
|
||||
OP_PVPLeaderBoardDetailsReply=0x246a
|
||||
OP_WeaponEquip1=0x6c5e
|
||||
OP_WeaponEquip2=0x63da
|
||||
OP_WeaponUnequip2=0x381d
|
||||
OP_VoiceMacroIn=0x2866
|
||||
OP_VoiceMacroOut=0x2ec6
|
||||
|
||||
#named unknowns, to make looking for real unknown easier
|
||||
OP_AnnoyingZoneUnknown=0x0000 # EQEmu 06/29/05
|
||||
OP_Some6ByteHPUpdate=0x0000 #seems to happen when you target group members
|
||||
OP_SomeItemPacketMaybe=0x497c # EQEmu 06/29/05
|
||||
OP_QueryResponseThing=0x6379
|
||||
OP_FloatListThing=0x7510 # EQEmu 06/29/05
|
||||
|
||||
#Login opcodes
|
||||
OP_SessionReady=0x0001
|
||||
OP_Login=0x0002
|
||||
OP_ServerListRequest=0x0004
|
||||
OP_PlayEverquestRequest=0x000d
|
||||
OP_PlayEverquestResponse=0x0021
|
||||
OP_ChatMessage=0x0016
|
||||
OP_LoginAccepted=0x0017
|
||||
OP_ServerListResponse=0x0018
|
||||
OP_Poll=0x0029
|
||||
OP_EnterChat=0x000f
|
||||
OP_PollResponse=0x0011
|
||||
|
||||
#raw opcodes
|
||||
OP_RAWSessionRequest=0x0000
|
||||
OP_RAWSessionResponse=0x0000
|
||||
OP_RAWCombined=0x0000
|
||||
OP_RAWSessionDisconnect=0x0000
|
||||
OP_RAWKeepAlive=0x0000
|
||||
OP_RAWSessionStatRequest=0x0000
|
||||
OP_RAWSessionStatResponse=0x0000
|
||||
OP_RAWPacket=0x0000
|
||||
OP_RAWFragment=0x0000
|
||||
OP_RAWOutOfOrderAck=0x0000
|
||||
OP_RAWAck=0x0000
|
||||
OP_RAWAppCombined=0x0000
|
||||
OP_RAWOutOfSession=0x0000
|
||||
|
||||
#mail opcodes
|
||||
OP_Command=0x0000
|
||||
OP_MailboxHeader=0x0000
|
||||
OP_MailHeader=0x0000
|
||||
OP_MailBody=0x0000
|
||||
OP_NewMail=0x0000
|
||||
OP_SentConfirm=0x0000
|
||||
|
||||
|
||||
#we need to document the differences between these packets to make identifying them easier
|
||||
OP_MobHealth=0x3d2d # ShowEQ 06/29/05
|
||||
OP_HPUpdate=0x217b # ShowEQ 06/29/05
|
||||
OP_Some3ByteHPUpdate=0x0000 #initial HP update for mobs
|
||||
OP_InitialHPUpdate=0x7ac2 # ShowEQ 06/29/05
|
||||
|
||||
#remove these
|
||||
#junk
|
||||
OP_0x0193=0x0000
|
||||
OP_0x0347=0x0000
|
||||
OP_ConsumeAmmo=0x0000
|
||||
OP_EmoteAnim=0x0000
|
||||
OP_Deny=0x0000
|
||||
OP_SetDataRate=0x0000
|
||||
|
||||
@@ -94,6 +94,8 @@ OP_ClearBlockedBuffs=0x5d3c
|
||||
OP_WorldObjectsSent=0x7fa8
|
||||
OP_SendExpZonein=0x25ab
|
||||
OP_SendAATable=0x7791
|
||||
OP_ClearAA=0x422e
|
||||
OP_ClearLeadershipAbilities=0xb978
|
||||
OP_RespondAA=0x379d
|
||||
OP_UpdateAA=0x504f
|
||||
OP_SendAAStats=0x3d1c
|
||||
@@ -289,8 +291,10 @@ OP_LeadershipExpToggle=0x3ea6
|
||||
OP_LeadershipExpUpdate=0x6922
|
||||
OP_PurchaseLeadershipAA=0x1962
|
||||
OP_UpdateLeadershipAA=0x56aa
|
||||
OP_MarkNPC=0x2d9f
|
||||
OP_MarkNPC=0x1a6c
|
||||
OP_MarkRaidNPC=0x2d9f #unimplemented
|
||||
OP_ClearNPCMarks=0x0d2d
|
||||
OP_ClearRaidNPCMarks=0x433a #unimplemented
|
||||
OP_DelegateAbility=0x7820
|
||||
OP_SetGroupTarget=0x118a
|
||||
OP_Charm=0x7118
|
||||
@@ -365,7 +369,7 @@ OP_DzLeaderStatus=0x4021
|
||||
OP_DzExpeditionEndsWarning=0x32eb
|
||||
OP_DzMemberList=0x348f
|
||||
OP_DzCompass=0x0e01 # Was 0x4f09
|
||||
OP_DzChooseZone=0x0000 # Maybe 0x29d6
|
||||
OP_DzChooseZone=0x6e5e # Maybe 0x29d6
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 # Actually OP_MobUpdate ?
|
||||
@@ -498,6 +502,8 @@ OP_GroupRoles=0x047c
|
||||
OP_GroupMakeLeader=0x4129
|
||||
OP_DoGroupLeadershipAbility=0x17d7
|
||||
OP_GroupLeadershipAAUpdate=0x6567
|
||||
OP_GroupMentor=0x56DB
|
||||
OP_InspectBuffs=0x01f3
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x4463
|
||||
@@ -510,8 +516,8 @@ OP_LFGAppearance=0x0000
|
||||
OP_LFGResponse=0x0000
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x1bd1
|
||||
OP_RaidUpdate=0x548e
|
||||
OP_RaidInvite=0x5fb2
|
||||
OP_RaidUpdate=0x1bd1
|
||||
OP_RaidJoin=0x0000
|
||||
|
||||
# Button-push commands
|
||||
|
||||
@@ -0,0 +1,661 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x[0-9a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x7a09
|
||||
OP_ApproveWorld=0x7499
|
||||
OP_LogServer=0x7ceb
|
||||
OP_SendCharInfo=0x00d2
|
||||
OP_ExpansionInfo=0x590d
|
||||
OP_GuildsList=0x507a
|
||||
OP_EnterWorld=0x578f
|
||||
OP_PostEnterWorld=0x6259
|
||||
OP_World_Client_CRC1=0x12cc
|
||||
OP_World_Client_CRC2=0x0f13
|
||||
OP_SendSpellChecksum=0x0000
|
||||
OP_SendSkillCapsChecksum=0x0000
|
||||
|
||||
# Character Select Related:
|
||||
OP_SendMaxCharacters=0x5475
|
||||
OP_SendMembership=0x7acc
|
||||
OP_SendMembershipDetails=0x057b
|
||||
OP_CharacterCreateRequest=0x6773
|
||||
OP_CharacterCreate=0x6bbf
|
||||
OP_DeleteCharacter=0x1808
|
||||
OP_RandomNameGenerator=0x5954
|
||||
OP_ApproveName=0x56a2
|
||||
OP_MOTD=0x0c22
|
||||
OP_SetChatServer=0x1bc5
|
||||
OP_SetChatServer2=0x7eec
|
||||
OP_ZoneServerInfo=0x4c44
|
||||
OP_WorldComplete=0x4493
|
||||
OP_WorldUnknown001=0x2301
|
||||
OP_FloatListThing=0x46c6
|
||||
|
||||
# Reasons for Disconnect:
|
||||
OP_ZoneUnavail=0x4cb4
|
||||
OP_WorldClientReady=0x23c1
|
||||
OP_CharacterStillInZone=0x0000
|
||||
OP_WorldChecksumFailure=0x0000
|
||||
OP_WorldLoginFailed=0x0000
|
||||
OP_WorldLogout=0x0000
|
||||
OP_WorldLevelTooHigh=0x0000
|
||||
OP_CharInacessable=0x0000
|
||||
OP_UserCompInfo=0x0000
|
||||
OP_SendExeChecksum=0x0000
|
||||
OP_SendBaseDataChecksum=0x0000
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x471d
|
||||
OP_ZoneEntry=0x5089
|
||||
OP_ReqNewZone=0x7887
|
||||
OP_NewZone=0x1795
|
||||
OP_ZoneSpawns=0x5237
|
||||
OP_PlayerProfile=0x6506
|
||||
OP_TimeOfDay=0x5070
|
||||
OP_LevelUpdate=0x1eec
|
||||
OP_Stamina=0x2a79
|
||||
OP_RequestClientZoneChange=0x3fcf
|
||||
OP_ZoneChange=0x2d18
|
||||
OP_LockoutTimerInfo=0x0000
|
||||
OP_ZoneServerReady=0x0000
|
||||
OP_ZoneInUnknown=0x0000
|
||||
OP_LogoutReply=0x0000
|
||||
OP_PreLogoutReply=0x0000
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x0971
|
||||
OP_ChangeSize=0x4707
|
||||
OP_TributeUpdate=0x5961
|
||||
OP_TributeTimer=0x073d
|
||||
OP_SendTributes=0x729b
|
||||
OP_SendGuildTributes=0x1877
|
||||
OP_TributeInfo=0x4254
|
||||
OP_Weather=0x661e
|
||||
OP_ReqClientSpawn=0x35fa
|
||||
OP_SpawnDoor=0x7291
|
||||
OP_GroundSpawn=0x6fca
|
||||
OP_SendZonepoints=0x69a4
|
||||
OP_BlockedBuffs=0x3033
|
||||
OP_RemoveBlockedBuffs=0x0de7
|
||||
OP_ClearBlockedBuffs=0x34cb
|
||||
OP_WorldObjectsSent=0x5ae2
|
||||
OP_SendExpZonein=0x5f8e
|
||||
OP_SendAATable=0x66b5
|
||||
OP_ClearAA=0x0f50
|
||||
OP_ClearLeadershipAbilities=0x6da5
|
||||
OP_RespondAA=0x7a27
|
||||
OP_UpdateAA=0x66f0
|
||||
OP_SendAAStats=0x43c8
|
||||
OP_AAExpUpdate=0x7d14
|
||||
OP_ExpUpdate=0x20ed
|
||||
OP_HPUpdate=0x2828
|
||||
OP_ManaChange=0x5467
|
||||
OP_TGB=0x0876
|
||||
OP_SpecialMesg=0x0083
|
||||
OP_GuildMemberList=0x12a6
|
||||
OP_GuildMOTD=0x3e13
|
||||
OP_CharInventory=0x5ca6
|
||||
OP_WearChange=0x7994
|
||||
OP_ClientUpdate=0x7dfc
|
||||
OP_ClientReady=0x345d
|
||||
OP_SetServerFilter=0x444d
|
||||
|
||||
# Guild Opcodes
|
||||
OP_GetGuildMOTD=0x36e0
|
||||
OP_GetGuildMOTDReply=0x4f1f
|
||||
OP_GuildMemberUpdate=0x69b9
|
||||
OP_GuildInvite=0x7099
|
||||
OP_GuildRemove=0x1444
|
||||
OP_GuildPeace=0x67e3
|
||||
OP_SetGuildMOTD=0x0b0b
|
||||
OP_GuildWar=0x1ffb
|
||||
OP_GuildLeader=0x7e09
|
||||
OP_GuildDelete=0x3708
|
||||
OP_GuildInviteAccept=0x7053
|
||||
OP_GuildDemote=0x2d4e
|
||||
OP_GuildPromote=0x6a98
|
||||
OP_GuildPublicNote=0x5053
|
||||
OP_GuildManageBanker=0x748f
|
||||
OP_GuildBank=0x5134
|
||||
OP_SetGuildRank=0x0b9c
|
||||
OP_GuildUpdateURLAndChannel=0x2958
|
||||
OP_GuildStatus=0x7326
|
||||
OP_GuildCreate=0x76d9
|
||||
OP_GuildMemberLevelUpdate=0x0000 # Unused?
|
||||
OP_ZoneGuildList=0x0000 # Unused?
|
||||
OP_GetGuildsList=0x0000 # Unused?
|
||||
OP_LFGuild=0x0000
|
||||
OP_GuildManageRemove=0x0000
|
||||
OP_GuildManageAdd=0x0000
|
||||
OP_GuildManageStatus=0x0000
|
||||
|
||||
# GM/Guide Opcodes
|
||||
OP_GMServers=0x08c1
|
||||
OP_GMBecomeNPC=0x3ae1
|
||||
OP_GMZoneRequest=0x62ac
|
||||
OP_GMZoneRequest2=0x7e1a
|
||||
OP_GMGoto=0x7d8e
|
||||
OP_GMSearchCorpse=0x357c
|
||||
OP_GMHideMe=0x79c5
|
||||
OP_GMDelCorpse=0x607e
|
||||
OP_GMApproval=0x6db5
|
||||
OP_GMToggle=0x2097
|
||||
OP_GMSummon=0x486f
|
||||
OP_GMEmoteZone=0x1cfd
|
||||
OP_GMEmoteWorld=0x458e
|
||||
OP_GMFind=0x4a8f
|
||||
OP_GMKick=0x26a7
|
||||
OP_GMKill=0x51d3
|
||||
OP_GMNameChange=0x035f
|
||||
OP_GMLastName=0x46ce
|
||||
|
||||
# Misc Opcodes
|
||||
OP_InspectRequest=0x57bc
|
||||
OP_InspectAnswer=0x71ac
|
||||
OP_InspectMessageUpdate=0x4d25
|
||||
OP_BeginCast=0x318f
|
||||
OP_ColoredText=0x43af
|
||||
OP_ConsentResponse=0x384a
|
||||
OP_MemorizeSpell=0x217c
|
||||
OP_SwapSpell=0x0efa
|
||||
OP_CastSpell=0x1287
|
||||
OP_Consider=0x742b
|
||||
OP_FormattedMessage=0x1024
|
||||
OP_SimpleMessage=0x213f
|
||||
OP_Buff=0x659c
|
||||
OP_Illusion=0x312a
|
||||
OP_MoneyOnCorpse=0x5f44
|
||||
OP_RandomReply=0x106b
|
||||
OP_DenyResponse=0x2382
|
||||
OP_SkillUpdate=0x04c
|
||||
OP_GMTrainSkillConfirm=0x4b64
|
||||
OP_RandomReq=0x7b10
|
||||
OP_Death=0x6517
|
||||
OP_GMTraining=0x1966
|
||||
OP_GMEndTraining=0x4d6b
|
||||
OP_GMTrainSkill=0x2a85
|
||||
OP_Animation=0x7177
|
||||
OP_Begging=0x6703
|
||||
OP_Consent=0x1fd1
|
||||
OP_ConsentDeny=0x7a45
|
||||
OP_AutoFire=0x241e
|
||||
OP_PetCommands=0x0159
|
||||
OP_DeleteSpell=0x3358
|
||||
OP_Surname=0x0423
|
||||
OP_ClearSurname=0x3fb0
|
||||
OP_FaceChange=0x5578
|
||||
OP_SenseHeading=0x260a
|
||||
OP_Action=0x744c
|
||||
OP_ConsiderCorpse=0x5204
|
||||
OP_HideCorpse=0x49e1
|
||||
OP_CorpseDrag=0x0904
|
||||
OP_CorpseDrop=0x7037
|
||||
OP_Bug=0x73f4
|
||||
OP_Feedback=0x5602
|
||||
OP_Report=0x6f14
|
||||
OP_Damage=0x6f15
|
||||
OP_ChannelMessage=0x2b2d
|
||||
OP_Assist=0x4478
|
||||
OP_AssistGroup=0x27f8
|
||||
OP_MoveCoin=0x0bcf
|
||||
OP_ZonePlayerToBind=0x08d8
|
||||
OP_KeyRing=0x1219
|
||||
OP_WhoAllRequest=0x674b
|
||||
OP_WhoAllResponse=0x578c
|
||||
OP_FriendsWho=0x3956
|
||||
OP_ConfirmDelete=0x43a3
|
||||
OP_Logout=0x4ac6
|
||||
OP_Rewind=0x1745
|
||||
OP_TargetCommand=0x58e2
|
||||
OP_Hide=0x67fe
|
||||
OP_Jump=0x31f4
|
||||
OP_Camp=0x28ec
|
||||
OP_Emote=0x373b
|
||||
OP_SetRunMode=0x009f
|
||||
OP_BankerChange=0x791e
|
||||
OP_TargetMouse=0x075d
|
||||
OP_MobHealth=0x37b1
|
||||
OP_InitialMobHealth=0x0000 # Unused?
|
||||
OP_TargetHoTT=0x0272
|
||||
OP_TargetBuffs=0x4f4b
|
||||
OP_XTargetResponse=0x4d59
|
||||
OP_XTargetRequest=0x3763
|
||||
OP_XTargetAutoAddHaters=0x672f
|
||||
OP_BuffCreate=0x3377
|
||||
OP_BuffRemoveRequest=0x64f2
|
||||
OP_DeleteSpawn=0x7280
|
||||
OP_AutoAttack=0x109d
|
||||
OP_AutoAttack2=0x3526
|
||||
OP_Consume=0x4b70
|
||||
OP_MoveItem=0x32ee
|
||||
OP_DeleteItem=0x18ad
|
||||
OP_DeleteCharge=0x01b8
|
||||
OP_ItemPacket=0x368e
|
||||
OP_ItemLinkResponse=0x70c0
|
||||
OP_ItemLinkClick=0x4cef
|
||||
OP_ItemPreview=0x6b5c
|
||||
OP_NewSpawn=0x6097
|
||||
OP_Track=0x17e5
|
||||
OP_TrackTarget=0x695e
|
||||
OP_TrackUnknown=0x4577
|
||||
OP_ClickDoor=0x3a8f
|
||||
OP_MoveDoor=0x08e8
|
||||
OP_RemoveAllDoors=0x700c
|
||||
OP_EnvDamage=0x51fd
|
||||
OP_BoardBoat=0x4211
|
||||
OP_LeaveBoat=0x7617
|
||||
OP_ControlBoat=0x0ae7
|
||||
OP_Forage=0x5306
|
||||
OP_SafeFallSuccess=0x2219
|
||||
OP_RezzComplete=0x760d
|
||||
OP_RezzRequest=0x3c21
|
||||
OP_RezzAnswer=0x701c
|
||||
OP_Shielding=0x52e5
|
||||
OP_RequestDuel=0x3af1
|
||||
OP_MobRename=0x2c57
|
||||
OP_AugmentItem=0x661b
|
||||
OP_WeaponEquip1=0x34a7
|
||||
OP_WeaponEquip2=0x559a
|
||||
OP_WeaponUnequip2=0x2d25
|
||||
OP_ApplyPoison=0x31e6
|
||||
OP_Save=0x4a39
|
||||
OP_TestBuff=0x7cb8
|
||||
OP_CustomTitles=0x100e
|
||||
OP_Split=0x3a54
|
||||
OP_YellForHelp=0x4e56
|
||||
OP_LoadSpellSet=0x261d
|
||||
OP_Bandolier=0x7677
|
||||
OP_PotionBelt=0x1a3e
|
||||
OP_DuelResponse=0x6a46
|
||||
OP_DuelResponse2=0x68d3
|
||||
OP_SaveOnZoneReq=0x600d
|
||||
OP_ReadBook=0x72df
|
||||
OP_Dye=0x23b9
|
||||
OP_InterruptCast=0x048c
|
||||
OP_AAAction=0x424e
|
||||
OP_LeadershipExpToggle=0x74bd
|
||||
OP_LeadershipExpUpdate=0x2797
|
||||
OP_PurchaseLeadershipAA=0x6c55
|
||||
OP_UpdateLeadershipAA=0x0026
|
||||
OP_MarkNPC=0x1fb5
|
||||
OP_MarkRaidNPC=0x5a58 #unimplemented
|
||||
OP_ClearNPCMarks=0x2003
|
||||
OP_ClearRaidNPCMarks=0x20d3 #unimplemented
|
||||
OP_DelegateAbility=0x4c9d
|
||||
OP_SetGroupTarget=0x026
|
||||
OP_Charm=0x5d92
|
||||
OP_Stun=0x36a4
|
||||
OP_SendFindableNPCs=0x4613
|
||||
OP_FindPersonRequest=0x5cea
|
||||
OP_FindPersonReply=0x7e58
|
||||
OP_Sound=0x1a30
|
||||
OP_PetBuffWindow=0x5882
|
||||
OP_LevelAppearance=0x3bc9
|
||||
OP_Translocate=0x6580
|
||||
OP_Sacrifice=0x1821
|
||||
OP_PopupResponse=0x08a6
|
||||
OP_OnLevelMessage=0x575b
|
||||
OP_AugmentInfo=0x0afb
|
||||
OP_Petition=0x3de3
|
||||
OP_SomeItemPacketMaybe=0x747c
|
||||
OP_PVPStats=0x4b15
|
||||
OP_PVPLeaderBoardRequest=0x04aa
|
||||
OP_PVPLeaderBoardReply=0x071f
|
||||
OP_PVPLeaderBoardDetailsRequest=0x3707
|
||||
OP_PVPLeaderBoardDetailsReply=0x25b7
|
||||
OP_RestState=0x000f
|
||||
OP_RespawnWindow=0x0ecb
|
||||
OP_LDoNButton=0x5327
|
||||
OP_SetStartCity=0x6326
|
||||
OP_VoiceMacroIn=0x17fd
|
||||
OP_VoiceMacroOut=0x409a
|
||||
OP_ItemViewUnknown=0x465b
|
||||
OP_VetRewardsAvaliable=0x590e
|
||||
OP_VetClaimRequest=0x1126
|
||||
OP_VetClaimReply=0x16d4
|
||||
OP_DisciplineUpdate=0x759e
|
||||
OP_DisciplineTimer=0x6989
|
||||
OP_BecomeCorpse=0x0000 # Unused?
|
||||
OP_Action2=0x0000 # Unused?
|
||||
OP_MobUpdate=0x2c84
|
||||
OP_NPCMoveUpdate=0x5892
|
||||
OP_CameraEffect=0x127f
|
||||
OP_SpellEffect=0x5936
|
||||
OP_RemoveNimbusEffect=0x7b1e
|
||||
OP_AltCurrency=0x6b6d
|
||||
OP_AltCurrencyMerchantRequest=0x5409
|
||||
OP_AltCurrencyMerchantReply=0x27a2
|
||||
OP_AltCurrencyPurchase=0x3788
|
||||
OP_AltCurrencySell=0x40b6
|
||||
OP_AltCurrencySellSelection=0x532a
|
||||
OP_AltCurrencyReclaim=0x0339
|
||||
OP_CrystalCountUpdate=0x467f
|
||||
OP_CrystalCreate=0x7aee
|
||||
OP_CrystalReclaim=0x2439
|
||||
OP_Untargetable=0x053c
|
||||
OP_IncreaseStats=0x70a3
|
||||
OP_Weblink=0x6f4b
|
||||
OP_OpenContainer=0x0000
|
||||
OP_Marquee=0x502e
|
||||
OP_ItemRecastDelay=0x15a9
|
||||
#OP_OpenInventory=0x0000 # Likely does not exist in RoF -U
|
||||
|
||||
OP_DzQuit=0x205f
|
||||
OP_DzListTimers=0x0398
|
||||
OP_DzAddPlayer=0x59ca
|
||||
OP_DzRemovePlayer=0x4701
|
||||
OP_DzSwapPlayer=0x1abc
|
||||
OP_DzMakeLeader=0x405b
|
||||
OP_DzPlayerList=0x543d
|
||||
OP_DzJoinExpeditionConfirm=0x14c6
|
||||
OP_DzJoinExpeditionReply=0x7f4b
|
||||
OP_DzExpeditionInfo=0x4f7e
|
||||
OP_DzExpeditionList=0x9119
|
||||
OP_DzMemberStatus=0xb2e3
|
||||
OP_DzLeaderStatus=0x32f0
|
||||
OP_DzExpeditionEndsWarning=0x383c
|
||||
OP_DzMemberList=0x3de9
|
||||
OP_DzCompass=0x3e0e
|
||||
OP_DzChooseZone=0x0b7d
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 # Actually OP_MobUpdate ?
|
||||
OP_ManaUpdate=0x3791
|
||||
OP_EnduranceUpdate=0x5f42
|
||||
OP_MobManaUpdate=0x2404
|
||||
OP_MobEnduranceUpdate=0x1c81
|
||||
|
||||
# Mercenary Opcodes
|
||||
OP_MercenaryDataUpdateRequest=0x7b89
|
||||
OP_MercenaryDataUpdate=0x61a4
|
||||
OP_MercenaryDataRequest=0x11c1
|
||||
OP_MercenaryDataResponse=0x72ce
|
||||
OP_MercenaryHire=0x7169
|
||||
OP_MercenaryDismiss=0x6e83
|
||||
OP_MercenaryTimerRequest=0x31e4
|
||||
OP_MercenaryTimer=0x0763
|
||||
OP_MercenaryUnknown1=0x5d26
|
||||
OP_MercenaryCommand=0x27f2
|
||||
OP_MercenarySuspendRequest=0x4407
|
||||
OP_MercenarySuspendResponse=0x6f03
|
||||
OP_MercenaryUnsuspendResponse=0x27a0
|
||||
|
||||
# Looting
|
||||
OP_LootRequest=0x0adf
|
||||
OP_EndLootRequest=0x30f7
|
||||
OP_LootItem=0x4dc9
|
||||
OP_LootComplete=0x55c4
|
||||
|
||||
# bazaar trader stuff:
|
||||
OP_BazaarSearch=0x39d6
|
||||
OP_TraderDelItem=0x0000
|
||||
OP_BecomeTrader=0x61b3
|
||||
OP_TraderShop=0x31df
|
||||
OP_Trader=0x4ef5
|
||||
OP_TraderBuy=0x0000
|
||||
OP_Barter=0x243a
|
||||
OP_ShopItem=0x0000
|
||||
OP_BazaarInspect=0x0000
|
||||
OP_Bazaar=0x0000
|
||||
OP_TraderItemUpdate=0x0000
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x77b5
|
||||
OP_TradeAcceptClick=0x69e2
|
||||
OP_TradeRequestAck=0x14bf
|
||||
OP_TradeCoins=0x4206
|
||||
OP_FinishTrade=0x3993
|
||||
OP_CancelTrade=0x354c
|
||||
OP_TradeMoneyUpdate=0x68c2
|
||||
OP_MoneyUpdate=0x640c
|
||||
OP_TradeBusy=0x5505
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x7349
|
||||
OP_FinishWindow2=0x40ef
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x189c
|
||||
OP_ItemVerifyReply=0x097b
|
||||
|
||||
# merchant stuff
|
||||
OP_ShopPlayerSell=0x791b
|
||||
OP_ShopRequest=0x4fed
|
||||
OP_ShopEnd=0x30a8
|
||||
OP_ShopEndConfirm=0x3196
|
||||
OP_ShopPlayerBuy=0x0ddd
|
||||
OP_ShopDelItem=0x724f
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x4aa1
|
||||
OP_ClickObjectAction=0x0c1e
|
||||
OP_ClearObject=0x7a11
|
||||
OP_RecipeDetails=0x6e02
|
||||
OP_RecipesFavorite=0x71b1
|
||||
OP_RecipesSearch=0x6290
|
||||
OP_RecipeReply=0x1db6
|
||||
OP_RecipeAutoCombine=0x40d7
|
||||
OP_TradeSkillCombine=0x579a
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x378d
|
||||
OP_OpenTributeMaster=0x7666
|
||||
OP_SelectTribute=0x79fc
|
||||
OP_TributeItem=0x4f3e
|
||||
OP_TributeMoney=0x58fb
|
||||
OP_TributeToggle=0x241d
|
||||
OP_TributePointUpdate=0x5300
|
||||
OP_TributeNPC=0x0000
|
||||
OP_GuildTributeInfo=0x0000
|
||||
OP_OpenTributeReply=0x0000
|
||||
OP_GuildTributeStatus=0x0000
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x5d18
|
||||
OP_AdventureFinish=0x400f
|
||||
OP_AdventureInfoRequest=0x3cb0
|
||||
OP_AdventureInfo=0x4c54
|
||||
OP_AdventureRequest=0x2c6c
|
||||
OP_AdventureDetails=0x5648
|
||||
OP_AdventureData=0x7171
|
||||
OP_AdventureUpdate=0x1b01
|
||||
OP_AdventureMerchantRequest=0x6922
|
||||
OP_AdventureMerchantResponse=0x3e47
|
||||
OP_AdventureMerchantPurchase=0x5b72
|
||||
OP_AdventureMerchantSell=0x2f9b
|
||||
OP_AdventurePointsUpdate=0x65c3
|
||||
OP_AdventureStatsRequest=0x5a62
|
||||
OP_AdventureStatsReply=0x2370
|
||||
OP_AdventureLeaderboardRequest=0x7093
|
||||
OP_AdventureLeaderboardReply=0x7f79
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x4c10
|
||||
OP_GroupInvite=0x6110
|
||||
OP_GroupFollow=0x1649
|
||||
OP_GroupUpdate=0x3abb
|
||||
OP_GroupUpdateB=0x6194
|
||||
OP_GroupCancelInvite=0x0000
|
||||
OP_GroupAcknowledge=0x7323
|
||||
OP_GroupDelete=0x0f6c
|
||||
OP_CancelInvite=0x2a50
|
||||
OP_GroupFollow2=0x2060
|
||||
OP_GroupInvite2=0x32c2
|
||||
OP_GroupDisbandYou=0x1ae5
|
||||
OP_GroupDisbandOther=0x74da
|
||||
OP_GroupLeaderChange=0x21b4
|
||||
OP_GroupRoles=0x70e2
|
||||
OP_GroupMakeLeader=0x4229
|
||||
OP_DoGroupLeadershipAbility=0x6eae
|
||||
OP_GroupLeadershipAAUpdate=0x02cf
|
||||
OP_GroupMentor=0x3342
|
||||
OP_InspectBuffs=0x486c
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x6060
|
||||
OP_LFGGetMatchesRequest=0x0340
|
||||
OP_LFGGetMatchesResponse=0x5048
|
||||
OP_LFPGetMatchesRequest=0x4d7d
|
||||
OP_LFPGetMatchesResponse=0x22c6
|
||||
OP_LFPCommand=0x49a9
|
||||
OP_LFGAppearance=0x0000
|
||||
OP_LFGResponse=0x0000
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x55ac
|
||||
OP_RaidUpdate=0x3973
|
||||
OP_RaidJoin=0x0000
|
||||
|
||||
# Button-push commands
|
||||
OP_Taunt=0x2703
|
||||
OP_CombatAbility=0x3eba
|
||||
OP_SenseTraps=0x02af
|
||||
OP_PickPocket=0x39e8
|
||||
OP_DisarmTraps=0x78bf
|
||||
OP_Disarm=0x5ec8
|
||||
OP_Sneak=0x5d55
|
||||
OP_Fishing=0x1e2a
|
||||
OP_InstillDoubt=0x640e
|
||||
OP_FeignDeath=0x52fa
|
||||
OP_Mend=0x0ecf
|
||||
OP_Bind_Wound=0x0386
|
||||
OP_LDoNOpen=0x3d5c
|
||||
|
||||
# Task packets
|
||||
OP_TaskDescription=0x3714
|
||||
OP_TaskActivity=0x08d3
|
||||
OP_CompletedTasks=0x4eba
|
||||
OP_TaskActivityComplete=0x5e19
|
||||
OP_AcceptNewTask=0x0a23
|
||||
OP_CancelTask=0x39f0
|
||||
OP_TaskMemberList=0x5727
|
||||
OP_OpenNewTasksWindow=0x48a2
|
||||
OP_AvaliableTask=0x36e8
|
||||
OP_TaskHistoryRequest=0x5f1c
|
||||
OP_TaskHistoryReply=0x3d05
|
||||
OP_DeclineAllTasks=0x0000
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x0d32
|
||||
OP_RequestTitles=0x6344
|
||||
OP_SendTitleList=0x2d08
|
||||
OP_SetTitle=0x6527
|
||||
OP_SetTitleReply=0x4c21
|
||||
|
||||
# mail opcodes
|
||||
OP_Command=0x0000
|
||||
OP_MailboxHeader=0x0000
|
||||
OP_MailHeader=0x0000
|
||||
OP_MailBody=0x0000
|
||||
OP_NewMail=0x0000
|
||||
OP_SentConfirm=0x0000
|
||||
|
||||
########### Below this point should not be needed ###########
|
||||
|
||||
# This section are all unknown in Titanium
|
||||
OP_ForceFindPerson=0x0000
|
||||
OP_LocInfo=0x0000
|
||||
OP_ReloadUI=0x0000
|
||||
OP_ItemName=0x0000
|
||||
OP_ItemLinkText=0x0000
|
||||
OP_MultiLineMsg=0x0000
|
||||
OP_MendHPUpdate=0x0000
|
||||
OP_TargetReject=0x0000
|
||||
OP_SafePoint=0x0000
|
||||
OP_ApproveZone=0x0000
|
||||
OP_ZoneComplete=0x0000
|
||||
OP_ClientError=0x0000
|
||||
OP_DumpName=0x0000
|
||||
OP_Heartbeat=0x0000
|
||||
OP_CrashDump=0x0000
|
||||
OP_LoginComplete=0x0000
|
||||
|
||||
# discovered opcodes not yet used:
|
||||
OP_PickLockSuccess=0x0000
|
||||
OP_PlayMP3=0x5770
|
||||
OP_ReclaimCrystals=0x0000
|
||||
OP_DynamicWall=0x0000
|
||||
OP_OpenDiscordMerchant=0x0000
|
||||
OP_DiscordMerchantInventory=0x0000
|
||||
OP_GiveMoney=0x0000
|
||||
OP_RequestKnowledgeBase=0x0000
|
||||
OP_KnowledgeBase=0x0000
|
||||
OP_SlashAdventure=0x0000 # /adventure
|
||||
OP_BecomePVPPrompt=0x0000
|
||||
OP_MoveLogRequest=0x0000 # gone I think
|
||||
OP_MoveLogDisregard=0x0000 # gone I think
|
||||
|
||||
# named unknowns, to make looking for real unknown easier
|
||||
OP_AnnoyingZoneUnknown=0x0000
|
||||
OP_Some6ByteHPUpdate=0x0000 #seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x46d3 # OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x040b # OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
OP_PetitionSearch=0x0000 #search term for petition
|
||||
OP_PetitionSearchResults=0x0000 #(list of?) matches from search
|
||||
OP_PetitionSearchText=0x0000 #text results of search
|
||||
|
||||
OP_PetitionUpdate=0x0000
|
||||
OP_PetitionCheckout=0x0000
|
||||
OP_PetitionCheckIn=0x0000
|
||||
OP_PetitionQue=0x0000
|
||||
OP_PetitionUnCheckout=0x0000
|
||||
OP_PetitionDelete=0x0000
|
||||
OP_DeletePetition=0x0000
|
||||
OP_PetitionResolve=0x0000
|
||||
OP_PDeletePetition=0x0000
|
||||
OP_PetitionBug=0x0000
|
||||
OP_PetitionRefresh=0x0000
|
||||
OP_PetitionCheckout2=0x0000
|
||||
OP_PetitionViewPetition=0x0000
|
||||
|
||||
# Login opcodes
|
||||
OP_SessionReady=0x0000
|
||||
OP_Login=0x0000
|
||||
OP_ServerListRequest=0x0000
|
||||
OP_PlayEverquestRequest=0x0000
|
||||
OP_PlayEverquestResponse=0x0000
|
||||
OP_ChatMessage=0x0000
|
||||
OP_LoginAccepted=0x0000
|
||||
OP_ServerListResponse=0x0000
|
||||
OP_Poll=0x0000
|
||||
OP_EnterChat=0x0000
|
||||
OP_PollResponse=0x0000
|
||||
|
||||
# raw opcodes
|
||||
OP_RAWSessionRequest=0x0000
|
||||
OP_RAWSessionResponse=0x0000
|
||||
OP_RAWCombined=0x0000
|
||||
OP_RAWSessionDisconnect=0x0000
|
||||
OP_RAWKeepAlive=0x0000
|
||||
OP_RAWSessionStatRequest=0x0000
|
||||
OP_RAWSessionStatResponse=0x0000
|
||||
OP_RAWPacket=0x0000
|
||||
OP_RAWFragment=0x0000
|
||||
OP_RAWOutOfOrderAck=0x0000
|
||||
OP_RAWAck=0x0000
|
||||
OP_RAWAppCombined=0x0000
|
||||
OP_RAWOutOfSession=0x0000
|
||||
|
||||
# we need to document the differences between these packets to make identifying them easier
|
||||
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
|
||||
OP_InitialHPUpdate=0x0000
|
||||
@@ -158,7 +158,7 @@ OP_GMApproval=0x72fa # C
|
||||
OP_GMToggle=0x7566 # C
|
||||
OP_GMSummon=0x596d # C
|
||||
OP_GMEmoteZone=0x3e7c # C
|
||||
OP_GMEmoteWorld=0x3e7c # C
|
||||
OP_GMEmoteWorld=0x5298 # C
|
||||
OP_GMFind=0x6e27 # C
|
||||
OP_GMKick=0x799c # C
|
||||
OP_GMKill=0x6685 # C
|
||||
@@ -288,8 +288,10 @@ OP_LeadershipExpToggle=0x34c5 # C
|
||||
OP_LeadershipExpUpdate=0x69d0 # C
|
||||
OP_PurchaseLeadershipAA=0x07b3 # C
|
||||
OP_UpdateLeadershipAA=0x6948 # C
|
||||
OP_MarkNPC=0x0d4b # C
|
||||
OP_MarkNPC=0x695c # C
|
||||
OP_MarkRaidNPC=0x0d4b # C
|
||||
OP_ClearNPCMarks=0x5033 # C
|
||||
OP_ClearRaidNPCMarks=0x5f55 # C
|
||||
OP_DoGroupLeadershipAbility=0x540b # C
|
||||
OP_GroupLeadershipAAUpdate=0x0c33
|
||||
OP_DelegateAbility=0x0322 # C
|
||||
@@ -367,7 +369,7 @@ OP_DzExpeditionEndsWarning=0x1879
|
||||
OP_DzExpeditionList=0x3657
|
||||
OP_DzMemberList=0x74e4
|
||||
OP_DzCompass=0x35d3
|
||||
OP_DzChooseZone=0xd8a
|
||||
OP_DzChooseZone=0x0d8a
|
||||
#0x1d99 was grouped with these too but I don't really know it's purpose.
|
||||
|
||||
# New Opcodes
|
||||
@@ -484,6 +486,8 @@ OP_GroupDisbandOther=0x162d
|
||||
OP_GroupLeaderChange=0x7545
|
||||
OP_GroupRoles=0x6b67
|
||||
OP_GroupMakeLeader=0x6087
|
||||
OP_GroupMentor=0x1224
|
||||
OP_InspectBuffs=0x66bf
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x3288 # C
|
||||
OP_LFGGetMatchesRequest=0x5613 # C
|
||||
@@ -527,7 +531,8 @@ OP_Shroud=0x6d1f
|
||||
OP_ShroudRemove=0x17f6
|
||||
OP_ShroudUnknown1=0x169a
|
||||
OP_ShroudUnknown2=0x4292
|
||||
OP_ShroudClearAA=0x3bef
|
||||
OP_ClearAA=0x3bef
|
||||
OP_ClearLeadershipAbilities=0x6e58
|
||||
OP_ShroudSelectionWindow=0x4d79
|
||||
OP_ShroudRequestStats=0x28ce
|
||||
OP_ShroudRespondStats=0x33f2
|
||||
@@ -576,7 +581,6 @@ OP_MultiLineMsg=0x0000 #
|
||||
OP_MendHPUpdate=0x0000 #
|
||||
OP_TargetReject=0x0000 #
|
||||
OP_SafePoint=0x0000 #
|
||||
OP_IncreaseStats=0x0000 #
|
||||
OP_ApproveZone=0x0000 #
|
||||
OP_ZoneComplete=0x0000 #
|
||||
OP_ClientError=0x0000 #
|
||||
|
||||
@@ -85,6 +85,8 @@ OP_TaskActivity=0x2E60 #SEQ 12/04/08
|
||||
OP_CompletedTasks=0x75AC #Derision 2009
|
||||
OP_Weather=0x70A5 #SEQ 12/04/08
|
||||
OP_SendAATable=0x6F05 #Trevius 12/20/08
|
||||
OP_ClearAA=0x71b9
|
||||
OP_ClearLeadershipAbilities=0x74e5
|
||||
OP_UpdateAA=0x45D2 #Trevius 12/20/08
|
||||
OP_RespondAA=0x4426 #Trevius 12/20/08
|
||||
OP_ReqClientSpawn=0x014C #SEQ 12/04/08
|
||||
@@ -281,8 +283,10 @@ OP_LeadershipExpToggle=0x24D4 #Xinu 02/20/09
|
||||
OP_LeadershipExpUpdate=0x58b6 #Derision 2009
|
||||
OP_PurchaseLeadershipAA=0x1408 #Derision 2009
|
||||
OP_UpdateLeadershipAA=0x7abf #Derision 2009
|
||||
OP_MarkNPC=0x00c6 #Derision 2009
|
||||
OP_MarkNPC=0x4697 #Derision 2009
|
||||
OP_MarkRaidNPC=0x00c6
|
||||
OP_ClearNPCMarks=0x2ff2 #
|
||||
OP_ClearRaidNPCMarks=0x56a9 #
|
||||
OP_DoGroupLeadershipAbility=0x5a64 #Derision 2009
|
||||
OP_DelegateAbility=0x57e3 #Derision 2009
|
||||
OP_SetGroupTarget=0x1651 #Derision 2009
|
||||
@@ -329,6 +333,7 @@ OP_InspectMessageUpdate=0x67e9 # C
|
||||
OP_OpenInventory=0x66c8
|
||||
OP_OpenContainer=0x10e3
|
||||
OP_Marquee=0x2f75
|
||||
OP_Untargetable=0x3e36
|
||||
|
||||
#expedition
|
||||
OP_DzQuit=0x20d6
|
||||
@@ -450,6 +455,8 @@ OP_GroupDelete=0x0000 #
|
||||
OP_CancelInvite=0x596C #Trevius 03/02/09
|
||||
OP_GroupFollow2=0x59D4 #Xinu 02/20/09
|
||||
OP_GroupInvite2=0x07F6 #Xinu 02/20/09
|
||||
OP_GroupMentor=0x9EF3
|
||||
OP_InspectBuffs=0x3547
|
||||
|
||||
#LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x5D81 #Trevius 01/16/09
|
||||
@@ -526,7 +533,7 @@ OP_MultiLineMsg=0x0000 #
|
||||
OP_MendHPUpdate=0x0000 #
|
||||
OP_TargetReject=0x0000 #
|
||||
OP_SafePoint=0x0000 #
|
||||
OP_IncreaseStats=0x0000 #
|
||||
OP_IncreaseStats=0x5ecb #
|
||||
OP_ApproveZone=0x0000 #
|
||||
OP_ZoneComplete=0x0000 #
|
||||
OP_ClientError=0x0000 #
|
||||
@@ -540,9 +547,11 @@ OP_PickLockSuccess=0x0000 #
|
||||
OP_VetRewardsAvaliable=0x044b #
|
||||
OP_VetClaimRequest=0x7503
|
||||
OP_VetClaimReply=0x01e1
|
||||
OP_PlayMP3=0x0000 #
|
||||
OP_PlayMP3=0x0d1c #
|
||||
OP_ReclaimCrystals=0x0000 #
|
||||
OP_CrystalCountUpdate=0x64C1 #
|
||||
OP_CrystalCreate=0x65e2
|
||||
OP_CrystalReclaim=0x0730
|
||||
OP_DynamicWall=0x0000 #
|
||||
OP_OpenDiscordMerchant=0x0000 #
|
||||
OP_DiscordMerchantInventory=0x0000 #
|
||||
@@ -615,6 +624,8 @@ OP_RAWOutOfSession=0x0000 #
|
||||
OP_Some3ByteHPUpdate=0x0000 #initial HP update for mobs
|
||||
OP_InitialHPUpdate=0x0000 #
|
||||
|
||||
OP_ItemRecastDelay=0x0ada
|
||||
|
||||
|
||||
# Opcodes from the client that are currently Unknowns:
|
||||
# 0x3E85 - Sent when Guild Management window is opened
|
||||
|
||||
@@ -420,6 +420,8 @@ OP_RaidJoin=0x1f21 # ShowEQ 10/27/05
|
||||
OP_RaidInvite=0x5891 # ShowEQ 10/27/05
|
||||
OP_RaidUpdate=0x1f21 # EQEmu 06/29/05
|
||||
|
||||
OP_InspectBuffs=0x4FB6
|
||||
|
||||
|
||||
OP_ZoneComplete=0x0000
|
||||
OP_ItemLinkText=0x0000
|
||||
|
||||
@@ -88,6 +88,8 @@ OP_TaskActivity=0x31f3 # C
|
||||
OP_CompletedTasks=0x687f # C
|
||||
OP_Weather=0x4658 # V
|
||||
OP_SendAATable=0x6ef9 # V
|
||||
OP_ClearAA=0x2cd4
|
||||
OP_ClearLeadershipAbilities=0x7b77
|
||||
OP_UpdateAA=0x7bf6 # V
|
||||
OP_RespondAA=0x1fbd # C 0x2bad
|
||||
OP_ReqClientSpawn=0x69cd # V
|
||||
@@ -292,8 +294,10 @@ OP_LeadershipExpToggle=0x5033 # C
|
||||
OP_LeadershipExpUpdate=0x074f # C
|
||||
OP_PurchaseLeadershipAA=0x5f55 # C
|
||||
OP_UpdateLeadershipAA=0x77ed # C
|
||||
OP_MarkNPC=0x3ec7 # C
|
||||
OP_MarkNPC=0x66bf
|
||||
OP_MarkRaidNPC=0x3ec7 # C
|
||||
OP_ClearNPCMarks=0x5c29 # C
|
||||
OP_ClearRaidNPCMarks=0x2af4
|
||||
OP_DoGroupLeadershipAbility=0x0068 # C
|
||||
OP_GroupLeadershipAAUpdate=0x167b # C
|
||||
OP_DelegateAbility=0x6e58 # C
|
||||
@@ -313,7 +317,7 @@ OP_OnLevelMessage=0x24cb # C
|
||||
OP_AugmentInfo=0x31b1 # C
|
||||
OP_Petition=0x31d1 # C
|
||||
OP_SomeItemPacketMaybe=0x2c27 # C
|
||||
OP_PVPStats=0x0000 #
|
||||
OP_PVPStats=0x5272 #
|
||||
OP_PVPLeaderBoardRequest=0x4973 # C
|
||||
OP_PVPLeaderBoardReply=0x3842 # C
|
||||
OP_PVPLeaderBoardDetailsRequest=0x6c75 # C
|
||||
@@ -371,7 +375,17 @@ OP_DzExpeditionEndsWarning=0x6ac2
|
||||
OP_DzExpeditionList=0x70d8
|
||||
OP_DzMemberList=0x15c4
|
||||
OP_DzCompass=0x01cb
|
||||
OP_DzChooseZone=0x0000
|
||||
OP_DzChooseZone=0x65e1
|
||||
|
||||
#shroud
|
||||
OP_ShroudSelectionWindow=0x72ad
|
||||
OP_ShroudRequestStats=0x488b
|
||||
OP_ShroudRespondStats=0x1910
|
||||
OP_ShroudSelect=0x45d7
|
||||
OP_ShroudSelectCancel=0x666d
|
||||
OP_ShroudProgress=0x6016 # This clears current progress and sets
|
||||
OP_ShroudProgress2=0x66b4 # This just sets progress
|
||||
OP_Shroud=0x1643
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x4656 # C
|
||||
@@ -487,6 +501,8 @@ OP_GroupDisbandOther=0x49f6 # C
|
||||
OP_GroupLeaderChange=0x0c33 # C
|
||||
OP_GroupRoles=0x116d # C
|
||||
OP_GroupMakeLeader=0x5851
|
||||
OP_GroupMentor=0x292f
|
||||
OP_InspectBuffs=0x105b
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x2c38 # C
|
||||
@@ -656,3 +672,6 @@ OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
|
||||
OP_InitialHPUpdate=0x0000 #
|
||||
|
||||
OP_ItemRecastDelay=0x82d7
|
||||
|
||||
# unhandled
|
||||
OP_ShieldGroup=0x23a1
|
||||
@@ -0,0 +1,214 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
############################################################
|
||||
#::: Script: DB_Dumper.pl
|
||||
#::: Purpose: Utility to easily manage database backups and compress.
|
||||
#::: Export Individual DB Tables...
|
||||
#::: Export specific databases...
|
||||
#::: Built for both Windows and Linux
|
||||
#::: Windows uses WinRar or 7-Zip for compression
|
||||
#::: Linux uses tar for compression
|
||||
#::: Author: Akkadius
|
||||
############################################################
|
||||
|
||||
$localdrive = "C:"; #::: Where Windows and all Install Programs are...
|
||||
$linesep = "---------------------------------------";
|
||||
|
||||
use POSIX qw(strftime);
|
||||
my $date = strftime "%m-%d-%Y", localtime;
|
||||
print "\nTodays Date: " . $date . "\n";
|
||||
|
||||
use Config;
|
||||
print "Operating System is: $Config{osname}\n";
|
||||
if($Config{osname}=~/linux/i){ $OS = "Linux"; }
|
||||
if($Config{osname}=~/Win|MS/i){ $OS = "Windows"; }
|
||||
|
||||
if(!$ARGV[0]){
|
||||
print "\nERROR! Need arguments\n\n";
|
||||
print "#::: Help :::#\n";
|
||||
print "######################################################\n\n";
|
||||
print "Arguments\n";
|
||||
print " loc=\"C:\\File Location\" - File path location to backup...\n";
|
||||
print " database=\"dbname\" - Manually specify databasename, default is database in eqemu_config.xml\n";
|
||||
print " tables=\"table1,table2,table3\" - Manually specify tables, default is to dump all tables from database\n";
|
||||
print " compress - Compress Database with 7-ZIP, will fallback to WinRAR depending on what is installed (Must be installed to default program dir)...\n";
|
||||
print ' Example: perl DB_Dumper.pl Loc="E:\Backups"' . "\n\n";
|
||||
print "######################################################\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
#::: CONFIG VARIABLES - Parsed from eqemu_config.xml
|
||||
|
||||
my $confile = "eqemu_config.xml"; #default
|
||||
open(F, "<$confile") or die "Unable to open config: $confile - This must be in your EQEmu Server Folder with your XML config\n";
|
||||
my $indb = 0;
|
||||
|
||||
while(<F>) {
|
||||
s/\r//g;
|
||||
if(/<database>/i) { $indb = 1; }
|
||||
next unless($indb == 1);
|
||||
if(/<\/database>/i) { $indb = 0; last; }
|
||||
if(/<host>(.*)<\/host>/i) { $host = $1; }
|
||||
elsif(/<username>(.*)<\/username>/i) { $user = $1; }
|
||||
elsif(/<password>(.*)<\/password>/i) { $pass = $1; }
|
||||
elsif(/<db>(.*)<\/db>/i) { $db = $1; }
|
||||
}
|
||||
|
||||
$Debug = 0;
|
||||
print "Arguments\n" if $Debug;
|
||||
$n = 0;
|
||||
while($ARGV[$n]){
|
||||
print $n . ': ' . $ARGV[$n] . "\n" if $Debug;
|
||||
if($ARGV[$n]=~/compress/i){
|
||||
print "Compression SET\n";
|
||||
$Compress = 1;
|
||||
}
|
||||
if($ARGV[$n]=~/database=/i){
|
||||
@DB_NAME = split('=', $ARGV[$n]);
|
||||
print "Database is " . $DB_NAME[1] . "\n";
|
||||
$db = $DB_NAME[1];
|
||||
}
|
||||
if($ARGV[$n]=~/loc=/i){
|
||||
@B_LOC = split('=', $ARGV[$n]);
|
||||
print "Backup Directory: " . $B_LOC[1] . "\n";
|
||||
}
|
||||
if($ARGV[$n]=~/tables=/i){
|
||||
@Tables = split('=', $ARGV[$n]); @TList = split(',', $Tables[1]);
|
||||
foreach my $tables (@TList){
|
||||
$t_tables .= $tables . " ";
|
||||
$t_tables_l .= $tables . "_";
|
||||
$t_tables_p .= $tables . "\n";
|
||||
}
|
||||
print "Backing up tables: \n\n############################\n" . $t_tables_p . "############################\n\n";
|
||||
}
|
||||
$n++;
|
||||
}
|
||||
|
||||
#::: Check for Backup Directory existence, if doesn't exist then create...
|
||||
if (-d $B_LOC[1]) {
|
||||
print "Directory currently exists... Adding files to it...\n\n";
|
||||
}
|
||||
elsif($B_LOC[1] ne ""){
|
||||
print "Directory does NOT exist! Creating...\n\n";
|
||||
mkdir($B_LOC[1]) or die 'Failed to create folder, maybe created the folder manually at "' . $B_LOC[1]. '" ?';
|
||||
}
|
||||
else{
|
||||
print "No save location specified... Saving to folder script is running in...\n";
|
||||
}
|
||||
if($B_LOC[1] ne ""){
|
||||
if($OS eq "Windows"){ $file_app = "\\"; }
|
||||
if($OS eq "Linux"){ $file_app = "/"; }
|
||||
}
|
||||
else {
|
||||
$file_app = "";
|
||||
}
|
||||
|
||||
if($t_tables ne ""){
|
||||
$tables_f_l = substr($t_tables_l, 0, 20) . '...';
|
||||
$target_file = '' . $tables_f_l . ' ' . $date . '';
|
||||
print "Performing table based backup...\n";
|
||||
#::: Backup Database...
|
||||
print "Backing up Database " . $db . "... \n\n";
|
||||
$cmd = 'mysqldump -u' . $user . ' --host ' . $host . ' --max_allowed_packet=512M --password="' . $pass . '" ' . $db . ' ' . $t_tables . ' > "' . $B_LOC[1] . '' . $file_app . '' . $target_file . '.sql"';
|
||||
printcmd($cmd);
|
||||
system($cmd);
|
||||
}
|
||||
else{ #::: Entire DB Backup
|
||||
$target_file = '' . $db . ' ' . $date . '';
|
||||
#::: Backup Database...
|
||||
print "Backing up Database " . $db . "... \n\n";
|
||||
$cmd = 'mysqldump -u' . $user . ' --host ' . $host . ' --max_allowed_packet=512M --password="' . $pass . '" ' . $db . ' > "' . $B_LOC[1] . '' . $file_app . '' . $target_file . '.sql"';
|
||||
printcmd($cmd);
|
||||
system($cmd);
|
||||
}
|
||||
|
||||
#::: Get File Size
|
||||
$fileloc = '' . $B_LOC[1] . '' . $file_app . '' . $target_file . '.sql';
|
||||
$filesize = -s $fileloc;
|
||||
if($filesize < 1000){ print "\n" . 'Error occurred... exiting...' . "\n\n"; exit; }
|
||||
print "Backup DONE... DB Backup File Size '" . $filesize . "' (" . get_filesize_str($fileloc) . ")\n\n";
|
||||
|
||||
#::: WinRar Get, check compression flag
|
||||
if($Compress == 1){
|
||||
if($OS eq "Windows"){
|
||||
if(-d $localdrive . "\\Program Files\\7-Zip"){
|
||||
print " ::: You have 7-Zip installed as 64 Bit...\n\n";
|
||||
$S_ZIP = $localdrive . "\\Program Files\\7-Zip";
|
||||
}
|
||||
elsif(-d $localdrive . "\\Program Files (x86)\\7-Zip"){
|
||||
print " ::: You have 7-Zip installed as 32 Bit...\n\n";
|
||||
$S_ZIP = $localdrive . "\\Program Files (x86)\\7-Zip";
|
||||
}
|
||||
elsif(-d $localdrive . "\\Program Files (x86)\\WinRAR"){
|
||||
print " ::: You have WinRAR installed as 32 Bit...\n\n";
|
||||
$WinRar = $localdrive . "\\Program Files (x86)\\WinRAR";
|
||||
}
|
||||
elsif(-d $localdrive . "\\Program Files\\WinRAR"){
|
||||
print " ::: You have WinRAR installed as 64 Bit...\n\n";
|
||||
$WinRar = $localdrive . "\\Program Files\\WinRAR";
|
||||
}
|
||||
else{
|
||||
print "No WinRAR installed... Will not compress...\n";
|
||||
}
|
||||
if($S_ZIP ne ""){
|
||||
print "Compressing Database with 7-ZIP... \n\n";
|
||||
$cmd = '"' . $S_ZIP . '\\7z" a -t7z -m0=lzma -mx=9 "' . $B_LOC[1] . '' . $file_app . '' . $target_file . '.7z" "' . $B_LOC[1] . '' . $file_app . '' . $target_file . '.sql" ';
|
||||
printcmd($cmd);
|
||||
system($cmd);
|
||||
print "\nDeleting RAW .sql Dump... \n\n";
|
||||
$cmd = 'del "' . $B_LOC[1] . '' . $file_app . '' . $target_file . '.sql" ';
|
||||
printcmd($cmd);
|
||||
system($cmd);
|
||||
$final_file = $target_file . ".7z";
|
||||
}
|
||||
elsif($WinRar ne ""){
|
||||
print "Compressing Database with WinRAR... \n";
|
||||
$cmd = '"' . $WinRar . '\\rar" a "' . $B_LOC[1] . '' . $file_app . '' . $target_file . '.rar" "' . $B_LOC[1] . '' . $file_app . '' . $target_file . '.sql" ';
|
||||
printcmd($cmd);
|
||||
system($cmd);
|
||||
print "\nDeleting RAW .sql Dump... \n\n";
|
||||
$cmd = 'del "' . $B_LOC[1] . '' . $file_app . '' . $target_file . '.sql" ';
|
||||
printcmd($cmd);
|
||||
system($cmd);
|
||||
$final_file = $target_file . ".rar";
|
||||
}
|
||||
}
|
||||
if($OS eq "Linux"){
|
||||
print "Compressing Database with Tarball... \n";
|
||||
$cmd = 'tar -zcvf "' . $B_LOC[1] . '' . $file_app . '' . $target_file . '.tar.gz" "' . $B_LOC[1] . '' . $file_app . '' . $target_file . '.sql" ';
|
||||
printcmd($cmd);
|
||||
system($cmd);
|
||||
print "\nDeleting RAW .sql Dump... \n\n";
|
||||
$cmd = 'rm "' . $B_LOC[1] . '' . $file_app . '' . $target_file . '.sql" ';
|
||||
printcmd($cmd);
|
||||
system($cmd);
|
||||
$final_file = $target_file . ".tar.gz";
|
||||
}
|
||||
}
|
||||
|
||||
#::: Get Final File Location for display
|
||||
if($B_LOC[1] ne ""){ $final_loc = $B_LOC[1] . '' . $file_app . ""; }
|
||||
else{
|
||||
if($OS eq "Windows"){
|
||||
$final_loc = `echo %cd%`;
|
||||
}
|
||||
elsif($OS eq "Linux"){
|
||||
$final_loc = `pwd`;
|
||||
}
|
||||
}
|
||||
|
||||
print "Final file located: " . $final_loc . "" . $final_file . "\n\n";
|
||||
|
||||
sub printcmd{
|
||||
print "--- CMD --- \n" . $_[0] . "\n" . $linesep . "\n\n";
|
||||
}
|
||||
|
||||
sub get_filesize_str{
|
||||
my $file = shift();
|
||||
my $size = (stat($file))[7] || die "stat($file): $!\n";
|
||||
if ($size > 1099511627776) { return sprintf("%.2f TiB", $size / 1099511627776); }
|
||||
elsif ($size > 1073741824) { return sprintf("%.2f GiB", $size / 1073741824); }
|
||||
elsif ($size > 1048576) { return sprintf("%.2f MiB", $size / 1048576); }
|
||||
elsif ($size > 1024) { return sprintf("%.2f KiB", $size / 1024); }
|
||||
else { return "$size byte" . ($size == 1 ? "" : "s"); }
|
||||
}
|
||||
@@ -0,0 +1,466 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
###########################################################
|
||||
#::: Automatic (Database) Upgrade Script
|
||||
#::: Author: Akkadius
|
||||
#::: Purpose: To upgrade databases with ease and maintain versioning
|
||||
###########################################################
|
||||
|
||||
$menu_displayed = 0;
|
||||
|
||||
use Config;
|
||||
$console_output .= " Operating System is: $Config{osname}\n";
|
||||
if($Config{osname}=~/linux/i){ $OS = "Linux"; }
|
||||
if($Config{osname}=~/Win|MS/i){ $OS = "Windows"; }
|
||||
|
||||
#::: If current version is less than what world is reporting, then download a new one...
|
||||
$current_version = 2;
|
||||
|
||||
if($ARGV[0] eq "V"){
|
||||
if($ARGV[1] > $current_version){
|
||||
print "eqemu_update.pl Automatic Database Upgrade Needs updating...\n";
|
||||
print " Current version: " . $current_version . "\n";
|
||||
print " New version: " . $ARGV[1] . "\n";
|
||||
GetRemoteFile("https://raw.githubusercontent.com/EQEmu/Server/master/utils/scripts/eqemu_update.pl", "eqemu_update.pl");
|
||||
exit;
|
||||
}
|
||||
else{
|
||||
print "[Upgrade Script] No script update necessary \n";
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
$perl_version = $^V;
|
||||
$perl_version =~s/v//g;
|
||||
print "Perl Version is " . $perl_version . "\n";
|
||||
if($perl_version > 5.12){ no warnings 'uninitialized'; }
|
||||
no warnings;
|
||||
|
||||
my $confile = "eqemu_config.xml"; #default
|
||||
open(F, "<$confile") or die "Unable to open config: $confile\n";
|
||||
my $indb = 0;
|
||||
while(<F>) {
|
||||
s/\r//g;
|
||||
if(/<database>/i) { $indb = 1; }
|
||||
next unless($indb == 1);
|
||||
if(/<\/database>/i) { $indb = 0; last; }
|
||||
if(/<host>(.*)<\/host>/i) { $host = $1; }
|
||||
elsif(/<username>(.*)<\/username>/i) { $user = $1; }
|
||||
elsif(/<password>(.*)<\/password>/i) { $pass = $1; }
|
||||
elsif(/<db>(.*)<\/db>/i) { $db = $1; }
|
||||
}
|
||||
|
||||
$console_output =
|
||||
"============================================================
|
||||
EQEmu: Automatic Upgrade Check
|
||||
============================================================
|
||||
";
|
||||
|
||||
if($OS eq "Windows"){
|
||||
$has_mysql_path = `echo %PATH%`;
|
||||
if($has_mysql_path=~/MySQL|MariaDB/i){
|
||||
@mysql = split(';', $has_mysql_path);
|
||||
foreach my $v (@mysql){
|
||||
if($v=~/MySQL|MariaDB/i){
|
||||
$v =~s/\n//g;
|
||||
$path = trim($v) . "/mysql";
|
||||
last;
|
||||
}
|
||||
}
|
||||
$console_output .= " (Windows) MySQL is in system path \n";
|
||||
$console_output .= " Path = " . $path . "\n";
|
||||
$console_output .= "============================================================\n";
|
||||
}
|
||||
}
|
||||
|
||||
#::: Linux Check
|
||||
if($OS eq "Linux"){
|
||||
$path = `which mysql`;
|
||||
if ($path eq "") {
|
||||
$path = `which mariadb`;
|
||||
}
|
||||
$path =~s/\n//g;
|
||||
|
||||
$console_output .= " (Linux) MySQL is in system path \n";
|
||||
$console_output .= " Path = " . $path . "\n";
|
||||
$console_output .= "============================================================\n";
|
||||
}
|
||||
|
||||
#::: Path not found, error and exit
|
||||
if($path eq ""){
|
||||
print "MySQL path not found, please add the path for automatic database upgrading to continue... \n\n";
|
||||
print "Exiting...\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
#::: Create db_update working directory if not created
|
||||
mkdir('db_update');
|
||||
|
||||
#::: Check if db_version table exists...
|
||||
if(trim(GetMySQLResult("SHOW COLUMNS FROM db_version LIKE 'Revision'")) ne ""){
|
||||
print GetMySQLResult("DROP TABLE db_version");
|
||||
print "Old db_version table present, dropping...\n\n";
|
||||
}
|
||||
|
||||
if(GetMySQLResult("SHOW TABLES LIKE 'db_version'") eq ""){
|
||||
print GetMySQLResult("
|
||||
CREATE TABLE db_version (
|
||||
version int(11) DEFAULT '0'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO db_version (version) VALUES ('1000');");
|
||||
print "Table 'db_version' does not exists.... Creating...\n\n";
|
||||
}
|
||||
|
||||
if($OS eq "Windows"){ @db_version = split(': ', `world db_version`); }
|
||||
if($OS eq "Linux"){ @db_version = split(': ', `./world db_version`); }
|
||||
|
||||
$bin_db_ver = trim($db_version[1]);
|
||||
$local_db_ver = trim(GetMySQLResult("SELECT version FROM db_version LIMIT 1"));
|
||||
|
||||
#::: If ran from Linux startup script, supress output
|
||||
if($bin_db_ver == $local_db_ver && $ARGV[0] eq "ran_from_start"){
|
||||
print "Database up to date...\n";
|
||||
exit;
|
||||
}
|
||||
else{
|
||||
print $console_output;
|
||||
}
|
||||
|
||||
|
||||
print " Binary Database Version: (" . $bin_db_ver . ")\n";
|
||||
print " Local Database Version: (" . $local_db_ver . ")\n\n";
|
||||
|
||||
#::: If World ran this script, and our version is up to date, continue...
|
||||
if($bin_db_ver <= $local_db_ver && $ARGV[0] eq "ran_from_world"){
|
||||
print " Database up to Date: Continuing World Bootup...\n";
|
||||
print "============================================================\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
print "Retrieving latest database manifest...\n";
|
||||
GetRemoteFile("https://raw.githubusercontent.com/EQEmu/Server/master/utils/sql/db_update_manifest.txt", "db_update/db_update_manifest.txt");
|
||||
# GetRemoteFile("https://dl.dropboxusercontent.com/u/50023467/dl/db_update_manifest.txt", "db_update/db_update_manifest.txt");
|
||||
|
||||
if($local_db_ver < $bin_db_ver && $ARGV[0] eq "ran_from_world"){
|
||||
print "You have missing database updates, type 1 or 2 to backup your database before running them as recommended...\n\n";
|
||||
#::: Display Menu
|
||||
ShowMenuPrompt();
|
||||
}
|
||||
else{
|
||||
#::: Most likely ran standalone
|
||||
print "\n";
|
||||
ShowMenuPrompt();
|
||||
}
|
||||
|
||||
|
||||
sub ShowMenuPrompt {
|
||||
my %dispatch = (
|
||||
1 => \&database_dump,
|
||||
2 => \&database_dump_compress,
|
||||
3 => \&Run_Database_Check,
|
||||
4 => \&AA_Fetch,
|
||||
5 => \&OpCodes_Fetch,
|
||||
0 => \&Exit,
|
||||
);
|
||||
|
||||
while (1) {
|
||||
{
|
||||
local $| = 1;
|
||||
if(!$menu_show && ($ARGV[0] eq "ran_from_world" || $ARGV[0] eq "ran_from_start")){
|
||||
$menu_show++;
|
||||
next;
|
||||
}
|
||||
print MenuOptions(), '> ';
|
||||
$menu_displayed++;
|
||||
if($menu_displayed > 50){
|
||||
print "Safety: Menu looping too many times, exiting...\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
my $choice = <>;
|
||||
|
||||
$choice =~ s/\A\s+//;
|
||||
$choice =~ s/\s+\z//;
|
||||
|
||||
if (defined(my $handler = $dispatch{$choice})) {
|
||||
my $result = $handler->();
|
||||
unless (defined $result) {
|
||||
exit 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if($ARGV[0] ne "ran_from_world"){
|
||||
# warn "\n\nInvalid selection\n\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub MenuOptions {
|
||||
if(@total_updates){
|
||||
$option[3] = "Run pending REQUIRED updates... (" . scalar (@total_updates) . ")";
|
||||
}
|
||||
else{
|
||||
$option[3] = "Check for pending REQUIRED Database updates
|
||||
Stages updates for automatic upgrade...";
|
||||
}
|
||||
|
||||
return <<EO_MENU;
|
||||
Database Management Menu (Please Select):
|
||||
1) Backup Database - (Saves to Backups folder)
|
||||
Ideal to perform before performing updates
|
||||
2) Backup Database Compressed - (Saves to Backups folder)
|
||||
Ideal to perform before performing updates
|
||||
3) $option[3]
|
||||
4) AAs - Get Latest AA's from PEQ (This deletes AA's already in the database)
|
||||
5) OPCodes - Download latest opcodes from repository
|
||||
0) Exit
|
||||
|
||||
EO_MENU
|
||||
}
|
||||
|
||||
sub CheckForDatabaseDumpScript{
|
||||
if(`perl db_dumper.pl`=~/Need arguments/i){
|
||||
return;
|
||||
}
|
||||
else{
|
||||
print "db_dumper.pl not found... retrieving...\n\n";
|
||||
GetRemoteFile("https://raw.githubusercontent.com/EQEmu/Server/master/utils/scripts/db_dumper.pl", "db_dumper.pl");
|
||||
}
|
||||
}
|
||||
|
||||
sub ran_from_world {
|
||||
print "Running from world...\n";
|
||||
}
|
||||
|
||||
sub database_dump {
|
||||
CheckForDatabaseDumpScript();
|
||||
print "Performing database backup....\n";
|
||||
print `perl db_dumper.pl database="$db" loc="backups"`;
|
||||
}
|
||||
sub database_dump_compress {
|
||||
CheckForDatabaseDumpScript();
|
||||
print "Performing database backup....\n";
|
||||
print `perl db_dumper.pl database="$db" loc="backups" compress`;
|
||||
}
|
||||
sub Exit{ }
|
||||
|
||||
#::: Returns Tab Delimited MySQL Result from Command Line
|
||||
sub GetMySQLResult{
|
||||
my $run_query = $_[0];
|
||||
if($OS eq "Windows"){ return `"$path" --host $host --user $user --password="$pass" $db -N -B -e "$run_query"`; }
|
||||
if($OS eq "Linux"){
|
||||
$run_query =~s/`//g;
|
||||
return `$path --user="$user" --host $host --password="$pass" $db -N -B -e "$run_query"`;
|
||||
}
|
||||
}
|
||||
|
||||
sub GetMySQLResultFromFile{
|
||||
my $update_file = $_[0];
|
||||
if($OS eq "Windows"){ return `"$path" --host $host --user $user --password="$pass" --force $db < $update_file`; }
|
||||
if($OS eq "Linux"){ return `"$path" --host $host --user $user --password="$pass" --force $db < $update_file`; }
|
||||
}
|
||||
|
||||
#::: Gets Remote File based on URL (1st Arg), and saves to destination file (2nd Arg)
|
||||
#::: Example: GetRemoteFile("https://raw.githubusercontent.com/EQEmu/Server/master/utils/sql/db_update_manifest.txt", "db_update/db_update_manifest.txt");
|
||||
sub GetRemoteFile{
|
||||
my $URL = $_[0];
|
||||
my $Dest_File = $_[1];
|
||||
|
||||
if($OS eq "Windows"){
|
||||
require LWP::UserAgent;
|
||||
my $ua = LWP::UserAgent->new;
|
||||
$ua->timeout(10);
|
||||
$ua->env_proxy;
|
||||
my $response = $ua->get($URL);
|
||||
|
||||
if ($response->is_success){
|
||||
open (FILE, '> ' . $Dest_File . '');
|
||||
print FILE $response->decoded_content;
|
||||
close (FILE);
|
||||
print " URL: " . $URL . "\n";
|
||||
print " Saved: " . $Dest_File . " \n";
|
||||
}
|
||||
else {
|
||||
print "Error, no connection to the internet...\n\n";
|
||||
die $response->status_line;
|
||||
}
|
||||
}
|
||||
if($OS eq "Linux"){
|
||||
#::: wget -O db_update/db_update_manifest.txt https://raw.githubusercontent.com/EQEmu/Server/master/utils/sql/db_update_manifest.txt
|
||||
$wget = `wget --no-check-certificate --quiet -O $Dest_File $URL`;
|
||||
print " URL: " . $URL . "\n";
|
||||
print " Saved: " . $Dest_File . " \n";
|
||||
if($wget=~/unable to resolve/i){
|
||||
print "Error, no connection to the internet...\n\n";
|
||||
die;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#::: Trim Whitespaces
|
||||
sub trim {
|
||||
my $string = $_[0];
|
||||
$string =~ s/^\s+//;
|
||||
$string =~ s/\s+$//;
|
||||
return $string;
|
||||
}
|
||||
|
||||
#::: Fetch Latest PEQ AA's
|
||||
sub AA_Fetch{
|
||||
print "Pulling down PEQ AA Tables...\n";
|
||||
GetRemoteFile("https://raw.githubusercontent.com/EQEmu/Server/master/utils/sql/peq_aa_tables.sql", "db_update/peq_aa_tables.sql");
|
||||
print "\n\nInstalling AA Tables...\n";
|
||||
print GetMySQLResultFromFile("db_update/peq_aa_tables.sql");
|
||||
print "\nDone...\n\n";
|
||||
}
|
||||
|
||||
#::: Fetch Latest Opcodes
|
||||
sub OpCodes_Fetch{
|
||||
print "Pulling down latest opcodes...\n";
|
||||
%opcodes = (
|
||||
1 => ["opcodes", "https://raw.githubusercontent.com/EQEmu/Server/master/utils/patches/opcodes.conf"],
|
||||
2 => ["mail_opcodes", "https://raw.githubusercontent.com/EQEmu/Server/master/utils/patches/mail_opcodes.conf"],
|
||||
3 => ["Titanium", "https://raw.githubusercontent.com/EQEmu/Server/master/utils/patches/patch_Titanium.conf"],
|
||||
4 => ["Secrets of Faydwer", "https://raw.githubusercontent.com/EQEmu/Server/master/utils/patches/patch_SoF.conf"],
|
||||
5 => ["Seeds of Destruction", "https://raw.githubusercontent.com/EQEmu/Server/master/utils/patches/patch_SoD.conf"],
|
||||
6 => ["Underfoot", "https://raw.githubusercontent.com/EQEmu/Server/master/utils/patches/patch_UF.conf"],
|
||||
7 => ["Rain of Fear", "https://raw.githubusercontent.com/EQEmu/Server/master/utils/patches/patch_RoF.conf"],
|
||||
8 => ["Rain of Fear 2", "https://raw.githubusercontent.com/EQEmu/Server/master/utils/patches/patch_RoF2.conf"],
|
||||
);
|
||||
$loop = 1;
|
||||
while($opcodes{$loop}[0]){
|
||||
#::: Split the URL by the patches folder to get the file name from URL
|
||||
@real_file = split("patches/", $opcodes{$loop}[1]);
|
||||
$find = 0;
|
||||
while($real_file[$find]){
|
||||
$file_name = $real_file[$find];
|
||||
$find++;
|
||||
}
|
||||
|
||||
print "\nDownloading (" . $opcodes{$loop}[0] . ") File: '" . $file_name . "'...\n\n";
|
||||
GetRemoteFile($opcodes{$loop}[1], $file_name);
|
||||
$loop++;
|
||||
}
|
||||
print "\nDone...\n\n";
|
||||
}
|
||||
|
||||
#::: Responsible for Database Upgrade Routines
|
||||
sub Run_Database_Check{
|
||||
#::: Run 2 - Running pending updates...
|
||||
if(defined(@total_updates)){
|
||||
@total_updates = sort @total_updates;
|
||||
foreach my $val (@total_updates){
|
||||
$file_name = trim($m_d{$val}[1]);
|
||||
print "Running Update: " . $val . " - " . $file_name . "\n";
|
||||
print GetMySQLResultFromFile("db_update/$file_name");
|
||||
print GetMySQLResult("UPDATE db_version SET version = $val WHERE version < $val");
|
||||
}
|
||||
}
|
||||
|
||||
#::: Run 1 - Initial checking of needed updates...
|
||||
print "Reading manifest...\n\n";
|
||||
use Data::Dumper;
|
||||
open (FILE, "db_update/db_update_manifest.txt");
|
||||
while (<FILE>) {
|
||||
chomp;
|
||||
$o = $_;
|
||||
if($o=~/#/i){ next; }
|
||||
@manifest = split('\|', $o);
|
||||
$m_d{$manifest[0]} = [@manifest];
|
||||
}
|
||||
|
||||
@total_updates = ();
|
||||
|
||||
#::: Iterate through Manifest backwards from binary version down to local version...
|
||||
for($i = $bin_db_ver; $i > 1000; $i--){
|
||||
if(!defined($m_d{$i}[0])){ next; }
|
||||
|
||||
$file_name = trim($m_d{$i}[1]);
|
||||
$query_check = trim($m_d{$i}[2]);
|
||||
$match_type = trim($m_d{$i}[3]);
|
||||
$match_text = trim($m_d{$i}[4]);
|
||||
|
||||
#::: Match type update
|
||||
if($match_type eq "contains"){
|
||||
if(trim(GetMySQLResult($query_check))=~/$match_text/i){
|
||||
print "Missing DB Update " . $i . " '" . $file_name . "' \n";
|
||||
FetchMissingUpdate($i, $file_name);
|
||||
push(@total_updates, $i);
|
||||
}
|
||||
else{
|
||||
print "DB up to date with: " . $i . " - '" . $file_name . "' \n";
|
||||
}
|
||||
print_match_debug();
|
||||
print_break();
|
||||
}
|
||||
if($match_type eq "missing"){
|
||||
if(GetMySQLResult($query_check)=~/$match_text/i){
|
||||
print "DB up to date with: " . $i . " - '" . $file_name . "' \n";
|
||||
next;
|
||||
}
|
||||
else{
|
||||
print "Missing DB Update " . $i . " '" . $file_name . "' \n";
|
||||
FetchMissingUpdate($i, $file_name);
|
||||
push(@total_updates, $i);
|
||||
}
|
||||
print_match_debug();
|
||||
print_break();
|
||||
}
|
||||
if($match_type eq "empty"){
|
||||
if(GetMySQLResult($query_check) eq ""){
|
||||
print "Missing DB Update " . $i . " '" . $file_name . "' \n";
|
||||
FetchMissingUpdate($i, $file_name);
|
||||
push(@total_updates, $i);
|
||||
}
|
||||
else{
|
||||
print "DB up to date with: " . $i . " - '" . $file_name . "' \n";
|
||||
}
|
||||
print_match_debug();
|
||||
print_break();
|
||||
}
|
||||
if($match_type eq "not_empty"){
|
||||
if(GetMySQLResult($query_check) ne ""){
|
||||
print "Missing DB Update " . $i . " '" . $file_name . "' \n";
|
||||
FetchMissingUpdate($i, $file_name);
|
||||
push(@total_updates, $i);
|
||||
}
|
||||
else{
|
||||
print "DB up to date with: " . $i . " - '" . $file_name . "' \n";
|
||||
}
|
||||
print_match_debug();
|
||||
print_break();
|
||||
}
|
||||
}
|
||||
print "\n";
|
||||
|
||||
if(scalar (@total_updates) == 0){
|
||||
print "No updates need to be run...\n";
|
||||
print "Setting Database to Binary Version (" . $bin_db_ver . ") if not already...\n\n";
|
||||
GetMySQLResult("UPDATE db_version SET version = $bin_db_ver");
|
||||
}
|
||||
}
|
||||
|
||||
sub FetchMissingUpdate{
|
||||
$db_update = $_[0];
|
||||
$update_file = $_[1];
|
||||
if($db_update >= 9000){
|
||||
GetRemoteFile("https://raw.githubusercontent.com/EQEmu/Server/master/utils/sql/git/required/" . $update_file, "db_update/" . $update_file . "");
|
||||
}
|
||||
elsif($db_update >= 5000 && $db_update <= 9000){
|
||||
GetRemoteFile("https://raw.githubusercontent.com/EQEmu/Server/master/utils/sql/svn/" . $update_file, "db_update/" . $update_file . "");
|
||||
}
|
||||
}
|
||||
|
||||
sub print_match_debug{
|
||||
if(!$debug){ return; }
|
||||
print " Match Type: '" . $match_type . "'\n";
|
||||
print " Match Text: '" . $match_text . "'\n";
|
||||
print " Query Check: '" . $query_check . "'\n";
|
||||
print " Result: '" . trim(GetMySQLResult($query_check)) . "'\n";
|
||||
}
|
||||
sub print_break{
|
||||
if(!$debug){ return; }
|
||||
print "\n==============================================\n";
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
# Input and Output txt and conf files
|
||||
*.txt
|
||||
*.conf
|
||||
@@ -0,0 +1,66 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# File Name: conf_to_oplist.pl
|
||||
# Converts a Patch File into the Opcode List with Opcode Names for the Spreadsheet.
|
||||
|
||||
# Directions to use this script:
|
||||
# 1. Paste the contents of the current patch file in the patch_OLD.conf file.
|
||||
# 2. Run this script using "perl conf_to_oplist.pl"
|
||||
# 3. This updates the opcodelist.txt with the values from the Patch File.
|
||||
|
||||
|
||||
$stopmessage = "Failed to open file";
|
||||
open OpcodeFile, "<", "opcodelist.txt" or die $stopmessage;
|
||||
open PatchFile, "<", "patch_OLD.conf" or die $stopmessage;
|
||||
|
||||
my @OpcodeList = <OpcodeFile>;
|
||||
my @PatchFile = <PatchFile>;
|
||||
my %PatchHash = ();
|
||||
|
||||
foreach $line (@PatchFile)
|
||||
{
|
||||
@equalssplit = split(/=/, $line);
|
||||
$ArraySize = @equalssplit;
|
||||
if ($ArraySize > 1)
|
||||
{
|
||||
@OpcodeArray = split(//, $equalssplit[1]);
|
||||
$CurOpcode = $OpcodeArray[0].$OpcodeArray[1].$OpcodeArray[2].$OpcodeArray[3].$OpcodeArray[4].$OpcodeArray[5];
|
||||
$CurOpcode = lc($CurOpcode);
|
||||
# Opcode Name => Opcode
|
||||
$PatchHash{ $CurOpcode } = $equalssplit[0];
|
||||
}
|
||||
}
|
||||
|
||||
close(OpcodeFile);
|
||||
close(PatchFile);
|
||||
|
||||
# Clear out file contents
|
||||
open OpcodeResultFile, ">", "opcodelist.txt" or die $stopmessage;
|
||||
print OpcodeResultFile "";
|
||||
close(OpcodeResultFile);
|
||||
|
||||
open OpcodeResultFile, ">>", "opcodelist.txt" or die $stopmessage;
|
||||
|
||||
while( my ($k, $v) = each %$PatchFile )
|
||||
{
|
||||
#print OpcodeResultFile "key: $k, value: $v.\n";
|
||||
}
|
||||
|
||||
|
||||
$TabSpace = " "; # Tab
|
||||
foreach $line (@OpcodeList)
|
||||
{
|
||||
@LineSplit = split(//, $line);
|
||||
$CurOpcode = $LineSplit[0].$LineSplit[1].$LineSplit[2].$LineSplit[3].$LineSplit[4].$LineSplit[5];
|
||||
$CurOpcode = lc($CurOpcode);
|
||||
$OpcodeName = ""; # Tab
|
||||
if ($PatchHash{$CurOpcode})
|
||||
{
|
||||
$NameKey = $PatchHash{$CurOpcode};
|
||||
$OpcodeName = $NameKey;
|
||||
}
|
||||
$CurLine = $CurOpcode.$TabSpace.$OpcodeName."\n";
|
||||
print OpcodeResultFile $CurLine;
|
||||
}
|
||||
|
||||
close(OpcodeResultFile);
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,89 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# File Name: oplist_to_conf.pl
|
||||
# Converts the Opcode List with Opcode Names from the Spreadsheet into a Patch File.
|
||||
|
||||
# Directions to use this script:
|
||||
# 1. Copy the opcodes and opcode names columns from the opcode spreadsheet
|
||||
# for the columns you want to create a new .conf file from into the file.
|
||||
# 2. Remove the header row entries in the text file.
|
||||
# 3. Find/Replace all Tabs " " with 2 spaces " " and save the file.
|
||||
# 4. Paste the contents of the current patch file in the patch_OLD.conf file.
|
||||
# 5. Run this script using "perl oplist_to_conf.pl"
|
||||
# 6. This creates a new .conf file named patch_NEW.conf
|
||||
# 7. Rename patch_NEW.conf to the desired name and you are all done
|
||||
|
||||
|
||||
$stopmessage = "Failed to open file";
|
||||
# Open the text file that contains the opcode and opcode name rows for a single client from the opcode list spreadsheet
|
||||
open OpcodeFile, "<", "opcodelist.txt" or die $stopmessage;
|
||||
# Open the .conf file to copy from
|
||||
open PatchFile, "<", "patch_OLD.conf" or die $stopmessage;
|
||||
|
||||
# Read these files into arrays for looping and close the files
|
||||
my @OpcodeList = <OpcodeFile>;
|
||||
my @PatchFile = <PatchFile>;
|
||||
close(OpcodeFile);
|
||||
close(PatchFile);
|
||||
|
||||
# Open the new/destination .conf file and clear out file contents
|
||||
open OpcodeResultFile, ">", "patch_NEW.conf" or die $stopmessage;
|
||||
print OpcodeResultFile "";
|
||||
# Close out the newly cleared .conf file
|
||||
close(OpcodeResultFile);
|
||||
|
||||
# Open the new/destination .conf file again for appending
|
||||
open OpcodeResultFile, ">>", "patch_NEW.conf" or die $stopmessage;
|
||||
|
||||
my %PatchHash = ();
|
||||
|
||||
foreach $line (@OpcodeList)
|
||||
{
|
||||
@equalssplit = split(/ /, $line);
|
||||
$ArraySize = @equalssplit;
|
||||
if ($ArraySize > 1)
|
||||
{
|
||||
my $CurOpcode = "";
|
||||
my $CurOpcodeName = "";
|
||||
@OpcodeArray = split(//, $equalssplit[0]);
|
||||
if ($equalssplit[1] =~ /^OP_(.*)/i)
|
||||
{
|
||||
$CurOpcodeName = "OP_".$1;
|
||||
}
|
||||
foreach $Letter (@OpcodeArray)
|
||||
{
|
||||
if ($Letter =~ /[A-Za-z0-9]/)
|
||||
{
|
||||
$CurOpcode .= $Letter;
|
||||
}
|
||||
}
|
||||
if ($CurOpcode && $CurOpcodeName)
|
||||
{
|
||||
$CurOpcode = lc($CurOpcode);
|
||||
$PatchHash{ $CurOpcodeName } = $CurOpcode;
|
||||
#print $CurOpcodeName."=". $CurOpcode."\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$TabSpace = " "; # Tab
|
||||
foreach $line (@PatchFile)
|
||||
{
|
||||
$CurLine = $line;
|
||||
if ($line =~ /^OP_([^\=]+)=([^\s]+)(.*)/i)
|
||||
{
|
||||
$NewOpcode = "0x0000";
|
||||
$OpcodeName = "OP_".$1;
|
||||
|
||||
if ($PatchHash{$OpcodeName})
|
||||
{
|
||||
$NewOpcode = $PatchHash{$OpcodeName};
|
||||
}
|
||||
|
||||
$CurLine = $OpcodeName."=".$NewOpcode.$3."\n";
|
||||
}
|
||||
print OpcodeResultFile $CurLine;
|
||||
}
|
||||
|
||||
|
||||
close(OpcodeResultFile);
|
||||
@@ -0,0 +1,660 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x[0-9a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x7a09
|
||||
OP_ApproveWorld=0x7499
|
||||
OP_LogServer=0x7ceb
|
||||
OP_SendCharInfo=0x00d2
|
||||
OP_ExpansionInfo=0x590d
|
||||
OP_GuildsList=0x0000
|
||||
OP_EnterWorld=0x578f
|
||||
OP_PostEnterWorld=0x6259
|
||||
OP_World_Client_CRC1=0x12cc
|
||||
OP_World_Client_CRC2=0x0f13
|
||||
OP_SendSpellChecksum=0x0000
|
||||
OP_SendSkillCapsChecksum=0x0000
|
||||
|
||||
# Character Select Related:
|
||||
OP_SendMaxCharacters=0x5475
|
||||
OP_SendMembership=0x7acc
|
||||
OP_SendMembershipDetails=0x057b
|
||||
OP_CharacterCreateRequest=0x6773
|
||||
OP_CharacterCreate=0x6bbf
|
||||
OP_DeleteCharacter=0x1808
|
||||
OP_RandomNameGenerator=0x5954
|
||||
OP_ApproveName=0x56a2
|
||||
OP_MOTD=0x0c22
|
||||
OP_SetChatServer=0x1bc5
|
||||
OP_SetChatServer2=0x7eec
|
||||
OP_ZoneServerInfo=0x4c44
|
||||
OP_WorldComplete=0x4493
|
||||
OP_WorldUnknown001=0x2301
|
||||
OP_FloatListThing=0x46c6
|
||||
|
||||
# Reasons for Disconnect:
|
||||
OP_ZoneUnavail=0x4cb4
|
||||
OP_WorldClientReady=0x23c1
|
||||
OP_CharacterStillInZone=0x0000
|
||||
OP_WorldChecksumFailure=0x0000
|
||||
OP_WorldLoginFailed=0x0000
|
||||
OP_WorldLogout=0x0000
|
||||
OP_WorldLevelTooHigh=0x0000
|
||||
OP_CharInacessable=0x0000
|
||||
OP_UserCompInfo=0x0000
|
||||
OP_SendExeChecksum=0x0000
|
||||
OP_SendBaseDataChecksum=0x0000
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x471d
|
||||
OP_ZoneEntry=0x5089
|
||||
OP_ReqNewZone=0x7887
|
||||
OP_NewZone=0x1795
|
||||
OP_ZoneSpawns=0x5237
|
||||
OP_PlayerProfile=0x6506
|
||||
OP_TimeOfDay=0x5070
|
||||
OP_LevelUpdate=0x1eec
|
||||
OP_Stamina=0x2a79
|
||||
OP_RequestClientZoneChange=0x3fcf
|
||||
OP_ZoneChange=0x2d18
|
||||
OP_LockoutTimerInfo=0x0000
|
||||
OP_ZoneServerReady=0x0000
|
||||
OP_ZoneInUnknown=0x0000
|
||||
OP_LogoutReply=0x0000
|
||||
OP_PreLogoutReply=0x0000
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x0971
|
||||
OP_ChangeSize=0x4707
|
||||
OP_TributeUpdate=0x5961
|
||||
OP_TributeTimer=0x073d
|
||||
OP_SendTributes=0x729b
|
||||
OP_SendGuildTributes=0x1877
|
||||
OP_TributeInfo=0x4254
|
||||
OP_Weather=0x661e
|
||||
OP_ReqClientSpawn=0x35fa
|
||||
OP_SpawnDoor=0x7291
|
||||
OP_GroundSpawn=0x6fca
|
||||
OP_SendZonepoints=0x69a4
|
||||
OP_BlockedBuffs=0x3033
|
||||
OP_RemoveBlockedBuffs=0x0de7
|
||||
OP_ClearBlockedBuffs=0x34cb
|
||||
OP_WorldObjectsSent=0x5ae2
|
||||
OP_SendExpZonein=0x5f8e
|
||||
OP_SendAATable=0x66b5
|
||||
OP_RespondAA=0x7a27
|
||||
OP_UpdateAA=0x66f0
|
||||
OP_SendAAStats=0x43c8
|
||||
OP_AAExpUpdate=0x7d14
|
||||
OP_ExpUpdate=0x20ed
|
||||
OP_HPUpdate=0x2828
|
||||
OP_ManaChange=0x5467
|
||||
OP_TGB=0x0876
|
||||
OP_SpecialMesg=0x0083
|
||||
OP_GuildMemberList=0x12a6
|
||||
OP_GuildMOTD=0x3e13
|
||||
OP_CharInventory=0x5ca6
|
||||
OP_WearChange=0x7994
|
||||
OP_ClientUpdate=0x7dfc
|
||||
OP_ClientReady=0x345d
|
||||
OP_SetServerFilter=0x444d
|
||||
|
||||
# Guild Opcodes - Disabled until crashes are resolved in RoF
|
||||
OP_GetGuildMOTD=0x36e0
|
||||
OP_GetGuildMOTDReply=0x4f1f
|
||||
OP_GuildMemberUpdate=0x69b9
|
||||
OP_GuildInvite=0x7099
|
||||
OP_GuildRemove=0x1444
|
||||
OP_GuildPeace=0x67e3
|
||||
OP_SetGuildMOTD=0x0b0b
|
||||
OP_GuildList=0x6279
|
||||
OP_GuildWar=0x1ffb
|
||||
OP_GuildLeader=0x7e09
|
||||
OP_GuildDelete=0x3708
|
||||
OP_GuildInviteAccept=0x7053
|
||||
OP_GuildDemote=0x2d4e
|
||||
OP_GuildPromote=0x0000
|
||||
OP_GuildPublicNote=0x5053
|
||||
OP_GuildManageBanker=0x748f
|
||||
OP_GuildBank=0x5134
|
||||
OP_SetGuildRank=0x0b9c
|
||||
OP_GuildUpdateURLAndChannel=0x2958
|
||||
OP_GuildStatus=0x7326
|
||||
OP_GuildCreate=0x76d9
|
||||
OP_GuildMemberLevelUpdate=0x0000 # Unused?
|
||||
OP_ZoneGuildList=0x0000 # Unused?
|
||||
OP_GetGuildsList=0x0000 # Unused?
|
||||
OP_LFGuild=0x0000
|
||||
OP_GuildManageRemove=0x0000
|
||||
OP_GuildManageAdd=0x0000
|
||||
OP_GuildManageStatus=0x0000
|
||||
|
||||
# GM/Guide Opcodes
|
||||
OP_GMServers=0x08c1
|
||||
OP_GMBecomeNPC=0x3ae1
|
||||
OP_GMZoneRequest=0x62ac
|
||||
OP_GMZoneRequest2=0x7e1a
|
||||
OP_GMGoto=0x7d8e
|
||||
OP_GMSearchCorpse=0x357c
|
||||
OP_GMHideMe=0x79c5
|
||||
OP_GMDelCorpse=0x607e
|
||||
OP_GMApproval=0x6db5
|
||||
OP_GMToggle=0x2097
|
||||
OP_GMSummon=0x486f
|
||||
OP_GMEmoteZone=0x1cfd
|
||||
OP_GMEmoteWorld=0x458e
|
||||
OP_GMFind=0x4a8f
|
||||
OP_GMKick=0x26a7
|
||||
OP_GMKill=0x51d3
|
||||
OP_GMNameChange=0x035f
|
||||
OP_GMLastName=0x46ce
|
||||
|
||||
# Misc Opcodes
|
||||
OP_InspectRequest=0x57bc
|
||||
OP_InspectAnswer=0x71ac
|
||||
OP_InspectMessageUpdate=0x4d25
|
||||
OP_BeginCast=0x318f
|
||||
OP_ColoredText=0x43af
|
||||
OP_ConsentResponse=0x384a
|
||||
OP_MemorizeSpell=0x217c
|
||||
OP_SwapSpell=0x0efa
|
||||
OP_CastSpell=0x1287
|
||||
OP_Consider=0x742b
|
||||
OP_FormattedMessage=0x1024
|
||||
OP_SimpleMessage=0x213f
|
||||
OP_Buff=0x659c
|
||||
OP_Illusion=0x312a
|
||||
OP_MoneyOnCorpse=0x5f44
|
||||
OP_RandomReply=0x106b
|
||||
OP_DenyResponse=0x2382
|
||||
OP_SkillUpdate=0x04c
|
||||
OP_GMTrainSkillConfirm=0x4b64
|
||||
OP_RandomReq=0x7b10
|
||||
OP_Death=0x6517
|
||||
OP_GMTraining=0x1966
|
||||
OP_GMEndTraining=0x4d6b
|
||||
OP_GMTrainSkill=0x2a85
|
||||
OP_Animation=0x7177
|
||||
OP_Begging=0x6703
|
||||
OP_Consent=0x1fd1
|
||||
OP_ConsentDeny=0x7a45
|
||||
OP_AutoFire=0x241e
|
||||
OP_PetCommands=0x0159
|
||||
OP_DeleteSpell=0x52e5
|
||||
OP_Surname=0x0423
|
||||
OP_ClearSurname=0x3fb0
|
||||
OP_FaceChange=0x5578
|
||||
OP_SenseHeading=0x260a
|
||||
OP_Action=0x744c
|
||||
OP_ConsiderCorpse=0x5204
|
||||
OP_HideCorpse=0x49e1
|
||||
OP_CorpseDrag=0x0904
|
||||
OP_CorpseDrop=0x7037
|
||||
OP_Bug=0x73f4
|
||||
OP_Feedback=0x5602
|
||||
OP_Report=0x1414
|
||||
OP_Damage=0x6f15
|
||||
OP_ChannelMessage=0x2b2d
|
||||
OP_Assist=0x4478
|
||||
OP_AssistGroup=0x27f8
|
||||
OP_MoveCoin=0x0bcf
|
||||
OP_ZonePlayerToBind=0x0ecb
|
||||
OP_KeyRing=0x6857
|
||||
OP_WhoAllRequest=0x674b
|
||||
OP_WhoAllResponse=0x578c
|
||||
OP_FriendsWho=0x3956
|
||||
OP_ConfirmDelete=0x43a3
|
||||
OP_Logout=0x4ac6
|
||||
OP_Rewind=0x1745
|
||||
OP_TargetCommand=0x58e2
|
||||
OP_Hide=0x67fe
|
||||
OP_Jump=0x31f4
|
||||
OP_Camp=0x28ec
|
||||
OP_Emote=0x373b
|
||||
OP_SetRunMode=0x009f
|
||||
OP_BankerChange=0x791e
|
||||
OP_TargetMouse=0x075d
|
||||
OP_MobHealth=0x37b1
|
||||
OP_InitialMobHealth=0x0000 # Unused?
|
||||
OP_TargetHoTT=0x0272
|
||||
OP_XTargetResponse=0x672f
|
||||
OP_XTargetRequest=0x45be
|
||||
OP_XTargetAutoAddHaters=0x792c
|
||||
OP_TargetBuffs=0x4f4b
|
||||
OP_BuffCreate=0x3377
|
||||
OP_BuffRemoveRequest=0x64f2
|
||||
OP_DeleteSpawn=0x7280
|
||||
OP_AutoAttack=0x109d
|
||||
OP_AutoAttack2=0x3526
|
||||
OP_Consume=0x4b70
|
||||
OP_MoveItem=0x32ee
|
||||
OP_DeleteItem=0x18ad
|
||||
OP_DeleteCharge=0x01b8
|
||||
OP_ItemPacket=0x368e
|
||||
OP_ItemLinkResponse=0x70c0
|
||||
OP_ItemLinkClick=0x4cef
|
||||
OP_ItemPreview=0x6b5c
|
||||
OP_NewSpawn=0x6097
|
||||
OP_Track=0x17e5
|
||||
OP_TrackTarget=0x0029
|
||||
OP_TrackUnknown=0x4577
|
||||
OP_ClickDoor=0x3a8f
|
||||
OP_MoveDoor=0x08e8
|
||||
OP_RemoveAllDoors=0x700c
|
||||
OP_EnvDamage=0x51fd
|
||||
OP_BoardBoat=0x4211
|
||||
OP_Forage=0x5306
|
||||
OP_LeaveBoat=0x7617
|
||||
OP_ControlBoat=0x0ae7
|
||||
OP_SafeFallSuccess=0x2219
|
||||
OP_RezzComplete=0x760d
|
||||
OP_RezzRequest=0x3c21
|
||||
OP_RezzAnswer=0x701c
|
||||
OP_Shielding=0x48c1
|
||||
OP_RequestDuel=0x3af1
|
||||
OP_MobRename=0x2c57
|
||||
OP_AugmentItem=0x661b
|
||||
OP_WeaponEquip1=0x34a7
|
||||
OP_WeaponEquip2=0x559a
|
||||
OP_WeaponUnequip2=0x2d25
|
||||
OP_ApplyPoison=0x31e6
|
||||
OP_Save=0x4a39
|
||||
OP_TestBuff=0x7cb8
|
||||
OP_CustomTitles=0x100e
|
||||
OP_Split=0x3a54
|
||||
OP_YellForHelp=0x4e56
|
||||
OP_LoadSpellSet=0x261d
|
||||
OP_Bandolier=0x7677
|
||||
OP_PotionBelt=0x1a3e
|
||||
OP_DuelResponse=0x6a46
|
||||
OP_DuelResponse2=0x68d3
|
||||
OP_SaveOnZoneReq=0x600d
|
||||
OP_ReadBook=0x72df
|
||||
OP_Dye=0x23b9
|
||||
OP_InterruptCast=0x048c
|
||||
OP_AAAction=0x424e
|
||||
OP_LeadershipExpToggle=0x6c55
|
||||
OP_LeadershipExpUpdate=0x2797
|
||||
OP_PurchaseLeadershipAA=0x0026
|
||||
OP_UpdateLeadershipAA=0x026
|
||||
OP_MarkNPC=0x5a58
|
||||
OP_MarkRaidNPC=0x74bd #unimplemented
|
||||
OP_ClearNPCMarks=0x2003
|
||||
OP_ClearRaidNPCMarks=0x20d3 #unimplemented
|
||||
OP_DelegateAbility=0x76b8
|
||||
OP_SetGroupTarget=0x2814
|
||||
OP_Charm=0x5d92
|
||||
OP_Stun=0x36a4
|
||||
OP_SendFindableNPCs=0x4613
|
||||
OP_FindPersonRequest=0x5cea
|
||||
OP_FindPersonReply=0x7e58
|
||||
OP_Sound=0x1a30
|
||||
OP_PetBuffWindow=0x5882
|
||||
OP_LevelAppearance=0x3bc9
|
||||
OP_Translocate=0x6580
|
||||
OP_Sacrifice=0x1821
|
||||
OP_PopupResponse=0x08a6
|
||||
OP_OnLevelMessage=0x4d6e
|
||||
OP_AugmentInfo=0x0afb
|
||||
OP_Petition=0x1901
|
||||
OP_SomeItemPacketMaybe=0x747c
|
||||
OP_PVPStats=0x4b15
|
||||
OP_PVPLeaderBoardRequest=0x04aa
|
||||
OP_PVPLeaderBoardReply=0x071f
|
||||
OP_PVPLeaderBoardDetailsRequest=0x3707
|
||||
OP_PVPLeaderBoardDetailsReply=0x25b7
|
||||
OP_RestState=0x000f
|
||||
OP_RespawnWindow=0x28bc
|
||||
OP_LDoNButton=0x5327
|
||||
OP_SetStartCity=0x6326
|
||||
OP_VoiceMacroIn=0x17fd
|
||||
OP_VoiceMacroOut=0x409a
|
||||
OP_ItemViewUnknown=0x465b
|
||||
OP_VetRewardsAvaliable=0x590e
|
||||
OP_VetClaimRequest=0x1126
|
||||
OP_VetClaimReply=0x16d4
|
||||
OP_DisciplineUpdate=0x759e
|
||||
OP_DisciplineTimer=0x6989
|
||||
OP_BecomeCorpse=0x0000 # Unused?
|
||||
OP_Action2=0x0000 # Unused?
|
||||
OP_MobUpdate=0x2c84
|
||||
OP_NPCMoveUpdate=0x5892
|
||||
OP_CameraEffect=0x127f
|
||||
OP_SpellEffect=0x5936
|
||||
OP_RemoveNimbusEffect=0x7b1e
|
||||
OP_AltCurrency=0x6b6d
|
||||
OP_AltCurrencyMerchantRequest=0x5409
|
||||
OP_AltCurrencyMerchantReply=0x27a2
|
||||
OP_AltCurrencyPurchase=0x3788
|
||||
OP_AltCurrencySell=0x40b6
|
||||
OP_AltCurrencySellSelection=0x532a
|
||||
OP_AltCurrencyReclaim=0x0339
|
||||
OP_CrystalCountUpdate=0x467f
|
||||
OP_CrystalCreate=0x7aee
|
||||
OP_CrystalReclaim=0x2439
|
||||
OP_Untargetable=0x053c
|
||||
OP_IncreaseStats=0x70a3
|
||||
OP_Weblink=0x6f4b
|
||||
OP_OpenContainer=0x0000
|
||||
OP_Marquee=0x502e
|
||||
OP_ItemRecastDelay=0x15a9
|
||||
#OP_OpenInventory=0x0000 # Likely does not exist in RoF -U
|
||||
|
||||
OP_DzQuit=0x205f
|
||||
OP_DzListTimers=0x0398
|
||||
OP_DzAddPlayer=0x59ca
|
||||
OP_DzRemovePlayer=0x4701
|
||||
OP_DzSwapPlayer=0x1abc
|
||||
OP_DzMakeLeader=0x405b
|
||||
OP_DzPlayerList=0x543d
|
||||
OP_DzJoinExpeditionConfirm=0x14c6
|
||||
OP_DzJoinExpeditionReply=0x7f4b
|
||||
OP_DzExpeditionInfo=0x4f7e
|
||||
OP_DzExpeditionList=0x9119
|
||||
OP_DzMemberStatus=0xb2e3
|
||||
OP_DzLeaderStatus=0x32f0
|
||||
OP_DzExpeditionEndsWarning=0x7e94
|
||||
OP_DzMemberList=0x3de9
|
||||
OP_DzCompass=0x3e0e
|
||||
OP_DzChooseZone=0x0b7d
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 # Actually OP_MobUpdate ?
|
||||
OP_ManaUpdate=0x3791
|
||||
OP_EnduranceUpdate=0x5f42
|
||||
OP_MobManaUpdate=0x2404
|
||||
OP_MobEnduranceUpdate=0x1c81
|
||||
|
||||
# Mercenary Opcodes
|
||||
OP_MercenaryDataUpdateRequest=0x7b89
|
||||
OP_MercenaryDataUpdate=0x61a4
|
||||
OP_MercenaryDataRequest=0x11c1
|
||||
OP_MercenaryDataResponse=0x72ce
|
||||
OP_MercenaryHire=0x7169
|
||||
OP_MercenaryDismiss=0x6e83
|
||||
OP_MercenaryTimerRequest=0x31e4
|
||||
OP_MercenaryTimer=0x0763
|
||||
OP_MercenaryUnknown1=0x5d26
|
||||
OP_MercenaryCommand=0x27f2
|
||||
OP_MercenarySuspendRequest=0x4407
|
||||
OP_MercenarySuspendResponse=0x6f03
|
||||
OP_MercenaryUnsuspendResponse=0x27a0
|
||||
|
||||
# Looting
|
||||
OP_LootRequest=0x0adf
|
||||
OP_EndLootRequest=0x30f7
|
||||
OP_LootItem=0x4dc9
|
||||
OP_LootComplete=0x55c4
|
||||
|
||||
# bazaar trader stuff:
|
||||
OP_BazaarSearch=0x39d6
|
||||
OP_TraderDelItem=0x0000
|
||||
OP_BecomeTrader=0x61b3
|
||||
OP_TraderShop=0x31df
|
||||
OP_Trader=0x4ef5
|
||||
OP_TraderBuy=0x0000
|
||||
OP_Barter=0x243a
|
||||
OP_ShopItem=0x0000
|
||||
OP_BazaarInspect=0x0000
|
||||
OP_Bazaar=0x0000
|
||||
OP_TraderItemUpdate=0x0000
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x77b5
|
||||
OP_TradeAcceptClick=0x69e2
|
||||
OP_TradeRequestAck=0x14bf
|
||||
OP_TradeCoins=0x4206
|
||||
OP_FinishTrade=0x3993
|
||||
OP_CancelTrade=0x354c
|
||||
OP_TradeMoneyUpdate=0x68c2
|
||||
OP_MoneyUpdate=0x640c
|
||||
OP_TradeBusy=0x5505
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x7349
|
||||
OP_FinishWindow2=0x40ef
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x189c
|
||||
OP_ItemVerifyReply=0x097b
|
||||
|
||||
# merchant stuff
|
||||
OP_ShopPlayerSell=0x0000
|
||||
OP_ShopRequest=0x4fed
|
||||
OP_ShopEnd=0x30a8
|
||||
OP_ShopEndConfirm=0x3196
|
||||
OP_ShopPlayerBuy=0x0ddd
|
||||
OP_ShopDelItem=0x724f
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x4aa1
|
||||
OP_ClickObjectAction=0x0c1e
|
||||
OP_ClearObject=0x7a11
|
||||
OP_RecipeDetails=0x40d7
|
||||
OP_RecipesFavorite=0x71b1
|
||||
OP_RecipesSearch=0x1db6
|
||||
OP_RecipeReply=0x6e02
|
||||
OP_RecipeAutoCombine=0x6261
|
||||
OP_TradeSkillCombine=0x579a
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x378d
|
||||
OP_OpenTributeMaster=0x7666
|
||||
OP_SelectTribute=0x79fc
|
||||
OP_TributeItem=0x4f3e
|
||||
OP_TributeMoney=0x58fb
|
||||
OP_TributeToggle=0x241d
|
||||
OP_TributePointUpdate=0x5300
|
||||
OP_TributeNPC=0x0000
|
||||
OP_GuildTributeInfo=0x0000
|
||||
OP_OpenTributeReply=0x0000
|
||||
OP_GuildTributeStatus=0x0000
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x5d18
|
||||
OP_AdventureFinish=0x400f
|
||||
OP_AdventureInfoRequest=0x3cb0
|
||||
OP_AdventureInfo=0x4c54
|
||||
OP_AdventureRequest=0x2c6c
|
||||
OP_AdventureDetails=0x5648
|
||||
OP_AdventureData=0x7171
|
||||
OP_AdventureUpdate=0x1b01
|
||||
OP_AdventureMerchantRequest=0x6922
|
||||
OP_AdventureMerchantResponse=0x3e47
|
||||
OP_AdventureMerchantPurchase=0x5b72
|
||||
OP_AdventureMerchantSell=0x2f9b
|
||||
OP_AdventurePointsUpdate=0x65c3
|
||||
OP_AdventureStatsRequest=0x5a62
|
||||
OP_AdventureStatsReply=0x2370
|
||||
OP_AdventureLeaderboardRequest=0x7093
|
||||
OP_AdventureLeaderboardReply=0x7f79
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x4c10
|
||||
OP_GroupInvite=0x6110
|
||||
OP_GroupFollow=0x1649
|
||||
OP_GroupUpdate=0x3abb
|
||||
OP_GroupUpdateB=0x6194
|
||||
OP_GroupCancelInvite=0x0000
|
||||
OP_GroupAcknowledge=0x7323
|
||||
OP_GroupDelete=0x0f6c
|
||||
OP_CancelInvite=0x2a50
|
||||
OP_GroupFollow2=0x2060
|
||||
OP_GroupInvite2=0x32c2
|
||||
OP_GroupDisbandYou=0x1ae5
|
||||
OP_GroupDisbandOther=0x74da
|
||||
OP_GroupLeaderChange=0x21b4
|
||||
OP_GroupRoles=0x70e2
|
||||
OP_GroupMakeLeader=0x4229
|
||||
OP_DoGroupLeadershipAbility=0x1fb5
|
||||
OP_GroupLeadershipAAUpdate=0x02cf
|
||||
OP_GroupMentor=0x3342
|
||||
OP_InspectBuffs=0x486c
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x6060
|
||||
OP_LFGGetMatchesRequest=0x0340
|
||||
OP_LFGGetMatchesResponse=0x5048
|
||||
OP_LFPGetMatchesRequest=0x4d7d
|
||||
OP_LFPGetMatchesResponse=0x22c6
|
||||
OP_LFPCommand=0x49a9
|
||||
OP_LFGAppearance=0x0000
|
||||
OP_LFGResponse=0x0000
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x55ac
|
||||
OP_RaidUpdate=0x3973
|
||||
OP_RaidJoin=0x0000
|
||||
|
||||
# Button-push commands
|
||||
OP_Taunt=0x2703
|
||||
OP_CombatAbility=0x3eba
|
||||
OP_SenseTraps=0x02af
|
||||
OP_PickPocket=0x39e8
|
||||
OP_DisarmTraps=0x78bf
|
||||
OP_Disarm=0x5ec8
|
||||
OP_Sneak=0x5d55
|
||||
OP_Fishing=0x1e2a
|
||||
OP_InstillDoubt=0x640e
|
||||
OP_FeignDeath=0x52fa
|
||||
OP_Mend=0x0ecf
|
||||
OP_Bind_Wound=0x0386
|
||||
OP_LDoNOpen=0x3d5c
|
||||
|
||||
# Task packets
|
||||
OP_TaskDescription=0x3714
|
||||
OP_TaskActivity=0x08d3
|
||||
OP_CompletedTasks=0x4eba
|
||||
OP_TaskActivityComplete=0x5e19
|
||||
OP_AcceptNewTask=0x0a23
|
||||
OP_CancelTask=0x39f0
|
||||
OP_TaskMemberList=0x5727
|
||||
OP_OpenNewTasksWindow=0x48a2
|
||||
OP_AvaliableTask=0x36e8
|
||||
OP_TaskHistoryRequest=0x5f1c
|
||||
OP_TaskHistoryReply=0x3d05
|
||||
OP_DeclineAllTasks=0x0000
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x0d32
|
||||
OP_RequestTitles=0x6344
|
||||
OP_SendTitleList=0x2d08
|
||||
OP_SetTitle=0x6527
|
||||
OP_SetTitleReply=0x4c21
|
||||
|
||||
# mail opcodes
|
||||
OP_Command=0x0000
|
||||
OP_MailboxHeader=0x0000
|
||||
OP_MailHeader=0x0000
|
||||
OP_MailBody=0x0000
|
||||
OP_NewMail=0x0000
|
||||
OP_SentConfirm=0x0000
|
||||
|
||||
########### Below this point should not be needed ###########
|
||||
|
||||
# This section are all unknown in Titanium
|
||||
OP_ForceFindPerson=0x0000
|
||||
OP_LocInfo=0x0000
|
||||
OP_ReloadUI=0x0000
|
||||
OP_ItemName=0x0000
|
||||
OP_ItemLinkText=0x0000
|
||||
OP_MultiLineMsg=0x0000
|
||||
OP_MendHPUpdate=0x0000
|
||||
OP_TargetReject=0x0000
|
||||
OP_SafePoint=0x0000
|
||||
OP_ApproveZone=0x0000
|
||||
OP_ZoneComplete=0x0000
|
||||
OP_ClientError=0x0000
|
||||
OP_DumpName=0x0000
|
||||
OP_Heartbeat=0x0000
|
||||
OP_CrashDump=0x0000
|
||||
OP_LoginComplete=0x0000
|
||||
|
||||
# discovered opcodes not yet used:
|
||||
OP_PickLockSuccess=0x0000
|
||||
OP_PlayMP3=0x5770
|
||||
OP_ReclaimCrystals=0x0000
|
||||
OP_DynamicWall=0x0000
|
||||
OP_OpenDiscordMerchant=0x0000
|
||||
OP_DiscordMerchantInventory=0x0000
|
||||
OP_GiveMoney=0x0000
|
||||
OP_RequestKnowledgeBase=0x0000
|
||||
OP_KnowledgeBase=0x0000
|
||||
OP_SlashAdventure=0x0000 # /adventure
|
||||
OP_BecomePVPPrompt=0x0000
|
||||
OP_MoveLogRequest=0x0000 # gone I think
|
||||
OP_MoveLogDisregard=0x0000 # gone I think
|
||||
|
||||
# named unknowns, to make looking for real unknown easier
|
||||
OP_AnnoyingZoneUnknown=0x0000
|
||||
OP_Some6ByteHPUpdate=0x0000 seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x46d3 # OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x040b # OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
OP_PetitionSearch=0x0000 search term for petition
|
||||
OP_PetitionSearchResults=0x0000 (list of?) matches from search
|
||||
OP_PetitionSearchText=0x0000 text results of search
|
||||
|
||||
OP_PetitionUpdate=0x0000
|
||||
OP_PetitionCheckout=0x0000
|
||||
OP_PetitionCheckIn=0x0000
|
||||
OP_PetitionQue=0x0000
|
||||
OP_PetitionUnCheckout=0x0000
|
||||
OP_PetitionDelete=0x0000
|
||||
OP_DeletePetition=0x0000
|
||||
OP_PetitionResolve=0x0000
|
||||
OP_PDeletePetition=0x0000
|
||||
OP_PetitionBug=0x0000
|
||||
OP_PetitionRefresh=0x0000
|
||||
OP_PetitionCheckout2=0x0000
|
||||
OP_PetitionViewPetition=0x0000
|
||||
|
||||
# Login opcodes
|
||||
OP_SessionReady=0x0000
|
||||
OP_Login=0x0000
|
||||
OP_ServerListRequest=0x0000
|
||||
OP_PlayEverquestRequest=0x0000
|
||||
OP_PlayEverquestResponse=0x0000
|
||||
OP_ChatMessage=0x0000
|
||||
OP_LoginAccepted=0x0000
|
||||
OP_ServerListResponse=0x0000
|
||||
OP_Poll=0x0000
|
||||
OP_EnterChat=0x0000
|
||||
OP_PollResponse=0x0000
|
||||
|
||||
# raw opcodes
|
||||
OP_RAWSessionRequest=0x0000
|
||||
OP_RAWSessionResponse=0x0000
|
||||
OP_RAWCombined=0x0000
|
||||
OP_RAWSessionDisconnect=0x0000
|
||||
OP_RAWKeepAlive=0x0000
|
||||
OP_RAWSessionStatRequest=0x0000
|
||||
OP_RAWSessionStatResponse=0x0000
|
||||
OP_RAWPacket=0x0000
|
||||
OP_RAWFragment=0x0000
|
||||
OP_RAWOutOfOrderAck=0x0000
|
||||
OP_RAWAck=0x0000
|
||||
OP_RAWAppCombined=0x0000
|
||||
OP_RAWOutOfSession=0x0000
|
||||
|
||||
# we need to document the differences between these packets to make identifying them easier
|
||||
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
|
||||
OP_InitialHPUpdate=0x0000
|
||||
@@ -0,0 +1,660 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x[0-9a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x7a09
|
||||
OP_ApproveWorld=0x7499
|
||||
OP_LogServer=0x7ceb
|
||||
OP_SendCharInfo=0x00d2
|
||||
OP_ExpansionInfo=0x590d
|
||||
OP_GuildsList=0x0000
|
||||
OP_EnterWorld=0x578f
|
||||
OP_PostEnterWorld=0x6259
|
||||
OP_World_Client_CRC1=0x12cc
|
||||
OP_World_Client_CRC2=0x0f13
|
||||
OP_SendSpellChecksum=0x0000
|
||||
OP_SendSkillCapsChecksum=0x0000
|
||||
|
||||
# Character Select Related:
|
||||
OP_SendMaxCharacters=0x5475
|
||||
OP_SendMembership=0x7acc
|
||||
OP_SendMembershipDetails=0x057b
|
||||
OP_CharacterCreateRequest=0x6773
|
||||
OP_CharacterCreate=0x6bbf
|
||||
OP_DeleteCharacter=0x1808
|
||||
OP_RandomNameGenerator=0x5954
|
||||
OP_ApproveName=0x56a2
|
||||
OP_MOTD=0x0c22
|
||||
OP_SetChatServer=0x1bc5
|
||||
OP_SetChatServer2=0x7eec
|
||||
OP_ZoneServerInfo=0x4c44
|
||||
OP_WorldComplete=0x4493
|
||||
OP_WorldUnknown001=0x2301
|
||||
OP_FloatListThing=0x46c6
|
||||
|
||||
# Reasons for Disconnect:
|
||||
OP_ZoneUnavail=0x4cb4
|
||||
OP_WorldClientReady=0x23c1
|
||||
OP_CharacterStillInZone=0x0000
|
||||
OP_WorldChecksumFailure=0x0000
|
||||
OP_WorldLoginFailed=0x0000
|
||||
OP_WorldLogout=0x0000
|
||||
OP_WorldLevelTooHigh=0x0000
|
||||
OP_CharInacessable=0x0000
|
||||
OP_UserCompInfo=0x0000
|
||||
OP_SendExeChecksum=0x0000
|
||||
OP_SendBaseDataChecksum=0x0000
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x471d
|
||||
OP_ZoneEntry=0x5089
|
||||
OP_ReqNewZone=0x7887
|
||||
OP_NewZone=0x1795
|
||||
OP_ZoneSpawns=0x5237
|
||||
OP_PlayerProfile=0x6506
|
||||
OP_TimeOfDay=0x5070
|
||||
OP_LevelUpdate=0x1eec
|
||||
OP_Stamina=0x2a79
|
||||
OP_RequestClientZoneChange=0x3fcf
|
||||
OP_ZoneChange=0x2d18
|
||||
OP_LockoutTimerInfo=0x0000
|
||||
OP_ZoneServerReady=0x0000
|
||||
OP_ZoneInUnknown=0x0000
|
||||
OP_LogoutReply=0x0000
|
||||
OP_PreLogoutReply=0x0000
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x0971
|
||||
OP_ChangeSize=0x4707
|
||||
OP_TributeUpdate=0x5961
|
||||
OP_TributeTimer=0x073d
|
||||
OP_SendTributes=0x729b
|
||||
OP_SendGuildTributes=0x1877
|
||||
OP_TributeInfo=0x4254
|
||||
OP_Weather=0x661e
|
||||
OP_ReqClientSpawn=0x35fa
|
||||
OP_SpawnDoor=0x7291
|
||||
OP_GroundSpawn=0x6fca
|
||||
OP_SendZonepoints=0x69a4
|
||||
OP_BlockedBuffs=0x3033
|
||||
OP_RemoveBlockedBuffs=0x0de7
|
||||
OP_ClearBlockedBuffs=0x34cb
|
||||
OP_WorldObjectsSent=0x5ae2
|
||||
OP_SendExpZonein=0x5f8e
|
||||
OP_SendAATable=0x66b5
|
||||
OP_RespondAA=0x7a27
|
||||
OP_UpdateAA=0x66f0
|
||||
OP_SendAAStats=0x43c8
|
||||
OP_AAExpUpdate=0x7d14
|
||||
OP_ExpUpdate=0x20ed
|
||||
OP_HPUpdate=0x2828
|
||||
OP_ManaChange=0x43af
|
||||
OP_TGB=0x0876
|
||||
OP_SpecialMesg=0x0083
|
||||
OP_GuildMemberList=0x12a6
|
||||
OP_GuildMOTD=0x3e13
|
||||
OP_CharInventory=0x5ca6
|
||||
OP_WearChange=0x7994
|
||||
OP_ClientUpdate=0x7dfc
|
||||
OP_ClientReady=0x345d
|
||||
OP_SetServerFilter=0x444d
|
||||
|
||||
# Guild Opcodes - Disabled until crashes are resolved in RoF
|
||||
OP_GetGuildMOTD=0x36e0
|
||||
OP_GetGuildMOTDReply=0x4f1f
|
||||
OP_GuildMemberUpdate=0x69b9
|
||||
OP_GuildInvite=0x7099
|
||||
OP_GuildRemove=0x1444
|
||||
OP_GuildPeace=0x67e3
|
||||
OP_SetGuildMOTD=0x0b0b
|
||||
OP_GuildList=0x507a
|
||||
OP_GuildWar=0x1ffb
|
||||
OP_GuildLeader=0x7e09
|
||||
OP_GuildDelete=0x3708
|
||||
OP_GuildInviteAccept=0x7053
|
||||
OP_GuildDemote=0x2d4e
|
||||
OP_GuildPromote=0x0000
|
||||
OP_GuildPublicNote=0x5053
|
||||
OP_GuildManageBanker=0x748f
|
||||
OP_GuildBank=0x5134
|
||||
OP_SetGuildRank=0x0b9c
|
||||
OP_GuildUpdateURLAndChannel=0x2958
|
||||
OP_GuildStatus=0x7326
|
||||
OP_GuildCreate=0x1dc8
|
||||
OP_GuildMemberLevelUpdate=0x0000 # Unused?
|
||||
OP_ZoneGuildList=0x0000 # Unused?
|
||||
OP_GetGuildsList=0x0000 # Unused?
|
||||
OP_LFGuild=0x0000
|
||||
OP_GuildManageRemove=0x0000
|
||||
OP_GuildManageAdd=0x0000
|
||||
OP_GuildManageStatus=0x0000
|
||||
|
||||
# GM/Guide Opcodes
|
||||
OP_GMServers=0x08c1
|
||||
OP_GMBecomeNPC=0x3ae1
|
||||
OP_GMZoneRequest=0x62ac
|
||||
OP_GMZoneRequest2=0x7e1a
|
||||
OP_GMGoto=0x7d8e
|
||||
OP_GMSearchCorpse=0x357c
|
||||
OP_GMHideMe=0x79c5
|
||||
OP_GMDelCorpse=0x607e
|
||||
OP_GMApproval=0x6db5
|
||||
OP_GMToggle=0x2097
|
||||
OP_GMSummon=0x486f
|
||||
OP_GMEmoteZone=0x1cfd
|
||||
OP_GMEmoteWorld=0x458e
|
||||
OP_GMFind=0x4a8f
|
||||
OP_GMKick=0x26a7
|
||||
OP_GMKill=0x51d3
|
||||
OP_GMNameChange=0x035f
|
||||
OP_GMLastName=0x46ce
|
||||
|
||||
# Misc Opcodes
|
||||
OP_InspectRequest=0x57bc
|
||||
OP_InspectAnswer=0x71ac
|
||||
OP_InspectMessageUpdate=0x4d25
|
||||
OP_BeginCast=0x318f
|
||||
OP_ColoredText=0x0000
|
||||
OP_ConsentResponse=0x384a
|
||||
OP_MemorizeSpell=0x217c
|
||||
OP_SwapSpell=0x0efa
|
||||
OP_CastSpell=0x1287
|
||||
OP_Consider=0x742b
|
||||
OP_FormattedMessage=0x1024
|
||||
OP_SimpleMessage=0x213f
|
||||
OP_Buff=0x659c
|
||||
OP_Illusion=0x312a
|
||||
OP_MoneyOnCorpse=0x5f44
|
||||
OP_RandomReply=0x106b
|
||||
OP_DenyResponse=0x2382
|
||||
OP_SkillUpdate=0x004c
|
||||
OP_GMTrainSkillConfirm=0x66dd
|
||||
OP_RandomReq=0x7b10
|
||||
OP_Death=0x6517
|
||||
OP_GMTraining=0x1966
|
||||
OP_GMEndTraining=0x4d6b
|
||||
OP_GMTrainSkill=0x2a85
|
||||
OP_Animation=0x7177
|
||||
OP_Begging=0x6703
|
||||
OP_Consent=0x1fd1
|
||||
OP_ConsentDeny=0x7a45
|
||||
OP_AutoFire=0x241e
|
||||
OP_PetCommands=0x0159
|
||||
OP_DeleteSpell=0x52e5
|
||||
OP_Surname=0x0423
|
||||
OP_ClearSurname=0x7d23
|
||||
OP_FaceChange=0x5578
|
||||
OP_SenseHeading=0x260a
|
||||
OP_Action=0x744c
|
||||
OP_ConsiderCorpse=0x5204
|
||||
OP_HideCorpse=0x49e1
|
||||
OP_CorpseDrag=0x0904
|
||||
OP_CorpseDrop=0x7037
|
||||
OP_Bug=0x73f4
|
||||
OP_Feedback=0x5602
|
||||
OP_Report=0x1414
|
||||
OP_Damage=0x6f15
|
||||
OP_ChannelMessage=0x2b2d
|
||||
OP_Assist=0x4478
|
||||
OP_AssistGroup=0x27f8
|
||||
OP_MoveCoin=0x0bcf
|
||||
OP_ZonePlayerToBind=0x0ecb
|
||||
OP_KeyRing=0x6857
|
||||
OP_WhoAllRequest=0x65ab
|
||||
OP_WhoAllResponse=0x7c88
|
||||
OP_FriendsWho=0x3956
|
||||
OP_ConfirmDelete=0x43a3
|
||||
OP_Logout=0x4ac6
|
||||
OP_Rewind=0x1745
|
||||
OP_TargetCommand=0x58e2
|
||||
OP_Hide=0x67fe
|
||||
OP_Jump=0x2060
|
||||
OP_Camp=0x28ec
|
||||
OP_Emote=0x373b
|
||||
OP_SetRunMode=0x009f
|
||||
OP_BankerChange=0x383c
|
||||
OP_TargetMouse=0x075d
|
||||
OP_MobHealth=0x37b1
|
||||
OP_InitialMobHealth=0x0000 # Unused?
|
||||
OP_TargetHoTT=0x0272
|
||||
OP_XTargetResponse=0x672f
|
||||
OP_XTargetRequest=0x45be
|
||||
OP_XTargetAutoAddHaters=0x792c
|
||||
OP_TargetBuffs=0x4f4b
|
||||
OP_BuffCreate=0x3377
|
||||
OP_BuffRemoveRequest=0x64f2
|
||||
OP_DeleteSpawn=0x7280
|
||||
OP_AutoAttack=0x109d
|
||||
OP_AutoAttack2=0x3526
|
||||
OP_Consume=0x4b70
|
||||
OP_MoveItem=0x32ee
|
||||
OP_DeleteItem=0x18ad
|
||||
OP_DeleteCharge=0x01b8
|
||||
OP_ItemPacket=0x368e
|
||||
OP_ItemLinkResponse=0x633c
|
||||
OP_ItemLinkClick=0x4cef
|
||||
OP_ItemPreview=0x6b5c
|
||||
OP_NewSpawn=0x6097
|
||||
OP_Track=0x17e5
|
||||
OP_TrackTarget=0x0029
|
||||
OP_TrackUnknown=0x4577
|
||||
OP_ClickDoor=0x3a8f
|
||||
OP_MoveDoor=0x08e8
|
||||
OP_RemoveAllDoors=0x700c
|
||||
OP_EnvDamage=0x51fd
|
||||
OP_BoardBoat=0x4211
|
||||
OP_Forage=0x5306
|
||||
OP_LeaveBoat=0x7617
|
||||
OP_ControlBoat=0x0ae7
|
||||
OP_SafeFallSuccess=0x2219
|
||||
OP_RezzComplete=0x760d
|
||||
OP_RezzRequest=0x3c21
|
||||
OP_RezzAnswer=0x701c
|
||||
OP_Shielding=0x48c1
|
||||
OP_RequestDuel=0x3af1
|
||||
OP_MobRename=0x2c57
|
||||
OP_AugmentItem=0x661b
|
||||
OP_WeaponEquip1=0x34a7
|
||||
OP_WeaponEquip2=0x559a
|
||||
OP_WeaponUnequip2=0x2d25
|
||||
OP_ApplyPoison=0x31e6
|
||||
OP_Save=0x4a39
|
||||
OP_TestBuff=0x7cb8
|
||||
OP_CustomTitles=0x100e
|
||||
OP_Split=0x3a54
|
||||
OP_YellForHelp=0x4e56
|
||||
OP_LoadSpellSet=0x261d
|
||||
OP_Bandolier=0x7677
|
||||
OP_PotionBelt=0x1a3e
|
||||
OP_DuelResponse=0x6a46
|
||||
OP_DuelResponse2=0x68d3
|
||||
OP_SaveOnZoneReq=0x600d
|
||||
OP_ReadBook=0x72df
|
||||
OP_Dye=0x23b9
|
||||
OP_InterruptCast=0x048c
|
||||
OP_AAAction=0x424e
|
||||
OP_LeadershipExpToggle=0x6c55
|
||||
OP_LeadershipExpUpdate=0x2797
|
||||
OP_PurchaseLeadershipAA=0x0026
|
||||
OP_UpdateLeadershipAA=0x026
|
||||
OP_MarkNPC=0x5a58
|
||||
OP_MarkRaidNPC=0x74bd #unimplemented
|
||||
OP_ClearNPCMarks=0x2003
|
||||
OP_ClearRaidNPCMarks=0x20d3 #unimplemented
|
||||
OP_DelegateAbility=0x76b8
|
||||
OP_SetGroupTarget=0x2814
|
||||
OP_Charm=0x5d92
|
||||
OP_Stun=0x36a4
|
||||
OP_SendFindableNPCs=0x3897
|
||||
OP_FindPersonRequest=0x5cea
|
||||
OP_FindPersonReply=0x7e58
|
||||
OP_Sound=0x1a30
|
||||
OP_PetBuffWindow=0x5882
|
||||
OP_LevelAppearance=0x3bc9
|
||||
OP_Translocate=0x6580
|
||||
OP_Sacrifice=0x1821
|
||||
OP_PopupResponse=0x214a
|
||||
OP_OnLevelMessage=0x4fd0
|
||||
OP_AugmentInfo=0x0afb
|
||||
OP_Petition=0x5f03
|
||||
OP_SomeItemPacketMaybe=0x747c
|
||||
OP_PVPStats=0x6f4b
|
||||
OP_PVPLeaderBoardRequest=0x3707
|
||||
OP_PVPLeaderBoardReply=0x25b7
|
||||
OP_PVPLeaderBoardDetailsRequest=0x15a9
|
||||
OP_PVPLeaderBoardDetailsReply=0x04aa
|
||||
OP_RestState=0x00f
|
||||
OP_RespawnWindow=0x28bc
|
||||
OP_LDoNButton=0x5327
|
||||
OP_SetStartCity=0x6326
|
||||
OP_VoiceMacroIn=0x17fd
|
||||
OP_VoiceMacroOut=0x409a
|
||||
OP_ItemViewUnknown=0x2289
|
||||
OP_VetRewardsAvaliable=0x590e
|
||||
OP_VetClaimRequest=0x1126
|
||||
OP_VetClaimReply=0x16d4
|
||||
OP_DisciplineUpdate=0x759e
|
||||
OP_DisciplineTimer=0x6989
|
||||
OP_BecomeCorpse=0x0000 # Unused?
|
||||
OP_Action2=0x0000 # Unused?
|
||||
OP_MobUpdate=0x2c84
|
||||
OP_NPCMoveUpdate=0x189c
|
||||
OP_CameraEffect=0x127f
|
||||
OP_SpellEffect=0x5936
|
||||
OP_RemoveNimbusEffect=0xc693
|
||||
OP_AltCurrency=0x7121
|
||||
OP_AltCurrencyMerchantRequest=0x6b6d
|
||||
OP_AltCurrencyMerchantReply=0x74ec
|
||||
OP_AltCurrencyPurchase=0x61cb
|
||||
OP_AltCurrencySell=0x0165
|
||||
OP_AltCurrencySellSelection=0x5409
|
||||
OP_AltCurrencyReclaim=0x532a
|
||||
OP_CrystalCountUpdate=0x467f
|
||||
OP_CrystalCreate=0x7aee
|
||||
OP_CrystalReclaim=0x2439
|
||||
OP_Untargetable=0x053c
|
||||
OP_IncreaseStats=0x70a3
|
||||
OP_Weblink=0x18d3
|
||||
OP_OpenContainer=0x0000
|
||||
OP_Marquee=0x0000
|
||||
OP_ItemRecastDelay=0x08a6
|
||||
#OP_OpenInventory=0x0000 # Likely does not exist in RoF -U
|
||||
|
||||
OP_DzQuit=0xb2e3
|
||||
OP_DzListTimers=0x7b68
|
||||
OP_DzAddPlayer=0x4701
|
||||
OP_DzRemovePlayer=0x1abc
|
||||
OP_DzSwapPlayer=0x405b
|
||||
OP_DzMakeLeader=0x543d
|
||||
OP_DzPlayerList=0x14c6
|
||||
OP_DzJoinExpeditionConfirm=0x7f4b
|
||||
OP_DzJoinExpeditionReply=0x1950
|
||||
OP_DzExpeditionInfo=0x9119
|
||||
OP_DzExpeditionList=0x205f
|
||||
OP_DzMemberStatus=0x32f0
|
||||
OP_DzLeaderStatus=0x3de9
|
||||
OP_DzExpeditionEndsWarning=0x5189
|
||||
OP_DzMemberList=0x5ae4
|
||||
OP_DzCompass=0x3e0e
|
||||
OP_DzChooseZone=0x0000
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 # Actually OP_MobUpdate ?
|
||||
OP_ManaUpdate=0x3791
|
||||
OP_EnduranceUpdate=0x5f42
|
||||
OP_MobManaUpdate=0x2404
|
||||
OP_MobEnduranceUpdate=0x1c81
|
||||
|
||||
# Mercenary Opcodes
|
||||
OP_MercenaryDataUpdateRequest=0x7b89
|
||||
OP_MercenaryDataUpdate=0x61a4
|
||||
OP_MercenaryDataRequest=0x11c1
|
||||
OP_MercenaryDataResponse=0x72ce
|
||||
OP_MercenaryHire=0x7169
|
||||
OP_MercenaryDismiss=0x6e83
|
||||
OP_MercenaryTimerRequest=0x31e4
|
||||
OP_MercenaryTimer=0x0763
|
||||
OP_MercenaryUnknown1=0x5d26
|
||||
OP_MercenaryCommand=0x27f2
|
||||
OP_MercenarySuspendRequest=0x4407
|
||||
OP_MercenarySuspendResponse=0x6f03
|
||||
OP_MercenaryUnsuspendResponse=0x27a0
|
||||
|
||||
# Looting
|
||||
OP_LootRequest=0x0adf
|
||||
OP_EndLootRequest=0x30f7
|
||||
OP_LootItem=0x4dc9
|
||||
OP_LootComplete=0x55c4
|
||||
|
||||
# bazaar trader stuff:
|
||||
OP_BazaarSearch=0x39d6
|
||||
OP_TraderDelItem=0x0000
|
||||
OP_BecomeTrader=0x61b3
|
||||
OP_TraderShop=0x31df
|
||||
OP_Trader=0x4ef5
|
||||
OP_TraderBuy=0x0000
|
||||
OP_Barter=0x243a
|
||||
OP_ShopItem=0x0000
|
||||
OP_BazaarInspect=0x0000
|
||||
OP_Bazaar=0x0000
|
||||
OP_TraderItemUpdate=0x0000
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x77b5
|
||||
OP_TradeAcceptClick=0x69e2
|
||||
OP_TradeRequestAck=0x14bf
|
||||
OP_TradeCoins=0x4206
|
||||
OP_FinishTrade=0x3993
|
||||
OP_CancelTrade=0x354c
|
||||
OP_TradeMoneyUpdate=0x68c2
|
||||
OP_MoneyUpdate=0x640c
|
||||
OP_TradeBusy=0x5505
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x7349
|
||||
OP_FinishWindow2=0x40ef
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x097b
|
||||
OP_ItemVerifyReply=0x2115
|
||||
|
||||
# merchant stuff
|
||||
OP_ShopPlayerSell=0x1901
|
||||
OP_ShopRequest=0x4fed
|
||||
OP_ShopEnd=0x30a8
|
||||
OP_ShopEndConfirm=0x3196
|
||||
OP_ShopPlayerBuy=0x04c
|
||||
OP_ShopDelItem=0x724f
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x4aa1
|
||||
OP_ClickObjectAction=0x0c1e
|
||||
OP_ClearObject=0x7a11
|
||||
OP_RecipeDetails=0x40d7
|
||||
OP_RecipesFavorite=0x5c74
|
||||
OP_RecipesSearch=0x1db6
|
||||
OP_RecipeReply=0x6e02
|
||||
OP_RecipeAutoCombine=0x6261
|
||||
OP_TradeSkillCombine=0x579a
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x378d
|
||||
OP_OpenTributeMaster=0x7666
|
||||
OP_SelectTribute=0x79fc
|
||||
OP_TributeItem=0x4f3e
|
||||
OP_TributeMoney=0x58fb
|
||||
OP_TributeToggle=0x241d
|
||||
OP_TributePointUpdate=0x5300
|
||||
OP_TributeNPC=0x0000
|
||||
OP_GuildTributeInfo=0x0000
|
||||
OP_OpenTributeReply=0x0000
|
||||
OP_GuildTributeStatus=0x0000
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x5d18
|
||||
OP_AdventureFinish=0x400f
|
||||
OP_AdventureInfoRequest=0x3cb0
|
||||
OP_AdventureInfo=0x4c54
|
||||
OP_AdventureRequest=0x2c6c
|
||||
OP_AdventureDetails=0x5648
|
||||
OP_AdventureData=0x7171
|
||||
OP_AdventureUpdate=0x1b01
|
||||
OP_AdventureMerchantRequest=0x6922
|
||||
OP_AdventureMerchantResponse=0x3e47
|
||||
OP_AdventureMerchantPurchase=0x5b72
|
||||
OP_AdventureMerchantSell=0x2f9b
|
||||
OP_AdventurePointsUpdate=0x65c3
|
||||
OP_AdventureStatsRequest=0x5a62
|
||||
OP_AdventureStatsReply=0x2370
|
||||
OP_AdventureLeaderboardRequest=0x7093
|
||||
OP_AdventureLeaderboardReply=0x7f79
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x4c10
|
||||
OP_GroupInvite=0x1649
|
||||
OP_GroupFollow=0x05ce
|
||||
OP_GroupUpdate=0x3abb
|
||||
OP_GroupUpdateB=0x6194
|
||||
OP_GroupCancelInvite=0x0000
|
||||
OP_GroupAcknowledge=0x7323
|
||||
OP_GroupDelete=0x0f6c
|
||||
OP_CancelInvite=0x32c2
|
||||
OP_GroupFollow2=0x2a50
|
||||
OP_GroupInvite2=0x6c65
|
||||
OP_GroupDisbandYou=0x1ae5
|
||||
OP_GroupDisbandOther=0x74da
|
||||
OP_GroupLeaderChange=0x21b4
|
||||
OP_GroupRoles=0x70e2
|
||||
OP_GroupMakeLeader=0x4229
|
||||
OP_DoGroupLeadershipAbility=0x1fb5
|
||||
OP_GroupLeadershipAAUpdate=0x02cf
|
||||
OP_GroupMentor=0x5892
|
||||
OP_InspectBuffs=0x486c
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x6060
|
||||
OP_LFGGetMatchesRequest=0x0340
|
||||
OP_LFGGetMatchesResponse=0x5048
|
||||
OP_LFPGetMatchesRequest=0x4d7d
|
||||
OP_LFPGetMatchesResponse=0x22c6
|
||||
OP_LFPCommand=0x49a9
|
||||
OP_LFGAppearance=0x0000
|
||||
OP_LFGResponse=0x0000
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x55ac
|
||||
OP_RaidUpdate=0x3973
|
||||
OP_RaidJoin=0x0000
|
||||
|
||||
# Button-push commands
|
||||
OP_Taunt=0x2703
|
||||
OP_CombatAbility=0x3eba
|
||||
OP_SenseTraps=0x02af
|
||||
OP_PickPocket=0x39e8
|
||||
OP_DisarmTraps=0x78bf
|
||||
OP_Disarm=0x5ec8
|
||||
OP_Sneak=0x5d55
|
||||
OP_Fishing=0x1e2a
|
||||
OP_InstillDoubt=0x640e
|
||||
OP_FeignDeath=0x52fa
|
||||
OP_Mend=0x0ecf
|
||||
OP_Bind_Wound=0x0386
|
||||
OP_LDoNOpen=0x3d5c
|
||||
|
||||
# Task packets
|
||||
OP_TaskDescription=0x083
|
||||
OP_TaskActivity=0x3714
|
||||
OP_CompletedTasks=0x4eba
|
||||
OP_TaskActivityComplete=0x5e19
|
||||
OP_AcceptNewTask=0x0a23
|
||||
OP_CancelTask=0x08d3
|
||||
OP_TaskMemberList=0x5727
|
||||
OP_OpenNewTasksWindow=0x48a2
|
||||
OP_AvaliableTask=0x36e8
|
||||
OP_TaskHistoryRequest=0x5f1c
|
||||
OP_TaskHistoryReply=0x3d05
|
||||
OP_DeclineAllTasks=0x0000
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x0d32
|
||||
OP_RequestTitles=0x6344
|
||||
OP_SendTitleList=0x2d08
|
||||
OP_SetTitle=0x6527
|
||||
OP_SetTitleReply=0x4c21
|
||||
|
||||
# mail opcodes
|
||||
OP_Command=0x0000
|
||||
OP_MailboxHeader=0x0000
|
||||
OP_MailHeader=0x0000
|
||||
OP_MailBody=0x0000
|
||||
OP_NewMail=0x0000
|
||||
OP_SentConfirm=0x0000
|
||||
|
||||
########### Below this point should not be needed ###########
|
||||
|
||||
# This section are all unknown in Titanium
|
||||
OP_ForceFindPerson=0x0000
|
||||
OP_LocInfo=0x0000
|
||||
OP_ReloadUI=0x0000
|
||||
OP_ItemName=0x0000
|
||||
OP_ItemLinkText=0x0000
|
||||
OP_MultiLineMsg=0x0000
|
||||
OP_MendHPUpdate=0x0000
|
||||
OP_TargetReject=0x0000
|
||||
OP_SafePoint=0x0000
|
||||
OP_ApproveZone=0x0000
|
||||
OP_ZoneComplete=0x0000
|
||||
OP_ClientError=0x0000
|
||||
OP_DumpName=0x0000
|
||||
OP_Heartbeat=0x0000
|
||||
OP_CrashDump=0x0000
|
||||
OP_LoginComplete=0x0000
|
||||
|
||||
# discovered opcodes not yet used:
|
||||
OP_PickLockSuccess=0x0000
|
||||
OP_PlayMP3=0x0000
|
||||
OP_ReclaimCrystals=0x0000
|
||||
OP_DynamicWall=0x0000
|
||||
OP_OpenDiscordMerchant=0x0000
|
||||
OP_DiscordMerchantInventory=0x0000
|
||||
OP_GiveMoney=0x0000
|
||||
OP_RequestKnowledgeBase=0x0000
|
||||
OP_KnowledgeBase=0x0000
|
||||
OP_SlashAdventure=0x0000 # /adventure
|
||||
OP_BecomePVPPrompt=0x0000
|
||||
OP_MoveLogRequest=0x0000 # gone I think
|
||||
OP_MoveLogDisregard=0x0000 # gone I think
|
||||
|
||||
# named unknowns, to make looking for real unknown easier
|
||||
OP_AnnoyingZoneUnknown=0x0000
|
||||
OP_Some6ByteHPUpdate=0x0000 seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x46d3 # OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x040b # OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
OP_PetitionSearch=0x0000 search term for petition
|
||||
OP_PetitionSearchResults=0x0000 (list of?) matches from search
|
||||
OP_PetitionSearchText=0x0000 text results of search
|
||||
|
||||
OP_PetitionUpdate=0x0000
|
||||
OP_PetitionCheckout=0x0000
|
||||
OP_PetitionCheckIn=0x0000
|
||||
OP_PetitionQue=0x0000
|
||||
OP_PetitionUnCheckout=0x0000
|
||||
OP_PetitionDelete=0x0000
|
||||
OP_DeletePetition=0x0000
|
||||
OP_PetitionResolve=0x0000
|
||||
OP_PDeletePetition=0x0000
|
||||
OP_PetitionBug=0x0000
|
||||
OP_PetitionRefresh=0x0000
|
||||
OP_PetitionCheckout2=0x0000
|
||||
OP_PetitionViewPetition=0x0000
|
||||
|
||||
# Login opcodes
|
||||
OP_SessionReady=0x0000
|
||||
OP_Login=0x0000
|
||||
OP_ServerListRequest=0x0000
|
||||
OP_PlayEverquestRequest=0x0000
|
||||
OP_PlayEverquestResponse=0x0000
|
||||
OP_ChatMessage=0x0000
|
||||
OP_LoginAccepted=0x0000
|
||||
OP_ServerListResponse=0x0000
|
||||
OP_Poll=0x0000
|
||||
OP_EnterChat=0x0000
|
||||
OP_PollResponse=0x0000
|
||||
|
||||
# raw opcodes
|
||||
OP_RAWSessionRequest=0x0000
|
||||
OP_RAWSessionResponse=0x0000
|
||||
OP_RAWCombined=0x0000
|
||||
OP_RAWSessionDisconnect=0x0000
|
||||
OP_RAWKeepAlive=0x0000
|
||||
OP_RAWSessionStatRequest=0x0000
|
||||
OP_RAWSessionStatResponse=0x0000
|
||||
OP_RAWPacket=0x0000
|
||||
OP_RAWFragment=0x0000
|
||||
OP_RAWOutOfOrderAck=0x0000
|
||||
OP_RAWAck=0x0000
|
||||
OP_RAWAppCombined=0x0000
|
||||
OP_RAWOutOfSession=0x0000
|
||||
|
||||
# we need to document the differences between these packets to make identifying them easier
|
||||
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
|
||||
OP_InitialHPUpdate=0x0000
|
||||
@@ -0,0 +1,39 @@
|
||||
opendir my $dir, "logs" or die "Cannot open directory: $!";
|
||||
my @files = readdir $dir;
|
||||
closedir $dir;
|
||||
$inc = 0;
|
||||
foreach my $val (@files){
|
||||
if($val=~/crash_zone/i){
|
||||
$stl = 0;
|
||||
$crash[$inc] = "";
|
||||
my $file = "logs/" . $val;
|
||||
open my $info, $file or die "Could not open $file: $!";
|
||||
while( my $line = <$info>) {
|
||||
if($line=~/CRTStartup/i){ $stl = 0; }
|
||||
@data = split(']', $line);
|
||||
if($stl == 1){ $crash[$inc] .= $data[1]; }
|
||||
if($line=~/dbghelp.dll/i){ $stl = 1; }
|
||||
}
|
||||
close $info;
|
||||
$inc++;
|
||||
}
|
||||
}
|
||||
|
||||
#::: Count Crash Occurrence first
|
||||
$i = 0;
|
||||
while($crash[$i]){
|
||||
$crash_count[length($crash[$i])]++;
|
||||
$unique_crash[length($crash[$i])] = $crash[$i];
|
||||
$i++;
|
||||
}
|
||||
|
||||
$i = 0;
|
||||
while($crash[$i]){
|
||||
if($unique_crash_tracker[length($crash[$i])] != 1){
|
||||
print "Crash Occurrence " . $crash_count[length($crash[$i])] . " Time(s) Length (" . length($crash[$i]) . ") \n\n";
|
||||
print $crash[$i] . "\n";
|
||||
print "=========================================\n";
|
||||
}
|
||||
$unique_crash_tracker[length($crash[$i])] = 1;
|
||||
$i++;
|
||||
}
|
||||
@@ -0,0 +1,351 @@
|
||||
5001|1_task_system.sql
|
||||
# 5002|2_optional_maxclients.sql
|
||||
# 5003|14_optional_merchantlist.sql
|
||||
5004|35_task_stepped.sql
|
||||
5005|42_task_min_maxlevel.sql
|
||||
5006|55_zone_shutdowndeleay.sql
|
||||
# 5007|68_optional_character_maxexplevel.sql
|
||||
# 5008|103_optional_chat_rules.sql
|
||||
5009|104_traps.sql
|
||||
# 5010|106_optional_proc_rules.sql
|
||||
5011|120_damageshieldtypes.sql
|
||||
5012|125_aggrozone.sql
|
||||
# 5013|127_optional_spell_rules.sql
|
||||
# 5014|129_optional_shared_plat_rule.sql
|
||||
# 5015|131_optional_combat_rules.sql
|
||||
5016|133_task_repeatable.sql
|
||||
5017|142_deathpeace_and_lifetap_aas.sql
|
||||
# 5018|158_optional_death_exp_loss.sql
|
||||
5019|176_melody.sql
|
||||
5020|189_character_.sql
|
||||
5021|196_trader.sql
|
||||
5022|210_undyeme.sql
|
||||
5023|222_buyer.sql
|
||||
5024|226_account_limiting.sql
|
||||
5025|230_spells_table.sql
|
||||
5026|235_horses_table.sql
|
||||
5027|243_spawn_timers.sql
|
||||
5028|247_mail.sql
|
||||
5029|249_chatchannels.sql
|
||||
5030|250_bot_spell_update.sql
|
||||
# 5031|250_optional_bot_spell_update.sql
|
||||
# 5032|285_optional_bot_spell_update.sql
|
||||
5033|292_augslots.sql
|
||||
5034|294_merchant_logging.sql
|
||||
5035|304_faction_list.sql
|
||||
5036|326_aas.sql
|
||||
5037|328_bot_management.sql
|
||||
# 5038|328_optional_bot_management.sql
|
||||
5039|340_gm_ips.sql
|
||||
5040|356_combat.sql
|
||||
5041|360_peqzone.sql
|
||||
5042|364_ranged_dist_rule.sql
|
||||
5043|386_bot_save_raid.sql
|
||||
# 5044|434_optional_rest_state_rules.sql
|
||||
5045|447_sof_startzone_rule.sql
|
||||
5046|463_altadv_vars.sql
|
||||
5047|475_aa_actions.sql
|
||||
5048|500_spawn2_optimization.sql
|
||||
5049|503_bugs.sql
|
||||
5050|518_drakkin_npc_type_features.sql
|
||||
5051|524_rule_values_notes.sql
|
||||
5052|527_npc_armor_tint.sql
|
||||
5053|553_saylink_table.sql
|
||||
5054|564_nokeyring.sql
|
||||
5055|600_group_leadership.sql
|
||||
5056|612_instance_changes.sql
|
||||
5057|615_adventure_assassination.sql
|
||||
5058|619_Adventure_Recruiter_Flavor.sql
|
||||
5059|621_LDoNTraps.sql
|
||||
5060|633_ucs.sql
|
||||
5061|634_TrapTemplateDefaultValue.sql
|
||||
5062|643_BotsTable.sql
|
||||
5063|646_archery_penalty_rule.sql
|
||||
5064|665_heroic_resists.sql
|
||||
5065|667_titles.sql
|
||||
5066|687_aa_table_changes.sql
|
||||
5067|699_peqzone_rule.sql
|
||||
5068|702_aashieldblock_tint_table.sql
|
||||
5069|703_peqzone_rule.sql
|
||||
5070|704_rules.sql
|
||||
5071|710_tint_set_naming.sql
|
||||
5072|721_pathing_rules.sql
|
||||
5073|730_smart_delay_moving.sql
|
||||
5074|731_rule_assist_notarget_self.sql
|
||||
5075|732_sacrifice_rules.sql
|
||||
5076|745_slow_mitigation.sql
|
||||
5077|754_archery_base_damage_rule.sql
|
||||
5078|755_sof_altadv_vars_updates.sql
|
||||
5079|773_monk_rules.sql
|
||||
# 5080|853_optional_rule_aaexp.sql
|
||||
# 5081|858_optional_rule_ip_limit_by_status.sql
|
||||
# 5082|892_optional_bots_table_mod.sql
|
||||
# 5083|893_optional_bots_table_mod.sql
|
||||
5084|898_npc_maxlevel_scalerate.sql
|
||||
# 5085|902_optional_rule_snareflee.sql
|
||||
5086|923_spawn2_enabled.sql
|
||||
5087|962_hot_zone.sql
|
||||
5088|964_reports.sql
|
||||
5089|971_veteran_rewards.sql
|
||||
5090|977_raid_npc_private_corpses.sql
|
||||
5091|979_unique_spawn_by_name.sql
|
||||
5092|980_account_ip.sql
|
||||
5093|1022_botadventuring.sql
|
||||
5094|1027_botactives.sql
|
||||
5095|1030_botzoningsupport.sql
|
||||
5096|1036_botbuffs.sql
|
||||
5097|1038_botpetstatepersists.sql
|
||||
5098|1038_grouptablesuniquecolumndefinitions.sql
|
||||
5099|1039_botguilds.sql
|
||||
5100|1040_DeprecatedBotRaidsSystems.sql
|
||||
5101|1057_titles.sql
|
||||
5102|1077_botgroups.sql
|
||||
5103|1136_spell_globals.sql
|
||||
# 5104|1144_optional_rule_return_nodrop.sql
|
||||
5105|1195_account_suspendeduntil.sql
|
||||
5106|1259_npc_skill_types.sql
|
||||
5107|1280_bot_augs.sql
|
||||
# 5108|1290_optional_exp_loss_rule.sql
|
||||
5109|1293_guild_bank.sql
|
||||
5110|1379_loginserver_trusted_server.sql
|
||||
5111|1392_recipe_learning.sql
|
||||
# 5112|1394_optional_rule_sod_hp_mana_end.sql
|
||||
5113|1404_faction_list.sql
|
||||
# 5114|1410_optional_sod_aas_ht_and_loh.sql
|
||||
5115|1436_login_server_table_fix.sql
|
||||
5116|1446_allowrest_optional.sql
|
||||
5117|1446_allowrest_required.sql
|
||||
5118|1450_cvs.sql
|
||||
5119|1451_guilds.sql
|
||||
5120|1498_instance_adventure.sql
|
||||
5121|1510_global_instances.sql
|
||||
5122|1511_map_path_loading.sql
|
||||
5123|1513_zone_points.sql
|
||||
5124|1519_zone_primary_key_id.sql
|
||||
5125|1542_items_table_cleanup.sql
|
||||
5126|1548_nimbuseffect_required.sql
|
||||
5127|1562_instanced_spawnconditions.sql
|
||||
5128|1586_waypoints_optional.sql
|
||||
5129|1610_tradeskill_required.sql
|
||||
5130|1618_zone.sql
|
||||
# 5131|1625_optional_rule_class_race_exp_bonus.sql
|
||||
# 5132|1672_optional_rules_respawn_window.sql
|
||||
# 5133|1679_optional_rules_blocked_buffs.sql
|
||||
5134|1696_modify_zone_and_object_tables.sql
|
||||
5135|1711_account_restricted_aa.sql
|
||||
# 5136|1717_optional_rule_bash_stun_chance.sql
|
||||
# 5137|1718_optional_rules_mod3s.sql
|
||||
# 5138|1719_optional_triggerOnCastAAs.sql
|
||||
# 5139|1720_optional_sql_AAs.sql
|
||||
5140|1720_required_sql_AA_effects_update.sql
|
||||
# 5141|1721_optional_sql_drakkin_breath_update.sql
|
||||
5142|1721_required_sql_altadv_vars_update.sql
|
||||
# 5143|1723_optional_sql_new_stats_window_rule.sql
|
||||
5144|1723_required_sql_corruption.sql
|
||||
# 5145|1736_optional_sql_feral_swipe.sql
|
||||
5146|1737_required_sql_rule_and_aa_update.sql
|
||||
# 5147|1746_optional_sql_bot_manaregen.sql
|
||||
# 5148|1747_optional_HoT_zone_and_zonepoints.sql
|
||||
# 5149|1750_optional_sql_reflect_rule.sql
|
||||
# 5150|1753_optional_haste_cap_rule.sql
|
||||
5151|1753_required_sql_healing_adept_aa.sql
|
||||
5152|1754_required_sql_healing_adept_aa_fix.sql
|
||||
5153|1755_required_sql_fear_resist_aas.sql
|
||||
# 5154|1784_optional_corpsedrag_rules.sql
|
||||
5155|1786_required_update_to_aas.sql
|
||||
5156|1790_required_aa_required_level_cost.sql
|
||||
5157|1793_resist_adjust.sql
|
||||
# 5158|1799_optional_rest_regen_endurance_rule.sql
|
||||
5159|1802_required_doppelganger.sql
|
||||
5160|1803_required_tasks_xpreward_signed.sql
|
||||
5161|1804_required_ae_melee_updates.sql
|
||||
# 5162|1809_optional_rules.sql
|
||||
5163|1813_required_doppelganger_npcid_change.sql
|
||||
# 5164|1817_optional_npc_archery_bonus_rule.sql
|
||||
# 5165|1823_optional_delay_death.sql
|
||||
5166|1847_required_doors_dest_zone_size_32.sql
|
||||
# 5167|1859_optional_item_casts_use_focus_rule.sql
|
||||
# 5168|1884_optional_bot_spells_update.sql
|
||||
# 5169|1885_optional_rules_fv_pvp_expansions.sql
|
||||
# 5170|1889_optional_skill_cap_rule.sql
|
||||
5171|1908_required_npc_types_definitions.sql
|
||||
# 5172|1926_optional_stat_cap.sql
|
||||
5173|1944_spawn2.sql
|
||||
5174|1946_doors.sql
|
||||
# 5175|1960_optional_console_timeout_rule.sql
|
||||
# 5176|1962_optional_guild_creation_window_rules.sql
|
||||
# 5177|1963_optional_rule_live_like_focuses.sql
|
||||
# 5178|1968_optional_enrage_rules.sql
|
||||
# 5179|1972_optional_extradmg_item_cap.sql
|
||||
5180|1974_required_bot_spells_update.sql
|
||||
5181|1977_underwater.sql
|
||||
# 5182|1998_optional_intoxication_and_looting_rules.sql
|
||||
5183|2004_charges_alt_currency.sql
|
||||
# 5184|2015_optional_specialization_training_rule.sql
|
||||
# 5185|2016_optional_rule_bot_aa_expansion.sql
|
||||
# 5186|2023_optional_mysqlcli.sql
|
||||
# 5187|2024_optional_update_crystals.sql
|
||||
5188|2024_required_update.sql
|
||||
5189|2057_required_discovered_items.sql
|
||||
# 5190|2058_optional_rule_discovered_items.sql
|
||||
5191|2062_required_version_changes.sql
|
||||
5192|2069_required_pets.sql
|
||||
5193|2079_player_speech.sql
|
||||
5194|2087_required_bots_hp_and_mana_and_spell_updates.sql
|
||||
5195|2098_required_zonepoint_version_changes.sql
|
||||
5196|2099_required_discovered_items_account_status.sql
|
||||
5197|2104_required_group_roles.sql
|
||||
5198|2107_required_bot_stances.sql
|
||||
5199|2129_required_lfguild.sql
|
||||
5200|2133_required_faction_loot_despawn.sql
|
||||
5201|2136_extended_targets.sql
|
||||
5202|2142_emotes.sql
|
||||
# 5203|2154_optional_rule_spell_procs_resists_falloff.sql
|
||||
# 5204|2156_optional_charm_break_rule.sql
|
||||
# 5205|2159_optional_defensiveproc_rules.sql
|
||||
5206|2164_require_bots_bottimers.sql
|
||||
# 5207|2171_optional_SpecialAttackACBonus_rule.sql
|
||||
# 5208|2176_optional_aa_expansion_SOF_fix.sql
|
||||
# 5209|2176_optional_FrenzyBonus_rule.sql
|
||||
5210|2176_required_aa_updates.sql
|
||||
5211|2178_required_aa_updates.sql
|
||||
# 5212|2183_optional_bot_xp_rule.sql
|
||||
# 5213|2185_optional_NPCFlurryChacne_rule
|
||||
# 5214|2185_optional_NPCFlurryChacne_rule.sql
|
||||
# 5215|2185_optional_NPCFlurryChance_rule.sql
|
||||
5216|2185_required_aa_updates
|
||||
5217|2185_required_aa_updates.sql
|
||||
# 5218|2188_optional_miscspelleffect_rules
|
||||
# 5219|2188_optional_miscspelleffect_rules.sql
|
||||
5220|2188_required_aa_updates
|
||||
5221|2188_required_aa_updates.sql
|
||||
# 5222|2189_optional_taunt_rules
|
||||
# 5223|2189_optional_taunt_rules.sql
|
||||
5224|2195_required_sharedplatupdates.sql
|
||||
# 5225|2208_optional_aa_stacking_rule.sql
|
||||
# 5226|2208_optional_EnableSoulAbrasionAA.sql
|
||||
5227|2208_required_aa_updates.sql
|
||||
# 5228|2209_optional_additive_bonus_rule.sql
|
||||
5229|2213_loot_changes.sql
|
||||
5230|2214_faction_list_mod.sql
|
||||
5231|2215_required_aa_updates.sql
|
||||
# 5232|2243_optional_char_max_level_rule.sql
|
||||
5233|2260_probability.sql
|
||||
5234|2262_required_pet_discipline_update.sql
|
||||
5235|2264_required_aa_updates.sql
|
||||
5236|2268_QueryServ.sql
|
||||
5237|2268_required_updates.sql
|
||||
# 5238|2274_optional_rule_iplimitdisconnectall.sql
|
||||
# 5239|2278_optional_rule_targetableswarmpet.sql
|
||||
# 5240|2280_optional_rule_targetableswarmpet-rename.sql
|
||||
5241|2283_required_npc_changes.sql
|
||||
5242|2299_required_inspectmessage_fields.sql
|
||||
# 5243|2300_optional_loot_changes.sql
|
||||
5244|2304_QueryServ.sql
|
||||
5245|2340_required_maxbuffslotspet.sql
|
||||
5246|2361_QueryServ.sql
|
||||
5247|2361_required_qs_rule_values.sql
|
||||
5248|2370_required_aa_updates.sql
|
||||
5249|2376_required_aa_updates.sql
|
||||
# 5250|2380_optional_merc_data.sql
|
||||
# 5251|2380_optional_merc_merchant_npctypes_update.sql
|
||||
# 5252|2380_optional_merc_rules.sql
|
||||
5253|2383_required_group_ismerc.sql
|
||||
# 5254|2428_optional_levelbasedexpmods.sql
|
||||
# 5255|2448_optional_stun_proc_aggro_rule.sql
|
||||
5256|2471_required_aa_updates.sql
|
||||
5257|2482_required_start_zones.sql
|
||||
5258|2504_required_aa_updates.sql
|
||||
8000|mercs.sql|SHOW TABLES LIKE 'merc_stats'|empty|
|
||||
9000|2013_02_18_Merc_Rules_and_Tables.sql|SELECT * FROM `rule_values` WHERE `rule_name` LIKE '%Mercs:ResurrectRadius%'|empty|
|
||||
9001|2013_02_25_Impr_HT_LT.sql|SHOW TABLES LIKE 'merc_inventory'|empty|
|
||||
9002|2013_03_1_Merc_Rules_and_Equipment.sql|SHOW TABLES LIKE 'merc_inventory'|empty|
|
||||
# 9003|2013_03_23_Escape_FadingMemories.sql
|
||||
# 9004|2013_04_04_NaturesBounty.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '1230' AND `slot` = '1' AND `effectid` = '313' AND `base1` = '15' AND `base2` = '0'|empty|
|
||||
9005|2013_04_08_Salvage.sql|SHOW COLUMNS FROM `tradeskill_recipe_entries` LIKE 'salvagecount'|empty|
|
||||
9006|2013_05_05_Account_Flags.sql|SHOW TABLES LIKE 'account_flags'|empty|
|
||||
9007|2013_05_05_Item_Tick.sql|SHOW TABLES LIKE 'item_tick'|empty|
|
||||
9008|2013_07_11_NPC_Special_Abilities.sql|SHOW COLUMNS FROM `npc_types` LIKE 'special_abilities'|empty|
|
||||
9009|2013_10_12_Merc_Special_Abilities.sql|SHOW COLUMNS FROM `merc_stats` LIKE 'special_abilities'|empty|
|
||||
# 9010|2013_10_12_Merc_vwMercNpcTypes.sql
|
||||
9011|2013_10_31_Recipe_disabling.sql|SHOW COLUMNS FROM `tradeskill_recipe` LIKE 'enabled'|empty|
|
||||
9012|2013_11_07_BaseData.sql|SHOW TABLES LIKE 'base_data'|empty|
|
||||
# 9013|2013_11_13_Instrument_Singing_Mastery.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '213' AND `slot` = '1' AND `effectid` = '260' AND `base1` = '2' AND `base2` = '23'|empty|
|
||||
9014|2013_11_18_AssistRadius.sql|SHOW COLUMNS FROM `npc_types` LIKE 'assistradius'|empty|
|
||||
9015|2013_12_26_MerchantList_Class_Required.sql|SHOW COLUMNS FROM `merchantlist` LIKE 'classes_required'|empty|
|
||||
# 9016|2014_01_04_SongModCapAAs.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '571' AND `slot` = '1' AND `effectid` = '261'|empty|
|
||||
9017|2014_01_08_SpellsNewAdditions.sql|SHOW COLUMNS FROM `spells_new` LIKE 'persistdeath'|empty|
|
||||
9018|2014_01_09_PreservePetSize.sql|SHOW COLUMNS FROM `character_pet_info` LIKE 'size'|empty|
|
||||
# 9019|2014_01_20_MezMastery.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '781' AND `slot` = '1' AND `effectid` = '287'|empty|
|
||||
9020|2014_01_20_Not_Extendable.sql|SHOW COLUMNS FROM `spells_new` LIKE 'not_extendable'|empty|
|
||||
# 9021|2014_01_20_SpellCastingReinforcement.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '86' AND `slot` = '1' AND `effectid` = '128'|empty|
|
||||
9022|2014_01_20_Weather.sql|SHOW COLUMNS FROM `zone` LIKE 'rain_chance1'|empty|
|
||||
# 9023|2014_01_27_CritcalMendAA.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '230' AND `slot` = '1' AND `effectid` = '275'|empty
|
||||
# 9024|2014_02_02_SpellCriticalsAA.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '4755' AND `slot` = '1' AND `effectid` = '294'|empty
|
||||
9025|2014_02_13_Rename_instance_lockout_tables.sql|SHOW TABLES LIKE 'instance_list'|empty|
|
||||
9026|2014_02_13_spells_new_update.sql|SHOW COLUMNS FROM `spells_new` LIKE 'ConeStartAngle'|empty|
|
||||
9027|2014_02_20_buff_update.sql|SHOW COLUMNS FROM `character_buffs` LIKE 'caston_y'|empty|
|
||||
9028|2014_02_26_roambox_update.sql|SHOW COLUMNS FROM `spawngroup` LIKE 'mindelay'|empty|
|
||||
# 9029|2014_02_26_virulentvenomAA.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '888' AND `slot` = '1' AND `effectid` = '250'|empty|
|
||||
9030|2014_04_04_PhysicalResist.sql|SHOW COLUMNS FROM `npc_types` LIKE 'PhR'|empty|
|
||||
9031|2014_04_10_No_Target_With_Hotkey.sql|SHOW COLUMNS FROM `npc_types` LIKE 'no_target_hotkey'|empty|
|
||||
9032|2014_04_12_SlowMitigation.sql|SHOW COLUMNS FROM `npc_types` LIKE 'slow_mitigation'|contains|float
|
||||
9034|2014_04_25_spawn_events.sql|SHOW COLUMNS FROM `spawn_events` LIKE 'strict'|empty|
|
||||
9035|2014_04_27_AISpellEffects.sql|SHOW COLUMNS FROM `npc_types` LIKE 'npc_spells_effects_id'|empty|
|
||||
9036|2014_05_04_SlowMitigationFix.sql|SHOW COLUMNS FROM `npc_types` LIKE 'slow_mitigation'|contains|float
|
||||
# 9038|2014_06_25_AA_Updates.sql|SELECT * FROM `altadv_vars` WHERE `skill_id` = '1604'|empty
|
||||
# 9039|2014_07_04_AA_Updates.sql|SELECT * FROM `aa_effects` WHERE `aaid` = '158' AND `slot` = '1' AND `effectid` = '238'|empty
|
||||
9040|2014_07_10_npc_spells.sql|SHOW COLUMNS FROM `npc_spells` LIKE 'engaged_no_sp_recast_min'|empty|
|
||||
9041|2014_08_02_spells_new.sql|SHOW COLUMNS FROM `spells_new` LIKE 'viral_range'|empty|
|
||||
9042|2014_08_12_NPC_raid_targets.sql|SHOW COLUMNS FROM `npc_types` LIKE 'raid_target'|empty|
|
||||
9043|2014_08_18_spells_new_update.sql|SHOW COLUMNS FROM `spells_new` LIKE 'viral_targets'|empty|
|
||||
9044|2014_08_20_merchantlist_probability.sql|SHOW COLUMNS FROM `merchantlist` LIKE 'probability'|empty|
|
||||
9045|2014_08_23_Complete_QueryServ_Table_Structures.sql|SHOW TABLES LIKE 'qs_player_aa_rate_hourly'|empty|
|
||||
9046|2014_08_23_player_events_and_player_aa_rate_hourly.sql|SHOW TABLES LIKE 'qs_player_events'|empty|
|
||||
9048|2014_09_09_attack_delay.sql|SHOW COLUMNS FROM `npc_types` LIKE 'attack_delay'|empty|
|
||||
9050|2014_09_20_ban_messages.sql|SHOW COLUMNS FROM `account` LIKE 'ban_reason'|empty|
|
||||
9051|2014_10_11_RaidMOTD.sql|SHOW COLUMNS FROM `raid_details` LIKE 'motd'|empty|
|
||||
9052|2014_10_13_RaidLeadership.sql|SHOW TABLES LIKE 'raid_leaders'|empty|
|
||||
9053|2014_10_18_group_mentor.sql|SHOW COLUMNS FROM `group_leaders` LIKE 'mentoree'|empty|
|
||||
9054|2014_10_19_raid_group_mentor.sql|SHOW COLUMNS FROM `raid_leaders` LIKE 'mentoree'|empty|
|
||||
9055|2014_10_30_special_abilities_null.sql|SHOW COLUMNS FROM `npc_types` LIKE 'special_abilities'|contains|NO
|
||||
9056|2014_11_08_RaidMembers.sql|SHOW COLUMNS FROM `raid_members` LIKE 'groupid'|missing|unsigned
|
||||
9057|2014_11_13_spells_new_updates.sql|SHOW COLUMNS FROM `spells_new` LIKE 'disallow_sit'|empty|
|
||||
9058|2014_11_26_InventoryTableUpdate.sql|SHOW COLUMNS FROM `inventory` LIKE 'ornamenticon'|empty|
|
||||
9059|2014_12_01_mercs_table_update.sql|SHOW COLUMNS FROM `mercs` LIKE 'MercSize'|empty|
|
||||
9060|2014_12_09_items_table_update.sql|SHOW COLUMNS FROM `items` LIKE 'herosforgemodel'|empty|
|
||||
9061|2014_12_13_inventory_table_update.sql|SHOW COLUMNS FROM `inventory` LIKE 'ornament_hero_model'|empty|
|
||||
9062|2014_12_15_multiple_table_updates.sql|SHOW COLUMNS FROM `items` LIKE 'augslot6type'|empty|
|
||||
9063|2014_12_24_npc_types_update.sql|SHOW COLUMNS FROM `npc_types` LIKE 'd_melee_texture1'|empty|
|
||||
9064|2014_12_24_npc_types_table_update.sql|SHOW COLUMNS FROM `npc_types` LIKE 'herosforgemodel'|empty|
|
||||
9065|2014_12_26_merc_weaponinfo_table_update.sql|SHOW COLUMNS FROM `vwMercNpcTypes` LIKE 'd_melee_texture1'|empty|
|
||||
9066|2014_12_31_npc_types_default_values_update.sql|SHOW COLUMNS FROM `npc_types` LIKE 'bodytype'|contains|YES
|
||||
9067|2015_01_21_npc_types_update.sql|SHOW COLUMNS FROM `npc_types` LIKE 'light'|empty|
|
||||
9068|2015_01_15_logsys_categories_table.sql|SHOW TABLES LIKE 'logsys_categories'|empty|
|
||||
9069|2015_01_25_logsys_Mercenaries_category.sql|SELECT * FROM `logsys_categories` WHERE `log_category_description` LIKE 'Mercenaries'|empty|
|
||||
9070|2015_01_28_quest_debug_log_category.sql|SELECT * FROM `logsys_categories` WHERE `log_category_description` LIKE 'Quest Debug'|empty|
|
||||
9071|2015_01_29_merc_stats_table_update.sql|SHOW COLUMNS FROM `merc_stats` LIKE 'statscale'|empty|
|
||||
9072|2015_01_30_merc_attack_delay.sql|SHOW COLUMNS FROM `merc_stats` LIKE 'attack_delay'|empty|
|
||||
9073|2015_01_31_character_item_recast.sql|SHOW TABLES LIKE 'character_item_recast'|empty|
|
||||
9074|2015_02_01_logsys_packet_logs.sql|SELECT * FROM `logsys_categories` WHERE `log_category_description` LIKE 'Packet: Server -> Client'|empty|
|
||||
9075|2015_02_02_logsys_packet_logs_with_dump.sql|SELECT * FROM `logsys_categories` WHERE `log_category_description` LIKE 'Packet: Server -> Client With Dump'|empty|
|
||||
9076|2014_10_30_special_abilities_null.sql|SHOW COLUMNS FROM `loottable` WHERE Field = 'avgcoin'|contains|smallint
|
||||
|
||||
# Upgrade conditions:
|
||||
# This won't be needed after this system is implemented, but it is used database that are not
|
||||
# yet using the versioning system to figure out where the database is schema wise to determine
|
||||
# which updates are necessary to run
|
||||
#
|
||||
# Example: Version|Filename.sql|Query_to_Check_Condition_For_Needed_Update|match type|text to match
|
||||
# 0 = Database Version
|
||||
# 1 = Filename.sql
|
||||
# 2 = Query_to_Check_Condition_For_Needed_Update
|
||||
# 3 = Match Type - If condition from match type to Value 4 is true, update will flag for needing to be ran
|
||||
# contains = If query results contains text from 4th value
|
||||
# match = If query results matches text from 4th value
|
||||
# missing = If query result is missing text from 4th value
|
||||
# empty = If the query results in no results
|
||||
# not_empty = If the query is not empty
|
||||
# 4 = Text to match
|
||||
#
|
||||
#
|
||||
@@ -0,0 +1,74 @@
|
||||
-- A fix for the auto-conversion view renaming issue
|
||||
|
||||
|
||||
DROP VIEW IF EXISTS `vwbotcharactermobs`;
|
||||
DROP VIEW IF EXISTS `vwbotgroups`;
|
||||
DROP VIEW IF EXISTS `vwgroups`;
|
||||
DROP VIEW IF EXISTS `vwguildmembers`;
|
||||
|
||||
|
||||
CREATE VIEW `vwBotCharacterMobs` AS
|
||||
SELECT _utf8'C' AS mobtype,
|
||||
c.`id`,
|
||||
c.`name`,
|
||||
c.`class`,
|
||||
c.`level`,
|
||||
c.`last_login`,
|
||||
c.`zone_id`
|
||||
FROM `character_data` AS c
|
||||
UNION ALL
|
||||
SELECT _utf8'B' AS mobtype,
|
||||
b.`BotID` AS id,
|
||||
b.`Name` AS name,
|
||||
b.`Class` AS class,
|
||||
b.`BotLevel` AS level,
|
||||
0 AS timelaston,
|
||||
0 AS zoneid
|
||||
FROM bots AS b;
|
||||
|
||||
CREATE VIEW `vwGroups` AS
|
||||
SELECT g.`groupid` AS groupid,
|
||||
GetMobType(g.`name`) AS mobtype,
|
||||
g.`name` AS name,
|
||||
g.`charid` AS mobid,
|
||||
IFNULL(c.`level`, b.`BotLevel`) AS level
|
||||
FROM `group_id` AS g
|
||||
LEFT JOIN `character_data` AS c ON g.`name` = c.`name`
|
||||
LEFT JOIN `bots` AS b ON g.`name` = b.`Name`;
|
||||
|
||||
CREATE VIEW `vwBotGroups` AS
|
||||
SELECT g.`BotGroupId`,
|
||||
g.`BotGroupName`,
|
||||
g.`BotGroupLeaderBotId`,
|
||||
b.`Name` AS BotGroupLeaderName,
|
||||
b.`BotOwnerCharacterId`,
|
||||
c.`name` AS BotOwnerCharacterName
|
||||
FROM `botgroup` AS g
|
||||
JOIN `bots` AS b ON g.`BotGroupLeaderBotId` = b.`BotID`
|
||||
JOIN `character_data` AS c ON b.`BotOwnerCharacterID` = c.`id`
|
||||
ORDER BY b.`BotOwnerCharacterId`, g.`BotGroupName`;
|
||||
|
||||
CREATE VIEW `vwGuildMembers` AS
|
||||
SELECT 'C' AS mobtype,
|
||||
cm.`char_id`,
|
||||
cm.`guild_id`,
|
||||
cm.`rank`,
|
||||
cm.`tribute_enable`,
|
||||
cm.`total_tribute`,
|
||||
cm.`last_tribute`,
|
||||
cm.`banker`,
|
||||
cm.`public_note`,
|
||||
cm.`alt`
|
||||
FROM `guild_members` AS cm
|
||||
UNION ALL
|
||||
SELECT 'B' AS mobtype,
|
||||
bm.`char_id`,
|
||||
bm.`guild_id`,
|
||||
bm.`rank`,
|
||||
bm.`tribute_enable`,
|
||||
bm.`total_tribute`,
|
||||
bm.`last_tribute`,
|
||||
bm.`banker`,
|
||||
bm.`public_note`,
|
||||
bm.`alt`
|
||||
FROM `botguildmembers` AS bm;
|
||||
@@ -0,0 +1,280 @@
|
||||
-- 'load_bots_old' sql script file
|
||||
-- current as of 10/15/2014
|
||||
--
|
||||
-- Use this file on databases where the player profile blob has not been converted
|
||||
--
|
||||
-- Note: This file assumes a database free of bot remnants. If you have a prior
|
||||
-- bot installation and wish to reload the default schema and entries, then
|
||||
-- source 'drop_bots.sql' before sourcing this file.
|
||||
|
||||
|
||||
ALTER TABLE `guild_members` DROP PRIMARY KEY;
|
||||
ALTER TABLE `group_id` DROP PRIMARY KEY, ADD PRIMARY KEY USING BTREE(`groupid`, `charid`, `name`, `ismerc`);
|
||||
|
||||
UPDATE `spawn2` SET `enabled` = 1 WHERE `id` IN (59297,59298);
|
||||
|
||||
-- old command kept for reference (`commands` now only has 2 columns - `command` and `access`)
|
||||
-- INSERT INTO `commands` VALUES ('bot', '0', 'Type \"#bot help\" to the see the list of available commands for bots.');
|
||||
INSERT INTO `commands` VALUES ('bot', '0');
|
||||
|
||||
INSERT INTO `rule_values` VALUES
|
||||
('1', 'Bots:BotAAExpansion', '8', 'The expansion through which bots will obtain AAs'),
|
||||
('1', 'Bots:BotFinishBuffing', 'false', 'Allow for buffs to complete even if the bot caster is out of mana. Only affects buffing out of combat.'),
|
||||
('1', 'Bots:BotGroupBuffing', 'false', 'Bots will cast single target buffs as group buffs, default is false for single. Does not make single target buffs work for MGB.'),
|
||||
('1', 'Bots:BotManaRegen', '3.0', 'Adjust mana regen for bots, 1 is fast and higher numbers slow it down 3 is about the same as players.'),
|
||||
('1', 'Bots:BotQuest', 'false', 'Optional quest method to manage bot spawn limits using the quest_globals name bot_spawn_limit, see: /bazaar/Aediles_Thrall.pl'),
|
||||
('1', 'Bots:BotSpellQuest', 'false', 'Anita Thrall\'s (Anita_Thrall.pl) Bot Spell Scriber quests.'),
|
||||
('1', 'Bots:CreateBotCount', '150', 'Number of bots that each account can create'),
|
||||
('1', 'Bots:SpawnBotCount', '71', 'Number of bots a character can have spawned at one time, You + 71 bots is a 12 group raid');
|
||||
|
||||
CREATE TABLE `bots` (
|
||||
`BotID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`BotOwnerCharacterID` INT(10) UNSIGNED NOT NULL,
|
||||
`BotSpellsID` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`Name` VARCHAR(64) NOT NULL,
|
||||
`LastName` VARCHAR(32) DEFAULT NULL,
|
||||
`BotLevel` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`Race` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`Class` TINYINT(2) NOT NULL DEFAULT '0',
|
||||
`Gender` TINYINT(2) NOT NULL DEFAULT '0',
|
||||
`Size` FLOAT NOT NULL DEFAULT '0',
|
||||
`Face` INT(10) NOT NULL DEFAULT '1',
|
||||
`LuclinHairStyle` INT(10) NOT NULL DEFAULT '1',
|
||||
`LuclinHairColor` INT(10) NOT NULL DEFAULT '1',
|
||||
`LuclinEyeColor` INT(10) NOT NULL DEFAULT '1',
|
||||
`LuclinEyeColor2` INT(10) NOT NULL DEFAULT '1',
|
||||
`LuclinBeardColor` INT(10) NOT NULL DEFAULT '1',
|
||||
`LuclinBeard` INT(10) NOT NULL DEFAULT '0',
|
||||
`DrakkinHeritage` INT(10) NOT NULL DEFAULT '0',
|
||||
`DrakkinTattoo` INT(10) NOT NULL DEFAULT '0',
|
||||
`DrakkinDetails` INT(10) NOT NULL DEFAULT '0',
|
||||
`HP` INTEGER NOT NULL DEFAULT '0',
|
||||
`Mana` INTEGER NOT NULL DEFAULT '0',
|
||||
`MR` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`CR` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`DR` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`FR` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`PR` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`Corrup` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`AC` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`STR` MEDIUMINT(8) NOT NULL DEFAULT '75',
|
||||
`STA` MEDIUMINT(8) NOT NULL DEFAULT '75',
|
||||
`DEX` MEDIUMINT(8) NOT NULL DEFAULT '75',
|
||||
`AGI` MEDIUMINT(8) NOT NULL DEFAULT '75',
|
||||
`_INT` MEDIUMINT(8) NOT NULL DEFAULT '80',
|
||||
`WIS` MEDIUMINT(8) NOT NULL DEFAULT '75',
|
||||
`CHA` MEDIUMINT(8) NOT NULL DEFAULT '75',
|
||||
`ATK` MEDIUMINT(9) NOT NULL DEFAULT '0',
|
||||
`BotCreateDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`LastSpawnDate` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`TotalPlayTime` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`LastZoneId` SMALLINT(6) NOT NULL DEFAULT '0',
|
||||
`BotInspectMessage` VARCHAR(256) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`BotID`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE `botstances` (
|
||||
`BotID` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`StanceID` TINYINT UNSIGNED NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotID`),
|
||||
CONSTRAINT `FK_botstances_1` FOREIGN KEY (`BotID`) REFERENCES `bots` (`BotID`)
|
||||
);
|
||||
|
||||
CREATE TABLE `bottimers` (
|
||||
`BotID` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`TimerID` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`Value` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotID`),
|
||||
CONSTRAINT `FK_bottimers_1` FOREIGN KEY (`BotID`) REFERENCES `bots` (`BotID`)
|
||||
);
|
||||
|
||||
CREATE TABLE `botbuffs` (
|
||||
`BotBuffId` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`BotId` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`SpellId` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`CasterLevel` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`DurationFormula` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`TicsRemaining` INT(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`PoisonCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`DiseaseCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`CurseCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`CorruptionCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`HitCount` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`MeleeRune` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`MagicRune` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`DeathSaveSuccessChance` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`CasterAARank` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`Persistent` TINYINT(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotBuffId`),
|
||||
KEY `FK_botbuff_1` (`BotId`),
|
||||
CONSTRAINT `FK_botbuff_1` FOREIGN KEY (`BotId`) REFERENCES `bots` (`BotID`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
|
||||
|
||||
CREATE TABLE `botinventory` (
|
||||
`BotInventoryID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`BotID` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
`SlotID` INTEGER SIGNED NOT NULL DEFAULT '0',
|
||||
`ItemID` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
`charges` TINYINT(3) UNSIGNED DEFAULT 0,
|
||||
`color` INTEGER UNSIGNED NOT NULL DEFAULT 0,
|
||||
`augslot1` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT 0,
|
||||
`augslot2` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT 0,
|
||||
`augslot3` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT 0,
|
||||
`augslot4` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT 0,
|
||||
`augslot5` MEDIUMINT(7) UNSIGNED DEFAULT 0,
|
||||
`instnodrop` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`BotInventoryID`),
|
||||
KEY `FK_botinventory_1` (`BotID`),
|
||||
CONSTRAINT `FK_botinventory_1` FOREIGN KEY (`BotID`) REFERENCES `bots` (`BotID`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE `botpets` (
|
||||
`BotPetsId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`PetId` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
`BotId` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
`Name` VARCHAR(64) NULL,
|
||||
`Mana` INTEGER NOT NULL DEFAULT '0',
|
||||
`HitPoints` INTEGER NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotPetsId`),
|
||||
KEY `FK_botpets_1` (`BotId`),
|
||||
CONSTRAINT `FK_botpets_1` FOREIGN KEY (`BotId`) REFERENCES `bots` (`BotID`),
|
||||
CONSTRAINT `U_botpets_1` UNIQUE (`BotId`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
|
||||
|
||||
CREATE TABLE `botpetbuffs` (
|
||||
`BotPetBuffId` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`BotPetsId` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`SpellId` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`CasterLevel` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`Duration` INT(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotPetBuffId`),
|
||||
KEY `FK_botpetbuffs_1` (`BotPetsId`),
|
||||
CONSTRAINT `FK_botpetbuffs_1` FOREIGN KEY (`BotPetsId`) REFERENCES `botpets` (`BotPetsID`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
|
||||
|
||||
CREATE TABLE `botpetinventory` (
|
||||
`BotPetInventoryId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`BotPetsId` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
`ItemId` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotPetInventoryId`),
|
||||
KEY `FK_botpetinventory_1` (`BotPetsId`),
|
||||
CONSTRAINT `FK_botpetinventory_1` FOREIGN KEY (`BotPetsId`) REFERENCES `botpets` (`BotPetsID`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
|
||||
|
||||
CREATE TABLE `botgroup` (
|
||||
`BotGroupId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`BotGroupLeaderBotId` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
`BotGroupName` VARCHAR(64) NOT NULL,
|
||||
PRIMARY KEY (`BotGroupId`),
|
||||
KEY `FK_botgroup_1` (`BotGroupLeaderBotId`),
|
||||
CONSTRAINT `FK_botgroup_1` FOREIGN KEY (`BotGroupLeaderBotId`) REFERENCES `bots` (`BotID`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE `botgroupmembers` (
|
||||
`BotGroupMemberId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`BotGroupId` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
`BotId` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotGroupMemberId`),
|
||||
KEY `FK_botgroupmembers_1` (`BotGroupId`),
|
||||
CONSTRAINT `FK_botgroupmembers_1` FOREIGN KEY (`BotGroupId`) REFERENCES `botgroup` (`BotGroupId`),
|
||||
KEY `FK_botgroupmembers_2` (`BotId`),
|
||||
CONSTRAINT `FK_botgroupmembers_2` FOREIGN KEY (`BotId`) REFERENCES `bots` (`BotID`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE `botguildmembers` (
|
||||
`char_id` INT(11) NOT NULL DEFAULT '0',
|
||||
`guild_id` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`rank` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`tribute_enable` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`total_tribute` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`last_tribute` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`banker` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`public_note` TEXT NULL,
|
||||
`alt` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`char_id`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE FUNCTION `GetMobType` (mobname VARCHAR(64)) RETURNS CHAR(1)
|
||||
BEGIN
|
||||
DECLARE Result CHAR(1);
|
||||
|
||||
SET Result = NULL;
|
||||
|
||||
IF (SELECT COUNT(*) FROM `character_` WHERE `name` = mobname) > 0 THEN
|
||||
SET Result = 'C';
|
||||
ELSEIF (SELECT COUNT(*) FROM `bots` WHERE `Name` = mobname) > 0 THEN
|
||||
SET Result = 'B';
|
||||
END IF;
|
||||
|
||||
RETURN Result;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
CREATE VIEW `vwBotCharacterMobs` AS
|
||||
SELECT _utf8'C' AS mobtype,
|
||||
c.`id`,
|
||||
c.`name`,
|
||||
c.`class`,
|
||||
c.`level`,
|
||||
c.`timelaston`,
|
||||
c.`zoneid`
|
||||
FROM `character_` AS c
|
||||
UNION ALL
|
||||
SELECT _utf8'B' AS mobtype,
|
||||
b.`BotID` AS id,
|
||||
b.`Name` AS name,
|
||||
b.`Class` AS class,
|
||||
b.`BotLevel` AS level,
|
||||
0 AS timelaston,
|
||||
0 AS zoneid
|
||||
FROM bots AS b;
|
||||
|
||||
CREATE VIEW `vwGroups` AS
|
||||
SELECT g.`groupid` AS groupid,
|
||||
GetMobType(g.`name`) AS mobtype,
|
||||
g.`name` AS name,
|
||||
g.`charid` AS mobid,
|
||||
IFNULL(c.`level`, b.`BotLevel`) AS level
|
||||
FROM `group_id` AS g
|
||||
LEFT JOIN `character_` AS c ON g.`name` = c.`name`
|
||||
LEFT JOIN `bots` AS b ON g.`name` = b.`Name`;
|
||||
|
||||
CREATE VIEW `vwBotGroups` AS
|
||||
SELECT g.`BotGroupId`,
|
||||
g.`BotGroupName`,
|
||||
g.`BotGroupLeaderBotId`,
|
||||
b.`Name` AS BotGroupLeaderName,
|
||||
b.`BotOwnerCharacterId`,
|
||||
c.`name` AS BotOwnerCharacterName
|
||||
FROM `botgroup` AS g
|
||||
JOIN `bots` AS b ON g.`BotGroupLeaderBotId` = b.`BotID`
|
||||
JOIN `character_` AS c ON b.`BotOwnerCharacterID` = c.`id`
|
||||
ORDER BY b.`BotOwnerCharacterId`, g.`BotGroupName`;
|
||||
|
||||
CREATE VIEW `vwGuildMembers` AS
|
||||
SELECT 'C' AS mobtype,
|
||||
cm.`char_id`,
|
||||
cm.`guild_id`,
|
||||
cm.`rank`,
|
||||
cm.`tribute_enable`,
|
||||
cm.`total_tribute`,
|
||||
cm.`last_tribute`,
|
||||
cm.`banker`,
|
||||
cm.`public_note`,
|
||||
cm.`alt`
|
||||
FROM `guild_members` AS cm
|
||||
UNION ALL
|
||||
SELECT 'B' AS mobtype,
|
||||
bm.`char_id`,
|
||||
bm.`guild_id`,
|
||||
bm.`rank`,
|
||||
bm.`tribute_enable`,
|
||||
bm.`total_tribute`,
|
||||
bm.`last_tribute`,
|
||||
bm.`banker`,
|
||||
bm.`public_note`,
|
||||
bm.`alt`
|
||||
FROM `botguildmembers` AS bm;
|
||||
@@ -1,21 +1,41 @@
|
||||
DROP TABLE IF EXISTS `botbuffs`;
|
||||
-- 'drop_bots' sql script file
|
||||
-- current as of 10/15/2014
|
||||
--
|
||||
-- Note: This file will revert all changes made by either 'load_bots' sql file.
|
||||
-- There may still be remnants of bot activity in tables `guild_members` and
|
||||
-- `group_id`. If these entries are causing issues, you may need to manually
|
||||
-- remove them.
|
||||
--
|
||||
-- If this script fails due to a 'SQL Error (1068): Multiple primary key defined'
|
||||
-- error, run this query: ALTER TABLE `guild_members` DROP PRIMARY KEY;
|
||||
-- and it should remove the key so this script will process in its entirety.
|
||||
|
||||
|
||||
ALTER TABLE `guild_members` ADD PRIMARY KEY (`char_id`);
|
||||
ALTER TABLE `group_id` DROP PRIMARY KEY, ADD PRIMARY KEY (`groupid`, `charid`, `ismerc`);
|
||||
|
||||
UPDATE `spawn2` SET `enabled` = 0 WHERE `id` IN (59297,59298);
|
||||
|
||||
DELETE FROM `commands` WHERE `command` = 'bot';
|
||||
DELETE FROM `rule_values` WHERE `rule_name` LIKE 'Bots%';
|
||||
|
||||
DROP VIEW IF EXISTS `vwBotCharacterMobs`;
|
||||
DROP VIEW IF EXISTS `vwBotGroups`;
|
||||
DROP VIEW IF EXISTS `vwGroups`;
|
||||
DROP VIEW IF EXISTS `vwGuildMembers`;
|
||||
|
||||
DROP FUNCTION IF EXISTS `GetMobType`;
|
||||
|
||||
DROP TABLE IF EXISTS `botguildmembers`;
|
||||
DROP TABLE IF EXISTS `botgroupmembers`;
|
||||
-- this table is not a part of 'load_bots.sql'
|
||||
DROP TABLE IF EXISTS `botgroups`;
|
||||
DROP TABLE IF EXISTS `botgroup`;
|
||||
DROP TABLE IF EXISTS `botpetinventory`;
|
||||
DROP TABLE IF EXISTS `botpetbuffs`;
|
||||
DROP TABLE IF EXISTS `botpets`;
|
||||
DROP TABLE IF EXISTS `botgroupmembers`;
|
||||
DROP TABLE IF EXISTS `botgroup`;
|
||||
DROP TABLE IF EXISTS `botgroups`;
|
||||
DROP TABLE IF EXISTS `botinventory`;
|
||||
DROP TABLE IF EXISTS `botguildmembers`;
|
||||
DROP TABLE IF EXISTS `botstances`;
|
||||
DROP TABLE IF EXISTS `botbuffs`;
|
||||
DROP TABLE IF EXISTS `bottimers`;
|
||||
DROP TABLE IF EXISTS `botstances`;
|
||||
DROP TABLE IF EXISTS `bots`;
|
||||
DROP VIEW IF EXISTS `vwGuildMembers`;
|
||||
DROP VIEW IF EXISTS `vwBotCharacterMobs`;
|
||||
DROP VIEW IF EXISTS `vwBotGroups`;
|
||||
|
||||
delete from rule_values where rule_name like 'Bots%' and ruleset_id = 1;
|
||||
|
||||
delete from commands where command = 'bot';
|
||||
|
||||
update spawn2 set enabled = 0 where id in (59297,59298);
|
||||
+252
-279
@@ -1,307 +1,280 @@
|
||||
-- This is pretty much a straight copy of the original files with fixes applied.
|
||||
-- HeidiSQL does not like sub-directory references, so this should now run from there.
|
||||
-- The 'headers' are left in place for reference only.
|
||||
-- 'load_bots' sql script file
|
||||
-- current as of 10/15/2014
|
||||
--
|
||||
-- Use this file on databases where the player profile blob has been converted.
|
||||
--
|
||||
-- Note: This file assumes a database free of bot remnants. If you have a prior
|
||||
-- bot installation and wish to reload the default schema and entries, then
|
||||
-- source 'drop_bots.sql' before sourcing this file.
|
||||
|
||||
-- FILE:
|
||||
-- source player_tables/botguildmembers.sql;
|
||||
CREATE TABLE IF NOT EXISTS `botguildmembers` (
|
||||
`char_id` int(11) NOT NULL default '0',
|
||||
`guild_id` mediumint(8) unsigned NOT NULL default '0',
|
||||
`rank` tinyint(3) unsigned NOT NULL default '0',
|
||||
`tribute_enable` tinyint(3) unsigned NOT NULL default '0',
|
||||
`total_tribute` int(10) unsigned NOT NULL default '0',
|
||||
`last_tribute` int(10) unsigned NOT NULL default '0',
|
||||
`banker` tinyint(3) unsigned NOT NULL default '0',
|
||||
`public_note` text NULL,
|
||||
`alt` tinyint(3) unsigned NOT NULL default '0',
|
||||
PRIMARY KEY (`char_id`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- FILE:
|
||||
-- source player_tables/bots.sql;
|
||||
update spawn2 set enabled = 1 where id in (59297,59298);
|
||||
ALTER TABLE `guild_members` DROP PRIMARY KEY;
|
||||
ALTER TABLE `group_id` DROP PRIMARY KEY, ADD PRIMARY KEY USING BTREE(`groupid`, `charid`, `name`, `ismerc`);
|
||||
|
||||
INSERT INTO rule_values VALUES ('1', 'Bots:BotManaRegen', '3.0', 'Adjust mana regen for bots, 1 is fast and higher numbers slow it down 3 is about the same as players.');
|
||||
INSERT INTO rule_values VALUES ('1', 'Bots:BotFinishBuffing', 'false', 'Allow for buffs to complete even if the bot caster is out of mana. Only affects buffing out of combat.');
|
||||
INSERT INTO rule_values VALUES ('1', 'Bots:CreateBotCount', '150', 'Number of bots that each account can create');
|
||||
INSERT INTO rule_values VALUES ('1', 'Bots:SpawnBotCount', '71', 'Number of bots a character can have spawned at one time, You + 71 bots is a 12 group raid');
|
||||
INSERT INTO rule_values VALUES ('1', 'Bots:BotQuest', 'false', 'Optional quest method to manage bot spawn limits using the quest_globals name bot_spawn_limit, see: /bazaar/Aediles_Thrall.pl');
|
||||
INSERT INTO rule_values VALUES ('1', 'Bots:BotGroupBuffing', 'false', 'Bots will cast single target buffs as group buffs, default is false for single. Does not make single target buffs work for MGB.');
|
||||
INSERT INTO rule_values VALUES ('1', 'Bots:BotSpellQuest', 'false', 'Anita Thrall\'s (Anita_Thrall.pl) Bot Spell Scriber quests.');
|
||||
UPDATE `spawn2` SET `enabled` = 1 WHERE `id` IN (59297,59298);
|
||||
|
||||
-- this is a hack fix to maintain the original file process
|
||||
delete from rule_values where rule_name like 'Bots%' and ruleset_id = 1;
|
||||
INSERT INTO rule_values VALUES ('1', 'Bots:BotAAExpansion', '8', 'The expansion through which bots will obtain AAs');
|
||||
|
||||
-- field count has changed
|
||||
-- old command kept for reference (`commands` now only has 2 columns - `command` and `access`)
|
||||
-- INSERT INTO `commands` VALUES ('bot', '0', 'Type \"#bot help\" to the see the list of available commands for bots.');
|
||||
INSERT INTO `commands` VALUES ('bot', '0');
|
||||
|
||||
CREATE TABLE bots (
|
||||
`BotID` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`BotOwnerCharacterID` int(10) unsigned NOT NULL,
|
||||
`BotSpellsID` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`Name` varchar(64) NOT NULL,
|
||||
`LastName` varchar(32) DEFAULT NULL,
|
||||
`BotLevel` tinyint(2) unsigned NOT NULL DEFAULT '0',
|
||||
`Race` smallint(5) NOT NULL DEFAULT '0',
|
||||
`Class` tinyint(2) NOT NULL DEFAULT '0',
|
||||
`Gender` tinyint(2) NOT NULL DEFAULT '0',
|
||||
`Size` float NOT NULL DEFAULT '0',
|
||||
`Face` int(10) NOT NULL DEFAULT '1',
|
||||
`LuclinHairStyle` int(10) NOT NULL DEFAULT '1',
|
||||
`LuclinHairColor` int(10) NOT NULL DEFAULT '1',
|
||||
`LuclinEyeColor` int(10) NOT NULL DEFAULT '1',
|
||||
`LuclinEyeColor2` int(10) NOT NULL DEFAULT '1',
|
||||
`LuclinBeardColor` int(10) NOT NULL DEFAULT '1',
|
||||
`LuclinBeard` int(10) NOT NULL DEFAULT '0',
|
||||
`DrakkinHeritage` int(10) NOT NULL DEFAULT '0',
|
||||
`DrakkinTattoo` int(10) NOT NULL DEFAULT '0',
|
||||
`DrakkinDetails` int(10) NOT NULL DEFAULT '0',
|
||||
`HP` INTEGER NOT NULL DEFAULT '0',
|
||||
`Mana` INTEGER NOT NULL DEFAULT '0',
|
||||
`MR` smallint(5) NOT NULL DEFAULT '0',
|
||||
`CR` smallint(5) NOT NULL DEFAULT '0',
|
||||
`DR` smallint(5) NOT NULL DEFAULT '0',
|
||||
`FR` smallint(5) NOT NULL DEFAULT '0',
|
||||
`PR` smallint(5) NOT NULL DEFAULT '0',
|
||||
`Corrup` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`AC` smallint(5) NOT NULL DEFAULT '0',
|
||||
`STR` mediumint(8) NOT NULL DEFAULT '75',
|
||||
`STA` mediumint(8) NOT NULL DEFAULT '75',
|
||||
`DEX` mediumint(8) NOT NULL DEFAULT '75',
|
||||
`AGI` mediumint(8) NOT NULL DEFAULT '75',
|
||||
`_INT` mediumint(8) NOT NULL DEFAULT '80',
|
||||
`WIS` mediumint(8) NOT NULL DEFAULT '75',
|
||||
`CHA` mediumint(8) NOT NULL DEFAULT '75',
|
||||
`ATK` mediumint(9) NOT NULL DEFAULT '0',
|
||||
`BotCreateDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`LastSpawnDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`TotalPlayTime` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`LastZoneId` smallint(6) NOT NULL DEFAULT '0',
|
||||
`BotInspectMessage` VARCHAR(256) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`BotID`)
|
||||
INSERT INTO `rule_values` VALUES
|
||||
('1', 'Bots:BotAAExpansion', '8', 'The expansion through which bots will obtain AAs'),
|
||||
('1', 'Bots:BotFinishBuffing', 'false', 'Allow for buffs to complete even if the bot caster is out of mana. Only affects buffing out of combat.'),
|
||||
('1', 'Bots:BotGroupBuffing', 'false', 'Bots will cast single target buffs as group buffs, default is false for single. Does not make single target buffs work for MGB.'),
|
||||
('1', 'Bots:BotManaRegen', '3.0', 'Adjust mana regen for bots, 1 is fast and higher numbers slow it down 3 is about the same as players.'),
|
||||
('1', 'Bots:BotQuest', 'false', 'Optional quest method to manage bot spawn limits using the quest_globals name bot_spawn_limit, see: /bazaar/Aediles_Thrall.pl'),
|
||||
('1', 'Bots:BotSpellQuest', 'false', 'Anita Thrall\'s (Anita_Thrall.pl) Bot Spell Scriber quests.'),
|
||||
('1', 'Bots:CreateBotCount', '150', 'Number of bots that each account can create'),
|
||||
('1', 'Bots:SpawnBotCount', '71', 'Number of bots a character can have spawned at one time, You + 71 bots is a 12 group raid');
|
||||
|
||||
CREATE TABLE `bots` (
|
||||
`BotID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`BotOwnerCharacterID` INT(10) UNSIGNED NOT NULL,
|
||||
`BotSpellsID` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`Name` VARCHAR(64) NOT NULL,
|
||||
`LastName` VARCHAR(32) DEFAULT NULL,
|
||||
`BotLevel` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`Race` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`Class` TINYINT(2) NOT NULL DEFAULT '0',
|
||||
`Gender` TINYINT(2) NOT NULL DEFAULT '0',
|
||||
`Size` FLOAT NOT NULL DEFAULT '0',
|
||||
`Face` INT(10) NOT NULL DEFAULT '1',
|
||||
`LuclinHairStyle` INT(10) NOT NULL DEFAULT '1',
|
||||
`LuclinHairColor` INT(10) NOT NULL DEFAULT '1',
|
||||
`LuclinEyeColor` INT(10) NOT NULL DEFAULT '1',
|
||||
`LuclinEyeColor2` INT(10) NOT NULL DEFAULT '1',
|
||||
`LuclinBeardColor` INT(10) NOT NULL DEFAULT '1',
|
||||
`LuclinBeard` INT(10) NOT NULL DEFAULT '0',
|
||||
`DrakkinHeritage` INT(10) NOT NULL DEFAULT '0',
|
||||
`DrakkinTattoo` INT(10) NOT NULL DEFAULT '0',
|
||||
`DrakkinDetails` INT(10) NOT NULL DEFAULT '0',
|
||||
`HP` INTEGER NOT NULL DEFAULT '0',
|
||||
`Mana` INTEGER NOT NULL DEFAULT '0',
|
||||
`MR` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`CR` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`DR` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`FR` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`PR` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`Corrup` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`AC` SMALLINT(5) NOT NULL DEFAULT '0',
|
||||
`STR` MEDIUMINT(8) NOT NULL DEFAULT '75',
|
||||
`STA` MEDIUMINT(8) NOT NULL DEFAULT '75',
|
||||
`DEX` MEDIUMINT(8) NOT NULL DEFAULT '75',
|
||||
`AGI` MEDIUMINT(8) NOT NULL DEFAULT '75',
|
||||
`_INT` MEDIUMINT(8) NOT NULL DEFAULT '80',
|
||||
`WIS` MEDIUMINT(8) NOT NULL DEFAULT '75',
|
||||
`CHA` MEDIUMINT(8) NOT NULL DEFAULT '75',
|
||||
`ATK` MEDIUMINT(9) NOT NULL DEFAULT '0',
|
||||
`BotCreateDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`LastSpawnDate` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`TotalPlayTime` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`LastZoneId` SMALLINT(6) NOT NULL DEFAULT '0',
|
||||
`BotInspectMessage` VARCHAR(256) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`BotID`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
ALTER TABLE `group_id` DROP PRIMARY KEY, ADD PRIMARY KEY USING BTREE(`groupid`, `charid`, `name`);
|
||||
ALTER TABLE `guild_members` DROP PRIMARY KEY;
|
||||
CREATE TABLE `botstances` (
|
||||
`BotID` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`StanceID` TINYINT UNSIGNED NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotID`),
|
||||
CONSTRAINT `FK_botstances_1` FOREIGN KEY (`BotID`) REFERENCES `bots` (`BotID`)
|
||||
);
|
||||
|
||||
DROP VIEW IF EXISTS `vwGuildMembers`;
|
||||
CREATE VIEW `vwGuildMembers` AS
|
||||
select 'C' as mobtype,
|
||||
cm.char_id,
|
||||
cm.guild_id,
|
||||
cm.rank,
|
||||
cm.tribute_enable,
|
||||
cm.total_tribute,
|
||||
cm.last_tribute,
|
||||
cm.banker,
|
||||
cm.public_note,
|
||||
cm.alt
|
||||
from guild_members as cm
|
||||
union all
|
||||
select 'B' as mobtype,
|
||||
bm.char_id,
|
||||
bm.guild_id,
|
||||
bm.rank,
|
||||
bm.tribute_enable,
|
||||
bm.total_tribute,
|
||||
bm.last_tribute,
|
||||
bm.banker,
|
||||
bm.public_note,
|
||||
bm.alt
|
||||
from botguildmembers as bm;
|
||||
CREATE TABLE `bottimers` (
|
||||
`BotID` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`TimerID` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`Value` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotID`),
|
||||
CONSTRAINT `FK_bottimers_1` FOREIGN KEY (`BotID`) REFERENCES `bots` (`BotID`)
|
||||
);
|
||||
|
||||
DROP VIEW IF EXISTS `vwBotCharacterMobs`;
|
||||
CREATE VIEW `vwBotCharacterMobs` AS
|
||||
select 'C' as mobtype,
|
||||
c.id,
|
||||
c.name,
|
||||
c.class,
|
||||
c.level,
|
||||
c.timelaston,
|
||||
c.zoneid
|
||||
from character_ as c
|
||||
union all
|
||||
select 'B' as mobtype,
|
||||
b.BotID as id,
|
||||
b.Name as name,
|
||||
b.Class as class,
|
||||
b.BotLevel as level,
|
||||
0 as timelaston,
|
||||
0 as zoneid
|
||||
from bots as b;
|
||||
|
||||
-- FILE:
|
||||
-- source player_tables/botpetstatepersists.sql;
|
||||
DROP TABLE IF EXISTS `botpetinventory`;
|
||||
DROP TABLE IF EXISTS `botpetbuffs`;
|
||||
DROP TABLE IF EXISTS `botpets`;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `botpets` (
|
||||
`BotPetsId` integer unsigned NOT NULL AUTO_INCREMENT,
|
||||
`PetId` integer unsigned NOT NULL DEFAULT '0',
|
||||
`BotId` integer unsigned NOT NULL DEFAULT '0',
|
||||
`Name` varchar(64) NULL,
|
||||
`Mana` integer NOT NULL DEFAULT '0',
|
||||
`HitPoints` integer NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotPetsId`),
|
||||
KEY `FK_botpets_1` (`BotId`),
|
||||
CONSTRAINT `FK_botpets_1` FOREIGN KEY (`BotId`) REFERENCES `bots` (`BotID`),
|
||||
CONSTRAINT `U_botpets_1` UNIQUE (`BotId`)
|
||||
CREATE TABLE `botbuffs` (
|
||||
`BotBuffId` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`BotId` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`SpellId` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`CasterLevel` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`DurationFormula` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`TicsRemaining` INT(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`PoisonCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`DiseaseCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`CurseCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`CorruptionCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`HitCount` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`MeleeRune` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`MagicRune` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`DeathSaveSuccessChance` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`CasterAARank` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`Persistent` TINYINT(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotBuffId`),
|
||||
KEY `FK_botbuff_1` (`BotId`),
|
||||
CONSTRAINT `FK_botbuff_1` FOREIGN KEY (`BotId`) REFERENCES `bots` (`BotID`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `botpetbuffs` (
|
||||
`BotPetBuffId` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`BotPetsId` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`SpellId` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`CasterLevel` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`Duration` int(11) unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotPetBuffId`),
|
||||
KEY `FK_botpetbuffs_1` (`BotPetsId`),
|
||||
CONSTRAINT `FK_botpetbuffs_1` FOREIGN KEY (`BotPetsId`) REFERENCES `botpets` (`BotPetsID`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `botpetinventory` (
|
||||
`BotPetInventoryId` integer unsigned NOT NULL AUTO_INCREMENT,
|
||||
`BotPetsId` integer unsigned NOT NULL DEFAULT '0',
|
||||
`ItemId` integer unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotPetInventoryId`),
|
||||
KEY `FK_botpetinventory_1` (`BotPetsId`),
|
||||
CONSTRAINT `FK_botpetinventory_1` FOREIGN KEY (`BotPetsId`) REFERENCES `botpets` (`BotPetsID`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
|
||||
|
||||
-- FILE:
|
||||
-- source player_tables/botinventory.sql;
|
||||
CREATE TABLE IF NOT EXISTS botinventory (
|
||||
BotInventoryID integer unsigned NOT NULL auto_increment,
|
||||
BotID integer unsigned NOT NULL DEFAULT '0',
|
||||
SlotID integer signed NOT NULL DEFAULT '0',
|
||||
ItemID integer unsigned NOT NULL DEFAULT '0',
|
||||
charges tinyint(3) unsigned DEFAULT 0,
|
||||
color integer unsigned NOT NULL DEFAULT 0,
|
||||
augslot1 mediumint(7) unsigned NOT NULL DEFAULT 0,
|
||||
augslot2 mediumint(7) unsigned NOT NULL DEFAULT 0,
|
||||
augslot3 mediumint(7) unsigned NOT NULL DEFAULT 0,
|
||||
augslot4 mediumint(7) unsigned NOT NULL DEFAULT 0,
|
||||
augslot5 mediumint(7) unsigned DEFAULT 0,
|
||||
instnodrop tinyint(1) unsigned NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (BotInventoryID),
|
||||
KEY FK_botinventory_1 (BotID),
|
||||
CONSTRAINT FK_botinventory_1 FOREIGN KEY (BotID) REFERENCES bots (BotID)
|
||||
CREATE TABLE `botinventory` (
|
||||
`BotInventoryID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`BotID` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
`SlotID` INTEGER SIGNED NOT NULL DEFAULT '0',
|
||||
`ItemID` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
`charges` TINYINT(3) UNSIGNED DEFAULT 0,
|
||||
`color` INTEGER UNSIGNED NOT NULL DEFAULT 0,
|
||||
`augslot1` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT 0,
|
||||
`augslot2` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT 0,
|
||||
`augslot3` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT 0,
|
||||
`augslot4` MEDIUMINT(7) UNSIGNED NOT NULL DEFAULT 0,
|
||||
`augslot5` MEDIUMINT(7) UNSIGNED DEFAULT 0,
|
||||
`instnodrop` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`BotInventoryID`),
|
||||
KEY `FK_botinventory_1` (`BotID`),
|
||||
CONSTRAINT `FK_botinventory_1` FOREIGN KEY (`BotID`) REFERENCES `bots` (`BotID`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- FILE:
|
||||
-- source player_tables/botbuffs.sql;
|
||||
DROP TABLE IF EXISTS `botbuffs`;
|
||||
CREATE TABLE `botbuffs` (
|
||||
`BotBuffId` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`BotId` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`SpellId` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`CasterLevel` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`DurationFormula` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`TicsRemaining` int(11) unsigned NOT NULL DEFAULT '0',
|
||||
`PoisonCounters` int(11) unsigned NOT NULL DEFAULT '0',
|
||||
`DiseaseCounters` int(11) unsigned NOT NULL DEFAULT '0',
|
||||
`CurseCounters` int(11) unsigned NOT NULL DEFAULT '0',
|
||||
`CorruptionCounters` INT(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`HitCount` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`MeleeRune` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`MagicRune` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`DeathSaveSuccessChance` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`CasterAARank` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`Persistent` tinyint(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotBuffId`),
|
||||
KEY `FK_botbuff_1` (`BotId`),
|
||||
CONSTRAINT `FK_botbuff_1` FOREIGN KEY (`BotId`) REFERENCES `bots` (`BotID`)
|
||||
CREATE TABLE `botpets` (
|
||||
`BotPetsId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`PetId` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
`BotId` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
`Name` VARCHAR(64) NULL,
|
||||
`Mana` INTEGER NOT NULL DEFAULT '0',
|
||||
`HitPoints` INTEGER NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotPetsId`),
|
||||
KEY `FK_botpets_1` (`BotId`),
|
||||
CONSTRAINT `FK_botpets_1` FOREIGN KEY (`BotId`) REFERENCES `bots` (`BotID`),
|
||||
CONSTRAINT `U_botpets_1` UNIQUE (`BotId`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
|
||||
|
||||
-- FILE:
|
||||
-- source player_tables/botadventuring.sql;
|
||||
CREATE TABLE `botpetbuffs` (
|
||||
`BotPetBuffId` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`BotPetsId` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`SpellId` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`CasterLevel` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`Duration` INT(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotPetBuffId`),
|
||||
KEY `FK_botpetbuffs_1` (`BotPetsId`),
|
||||
CONSTRAINT `FK_botpetbuffs_1` FOREIGN KEY (`BotPetsId`) REFERENCES `botpets` (`BotPetsID`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
|
||||
|
||||
CREATE TABLE `botpetinventory` (
|
||||
`BotPetInventoryId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`BotPetsId` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
`ItemId` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotPetInventoryId`),
|
||||
KEY `FK_botpetinventory_1` (`BotPetsId`),
|
||||
CONSTRAINT `FK_botpetinventory_1` FOREIGN KEY (`BotPetsId`) REFERENCES `botpets` (`BotPetsID`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
|
||||
|
||||
CREATE TABLE `botgroup` (
|
||||
`BotGroupId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`BotGroupLeaderBotId` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
`BotGroupName` VARCHAR(64) NOT NULL,
|
||||
PRIMARY KEY (`BotGroupId`),
|
||||
KEY `FK_botgroup_1` (`BotGroupLeaderBotId`),
|
||||
CONSTRAINT `FK_botgroup_1` FOREIGN KEY (`BotGroupLeaderBotId`) REFERENCES `bots` (`BotID`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE `botgroupmembers` (
|
||||
`BotGroupMemberId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`BotGroupId` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
`BotId` INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotGroupMemberId`),
|
||||
KEY `FK_botgroupmembers_1` (`BotGroupId`),
|
||||
CONSTRAINT `FK_botgroupmembers_1` FOREIGN KEY (`BotGroupId`) REFERENCES `botgroup` (`BotGroupId`),
|
||||
KEY `FK_botgroupmembers_2` (`BotId`),
|
||||
CONSTRAINT `FK_botgroupmembers_2` FOREIGN KEY (`BotId`) REFERENCES `bots` (`BotID`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE `botguildmembers` (
|
||||
`char_id` INT(11) NOT NULL DEFAULT '0',
|
||||
`guild_id` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`rank` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`tribute_enable` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`total_tribute` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`last_tribute` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`banker` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`public_note` TEXT NULL,
|
||||
`alt` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`char_id`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
DROP FUNCTION IF EXISTS `GetMobType` $$
|
||||
CREATE FUNCTION `GetMobType` (mobname VARCHAR(64)) RETURNS CHAR(1)
|
||||
BEGIN
|
||||
DECLARE Result CHAR(1);
|
||||
|
||||
SET Result = NULL;
|
||||
|
||||
IF (select count(*) from character_ where name = mobname) > 0 THEN
|
||||
SET Result = 'C';
|
||||
ELSEIF (select count(*) from bots where Name = mobname) > 0 THEN
|
||||
SET Result = 'B';
|
||||
END IF;
|
||||
|
||||
RETURN Result;
|
||||
END $$
|
||||
DECLARE Result CHAR(1);
|
||||
|
||||
SET Result = NULL;
|
||||
|
||||
IF (SELECT COUNT(*) FROM `character_data` WHERE `name` = mobname) > 0 THEN
|
||||
SET Result = 'C';
|
||||
ELSEIF (SELECT COUNT(*) FROM `bots` WHERE `Name` = mobname) > 0 THEN
|
||||
SET Result = 'B';
|
||||
END IF;
|
||||
|
||||
RETURN Result;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
DROP VIEW IF EXISTS `vwGroups`;
|
||||
CREATE VIEW `vwBotCharacterMobs` AS
|
||||
SELECT _utf8'C' AS mobtype,
|
||||
c.`id`,
|
||||
c.`name`,
|
||||
c.`class`,
|
||||
c.`level`,
|
||||
c.`last_login`,
|
||||
c.`zone_id`
|
||||
FROM `character_data` AS c
|
||||
UNION ALL
|
||||
SELECT _utf8'B' AS mobtype,
|
||||
b.`BotID` AS id,
|
||||
b.`Name` AS name,
|
||||
b.`Class` AS class,
|
||||
b.`BotLevel` AS level,
|
||||
0 AS timelaston,
|
||||
0 AS zoneid
|
||||
FROM bots AS b;
|
||||
|
||||
CREATE VIEW `vwGroups` AS
|
||||
select g.groupid as groupid,
|
||||
GetMobType(g.name) as mobtype,
|
||||
g.name as name,
|
||||
g.charid as mobid,
|
||||
ifnull(c.level, b.BotLevel) as level
|
||||
from group_id as g
|
||||
left join character_ as c on g.name = c.name
|
||||
left join bots as b on g.name = b.Name;
|
||||
SELECT g.`groupid` AS groupid,
|
||||
GetMobType(g.`name`) AS mobtype,
|
||||
g.`name` AS name,
|
||||
g.`charid` AS mobid,
|
||||
IFNULL(c.`level`, b.`BotLevel`) AS level
|
||||
FROM `group_id` AS g
|
||||
LEFT JOIN `character_data` AS c ON g.`name` = c.`name`
|
||||
LEFT JOIN `bots` AS b ON g.`name` = b.`Name`;
|
||||
|
||||
-- FILE:
|
||||
-- source player_tables/botgroups.sql;
|
||||
DROP TABLE IF EXISTS `botgroupmembers`;
|
||||
DROP TABLE IF EXISTS `botgroup`;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `botgroup` (
|
||||
`BotGroupId` integer unsigned NOT NULL AUTO_INCREMENT,
|
||||
`BotGroupLeaderBotId` integer unsigned NOT NULL DEFAULT '0',
|
||||
`BotGroupName` varchar(64) NOT NULL,
|
||||
PRIMARY KEY (`BotGroupId`),
|
||||
KEY FK_botgroup_1 (BotGroupLeaderBotId),
|
||||
CONSTRAINT FK_botgroup_1 FOREIGN KEY (BotGroupLeaderBotId) REFERENCES bots (BotID)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `botgroupmembers` (
|
||||
`BotGroupMemberId` integer unsigned NOT NULL AUTO_INCREMENT,
|
||||
`BotGroupId` integer unsigned NOT NULL DEFAULT '0',
|
||||
`BotId` integer unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`BotGroupMemberId`),
|
||||
KEY FK_botgroupmembers_1 (BotGroupId),
|
||||
CONSTRAINT FK_botgroupmembers_1 FOREIGN KEY (BotGroupId) REFERENCES botgroup (BotGroupId),
|
||||
KEY FK_botgroupmembers_2 (BotId),
|
||||
CONSTRAINT FK_botgroupmembers_2 FOREIGN KEY (BotId) REFERENCES bots (BotID)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
DROP VIEW IF EXISTS `vwBotGroups`;
|
||||
CREATE VIEW `vwBotGroups` AS
|
||||
select g.BotGroupId,
|
||||
g.BotGroupName,
|
||||
g.BotGroupLeaderBotId,
|
||||
b.Name as BotGroupLeaderName,
|
||||
b.BotOwnerCharacterId,
|
||||
c.name as BotOwnerCharacterName
|
||||
from botgroup as g
|
||||
join bots as b on g.BotGroupLeaderBotId = b.BotID
|
||||
join character_ as c on b.BotOwnerCharacterID = c.id
|
||||
order by b.BotOwnerCharacterId, g.BotGroupName;
|
||||
SELECT g.`BotGroupId`,
|
||||
g.`BotGroupName`,
|
||||
g.`BotGroupLeaderBotId`,
|
||||
b.`Name` AS BotGroupLeaderName,
|
||||
b.`BotOwnerCharacterId`,
|
||||
c.`name` AS BotOwnerCharacterName
|
||||
FROM `botgroup` AS g
|
||||
JOIN `bots` AS b ON g.`BotGroupLeaderBotId` = b.`BotID`
|
||||
JOIN `character_data` AS c ON b.`BotOwnerCharacterID` = c.`id`
|
||||
ORDER BY b.`BotOwnerCharacterId`, g.`BotGroupName`;
|
||||
|
||||
-- FILE:
|
||||
-- source player_tables/botstances.sql;
|
||||
CREATE TABLE botstances (
|
||||
BotID int(10) unsigned NOT NULL default '0',
|
||||
StanceID tinyint unsigned NOT NULL default '0',
|
||||
PRIMARY KEY (BotID),
|
||||
CONSTRAINT FK_botstances_1 FOREIGN KEY (BotID) REFERENCES bots (BotID)
|
||||
);
|
||||
|
||||
-- FILE:
|
||||
-- source player_tables/bottimers.sql;
|
||||
CREATE TABLE bottimers (
|
||||
BotID int(10) unsigned NOT NULL default '0',
|
||||
TimerID int(10) unsigned NOT NULL default '0',
|
||||
Value int(10) unsigned NOT NULL default '0',
|
||||
PRIMARY KEY (BotID),
|
||||
CONSTRAINT FK_bottimers_1 FOREIGN KEY (BotID) REFERENCES bots (BotID)
|
||||
)
|
||||
CREATE VIEW `vwGuildMembers` AS
|
||||
SELECT 'C' AS mobtype,
|
||||
cm.`char_id`,
|
||||
cm.`guild_id`,
|
||||
cm.`rank`,
|
||||
cm.`tribute_enable`,
|
||||
cm.`total_tribute`,
|
||||
cm.`last_tribute`,
|
||||
cm.`banker`,
|
||||
cm.`public_note`,
|
||||
cm.`alt`
|
||||
FROM `guild_members` AS cm
|
||||
UNION ALL
|
||||
SELECT 'B' AS mobtype,
|
||||
bm.`char_id`,
|
||||
bm.`guild_id`,
|
||||
bm.`rank`,
|
||||
bm.`tribute_enable`,
|
||||
bm.`total_tribute`,
|
||||
bm.`last_tribute`,
|
||||
bm.`banker`,
|
||||
bm.`public_note`,
|
||||
bm.`alt`
|
||||
FROM `botguildmembers` AS bm;
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
-- Fix Salvage
|
||||
UPDATE `aa_effects` SET `effectid` = '331' WHERE `aaid` IN (997, 998, 999);
|
||||
-- Rapid Strikes missing entries
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('818', '1', '279', '17', '0');
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('819', '1', '279', '19', '0');
|
||||
-- Secondary Forte fixes client side display issues
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('691', '1', '248', '100', '0');
|
||||
-- Packrat this is what live uses
|
||||
UPDATE `aa_effects` SET `base1` = '3' WHERE `aaid` = 678;
|
||||
UPDATE `aa_effects` SET `base1` = '6' WHERE `aaid` = 679;
|
||||
UPDATE `aa_effects` SET `base1` = '9' WHERE `aaid` = 680;
|
||||
UPDATE `aa_effects` SET `base1` = '12' WHERE `aaid` = 681;
|
||||
UPDATE `aa_effects` SET `base1` = '15' WHERE `aaid` = 682;
|
||||
@@ -0,0 +1,2 @@
|
||||
INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Zone:EnableLoggedOffReplenishments', 'true', 'Replenish mana/hp/end if logged off for MinOfflineTimeToReplenishments');
|
||||
INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Zone:MinOfflineTimeToReplenishments', '21600', 'Minimum logged off time to trigger replenish mana/hp/end');
|
||||
@@ -0,0 +1,4 @@
|
||||
INSERT INTO altadv_vars SET skill_id="4698", name="Quick Draw", cost="5", max_level="1", hotkey_sid="4294967295", hotkey_sid2="4294967295", title_sid="4698", desc_sid="4698", type="1", spellid="4294967295", prereq_skill="0", prereq_minpoints="0", spell_type="0", spell_refresh="0", class_type="51", cost_inc="0", aa_expansion="12", special_category="4294967295", sof_type="1", sof_cost_inc="0", sof_max_level="2", sof_next_skill="4698", clientver="4", account_time_required="0", sof_current_level="0", sof_next_id="6545", level_inc="0", classes="65534", berserker="1";
|
||||
INSERT INTO aa_effects SET aaid=4698, slot=1, effectid=362, base1=1, base2=0;
|
||||
INSERT INTO altadv_vars SET skill_id="6545", name="Quick Draw II", cost="5", max_level="1", hotkey_sid="4294967295", hotkey_sid2="4294967295", title_sid="4698", desc_sid="4698", type="1", spellid="4294967295", prereq_skill="4698", prereq_minpoints="1", spell_type="0", spell_refresh="0", class_type="56", cost_inc="0", aa_expansion="14", special_category="4294967295", sof_type="1", sof_cost_inc="0", sof_max_level="2", sof_next_skill="4698", clientver="5", account_time_required="0", sof_current_level="1", sof_next_id="0", level_inc="0", classes="65534", berserker="1";
|
||||
INSERT INTO aa_effects SET aaid=6545, slot=1, effectid=362, base1=1, base2=0;
|
||||
@@ -0,0 +1 @@
|
||||
INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Client:UseLiveFactionMessage', 'false', 'Allow players to see faction adjustments like Live.');
|
||||
@@ -0,0 +1 @@
|
||||
INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Spells:SwarmPetTargetLock', 'false', 'Use old method of swarm pet AI, where they lock onto a set target then depop when target is dead.');
|
||||
@@ -0,0 +1 @@
|
||||
INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'NPC:EnableMeritBasedFaction', 'false', 'If set to true, faction will be given in the same way as experience (solo/group/raid).');
|
||||
@@ -0,0 +1,3 @@
|
||||
/* Optional Transformation Rules */
|
||||
INSERT INTO `rule_values` VALUES (1, 'Inventory:DeleteTransformationMold', 'true', 'false to keep transformation mold forever');
|
||||
INSERT INTO `rule_values` VALUES (1, 'Inventory:AllowAnyWeaponTransformation', 'false', 'True allows any MELEE weapon to use the other melee type transformatios');
|
||||
@@ -0,0 +1 @@
|
||||
INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Combat:ProjectileDmgOnImpact', 'true', 'If enabled, projectiles (ie arrows) will hit on impact, instead of instantly.');
|
||||
@@ -0,0 +1,2 @@
|
||||
INSERT INTO `commands` (`command`, `access`) VALUES ('heromodel', 80);
|
||||
INSERT INTO `commands` (`command`, `access`) VALUES ('hm', 80);
|
||||
@@ -0,0 +1,2 @@
|
||||
INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Spells:NPC_UseFocusFromSpells', 'true', 'Allow npcs to use most spell buff derived focus effects.');
|
||||
INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Spells:NPC_UseFocusFromItems', 'false', 'Allow npcs to use most item derived focus effects.');
|
||||
@@ -0,0 +1,5 @@
|
||||
-- 'greater lightstone' light level on 'wisp' race
|
||||
UPDATE `npc_types` SET `light` = 11 WHERE `race` = 69;
|
||||
|
||||
-- 'fire beetle eye' light level on 'beetle' race with name criteria
|
||||
UPDATE `npc_types` SET `light` = 12 WHERE `race` = 22 AND (`name` LIKE '%fire%' OR `name` LIKE '%lava%');
|
||||
@@ -0,0 +1,30 @@
|
||||
DELIMITER $$
|
||||
|
||||
CREATE PROCEDURE `MyFaction`(charname text)
|
||||
BEGIN
|
||||
declare class_mod text default "";
|
||||
declare race_mod text default "";
|
||||
declare deity_mod text default "";
|
||||
|
||||
select class into class_mod from character_data where name = charname;
|
||||
select race into race_mod from character_data where name = charname;
|
||||
select deity into deity_mod from character_data where name = charname;
|
||||
select concat("c", class_mod) into class_mod;
|
||||
select concat("r", race_mod) into race_mod;
|
||||
select concat("d", deity_mod) into deity_mod;
|
||||
|
||||
set @class_bump := 0;
|
||||
set @race_bump := 0;
|
||||
set @deity_bump := 0;
|
||||
|
||||
SELECT race_mod as R, class_mod as C, deity_mod as D, f.name as faction, f.id, v.current_value, f.base as "START",
|
||||
@class_bump := IFNULL((select m.mod from faction_list_mod m where faction_id = f.id && class_mod != "" && mod_name = class_mod),0) as class_bump,
|
||||
@race_bump := IFNULL((select m.mod from faction_list_mod m where faction_id = f.id && race_mod != "" && mod_name = race_mod),0) as race_bump,
|
||||
@deity_bump := IFNULL((select m.mod from faction_list_mod m where faction_id = f.id && race_mod != "" && mod_name = deity_mod),0) as deity_bump,
|
||||
v.current_value + f.base + @class_bump + @race_bump + @deity_bump as TOTAL
|
||||
FROM faction_values v
|
||||
inner join faction_list f on f.id = v.faction_id
|
||||
where v.char_id = (select id from character_data where name=charname) ;
|
||||
END $$
|
||||
|
||||
DELIMITER ;
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,50 @@
|
||||
-- Updates live pets who should be type (5) - Pet locks onto target until dead.
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "WizSwarmSword99Rk3";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "WizSwarmSword99Rk2";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "WizSwarmSword99Rk1";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "WizSwarmSword94Rk3";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "WizSwarmSword94Rk2";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "WizSwarmSword94Rk1";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "WizSwarmSword89Rk3";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "WizSwarmSword89Rk2";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "WizSwarmSword89Rk1";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "wizard_sword_84_Rk3";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "wizard_sword_84_Rk2";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "wizard_sword_84_Rk1";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "wizard_sword_79_Rk3";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "wizard_sword_79_Rk2";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "wizard_sword_79_Rk1";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "wizard_sword_74_";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "wizard_sword_67_";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "SumSword";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "SUMHammer4";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "SUMHammer3";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "SUMHammer2";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "SUMHammer1";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "SumHammer";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "Burnout";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "SumSword";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "SumHammer";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_67_";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_73_";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_73_Rk1";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_73_Rk2";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_73_Rk3";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_78_Rk1";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_78_Rk2";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_78_Rk3";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_83_Rk1";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_83_Rk2";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_83_Rk3";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "wizard_sword_84_Rk1";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "wizard_sword_84_Rk2";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "wizard_sword_84_Rk3";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_88_Rk1";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_88_Rk2";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_88_Rk3";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_94_Rk1";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_94_Rk2";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_94_Rk3";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_99_Rk1";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_99_Rk2";
|
||||
UPDATE pets SET petcontrol = 5 WHERE type LIKE "cleric_hammer_99_Rk3";
|
||||
@@ -1,4 +1,5 @@
|
||||
ALTER TABLE `npc_types` ADD COLUMN `special_abilities` TEXT NOT NULL DEFAULT '' AFTER `npcspecialattks`;
|
||||
ALTER TABLE `npc_types` ADD COLUMN `special_abilities` TEXT NULL AFTER `npcspecialattks`;
|
||||
ALTER TABLE `npc_types` MODIFY COLUMN `special_abilities` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL;
|
||||
|
||||
UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "1,1^") WHERE npcspecialattks LIKE BINARY '%S%';
|
||||
UPDATE npc_types SET special_abilities = CONCAT(special_abilities, "2,1^") WHERE npcspecialattks LIKE BINARY '%E%';
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
ALTER TABLE `merc_stats` ADD COLUMN `special_abilities` TEXT NOT NULL DEFAULT '' AFTER `specialattks`;
|
||||
|
||||
ALTER TABLE `merc_stats` ADD COLUMN `special_abilities` TEXT NULL AFTER `specialattks`;
|
||||
ALTER TABLE `merc_stats` MODIFY COLUMN `special_abilities` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL;
|
||||
|
||||
UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "1,1^") WHERE specialattks LIKE BINARY '%S%';
|
||||
UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "2,1^") WHERE specialattks LIKE BINARY '%E%';
|
||||
UPDATE merc_stats SET special_abilities = CONCAT(special_abilities, "3,1^") WHERE specialattks LIKE BINARY '%R%';
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
-- AA MGB update
|
||||
UPDATE altadv_vars SET spellid = 5228 WHERE skill_id = 128;
|
||||
UPDATE aa_actions SET spell_id = 5228, nonspell_action = 0 WHERE aaid = 128;
|
||||
|
||||
-- AA Project Illusion update
|
||||
UPDATE altadv_vars SET spellid = 5227 WHERE skill_id = 643;
|
||||
UPDATE aa_actions SET spell_id = 5227, nonspell_action = 0 WHERE aaid = 643;
|
||||
|
||||
-- AA Improved Reclaim Energy
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('180', '1', '241', '95', '0');
|
||||
|
||||
-- AA Headshot
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('644', '1', '217', '0', '32000');
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('644', '2', '346', '46', '0');
|
||||
|
||||
-- AA Anatomy (Rogue Assassinate)
|
||||
INSERT INTO `altadv_vars` (`skill_id`, `name`, `cost`, `max_level`, `hotkey_sid`, `hotkey_sid2`, `title_sid`, `desc_sid`, `type`, `spellid`, `prereq_skill`, `prereq_minpoints`, `spell_type`, `spell_refresh`, `classes`, `berserker`, `class_type`, `cost_inc`, `aa_expansion`, `special_category`, `sof_type`, `sof_cost_inc`, `sof_max_level`, `sof_next_skill`, `clientver`, `account_time_required`, `sof_current_level`,`sof_next_id`,`level_inc`) VALUES ('1604', 'Anatomy', '5', '3', '4294967295', '4294967295', '1604', '1604', '1', '4294967295', '0', '0', '0', '0', '512', '0', '60', '1', '10', '4294967295', '3', '0', '3', '1604', '1', '0', '0', '0', '0');
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('1604', '1', '439', '0', '32000');
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('1604', '2', '345', '48', '0');
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('1605', '1', '439', '0', '32000');
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('1605', '2', '345', '51', '0');
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('1606', '1', '439', '0', '32000');
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('1606', '2', '345', '53', '0');
|
||||
|
||||
-- AA Finishing Blow Fix
|
||||
DELETE FROM aa_effects WHERE aaid = 199 AND slot = 2;
|
||||
DELETE FROM aa_effects WHERE aaid = 200 AND slot = 2;
|
||||
DELETE FROM aa_effects WHERE aaid = 201 AND slot = 2;
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('119', '1', '278', '500', '32000');
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('119', '2', '440', '50', '200');
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('120', '1', '278', '500', '32000');
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('120', '2', '440', '52', '200');
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('121', '1', '278', '500', '32000');
|
||||
INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('121', '2', '440', '54', '200');
|
||||
@@ -1 +1 @@
|
||||
ALTER TABLE `account` ADD COLUMN `ban_reason` TEXT NULL DEFAULT NULL AFTER `expansion`, ADD COLUMN `suspend_reason` TEXT NULL DEFAULT NULL AFTER `ban_reason`;
|
||||
ALTER TABLE `account` ADD COLUMN `ban_reason` TEXT NULL DEFAULT NULL, ADD COLUMN `suspend_reason` TEXT NULL DEFAULT NULL AFTER `ban_reason`;
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE `raid_details` ADD `motd` varchar(1024);
|
||||
@@ -0,0 +1,9 @@
|
||||
CREATE TABLE `raid_leaders` (
|
||||
`gid` int(4) unsigned NOT NULL,
|
||||
`rid` int(4) unsigned NOT NULL,
|
||||
`marknpc` varchar(64) NOT NULL,
|
||||
`maintank` varchar(64) NOT NULL,
|
||||
`assist` varchar(64) NOT NULL,
|
||||
`puller` varchar(64) NOT NULL,
|
||||
`leadershipaa` tinyblob NOT NULL
|
||||
);
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE `group_leaders` ADD `mentoree` VARCHAR(64) NOT NULL;
|
||||
ALTER TABLE `group_leaders` ADD `mentor_percent` INT(4) DEFAULT 0 NOT NULL;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE `raid_leaders` ADD `mentoree` VARCHAR(64) NOT NULL;
|
||||
ALTER TABLE `raid_leaders` ADD `mentor_percent` INT(4) DEFAULT 0 NOT NULL;
|
||||
@@ -0,0 +1,4 @@
|
||||
ALTER TABLE `merc_stats` MODIFY COLUMN `special_abilities` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL;
|
||||
|
||||
ALTER TABLE `npc_types` MODIFY COLUMN `special_abilities` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL;
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE `raid_members` CHANGE COLUMN `groupid` `groupid` INT(4) UNSIGNED NOT NULL DEFAULT '0' AFTER `charid`;
|
||||
@@ -0,0 +1,9 @@
|
||||
-- spells new table update
|
||||
ALTER TABLE `spells_new` CHANGE `field124` `disallow_sit` INT(11) NOT NULL DEFAULT '0';
|
||||
ALTER TABLE `spells_new` CHANGE `field125` `deities0` INT(11) NOT NULL DEFAULT '0';
|
||||
ALTER TABLE `spells_new` CHANGE `field196` `sneaking` INT(11) NOT NULL DEFAULT '0';
|
||||
ALTER TABLE `spells_new` CHANGE `field158` `effectdescnum2` INT(11) NOT NULL DEFAULT '0';
|
||||
ALTER TABLE `spells_new` CHANGE `field165` `ldon_trap` INT(11) NOT NULL DEFAULT '0';
|
||||
ALTER TABLE `spells_new` CHANGE `field205` `no_block` INT(11) NOT NULL DEFAULT '0';
|
||||
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
-- Inventory table update
|
||||
ALTER TABLE `inventory`
|
||||
ADD COLUMN `ornamenticon` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `custom_data`,
|
||||
ADD COLUMN `ornamentidfile` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `ornamenticon`;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE `mercs` ADD `MercSize` float( 0 ) NOT NULL DEFAULT '5' AFTER `Gender`;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE `items` ADD `herosforgemodel` int( 11 ) NOT NULL DEFAULT '0' AFTER `material`;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE `inventory` ADD `ornament_hero_model` int( 11 ) NOT NULL DEFAULT '0' AFTER `ornamentidfile`;
|
||||
@@ -0,0 +1,16 @@
|
||||
/* Add the new Aug Slot 6 Fields to the items table */
|
||||
ALTER TABLE `items` ADD `augslot6type` tinyint( 3 ) NOT NULL DEFAULT '0' AFTER `augslot5visible`;
|
||||
ALTER TABLE `items` ADD `augslot6visible` tinyint( 3 ) NOT NULL DEFAULT '0' AFTER `augslot6type`;
|
||||
ALTER TABLE `items` ADD `augslot6unk2` int( 11 ) NOT NULL DEFAULT '0' AFTER `augslot5unk2`;
|
||||
|
||||
/* Add the new Aug Slot 6 Field to the inventory table */
|
||||
ALTER TABLE `inventory` ADD `augslot6` mediumint( 7 ) NOT NULL DEFAULT '0' AFTER `augslot5`;
|
||||
|
||||
/* Add the new Aug Slot 6 Field to the sharedbank table */
|
||||
ALTER TABLE `sharedbank` ADD `augslot6` mediumint( 7 ) NOT NULL DEFAULT '0' AFTER `augslot5`;
|
||||
|
||||
/* Add the new Aug Slot 6 Field to the object_contents table */
|
||||
ALTER TABLE `object_contents` ADD `augslot6` mediumint( 7 ) NOT NULL DEFAULT '0' AFTER `augslot5`;
|
||||
|
||||
/* Add the new Aug Slot 6 Field to the sharedbank table */
|
||||
ALTER TABLE `character_corpse_items` ADD `aug_6` int( 11 ) NOT NULL DEFAULT '0' AFTER `aug_5`;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE `npc_types` ADD `herosforgemodel` int( 11 ) NOT NULL DEFAULT '0' AFTER `helmtexture`;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE `npc_types` CHANGE `d_meele_texture1` `d_melee_texture1` INT(11) DEFAULT NULL;
|
||||
ALTER TABLE `npc_types` CHANGE `d_meele_texture2` `d_melee_texture2` INT(11) DEFAULT NULL;
|
||||
@@ -0,0 +1,69 @@
|
||||
/* Drop the current Merc View */
|
||||
DROP VIEW vwMercNpcTypes;
|
||||
|
||||
/* Rename fields to match the source changes */
|
||||
ALTER TABLE `merc_weaponinfo` CHANGE `d_meele_texture1` `d_melee_texture1` INT(11) NOT NULL DEFAULT 0;
|
||||
ALTER TABLE `merc_weaponinfo` CHANGE `d_meele_texture2` `d_melee_texture2` INT(11) NOT NULL DEFAULT 0;
|
||||
|
||||
/* Re-Create the Merc View with new field names */
|
||||
CREATE VIEW vwMercNpcTypes AS
|
||||
SELECT
|
||||
ms.merc_npc_type_id,
|
||||
'' AS name,
|
||||
ms.clientlevel,
|
||||
ms.level,
|
||||
mtyp.race_id,
|
||||
mstyp.class_id,
|
||||
ms.hp,
|
||||
ms.mana,
|
||||
0 AS gender,
|
||||
mai.texture,
|
||||
mai.helmtexture,
|
||||
ms.attack_speed,
|
||||
ms.STR,
|
||||
ms.STA,
|
||||
ms.DEX,
|
||||
ms.AGI,
|
||||
ms._INT,
|
||||
ms.WIS,
|
||||
ms.CHA,
|
||||
ms.MR,
|
||||
ms.CR,
|
||||
ms.DR,
|
||||
ms.FR,
|
||||
ms.PR,
|
||||
ms.Corrup,
|
||||
ms.mindmg,
|
||||
ms.maxdmg,
|
||||
ms.attack_count,
|
||||
ms.special_abilities AS special_abilities,
|
||||
mwi.d_melee_texture1,
|
||||
mwi.d_melee_texture2,
|
||||
mwi.prim_melee_type,
|
||||
mwi.sec_melee_type,
|
||||
ms.runspeed,
|
||||
ms.hp_regen_rate,
|
||||
ms.mana_regen_rate,
|
||||
1 AS bodytype,
|
||||
mai.armortint_id,
|
||||
mai.armortint_red,
|
||||
mai.armortint_green,
|
||||
mai.armortint_blue,
|
||||
ms.AC,
|
||||
ms.ATK,
|
||||
ms.Accuracy,
|
||||
ms.spellscale,
|
||||
ms.healscale
|
||||
FROM merc_stats ms
|
||||
INNER JOIN merc_armorinfo mai
|
||||
ON ms.merc_npc_type_id = mai.merc_npc_type_id
|
||||
AND mai.minlevel <= ms.level AND mai.maxlevel >= ms.level
|
||||
INNER JOIN merc_weaponinfo mwi
|
||||
ON ms.merc_npc_type_id = mwi.merc_npc_type_id
|
||||
AND mwi.minlevel <= ms.level AND mwi.maxlevel >= ms.level
|
||||
INNER JOIN merc_templates mtem
|
||||
ON mtem.merc_npc_type_id = ms.merc_npc_type_id
|
||||
INNER JOIN merc_types mtyp
|
||||
ON mtem.merc_type_id = mtyp.merc_type_id
|
||||
INNER JOIN merc_subtypes mstyp
|
||||
ON mtem.merc_subtype_id = mstyp.merc_subtype_id;
|
||||
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE `npc_types` MODIFY `bodytype` INT(11) NOT NULL DEFAULT '1';
|
||||
ALTER TABLE `npc_types` MODIFY `d_melee_texture1` INT(11) NOT NULL DEFAULT '0';
|
||||
ALTER TABLE `npc_types` MODIFY `d_melee_texture2` INT(11) NOT NULL DEFAULT '0';
|
||||
@@ -0,0 +1,54 @@
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for logsys_categories
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `logsys_categories`;
|
||||
CREATE TABLE `logsys_categories` (
|
||||
`log_category_id` int(11) NOT NULL,
|
||||
`log_category_description` varchar(150) DEFAULT NULL,
|
||||
`log_to_console` smallint(11) DEFAULT '0',
|
||||
`log_to_file` smallint(11) DEFAULT '0',
|
||||
`log_to_gmsay` smallint(11) DEFAULT '0',
|
||||
PRIMARY KEY (`log_category_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of logsys_categories
|
||||
-- ----------------------------
|
||||
INSERT INTO `logsys_categories` VALUES ('1', 'AA', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('2', 'AI', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('3', 'Aggro', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('4', 'Attack', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('5', 'Client_Server_Packet', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('6', 'Combat', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('7', 'Commands', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('8', 'Crash', '1', '1', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('9', 'Debug', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('10', 'Doors', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('11', 'Error', '1', '1', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('12', 'Guilds', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('13', 'Inventory', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('14', 'Launcher', '1', '1', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('15', 'Netcode', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('16', 'Normal', '1', '1', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('17', 'Object', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('18', 'Pathing', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('19', 'QS_Server', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('20', 'Quests', '1', '1', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('21', 'Rules', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('22', 'Skills', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('23', 'Spawns', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('24', 'Spells', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('25', 'Status', '1', '1', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('26', 'TCP_Connection', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('27', 'Tasks', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('28', 'Tradeskills', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('29', 'Trading', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('30', 'Tribute', '0', '0', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('31', 'UCS_Server', '1', '1', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('32', 'WebInterface_Server', '1', '1', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('33', 'World_Server', '1', '1', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('34', 'Zone Server', '1', '1', '0');
|
||||
INSERT INTO `logsys_categories` VALUES ('35', 'MySQL Error', '1', '1', '1');
|
||||
INSERT INTO `logsys_categories` VALUES ('36', 'MySQL Queries', '0', '0', '0');
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE `npc_types` ADD `light` tinyint( 2 ) NOT NULL DEFAULT '0';
|
||||
@@ -0,0 +1 @@
|
||||
INSERT INTO `logsys_categories` (`log_category_id`,`log_category_description`,`log_to_console`,`log_to_file`,`log_to_gmsay`) VALUES ('37', 'Mercenaries', '0', '0', '0');
|
||||
@@ -0,0 +1 @@
|
||||
INSERT INTO `logsys_categories` (`log_category_id`, `log_category_description`, `log_to_gmsay`) VALUES ('38', 'Quest Debug', '1');
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE `merc_stats` ADD `statscale` int( 11 ) NOT NULL DEFAULT '100' AFTER `runspeed`;
|
||||
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE `merc_stats` ADD `attack_delay` TINYINT(3) UNSIGNED DEFAULT '30' NOT NULL AFTER `attack_speed`;
|
||||
UPDATE `merc_stats` SET `attack_delay` = 36 + 36 * (`attack_speed` / 100);
|
||||
UPDATE `merc_stats` SET `attack_delay` = 30 WHERE `attack_speed` = 0;
|
||||
@@ -0,0 +1,7 @@
|
||||
CREATE TABLE `character_item_recast` (
|
||||
`id` int(11) UNSIGNED NOT NULL DEFAULT 0,
|
||||
`recast_type` smallint(11) UNSIGNED NOT NULL DEFAULT 0,
|
||||
`timestamp` int(11) UNSIGNED NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY(`id`, `recast_type`),
|
||||
KEY `id` (`id`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = latin1;
|
||||
@@ -0,0 +1,3 @@
|
||||
REPLACE INTO `logsys_categories` (`log_category_id`, `log_category_description`) VALUES ('39', 'Packet: Server -> Client');
|
||||
REPLACE INTO `logsys_categories` (`log_category_id`, `log_category_description`) VALUES ('5', 'Packet: Client -> Server');
|
||||
REPLACE INTO `logsys_categories` (`log_category_id`, `log_category_description`) VALUES ('40', 'Packet: Client -> Server Unhandled');
|
||||
@@ -0,0 +1,2 @@
|
||||
REPLACE INTO `logsys_categories` (`log_category_id`, `log_category_description`) VALUES ('41', 'Packet: Server -> Client With Dump');
|
||||
REPLACE INTO `logsys_categories` (`log_category_id`, `log_category_description`) VALUES ('42', 'Packet: Server -> Client With Dump');
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE `loottable` CHANGE COLUMN `avgcoin` `avgcoin` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `maxcash`;
|
||||
UPDATE `loottable` SET avgcoin = 0;
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user