--- deliantra/server/common/player.C 2007/05/01 05:48:20 1.26 +++ deliantra/server/common/player.C 2008/04/30 06:40:28 1.37 @@ -1,29 +1,27 @@ /* - * CrossFire, A Multiplayer game for X-windows - * - * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team - * Copyright (C) 2002 Mark Wedel & Crossfire Development Team - * Copyright (C) 1992 Frank Tore Johansen - * - * This program is free software; you can redistribute it and/or modify + * This file is part of Deliantra, the Roguelike Realtime MMORPG. + * + * Copyright (©) 2005,2006,2007,2008 Marc Alexander Lehmann / Robin Redeker / the Deliantra team + * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team + * Copyright (©) 1992,2007 Frank Tore Johansen + * + * Deliantra is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * The authors can be reached via e-mail at + * along with this program. If not, see . + * + * The authors can be reached via e-mail to */ #include -#include /* Determine if the attacktype represented by the * specified attack-number is enabled for dragon players. @@ -50,8 +48,8 @@ if (op && op->type == PLAYER && op->arch - && op->arch->clone.race - && !strcmp (op->arch->clone.race, "dragon")) + && op->arch->race + && !strcmp (op->arch->race, "dragon")) return 1; return 0; @@ -79,6 +77,7 @@ PL_OUT (password); PL_OUT2 (title, own_title); + PL_OUT (gender); PL_OUT (gen_hp); PL_OUT (gen_sp); PL_OUT (gen_grace); @@ -99,6 +98,7 @@ PL_OUT (bed_x); PL_OUT (bed_y); PL_OUT (weapon_sp); + PL_OUT (weapon_sp_left); PL_OUT2 (Str, orig_stats.Str); PL_OUT2 (Dex, orig_stats.Dex); PL_OUT2 (Con, orig_stats.Con); @@ -111,9 +111,9 @@ for (int i = 1; i <= 10; i++) { - fprintf (freezer, "%d\n", levhp [i]); - fprintf (freezer, "%d\n", levsp [i]); - fprintf (freezer, "%d\n", levgrace[i]); + freezer.add (levhp [i]); freezer.add ('\n'); + freezer.add (levsp [i]); freezer.add ('\n'); + freezer.add (levgrace[i]); freezer.add ('\n'); } freezer.put (ob->contr); @@ -191,6 +191,7 @@ case KW_title: assign (pl->own_title, f.get_str ()); break; case KW_bowtype: pl->bowtype = (bowtype_t) f.get_sint32 (); break; case KW_petmode: pl->petmode = (petmode_t) f.get_sint32 (); break; + case KW_gender: f.get (pl->gender); break; case KW_listening: f.get (pl->listening); break; case KW_peaceful: f.get (pl->peaceful); break; case KW_digestion: f.get (pl->digestion); break; @@ -202,6 +203,7 @@ case KW_bed_x: f.get (pl->bed_x); break; case KW_bed_y: f.get (pl->bed_y); break; case KW_weapon_sp: f.get (pl->weapon_sp); break; + case KW_weapon_sp_left:f.get (pl->weapon_sp_left); break; case KW_Str: f.get (pl->orig_stats.Str); break; case KW_Dex: f.get (pl->orig_stats.Dex); break; case KW_Con: f.get (pl->orig_stats.Con); break; @@ -265,16 +267,22 @@ return 0; } -player * -player::load_pl (const char *path) +const char * +player::killer_name () const { - object_thawer f (path); - - if (!f) - return 0; + static char buf [2048]; - f.next (); + if (!killer) + return "a dungeon collapse"; + else if (killer->contr) + snprintf (buf, sizeof (buf), "%s the %s", &killer->name, &killer->title); + else if (killer->type == DEEP_SWAMP) + snprintf (buf, sizeof (buf), "drowning in a %s", &killer->name); + else if (killer->owner) + snprintf (buf, sizeof (buf), "%s's %s", &killer->owner->name, &killer->name); + else + return &killer->name; - return load_pl (f); + return buf; }