#define PAX(ch) \ if (ROOM_FLAGGED( (ch)->in_room, ROOM_PEACEFUL)) { \ send_to_char("This room just has such a peaceful, easy feeling...\r\n", (ch));\ return;\ } void perform_disarm( struct char_data *ch, struct char_data *vict, int prob ) { struct obj_data *obj; PAX(ch); if (!pk_allowed) { if (!IS_NPC(vict)) { send_to_char( "No puedes desarmar a otros players.\r\n", ch ); return; } } if (GET_EQ(vict, WEAR_WIELD)) { if (GET_LEVEL(vict) >= LVL_IMMORT && GET_LEVEL(ch) < LVL_IMPL) { send_to_char( "No... a EL nop.\r\n", ch ); return; } if (GET_POS(vict) > POS_STUNNED && !FIGHTING(vict)) { set_fighting(vict, ch); if (MOB_FLAGGED(vict, MOB_MEMORY) && !IS_NPC(ch) && (GET_LEVEL(ch) < LVL_IMMORT)) remember(vict, ch); } if (prob) { obj = unequip_char(vict, WEAR_WIELD); obj_to_room( obj, ch->in_room); send_to_char(CCRED(vict, C_CMP), vict ); act( "$N te ha desarmado!", FALSE, vict, 0, ch, TO_CHAR ); send_to_char(CCNRM(vict, C_CMP), vict ); act( "$N ha desarmado a $n y $p vuela por los aires!", FALSE, vict, obj, ch, TO_ROOM ); act( "Desarmas a $N y $p vuela por los aires!", FALSE, ch, obj, vict, TO_CHAR ); } else { act("Fallas en tu intento!", FALSE, ch, 0, 0, TO_CHAR ); } } else { send_to_char( "Pero si no tiene ningun arma!\r\n", ch ); } } ACMD(do_disarm) { struct char_data *vict; int percent, prob; one_argument(argument, arg); if (!(vict = get_char_room_vis(ch, arg))) { if (FIGHTING(ch)) { vict = FIGHTING(ch); } else { send_to_char("Desarmar a quien?\r\n", ch); return; } } if (vict == ch) { send_to_char("Beh.. por que no pruebas con REMOVE?\r\n", ch); return; } if (!GET_EQ(ch, WEAR_WIELD)) { send_to_char("Necesitas esgrimir un arma para que puedas desarmar a alguien.\r\n", ch); return; } percent = number(1, 101); /* 101% is a complete failure */ prob = GET_SKILL(ch, SKILL_DISARM); prob >>= 1; if (percent > prob) { perform_disarm(ch, vict, FALSE); } else { perform_disarm(ch, vict, TRUE); WAIT_STATE(vict, PULSE_VIOLENCE); } WAIT_STATE(ch, PULSE_VIOLENCE * 2); }