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

25 Januari 2019

Mengatur GM Command dan Player Command Ragnarok Online Private Server

Dalam bermain Ragnarok private server, ga lengkap rasanya kalo ga ada fitur custom command atau yang biasa orang sebut @command. Biasanya beda rate server, beda pula command yang disediakan, seperti misalnya pada low rate server, hanya disediakan @showtime dan pada high rate server biasanya pasti tersedia @go dan @autoloot
"Enak ya jadi GM bisa semua command"
Pasti sering juga kalian mendengar keluhan seperti itu (atau kamu pasti begitu), sayang nya, GM pun juga manusia, dewa didalam game tapi tetap inferior di real life. Tergantung dari jabatannya juga, ada GM yang cuma bisa hide dan memantau (kepoin) para player, ada GM yang yang cuma ngejawab keluhan player, dan lain-lain. Sayangnya seorang GM belum tentu punya akses server penuh. Dimana biasanya database hanya bisa diakses melalui address khusus dan kita harus tau ID dan Passwordnya.

Nha, kalau kasusnya ada GM yang suka bagi-bagiin item dan zeny, terus ngerubah All Stats jadi 65K, biasanya sih itu karena management server nya buruk, yah bisa dibilang pengetahuannya kurang untuk masalah player command ini.

Jadi, disini kita akan membahas bagaimana caranya untuk mengatur settingan untuk command GM tersebut. Pada tutorial sebelumnya (Baca disini : https://adani-game.blogspot.com/2018/09/membuat-akun-gm-ragnarok-online-private.html), saya sudah mengajarkan bagaimana cara mengatur level GM, dan mengatur agar GM (bukan owner) tidak curang. Disini saya akan menjelaskan untuk menambahkan command yang bisa dipakai untuk player juga.

Sebelum memulai, perlu diingat bahwa Player selalu memiliki Level GM 0 (nol), GM Level 1 sudah dianggap "Super Player" pada configurasi server. dan Level GM lebih tinggi biasanya bisa menggunakan perintah Level GM yang lebih rendah, jadi perlu diperhatikan nanti agar tidak ada duplikasi command. Duplikasi command tidak menyebabkan error, tapi agar lebih rapih, usahakan tidak ada duplikasi command yg sama berulang-ulang.

Buka folder conf lalu buka file groups.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
{
 id: 0 /* group 0 is the default group for every new account */
 name: "Player"
 level: 0
 inherit: ( /*empty list*/ )
 commands: {
  changedress: true
 }
 permissions: {
  /* without this basic permissions regular players could not 
  trade or party */
  can_trade: true
  can_party: true
  command_enable: true
  attendance: true
 }
},
{
 id: 1
 name: "Super Player"
 inherit: ( "Player" ) /* can do everything Players can and more */
 level: 0
 commands: {
  /* informational commands */
  commands: true
  charcommands: true
  help: true
  rates: true
  uptime: true
  showdelay: true
  exp: true
  mobinfo: true
  iteminfo: true
  whodrops: true
  time: true
  jailtime: true
  hominfo: true
  homstats: true
  showexp: true
  showzeny: true
  whereis: true
  /* feature commands */
  refresh: true
  noask: true
  noks: true
  autoloot: true
  alootid: true
  autoloottype: true
  autotrade: true
  request: true
  go: true
  breakguild: true
  channel: true
  langtype: true
 }
 permissions: {
  attendance: false
 }
},

Sesuai penjelasan diatas, id 0 adalah grup (level GM) default untuk semua akun, dan Command GM yang biasanya dipakai di Ragnarok private server diambil dari grup id 1 (Super Player). Jadi untuk menambahkannya, kamu cukup mengcopy paste command yang ingin kamu tambahkan ke id 0 (player). Seperti misalnya, saya ingin player bisa menggunakan @go, @autoloot, dan @alootid. Contohnya seperti berikut :


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
{
 id: 0 /* group 0 is the default group for every new account */
 name: "Player"
 level: 0
 inherit: ( /*empty list*/ )
 commands: {
  go: true
  autoloot: true
  alootid: true
 }
 permissions: {
  /* without this basic permissions regular players could not 
  trade or party */
  can_trade: true
  can_party: true
  command_enable: true
  attendance: true
 }
},

Berbeda dengan script NPC, kamu tidak perlu menambahkan tanda titik koma ( ; ) pada akhir perintah. True adalah tanda bahwa perintah dapat digunakan, jika kamu tidak menginginkan player menggunakan perintah tersebut, maka kamu tinggal mengganti nya menjadi false.

Begitu pula untuk GM, kamu bisa membuat group ID baru, dengan mengambil salah satu dari contoh yang sudah ada. Lalu memberikan command seperlunya saja. Yang paling penting adalah bagaimana caranya agar GM tersebut tidak curang. Misalnya kalau kamu memberikan perintah @zeny, kamu harus membuat GM tersebut tidak bisa menggunakan #zeny kepada player.
NOTE : Command menggunakan @ digunakan untuk diri sendiri, sedangkan # digunakan untuk memberikan efek command kepada player karakter lain, misalnya #zeny Namaplayer 10000, maka zeny player dengan nama Namaplayer akan bertambah 10.000.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
 id: 4
 name: "Event Manager"
 inherit: ( "Support" )
 level: 1
 commands: {
  monster: true
  monstersmall: true
  monsterbig: true
  killmonster2: true
  cleanarea: true
  cleanmap: true
  item: [true, false]
  zeny: [true, false]
  disguise: [true, true]
  undisguise: [true, true]
  size: [true, true]
  raise: true
  raisemap: true
 }
 log_commands: true
 permissions: {
  can_trade: false
  any_warp: true
 }
},
Pada contoh diatas, Perhatikan :
baris 13 dan 14, sebelah kiri true dan sebelah kanan false, artinya GM dengan group ID tersebut dapat menggunakan @zeny dan @item untuk dirinya sendiri, tapi tidak bisa menggunakan #zeny dan #item untuk karakter lain.
baris 15 dan 16, adalah contoh format bahwa GM dengan group ID tersebut dapat menggunakan command disguise dan undisguise kepada dirinya dan juga karakter lain.

Perhatikan pula baris ke 5, yaitu pada line level. Level disini adalah GM Level pada versi eAthena terdahulu. Kamu harus mencari revisi eAthena atau rAthena lama untuk melihat list command masing-masing GM level untuk merubah settingan ini. Kalau kamu tidak mengerti, rubah menjadi 1 seperti diatas.

Pada baris ke 23, penggunaan permission can_trade: false berarti karakter dengan group ID tersebut tidak akan bisa trade antar player, juga tidak bisa menaruh item di Cart dan Storage.

Sampai disini tutorial mengatur Command untuk player dan GM pada Ragnarok Online Private Server. Kecurangan ada saja terjadi pada Ragnarok private server (bahkan mungkin pada Official server), semua tergantung dari management server tersebut. Well, penulis pernah ketahuan, dan akhirnya servernya harus tutup. Jadi, jika kamu ingin membangun sebuah server yang baik, berusalahan untuk membuat management yang baik pula.

21 Januari 2019

Cara Bermain GBA di Nintendo DS


Halo, teman-teman, mungkin banyak dari kalian yang sudah melupakan Nintendo DS, tapi pasti juga banyak dari kalian yang baru berkesempatan memiliki Nintendo DS dan penasaran, bisa ga sih Nintendo DS memainkan game dari Nintendo Gameboy Advance? Mari kita bahas bersama-sama. Sebelumnya perlu diketahui, Nintendo merilis 4 versi dari Nintendo DS, yaitu Nintendo DS, Nintendo DS Lite, Nintedo DSi, dan Nintendo DSi XL.

Slot untuk memasukan cartridge game Gameboy Advance pada Nintendo DS Lite
Bisakah Nintendo DS memainkan game dari GBA ? Untuk tipe Nintendo DS awal dan Nintendo DS Lite, jawabannya bisa ! Karena Nintendo DS generasi pertama memiliki dua slot catridge, yaitu slot yang ada di bagian atas untuk catridge Nintedo DS, dan bagian bawah bisa digunakan untuk Catridge GBA atau aksesoris seperti pad untuk bermain Guitar Hero.

Aksesoris untuk bermain Guitar Hero di Nintendo DS
Sayangnya, untuk Nintendo DSi dan DSi XL hanya memiliki 1 buah slot saja, Nintendo memutuskan untuk menghilangkan fitur tersebut. Namun, jangan bersedih, kemungkinan itu akan selalu ada. Seiring berjalannya jaman, mulai bermunculan Flashcard yang mampu memainkan GBA di NDS, dan akhirnya munculah flashcard bernama Supercard DSTwo menggunakan emulator GBATemp. Flashcard ini mampu memainkan GBA di NDS, dan satu-satu nya yang paling sempurna.

Supercard DSTwo, pembelian dilengkapi Card Reader dan buku manual.
Namun, walaupun DSTwo yang terbaik, bukan berarti kamu tidak akan menemukan kendala saat bermain. Beberapa game GBA tidak support dimainkan, dikarenakan mesin NDS tidak sekuat PSP (yang bisa memainkan game PS1). Dan bermain GBA termasuk berat, baterai NDS mu akan lebih cepat habis dan device cepat panas daripada saat memainkan game NDS.

Supercard DSTwo pertama kali saya temukan tahun 2012 di Kaskus, dan dijual oleh seorang bernick luckyguy354, pemilik onlineshop bernama produkimport.com, sayangnya sekarang webnya sudah mati (mungkin bubar atau beliau mengganti nama usahanya). Saya beli tahun 2014 dengan metode Preorder melalui beliau, barang sampai di Indonesia 1 bulan kemudian. Harganya waktu itu sekitar 500ribuan belum ongkir. Well, dengan harga yang lumayan, saya puas menggunakan DSTwo.

Penampulan UI dari Supercard DSTwo
Sekarang sudah keluar versi baru nya yaitu Supercard DSTwo+ (DSTwo plus), bisa digunakan untuk Nintendo 3DS, saya tidak tahu apakah bisa digunakan untuk Nintendo DSi juga atau engga. Well, yang jelas Supercard DSTwo satu-satu nya cara agar kamu bisa memainkan GBA di Nintendo DS.

Sekian, Terima kasih.

19 Januari 2019

Membuat NPC Ragnarok Online Private Server

Setelah membuat Ragnarok Online mu sendiri, dan selesai implementasi beberapa NPC, kamu biasanya akan merasa kurang puas, apalagi jika pernah bermain PSRO buatan orang lain. Kamu ingin meniru fitur yang ada pada private server lain, atau ingin membuat fitur sendiri.

Script NPC pada Ragnarok private server biasanya menggunakan bahasa pemrograman C. dan variable nya dapat kamu cek folder doc di dalam file script_commands.txt pada masing-masing emulator. Atau kamu bisa mencontek dari script yang sudah ada dan memofikasi sendiri script tersebut. Seperti misalnya NPC healer di Inn, biasanya hanya memberikan HP full setelah kamu membayar sejumlah zeny, kamu bisa menambah efeknya, selain membuat HP karakter penuh, karakter akan mendapatkan buff seperti Increase AGI dan Blessing.

Membuat NPC tergantung pada kebutuhan kamu, untuk membuat npc seperti Warper kamu bisa mencontek NPC Kafra dan mengcopy paste untuk area tambahan yang kamu inginkan, namun untuk membuat NPC Buffer, kamu harus melihat command script skill yang akan digunakan. Intinya membuat NPC itu bisa saja sederhana, tapi bisa jadi sulit, tergantung dari basic pemrograman yang kamu pelajari.

Dalam membuat NPC, yang biasanya kita cari pertama kali adalah kordinat lokasi NPC nya akan dipasang dengan menggunakan /where pada kotak chat, lalu kemudian mencari Sprite nya. Lalu menggunakan format seperti diberikut :

mapname,x,y,z[tab]script[tab]NPCname[tab]NPC_ID,{

Note:
Mapname = nama map
x,y = koordinat x dan y npc
z = arah npc menghadap, menggunakan angka dari 0 - 8 tidak searah jam
[tab] = tabulasi/break, harus menggunakan tombol Tab pada keyboard.
script = variable yang menunjukan kalau ini adalah script
NPCname = nama NPC (Bebas)
NPC_ID = ID Sprite NPC yang akan digunakan, tidak bisa menggunakan sprite Job, dan tidak disarankan menggunakan ID Sprite monster.

tanda } dan { digunakan sebagai pembuka dan penutup script (maaf saya tidak tahu istilah bener nya di pemrograman)

Untuk mencari sprite NPC yang kamu ingin pakai, kamu bisa melihat web http://nn.ai4rei.net/dev/npclist/?qq=8
NOTE: jika NPC yang kamu mau tidak muncul pada saat reloadscript, artinya GRF yang kamu pakai tidak support NPC tersebut.

Berikut akan saya ajakarkan membuat beberapa NPC sederhana, yaitu NPC Warper, NPC Buffer, dan NPC Quest. Untuk mempermudah pekerjaan mu. Gunakan Notepad++ dan rubah Languages menjadi C.



A) NPC Warper
Kebanyakan Ragnarok private server di Indonesia, membuat ruang khusus seperti Vending Room atau Zeny Room untuk memudahkan playernya bermain. berikut kita akan buat npc yang mirip dengan situasi tersebut. yang pertama kali kamu butuhkan adalah

1. Catat kordinat NPC Warper
2. Tentukan NPC yang akan dipakai
3. Tentukan Nama NPC
4. Catat kordinat target map yang dituju saat karakter diwarp.

Disini saya akan menggunakan map prontera untuk lokasi NPC, map morroc sebagai map tujuan warp, dan menggunakan npc Kafra (117).


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
prontera,162,191,5 script NPC Warper 117,{
 mes "[Warper NPC]";
 mes "Halo, Apakah kamu mau pindah ke ruang khusus?"
 next;
 menu "Pindah",pindahmap,"Tidak, terima kasih",Notmove;

 pindahmap:
  warp "morocc",159,91;
  end;
 Notmove:
  mes "[Warper NPC]";
  mes "Silahkan kembali lagi jika kamu ingin menggunakan service kami";
  close;
}

NOTE : Urutan angka disebelah kiri hanya berfungsi sebagai urutan, tidak perlu diketik!

Pada contoh script diatas, saat kamu mengklik NPC tersebut, maka akan keluar dialog box yang menanyakan apakah kamu akan menggunakan fitur NPC ini. Penggunaan next berfungsi agar dialog NPC tidak memanjang kebawah, sehingga mudah untuk dibaca. Next didalam game berupa tombol bertuliskan next (atau lanjut di idRO) yang dapat player klik.

Menu berfungsi untuk memunculkan opsi yang dapat di pilih oleh player. Pada bahasa pemrograman ini merupakan suatu logic yang biasa, dimana setelah kamu mengklik salah satu opsi, biasanya akan jump atau lompat ke tag option tersebut, pada case diatas, jika kamu memilih Pindah, maka script akan mencari tag pindahmap kemudian memproses script selanjutnya yaitu warp ke map morroc. Menu adalah bentuk sederhana untuk membuat opsi pilihan, selain menggunakan menu, biasanya bisa menggunakan switch, akan saya beri contoh pada script selanjutnya.

Untuk menutup dialog NPC, biasanya kita akan mengklik tombol close, untuk itu diperlukan perintah close. namun jika kamu menggunakannya pada saat warp, tentu akan tidak nyaman jika player yang berpindah tempat harus mengklik tombol close terlebih dahulu, maka itu digunakan perintah end. Perintah end akan otomatis menutup/mengakhiri percakapan dengan NPC.

Simpan dengan nama file misalnya testwarper.txt

B) NPC Buffer
Tidak lengkap rasanya jika sebuah private server tidak ada NPC Buffer yang memudahkan player dalam bermain, walau banyak juga server yang meniadakan fitur ini dengan alasan membunuh job Healer/Buffer seperti Priest.

Berbeda dengan NPC Warper yang bisa kamu contek dari Portal dan Kafra, Buffer tidak dapat ditemukan di official server, tapi mari kita lihat NPC healer di dalam Inn pada folder npc/merchants.txt, karena prontera agak ribet pake function, kita ambil contoh Lighthalzen.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
lhz_in02,230,284,4 script Hotel Employee#01 4_M_04,{
 mes "[Hotel Employee]";
 mes "Welcome to";
 mes "the Royal Dragon,";
 mes "where you can find the";
 mes "finest accomodations";
 mes "and the best service.";
 next;
 switch(select("Save Point", "Rest - 5,000 zeny", "Cancel")) {
 case 1:
  savepoint "lhz_in02",209,275;
  mes "[Hotel Employee]";
  mes "Thank you, your";
  mes "Respawn Point has";
  mes "been saved here in";
  mes "the Royal Dragon.";
  close;
 case 2:
  if(Zeny < 5000) {
   mes "[Hotel Employee]";
   mes "I'm sorry, but";
   mes "you need 5,000 zeny";
   mes "in order to check in.";
   close;
  }
  Zeny -= 5000;
  mes "[Hotel Employee]";
  mes "Thank you~";
  mes "I hope you enjoy";
  mes "your stay in the";
  mes "Royal Dragon.";
  close2;
  warp "lhz_in02",219,150;
  percentheal 100,100;
  npcskill "AL_BLESSING",10,99,99;
  end;
 case 3:
  mes "[Hotel Employee]";
  mes "Thank you and";
  mes "have a nice day.";
  close;
 }
}

Pada baris 34, terdapat fungsi percentheal 100,100 yang berarti memulihkan HP dan SP player sebanyak 100%, lalu pada baris 35, ada perintah npcskill AL_BLESSING, walau hanya berfungsi sebagai efek, tapi dari sini kita tahu kalau skill karakter bisa di aplikasikan ke script. Ada dua perintah yang biasa digunakan pada NPC buffer selain percentheal yaitu sc_start dan sc_end. sc_start digunakan untuk buff seperti Increase Agi dan Blessing, sc_end digunakan untuk debuff seperti poison dan silence.

Sebagai acuan untuk mencari nama skill yang ingin digunakan, kamu bisa membuka constants.conf pada folder db. Perintah yang bisa digunakan menggunakan awalan SC_.

Disini saya menggunakan map prontera dan kode NPC 919, dan membuat NPC buffer yang memberikan Increase AGI dan Blessing, dan menghilangkan efek poison, silence, dan hallucination.
efek buff dari Increase AGI dan Blessing akan aktif selama 10 menit.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
prontera,159,191,5 script Healer 919,{
 mes "[Healer]";
 mes "Halo, apakah kamu ingin menggunakan fasilitas ini ?";
 next;
 switch(select("Berikan Buff!","Tidak jadi.")) {
  case 1:
   mes "[Healer]";
   mes "Terima kasih sudah menggunakan fasilitas ini";
   next;
   percentheal 100,100;
   sc_end SC_Poison;
   sc_end SC_Silence;
   sc_end SC_Hallucination;
   sc_start SC_BLESSING,600000,10;
   sc_start SC_INCREASEAGI,600000,10;
   //sc_start SC_IMPOSITIO,360000,5;
   skilleffect 34,0;
   end;
  case 2:
   mes "[Healer]";
   mes "Baik, sampai jumpa lagi";
   close;
 }
}

Disini saya menggunakan perintah switch sebagai pengganti menu, dimana cara ini lebih simpel, namun terkadang jika optionnya terlalu banyak, kamu akan sedikit kesulitan saat mencari masing-masing relasi antar opsi. Tapi tidak ada salah nya dipelajari, karena perintah switch banyak ditemui di bahasa pemrograman lain.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
switch(select("opsi1","opsi2","opsi3") {
 case 1:
  mes "Hello World !";
  close;
 case 2:
  mes "Hello World !";
  close;
 case 3:
  mes "Hello World !";
  close;
}

Cara menggunakan switch, perhatikan contoh diatas, setelah masuk perintah switch, terdapat perintah select untuk membuat opsi, lalu didalam kurung sebelah kanan adalah pilihan opsi nya. Berbeda dengan menggunakan menu, kita tidak perlu lagi mengetik jump tag nya. Sebagai pengganti jump tag, digunakan case sebagai cabang dari switch select yang digunakan, urutan case bedasarkan urutan opsi yang ada didalam kurung. seperti pada contoh diatas saya menggunakan dua opsi, jadi saya menggunakan dua case. Perhatikan tag }{, jangan lupa ditutup.

Oke kembali pada script buff, saya menggunakan sc_end untuk menghapus negative status poison, silence, dan hallucination. dan menggunakan sc_start untuk memberikan positif buff yaitu Blessing dan Increase AGI, dan tentu saja HP dan SP penuh kembali.

Pada sc_start, value ke dua setelah skill, adalah durasi efek dari status yang diberikan (dalam milisekon) karena saya ingin mengaktifkannya selama 10 menit, maka value yang saya masukan adalah 600.000 milisekon, dan value terakhir adalah LV skill. Klo ga salah inget, level skill yang melebihi level yang seharusnya, nanti akan muncul error di map-server. Biasanya sering terjadi ketika kita mengcopy paste perintah yang sama, namun hanya merubah nama skillnya, jadi lebih baik masukan level yang sesuai agar tidak repot bolak balik merevisi script tersebut.

Perhatikan pula baris 16, saya menggunakan tanda garis miring 2x, tanda ini digunakan, agar sistem mengabaikan perintah tersebut (disable). Pada baris tersebut saya menambahkan skill Imposito Magnus, namun, saya tidak ingin menggunakannya, jadi saya disable. tanda garis miring 2x berguna agar kita bisa mengedit dengan mudah tanpa harus bolak balik mengetik dan menghapus perintah.
NOTE : Perintah ini juga ditemukan pada configurasi script custom.

Simpan file ini dengan nama misalnya testbuffer.txt

C) NPC Quest
Pada Ragnarok Online, terdapat NPC Quest untuk membuat headgear. Biasanya pada private server, quest nya dibuat lebih mudah, atau headgear yang digunakan tidak ada di official server (custom headgear). Untuk membuat headgear, biasanya player diharuskan membawa beberapa item, kadang zeny, dan setelah terkumpul, NPC akan memberikan headgear tersebut.

Pada script quest seperti ini, biasanya akan menggunakan perintah countitem yang dibutuhkan dan deleteitem untuk menghapus item yang dikumpulkan agar tidak terjadi looping/abuse.

Disini saya akan membuat contoh untuk membuat sebuah Pipe dengan menggunakan 10 Jellopy, 20 Scell, dan zeny sejumlah 10.000.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
geffen,40,125,6 script Pipe Maker 951,{
 mes "[Maker]";
 mes "Halo, saya bisa membuatkan kamu Pipe, apakah kamu tertarik ?";
 next;
 switch(select("Bahan yang diperlukan?","Sudah punya bahannya","Lain kali.")){
  case 1:
   mes "[Maker]";
   mes "Bawakan barang-barang ini :";
   mes "10 Jellopy";
   mes "20 Scell";
   mes "dan 10.000 Zeny";
   close;
  case 2:
   mes "[Maker]";
   mes "Sebentar, dicek terlebih dahulu";
   next;
   if (countitem(909)&lt;10 || countitem(911)&lt;20 || zeny&lt;10000) {
    mes "[Maker]";
    mes "Maaf, kamu belum memenuhi syarat";
    next;
    mes "[Maker]";
    mes "Bawakan barang-barang ini :";
    mes "10 Jellopy";
    mes "20 Scell";
    mes "dan 10.000 Zeny";
    close;
   }
   delitem 909,10; //Jellopy
   delitem 911,20; //Scell
   set zeny,zeny-10000;
   mes "[Maker]";
   mes "Sudah kuperiksa, kamu memenuhi syarat.";
   next;
   mes "[Maker]";
   mes "Silahkan datang kembali jika kamu ingin membuatnya lagi.";
   getitem 2268,1; // Pipe
   close;
  case 3:
   mes "[Maker]";
   mes "Oke, bicaralah kepadaku lagi jika kamu berubah pikiran";
   close;
 }
}

NOTE : Tanda || pada pembatas countitem (mirip huruf I besar) berada diatas tombol enter sambil menekan tombol SHIFT.

Agar quest ini tidak bolak balik, kita buat menjadi tiga opsi/case, yaitu :
Pada option 1, kamu cukup membuat percakapan untuk menjelaskan bahan-bahan yang diperlukan untuk membuat item yang diinginkan.

Pada option 2, NPC memproses bahan yang dibawa player, dimulai dengan pengecekan menggunakan perintah if dan countitem(kodeitem) dan memberikan statement jikalau barang yang diperlukan kurang. Setelah bahan yang dikumpulkan sesuai, maka NPC harus menghapus bahan-bahan tersebut dengan menggunakan delitem, jumlahitem.
Untuk pengecekan zeny cukup gunakan zeny < jumlahzeny, dan untuk mengurangi zeny pada player, gunakan perintah set zeny, zeny -jumlahzeny (jangan lupa tanda minus/kurang). Setelah itu, NPC harus memberikan Item yang dijanjikan, dengan menggunakan perintah getitem (kodeitem),jumlah item.

NOTE : tanda garis miring 2x digunakan sebagai reminder dan pengecekan, karena jumlah item sangat banyak. Kamu bisa menggunakan nama item, tapi lebih baik menggunakan kode ID nya saja.

Pada option 3, digunakan untuk opsi player yang ingin menghentikan dialog dengan NPC.

Sampai disini, simpan dengan file misalnya testquest.txt


Sekarang kamu punya tiga file npc yaitu, testwarper, testbuffer, dan testquest, jangan lupa untuk menambahkannya kedalam config script mu. Buka folder npc dan buka file script_custom.conf dengan Notepad++. Formatnya adalah npc: folder/tempat/file/namafile seperti contoh dibawah, saya menyimpan file nya pada folder npc/custom/

1
2
3
npc: npc/custom/testwarper.txt
npc: npc/custom/testbuffer.txt
npc: npc/custom/testquest.txt

Setelah disimpan, ketiga script tersebut akan diload setiap kali map-server distart. Untuk memunculkan langsung npc tersebut, kamu bisa menggunakan perintah @loadnpc, misalnya :
@loadnpc npc/custom/testwarper.txt

untuk mematikannya, kamu harus mendisable script tersebut dengan menggunakan garis miring 2x pada script_custom.conf dan kemudian gunakan @reloadscript. atau kamu bisa langsung menuju NPC tersebut, Klik kanan lalu Kill NPC (harus menggunakan ID GM yang tersimpan di clientinfo.xml didalam folder data). atau kamu juga bisa menggunakan perintah @unloadnpcfile, misalnya : 
@unloadnpcfile npc/custom/testwarper.txt

NOTE : Command bisa berbeda pada masing-masing emulator.

Sampai disini, selesai tutorial membuat NPC sederhana, jika kamu ingin mencoba untuk membuat script lain, kamu bisa melihat-lihat script yang sudah ada dan mempelajari cara kerjanya. Semoga Berhasil !

18 September 2018

Cara Memunculkan NPC pada Ragnarok Online Private Server

Setelah berhasil membuat server mu sendiri dan sudah berkeliling sedikit didalam dunia Ragnarok Online, kamu akan sadar kalau ada yang kurang. Kemana kah NPC-NPC yang biasanya ada di PSRO, seperti misalnya buffer, job changer, dan warper ?

NPC seperti Buffer, Job Changer, dan Warper yang biasa kamu pakai di PSRO pada umumnya merupakan Custom NPC yang dikembangkan dari NPC yang sudah ada. misal, pada prontera Inn, tempat untuk PvP kamu akan menemukan NPC yang menyembuhkan HP dengan membayar sejumlah uang, dengan menambahkan efek buff seperti Agi dan Blessing, dan dihapus requirment membayar sejumlah uang, maka jadilah sebuah NPC buffer.

Lalu bagaimana cara untuk memunculkan NPC-NPC tersebut ? caranya cukup mudah : 

  • buka folder npc pada emulator mu
  • buka file script_custom.conf dengan Notepad++
  • kamu akan melihat deretan list npc yang ada didalam emulator, kamu bisa melihat dimana letak masing-masing npc. Biasanya npc custom seperti warper ada didalam folder npc/custom 
  • Untuk memunculkan NPC yang kamu inginkan, kamu cukup menghapus tanda // (double slash) pada list npc, misal kamu ingin mengaktifkan npc Warper dan Healer, maka kamu cukup menghapus tanda // pada script menjadi seperti gambar dibawah 
  • Kamu tidak perlu menutup server untuk memunculkan npc tersebut, cukup gunakan command @reloadscript (NOTE: @reloadscript baiknya hanya digunakan pada saat test server, karena bukan hanya NPC yang direset, Monster seperti MVP, dan beberapa Instances juga akan ikut reload/reset)
  • Kalau kamu tidak ingin NPC tersebut muncul, kamu bisa men-disable npc tersebut dengan kembali menambahkan tanda //

Mudah bukan, harus diingat, format dari load script adalah

npc: nama/folder/namascript.txt

Kalau salah, npc tersebut tidak akan muncul (ada pesan error pada map-server), kamu juga bisa memanggil NPC tersebut (temporary) dengan menggunakan command @loadnpc  dari dalam game misal :

@loadnpc npc/custom/jobmaster.txt

Karena @loadnpc bersifat temporer, jangan lupa aktifkan / tambahkan npc yang kamu load didalam game pada script_custom.conf agar NPC tersebut akan muncul kembali saat server dihidupkan.

NOTE : ada sedikit perbedaan pada emulator Hercules terbaru, yaitu ditambahkannya tanda quotes dan koma, namun cara nya tidak jauh berbeda, hanya perlu mengurangi tanda // untuk mengaktifkan NPC.

11 September 2018

Membuat Akun GM Ragnarok Online Private Server


Ketika kamu masuk game, kamu yang sudah terbiasa bermain private server pasti menyadari bahwa saat kamu tidak dapat menggunakan perintah @ command seperti @go, @autoloot  dan lain-lain, walaupun kamu lah yang membuat server tersebut. Hal ini dikarenakan setiap ID baru yang dibuat menggunakan default level GM 0. Level GM atau yang sekarang disebut Group ID harus di ubah terlebih dahulu pada Account ID yang diinginkan agar dapat menggunakan @ command.

Group ID atau Player Group, pertama kali diperkenalkan pada rAthena sejak TXT Server dihapus, merubah format config atcommand_athena.conf pada eAthena yaitu

command name: level(@),level(#)

level @ berarti perintah yang digunakan sendiri, menggunakan @

level # berarti perintah yang hasilnya dapat di-implementasikan ke ID lain menggunakan #namakarakter (charcommand)

misalnya pada command,

zeny: 60,99

Hanya player dengan level GM 60 yang bisa menggunakan @zeny untuk menambah zeny pada karakter yang sedang dimainkan misal @zeny 1000, maka jumlah zeny akan bertambah 1000. Dan hanya player dengan level GM 99 yang bisa memberikan zeny menggunakan command #zeny namakarakter pada karakter (harus sedang online) yang dituju, misalnya #zeny namakarakter 1000, maka jumlah zeny pada player bernama namakarakter akan bertambah 1000.

Namun tidak semua perintah dapat digunakan dengan command #, seperti misalnya reloadscript, mapexit, snow, dan lain-lain. Dan level GM yang lebih tinggi bisa menggunakan perintah level GM yg lebih rendah, seperti misalnya pada contoh diatas, command zeny hanya bisa digunakan untuk level GM 60 atau lebih.

Pada versi rAthena dan emulator lain yang terbaru, sekarang file atcommand_athena.conf sudah dihapus dan diganti menjadi groups.conf. Pada prinsipnya sama, hanya saja sekarang peng-group-an nya lebih spesifik, kamu bisa membuat grup untuk masing-masing fungsi, seperti misalnya dalam server kamu, ada Event Manager, Enforcer, Supporter, dan Admin. kamu bisa membuat command zeny hanya untuk Event Manager, jail hanya untuk Enforcer, Supporter tidak bisa transfer barang atau zeny, dan tentu saja Admin bisa menggunakan perintah apapun.

Sama seperti pada eAthena, tidak semua command bisa digunakan dengan command #, dan pengaturannya tidak lagi menggunakan angka sebagai value, tapi kamu cukup menggunakan tanda true atau false.

seperti misalnya untuk zeny, pada sebelumnya pengaturannya seperti ini

zeny: 60,60

Namun, pada config baru, ada perubahan seperti ini

zeny: [true, true]

Sama seperti pada config di eAthena, agar player group dengan ID yang dituju tidak dapat menggunakan command #, maka kamu hanya perlu membuatnya seperti ini :

zeny: [true, false]

Untuk menambahkan perintah lain, seperti misalnya untuk agar player (tanpa level GM ) bisa menggunakan perintah yang umum dipakai oleh private server pada umumnya, buka groups.conf dan cari id: 0, dan tambahkan dibawah /*no commands by default*/.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
{
 id: 0 /* group 0 is the default group for every new account */
 name: "Player"
 level: 0
 inherit: ( /*empty list*/ )
 commands: {
  /* no commands by default */
  commands: true
  autoloot: true
  alootid: true
  go: true
 }
 permissions: {
  /* without this basic permissions regular players could not 
  trade or party */
  can_trade: true
  can_party: true
 }
}

Dan kalau kamu perhatikan, ada settingan permission pada beberapa group id. Permission disini berguna untuk mencegah staff kamu korupsi seperti misalnya, kamu bisa menambahkan permission :

can_trade = false

Dengan perintah ini, maka karakter dengan id group tersebut, tidak akan bisa transfer barang dengan trade, mail, bahkan barang yang ada di inventory tidak akan bisa masuk kafra storage.

Oke, semoga kamu mengerti sampai tahap ini. Sekarang kita lanjut untuk membuat akun player mu menjadi GM, atau kalau kamu ingin membuat Akun GM baru.

Setelah kamu berhasil men-setup server dan sudah berhasil sampai masuk game, yang artinya kamu sudah pernah membuat ID dengan format username_m/_f. Sekarang waktunya untuk membuat database kamu. (Jika server emulator mu nyala, kamu tidak perlu mematikan server mu)

  • Nyalakan rAsql (Stop dulu jika kamu sudah memulainya dan menutup form login HeidiSQL)
  • login ke dalam database dan cari database RO mu (disini penulis menggunakan nama database fn2016)
  • cari dan masuk kedalam table login dengan cara klik 2x lalu klik Data pada label dibawah toolbar jendela kanan atau expand klik panah pada nama database mu di sebelah kiri, dan klik table login
  • kamu akan melihat id dan password yang tersimpan didalam database mu.

Akun GM pada database Ragnarok Online Private Server
  • group ID mu ada pada lingkaran merah, klik 2x dan rubah dari 0 menjadi 99 (menjadi admin)
  • tekan Enter atau klik sembarang untuk men-save perubahan.

Sekarang kembali kedalam game, cobalah gunakan command yang biasa kamu pakai, dan Selesai ! Kamu sudah berhasil membuat ID GM mu  pada Ragnarok Online Private Server sendiri !

Lalu bagaimanakah caranya untuk menambah akun baru ?

  1. Cara paling simple adalah manual register dengan _m/_f didalam game.
  2. Manual register didalam database dengan cara Insert Row, masuk kedalam database dan ke table login sampai kamu melihat data-data ID server mu, klik kanan Insert Row pada account_id yang paling terakhir (kalau kamu belum membuat ID baru, maka pada akun 2000000, lalu isikan accound_id, username, password, dan email (Account ID harus urut, 2000000, 2000001, dst.)

Kalau kamu mau menghapus salah satu karakter mu, e-mail default ID yang didaftar dengan _m/_f adalah a@a.com. 

NOTE
  1. Jangan hapus manual dari database, karena bakal ribet.
  2. Hati-hati dalam mengedit database, data yang rusak bisa berakibat mengulang penginstalan database (Khususnya untuk kamu-kamu yang masih benar-benar pemula)

Jadi kesimpulannya, untuk game online seperti misalnya Ragnarok Online, biasanya ada beberapa tingkatan level GM, dan Game Master tidak bisa memperbaiki bug atau error yang kamu alami, seperti misalnya, karakter yang nyangkut dan tiap kali login muncul Gravity Error (biasanya ada file map yg rusak), atau ada item error ketika dipakai. Game Master hanya berfungsi sebagai Customer Service didalam game, seperti kalau sinyal provider mu jelek, dan kamu melaporkan apa yang terjadi. Dan kebanyakan untuk urusan teknis, kamu akan mendapatkan jawaban, "Mohon ditunggu ya, nanti teknisi kami akan segera memperbaiki", sudah biasa terjadi.

Well, pengalaman buruk penulis, pernah karakter penulis nyangkut di field bawah Morroc, lalu penulis coba-coba telpon customer service, lucunya customer service pada line telepon bilang, "Mohon ditunggu ya, bug nya lagi dibenerin sama Game Master", lucu ya, kesalahan ditimpalkan ke game master haha.

Dengan management Game Master yang baik, dan menjadi Administrator yang baik pula, kamu akan bisa membangun server mu dengan menjadi yang terbaik, Good Luck !