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.88 by root, Tue Apr 24 00:42:03 2007 UTC vs.
Revision 1.99 by root, Tue May 22 10:50:01 2007 UTC

1/* 1/*
2 * CrossFire, A Multiplayer game for X-windows 2 * CrossFire, A Multiplayer game
3 * 3 *
4 * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team 4 * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team
5 * Copyright (C) 2001 Mark Wedel 5 * Copyright (C) 2001 Mark Wedel
6 * Copyright (C) 1992 Frank Tore Johansen 6 * Copyright (C) 1992 Frank Tore Johansen
7 * 7 *
159 { 159 {
160 if (ob->map && ob->map->path[0]) 160 if (ob->map && ob->map->path[0])
161 { 161 {
162 int flags = 0; 162 int flags = 0;
163 163
164 if (ob->map->tile_path[0]) 164 if (ob->map->tile_path[0]) flags |= 1;
165 flags |= 1;
166 if (ob->map->tile_path[1]) 165 if (ob->map->tile_path[1]) flags |= 2;
167 flags |= 2;
168 if (ob->map->tile_path[2]) 166 if (ob->map->tile_path[2]) flags |= 4;
169 flags |= 4;
170 if (ob->map->tile_path[3]) 167 if (ob->map->tile_path[3]) flags |= 8;
171 flags |= 8;
172 168
173 snprintf (buf, MAX_BUF, "mapinfo - spatial %d %d %d %d %d %s", 169 snprintf (buf, MAX_BUF, "mapinfo - spatial %d %d %d %d %d %s",
174 flags, socket.mapx / 2 - ob->x, socket.mapy / 2 - ob->y, ob->map->width, ob->map->height, &ob->map->path); 170 flags, socket.mapx / 2 - ob->x, socket.mapy / 2 - ob->y, ob->map->width, ob->map->height, &ob->map->path);
175 } 171 }
176 else 172 else
325 snprintf (bigbuf, MAX_BUF, "mapinfo %s error", token); 321 snprintf (bigbuf, MAX_BUF, "mapinfo %s error", token);
326 else if (map && map->path[0]) 322 else if (map && map->path[0])
327 { 323 {
328 int flags = 0; 324 int flags = 0;
329 325
330 if (map->tile_path[0]) 326 if (map->tile_path[0]) flags |= 1;
331 flags |= 1;
332 if (map->tile_path[1]) 327 if (map->tile_path[1]) flags |= 2;
333 flags |= 2;
334 if (map->tile_path[2]) 328 if (map->tile_path[2]) flags |= 4;
335 flags |= 4;
336 if (map->tile_path[3]) 329 if (map->tile_path[3]) flags |= 8;
337 flags |= 8;
338 330
339 snprintf (bigbuf, MAX_BUF, "mapinfo %s spatial %d %d %d %d %d %s", token, flags, mapx, mapy, map->width, map->height, &map->path); 331 snprintf (bigbuf, MAX_BUF, "mapinfo %s spatial %d %d %d %d %d %s", token, flags, mapx, mapy, map->width, map->height, &map->path);
340 } 332 }
341 else 333 else
342 snprintf (bigbuf, MAX_BUF, "mapinfo %s nomap", token); 334 snprintf (bigbuf, MAX_BUF, "mapinfo %s nomap", token);
659 651
660 cp = strchr (cp + 1, ' '); 652 cp = strchr (cp + 1, ' ');
661 653
662 if (cp) 654 if (cp)
663 { 655 {
664 assign (ns->version, cp + 1); 656 ns->version = cp + 1;
665 657
666 if (ns->sc_version < 1026) 658 if (ns->sc_version < 1026)
667 ns->send_packet_printf ("drawinfo %d %s", NDI_RED, 659 ns->send_packet_printf ("drawinfo %d %s", NDI_RED,
668 "**** VERSION WARNING ****\n**** CLIENT IS TOO OLD!! UPDATE THE CLIENT!! ****"); 660 "**** VERSION WARNING ****\n**** CLIENT IS TOO OLD!! UPDATE THE CLIENT!! ****");
669 } 661 }
734send_query (client *ns, uint8 flags, const char *text) 726send_query (client *ns, uint8 flags, const char *text)
735{ 727{
736 ns->send_packet_printf ("query %d %s", flags, text ? text : ""); 728 ns->send_packet_printf ("query %d %s", flags, text ? text : "");
737} 729}
738 730
731/**
732 * Get player's current range attack in obuf.
733 */
734static void
735rangetostring (player *pl, char *obuf)
736{
737 dynbuf_text buf;
738
739 if (pl->ranged_ob)
740 buf << " Range" << (pl->ob->current_weapon == pl->ranged_ob ? "*" : "") << ": " << pl->ranged_ob->name;
741
742 if (pl->combat_ob)
743 buf << " Combat" << (pl->ob->current_weapon == pl->combat_ob ? "*" : "") << ": " << pl->combat_ob->name;
744
745 //TODO: remove this when slot system is working, this is only for debugging
746 if (pl->ob->chosen_skill)
747 buf << " Skill*: " << pl->ob->chosen_skill->name;
748
749 //TODO: maybe golem should become the current_weapon, quite simply?
750 if (pl->golem)
751 buf << " Golem*: " << pl->golem->name;
752
753 buf.linearise (obuf);
754 obuf [buf.size ()] = 0;
755}
756
739#define AddIfInt64(Old,New,Type) if (Old != New) {\ 757#define AddIfInt64(Old,New,Type) if (Old != New) {\
740 Old = New; \ 758 Old = New; \
741 sl << uint8 (Type) << uint64 (New); \ 759 sl << uint8 (Type) << uint64 (New); \
742 } 760 }
743 761
749#define AddIfShort(Old,New,Type) if (Old != New) {\ 767#define AddIfShort(Old,New,Type) if (Old != New) {\
750 Old = New; \ 768 Old = New; \
751 sl << uint8 (Type) << uint16 (New); \ 769 sl << uint8 (Type) << uint16 (New); \
752 } 770 }
753 771
754#define AddIfFloat(Old,New,Type) if (Old != New) {\ 772#define AddIfFloat(Old,New,Type,mult) if (Old != New) {\
755 Old = New; \ 773 Old = New; \
756 sl << uint8 (Type) << uint32 (New*FLOAT_MULTI); \ 774 sl << uint8 (Type) << uint32 (New*FLOAT_MULTI*mult); \
757 } 775 }
758 776
759#define AddIfString(Old,New,Type) if (Old == NULL || strcmp(Old,New)) {\ 777#define AddIfString(Old,New,Type) if (Old == NULL || strcmp(Old,New)) {\
760 free(Old); Old = strdup (New);\ 778 free(Old); Old = strdup (New);\
761 sl << uint8 (Type) << data8 (New); \ 779 sl << uint8 (Type) << data8 (New); \
814 AddIfInt64 (ns->last_stats.exp, ob->stats.exp, CS_STAT_EXP64); 832 AddIfInt64 (ns->last_stats.exp, ob->stats.exp, CS_STAT_EXP64);
815 AddIfShort (ns->last_level, ob->level, CS_STAT_LEVEL); 833 AddIfShort (ns->last_level, ob->level, CS_STAT_LEVEL);
816 AddIfShort (ns->last_stats.wc, ob->stats.wc, CS_STAT_WC); 834 AddIfShort (ns->last_stats.wc, ob->stats.wc, CS_STAT_WC);
817 AddIfShort (ns->last_stats.ac, ob->stats.ac, CS_STAT_AC); 835 AddIfShort (ns->last_stats.ac, ob->stats.ac, CS_STAT_AC);
818 AddIfShort (ns->last_stats.dam, ob->stats.dam, CS_STAT_DAM); 836 AddIfShort (ns->last_stats.dam, ob->stats.dam, CS_STAT_DAM);
819 AddIfFloat (ns->last_speed, ob->speed, CS_STAT_SPEED); 837 AddIfFloat (ns->last_speed, ob->speed, CS_STAT_SPEED, 1.f/TICK);
820 AddIfShort (ns->last_stats.food, ob->stats.food, CS_STAT_FOOD); 838 AddIfShort (ns->last_stats.food, ob->stats.food, CS_STAT_FOOD);
821 AddIfFloat (ns->last_weapon_sp, pl->weapon_sp, CS_STAT_WEAP_SP); 839 AddIfFloat (ns->last_weapon_sp, pl->weapon_sp, CS_STAT_WEAP_SP, 1.f/TICK);
822 AddIfInt (ns->last_weight_limit, weight_limit[ob->stats.Str], CS_STAT_WEIGHT_LIM); 840 AddIfInt (ns->last_weight_limit, weight_limit[ob->stats.Str], CS_STAT_WEIGHT_LIM);
823 841
824 flags = 0; 842 flags = 0;
825 843
826 if (pl->fire_on) 844 if (pl->fire_on)
848 AddIfInt (ns->last_path_attuned, ob->path_attuned, CS_STAT_SPELL_ATTUNE); 866 AddIfInt (ns->last_path_attuned, ob->path_attuned, CS_STAT_SPELL_ATTUNE);
849 AddIfInt (ns->last_path_repelled, ob->path_repelled, CS_STAT_SPELL_REPEL); 867 AddIfInt (ns->last_path_repelled, ob->path_repelled, CS_STAT_SPELL_REPEL);
850 AddIfInt (ns->last_path_denied, ob->path_denied, CS_STAT_SPELL_DENY); 868 AddIfInt (ns->last_path_denied, ob->path_denied, CS_STAT_SPELL_DENY);
851 } 869 }
852 870
853 rangetostring (ob, buf); /* we want use the new fire & run system in new client */ 871 rangetostring (pl, buf); /* we want use the new fire & run system in new client */
854 AddIfString (ns->stats.range, buf, CS_STAT_RANGE); 872 AddIfString (ns->stats.range, buf, CS_STAT_RANGE);
855 set_title (ob, buf); 873 set_title (ob, buf);
856 AddIfString (ns->stats.title, buf, CS_STAT_TITLE); 874 AddIfString (ns->stats.title, buf, CS_STAT_TITLE);
857 875
858 /* Only send it away if we have some actual data */ 876 /* Only send it away if we have some actual data */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines