Wednesday, June 20, 2012

Party Search Macro

IMPORTANT!
• You must have plugins for this to work. Read Bot Installation Guide (lowest part)

Macro for MASTER
• Go to control folder - macros.txt and paste this

#######################################
########FIND SLAVE#####################
#######################################
#slave is lost
automacro findSlave {
pm /x (.*) (.*) (.*)/
call {
$slavemap = $.lastMatch1
$slavemapx = $.lastMatch2
$slavemapy = $.lastMatch3
$mymap = $.map
if ($slavemap == $mymap) goto findslave
do pm "$.lastpm" x $.map $.pos
stop
:findslave
do pm "$.lastpm" x $.map $.pos
do move $slavemap $slavemapx $slavemapy
}
}
#when slave is found
automacro clear {
pm /clear/
call {
do eval AI::clear("move", "route");
}
}


Macro for Slave
• Go to control folder - macros.txt and paste this

################################
######FIND MASTER###############
################################
#find master
automacro findMaster {
timeout 3
console /^I lost my master/
call {
$master = @config (followTarget)
do pm "$master" x $.map $.pos
}
}
automacro findMaster2 {
timeout 3
console /^Calculating route to find master/
call {
$master = @config (followTarget)
do pm "$master" x $.map $.pos
}
}
#goto master
automacro gotoMaster {
pm /x (.*) (.*) (.*)/
call {
$pm = $.lastpm
if ($pm != $master) stop
do move $.lastMatch1 $.lastMatch2 $.lastMatch3
}
}
#when master is found
automacro foundMaster {
console /^Found my master!/
call {
do pm "$master" clear
}
}


Also adjust your MASTER/SLAVE's route_step
For Master: make it route_step 8
For Slave: make it route_step 18

HAPPY LEVELING!!

Disclaimer:
I do not own or Im not the one who made this macro, I just made it plain and simple for the newbies to understand it easily. Thank you!

Wednesday, May 16, 2012

Custom Map

FLD Creation Guide
How to extract custom maps and create FLD file

(note: short version)

1. Extract the map (gat and rsw)
2. Copy both to OpenKore\fields\tools
3. Download Perl or Strawberry Perl
4. Execute script: gat_to_fld.pl
5. Copy created .fld data to OpenKore\fields

You can either execute the script by using:

a perl interpreter of choice
the perl interpreter kore uses: start.exe

cd to kore's root folder
run the following command:

C:\Openkore-SVN>start.exe ! .\fields\tools\gat_to_fld.pl

Note: in this example the root folder was: C:\Openkore-SVN, yours can be different depending on where you have installed kore.

You Need Perl

ServerType

ServerType

serverType
Network parser module to use with your server.

File:Development.png The following documentation describes a feature that was greatly changed in SVN trunk (latest development version) since the last release.
It may work differently or not be available if you're using 2.0.7 or any older version.


Contents
[hide]

1 ServerTypes overview
1.1 Supported
1.2 Legacy
2 Determining kRO serverType
2.1 Compilation Date
2.2 Server Version
2.3 Packet Appearance
2.4 Notes
3 Links

ServerTypes overview
Supported

Named serverTypes can be loaded since r6870 and begin to appear in r7066 (not counting kRO serverType tree which started all that madness).
Server servertype
Official, Korea kRO_RagexeRE_0 8_1
Official, Taiwan twRO 21, 22
Official, Japan none
Official, Thailand tRO 21
Official, China none
Official, International iRO 22
Official, Philippines pRO 22
Official, Indonesia idRO 22
Official, Malaysia mRO 22
Official, Brazil bRO (Odin) 0
bRO_Thor (Thor) 22
Official, Russia rRO 0
Official, France fRO 0
Official, Middle East aRO 22
Private servers kRO_RagexeRE_*
kRO_Sakexe_* *


File:Development.png Implementation of this feature is expected to become outdated with server updates.
As OpenKore is a free project, if you stumble upon such updates, you are expected to fix the problem and contribute your changes back. Usually, server supporters will do that, but there isn't any for random private servers, and some official ones may not always be covered.
Legacy

Numeric serverTypes (0-22, 8_1-8_5) are outdated and aren't being updated to follow server updates, so they probably will not work correctly - that's a real reason to update from OpenKore 2.0.7 and stop using them, if you don't want to update them by yourself. Don't complain that there's just "some problems" with them if you don't have solutions too.

They're kept in OpenKore for use with really outdated official and private servers.

serverType 0 is also used as a base for serverTypes for official servers (except kRO).
Determining kRO serverType

OpenKore 2.0.7 and previous versions does not have kRO serverType and aren't capable of loading it without changes in source. To configure for an up to date pserver, you need svn trunk (or 2.1 when it becomes released), not 2.0.7.

Only official servers have their own serverType, so other servers (private ones) must find the server's executable compilation date and use the appropriate kRO serverType (newer versions) or Sakray serverTypes (older versions)

Currently, kRO serverTypes syntax is:

kRO_RagexeRE___

And Sakray ones is:

kRO_Sakexe___

You can find all serverType files in src/Network/Receive. Only serverTypes whose files actually do exist would work.
Compilation Date

Executable's compilation date can be changed, so don't really rely on it.

1. Download IpeViewer [1].

2. Open it and go the File > Open or just press F2. Select your server's executable.




3. Go to PE Header tab.

http://www.openkore.com/images/7/7e/ServerType-header.PNG



4. Beside the Time Data Stamp box, see the executable's compilation date.




5. Find the most suitable serverType file in src/Network/Receive/kRO.

For example, if the date was January 26, 2010, file name would be RagexeRE_2010_01_26a.pm.




6. Set serverType to "kRO_" and file name without extension.

For example, if file name was RagexeRE_2010_01_26a.pm, serverType would be kRO_RagexeRE_2010_01_26a.

If there is no file with exact compilation date, try the ones near to that date, or the latest available.
Server Version

Server version changes when there are incompatible changes in protocol (usually master_login packet changes at that point). Try serverTypes corresponding to the server's version. Use eAthena's packet_db as reference.
Packet Appearance

Since there are packets being continually introduced, you may inspect packets (and packet lengths) used on the server (either from already generated recvpackets.txt or from warnings on unknown packets). Use eAthena's packet_db as reference.
Notes

If you bot on a private server that uses eAthena, DO NOT use kRO_RagexeRE_0, as it is only meant to be used for the official kRO server.


Links

OpenKore's serverType files
eAthena's packet_db.txt
rAthena's packet_db.txt

Sunday, May 13, 2012

Packet Length Extractor

Packet Length Extractor

If you're having server problems, such as:

Packet Tokenizer: Unknown switch: xxxx
Getting disconnected after a few seconds
NPCs, players and monsters are not recognized by Kore (shown as Unknown)

Then generating a new recvpackets.txt might solve the problem. It's advisable to always extract the recvpackets before running Openkore. The file must be on tables folder.

The network data that the server sends to Kore, is a byte stream. Kore must be able to recognize messages inside that byte stream to be able to do something with it. But the size of the messages can vary from to server to server. Recvpackets.txt contains information about the size of each message, so Kore can correctly split the byte stream into messages.
Contents
[hide]

1 RO Tools
1.1 Usage
2 Packet Extractor
3 Packet Extractor v3
3.1 Usage
4 Notes

RO Tools

JCV's RO Tools v1.0.3 (Link down as of Jan 19, 2012. See instructions below for OpenPacketExtractor)

It's better to use JCV's RO Tools as it is more up to date and have some fixes for newer clients. Also it's much easier to maintain, but it has undesirable and outdated options in addition to the Openkore packet extractor.
Usage

Open RO Tools.
Click in the button with ... beside the box. Search for your's server executable (not server patcher) and open it.
File:button.PNG
On Extractor Type, check Full Disarm box.
File:full.PNG
Click on Start button and wait it to finish.
File:start.PNG
After it finishes, it will ask for you to save the file. Save it on tables folder, inside your Openkore's root folder. Override current file if needed.

Packet Extractor

OpenKore Packet Length Extractor v1.1.0 (Link down as of Jan 19,2012)
Also in OpenKore SVN.

Packet Extractor v3

In OpenKore SVN. (See kLab's forum post on Open Packet Extractor for more details.)

Packet extractor branch to work with new insert server list here clients.
Usage

Run packet_extract.pl with your ragexe file name as an argument. It will generate extractor.exe.
Run extractor.exe (works with wine on non-Windows) which will output recvpackets contents to STDOUT.

Notes

Recvpackets file can be renamed as long as recvpackets option on servers.txt is set accordingly. (See Connectivity Guide)
There may be problems extracting the recvpackets if your server's client has some kind of protection. You should deal with it (like unpack if binary is packed) before using packet extractor, if it fails to find anything.

Happy Mother Day's

Selamat Hari Ibu Untuk Semua Ibu Atas Muka Bumi Ni.
Jasa Anda Semua Amat Dihargai.
Duit Tak Banyak Nak Beli Barang Untuk Mak Aku.
Jadi Tak Leh Nak Beli Hadiah Lah.
Kesian Aku.
Tahun Depan La Plak Kot

Full Chemical Protection

automacro paket {
console /\[(jarak|dist)=(.*)\] (.*) \((\d+)\): (f|fcp|FCP)$/
exclusive 1
run-once 1
call {

$distance = $.lastMatch2
$namaPlayer = $.lastMatch3
$playerID = $.lastMatch4
$playerguild = @eval (exists $::players{$::playersID[$playerID]}->{guild} ? $::players{$::playersID[$playerID]}->{guild}{name} : 'null')

#Nama guild yg mau  FCP
$guild1 =
$guild2 =
$guild3 =
$guild4 =
$player1 =

if ($playerguild == $guild1) goto oke
if ($playerguild == $guild2) goto oke
if ($playerguild == $guild3) goto oke
if ($playerguild == $guild4) goto oke
if ($namaPlayer == $player1) goto oke
goto lain

:oke

if ($distance > 2 ) goto jauh

do sp 479 $playerID 5

goto end

:jauh
do e com

goto end
:lain
do c Ank Bukan Geng Aku P Belah...

:end

release paket
}
}

automacro sp {
console /\[(jarak|dist)=(.*)\] (.*) \((\d+)\): (fcp|FCP)$/
sp < 10%
exclusive 1
run-once 1
call kering
}

macro kering {
do c Tunggu Sat Sp Abis Neh $.sp
pause 0.2
release sp
}

Gospel With pubm

automacro paket {
pubm "gospel"
exclusive 1
run-once 1
call pket
}

macro pket{
do ss 369 10
release paket
}



Taip "gospel" bot akan buff player anda
Kalau Nak Bot Buff Tanpa Guild ,
Ganti $guild1 menjadi $player1
cth: $player1 = nama char kamu yg akan di beri buff


setelah diganti $guild1 menjadi $player1 kita harus tukar juga  if ($playerguild == $guild1) goto oke menjadi if ($namaPlayer == $player1) goto oke.

Contoh Bot Tukar Jadi Players

automacro link {
console /\[(jarak|dist)=(.*)\] (.*) \((\d+)\): (spirit|soul|\*Flag\s\d\*)$/
sp > 10%
call linker
}

macro linker {
$distance = $.lastMatch2
$namaPlayer = $.lastMatch3
$id = $.lastMatch4
$playerguild = @eval (exists $::players{$::playersID[$id]}->{guild} ? $::players{$::playersID[$id]}->{guild}{name} : 'null')

#Nama player yg mau di paket
$player1 =
$player2 =
$player3 =
$player4 =
$player5 =

if ($namaPlayer == $player1) goto oke
if ($namaPlayer == $player2) goto oke
if ($namaPlayer == $player3) goto oke
if ($namaPlayer == $player4) goto oke
if ($namaPlayer == $player5) goto oke
goto bukan

if ($id < 0) stop
if ($distance > 11) goto jauh

:oke
$jobID = @eval ($::players{$::playersID[$id]}->{jobID})
if ($jobID = 7) goto knight
if ($jobID = 13) goto knight
if ($jobID = 4008) goto knight
if ($jobID = 4014) goto knight
if ($jobID = 12) goto assassin
if ($jobID = 4013) goto assassin
if ($jobID = 10) goto smith
if ($jobID = 4011) goto smith
if ($jobID = 14) goto paladin
if ($jobID = 21) goto paladin
if ($jobID = 4015) goto paladin
if ($jobID = 4022) goto paladin
if ($jobID = 4012) goto sniper
if ($jobID = 11) goto sniper
if ($jobID = 16) goto professor
if ($jobID = 4017) goto professor
if ($jobID = 8) goto priest
if ($jobID = 4009) goto priest
if ($jobID = 15) goto champion
if ($jobID = 4016) goto champion
if ($jobID = 4010) goto wizard
if ($jobID = 4018) goto stalker
if ($jobID = 18) goto creator
if ($jobID = 4019) goto creator
if ($jobID = 4020) goto clown
if ($jobID = 4021) goto clown
if ($jobID = 19) goto clown
if ($jobID = 20) goto clown
if ($jobID = 4047) goto star
if ($jobID = 4049) goto soul
if ($jobID = 23) goto snoob
goto jauh

:jauh
do c $namaPlayer Jangan Jauh2 donk...
stop
release link
:bukan
do e ??
stop
release link

:snoob
do sp 451 $id
stop
release link
:star
do sp 448 $id
stop
release link
:soul
do sp 461 $id
stop
release link
:knight
do sp 452 $id
stop
release link
:priest
do sp 454 $id
stop
release link
:wizard
do sp 453 $id
stop
release link
:smith
do sp 458 $id
stop
release link
:sniper
do sp 460 $id
stop
release link
:assassin
do sp 457 $id
stop
release link
:paladin
do sp 450 $id
stop
release link
:champion
do sp 447 $id
stop
release link
:professor
do sp 449 $id
stop
release link
:creator
do sp 445 $id
stop
release link
:clown
do sp 455 $id
stop
release link
:stalker
do sp 456 $id
stop
release link
}

Auto Skill

Ini macro apabila ada player yang meminta paket maka secara otomatis si bot akan memberikan paket agi dan bless kepada si player tersebut...
automacro agibless{
pubm /ab/
call paket1
}
macro paket1{
do sp 34 $.lastpub
pause 2
do sp 29 $.lastpub
}

Buff untuk guild

automacro buffAndWarp {
pubm /(ald|alde|sq|pron|prt|HL|pay|asum|heal|santuary|sant|ab|buff|agi|bless)/i
sp >= 70
priority 0
class high priest
exclusive 1
call checkMsg
}
macro checkMsg {
$i = @player ($.lastpub)
$g = @eval (exists $::players{$::playersID[$i]}->{guild} ? $::players{$::playersID[$i]}->{guild}{name} : 'null')
if ($g == Cap Ayam) goto accessGranted
if ($g == Samseng) goto accessGranted
goto end
:accessGranted
$msg = $.lastpubMsg
$posx = @rand (4, 5, 6, 7)
$posy = @rand (4, 5, 6, 7)
$cellIsFull = 0
do eval $::Macro::Data::varStack{cellIsFull} = 0;foreach (@{$::playersList->getItems()}) { next if (($_->{pos_to}{x} != $posx) || ($_->{pos_to}{y} != $posy));$::Macro::Data::varStack{cellIsFull} = 1; last;}
if ($cellIsFull == 1) goto accessGranted
$x = @arg ("$.pos", 1)
$y = @arg ("$.pos", 2)
$evalx = @eval ($x + $posx)
$evaly = @eval ($y + $posy)
if ($msg == ALD) goto warpAld
if ($msg == ald) goto warpAld
if ($msg == alde) goto warpAld
if ($msg == ALDE) goto warpAld
if ($msg == SQ) goto warpSq
if ($msg == sq) goto warpSq
if ($msg == GEF) goto warpGef
if ($msg == gef) goto warpGef
if ($msg == HL) goto warpHl
if ($msg == hl) goto warpHl
if ($msg == pay) goto warpHl
if ($msg == asum) goto asum
if ($msg == ASUM) goto asum
if ($msg == agi) goto agi
if ($msg == AGI) goto agi
if ($msg == bless) goto bless
if ($msg == BLESS) goto bless
if ($msg == ab) goto agiBless
if ($msg == AB) goto agiBless
if ($msg == buff) goto agiBless
if ($msg == heal) goto heal
if ($msg == HEAL) goto heal
if ($msg == sant) goto santuary
if ($msg == santuary) goto santuary
if ($msg == SANT) goto santuary
if ($msg == SANTUARY) goto santuary
goto end
:warpAld
do sl 27 $evalx $evaley
pause 1
do warp alde_gld
stop
:warpSq
do sl 27 $evalx $evaly
pause 1
do warp prt_gld
stop
:warpGef
do sl 27 $evalx $evaly
pause 1
do warp gef_fild13
stop
:warpHl
do sl 27 $evalx $evaly
pause 1
do warp pay_gld
stop
:asum
do sp 361 $i 5
stop
:agi
do sp 29 $i 10
stop
:bless
do sp 34 $i 10
stop
:agiBless
do sp 34 $i 10
pause 1
do sp 29 $i 10
stop
:heal
do sp 28 $i 10
pause 0.5
do sp 28 $i 10
pause 0.5
do sp 28 $i 10
pause 0.5
do sp 28 $i 10
stop
:santuary
do sp 70 $i 7
stop
:end
log $msg
stop
}

Tukar Cap Ayam Dengan Samseng

Auto Heal

Ini macro untuk priest, jadi apabila ada org yang minta heal , automatic bot akan heal player tersebut automacro mintaheal{ pubm /heal/ call giveheal} macro giveheal { pause 1 do sp 28 $.lastpub pause 1 do sp 28 $.lastpub } sp 28 [ heal ] bot akan heal 2 kali

Tell Kore To Eat UseSelf Item

useSelf_item meat

Meat ,Sushi

{ hp sp <= 30%

30%

homunculus_hp homunculus_sp homunculus_dead onAction whenStatusActive whenStatusInactive whenFollowing spirit aggressives monsters notMonsters stopWhenHit 0 inLockOnly 0 notWhileSitting 0 notInTown 0 timeout disabled 0 inInventory manualAI 0 } The Red words you have to change it yourself,if you have white pot change it to white pot. and the 30% change it which one you like 100%,50% and anything

Cara Guna WireShark

1. Download and install Wireshark.
2. Open your ragnarok but don't login yet! Leave it on the login screen and open Wireshark.
3. At Wireshark's window, go to Capture > Options on the upper menu or press Ctrl + K.
File:Capiture.png
4. In the top right box, select the interface that will be used to capture on. If there isn't any specific interface to use, select the one whose IP address is equal to the your ip address or is not unknown. Alternatively you can try all of them and use the one that records the packets. Set the others settings like the images bellow:
File:Interface.PNG
5. Click on Start button and go back to the Ragnarok window and login.
Note. Valid information are not needed.
6. Back to Wireshark and click on Stop button.
File:stop.png
7. In Wireshark main window, you can see the TCP segments that were captured. Fill in the packet filter, but what to fill in depends on the username you used to login.
Enter this in the "Filter" text box:
eth contains "xxxxxx" or eth contains xxxxxx
Replace xxxxxx with the username that was used to login and press enter. In the example bellow, username was Mushroom.
File:filter.png
8. There will be only one entry now, click on it to show some information about it. This is where the IP and port is stored.
File:ip.png
Write down the IP and port.
9. On the entry again, right-click on it and go to Follow TCP Stream.
File:tcp.png
10. A new window will open, in the bottom left, select Hex Dump.
File:hex.png
11. These are the login packets. Take a look at it and write down the packets that contains the version and master version numbers. They are marked on the image bellow.
File:packets.png
  • version displayed as 4-byte unsigned number in little-endian, in hex
  • master version displayed as 1-byte unsigned number, in hex
12. See Converting Hexadecimal to Decimal numbers to convert the master_version and version before configuring Kore.

Converting Hexadecimal to Decimal numbers

Master_version and server version collected from the login packets are in hexadecimal number (base-16) and Kore expects a decimal number (base-10), so converting those numbers are needed before Kore can read them.
Converting can be made using Windows' calculator or any other site that has a hex to dec calculator.
1. Open Windows calculator Start > Accessories > Calculator.
File:calc.PNG
2. Go to View on the upper menu and click on Scientific.
File:sci.PNG
3. Check the circle beside Hex.
File:hexa.PNG
4. On the calculator, type the number that you got for master_version and version. In the example, master_version hexadecimal number is 10.
File:type.PNG
5. Check the circle beside Dec.
File:dec.PNG
6. After checking, the number shown should automatically be converted from hexadecimal to decimal.
File:done.PNG
You must convert master_version and version
OpenKore Help A lot

Cara Guna WPE

1. Download WPE and extract it.
  • Before downloading, make a sure to disable your anti-virus as it can mark WPE as a virus and delete it. Download at your risk, we will not be resposabilized if your computer crashes.
  • You will need some programs to extract it, the common ones are WinRAR and 7zip.
2. Open your ragnarok but don't login yet! Leave it on the login screen and open WPE.
3. At WPE's window, click on Target Programs button.
File:Targetyc.png
4. A window will open, search for the server's executable and double-click it.
File:clickrag.png
Note. Some servers "hide" their executables by renaming it (like from xxxRO.exe to xxxx.dll or xxxxx.bin), so don't worry if the executable isn't a .exe one.
5. In the WPE's window, click on Play button.
File:play.png
6. Switch to your Ragnarok's window, put and try to login.
Note. Valid login information are not needed.
7. Back to WPE's window, click on Stop button
File:stopjw.png
8. A window will open with recorded data. One of the packets sent to the server would be login packet which usually contains the server's version, master_version, IP and port - write them down because they are going to be used later. The packets will be different on each server, possible login packets may start with 64 00 or 02 B0. Other packets (such as 18-byte-long 02 04) may be sent before login packet.
File:inforb.png
Legend:
  1. version (displayed as 4-byte unsigned number in little-endian, in hex)
  2. IP (as is)
  3. port (as is)
  4. master version (displayed as 1-byte unsigned number, in hex)
9. See Converting Hexadecimal to Decimal numbers to convert the master_version and version before configuring Kore.
credit to OpenKore

Connectivity Guide

Mendapatkan Maklumat Server

OpenKore datang dengan senarai server maklumat rasmi sahaja, kerana jumlah yang tinggi private server, adalah mustahil untuk mempunyai dan menjaga mereka dikemaskini, jadi private server harus mengikuti panduan ini untuk mendapatkan dan mengemaskini maklumat pelayan mereka. Sebelum meneruskan, baca senarai server tidak disokong.Server anda mungkin mempunyai anti-bot yang menyebabkan tidak disokong oleh Openkore.

OpenKore memerlukan maklumat berikut tentang pelayan Ragnarok Online sebelum ia boleh memulakan dan login:

   

Terdapat Arahan terperinci mengenai mengumpul maklumat pelayan dengan WPE atau Wireshark. Jenis paket menganalisis ini tidak apa-apa yang istimewa untuk OpenKore atau Ragnarok Online, jadi terpulang kepada anda untuk mendapatkan alat dan cara-cara untuk melakukan yang bekerja untuk anda. Ia terpulang kepada anda dan apa yang perlu dilakukan dengan mana-mana "perlindungan" kononnya dalam pelayan pelanggan anda yang mungkin dalam cara.

Mungkin ada masalah menentukan versi dan master_version jika protokol pelayan anda mempunyai beberapa jenis penyulitan. Dalam kes itu, semata-mata menentukan nilai-nilai ini tidak akan membantu, isu utama berurusan dengan penyulitan itu.
WPE (Winsock Packet Editor)

1. Memuat turun WPE

        Sebelum memuat turun, membuat pasti untuk melumpuhkan anti-virus anda kerana ia boleh menandakan WPE sebagai virus dan memadam. Turun pada risiko anda, kami tidak akan resposabilized jika komputer kita akan rosak.
        Anda akan memerlukan beberapa program untuk mengekstrak, yang biasa WinRAR dan 7zip.

Download WPE atau WireShark
credit goes to OpenKore  

CharBlockSize

charBlockSize <value>
Character block (inner structure for character list packet) size. May be 106 (default), 108, 112, 116; with renewal servers, 128, 132 and 136. Correct value for a server may be not supported by a specific serverType or not supported at all, so merely trying values mentioned here may not be enough. 
Cari Saja Yang Mana Boleh Pakai

Macro Plugin

Download Macro Plugin

Bila dah download install ikut cara macam nih.
openkore
|-- openkore.pl
|-- control
|   |-- macros.txt
|-- fields
|-- logs
|-- plugins
|   |-- macro
|   |   |-- Macro
|   |   |   |-- Automacro.pm
|   |   |   |-- Data.pm
|   |   |   |-- Parser.pm
|   |   |   |-- Script.pm
|   |   |   |-- Utilities.pm
|   |   |-- macro.pl
|-- src
|-- tables

Openkore Download

Download  OpenKore here

Guides

Advanced

References

control
tables, how to update
plugins