--- deliantra/server/include/player.h 2007/04/25 18:47:50 1.49 +++ deliantra/server/include/player.h 2007/04/30 05:54:14 1.52 @@ -1,5 +1,5 @@ /* - * CrossFire, A Multiplayer game for X-windows + * CrossFire, A Multiplayer game * * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team * Copyright (C) 2002 Mark Wedel & Crossfire Development Team @@ -22,34 +22,18 @@ * The authors can be reached via e-mail at crossfire@schmorp.de */ -/* wand/rod/horn rolled into range_misc. They all use the same body location - * anyways. - */ -enum rangetype -{ - range_bottom = -1, - range_none = 0, - range_bow = 1, - range_magic = 2, - range_misc = 3, - range_golem = 4, - range_skill = 5, - range_builder = 6, - range_size = 7 -}; - enum bowtype_t { - bow_normal = 0, - bow_threewide = 1, + bow_normal = 0, + bow_threewide = 1, bow_spreadshot = 2, - bow_n = 3, /* must stay at 3 */ + bow_n = 3, /* must stay at 3 */ bow_ne = 4, - bow_e = 5, + bow_e = 5, bow_se = 6, - bow_s = 7, + bow_s = 7, bow_sw = 8, - bow_w = 9, + bow_w = 9, bow_nw = 10, /* must stay at 10 */ bow_bestarrow = 11 }; @@ -57,16 +41,16 @@ enum petmode_t { pet_normal = 0, - pet_sad = 1, + pet_sad = 1, pet_defend = 2, - pet_arena = 3 + pet_arena = 3, }; enum usekeytype { key_inventory = 0, - keyrings = 1, - containers = 2 + keyrings = 1, + containers = 2, }; /* This is used to control what to do when we need to unapply @@ -104,28 +88,24 @@ INTERFACE_CLASS (player) struct player : zero_initialised, attachable { - client *ACC (RO, ns); /* Socket information for this player */ - object *ACC (RW, ob); /* The object representing the player */ + client *ACC (RO, ns); /* Socket information for this player */ + object *ACC (RW, ob); /* The object representing the player */ int ACC (RO, active); - rangetype ACC (RW, shoottype); /* Which range-attack is being used by player */ - bowtype_t ACC (RW, bowtype); /* which firemode? */ - petmode_t ACC (RW, petmode); /* which petmode? */ - object_ptr ACC (RW, ranges[range_size]); /* object for each range. Set up in fix player. Note */ - /* That not all are used, it is just nice to map this 1:1 */ - /* With the range names */ - usekeytype ACC (RW, usekeys); /* Method for finding keys for doors */ - unapplymode ACC (RW, unapply); /* Method for auto unapply */ - uint32 ACC (RW, count); /* Any numbers typed before a command */ - uint32 ACC (RW, mode); /* Mode of player for pickup. */ - - sint8 ACC (RW, digestion); /* Any bonuses/penalties to digestion */ - sint8 ACC (RW, gen_hp); /* Bonuses to regeneration speed of hp */ - sint8 ACC (RW, gen_sp); /* Bonuses to regeneration speed of sp */ - sint8 ACC (RW, gen_sp_armour); /* Penalty to sp regen from armour */ - sint8 ACC (RW, gen_grace); /* Bonuses to regeneration speed of grace */ - sint16 ACC (RW, item_power); /* Total item power of objects equipped */ - uint8 ACC (RW, listening); /* Which priority will be used in info_all */ + bowtype_t ACC (RW, bowtype); /* which firemode? */ + petmode_t ACC (RW, petmode); /* which petmode? */ + usekeytype ACC (RW, usekeys); /* Method for finding keys for doors */ + unapplymode ACC (RW, unapply); /* Method for auto unapply */ + uint32 ACC (RW, count); /* Any numbers typed before a command */ + uint32 ACC (RW, mode); /* Mode of player for pickup. */ + + sint8 ACC (RW, digestion); /* Any bonuses/penalties to digestion */ + sint8 ACC (RW, gen_hp); /* Bonuses to regeneration speed of hp */ + sint8 ACC (RW, gen_sp); /* Bonuses to regeneration speed of sp */ + sint8 ACC (RW, gen_sp_armour); /* Penalty to sp regen from armour */ + sint8 ACC (RW, gen_grace); /* Bonuses to regeneration speed of grace */ + sint16 ACC (RW, item_power); /* Total item power of objects equipped */ + uint8 ACC (RW, listening); /* Which priority will be used in info_all */ /* Try to put all the bitfields together - saves some small amount of memory */ bool ACC (RW, braced); /* Will not move if braced, only attack */ @@ -142,6 +122,12 @@ object_ptr last_skill_ob[NUM_SKILLS]; /* the exp object */ object_ptr ACC (RW, last_used); /* Pointer to object last picked or applied */ + object_ptr ACC (RW, combat_skill); // which skill to use for direct attacks + object_ptr ACC (RW, combat_ob); // which weapon to use + object_ptr ACC (RW, ranged_skill); // which skill to use for ranged attacks + object_ptr ACC (RW, ranged_ob); // bow/spell + object_ptr ACC (RW, golem); // the currently controlled golem + sint16 ACC (RW, bed_x), ACC (RW, bed_y); /* x,y - coordinates of respawn (savebed) */ shstr ACC (RW, savebed_map); /* map where player will respawn after death */ shstr ACC (RW, maplevel); /* On which level is the player? */ @@ -194,6 +180,8 @@ // 0 - nothing see, 100 - fully visible MTH sint8 visibility_at (maptile *map, int x, int y) const; + MTH void set_skill (object *skill, object *ob = 0); + MTH void connect (client *ns); MTH void disconnect ();