Menu Drop Down

Kamis, 18 April 2013

Membuat Widget Slide Gallery Foto Pada Blog

Salah satu cara untuk mempercantik sebuah blog adalah dengan cara menambahkan suatu gallery foto atau gambar pada halaman depan sebuah blog. Selain untuk mempercantik blog, gallery foto atau gambar ini nantinya akan memiliki banyak fungsi salah satunya jika ingin menampilkan produk-produk unggulan yang ingin di perkenalkan. Yang dibutuhkan adalah menambahkan sebuah widget dan sedikit script HTML. Seperti yang telah kita ketahui bahwa widget ini memakai kode Jquery, JavaScript dan CSS, yang dirangkum menjadi kode HTML sehingga mudah untuk dikelola.
Berikut Langkah-Langkahnya :

  1. Login Ke Blogger Anda.
  2. Klik Menu Tata Letak.
  3. Klik Tombol Add Gadget.
  4. Lalu Tambahkan Widget "HTML/JavaScript".
  5. Setelah itu, masukan Kode Script Berikut ini :

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
<style type="text/css">
/*Make sure your page contains a valid doctype at the top*/
#simplegallery1{ //CSS for Simple Gallery Example 1
position: relative; /*keep this intact*/
visibility: hidden; /*keep this intact*/
border: 1px solid #666;
}
#simplegallery1 .gallerydesctext{ //CSS for description DIV of Example 1 (if defined)
text-align: left;
padding: 2px 5px;
font: 10px normal verdana, arial;
}
</style>
<script type="text/javascript" >
var simpleGallery_navpanel={
loadinggif: 'http://2.bp.blogspot.com/-ksi5eL8Tbnw/TlVybEe2EeI/AAAAAAAAExc/bzJY4U3_5Dk/s400/ajaxload.gif', //full path or URL to loading gif image
panel: {height:'45px', opacity:0.5, paddingTop:'5px', fontStyle:'bold 11px Verdana'}, //customize nav panel container
images: [ 'http://2.bp.blogspot.com/-LzMDVlVfxmQ/TlVybqSABOI/AAAAAAAAEx8/riOJdIu1eRc/s400/left.gif', 'http://1.bp.blogspot.com/-ZkATWoPt8Q8/TlVybVMA4xI/AAAAAAAAExs/zoAjOL7erWY/s400/play.gif', 'http://4.bp.blogspot.com/-IlIucHdUM-I/TlVybkMej0I/AAAAAAAAEx0/yQvxG-paQVc/s400/right.gif', 'http://1.bp.blogspot.com/-qdHg1fyty6A/TlVybOlRciI/AAAAAAAAExk/oio-_kn2KO8/s400/pause.gif'], //nav panel images (in that order)
imageSpacing: {offsetTop:[-4, 0, -4], spacing:10}, //top offset of left, play, and right images, PLUS spacing between the 3 images
slideduration: 500 //duration of slide up animation to reveal panel
}
function simpleGallery(settingarg){
this.setting=settingarg
settingarg=null
var setting=this.setting
setting.panelheight=(parseInt(setting.navpanelheight)>5)? parseInt(setting.navpanelheight) : parseInt(simpleGallery_navpanel.panel.height)
setting.fadeduration=parseInt(setting.fadeduration)
setting.curimage=(setting.persist)? simpleGallery.routines.getCookie("gallery-"+setting.wrapperid) : 0
setting.curimage=setting.curimage || 0 //account for curimage being null if cookie is empty
setting.preloadfirst=(!jQuery.Deferred)? false : (typeof setting.preloadfirst!="undefined")? setting.preloadfirst : true //Boolean on whether to preload all images before showing gallery
setting.ispaused=!setting.autoplay[0] //ispaused reflects current state of gallery, autoplay[0] indicates whether gallery is set to auto play
setting.currentstep=0 //keep track of # of slides slideshow has gone through
setting.totalsteps=setting.imagearray.length*setting.autoplay[2] //Total steps limit: # of images x # of user specified cycles
setting.fglayer=0, setting.bglayer=1 //index of active and background layer (switches after each change of slide)
setting.oninit=setting.oninit || function(){}
setting.onslide=setting.onslide || function(){}
var preloadimages=[], longestdesc=null, loadedimages=0
var dfd = (setting.preloadfirst)? jQuery.Deferred() : {resolve:function(){}, done:function(f){f()}} //create real deferred object unless preloadfirst setting is false or browser doesn't support it
setting.longestdesc="" //get longest description of all slides. If no desciptions defined, variable contains ""
setting.$loadinggif=(function(){ //preload and ref ajax loading gif
var loadgif=new Image()
loadgif.src=simpleGallery_navpanel.loadinggif
return jQuery(loadgif).css({verticalAlign:'middle'}).wrap('<div style="position:absolute;text-align:center;width:100%;height:100%" />').parent()
})()
for (var i=0; i<setting.imagearray.length; i++){ //preload slideshow images
preloadimages[i]=new Image()
preloadimages[i].src=setting.imagearray[i][0]
if (setting.imagearray[i][3] && setting.imagearray[i][3].length>setting.longestdesc.length)
setting.longestdesc=setting.imagearray[i][3]
jQuery(preloadimages[i]).bind('load error', function(){
loadedimages++
if (loadedimages==setting.imagearray.length){
dfd.resolve() //indicate all images have been loaded
}
})
}
var slideshow=this
jQuery(document).ready(function($){
var setting=slideshow.setting
setting.$wrapperdiv=$('#'+setting.wrapperid).css({position:'relative', visibility:'visible', background:'black', overflow:'hidden', width:setting.dimensions[0], height:setting.dimensions[1]}).empty() //main gallery DIV
if (setting.$wrapperdiv.length==0){ //if no wrapper DIV found
alert("Error: DIV with ID \""+setting.wrapperid+"\" not found on page.")
return
}
setting.$gallerylayers=$('<div class="gallerylayer"></div><div class="gallerylayer"></div>') //two stacked DIVs to display the actual slide
.css({position:'absolute', left:0, top:0})
.appendTo(setting.$wrapperdiv)
setting.$loadinggif.css({top:setting.dimensions[1]/2-30}).appendTo(setting.$wrapperdiv) //30 is assumed height of ajax loading gif
setting.gallerylayers=setting.$gallerylayers.get() //cache stacked DIVs as DOM objects
setting.navbuttons=simpleGallery.routines.addnavpanel(setting) //get 4 nav buttons DIVs as DOM objects
if (setting.longestdesc!="") //if at least one slide contains a description (feature is enabled)
setting.descdiv=simpleGallery.routines.adddescpanel(setting)
$(setting.navbuttons).filter('img.navimages').css({opacity:0.8})
.bind('mouseover mouseout', function(e){
$(this).css({opacity:(e.type=="mouseover")? 1 : 0.8})
})
.bind('click', function(e){
var keyword=e.target.title.toLowerCase()
slideshow.navigate(keyword) //assign behavior to nav images
})
dfd.done(function(){ //execute when all images have loaded
setting.$loadinggif.remove()
setting.$wrapperdiv.bind('mouseenter', function(){slideshow.showhidenavpanel('show')})
setting.$wrapperdiv.bind('mouseleave', function(){slideshow.showhidenavpanel('hide')})
slideshow.showslide(setting.curimage) //show initial slide
setting.oninit.call(slideshow) //trigger oninit() event
$(window).bind('unload', function(){ //clean up and persist
$(slideshow.setting.navbuttons).unbind()
if (slideshow.setting.persist) //remember last shown image's index
simpleGallery.routines.setCookie("gallery-"+setting.wrapperid, setting.curimage)
jQuery.each(slideshow.setting, function(k){
if (slideshow.setting[k] instanceof Array){
for (var i=0; i<slideshow.setting[k].length; i++){
if (slideshow.setting[k][i].tagName=="DIV") //catches 2 gallerylayer divs, gallerystatus div
slideshow.setting[k][i].innerHTML=null
slideshow.setting[k][i]=null
}
}
if (slideshow.setting[k].innerHTML) //catch gallerydesctext div
slideshow.setting[k].innerHTML=null
slideshow.setting[k]=null
})
slideshow=slideshow.setting=null
})
}) //end deferred code
}) //end jQuery domload
}
simpleGallery.prototype={
navigate:function(keyword){
clearTimeout(this.setting.playtimer)
this.setting.totalsteps=100000 //if any of the nav buttons are clicked on, set totalsteps limit to an "unreachable" number
if (!isNaN(parseInt(keyword))){
this.showslide(parseInt(keyword))
}
else if (/(prev)|(next)/i.test(keyword)){
this.showslide(keyword.toLowerCase())
}
else{ //if play|pause button
var slideshow=this
var $playbutton=$(this.setting.navbuttons).eq(1)
if (!this.setting.ispaused){ //if pause Gallery
this.setting.autoplay[0]=false
$playbutton.attr({title:'Play', src:simpleGallery_navpanel.images[1]})
}
else if (this.setting.ispaused){ //if play Gallery
this.setting.autoplay[0]=true
this.setting.playtimer=setTimeout(function(){slideshow.showslide('next')}, this.setting.autoplay[1])
$playbutton.attr({title:'Pause', src:simpleGallery_navpanel.images[3]})
}
slideshow.setting.ispaused=!slideshow.setting.ispaused
}
},
showslide:function(keyword){
var slideshow=this
var setting=slideshow.setting
var totalimages=setting.imagearray.length
var imgindex=(keyword=="next")? (setting.curimage<totalimages-1? setting.curimage+1 : 0)
: (keyword=="prev")? (setting.curimage>0? setting.curimage-1 : totalimages-1)
: Math.min(keyword, totalimages-1)
setting.gallerylayers[setting.bglayer].innerHTML=simpleGallery.routines.getSlideHTML(setting.imagearray[imgindex])
setting.$gallerylayers.eq(setting.bglayer).css({zIndex:1000, opacity:0}) //background layer becomes foreground
.stop().css({opacity:0}).animate({opacity:1}, setting.fadeduration, function(){ //Callback function after fade animation is complete:
clearTimeout(setting.playtimer)
setting.gallerylayers[setting.bglayer].innerHTML=null //empty bglayer (previously fglayer before setting.fglayer=setting.bglayer was set below)
try{
setting.onslide.call(slideshow, setting.gallerylayers[setting.fglayer], setting.curimage)
}catch(e){
alert("Simple Controls Gallery: An error has occured somwhere in your code attached to the \"onslide\" event: "+e)
}
setting.currentstep+=1
if (setting.autoplay[0]){
if (setting.currentstep<=setting.totalsteps)
setting.playtimer=setTimeout(function(){slideshow.showslide('next')}, setting.autoplay[1])
else
slideshow.navigate("play/pause")
}
}) //end callback function
setting.gallerylayers[setting.fglayer].style.zIndex=999 //foreground layer becomes background
setting.fglayer=setting.bglayer
setting.bglayer=(setting.bglayer==0)? 1 : 0
setting.curimage=imgindex
setting.navbuttons[3].innerHTML=(setting.curimage+1) + '/' + setting.imagearray.length
if (setting.imagearray[imgindex][3]){ //if this slide contains a description
setting.$descpanel.css({visibility:'visible'})
setting.descdiv.innerHTML=setting.imagearray[imgindex][3]
}
else if (setting.longestdesc!=""){ //if at least one slide contains a description (feature is enabled)
setting.descdiv.innerHTML=null
setting.$descpanel.css({visibility:'hidden'})
}
},
showhidenavpanel:function(state){
var setting=this.setting
var endpoint=(state=="show")? setting.dimensions[1]-setting.panelheight : this.setting.dimensions[1]
setting.$navpanel.stop().animate({top:endpoint}, simpleGallery_navpanel.slideduration)
if (setting.longestdesc!="") //if at least one slide contains a description (feature is enabled)
this.showhidedescpanel(state)
},
showhidedescpanel:function(state){
var setting=this.setting
var endpoint=(state=="show")? 0 : -setting.descpanelheight
setting.$descpanel.stop().animate({top:endpoint}, simpleGallery_navpanel.slideduration)
}
}
simpleGallery.routines={
getSlideHTML:function(imgelement){
var layerHTML=(imgelement[1])? '<a href="'+imgelement[1]+'" target="'+imgelement[2]+'">\n' : '' //hyperlink slide?
layerHTML+='<img src="'+imgelement[0]+'" style="border-width:0" />'
layerHTML+=(imgelement[1])? '</a>' : ''
return layerHTML //return HTML for this layer
},
addnavpanel:function(setting){
var interfaceHTML=''
for (var i=0; i<3; i++){
var imgstyle='position:relative; border:0; cursor:hand; cursor:pointer; top:'+simpleGallery_navpanel.imageSpacing.offsetTop[i]+'px; margin-right:'+(i!=2? simpleGallery_navpanel.imageSpacing.spacing+'px' : 0)
var title=(i==0? 'Prev' : (i==1)? (setting.ispaused? 'Play' : 'Pause') : 'Next')
var imagesrc=(i==1)? simpleGallery_navpanel.images[(setting.ispaused)? 1 : 3] : simpleGallery_navpanel.images[i]
interfaceHTML+='<img class="navimages" title="' + title + '" src="'+ imagesrc +'" style="'+imgstyle+'" /> '
}
interfaceHTML+='<div class="gallerystatus" style="margin-top:1px">' + (setting.curimage+1) + '/' + setting.imagearray.length + '</div>'
setting.$navpanel=$('<div class="navpanellayer"></div>')
.css({position:'absolute', width:'100%', height:setting.panelheight, left:0, top:setting.dimensions[1], font:simpleGallery_navpanel.panel.fontStyle, zIndex:'1001'})
.appendTo(setting.$wrapperdiv)
$('<div class="navpanelbg"></div><div class="navpanelfg"></div>') //create inner nav panel DIVs
.css({position:'absolute', left:0, top:0, width:'100%', height:'100%'})
.eq(0).css({background:'black', opacity:simpleGallery_navpanel.panel.opacity}).end() //"navpanelbg" div
.eq(1).css({paddingTop:simpleGallery_navpanel.panel.paddingTop, textAlign:'center', color:'white'}).html(interfaceHTML).end() //"navpanelfg" div
.appendTo(setting.$navpanel)
return setting.$navpanel.find('img.navimages, div.gallerystatus').get() //return 4 nav related images and DIVs as DOM objects
},
adddescpanel:function(setting){
setting.$descpanel=$('<div class="gallerydesc"><div class="gallerydescbg"></div><div class="gallerydescfg"><div class="gallerydesctext"></div></div></div>')
.css({position:'absolute', width:'100%', left:0, top:-1000, zIndex:'1001'})
.find('div').css({position:'absolute', left:0, top:0, width:'100%'})
.eq(0).css({background:'black', opacity:simpleGallery_navpanel.panel.opacity}).end() //"gallerydescbg" div
.eq(1).css({color:'white'}).end() //"gallerydescfg" div
.eq(2).html(setting.longestdesc).end().end()
.appendTo(setting.$wrapperdiv)
var $gallerydesctext=setting.$descpanel.find('div.gallerydesctext')
setting.descpanelheight=$gallerydesctext.outerHeight()
setting.$descpanel.css({top:-setting.descpanelheight, height:setting.descpanelheight}).find('div').css({height:'100%'})
return setting.$descpanel.find('div.gallerydesctext').get(0) //return gallery description DIV as a DOM object
},
getCookie:function(Name){
var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
if (document.cookie.match(re)) //if cookie found
return document.cookie.match(re)[0].split("=")[1] //return its value
return null
},
setCookie:function(name, value){
document.cookie = name+"=" + value + ";path=/"
}
}
</script>
<script type="text/javascript">
var mygallery=new simpleGallery({
wrapperid: "simplegallery1", //ID of main gallery container,
dimensions: [300, 200], //width/height of gallery in pixels. Should reflect dimensions of the images exactly
imagearray: [
["URL Gambar Anda (1)", "URL Yang Akan Dituju", "_new", "Descripsi Gambar Anda"],
["URL Gambar Anda (2)", "URL Yang Akan Dituju", "_new", "Descripsi Gambar Anda"],
["URL Gambar Anda (3)", "URL Yang Akan Dituju", "_new", "Descripsi Gambar Anda"],
["URL Gambar Anda (4)", "URL Yang Akan Dituju", "_new", "Descripsi Gambar Anda"],
["URL Gambar Anda (5)", "URL Yang Akan Dituju", "_new", "Descripsi Gambar Anda"]
],
autoplay: [true, 2000, 20], //[auto_play_boolean, delay_btw_slide_millisec, cycles_before_stopping_int]
persist: false, //remember last viewed slide and recall within same session?
fadeduration: 500, //transition duration (milliseconds)
oninit:function(){ //event that fires when gallery has initialized/ ready to run
//Keyword "this": references current gallery instance (ie: try this.navigate("play/pause"))
},
onslide:function(curslide, i){ //event that fires after each slide is shown
//Keyword "this": references current gallery instance
//curslide: returns DOM reference to current slide's DIV (ie: try alert(curslide.innerHTML)
//i: integer reflecting current image within collection being shown (0=1st image, 1=2nd etc)
}
})
</script>
<div id="simplegallery1"></div>
Keterangan :
  • Kode Yang Berwarna Merah adalah Ukuran Dari Galeri Gambar, 300 adalah lebar dari Galeri Gambar, Dan 200 adalah Tinggi Galeri Gambar.
  • Kode Yang Berwarna Kuning adalah URL dari gambar galeri, dan ubahlah dengan url gambar anda.
  • Kode Yang Berwarna Hijau adalah URL yang akan dituju, Ganti dengan URL dimana Gambar Berasal.
  • Kode Yang Berwarna Biru adalah Descripsi dari Gambar atau Judul dari gambar.
  • Jika Anda ingin mengubahkan Jenis dari Galeri Gambar tidak ingin berjalan otomatis ganti kode true dengan false , dan jika ingin mengubah waktu dari Gambar Berjalan ganti kode 2000 dengan yang waktu yang anda mau.



Selengkapnya...

Selasa, 05 Maret 2013

Age Of Wushu INA

Satu lagi game MMORPG dari negeri tirai bambu cina masuk ke Indonesia yaitu Age Of Wushu yang di Publisheri Zbox. Age of Wushu dikembangkan oleh Snail Game, developer game online asal negeri bambu yang beberapa produknya juga pernah rilis di Indonesia seperti Idol Street dan Ministry of War. Age of Wushu adalah sebuah free to play MMORPG yang mengambil tema dunia persilatan Cina dengan menggunakan teknologi tercanggih untuk menghadirkan performa game setinggi mungkin. Snail berharap dapat memanfaatkan teknologi tersebut untuk menghadirkan elemen-elemen penting dalam dunia persilatan yang sebenarya. Perkembangan kemampuan fisik maupun spiritual, pemandangan alam yang indah, intrik dunia persilatan yang menyentuh, hingga persaingan dan pertarungan antar karakter yang tidak terlupakan.

Agar bisa menghadirkan fitur-fitur tersebut, ternyata tidak memerlukan spesifikasi komputer yang terlalu canggih untuk dimainkan, berikut ini adalah informasi PC Requirements untuk Age of Wushu :
Minimum configuration
- CPU Pentium4 2.4Ghz or similar one
- RAM 1GB
- Graphics card GeForce6600 or similar one
- Video memory 128MB
- Broadband 1Mb
- Hard disc 10G
Recommended configuration
- CPU Pentium Dual-Core E6 series or similar one
- RAM 2GB
- Graphics card GeForce9600GT or similar one
- Video memory 512MB
- Broadband 2Mb
- Hard disc 10G
Ketika sebuah game terlalu berbeda dari yang lain, pemain biasanya akan mengalami kesulitan untuk menerima dan memahami konsep baru tersebut. Jadi kali ini Age of Wushu mencoba untuk menghindari hal tersebut dengan memberikan cara baru yang menarik bagi para pemain untuk memainkan langsung jurus-jurus terkenal seperti "18 Tapak Naga" dan "Tongkat Pemukul Anjing".
Bagaimana Snail menampilkan jurus-jurus yang biasa kita lihat di layar kaca ini ke dalam game untuk kita dimainkan dapat kamu lihat pada video berikut:
 Berikut Skill pada Age Of Wushu

Selengkapnya...

Senin, 25 Februari 2013

ShowTime INA Game Karaoke Online Pertama di Indonesia


ShowTime Indonesia merupakan game karaoke online pertama di Indonesia. Kamu dapat beradu kebolehan suara menyanyikan lagu-lagu pilihanmu dengan pemain-pemain lain di diseluruh Indonesia yang dimainkan dalam sebuar room. Room Master (RM) atau Pemilik room dapat mengatur penonton/spectator untuk dapat mendengarkan para kontestan yang sedang bernyanyi. Syarat untuk bisa memainkan game ini adalah kamu harus mempunyai perangkat microphone. Yang tidak kalah menarik dari game ini yaitu selain bernyanyi terdapat pula mode dance menggunakan keyboard.

Jika kamu hobi bernyanyi tidak ada salahnya mencoba game yang satu ini, lagi pula untuk memainkan game ini tidak dibutuhkan skil-skil khusus seperti game lain kebanyakan, cukup bisa bernyanyi sesuai nada saja.Dengan semakin berkembangnya industri musik di Indonesia serta banyaknya orang Indonesia yang hobi bernyanyi, Trinity Optima Production bekerja sama dengan inGAME memberikan suatu entertainment karaoke online / ShowTime Online Indonesia.

Game online karaoke ini juga menjadi salah satu support untuk terus mengembangkan industri musik di Indonesia. game ini mempunyai gameplay yang familiar dan penilaian yang sukup akurat dan dilengkapi dengan berbagai fitur-fitur menarik di dalamnya.

Tertarik mencoba? silahkan Downoad gamenya di sini

Official website ShowTime Indonesia

Selengkapnya...

Modoo Marble (Monopoly) Online

Monopoli atau Modoo Marble adalah permainan board game yang populer dan menyenangkan, kamu bisa membeli dan menjual gedung di kota impianmu. Karena Modoo Marble diciptakan untuk semua umur, kamu bisa memainkan game ini dengan teman atau keluargamu. Modoo Marble bisa dimainkan oleh empat orang sekaligus, sehingga kamu bisa memilih untuk bermain solo atau bekerja sama dengan temanmu melawan team lain. Dengan gameplay dan sistemnya yang menarik, Modoo Marble mengajari pemain cara berbisnis dan mencari keuntungan. Jadi tunggu apalagi, segera ajak teman atau keluargamu untuk menikmati Modoo Marble yang seru dan menyenangkan.

Terdapat berbagai karakter dalam permainan game Modoo Marble atau monopoly ini, berikut karakter yang bisa kamu mainkan :

SEUL GI
Ahli keuangan cilik. Terlahir dari ayah seorang ahli matematika dengan ibu seorang pemain kartu 
DENNIS
Bocah jenius dengan IQ 200
YANAGI
Gadis misterius yang serba tau! Gosipnya dia melihat masa depan, tetapi mustahil dikonfirmasi
BAE DAL CHOI
Pemuda yang bekerja sebagai pengantar makanan di restoran keluarga. Memiliki mimpi keliling dunia dengan sepeda motor
MING MING
Seringkali ikut serta dalam turnamen tenis internasional karena hobi wisata ke kota-kota terkenal. Dia selalu menghadapi kompetisi dengan gigih
STEVE
Bartender dengan kemampuan meracik minuman yang menakjubkan. Bahkan memiliki keterampilan luar biasa dalam mengendalikan dadu
KATRINA
Dia keliling dunia setiap hari, mengunjungi kota-kota besar dan selalu mengikuti tren di pasar real estate
HERNANDEZ
Pemain baseball liga utama dengan catatan 92 home run dalam satu musim tunggal! Setelah pensiun dia mulai berivestasi di real estate seluruh dunia
Juga terdapat 2 Special Karakter
SANTINO
Seorang pengusaha asal Sisilia yang mencintai keluarganya lebih dari apapun. Pernah berkecimpung di pemerintahan lokal
WHITNEY
Pewaris tunggal dari hotel ternama yang cantik dan cerdas. Mencintai pesta, hewan peliharaan dan traveling
Untuk cara bermainnya bisa kamu lihat di sini

Jika ingin mengetahui tips dan trik atau guide dari game monopoly ini kunjungi forumnya di sini

Bagaimana tertarik untuk memainkan Monopoli Online atau Modoo Marble ini?
Silahkan kamu download di sini

Sumber : www.modoo.netmarble.co.id
Selengkapnya...

Minggu, 24 Februari 2013

Karakter Baru Dragon Nest

Nexon akhirnya mengumumkan character class terbaru untuk Dragon Nest NA, yakni Tinkerer, atau yang dikenal juga sebagai Academic class atau Alchemist (pada Dragon Nest Korea dan Dragon Nest SEA, well namun belum tersedia untuk Dragon Nest Indonesia yang akan diluncurkan dalam beberapa waktu ke depan ini). Tinkerer akan tersedia pada musim panas tahun ini. Tinkerer juga bisa berubah menjadi Alchemist ataupun Engineer saat sudah mencapai level 15.

Dalam bertarung, Tinkerer akan menggunakan beragam ‘gadget’ untuk mengalahkan musuh, seperti cannons dan bubble blasters, hingga memanggil robot yang dia sebut sebagai ‘Alfredo’. Sedangkan sebagai Engineer, dia mampu memanggil ‘mecha-quackum’ dan juga mengerahkan Alfredo dengan skill boost. Engineer juga menggunakan senjata rockets dan grenades.

Nah, sebagai Alchemist dia mampu menyerang lawannya dengan bantuan racun, hingga menjadi support yang baik bagi team. Alchemist dapat melakukan heal, hingga skill yang bisa membantu anggota party. Selain itu, Alchemist dapat menggunakan goo minions untuk serangan elemen (fire dan ice). Baik Alchemist dan Engineer dapat melakukan serangan area yang akan berguna dalam party.
Selengkapnya...