--- deliantra/server/common/player.C 2007/02/16 19:43:41 1.21 +++ deliantra/server/common/player.C 2007/04/29 21:44:34 1.23 @@ -53,6 +53,34 @@ return 0; } +/* Returns TRUE if the range specified (int r) is legal - that is, + * the character has an item that is equipped for that range type. + * return 0 if there is no item of that range type that is usable. + * This function could probably be simplified, eg, everything + * should index into the ranges[] array. + */ +bool +player::legal_range (rangetype r) const +{ + switch (r) + { + case range_none: /* "Nothing" is always legal */ + return 1; + + case range_bow: + case range_misc: + case range_magic: /* cast spells */ + case range_golem: + return !!ranges [r]; + + case range_skill: + return !!ob->chosen_skill; + } + + /* No match above, must not be valid */ + return 0; +} + /* * If final is set, it a clean/final save, not a backup, ie dont remove objects from inventory */ @@ -255,7 +283,9 @@ failure: LOG (llevError, "%s: too many or too grave errors, aborting player load.\n", f.name); - pl->ob->destroy (); + if (pl->ob) + pl->ob->destroy (); + pl->destroy (); return 0;