[CF-Devel] CVS update: crossfire/server
Crossfire CVS devel
mwedel at scruznet.com
Fri Jul 28 02:10:21 CDT 2000
Date: Friday July 28, 2000 @ 0:10
Author: cvs
Update of /home/cvs/CVS/crossfire/server
In directory boltzmann.eecs.berkeley.edu:/tmp/cvs-serv24266/server
Modified Files:
time.c
Log Message:
server/time.c: Update the change_object function such that if the object
is in a players inventory, send a delete & send_item for the object that
has changed (the delete + send_item is necessary due to the ways objects
change, so we just can't sent a update_item). This fixes the 'torches
go dim & then out but client inventory not updated' bug, and likely fixes
some other problems - I am not sure how many other objects out there
change. MSW 7/28/2000
****************************************
Index: crossfire/server/time.c
diff -u crossfire/server/time.c:1.9 crossfire/server/time.c:1.10
--- crossfire/server/time.c:1.9 Tue Jun 13 09:58:41 2000
+++ crossfire/server/time.c Fri Jul 28 00:10:21 2000
@@ -1,12 +1,12 @@
/*
* static char *rcsid_time_c =
- * "$Id: time.c,v 1.9 2000/06/13 16:58:41 jec Exp $";
+ * "$Id: time.c,v 1.10 2000/07/28 07:10:21 cvs Exp $";
*/
/*
CrossFire, A Multiplayer game for X-windows
- Copyright (C) 1994 Mark Wedel
+ Copyright (C) 2000 Mark Wedel
Copyright (C) 1992 Frank Tore Johansen
This program is free software; you can redistribute it and/or modify
@@ -23,7 +23,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- The author can be reached via e-mail to
master at rahul.net
+ The author can be reached via e-mail to
mwedel at scruz.net
*/
/*
@@ -626,7 +626,7 @@
* Modified this routine to allow held objects. b.t. */
void change_object(object *op) { /* Doesn`t handle linked objs yet */
- object *tmp,*env;
+ object *tmp,*env,*pl;
int i,j;
if(op->other_arch==NULL) {
@@ -646,7 +646,15 @@
tmp->stats.hp=op->stats.hp; /* The only variable it keeps. */
if(env) {
tmp->x=env->x,tmp->y=env->y;
- insert_ob_in_ob(tmp,env);
+ tmp=insert_ob_in_ob(tmp,env);
+ /* If this object is the players inventory, we need to tell the
+ * client of the change. Insert_ob_in_map takes care of the
+ * updating the client, so we don't need to do that below.
+ */
+ if ((pl=is_player_inv(env))!=NULL) {
+ esrv_del_item(pl->contr, op->count);
+ esrv_send_item(pl, tmp);
+ }
} else {
j=find_first_free_spot(tmp->arch,op->map,op->x,op->y);
if (j==-1) /* No free spot */
More information about the crossfire
mailing list