#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "emlen.h"
void
do_consider (CHAR_DATA * ch, char *argy)
{
char arg[SML_LENGTH];
CHAR_DATA *victim;
SINGLE_OBJECT *weapon;
I_WEAPON *wep;
int b4, aftr, dif;
int ch_dam, victim_dam;
int ch_attacks, victim_attacks;
int ch_absorb, victim_absorb;
int rounds_to_kill_vict;
int rounds_to_kill_ch;
int round_difference;
char *msg = '\0';
DEFINE_COMMAND ("consider", do_consider, POSITION_RESTING, 0, LOG_NORMAL, "This command runs through the battle in your character's mind, and tells you the suspected outcome.")
one_argy (argy, arg);
if (arg[0] == '\0')
{
send_to_char ("Consider killing whom?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
send_to_char ("They're not here.\n\r", ch);
return;
}
if (victim == ch)
{
send_to_char("Suicide is not an option.\n\r", ch);
return;
}
if ((weapon = get_item_held(ch, ITEM_WEAPON)) != NULL)
{
wep = (I_WEAPON *)weapon->more;
ch_dam = wep->firstdice * (wep->seconddice + 1)/2 + 1;
}
else
{
ch_dam = LEVEL(ch)/20 +2;
}
if (IS_MOB(ch))
ch_dam += ch->pIndexData->damroll;
ch_dam += GET_DAMROLL(ch)/4;
if (ch_dam < 2) ch_dam = 2;
b4 = ch_dam;
aftr = new_damage(victim, ch_dam, 1, 1003);
dif = b4 - aftr;
ch_dam -= dif/2;
if (ch_dam < 2) ch_dam = 2;
if (IS_PLAYER(ch))
ch_dam *=2;
ch_absorb = 0;
if (IS_AUGMENTED(ch, AUG_LEG_PLATING))
ch_absorb += 4;
if (IS_AUGMENTED(ch, AUG_FOOT_PLATING))
ch_absorb += 3;
if (IS_AUGMENTED(ch, AUG_ARM_PLATING))
ch_absorb += 3;
if (IS_AUGMENTED(ch,AUG_HEAD_PLATING))
ch_absorb += 3;
if (IS_AUGMENTED(ch, AUG_BODY_PLATING))
ch_absorb += 5;
if (IS_PLAYER(ch) && ch->pcdata->learned[gsn_resilience] > 7)
ch_absorb +=(ch->pcdata->learned[gsn_resilience]/4);
if (DIFF_ALIGN(ch, ch) && IS_AFFECTED(ch, AFF_PROT_ALIGN))
ch_absorb += 14;
if (IS_AFFECTED (ch, AFF_SANCTUARY))
ch_absorb += 25;
if (IS_AFFECTED (ch, AFF_PROTECT))
ch_absorb += 40;
if (ch_absorb > 80)
ch_absorb = 80;
ch_attacks = 10;
if (IS_AFFECTED(ch, AFF_SPEED)) ch_attacks += 5;
if (IS_PLAYER(ch))
{
if (ch->pcdata->learned[571] > 0)
ch_attacks += ch->pcdata->learned[571]*3/50 + 1;
if (ch->pcdata->learned[gsn_second_attack] > 0)
ch_attacks += ch->pcdata->learned[gsn_second_attack]*3/50 + 1;
if (ch->pcdata->learned[gsn_third_attack] > 0)
ch_attacks += ch->pcdata->learned[gsn_third_attack]/20 + 1;
}
else
{
ch_attacks += UMIN(40, LEVEL(ch)/4);
}
if ((weapon = get_item_held(victim, ITEM_WEAPON)) != NULL)
{
wep = (I_WEAPON *)weapon->more;
victim_dam = wep->firstdice * (wep->seconddice + 1)/2 + 1;
}
else
{
victim_dam = LEVEL(victim)/20 +2;
}
if (IS_MOB(victim))
victim_dam += victim->pIndexData->damroll;
victim_dam += GET_DAMROLL(victim)/4;
if (victim_dam < 2) victim_dam = 2;
b4 = victim_dam;
aftr = new_damage(victim, victim_dam, 1, 1003);
dif = b4 - aftr;
victim_dam -= dif/2;
if (victim_dam < 2) victim_dam = 2;
if (IS_PLAYER(victim))
victim_dam = victim_dam*5/4;
victim_absorb = 0;
if (IS_AUGMENTED(victim, AUG_LEG_PLATING))
victim_absorb += 4;
if (IS_AUGMENTED(victim, AUG_FOOT_PLATING))
victim_absorb += 3;
if (IS_AUGMENTED(victim, AUG_ARM_PLATING))
victim_absorb += 3;
if (IS_AUGMENTED(victim,AUG_HEAD_PLATING))
victim_absorb += 3;
if (IS_AUGMENTED(victim, AUG_BODY_PLATING))
victim_absorb += 5;
if (IS_PLAYER(victim) && victim->pcdata->learned[gsn_resilience] > 7)
victim_absorb +=(victim->pcdata->learned[gsn_resilience]/4);
if (DIFF_ALIGN(victim, victim) && IS_AFFECTED(victim, AFF_PROT_ALIGN))
victim_absorb += 15;
if (IS_AFFECTED (victim, AFF_SANCTUARY))
victim_absorb += 25;
if (IS_AFFECTED (victim, AFF_PROTECT))
victim_absorb += 40;
if (victim_absorb > 80)
victim_absorb = 80;
victim_attacks = 10;
if (IS_AFFECTED(victim, AFF_SPEED)) victim_attacks += 5;
if (IS_PLAYER(victim))
{
if (victim->pcdata->learned[571] > 0)
victim_attacks += victim->pcdata->learned[571]*3/50 + 1;
if (victim->pcdata->learned[gsn_second_attack] > 0)
victim_attacks += victim->pcdata->learned[gsn_second_attack]*3/50 + 1;
if (victim->pcdata->learned[gsn_third_attack] > 0)
victim_attacks += victim->pcdata->learned[gsn_third_attack]/20 + 1;
}
else
{
victim_attacks += UMIN(30, LEVEL(victim)/4);
}
ch_dam = ((100-victim_absorb)*ch_dam)/100;
ch_dam *= ch_attacks;
if (ch_dam <=0) ch_dam = 1;
rounds_to_kill_vict = victim->hit * 10/ch_dam;
victim_dam = ((100-ch_absorb)*victim_dam)/100;
victim_dam *= victim_attacks;
if (victim_dam <= 0) victim_dam = 1;
rounds_to_kill_ch = ch->hit * 10/victim_dam;
rounds_to_kill_vict += number_range(0,2);
rounds_to_kill_ch += number_range(0,2);
round_difference = rounds_to_kill_vict - rounds_to_kill_ch;
send_to_char("You carefully go over the battle in your mind...\n\r", ch);
round_difference/=3;
if (round_difference <= - 10)
msg = "You will have fun rearranging $N's bodyparts!";
else
{
switch(round_difference)
{
case -9:
msg = "Why would you bore yourself killing $N...";
break;
case -8:
msg = "$N stands no chance against you.";
break;
case -7:
msg = "No sweat... a little work and $N will go down hard...";
break;
case -6:
msg = "This should be fairly easy...";
break;
case -5:
msg = "You should be able to beat $N unless $E has some tricks up $S sleeve.";
break;
case -4:
msg = "You would probably win unless $N has some tricks up $S sleeve.";
break;
case -3:
msg = "It would be a close battle but you would probably win.";
break;
case -2:
msg = "It would be a close battle without offensive magic.";
break;
case -1:
msg = "You are almost exactly evenly matched (without offensive magic)";
break;
case 0:
msg = "You are almost exactly evenly matched.";
break;
case 1:
msg = "It would be a close battle but you would probably lose.";
break;
case 2:
msg = "You would need a little luck.";
break;
case 3:
msg = "You would need quite a bit of luck.";
break;
case 4:
msg = "$N will probably beat you in a one on one battle.";
break;
case 5:
msg = "You'd probably need a friend or two...";
break;
case 6:
msg = "You better have brought some friends!";
break;
case 7:
msg = "You better have brought A LOT of friends!";
break;
case 8:
msg = "I hope you have an army to back you up!";
break;
case 9:
msg = "$N will laugh as $E rips you in two.";
break;
case 10:
msg = "$N will squish your face into the ground with ease.";
break;
default:
case 11:
msg = "You truly are a masochist! There is NO WAY!";
break;
}
}
act (msg, ch, NULL, victim, TO_CHAR);
return;
}
void
do_group_consider (CHAR_DATA * ch, char *argy)
{
char arg[SML_LENGTH];
CHAR_DATA *victim;
CHAR_DATA *attacker;
char *msg = '\0';
SINGLE_OBJECT *weapon;
I_WEAPON *wep;
int b4, aftr, dif;
int attacker_dam, victim_dam;
int attacker_attacks, victim_attacks;
int attacker_absorb, victim_absorb;
int rounds_to_kill_vict;
int rounds_to_kill_ch;
int round_difference;
int group_dam = 0;
DEFINE_COMMAND ("gconsider", do_group_consider, POSITION_RESTING, 0, LOG_NORMAL, "This command runs through the battle in your character's mind as if you were the tank for your group, and tells you the suspected outcome.")
one_argy (argy, arg);
if (chars_in_group (ch) < 2)
{
send_to_char ("But you aren't in a group!!\n\r", ch);
return;
}
if (arg[0] == '\0')
{
send_to_char ("Group-Consider killing whom?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
send_to_char ("They're not here.\n\r", ch);
return;
}
if (victim == ch)
{
send_to_char("Suicide is not an option.\n\r", ch);
return;
}
if ((weapon = get_item_held(victim, ITEM_WEAPON)) != NULL)
{
wep = (I_WEAPON *)weapon->more;
victim_dam = wep->firstdice * (wep->seconddice + 1)/2 + 1;
}
else
{
victim_dam = LEVEL(victim)/20 +2;
}
if (IS_MOB(victim))
victim_dam += victim->pIndexData->damroll;
victim_dam += GET_DAMROLL(victim)/4;
if (victim_dam < 2) victim_dam = 2;
b4 = victim_dam;
aftr = new_damage(victim, victim_dam, 1, 1003);
dif = b4 - aftr;
victim_dam -= dif/2;
if (victim_dam < 2) victim_dam = 2;
if (IS_PLAYER(victim))
victim_dam = victim_dam*5/4;
victim_absorb = 0;
if (IS_AUGMENTED(victim, AUG_LEG_PLATING))
victim_absorb += 4;
if (IS_AUGMENTED(victim, AUG_FOOT_PLATING))
victim_absorb += 3;
if (IS_AUGMENTED(victim, AUG_ARM_PLATING))
victim_absorb += 3;
if (IS_AUGMENTED(victim,AUG_HEAD_PLATING))
victim_absorb += 3;
if (IS_AUGMENTED(victim, AUG_BODY_PLATING))
victim_absorb += 5;
if (IS_PLAYER(victim) && victim->pcdata->learned[gsn_resilience] > 7)
victim_absorb +=(victim->pcdata->learned[gsn_resilience]/4);
if (DIFF_ALIGN(victim, victim) && IS_AFFECTED(victim, AFF_PROT_ALIGN))
victim_absorb += 15;
if (IS_AFFECTED (victim, AFF_SANCTUARY))
victim_absorb += 20;
if (IS_AFFECTED (victim, AFF_PROTECT))
victim_absorb += 40;
if (victim_absorb > 80)
victim_absorb = 80;
victim_attacks = 10;
if (IS_AFFECTED(victim, AFF_SPEED)) victim_attacks += 5;
if (IS_PLAYER(victim))
{
if (victim->pcdata->learned[571] > 0)
victim_attacks += victim->pcdata->learned[571]*3/50 + 1;
if (victim->pcdata->learned[gsn_second_attack] > 0)
victim_attacks += victim->pcdata->learned[gsn_second_attack]*3/50 + 1;
if (victim->pcdata->learned[gsn_third_attack] > 0)
victim_attacks += victim->pcdata->learned[gsn_third_attack]/20 + 1;
}
else
{
victim_attacks += UMIN(30, LEVEL(victim)/4);
}
for (attacker = ch->in_room->more->people; attacker !=NULL; attacker = attacker->next_in_room)
{
if (is_same_group (attacker, ch))
{
if ((weapon = get_item_held(attacker, ITEM_WEAPON)) != NULL)
{
wep = (I_WEAPON *)weapon->more;
attacker_dam = wep->firstdice * (wep->seconddice + 1)/2 + 1;
}
else
{
attacker_dam = LEVEL(attacker)/20 +2;
}
if (IS_MOB(attacker))
attacker_dam += attacker->pIndexData->damroll;
attacker_dam += GET_DAMROLL(attacker)/4;
if (attacker_dam < 2) attacker_dam = 2;
b4 = attacker_dam;
aftr = new_damage(victim, attacker_dam, 1, 1003);
dif = b4 - aftr;
attacker_dam -= dif/2;
if (attacker_dam < 2) attacker_dam = 2;
if (IS_PLAYER(attacker))
attacker_dam *=2;
if (attacker == ch)
{
attacker_absorb = 0;
if (IS_AUGMENTED(attacker, AUG_LEG_PLATING))
attacker_absorb += 4;
if (IS_AUGMENTED(attacker, AUG_FOOT_PLATING))
attacker_absorb += 3;
if (IS_AUGMENTED(attacker, AUG_ARM_PLATING))
attacker_absorb += 3;
if (IS_AUGMENTED(attacker,AUG_HEAD_PLATING))
attacker_absorb += 3;
if (IS_AUGMENTED(attacker, AUG_BODY_PLATING))
attacker_absorb += 5;
if (IS_PLAYER(attacker) && attacker->pcdata->learned[gsn_resilience] > 7)
attacker_absorb +=(attacker->pcdata->learned[gsn_resilience]/4);
if (DIFF_ALIGN(attacker, attacker) && IS_AFFECTED(attacker, AFF_PROT_ALIGN))
attacker_absorb += 15;
if (IS_AFFECTED (attacker, AFF_SANCTUARY))
attacker_absorb += 20;
if (IS_AFFECTED (attacker, AFF_PROTECT))
attacker_absorb += 40;
if (attacker_absorb > 80)
attacker_absorb = 80;
}
attacker_attacks = 10;
if (IS_AFFECTED(attacker, AFF_SPEED)) attacker_attacks += 5;
if (IS_PLAYER(attacker))
{
if (attacker->pcdata->learned[571] > 0)
attacker_attacks += attacker->pcdata->learned[571]*3/50 + 1;
if (attacker->pcdata->learned[gsn_second_attack] > 0)
attacker_attacks += attacker->pcdata->learned[gsn_second_attack]*3/50 + 1;
if (attacker->pcdata->learned[gsn_third_attack] > 0)
attacker_attacks += attacker->pcdata->learned[gsn_third_attack]/20 + 1;
}
else
{
attacker_attacks += UMIN(40, LEVEL(attacker)/4);
}
group_dam += attacker_attacks * attacker_dam;
}
}
group_dam = ((100-victim_absorb)*group_dam)/100;
if (group_dam <= 0) group_dam = 1;
rounds_to_kill_vict = victim->hit * 10/group_dam + number_range(0,2);
victim_dam = ((100-attacker_absorb)*victim_dam)/100;
victim_dam *= victim_attacks;
if (victim_dam <= 0) victim_dam = 1;
rounds_to_kill_ch = ch->hit * 10/victim_dam + number_range(0,2);
round_difference = rounds_to_kill_vict - rounds_to_kill_ch;
round_difference /= 3;
send_to_char("You carefully go over the battle in your mind...\n\r", ch);
if (round_difference <= - 10)
msg = "Your group will have fun ripping off $N's bodyparts!";
else
{
switch(round_difference)
{
case -9:
msg = "Why would your group bore itself with $N...";
break;
case -8:
msg = "$N stands no chance against your group.";
break;
case -7:
msg = "A little teamwork and $N will go down hard...";
break;
case -6:
msg = "This should be fairly easy...";
break;
case -5:
msg = "Your group should be able to beat $N.";
break;
case -4:
msg = "Your group would probably win but it might be close.";
break;
case -3:
msg = "It would be a close battle but your group would probably win.";
break;
case -2:
msg = "It would be a close battle without offensive magic.";
break;
case -1:
msg = "Your group and the mob are almost exactly evenly matched.";
break;
case 0:
msg = "The mob might take you out before your group wins.";
break;
case 1:
msg = "You will probably die, but your group should win.";
break;
case 2:
msg = "You would need a little luck tanking this foe.";
break;
case 3:
msg = "Your group probably will win, but you will might die in the process.";
break;
case 4:
msg = "Your group may win, but you will probably die in the battle.";
break;
case 5:
msg = "You will probably die, but your group still stands a small chance.";
break;
case 6:
msg = "You will probably have to flee, as will others in your group.";
break;
case 7:
msg = "Your group probably will have to flee unless you get lucky.";
break;
case 8:
msg = "$N will probably triumph over your group!";
break;
case 9:
msg = "$N will laugh as $E rips all of you apart.";
break;
case 10:
msg = "$N will crush your group with ease.";
break;
default:
case 11:
msg = "$N could destroy your group with ease!";
break;
}
}
act (msg, ch, NULL, victim, TO_CHAR);
return;
}