- Anti Blinded status
Code: Select all
################################################
##Openkore :: opkSXMode plugin
##This plugin is licensed under the GNU GPL
##See http://www.gnu.org/licenses/gpl.html for the full license
##Beta version 1.0 by Ninkoman
##For Openkore Ragnarok Online Bot
##Test on Openkore SVN 8448 07/06/13
################################################
package opkSXMode;
use strict;
use Plugins;
use Globals;
Plugins::register('opkSXMode', 'Openkore XKore Utilities', \&on_unload);
my $hooks = Plugins::addHooks(
   ['packet/actor_moved', \&on_parseActor],
   ['packet/actor_exists', \&on_parseActor],
   ['packet/actor_connected', \&on_parseActor],
   ['packet/character_status', \&on_parseActor],
);
sub on_unload {
   Plugins::delHooks($hooks);
}
sub on_parseActor {
	my (undef,$args) = @_;
	return if(!$config{'XKore'});
	my $switch = $args->{switch};
	if ($switch eq "07F7" || $switch eq "07F8" || $switch eq "07F9" || $switch eq "0856" || $switch eq "0857" || $switch eq "0858") {
		antiHideDisplay(\%{$args},5,13);
	}elsif($switch eq "0078" || $switch eq "0079" || $switch eq "007B" || $switch eq "007C" || $switch eq "022A" || $switch eq "022B" || $switch eq "022C" || $switch eq "02ED" || $switch eq "02EE"){
		antiHideDisplay(\%{$args},2,10);
	}elsif($switch eq "02EC"){
		antiHideDisplay(\%{$args},3,11);
	}elsif ($switch eq "0119" || $switch eq "0229"){
		my ($ID, $param2, $param3) = unpack("x2 a4 x2 S2",$args->{RAW_MSG});
		my $actor = Actor::get($ID);
		if ($ID eq $accountID && $param2 & 16) {
			$args->{RAW_MSG} = substr($args->{RAW_MSG},0,8).pack("S",$param2 - 16).substr($args->{RAW_MSG},10,$args->{RAW_MSG_SIZE}-10);
		}elsif(ref($actor)){
			antiHideDisplay(\%{$args},2,8);
		}
	}
}
sub antiHideDisplay {
	my $args = shift;
	my $msg = $args->{RAW_MSG};
	my $ID_ops = shift;
	my $param2_ops = shift;
	my $msg_size = length($msg);
	my $ID = unpack("x${ID_ops} a4", $msg);
	my ($param2, $param3) = unpack("x${param2_ops} S2", $msg);
	if ($ID ne $accountID && ($param3 & 2 || $param3 & 4 || $param3 & 64)) {
		my ($newmsg,$newp2,$newp3);
		if ($param2 & 2) {
			$newp2 = $param2;
		}else {
			$newp2 = $param2 + 2;
		}
		if ($param3 & 2) {
			$newp3 = $param3 - 2;
		}elsif($param3 & 4){
			$newp3 = $param3 - 4;
		}elsif($param3 & 64){
			$newp3 = $param3 - 64;
		}else {
			$newp3 = $param3;
		}
		$args->{RAW_MSG} = substr($msg,0,$param2_ops).pack("S2",$newp2,$newp3).substr($msg,$param2_ops + 4,$msg_size - ($param2_ops + 4));
	}
}
return 1;



