Tampilkan postingan dengan label ragnarok online private server. Tampilkan semua postingan
Tampilkan postingan dengan label ragnarok online private server. Tampilkan semua postingan

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 ^^ !