Tutorial buat import JASS ... ??...
kl ambil dari free trigger biasanya ada instruksinya, tapi kl ambil mentah ( langsung dari map ) minimal harus tau dikit tentang JASS ....
yah gw pake contoh aja JASS dari free trigger .....
1. JESP
Merupakan Standar JASS agar spell mudah untuk disharing serta mempermudah manipulasi apabila ingin melakukan BUFF, TWEAK, atau perubahan pada trigger JASS.
karena itu saya pake contoh yg mengikuti JESP ...
btw buat tukang-tukang JASS indo ... kl bisa ikutin standar ini jg yo ....
*Translasi

Originally Posted by
Vexorian
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
- "JESP spell 1"
- "JESP spell 2"
...
- "JESP spell N"
Keuntungan Menggunakan Standar
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
- Mempermudah implementasi dengan mengikuti standar
- Mempermudah konfigurasi pada trigger JASS terutama spell
What is the JESP Standard?
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯
Standardisasi JESP didesain untuk mempermudah spell sharing, dan memastikan spell yang dibuat
dengan JASS untuk mengikuti standar, demi menghindari "chaos?"
What does JESP Standard stands for?
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯
JASS
Enhanced
Spell
Pseudotemplate
Requirements for a spell to follow the JESP Standard
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯
- Spell ditulis dalam JASS
- spell 100% multi instanceable ( MUI dan MPI ).
- Dapat digunakan untuk spell dalam level berapapun.
- Memiliki kode spell yang spesifik.
- Kode spesifik untuk spell harus disertakan dalam map ( melalui trigger comment ataupun trigger
baru yang dimatikan ) .
- Tidak memakai Global Variable Spesifik untuk spell tersebut (boleh mengunakan yang tidak
spesifik )
- Spell trigger hsrus memiliki kode nama spell sebagai nama
- Spell InitTrig function harus dinamai: InitTrig_<CodeName>
- Memiliki Header untuk konfigurasi.
- Eyecandy dan spell balance harus bisa dikonfigurasikan dengan mudah
- rawcode daru spell harus dimasukan.
- nama pembuat sebaiknya dimasukan.
contoh elemen yang ada dalam JESP seperti penggunaan
Code:
constant function DTAX takes nothing returns integer
return 5
endfunction
kegunaan dari constant tersebut adalah untuk mempermudah, misal DTAX digunakan untuk memberikan extra damage, nah kamu ga usah susah2x nyari bagian mana dalam fungsi yang memberikan extra damage tapi cukup dengan mengubah angka pada constant function diatas.
2. How To Import
Mengapa saya masukan JESP ??... karena pada map yang mengikuti JESP import JASS spell lebih mudah dengan mengikuti seperti contoh dibawah.
Free Trigger spell [ SPELL_MIRROR ]
Hal-Hal yang harus diperhatikan
1. Baca Readmenya biar minimal kamu tau apa yang harus dilakukan
2. Liat comment di trigger untuk mengetahui ini untuk apa
3. Lihat Custom Script Code Section ( klik pada nama map ), karena ini biasanya perlu dicopy paste kedalam map kamu
*mencari custom script section

*custom script code section

Example on How To Import
Berikut merupakan isi dari trigger yang perlu Di COPY ke dalam Map kamu
* Cusctom Script Code Section
Code:
//Currently only used in "SpellMirror"
// Displays texttag above unit (not following)
//
function CreateTextTagUnitEx takes unit u, string s, real size, real offset, real speed, real angle, integer red, integer blu, integer gre, integer trans, real life, real fade, boolean show, boolean permanent, boolean suspend returns texttag
local texttag tt=CreateTextTag()
local real vel=(speed*.071)/128
local real xvel=vel*Cos(angle*bj_DEGTORAD)
local real yvel=vel*Sin(angle*bj_DEGTORAD)
call SetTextTagText(tt,s,(size*0.023)/10)
call SetTextTagPos(tt,GetUnitX(u),GetUnitY(u),offset)
call SetTextTagColor(tt,red,blu,gre,255-trans)
call SetTextTagVisibility(tt,show)
call SetTextTagPermanent(tt,permanent)
call SetTextTagSuspended(tt,suspend)
call SetTextTagVelocity(tt,xvel,yvel)
if permanent!=true then
call SetTextTagLifespan(tt,life)
call SetTextTagFadepoint(tt,fade)
endif
return tt
endfunction
//Currently only used in "SpellMirror"
// Random Unit from a Group (destroys it also)
//
function RandomGroupUnit takes group g returns unit
local integer i=1
local integer r
local unit z
set bj_groupCountUnits=0
call ForGroup(g,function CountUnitsInGroupEnum)
set r=GetRandomInt(1,bj_groupCountUnits)
loop
set z=FirstOfGroup(g)
exitwhen i==r
call GroupRemoveUnit(g,z)
set i=i+1
endloop
call DestroyGroup(g)
set g=null
return z
endfunction
Nah yang diatas itu perlu dicopy paste kedalam Custom Script Code Section Map kamu
*Trigger Spell
Code:
//Dummy Unit to Create (e.g. 'e000')
// It is recomened that this unit is hidden and has the locust ability
// And has mana to cast the spell (e.g. set mana over 5k and regen to 1k)
//
// #DUMMY UNIT# AKA #SPELLCASTER#
constant function SpellMirror_Caster takes nothing returns integer
return 'u000'
endfunction
//Base Chance Amount All Levels (BASE CHANCE+(MULTIPLY CHANCE*LEVEL))
// Set to 0 (ZERO) if not needed
// If wanted for example 17% all levels set this to 17 and Multiply Chance to 0
//
// #BASE CHANCE#
constant function SpellMirror_RandA takes nothing returns integer
return 3
endfunction
//Multiply Chance Amount By Level (BASE CHANCE+(MULTIPLY CHANCE*LEVEL))
// Set to 0 (ZERO) if chance not differing
// If wanted for example 10% 15% 20% set Base Chance to 5 and this to 5
//
// #MULTIPLY CHANCE#
constant function SpellMirror_RandB takes nothing returns integer
return 14
endfunction
//Spell Ability Base ID (Ctrl+D in ObjectEditor)
// This *WILL* change for every map you add the spell to
//
// #ABILITY ID#
constant function SpellMirror_AbilityId takes nothing returns integer
return 'A000'
endfunction
//Spell Ability Buff ID (Ctrl+D in ObjectEditor)
// This *WILL* change for every map you add the spell to
//
// #BUFF ID#
constant function SpellMirror_BuffId takes nothing returns integer
return 'B000'
endfunction
//Reflect spell Range
// The range a random hero is chosen from to hurt...
//
// #RANDOM RANGE#
constant function SpellMirror_SpellRange takes nothing returns real
return 512.
endfunction
//Special Effect string path
// This what will be shown when spell is triggered
// On the reflecting unit
//
// #SPELL EFFECT#
constant function SpellMirror_EffectS takes nothing returns string
return "Abilities\\Spells\\Items\\SpellShieldAmulet\\SpellShieldCaster.mdl"
endfunction
//TextTag String
// This is what is shown to let them know what just happened
// (e.g. "Reflected!" or "Mirror!" or even "" (to not show, will still create tho) ect.)
//
// #TEXT SHOWN#
constant function SpellMirror_String takes nothing returns string
return "Reflect!"
endfunction
//TextTag String Color
// This is the red color of the texttag shown
// MUST range from 0 to 255
//
// #COLOR RED#
constant function SpellMirror_SRed takes nothing returns integer
return 255
endfunction
//TextTag String Color
// This is the blue color of the texttag shown
// MUST range from 0 to 255
//
// #COLOR BLUE#
constant function SpellMirror_SBlu takes nothing returns integer
return 125
endfunction
//TextTag String Color
// This is the green color of the texttag shown
// MUST range from 0 to 255
//
// #COLOR GREEN#
constant function SpellMirror_SGre takes nothing returns integer
return 55
endfunction
//////// ADVANCED USERS ONLY ////////
//Spells to ignore
// Add all spells you dont want to be reflected here
// e.g. a dont attack this spell (deny attacking friends)
//
// To find Ability ID Press Ctrl+D in the ObjectEditor (F6)
// it will be something like A000:AHab (Spell Mirror)
// 'A000' <-- This is it right here
//
// #EXEPTION LIST#
function SpellMirror_DenyList takes integer ID returns boolean
//Just for an example
//if ID=='DEny' then
// return false
//endif
//
//... Copy more if needed
//if ID=='AbilityID' then
// return false
//endif
//.. And so on.
//
return true //This *SHOULD* be last dont move it
endfunction
//////// DO NOT EDIT BELOW THIS LINE ////////
/////// ADVANCED USERS ONLY /////////
function SpellMirror_MainCond takes nothing returns boolean
return SpellMirror_DenyList(GetSpellAbilityId()) and GetUnitAbilityLevel(GetSpellTargetUnit(),SpellMirror_AbilityId())>=1
endfunction
function SpellMirror_Filter takes nothing returns boolean
return GetUnitAbilityLevel(GetFilterUnit(),SpellMirror_BuffId())>0
endfunction
function SpellMirror_Main takes nothing returns nothing
local unit cu=GetTriggerUnit()
local unit mu=GetSpellTargetUnit()
local unit du
local unit tu
local group g=CreateGroup()
local integer oi=GetUnitCurrentOrder(cu)
local integer ab=GetSpellAbilityId()
local integer al=GetUnitAbilityLevel(mu,SpellMirror_AbilityId())
local integer rn=GetRandomInt(1,100)
local real x=GetUnitX(mu)
local real y=GetUnitY(mu)
if(rn<=SpellMirror_RandA()+(SpellMirror_RandB()*al))then
call GroupEnumUnitsInRange(g,x,y,SpellMirror_SpellRange(),Filter(function SpellMirror_Filter))
set tu=RandomGroupUnit(g) // THIS WILL destroy the group for you (still needs a null tho)
call IssueImmediateOrder(cu,"stop")
set du=CreateUnit(GetOwningPlayer(mu),SpellMirror_Caster(),x,y,1.)
call UnitApplyTimedLife(du,'BTLF',2.)
call UnitAddAbility(du,ab)
call SetUnitAbilityLevel(du,ab,GetUnitAbilityLevel(cu,ab))
call IssueTargetOrderById(du,oi,tu)
call CreateTextTagUnitEx(mu,SpellMirror_String(),10.,5.,64.,90.,SpellMirror_SRed(),SpellMirror_SBlu(),SpellMirror_SGre(),64,2.,1.5,true,false,false)
call DestroyEffect(AddSpecialEffectTarget(SpellMirror_EffectS(),mu,"origin"))
set du=null
set tu=null
endif
set g=null
set cu=null
set mu=null
endfunction
//===========================================================================
function InitTrig_Spell_Mirror takes nothing returns nothing
local integer i=0
set gg_trg_Spell_Mirror=CreateTrigger()
call Preload(SpellMirror_EffectS())
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_Spell_Mirror,Player(i),EVENT_PLAYER_UNIT_SPELL_CAST,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(gg_trg_Spell_Mirror,Condition(function SpellMirror_MainCond))
call TriggerAddAction(gg_trg_Spell_Mirror,function SpellMirror_Main)
endfunction
yang diatas merupakan trigger untuk spell, cara importnya ....
1. lihat pada yang saya warnai biru pada trigger diatas. itu merupakan inisiasi trigger, nah supaya kamu ngga repot cukup buat trigger, dan namai persis sama dengan yang warna biru itu ( ganti _ dengan spasi )

kemudian pilih triggernya, pilih edit > convert to custom text

2. setelah itu copy paste isi dari trigger kedalam trigger yang baru kamu buat.
3. apabila kamu ingin nama triggernya berbeda caranya agak rumit, terkecuali yang saya beri warna merah berupa local ( bukan gg_trg_ ) alias triggernya berupa local kamu bisa ubah nama trigger sesuka kamu. Harap diingat yang berwarna biru harus sama persis dengan nama trigger yang kamu buat
cara mengubah nama untuk contoh diatas ( untuk yang nomor 3, dengan memberi local )
Code:
function InitTrig_NAMABARU takes nothing returns nothing
local integer i=0
local trigger t
set t = CreateTrigger()
call Preload(SpellMirror_EffectS())
loop
call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_CAST,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(t,Condition(function SpellMirror_MainCond))
call TriggerAddAction(t,function SpellMirror_Main)
set t = null
endfunction
Diatas merupakan cara import ..... nah cara untuk manipulasi datanya ...
lihat pada bagian
Code:
//Dummy Unit to Create (e.g. 'e000')
// It is recomened that this unit is hidden and has the locust ability
// And has mana to cast the spell (e.g. set mana over 5k and regen to 1k)
//
// #DUMMY UNIT# AKA #SPELLCASTER#
constant function SpellMirror_Caster takes nothing returns integer
return 'u000'
endfunction
//Base Chance Amount All Levels (BASE CHANCE+(MULTIPLY CHANCE*LEVEL))
// Set to 0 (ZERO) if not needed
// If wanted for example 17% all levels set this to 17 and Multiply Chance to 0
//
// #BASE CHANCE#
constant function SpellMirror_RandA takes nothing returns integer
return 3
endfunction
//Multiply Chance Amount By Level (BASE CHANCE+(MULTIPLY CHANCE*LEVEL))
// Set to 0 (ZERO) if chance not differing
// If wanted for example 10% 15% 20% set Base Chance to 5 and this to 5
//
// #MULTIPLY CHANCE#
constant function SpellMirror_RandB takes nothing returns integer
return 14
endfunction
//Spell Ability Base ID (Ctrl+D in ObjectEditor)
// This *WILL* change for every map you add the spell to
//
// #ABILITY ID#
constant function SpellMirror_AbilityId takes nothing returns integer
return 'A000'
endfunction
//Spell Ability Buff ID (Ctrl+D in ObjectEditor)
// This *WILL* change for every map you add the spell to
//
// #BUFF ID#
constant function SpellMirror_BuffId takes nothing returns integer
return 'B000'
endfunction
//Reflect spell Range
// The range a random hero is chosen from to hurt...
//
// #RANDOM RANGE#
constant function SpellMirror_SpellRange takes nothing returns real
return 512.
endfunction
//Special Effect string path
// This what will be shown when spell is triggered
// On the reflecting unit
//
// #SPELL EFFECT#
constant function SpellMirror_EffectS takes nothing returns string
return "Abilities\\Spells\\Items\\SpellShieldAmulet\\SpellShieldCaster.mdl"
endfunction
//TextTag String
// This is what is shown to let them know what just happened
// (e.g. "Reflected!" or "Mirror!" or even "" (to not show, will still create tho) ect.)
//
// #TEXT SHOWN#
constant function SpellMirror_String takes nothing returns string
return "Reflect!"
endfunction
//TextTag String Color
// This is the red color of the texttag shown
// MUST range from 0 to 255
//
// #COLOR RED#
constant function SpellMirror_SRed takes nothing returns integer
return 255
endfunction
//TextTag String Color
// This is the blue color of the texttag shown
// MUST range from 0 to 255
//
// #COLOR BLUE#
constant function SpellMirror_SBlu takes nothing returns integer
return 125
endfunction
//TextTag String Color
// This is the green color of the texttag shown
// MUST range from 0 to 255
//
// #COLOR GREEN#
constant function SpellMirror_SGre takes nothing returns integer
return 55
endfunction
*Catatan yang disebelah kanan // merupakan comment yang dimaksudkan sebagai petunjuk
kita pakai contoh yang dibawah untuk manipulasi
Code:
//Dummy Unit to Create (e.g. 'e000')
// It is recomened that this unit is hidden and has the locust ability
// And has mana to cast the spell (e.g. set mana over 5k and regen to 1k)
//
// #DUMMY UNIT# AKA #SPELLCASTER#
constant function SpellMirror_Caster takes nothing returns integer
return 'u000'
endfunction
merupakan penunjuk constant untuk dummy unit, dummy unit merupakan pengganti unit untuk mengcast spell. Contoh kamu bikin spell storm bolt, tapi selain efek stun kamu pengen memberikan efek slow, caranya dengan membuat UNIT untuk mengcast slow, UNIT itu merupakan dummy unit ...
nah balik ke trigger liat yang saya warnai merah, itu merupakan RAWCODE untuk dummy unit
* cara melihat rawcode, masuk ke object editor kemudian pencet ctrl + d dan lihat perubahannya
sesudah ctrl + d

jadi untuk membuat dummy unit cukup buat unit baru dan ganti rawcode pada contoh diatas dengan rawcode unit yang kamu buat ( ingat untuk memakai tanda ' ' )
contoh
Code:
//Dummy Unit to Create (e.g. 'e000')
// It is recomened that this unit is hidden and has the locust ability
// And has mana to cast the spell (e.g. set mana over 5k and regen to 1k)
//
// #DUMMY UNIT# AKA #SPELLCASTER#
constant function SpellMirror_Caster takes nothing returns integer
return 'H000'
endfunction
yang berikutnya juga bisa dimanipulasi sama seperti yang diatas, cukup dengan membaca petunjuk yang diberikan, sebenarnya free trigger ini mudah untuk diutak atik ...
Kl ada kesulitan lg ... kasi tau gw ... dan kasih mapnya / triggernya kl diperlukan
euh sebenernya gw jg rada bingung nyusun tutorialnya ..... mapnya gw simpen sini aja kl ya ?
Share This Thread