Plugins

Discussion in 'Openkore' started by ferry_gukguk, May 21, 2008.

Discuss Plugins in the Openkore area at Nyit-Nyit.Net

Thread Status:
Not open for further replies.
  1. ferry_gukguk Gukguk Love Cat Level 2

    Messages:
    1,205
    Likes Received:
    82
    Trophy Points:
    73
    Hi Teman-Teman Pengunjung setia Ragnarok @ Nyit-Nyit.Net

    Sekarang Plugins Openkore bisa di share disini. (Di Thread sebelah agak berantakan..)

    Nikmati petualangan anda di Dunia Maya bersama Ragnarok @ Nyit-Nyit.Net :peace:

    Tambahan ! !
    Thread ini khusus untuk Share Plugins.
    Untuk Request dan tanya-tanya silahkan di sini

    Untuk para member, dilarang melakukan tanya - jawab di thread ini.
    Bagi yang melanggar, Warning tanpa konfirmasi.

    Terima Kasih,
    -_-

    FerryGukguk
     

    Gunakan jasa Rekber N3 untuk menjamin jual beli anda atau menghindari penipuan dengan meng klik disini
  2. ferry_gukguk Gukguk Love Cat Level 2

    Messages:
    1,205
    Likes Received:
    82
    Trophy Points:
    73
    Web Monitor Plugins

    Plugins khusus untuk monitoring Bot lewat web..

    Instalisasi :
    Extract hasil download attachment dibawah.
    Copy File berikut kedalam folder plugins di openkore
    [-] WWW (Folder)
    [-] template.pm (File)
    [-] WebMonitorPlugins.pl (File)
    [-] webMonitorServer.pm (File)

    Setelah diCopy, buka web browser anda,
    ketik ini :
    localhost:8802

    Plugins ini membuka port 8802 unt web monitornya.

    Tested menggunakan Openkore V 2.0.3
     

    Attached Files:

  3. ferry_gukguk Gukguk Love Cat Level 2

    Messages:
    1,205
    Likes Received:
    82
    Trophy Points:
    73
    Plugins Move Portal Version 2.0 Beta

    Thank's to Qpalzm

    Berpindah secara otomatis jika dekat dengan portal
    Plugins ini dibuat untuk Server yang tidak menyediakan skill "Teleport" (idRO Fun and Chat Server) yang digunakan untuk menghindari player dari portal

    Config yang dipakai untuk config.txt :
    moveAuto_portal (flag)
    1 - Enable
    2 - Disable

    moveAuto_portal_x (koodinat)
    Berpindah ke lockMap di posisi x

    moveAuto_portal_y (koordinat)
    Berpindah ke lockMap di posisi y

    Config yang dipakai untuk timeouts.txt :
    ai_move_portal (delay)
    Berapa lama delay unt berpindah setelah bertemu portal

    Warning !!
    teleportAuto_portal di config.txt harus diset 0

    Cara Install
    1. Download File Attachment dibawah ini
    2. Extract hasil download
    3. Masukkan hasil extract tadi kedalam folder Openkore\plugins
     

    Attached Files:

  4. Qpalzm 3 SD Level 2

    Messages:
    427
    Likes Received:
    5
    Trophy Points:
    18
    Disconnect Auto Plugins Version 2.0

    Keterangan :
    Merubah fungsi teleport auto menjadi disconnect auto
    Plugins ini dibuat untuk Server yang tidak menyediakan
    skill "Teleport" (idRO Fun and Chat Server)
    yang digunakan untuk memutuskan hubungan pada saat tertentu
    Dibuat oleh Qpalzm

    Special thank's to FerryGukguk atas dukungan dan support
    Special thank's to WarAngel atas tutor yang sangat membantu

    Kode yang dipakai untuk config.txt :
    disconnectAuto_hp
    Otomatis disconnect pada saat hp memenuhi syarat

    disconnectAuto_sp
    Otomatis disconnect pada saat sp memenuhi syarat

    disconnectAuto_minAggressives
    Otomatis disconnect pada saat jumlah agresif lebih banyak

    disconnectAuto_minAggressivesInLock
    Otomatis disconnect pada saat jumlah agresif lebih banyak (pada lockmap saja)

    Warning !!
    Pastikan Value dibawah ini dikosongkan (TIDAK BOLEH DIISI)
    Code:
    teleportAuto_hp
    teleportAuto_sp
    teleportAuto_minAggressives
    teleportAuto_minAggressivesInLock
    Cara Install
    1. Download Attachment dibawah ini
    2. Extract hasil download tadi
    3. Copy-kan hasil extract tadi kedalam folder Openkore\plugins

    happy RO :smiley_beer:
     

    Attached Files:

  5. ferry_gukguk Gukguk Love Cat Level 2

    Messages:
    1,205
    Likes Received:
    82
    Trophy Points:
    73
    Auto Delete and Make Char Plugin

    Keterangan :
    Plugin ini digunakan untuk menghapus dan membuat karakter di Ragnarok Online
    Biasa digunakan untuk Farming Novice (Mendapatkan Novice Potion, dsb)

    Instalisasi :
    [-] Download Plugin Attachment dibawah ini..
    [-] Extract hasil download tersebut
    [-] Copy File Auto Delete and Make Char.pl hasil Extract tersebut kedalam folder Openkore\plugins

    Control :
    config.txt
    macros.txt
    Code:
    do conf autodelete 1 kalo tugas bot nya dah selese terus do relog char lo ilang!
    ---------------
    Credit From :
    SkyWorld
    www.d-bests.com
     

    Attached Files:

  6. Qpalzm 3 SD Level 2

    Messages:
    427
    Likes Received:
    5
    Trophy Points:
    18
    Disconnect Auto Plugins Version 3.0

    News :
    Versi 3 ini aku update ditambah dengan fungsi DC pada saat melihat monster...

    tapi bukan sembarang DC lho... DC dengan waktu yang bisa ditentukan di config.txt...

    enjoy!! :smiley_beer:

    Keterangan :
    Merubah fungsi teleport auto menjadi disconnect auto
    Plugins ini dibuat untuk Server yang tidak menyediakan
    skill "Teleport" (idRO Fun and Chat Server and Legend Server)
    yang digunakan untuk memutuskan hubungan pada saat tertentu
    Dibuat oleh Qpalzm

    Special thank's to FerryGukguk atas dukungan dan support
    Special thank's to WarAngel atas tutor yang sangat membantu


    Kode yang dipakai untuk config.txt :
    disconnect_plugin (flag)
    1 - Enable
    2 - Disable

    disconnectAuto_time
    waktu dalam detik untuk disconnectAuto hp, sp dan Aggressives

    disconnectAuto_monster_time
    waktu dalam detik untuk disconnect apabila monster berflag 4 di mon_control terlihat di layar

    disconnectAuto_hp
    Otomatis disconnect pada saat hp memenuhi syarat

    disconnectAuto_sp
    Otomatis disconnect pada saat sp memenuhi syarat

    disconnectAuto_minAggressives
    Otomatis disconnect pada saat jumlah agresif lebih banyak

    disconnectAuto_minAggressivesInLock
    Otomatis disconnect pada saat jumlah agresif lebih banyak (pada lockmap saja)


    Kode yang dipakai untuk mon_control.txt :
    syntax : <monster> <attack> <teleport> <search> <skillcancel> <lv> <joblv> <hp> <sp> <weight>

    <teleport>:
    1 teleport apabila monster terlihat di layar
    2 teleport apabila monster menyerang anda
    3 disconnect selama 30 detik apabila monster terlihat di layar
    4 disconnect selama x detik apabila monster terlihat di layar (x dapat diatur di config.txt)
    ini hanya digunakan dalam mode auto attack

    Warning !!
    Pastikan Value dibawah ini dikosongkan (TIDAK BOLEH DIISI)
    Code:
    teleportAuto_hp
    teleportAuto_sp
    teleportAuto_minAggressives
    teleportAuto_minAggressivesInLock

    Cara Install
    1. Download Attachment dibawah ini
    2. Extract hasil download tadi
    3. Copy-kan hasil extract tadi kedalam folder Openkore\plugins

    happy RO :smiley_beer:
     

    Attached Files:

  7. sayona TK 0 Kecil Banned

    Messages:
    69
    Likes Received:
    0
    Trophy Points:
    31
    Plugins waitParty

    Keterangan :
    Plugins ini memerintahkan Master mencari Slave

    Control :
    config.txt
    Code:
    follow_wait (flag)
    follow_wait_inLockOnly (flag)
    flag :
    1 - Enable
    0 - Disable

    Cara Install :
    [1] Download waitParty.zip dari Attachment dibawah ini
    [2] Extract hasil download
    [3] Copy hasil extract kedalam folder Openkore\plugins

    Credit goes to original writer/creator
     

    Attached Files:

  8. sayona TK 0 Kecil Banned

    Messages:
    69
    Likes Received:
    0
    Trophy Points:
    31
    Avoid Skill Plugins

    Keterangan :
    Menghindar dari Skill yang akan digunakan kepada Anda

    Control
    Code:
    avoidSkill namaSkilldisini{
    radius (Jika skill area, taro radiusnya disini)
    source (taro Player ato Monster disini. Case Sensitive. Kosongkan jika ingin keduanya)
    method (value)
    0 - Random menurut radius atau step
    1 - Pindah menurut step
    2 - Pindah sekitar target
    3 - Teleport
    4 - Attack (hanya monster)
    5 - Use skill. (hanya monster)
    }
    Contoh :

    avoidSkill Warp Portal {
    source Player
    radius 0
    method 0
    step 10
    }

    avoidSkill Hammer Fall {
    source Monster
    method 2
    radius 1
    step 10
    }

    avoidSkill Safety Wall {
    source Monster
    method 1
    radius 2
    step 10
    }
    avoidSkill Ice Wall {
    source Player
    method 3
    }
    avoidSkill Heaven's Drive {
    source Monster
    method 2
    radius 2
    step 10
    }
    avoidSkill Brandish Spear {
    source Monster
    method 3
    }
    avoidSkill Fire Bolt, Fire Wall, Water Ball {
    source Monster
    method 4
    radius 15
    step 10
    }
    avoidSkill Fire Bolt, Fire Wall, Water Ball {
    source Monster
    method 5
    radius 15
    step 10
    skill Provoke
    lvl 1
    }


    Cara Install :
    [1] Download avoidSkill.zip dari Attachment dibawah ini
    [2] Extract hasil download
    [3] Copy hasil extract kedalam folder Openkore\plugins

    Credit : Harry is Back
     

    Attached Files:

  9. ferry_gukguk Gukguk Love Cat Level 2

    Messages:
    1,205
    Likes Received:
    82
    Trophy Points:
    73
    refineAuto Plugins

    Keterangan :
    Melakukan Refine dengan bertanya pada NPC. Tidak menambah kemungkinan berhasil, hasil refine sama seperti refine yang normal (Refine NPC)

    Biasanya digunakan untuk refine dalam jumlah banyak.
    Misalnya 100 Shoes maw di upgrade ampe +7.

    Control :
    config.txt
    Code:
    # refineAuto			enable / disable refineAuto
    # refineAuto_npc			lokasi npc refine <map> (koordinatX) (koordinatY)
    # refineAuto_distance		distance kamu dgn npc
    # refineAuto_maxRefine		maximum refine rate
    # refineAuto_npc_steps		npc talking sequence ketika refining
    # refineAuto_equip		nama equip yang ingin direfine, tanpa +
    # refineAuto_useMagnifier	menggunakan magnifier untuk menidentifikasi item yang belum diidentifikasi
    # refineAuto_material		barang yang digunakan unt merefine
    # refineAuto_minZenny		zeny minimum yg ada sebelum merefine
    # refineAuto_getAutoAdjust	automatically adjusts getAuto
    # refineAuto_incremental	when incremental refining should start (lupa lg apa ini ya.. hohohho)
    # refineAuto_dcWhenDone		disconnect if resources are depleted
    Contoh :
    Code:
    refineAuto 1
    refineAuto_npc morocc_in 74 38
    refineAuto_distance 3
    refineAuto_maxRefine 9
    refineAuto_npc_steps r1 r0
    refineAuto_equip Mink Coat [1]
    refineAuto_useMagnifier 0
    refineAuto_material Elunium
    refineAuto_minZenny 5000
    refineAuto_getAutoAdjust 1
    refineAuto_incremental 9
    refineAuto_dcWhenDone 0
    Menempa Mink Coat [1] di morocc sampai +9

    Cara Install :
    [1] Download refineAuto.zip dari Attachment dibawah ini
    [2] Extract hasil download
    [3] Copy hasil extract kedalam folder Openkore\plugins
    Code:
    Credit To : Harry, www.d-bests.com
    cma compatible unt openkore versi 1.9.x
     

    Attached Files:

  10. ferry_gukguk Gukguk Love Cat Level 2

    Messages:
    1,205
    Likes Received:
    82
    Trophy Points:
    73
    Plugins AutoTrade

    Keterangan :/
    Melakukan autoTrade untuk membeli suatu item dari karakter lain

    Control:
    config.txt
    Code:
    tradeAuto 1
    dealAuto 2
    
    Buat file baru bernama autotrade.txt di dalam folder control dengan format
    Code:
    # [item name] [price]
    
    Contoh
    Code:
    Jellopy 100000
    
    Keterangan : Membeli jellopy dengan harga 100k

    Anda bisa membuat macro untuk membuka pub membeli suatu barang

    The Plugins :
    Code:
    package autoTrade;
    #ported from messykorexp by Joseph
    #original code by systeman
    
    use strict;
    use Plugins;
    use Globals;
    use Log qw(message warning error debug);
    use AI;
    use Misc;
    use Network::Send;
    use Utils;
    
    Plugins::register('autoTrade', 'automated chat room dealing', \&Unload);
    my $hook1 = Plugins::addHook('AI_pre', \&call);
    my $hook2 = Plugins::addHook('parseMsg/pre', \&packet);
    
    # load table file
    our %trade_lut;
    my $file = "autotrade.txt";
    #my $cfID = Settings::addConfigFile($file, \%trade_lut, \&FileParsers::parseDataFile_lc);
    my $cfID = Settings::addControlFile($file, loader => [\&FileParsers::parseDataFile_lc, \%trade_lut]);
    #Settings::load($cfID);
    undef $file;
    
    sub Unload {
    Plugins::delHook('AI_pre', $hook1);
    Plugins::delHook('parseMsg/pre', $hook2);
    Settings::removeFile($cfID);
    }
    
    my $dealTrade;
    my $dealFinalize;
    my $tradeDealAddItem;
    my $itemAddTimeout;
    
    # TIMEOUTS: you can change these if you want
    
    # time to wait for them to add items before cancelling?
    my $itemWaitTime = 20;
    # time to wait before accepting deal request?
    my $dealAcceptTime = 2;
    # time to wait before adding zeny once they finalize their item choices?
    my $zenyAddDelay = 3;
    
    sub packet {
    my $hookName = shift;
    my $args = shift;
    my $switch = $args->{switch};
    my $msg = $args->{msg};
    
    if ($switch eq "00E9?") {
    my $amount = unpack("L1?", substr($msg, 2,4));
    my $ID = unpack("S1?", substr($msg, 6,2));
    if ($ID > 0) {
    # they added an item, so reset the timeout
    $tradeDealAddItem = 1;
    }
    }
    if ($switch eq "01F4?") {
    #deal request, wait before accepting
    $itemAddTimeout = time;
    }
    if ($switch eq "00E5?" || $switch eq "01F4?") {
    #deal request, wait before accepting
    $itemAddTimeout = time;
    }
    if ($switch eq "00EC") {
    my $type = unpack("C1?", substr($msg, 2, 1));
    if ($type == 1) {
    #they finalize their item selections
    $itemAddTimeout = time;
    }
    }
    }
    
    sub call {
    AUTOTRADE: {
    if (AI::is("","tradeAuto", "deal") && $config{tradeAuto} && $char->{skills}{NV_BASIC}{lv} > 4) {
    if (AI::action ne "tradeAuto" && AI::action ne "deal" && $::currentChatRoom ne "") {
    message "Begin auto-trade mode.\n", "autoTrade";
    if ($config{dealAuto}) {
    $config{dealAuto} = 0;
    Misc::configModify("dealAuto", $config{dealAuto});
    }
    AI::queue("tradeAuto");
    }
    
    last AUTOTRADE if !AI::is("tradeAuto","deal");
    
    if (Utils::timeOut($itemAddTimeout,$dealAcceptTime) && $::incomingDeal{name} && !$::currentDeal{name}) {
    $messageSender->sendDealAccept();
    undef $dealFinalize;
    undef $dealTrade;
    $itemAddTimeout = time;
    message "Sent deal accept, begin trading\n", "autoTrade";
    }
    last AUTOTRADE if (!$::currentDeal{name});
    if (!Utils::timeOut($itemAddTimeout,$itemWaitTime) && $tradeDealAddItem) {
    $itemAddTimeout = time;
    undef $tradeDealAddItem;
    }
    if (($::currentDeal{other_finalize} && Utils::timeOut($itemAddTimeout,$zenyAddDelay)) || Utils::timeOut($itemAddTimeout,$itemWaitTime)) {
    if ($::currentDeal{other} eq ()) {
    message "Other person didn’t add any items, cancelling…\n", "autoTrade";
    $messageSender->sendCurrentDealCancel();
    $itemAddTimeout = time;
    } elsif (!$dealFinalize) {
    my $sumvalue;
    
    my @currentDealOther;
    foreach (keys %{$::currentDeal{other}}) {
    push @currentDealOther, $_;
    }
    my $max = @currentDealOther;
    for (my $i = 0;$i < $max;$i++) {
    my $found = 0;
    my $ID = $currentDealOther[$i];
    my $name = lc main::itemName($::currentDeal{other}{$ID});
    if (defined $trade_lut{$name}) {
    message "Add ".$trade_lut{$name}."z x $::currentDeal{other}{$ID}{amount} to deal\n", "autoTrade";
    $sumvalue += ($::currentDeal{other}{$ID}{amount} * $trade_lut{$name});
    } else {
    message "Other person added item which is not in buy list, cancelling…\n", "autoTrade";
    $messageSender->sendCurrentDealCancel();
    last AUTOTRADE;
    }
    }
    message "Trading $sumvalue zeny and confirming\n", "autoTrade";
    $messageSender->sendDealAddItem(0, $sumvalue);
    sleep(0.5);
    $messageSender->sendDealFinalize();
    $dealFinalize = 1;
    $itemAddTimeout = time;
    }
    
    }
    if ($::currentDeal{you_finalize} && Utils::timeOut($itemAddTimeout,$itemWaitTime)) {
    message "Other person didn’t accept the final trade, cancelling…\n", "autoTrade";
    $messageSender->sendCurrentDealCancel();
    $itemAddTimeout = time;
    }
    if (!$dealTrade && $::currentDeal{you_finalize} && $::currentDeal{other_finalize}) {
    message "Accepting final trade\n", "autoTrade";
    $messageSender->sendDealTrade();
    $dealTrade = 1;
    }
    }
    }
    }
    
    return 1;
    
     
    1 person likes this.
  11. ferry_gukguk Gukguk Love Cat Level 2

    Messages:
    1,205
    Likes Received:
    82
    Trophy Points:
    73
    KillSteal Plugins v 2.0

    Keterangan :
    Melakukan KillSteal a.k.a Nyampah monster yang digebuk orang lain

    Compatibility :
    Openkore 2.0.7 Only

    Download Link :
    http://n3.vc/t67693
     
  12. ferry_gukguk Gukguk Love Cat Level 2

    Messages:
    1,205
    Likes Received:
    82
    Trophy Points:
    73
    KillSteal Plugins v 3.0

    Keterangan :
    Melakukan KillSteal a.k.a Nyampah monster yang digebuk orang lain

    Compatibility :
    Openkore-what-will-become-2.1 Only

    Download Link :
    http://n3.vc/t68044
     
  13. ferry_gukguk Gukguk Love Cat Level 2

    Messages:
    1,205
    Likes Received:
    82
    Trophy Points:
    73
    Disconnect Auto Plugins Version 4.0

    News :
    Versi 4 ini support bwt openkore what-will-become-2.1

    enjoy!! :smiley_beer:

    Keterangan :
    Merubah fungsi teleport auto menjadi disconnect auto
    Plugins ini dibuat untuk Server yang tidak menyediakan
    skill "Teleport" (idRO Fun and Chat Server and Heroes Server)
    yang digunakan untuk memutuskan hubungan pada saat tertentu
    Dibuat oleh Qpalzm dan di update oleh FerryGukguk

    Special thank's to FerryGukguk atas dukungan dan support
    Special thank's to WarAngel atas tutor yang sangat membantu

    Kode yang dipakai untuk config.txt :
    disconnect_plugin (flag)
    1 - Enable
    2 - Disable

    disconnectAuto_time
    waktu dalam detik untuk disconnectAuto hp, sp dan Aggressives

    disconnectAuto_monster_time
    waktu dalam detik untuk disconnect apabila monster berflag 4 di mon_control terlihat di layar

    disconnectAuto_hp
    Otomatis disconnect pada saat hp memenuhi syarat

    disconnectAuto_sp
    Otomatis disconnect pada saat sp memenuhi syarat

    disconnectAuto_minAggressives
    Otomatis disconnect pada saat jumlah agresif lebih banyak

    disconnectAuto_minAggressivesInLock
    Otomatis disconnect pada saat jumlah agresif lebih banyak (pada lockmap saja)


    Kode yang dipakai untuk mon_control.txt :
    syntax : <monster> <attack> <teleport> <search> <skillcancel> <lv> <joblv> <hp> <sp> <weight>

    <teleport>:
    1 teleport apabila monster terlihat di layar
    2 teleport apabila monster menyerang anda
    3 disconnect selama 30 detik apabila monster terlihat di layar
    4 disconnect selama x detik apabila monster terlihat di layar (x dapat diatur di config.txt)
    ini hanya digunakan dalam mode auto attack

    Warning !!
    Pastikan Value dibawah ini dikosongkan (TIDAK BOLEH DIISI)
    Code:
    teleportAuto_hp
    teleportAuto_sp
    teleportAuto_minAggressives
    teleportAuto_minAggressivesInLock

    Cara Install
    1. Download View attachment Disconnect.zip
    2. Extract hasil download tadi
    3. Copy-kan hasil extract tadi kedalam folder Openkore\plugins

    happy RO :smiley_beer:
     
  14. ivan95 Pra TK Level 1

    Messages:
    36
    Likes Received:
    0
    Trophy Points:
    6
    Another Delphine Key Leecher
    Code:
    #	addkey v0.3 by blackmail
    #	Oct 30, 2010
    #
    #	Another delphine key leecher -
    #	edited from delphine plugin by eternalharvest, based on original patches and scripts by ToXCiL
    #	http://openkore.svn.sourceforge.net/viewvc/openkore/plugins/delphine/trunk/
    #	http://forums.openkore.com/viewtopic.php?p=35377#p35377
    #
    #	credits to Smith_ for warpra autokey (sori kodenya banyak yang ane contek, hehe)
    #	http://www.d-bests.com/viewtopic.php?f=46&t=12540#p102448
    #
    #	This source code is licensed under the
    #	GNU General Public License, Version 2.
    #	See http://www.gnu.org/licenses/gpl.html
    #
    #	CONTOH CONFIG:
    #	delphine 1
    #	delphine_web_1 http://key.d-bests.com
    #	delphine_web_2 http://www.facebook.com/topic.php?uid=107506092605605&topic=1011, tail
    #	delphine_web_3 http://dwarna-ro.blog****.com/feeds/3019710138396137383/comments/default
    
    package addkey;
    use strict;
    # use Data::Dumper;
    # use warnings;
    use Globals qw/$net %config/;
    use Log qw/message warning error debug/;
    use Translation qw/T TF/;
    use Utils qw/timeOut getFormattedDate getHex/;
    use Utils::HttpReader;
    use constant {
    NAME => 'addkey',
    CF_KEY => 'delphine-key.txt',
    };
    {
    my $hooks = Plugins::addHooks(
    ['start3', \&start],
    ['Commands::cmdConf', \&onCmdConf],
    ['postloadfiles', \&parseConfig],
    ['Network::serverRecv', \&serverRecv], # hook in DirectConnection
    );
    Plugins::register(NAME, T('Another delphine-key leecher'), sub { Plugins::delHooks($hooks) });
    }
    our $cf_key;
    our @key;
    our $encrypter = sub {};
    our @check; # hold delphine-key.txt n web to check
    # Check delphine config, add table file.
    sub start {
    $cf_key = Settings::addTableFile(CF_KEY, loader => [\&loadKey, \@key], mustExist => 0);
    my %keyCheck = (
    'delphine' => 1,
    'delphine_web_1' => 'http://key.eliteenterpriseidro.com/',
    'delphine_web_2' => 'http://www.facebook.com/topic.php?uid=107506092605605&topic=1011, tail');
    foreach my $k (keys %keyCheck) {
    if (!exists($config{$k})) {
    error TF("Cannot find %s on config file. Setting to default (%s)\n", $k, $keyCheck{$k}), NAME;
    Misc::configModify($k, $keyCheck{$k});
    delete $keyCheck{$k};
    }
    }
    &parseConfig() if !%keyCheck;
    }
    # check url when delphine config called
    sub onCmdConf {
    my (undef, $args) = @_;
    return unless ($args->{key} =~ m/^delphine_web_(\d+)$/g && exists $config{$args->{key}} && ${$args->{val}});
    my $i = $1;
    my ($url, $tail) = split / *, */, ${$args->{val}};
    $tail =~ s/\s+//g;
    $tail = lc($tail) eq 'tail'? 1 : 0;
    $url = urlCheck($url);
    if ($url) {
    $check[$i]->{url} = $url;
    $check[$i]->{tail} = 1;
    } else {
    error TF("Invalid! (%s)\n", $url), NAME;
    ${$args->{val}} = undef;
    }
    }
    # push url from delphine config into @check
    sub parseConfig {
    @check = ();
    push(@check, 'self');
    for (my $i = 1; exists $config{"delphine_web_$i"}; $i++) {
    my ($url, $tail) = split / *, */, $config{"delphine_web_$i"};
    my $print;
    if ($config{"delphine_web_$i"}) {
    $url = urlCheck($url);
    } else {
    $print = TF("Config delphine_web_%s has no value!\n", $i);
    }
    if ($url) {
    push (@check, {'url' => $url, 'tail' => $tail});
    } elsif (!$print) {
    $print = TF("Unknown value (%s) on config delphine_web_%s!\n", $config{"delphine_web_$i"}, $i);
    Misc::configModify("delphine_web_$i", undef);
    }
    error($print, NAME) if $print;
    }
    }
    # Encrypt Delphine
    sub serverRecv {
    my (undef, $args) = @_;
    return unless ($net->getState < Network::CONNECTED_TO_MASTER_SERVER && $config{'delphine'});
    if (length(${$args->{msg}}) == 20) {
    my $print = "Our delphine key expired!\n";
    foreach my $site (@check) {
    my $msg = ${$args->{msg}};
    my $expired;
    if ($site eq 'self'){
    Settings::loadByHandle($cf_key);
    } elsif (my $temp = &checkWeb($site->{url}, $site->{tail})) {
    $expired = $temp;
    $print = TF("Key from %s expired!\n", $site->{url});        
    }
    if (@key) {
    # Guess missing key
    my %testKey;
    map { $testKey{$_} = 1 } (0..255);
    my @check;
    for (my $i = 0; $i < @key; $i++) {
    exists $testKey{$key[$i]} ? delete $testKey{$key[$i]} : push @check, $i;
    }
    map { $key[shift @check] = $_} keys %testKey;
    $encrypter = eval sprintf 'sub { ${$_[0]} =~ y/\x00-\xff/%s/ }', join '', map { sprintf '\x%.2x', $_ } @key;
    }
    $encrypter->(\$msg);
    if (getHex($msg) =~ m/^DC 01 14 00/g) {
    warning ("OK!\n", NAME);
    &writeKey($site->{url}, $expired) if ($site ne 'self');
    last;
    } else {
    warning ($print, NAME) if $print;
    }
    }
    } #else { debug TF("serverRecv hex: %s\n", getHex(${$args->{msg}})), NAME, 0 }
    $encrypter->($args->{msg});
    }
    # urlCheck($url)
    # returns: valid http url or undef
    sub urlCheck {
    my($value) = shift;
    # check for illegal characters
    return if $value =~ /[^a-z0-9\:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,\;\=\.\-\_\~\%]/i;
    # check for hex escapes that aren't complete
    return if $value =~ /%[^0-9a-f]/i; #TODO: %???
    return if $value =~ /%[0-9a-f](:?[^0-9a-f]|$)/i;
    $value = 'http://'. $value if ($value !~ m!^(\w+)://!i);
    my($scheme, $authority, $path, $query, $fragment) = $value =~ m|(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?|;
    return unless lc($scheme) eq 'http';
    # fully-qualified URIs must have an authority section that is a valid host
    return unless($authority);
    # allow a port component
    my($port) = $authority =~ /:(\d+)$/;
    $authority =~ s/:\d+$//;
    # re-assemble the URL per section 5.3 in RFC 3986
    my $out = $scheme . ':';
    $out .= '//' . $authority;
    $out .= ':' . $port if $port;
    $out .= $path;
    $out .= '?' . $query if (defined $query && length($query));
    $out .= '#' . $fragment if (defined $fragment && length($fragment));
    return $out;
    }
    # Load Key dari delphine-key.txt
    sub loadKey {
    my ($file, $key) = @_;
    @$key = ();
    
    message TF("Loading key...\n"), NAME;
    my $reader = new Utils::TextReader($file);
    until ($reader->eof) {
    local $_ = $reader->readLine;
    if ($_ =~ m/^#+/) {
    my $print = $_;
    $print =~ s/^#+//g;
    $print =~ s/[\r\n]//g;   # Remove line endings
    $print =~ s/^[\t\s]*//;   # Remove leading tabs and whitespace
    $print =~ s/\s+$//g;   # Remove trailing whitespace
    message TF("%s\n", $print), NAME;
    next;    
    }
    s/\s+//g;
    push @$key, map hex, map /(.{2})/g, $_;
    }
    unless (@$key == 0x100) {
    error TF("%s is in unknown format\n", $file), NAME;
    @$key = ();
    }
    }
    # checkWeb(url, [tail])
    # Returns: Expired date or undef if we can't find expired date
    # map found key from url to @key
    sub checkWeb {
    my ($web, $tail) = @_;
    $tail =~ s/\s+//g;
    $tail = lc($tail) eq 'tail'? 1 : 0;
    my $http = new StdHttpReader($web);
    message TF("Connect to %s...\n", $web), NAME;
    my %timeCheck = ( 'time' => time, 'timeout' => '60');
    # FIXME: ada cara lain kah??
    sleep 1 until ($http->getStatus == HttpReader::DONE || $http->getStatus == HttpReader::ERROR || timeOut(\%timeCheck));
    if ($http->getStatus== HttpReader::DONE) {
    my $result = $http->getData($http->getSize());
    my $expired;
    my $tempKey;
    while ($result =~ m/((([A-F0-9]{2}|[X]{2})\s*){256})/gi) {
    $tempKey = $1;
    my $temp = substr($`, -500,500); # FIXME: ada cara lain?!!
    if ($temp =~ m/Expired\s*?((0[1-9]|[12][0-9]|3[01])[\s\S]+?)</i) {
    $expired = $1;
    $expired =~ s/[\n\r]+.*//g;
    $expired =~ s/\[.*\]$//g;
    $expired =~ s/(^\s+?)//;
    $expired =~ s/\s+$//g;
    $expired =~ s/\s*?((?![\x{0000}-\x{007F}]).|(&#\d+;))\s*?//g;
    }
    last unless $tail;
    }
    message TF("Expired	: %s\n", $expired||"Unknown"), NAME;
    if ($tempKey) {  
    @key = ();
    $tempKey =~ s/\s+//g;
    push @key, map hex, map /(.{2})/g, $tempKey;
    return ($expired||'Unknown');
    } else { error TF("Unable to get delphine key from %s\n", $web), NAME   }
    } else {
    error TF("Unable to reach %s [%s]\n", $web, (timeOut(\%timeCheck) ? 'timeout' : 'HttpReader::ERROR')), NAME;
    }
    return;
    }
    # writeKey(url, [expired])
    # writeKey to delphine-key.txt
    sub writeKey {
    my ($url, $expired) = @_;
    return unless $url;
    error TF("Can't find %s in folder %s\n", CF_KEY, (Settings::getTablesFolders)[1]), NAME
    unless Settings::getTableFilename(CF_KEY);
    message TF("Writing key...\n"), NAME;
    open my $f, '>:utf8', (Settings::getTableFilename(CF_KEY)
    || File::Spec->catfile((Settings::getTablesFolders)[1], CF_KEY));
    print $f "# Expired	: $expired\n" if $expired;
    print $f "# Log    	: ".getFormattedDate(time)." (".time.") from $url\n";
    print $f join ' ', map { sprintf "%.2X", $_ } @key;
    close $f;
    }
    1;
    
    Save to : addKey.pl, simpan ke folder plugins


    Code:
    delphine 1
    delphine_web_1 http://key.eliteenterpriseidro.com/
    delphine_web_2 http://www.facebook.com/topic.php?uid=107506092605605&topic=1011, tail
    
    tambahkan ke config.txt
     
Thread Status:
Not open for further replies.

Share This Page