Jass, ngôn ngữ cơ bản của War 3 - Các bạn vào tham khảo

hyaTHa_dk

Mr & Ms Pac-Man
Tham gia ngày
10/4/05
Bài viết
235
Reaction score
0
Thực ra mình lập topic này để cho bạn Rex và Zeka, những bạn vẫn còn để ý đến box này thôi..... CÒn những bạn khác có thể vào tham khảo thêm

Mình định giới thiệu cho 2 bạn một chút rất dễ của Jass để các bạn có thể nắm được nó 1 cách đơn giản nhất
Mình sẽ post map spell của mình lên + nói sơ qua cách thức làm của nó. 2 bạn mở ra xem rồi có gì hỏi thì hỏi luôn đi nhớ.

Yêu cầu đừng post bài lung tung ở dưới này !!!
Only Question thôi nha !
 
đầu tiên, mình nói qua 1 đoạn code làm mờ Unit của mình
------------------------------------------------------------------------
-Hiệu ứng tỏ ra rất chuyên nghiệp tùy từng người làm nó
-Có thể tham khảo thêm map CAT's defense(có cây gậy Staff of Moon thì phải). Hay phép Spirit of the Moon trong CAT's Team

Mục đích chỉ tạo hiệu ứng thêm cho bất kỳ Unit Effect nào chứ ko cứng nhắc như ở map của các bạn là từng Unit một (mới cả lại còn có khi ko làm được)
------------------------------------------------------------------------
* Map dưới sẽ cho các bạn xem hiệu ứng làm mờ áp dụng cho bất kỳ Unit nào và dùng 1 đoạn Trigger chung
------------------------------------------------------------------------
2 Unit để các bạn theo dõi sự khác biệt(Lưu ý là mình chú tâm vào cái làm mờ trước đã nha)
**Unit bên trái : khi dùng phép
- tạo 1 Unit di chuyển xung quanh và ko có hiệu ứng gì cả
**Unit bên trái : khi dùng phép
- tạo 1 Unit di chuyển xung quanh và có hiệu ứng làm mờ
------------------------------------------------------------------------
Các bạn xem sự khác biết như thế nào !

Lưu ý là thỉnh thoảng rỗi mình mới lên được, đừng ai post nhảm ơ đây nhớ !
Dùng winrar giải nén
Map đây:
 

Attachments

ơ, ko có ai hỏi gì à ?
Vậy là mọi người hiểu hết rồi chứ gì !!!
Vậy mình chuyển sang chủ đề khác nhớ
--------------------------------------------------------------------------
Giờ mình xin chuyển qua một cái ko phải Jass nhưng nghĩ qua thì cũng nên nói một chút: Unit Caster Spell
--------------------------------------------------------------------------
Đây hầu như là Unit quan trọng cho bạn để tạo 1 spell mà bạn muốn = trigger
Unit này tùy từng spell mà chia ra ít nhất làm 3 loại mà mọi người thường dùng

+ Loại 1 là phổ biến nhất
------ Unit có Skill LOCUST
+ Loại 2 là loại mọi người ít dùng nhưng theo mình loại này mới là quan trọng
------ Unit ko có Skill LOCUST
+ Loại 3 là con lai của 2 loại trên nhưng là yếu tố quan trọng góp phần làm đẹp và mở rộng phạm vi của phép :D
------ Unit ko có Skill LOCUST và là 1 Unit bay có vận tốc cực lớn

Nếu bạn có thể sử dụng cả 3 loại trên thì coi như đã lên đẳng cập Prồ rồi đó :D
--------------------------------------------------------------------------
Đó là giới thiệu tổng quát cho các bạn biết, còn tùy từng lúc mình sẽ nói sâu vào từng loại
--------------------------------------------------------------------------
Giờ nói về loại 1: Loại này chỉ nói qua thôi vì mình nghĩ ai cũng biết rõ rồi, cũng ko cần nói nhiều lắm. Nhưng mình cũng làm 1 phép ví dụ cho mọi người rõ thêm về nó + tăng kiến thức về thời gian chênh lệch và tọa độ trong map

Phép mô phỏng chút ít của spell gì gì đó trong dday: của 1 Unit bên quỷ, có khả năng phân thân và phép cuối của nó là phép gọi lên 1 quả cầu vàng rồi phóng shockwave lần lượt ra 8 hướng ấy.... Tạm thời gọi là Orb of ShockWave. Phép có sử dụng Caster Unit loại 1

Spell là = trigger và chỉ có tác dụng cho 1 Hero trong map. Ko có thể tác dụng lên tất cả các Hero có phép này được.

Đậy chính là mặt yếu kém của trigger :((. Nếu bạn sang đến Jass, bạn chỉ cần sửa "một chút" thôi là spell này sẽ có tác dụng lên tất cả các Hero cast nó. Nên hầu như các map bạn chơi, bạn ko thể chọn Hero nào mà người khác đã lấy rồi được, đây cũng chính là cách biện mình cho người làm map đó mà hầu hết giờ mọi người đều làm theo cách này để tránh được việc chọn 2 hero sẽ làm spell này coi như bỏ đi.

Các bạn cũng có thể tham khảo thêm phép Orb of Light trong map CAT's Defense của mình
--------------------------------------------------------------------------
+ Ko có gì giải thích cách làm của spell này cả, vì nó khá đơn%2
 

Attachments

Cho em hỏi cái phần này

Khi làm bất cứ trigger nào thì cũng bắt đầu với vài thứ như

Function [ Function name ] takes [ ] returns [ ]

Endfunction

Cái phần Function name hình như không quan trọng . Còn 2 phần kia thì chưa hiểu nó nói gì >_< . Có thể nào diễn giải nghĩa đơn giản của nó được không :|

Còn một vài cái như constant function

Và khi mình làm Jass trình tự cũng có thể giống như trigger bình thường phải không ^^ .

===============

Xin chỉ bảo . Em mới mở tài liệu ra đọc nên chưa hiểu nhiều >_<
 
Trước hết mình xin nhắc bạn câu hỏi post dưới chỉ trong phạm vi chủ để của những bài mình đã post thôi !!! Nếu hỏi gì ngoài thì post sang bên topic hỏi đáp nha
----------------------------------------------------------------------------
Còn về cái Function thì cũng giống như bao ngôn ngữ lập trình khác, ko có gì khó hiểu lắm cả

function MessageDeath takes unit u returns nothing
call KillUnit( u )
call CreateTextTagLocBJ( ( "Vinh Biet The Gioi" + "!!!" ), GetUnitLoc(u), 0, 10, 100, 0.00, 0.00, 10.00 )
call SetTextTagVelocityBJ( GetLastCreatedTextTag(), 64, 90 )
call TriggerExecute( gg_trg_Destroy_Text )
call AddSpecialEffectLocBJ( GetUnitLoc(u), "Objects\\Spawnmodels\\Undead\\UndeadDissipate\\UndeadDissipate.mdl" )
call TriggerExecute( gg_trg_Effect_Off )
call TriggerSleepAction( 5 )
call RemoveUnit( u )
endfunction

----------------take------- returns nothing
Function trên nhận 1 Unit và làm 1 số việc cho bạn
+ Giết Unit đó
+ Tạo dòng chữ Vĩnh Biệt thế giới màu đỏ ở tại vị trí Unit đó
+ Làm cho dòng chữ bay lên
+ Tạo 1 effect là cái đầu lâu được giải thoát
+ Đợi 5s
+ bỏ xác của Unit đó đi

Nó cũng tương tự như 1 hàm trong lập trình ấy

Function Nha^n take (Real a, Real b) return c
----c=a*b
end
Ví dụ như Function này nhận 2 số và trả về cho bạn tích của 2 số đó
a = Nha^n(10,2)
==> a = bao nhiêu vậy ? :D
Hiểu chưa bạn ?
Nếu ko hiểu rõ lắm thì xem map này nhớ
--------------------------------------------------------------------------
Xin mọi người lưu ý là trong map này mình đã cho các bạn thêm 2 hệ thống cũng giống như hệ thống làm mờ :
++ Xóa 1 Text bay trong War (delay = 2.5)
++ Xóa 1 Effect trong war (delay = 3)

Cách sử dụng tương tự như hệ thống làm mờ, ko có gì để nói nhiều lắm !
-------------------------------------------------------------------------
Map hoạt động như sau:
_ Mình đã để Event là Player 1 Select 1 Unit nào đó
_ Lúc này hàm "GetTriggerUnit()" sẽ trả về cho các bạn Unit được bạn selected
_ Action: Chạy hàm MessageDeath cho Unit đó
-------------------------------------------------------------------------
Bạn chỉ việc select và xem Function đó hoạt động như thế nào

Yêu cầu lần sau đừng hỏi vấn đề gì ngoài chủ để mà mình đã post. Thực gia các bạn mới học thì theo mình ko nên học phần này trước
Map đây:
 

Attachments

ơ, tự nhiên có 3 bài ko hiểu sao lại có ở đây ???
và cũng sorry bà con, mấy hôm này bận cầy trả nợ cho thằng em maple nên cứ online là....... :(
giờ mới có chút time post tiếp cho bà con
--------------------------------------------------------------------------
Tiếp, tôi sẽ bàn về Spell-Trigger và Spell-Jass, mối quan hệ của chúng với "Unit Caster Spell"
Đầu tiên hãy xem 1 ví dụ đơn giản về 1 Spell:
Khi cast spell: Gọi 1 cục đá rơi xuống, nó phát nổ và bắn ra 1 quả shockwave về phía Bắc

Mọi chuyện ko có gì khó khăn cho lắm với những Effect trên và chỉ có 1 Hero hay Unit có thể cast nó ra

Tôi sử dụng 3 Effect và 1 Effect do War3 quản lý
Lấy spell cơ bản là Silence của Dark Ranger với Effect là Inferno(cái này do War3 quản lý)

-Tiếp đó, căn thời gian tảng đá Inferno rơi xuống rồi tạo 3 Special Effect tại điểm nó rơi: StarFall, FlameStrike-Special, FlamStrike-Effect
-Gán biến cho 3 effect vừa tạo
-Gọi 1 Unit Caster Spell và Order nó bắn ShockWave theo hướng 90 độ
-Đợi khoảng 2s, Hủy 3 Effect vừa tạo đi

Ko có gì đáng nói cả. Nhưng vấn đề phát sinh ở đây là như sau:
-Bạn muốn khi Hero của bạn cầm 1 Item gì đó, khi tấn công cũng có khả năng bắn ra được phép đó, hay là tạo 1 chùm mưa element, lấy 1 hạt mưa là spell đó chẳng hạn vv....

Lúc đó công việc của bạn là 1 Trigger Order cho nhiều CASTER SPELL bắn phép đó. Có thể diễn giải như sau:

-Vòng lặp
-Tạo 1 Unit Caster Spell
-Add phép Silence cho Unit CasterSpell
-Order nó bắn và chính vị trí đang đứng của nó chẳng hạn(Order tất nhiên là Silence - Dark Ranger)
-Hết vòng lặp

Như vậy, cứ lúc nào bạn cần bắn phép này thì add spell Silence cho CasterSpell và ra lệnh cho nó bắn...
Nhưng mọi việc không đến nỗi dễ như thế :(

Như Zeddy đã từng quan tâm, việc đồng thời(chỉ là tương đối) có 2,3,4...100 unit cùng bắn phép đó thì sao đây ???
Trigger cũng sẽ nhận đủ và làm đủ 100 lần spell trên, nhưng kết quả thì ko như ta mong đợi :(

Tại sao lại vậy ?
Đơn giản vì 1 lý do: spell trên có dùng 3 biến Effect để gắn + thời gian WAIT đã phá hỏng cách hiểu của WAR về Trigger khi sử lý những dòng lệnh đó
Tôi đảm bảo với các bạn nếu xóa những dòng WAIT 2s hay 1s vv.. thì nó sẽ có tác dụng với CASTERSPELL. Các bạn có thể thử

Nhưng được mấy spell mà ko cần căn thời gian cho chính xác(đấy là tôi mới nói về riêng spell Simple này đấy)
Và 1 lý do nữa mà các bạn cũng cần quan tâm là về Level của spell đó.

Ví dụ 2 hero cùng cast spell đó. Hero1 với level 2 cast trước, Hero2 với level 10 cast sau.
Nếu sử dụng đoạn trigger trên thì đố bạn biết cả 2 spell được bắn ra sẽ mang level bao nhiều ? Level 10 là câu trả lời

Vì khi dùng lệnh Wait, War sẽ hiểu sai về Casting Unit. Thực chất, đây là 1 biến luôn được gán cho bất kỳ Unit nào vừa mới cast 1 spell nào đó.
Do có lệnh wait nên khi đoạn trigger1 của Hero1 dừng lại wait, Trigger2 của hero2 chạy sau sẽ gán biến Casting Unit vào Hero thứ 2
=> đương nhiên khi đến lúc Trigger1 đã wait hết thời gian, nó sẽ chạy tiếp nhưng với Casting Unit là Hero2 ko phải Hero1 nữa

Mọi chuyện sẽ còn rắc rối cho bạn hơn nữa khi các bạn làm những spell phức tạp hơn nhiều so với cái spell đơn giản này

Nhưng trước hết, hãy down cái map Trigger này về đã :D
Map đây:
 

Attachments

Tiếp nào !!! sau đây sẽ là phiên bản Jass của phép trên, và nó hoạt động được với tất cả mọi hoàn cảnh kể cả khi wait bao nhiêu, có bao nhiều Unit cùng cast phép đó
Đây cũng chính là điểm mạnh của Jass

Ta hãy xem lại đoạn Trigger chính của spell trên và chuyển nó sang Jass:
call TriggerSleepAction( 1.50 )
call AddSpecialEffectLocBJ( GetSpellTargetLoc(), "Abilities\\Spells\\NightElf\\Starfall\\StarfallCaster.mdl" )
set udg_Effect1 = GetLastCreatedEffectBJ()
call AddSpecialEffectLocBJ( GetSpellTargetLoc(), "Abilities\\Spells\\Human\\FlameStrike\\FlameStrikeTarget.mdl" )
set udg_Effect2 = GetLastCreatedEffectBJ()
call AddSpecialEffectLocBJ( GetSpellTargetLoc(), "Abilities\\Spells\\Human\\FlameStrike\\FlameStrike1.mdl" )
set udg_Effect3 = GetLastCreatedEffectBJ()
// --------------------------------------------------------------------------------------------
call CreateNUnitsAtLoc( 1, 'e000', GetOwningPlayer(GetSpellAbilityUnit()), GetSpellTargetLoc(), 90.00 )
call UnitAddAbilityBJ( 'A001', GetLastCreatedUnit() )
call IssuePointOrderLocBJ( GetLastCreatedUnit(), "carrionswarm", PolarProjectionBJ(GetSpellTargetLoc(), 1.00, 90.00) )
call UnitApplyTimedLifeBJ( 2.00, 'BTLF', GetLastCreatedUnit() )
// --------------------------------------------------------------------------------------------
call TriggerSleepAction( 2 )
call DestroyEffectBJ( udg_Effect1 )
call DestroyEffectBJ( udg_Effect2 )
call DestroyEffectBJ( udg_Effect3 )

Bạn thử nghĩ xem: trigger này có lưu 3 biến Effect1,2,3. Nếu có nhiều 3 Hero cùng cast phép này thì bạn sẽ phải có 3x3 = 9 biến, 4 Hero thì 3x4 = 12 vvv....
Thì với Jass, bạn có thể yên tâm là sẽ ko cần khi báo biến như làm với spell Trigger :D

Sau đây là đoạn Jass của spell này:
local unit hero = GetSpellAbilityUnit()
local location point = GetSpellTargetLoc()
local effect effect1
local effect effect2
local effect effect3
call TriggerSleepAction( 1.50 )
call AddSpecialEffectLocBJ( point, "Abilities\\Spells\\NightElf\\Starfall\\StarfallCaster.mdl" )
set effect1 = GetLastCreatedEffectBJ()
call AddSpecialEffectLocBJ( point, "Abilities\\Spells\\Human\\FlameStrike\\FlameStrikeTarget.mdl" )
set effect2 = GetLastCreatedEffectBJ()
call AddSpecialEffectLocBJ( point, "Abilities\\Spells\\Human\\FlameStrike\\FlameStrike1.mdl" )
set effect3 = GetLastCreatedEffectBJ()
// -------------------------------------------------------------------------------------------
call CreateNUnitsAtLoc( 1, 'e000', GetOwningPlayer(hero), point, 90.00 )
call UnitAddAbilityBJ( 'A001', GetLastCreatedUnit() )
call IssuePointOrderLocBJ( GetLastCreatedUnit(), "carrionswarm", PolarProjectionBJ(point, 1.00, 90.00) )
call UnitApplyTimedLifeBJ( 2.00, 'BTLF', GetLastCreatedUnit() )
// -------------------------------------------------------------------------------------------
call TriggerSleepAction( 2 )
call DestroyEffectBJ( effect1 )
call DestroyEffectBJ( effect2 )
call DestroyEffectBJ( effect3 )
call RemoveLocation(point)
set point = null
set hero = null
set effect1 = null
set effect2 = null
set effect3 = null

Bạn sẽ thấy điểm khác giữa 2 đoạn code trên là Jass có thêm phần
local ......

set .... = null

đây là phần khai báo biến và phần hủy biến khi ko còn dùng nó nữa
Còn mọi thứ còn lại vẫn nguyên đai, nguyên kiện :D

Tuy nhiên đây mới chỉ là phiên bản Jass Dài dòng của phép này... Đợi mấy hôm nữa tôi sẽ post tiếp những phiên bản ngắn hơn của phép này

Còn đây là map Jass:
 

Attachments

Anh Hythadk ơi, anh có bản dịch của cái hướng dẫn sử dụng Jass không? Nếu có send em.
Tiện thể em hỏi luôn, nếu em muốn làm chưởng như sau thì làm thế nào:
Khi em dùng, lập tức em biến mất, thay vào đó là một một thằng quân nó(unit hay hero). Nhưng nó lại ở dưới hình dạng của em, và ăn đòn được của đồng đội nó và cả quân em trong 1 thời gian nhất định rồi mới hiện nguyên hình là nó. Lúc ấy hero em tàng hình.
Tiện thể anh cho em xin cả YM nữa nhé
 
nhân dịp topic đóng cửa vào 11-9 sì pam cái

nói nghe khá khó hiểu nên ko giúp được bạn !!! Kể tỷ mỷ hơn được ko ?

Mình phép mimic như sau: chỉ có tác dụng giả dạng và khá độc đáo
- Copy chính xác hình dạng của đối tượng + ability của nó nữa
- Sau đó có thể lọt vào đội ngũ của quân địch để do thám
- Sẽ mất tác dụng trong 1 phút hoặc tấn công quân hoặc thành của đối phương
Đợi để mình nhớ lại cách làm đã :D sẽ nhanh thôi !
 
anh Hythadk ơi, em cần nik YM của anh mà. Hay anh add nik em đi. Nik em là [email protected]

Còn chi tiết chưởng em muốn làm là như sau
Khi dùng nó, chọn muc tiêu là một unit bất kì(quân nó, quân ta và cả hero 2 bên nữa) trong một khoảng cách nhất định(tầm 700range). Rồi khi ta sử dụng phép, hero với mục tiêu đổi chỗ cho nhau. Mục tiêu mang hình dạng của hero, bị ăn của cả 2 bên quân địch và cả quân ta. Còn hero ta thì tàng hình tại vị trí của mục tiêu. Tuy nhiên skill thì không đổi. Sau 3s thì mục tiêu trở lại hình dạng bình thường. Còn sau 1 phút, ta mới hết tàng hình.
 
anh hương dẫn cách làm multiboard đi anh...
 
Tớ muốn làm 1 hệ thống Select Heroes theo kiểu các Heroes xếp hàng sẵn, người xem click vào con Hero đó sẽ xem được các chiêu thức và có 1 button để khi hài lòng có thể click và chọn con Hero đó không biết viết như thế nào nhỉ.
 
Không biết hỏi thế này là có ý j` nhỉ TTM? ;))
 
Tớ muốn làm 1 hệ thống Select Heroes theo kiểu các Heroes xếp hàng sẵn, người xem click vào con Hero đó sẽ xem được các chiêu thức và có 1 button để khi hài lòng có thể click và chọn con Hero đó không biết viết như thế nào nhỉ.

Ko biết ý bạn có phải là thế này ko : zzz khi mình click vào hero thì sẽ nhìn thấy icon cùng với description của spell ở dưới, và có 1 button để khi mình click vào đó sẽ select đc hero đó, nếu vậy thì theo mình có thể làm như sau : tạo 1 con hero(neutral passive), set is building=true, tạo các spell passive ( kiểu như mấy cái aura ) với icon và description của spell hero. Sau đó set sell unit=hero mình muốn, chỉnh max stock=1 rồi làm 1 cái trigger remove sau khi select zzz. Mình có kèm theo cái map để test :http://d.turboupload.com/d/940791/SelectHeroTest.w3x.html
Mà hình như bạn đang đùa :D, vì mình nghe nói Dương Kỵ Minh pro map maker lắm mà zzz
 
hệ thống đây nhan nhản ở ngoài đường ấy, đầy, hầu hết là copy từ hệ thống select của Verxorian
Còn anh ấy Pro là ở thế kỷ trước rồi, còn giờ ở thế kỷ này thì cũng ko rõ lắm !
Theo xét đoán thì cỡ chỉ = zeka
 
uhm, tại nghe nói box War đang tổ chức thánh chiến zì đấy ghé wa thăm Zeddy. Sẵn xem gã devil và zeka còn làm map ko. Coi mòi AR ko ghé box nữa nhỉ.

Câu hỏi trên để tìm hiểu xem các bạn code jass có hiểu về jass ko hay chỉ copy system của người khác đó mà :p sorry. Anyway, thánh chiến thành công nhé :D
 
àh mà hóa ra là thế !!
Mà bạn có làm được cái đó ko mà nói ghê thế ? Có thể bỏ chút thời gian làm lại cái đó cho mọi người cùng xem được ko zậy ?
Vì sẵn tiện chưa ai làm cái đó mà
 
Cái select hero của vexorian thì trên mạng có đầy, đọc trong đó thì cũng dễ hiểu thôi mà, có gì đâu zzz, còn làm thì cũng làm đc, nhưng nghĩ ra và chuẩn hóa thì vexorian làm trước rồi, làm lại làm gì nữa.
Mà tìm đc cái hệ thống phóng missle của vexorian rồi, hóa ra cũng không phức tạp lắm zzz
Nhân tiện cho hỏi bạn đang dùng tool gì vậy, JassShopPro à ?
Hình như forum này hơi ít người biết JASS zzz, có lẽ sắp tới cố gắng viết với dịch cái tutorial về JASS lên cho mọi người zzz
 
bỏ làm map cũng 2 năm rồi, giờ thì đế cái hotkey convert Trigger ấy xang text tôi còn quên. Ngày xưa code jass thì tôi ko dùng tool, nhưng còn nhớ thuật toán.

Ai chả biết kiến thức là bất tận nhưng coi mòi các bạn quá giỏi và thấy chẳng ai bằng mình rồi đấy. Trình độ tôi thì ko dám so sánh với các cậu, tôi chỉ cỡ = 1/10 Zeka hay Devil hay Amount Reaper thôi. Tức là thuộc vào hạng con gà cúm trong những con gà đang họp làm map ^^ Chúc các cậu mãi sống trên đỉnh vinh quang và tự mãn mãi nhé.
 
bỏ làm map cũng 2 năm rồi, giờ thì đế cái hotkey convert Trigger ấy xang text tôi còn quên. Ngày xưa code jass thì tôi ko dùng tool, nhưng còn nhớ thuật toán.

Ai chả biết kiến thức là bất tận nhưng coi mòi các bạn quá giỏi và thấy chẳng ai bằng mình rồi đấy. Trình độ tôi thì ko dám so sánh với các cậu, tôi chỉ cỡ = 1/10 Zeka hay Devil hay Amount Reaper thôi. Tức là thuộc vào hạng con gà cúm trong những con gà đang họp làm map ^^ Chúc các cậu mãi sống trên đỉnh vinh quang và tự mãn mãi nhé.

Ấy ấy đại ca đừng nói thế đàn em tổn thọ zzz, đùa thôi chứ về làm map thì mình vẫn luôn biết là còn kém mà ( hỏi dnt thì bít, mình còn hỏi nó ym của bạn để vào học hỏi mà :D )ko bít đã có câu nào để bạn nghĩ mình tự mãn chưa nữa zzz, mà nếu chẳng may có thì cho mình sry nhá :(
Mà nhân tiện hỏi luôn bạn có cái script tính sin, cos ko, dùng cái deffault của WE thì hình như nó bị lag !
 
Back
Top