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

^
^
Hix ,thế Framework 4.0 cũng ko được ak ,cũng đang bị cái vụ này 8-}
Ai có cách nào check xem 1 Buff trên 1 unit là LV bn hoặc từ nguồn nào ko
vd : Aura của unit A ,unit B có Buff từ Aura ,nhưng tác dụng lại phụ thuộc vào unit A

Không có cách nào hết,mình thì dùng handle lưu level của ability vào unit đó rồi khi cần thì load lại.
 
Mình xem các demo jass một số spell không dùng tới các lệnh màu đỏ (thường thì là BJ) mà dùng các lệnh có màu tím,mình thắc mắc là hai cái đó khác nhau ở chỗ nào ?

Điều kiện nào để được coi là vjass ?

Và thực sự thì mình vẫn chưa hiểu GetUnitX và GetUnitY là gì,ai có thể vui lòng giải thích giúp mình cái này ? X,Y của Unit là giá trị gì từ unit đó ?
 
^
Về dòng màu đỏ thì miễn ý kiến... chỉ biết là tím thì chạy tốt hơn đỏ nên thôi cứ xài tím đi đừng thắc mắt làm chi cho mệt =))
Điều kiện coi là vjass?? - pó tay
X,Y cái này giải thích đơn giản thôi. Chú học qua lớp 7 là chắc biết được mặt phẳng tọa độ Oxy rùi chứ gì! X,Y ở đây là tọa độ trên map của unit thôi! (với (0,0) là ở giữa map)
 
^
Về dòng màu đỏ thì miễn ý kiến... chỉ biết là tím thì chạy tốt hơn đỏ nên thôi cứ xài tím đi đừng thắc mắt làm chi cho mệt =))
Điều kiện coi là vjass?? - pó tay
X,Y cái này giải thích đơn giản thôi. Chú học qua lớp 7 là chắc biết được mặt phẳng tọa độ Oxy rùi chứ gì! X,Y ở đây là tọa độ trên map của unit thôi! (với (0,0) là ở giữa map)

=)) cái redline đc tui vợt nay ý kiến ngon dữ há
 
Ai cho hỏi làm sao để illusion có màu như Ethereal unit giống trong Dota ,đương nhiên illusion có thể attack
 
ai có thể chỉ mình làm 1 spell như này : khi xuất skill thì tấn công 4 lần với tốc độ cực nhanh và có hiệu ứng với mỗi cú đánh sau khi đủ 4 cái thì nó ngừng lại
 
Ai cho hỏi làm sao để illusion có màu như Ethereal unit giống trong Dota ,đương nhiên illusion có thể attack

Chắc cậu nhầm rồi! Ethereal có làm cho unit mờ đi và màu thì xanh lá hơn 1 chút. Nhưng mà trong dota có skill con kiến thì đấy chỉ là làm mờ đi 1 dummy có model con kiến và chả may con kiến màu nó khi mờ đi lại giống Ethereal.
Nói chung là màu giống Ethereal thì đơn giản là làm mờ unit và giảm blue và red color của unit đó đi 1 chút (hem bik bao nhiu cho giống... )
Animation - Change Unit Vertex Coloring
 
Chắc cậu nhầm rồi! Ethereal có làm cho unit mờ đi và màu thì xanh lá hơn 1 chút. Nhưng mà trong dota có skill con kiến thì đấy chỉ là làm mờ đi 1 dummy có model con kiến và chả may con kiến màu nó khi mờ đi lại giống Ethereal.
Nói chung là màu giống Ethereal thì đơn giản là làm mờ unit và giảm blue và red color của unit đó đi 1 chút (hem bik bao nhiu cho giống... )
Animation - Change Unit Vertex Coloring

Red: 96
Green: 127
Blue: 64
Alpha: 127 (50%) <--- chắc thế

thật ra Ethereal còn làm model sáng hơn nhưng cái này có lẽ hardcode rồi :@)

một số cái khác:
  • Ice Slow Tint Color: 128 192 192
  • Illusion Tint Color: 20 96 255
  • Animated Tint Color: 160 64 64

làm sao để test?
[spoil]
tạo một model màu trắng (dùng W3ME mở cái Textures\White.blp rồi save mdx) rồi import vào map
cho model trên vào unit, đặt ra map
trigger: chạy lệnh tắt model ngày đêm ( Custom script: call SetDayNightModels( "", "" ) )
cast Banish vào unit này
chụp hình, đưa vào photoshop rồi xem màu
[/spoil]
 
Cho hỏi cách pick units vào group theo hình nón phía trước mặt.
Hỏi thêm: nếu 1 unit đã add skill passive tên A nhưng ko hiện icon do hết slot skill thì khi dùng trigger như thế này
Mã:
Level ability A >= 1
thì có check được ko ?
 
Cho hỏi cách pick units vào group theo hình nón phía trước mặt.
Hỏi thêm: nếu 1 unit đã add skill passive tên A nhưng ko hiện icon do hết slot skill thì khi dùng trigger như thế này
Mã:
Level ability A >= 1
thì có check được ko ?

Hỏi thêm: nếu 1 unit đã add skill passive tên A nhưng ko hiện icon do hết slot skill thì khi dùng trigger như thế này

Được
 
Cho hỏi cách pick units vào group theo hình nón phía trước mặt.

Pick tất các unit xung quanh 1 bán kính x nào đó. sau đó lọc ra chỉ lấy các unit mà caster facing với unit đó 1 giá trị thỏa mãn (ý tưởng của mình là như thế ^^)
 
Mọi người cho hỏi tại sao lệnh else ở đây không tác dụng ?

Mã:
static method Data takes unit caster,unit target returns Camna
         local thistype data = thistype.allocate()
         local timer ti = NewTimer()
         local location l1 = GetUnitLoc(caster)
         local location l2 = GetUnitLoc(target)         
         
         set data.caster = caster
         set data.target = target
         set data.lv     = GetUnitAbilityLevel(data.caster,CAMNA)
         set data.tik    = 20 + (5 * data.lv)
         set data.sfx    = SFX
         [SIZE=3][B]if GetUnitTypeId(caster) == XANH then
            set data.angle = AngleBetweenPoints(l2,l1)
         else
            set data.angle = AngleBetweenPoints(l1,l2)
         endif [/B]  [/SIZE]
         set data.dmg    = 50 * I2R(data.lv) + (GetHeroInt(data.caster,true) * 2)
         set data.speed  = 15
         
         call SetCSData(ti,data)
         call TimerStart(ti,TIME,true,function Camna.Loop)
         call RemoveLocation(l1)
         call RemoveLocation(l2)
         set l1 = null
         set caster = null
         set target = null
         set l2 = null
         set ti = null
         
         return data
endmethod

P/s: bậc cao tay toán học nào vui lòng chỉ giúp mình cách tính angle mà ko dùng lệnh AngleBetweenPoints với +_+
 
Chỉnh sửa cuối:
> Mọi người cho hỏi tại sao lệnh else ở đây không tác dụng ?

unit-type của caster lúc nào cũng là XANH thì biểu thức đó luôn đúng => sao "else" chạy được

> P/s: bậc cao tay toán học nào vui lòng chỉ giúp mình cách tính angle mà ko dùng lệnh AngleBetweenPoints với +_+

không dùng lệnh đó thì dùng cái gì? =))
không muốn dùng "location" thì click vào lệnh đó mà xem sau đó viết lại tùy theo ý muốn

[spoil]
Mã:
//góc giữa (x1, y1) và (x2, y2) và trả về "độ"
function AngleXY takes real x1, real y1, real x2, real y2 returns real
    return bj_RADTODEG * Atan2(y2 - y1, x2 - x1)
endfunction

//góc giữa (x1, y1) và (x2, y2) và trả về "radian"
function AngleXYR takes real x1, real y1, real x2, real y2 returns real
    return Atan2(y2 - y1, x2 - x1)
endfunction
//lấy khoảng cách giữa (x1, y1) và (x2, y2)
function DistanceXY takes real x1, real y1, real x2, real y2 returns real
    return SquareRoot( (x2-x1) * (x2-x1) + (y2-y1) * (y2-y1))
endfunction
//khoảng cách giữa 2 unit a và b
function DistanceUnits takes unit a, unit b returns real
    local real dx = GetUnitX(b) - GetUnitX(a)
    local real dy = GetUnitY(b) - GetUnitY(a)
    return SquareRoot(dx * dx + dy * dy)
endfunction
//góc giữa 2 unit a và b, trả về "độ"
function AngleUnits takes unit a, unit b returns real
    return bj_RADTODEG * Atan2(GetUnitY(b) - GetUnitY(a), GetUnitX(b) - GetUnitX(a))
endfunction
//góc giữa 2 unit a và b, trả về "radian"
function AngleUnitsR takes unit a, unit b returns real
    return Atan2(GetUnitY(b) - GetUnitY(a), GetUnitX(b) - GetUnitX(a))
endfunction
[/spoil]
 
Chỉnh sửa cuối:
> Mọi người cho hỏi tại sao lệnh else ở đây không tác dụng ?

unit-type của caster lúc nào cũng là XANH thì biểu thức đó luôn đúng => sao "else" chạy được

> P/s: bậc cao tay toán học nào vui lòng chỉ giúp mình cách tính angle mà ko dùng lệnh AngleBetweenPoints với +_+

không dùng lệnh đó thì dùng cái gì? =))
không muốn dùng "location" thì click vào lệnh đó mà xem sau đó viết lại tùy theo ý muốn

[spoil]
Mã:
//góc giữa (x1, y1) và (x2, y2) và trả về "độ"
function AngleXY takes real x1, real y1, real x2, real y2 returns real
    return bj_RADTODEG * Atan2(y2 - y1, x2 - x1)
endfunction

//góc giữa (x1, y1) và (x2, y2) và trả về "radian"
function AngleXYR takes real x1, real y1, real x2, real y2 returns real
    return Atan2(y2 - y1, x2 - x1)
endfunction
//lấy khoảng cách giữa (x1, y1) và (x2, y2)
function DistanceXY takes real x1, real y1, real x2, real y2 returns real
    return SquareRoot( (x2-x1) * (x2-x1) + (y2-y1) * (y2-y1))
endfunction
//khoảng cách giữa 2 unit a và b
function DistanceUnits takes unit a, unit b returns real
    local real dx = GetUnitX(b) - GetUnitX(a)
    local real dy = GetUnitY(b) - GetUnitY(a)
    return SquareRoot(dx * dx + dy * dy)
endfunction
//góc giữa 2 unit a và b, trả về "độ"
function AngleUnits takes unit a, unit b returns real
    return bj_RADTODEG * Atan2(GetUnitY(b) - GetUnitY(a), GetUnitX(b) - GetUnitX(a))
endfunction
//góc giữa 2 unit a và b, trả về "radian"
function AngleUnitsR takes unit a, unit b returns real
    return Atan2(GetUnitY(b) - GetUnitY(a), GetUnitX(b) - GetUnitX(a))
endfunction
[/spoil]

1.Không phải anh ơi :( em dùng caster với unit type khác cũng không else được,nếu em dùng lệnh elseif như này thì angle nó lúc nào cũng trả ra cả 2,anh có thể xem giúp em ở map demo bên dưới đc ko ?

http://www.mediafire.com/?93srs8wm53b9u9g



Mã:
if GetUnitTypeId(caster) == XANH then
            set data.angle = AngleBetweenPoints(l2,l1)
         elseif GetUnitTypeId(caster) != XANH 
            set data.angle = AngleBetweenPoints(l1,l2)
endif

2.Em muốn biết cách tính angle mà không cần dùng tới lệnh đó vì nó...màu đỏ,mà bảo màu đỏ thì không...mượt @@ nên...
 
Chỉnh sửa cuối:
Ai cho mình biết cách nào để một unit bị slide đến rìa map thì remove?. Nó toàn tới rìa map rồi dính, ... .:|
 
Back
Top