mud/help/
mud/items/
mud/map/
mud/monsters/
mud/players/
sub swing {
&combatcheck;
my $enemy=$user{$client}{eng}{to};
my $weapon=weaponfind();
unless ($weapon){
print "AAAAAAAAAAAAAA\n";
return;}
say("$user{$client}{name} swings at $user{$user{$client}{eng}{to}}{name} with $item{$weapon}{name}.");
print "myweapon=$weapon";
my $skill;
addexp("$item{$weapon}{primary}","weapons", "10",$client);
if (defined($user{$client}{exp}{weapons}{$item{$weapon}{primary}})){
$skill=$user{$client}{exp}{weapons}{$item{$weapon}{primary}}{ranks};
	print "skill=$skill\n";
	}
else {
	$skill=1;
	}
$tohit=$skill+$user{$client}{agi}+int(rand(10))+$user{$client}{eng}{pos};
$outbuffer{$client}.="tohit chance of $tohit";
($tododge, $skill)=dodge($enemy);
unless ($tohit>$tododge){
	$outbuffer{$client}.="$tododge $user{$enemy}{name} dodges your blow\r\n$prompt";
	addexp("evasion","survival",$tohit-$skill*3,$enemy);
	return;
	}
addexp("evasion","survival", 1,$enemy);
	
		
$outbuffer{$client}.=" $tododge";
$outbufer{$client}.="$user{$enemy}{weapon}";	
($tododge, $skill)= parry($enemy);
unless  ($tohit>$tododge){
	$outbuffer{$client}.="$tododge $user{$enemy}{name} parries\r\n$prompt";
	addexp("parry","weapons",$tohit,$enemy);
	return;
	}
if ($tododge){
	addexp("parry","weapons",1,$enemy);
	}
($tododge,$skill)=shield($enemy);
	unless  ($tohit>$tododge){
		$outbuffer{$client}.="$user{$enemy}{name} blocks\r\n$prompt";
		addexp("shield","armor",$tohit,$enemy);
		return;
		}
if ($tohit){
	addexp("shield","armor",1,$enemy);
		
	}
$outbuffer{$client}.="You hit!";	
$outbuffer{$client}.="\r\n$prompt";
}
sub shield {
$enemy=shift;
my $shield;
foreach $hold (@{$user{$enemy}{hold}}){
	if ($user{$enemy}{health}{$hold}{hold}){
		if ($item{$user{$enemy}{health}{$hold}{hold}}{shield}) {
			$shield=$user{$enemy}{health}{$hold}{hold};
			last;
			}
		}
	}
if ($shield){
	my $skill=($user{$enemy}{exp}{shield}{ranks} or 1);
	my $tododge=$skill+$user{$enemy}{reflex}+int(rand(10));
	return ($tododge, $skill);
	}
return 0;
}
sub parry {
my $enemy=shift;
my $weapon=weaponfind($enemy);
print "weapon=$weapon";
if ($item{$weapon}{parry}){
	$skill=($user{$enemy}{exp}{weapons}{parry}{ranks} or 1);
	$tododge=$skill+$user{$enemy}{reflex}+int(rand(12));
	return $tododge, $skill
	}
return 0;
}
sub dodge {
my $enemy=shift;
my $skill=($user{$enemy}{exp}{survival}{evasion}{ranks} or 1);
my $tododge=$skill+$user{$enemy}{agi}+int(rand(10));
return ($tododge,$skill);
}
sub combatcheck{
unless (defined($user{$client}{eng}{to})){
	$outbuffer{$client}.="You must be engaged to something\r\n$prompt";
	return;
	}
unless ($user{$client}{eng}{distance} eq "melee"){
	$outbuffer{$client}.="You must be at melee\r\n$prompt";
	return;
	}
}
sub weaponfind {
my $client=(shift or $client);
unless (defined($user{$client}{weapon})){
	$user{$client}{weapon}="right hand";
	}
my $weapon=$user{$client}{health}{$user{$client}{weapon}}{weapon};
unless ($weapon){
$weapon=$user{$client}{health}{$user{$client}{weapon}}{hold};
}

unless ($weapon){
	return 0;
	}
return $weapon;
}
return 1;