--- deliantra/server/server/player.C 2007/04/24 00:42:02 1.112 +++ deliantra/server/server/player.C 2007/04/24 12:32:16 1.113 @@ -1832,13 +1832,7 @@ return; case range_golem: /* Control summoned monsters from scrolls */ - if (QUERY_FLAG (op->contr->ranges[range_golem], FLAG_REMOVED)) - { - op->contr->ranges[range_golem] = 0; - op->contr->shoottype = range_none; - } - else - control_golem (op->contr->ranges[range_golem], dir); + control_golem (op->contr->ranges[range_golem], dir); return; case range_skill: @@ -1846,6 +1840,7 @@ { if (op->type == PLAYER) new_draw_info (NDI_UNIQUE, 0, op, "You have no applicable skill to use."); + return; } @@ -2263,14 +2258,6 @@ } } - /* I've been seeing crashes where the golem has been destroyed, but - * the player object still points to the defunct golem. The code that - * destroys the golem looks correct, and it doesn't always happen, so - * put this in a a workaround to clean up the golem pointer. - */ - if (op->contr->ranges[range_golem] && QUERY_FLAG (op->contr->ranges[range_golem], FLAG_REMOVED)) - op->contr->ranges[range_golem] = 0; - /* call this here - we also will call this in do_ericserver, but * the players time has been increased when doericserver has been * called, so we recheck it here. @@ -2468,7 +2455,7 @@ } /* Regenerate Spell Points */ - if (op->contr->ranges[range_golem] == NULL && --op->last_sp < 0) + if (!op->contr->ranges[range_golem] && --op->last_sp < 0) { gen_sp = gen_sp * 10 / (op->contr->gen_sp_armour < 10 ? 10 : op->contr->gen_sp_armour); if (op->stats.sp < op->stats.maxsp)