--- deliantra/server/server/attack.c 2006/03/24 10:51:18 1.5 +++ deliantra/server/server/attack.c 2006/03/31 17:33:40 1.10 @@ -1191,15 +1191,10 @@ int rate; if(op->resist[ATNR_DRAIN] >= 0) - rate = 50 + op->resist[ATNR_DRAIN] / 2; - else if(op->resist[ATNR_DRAIN] < 0) - rate = 5000 / (100 - op->resist[ATNR_DRAIN]); + rate = 400 + op->resist[ATNR_DRAIN] * 3; + else + rate = 400 * 100 / (100 - op->resist[ATNR_DRAIN]); - /* full protection has no effect. Nothing else in this - * function needs to get done, so just return. */ - if(!rate) - return 0; - if(op->stats.exp <= rate) { if(op->type == GOLEM) dam = 999; /* Its force is "sucked" away. 8) */ @@ -1659,7 +1654,9 @@ if (op->type == PLAYER) { object *owner = get_owner (hitter); if (!owner) owner = hitter; - if (owner->type == PLAYER && !op_on_battleground (op, 0, 0)) { + if (owner->type == PLAYER + && (!op_on_battleground (op, 0, 0) && (op->contr->peaceful || owner->contr->peaceful)) + && op != owner) { return 0; } }