Topic hỏi đáp về cách làm map | version 10

Status
Không mở trả lời sau này.

Tom_Kazansky

<b><font color="RoyalBlue"><font face="Lucida Cons
Tham gia ngày
28/12/06
Bài viết
3,454
Reaction score
462
Anh em có vấn đề gì về cách làm map hãy hỏi, ai biết sẽ trả lời.

Nghiêm cấm việc:
- ko trả lời mà cứ chat nhảm 3:-O
- trả lời ko rõ ràng :@)
- trả lời với "hình như"

Khi trả lời nếu có trigger phải cho vào code tag: [code]<trigger cho vô đây>[/code] hoặc dùng biểu tượng:
code.gif


Trả lời câu hỏi của ai, ở post nào phải quote (trích dẫn) rõ ràng. :bz

ai muốn "thank" người đã giúp mình thì thay vì post 1 bài nói thank hãy click vào biểu tượng
reputation-40b.png
để thank :) (chú ý: ai chưa post đủ 50 bài sẽ ko thấy nút "Thanks", muốn thank thì vào profile của ng` kia, dùng VM (Visitor Message - Lời Nhắn) để thank)

à trước khi hỏi gì, hãy đọc các topic chú ý:
- Một số bài viết đáng chú ý của box
- Tổng hợp các bài hướng dẫn
- WE - object toàn thư
Đồng thời tìm kiếm trong các topic hỏi đáp:
----
ai có vấn đề gì ở topic cũ mà chưa đc trả lời hãy quote sang đây (chỉ đc quote 24h 1 lần với mỗi vấn đề chưa đc trả lời)
 
anh Tom cho em hỏi sao lại em thay chữ normal bằng chữ spell trong action này thì nó báo lỗi :
Code:
Custom script: call UnitDamageTarget( udg_SlayerCaster, udg_PickedUnit[1], udg_SlayerReal[2], false, true, ATTACK_TYPE_SPELL, DAMAGE_TYPE_NORMAL, null )Chẳng nhẽ chỉ deal dam norlmal được thui sao
Quote lại câu hỏi từ topic trước.
View attachment 133866
 
Cho em xin demo map spell Wild Axe ( giống 90% Dota, dealing 2 lần dame của 2 rìu lên và về - tức trigger slide rìu ko gây dame) Thanks trước các tiền bối.
Requote lần 2, ai giúp dùm mình cái
 
anh Tom cho em hỏi sao lại em thay chữ normal bằng chữ spell trong action này thì nó báo lỗi :
Code:
Custom script: call UnitDamageTarget( udg_SlayerCaster, udg_PickedUnit[1], udg_SlayerReal[2], false, true, ATTACK_TYPE_SPELL, DAMAGE_TYPE_NORMAL, null )Chẳng nhẽ chỉ deal dam norlmal được thui sao
Các loại attack type:
ATTACK_TYPE_CHAOS
ATTACK_TYPE_HERO
ATTACK_TYPE_MAGIC
ATTACK_TYPE_NORMAL
ATTACK_TYPE_MELEE
ATTACK_TYPE_PIERCE
ATTACK_TYPE_SIEGE

ATTACK_TYPE là trợ giúp cách thức tính damage. Vào Game Constants sẽ rõ
DAMAGE_TYPE là dam đó thuộc loại gì
 
Chỉnh sửa cuối:
Hỏi cách install file LUA. Mình muốn install file Lua này thì làm thế nào?

Nếu mình hiểu trong link nó nói thế nào thì đã ko post lên đây để ăn tạ :(
LUA_FILE_HEADER must be installed for each map. LUA_FILE_HEADER script should not be deleted out of a map once installed. To install, change FILENAME and FILE_NAME to the name of your file
Mã:
//! i function getfilename()
    //! i return FILENAME
//! i end
Mã:
//! import "luajass.FILE_NAME.j"

Đây là LUA của mình
Mã:
//! import "luajass.Libram.j"
Nhưng trigger đã Disable như vậy ko biết đã install LUA chưa?
 
Last edited by a moderator:
Nếu mình hiểu trong link nó nói thế nào thì đã ko post lên đây để ăn tạ :(

Mã:
//! i function getfilename()
    //! i return FILENAME
//! i end
Mã:
//! import "luajass.FILE_NAME.j"

Đây là LUA của mình
Mã:
//! import "luajass.Libram.j"
Nhưng trigger đã Disable như vậy ko biết đã install LUA chưa?

ĐÃ . Và sau khi save + close rồi open và viết lại
Mã:
////! import "luajass.Libram.j"
 
View attachment 133883
Attack_type_normal .
Tình hình là câu trả lời của bạn thât ... :| Mình hỏi sao nó lỗi nếu thay NORMAL = SPELL
Các loại attack type:
ATTACK_TYPE_CHAOS
ATTACK_TYPE_HERO
ATTACK_TYPE_MAGIC
ATTACK_TYPE_NORMAL
ATTACK_TYPE_MELEE
ATTACK_TYPE_PIERCE
ATTACK_TYPE_SIEGE

ATTACK_TYPE là trợ giúp cách thức tính damage. Vào Game Constants sẽ rõ
DAMAGE_TYPE là dam đó thuộc loại gì
ATTACK TYPE thì bạn còn liệt kê thiếu SPELL ( Khác MAGIC ) và câu hỏi thì mình đã để ở trên :|
Theo mình biết thì người ta hay dùng Damage type normal và universal.
 
View attachment 133883
Tình hình là câu trả lời của bạn thât ... :| Mình hỏi sao nó lỗi nếu thay NORMAL = SPELL

ATTACK TYPE thì bạn còn liệt kê thiếu SPELL ( Khác MAGIC ) và câu hỏi thì mình đã để ở trên :|
Theo mình biết thì người ta hay dùng Damage type normal và universal.

Chỉ có những loại ATTACK_TYPE mà vuongkk kể trên thôi...
 
Mình hỏi sao nó lỗi nếu thay NORMAL = SPELL

đơn giản: không có ATTACK_TYPE_SPELL

attack type spells ở GUI sang jass nó là ATTACK_TYPE_NORMAL

tạo 1 trigger, viết lệnh Unit - Damage Target có kiểu attack là spells rồi convert ra JASS là thấy ngay thôi /:)
 
Cho mình hỏi làm sao để item cộng evade cộng dồn với nhau.
Ví dụ : 1 item + 10 evade , mặc 3 cái thì được 30 evade. Hoặc item + evade và item + evade(của Ablility Critical Strike) , mặc cả 2 item evade được cộng dồn.
Cám ơn.
 
Các pro cho hỏi, đối với dạng spell slide ( tức có 2 trigger 1 cái vào skill và 1 cái silde - có every x seconds) nên gắn trigger gây dame vào trigger every x seconds thì lượng dame gây ra hơi bị to, có cách nào set dame 1 cách nhất định - nghĩa là ví dụ thằng Hero đó slide 1 đoạn đường thằng thì toàn bộ creep trên đoạn đường đó dealing 1 lần dame duy nhất với 1 số nhất định.
 
^
Ý của bạn Drake hỏi cũng giống vs ý định của mình vs những dạng spell wave hay slice .
VD: khi mình đặt condition cho cái group mình cần deal dam là ko thuộc 1 Group A chẳng hạn.
Khi pick xong và deal dam thì add mấy cái Picked unit này vào Group A ( để nó ko deal dam lần thứ 2 lên 1 unit )
Nhưng kiểu gì cũng có vài em bị nhận dam lần thứ 2 , thậm chí thứ 3.:))
Hỏi : có cách khác khắc phục ko :-?
 
Cho mình hỏi làm sao để item cộng evade cộng dồn với nhau.
Ví dụ : 1 item + 10 evade , mặc 3 cái thì được 30 evade. Hoặc item + evade và item + evade(của Ablility Critical Strike) , mặc cả 2 item evade được cộng dồn.
Cám ơn.

thì check đủ 3 cái items xài remove cả 3 rùi tạo 1 cái items tác dụng 30 evade thôi :|
chỉ có cách này :|
Các pro cho hỏi, đối với dạng spell slide ( tức có 2 trigger 1 cái vào skill và 1 cái silde - có every x seconds) nên gắn trigger gây dame vào trigger every x seconds thì lượng dame gây ra hơi bị to, có cách nào set dame 1 cách nhất định - nghĩa là ví dụ thằng Hero đó slide 1 đoạn đường thằng thì toàn bộ creep trên đoạn đường đó dealing 1 lần dame duy nhất với 1 số nhất định.

có thể sử dụng integer để check dmg(integerdmg) lớn hơn integer đặt là nothing!
 
Mọi người cho mình xin trigger hiển thị thời gian 5phút đếm ngược giống như liên đấu của Thiên Kiếm. Hết 5 phút thì move all player đến khu vực liên đấu. Trong khi liên đấu, cũng có 1 thời gian đếm ngược 1phút, hết 1phút đó thì hết liên đấu. (giống Thiên Kiếm luôn nha).
 
Thế có ai cho cái demo để xem thử ko :|, nói chung chung ko pó tay
 
Các pro cho hỏi, đối với dạng spell slide ( tức có 2 trigger 1 cái vào skill và 1 cái silde - có every x seconds) nên gắn trigger gây dame vào trigger every x seconds thì lượng dame gây ra hơi bị to, có cách nào set dame 1 cách nhất định - nghĩa là ví dụ thằng Hero đó slide 1 đoạn đường thằng thì toàn bộ creep trên đoạn đường đó dealing 1 lần dame duy nhất với 1 số nhất định.
Đay là câu trả lời:
Ý của bạn Drake hỏi cũng giống vs ý định của mình vs những dạng spell wave hay slice .
VD: khi mình đặt condition cho cái group mình cần deal dam là ko thuộc 1 Group A chẳng hạn.
Khi pick xong và deal dam thì add mấy cái Picked unit này vào Group A ( để nó ko deal dam lần thứ 2 lên 1 unit )
Còn việc:
Nhưng kiểu gì cũng có vài em bị nhận dam lần thứ 2 , thậm chí thứ 3.:))
Hỏi : có cách khác khắc phục ko :-?
Bạn chú ý những thứ như sau:
Group đã add vào (Group A) như bạn nói không được xóa leak (DestroyGroup) mà chỉ Clear Group.
Nếu group là Array (Group[1], Group[2]...) thì khi khai báo biến sửa con số Size cho bằng với số Group sẽ sử dụng.
 
Cho mình hỏi làm sao để move cái dummy từ từ thành vòng tròn. Như dùng bjck nguyên trong TK. Chứ con của e dùng nó bay cái vèo k thấy gì lun @@
 
lonewolf fix dùm tui cho nó dealing dame 1 lần ( thêm cái damegroup ấy) tui nhìn rối wa :|
Mã:
WE Trigger 1
    Events
        Unit - A unit Starts the effect of an ability
    Conditions
        (Ability being cast) Equal to Wild Axe 
    Actions
        For each (Integer A) from 1 to 2, do (Actions)
            Loop - Actions
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        WE_Dummy[(Integer A)] Equal to No unit
                    Then - Actions
                        Do nothing
                    Else - Actions
                        Unit - Kill WE_Dummy[(Integer A)]
                        Custom script:   call RemoveLocation(udg_WE_Location[bj_forLoopAIndex])
                        Trigger - Turn off WE Action <gen>
        Set WE_Caster = (Triggering unit)
        Set WE_Location[1] = (Position of WE_Caster)
        Set WE_Location[2] = (Target point of ability being cast)
        Set WE_Angle[1] = ((Angle from WE_Location[1] to WE_Location[2]) - 27.00)
        Set WE_Angle[2] = ((Angle from WE_Location[1] to WE_Location[2]) + 27.00)
        Set WE_Distance = (Distance between WE_Location[1] and WE_Location[2])
        For each (Integer A) from 1 to 2, do (Actions)
            Loop - Actions
                Set WE_Integer[(Integer A)] = 0
                Unit - Create 1 Wild Axe for (Owner of WE_Caster) at WE_Location[(Integer A)] facing WE_Angle[(Integer A)] degrees
                Set WE_Dummy[(Integer A)] = (Last created unit)
                Unit - Turn collision for WE_Dummy[(Integer A)] Off
        Trigger - Turn on WE Action <gen>
        Custom script:   call RemoveLocation( udg_WE_Location[1] )
Mã:
WE Action
    Events
        Time - Every 0.01 seconds of game time
    Conditions
    Actions
        Set WE_Location[1] = (Position of WE_Caster)
        For each (Integer A) from 1 to 2, do (Actions)
            Loop - Actions
                Unit - Move WE_Dummy[(Integer A)] instantly to (WE_Location[1] offset by (WE_Distance x (Sin((1.00 x (Real(WE_Integer[(Integer A)])))))) towards WE_Angle[(Integer A)] degrees), facing WE_Angle[(Integer A)] degrees
                Set WE_Integer[(Integer A)] = (WE_Integer[(Integer A)] + 1)
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Integer A) Equal to 1
                    Then - Actions
                        Set WE_Angle[(Integer A)] = (WE_Angle[(Integer A)] + 0.30)
                    Else - Actions
                        Set WE_Angle[(Integer A)] = (WE_Angle[(Integer A)] - 0.30)
                Unit Group - Pick every unit in (Units within 150.00 of (Position of WE_Dummy[(Integer A)]) matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is A structure) Equal to False) and (((Matching unit) belongs to an enemy of (Owner of WE_Caster)) Equal to True)))) and do (Actions)
                    Loop - Actions
                        [COLOR="Red"]Unit - Cause WE_Caster to damage (Picked unit), dealing ((Real((Level of Wild Axe  for WE_Caster))) x 2.00) damage of attack type Chaos and damage type Universal[/COLOR]
                Destructible - Pick every destructible within 100.00 of (Position of WE_Dummy[(Integer A)]) and do (Actions)
                    Loop - Actions
                        Destructible - Kill (Picked destructible)
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        WE_Integer[(Integer A)] Equal to 180
                    Then - Actions
                        Trigger - Turn off (This trigger)
                        Unit - Remove WE_Dummy[(Integer A)] from the game
                        Custom script:   call RemoveLocation(udg_WE_Location[bj_forLoopAIndex])
                        Set WE_Dummy[(Integer A)] = No unit
                        Set WE_Caster = No unit
                    Else - Actions
        Custom script:   call RemoveLocation( udg_WE_Location[1] )
 
^
ko set Group sao xóa leak :-?
dưới dòng đỏ thì thêm action Add picked unit vào 1 Group A , thêm condition cho cái chỗ pick group là matching unit ko thuộc Group A

Đay là câu trả lời:

Còn việc:

Bạn chú ý những thứ như sau:
Group đã add vào (Group A) như bạn nói không được xóa leak (DestroyGroup) mà chỉ Clear Group.
Nếu group là Array (Group[1], Group[2]...) thì khi khai báo biến sửa con số Size cho bằng với số Group sẽ sử dụng.
Làm như vậy có bị leak ko ( 0.0x s 1 phát :o) và clear khi nào :-?
Thường thì mình dùng Group array cho tiện .Group1 deal dam và Group2 để check , sau mỗi lần deal dam mình chỉ xóa leak Group1 còn Group2 đến cuối trigger mình mới xóa mà nó vẫn bị trùng dam.:(
Vụ thêm Size mình chưa thử bao giờ vì cho đến bây h mình vẫn chưa hiểu rõ lắm ý nghĩa của Size. :|
 
Chỉnh sửa cuối:
Làm như vậy có bị leak ko ( 0.0x s 1 phát :o) và clear khi nào :-?
Thường thì mình dùng Group array cho tiện .Group1 deal dam và Group2 để check , sau mỗi lần deal dam mình chỉ xóa leak Group1 còn Group2 đến cuối trigger mình mới xóa mà nó vẫn bị trùng dam.:(
Vụ thêm Size mình chưa thử bao giờ vì cho đến bây h mình vẫn chưa hiểu rõ lắm ý nghĩa của Size. :|
Spell này mình lấy được từ lâu rồi... và nó leak là chắc. @@!
Làm Group như vậy đã nói rồi: Group nhận unit đã deal dam không được Destroy dù sau khi chạy hết spell chứ không phải cuối trigger, cuối trigger mà xóa thì khác gì add vào như không. Chỉ Clear khi spell đã hết (hết slide).
Tạo Group Array như bạn nói cần Size = 2 vì đây là 1 dạng khai báo khi Preload, nếu ko có nó thì vào game chỉ có Group[1] có sẵn dù chưa trại spell. Group[2] không được set trong trigger, không được preload => không tồn tại trước => không thể add unit vào 1 Group không tồn tại.

lonewolf fix dùm tui cho nó dealing dame 1 lần ( thêm cái damegroup ấy) tui nhìn rối wa :|
[spoil]
Mã:
WE Action
    Events
        Time - Every 0.01 seconds of game time
    Conditions
    Actions
        Set WE_Location[1] = (Position of WE_Caster)
         Do Multiple ActionsFor each (Integer A) from 1 to 2, do (Actions)
            Loop - Actions
                Unit - Move WE_Dummy[(Integer A)] instantly to (WE_Location[1] offset by (WE_Distance x (Sin((1.00 x (Real(WE_Integer[(Integer A)])))))) towards WE_Angle[(Integer A)] degrees), facing WE_Angle[(Integer A)] degrees
                Set WE_Integer[(Integer A)] = (WE_Integer[(Integer A)] + 1)
                 Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Integer A) Equal to (==) 1
                    Then - Actions
                        Set WE_Angle[(Integer A)] = (WE_Angle[(Integer A)] + 0.30)
                    Else - Actions
                        Set WE_Angle[(Integer A)] = (WE_Angle[(Integer A)] - 0.30)
                [B][COLOR="Blue"]Set WE_Damage[(Integer A)] = (Units within 150.00 of (Position of WE_Dummy[(Integer A)]) matching ((((Matching unit) is A structure) Equal to (==) False) and ((((Matching unit) is in WE_DamageDone[(Integer A)]) Equal to (==) False) and (((Matching unit) belongs to an enemy of (Owner of W
                Unit Group - Pick every unit in WE_Damage[(Integer A)] and do (Actions)
                    Loop - Actions
                        Unit - Cause WE_Caster to damage (Picked unit), dealing ((Real((Level of Wild Axe  for WE_Caster))) x 2.00) damage of attack type Chaos and damage type Universal
                        Unit Group - Add (Picked unit) to WE_DamageDone[(Integer A)]
                        Special Effect - Create a special effect attached to the overhead of (Picked unit) using Objects\Spawnmodels\Orc\Orcblood\BattrollBlood.mdl
                        Special Effect - Destroy (Last created special effect)
                Custom script:   call DestroyGroup(udg_WE_Damage[bj_forLoopAIndex])[/COLOR][/B]
                Destructible - Pick every destructible within 100.00 of (Position of WE_Dummy[(Integer A)]) and do (Actions)
                    Loop - Actions
                        Destructible - Kill (Picked destructible)
                 Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        WE_Integer[(Integer A)] Equal to (==) 180
                    Then - Actions
                        Trigger - Turn off (This trigger)
                         [B][COLOR="Blue"]Do Multiple ActionsFor each (Integer A) from 1 to 2, do (Actions)
                            Loop - Actions
                                Custom script:   call RemoveLocation(udg_WE_Location[bj_forLoopAIndex])
                                Custom script:   call DestroyGroup(udg_WE_Damage[bj_forLoopAIndex])
                                Unit Group - Remove all units from WE_DamageDone[(Integer A)]
                                Set WE_Dummy[(Integer A)] = No unit
                                Unit - Remove WE_Dummy[(Integer A)] from the game[/COLOR][/B]
                        Set WE_Caster = No unit
                    Else - Actions
        Custom script:   call RemoveLocation( udg_WE_Location[1] )
[/spoil]

Tom: nên cho (Integer A) vào biến
 
Chỉnh sửa cuối:
Status
Không mở trả lời sau này.
Back
Top