[Tutorial] GUI to JASS

Thảo luận trong 'World Editor' bắt đầu bởi Tom_Kazansky, 2/8/08.

  1. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    đơn vị góc trong JASS là Radian

    bj_DEGTORAD để đổi từ độ (degree) ra radian.
     
  2. mvcthinh

    mvcthinh Mr & Ms Pac-Man

    Tham gia ngày:
    18/8/11
    Bài viết:
    140
    Nơi ở:
    HCM
    Cho hỏi set real x như thế này có bị leak không ???

    set real x=GetLocationX (GetSpellTargetLoc())

    đang làm tập làm dùng real thay vì location .. không biết làm thế này có bị leak không .. vì làm Spell không có Unit Target mà có target point nên đang phân vân.. không biết còn cách khác không nhỉ.. nếu còn có thể chỉ luôn cho mình đi :D
     
    Chỉnh sửa cuối: 16/9/11
  3. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    có leak!

    và, có:

    Mã:
    local real x = GetSpellTargetX()
    local real y = GetSpellTargetY()
    
     
  4. mvcthinh

    mvcthinh Mr & Ms Pac-Man

    Tham gia ngày:
    18/8/11
    Bài viết:
    140
    Nơi ở:
    HCM
    Tks anh Tom ^^...
    Còn thêm cái vụ này nữa..
    cũng không rõ cách làm thế nào vì trước giờ làm toàn với point chứ chưa làm với tọa độ. Nên anh Tom hướng dẫn giúp e luôn.

    Đó là vấn đề PolarProjectionBJ trong JASS.. thông thường thì thao tác với point quen rồi nhưng qua tọa độ nếu không dùng point mà dùng tọa độ x,y thì e chưa rõ cách làm thế nào.

    Ví dụ khoảng cách di chuyển vật xa dần thừ 1 điểm tọa độ x,y.
    Và khoảng cách không thay đổi nhưng vật xoay vòng theo 1 vòng tròn ..(lệnh theo gốc bao nhiu ý).

    Raivor có đưa ví dụ nhưng chưa hiểu cụ thể lắm. A hoặc Raivor hoặc ai rành vụ này hướng dẫn lại cho e với.
     
  5. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    Mã:
    function PolarProjectionBJ takes location source, real dist, real angle returns location
        local real x = GetLocationX(source) + dist * Cos(angle * bj_DEGTORAD)
        local real y = GetLocationY(source) + dist * Sin(angle * bj_DEGTORAD)
        return Location(x, y)
    endfunction
    
    (polar projection point) ppPoint ( x', y' ) tính từ gốc source (x, y) với khoảng cách dist theo hướng angle

    PolarProjectionBJ lấy x,y của source, tính ra x', y' rồi trả về point (vì vậy nên tôi mới bảo nó chậm =)))


    x' = x + dist * Cos( angle * bj_DEGTORAD ) // Cos này dùng đơn vị Radian nên angle phải nhân với bj_DEGTORAD
    y' = y + dist * Sin( angle * bj_DEGTORAD ) // Sin này dùng đơn vị Radian nên angle phải nhân với bj_DEGTORAD


    hoặc:

    angle = angle * bj_DEGTORAD // đổi angle ra Radian
    x' = x + dist * Cos( angle ) // do angle đã được đổi ra Radian nên không cần * bj_DEGTORAD nữa
    y' = y + dist * Sin( angle )


    còn việc xoay vòng tròn thì:


    dist: bán kính vòng tròn, không thay đổi
    angle: tăng dần nếu xoay ngược chiều kim đồng hồ, giảm thì xoay theo chiều kim đồng hồ


    việc tăng/giảm bao nhiêu thì bạn phải tự tính
     
    Chỉnh sửa cuối: 16/9/11
  6. mvcthinh

    mvcthinh Mr & Ms Pac-Man

    Tham gia ngày:
    18/8/11
    Bài viết:
    140
    Nơi ở:
    HCM
    Giờ em muốn làm Knock back với Jass... nhưng mà không biết dùng lệnh này để khi búa Storm Hammer vừa trúng Unit là sẽ bắt đầu KnockBack.. làm mãi mà nó cứ chạy trước khi búa chạm không à +_+.. anh biết không chỉ cái lệnh cho em bắt với.

    ___
    Tiện thể cho e hỏi luôn.. khi đã có tọa độ x y , có trường hợp muốn kêu Location đó thì mình dùng Location(x,y) được không . có bị leak không ?
     
    Chỉnh sửa cuối: 16/9/11
  7. vuongkkk

    vuongkkk T.E.T.Я.I.S

    Tham gia ngày:
    22/5/10
    Bài viết:
    588
    Nơi ở:
    Hà Nội
    Bạn nên đọc cái này trước khi hỏi nó có leak hay ko :) ==>> Memory Leak and Custom Script

    không biết dùng lệnh nào để khi búa Storm Hammer vừa trúng Unit là sẽ bắt đầu KnockBack?
    Khi bắt đầu effect Storm Hammer thì :
    TriggerRegistUnitEvent (trig, GetSpellTargetUnit(), EVENT_UNIT_DAMAGED)
    add Actions:
    Kiểm tra khi unit bị dam mà dính buff Stun hay gì gì đó do Storm Hammer gây ra thì bắt đầu knockback
    Nhớ call DestroyTrigger (GetTriggeringTrigger()) => tránh nhầm với các thứ khác

    Đại loại là như thế... Nhưng nếu mình ko nhầm là topic GUI to Jass vậy GUI của bạn đâu :|. Hình như post cái này vào Topic hỏi đáp thì mới đúng :-?
     
    Chỉnh sửa cuối: 17/9/11
  8. mvcthinh

    mvcthinh Mr & Ms Pac-Man

    Tham gia ngày:
    18/8/11
    Bài viết:
    140
    Nơi ở:
    HCM
    anh TOM cho em hỏi.. mình dùng thẻ Scope TEM ở 1 trigger ... sau đó khai báo private function A
    vậy bây giờ mình muốn qua 1 trigger khác thì mình gọi cái function A bên Scope TEM như thế nào anh?
     
    Chỉnh sửa cuối: 18/9/11
  9. vuongkkk

    vuongkkk T.E.T.Я.I.S

    Tham gia ngày:
    22/5/10
    Bài viết:
    588
    Nơi ở:
    Hà Nội
    private tức là riêng tư ko lấy được từ bên ngoài.
    Muốn lấy được phải khai báo public function => cách lấy theo như ví dụ bạn sẽ là call TEM_A()
    Còn nếu ko có bổ từ truy cập ở đằng trước thì lấy như function bt, tên thế nào gọi thế

    Hình như post cái này vào Topic hỏi đáp thì mới đúng :-? Coi chừng Tom cho ăn thẻ phạt =,=!
    Mình thì nhớ mấy vấn đề về vjass như bạn hỏi hoàn toàn có trong jassmanual của JNG ....
     
  10. mvcthinh

    mvcthinh Mr & Ms Pac-Man

    Tham gia ngày:
    18/8/11
    Bài viết:
    140
    Nơi ở:
    HCM
    PHP:
    private function Stop takes nothing returns boolean
    local unit caster 
    GetSpellAbilityUnit()
    local integer array Buff
    local integer tick
    set Buff
    [0] = 'BSTN'
    set Buff[1] = 'BPSE'
    set Buff[2] = 'Bena'
    set Buff[3] = 'Bens'
    set Buff[4] = 'Beng'
    set Buff[5] = 'BEer'
    set Buff[6] = 'BUsl'
    set Buff[7] = 'BUsp'
    set Buff[8] = 'BUst'
    set Buff[9] = 'BNsi'
    set Buff[10] = 'BUsp'
    set Buff[11] = 'BOhx'
    set Buff[12] = 'BUim'
    set Buff[13] = 'Bcrs'
    set Buff[14] = 'BNso'


                    
    set tick 0
                       loop
                            exitwhen tick 
    >14
                            
                            
    if UnitHasBuffBJ(caster,Buff[tick]) ==true then
                                
    return false
                                
    else
                                return 
    true
                            
    endif
                            
    set tick=tick+1
                        endloop
                       
        
    return false
       
    endfunction
    PHP:

    private function action ....

    if 
    Stop()==true then
    // hành động


    endif

    endfunction
    Cho mình hỏi sao đoạn script này nó không xảy ra.
    Chả là mình có ý định check buff. nếu có buff thì action không xảy ra.. do nhìu buff nên gom nó vào 1 function như trên.. nhưng sau khi gom vào thì không có tác dụng nữa.. có ai giải thích cách làm dùm mình với.
     
  11. KuKulKan

    KuKulKan T.E.T.Я.I.S

    Tham gia ngày:
    2/8/09
    Bài viết:
    629
    Nơi ở:
    Quận Thủ Đức, Thành phố Hồ Chí Minh
    Cái phần kiểm tra xem có buff hay không đấy, ý bạn là muốn xem Hero có những buff đó thì ko thực hiện Action, làm như trên thì chỉ xét được cái buff đầu tiên trong mảng rùi trả về true or false...mấy cái sau thì không được xét rồi...

    Chỉ cần bỏ cái else return true đi, rùi cuối hàm return true là ok
     
  12. Ranknjk

    Ranknjk Youtube Master Race

    Tham gia ngày:
    21/6/11
    Bài viết:
    16
    Xem kĩ lại thấy hài quá:
    Unit has buff => return false

    có ai có thể hướng dẫn cho mình về struct và sử dụng nó để làm system đc ko?

    ---------- Post added at 09:43 ---------- Previous post was at 09:38 ----------

    mvcthinh: Bỏ hai dòng là return falseelse ở loop là ok
     

Chia sẻ trang này