--- deliantra/server/socket/request.C 2007/03/04 19:36:12 1.68 +++ deliantra/server/socket/request.C 2007/03/11 02:12:45 1.69 @@ -1110,7 +1110,7 @@ sl << uint32 (pl->ob->count) << uint32 (weight) - << uint32 (pl->ob->face->number) + << uint32 (pl->ob->face) << data8 (pl->ob->name); pl->ns->last_weight = weight; @@ -1218,7 +1218,7 @@ short face_num; if (heads[(ay * MAX_HEAD_POS + ax) * MAX_LAYERS + layer]) - face_num = heads[(ay * MAX_HEAD_POS + ax) * MAX_LAYERS + layer]->face->number; + face_num = heads[(ay * MAX_HEAD_POS + ax) * MAX_LAYERS + layer]->face; else face_num = 0; @@ -1313,7 +1313,7 @@ else if (head) { /* if this is a head that had previously been stored */ - face_num = ob->face->number; + face_num = ob->face; } else { @@ -1365,7 +1365,7 @@ */ else if (bx == sx && by == sy) { - face_num = ob->face->number; + face_num = ob->face; /* if this face matches one stored away, clear that one away. * this code relies on the fact that the map1 commands @@ -1373,7 +1373,7 @@ */ for (i = 0; i < MAP_LAYERS; i++) if (heads[(sy * MAX_HEAD_POS + sx) * MAX_LAYERS + i] && - heads[(sy * MAX_HEAD_POS + sx) * MAX_LAYERS + i]->face->number == face_num) + heads[(sy * MAX_HEAD_POS + sx) * MAX_LAYERS + i]->face == face_num) heads[(sy * MAX_HEAD_POS + sx) * MAX_LAYERS + i] = NULL; } else @@ -1382,10 +1382,10 @@ * there can be cases where a object is on multiple layers - * we only want to send it once. */ - face_num = head->face->number; + face_num = head->face; for (i = 0; i < MAP_LAYERS; i++) if (heads[(by * MAX_HEAD_POS + bx) * MAX_LAYERS + i] && - heads[(by * MAX_HEAD_POS + bx) * MAX_LAYERS + i]->face->number == face_num) + heads[(by * MAX_HEAD_POS + bx) * MAX_LAYERS + i]->face == face_num) heads[(by * MAX_HEAD_POS + bx) * MAX_LAYERS + i] = NULL; /* First, try to put the new head on the same layer. If that is used up, @@ -1412,12 +1412,12 @@ /* In this case, we are already at the lower right or single part object, * so nothing special */ - face_num = ob->face->number; + face_num = ob->face; /* clear out any head entries that have the same face as this one */ for (bx = 0; bx < layer; bx++) if (heads[(sy * MAX_HEAD_POS + sx) * MAX_LAYERS + bx] && - heads[(sy * MAX_HEAD_POS + sx) * MAX_LAYERS + bx]->face->number == face_num) + heads[(sy * MAX_HEAD_POS + sx) * MAX_LAYERS + bx]->face == face_num) heads[(sy * MAX_HEAD_POS + sx) * MAX_LAYERS + bx] = NULL; } } /* else not already head object or blank face */ @@ -1431,7 +1431,7 @@ */ if (!face_num && layer > 0 && heads[(sy * MAX_HEAD_POS + sx) * MAX_LAYERS + layer - 1]) { - face_num = heads[(sy * MAX_HEAD_POS + sx) * MAX_LAYERS + layer - 1]->face->number; + face_num = heads[(sy * MAX_HEAD_POS + sx) * MAX_LAYERS + layer - 1]->face; heads[(sy * MAX_HEAD_POS + sx) * MAX_LAYERS + layer - 1] = NULL; } @@ -1494,8 +1494,8 @@ else { smoothlevel = ob->smoothlevel; - if (smoothlevel && !(ns.faces_sent[ob->face->number] & NS_FACESENT_SMOOTH)) - SendSmooth (&ns, ob->face->number); + if (smoothlevel && !(ns.faces_sent[ob->face] & NS_FACESENT_SMOOTH)) + SendSmooth (&ns, ob->face); } /* else not already head object or blank face */ /* We've gotten what face we want to use for the object. Now see if @@ -1905,15 +1905,15 @@ if (nx == pl->x && ny == pl->y && pl->invisible & (pl->invisible < 50 ? 4 : 1)) { - if (lastcell.faces[0] != pl->face->number) + if (lastcell.faces[0] != pl->face) { - lastcell.faces[0] = pl->face->number; + lastcell.faces[0] = pl->face; mask |= 0x1; - if (!(socket.faces_sent[pl->face->number] & NS_FACESENT_FACE)) - esrv_send_face (&socket, pl->face->number, 0); + if (!(socket.faces_sent[pl->face] & NS_FACESENT_FACE)) + esrv_send_face (&socket, pl->face, 0); - sl << uint16 (pl->face->number); + sl << uint16 (pl->face); } } else @@ -2191,6 +2191,13 @@ } } + // spells better have a face + if (!spell->face) + { + LOG (llevError, "%s: spell has no face, but face is mandatory.\n", &spell->name); + spell->face = face_find ("burnout.x11", blank_face); + } + /* send the current values */ sl << uint32 (spell->count) << uint16 (spell->level) @@ -2200,7 +2207,7 @@ << uint16 (spell->last_eat) << uint8 (skill) << uint32 (spell->path_attuned) - << uint32 (spell->face ? spell->face->number : 0) + << uint32 (spell->face) << data8 (spell->name) << data16 (spell->msg); } @@ -2225,7 +2232,7 @@ if (!spell) { - for (spell = pl->ob->inv; spell != NULL; spell = spell->below) + for (spell = pl->ob->inv; spell; spell = spell->below) { /* were we to simply keep appending data here, we could exceed * MAXSOCKBUF if the player has enough spells to add, we know that