Topic hỏi đáp cho anh em (Về cách làm map)

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

Trạng thái chủ đề:
Không mở trả lời sau này.
  1. Zekareisoujin

    Zekareisoujin C O N T R A

    Tham gia ngày:
    24/8/04
    Bài viết:
    1,899
    Nơi ở:
    Everywhere in Nowhere
    Có thể giới hạn bằng cách dùng GetLocalPlayer() -> những ai nhìn được text nào. Giới hạn chỉ show damage của mình hoặc ally do/taken. Cách dùng như thế này:

    Mã:
    //Phía trên này là tạo ra text. Text thì vẫn cứ tạo ra trước.
    call <lệnh hide floating text vừa tạo>
    if GetLocalPlayer()==<condition mà mình muốn, ví dụ damageSource = mình/ally, hoặc triggering unit == mình/ally>
    call <lệnh show floating text... là j` quên roài :P>
    endif
    
    Chung chung là như thế, có j` bác Tom sửa hộ :D.

    @Rex:
    E lười update, với cả project bây h chuyển qua tay thằng khác rồi. Khổ cái thằng này cũng thuộc loại lười, mới ra được 3.2. Bác Rex mod rồi chơi nội bộ cũng được, hoặc nếu cho lên epicwar thì nhớ ghi là bị sửa :D.
     
  2. Dark_DragonKing

    Dark_DragonKing Mr & Ms Pac-Man

    Tham gia ngày:
    23/7/08
    Bài viết:
    217
    cái này nhờ anh Tom rồi nhưng mà có được đâu hay làm hộ cái map demo đi :D
     
  3. Zekareisoujin

    Zekareisoujin C O N T R A

    Tham gia ngày:
    24/8/04
    Bài viết:
    1,899
    Nơi ở:
    Everywhere in Nowhere
    oài, tạm thời xóa hết game để học thì rồi :D, bao h thi xong đã nhé :))
     
  4. WordEditor

    WordEditor C O N T R A

    Tham gia ngày:
    8/9/08
    Bài viết:
    1,509
    Nơi ở:
    Leaf Village
    Em down chương trình nén map về, nhưng sao toàn .zip kô vậy? Không bít cách mở !!! :((
     
  5. Zekareisoujin

    Zekareisoujin C O N T R A

    Tham gia ngày:
    24/8/04
    Bài viết:
    1,899
    Nơi ở:
    Everywhere in Nowhere
    ... xài winzip? Dùng window để extract? Dùng winrar?
     
  6. hyaTHa_dk

    hyaTHa_dk Mr & Ms Pac-Man

    Tham gia ngày:
    10/4/05
    Bài viết:
    235
    Nơi ở:
    Hà Nội
    thực ra khi sử dụng Map Optimizer của Vex, những cái liên quan đến bj ấy cũng đã được fix thành non BJ (thì để làm nhỏ map mà)

    Thực ra Blizzard ko muốn đưa ra Blizzard Junction làm gì đâu, tại vì khi Map Maker nhớ đến lệnh đó, theo cách hiểu thông thường thì hơi bị ngược
    chẳng hạn Create unit

    BJ: create (1) unit (footman) cho (player 1) tại vị trí (point) mắt hường về xyz

    nonBJ: create (player 1) , (unit footman) ở point mắt hường về xyz

    Nếu hiểu theo kiểu vietnamese thì ko sao, nhưng nếu dich ra tiếng việt thì có vần đề rồi.... với bọn tây nó đọc thì cảm thấy hơn khó ... ngược thì đúng hơn nên BJ sinh ra ko phải là thừa

    hay cái AddAbility cũng thế, rõ ràng nếu (ability code) trước, (unit) sau thì dễ hiểu hơn là (unit) trước (ability code) sau của nonBJ ...

    TÓm lại là non hay ko non BJ thì cuối cùng khi dùng Map optimizer, tất cả về non hết ....
    -------------------------------

    CÒn về sleep hay wait, theo em thì dùng timer mới có khả năng gây cash cao hơn, bác cứ thử si pam creep rồi pause hay destroy timer kiểu gì đó xem

    Sleep hay wait thì theo em chỉ không chính xác khi giá trị dưới 0.08
    còn nếu > 0.08, nó hoạt động xem ra đáng tin hơn là timer vì nó ko có HandlerFunction, hơn nữa theo em thì trong cách chia nhỏ process của war, timer rõ ràng nó phải tham chiếu vào phần loop ít nhất là cấp 3 (vì đi kèm TimerStart, còn có thêm HandlerFunction nữa mà, trong khi wait kia thì chạy thẳng vào đồng hồ của war luôn tức là ít nhất loop cấp 2, loop cấp 1 chắc chắn là TriggerRegisterxyzEvent vì khi có war, thì những cái này ko thể ko có, nhưng Timerstart hay wait thì có thể có, có thể ko .... )

    Nên xét về mặt priority, có khi wait sẽ nhanh hơn timer, và TriggerRegisterEvent sẽ nhanh nhất

    Tất nhiên những cái trên cũng chỉ là ý kiến của riêng em mà thôi .....
     
  7. Diệp Thanh

    Diệp Thanh Kirin Tor Moderator Lão Làng GVN

    Tham gia ngày:
    7/2/04
    Bài viết:
    4,398
    Ừ...ý kiến trên ko có gì sai cả..nhưng..
    Timer bây giờ ko ai dùng kiểu destroy cả mà New và Realease (hoạt động rất tốt)
    Spell theo kiểu periodic hoặc wait kiểu này theo anh nên dùng timer..và hầu hết Jasser đều làm vậy..việc chứng minh thì dành cho các cao thủ ..cũng rất nhiều người đồng tình với việc này...
     
  8. WordEditor

    WordEditor C O N T R A

    Tham gia ngày:
    8/9/08
    Bài viết:
    1,509
    Nơi ở:
    Leaf Village
    ::( Ơ...cho em hỏi winzip, winrar là gì ạ... [-O< ...đang cần lắm...
     
  9. dntnguyen

    dntnguyen Mario & Luigi

    Tham gia ngày:
    21/8/04
    Bài viết:
    733
    Cho hỏi làm sao tạo ra 1 trigger jass. Mỗi lần add code thấy có mỗi chỗ cái hình bản đồ của Trigger Editor. Nhưng khi mở 1 số map ra thì thấy nó có 1 trigger jass luôn.
     
  10. Meteor95

    Meteor95 Mario & Luigi

    Tham gia ngày:
    27/4/07
    Bài viết:
    861
  11. WordEditor

    WordEditor C O N T R A

    Tham gia ngày:
    8/9/08
    Bài viết:
    1,509
    Nơi ở:
    Leaf Village
    ( Hic ) Cho em hỏi lần cuối: ::( .....sử dụng thế nào ạ? Nén được em đội ơn lắm lắm ^:)^ Tiện thể xin cảm ơn bạn kia rất nhìu :D
     
  12. Meteor95

    Meteor95 Mario & Luigi

    Tham gia ngày:
    27/4/07
    Bài viết:
    861
    you never know how to use it but I will tell you yeah,yeah lam nhu sau sau ne yeah yeah yeah extract here(sorry hâm mộ Miley quá đừng ban em)
    Dùn winzip lâu ko dùng quên rùi =)) còn dùng winrar mấy cái đó sẽ có hình winrar thì bấm chuột phải rùi extract here.This is ziprar
     
  13. Aveltium

    Aveltium Legend of Zelda

    Tham gia ngày:
    30/9/06
    Bài viết:
    1,022
    Nơi ở:
    HN
    Kô hiểu sao nhiều khi 1 số map khi vào chơi đc 1 lúc, đông đông tí (khoảng 80/100, 6v6) là giật điên cuồng, nhưng kô giật kiểu low frame rate mà kiểu cứ 1 tí lại đứng hình rồi lại chạy tiếp bt, ví dụ đứng hình 1s rồi chạy 1s rồi lại đứng 1s rồi lại chạy 1s ...
    Ai biết cần điều chỉnh những gì trong map để có thể giảm tình trạng này chỉ tui với :D
    (cấu hình: 2gb ddr2, core2duo e4500 2.2ghz, geforce 8600gt 256mb, độ phân giải 1440*900(sửa registry), max settings)
     
  14. hyaTHa_dk

    hyaTHa_dk Mr & Ms Pac-Man

    Tham gia ngày:
    10/4/05
    Bài viết:
    235
    Nơi ở:
    Hà Nội
    Có phải bác rex đang nói đến new và realease của Red TimerUtils của Vex ???


    Mã:
    library_once TimerUtils initializer redInit
    //*********************************************************************
    //* TimerUtils (Red flavor)
    //* ----------
    //*
    //*  To implement it , create a custom text trigger called TimerUtils
    //* and paste the contents of this script there.
    //*
    //*  To copy from a map to another, copy the trigger holding this
    //* library to your map.
    //*
    //* (requires vJass)   More scripts: htt://www.wc3campaigns.net
    //*
    //* For your timer needs:
    //*  * Attaching
    //*  * Recycling (with double-free protection)
    //*
    //* set t=NewTimer()      : Get a timer (alternative to CreateTimer)
    //* ReleaseTimer(t)       : Relese a timer (alt to DestroyTimer)
    //* SetTimerData(t,2)     : Attach value 2 to timer
    //* GetTimerData(t)       : Get the timer's value.
    //*                         You can assume a timer's value is 0
    //*                         after NewTimer.
    //*
    //* Red flavor: Fastest, method in existence for timer attaching,
    //*             only takes an array lookup, H2I and subtraction. 
    //*             However, all the code in your map requires extra care
    //*             not to forget to call ReleaseTimer. It also requires
    //*             to preload a lot of timers at map init, they use
    //*             memory and handle ids.
    //*
    //********************************************************************
    
    //================================================================
        globals
            private constant integer QUANTITY   = 256
            private constant integer ARRAY_SIZE = 8191 //changing this to a higher value would effectively
                                                       //cripple the performance making this thing irrelevant
    
        endglobals
    
        //=================================================================================================
        private function H2I takes handle h returns integer
            return h
            return 0
        endfunction
    
        //==================================================================================================
        globals
            private integer array data[ARRAY_SIZE]
            private integer OFFSET
        endglobals
    
        //It is dependent on jasshelper's recent inlining optimization in order to perform correctly.
        function SetTimerData takes timer t, integer value returns nothing
            debug if(H2I(t)-OFFSET<0) then
            debug     call BJDebugMsg("SetTimerData: Wrong handle id, only use SetTimerData on timers created by NewTimer")
            debug endif
            set data[H2I(t)-OFFSET]=value
        endfunction
    
        function GetTimerData takes timer t returns integer
            debug if(H2I(t)-OFFSET<0) then
            debug     call BJDebugMsg("GetTimerData: Wrong handle id, only use GetTimerData on timers created by NewTimer")
            debug endif
    
            return data[H2I(t)-OFFSET]
        endfunction
    
        //==========================================================================================
        globals
            private timer array tT
            private integer tN = 0
            private constant integer HELD=0x28829022
            //use a totally random number here, the more improbable someone uses it, the better.
        endglobals
    
        //==========================================================================================
        function NewTimer takes nothing returns timer
            if (tN==0) then
                //If this happens then the QUANTITY rule has already been broken, try to fix the
                // issue, else fail.
                debug call BJDebugMsg("NewTimer: Warning, Exceeding TimerUtils_QUANTITY, please increase it for your map, fix your map's timer leaks or switch to blue flavor when applicable")
                set tT[0]=CreateTimer()
                if (H2I(tT[0])-OFFSET<0) or (H2I(tT[0])-OFFSET>=ARRAY_SIZE) then
                    //all right, couldn't fix it
                    call BJDebugMsg("NewTimer: Unable to allocate a timer, you should probably switch to the blue flavor or fix timer leaks.")
                    return null
                endif
            else
                set tN=tN-1
            endif
            call SetTimerData(tT[tN],0)
         return tT[tN]
        endfunction
    
        //==========================================================================================
        function ReleaseTimer takes timer t returns nothing
            if(t==null) then
                debug call BJDebugMsg("Warning: attempt to release a null timer")
                return
            endif
            if (tN==8191) then
                debug call BJDebugMsg("Warning: Timer stack is full, destroying timer!!")
    
                //stack is full, the map already has much more troubles than the chance of bug
                call DestroyTimer(t)
            else
                call PauseTimer(t)
                if(GetTimerData(t)==HELD) then
                    debug call BJDebugMsg("Warning: ReleaseTimer: Double free!")
                    return
                endif
                call SetTimerData(t,HELD)
                set tT[tN]=t
                set tN=tN+1
            endif    
        endfunction
    
        private function redInit takes nothing returns nothing
         local integer i
         local integer last
         local boolean correct
            loop
                set tT[0] = CreateTimer()
                set OFFSET=H2I(tT[0] )
                set i=1
                set correct=true
                loop
                    exitwhen (i==QUANTITY)
                    set tT[i] = CreateTimer()
                    if(H2I(tT[i])-OFFSET<0) or (H2I(tT[i])-OFFSET>=ARRAY_SIZE) then
                        debug call BJDebugMsg("TimerUtils_redInit: Failed a initializing attempt")
                        set correct=false
                        exitwhen true
                    endif
                    set i=i+1
                endloop
                exitwhen correct
            endloop
            set tN=QUANTITY
        endfunction
    
    endlibrary
    Nếu đúng bác dùng cái này thì
    .... thực chất nó cũng là create timer và ... pausetimer mà!!!! ... Vex đâu phải god mà có thể tham gia chèn code vào war3 đc .... nên cuối cùng vẫn phải createtimer mà anh.
    Kể cả về say người ta dùng ... XoaDongHo và TaoDongHo do Rex làm thì nó vẫn phải base trên cái đó ....

    tất nhiên với BlueTimer thì nó sử dụng luôn cái CSData attach nên em ko bàn nhiều mà ở đây bàn đến RedTimer thôi

    cũng mới đọc qua cái này thấy cũng hay, nhưng 1 số chỗ em chỉ nghi nó index các timer bằng số ngẫu nhiên nên chắc chắn sẽ có tầm vài phần nghìn % để có bug, tất nhiên em ko phải chuyên tin nên để hỏi lại xem đã ...

    CÒn về nguyên tắc của RedTimer như bác Rex đã dùng

    Đầu tiên

    * function redInit takes nothing returns nothing
    tạo ra 256 timer (exitwhen (i==QUANTITY)) QUANTITY = 256 ở trên cùng và có thể thay đổi
    sau đó index mỗi cái theo i bắt đầu từ 1 - QUANTITY
    Cuối cùng set tN=QUANTITY = 256 ....... hay

    * function NewTimer takes nothing returns timer
    Nếu Jasser dùng newtimer, set tN=tN-1, tức là bộ đếm lùi cái 256 timer kia

    * function ReleaseTimer takes timer t returns nothing
    Khi relealse timer thì thông báo cho SYStem này biết để pausetimer và - index set tN=tN+1, coi như timer này free to use

    Điểm mạnh ở đây là ko sử dụng DestroyTimer nên tất nhiên tốc độ phải nói là rất nhanh, và tài nguyên bộ nhớ có thể kiểm xoát đc ... tóm lại có nhiều ưu điềm hơn rất nhiều so với cách làm thông thường ... cái này thì em có lẽ đồng ý ....

    Như vậy cái RedTimer này là công cụ quản lý timer giúp jasser đỡ lúng túng để quản lý hộ các timer do họ tạo ra thôi, NÓ VẪN PHẢI BASE TRÊN VIỆC TẠO RA TIMER = CREATETIMER

    Cách index này hồi trước cũng thấy bác tom làm trên GUI để move mấy cái knockback hay gì gì đó đấy ... mà dùng cách này nghĩ lại thấy đc đấy nhỉ, đỡ phải lo nghĩ đến tràn bộ nhớ
     
  15. WordEditor

    WordEditor C O N T R A

    Tham gia ngày:
    8/9/08
    Bài viết:
    1,509
    Nơi ở:
    Leaf Village
  16. vkien

    vkien Donkey Kong

    Tham gia ngày:
    7/3/07
    Bài viết:
    410
    Nơi ở:
    HCM City
    ai cho em cái chương trình đọc map dota với, cai WE ko đọc dc ah
     
  17. Meteor95

    Meteor95 Mario & Luigi

    Tham gia ngày:
    27/4/07
    Bài viết:
    861
    Đã bảo ko đọc được vì nó bị protect rùi mà sao cứ lập hêtts topic nè rùi spam ở topic kia để hỏi thế.Ko có chương trình đọc map protect đâu mà tìm chắc vào year 3000 thì có
     
  18. WordEditor

    WordEditor C O N T R A

    Tham gia ngày:
    8/9/08
    Bài viết:
    1,509
    Nơi ở:
    Leaf Village
    Có ai giúp với, làm sao để mà 1 con hero cast spell transform thành 1 con khác mà đứng yên không di chuyển, chỉnh ''Is a building'' thì vào game bị văng ra, cho nó transform thành 1 cái nhà khác thì 5 giây sau lại văng ra?? :-/
     
  19. Meteor95

    Meteor95 Mario & Luigi

    Tham gia ngày:
    27/4/07
    Bài viết:
    861
    Bạn ui hình như nếu 1 hero mà transform thành 1 building thì văng game là đúng đó vì đang từ hero-building coi như hero die mà/Bạn chỉ cần chỉnh cho hero sau khi transform ko có khả năng di chuyển hoặc nếu bạn muốn hóa rùi tăng phòng thủ thì thêm mana flare cho hero rùi buộc nó phải cast hoặc bạn chủ động cast (mana flare:+def và nếu enemy cast spell--- lên tiên =))O:-) )
     
  20. WordEditor

    WordEditor C O N T R A

    Tham gia ngày:
    8/9/08
    Bài viết:
    1,509
    Nơi ở:
    Leaf Village
    Cho hỏi cái phần ''chỉnh cho hero sau khi transform ko có khả năng di chuyển'' ở đâu vậy? :D
     
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này