[ai cần bài hướng dẫn vô đây] "request" tutorials

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
Trước việc các bài hướng dẫn sẽ "bị" hỏi đi hỏi lại , Tom tạo ra topic này, newbie nào có yêu cầu gì về bài hướng dẫn nào, post yêu cầu vào đây.

Nhớ rằng phải post rõ ràng, có đầu, đuôi. Nếu đc như vậy sẽ có bài trả lời
-------
Nghiêm cấm "xì pam" trong topic này, spam = xóa bài.
-------
Các bài trả lời sẽ đc post tại đây và đc tổng hợp ở post đầu tiên này.
================
--- Tổng hợp ---
Sử dụng Handle Vars của KaTTana
Cách select hero như DDay và một vài thứ khác
Cách ghép đồ, có thể ghép nhiều item cùng loại và "nhập" các item sử dụng theo "charge".
Hồi sinh hero như DDay

Code màu của player trong War
Kiểm tra vị trí của một unit so với unit khác
Check units positions demo
Simple Items Combining
Regrowth Trees
Cách protect map
Bảng tính điểm (Leaderboard)
Slide, Chain Spell
Make custom auto-cast spell
Memory Leak and Custom Script
Spawn units over time
Hero XP - Creeps
Hero XP - Required Experience to level up
Một chút hướng dẫn về làm spell kiểu "càng gần càng mạnh"
-----------------
EDIT: ai có link bài hướng dẫn về vấn đề gì thì hãy pm Tom để Tom cho vào đây.
 
Anh ơi! e mới tập làm map thui nhưg khó quá anh ah anh có thể viết 1 bài chi tiêt được ko.Tất cả các bước đề làm map í.
Em muốn làm một map dang như DDay vêy nếu được giúp em nha thanks anh nhìu.
 
hjx em yêu cầu vậy hơi bị khó đó cái này dành cho newbie thôi
mà newbie mới vào sao làm đc ??
nếu muốn hướng dẫn chi tiết hả? OK để anh gom mấy cái cũ nhất mà hay cho em
mà trước tiên em hãy nói cho anh biết em có biết biến là gì ko?
 
Tui đang cần bài tut về handler về cua KaTTaNa nè Help!!!
Và nhân tiện giải thích lun tại sao nên xài handler vẻ
Và 1 số cách anti BJ nữa
Hình như mấy chữ BJ màu đỏ la leaky
 
Em cần 1 tut về khóa map sao cho người khác ko deprotect được...
 
1 cách không cần protect, xong rùi change hết wa text...open ra đoc dc cũng pro =)) rui` save as ra ban~ khac'...(chứ đừng save rùi ngồi khóc lun :d )

1 lời khuyên dành cho newbie, dù có kể chi tiết tỉ mỉ thì bạn có đọc củng chẳng hiểu vì nó rất đa dạng, phong phú với từng thể loại....bạn muốn làm map thì cứ làm đi...làm bí chỗ nào thì hỏi....người ta dễ trả lời và mình dễ tiếp thu hơn...

Ví dụ : làm map giống dday...bí ở phần chọn hero = các con cừu => hỏi ::)
bí ở phần tạo các đợt lính hay summoning => hỏi ::)
 
Tui đang cần bài tut về handler về cua KaTTaNa nè Help!!!
Và nhân tiện giải thích lun tại sao nên xài handler vẻ
Và 1 số cách anti BJ nữa
Hình như mấy chữ BJ màu đỏ la leaky


Cái KATTANA Var handle đó cũ rồi mà bây giờ còn ai dùng nữa :-/
kiếm mấy món mới của thằng Cohadar về mà nghịch bạn à, ko dùng CSData cũng hay.

Mấy cái BJ ko hẳn là leak, nó ko hiệu quả = các hàm native thôi..nhưng nghe nói dùng chắc năng antiBJ của Jass NewGen cũng được...
 
ôi trời ơi
topic này dành cho newbie cơ mà mấy pro vào đây làm gì ::(
em trả lời ko đc đâu đó
 
Anh ơi! e mới tập làm map thui nhưg khó quá anh ah anh có thể viết 1 bài chi tiêt được ko.Tất cả các bước đề làm map í.
Em muốn làm một map dang như DDay vêy nếu được giúp em nha thanks anh nhìu.

Chà, cái đó thì nhiều vấn đề lắm. Anh chỉ làm một vài bài hướng dẫn NHỎ thôi.

Em cần 1 tut về khóa map sao cho người khác ko deprotect được...

Thật ra vấn đề ko phải là có bị deprotect hay ko, mà là dùng tool làm cho map nhẹ đi, load nhanh hơn,.. và protect một thể. Chứ protect kiểu gì thể nào chả có người deprotect đc. (có virus thì ắt có anti-virus mà :wink: )

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

Tui đang cần bài tut về handler về cua KaTTaNa nè Help!!!
Và nhân tiện giải thích lun tại sao nên xài handler vẻ
Và 1 số cách anti BJ nữa
Hình như mấy chữ BJ màu đỏ la leaky
Handler của KaTTana:
- Đầu tiên phải có script: Local Handle Vars, lấy ở đây: http://www.wc3jass.com/viewtopic.php?t=224 hoặc vô trong map demo (Tom gửi kèm ở dưới mà lấy), script này trong map demo thì Tom đã "sửa" một chút rồi.
- Có thể dùng WE bình thường, nhg nên dùng NewGen (mà Dragon đang dùng NewGen đúng ko ? ) vì có library đỡ phải cho vào map header
- Cách sử dụng:
Ta sẽ tạo func (function = hàm) Knockback (rất cơ bản :D )
Đầu tiên, tạo 1 trigger, tên tùy ý, KnockBack chẳng hạn, convert ra jass rồi xóa hết các thứ ở trong rồi viết cái mới:

Mã:
function Knockback takes unit a, real dist, real angle returns nothing
                      //a là unit bị knock, dist là khoảng các, angle là góc knock
    local timer t = CreateTimer() // tạo timer
    local integer tick = 25
    
    //store data into "t"
    call SHHandle( t, "Knockback_Unit" , a )
    call SHReal( t, "Knockback_Distance" , dist / tick )
    call SHReal( t, "Knockback_Angle" , angle )
    call SHInt( t, "Knockback_Tick" , tick )
    
    call TimerStart( t, 0.04, true, function KnockbackE )
    
    set t = null
endfunction

Trong func trên, ta cần các biến là a, dist và angle (như comment)
tạo 1 biến local, timer, tên là t
biến integer tick là biến đếm.

SHHandle là func của Local Handle Vars, dùng để "lưu" một handle vào handle. (handle là unit, timer, item, destructable,... xem list trong Jass Craft sẽ rõ handle là gì) trong này lưu unit a vào timer t dưới cái "tên" là "Knockback_Unit"
SHReal cũng là func của Local Handle Vars, dùng để lưu một real vào handle. Trong này là lưu "khoảng cách" di chuyển (dist / tick) dưới tên "Knockback_Distance". Chú ý: ta lưu khoảng cách MỖI LẦN MOVE unit a, nên nó sẽ bằng <Tổng khoảng cách> / <biến đếm>, ở đây biến đếm là 25.
Tương tự ta lưu góc knock angle dưới tên "Knockback_Angle" và biến đếm tick dưới tên "Knockback_Tick"

Sau đó ta chạy timer t với 0.04 duration, có lặp lại và "callback func" là function KnockbackE. "callback func" là func khi timer "hết" sẽ gọi.
Cuối cùng là null timer, null handle nói chung, để tránh leak local :|

Dưới đây ta có func KnockbackE (đặt ở trên func Knockback)
Mã:
function KnockbackE takes nothing returns nothing
    local timer t = GetExpiredTimer()
    //Get data from "t"
    local unit a = GHUnit( t, "Knockback_Unit" ) //use GHUnit to get stored unit
    local real dist = GHReal( t,  "Knockback_Distance" )
    local real angle = GHReal( t,  "Knockback_Angle" )
    local integer tick = GHInt( t, "Knockback_Tick" )
    
    local location loc
    local location loc2
    
    if tick == 0 then
        //null data, use:
        call FHL( t )
        //or: 
        //call SHHandle( t, "Knockback_Unit" , null )
        //call SHReal( t, "Knockback_Distance" , 0. )
        //call SHReal( t, "Knockback_Angle" , 0. )
        //call SHInt( t, "Knockback_Tick" , 0 )
        
        call DestroyTimer(t)
        set t = null
        return
    endif
    
    call SHInt( t, "Knockback_Tick" , tick - 1 ) //decrease tick
    
    set loc = GetUnitLoc(a)
    set loc2 = PolarProjectionBJ( loc , dist, angle )
    
    call AddSpecialEffectLocBJ( loc2, "Abilities\\Spells\\Human\\FlakCannons\\FlakTarget.mdl" )
    call DestroyEffect( GetLastCreatedEffectBJ() )
    
    call SetUnitPositionLoc( a, loc2 )
    
    call RemoveLocation(loc)
    set loc = null
    call RemoveLocation(loc2)
    set loc2 = null
    set t = null
endfunction

Ở func KnockbackE, GetExpiredTimer() là timer t (ở func Knockback) mà ta đã chạy với func callback là func KnockbackE
Ta "lấy" các thứ đã "lưu" với timer t: unit a, real dist, real angle, integer tick dưới các tên "Knockback_Unit", "Knockback_Distance", "Knockback_Angle", "Knockback_Tick". Khi muốn lấy unit ta dùng func GHUnit, real thì dùng GHReal, integer thì dùng GHInt (các func ở trong Local Handle Vars)

ta có một if kiểm tra biến đếm. Nếu biến đếm == 0, vậy ta sẽ "null" dữ liệu, sử dụng func FHL( t ) với t là timer hoặc có thể "lưu" với giá trị "null" (với handle thì là null, real là 0. , integer là 0 )

sau đó dùng DestroyTimer để xóa timer này, tránh leak, và cuối cùng null t (là biến local, loại handle) => hết if

Sau khi kiểm tra, thấy biến đếm chưa về 0, ta sẽ lưu biến đếm với giá trị đã giảm 1, call SHInt( t, "Knockback_Tick" , tick - 1 )
Tiếp theo là đặt loc, loc2, tạo effect, move unit rồi remove location để "tẩy" leak thôi. Nhớ là t, loc, loc2 là biến local nên cũng phải "null".

-----
Vậy, kết luận ta có:
khi gọi func Knockback, 1 timer sẽ đc tạo ra, các "data", dữ liệu, như unit bị knock, khoảng cách và góc knock, biến đếm, sẽ đc lưu vào timer (sử dụng: SHHandle, SHReal, SHInt,...)
khi timer "expired" (timer bị 'hết") thì tại callback func, ta lấy các dữ liệu ra bằng cách dùng: GHUnit, GHReal, GHInt,... với GetExpiredTimer() (trong biến t)
Sau đó kiểm tra biến đếm (tick), nếu nó bằng 0 thì ta sẽ xóa dữ liệu (dùng FHL hoặc "lưu lần nữa" các giá trị "null") và xóa timer. Nếu chưa bằng 0, ta tiến hành tạo effect, move unit bình thường.
----
Chú ý: trong map demo, Tom đã "sửa" cái script Local Handle Vars này một chút,, SetHandle = SH, GetHandle = GH, FlushHandleLocal = FHL (viết tắt) và đặt vào library ::)
========================================================
BJ = Blizzard.j là các func do Blizzard Entertainment viết, dựa trên các "native" (coi như là các func cũng đc, nhg nó là "gốc")
Các BJ này phần lớn chỉ làm mỗi việc là "gọi" một native khác -> việc gọi gián tiếp này sẽ phần nào làm "chậm" code.
Ví dụ:
Mã:
function SetUnitAbilityLevelSwapped takes integer abilcode, unit whichUnit, integer level returns integer
    return SetUnitAbilityLevel(whichUnit, abilcode, level)
endfunction
BJ trên ngoài việc gọi native SetUnitAbilityLevel, việc này là ko cần thiết, nên ta cứ gọi luôn SetUnitAbilityLevel => đó là anti-BJ
Nhưng có một số BJ thì đúng là "đc việc", ví dụ:
Mã:
function RAbsBJ takes real a returns real
    if (a >= 0) then
        return a
    else
        return -a
    endif
endfunction
đó là hàm lấy "giá trị tuyệt đối", đây ko thể thay = 1 native nào đc, nên cứ dùng thôi.
------
Oài, trả lời hơi muộn, a Rex lại nói mất rồi :D, mà thôi kệ :))
Và CSData của Vexorian hay system của Cohadar thì cần dùng struct, nếu Dragon chưa biết struct thì Tom sẽ chỉ ::)
 

Attachments

Chưa biết làm map thì vào topic ''World Editor - 1 số bài viết đáng chú ý của box'' mà xem, nhìu lắm đấy, đủ để làm 1 cái map DDay rồi :D _ Ngày xưa đâu biết web này, tự mà open map khác lên mò (_ _")
 
Mấy anh pro ú ù có thể chỉ em làm thế nào để mình tạo 1 chô~để chọn hero --> tạo con cừu hay cái con j` sáng sáng để chọn hero í.(giống Dday lúc mình vô chơi có 1 con để chọn í.
Tiếp theo là làm thế nào để map có 2->8n` vô chơi dc e tạo xong vô test là nó cho thắng luôn::(
Và cuối cùng là làm thế nào tạo1 cái nhà có items ở trong(máu,sách, vu~khí...),1 cái nhà
tăng máu lúc mình chạy về thành, nhà lính tự chạy ra, con tướng lúc mình fang nó là win.
Giúp e nha mí a. Thaks nhìu.::)
 
Mấy anh pro ú ù có thể chỉ em làm thế nào để mình tạo 1 chô~để chọn hero --> tạo con cừu hay cái con j` sáng sáng để chọn hero í.(giống Dday lúc mình vô chơi có 1 con để chọn í.
Tiếp theo là làm thế nào để map có 2->8n` vô chơi dc e tạo xong vô test là nó cho thắng luôn::(
Và cuối cùng là làm thế nào tạo1 cái nhà có items ở trong(máu,sách, vu~khí...),1 cái nhà
tăng máu lúc mình chạy về thành, nhà lính tự chạy ra, con tướng lúc mình fang nó là win.
Giúp e nha mí a. Thaks nhìu.::)


-Cách chọn tướng:
cách này bất lợi ở chỗ mỗi tướng phải có 1 region, 1 trigger riêng..Bạn tạo 1 khu vực đủ rộng cho số Hero mình có, nên đặt cách biệt vùng chơi (đặt doodad cản lại, xây trên tường hay đặt boundary), sao đó, xếp hero lên, chuyển owner cho tất cả về neutral passive, đặt trước mặt mỗi hero 1 cái circle of power (unit ở phần neutral passive, campaign)..vẽ 1 region ngay trên đó rồi làm trigger sau (chẳng hạn chọn tướng blood mage):

-event: unit - a unit enters <Blood Mage region>
-condition: triggering unit equal to <Cừu>
-Action: unit - kill triggering unit
unit - create 1 Blood Mage for owner of triggering unit at owner of triggering unit start location
camera - pan camera for owner of triggering unit to owner of triggering unit start location


Cách trên tạo hero và chuyển camera về vị trí start location của player, do đó bạn nên đặt start location(unit) ở vị trí mình muốn..hoặc cũng có thể tạo và xoay camera về 1 region nào đó tùy bạn..

-Nhà có item thì đơn giản nó như cái Goblin Merchant thôi, bạn tìm ở phần Object, Unit, Neutral Pasive(building). Bạn cũng có thể đổi tên, thay model tùy thích. Còn muốn thay đổi item bán trong shop thì tìm đến dòng: Techtree - items sold

-Map ban đầu mới vô có 1 trigger melee initialization, bạn xóa nó đi là ổn..Số người chơi bạn vào: Scenario / Player properties (trên thanh menu đó).

-Nhà tăng máu nó nằm ở phần: bạn mở cái Unit palette/Neutral Pasive là thấy. Tên nó là Fountain of Health.

-Cách ra quân thì bạn xem map demo sẽ hiểu phần nào.

EDIT: Hỏi thật hay clone vô phá vậy ? :-/
 

Attachments

anh rex quên remove entering unit rồi :D
nếu ko remove nó chạy qua mấy cái circle khác nữa đó :;)
 
Nếu xài lệnh change owner thì dễ dàng hơn nhìu :D
anh rex quên remove entering unit rồi :D
nếu ko remove nó chạy qua mấy cái circle khác nữa đó :;)
Có -Action: unit - kill triggering unit ròi mà :|
 
hehehe mình quên đọc chưa kỹ :P
phần ra creep thì chỉ luôn cho lẹ nè :D
nếu bạn muốn creep ra theo mỗi thời gian thì làm trigger như vậy nè
event: Time-Every 10seconds of game time
condition : khỏi
actions : unit creat x unit(creep bạn muốn cho ra) at region(nơi nào bạn muốn cho nó ra) facing default building facing degrees
nếu muốn cho nhiều loại ra thì viết thêm cái action giống ở trên nhưng creep thì cho creep khác
 
Ặc! Rex đổi Avatar làm ko nhận ra. :'>

Cần 1 bài hướng dẫn tỉ mỉ, dễ hiểu về ghép đồ, bao gồm ghép nhiều đồ khác nhau thành 1 đồ mới, nhiều đồ giống nhau (đồ dùng 1 lần như máu, mana) tự "xếp" vào 1 slot bằng Trigger.
 
YAN[asian];9847336 nói:
Ặc! Rex đổi Avatar làm ko nhận ra. :'>

Cần 1 bài hướng dẫn tỉ mỉ, dễ hiểu về ghép đồ, bao gồm ghép nhiều đồ khác nhau thành 1 đồ mới, nhiều đồ giống nhau (đồ dùng 1 lần như máu, mana) tự "xếp" vào 1 slot bằng Trigger.

về ghép nhiều item khác nhau thành 1 item khác.mình sẽ chỉ cái dễ nhất
Mã:
CombineItems
    Events
        Unit - A unit Acquires an item
    Conditions
    Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                ((Hero manipulating item) has an item of type Orb of Frost) Equal to True
                ((Hero manipulating item) has an item of type Orb of Fire) Equal to True
                ((Hero manipulating item) has an item of type Orb of Lightning) Equal to True
            Then - Actions
                Item - Remove (Item carried by (Hero manipulating item) of type Orb of Frost)
                Item - Remove (Item carried by (Hero manipulating item) of type Orb of Fire)
                Item - Remove (Item carried by (Hero manipulating item) of type Orb of Lightning)
                Hero - Create Claws of Attack +15 and give it to (Hero manipulating item)
                Special Effect - Create a special effect at (Position of (Hero manipulating item)) using Abilities\Spells\Items\AIam\AIamTarget.mdl
                Special Effect - Destroy (Last created special effect)
            Else - Actions
còn về item máu khi có 1bình trên người nhặt thêm 1 bình máu nữa sẽ gộp lại thành 2 thì làm trigger nhứ thế này
Mã:
StackChargedItem
    Events
        Unit - A unit Acquires an item
    Conditions
        (Charges remaining in (Item being manipulated)) Greater than 0
    Actions
        Set TempUnit = (Hero manipulating item)
        Set TempItem = (Item being manipulated)
        For each (Integer A) from 1 to 6, do (Actions)
            Loop - Actions
                Set TempItem2 = (Item carried by TempUnit in slot (Integer A))
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Item-type of TempItem2) Equal to (Item-type of TempItem)
                        TempItem2 Not equal to TempItem
                    Then - Actions
                        Item - Set charges remaining in TempItem2 to ((Charges remaining in TempItem2) + (Charges remaining in TempItem))
                        Hero - Drop TempItem from TempUnit
                        Item - Remove TempItem
                        Skip remaining actions
                    Else - Actions
trigger trên còn áp dụng cho các item có "charge" khác.

nếu bạn ko hiểu nữa thì vào demo map có attach ở dưới down về mở ra mà xem :wink:
//==================
Dưới đây là hệ thống ghép item do Tom_Kazansky làm rất dễ dùng

cách dùng:

- đánh dấu:
File \ Perferences \ Automatically create unknown variables while pasting trigger data

- copy thư mục: Recipe System
- sau khi copy xong thì vô trigger "GUIRecipeSystem Init" để "đăng kí" các recipe

- enjoy !

cách đăng kí:

-------- recipe của bạn --------
Set RS_RecipeCount = (RS_RecipeCount + 1)
Set RS_Item_1[RS_RecipeCount] = <item thành phần 1>
Set RS_Item_2[RS_RecipeCount] = <item thành phần 2>
Set RS_Item_3[RS_RecipeCount] = <item thành phần 3>
Set RS_Item_4[RS_RecipeCount] = <item thành phần 4>
Set RS_Item_5[RS_RecipeCount] = <item thành phần 5>
Set RS_Item_6[RS_RecipeCount] = <item thành phần 6>
Set RS_Item_Result[RS_RecipeCount] = <item sau khi ghép xong>
-------- đã đăng kí xong --------

chú ý: nếu thành phần nào không dùng thì phải đặt giá trị "NoItemType"
 

Attachments

ai chỉ em phần làm hồi sinh như của dday khi tướng bị die ý và chỉnh khoảng thời gian tướng hồi sinh lại , các pác chỉ từng tí một nha em gà mà
 
Unit Dies
Events
Unit - A unit Dies
Conditions
((Dying unit) is A Hero) Equal to True
Actions
Game - Display to (All players) for 30.00 seconds the text: ((Name of (Owner of (Dying unit))) + ( was killed by + (Name of (Owner of (Killing unit)))))
Player - Add ((Level of (Dying unit)) x 50) to (Owner of (Killing unit)) Current gold
Wait ((Real((Level of (Dying unit)))) x 10.00) seconds
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Dying unit) belongs to an ally of Player 1 (Red)) Equal to True
Then - Actions
Hero - Instantly revive (Dying unit) at (Center of Team 1 Base <gen>), Show revival graphics
Camera - Pan camera for (Owner of (Dying unit)) to (Position of (Dying unit)) over 2.00 seconds
Else - Actions
Hero - Instantly revive (Dying unit) at (Center of Team 2 Base <gen>), Show revival graphics
Camera - Pan camera for (Owner of (Dying unit)) to (Position of (Dying unit)) over 2.00 seconds
đây HS theo kiểu dday lv của hero chết x 10 giây tham khảo từ từ nha bạn :wink:
 
Status
Không mở trả lời sau này.
Back
Top