ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/socket/request.C
(Generate patch)

Comparing deliantra/server/socket/request.C (file contents):
Revision 1.45 by root, Tue Dec 19 04:58:05 2006 UTC vs.
Revision 1.48 by root, Wed Dec 20 11:36:39 2006 UTC

138} 138}
139 139
140static void 140static void
141clear_map (player *pl) 141clear_map (player *pl)
142{ 142{
143 client &socket = *pl->socket;
144
145 memset (&socket.lastmap, 0, sizeof (socket.lastmap)); 143 memset (&pl->socket->lastmap, 0, sizeof (pl->socket->lastmap));
146 144
147 if (socket.newmapcmd == 1) 145 if (pl->socket->newmapcmd == 1)
148 socket.send_packet ("newmap"); 146 pl->socket->send_packet ("newmap");
149 147
150 socket.update_look = 1; 148 pl->socket->floorbox_reset ();
151 socket.look_position = 0;
152} 149}
153 150
154/** check for map change and send new map data */ 151/** check for map change and send new map data */
155static void 152static void
156check_map_change (player *pl) 153check_map_change (player *pl)
197 if (socket.buggy_mapscroll && (abs (dx) > 8 || abs (dy) > 8)) 194 if (socket.buggy_mapscroll && (abs (dx) > 8 || abs (dy) > 8))
198 clear_map (pl); // current (<= 1.9.1) clients have unchecked buffer overflows 195 clear_map (pl); // current (<= 1.9.1) clients have unchecked buffer overflows
199 else 196 else
200 { 197 {
201 socket_map_scroll (&socket, ob->x - socket.current_x, ob->y - socket.current_y); 198 socket_map_scroll (&socket, ob->x - socket.current_x, ob->y - socket.current_y);
202 socket.update_look = 1; 199 socket.floorbox_reset ();
203 socket.look_position = 0;
204 } 200 }
205 } 201 }
206 202
207 socket.current_x = ob->x; 203 socket.current_x = ob->x;
208 socket.current_y = ob->y; 204 socket.current_y = ob->y;
723 if (!(ns->faces_sent[smoothface] & NS_FACESENT_FACE)) 719 if (!(ns->faces_sent[smoothface] & NS_FACESENT_FACE))
724 esrv_send_face (ns, smoothface, 0); 720 esrv_send_face (ns, smoothface, 0);
725 721
726 ns->faces_sent[face] |= NS_FACESENT_SMOOTH; 722 ns->faces_sent[face] |= NS_FACESENT_SMOOTH;
727 723
728 packet sl; 724 packet sl ("smooth");
729 725
730 sl << "smooth "
731 << uint16 (face) 726 sl << uint16 (face)
732 << uint16 (smoothface); 727 << uint16 (smoothface);
733 728
734 ns->send_packet (sl); 729 ns->send_packet (sl);
735} 730}
736 731
813 int time = FABS (pl->ob->speed) < 0.001 808 int time = FABS (pl->ob->speed) < 0.001
814 ? time = MAX_TIME * 100 809 ? time = MAX_TIME * 100
815 : time = (int) (MAX_TIME / FABS (pl->ob->speed)); 810 : time = (int) (MAX_TIME / FABS (pl->ob->speed));
816 811
817 /* Send confirmation of command execution now */ 812 /* Send confirmation of command execution now */
818 packet sl; 813 packet sl ("comc");
819 sl << "comc " << uint16 (cmdid) << uint32 (time); 814 sl << uint16 (cmdid) << uint32 (time);
820 pl->socket->send_packet (sl); 815 pl->socket->send_packet (sl);
821} 816}
822 817
823 818
824/** This is a reply to a previous query. */ 819/** This is a reply to a previous query. */
1037esrv_update_stats (player *pl) 1032esrv_update_stats (player *pl)
1038{ 1033{
1039 char buf[MAX_BUF]; 1034 char buf[MAX_BUF];
1040 uint16 flags; 1035 uint16 flags;
1041 1036
1042 packet sl; 1037 packet sl ("stats");
1043 sl << "stats ";
1044 1038
1045 if (pl->ob) 1039 if (pl->ob)
1046 { 1040 {
1047 AddIfShort (pl->last_stats.hp, pl->ob->stats.hp, CS_STAT_HP); 1041 AddIfShort (pl->last_stats.hp, pl->ob->stats.hp, CS_STAT_HP);
1048 AddIfShort (pl->last_stats.maxhp, pl->ob->stats.maxhp, CS_STAT_MAXHP); 1042 AddIfShort (pl->last_stats.maxhp, pl->ob->stats.maxhp, CS_STAT_MAXHP);
1131void 1125void
1132esrv_new_player (player *pl, uint32 weight) 1126esrv_new_player (player *pl, uint32 weight)
1133{ 1127{
1134 pl->last_weight = weight; 1128 pl->last_weight = weight;
1135 1129
1136 packet sl; 1130 packet sl ("player");
1137 sl << "player ";
1138 1131
1139 sl << uint32 (pl->ob->count) 1132 sl << uint32 (pl->ob->count)
1140 << uint32 (weight) 1133 << uint32 (weight)
1141 << uint32 (pl->ob->face->number) 1134 << uint32 (pl->ob->face->number)
1142 << data8 (pl->ob->name); 1135 << data8 (pl->ob->name);
1163 { 1156 {
1164 LOG (llevError, "esrv_send_anim (%d) out of bounds??\n", anim_num); 1157 LOG (llevError, "esrv_send_anim (%d) out of bounds??\n", anim_num);
1165 return; 1158 return;
1166 } 1159 }
1167 1160
1168 packet sl; 1161 packet sl ("anim");
1169 1162
1170 sl << "anim "
1171 << uint16 (anim_num) 1163 sl << uint16 (anim_num)
1172 << uint16 (0); /* flags - not used right now */ 1164 << uint16 (0); /* flags - not used right now */
1173 1165
1174 /* Build up the list of faces. Also, send any information (ie, the 1166 /* Build up the list of faces. Also, send any information (ie, the
1175 * the face itself) down to the client. 1167 * the face itself) down to the client.
1176 */ 1168 */
1622 1614
1623 client &socket = *pl->contr->socket; 1615 client &socket = *pl->contr->socket;
1624 1616
1625 check_map_change (pl->contr); 1617 check_map_change (pl->contr);
1626 1618
1627 packet sl; 1619 packet sl (socket.mapmode == Map1Cmd ? "map1" : "map1a");
1628 packet esl; 1620 packet esl;
1629 1621
1630 sl << (socket.mapmode == Map1Cmd ? "map1 " : "map1a ");
1631 startlen = sl.length (); 1622 startlen = sl.length ();
1632 1623
1633 /*Extendedmapinfo structure initialisation */ 1624 /*Extendedmapinfo structure initialisation */
1634 if (socket.ext_mapinfos) 1625 if (socket.ext_mapinfos)
1635 { 1626 {
1679 for (y = pl->y - socket.mapy / 2; y < max_y; y++, ay++) 1670 for (y = pl->y - socket.mapy / 2; y < max_y; y++, ay++)
1680 { 1671 {
1681 ax = 0; 1672 ax = 0;
1682 for (x = pl->x - socket.mapx / 2; x < max_x; x++, ax++) 1673 for (x = pl->x - socket.mapx / 2; x < max_x; x++, ax++)
1683 { 1674 {
1684
1685 emask = mask = (ax & 0x3f) << 10 | (ay & 0x3f) << 4; 1675 emask = mask = (ax & 0x3f) << 10 | (ay & 0x3f) << 4;
1686 1676
1687 /* If this space is out of the normal viewable area, we only check 1677 /* If this space is out of the normal viewable area, we only check
1688 * the heads value ax or ay will only be greater than what 1678 * the heads value ax or ay will only be greater than what
1689 * the client wants if using the map1a command - this is because 1679 * the client wants if using the map1a command - this is because
2020 return; 2010 return;
2021 2011
2022 memset (&newmap, 0, sizeof (struct Map)); 2012 memset (&newmap, 0, sizeof (struct Map));
2023 2013
2024 for (j = (pl->y - pl->contr->socket->mapy / 2); j < (pl->y + (pl->contr->socket->mapy + 1) / 2); j++) 2014 for (j = (pl->y - pl->contr->socket->mapy / 2); j < (pl->y + (pl->contr->socket->mapy + 1) / 2); j++)
2025 {
2026 for (i = (pl->x - pl->contr->socket->mapx / 2); i < (pl->x + (pl->contr->socket->mapx + 1) / 2); i++) 2015 for (i = (pl->x - pl->contr->socket->mapx / 2); i < (pl->x + (pl->contr->socket->mapx + 1) / 2); i++)
2027 { 2016 {
2028 ax = i; 2017 ax = i;
2029 ay = j; 2018 ay = j;
2030 m = pm; 2019 m = pm;
2031 mflags = get_map_flags (m, &m, ax, ay, &ax, &ay); 2020 mflags = get_map_flags (m, &m, ax, ay, &ax, &ay);
2032 2021
2033 if (mflags & P_OUT_OF_MAP) 2022 if (mflags & P_OUT_OF_MAP)
2034 continue; 2023 continue;
2035 2024
2036 if (mflags & P_NEED_UPDATE)
2037 update_position (m, ax, ay);
2038
2039 /* If a map is visible to the player, we don't want to swap it out 2025 /* If a map is visible to the player, we don't want to swap it out
2040 * just to reload it. This should really call something like 2026 * just to reload it. This should really call something like
2041 * swap_map, but this is much more efficient and 'good enough' 2027 * swap_map, but this is much more efficient and 'good enough'
2042 */ 2028 */
2043 if (mflags & P_NEW_MAP) 2029 if (mflags & P_NEW_MAP)
2044 m->timeout = 50; 2030 m->timeout = 50;
2045 } 2031 }
2046 } 2032
2047 /* do LOS after calls to update_position */ 2033 /* do LOS after calls to update_position */
2048 if (pl->contr->do_los) 2034 if (pl->contr->do_los)
2049 { 2035 {
2050 update_los (pl); 2036 update_los (pl);
2051 pl->contr->do_los = 0; 2037 pl->contr->do_los = 0;
2179 { 2165 {
2180 LOG (llevError, "Invalid call to esrv_remove_spell"); 2166 LOG (llevError, "Invalid call to esrv_remove_spell");
2181 return; 2167 return;
2182 } 2168 }
2183 2169
2184 packet sl; 2170 packet sl ("delspell");
2185 2171
2186 sl << "delspell "
2187 << uint32 (spell->count); 2172 sl << uint32 (spell->count);
2188 2173
2189 pl->socket->send_packet (sl); 2174 pl->socket->send_packet (sl);
2190} 2175}
2191 2176
2192/* appends the spell *spell to the Socklist we will send the data to. */ 2177/* appends the spell *spell to the Socklist we will send the data to. */
2245 } 2230 }
2246 2231
2247 if (!pl->socket->monitor_spells) 2232 if (!pl->socket->monitor_spells)
2248 return; 2233 return;
2249 2234
2250 packet sl; 2235 packet sl ("addspell");
2251 sl << "addspell ";
2252 2236
2253 if (!spell) 2237 if (!spell)
2254 { 2238 {
2255 for (spell = pl->ob->inv; spell != NULL; spell = spell->below) 2239 for (spell = pl->ob->inv; spell != NULL; spell = spell->below)
2256 { 2240 {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines