Update of /cvsroot/netrek/client/netrekxp/src In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv3525/src Modified Files: data.c feature.c map.c socket.c Log Message: Support for F_check_planets feature packet, which includes new struct planet_cpacket which cross-checks with server to make sure all planet info is correct. Updated 10 times/sec for planet being orbitted, and every 5 seconds for the other "touched" planets. Reduces need for small update to refresh planets, and minimizes the effect of lost planet packets on gameplay. Index: feature.c =================================================================== RCS file: /cvsroot/netrek/client/netrekxp/src/feature.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- feature.c 4 Apr 2007 04:06:37 -0000 1.12 +++ feature.c 4 Apr 2007 10:34:22 -0000 1.13 @@ -79,6 +79,7 @@ {"SP_GENERIC_32", &F_sp_generic_32, 'S', 1, 0, 0}, {"FULL_DIRECTION_RESOLUTION", &F_full_direction_resolution, 'S', 1, 0, 0}, {"FULL_WEAPON_RESOLUTION", &F_full_weapon_resolution, 'S', 1, 0, 0}, + {"CHECK_PLANETS", &F_check_planets, 'S', 1, 0, 0}, #ifdef WARP_DEAD {"DEAD_WARP", &F_dead_warp, 'S', 1, 0, 0}, Index: map.c =================================================================== RCS file: /cvsroot/netrek/client/netrekxp/src/map.c,v retrieving revision 1.40 retrieving revision 1.41 diff -u -d -r1.40 -r1.41 --- map.c 4 Apr 2007 04:06:38 -0000 1.40 +++ map.c 4 Apr 2007 10:34:22 -0000 1.41 @@ -63,6 +63,8 @@ static int mcleararea[4][(MAXTORP + 1) * MAXPLAYER + (MAXPLASMA + 1) * MAXPLAYER]; static int mclearx, mcleary, mclearr; /* x,y,radius for range circle */ static int mclearccount; +static int planet_refresh = 0; +static int orbit_planet_refresh = 0; /* * Global Variables: @@ -502,6 +504,27 @@ for (l = planets + MAXPLANETS - 1; l >= planets; --l) { + /* Synchronize planet info (up to 10 times/second) for current orbitted planet + and once every 5 seconds for all other planets we have info on*/ + if (F_check_planets) + { + if ((me->p_flags & PFORBIT) + && (F_sp_generic_32 ? me->pl_orbit : get_closest_planet(me->p_x, me->p_y)) == l->pl_no) + { + orbit_planet_refresh++; + if ((orbit_planet_refresh * 10 / server_ups) >= 1) + { + sendPlanetsPacket(l->pl_no); + orbit_planet_refresh = 0; + } + } + else if (l->pl_info & me->p_team) + { + if ((planet_refresh * 10 / server_ups) >= 50) + sendPlanetsPacket(l->pl_no); + } + } + if (!(l->pl_flags & PLREDRAW)) continue; @@ -939,6 +962,15 @@ DrawPlanets (); + /* Increment counter for requesting planet sync (F_check_planets) */ + if (F_check_planets) + { + if ((planet_refresh * 10 / server_ups) >= 50) + planet_refresh = 0; + else + planet_refresh++; + } + #ifdef DEBUG_SHOW_REGIONS /* Debugging code */ showRegions(); #endif Index: socket.c =================================================================== RCS file: /cvsroot/netrek/client/netrekxp/src/socket.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -d -r1.26 -r1.27 --- socket.c 4 Apr 2007 04:06:38 -0000 1.26 +++ socket.c 4 Apr 2007 10:34:22 -0000 1.27 @@ -261,7 +261,7 @@ 0, /* 37 */ #endif - 0, /* 38 */ + sizeof (struct planet_cpacket), /* CP_PLANET */ 0, /* 39 */ 0, /* 40 */ 0, /* 41 */ @@ -1586,6 +1586,7 @@ case CP_SHIELD: case CP_REPAIR: case CP_ORBIT: + case CP_PLANET: case CP_PLANLOCK: case CP_PLAYLOCK: case CP_BOMB: @@ -2110,6 +2111,23 @@ } void +sendPlanetsPacket (int pnum) +{ + struct planet_cpacket planPacket; + struct planet *pl; + + pl = &planets[pnum]; + + planPacket.type = CP_PLANET; + planPacket.pnum = pl->pl_no; + planPacket.owner = pl->pl_owner; + planPacket.info = pl->pl_info; + planPacket.armies = htonl (pl->pl_armies); + planPacket.flags = htons ((short) (pl->pl_flags)); + sendServerPacket ((struct player_spacket *) &planPacket); +} + +void pickSocket (int old) { int newsocket; @@ -3976,7 +3994,7 @@ LineToConsole("\nC->S CP_REPAIR\t"); if (log_packets > 1) LineToConsole(" state=%d,", - ((struct repair_cpacket *) packet)-> state ); + ((struct repair_cpacket *) packet)->state ); break; case CP_ORBIT : /* orbit planet/starbase */ LineToConsole("\nC->S CP_ORBIT\t"); @@ -3984,6 +4002,12 @@ LineToConsole(" state=%d,", ((struct orbit_cpacket *) packet)->state ); break; + case CP_PLANET : /* planet info */ + LineToConsole("\nC->S CP_PLANET\t"); + if (log_packets > 1) + LineToConsole(" pnum=%d,", + ((struct planet_cpacket *) packet)->pnum ); + break; case CP_PLANLOCK : /* lock on planet */ LineToConsole("\nC->S CP_PLANLOCK\t"); if (log_packets > 1) Index: data.c =================================================================== RCS file: /cvsroot/netrek/client/netrekxp/src/data.c,v retrieving revision 1.76 retrieving revision 1.77 diff -u -d -r1.76 -r1.77 --- data.c 4 Apr 2007 04:06:37 -0000 1.76 +++ data.c 4 Apr 2007 10:34:22 -0000 1.77 @@ -681,6 +681,7 @@ int F_sp_generic_32 = 0; int F_full_direction_resolution = 0; int F_full_weapon_resolution = 0; +int F_check_planets = 0; int F_show_army_count = 0; int F_show_other_speed = 0; int F_show_cloakers = 0;