ÍÆ¼öµØÍ¼£º»ðÓ°ÎÞ¼¶±ð»ìÕ½ÍÆ¼öµØÍ¼£º³þººÕù°ÔÍÆ¼öµØÍ¼£ºÄ§ÉñÍÆ¼öµØÍ¼£ºÈË×åÎÞµÐII
ÍÆ¼ö×¨Çø£º¼¼ÄÜ´´×÷ÇøÍÆ¼ö×¨Çø£ºWEÌÖÂÛÇøÍÆ¼ö×¨Çø£ºÄ£ÐÍ×÷ÇøÍÆ¼ö×¨Çø£ºÉêÇ빫¸æÇø
 48 123
·¢Ð»°Ìâ
´òÓ¡

¡ï¡ï¡ï¡ï¡ï¡ïJASSÈ«½Ì³Ì,ÐÂÈ˵ĸ£Òô¡ï¡ï¡ï¡ï¡ï¡ï

±¾Ö÷ÌâÓÉ shingoscar ÓÚ 2008-7-29 21:00 ÍÆ¼öÖ÷Ìâ

¡ï¡ï¡ï¡ï¡ï¡ïJASSÈ«½Ì³Ì,ÐÂÈ˵ĸ£Òô¡ï¡ï¡ï¡ï¡ï¡ï

Jass»ù´¡½Ì³Ì

׫д: Greedwind(greedwind@163.com)

ÐòÑÔ

Õâ¸ö½Ì³Ì¼ÙÉèÄãÒѾ­±È½ÏÊìÁ·µØÊ¹ÓÃTrigger²¢ÓÐÒ»¶¨µÄÂß¼­»ù´¡ºÍ³ÌÐòÉè¼Æ»ù´¡, Knowning engish is preferable
Ê×ÏÈÎʸöÎÊÌâ: ΪʲôҪѧJASS?
ÏÈ¿´ÏÂÃæµÄÀý×Ó:
ÒÔÏÂÀý×Ó¿ÉÒÔʵÏÖÔÚµ¥Î»ËÀÍöµÄλÖÃÏÔʾ5ÃëµÄËÀÍöÐÅÏ¢£¨Æ¯¸¡ÎÄ×Ö)ºó²¢Çå³ýËÀÍöÐÅÏ¢Âð?
Àý×Ó£º
Events:
    A unit dies
Conditions:
Actions:
        -Floating Text - Create floating text at ((position of (Triggering Unit))
         with the message (("A "+(name of (Triggering Unit))) + " dies") with size 20 , red 100, green 100, blue 0, alpha 100.
        -Wait 5.00 seconds
        -Destroy (last created floating text)
ÏóÒÔÉÏÀý×Ó, Èç¹û²»Ê¹ÓÃÓþֲ¿±äÁ¿, ½«ÎÞ·¨×¼È·Ïú»ÙÁÙʱƯ¸¡ÎÄ×Ö. ÒòΪÔڵȴý5Ãëºó(-Wait 5.00 seconds), ×î½ü´´½¨µÄƯ¸¡ÎÄ×Ö(last created floating text)¿ÉÄÜÒѾ­²»ÊÇÔ­À´µÄÄǸöÁË!)

Òª´ïµ½Ä¿µÄ, ±ØÐë¶ÔJASSÓÐЩÁ˽â. ½Ì³Ì½«¶Ô´ËTRIGGER×÷½øÒ»²½µÄ·ÖÎö.

µÚÒ»Õ ±äÁ¿Æª

ѧеijÌÐòÉè¼ÆÓïÑÔ, ÒªÏÈѧËüµÄ±äÁ¿ÀàÐÍ.
Ê×ÏÈÌáÐÑ´ó¼Ò: Jass2ÊÇÇø·Ö´óСдµÄ, ÈçABcdºÍABCDÊDz»Ò»ÑùµÄ.
Jass2 ±äÁ¿ÀàÐÍ
±äÁ¿Ï൱ÓÚÎï¼þµÄ´¢´æÏä×Ó, JASS2ºÜ¶àµÄ±äÁ¿ÀàÐÍÖ»ÊǸöÖ¸Õë(±äÁ¿µØÖ·).
ʹÓñäÁ¿Ç°±ØÐëÒªÊ×ÏÈÉùÃ÷±äÁ¿ÀàÐͺͱäÁ¿Ãû³Æ.
¿´¸ö¼òµ¥µÄÀý×Ó:
local string my1stvar        //ÉùÃ÷1¸ö×Ö·ûÐ;ֲ¿±äÁ¿, ÆðÃûΪmy1stvar
set my1stvar = "GreedWind"    //°Ñ"GreedWind"¸³Öµ¸ø±äÁ¿my1stvar
ÒÔºóµÄ³ÌÐòÖоͿÉÒÔÖ±½ÓÒýÓÃ/ÖØÐ¸³Öµmy1stvar
±äÁ¿(³ýÁËÊý×é±äÁ¿)¿ÉÒÔÔÚÉùÃ÷Óï¾äÖгõʼ»¯, ÉÏÃæ¿ÉÒÔ¼ò»¯³É:
local string my1stvar = "GreedWind" //ÉùÃ÷×Ö·ûÐ;ֲ¿±äÁ¿my1stvar²¢¸³ÖµÎª"GreedWind"
JASS2ÓÐÄÄЩ±äÁ¿ÀàÐÍÄØ?
ÎÒÃÇÓÃWORLD EDITORºÍJass2±äÁ¿ÀàÐÍ×ö¶ÔÕÕ±ãһĿÁËÈ»ÁË
WORLD EDITORºÍJASS±äÁ¿ÀàÐͶÔÕÕ±í£º

World Editor ±äÁ¿Ãû Jass±äÁ¿ÀàÐÍ
Boolean boolean ²¼¶ûÐÍ(ÓÃÓÚÕæ/¼ÙÅжÏ)
Destructible destructable ¿ÉÆÆ»µÎï
Dialog dialog ¶Ô»°
Dialog Button button °´Å¥
Floating Text texttag Ư¸¡ÎÄ×Ö
Integer integer ÊýÖµ
Item item ÎïÆ·
Leaderboard leaderboard ÅÅÐаñ
Player player Íæ¼Ò
Player Group force Íæ¼Ò×é
Point location λÖÃ(µã)
Real real ÕæÖµÐÍÊý×Ö
Region rect µØÇø
Special Effect effect ÌØÐ§
String string ×Ö·û´®
Terrain Deformation terraindeformation µØÐÎ
Timer timer ¼ÆÊ±Æ÷
Timer Window timerdialog ¼ÆÊ±Æ÷´°¿Ú
Unit unit µ¥Î»
Unit Group group µ¥Î»×é
Player Score playerscore »ý·Ö(1.13°æÐÂÀàÐÍ)

World EditorÖеÄOrder(ÃüÁî) , Ability(¼¼ÄÜ) , Unit Type(µ¥Î»ÀàÐÍ), Destructible type(¿ÉÆÆ»µÎïÀàÐÍ) ºÍ Item type(ÎïÆ·ÀàÐÍ) ÔÚJASSÖжÔÓ¦µÄ±äÁ¿ÀàÐÍʵ¼ÊÉÏÊÇinteger¡£
¿ÉÒÔÓõ¥ÒýºÅ'Xxxx'(XxxxΪÔÚWorld EditorÓÃView as raw data(ÒÔÐÐÊý¾Ý²é¿´)Öп´µ½µÄ´úÂë)±íʾÕâЩÀàÐ͵ÄÖµ

Jass»ù±¾±äÁ¿ÀàÐÍ
integer
integer(ÊýÖµ)Êǵķ¶Î§ÔÚ -2147483648 ºÍ 2147483647 Ö®¼äµÄÕûÊý, ²»ÄÜÓÐСÊýλ
ÔÚJassÖÐIntegerµÄ¼¸ÖÐÌØÊâÐÎʽ:
1.'xxxx' µ¥ÒýºÅ¼Ó×Ö·ûÐÎʽ£¬¸ÃÐÎʽΪ256½øÖÆÕûÊý£¬Ã¿¸ö×Ö·û´ú±íÆäAscIIÂëÖµ£¬Çø·Ö´óСд£¬Ò»°ãÓÃÀ´±íʾµ¥Î»¡¢ÎïÆ·¡¢¼¼ÄܵȴúÂë¡£±ÈÈç¶ÔÕ½µ¥Î»À」ʥµÄ´úÂëÊÇ 'Obla'£¨ÔÚÎï±àÖа´Ctrl+D¿ÉÒÔ¿´µ½£©
2.0xxx 8½øÖÆÊý×Ö£¬Ê×λΪ0±íʾ8½øÖÆÊý×Ö
3.0Xaa 16½øÖÆÊý×Ö,ÒÔ0x¿ªÍ·µÄ±íʾ16½øÖÆÊý×Ö
real
realÊÇ·¶Î§ºÜ´óµÄ32×Ö½ÚÊý×Ö, ¿ÉÒÔÓÐСÊýλ, 123456.33¾ÍÊÇreal
СÊýµãǰ»òºóÊÇ0µÄ»°£¬¿ÉÒÔÊ¡ÂÔÕâ¸ö0;±ÈÈç0.34=.34  4.0=4.   0.0¿ÉÒÔд³É0.»ò.0,µ«²»Äܶ¼Ê¡ÂÔ
boolean
booleanµÄÖµÖ»ÓÐtrue(Õæ)ºÍfalse(¼Ù), ¶àÓÃÓÚÌõ¼þÅжÏÓï¾ä
if (Ìõ¼þ==true)
then
  (·ûºÏÌõ¼þ×öijÊÂ)
else
  (²»·ûºÏÌõ¼þ¾Í×öÁíÒ»¼þÊÂ)
endif
string
stringÊÇ×Ö·û´®±äÁ¿, ¿ÉÒÔÊÇnull(¿ÕÖµ). ×¢ÒâJassµÄ×Ö·û´®ÊÇ´óÐ¡Ð´Çø·ÖµÄ, ¸³ÖµÊ±ÓÃË«ÒýºÅ "" ÒýÓÃ
handle
handle¾ä±ú, ¿ÉÒÔÊÇnull(¿ÕÖµ). ÊÇÓÃÓÚÖ¸ÏòWarcraft III¶¨ÒåµÄÊý¾Ý½á¹¹µÄÖ¸Õë. ±ÈÈçÉϱíÖеÄlocation/playerµÈ³ýÁËinteger/real/boean/stringÍâµÄµÄ±äÁ¿Êµ¼ÊÉϾÍÊÇhandleÀàÐ͵Ä×Ó±äÁ¿
code
code(³ÌÐò´úÂë), ¿ÉÒÔÊÇnull(¿ÕÖµ). º¯Êý¿ÉÒÔÓÐcodeÀàÐ͵Ĵ«µÝ²ÎÊý, ±íʾ¸Ãº¯Êý±ØÐëÒªÓÐÆäËûº¯Êý×÷Ϊ²ÎÊý, Èç:
function RunFunctionForAllPlayers takes code theFunction returns nothing
ÎÒÃÇ¿ÉÒÔÕâÑùµ÷Óú¯Êý: call RunFunctionForAllPlayers(function someFunction) //ÏÈÔËÐÐsomeFunction
Ò²¿ÉÒÔ: call RunFunctionForAllPlayers(null) //²»ÔËÐÐÆäËûº¯Êý

Óû§¶¨Òå±äÁ¿ÀàÐÍ
ÕýÈçÉÏÃæËù˵, ÉϱíÖÐlocation/playerµÈ³ýÁËinteger/real/boean/stringÍâµÄÀàÐÍʵ¼ÊÉϾÍÊÇhandleÀàÐ͵Ä×ÓÀàÐÍ, ÕâЩ±äÁ¿¾ÍÊÇÓû§ÀàÐͱäÁ¿, ʵ¼Ê¾ÍÊÇÒ»¸öÊý¾Ý½á¹¹µÄÖ¸Õë.
Êý×é
ÊÇÖ¸Ò»×éͬÀàÐ͵ÄÓÐÐòÁеıäÁ¿. Êý×éÖаüº¬µÄÔªËØ¿ÉÒÔÓÃ[n]À´Ö¸Ã÷(n ±íʾµÚn + 1¸öÔªËØ, ´Ó 0 ËãÆð).
ÒÔÉÏËù˵µÄ±äÁ¿ÀàÐÍÖгýÁËcodeÀàÐÍ, ÆäËûÀàÐ͵ıäÁ¿¶¼¿ÉÒÔ¶¨ÒåÊý×é±äÁ¿, Èç
locate integer array dropitems
set dropitems[0] = 'Xxxx'
......
set dropitems[18] = 'Xbbb'
dropitems[18]Ö¸dropitemsÖеÚ19¸ö±äÁ¿.
×¢Òâ:
1) Êý×éËùÓÐÔªËØ³õʼֵÊÇ"¿Õ", ±ÈÈçintegerÀàÐ͵ÄÊý×é³õʼֵΪ0, handleÀàÐͳõʼֵµÄΪnull
2) Êý×é²»ÄÜÖ±½ÓÔٴγõʼ»¯, Ö»ÄÜÊý×é°´ÔªËØ¸³Öµ, Èç:
locate string array playername = "Greedwind" //Êý×é·Ç·¨¸³Öµ
locate string array playername      //Êý×éÔªËØÖ»ÄÜÖð¸ö¸³Öµ
set playername[1] = "Greedwind"
set playername[2] = "Greedwind's girlfriend"
     unit array myUnits
     unit array yourUnits
...
     set myUnits = yourUnits         // ·Ç·¨
     set myUnits[0] = yourUnits[10]  // ºÏ·¨
3) Êý×éÔÚº¯Êý¼ä²»ÄÜ»¥Ïà´«µÝ. ¼´ÊDz»ÄܰÑÊý×é×÷Ϊº¯Êý²ÎÊý, ¶øÇÒº¯ÊýÒ²²»ÄÜ·µ»ØÊý×éÀàÐ͵ıäÁ¿.
4) Êý×éÔªËØÓòÔÚ 0 ºÍJASS_MAX_ARRAY_SIZE = 8192 Ö®¼ä, ¼´ÊÇ×î¶àÓÐJASS_MAX_ARRAY_SIZE + 1 ¸öÔªËØ. JASS_MAX_ARRAY_SIZEÊÇÔÚcommon.jÖж¨ÒåµÄ³£Êý

³£¼ûÎÊÌâ
1)ʲôÊÇÈ«¾Ö±äÁ¿ºÍ¾Ö²¿±äÁ¿, ÔõÑùÉùÃ÷ºÍʹÓñäÁ¿?
Ê×ÏÈÒªÁ˽â, ´Ó×÷Ó÷¶Î§À´Çø·Ö, ±äÁ¿ÓÐÈ«¾Ö±äÁ¿ºÍ¾Ö²¿±äÁ¿.
È«¾Ö±äÁ¿×÷ÓÃÓÚJass³ÌÐòµÄÈ«²¿·Ö, ¼´ÊÇÈç¹ûÈ«¾Ö±äÁ¿abcÔÚij¸öº¯ÊýÖиıäÁËÖµ, Õâ¸öÖµÒ²½«Ó°ÏìÆäËûÒýÓÃÁËabc±äÁ¿µÄº¯Êý.
È«¾Ö±äÁ¿ÉùÃ÷¸ñʽ:
    globals
         ±äÁ¿ÀàÐÍ ±äÁ¿Ãû³Æ = ³õʼֵ         //Óгõʼ»¯µÄÈ«¾Ö±äÁ¿
         ±äÁ¿ÀàÐÍ ±äÁ¿Ãû³Æ                  //ÎÞ³õʼ»¯µÄÈ«¾Ö±äÁ¿
         ±äÁ¿ÀàÐÍ  array ±äÁ¿Ãû³Æ           //Êý×éÈ«¾Ö±äÁ¿, ²»ÄÜÔٴγõʼ»¯¸³Öµ
         ...
    endglobals
¾Ö²¿±äÁ¿Ö»×÷ÓÃÓÚº¯ÊýÄÚ²¿, ¼´ÊÇÈç¹ûÔÚº¯ÊýÄÚ²¿¶¨ÒåÁ˾ֲ¿±äÁ¿abc, abcµÄÖµÖ»Ó°Ïì¸Ãº¯ÊýÄÚ²¿, ²»Ó°ÏìÈ«¾Ö±äÁ¿abcµÄÖµ.
¾Ö²¿±äÁ¿ÉùÃ÷¸ñʽ:
    local ±äÁ¿ÀàÐÍ ±äÁ¿Ãû³Æ = ³õʼֵ        //Óгõʼ»¯µÄ¾Ö²¿±äÁ¿
    local ±äÁ¿ÀàÐÍ ±äÁ¿Ãû³Æ                 //ÎÞ³õʼ»¯µÄ¾Ö²¿±äÁ¿
    local ±äÁ¿ÀàÐÍ array ±äÁ¿Ãû³Æ           //Êý×é¾Ö²¿±äÁ¿, ²»ÄÜÔٴγõʼ»¯¸³Öµ
   
×¢Òâ:
1) ²»ÂÛÊÇÈ«¾Ö±äÁ¿»¹ÊǾֲ¿±äÁ¿, ±ØÐëÔÚ³ÌÐò¿ªÊ¼²¿·ÖÊ×ÏÈÉùÃ÷.
    ¼´ÊÇÈ«¾Ö±äÁ¿ÉùÃ÷×ÜÊÇÔÚ³ÌÐòÎļþµÄ×îǰ¶Ë,
    ¶ø¾Ö²¿±äÁ¿ÉùÃ÷×ÜÊÇÔÚº¯ÊýµÄ×îÇ°Ãæ.
2) ÔÚTrigger EditorÓñäÁ¿¹ÜÀíÆ÷(Ctrl + B)Öж¨ÒåµÄ±äÁ¿¶¼ÊÇÈ«¾Ö±äÁ¿
3) ÔÚTrigger EditorµÄÑ­»·GUIÓï¾ä For Loop (Integer A)ºÍFor Loop (Integer B)ÖеÄ(Integer A)(Integer B)¶¼ÊÇÈ«¾Ö±äÁ¿
ʵÀý:
globals
    integer abc = 5188
endglobals
.......
function myfunc1 takes nothing returns nothing
    local integer abc
    set abc = 1233
endfunction
function myfunc1 takes nothing returns nothing
    local integer myint
    set myint = abc
    set abc = 0
endfunction
Èç¹û°´Ë³Ðòµ÷Óú¯Êýmyfunc1 ºÍ myfunc1, ÄÇôÔÚº¯Êýmyfunc2ÖеÄmyintµÄÖµÊǶàÉÙÄØ, abc×îÖÕÖµÓÖÊǶàÉÙ?
´ð°¸ÊÇ: int = 5188, abc ×îÖÕֵΪ 0


2)ÔõÑùÔÚTrigger Editor(GUI)ÖÐʹÓþֲ¿±äÁ¿?
(ÓйØÔÚTrigger Editor(GUI)ÖÐʹÓþֲ¿±äÁ¿Ïêϸ·½·¨Çë²Î¿´ÎÒµÄÇ©ÃûÖеÄÁ´½Ó - 3cµÄÄÚ´æÐ¹Â©)
GUIÖв»ÄÜÖ±½ÓÒýÓþֲ¿±äÁ¿£¬µ«ÊÇÎÒÃÇ¿ÉÒÔʹÓÃÈ«¾Ö±äÁ¿×÷ΪÖнé

Ê×ÏÈÉùÃ÷¶¨Òå±äÁ¿ÀàÐÍ¡£ÉùÃ÷¶¨Òå±äÁ¿ÀàÐ͵ÄÓï¾äÖ»ÄÜ·ÅÔÚTIGGERµÄ¿ªÍ·£¬²»È»»á³öÏÖ±àÒë´íÎó
ÉùÃ÷¶¨Òå±äÁ¿ÀàÐÍ£º
ÒªÓãºCustom Script - Action
Óï·¨£º
Custom Script: local <±äÁ¿ÀàÐÍ> <±äÁ¿Ãû>

±äÁ¿ÀàÐÍÇë²Î¿´WORLD EDITORºÍJASS±äÁ¿ÀàÐͶÔÓ¦±í
ÀýÈ磺
--µ¥Î»±äÁ¿
Custom Script: local unit u
--µ¥Î»×é±äÁ¿         
Custom Script: local group g  

È»ºó½«ËüÃǸ³Öµ¸øÁÙʱȫ¾Ö±äÁ¿¾Í¿ÉÒÔÔÚGUIÀïµ÷ÓøÃÖµÁË,×¢ÒâÈ«¾Ö±äÁ¿Òª¼Óǰ׺"udg_"
Custom Script: set udg_TempUnit=u

¾Ö²¿±äÁ¿µÄʹÓãº
ÔÚ±äÁ¿±í(Control + B)ÖÐÏȶ¨ÒåºÃͬÀàÐÍÁÙʱ±äÁ¿£¨²»Òª¼Óǰ׺udg_£©µÄ±äÁ¿£¬¸Ã±äÁ¿¿ÉÒÔÔÚ¶à¸ö´¥·¢ÀïÖØ¸´ÀûÓÃ
£¨ÔÚ±äÁ¿±íÖж¨Òå´Ë±äÁ¿ÊÇΪÁË·½±ãTIGGER EDITORÒýÓøñäÁ¿¡££©
ÒÔÏÂÀý×ÓʵÏÖÁËÔÚµ¥Î»ËÀÍöµÄλÖÃÏÔʾ5ÃëµÄËÀÍöÐÅÏ¢£¨Æ¯¸¡ÎÄ×Ö)
(ÏóÕâÖÖÀý×Ó, Èç¹û²»Ê¹ÓÃÓþֲ¿±äÁ¿, ½«ÎÞ·¨×¼È·Ïú»ÙÁÙʱƯ¸¡ÎÄ×Ö(-Destroy (diesmessage)). ÒòΪÔڵȴý5Ãëºó(-Wait 5.00 seconds), ×î½ü´´½¨µÄƯ¸¡ÎÄ×Ö(last created floating text)¿ÉÄÜÒѾ­²»ÊÇÔ­À´µÄÄǸöÁË )
Àý×Ó£º
Events:
    A unit dies
Conditions:
Actions:
        -Custom Script: local texttag diesmessage
        -Custom Script: set udg_TempTextTag = diesmessage    //×¢ÒâÒªÌí¼Ó"udg_"ǰ׺
        -Floating Text - Create floating text at ((position of (Triggering Unit))
         with the message ((A+(name of (Triggering Unit))) + "dies") with size 20 , red 100, green 100, blue 0, alpha 100.
        -Set TempTextTag= (last created floating text)
        -Wait 5.00 seconds
        -Custom Script: set udg_TempTextTag = diesmessage
        -Destroy (TempTextTag)

×¢Ò⣺²»ÒªÀûÓÃͬÃû¸²¸ÇµÄ·½·¨ÔÚGUIÖÐʹÓþֲ¿±äÁ¿£¡(¼´ÒÔudg_¿ªÍ·µÄ¾Ö²¿±äÁ¿ÓëÒѶ¨ÒåÈ«¾Ö±äÁ¿Ãû×ÖÏàͬ)
¸Ã·½·¨ÔÚ´¥·¢ÄÚ¸ÃÀàͬÃû±äÁ¿ÊýÁ¿>=2ʱ»á³öÏÖÑÏÖØBug!

Jass»ù´¡½Ì³Ì µÚ¶þÕ Ó﷨ƪ

¡¡
±¾ÕÂÖ÷Òª½éÉÜJassµÄÓï¾äºÍÓï·¨.
ËùÓгÌÐòÓïÑÔ¶¼ÊÇÓÉÌØ¶¨µÄÓï¾ä°´Óï·¨¹æÔò×é³É, »ù±¾ºÍÈËÀàµÄ×ÔÈ»ÓïÑÔûʲôÁ½Ñù. Ö»ÊdzÌÐòÓïÑÔÒªÓÐÑϽ÷µÄÂß¼­ºÍÓï·¨, ¶øÈËÀàµÄÓïÑÔ¿ÉÒÔÊÇÄ£ºý²»Çå²»ÖªËùÔÆµÄ--¾ÍÏóÎÒÏÖÔÚдµÄ¿ÉÒÔÀëÌâǧÀïÈ´Ô̺­ìø»ú, ÈÃÄã·Ñ½âÒ»Ñù.
1) ¸³ÖµÓï¾ä: set
   ÔÚµÚÒ»ÕÂÖÐÎÒÃÇÒѾ­½Ó´¥¹ýºÜ¶à set Óï¾äÁË, ¾ÍÊÇ°Ñ = ºÅÓұߵÄÖµ¸³¸ö×ó±ßµÄ±äÁ¿
    Óï·¨¸ñʽ:
   
         set ±äÁ¿ = Öµ(±í´ïʽ)              // (A)
         set Êý×é±äÁ¿[index] = Öµ(±í´ïʽ)   // (B)
    (A)ÊÇ·ÇÊý×é±äÁ¿µÄ¸³ÖµÓï¾ä.
    (B)Êý×é±äÁ¿µÄ¸³ÖµÓï¾ä, ÆäÖÐ[]ÖеÄindexÊÇÖ¸µÚindex + 1¸öÊý×éÔªËØ, index±ØÐëÊÇintegerÀàÐ͵ķǸºÕûÊý(¿ÉÒÔÊÇ 0 )
   
    Óұ߱í´ïʽµÄÊý¾ÝÀàÐͱØÐëºÍ×ó±ßµÄ±äÁ¿ÀàÐÍÒ»ÖÂ, Òâ˼ÊÇ˵²»ÄÜÕâÑù:¡¡set ÈËÀà = Öí
   
2) µ÷Óú¯Êý: call
   ÓÃÓÚµ÷Óú¯Êý. µ±Ê¹Óà call MyFunction(), ÔòÔËÐÐÁ˺¯ÊýMyFunction
    Óï·¨¸ñʽ:
     
  call º¯ÊýÃû(²ÎÊý1, ²ÎÊý2, ...., ²ÎÊýn)
   
    ()ºÅÄڵĵÄÓöººÅ(,)·Ö¸î¿ªµÄ²ÎÊý±í. Èç¹û±»µ÷Óõĺ¯ÊýÒªÇóÊäÈë²ÎÊý, Ôò call Óï¾äÖбØÐë°üº¬±»µ÷Óú¯ÊýÒªÇóÊäÈë²ÎÊýÀàÐÍÏàͬÊý¾ÝÀàÐÍ»òÓÿÕÖµ.
    Õâ¾äÁíÈ˷ѽâµÄ»°ÓÃÈËÀàµÄÄ£ºýÓïÑÔÀ´Ëµ¾ÍÊÇ:
        ÎÒ(±»µ÷Óõĺ¯Êý)Òª°®Çé(²ÎÊý)²Å¿ÉÒÔ¹¤×÷, Äã(call ¹ý³Ì)¾Í²»Òª¸øÎÒÃæ°ü(´«µÝµÄ²ÎÊý)
    Õâ¸öÊÇÓÃJassдµÄÒª°®ÇéºÍÃæ°üµ«Ê²Ã´Ò²²»×ö¶øÇÒ»¹²»¸ßÐ˵Ŀպ¯Êý:
    function isHappy takes unit whichunit, item needbread returns boolean
        return false    //º¯Êý·µ»ØÖµÎª"¼Ù"
    endfunction
    Õâ¸öÊÇÓÃJassдµÄ×ÜÊǸßÐËɵЦµÄ¿Õº¯Êý:
    function IamAlwaysHappy takes nothing returns boolean
        return true //º¯Êý·µ»ØÖµÎª(Õæ)
    endfunction
   
    ÔÚº¯ÊýÖÐisHappy()ÒªÇó´«µÝ2¸ö²ÎÊý, ²ÎÊýÊý¾ÝÀàÐÍ·Ö±ðÊÇunitºÍitem
    ¶øº¯ÊýIamAlwaysHappy()ûÓÐÒªÇó´«µÝÈκβÎÊý, ¾Í²»Òª¶à´ËÒ»¾Ù¸øËü°®ÇéºÍÃæ°üÁË
   
    ¼ÙÉègirlÊÇunitÀàÐͱäÁ¿, breadÊÇitemÀàÐͱäÁ¿. ÎÒÃÇ¿ÉÕâÑùµ÷ÓÃ:
    call isHappy(girl, bread)   //¸øÁ˰®ÇéÓÖ¸øÃæ°ü, ÕæÊÇÌùÐÄÈ˰¡
    call isHappy(null, bread)   //²»¸ø°®ÇéÖ»¸øÃæ°ü, ²»Òª¶öËÀËû
    call isHappy(girl, null)    //¸ø°®Çé²»¸øÃæ°ü, ΪÁ˰®Çé¹Ê, ÎÒ°ÑÃæ°üÅ×
    call isHappy(null, null)    //Á½Õß½Ô²»¸ø, ·´Õý¸øÁËÒ²·µ»Ø"¼Ù"Öµ
    call IamAlwaysHappy()       //IamAlwaysHappy()ûÓÐÒªÇóÈκβÎÊý
   
    //°ÑPickaGirl()·µ»ØµÄÖµ(unitÀàÐÍ»ònull)×÷Ϊ²ÎÊý
    call isHappy(PickaGirl(), null)

    ÒÔÏ·Ƿ¨µ÷ÓÃ
    call isHappy()              //·Ç·¨µ÷ÓÃ
    call isHappy(girl)          //·Ç·¨µ÷ÓÃ
    call IamAlwaysHappy(girl)   //·Ç·¨°®Çé(²»Òª¸øÎÒ¶þÄÌ)
3) Ìõ¼þ·ÖÖ§: if then else
  
  ´ËÓï¾äЧ¹û¾ÍÊÇ: Èç¹ûÌõ¼þ³ÉÁ¢, ÄÇô×öijÊÂ, ·ñÔò×öÁíÒ»¼þÊÂ
    Óï·¨¸ñʽ:
            if Ìõ¼þ±í´ïʽ1 then
                Óï¾ä
                    Óï¾ä
              ...
             elseif Ìõ¼þ±í´ïʽ2 then
                Óï¾ä
                    Óï¾ä
              ...
             elseif Ìõ¼þ±í´ïʽ3 then
             ...
             else
                Óï¾ä
                    Óï¾ä
              ...
             endif
   
    ÆäÖÐÌõ¼þ±í´ïʽ±ØÐëÊDz¼¶ûÐÍ(boolean)µÄÖµ(ÕætrueºÍ¼Ùfalse).
   
    ÕâÊÇijÈ˵ÄÂÛ̳ǩÃûJASS°æ, ËûÆóÅÎ×ŵ±Ëû½øÈëÂÛ̳ʱ¾Í....
    ʼþ:µ¥Î»½øÈëÂÛ̳ʱ
    if GetTriggerUnit() == Ëû then
        call CreateNUnitsAtLoc( 1, GetUnitTypeId(ÃÀÅ®),
                GetOwningPlayer(GetTriggerUnit()),
                GetUnitLoc(GetTriggeringUnit()), bj_UNIT_FACING )
    else
    endif
   
4) Ñ­»·Óï¾ä loop ºÍÑ­»·Í˳öÓï¾ä exitwhen
    loop ÊÇÖ´ÐÐÑ­»·µÄÓï¾ä, exitwhen ÔòÊÇ¿ØÖÆÑ­»·Í˳öµÄÌõ¼þ
    Óï·¨¸ñʽ:
    loop
        exitwhen Ìõ¼þ±í´ïʽ //(A)ÔÚÑ­»·Óï¾äÖ´ÐÐǰ¼ì²éÑ­»·Ìõ¼þ
        ....   
    endloop
    »ò
    loop
        ....   
        exitwhen Ìõ¼þ±í´ïʽ //(B)ÔÚÑ­»·Óï¾äÖ´Ðкó¼ì²éÑ­»·Ìõ¼þ
    endloop
    ͬÑùµÄ, Ìõ¼þ±í´ïʽ±ØÐë²¼¶ûÐ͵ÄÖµ
   
    (A)ºÍ(B)µÄ²î±ðÏ൱ÓÚÏÈÂòƱÔÙºïÏ·ºÍ¿´ÍæºïÏ·ÔÙ½oÇ®
   
    loop Óï¾ä¿ÉÒÔ²»ÓÃexitwhen. ÔÚûÓÐexitwhenºÍreturnÓï¾äµÄÇé¿öÏÂ, loop ... endloop½«³ÉΪÓÀ¾ÃÑ­»·(Ò²³ÆËÀÑ­»·), Ò»°ãÓ¦¸Ã±ÜÃâËÀÑ­»·µÄ²úÉú.
   
    Àý:
   
    ÔÚTrigger EditorµÄGUIÓï¾äÓÐ: For Loop (Integer A) µÄÓï¾ä, Èç
   
    For each (Integer A) from 1 to 10, do (Set unit_temp[(Integer A)] = ¿ÖÁú)
   
    ת»¯³ÉJass¾ÍÊÇ:
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 10
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        set udg_unit_temp[bj_forLoopAIndex] = 'A001'
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop

5) º¯Êý·µ»ØÓï¾ä: return
    µ±Ö´Ðе½ return Óï¾äʱ, Í˳ö´Ëº¯Êý, ³ÌÐòÔËÐе㽫·µ»Øµ½¸Ãº¯ÊýµÄµ÷Óõã.
    Óï·¨¸ñʽ:
   
    return              //(A)
    »ò
    return ±í´ïʽ       //(B)
   
    Èç¹ûº¯ÊýÉùÃ÷ÖÐûҪÇó·µ»ØÖµ, ÔòÓÃ(A), Èç:
        function Iwanteverthing takes unit whichunit returns nothing
            return  //ÉÏÃæº¯Êý¶¨ÒåÖÐΪreturns nothing, ¼´ÊÇûҪÇó·µ»ØÖµ
        endfunction
    Èç¹ûº¯ÊýÉùÃ÷ÖÐÒªÇó·µ»ØÖµ, ÔòÓÃ(B). ×¢Òâ, ·µ»ØÖµÀàÐͱØÐëºÍº¯ÊýÉùÃ÷ÖÐÒªÇó·µ»ØÖµÀàÐÍÒ»ÖÂ.¼´ÊÇÉùÃ÷ÖÐÒªÇó·µ»ØÃÀÅ®, Ö´Ðк¯Êýºó¾Í²»ÄÜ·µ»Ø¿ÖÁú.
        function IamAlwaysHappy takes nothing returns boolean
            return true //º¯Êý¶¨ÒåÒªÇ󷵻ز¼¶ûÐ͵ÄÖµ
        endfunction

³£¼ûÎÊÌâ
1) ±¾½Ì³ÌµÄ±í´ïʽÊÇָʲô?
    ±í´ïʽ¿ÉÒÔÊÇÖ±¹Û¿É¼ûµÄÖµ, Èç:
        ÊýÖµÐÍ/ÕæÖµÐÍ:  1, 3, 5565.33, ........
        ×Ö·û´®: "Xasfsfs", "Greedwind", ........
        ²¼¶ûÐÍ: true, false
        µ¥Î»: 'A001', 'Obla', ....
        ........
    Ò²¿ÉÒÔÊǺ¯Êý, ¼ÆËãʽµÈ, Èç
        return GetTriggeringUnit()  //·µ»Ø´¥·¢µ¥Î»
        
        //½«´¥·¢µ¥Î»ËùÔڵ㸳ֵ½oudg_loc
        set udg_loc = GetUnitLoc(GetTriggeringUnit())
        
        return a + b    //·µ»Ø a + b µÄÖµ

2) Jass ÓÐÄÇЩ²Ù×÷·û?
    Êýѧ¼ÆËã:
        +       ¼Ó
        -       ¼õ
        *       ³Ë
        /       ³ý
        
    ±È½Ï·ûºÅ:
        >, <, >=, <=        ·Ö±ðÊÇ´óÓÚ,СÓÚ, ´óÓÚµÈÓÚ, СÓÚµÈÓÚ
        ==                  µÈÓÚ
        !=                  ²»µÈÓÚ
        
        ×¢Òâ: Ë«=ºÅ(==)²ÅÊDZȽÏ, µ¥=ºÅÊǸ³Öµ, ²»Òª¸ã´íÁË!!!
    ²¼¶ûÌõ¼þ
        and         Ìõ¼þºÍ
        or          Ìõ¼þ»ò
        not         ·ñ¶¨Ìõ¼þ
        
        Ê¹ÓÃ:
        //Ìõ¼þ±í´ïʽ1ºÍ2¶¼ÊÇtrue, ÔòÏÂʽΪtrue, ·ñÔòÏÂʽΪfalse
        Ìõ¼þ±í´ïʽ1 and Ìõ¼þ±í´ïʽ2     
        //ÔÚÌõ¼þ±í´ïʽ1»ò2ÖÐÖ»ÒªÓÐÒ»¸öÊÇtrue, ÔòÏÂʽΪtrue
        Ìõ¼þ±í´ïʽ1 or Ìõ¼þ±í´ïʽ2
        //²»ÊDZí´ïʽµÄÖµ, Èç return (not true)Ôò·µ»Øfalse
        not ±í´ïʽ
    ×Ö·û´®²Ù×÷·û
        +           ×Ö·û´®µþ¼Ó, Èç"Greed" + "wind"µÄ½á¹û"Greedwind"
3) JassÀﻹÓÐÊ²Ã´ÌØÊâÓÃ;µÄ×Ö·ûºÍ×Ö´®?
    //      ×¢ÊÍ, ÒÔ //¿ªÍ·µÄÓï¾ä½«²»Ö´ÐÐ
    ()      º¯Êý²ÎÊýÁбí, Èç call myfunction()
    []      Êý×éÔªËØ±ê¼Ç, Èç myarray[0]
    ""      ×Ö·û´®ÒýÓ÷û, Èç "I love Greedwind"
    ''      µ¥Î»/ÎïÆ·/¼¼ÄÜ´úÂëÒýÓ÷ûºÅ, Èç 'A001', 'Hpal'
            ×¢Òâ: JassÖпÉÒÔÓõ¥ÒýºÅÀ¨Æð4¸ö×Öĸ±íʾÊýÖµÐ͵ÄÖµ(integer)
    \       ÌøÍÑ·ûºÅ(ÓëJava/CÒ»Ñù),
            Èç: ÔÚ×Ö·û´®ÀïʹÓÃË«ÒýºÅ set mystring = "This is a \"string\""
            mystring µÄֵʵ¼ÊÉÏÊÇ: This is a "string"
            Èç¹ûÖ±½Ó set mystring = "This is a "string"" ½«³ö´í
            ÒòΪ""ÊÇ×Ö·û´®ÒýÓ÷û
    0       ÓÃÓÚÊý×ÖÇ°Ãæ, Ôò±íʾ°Ë½øÖƵÄÊý, Èç 016
    0x      ÓÃÓÚÊý×ÖÇ°Ãæ, Ôò±íʾʮÁù½øÖƵÄÊý, Èç 0x1FA0

Jass»ù´¡½Ì³Ì µÚÈýÕ º¯Êýƪ

¡¡
Èç¹ûÄã×Ðϸ¶ÁÍê²¢¶Á¶®Ç°ÃæÁ½ÕÂ, Ó¦¸Ã¶ÔJassº¯Êý²¢²»Ä°ÉúÁË. Ò²ÐíÎÒÔÚǰÁ½ÕÂдµÄÌ«¹ý×ۺϽô´Õ, ËùÒÔдµ½Õâ¾õµÃûʲôºÃдÁË. ²»¹ÜÔõÑù, »¹ÊÇÐèÒª½øÒ»²½ÉîÈëÁ˽âJassº¯Êý¹æ·¶ºÍ×¢ÒâÊÂÏî.

×¢Òâ, ÔÚ´ËÕÂÖв»ÊǽÌÄ㶯ÊÖдJassº¯Êý, ¶øÊÇÈÃÄã»ù±¾¿ÉÒÔ¶Á¶®±ðÈËдµÄJass½Å±¾-->Èç¹ûÄãÓ¢ÎÄ×ã¹»ºÃ¶øÇÒ²»Éµ(ÕâÊÇJassÖв¼¶û²¢Á¢Ìõ¼þ, ÉÏÒ»ÕÂÌáµ½¹ý).
¿ÉÒÔÔÚTrigger EditorÖаÑһЩ¼òµ¥µÄ´¥·¢Æ÷(Trigger)ת»¯³É×Ô¶¨Òå½Å±¾, ÒòΪÊÂÏÈÖªµÀ³ÌÐòÂß¼­, ÕâÑù¶ÁÆðÀ´Ò²±È½ÏÈÝÒ×.

1)º¯Êý¶¨ÒåÒªËØ
   
Óï·¨¸ñʽ
   
        function º¯ÊýÃû takes ²ÎÊý±í returns ·µ»ØÀàÐÍ
            ¾Ö²¿±äÁ¿ÉùÃ÷
            ¾Ö²¿±äÁ¿ÉùÃ÷
             ...
             ±í´ïʽ
             ±í´ïʽ
             ±í´ïʽ
             ...
             return ·µ»Ø±í´ïʽ
        endfunction
   
ÆäÖÐ:
       a) ¶¨Ò庯ÊýµÄ¹Ø¼ü×ÖÓÐ: function ... endfunction, takes, returns
        b) º¯ÊýÃûµÄÊ׸ö×Öĸ²»ÄÜÊÇÊý×Ö, º¯ÊýÃûÖв»ÄÜÓеÚ2ÕÂÖÐËù˵µÄ²Ù×÷·û, ÌØÊâ×Ö·ûºÍ¶àÊý·Ç×Öĸ·ûºÅ(Èç: ¿Õ¸ñ~`!@#$%^&*()-+=|\{}[];:'"<>?,./), Ò²²»ÄÜʹÓÃÖÐÎÄ. º¯ÊýÃüÃûÒª¾¡Á¿¼òÃ÷Ò×¶®, Í»³öº¯Êý¹¦ÄÜ.
        c) ²ÎÊý±íÊǹ涨´«µÝÈ뺯ÊýµÄÊý¾ÝÀàÐͺͲÎÊýÊýÁ¿, ×÷ÓÃÊǺ¯Êý¼äµÄÊý¾Ý½»»»(ÊäÈë), ²ÎÊýÖ®¼äÓöººÅ( , )·Ö¿ª. ²»Äܶ¨ÒåÊý×é×÷Ϊ²ÎÊý, ÕâµãÔڵĵÚÒ»ÕÂÒѾ­×öÁË˵Ã÷.
           ²ÎÊý±ØÐë¹æ¶¨Êý¾ÝÀàÐÍ»òÕßÊÇÎÞ²ÎÊý, Èç
                function myfunction1 takes nothing returns nothing
                endfunction
               
                function myfunction2 takes integer creatnum, unit myunit returns boolean
                    call CreateNUnitsAtLoc(creatnum, GetUnitTypeId(myunit), Player(1),
                         GetUnitLoc(GetTriggeringUnit()), bj_UNIT_FACING )
                    return true
                endfunction
            myfunction1ΪÎÞ²ÎÊýµÄº¯Êý, µ÷ÓÃʱ²»ÐèÒª´«µÝ²ÎÊý, ¼´ÊÇÓà call myfunction1()
            myfunction1Ϊ2²ÎÊýº¯Êý, ²ÎÊýÀàÐ͹涨Ϊ integer ºÍ unit. µ÷ÓÃmyfunction2ʱ±ØÐëͬʱ´«µÝÊý¾ÝÀàÐÍ·Ö±ðintegerºÍunitµÄ²ÎÊý, »òÕß´«µÝÈë¿ÕÖµ(²Î¿´µÚ¶þÕµľÙÀý).
            ×¢Òâ: Êý×ֵĿÕֵΪ 0, handle(¾ä±ú)ÀàÐͼ°Æä×ÓÀà±ðµÄ¿ÕֵΪ null. ¹ØÓÚhandleÀàÐÍÇë²Î¿´µÚÒ»ÕÂ. ÎÒÔÚ±¾Õ±³ºó»áÁгö¸÷Êý¾ÝÀàÐÍËù¶ÔÓ¦µÄ¿ÕÖµ.
        d) ·µ»ØÀàÐÍÊǹ涨º¯Êý·µ»ØµÄÊý¾ÝÀàÐÍ, ×÷ÓÃͬÑùÊǺ¯Êý¼äµÄÊý¾Ý½»»»(Êä³ö), ¿ÉÒÔÓÃreturns nothing ˵Ã÷ûÓзµ»Ø²ÎÊý
        e) ¾Ö²¿±äÁ¿ÉùÃ÷±ØÐëдÔÚº¯Êý¿ªÊ¼²¿·Ö. Jass×ÜÊÇÏÈÉùÃ÷, ÔÙʹÓÃ. Èç:
                function myfunction3 takes nothing returns nothing
                    local integer i = 5
                    local integer j = 10
                    call myfunction2(i,ÃÀÅ® )
                    sleep(360)
                    call myfunction2(j,ÃÀÅ® )
                endfunction
         
  ÏÂÃæµÄº¯ÊýÊÇ´íÎóµÄ:
                function myfunction3 takes nothing returns nothing
                    local integer i = 5
                    call myfunction2(i,ÃÀÅ® )
                    local integer j = 10
                    sleep(360)
                    call myfunction2(j,ÃÀÅ® )
                endfunction
     
   f) ±í´ïʽÊǺ¯ÊýµÄ¹Ç¸É, ÊÇÂß¼­µÄʵÏÖ²¿·Ö. дºÃÕⲿ·Ö, ÐèÒª¶Ôcommon.j, blizzar.j,commond.aiÓÐÒ»¶¨µÄÁ˽â.
        g) ·µ»Ø±í´ïʽµÄÖµ±ØÐëºÍ¸Ãº¯ÊýÉùÃ÷ʱµÄ·µ»ØÀàÐÍÒ»ÖÂ, ²»ÒªÉùÃ÷·µ»ØÎª¿ÖÁúÀàÐÍ, ȴ͵Áº»»Öù·µ»Ø¸öÃÀÅ®. ·µ»ØÖµ²»ÄÜÊÇÊý×é.
2) ³ÌÐòÖ´ÐÐÈë¿Úº¯Êý
    ÿ¸öJass½Å±¾Îļþ¶¼ÐèÒª¶¨ÒåÖ´ÐгÌÐòµÄÈë¿Úº¯Êý
    ÔÚ´¥·¢Æ÷½Å±¾Îļþwar3map.jÖÐ, config()ºÍmain()ÊÇÈë¿Úº¯Êý.
    config()º¯Êý×÷ÓÃÊÇÔÚ¿ªÊ¼ÓÎϷ֮ǰ³õʼ»¯µØÍ¼, Èç°´Éè¼ÆÊ±Ö¸¶¨µã·ÅÖõ¥Î»/¿ÉÆÆ»µÎï,³õʼ»¯µ¥Î»×´Ì¬µÈ.
    main()º¯ÊýÔÚÓÎÏ·¿ªÊ¼²ÅÖ´ÐÐ.
    ÔÚAI½Å±¾ÎļþÖÐ, Óû§Ðè×Ô¶¨Òåmain()º¯Êý×÷Ϊ¸Ã½Å±¾ÎļþµÄ³ÌÐòÈë¿Ú.
    ½Å±¾ÎļþÖ´ÐÐÈë¿Úº¯ÊýµÄ¹Ì¶¨¸ñʽ:
        function main takes nothing returns nothing     //´¥·¢Æ÷ºÍAI½Å±¾¾ùʹÓÃ
        function config takes nothing returns nothing   //´¥·¢Æ÷½Å±¾Ê¹ÓÃ
    ×¢Òâ: Ò»ÕŵØÍ¼ÖÐÖ»ÄÜÓÐ1¸ö´¥·¢Æ÷½Å±¾Îļþwar3map.j, ´ËÎļþ°üº¬ÔÚw3m»òw3xÖÐ
          Ò»ÕŵØÍ¼ÖпÉÒÔ°üº¬¶à¸öAI½Å±¾Îļþ, ÊäÈëAI½Å±¾ÎļþµÄĿ¼Ϊ: \scripts\

³£¼ûÎÊÌâ
1) ʲôÊÇ¿ÕÖµ? ²»Í¬Êý¾ÝÀàÐ͵ĿÕÖµÊÇʲô?
    µ±±äÁ¿ÉùÃ÷ʱ, Èç¹ûÔÚÉùÃ÷Óï¾äÖв»Ö±½Ó¸³Öµ, Ôò¸Ã±äÁ¿µÄ³õʼ»¯ÖµÎª¿ÕÖµ, ±íʾûÓи³Öµ. Èç:
        local unit myunit
    ÔÚÉϾäÉùÃ÷ÖÐ, myunitûÓÐÖ±½Ó¸³Öµ, ÄÇômyunitÔÚÉùÃ÷ºóÖµÊÇnull
   
    ÒÔÏÂÊÇÊý¾ÝÀàÐ͵ĿÕÖµ¶ÔÓ¦±í

WORLD EDITORºÍJASS±äÁ¿ÀàÐͶÔÕÕ±í£º

World Editor
±äÁ¿Ãû
Jass±äÁ¿ÀàÐÍ¿ÕÖµ
Boolean boolean ²¼¶ûÐÍ(ÓÃÓÚÕæ/¼ÙÅжÏ)false
Destructible destructable ¿ÉÆÆ»µÎïnull
Dialog dialog ¶Ô»°null
Dialog Button button °´Å¥null
Floating Text texttag Ư¸¡ÎÄ×Önull
Integer integer ÊýÖµ0
Item item ÎïÆ·null
Leaderboard leaderboard ÅÅÐаñnull
Player player Íæ¼Ònull
Player Group force Íæ¼Ò×énull
Point location λÖÃ(µã)null
Real real ÕæÖµÐÍÊý×Önull
Region rect µØÇø0
Special Effect effect ÌØÐ§null
String string ×Ö·û´®null
Terrain Deformation terraindeformation µØÐÎnull
Timer timer ¼ÆÊ±Æ÷null
Timer Window timerdialog ¼ÆÊ±Æ÷´°¿Únull
Unit unit µ¥Î»null
Unit Group group µ¥Î»×énull
Player Score playerscore »ý·Ö(1.13°æÐÂÀàÐÍ)null




[ ±¾Ìû×îºóÓÉ ilovely ÓÚ 2007-12-31 17:23 ±à¼­ ]
±¾Ìû×î½üÆÀ·Ö¼Ç¼
  • feelerly Á¦Á¿ +50 ¾«Æ·ÎÄÕ£¬¾¡ÌôЩ»ù´¡µÄÒªµãд¿©~~Ì«¶àÁË~ 2007-8-18 15:52
  • feelerly Ãô½Ý +50 ¾«Æ·ÎÄÕ£¬¾¡ÌôЩ»ù´¡µÄÒªµãд¿©~~Ì«¶àÁË~ 2007-8-18 15:52
  • feelerly ÖÇÁ¦ +50 ¾«Æ·ÎÄÕ£¬¾¡ÌôЩ»ù´¡µÄÒªµãд¿©~~Ì«¶àÁË~ 2007-8-18 15:52
ÓÉÉϱí¿ÉÒÔ¿´³ö, ³ýÁËinteger, realµÄ¿ÕֵΪ 0 ºÍ boolean µÄ¿ÕֵΪfalseÒÔÍâ, ÆäËûÊý¾ÝÀàÐ͵ĿÕÖµ¶¼ÊÇnull. Ô­ÒòºÜ¼òµ¥: ³ýÁËinteger, real, booleanÍâ, ÆäËûÊý¾ÝÀàÐͶ¼ÊÇhandle(¾ä±ú)µÄ×ÓÀàÐÍ, handleÀàÐ͵ĿÕֵΪnull, ËüµÄ¶ù×ÓÃÇÒ²¸ú×Ånullµ½µ×ÁË.
2) ʲôÊÇcommon.j, Blizzard.j, common.ai?
    Õâ3¸öÎļþ¶¼ÊÇÖ§³ÖWar3 JassµÄ¹«¹²¿âÎļþ, ÎļþÀïÃæ°üº¬ºÍÉùÃ÷ÁËËùÓÐ(¼¸ºõÊÇËùÓÐ)Jass¿ÉÒÔµ÷Óõĺ¯ÊýºÍÈ«¾Ö±äÁ¿.
    common.j ÊÇ×î»ù´¡µÄAPI¿âÎļþ, ÔÚTrigger JassºÍAI JassÖж¼¿ÉÒÔµ÷ÓÃ.
    Blizzard.j °üº¬Ê¹ÓÃTrigger EditorʱÉú³ÉµÄTrigger JassÖо­³£µ÷ÓõĿ⺯Êý/È«¾Ö±äÁ¿, ʵ¼ÊÉÏÊÇ»ùÓÚcommon.jдµÄ×Óº¯Êý. Blizzard.jÖ»ÄÜÔÚTrigger JassÖе÷ÓÃ.
    common.ai Ö»ÄÜÔÚAI JassÖе÷ÓÃ, ËüÓÐAIÖÐÐèҪʹÓõĺ¯ÊýºÍÈ«¾Ö±äÁ¿.
    ×¢Òâ: ÔÚTrigger JassÖÐ, ²»Äܵ÷ÓÃcommon.aiÖеĺ¯ÊýºÍÈ«¾Ö±äÁ¿; ͬÑùµØ, ÔÚAI JassÖÐ, Ò²²»ÄÜʹÓÃBlizzard.jµÄº¯ÊýºÍÈ«¾Ö±äÁ¿.
   
3) ÈçºÎ»ñµÃ×îеÄcommon.j, Blizzard.j, common.ai?
    ÔÚwar3.mpq/war3x.mpq/war3patch.mpq¶¼ÓÐcommon.j/Blizzard.j/common.ai, Òª»ñµÃ×îа汾µÄÎļþ, ¿ÉÒÔÓÃWINMPQ´ò¿ªwar3patch.mpq, ÔÚWINMPQÓÒÉÏ·½µÄÊäÈë¿òÖÐÊäÈë: scripts\* ,Èç¹ûÄãµÄwar3patch.mpqûÓÐ"¼ÓÃÜ"¹ý, ÄÇô¿ÉÒÔÕÒµ½Õâ3¸öÎļþ. Èç¹ûÊÇ"¼ÓÃÜ"¹ýµÄ, ÔòÐèÒª°Ñwar3patch.mpqµÄÎļþÈ«²¿½âѹµ½ÁÙʱĿ¼, È»ºóÓÃUltra-EditÖеÄÔÚÎļþÖÐËÑË÷×Ö·ûµÄ¹¦ÄÜѰÕÒÕâ3¸öÎļþ.
   
4) ¿ÉÒÔÔÚ×Ô¼ºµÄµØÍ¼ÖÐʹÓÃ×Ô¶¨ÒåµÄcommon.j, Blizzard.j, common.aiÂð?
    ¿ÉÒÔ. ÓÃÊäÈë¹ÜÀíÆ÷ÊäÈë×Ô¶¨ÒåµÄcommon.j, Blizzard.j, common.ai, ÊäÈëĿ¼ӦΪ\scripts\. ÕâÑù, ÔËÐеØÍ¼ÖеĽű¾Ê±, War3¾Í²»»áµ½war3patch.mpqѰÕÒÕâ3¸öÎļþÁ˶øÖ±½Ó´ÓµØÍ¼ÖеÄ\scripts\Ŀ¼µ÷ÓÃ. ÕâÑù×öµÄºÃ´¦¾ÍÊÇ¿ÉÒÔʹ¿âÎļþµÄͬ²½Ò»ÖÂ. ͨ³£, °æ±¾ÏàͬµÄWAR3, Æä¿âÎļþÒ²Ïàͬ, ËùÒÔ¶àÊýʱºò²»ÐèÒªÔÚµØÍ¼ÖÐÊäÈëÕâ3¸öÎļþ. µ«Èç¹ûÄã¸ü¸ÄÁËÕâ3¸ö»ù±¾ÎļþÀ´Ö§³ÖÄãµÄJass, »òÕßÈ·±£ÎªÁË¿âÎļþµÄÒ»ÖÂÐÔ, ±ã¿ÉÒÔÔÚµØÍ¼ÖÐÊäÈë»ù´¡¿âÎļþ.
   
5) Ôõô½â¶Á¹«¹²¿âÎļþ(common.j, Blizzard.j, common.ai)µÄº¯Êý/È«¾Ö±äÁ¿?
    Blizzard¶Ôº¯Êý/È«¾Ö±äÁ¿µÄÃüÃûÊÇÏ൱¹æ·¶¼òÃ÷Ò×¶®µÄ(µ±È»ÐèÒªÒ»¶¨µÄÓ¢ÎÄ»ù´¡), Ëü¶¨ÒåµÄº¯Êý/È«¾Ö±äÁ¿µÄÃû»ù±¾ÉÏÊÇÓ¢ÓïÓï¾ä. ÎÒ¾ÙЩÀý×Ó:
   
        native CreateUnit takes player id, integer unitid, real x, real y, real face returns unit
    ±¾µØº¯ÊýCreateUnit() ¼´ÊÇCreate Unit, Òâ˼Ϊ´´½¨µ¥Î», ´Ó²ÎÊý±í(takes ºÍ returnsÖ®¼äµÄÉùÃ÷)À´¿´, Õâ¸öº¯ÊýÐèÒªÊäÈëÍæ¼Ò, µ¥Î»±àÂë, ×ø±êx, ×ø±êy, ·½Ïò½Ç¶È, ·µ»ØÖµÊǵ¥Î»ÀàÐͱäÁ¿.
    ´Óº¯ÊýµÄÃû×ֺͲÎÊý±í, ¿ÉÒԲ²â/È·ÈÏCreateUnit()ÊÇÓÃÀ´ÔÚµØÍ¼µÄx/y×ø±êÖÐΪָ¶¨Íæ¼Ò´´½¨Ö¸¶¨µ¥Î», ²¢ÇÒʹ´´½¨µ¥Î»ÃæÏòËù¶¨ÒåµÄ½Ç¶È, ·µ»ØÖµÊÇ´´½¨µ¥Î».
    ÔÚµØÍ¼Èë¿Úº¯Êýmain()ÖÐ, CreateUnit()±»´óÁ¿µ÷ÓÃ, ÓÃÀ´ÖØÏÖµØÍ¼Éè¼ÆÊ±ÓÃWORLD EDITOR(GUI)·ÅÖõĵ¥Î».
    ×¢Òâ: ¾ÍÈçÇ°ÃæËù˵¹ý, integer¿ÉÒÔÓõ¥ÒýºÅÀ¨Æð4¸öÓ¢ÎÄ×Öĸ/Êý×ÖÀ´±íʾ. ËùÒÔCreateUnit()ÖÐinteger unitid²ÎÊý¿ÉÒÔÓà 'Xxxx'À´±íʾ. Èç:
        set u = CreateUnit( Player(5), 'ndgt', -2944.0, -3136.0, 270.000 )
    ÉϾäÒâ˼ÊÇÎªÍæ¼Ò5ÔÚµØÍ¼×ø±ê(-2944.0, -3136.0)Öд´½¨±àÂëΪ'ndgt'µÄµ¥Î», ²¢Ê¹´´½¨µ¥Î»ÃæÏò½Ç¶ÈΪ270¶È, È»ºó°Ñ´´½¨µ¥Î»±£´æÔÚ±äÁ¿uÖÐ.
   
   ×ܽáÏÂBlizzardº¯ÊýÃû/È«¾Ö±äÁ¿ÃûµÄ¹æÂÉ:
        a) ǰ׹Get           È¡µÃijÊôÐÔ, ´ËÀຯÊýÒ»°ãÓзµ»ØÖµ
        b) ǰ׺Set           ÉèÖÃijÊôÐÔ
        c) ǰ׺Is              ÊÇ·ñÅжÏ, ´ËÀຯÊý·µ»ØÀàÐͶ¼ÊÇboolean, ·µ»Øtrue»òfalse
        d) ÖмäÓÐ2            Êý¾ÝÀàÐÍת»¯º¯Êý, ÈçS2I(), I2R, I2S()µÈ
        e) ÓÐItem/Unit/...  ¿Ï¶¨ÊÇÓëÎïÆ·/µ¥Î»/...Ïà¹ØµÄº¯Êý
        f) ºó׺BJ               ´Ëº¯Êý¿Ï¶¨ÊÇÔÚBlizzard.jÖж¨ÒåµÄ, ²»ÄÜÔÚAIÖÐʹÓÃ.
        g) ǰ׺bj_             ÔÚBlizzard.jÖж¨ÒåÉùÃ÷µÄÈ«¾Ö³£Á¿(³£Á¿ÊÇÖ¸¶¨Òå²¢¸³Öµºó²»ÄÜÔٸıäµÄÖµ)
        h) ǰ׺Create        ´´½¨
        i)  Ç°×ºRemove      ÒƳý
        k) È«²¿´óд           ÔÚcommon.jÖж¨ÒåÉùÃ÷µÄÈ«¾Ö³£Á¿
6) ʵÓÃÎÊÌâ: ÈçºÎ´´½¨Íâ¹ÛËæ»ú¿É±äµÄµØÍ¼?
    ÉÏÃæËµ¹ý, main()ÊǵØÍ¼Èë¿Úº¯Êý, ÔÚmain()µ÷ÓÃÁËһЩÔÙÏÖµØÍ¼Éè¼ÆÊ±Ô­Ã²µÄ×Óº¯ÊýÈçCreateAllUnits(). Òò´Ë, ÎÒÃÇ¿ÉÒÔÔÚCreateAllUnits()ÖмÓÈëËæ»úº¯ÊýGetRandomInt()À´¿ØÖƵ¥Î»/ÎïÆ·/¿ÉÆÆ»µÎïµÈ³õʼ»¯¹ý³Ì.
    ÎÒÃÇ¿ÉÒÔÓÃWINMPQ´ò¿ªÒªÐ޸ĵĵØÍ¼, ÌáÈ¡war3map.jÀ´ÐÞ¸Ämain()º¯Êý¼°ÆäÏà¹Øº¯Êý. ÐÞ¸ÄÍêwar3map.jºó, ÔÙÓÃWINMPQµ¼ÈëÐ޸ĺóµÄwar3map.j.
   
    a) º¯ÊýÐÞ¸Ä/Ôö¼Ó·½·¨:
   
    ÕâÊÇ3CµØÍ¼ÖеÄCreateAllUnits()º¯Êý
        function CreateAllUnits takes nothing returns nothing
            call CreateNeutralPassiveBuildings()    //Óû§×Ô¶¨Ò庯Êý
            call CreatePlayerBuildings()            //Óû§×Ô¶¨Ò庯Êý
            call CreateNeutralHostile()             //Óû§×Ô¶¨Ò庯Êý
            call CreateNeutralPassive()             //Óû§×Ô¶¨Ò庯Êý
            call CreatePlayerUnits()                //Óû§×Ô¶¨Ò庯Êý
        endfunction
    ×¢Òâ: CreateAllUnits()Ò²²»Êǿ⺯Êý, ÊÇÓû§×Ô¶¨Ò庯Êý):
   
    ÎÒÃÇ¿ÉÒÔ¸ù¾ÝCreateAllUnits()´´½¨ÁíÒ»¸öº¯Êý:
        function CreateAllUnitsRandom takes nothing returns nothing
            // randomint ÊÇ 1,2,3ÖеÄËæ»úÊý
            local integer randomint = GetRandomInt(1, 3)   
            call CreateNeutralPassiveBuildingsRandom(randomint)
            call CreatePlayerBuildingsRandom(randomint)
            call CreateNeutralHostileRandom(randomint)
            call CreateNeutralPassiveRandom(randomint)
            call CreatePlayerUnitsRandom(randomint)
        endfunction
        
    ÒòΪԭÀ´µ÷Óõĺ¯Êý¶¼ÊÇÎÞ²ÎÊýº¯Êý, ËùÒÔÏàÓ¦µÄº¯ÊýÓ¦¸Ã×öЩÐÞ¸Ä, Èç:
        //´´½¨Íæ¼Òµ¥Î», ÒÔCreatePlayerUnits()ΪÀ¶±¾Ôö¼Óк¯Êý
        function CreatePlayerUnitsRandom takes integer randomint returns nothing
            //´Ëº¯ÊýÒÔCreateUnitsForPlayer0ΪÀ¶±¾Ôö¼Óк¯Êý
            call CreateUnitsForPlayer0Random(randomint)
            ......
            
        endfunction
        
        //´´½¨ÖÐÁ¢µÐ¶Ôµ¥Î»
        //´Ëº¯ÊýÒÔCreateNeutralHostileΪÀ¶±¾Ôö¼Óк¯Êý
        function CreateNeutralHostileRandom integer randomint returns nothing
            local player p = Player(PLAYER_NEUTRAL_AGGRESSIVE)
            local unit u
            local integer unitID
            local trigger t
            local real life
        
            //¼ÓÈëÌõ¼þ¿ØÖÆ, ¸ù¾ÝËæ»úÊý´´½¨²»Í¬µ¥Î»×éºÏ.
            if randomint == 1 then
                //¿Éµô±¦ÎïµÄµ¥Î»
                set u = CreateUnit( p, 'nC26', -6533.2, 445.1, 220.680 )
                set t = CreateTrigger(  )
                call TriggerRegisterUnitEvent( t, u, EVENT_UNIT_DEATH )
                call TriggerRegisterUnitEvent( t, u, EVENT_UNIT_CHANGE_OWNER )
                call TriggerAddAction( t, function Unit000012_DropItems )
               
                //²»µô±¦Îﵥλ
                set u = CreateUnit( p, 'nelb', -373.5, 3533.4, 44.518 )
                set u = CreateUnit( p, 'nomg', -233.6, 3436.2, 140.871 )
            elseif randomint == 2 then
                //²»µô±¦Îﵥλ
                set u = CreateUnit( p, 'a001', -373.5, 3533.4, 44.518 )
                set u = CreateUnit( p, 'a002', -233.6, 3436.2, 140.871 )
            else               
                ......
            endif           
        endfunction
               
        ±ðÍüÁËÐÞ¸Ämain()
        function main takes nothing returns nothing
            ........
            //call CreateAllUnits()     //Ô­°æµÄµ¥Î»³õʼ»¯º¯Êý, ²»ÔÙʹÓÃ
            call CreateAllUnitsRandom() //ʹÓÃеĵ¥Î»³õʼ»¯º¯Êý
            ........        
        endfunction
        
   
    b) ³õʼÉèÖø´ÖÆ·½·¨:
    ÎÊÌâµÄ¹Ø¼ü¾ÍÊÇ, Õâô¶à³õʼµ¥Î», ÔõôÑùÐÞ¸ÄÆðÀ´²»ÀÛÈË?
    ÕâÀï½éÉÜÒ»ÖÖ·½·¨:
        1. ÏȰÑÒªÐ޸ĵĵØÍ¼¸´ÖÆ
        2. Ð޸ĸ´ÖƵØÍ¼³õʼµ¥Î»µÄÀàÐÍ/λÖÃ/±¦ÎïµÈ, ɾ³ýËùÓÐTRIGGER, ²¢±£´æ
        3. ÓÃWINMPQ´ò¿ª¸´ÖƵØÍ¼, ÌáÈ¡war3map.j
        4. ¸´ÖÆwar3map.jÖжÔÓ¦º¯ÊýÖд´½¨µ¥Î»µÄÓï¾ä
        5. °Ñ¸´ÖƵÄÓï¾äÕ³ÌùÔÚÔ­µØÍ¼ÖÐÏàÓ¦º¯ÊýµÄÊʵ±Î»ÖÃ
        6. ÖØ¸´1-5, ¸´ÖƸü¶àµÄËæ»ú³õʼ»¯ÉèÖÃ
        
    ×¢Òâ: Èç¹ûÓÃWorld EditorÔÙ´ÎÐ޸IJ¢±£´æ, main()½«Ê¹ÓÃGUIĬÈÏÉú³ÉµÄcall CreateAllUnits(), ¶ø²»ÊÇcall CreateAllUnitsRandom(). ´Ëʱ»¹ÐèÒª´ò¿ªwar3map.jÐÞ¸Ämain()º¯Êý.
   
    ͬÑù, ʹ¿ÉÆÆ»µÎïµÈ³õʼÉèÖÃÓÐËæ»ú±ä»¯Ò²¿ÉÒÔÓô˷½·¨.

Jass»ù´¡½Ì³Ì µÚËÄÕ ¿âº¯Êý

¡¡
ÕâÕÂÊÇJass»ù´¡½Ì³ÌÖÐ×îÄѵIJ¿·Ö, Ò²ÊÇ×îʵÓõIJ¿·Ö.
JassµÄ¹Ø¼ü×ÖÓÐ26¸ö, ¸úÓ¢ÎÄ×ÖĸһÑù¶à. ÎÒÃÇÀ´»Ø¹ËÒ»ÏÂ:
    and, array, call, constant, else, elseif, endfunction, endglobals,  endif, endloop, exitwhen, extends, function, globals,  if, local, loop, native, not, or, return,  returns, set, takes, type, then
ÒÔ´Ë¿´À´, JassÊÇÓï·¨½á¹¹×î¼òµ¥µÄÒ»ÖÖ×¼¼ÆËã»úÓïÑÔ. JassʵÏÖ¹¦ÄÜ»ù±¾ÒÀ¿¿µ÷ÓÃcommon.j, blizzad.j, common.aiÖеĿ⺯Êý.

±¾ÕÂËùÊöÄÚÈݲ»ÊôÓÚJassÓï·¨²¿·Ö, ×îÖ÷Òª½²Êö:
   ´¥·¢Æ÷(Triggers)                                
    ¿ç½Å±¾Í¨Ñ¶(Inter-Script Communication)         
    ¶ÓÁÐ(Enumerations)                              
    ¶ÓÁйýÂËÆ÷(Filters)                             
    Ïß³Ì(Threads)
                                 
   
1) ´¥·¢Æ÷(Triggers)
    ´¥·¢Æ÷ÓÃÓÚµØÍ¼´¥·¢Æ÷½Å±¾(Trigger Jass), ÓÃÓÚÏìÓ¦ÌØ¶¨Ê¼þ. ËüÊÇÖÖÏìÓ¦ÐźÅ(callback), ´¥·¢Æ÷²»ÄÜÓ¦ÓÃÓÚAI, ¼´ÊÇ˵AI JassÖв»ÄÜÓд¥·¢Æ÷µÄÓï¾ä.
    ´¥·¢Æ÷°üº¬´´½¨´¥·¢Æ÷, ÉèÖô¥·¢Ìõ¼þ, ÉèÖö¯×÷.  
   
    a)´´½¨´¥·¢Æ÷
       ´¥·¢Æ÷µÄÊý¾ÝÀàÐÍΪtrigger(´¥·¢Æ÷), ÊÇhandle(¾ä±ú)µÄ×ÓÀàÐÍ.
        
        ´´½¨´¥·¢Æ÷µÄº¯ÊýÔÚcommon.jÖеÄÉùÃ÷:
            native CreateTrigger takes nothing  returns trigger
        
        ²ÎÊý:
            nothing         //ÎÞ²ÎÊý
        ·µ»Ø:
            trigger         //·µ»Ø´´½¨µÄ´¥·¢Æ÷
        
        Ê¹Óøñʽ:  set ±í´ïʽ = CreateTrigger()
        ÆäÖбí´ïʽÊÇtriggerÀàÐ͵ıäÁ¿
        ÐÂÊý¾ÝÀàÐÍ:
            triggerÀàÐÍ: ÊÇhandleµÄ×ÓÀàÐÍ, ÓÃÓÚµ÷Óúʹ¦Àí´¥·¢Æ÷
            
    b)´¥·¢Ê¼þ
        ´¥·¢Ê¼þµÄÊý¾ÝÀàÐÍΪevent(ʼþ). ¿ÉÒÔÒýÆð´¥·¢ÏìÓ¦µÄ´¥·¢Æ÷±ØÐëÏÈÔÚÓÎÏ·ÖÐ×¢²á´¥·¢Ê¼þ, ÓÃÓÚ¼àÊÓÓÎϷʼþ·¢Éú.
        ×¢²á´¥·¢Ê¼þµÄº¯ÊýÔÚcommon.jÖеÄÉùÃ÷:
         
   native TriggerRegister*Event takes
                    trigger whichTrigger, ... returns event
     
   º¯ÊýÃû:
            ¸ù¾Ýʼþ¶ÔÏóµÄ²»Í¬, Óв»Í¬µÄʼþÏìÓ¦. TriggerRegister*EventÖÐµÄ * ºÅΪ¶ÔÏóÃû, Èç: TriggerRegisterUnitEvent, TriggerRegisterEnterRegion µÈ, ×¢²á²»Í¬¶ÔÏóµÄʼþÒªÇó´«µÝÏàÓ¦Ö¸¶¨¶ÔÏó×÷Ϊ²ÎÊý, ÓÐЩʼþ×¢²áÒªÇó´«µÝÏÂÃæËù˵µÄ¹ýÂËÆ÷(Filters)
       ²ÎÊý:
            trigger whichTrigger    //´¥·¢Æ÷±äÁ¿
            ...                     //ÏàÓ¦Ö¸¶¨¶ÔÏóµÄ±äÁ¿
        ·µ»Ø:
            event                   //·µ»Ø¸Ãʼþ
        
        Ê¹Ó÷½·¨(¾Ù×¢²áµ¥Î»Ê¼þµÄÀý×Ó):
            call TriggerRegisterUnitEvent(Äĸö´¥·¢Æ÷, Äĸöµ¥Î», ÄÄÖÖÀàÐ͵ĵ¥Î»Ê¼þ)
        
        ÐÂÊý¾ÝÀàÐÍ:
            event       //ʼþ

            
    c)´¥·¢Ìõ¼þ
        ´¥·¢Ìõ¼þÊÇÒ»×é²¼¶û±í´ïʽ(boolexpr)Êý¾Ý, ËüµÄÊý¾ÝÀàÐÍΪÌõ¼þº¯Êý(conditionfunc), ÊDz¼¶û±í´ïʽ(boolexpr)ÀàÐ͵Ä×ÓÀàÐÍ.
        
        ½¨Á¢´¥·¢Ìõ¼þµÄº¯ÊýÔÚcommon.jÖеÄÉùÃ÷:
  
          native Condition takes code func returns conditionfunc
        
        ²ÎÊý:
            code func       //º¯Êý´úÂë×÷Ϊ²ÎÊý
        ·µ»Ø:
            conditionfunc   //·µ»Ø½¨Á¢µÄÌõ¼þ
  
      ÆäÖÐtakes code funcÊÇÖ¸ÐèÒªº¯Êý´úÂëfunc×÷Ϊ²ÎÊý, ²ÎÊýº¯Êý func ±ØÐëµÄÉùÃ÷¸ñʽ±ØÐëÊÇ: takes nothing returns boolean. ¼´ÊÇ˵, ÓÃ×÷²ÎÊýµÄº¯Êý±¾ÉíÓ¦¸ÃÊÇÎÞ²ÎÊýÇÒ·µ»ØÖµÎª²¼¶ûÐÍ(boolean).
        Ê¹Óøñʽ:  set ±í´ïʽ = Condition(function ²¼¶ûÐͺ¯ÊýÃû)
        ÆäÖбí´ïʽÊÇÌõ¼þº¯Êý(conditionfunc)
        
        ÐÂÊý¾ÝÀàÐÍ:
            boolexpr            ²¼¶û±í´ïʽ
            conditionfunc       Ìõ¼þº¯Êý, ÊDz¼¶û±í´ïʽµÄ×ÓÀàÐÍ
        
   
    ±ÈÈç:
   
            function Girl1 takes nothing returns boolean
                ...
                return true
            endfunction
            function Girl2 takes integer i returns boolean
                ...
                return true
            endfunction
            
            function Girl3 takes nothing returns nothing
                ...
                return
            endfunction
            // ¼ÙÉè c ΪconditionfuncÀàÐͱäÁ¿
            set c = Condition(function Girl1)   //(A)
            set c = Condition(function Girl2)   //(B) ±¾ÉíÒªÇó²ÎÊý
            set c = Condition(function Girl3)   //(C) ·µ»ØÖµ²»ÊÇbooleanÀàÐÍ
            
        ½âÊÍ:
Girl1() ÊÇÎÞ²ÎÊýÇÒ·µ»ØÎªbooleanµÄº¯Êý, ¿ÉÒÔÓÃ×÷ Condiction() ÖеIJÎÊýº¯Êýcode func. ¶øGirl2() - ±¾ÉíÒªÇó²ÎÊý, Girl3() - ·µ»ØÖµ²»ÊÇbooleanÀàÐÍ, ËùÒÔ(B)(C)º¯Êý²»¿É×÷ΪCondiction()µÄ²ÎÊý.
            
       ÔÚµÚÒ»Õ±äÁ¿ÆªÖÐÎÒûÓÐÏêϸ˵Ã÷codeÀàÐ͵ÄÊý¾Ý, ÒòΪŶÁÕß²»ÄÜÀí½â. ÏÖÔÚÎÒ˵Ã÷ÏÂcodeÀàÐÍÊý¾Ý. ÎÒÃÇÓÃÀý×Ó˵Ã÷, ±ÈÈç:
         
  call myfuction1(IsGirl())           //(A)
            call myfuction2(function IsGirl())  //(B)
        (A)ºÍ(B)Ö®¼äÓÐʲô²»Í¬ÄØ? °´ÎÒµÄÀí½â: (A)(B)¶¼°ÑIsGirl()ÔËÐзµ»ØºóµÄÖµµ±×÷myfunction1()/myfunction2()µÄ²ÎÊý. IsGirl()ÔÚ(A)ÖÐÊÇÒ»´ÎÐԵĴ¦Àí¹ý³Ì. ¶ø(B)ÊÇ´´½¨ÁËÒ»¸öÔËÐÐIsGirl()Âß¼­µÄ¼àÊÓÏß³Ì, Ö»ÒªÏß³Ìû¸øÇå³ý/ÖÕÖ¹, IsGirl()½«Ò»Ö±¼àÊӱ仯. ×¢ÒâÕâÀïËù˵µÄÏ̸߳úÏÂÃæÒªËµµÄAIÏß³ÌÊÇÁ½ÂëÊÂ.
        
    d) Ôö¼Ó´¥·¢Ìõ¼þ:
        ´¥·¢Ìõ¼þ¿ÉÒÔÓÃTriggerAddCondition()Ôö¼Ó
        Ôö¼Ó´¥·¢Ìõ¼þµÄº¯ÊýÔÚcommon.jÖеÄÉùÃ÷:
            native TriggerAddCondition takes trigger whichTrigger,
                    boolexpr condition returns triggercondition
        
            ²ÎÊý:
                trigger whichTrigger    //´¥·¢Æ÷±äÁ¿
                boolexpr condition      //´¥·¢Ìõ¼þ±äÁ¿
            ·µ»Ø:
                triggercondition        //·µ»Ø¸Ã´¥·¢Ìõ¼þµÄhandle(¾ä±ú)
               
   
     Ê¹Óøñʽ:
            set tc = TriggerAddCondition(´¥·¢Æ÷, ´¥·¢Ìõ¼þ)
            ÆäÖÐ tc ΪtriggerconditionÀàÐͱäÁ¿
            
       ÐÂÊý¾ÝÀàÐÍ:
            triggercondition        ´¥·¢Ìõ¼þ¾ä±ú
        
        (×¢Òâ: ´¥·¢Ìõ¼þºÍÉÏÃæÒªËµµÄ´¥·¢Ê¼þÊDz»Ò»ÑùµÄ!!!)
        
        Àý:
            
ÕâÊÇÔö¼Ó/ÒÆ³ý/¸Ä±ä´¥·¢Ìõ¼þµÄÀý×Ó
            
         
   //ÎļþÍ·ÉùÃ÷¸öÈ«¾Ö±äÁ¿tc
            globals
                ...
                triggercondition    tc  = null
                trigger             mytrigger = null
                ...
            endglobals
            function Girl takes nothing returns boolean
                ...
                return true
            endfunction
            function notGirl takes nothing returns boolean
                ...
                return false
            endfunction
            //Ϊ mytrigger Ôö¼Ó´¥·¢Ìõ¼þ
            function addcondition takes nothing returns nothing
                ...
                set mytrigger = CreateTrigger()
                set tc = TriggerAddCondition(mytrigger, Condition(function Girl))
                ...
            endfunction
            
            //ÒòΪtcÊÇmytrigger´¥·¢Ìõ¼þµÄ¾ä±ú, °ÑtcÇå¿Õ±ãÇå³ýÁËÖ¸ÏòµÄ´¥·¢Ìõ¼þ.
            function removecondition takes nothing returns nothing
                ...
                set tc = null
                ..
            endfunction
            
            //¸Ä±ä mytrigger µÄ´¥·¢Ìõ¼þ
            function modifycondition takes nothing returns nothing
                ...
                set tc = null       //ÏȰÑÔ­À´µÄ´¥·¢Ìõ¼þÒÆµô
                set tc = TriggerAddCondition(mytrigger, Condition(function noGirl))
                ...
            endfunction
   e)´¥·¢Æ÷¶¯×÷
       ´¥·¢Æ÷¶¯×÷Êǵ±Ö¸¶¨Ê¼þ·¢Éú²¢·ûºÏ´¥·¢Ìõ¼þµÄÖ´ÐеÄÓï¾ä.
        Ôö¼Ó´¥·¢Æ÷¶¯×÷µÄº¯ÊýÔÚcommon.jÖеÄÉùÃ÷:
         
  native TriggerAddAction takes trigger whichTrigger,
                              code actionFunc returns triggeraction
        
   
    ²ÎÊý:
            trigger whichTrigger    //´¥·¢Æ÷±äÁ¿
            code actionFunc         //Ö´Ðк¯Êý
            
            ×¢Òâ
: Ö´Ðк¯Êý±ØÐëÊÇÎÞ²ÎÊýÎÞ·µ»ØÖµ(takes nothing returns nothing)µÄº¯Êý
        ·µ»Ø:
            triggeraction           //´¥·¢¶¯×÷
        
  
      ÐÂÊý¾ÝÀàÐÍ:
            triggeraction           //´¥·¢¶¯×÷, handle×ÖÀà
        
   
°ÑÓйش¥·¢Æ÷Ö÷Òªº¯ÊýôÛºÏÔÚÒ»Æð, ÎÒÃÇÀ´¿´¸öÀý×Ó, Ñо¿Ï´¥·¢Æ÷ÊÇÔõô´´½¨µÄ:
            
        
//ÎļþÍ·ÉùÃ÷È«¾Ö±äÁ¿mytrigger
        //¼ÙÉèmytriggerÊǼàÊÓµ¥Î»ËÀÍöʼþµÄ´¥·¢Æ÷
        globals
            ...
            trigger             mytrigger = null
            ...
        endglobals
        
        //ÅжÏÊÇ·ñµôÎïÆ·
        function isDrop takes nothing returns boolean
            local boolean conditcion
            ...
            if conditcion = true then
                return true
            else
                return false
            endif
        endfunction
        
        //µôÎïÆ·
        function DropItems takes nothing returns nothing
            //»ñµÃ´¥·¢µ¥Î»
            local unit trigUnit = GetTriggerUnit()
            ....   
            call UnitDropItem( trigUnit, 'IC21' )
            ...
        endfunction
        
        function ThisIsMyTrigger takes nothing returns nothing
            local unit u
            
            //ÔÚ-5630.5, -4723.1×ø±êÎªÍæ¼Ò5´´½¨µ¥Î»'n00I', ÃæÏò90.260¶È
            set u = CreateUnit(Player(5), 'n00I', -5630.5, -4723.1, 90.260 )
            
            //´´½¨´¥·¢Æ÷(Ï൱ÓÚmytriggerµÄ³õʼ»¯)
            set mytrigger = CreateTrigger()
            
            //Ϊmytrigger×¢²á´¥·¢Æ÷ʼþ, ÈÃÓÎϷϵͳ¼àÊÓËù´´½¨µ¥Î»uµÄËÀÍöʼþ
            //EVENT_UNIT_DEATHÊÇcommon.jÖж¨ÒåµÄ³£Á¿
            call TriggerRegisterUnitEvent( mytrigger, u, EVENT_UNIT_DEATH )
            
            //ΪmytriggerÔö¼Ó´¥·¢Ìõ¼þ
            //isDropÊÇÎÞ²ÎÊý·µ»ØÎª²¼¶ûÖµµÄº¯Êý
            set tc = TriggerAddCondition(mytrigger, Condition(function isDrop))
            
            //ΪmytriggerÔö¼Ó´¥·¢Æ÷¶¯×÷ - µô±¦Îï
            //DropItemsÊÇÎÞ²ÎÊýÎÞ·µ»ØÖµµÄº¯Êý
            call TriggerAddAction(mytrigger, function DropItems )   
            ...
        endfunction
   
    ¿ÉÒÔ¿´³ö, ´´½¨´¥·¢Æ÷˳ÐòÊÇ:
        1. ´¥·¢Æ÷³õʼ»¯ - CreateTrigger()
        2. ´¥·¢Æ÷ʼþ×¢²á - TriggerRegister*Event()
        3. ¶¨Òå´¥·¢Ìõ¼þ(¿ÉÑ¡) - TriggerAddCondition()
        4. ´¥·¢Æ÷¶¯×÷   - TriggerAddAction()
   
    ×¢Òâ:
        1. ´´½¨´¥·¢Æ÷±ØÐëÏÈÓÃCreateTrigger()³õʼ»¯.
        2. ûÓÐ×¢²áʼþµÄ´¥·¢Æ÷Ö»ÊǸö´¦Àí¹ý³Ì, ²»»áÏìӦʼþÖ´ÐгÌÐò
        3. ´¥·¢Æ÷¿ÉÒÔ²»¼Ó´¥·¢Ìõ¼þ, ÒòΪ¿ÉÒÔÓô¥·¢¶¯×÷µ÷Óõĺ¯ÊýÀ´¿ØÖÆÂß¼­.

2)Ïß³Ì(Threads)
    (Õⲿ·ÖÊôÓÚAI²¿·Ö, ×÷ΪÈëÃÅÕß×öÒ»°ãÐÔÁ˽â¾ÍÐÐÁË, ÒòΪAI¶¼ÊÇ´¿JASSдµÄ, ҲûÓÐÕæÕýºÃµÄAI EDITOR. ±¾ÈËÒ²¶Ô´ËÒ»Öª°ë½â, ¹ØÓÚAIµÄÎÄÕÂÒ²²»¶à, ûʲôºÃ²Î¿¼µÄ.)
   
    Ïß³ÌÖ»Ó¦ÓÃÓÚAI½Å±¾(AI JASS), ²»ÄÜÓÃÓÚ´¥·¢Æ÷½Å±¾(Trigger Jass). ͨ³£, µ±AI½Å±¾¿ªÊ¼ÔËÐÐʱֻ´´½¨Ò»¸öÏß³Ì, ´´½¨¸ü¶àµÄÏ߳̿ÉÒÔÓÃcomman.jµÄ±¾µØº¯Êý:
        native StartThread takes code func returns nothing
   
    µ÷Óà call StartThread(function myfunc) ½«´´½¨Ò»¸ö´Óº¯Êýmyfunc¿ªÊ¼Ö´ÐеÄÏß³Ì.
    ÿ¸öÍæ¼Ò×î¶à¿ÉÒÔÓµÓÐ6¸öÏß³Ì, °üÀ¨Ò»¿ªÊ¼Ö´ÐеÄÖ÷Ïß³Ì. µ±Ò»¸öÍæ¼ÒÓÐ6¸öÏß³ÌÊýʱ, µ÷ÓÃStartThread()µÄÓï¾ä½«±»ºöÂÔ. Ï̲߳»ÄÜ»ØÊÕ, µ±ÄãÎªÄ³Íæ¼Ò´´½¨ÁË5¸ö×Ô¶¨ÒåÏß³Ì, ½«ÎÞ·¨Îª¸ÃÍæ¼Ò´´½¨¸ü¶àµÄÏß³Ì.
    µ±ÐÂÏ̴߳´½¨Ê±, Ïß³ÌÁ¢¼´ÉúЧ. µ±Ïß³ÌÈò½Ö´ÐÐʱ, ´´½¨´ËÏ̵߳ĸ¸Ï߳̽«¼ÌÐøÖ´ÐÐ.
    ÔÚÍ¬Ò»Íæ¼ÒÖеÄËùÓÐÏ̶߳¼¹²ÏíÈ«¾Ö״̬(°üÀ¨±äÁ¿). ¼´ÊÇÐÞ¸Äij¸öÈ«¾Ö±äÁ¿, Ð޸ĺóµÄÖµÔÚ´ËÍæ¼ÒµÄËùÓÐÏß³ÌÖж¼ÊǿɼûµÄ.
   
    Ïß³ÌÔÚÒÔϵÄÇé¿öÈò½Ö´ÐÐ, ·µ»Ø¸¸Ïß³Ì
    a) µ±Ïß³ÌÖеIJÙ×÷Âë(opcode)³¬³öÏÞÖÆ, Ï̻߳á×Ô¶¯ÐÝÃß 1 Ãë
    b) µ±Ïß³ÌÖÐÓÃʹÓà Sleep(n), Ï߳̽«ÐÝÃß n Ãë, È»ºó¼ÌÐøÖ´ÐÐ.
   
    Ïß³ÌÔÚÒÔÏÂÇé¿ö»áÖÐÖ¹, ·µ»Ø¸¸Ïß³Ì
    a) Èç¹û call StartThread(null)ÖÐ, Ïß³ÌÖÐÖ¹
    b) µ±Ï̵߳ÄÖ÷º¯Êý·µ»Ø, Ïß³ÌÖÐÖ¹.
       (StartThread()ÖÐÖ®¼äµ÷Óõĺ¯Êý¾ÍÊÇÖ÷º¯Êý.)
    c) µ±Ïß³ÌÖÐʹÓÃûÓÐÉùÃ÷µÄ±äÁ¿, Ïß³ÌÖÐÖ¹. ÔÚʹÓÃ֮ǰ, ±äÁ¿±ØÐëÉùÃ÷.
    d) µ±Ïß³ÌÖгöÏÖÁãΪ±»³ýÊýʱ, Ïß³ÌÖÐÖ¹
    e) Ïß³ÌÖ÷º¯Êý³öÏÖÓï·¨´íÎó.
   
    ×¢Òâ: ËäÈ»AI½Å±¾¿ÉÒÔʹÓô󲿷Öcommon.jµÄ¿âº¯Êý, µ«ÓÐЩÀàÐ͵ĺ¯ÊýÔÚAI²»ÄÜÕý³£¹¤×÷, Èç:
    a) ·µ»Ø×Ö·û´®ÀàÐÍ(string)µÄ±¾µØº¯Êý, ÈçI2S(), SubString()µÈ
    b) ÐèÒªÒÔcode, trigger, boolexpr µÈÀàÐÍÊý¾ÝΪ²ÎÊýµÄ±¾µØº¯Êý, Èç´¥·¢Æ÷º¯Êý, ¶ÓÁк¯Êý(ForGroup, µÈ)
   
    ×¢Òâ: AIÖв»¿ÉÒÔʹÓÃBlizzard.jµÄº¯Êý, ´¥·¢Æ÷ÖÐÒ²²»¿ÉÒÔʹÓÃcommon.aiµÄº¯Êý, AIºÍ´¥·¢Æ÷¶¼¿ÉÒÔʹÓÃcommon.jµÄº¯Êý(µ±È», ¶ÔÓÚAI, »¹ÊÜÉÏÃæËù˵µÄÏÞÖÆ)
   
    common.aiºÍcommon.jÊÇдAIʱ¿ÉÒÔµ÷ÓúͲο¼¿âÎļþ, ÒªÑо¿AI, ÏÈÈ¥¶ÁÕâ2¸öÎļþ.

3) ¿ç½Å±¾Í¨Ñ¶(Inter-Script Communication)
    ÔÚÓÎÏ·ÖÐ, ¿ÉÄÜ»áÓжà¸ö¶ÀÁ¢µÄJass½Å±¾ÎļþͬʱÔËÐÐ. ±ÈÈçÔÚ¶ÔÕ½µØÍ¼ÖеÄÓÎÏ·, ÔËÐд¥·¢Æ÷½Å±¾ÎļþµÄͬʱ, Ò²¿ÉÄÜÔËÐÐÁËÿ¸öµçÄÔÍæ¼ÒµÄAI½Å±¾Îļþ. ÿ¸ö½Å±¾ÎļþÖ®¼äµÄÈ«¾Ö±äÁ¿²»Êǹ²ÏíµÄ. ËùÒÔ, Ò»¸öµçÄÔÍæ¼ÒµÄAI½Å±¾ÖÐÉèÖõÄÈ«¾Ö±äÁ¿²»»áÓ°ÏìÁíÒ»¸öµçÄÔÍæ¼ÒµÄAI½Å±¾µÄÖ´ÐÐ.
   
    ´¥·¢Æ÷½Å±¾Ò²²»¿ÉÒÔºÍAI½Å±¾¹²ÏíÈ«¾Ö±äÁ¿. µ«¿ÉÒÔÓô«µÝÃüÁîµÄ·½·¨½øÐнű¾Ö®¼äµÄÊý¾Ý½»»». ÃüÁîÓÉÒ»¶ÔÊýÖµÐÍÊý¾Ý(integer)×é³É: ÃüÁîÖµ(command value)ºÍÊý¾ÝÖµ(data value).
   
    ´Ó´¥·¢Æ÷½Å±¾ÏòAI½Å±¾·¢³öͨѶÃüÁî, ¿ÉÒÔʹÓÃcommon.jÖж¨ÒåµÄÒÔϱ¾µØº¯Êý:
        native CommandAI takes player num,
            integer command, integer data returns nothing
        
        ²ÎÊý:
            player num              //Íæ¼Ò
            integer command         //ÃüÁî
            integer data            //ÃüÁîÊý¾Ý
   
    ÒÔÏÂÊÇAIÖÐʹÓõÄcommon.jº¯Êý, ×¢Òâ: ÿ¸öµçÄÔÍæ¼Ò¶¼»áÓжÀÁ¢µÄAI½Å±¾, ËùÒÔ, ÒÔϺ¯Êý¶¼Ã»ÓÐÒªÇóÍæ¼Ò×÷Ϊº¯Êý²ÎÊý.
   
    ÿ¸öµçÄÔÍæ¼Ò¶¼ÓÐÃüÁî¶ÑÀ´¶Ñ·Å½ÓÊܵ½µÄÃüÁî. ÏëÖªµÀÓжàÊý¸öÃüÁî¶Ñ·ÅÔÚÃüÁî¶Ñ, ¿ÉÒÔÓÃÏÂÃæµÄº¯Êý:
        native CommandsWaiting takes nothing returns integer
        
        ²ÎÊý: ÎÞ
        ·µ»Ø: ÃüÁî¶ÑµÄÃüÁîÊý(integer)
        
    »ñµÃ´æ·ÅÔÚÃüÁî¶ÑÖÐ×î¶¥¶ËµÄÃüÁî():
        //·µ»ØÃüÁî
        native GetLastCommand takes nothing returns integer
        
        //·µ»ØÃüÁîÊý¾Ý
        native GetLastData takes nothing returns integer
        
    ÉÏÃæ2¸öº¯Êý¶¼²»»áÒÆ³ýÃüÁî¶ÑÖеÄÃüÁî, ÒªÒÆ³ý¶ÑÖеÄÃüÁî, ¿ÉÒÔÓÃ:
        native PopLastCommand takes nothing returns nothing



4) ¶ÓÁÐ(Enumerations)
    ËäÈ»JASS²»ÄÜ×Ô¶¨ÒåÊý¾Ý½á¹¹(ÒòΪJASSȱÉÙÖ¸Õë²Ù×÷·û), µ«API¿âÖÐÌṩÁËһЩʵÏÖ¶ÓÁвÙ×÷µÄº¯Êý. ÈçÒ»×鵥λΪµ¥Î»×é(group), Ò»×éÍæ¼ÒÎªÊÆÁ¦(force), ËäȻһ×é¿ÉÆÆ»µÎïûÓÐÃ÷È·¶¨ÒåËüµÄÊý¾ÝÀàÐÍ, µ«Ò²¿ÉÒÔÓÃAPIº¯ÊýÀ´²Ù×÷.
   
    µ¥Î»×éºÍÊÆÁ¦µÄ²Ù×÷º¯ÊýºÜÀàËÆ.
   
    µ¥Î»×é´¦Àíº¯Êý
        // ³õʼ»¯µ¥Î»×é
        native CreateGroup takes nothing returns group
        
        // ÔÚÖ¸¶¨µ¥Î»×éÖÐÔö¼ÓÖ¸¶¨µ¥Î»
        native GroupAddUnit takes group whichGroup, unit whichUnit returns nothing
        
        // ÔÚÖ¸¶¨µ¥Î»×éÖÐÒÆ³ýÖ¸¶¨µ¥Î»
        native GroupRemoveUnit takes group whichGroup, unit whichUnit returns nothing
        
    ÊÆÁ¦´¦Àíº¯Êý
        // ³õʼ»¯ÊÆÁ¦
        native CreateForce takes nothing returns force
        
        // ÔÚÖ¸¶¨ÊÆÁ¦ÖÐÔö¼ÓÖ¸¶¨Íæ¼Ò
        native ForceAddPlayer takes force whichForce, player whichPlayer returns nothing
        
        // ÔÚÖ¸¶¨ÊÆÁ¦ÖÐÒÆ³ýÖ¸¶¨Íæ¼Ò
        native ForceRemovePlayer takes force whichForce, player whichPlayer returns nothing
    JASS²»ÄÜÖ±½Ó²Ù×÷¶ÓÁÐÀïÃæµÄÔªËØ, ËüÊÇͨ¹ýcallbackÀàÐ͵ĺ¯ÊýÀ´ÊµÏÖ¶Ô¶ÓÁеIJÙ×÷:
        // ¶ÔÖ¸¶¨µ¥Î»×éÖеÄÿ¸öµ¥Î»¶¼ÔËÐÐÖ¸¶¨callbackº¯Êýcallback
        // (¶ÔÓ¦GUIÓïÑÔµÄFor Each Unit in <Group>)
        native ForGroup takes group whichGroup, code callback returns nothing
        
        // ¶ÔÖ¸¶¨ÊÆÁ¦ÖеÄÿ¸öÍæ¼Ò¶¼ÔËÐÐÖ¸¶¨callbackº¯Êýcallback
        // (¶ÔÓ¦GUIÓïÑÔµÄFor Each Player in <Force>)
        native ForForce takes force whichForce, code callback returns nothing
        
        ÊäÈëÉÏÃæÁ½¸öº¯ÊýµÄcallbackº¯Êý±ØÐëÊÇÎÞ²ÎÊýÎÞ·µ»ØÖµº¯Êý(takes nothing returns nothing)
        
    ͬÑù, ²Ù×÷¿ÉÆÆ»µÎïÒ²¿ÉÒÔÓÃÔÚÇøÓòÄÚµÄ¿ÉÆÆ»µÎï×÷Ϊ¶ÓÁÐ, ¿ÉÒÔÒÔÓÃÀàËÆµÄ·½·¨:   
        // ÔÚÖ¸¶¨ÇøÓòrÄÚ·ûºÏÖ¸¶¨¹ýÂËÆ÷filterµÄ¶¼ÔËÐÐÖ¸¶¨callbackº¯ÊýactionFunc
        // (¹ýÂËÆ÷¼ûϽڵĽ²½â)
        native EnumDestructablesInRect takes rect r,
                boolexpr filter, code actionFunc returns nothing
   
    ÔÚcallbackº¯Êý, ¿ÉÒÔÓÃÏÂÃæµÄº¯Êý»ñµÃ¶ÓÁÐÖеÄÏÂÒ»¸öÔªËØ:
        // »ñµÃµ¥Î»×éÖеÄÏÂÒ»¸öµ¥Î»
        // (¶ÔÓ¦GUIÓïÑÔµÄPick Every Unit in <Group>)
        constant native GetEnumUnit         takes nothing returns unit
        // »ñµÃÊÆÁ¦ÖеÄÏÂÒ»¸öÍæ¼Ò
        // (¶ÔÓ¦GUIÓïÑÔµÄPick Every Player in <Force>)
        constant native GetEnumPlayer       takes nothing returns player
        // »ñµÃ¿ÉÆÆ»µÎï×éÖеÄÏÂÒ»¸ö¿ÉÆÆ»µÎï
        // (¶ÔÓ¦GUIÓïÑÔµÄPick Every Destructables in <Region>)
        constant native GetEnumDestructable takes nothing returns destructable
   
    ×¢Òâ: AIÖв»Ö§³Ö¶ÓÁк¯ÊýµÄʹÓÃ.
   
   
    ÕâÊÇɱËÀµ¥Î»×éÖÐËùÓе¥Î»µÄʵÀý:
        // ÕâÊÇcallbackº¯Êý, ÎÞ²ÎÊý²¢ÎÞ·µ»ØÖµ
        function KillGroupCallback takes nothing returns nothing
             // »ñµÃµ¥Î»×éÖеÄÏÂÒ»¸öµ¥Î»
             local unit nextUnit = GetEnumUnit()
             // ɱËÀ¸Ãµ¥Î»
             call KillUnit(nextUnit)
        endfunction
        // µ÷ÓÃForGroup
        // ¶Ôµ¥Î»×égroupToKillÖеÄÿ¸öµ¥Î»¶¼ÔËÐк¯ÊýKillGroupCallback
        call ForGroup(groupToKill, function KillGroupCallback)
   
    ÁíÒ»¸ö¾­³£ÊÇÓõÄÀý×ÓÊÇÔÚ¶ÓÁÐÖвéÕÒÌØ¶¨Ìõ¼þµÄÔªËØ. ²»ÐÒµÄÊÇ, ÒòΪJASSÖ»Ö§³Öcallbackº¯ÊýÀ´´¦Àí¶ÓÁÐÖеÄÔªËØ, ËùÒÔÖ»ÓÐÓÃÈ«¾Ö±äÁ¿À´±£´æ²»Í¬µ¥Î»µÄÊôÐÔ. ÏÂÃæÊÇÕÒ³öµ¥Î»×éÀïÉúÃü×î¸ßµÄµ¥Î»µÄÀý×Ó:
   
        //¶¨ÒåÈ«¾Ö±äÁ¿
        globals
            //ÓÃÓÚ´¢´æÁ½µ¥Î»±È½Ïºó½Ï¸ßµÄÉúÃüÖµ, ³õʼ»¯Îª 0
            real mostLifeSoFar
            //ÓÃÓÚ´¢´æÁ½µ¥Î»±È½ÏºóÓнϸßÉúÃüÖµµÄµ¥Î», ³õʼ»¯Îª null
            unit unitWithMostLifeSoFar
        endglobals
        
        //±È½Ïµ¥Î»ÉúÃüÖµµÄcallbackº¯Êý
        function MostLifeCallback takes nothing returns nothing
            //»ñµÃµ¥Î»×éÖеÄÏÂÒ»¸öµ¥Î»
            local unit nextUnit = GetEnumUnit()
            //»ñµÃµ¥Î»ÊôÐÔ - ÉúÃü
            //UNIT_STATE_LIFEÊÇcommon.jÖж¨ÒåµÄ³£Á¿
            local real life = GetUnitState(nextUnit, UNIT_STATE_LIFE)
            
            //±È½ÏÉúÃüÖµ
            if life > mostLifeSoFar then
                //°Ñ½Ï´óµÄÉúÃüÖµ´¢´æ
                set mostLifeSoFar = life
                //°ÑÓнϴóÉúÃüµÄµ¥Î»´¢´æ
                set unitWithMostLifeSoFar = nextUnit
            endif
        endfunction
        
        ...
             //³õʼ»¯È«¾Ö±äÁ¿µÄֵΪ¿ÕÖµ
             set mostLifeSoFar = 0
             set unitWithMostLifeSoFar = null
             //µ÷ÓÃForGroup
             //¶Ôµ¥Î»×émyGroupÖеÄÿ¸öµ¥Î»¶¼ÔËÐк¯ÊýMostLifeCallback±È½ÏÉúÃü
             call ForGroup(myGroup, function MostLifeCallback)
             //ÉϾäÔËÐкó, È«¾Öµ¥Î»ÀàÐͱäÁ¿unitWithMostLifeSoFar±ãÖ¸Ïòµ¥Î»×émyGroupÖÐ×î¸ßÉúÃüµÄµ¥Î», »ò:
             //Èç¹ûµ¥Î»×émyGroupÊÇ¿Õ×é, ÄÇôunitWithMostLifeSoFar±ãÊÇ¿ÕÖµnull
        ...
   
    µ±È», ʵÏÖ¶ÓÁвÙ×÷, Ò²¿ÉÒÔÓÃÊý×éµÄ·½·¨À´´¦Àí. µ«, Êý×é²»ÄÜʹÓýô½Ó×ÅҪ˵µÄ¶ÓÁйýÂËÆ÷, Ò²²»Äܶ¨ÒåÊý×éÖаüº¬Êý×é. ÕâЩ¶¼ÊǶÓÁÐËùÓµÓеÄÓÅÊÆ, Èç¿ÉÒÔÓÐÊý×éÐ͵ĵ¥Î»×é(Ï൱ÓÚÊý×éÖаüº¬Êý×é), Ò²¿ÉÒÔÓöÓÁйýÂËÆ÷.





......ÆäʵÕâ¶«Î÷Ôç¾ÍÓÐÄñ- - JÇøÒ²ÓеÄ.....................
Ö§³ÖÄãÏÂϺÃÁË,·´ÕýżҲÃ×ʸÉ,Ã²ËÆ²åÁËÒ»½Å- -
5)¶ÓÁйýÂËÆ÷(Filters)
    ¶ÓÁйýÂËÆ÷ÓÃÓÚÔÚ¶ÓÁÐÖÐÔö¼Ó·ûºÏÌõ¼þµÄÔªËØ. ±ÈÈç, ÔÚ´´½¨Ò»¸ö·¨Á¦Ð¡ÓÚ20µÄµ¥Î»×éʱ, ±ã¿ÉÒÔÓöÓÁйýÂËÆ÷(Filters)À´´´½¨.
   
       //ÔÚµ¥Î»×éÖÐÔö¼ÓÖ¸¶¨µ¥Î»ÃûΪunitname, ²¢·ûºÏ¶ÓÁйýÂËÆ÷filterµÄµ¥Î»
        native GroupEnumUnitsOfType takes group whichGroup, string unitname,
              boolexpr filter returns nothing
        
        //ÔÚµ¥Î»×éÖÐÔö¼ÓÖ¸¶¨Íæ¼ÒΪwhichPlayer, ²¢·ûºÏ¶ÓÁйýÂËÆ÷filterµÄµ¥Î»
        native GroupEnumUnitsOfPlayer takes group whichGroup, player whichPlayer,
              boolexpr filter returns nothing
        
        //ÔÚµ¥Î»×éÖÐÔö¼ÓÖ¸¶¨Íæ¼ÒΪwhichPlayer, ²¢·ûºÏ¶ÓÁйýÂËÆ÷filterµÄµ¥Î»
        native GroupEnumUnitsOfTypeCounted takes group whichGroup, string unitname,
              boolexpr filter, integer countLimit returns nothing
        
        //ÔÚµ¥Î»×éÖÐÔö¼ÓÖ¸¶¨ÇøÓòΪr, ²¢·ûºÏ¶ÓÁйýÂËÆ÷filterµÄµ¥Î»
        native GroupEnumUnitsInRect takes group whichGroup, rect r, boolexpr filter
              returns nothing
        
        //ÔÚµ¥Î»×éÖÐÔö¼ÓcountLimit¸öÖ¸¶¨ÇøÓòΪr, ²¢·ûºÏ¶ÓÁйýÂËÆ÷filterµÄµ¥Î»
        native GroupEnumUnitsInRectCounted takes group whichGroup, rect r,
          boolexpr filter, integer countLimit returns nothing
        
        //ÔÚµ¥Î»×éÖÐÔö¼ÓÔÚÖ¸¶¨µã×ø±ê·¶Î§Ö®ÄÚ, ²¢·ûºÏ¶ÓÁйýÂËÆ÷filterµÄµ¥Î»
        native GroupEnumUnitsInRange takes group whichGroup, real x, real y,
          real radius, boolexpr filter returns nothing
        
        //ÔÚµ¥Î»×éÖÐÔö¼ÓÔÚÖ¸¶¨µã·¶Î§Ö®ÄÚ, ²¢·ûºÏ¶ÓÁйýÂËÆ÷filterµÄµ¥Î»
        native GroupEnumUnitsInRangeOfLoc takes group whichGroup,
          location whichLocation, real radius, boolexpr filter returns nothing
        
        //ÔÚµ¥Î»×éÖÐÔö¼ÓÖ¸¶¨¸öÊý, ÔÚÖ¸¶¨µã×ø±ê·¶Î§Ö®ÄÚ, ²¢·ûºÏ¶ÓÁйýÂËÆ÷filterµÄµ¥Î»
        native GroupEnumUnitsInRangeCounted takes group whichGroup, real x, real y,
          real radius, boolexpr filter, integer countLimit returns nothing
        
        //ÔÚµ¥Î»×éÖÐÔö¼ÓÖ¸¶¨¸öÊý, ÔÚÖ¸¶¨µã·¶Î§Ö®ÄÚ, ²¢·ûºÏ¶ÓÁйýÂËÆ÷filterµÄµ¥Î»
        native GroupEnumUnitsInRangeOfLocCounted takes group whichGroup,
          location whichLocation, real radius, boolexpr filter,
          integer countLimit returns nothing
        
        //ÔÚµ¥Î»×éÖÐÔö¼Ó±»Ö¸¶¨Íæ¼ÒÑ¡ÖÐ, ²¢·ûºÏ¶ÓÁйýÂËÆ÷filterµÄµ¥Î»
        native GroupEnumUnitsSelected takes group whichGroup, player whichPlayer,
          boolexpr filter returns nothing
        
    ÀàËÆµØ, ¶ÔÓÚÊÆÁ¦Ò²ÓÐÏàÓ¦µÄ²Ù×÷º¯Êý
        
       //ÔÚÊÆÁ¦ÖÐÔö¼Ó·ûºÏ¶ÓÁйýÂËÆ÷filterµÄÍæ¼Ò
        native ForceEnumPlayers takes force whichForce, boolexpr filter returns nothing
        
        //ÔÚÊÆÁ¦ÖÐÔö¼ÓÖ¸¶¨¸öÊý, ²¢·ûºÏ¶ÓÁйýÂËÆ÷filterµÄÍæ¼Ò
        native ForceEnumPlayersCounted takes force whichForce, boolexpr filter,
          integer countLimit returns nothing
        
        // Add all units that are allies of 'whichPlayer' that satisfy 'filter'
        //ÔÚÊÆÁ¦ÖÐÔö¼ÓºÍÖ¸¶¨Íæ¼ÒͬÃË, ²¢·ûºÏ¶ÓÁйýÂËÆ÷filterµÄÍæ¼Ò
        native ForceEnumAllies takes force whichForce, player whichPlayer,
          boolexpr filter returns nothing
        
        //ÔÚÊÆÁ¦ÖÐÔö¼ÓºÍÖ¸¶¨Íæ¼ÒµÐ¶Ô, ²¢·ûºÏ¶ÓÁйýÂËÆ÷filterµÄÍæ¼Ò
        native ForceEnumEnemies takes force whichForce, player whichPlayer,
          boolexpr filter returns nothing

    ÒÔÉϺ¯ÊýÖÐboolexpr filterÔÚ±¾ÕµÚ1)½Ú´¥·¢Æ÷ÖÐÓÐÌáµ½, ͨ³£¿ÉÒÔʹÓùýÂËÆ÷(filterfunc).¹ýÂËÆ÷¸ú´¥·¢Æ÷µÄÌõ¼þº¯Êý(conditionfunc)ÀàËÆ. ´´½¨¹ýÂËÆ÷¿ÉÒÔÓÃÒÔÏÂÓï¾ä:
        native Filter takes code func returns filterfunc
   
    ÆäÖвÎÊýº¯Êýcode func±ØÐëÊÇÎÞ²ÎÊý·µ»ØÖµÎª²¼¶ûÖµµÄº¯Êý(takes nothing returns boolean), ¹ýÂËÆ÷ÓÃÓÚÔÚ´´½¨¶ÓÁÐʱÔö¼Ó¶îÍâµÄÌõ¼þ. ÔÚ¹ýÂËÆ÷ÖÐ, ¿ÉÒÔʹÓÃÏÂÃæµÄº¯Êý»ñµÃÏÂÒ»¸ö´ý²éµÄµ¥Î»/Íæ¼Ò/²»¿ÉÆÆ»µÎï:
        //»ñµÃϸö´ý²éµ¥Î»
        constant native GetFilterUnit         takes nothing returns unit
        //»ñµÃϸö´ý²éÍæ¼Ò
        constant native GetFilterPlayer       takes nothing returns player
        //»ñµÃϸö´ý²é¿ÉÆÆ»µÎï
        constant native GetFilterDestructable takes nothing returns destructable

    ÎÒÃÇÀ´¿´¸ö´´½¨Ò»¸ö·¨Á¦Ð¡ÓÚ20µÄµ¥Î»×éÀý×Ó:
       //¹ýÂ˺¯Êý, ÊÇÎÞ²ÎÊý·µ»ØÖµÎª²¼¶ûÖµµÄº¯Êý
        function LessThan20ManaCallback takes nothing returns boolean
             //»ñµÃϸö¼ì²éµÄµ¥Î»
             local unit nextUnit = GetFilterUnit()
             //¼ì²é´ý²éµ¥Î»µÄ·¨Á¦ÊÇ·ñСÓÚ20
             //СÓÚ20Ôò·µ»Øtrue, ·ñÔò·µ»Øfalse
             return GetUnitState(nextUnit, UNIT_STATE_MANA) < 20
        endfunction
        ...
             //´´½¨¹ýÂËÆ÷, ¹ýÂ˺¯ÊýÊÇLessThan20ManaCallback
             local filterfunc myFilter = Filter(function LessThan20ManaCallback)
             //ÔÚµ¥Î»×éÖÐÔö¼ÓÖ¸¶¨ÇøÓò, ·ûºÏ¹ýÂËÌõ¼þµÄµ¥Î»
             call GroupEnumUnitsInRect(myGroup, someRect, myFilter)
             // Destroy the filter if we are not going to use it again
             //²»ÔÙʹÓùýÂËÆ÷, Ïú»Ù¹ýÂËÆ÷, ±ÜÃâÄÚ´æÐ¹Â©
             call DestroyFilter(myFilter)

Jass ²Ù×÷·û

    Êýѧ¼ÆËã:
        +       ¼Ó
        -       ¼õ
        *       ³Ë
        /       ³ý

        
    ±È½Ï·ûºÅ:
        >, <, >=, <=        ·Ö±ðÊÇ´óÓÚ,СÓÚ, ´óÓÚµÈÓÚ, СÓÚµÈÓÚ
        ==                  µÈÓÚ
        !=                  ²»µÈÓÚ
        
        ×¢Òâ: Ë«=ºÅ(==)²ÅÊDZȽÏ, µ¥=ºÅÊǸ³Öµ, ²»Òª¸ã´íÁË!!!
    ²¼¶ûÌõ¼þ
        and             Ìõ¼þºÍ
        or              Ìõ¼þ»ò
        not                 ·ñ¶¨Ìõ¼þ
        
        Ê¹ÓÃ:
        //Ìõ¼þ±í´ïʽ1ºÍ2¶¼ÊÇtrue, ÔòÏÂʽΪtrue, ·ñÔòÏÂʽΪfalse
        Ìõ¼þ±í´ïʽ1 and Ìõ¼þ±í´ïʽ2     
        //ÔÚÌõ¼þ±í´ïʽ1»ò2ÖÐÖ»ÒªÓÐÒ»¸öÊÇtrue, ÔòÏÂʽΪtrue
        Ìõ¼þ±í´ïʽ1 or Ìõ¼þ±í´ïʽ2
        //²»ÊDZí´ïʽµÄÖµ, Èç return (not true)Ôò·µ»Øfalse
        not ±