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

Comparing deliantra/server/server/main.C (file contents):
Revision 1.100 by root, Mon Apr 30 04:25:30 2007 UTC vs.
Revision 1.107 by root, Fri May 18 20:45:37 2007 UTC

244 pl->refcnt_chk (); 244 pl->refcnt_chk ();
245 245
246 if (!pl->ob || !pl->ns || !pl->ob->active) 246 if (!pl->ob || !pl->ns || !pl->ob->active)
247 continue; 247 continue;
248 248
249 if (pl->ob->speed_left > 0 && pl->ns)
250 if (handle_newcs_player (pl->ob)) 249 if (handle_newcs_player (pl->ob))
251 flag = 1; 250 flag = 1;
252 251 }
253 /* If the player is not actively playing, don't make a 252 }
254 * backup save - nothing to save anyway. Plus, the
255 * map may not longer be valid. This can happen when the
256 * player quits - they exist for purposes of tracking on the map,
257 * but don't actually reside on any actual map.
258 */
259 if (QUERY_FLAG (pl->ob, FLAG_REMOVED))
260 continue;
261 } /* end of for loop for all the players */
262 } /* for flag */
263 253
264 for_all_players (pl) 254 for_all_players (pl)
265 { 255 {
256 object *ob = pl->ob;
257
266 if (!pl->ob || !pl->ns || !pl->ob->active) 258 if (!ob || !pl->ns || !ob->active)
267 continue; 259 continue;
268 260
269 if (settings.casting_time)
270 {
271 if (pl->ob->casting_time > 0)
272 {
273 pl->ob->casting_time--;
274 pl->ob->start_holding = 1;
275 }
276
277 /* set spell_state so we can update the range in stats field */
278 if ((pl->ob->casting_time == 0) && (pl->ob->start_holding == 1))
279 pl->ob->start_holding = 0;
280 }
281
282 do_some_living (pl->ob); 261 do_some_living (ob);
283 } 262 }
284} 263}
285 264
286static void 265static void
287process_players2 () 266process_players2 ()
288{ 267{
289 /* Then check if any players should use weapon-speed instead of speed */ 268 /* Then check if any players should use weapon-speed instead of speed */
290 for_all_players (pl) 269 for_all_players (pl)
291 { 270 {
292 /* The code that did weapon_sp handling here was out of place - 271 pl->weapon_sp_left = min (pl->weapon_sp, pl->weapon_sp_left + pl->weapon_sp);
293 * this isn't called until after the player has finished there 272 pl->ob->speed_left = min (pl->ob->speed, pl->ob->speed_left + pl->ob->speed);
294 * actions, and is thus out of place. All we do here is bounds
295 * checking.
296 */
297 if (pl->has_hit)
298 {
299 if (pl->ob->speed_left > pl->weapon_sp)
300 pl->ob->speed_left = pl->weapon_sp;
301
302 /* This needs to be here - if the player is running, we need to
303 * clear this each tick, but new commands are not being received
304 * so execute_newserver_command() is never called
305 */
306 pl->has_hit = 0;
307 }
308 else if (pl->ob->speed_left > pl->ob->speed)
309 pl->ob->speed_left = pl->ob->speed;
310 } 273 }
311} 274}
312 275
313void 276void
314process_events () 277process_events ()
344 /* Animate the object. Bug or feature that anim_speed 307 /* Animate the object. Bug or feature that anim_speed
345 * is based on ticks, and not the creatures speed? 308 * is based on ticks, and not the creatures speed?
346 */ 309 */
347 if (op->anim_speed && op->last_anim >= op->anim_speed) 310 if (op->anim_speed && op->last_anim >= op->anim_speed)
348 { 311 {
349 animate_object (op, op->type == PLAYER ? op->facing : op->direction); 312 animate_object (op, op->contr ? op->facing : op->direction);
350
351 op->last_anim = 1; 313 op->last_anim = 1;
352 } 314 }
353 else 315 else
354 op->last_anim++; 316 ++op->last_anim;
355 317
356 if (op->speed_left > 0) 318 if (op->speed_left > 0.f)
357 {
358#if 0
359 /* I've seen occasional crashes in move_symptom() with it
360 * crashing because op is removed - add some debugging to
361 * track if it is removed at this point.
362 * This unfortunately is a bit too verbose it seems - not sure
363 * why - I think what happens is a map is freed or something and
364 * some objects get 'lost' - removed never to be reclaimed.
365 * removed objects generally shouldn't exist.
366 */
367 if (QUERY_FLAG (op, FLAG_REMOVED))
368 { 319 {
369 LOG (llevDebug, "process_events: calling process_object with removed object %s\n", op->name ? op->name : "null");
370 }
371#endif
372 --op->speed_left; 320 --op->speed_left;
373 process_object (op); 321 process_object (op);
374 322
375 if (op->destroyed ()) 323 if (op->destroyed ())
376 continue; 324 continue;
377 } 325 }
378 326
379 if (settings.casting_time == TRUE && op->casting_time > 0) 327 if (!op->contr)
380 op->casting_time--; 328 op->speed_left = min (abs (op->speed), op->speed_left + abs (op->speed));
381
382 if (op->speed_left <= 0)
383 op->speed_left += FABS (op->speed);
384 } 329 }
385 330
386 process_players2 (); 331 process_players2 ();
387} 332}
388 333

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines