Misc.pm 3703c3703 < return 0 unless whenGroundStatus(calcPosition($char), $config{$prefix."_whenGround"}); --- > return 0 if !whenGroundStatus(calcPosition($char), $config{$prefix."_whenGround"}); 3767c3767,3768 < my $player = $playersList->getByID($id); --- > # By LabMouse > my $player = $players{$id}; 3777a3779 > return 0 if ($chars[$config{char}]{party}{users}{$id}{hp} == 0); 3779a3782 > return 0 if ($chars[$config{char}]{party}{users}{$id}{hp} == 0); 3828c3831 < return 0 unless whenGroundStatus(calcPosition($player), $config{$prefix."_whenGround"}); --- > return 0 if !whenGroundStatus(calcPosition($players{$id}), $config{$prefix."_whenGround"}); 3831c3834 < return 0 if whenGroundStatus(calcPosition($player), $config{$prefix."_whenNotGround"}); --- > return 0 if whenGroundStatus(calcPosition($players{$id}), $config{$prefix."_whenNotGround"}); 3886c3889 < return 0 unless whenGroundStatus(calcPosition($monster), $config{$prefix."_whenGround"}); --- > return 0 if !whenGroundStatus(calcPosition($monster), $config{$prefix."_whenGround"}); ChatQueue.pm 114a115 > sendMessage($messageSender, "p", $cmd->{user} . ": ". $cmd->{msg}, $user) if(( $type eq "pm") && ($config{pmtoParty})); 351c352,359 < --- > } elsif ($switch eq "stat") { > # By LabMouse > # a litle version of status > $vars->{char_sp} = $char->{sp}; > $vars->{char_hp} = $char->{hp}; > $vars->{char_sp_max} = $char->{sp_max}; > $vars->{char_hp_max} = $char->{hp_max}; > sendMessage($net, $type, getResponse("statusS1"), $user) if $config{verbose}; 593c601 < return 0; --- > return Commands::run($msg); Network\Recieve.pm 1135,1136c1135,1142 < < if ($actor->isa('Actor::Player')) { --- > if (UNIVERSAL::isa($actor, "Actor::Player")) { > # Check Whatever it is a party member > my $ID = $actor->{ID}; > if ($char->{party}{users}{$ID}) { > $chars[$config{char}]{party}{users}{$ID}{pos}{x} = $coordsTo{x}; > $chars[$config{char}]{party}{users}{$ID}{pos}{y} = $coordsTo{y}; > $chars[$config{char}]{party}{users}{$ID}{online} = 1; > } Ai\CoreLogic.pm 44a45 > use Time::HiRes qw(time usleep); 1935d1935 < 1945c1945,1976 < my (%vec, %pos); --- > my ($targetpos, $actor, %pos); > foreach (@playersID) { > next unless $_; > $actor = $players{$_}; > $pos{$actor->{pos_to}{x}}{$actor->{pos_to}{y}} = 1; > } > foreach (@npcsID) { > next unless $_; > $actor = $npcs{$_}; > $pos{$actor->{pos_to}{x}}{$actor->{pos_to}{y}} = 1; > } > foreach (@monstersID) { > next unless $_; > $actor = $monsters{$_}; > $pos{$actor->{pos_to}{x}}{$actor->{pos_to}{y}} = 1; > } > foreach (@spellsID) { > next unless $_; > my $spell = $spells{$_}; > $pos{$spell->{pos_to}{x}}{$spell->{pos_to}{y}} = 1 > if ($spell->{type} == 128 || $spell->{type} == 129 || $spell->{type} == 41); > } > my @rectBlock = calcRectArea2($player->{pos_to}{x}, $player->{pos_to}{y}, > $config{followDistanceMax}, $config{followDistanceMin}); > my $blockCount = scalar(@rectBlock); > my $loopCount = 0; > do { > $targetpos = $rectBlock[int(rand($blockCount))]; > $loopCount++; > } while ((!$field->isWalkable($targetpos->{x}, $targetpos->{y}) > || $pos{$targetpos->{x}}{$targetpos->{y}} || !checkLineWalkable($char->{pos_to}, $targetpos) > || !checkLineSnipable($targetpos, $player->{pos_to})) && ($blockCount > $loopCount)); 1946a1978 > if ($blockCount > $loopCount) { 1948,1949d1979 < getVector(\%vec, $player->{pos_to}, $char->{pos_to}); < moveAlongVector(\%pos, $char->{pos_to}, \%vec, $dist - $config{followDistanceMin}); 1951c1981,1995 < $messageSender->sendMove($pos{x}, $pos{y}); --- > usleep((rand($timeout{ai_follow_rand}{timeout}) + $timeout{ai_follow_base}{timeout}) * 10000); > $messageSender->sendMove($targetpos->{x}, $targetpos->{y}); > } else { > # Can not found a solution. Maybe stay! or move onto my master!! > stand() if ($char->{sitting}); > $targetpos = $player->{pos_to}; > > #fixed closestWalkableSpot - by the simple direct copying > foreach my $z2 ( [0,0], [0,1],[1,0],[0,-1],[-1,0], [-1,1],[1,1],[1,-1],[-1,-1],[0,2],[2,0],[0,-2],[-2,0] ) { > next if !$field->isWalkable($targetpos ->{x} + $z2->[0], $targetpos ->{y} + $z2->[1]); > $targetpos ->{x} += $z2->[0]; > $targetpos ->{y} += $z2->[1]; > } > $messageSender->sendMove($targetpos->{x}, $targetpos->{y}); > } 1955d1998 < 1960d2002 < 2270,2271c2312,2321 < my $player = Actor::get($ID); < next unless UNIVERSAL::isa($player, 'Actor::Player'); --- > # By LabMouse > my $player; > if ((!$char->{party}{users}{$ID})||(($char->{party}{users}{$ID})&&($players{$ID}))) { > $player = $players{$ID}; > } else { > $player = $char->{party}{users}{$ID}; > } > > #my $player = Actor::get($ID); > #next unless UNIVERSAL::isa($player, 'Actor::Player'); 2280,2282c2330,2334 < my $pos = $player->position; < $party_skill{x} = $pos->{x}; < $party_skill{y} = $pos->{y}; --- > # By LabMouse > my $pl_pos; > $pl_pos = calcPosition($players{$ID}); > $party_skill{x} = $pl_pos->{x}; > $party_skill{y} = $pl_pos->{y}; control\timeouts.txt 13c13 < reconnect 10 --- > reconnect 30 67c67 < ai_wipe_check 30 --- > ai_wipe_check 29 118a119 > 121c122 < ai_follow_base 25 --- > ai_follow_base 75 control\responses.txt 76a77 76a77 > statusS1 HP: %$char_hp/%$char_hp_max SP: %$char_sp/%$char_sp_max control\config.txt 56a57 > pmtoParty 1 control\timeouts.txt 121c122 < ai_follow_base 25 --- > ai_follow_base 75