Per 2016, RMID pindah ke RMID Discord (Invite link dihapus untuk mencegah spambot -Theo @ 2019). Posting sudah tidak bisa dilakukan lagi.
Mohon maaf atas ketidaknyamanannya dan mohon kerjasamanya.

Share | 
 

 [VX]Note Tag & Cache

Topik sebelumnya Topik selanjutnya Go down 
[VX]Note Tag & Cache Empty2010-01-06, 06:50
Post[VX]Note Tag & Cache
#1
CrimsonSeas 
Novice
Novice
CrimsonSeas

Level 5
Posts : 106
Thanked : 9
Engine : RMVX

[VX]Note Tag & Cache Vide
Abis bikin Ultimate series, tiba2 gw jadi dapet ide buat bikin Note Tagging + Caching tutorial. Tutorial ini cuma buat org2 yg udah lumayan ngerti tentang scripting (termasuk class,objects, properties, modules etc.)

Note Tagging + Caching Tutorial

Difficulty: 3/5

Apa itu Note Tagging?
Satu kelebihan VX yg gw bener2 suka adalah adanya Note Field di database, kan XP blom ada tuh. Trus knapa klo ada Note Field? Bisa dimanfaatin buat nambah2 property dari suatu object yg ada di database. Contohnya liat aja script2nya Yanfly ato script2 gw yg Ultimate series, script2 itu banyak pake Note Tagging buat mempermudah developer nambah properties baru ke database object.

Properties?
Tiap variable yg ada dalam suatu object itu namanya properties. Misalnya weapon itu propertiesnya ada Attack, Defense, Name, Element, Two-handed etc, klo skill ada MP cost, Attack Factor, Spirit Factor etc. Dengan note tagging kita bisa bikin property baru yg secara default ga ada pilihannya di database. Misalnya, mau bikin skill yang ada Agility/Defense Factor? Ato mau weapon yang punya MP cost? Pengen musuh punya level? Skill bisa critical? Bikin state yang bisa nambahin Max HP/MaxMP? Bisa dibikin lewat Note Tagging.

Catatan: Note Tagging hanya berfungsi untuk membaca value untuk properties2 tambahan dari Note Field. Untuk mengimplementasikan value2 tadi ke dalam game mechanic, harus ada tambahan script2 lagi biar value2 td kepake dalam perhitungan2 dan proses2 di game. Bisa dibilang fungsi utama note tagging ini cuma mempermudah customization database, karena klo ga pake note tagging semua additional properties harus dimasukkin ke script editor. Tentu saja yang utama adalah gimana kalian membuat script yang ngebaca value2 tsb jadi berfungsi sebagaimana yg diharapkan.

Kalo Caching? Gw taunya Cacing?
Sebenernya gw ga tau sih bener ga ini namanya caching, tp yg gw maksudkan disini adalah kita baca semua tambahan properties ini di saat game mulai, lalu di store ke variable2 Tujuannya? Mempercepat loading time saat game lagi berjalan, karena properties2 ini tinggal ambil dari variable, ga usah note field lagi. Note Tagging di script2 lama itu blom pake beginian, mereka tiap kali diminta value dari suatu property tambahan, mereka baca note field lagi. Process ini relatif lebih berat daripada cuma ngasih tau 1 variable yg udah kesimpen. Jadi caching ini gunanya biar process yg beratnya cuma kejadian pas game baru dimulai, biar pas game berjalan ga baca2 note field lagi. Berguna untuk komputer2 yg mungkin masih kurang kuat, kadang2 process gini bisa bikin lag.


Oke gw tau sekarang definisinya, nah gimana caranya tuh dua2nya?
Note Tagging:
Untuk Note Tagging, gw biasa pake Regular Expression comparison, dan untuk Multiple value tags, gw juga pake String operation gsub
Regular Expression: Built in Function dimana kita bisa nyocokkin sebuah String dengan Regular Expression. Buat lebih jelasnya, cek di sini.

Contoh Regular Expression:
Code:
#Sytaxnya: string[/regexp/]
#Misalnya gw pengen nyari tag dengan nama test_tag, dan harus punya 1 value berupa integer, dan harus ditutup dengan # tanda <>
#Pake regexpnya kyk gini: <test_tag\s+[0-9]+>

#Contoh dari tag2 yang salah + 1 tag yg bener, biarpun mirip, tag yg salah format ga bkl kebaca.
string = "<test_tag2 30>\r\n<test_tag>\r\ntest_tag 50>\r\n<test_tag 50>"
result = string[/<test_tag\s+[0-9]+>/]  #=> "<test_tag 50>"

#Untuk dapetin value dari result itu, kita pake regexp lagi buat ngambil valuenya doang

value = result[/\s[0-9]+/].to_i #=> 50

Dengan cara yg sama, kita bisa ngambil value untuk properties tambahan dari note field.

String Operation gsub: Mirip2 kayak regexp diatas, tapi kalo regxp cuma nyocokkin sama yg ketemu pertama kali, kalo ini nyocokin berkali2 sampe stringnya abis. Gunanya untuk Multiple value tag, kita cocokkin value berkali2 trus masing2 value dimasukkin ke array.
Contoh gsub:
Code:
#Sytaxnya: string.gsub(regexp){|match| statements}
#Misalnya gw pengen nyari tag dengan nama test_tag, dan harus punya 4 value berupa integer, dan harus ditutup dengan #tanda <>
#Pake regexpnya kyk gini: <test_tag(\s+[0-9]+){4}>

string = "<test_tag 3 20 100>\r\n<test_tag 4 4 5 8 2>\r\n<test_tag 50 3 3 60>"
result = string[/<test_tag(\s+[0-9]+){4}>/]  #=> "<test_tag 50 3 3 60>"

#Untuk dapetin value dari result itu, kita pake gsub

values = []
result.gsub(/[0-9]+/){|match| values.push(match.to_i)} #[50, 3, 3, 60]

Nah trus gimana dong cara buat ngebacanya dari Note Field?
Nih lgsg contoh aja:
Code:
#Untuk ngambil properties dari note field, ada 3 hal yg harus ditentukan dulu:
#-method call-nya
#-Format Tag-nya
#-Return data type nya.
#Misalnya kita pengen bikin weapon punya critical hit rate sendiri.
#-Method call: Biar sama kyk actor, namain aja 'cri'
#-Format tagnya: <critical_rate value>
#-Return data typenya: Integer
#Nah kira2 jadi kyk gini codingnya:

module RPG  #Module yg meliputi game database
  class Weapon  #Weapon objects itu classnya ini.
    def cri  #Method call
      temp = self.note[/<critical_rate\s+[0-9]+>/] #Cek ada tag format yang cocok ga
      if  temp != nil #Kalo ada
        return temp[/[0-9]+/].to_i  #Ambil valuenya trus dijadiin return value.
      else  #Kalo ga ada
        return 4  #Default value kalo ga ada tag.
      end
    end
  end
end

#Dengan begitu, tiap kali kita panggil line kyk gini:
$data_weapons[ID].cri
#Bakal ngebaca note field buat weapon itu, trus ngasih value sesuai sama apa yg didapet dari proses di atas.

Hasil dari value diatas, biarpun ada valuenya, ga ada gunanya sama sekali, karena kita blom bikin script buat masukkin value td ke game mechanicnya. Nah sekarang cara biar critical rate yg udah kita dapet td bener2 jadi ngaruh ke gamenya, kita bikin script tambahan lagi.

Code:
class Game_Actor
  alias example_note_tag_cri cri unless $@  #Aliasing method call 'cri' untuk actor.
  def cri
    result = example_note_tag_cri  #Ambil value dari critical rate asli actornya.
    for weapon in weapons.compact  #Looping utuk senjata2 yg diequip.
      result += weapon.cri  #.cri => method call untuk ngebaca value dari note field
    end
  end
end

Itu tadi cuma contoh, aplikasi Note Tagging ini luas banget, bisa dipake banyak hal. Coba cek help filenya RMVX tentang regular expression. Buat contoh2 penggunaan Note Tagging, cekCS:Ultimate series atoYanfly engine, yg punya Yanfly mungkin agak beda sama yg gw kasih disini tapi initnya ga jauh beda.

Nah itu tadi kan Note Tagging, kalo Caching?
Tadi itu Note Tagging konvensional, sistem kyk gitu tiap kali diminta value, mereka bakal ngulang baca note field lagi, ngelakuin Regexp operation lagi baru ngasih valuenya. Prosess ini relatif lebih berat (ga pernah kerasa sih di gw, tp klo komputer yg dipake kurang kuat mgkin bisa jd lag), bisa2 mengganggu gameplay klo gitu. Nah biar ga mengganggu gameplay, kita baca dulu semua tag yang ada di semua object, trus dimasukkin ke variable2. Loh klo baca semua sekaligus malah tambah berat dong? Emang, tapi kalo kita bikin processnya pas awal game baru mulai(sebelum title screen), ga gitu masalah dong kalo ngelag :peace: Daripada tengah2 maen game jd ngelag kan? Nah setelah semua additional propertues nasuk ke variable2, pas dibutuhin tinggal minta value dari variable aja, ga perlu baca note field lagi.

Contoh caching:
Code:
#Pertama2 kita tentuin dulu property tambahan yg kita butuh apa aja.
#Misalnya gw mau bikin skill punya Agility F, Defense F, sama critical rate
#Kita bikin 1 method yg bakal dipanggil untuk semua skill waktu game baru mulai.
module RPG  #module yg meliputi game database
  class Skill  #Skill object masuk ke class ini.
    def create_example_cache  #Method call buat bikin cache.
      temp = self.note[/<agi_f\s+[0-9]+>/]  #cek punya tag buat Agility F ga?
      if temp != nil  #klo punya
        @agi_f = temp[/[0-9]+/].to_i #Simpen value ke variable @agi_f
      else  #klo ga punya
        @agi_f = 0  #default value
      end
      temp = self.note[/<def_f\s+[0-9]+>/]  #cek punya tag buat Defense F ga?
      if temp != nil  #klo punya
        @def_f = temp[/[0-9]+/].to_i #Simpen value ke variable @def_f
      else  #klo ga punya
        @def_f = 0  #default value
      end
      temp = self.note[/<crit_rate\s+[0-9]+>/]  #cek punya tag buat Crit Rate ga?
      if temp != nil  #klo punya
        @cri = temp[/[0-9]+/].to_i #Simpen value ke variable @cri
      else  #klo ga punya
        @cri = 0  #default value
      end
    end

    attr_accessor  :agi_f
    attr_accessor  :def_f
    attr_accessor  :cri
end

class Scene_Title
  alias example_caching_load_db load_database
  def load_database  #Method call untuk load database
    example_caching_load_db
    for skill in $data_skills
      next if skill == nil
      skill.create_example_cache  #Bikin cache untuk semua skill.
    end
  end
end

#Dengan begini, setiap kali kita masuk scene title, additional properties bakal dibikin berbarengan sama database loading.
Ini cuma salah satu teknik untuk caching, yg bermaksud buat bener2 meminimalisir lag saat game berlangsung, dengan kompensasi semua lagnya bakal kekumpul waktu game start(klo emang ngelag, gw sih fine2 aja.) Ada juga yg baru baca note field klo pas value variable itu diminta, variable tsb blom ada valuenya. Cek Yanfly punya buat yang ini.

Hoo gitu, tapi kok gw masih ga ngerti ya?
Klo agak susah dimengerti, bisa cek script2 yang bnyk pake note tagging, misalnya:
-CS:Ultimate series => Tutorial ini berdasarkan note tagging dan caching yg gw pake di script ini.
-Yanfly engine => Alternatif cara note tagging dan caching dari apa yg gw kasih disini.
-Tutorial Regexp
-Help file RPG Maker VX

Sekian deh tutorial gw, semoga membantu scripter2 disini deh :peace:
[VX]Note Tag & Cache Empty2010-01-06, 08:53
PostRe: [VX]Note Tag & Cache
#2
shikami 
Member 1000 Konsep
avatar

Level 5
Posts : 3744
Thanked : 31
Engine : Multi-Engine User
Skill : Beginner
Type : Developer
Awards:


[VX]Note Tag & Cache Vide
huft! mumet juga dibaca walau udah diulanh.. but nice tuts!
bikinin script tutor buat yang noob dunk! banyak loh yang mo belajar...
[VX]Note Tag & Cache Empty2010-01-06, 09:01
PostRe: [VX]Note Tag & Cache
#3
nekopia 
Novice
Novice
nekopia

Level 5
Posts : 170
Thanked : 5
Engine : RMVX

[VX]Note Tag & Cache Vide
TOP! TOP! Serasa lagi kuliah...Sangat bermanfaat! Lanjutkan!
[VX]Note Tag & Cache Empty2010-01-06, 09:10
PostRe: [VX]Note Tag & Cache
#4
CrimsonSeas 
Novice
Novice
CrimsonSeas

Level 5
Posts : 106
Thanked : 9
Engine : RMVX

[VX]Note Tag & Cache Vide
Waduh dr dulu jg gw pengen bikin tutorial RGSS buat beginner, tp gw sndiri bingung, soalnya gw bljr RGSS murni cuma ngebaca default script + script2 orang, sama baca help file doang, trus ngutak2 dikit2 di default scriptnya, tp jdnya gw bingung mo bikin tutorialnya gimana, ntar deh gw coba klo ada waktu.
[VX]Note Tag & Cache Empty2010-01-06, 11:08
PostRe: [VX]Note Tag & Cache
#5
LucyF 
Newbie
Newbie
LucyF

Level 5
Posts : 98
Thanked : 3
Engine : RMVX

[VX]Note Tag & Cache Vide
Gimana kalo jelasin aja tuh script RGSS pake bahasa Indonesia, alias di kasi comment2 gtu di setiap barisnya. Hohow~
Kalo lagi ada spare tim sih.

Kan dokumentasi RGSS dari RMVX pake bahasa inggris tuh, mungkin udah jelas bagi orang2 seperti kk Crimson. But~ for a really brand new comers in scripting yang ada di pikiran adalah : 'tuh dokumentasi ngomong paan sih'. Jadi yang mungkin kita butuhkan penjelasan bukan keterangan. Ni kan ceritanya kk crimson mo bikin tutorial. Kalo mo bikin dokumentasi ya memang kayak gtu aja udah cukup. Contohnya ya kayak yang udah dibuat ma kk crimson buat ngejelasin note tagging ituh.

Trus mungkin bisa juga dikasi pelajaran tentang kalo ngebaca mulai dari mana dulu. Script inisialisasinya yang mana kan di situ ada banyak sekali, yah yang jlas kalo eksekutornya pasti di main.

Atau mungkin coba jelaskan jalan pikiran kk waktu ngebuat satu skrip yang super duper sederhana buat contoh aja. Yang kita-kita (we~ saya aja kali) bingungkan kan selain belum familiar dengan syntaxnya adalah contoh ide awal itu kayak gmn. Bgtu kk...


:sembah:

@momod: komen kayak gini OOT nggak?
[VX]Note Tag & Cache Empty2010-01-06, 11:49
PostRe: [VX]Note Tag & Cache
#6
TheoAllen 
♫ RMID Rebel ♫
♫ RMID Rebel ♫
TheoAllen

Kosong
Posts : 4935
Thanked : 63
Awards:




[VX]Note Tag & Cache Vide
Nice tutorial our master scripter *lirik reijubv (ada saingan tuh) <_<
walopun aku ga paham neh berguna banget kayaknya (diliat dari yang memberi rep poin)

@phipi: kalo mau tanya2 soal script ga termasuk OOT kok :D
[VX]Note Tag & Cache Empty2010-01-06, 12:03
PostRe: [VX]Note Tag & Cache
#7
Kuro Ethernite 
The Creator
Kuro Ethernite

Level 5
Posts : 1631
Thanked : 24
Engine : RMVX Ace
Skill : Masterful
Type : Jack of All Trades
Awards:

[VX]Note Tag & Cache Vide
Ngliat nie jdi bqin q makin trtarik buat bljar script.
Well, nice tutorial !!!!
[VX]Note Tag & Cache Empty2010-01-06, 12:29
PostRe: [VX]Note Tag & Cache
#8
CrimsonSeas 
Novice
Novice
CrimsonSeas

Level 5
Posts : 106
Thanked : 9
Engine : RMVX

[VX]Note Tag & Cache Vide
@Theo: Berguna ato ga sih tergantung script yang ngegunain ini, misalnya kyk script2 Yanfly itu sangat menggunakan note tagging kyk gini, dan hasilnya keren2 lagi :D

@Yang pengen tutorial scripting: Lagi nyoba nih buat bikin basic RGSS2 tutorial, rencananya mau bikin beberapa step karena gw mulai dari basic banget dulu(saking basicnya blom bisa dipake buat bikin apa2 pas masih step1). Banyak sih tutorial2 lain yang lgsg ngajarin cara2 bikin sesuatu (misalnya cara bikin CMS, etc) tapi menurut gw lebih penting klo gw ga ngajarin lgsg cara2 bikin sesuatu, tp gw kasih basic2nya aja + contoh2nya. IMO, banyak scripter yang cuma ngikutin tutorial How to [insert something here], dan pada akhirnya mereka cuma bisa bikin apa yg mereka baca di tutorial itu. Sementara kalo ngerti basicnya, bisa bikin a whole new system, dan bikin script2 yang kreatif.
[VX]Note Tag & Cache Empty2010-01-07, 08:42
PostRe: [VX]Note Tag & Cache
#9
hart 
Senior
Senior
avatar

Level 5
Posts : 805
Thanked : 38
Engine : Other
Skill : Very Beginner
Type : Developer

[VX]Note Tag & Cache Vide
wah, nice banget tutorialnya..
sangat berguna buat saya yang tidak tahu apa2 ini.. :peace:
thanks :sembah:

hihihi...
[VX]Note Tag & Cache Empty
PostRe: [VX]Note Tag & Cache
Sponsored content 




[VX]Note Tag & Cache Vide
 

[VX]Note Tag & Cache

Topik sebelumnya Topik selanjutnya Kembali Ke Atas 

Similar topics

+
Halaman 1 dari 1

Permissions in this forum:Anda tidak dapat menjawab topik
RPGMakerID :: Creative Commons :: Tutorials-