30 November 2019

Custom Graphic Ragnarok Online Private Server

Sebelum memulai tutorial ini, pastikan kamu memiliki kemampuan untuk menggunakan software pengolah gambar seperti misalnya Adobe Photoshop, dan tutorial ini kebanyakan menggunakan Adobe Photoshop karena saya lebih familiar dengan software ini. Kamu juga bisa menggunakan software open source seperti misalnya GIMP. Selain untuk mengolah gambar, GIMP juga bisa digunakan untuk membuat icon untuk file exe.

Untuk membuat Ragnarok Online private server sendiri, biasanya kita pasti akan menentukan nama server dan juga logo. Nama server dan logo sudah pasti akan kita gunakan pada media promo seperti website dan sosial media, juga kita gunakan pada website dan didalam game itu sendiri. Dalam client side Ragnarok Online, ada beberapa file yang kita bisa gunakan sebagai Trademark dari server kita. Diantara nya adalah :

A. Screenshot logo (scr_logo.bmp)
Screenshot logo adalah logo yang akan ditampilkan ketika player menekan tombol Print Screen (Prnt Scrn) pada keyboard, defaultnya cuma tulisan ragnarok.co.kr atau kalau di indonesia ragnarok.co.id (jaman masih awal-awal di pegang lyto, kalo yg sekarang saya ga hapal). Logo ini selalu ada di kanan bawah layar, dan formatnya adalah BMP 24bit.

Untuk membuat logo ini, yang perlu diperhatikan adalah ukuran gambar, agar seimbang, jangan membuat ukuran yang terlalu besar. Asumsinya adalah Player biasanya menggunakan resolusi 800x600, jadi agar player tidak risih dengan screenshot kita, ukuran gambar maksimal adalah 200x150 atau jika kita ambil tingginya, bisa juga 200x300 (dalam ukuran pixel)

Contoh :
Disini saya akan membuat logo screenshot dengan ukuran 200x300
  • Buat file baru dengan ukuran 200 x 300 (pixel)
  • Agar nanti bagian yg kosong bisa transparant, pada layer Background atau layer paling bawah kita harus menggunakan warna Magenta, RGB = 255,0,255 atau #ff00ff
  • Pilih Paint Bucket Tools, lalu pada color picker, ganti warna RGB ke 255,0,255 atau isi pada kolom CSS color dengan #FF00FF
Gambar Color Picker properties.
  • Setelah itu kamu bisa langsung masukan logo atau gambar yang kamu inginkan
Masukan logo dan gambar agar lebih menarik.
  • Setelah selesai, Save As (CTRL+SHIFT+S) isi nama dengan scr_logo dan pilih format BMP
  • Saat muncul jendela BMP Option, pilih Advanced Modes

  • Lalu pilih 24 bit (R8 G8 B8) lalu klik Ok.

NOTE : Untuk beberapa software lain kamu bisa langsung memilih 24bit tanpa harus menggunakan Advanced Modes atau menu serupa. Cara ini berguna untuk menghindari bug render dimana file yg dihasilkan tidak terbaca oleh hexed client.

Warna Magenta hampir digunakan bermacam-macam software untuk warna transparant pada file gambar berformat BMP. Texture sprite, texture map, dan juga emblem Guild menggunakan warna Magenta untuk bagian transparant.

Terakhir tinggal mencoba nya, 
1. Tes menggunakan folder Data (Jika hexed client menggunakan patch read data before grf)
  • Buka folder Ragnarok Online mu, lalu buka folder Data (Jika tidak ada, buat dulu)
  • Buat folder texture
  • Copy paste file scr_logo.bmp mu kedalam folder texture
  • Jalankan Ragnarok Online (tidak harus menyalakan server), lalu tekan tombol screenshot pada keyboard.
  • Buka folder ScreenShot untuk melihat hasilnya. 

2. Tes menggunakan Custom GRF
  • Buka custom GRF private server mu menggunakan gryff_svn atau GRF Builder
  • Buka folder texture
  • Jika tidak ada file scr_logo.bmp, langsung drag scr_logo.bmp milikmu ke folder texture lalu Save.
  • Jika ada file scr_logo.bmp, delete lalu save, tunggu sampai repack selesai. Setelah itu drag file scr_logo.bmp yang sudah kamu buat kedalam folder texture. Jangan lupa disave lagi.
  • Setelah proses repack selesai, jalankan Ragnarok Online mu (tidak harus menyalakan server), lalu tekan tombol screenshot pada keyboard.
  • Buka folder ScreenShot untuk melihat hasilnya.
Contoh custom screenshot logo yang berhasil dipasang dengan resolusi gambar 200x300 (pixel) pada resolusi window 800x600 :

Logo screenshot custom yang berhasil dipasang, logo selalu muncul di kanan bawah
(0 dari x dan y di kanan bawah)
NOTE :
  • Jika tampilan terdapat noise atau ada bintik-bintik, biasanya dikarenakan gambar yang kamu gunakan tidak rapih.
  • Kalau kamu menggunakan font yang tipis untuk logo, biasanya noise akan selalu ada, dapat diakali dengan cara yang saya pakai yaitu menambahkan blank space seperti contoh pada tulisan Ragnarok Online pada logo screenshot yang saya buat.
  • Ingat logo screenshot selalu berada di kanan bawah layar, dan ukuran logo tidak akan berubah walaupun resolusi windows diperkecil atau diperbesar.
  • Ukuran logo screenshot tidak ada batas minimal atau maksimal, kamu bisa membuat ukuran sesuai selera mu.


B. Login screen (Login Background)
Login Screen adalah gambar background yang kita lihat saat ingin login sebelum login kedalam game. Dengan sedikit pengaturan, kita bisa membuat login screen tidak membosankan dan lebih informatif, walau sebenarnya tidak terlalu penting untuk dirubah.

Format login screen biasanya :
- Resolusi 4:3, misal 800x600, 1024x768 (Rekomendasi pakai 1024x768)
- dari resolusi 4:3 ini, biasanya dipecah menjadi 12 gambar (4x3), misal kalau kamu pakai gambar ukuran 1024x768, artinya kamu harus memecahnya menjadi 12 bagian dengan masing-masing resolusi file 256x256
- Format file harus di save ke BMP 24bit
- Pada official server, ada dua login screen, namun login screen ke 2 jarang sekali muncul.

NOTE : Perlu diperhatikan, dari 12 pecahan file, usahakan total size tidak terlalu besar, misal tidak lebih dari 2Mb, karena dapat menyebabkan bottle neck / lag. Walaupun sekarang kebanyakan komputer sudah canggih, tapi engine Ragnarok Online sudah masuk dalam hitungan relik atau jadul.

Ada 2 cara untuk menambahkan custom login screen untuk private server mu, yaitu :
1. Memecah gambar satu persatu dengan program Adobe Photoshop
  • Siapkan file gambar yang akan digunakan untuk login screen, berukuran 1024x768 pixel yang akan dipecah.
  • Agar gambar bisa dibagi menjadi 12 bagian (4x3), maka dengan sedikit matematika, kita akan bagi 1024x768 dengan 4:3 yang hasilnya yaitu 256x256. jadi kita bisa menentukan garis bantu (Guide), yaitu vertikal = 256, 512, 768, dan horizontal = 256 dan 512
  • Caranya Buat garis bantu, klik View - lalu pilih New Guide
  • Lalu pada kolom Position, isi value sesuai rumus satu persatu sesuai Orientation nya.
  • Jika kamu tidak salah input, maka hasilnya akan seperti dibawah ini
Garis berwarna biru muda (cyan), adalah garis bantu yang kita buat

  • Sekarang kita mulai untuk membaginya, buat file baru berukuran 256 x 256
  • Pada tahap ini kita akan memotong (cut) satu persatu bagian dan mempaste nya ke file 256x256
  • Pada file Login Screen, buka gembok (lock) pada layer Background dengan cara mengklik 2x icon gembok pada layer, tujuannya saat kita potong, grid layer bisa terlihat untuk memudahkan pekerjaan kita agar lebih presisi (kamu bisa skip langkah ini)
  • Agar lebih mudah kita akan menggunakan Rectangular Marquee Tools, tekan tombol M pada keyboard, lalu pada toolbar diatas, klik Style - lalu pilih Fixed Size, isi Width dan Height dengan angka 256
  • Klik pada Kolom yg sudah dibuat sampai garis marquee terlihat, lalu tekan tombol CTRL+X (cut), buka file 256x256, paste dengan tombol CTRL+V (langkah ini diulang sampai dapat 12 potongan, agar mudah buat berurutan dari kiri atas ke kanan atas dan seterusnya)
  • Setelah mendapat 12 potongan (atau 12 layer), kita akan save satu persatu dengan format BMP 24 bit (lihat kembali caranya pada tutorial membuat Screenshot logo), Jika kamu berurutan saat memotong gambar, maka layer paling atas adalah gambar nomor 12. Mulai dari layer paling atas, save dengan format BMP 24 bit, dengan nama berurutan mulai dari 12 sampai 1. misalnya, gambar-12.bmp, gambar-11.bmp, gambar-10.bmp, dan seterusnya.


  • Untuk menyimpan satu persatu dengan gambar yang berbeda, setelah kamu save gambar pertama, klik tanda mata pada layer yang sudah disave, lalu ulangi sampai kamu dapat 12 file. Usahakan untuk menyimpan file ke folder baru.
  • 12 file yang sudah selesai dibuat
Hasil dari gambar yang sudah dipotong-potong menjadi 12 bagian
Sekarang kita tinggal mengganti Nama file (rename file) dari masing-masing gambar sesuai nomor urut.
1 = t_배경1-1
2 = t_배경1-2
3 = t_배경1-3
4 = t_배경1-4
5 = t_배경2-1
6 = t_배경2-2
7 = t_배경2-3
8 = t_배경2-4
9 = t_배경3-1
10 = t_배경3-2
11 = t_배경3-3
12 = t_배경3-4

Sehingga semua file menjadi seperti gambar dibawah ini

2. Memecah gambar menggunakan login background generator dari rAthena
Memotong satu persatu dengan program pengolah gambar adalah satu-satu nya cara untuk menambahkan custom login mu sendiri, dan cara ini berguna ketika kamu tidak ada internet. Namun, sekarang sudah banyak login screen generator yang sudah dirilis, walau banyak yang sudah menghilang dari dunia maya.

Dengan menggunakan login background dari rAthena, kamu bisa menghemat lebih banyak waktu. kamu tinggal menyiapkan login screen yang akan kamu gunakan

  • Siapkan file yang akan digunakan sebagai login screen
  • buka browser dan masuk ke alamat http://rathena.sourceforge.net/tools/login_background/
  • Pada point nomer 1, pilih dan upload file yang akan kamu gunakan
  • Pada point nomer 2, pilih "First Login Background" (Dengan asumsi kamu menggunakan patch Only First Login Background)
  • pada point nomer 3, klik Convert it!
  • Setelah itu akan ada pilihan untuk mendownlad  login_background.grf
  • Selesai di download, pindahkan ke folder Ragnarok Online mu, lalu buka file DATA.ini, tambahkan value 1 = login_background.grf (prioritas dibawa pertama), jangan lupa ubah value grf yang lain, tidak boleh ada value angka yg sama pada DATA.ini. Jika sudah selesai, Save.


Selesai dari salah satu cara diatas, Sekarang kita tinggal mencoba untuk menjalankan nya pada server,
Tes menggunakan folder Data (Jika hexed client menggunakan patch read data before grf)
  • Buka folder Ragnarok Online mu, lalu buka folder Data (Jika tidak ada, buat dulu)
  • Buat folder texture
  • lalu buat folder À¯ÀúÀÎÅÍÆäÀ̽º
  • Copy paste file ke 12 file mu kedalam folder À¯ÀúÀÎÅÍÆäÀ̽º
  • Jalankan Ragnarok Online (tidak harus menyalakan server), dan kamu bisa langsung melihat hasilnya
Tes menggunakan Custom GRF
  • Buka custom GRF private server mu menggunakan gryff_svn atau GRF Builder
  • Buka folder texture, kemudian buka folder 유저인터페이스
  • Jika tidak ada file dengan awalan t_배경 , langsung drag ke 12 file milikmu ke folder 유저인터페이스 lalu Save.
  • Jika ada file dengan awalan t_배경, delete terlebih dahulu lalu save, tunggu sampai repack selesai. Setelah itu drag file ke 12 file yang sudah kamu buat kedalam folder 유저인터페이스. Jangan lupa disave lagi.
  • Setelah proses repack selesai, jalankan Ragnarok Online mu (tidak harus menyalakan server),dan kamu bisa langsung melihat hasilnya.
Contoh login screen yang sudah berhasil dipasang :

NOTE :
  • Only First Login Background, adalah patch untuk hexed client agar client membaca hanya login screen pertama. Login screen didalam data.grf official ada dua, patch ini bisa kamu terapkan agar background yang muncul hanya yg pertama, walaupun jarang sekali login screen kedua muncul saat game dijalankan.
  • Jika kamu memotong file manual dengan Photoshop atau aplikasi sejenisnya, dan pada saat game dibuka terlihat garis putih, artinya potongan gambarmu ada yang tidak pas.
  • Perlu diingat kembali, untuk tidak membuat ke 12 pecahan file login screen terlalu besar, agar tidak terjadi bottle neck/lag pada saat game dimulai.
  • Ukuran rekomendasi login screen adalah 1024x768 (skala 4:3), namun, tidak seperti logo screenshot, login screen otomatis menjadi besar atau kecil menyesuaikan resolusi game.

C. Loading Screen
Loading screen adalah transisi yang kita lihat pada saat kita pindah map. Dulu loading screen berisi promosi dan event yang sedang berlangsung, sekarang seiring semakin canggih spesifikasi PC, kamu kadang tidak bisa melihat loading screen sama sekali. Tapi lain cerita jika player membuka banyak client sekaligus, karena loading pasti akan bertambah berat.

Untuk menambah loading screen sendiri, kamu harus menyiapkan :
  • File berformat JPG
  • Resolusi gambar dengan skala 4:3, misalnnya 800x600, 1024x768
  • Nama file bebas, tapi agar mudah diingat, gunakan nama seperti pada official server, yaitu loading01.jpg, loading02.jpg, loading03.jpg, dan seterusnya.
  • Batas maksimal loading screen yang didaftarkan pada clientinfo.xml adalah 6 dan 12 tergantung LangType
Setelah kamu menyiapkan gambar yang akan digunakan, masukan ke folder texture -- À¯ÀúÀÎÅÍÆäÀ̽º (sama seperti login screen), lalu tambahkan loading yang kamu buat di file clientinfo.xml mu. Setelah itu kamu bisa langsung mencobanya dengan menjalankan server.
Contoh loading screen yang ditambahkan, total 9 file.

D. Patcher Skin
Skin default dari patcher yang kita download biasanya memang membosankan, tapi juga bisa mengganti skin dan tentu saja merubah ukuran defaultnya. Ada dua patcher yg sering digunakan oleh developer ragnarok online private server, yaitu Thor Patcher dan Jikari Patcher. Keduanya memiliki kelebihan dan kekurangan masing-masing. Seperti misalnya Thor Patcher bisa menggunakan background yang transparant, dan Jikari Patch tidak bisa.

Untuk mengganti skin, biasanya kita hanya perlu merubah file bg.bmp pada Thor Patcher, dan skin.bmp pada Jikari Patcher, kamu juga bisa mengganti gambar tombol-tombol pendukung, seperti Start Game, dan lain-lain.

Contoh Skin patcher yang sudah diganti :
Contoh patcher skin yang dirubah ke resolusi 700x500 (mohon maaf saya watermark)
Untuk tutorial yang lebih detail, cek artikel tutorial patcher.


E. Game UI (Misalnya login window, status window, dan lain-lain)
Game UI (User Interface) adalah segala bentuk jendela yang memuat informasi dimana pengguna berinteraksi terhadap game, menggunakan input seperti mouse atau keyboard. Karena media ini banyak berupa visual sehingga user bisa melihat, tentu kita bisa merubah gambar yang sudah ada dengan gambar yang kita inginkan.

Contoh fitur Game UI yang paling populer pada Ragnarok tahun 2010 kebawah, adalah Skin. Kita bisa mengganti Skin sesuai keinginan kita dengan skin yang sudah buat atau kita download di dunia maya. Sayangnya custom skin semakin lama semakin menghilang, bahkan Scribling Kids yang selalu ada saat kita mendownload installer ragnarok online, tidak pernah ada pembaharuan padahal sekarang game UI ragnarok online sudah banyak yg berubah.

Mengubah semua gambar game UI mungkin akan merepotkan, tapi kamu bisa merubah bagian tertentu saja. Contoh Game UI yang dirubah :

Latar berwarna hijau pada header jendela adalah contoh game UI yang sudah dirubah.
Contoh design win_login.bmp (login window)
Pada data.grf ragnarok online awal, semua file game UI ada pada folder basic_interface, untuk client diatas 2015, beberapa file sudah dipindahkan, seperti misalnya file win_login.bmp sekarang pindah ke folder login_interface. Semua format game UI adalah BMP 24 bit, dan menggunakan warna magenta untuk gambar yang transparant (misalnya icon, thumbnail item, dan lain-lain).


F. Map Texture
Bagi kamu player private server pada tahun 2008 sampai 2010an, jika kamu pergi ke tengah Prontera, pasti kamu pernah melihat ada minimarket Lawson di sebelah kanan bawah air mancur. Minimarket Lawson ini adalah salah satu contoh modifikasi map texture menggunakan custom model. Tapi pada dasarnya, kamu bisa menambahkan graphic custom hanya dengan memodifikasi texture nya. Caranya kamu hanya perlu mencari folder dari map yang ingin kamu edit pada grf, lalu kamu edit menggunakan Photoshop atau sejenisnya.

Namun, biasanya dalam satu map, terdapat texture yang digunakan berkali-kali pada map tersebut. Jadi begitu kamu mengedit salah satu texture, duplikasi dari gambar yang kamu edit muncul ditempat yang tidak diinginkan. Untuk itu kita perlu menggunakan software khusus untuk mengedit map Ragnarok Online.

Software untuk membuat atau mengedit map Ragnarok Online adalah, Browedit yang dibuat oleh seseorang bernama Borf. Untuk menggunakan software ini Graphic Card PC atau Laptop kamu harus support OpenGL 2.0 (biasanya PC/Laptop modern sudah support). Namun, sayangnya banyak web atau forum yang memberikan tutorial menggunakan Browedit banyak yang sudah mati, bahkan website aslinya sekarang sudah tidak dapat diakses.

Karena saya juga hanya sekali-sekali menggunakan Browedit dan itupun sudah lama sekali, maka untuk tahap ini, mohon maaf sekali saya tidak bisa memberikan tutorial untuk tahap ini, tapi kalau kamu ingin mencobanya, mendownload software ini.


https://github.com/Borf/browedit

config.borf.json with your current RO directories. 
Input with your keyboard your config name once you open browedit.exe and asks for it. 
Your graphic card must support OpenGL 2.0+~ to run this software.


G. Banner Cash Shop / Item Mall 
Pada client Juni 2018 keatas, banyak UI yang dirubah oleh Gravity, salah satunya adalah Cash Shop atau Item Mall. Tampilannya lebih besar dari Cash Shop sebelumnya, item list nya lebih simple, dan menunya lebih informatif. Dulu, untuk melihat event Recharge atau Cash Shop, kita hanya bisa melihatnya di web atau forum, namun, sekarang dengan menggunakan Banner, player dapat lebih cepat mengetahui event apa yang sedang berjalan.

Sama seperti Loading Screen, kita perlu membuat gambar yang akan digunakan untuk banner, dan memberikannya nama yang bisa didaftarkan pada file config yang sudah ditentukan.
  • Ukuran gambar 531 x 51 pixel (beberapa saya lihat ada yang 551x51 pixel)
  • Format harus BMP 24bit.
  • letak folder pada data grf = texture/À¯ÀúÀÎÅÍÆäÀ̽º/cashshop
Untuk menambahkan custom Banner Cash Shop mu sendiri, kamu perlu mengedit beberapa file.
1. tb_cashshop_banner.lub
- Buka folder LuaFiles514 -- Lua Files -- datainfo
- Lalu buka file tb_cashshop_banner.lub dengan Notepad++
- Format :
 [1] = {
  "Nama-File.bmp",
  "Target Link (misal : http://google.com)"
 },

- Karena isi file berbeda-beda, contoh dari data Translation yang di share Asheraf

- Contoh diatas, ada 3 banner yang akan tampil bergantian pada saat  menu Cash Shop dibuka.
- Target link dibawah nama file adalah link yg akan dituju ketika banner di klik.
- Setelah save, jangan lupa update custom data.grf mu

Contoh custom Banner yang berhasil dipasang

2. Edit msgstringtable.txt (Optional)
Tujuan mengedit msgstringtable.txt adalah agar ketika user mengklik tombol Charging, maka game akan mengarahkan ke web pembayaran yang kamu sudah tentukan, walaupun isi halamannya hanya berupa info cara transfer.

- Pertama, jalankan Server Ro mu, lalu login ke dalam game.
- Buka Cash Shop, lalu klik tombol Charging di kanan atas
- Setelah diklik, browser akan terbuka, copy link pada address bar
- Buka custom grf mu, atau cari mentahannya di translation data yg kamu punya
- buka msgstringtable.txt dengan notepad atau notepad++
- buka search (ctrl + F) dan paste link yg sudah kamu copy
- Ganti dengan halaman web yang kamu inginkan.
- Setelah save, jangan lupa update custom grf mu.


Sampai disini, semoga artikel ini bermanfaat dan dapat membantu menjadikan servermu menjadi lebih menarik, Happy RO !

02 November 2019

Mengatur Spawn Monster, Portal, dan Mapflag Ragnarok Online Private Server



Pada tutorial kali ini kita akan membahas tiga hal, yaitu mengatur spawn monster, portal (warp), dan mapflag pada Ragnarok Online Private Server. Bagi kamu yang sering bermain private server, pasti pernah ketemu dengan server yang membuat map custom dengan spawn monster yang tidak biasa, seperti misalnya Gold Room dan Exp Room, biasanya,kamu harus mengklik NPC tertentu, atau ada portal khusus yang sudah dibuat untuk masuk kedalam map tersebut.  dan kadang di map ini kamu tidak bisa teleport menggunakan fly wing, atau map nya dibuat pvp mode yang diatur menggunakan mapflag.

Terkadang, ketika kamu ingin membuat server, kamu juga ingin me-rebalance server mu, dengan mengatur monster yang spawn, apalagi jika server mu pre-renewal generasi awal, kamu harus membuat banyak perubahan agar monster yang spawn sesuai dengan Episode server yang kamu buat. Dan kamu juga perlu untuk mengedit posisi portal khusus nya pada Morroc dan Sograt Field ke posisi map sebelum Episode Satan Morroc yang menghancurkan kota Morroc dan sekitarnya. Tidak hanya Morroc, biasanya kamu juga perlu mengedit portal pada kota Alberta, Izlude, Payon Old dan Prontera. Tentu saja hal itu berdampak kepada map PVP, kalau kamu ingin menggunakan map lama, maka kamu juga harus mengaktifkan settingan mapflag nya terlebih dahulu.

Tapi tenang, sekarang sudah banyak yang share settingan untuk pre-renewal, dan kamu tidak perlu repot-repot lagi mengatur semuanya, biasanya kamu hanya tinggal membuat mapcache baru dan biasanya mapflag pvp mengikuti map asli (clone dari map asli), kecuali Payon Old.

Namun, tidak ada salahnya jika kita belajar ketiga hal tersebut, karena mungkin saja kedepannya Ragnarok Online akan rombak besar-besaran lagi, atau mungkin kamu ingin membuat fitur yang unik untuk private servermu, dan nantinya kamu tidak perlu pusing lagi.


A. Spawn Monster
format :
map name,x1,y1,x2,y2 %TAB% monster %TAB% monster name %TAB% mob id,amount,delay1,delay2,event{,mob size,mob ai}

%TAB% = spasi dengan menekan tombol TAB
map name = nama map
x1, y1, x2, y2 = koordinat area spawn monster
contoh kalau kamu ingin membuat 10x10 area, masukan 120,150,130,160 (tergantung map), karena terlalu rumit untuk dijelaskan, set saja ke angka 0,0,0,0 agar monster bisa spawn dikordinat manapun.
monster name = nama monster
mob id = ID dari monster
amount = jumlah spawn, harap diperhatikan semakin banyak amount akan menambah beban kinerja server mu.
delay1 = waktu minimal sebelum monster spawn dalam milisekon (biasanya untuk boss)
delay2 = waktu maksimal sebelum monster spawn dalam milisekon (biasanya untuk boss), delay 2 tidak boleh lebih besar dari delay 1
event = digunakan untuk script atau trigger dari script lainnya menggunakan perintah "NPCName::OnEventName", seperti contohnya script fake Lord of Death di Nilfheim dan quest Kiel Hyre.
size = optional, default jika tidak diisi adalah 0 (medium)
ai = optional, 0 = default, 1 = attack/friendly (contoh thief bug), 2 = sphere (contoh marine sphere), 3 = flora, 4 = zanzou ( mob baru ? )

contoh :

pay_fild11,0,0 monster Dragon Tail 1321,50,180000
pay_fild11,0,0,0,0 boss_monster Eddga 1115,1,7200000,600000,1
pay_fild11,241,162,5,5 monster Red Mushroom 1085,3,360000,180000

- Dragon Tail adalah contoh script monster yang spawn normal, jumlahnya 50 dan spawn setiap 3 menit
- Eddga adalah contoh script boss, spawn setiap 120 - 130 menit setelah mati, kurang tau kenapa tag monsternya jadi boss_monster dan event nya 1, karena ga ada di manualnya.
- Red Mushroom adalah contoh monster yang menggunakan fixed coordinates.

Cara pasangnya sama dengan NPC

  • Buka notepad, masukan kode monster yang ingin kamu spawn, kamu dapat mencontek dari yang sudah ada.
  • save lalu beri nama misalnya spawncustom.txt lalu masukkan file tersebut misalnya kedalam folder custom didalam folder npc.
  • lalu buka file script_custom.conf atau file sejenis yang dapat meload NPC pada saat map-server berjalan. 
  • Tambahkan file npc mu, misalnya pada hercules "npc/custom/spawncustom.txt" atau pada rathena npc: npc/custom/spawncustom.txt.
  • Jalankan server mu (atau gunakan @reloadscript jika server sudah jalan) untuk mengecek monster yang sudah kamu spawn.

B. Warp Portal
Bagi sebagian orang Warp Portal adalah hal yang sepele namun pada saat ingin membuatnya malah jadi bingung sendiri. Warp Portal merupakan essensi dari sebuah game linear, dimana untuk pindah ke map lain, dibutuhkan sebuah pintu untuk mentransfer karakter yang dimainkan.

Pada Ragnarok Online, warp portal yang paling banyak orang tahu adalah berbentuk bulat berwarna putih dengan animasi seakan kita akan tersedot kedalamnya, tapi jika kita matikan effect game, hanya bayangannya saja yg bisa kita lihat.

Namun, sebenarnya ada 4 jenis portal didalam Ragnarok Online,
1. Warp ketika disentuh karakter seperti saat pindah antar map
2. Warp menggunakan jasa teleport Kafra atau NPC sejenis
3. Warp dengan interaksi NPC event, seperti misalnya pada saat quest berubah job
4. Warp dengan skill, seperti misalnya Warp Portal dan Emergency Call.

Namun pada intinya, ke 4 jenis tersebut sama-sama menggunakan perintah script "warp". Kecuali untuk warp dengan skill, yang scriptnya ada pada source emulator, bentuk warp yang lain biasanya ada didalam folder NPC. Seperti misalnya global warp untuk pindah antar map ada didalam folder warps. Untuk jasa teleport Kafra atau sejenisnya biasanya ada didalam folder city, dan kita tinggal mencari npc nya per kota. Untuk script NPC events, biasanya tergantung dari jenis NPC nya, misalnya quest berubah job ada didalam folder jobs.


1. Warp Portal untuk pindah antar map
Format :
from mapname,fromX,fromY,facing %TAB% warp %TAB% warp name %TAB% spanx,spany,to mapname,toX,toY

from mapname,fromX,fromY,facing %TAB% warp2 %TAB% warp name %TAB% spanx,spany,to mapname,toX,toY

from mapname = map asal sekaligus lokasi portal
fromX = koordinat x map asal
fromY = koordinat y map asal
facing = arah npc, karena kita tidak peduli portal akan menghadap kemana, biasanya di isi 0
warp name = nama NPC, usahakan jangan sama jika kamu tidak mengerti cara menduplikasi nama
spanx = toleransi jarak X cell dari npc
spany = toleransi jarak Y cell dari npc
to mapname = map tujuan teleportasi
toX = koordinat x map tujuan,
toY = koordinat y map tujuan
kamu bisa menggunakan koordinat 0,0 agar tujuan teleportasi random, biasanya digunakan di map pvp.

ada dua bentuk warp yaitu warp dan warp2 (lihat format), namun warp2 jarang digunakan, fungsi warp2 adalah char yang hidden bisa diwarp tanpa harus muncul terlebih dahulu.

contoh :

prontera,156,22,0 warp prt001 3,2,prt_fild08,170,375
moc_fild01,239,382,0 warp mocf006 12,1,prt_fild08,233,20

Diatas adalah contoh
1. Portal Prontera arah jam 6 yang akan memindahkan pemain ke Prontera Field 08.
2. Portal dari Sograt Field 01 ke Prontera Field 08, spanX nya 12, artinya karakter bisa langsung warp dalam jarak X = 8 tanpa harus mendekati portal.

2. Warp menggunakan jasa NPC
format :

warp "map name",mapX,mapY;
close2;

map name = nama map tujuan (isi didalam tanda quotes)
mapX = koordinat X map tujuan
mapY = koordinat Y map tujuan
close2 = digunakan agar kotak dialog NPC otomatis ditutup tanpa harus memencet tombol (close) saat karakter pindah map.

contoh :

prontera,163,191,4 script NPC Warper 100,{
 mes "[NPC Warper]";
 mes "Halo apakah kamu ingin menggunakan jasa ini?";
 next ;
 switch(select("Oke","Tidak") {
  case 1 : 
   warp "prontera",158,180;
   close2;
  case 2 :
   mes "[NPC Warper]";
   mes "Oke";
   close;
 }
}

agar lebih menarik, kamu juga bisa menambahkan biaya 2000 zeny sekali teleport

prontera,163,191,4 script NPC Warper 100,{
 mes "[NPC Warper]";
 mes "Halo apakah kamu ingin menggunakan jasa ini?";
 mes "Biayanya 2000z sekali pakai";
 next ;
 switch(select("Oke","Tidak") {
  case 1 : 
   if (zeny<2000) {
    mes "[NPC Warper]";
    mes "Maaf, uang kamu kurang";
    close;
   }
   set zeny,zeny-2000;
   warp "prontera",158,180;
   close2;
  case 2 :
   mes "[NPC Warper]";
   mes "Oke";
   close;
 }
}

Dan masih banyak variasi lain yang kamu bisa coba dari NPC teleport, seperti misalnya hanya karakter dengan level tertentu saja yang masuk, atau misalnya hanya GM saja yang bisa menggunakan NPC tersebut. Perlu diperhatikan, pastikan kamu sudah mencoba map dan kordinat sebelum mencantumkan nya didalam script. Karena terkadang, kamu tidak memiliki map yang ada didalam script, dan sering kali tidak ada script error yang muncul pada konsol map-server.

Untuk Warp dengan Event NPC, kamu bisa mencontohnya dari NPC yang sudah ada, karena masing-masing NPC mempunyai logika program yg berbeda-beda walaupun sebenarnya perintah yang digunakan tidak jauh beda.


C. Mapflag
Flag bisa berarti bendera, tapi dalam bahasa inggris flag bisa berarti menandakan sesuatu yang mutlak. Mapflag, berarti menandai map, fitur ini sangat berguna mengkategorikan suatu map untuk satu keperluan. Dalam Ragnarok Online, ada banyak bentuk mapflag, seperti misalnya no save, no memo, no skill, dan lain-lain. Mapflag ini juga bisa digunakan untuk membatasi penggunaan item seperti misalnya kita tidak bisa menggunakan fly wing di map Juno, map PvP, dan map GvG.

Lalu apa gunanya mapflag untuk Ragnarok Online private server? banyak sekali kegunaannya, seperti misalnya untuk kamu yang ingin membuat ruang vending, ruang event, dan lain-lain. Cara penggunaannya pun cukup mudah, sama seperti membuat script warp, kamu hanya perlu menambahkan 1 baris perintah. Tentu saja harus dengan perintah yang sudah terdaftar dengan source.

Format :

map name %TAB% mapflag mapflagtype

map name = nama map
mapflagtype = perintah mapflag yang akan digunakan
terkadang ada option tambahan seperti misalnya di battleground setelah mapflagtype

Contoh :

prontera mapflag nosave
prontera mapflag nomemo
prontera mapflag noreturn
prontera mapflag noteleport

Pada contoh diatas, pada map prontera, berarti ketika player ada didalam map prontera,
- nosave - player akan kembali ke save point jika logout di prontera
- nomemo - tidak bisa menyimpan memo di map prontera
- noreturn - player tidak bisa menggunakan item Butterfly Wing dan sejenisnya
- noteleport  - player tidak bisa menggunakan item Fly Wing dan sejenisnya

Didalam folder npc/mapflag kamu bisa menemukan mapflag standar yang ada didalam server, jika kamu berniat untuk membuat mapflag sendiri, ada baiknya untuk membuat file baru dan diletakkan pada folder baru, lalu didaftarkan pada script_custom.conf

Untuk melihat list dari perintah mapflag dan penjelasannya, kamu bisa membuka folder doc lalu cari file mapflag.txt (di hercules ga ada). Dan perlu diperhatikan, tidak semua perintah sama pada emulator yang berbeda, seperti misalnya di Hercules ada perintah zone, di rAthena ada tapi cara penggunaannya aga berbeda.

Sekian tutorial kali ini, semoga bermanfaat !

19 Oktober 2019

Menambah Custom Headgear / Item Ragnarok Online Private Server


Membangun Ragnarok online private server tentu belum lengkap tanpa custom item. Custom item bisa berubah Headgear, Usable Item, atau sprite yang di modifikasi. Yang paling populer pada Ragnarok private server adalah menambah headgear dengan stats yang dimodifikasi. Namun, sayangnya menambah custom item sekarang ga se-simple dulu. Kebanyakan developer baru kebingunan dengan sistem yang sekarang (termasuk saya).

Dalam tutorial ini saya akan memberikan contoh bagaimana cara menambah custom item (bukan membuat custom item atau custom headgear). Tutorial ini sebenernya mudah, namun karena banyaknya file yang harus dirubah, sering kali membuat kita pusing sendiri. Untuk itu, perlu kita pelajari dulu sebentar.

NOTE : Menambah custom item pada ragnarok online private server lebih rumit dari membuat servernya, jadi kamu harus benar-benar teliti, siapkan buku dan buat catatan dengan versimu sendiri.

Seperti yang sudah saya jelaskan pada artikel Membangun Server dan Database, agar game dapat berjalan dengan baik, maka data server dan client harus sama, untuk itu ada beberapa file yang akan kita rubah/tambahkan isi nya.

Pada cara ini, saya menggunakan database item yang ada di dalam folder db. Untuk kamu yang menggunakan database pada mysql, kamu bisa masukan manual, caranya sama seperti Menambah Akun GM, cuma beda tabel yang dirubah. 

Pada server (emulator), file yang akan kita gunakan adalah :
1. item_db.txt /.conf, pilih pada folder pre-re atau renewal (Sesuai fitur server yang dibuat)
2. item_db2.txt / conf (Jika ada)

Pada item_db.txt / conf, kita bisa gunakan untuk base dari item yang akan kita buat. Sedangkan nantinya. item yang akan kita tambahkan, dimasukan ke item_db2.txt / ,conf

Pada client (data folder / grf), file yang akan kita perlukan adalah :
idnum2itemdesctable.txt
idnum2itemdisplaynametable.txt
idnum2itemresnametable.txt

num2itemdesctable.txt
num2itemdisplaynametable.txt
num2itemresnametable.txt

File idnum2 adalah file berisikan item-item yang dapat langsung digunakan, sedangkan num2, biasanya untuk dropan item dan item yang belum di identifikasi. Jika kamu hanya ingin menambah item yang bisa langsung digunakan, biasanya kita akan lebih sering mengedit idnum2.

itemdesctable.txt berisi deskripsi item saat kita mengklik kanan item pada inventory.
itemdisplaynametable.txt berisi Nama item yang muncul saat disorot mouse.
itemresnametable.txt berisi nama file item yang akan diproses agar tampilannya muncul.

Optional, kita juga akan memerlukan file itemslotcounttable.txt untuk mengatur slot item.

Lalu pada masuk ke folder lua files/datainfo kita akan membutuhkan :
accessoryid.lua
accname.lua

accessoryid.lua berisi index dari viewID headgear
accname.lua berisi index file headgear yang sama pada resnametable.txt secara urut
NOTE : file asli berformat .lub walau beberapa hexed bisa membaca .lua

Terakhir, Untuk client diatas tahun 2012, kita juga harus menyiapkan satu file lagi, kalau Translation Data tidak tersedia file ini, buka folder Ragnarok Online mu, lalu masuk ke folder System, kita akan gunakan file bernama ItemInfo.lub



Setelah file-file tersebut kamu ketahui, sekarang kita juga harus perlu mengetahui struktur dari client ragnarok online atau data folder/GRF file. Karena kita akan menambah Custom Headgear, jadi saya hanya akan memberikan contoh folder-folder yang akan dipakai dalam proses ini.

Struktur Data Folder, data yang ada pada gambar bukan data keseluruhan pada GRF official.
Didalam GRF terdapat banyak file dan folder, karena ragnarok online adalah game buatan dan korea dan umurnya cukup lama, struktur nya masih banyak dalam bahasa korea (Hongul). Dan untuk komputer kamu yang ga pernah menambah Language library, biasanya akan makin bingung, karena jika GRF tersebut di extract, huruf korea nya berubah menjadi ASCII seperti pada gambar dibawah ini.
Dalam Kotak Merah: Huruf Korea dalam bentuk ASCII
Maka dari itu kita setidaknya harus hapal dimana folder yang akan sering kita gunakan. Saya ingatkan kembali, folder-folder diatas adalah folder yang paling sering digunakan saat menambah custom headgear.
Sebelah kiri adalah root Folder, paling atas adalah root inti, sebelah kanan adalah isi masing-masing folder root.
- Untuk file seperti idnum2itemdesctable.txt biasanya ada di root pada GRF, jadi begitu kamu membuka GRF, kamu tinggal scroll kebawah dan file tersebut dapat langsung kamu temukan.
- Untuk file ber-ekstensi .lub (atau .lua) biasanya ada didalam folder lua files.
- Untuk file sprite ber-ekstensi .spr dan .act biasanya masuk ke folder sprite
- Dan untuk file-file gambar berformat BMP dan JPG biasanya masuk ke folder Texture


Letak masing-masing file didalam Data Folder, tidak boleh tertukar atau salah masuk folder.
- Sprite drop adalah sprite yang akan muncul ketika item didrop ke tanah biasanya tidak ada kode khusus, misal angel_wing.act dan angel_wing.spr
- Sprite view (Men/Women), adalah sprite yang ditampilkan ketika headgear digunakan, biasanya ada kode khusus (Men/Women), misalnya  여_angel_wing.act dan 여_angel_wing.spr

Perlu diperhatikan, Men/Women biasanya untuk item dengan gender exclusive, tapi sekarang kebanyakan headgear sudah bisa digunakan karakter gender Men/Women. Jadi nantinya kamu tidak perlu bingung memilih mana folder Sprite view untuk Men/Women.


Mari kita mulai untuk menambah Headgear, kamu bisa menggunakan file headgear yang ingin kamu coba tambahkan atau duplikat dari file yang sudah ada dan mengganti namanya. Disini saya akan menggunakan Angel Wing dan menggunakan sprite yang sudah ada didalam data.grf official. Angel Wing ini akan saya ganti nama menjadi White Angel.

Contoh sprite custom yang didapat dari hasil Download, ada 2 spirte view, 2 sprite drop, dan file pendukung lainnya.
File yang harus kamu siapkan
1. sprite view (biasanya ada 2 atau 4 file, dengan dua format ACT dan SPR)
2. sprite drop (biasanya ada 2 file ACT dan SPR)
3. image deskripsi (biasanya dengan format BMP 70x100 pixel 24 bit)
4. image thumbnail (biasanya dengan format BMP 24x24 pixel 24 bit)
5. Jangan ada spasi pada nama file, gunakan garis bawah atau tanpa spasi !

Kita tidak akan langsung menambahkan item ke dalam data.grf tapi kita akan membuat patch dan nantinya akan di merge menggunakan GRF editor.


Langkah - Langkah menambah headgear :
A. Menyiapkan Folder
  • Buat folder baru dengan nama tanggal kamu membuatnya, misalnya: patch-17sep18
  • Didalam folder tersebut buat lagi folder bernama data
  • karena kita akan menambah headgear, didalam folder tersebut buat lagi 2 folder bernama lua files, sprite dan texture
  • Buka folder sprite, buat lagi 2 folder, bernama ¾ÆÀÌÅÛ dan ¾Ç¼¼»ç¸®
  • Buka folder ¾Ç¼¼»ç¸® dan buat lagi 2 folder bernama ¿© dan ³²
  • Kembali ke folder data, buka folder texture buat folder baru bernama À¯ÀúÀÎÅÍÆäÀ̽º
  • buka folder À¯ÀúÀÎÅÍÆäÀ̽º dan buat 2 folder bernama collection dan item
  • Terakhir, kembali ke folder data, buka folder lua files dan buat folder baru bernama datainfo
sekarang kamu sudah siap untuk menambah sprite headgear yang akan kamu tambahkan
NOTE : 
- ³² = Men
¿© = Women



B. Menyiapkan Sprite File
Seperti yang sudah saya jelaskan sebelumnya, disini saya akan menggunakan item Angel Wing yang saya ganti nama menjadi White Angel sebagai contoh. Jika kamu ingin menambah sprite headgear lain yang ingin kamu tambahkan, sesuaikanlah dengan nama sprite yang akan kamu gunakan.
  • Masukan file Sprite Drop kedalam folder ¾ÆÀÌÅÛ
  • Untuk Sprite View, jika kamu hanya mendapatkan 2 file, maka buat duplikat nya, lalu rename menjadi ¿©_White_Angel.act dan ¿©_White_Angel.spr, lalu ³²_White_Angel.act dan ³²_White_Angel.spr
  • Ingat, ³² berarti untuk Men dan ¿© Women !
  • Buka folder ¾Ç¼¼»ç¸® dan masukan file berawalan ³²_ kedalam folder ³² dan file berawalan ¿©_ kedalam folder ¿©.
  • selanjutnya buka folder Collection, dan masukkan file BMP  yang berukuran 70x100
  • terakhir buka folder item, dan masukkan file BMP yang berukuran 24x24
NOTE :
Semua file harus bernama sama setelah masuk ke masing-masing folder kecuali untuk file yg masuk kedalam folder ³² dan ¿©
Contoh, saya ingin menambahkan item bernama White Angel, semua file yang saya masukkan bernama White_Angel kecuali ¿©_White_Angel.act dan ¿©_White_Angel.spr, lalu ³²_White_Angel.act dan ³²_White_Angel.spr



C. Mengedit accname dan accessoryid
Setelah kamu memasukan file-file gambar dengan benar, waktunya untuk mendaftarkan item yang kita ingin gunakan kedalam game engine, agar saat headgear yang kita tambahkan bisa muncul. Pada client versi baru, salah satu nya adalah kita akan menggunakan accname.lub dan accessoryid.lub.

Namun kamu harus mengecek terlebih dahulu apakah file tersebut bisa diedit atau tidak, kamu bisa membukanya dengan Notepad++. Jika tampilannya seperti dibawah, maka kamu harus mencari file .lua nya terlebih dahulu. Kamu bisa mengambil nya didalam folder lua files pada Data Translation yang pernah kamu download.
Contoh file .lub yang di encrypt

Jika tampilannya seperti dibawah ini, kamu bisa langsung mengeditnya.

Sebenarnya kamu bisa menggunakan file ber-ekstensi .lua, dan nantinya kamu tinggal menambahkan option Read Lua Before Lub pada saat meng-hexing client mu. Tapi dengan tujuan menghindari pembajakan, kebanyakan developer memilih menggunakan file ber-ekstensi .lub seperti pada official server.

Tapi disini karena kita sedang belajar menambahkan headgear, maka kita bisa memilih mana yang sudah ada terlebih dahulu, kalau .lub file nya bisa langsung dibuka, kamu bisa langsung mengerjakannya. Namun jika .lub file nya di encrypt, kamu bisa menggunakan .lua

Pertama-tama copy paste accessoryid dan accname (.lub atau .lua) kedalam folder lua files/datainfo dari Translation Data yang kamu download sebelumnya.

kemudian buka file accessoryid.lua (atau .lub) dalam folder datainfo yang sudah kamu buat.
  • Format  ACCESSORY_NAMA_ITEM =
  • Karena saya ingin menambahkan Headgear baru bernama White Angel, maka saya menambahkan ACCESSORY_WHITE_ANGEL = 1392
  • Perhatikan angka di belakang, angka ini adalah view ID, dimana angka ini adalah unik, tidak boleh ada nomer yang sama dalam 1 file, tidak boleh ada nama item yang sama dalam 1 file, dan tidak boleh ada nomer yang terlewat dan harus urut tidak boleh random.
  • Pada daftar item terakhir, tidak boleh ada tanda koma seperti ID sebelumnya, jadi kalau kamu ingin menambah item baru, kamu tinggal menambahkan koma pada baris sebelumnya, dan tanpa koma pada item terakhir
  • Nama Item harus sama dengan nama file yang kamu ingin tambahkan.
  • Setelah selesai jangan lupa save
Struktur file : accessoryid (.lub atau .lua)

Lalu buka file accname.lua (atau .lub) dalam folder datainfo yang sudah kamu buat.
  • Format [ACCESSORY_IDs.ACCESSORY_NAMA_ITEM] = "_namaitem",
  • karena saya ingin menambahkan item baru bernama White Angel, maka saya menambahkan [ACCESSORY_IDs.ACCESSORY_WHITE_ANGEL] = "_White_Angel",
  • Nama item harus sama dengan file yang kamu tambahkan
  • Format nama item pada sebelah kiri harus huruf kapital
  • Format nama item pada sebelah kanan harus diawali garis bawah dan nama mengikuti nama file.
  • Baris tidak boleh ada tanda koma
  • Setelah selesai jangan lupa save
Struktur file : accname (.lub atau .lua)

Sampai disini kamu selesai bekerja untuk membuat patch data grf yang nanti akan kamu tambahkan secara manual.


D. Mendaftarkan Item ID pada Server
Sekarang kamu harus menambahkan item pada server, berhubung rAthena dan Hercules memiliki format yang beda, maka tutorial nya akan saya bagi dua, kamu tinggal mencocokan emulator yang kamu pakai.

Walaupun format struktur dari kedua emulator berbeda, namun cara kerja dan fungsinya tetap sama. Untuk mendaftarkan Item kita pada server, kita perlu mengedit beberapa value, yaitu:

  • ID = kode item dalam angka, tidak boleh ada penomoran yang sama.
  • AegisName = nama yg didaftarkan pada server, penulisan harus berbeda satu sama lain, dan tidak boleh ada spasi, untuk item dengan nama yang sama, misal Hat, kamu bisa membuat nama baru yaitu Hat_ (ditambah garis bawah), atau Hat2 (ditambah angka), dan seterusnya.
  • Name = nama item yang akan muncul pada kotak chat saat kamu mendapatkan item tersebut.
  • Type = jenis item, 4 = Armor/Garment/Boots/Acc/Headgear/Costume, 12 = Shadow Equipment
  • Weight = berat item
  • DEF = Defense point
  • Slots = Jumlah slot untuk kartu, slot senjata max 4, slot equipment max 1
  • Job = Syarat Job, 0xFFFFFFFF = semua job
  • Class = Tier Job, 8 = hanya job 3, 63 = semua tier
  • Loc = lokasi gear, 256 = Upper, 512 = Mid, 001 = Lower , 769 (256 + 512 + 001) = Upper, Mid, Lower. Pada Hercules, EQP_HEAD_TOP = Upper, EQP_HEAD_MID = Mid, EQP_HEAD_LOW = Lower, EQP_HELM = Upper, Mid, Lower.
  • Refineable = Bisa ditempa atau tidak, 0 = tidak bisa, 1 = bisa
  • View ID = kode unik untuk masing-masing item, kode untuk headgear harus berbeda satu sama lain. ViewID ini lah yang kita tambahkan di accessoryid.lub atau pada ItemInfo.lua
  • Script (Kolom 1) = efek tambahan menggunakan script, misal bonus bAllStats,1; artinya item tersebut memiliki efek tambahan All Stats + 1
  • Untuk value yang nilai nya 0, kamu tidak perlu menulis value apapun pada format agar terlihat lebih rapih dan mudah dibaca, namun jangan sampai kamu melupakan tanda koma sebagai pembatas
Note : Untuk penjelasan yang lebih mendetail, kamu dapat membuka folder doc dan buka file item_db.txt

1. rAthena,
cari item_db.txt, file ini ada di folder db dan buka folder pre-re atau re (sesuai sistem yang kamu pilih pre-renewal atau renewal).

item.db rAthena masih menggunakan format yang sama dengan eAthena dan 3ceam atau emulator sebelum rAthena, jadi pengguna lama tidak akan merasakan perbedaan yang besar. Hanya saya pada rAthena versi terbaru, item_db2 ditiadakan.

Struktur dari item_db rAthena adalah
ID,AegisName,Name,Type,Buy,Sell,Weight,ATK,DEF,Range,Slots,Job,Class,Gender,Loc,wLV,eLV[:maxLevel],Refineable,View,{ Script },{ OnEquip_Script },{ OnUnequip_Script }

Sesuai format, kamu harus menulis kode menyamping kekanan, dan harus urut. Agar pekerjaanmu mudah, kamu bisa langsung mengcopy paste item yang sudah ada. Seperti misalnya item White Angel yang ingin saya tambahkan base nya dari Angel Wing, maka kode yang saya buat seperti berikut :

Kode Angel Wing sebelum dirubah :
2254,Angelic_Chain,Angel Wing,4,20,,100,,2,,0,0xFFFFFFFE,7,2,256,,0,1,38,{ bonus bMdef,3; bonus bAgi,1; bonus bLuk,1; bonus2 bSubRace,RC_Demon,3; },{},{}

Kode item yang diubah dari Angel Wing :
27000,White_Angel,White Angel,4,20,,100,,5,,1,0xFFFFFFFE,7,,256,,0,1,1392,{ bonus bAgi,1; },{},{}

Yang saya rubah adalah :
  • ItemID yang saya gunakan 27000, karena pada saat saya menulis artikel ini, angka 27000 belum terpakai
  • DEF diganti jadi 5
  • Slot  = 1
  • ViewID Harus sesuai dengan yang saya tambahkan pada accessoryid.lub, kode terakhir yang belum terpakai adalah 1392
  • Script (kolom 1) saya adalah bonus bAgi,1; yang artinya item ini memiliki efek tambahan yaitu AGI + 1
  • Perhatikan value Sell, ini adalah contoh dimana kita tidak perlu mengisi value agar format menjadi terlihat lebih pendek dan mudah dibaca. Untuk value Sell, jika kamu mengosongkan value, dan karena value Buy nya tercantum, maka value Sell nya akan otomatis membagi setengah dari value Buy. Maka perlu diperhatikan, walau value Buy nya = 20, jika kamu mengisi value Sell = 0, maka harga jual tidak akan dibagi setengah, tapi akan tetap dianggap 0.
Sampai disini, Save.


2. Hercules
Karena Hercules masih memiliki item_db2 kamu cukup membuka folder db dan cari file item_db2.conf

Banyak perubahan struktur yang dibuat oleh tim developer Hercules, termasuk item_db, format baru ini mungkin dibuat untuk para pemula, namun bagi developer lama seperti saya, agak memusingkan ketika kita ingin membuat banyak item, karena baris database nya menjadi lebih banyak.

Struktur dari item_db hercules adalah

{
 // ================ Mandatory fields ==============================
 Id: ID                        (int)
 AegisName: "Aegis_Name"       (string, optional if Inherit: true)
 Name: "Item Name"             (string, optional if Inherit: true)
 // ================ Optional fields ===============================
 Type: Item Type               (int, defaults to 3 = etc item)
 Buy: Buy Price                (int, defaults to Sell * 2)
 Sell: Sell Price              (int, defaults to Buy / 2)
 Weight: Item Weight           (int, defaults to 0)
 Atk: Attack                   (int, defaults to 0)
 Matk: Magical Attack          (int, defaults to 0, ignored in pre-re)
 Def: Defense                  (int, defaults to 0)
 Range: Attack Range           (int, defaults to 0)
 Slots: Slots                  (int, defaults to 0)
 Job: {                        (defaults to all job)
  All: true/false               (boolean, defaults to false)
  Novice: true/false            (boolean, defaults to false)
  Swordsman: true/false         (boolean, defaults to false)
  Magician: true/false          (boolean, defaults to false)
  Archer: true/false            (boolean, defaults to false)
  Acolyte: true/false           (boolean, defaults to false)
  Merchant: true/false          (boolean, defaults to false)
  Thief: true/false             (boolean, defaults to false)
  Knight: true/false            (boolean, defaults to false)
  Priest: true/false            (boolean, defaults to false)
  Wizard: true/false            (boolean, defaults to false)
  Blacksmith: true/false        (boolean, defaults to false)
  Hunter: true/false            (boolean, defaults to false)
  Assassin: true/false          (boolean, defaults to false)
  Crusader: true/false          (boolean, defaults to false)
  Monk: true/false              (boolean, defaults to false)
  Sage: true/false              (boolean, defaults to false)
  Rogue: true/false             (boolean, defaults to false)
  Alchemist: true/false         (boolean, defaults to false)
  Bard: true/false              (boolean, defaults to false)
  Taekwon: true/false           (boolean, defaults to false)
  Star_Gladiator: true/false    (boolean, defaults to false)
  Soul_Linker: true/false       (boolean, defaults to false)
  Gunslinger: true/false       (boolean, defaults to false)
  Ninja: true/false             (boolean, defaults to false)
  Gangsi: true/false            (boolean, defaults to false)
  Death_Knight: true/false      (boolean, defaults to false)
  Dark_Collector: true/false    (boolean, defaults to false)
  Kagerou: true/false           (boolean, defaults to false)
  Rebellion: true/false         (boolean, defaults to false)
 }
 Job: Job mask                 (alternate format, int, defaults to all jobs = 0xFFFFFFFF)
 Upper: Upper mask             (bitmask array, string or int, defaults to "ITEMUPPER_ALL")
 Gender: Gender                (int, defaults to both = 2)
 Loc: Equip location           (bitmask array, string or int, required value for equipment)
 WeaponLv: Weapon Level        (int, defaults to 0)
 EquipLv: Equip required level (int, defaults to 0)
 EquipLv: [min, max]           (alternative syntax with min / max level)
 Refine: Refineable            (boolean, defaults to true)
 Subtype: Item Subtype         (int, defaults to 0)
 ViewSprite: Sprite view ID    (int, defaults to 0)
 BindOnEquip: true/false       (boolean, defaults to false)
 ForceSerial: true/false       (boolean, defaults to false)
 BuyingStore: true/false       (boolean, defaults to false)
 Delay: Delay to use item      (int, defaults to 0)
 KeepAfterUse: true/false      (boolean, defaults to false)
 Trade: {                      (defaults to no restrictions)
  override: GroupID             (int, defaults to 100)
  nodrop: true/false            (boolean, defaults to false)
  notrade: true/false           (boolean, defaults to false)
  partneroverride: true/false   (boolean, defaults to false)
  noselltonpc: true/false       (boolean, defaults to false)
  nocart: true/false            (boolean, defaults to false)
  nostorage: true/false         (boolean, defaults to false)
  nogstorage: true/false        (boolean, defaults to false)
  nomail: true/false            (boolean, defaults to false)
  noauction: true/false         (boolean, defaults to false)
 }
 Nouse: {                      (defaults to no restrictions)
  override: GroupID             (int, defaults to 100)
  sitting: true/false           (boolean, defaults to false)
 }
 Stack: [amount, type]         (int, defaults to 0)
 Sprite: SpriteID              (int, defaults to 0)
 Script: <"
  Script
  (it can be multi-line)
 ">
 OnEquipScript: <" OnEquip Script (can also be multi-line) ">
 OnUnequipScript: <" OnUnequip Script (can also be multi-line) ">
 OnRentalStartScript: <" On item renting script, gets called after item is created in inventory (can also be multi-line) ">
 OnRentalEndScript: <" On item rent end/expire script, gets called after item is removed from inventory (can also be multi-line) ">
 // ================ Optional fields (item_db2 only) ===============
 Inherit: true/false           (boolean, if true, inherit the values
                               that weren't specified, from item_db.conf,
                               else override it and use default values)
},

Hercules memiliki lebih banyak fitur ketimbang rAthena, seperti misalnya kamu bisa menambahkan trade, dimana kamu bisa langsung mengatur trade restriction langsung didalam item_db tanpa harus membuka file pengaturan item_restrict.

Walau begitu, pada intinya cara penggunaannya tetap sama, kamu hanya perlu mengedit beberapa value untuk item yang ingin kamu tambahkan.

Sesuai format, kamu harus menulis kode kebawah, dan berurutan. Agar pekerjaanmu mudah, kamu bisa langsung mengcopy paste item yang sudah ada. Seperti misalnya item White Angel yang ingin saya tambahkan base nya dari Angel Wing.

NOTE : setiap item dibuka dan ditutup dengan curly braces ( tanda } dan { )

Kode Angel Wing sebelum diubah:
{
 Id: 2254
 AegisName: "Angelic_Chain"
 Name: "Angel Wing"
 Type: "IT_ARMOR"
 Buy: 20
 Weight: 100
 Def: 2
 Job: {
  All: true
  Novice: false
 }
 Loc: "EQP_HEAD_TOP"
 ViewSprite: 38
 Script: <"
  bonus bMdef,3;
  bonus bAgi,1;
  bonus bLuk,1;
  bonus2 bSubRace,RC_Demon,3;
 ">
},

Kode item yang diubah dari Angel Wing:

{
 Id: 27000
 AegisName: "White_Angel"
 Name: "White Angel"
 Type: "IT_ARMOR"
 Buy: 20
 Weight: 100
 Def: 5
 Slots: 1
 Job: {
  All: true
  Novice: false
 }
 Loc: "EQP_HEAD_TOP"
 ViewSprite: 1392
 Script: <"
  bonus bAgi,1;
  
 ">
},

Yang saya rubah adalah :
  • ItemID yang saya gunakan 27000, karena pada saat saya menulis artikel ini, angka 27000 belum terpakai
  • DEF diganti jadi 5
  • Slot  = 1, karena pada contoh yang diambil ga ada baris slots, maka kita tinggal menambahnya sendiri
  • ViewID Harus sesuai dengan yang saya tambahkan pada accessoryid.lub, kode terakhir yang belum terpakai adalah 1392
  • Script (kolom 1) saya adalah bonus bAgi,1; yang artinya item ini memiliki efek tambahan yaitu AGI + 1
  • Perhatikan value Sell, ini adalah contoh dimana kita tidak perlu mengisi value agar format menjadi terlihat lebih pendek dan mudah dibaca. Untuk value Sell, jika kamu mengosongkan value, dan karena value Buy nya tercantum, maka value Sell nya akan otomatis membagi setengah dari value Buy. Maka perlu diperhatikan, walau value Buy nya = 20, jika kamu mengisi value Sell = 0, maka harga jual tidak akan dibagi setengah, tapi akan tetap dianggap 0.
Sampai disini, kamu sudah berhasil mendaftarkan item kamu kedalam server.

NOTE : Karena bentrok coding C dengan HTML sehingga beberapa kode tidak muncul, jangan copy paste format yang ada diatas, silahkan copy paste dari item_db yang kamu punya sebagai base. Kode diatas hanya sebagai contoh.


E. Memberi Identitas dan Deskripsi pada Client Side
Setelah mendaftarkan item custom mu pada server, sekarang kita akan bisa melanjutkan kembali client side. Lalu kenapa tidak dari awal saja dikerjakan semua ? karena kita perlu mengecek terlebih dahulu View ID mana yg belum terpakai dan hanya bisa dilihat dari accessoryid.lub, dan mencari item ID yang belum terpakai di item_db, dengan begitu kita bisa menambahkan item ID dan deskripsi pada tahap terakhir.

Pada tahap ini, yang kita perlukan adalah
- idnum2itemdesctable.txt
- idnum2itemdisplaynametable.txt
- idnum2itemresnametable.txt

kalau kamu berniat untuk membuat itemnya drop dari monster, kamu juga memerlukan :
- num2desctable.txt
- num2itemdisplaynametable.txt
- num2itemresnametable.txt
Cara penambahannya sama.

NOTE : semua file langsung bisa kamu temukan begitu kamu membuka folder data (lihat gambar pertama dihalaman ini), dan pastikan Translation data yang kamu gunakan sesuai dengan sistem servermu (Pre-Renewal atau Renewal), karena beda sistem, beda pula deskripsi item nya.
Contoh : DEF Angel Wing di Pre-Renewal = 2, tapi di Renewal = 4

1. Menambahkan deskripsi di idnum2itemdesctable.txt
Format nya adalah :

ItemID#
Deskripsi Item,
Deskripsi Item,
dan lain-lain
#
  • Copy file idnum2itemdesctable.txt dan masukan pada folder patch item yang kamu buat
  • Buka file tersebut pada notepad atau Notepad++
  • Kamu bisa menyontoh dari item yang sudah ada sebagai base, karena saya mengambil item Angel Wing maka saya tinggal mencari item ID dari Angel Wing yaitu 2254
  • Copy dari Item ID sampai tanda # (pagar) kedua
  • Scroll ke baris paling bawah, lalu paste dan edit deskripsi sesuai keinginan.
  • Jangan lupa disave
Deskripsi awal Angel Wing
2254#
A headband adorned with what appears to be the wings of an angel.
It contains holiness that blesses the wearer's soul and offers protection from dark forces.
-------------------------
AGI +1, LUK +1
MDEF +3
-------------------------
Reduces damage taken from ^6666CCDemon^000000 monsters by 3%.
-------------------------
Class:^6666CC Headgear^000000
Defense:^0000FF 4^000000
Location:^6666CC Upper^000000
Weight:^009900 10^000000
Jobs:^6666CC All except Novice^000000
#

Deskripsi setelah diganti menjadi White Angel
27000#
A headband from White Angel Feather.
-------------------------
AGI +1
-------------------------
Class:^6666CC Headgear^000000
Defense:^0000FF 5^000000
Location:^6666CC Upper^000000
Weight:^009900 10^000000
Jobs:^6666CC All except Novice^000000
#

Yang saya rubah adalah :
  • Item ID = sesuai dengan item_db pada server
  • Deskripsi item, Efek tambahan, dan defense
  • Jangan lupa tanda # (pagar), setiap item diawali ItemID# dan diakhiri tanda #
2. Menambahkan Nama item pada idnum2itemdisplaynametable.txt
Format-nya adalah :
ITEM ID#NAMA FILE#
  • Copy file idnum2itemdisplayname.txt dan masukan pada folder patch item yang kamu buat
  • Buka file tersebut pada notepad atau Notepad++
  • Scroll ke baris paling bawah, lalu tambahkan ItemID dan Nama Item yang ingin kamu gunakan untuk item yang kamu tambahkan
  • Jangan lupa disave
Display Name yang saya tambahkan :
27000#White Angel#

3. Mendaftarkan ItemID dengan Sprite File pada idnum2itemresnametable.txt
Format-nya adalah :

Item ID#Sprite File Name#
  • Copy file idnum2itemdisplaynametable.txt dan masukan pada folder patch item yang kamu buat
  • Buka file tersebut pada notepad atau Notepad++
  • Scroll ke baris paling bawah, lalu tambahkan ItemID dan sprite file sesuai format dan data yang kamu tambahkan
  • Jangan lupa disave
Data custom item yang saya tambahkan :
27000#White_Angel#



F. Mengaplikasikan Patch File ke Custom.grf
Sampai pada tahap terakhir, kalau kamu mengikuti tutorial ini dengan baik, maka sekarang kamu bisa langsung menambahkan item custom yang kamu buat pada Custom GRF server mu. Perlu diperhatikan, jangan tambahkan custom item mu pada file GRF official seperti data.grf, rdata.grf, atau sdata.grf kecuali kamu benar-benar mengerti dengan apa yang kamu lakukan.

Jika kamu menggunakan patch read data folder first pada saat meng-hexing client.exe mu, maka kamu bisa langsung mencoba nya dengan cara membuat folder data pada folder Ragnarok Online mu, dan mengcopy paste file yang sudah kamu edit.

atau, kamu bisa membuat grf baru yang berisi data item yang sudah kamu edit, dan nantinya kamu tinggal menambahkan pada file DATA.ini.
NOTE : cara membuat file grf https://adani-game.blogspot.com/2018/09/membangun-client-side.html

Untuk mencobanya, kamu bisa langsung masuk ke dalam game, dan menggunakan command @item

  • Jika yang muncul Unknown Item berbentuk Apple, dan langsung muncul Gravity Error, maka file-file custom item mu tidak ada sama seakli pada Custom GRF (atau folder data jika kamu menggunakan metode ini)
  • Jika yang muncul Unknown Item berbentuk Apple, namun tidak muncul Gravity Error, kemungkinan ada file sprite atau text yang salah penamaan atau peletakkan
  • Jika nama item sudah muncul tapi masih berbentuk Apple, berarti kamu belum menambahkan thumbnail pada folder item
  • Jika nama item sudah benar dan bentuk thumbnail item sudah benar, tapi saat di klik kanan langsung muncul Gravity Error, periksa apakah gambar di dalam folder Collection sudah sesuai format dan nama file nya sudah benar atau belum. Jika sudah benar, namun saat di klik kanan masih error, berarti ada kesalahan pada idnum2itemdesctable.txt
  • Jika nama item, bentuk thumbnail, dan pada saat klik kanan sudah benar, namun saat digunakan muncul gravity error, ada kemungkinan kamu salah edit di accname.lub (khusus headgear) dan idnum2resnametable.txt
  • (Khusus Headgear) Jika nama item, bentuk thumbnail, pada saat klik kanan, dan saat digunakan tidak ada error, tapi bentuk headgear berbeda dengan preview asli item yang kamu persiapkan, maka kemungkinan kamu salah pada View ID pada accessoryid.lub dan item_db
Jika sudah tidak ada yang error, maka kamu dapat langsung membuat file patch untuk nanti nya di merge dengan Custom GRF yang kamu punya. Buka grfbuilder mu
Grf Builder v. 0.1.30
  • Klik New, pilih folder untuk file patch mu (Jangan masukan didalam folder yang akan dijadikan patch) lalu berikan nama sesuai dengan nama folder yang kamu buat misalnya patch-17sep18 dengan format .gpf
  • Klik Merge dir, buka folder patch mu, dan klik sekali saja pada folder data, lalu klik Ok
  • Tunggu sampai data terbaca, setelah selesai klik repack dan klik Ok.
  • Tunggu proses selesai lalu klik toolbar close (dibawah Repack)
  • sampai tahap ini seharusnya kamu sudah memiliki file patch gpf mu 
Selanjutnya tahap untuk mengaplikasikan patch :
NOTE : Jangan lupa backup terlebih dahulu Custom GRF mu.
  • Kembali ke grfbuilder, klik Open, dan pilih Custom GRF mu, misal ragnarok.grf
  • Tunggu sampai selesai membaca data 
  • Kemudian klik Merge GRF, pilih file patch gpf mu misalnya patch-17sep18.gpf lalu klik Open.
  • Tunggu sampai proses selesai, lalu klik Repack dan klik Ok
  • selesai

G. Pada Client Terbaru
Untuk client versi diatas (Renewal Clients > 2012-04-10a atau Main Clients > 2012-07-10a), kita tidak memerlukan lagi file-file berikut :

idnum2itemdesctable.txt
idnum2itemdisplaynametable.txt
idnum2itemresnametable.txt
- num2desctable.txt
num2itemdisplaynametable.txt
num2itemresnametable.txt
- itemslotcountable.txt
- accessoryid.lub (Hanya perlu untuk melihat ViewID terakhir, jika file nya uptodate)
- accname.lub

karena semua file setting sudah ada dalam satu file yaitu ItemInfo.Lub. Perlu diperhatikan, ItemInfo yang kita pakai harus sesuai dengan settingan servertype di clientinfo.xml.
- Jika servertype mu primary, gunakan ItemInfo.lub
- Jika servertype mu sakray, gunakan ItemInfo_Sak.lub
Letak file ItemInfo ada didalam folder System pada Ragnarok Online mu.

NOTE: perlu diperhatikan, kamu harus tetap menggunakan patch read lua before lub jika ingin menggunakan file berekstensi Lua pada saat meng-hexing client. dan pastikan deskripsi itemnya sesuai dengan server mu (renewal atau pre-renewal)

Format dari ItemInfo.lub

[ITEM ID] = {
   unidentifiedDisplayName = Nama item sebelum di identifikasi,
   unidentifiedResourceName = nama sprite yang digunakan item sebelum di identifikasi,
   unidentifiedDescriptionName = { deskripsi item sebelum di identifikasi},
   identifiedDisplayName = Nama item custom mu,
   identifiedResourceName = nama sprite file item custom yg digunakan,
   identifiedDescriptionName = { deskripsi item },
   
   slotCount = jumlah slot,
   ClassNum = View ID - harus sesuai dengan item_db
 },

Proses edit file ItemInfo.lub
  • Backup terlebih dahulu file ItemInfo.lub yang asli, dan copy ke lokasi yang mudah kamu ingat. 
  • Biasanya dari Translation Data, juga terdapat ItemInfo yang sudah ditranslasi sehingga kamu bisa mengcopy nya untuk base server kamu. Perlu dicatat, biasanya deskripsi item yang terdaftar dalam bentuk renewal, jika server mu adalah pre-renewal, kamu bisa mencari mentahannya terlebih dahulu di google.
  • Buka file ItemInfo.lub dengan Notepad++
  • Scroll ke baris paling bawah (atau tekan CTRL + End pada keyboard). lalu scroll sedikit keatas (diatas function main), tambahkan deskripsi item mu setelah item paling akhir, 
  • format text untuk deskripsi harus selalu dibuka dengan curl, dan text harus didalam tanda double quote dan di akhiri koma.
  • perhatikan tanda Curl terakhir, item terakhir tidak boleh diberi tanda koma.
  • Setelah selesai, Save. Dan kamu bisa mencoba item yang kamu tambahkan.
NOTE : Saya tidak memberikan contoh screenshot, karena isi ItemInfo tiap orang berbeda-beda, kalau kamu ragu, perhatikan isi file yang asli untuk melihat struktur yang benar.

Contoh ItemInfo.lub dari Item Custom yang saya pasang

 [27000] = {
  unidentifiedDisplayName = "Hairband",
  unidentifiedResourceName = "머리띠",
  unidentifiedDescriptionName = { "Unknown Item, can be identified by using a ^6666CCMagnifier^000000." },
  identifiedDisplayName = "White Angel",
  identifiedResourceName = "White_Angel",
  identifiedDescriptionName = {
   "A headband from a White Angel feather.",
   "Agi +1",
   "^FFFFFF_^000000",
   "Class:^6666CC Headgear^000000",
   "Defense:^0000FF 4^000000",
   "Position:^6666CC Upper^000000",
   "Weight:^009900 10^000000",
   "Jobs:^6666CC All except Novice^000000"
  },
  slotCount = 1,
  ClassNum = 1392
 }

TIPS :

  • Kamu bisa menggunakan sprite item lain untuk item yang belum di identifikasi, dan juga untuk item selain headgear, equip, dan weapon.
  • Untuk mencari sprite item, kamu bisa mencari kode item yang mau kamu pakai terlebih dahulu, lalu search (CTRL + F) di ItemInfo.lub, dan tinggal kamu copypaste nama sprite nya. 
  • Cara ini juga berguna untuk menduplikat item tanpa harus menduplikasi file spritenya.

Sampai disini, selamat, kamu sudah berhasil membuat patch dan menambahkan custom item mu sendiri, Happy RO ^^ !