Advertisement
KeplerBR

emblemRecord

Nov 25th, 2012
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.56 KB | None | 0 0
  1. # Plugin emblemRecord by KeplerBR
  2. # Thanks to EternalHarvest
  3. #
  4. # The plugin will collect the emblems of the guilds of players who are close and save on the folder logs
  5. # For more information, see the topic
  6.  
  7. package emblemRecord;
  8.     use strict;
  9.     use warnings;
  10.     use Plugins;
  11.     use Log qw(message warning);
  12.     use Globals;
  13.     use Settings;
  14.  
  15.     use Compress::Zlib; # http://search.cpan.org/dist/Compress-Zlib/
  16.  
  17.     #Register Plugin and Hooks
  18.     Plugins::register("emblemRecord", "Collect and save the emblems on the folder logs", \&on_unload);
  19.         my $hooks = Plugins::addHooks(
  20.             ['charNameUpdate', \&start_request],
  21.             ['packet/guild_emblem', \&save_emblem],
  22.         );
  23.    
  24.     #On Unload code
  25.     sub on_unload {
  26.         Plugins::delHook("charNameUpdate", $hooks);
  27.         Plugins::delHook("packet/guild_emblem", $hooks);
  28.     }
  29.  
  30.     #On Action
  31.     sub start_request {
  32.         my $hookname = shift;
  33.         my $args = shift;
  34.  
  35.         my $guildID = unpack("v1", $args->{player}{guildID});
  36.         my $emblemID = unpack("v1", $args->{player}{emblemID});
  37.         my $caminho = $Settings::logs_folder . "\emblem " . $guildID . " - " . $emblemID . ".bmp";
  38.  
  39.         if ($guildID && $emblemID && !-e $caminho) {
  40.             $messageSender->sendGuildRequestEmblem($guildID);
  41.         }
  42.     }
  43.  
  44.     sub save_emblem {
  45.         my ($self, $args) = @_;
  46.         my $guildID = unpack("v1", $args->{guildID});
  47.         my $emblemID = unpack("v1", $args->{emblemID});
  48.         my $emblemBtye = $args->{emblem};
  49.  
  50.         # Uncompress -> Requires module Zlib
  51.         my $emblemUncompressed = uncompress($emblemBtye);
  52.  
  53.         # Loop to change the color pink to white
  54.         #  In a 24-bit BMP file, the header occupies about 54 bytes. But it does not matter to us,
  55.         #  so lets skip that part. Then will be reading the following bytes to get the color
  56.         #  pink, if found, will be substituted for white
  57.         # The emblems always has the size 24x24, with the header, equivalent to about 1782 bytes,
  58.         #  or 3564 characters.
  59.         my $emblemHex = unpack("H*", $emblemUncompressed);
  60.         my $byte1; my $byte2; my $byte3;
  61.         for (my $i = 102; $i < 3564; $i += 6) {
  62.             $byte1 = hex(substr($emblemHex, $i, 2));
  63.             $byte2 = substr($emblemHex, $i + 2, 2);
  64.             $byte3 = hex(substr($emblemHex, $i + 4, 2));
  65.  
  66.             if ($byte1 > 250 && $byte2 eq '00' && $byte3 > 250) {
  67.                 substr($emblemHex, $i + 2, 2) = 'FF';
  68.             }
  69.         }
  70.  
  71.         # Save emblem
  72.         my $nameFile = "emblem " . $guildID . " - " . $emblemID . ".bmp";
  73.         my $file = $Settings::logs_folder . "/" . $nameFile;
  74.         open my $DUMP, '>:raw', $file;
  75.         print $DUMP pack("H*", $emblemHex);
  76.         close $DUMP;
  77.  
  78.         # Finalize
  79.         message "Emblem $nameFile has been saved to: $Settings::logs_folder \n";
  80.     }
  81.     1;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement