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

Cho mình hỏi, muốn chỉnh lại skill triệu hội quái cây của hero night elf là ra luôn giống như triệu hồi sói của hero orc thì làm như nào vậy các bác? Hướng dẫn chi tiết dùm mình, đang tập tành tìm hiểu cái món này. Cảm ơn!
 
Cho mình hỏi, muốn chỉnh lại skill triệu hội quái cây của hero night elf là ra luôn giống như triệu hồi sói của hero orc thì làm như nào vậy các bác? Hướng dẫn chi tiết dùm mình, đang tập tành tìm hiểu cái món này. Cảm ơn!

Vào Object Editor rồi dựa vào chiêu triệu hồi của tướng Orc tạo ra chiêu mới, nhưng sửa đơn vị được triệu hồi thành cây (Treant)
 
Cho mình cái spell tỏa ra của venom trong dota nhưng mà gây damage lun ý
 
Trích dẫn Từ bài viết của maixuanem Xem bài

Code:
scope FireMassing initializer init
//>>>>>>>>>>>>>>>>>>>>>>>>>SETUP<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<//
//Đây là phần cài đặt cho spell:
globals
private constant integer SPELL_ID = 'A001'//ID của dummy ability mà bạn dùng, phải là 1 abi target ground hoặc target unit
private constant integer DUMMY_UNIT_ID = 'e000'//cái này hình như thừa... cứ thử bỏ đi xem. Tại spell làm lâu rồi cũng chẳng nhớ LOL
private constant integer EFF_UNIT_ID = 'e002'//Unit đóng vai trò missle
private constant string EFF = "Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl"//Hiệu ứng đặc biệt khi tên chạm enemy hoặc đã bay hết quãng đg cho phép
//"Abilities\\Weapons\\Rifle\\RifleImpact.mdl"
//"Abilities\\Spells\\Human\\SpellSteal\\SpellStealMissile.mdl"
//"Abilities\\Spells\\Other\\BreathOfFire\\BreathOfFireDamage.mdl"
//"Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl"

endglobals
//Advance:
private function speed takes nothing returns real
return 0.01 //lager value, more slower (tốc độ của mũi tên, vì là time out của timer nên càng nhỏ thì mũi tên bay càng nhanh)
endfunction

private function range takes nothing returns real
return 1500.00 //quãng đường tối đa ma mũi tên có thể bay
endfunction

private function radius takes nothing returns real
return 100.00 //the radius for detecting collision (Bán kính phát hiện va chạm AOE/2 đó :)) )
endfunction

private function amount takes nothing returns integer
return 10 //the numbers of arrow per cast (số lượng mũi tên)
endfunction

private function dam takes integer aLevel returns real
return 100.00 * aLevel//dam per arrow (hàm tính dam dựa theo lvl skill)
endfunction

private function addOn takes unit trigUnit, unit dam2Unit returns nothing
//this option is for advance user, you can add your code here to Make
//more effect when the projectile impact to enemy. ex: knock back, dam over time...

// hàm này được gọi khi mũi tên va chạm với enemy, hàm này hiện để trống, muốn thêm cái gì vào đây thì thêm
//à quên trigUnit là caster, dam2Unit là unit bị bắn trúng
endfunction

//>>>>>>>>>>>>>>>>>>>>>>>ENDSETUP<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<//

//=================Confuse zone==============//
//Dont edit this bunk of code unless you
//really wanna do
//Phần dưới này để thư thư rồi giải thích tiếp nhé :D
//===========================================//
globals
private constant real MOVE = 10.0 //distance that the projectile will move Per
//*speed()* . You should'nt change this
private constant real deviation = 10.0 //deviation between projectile
endglobals




private struct Projectile
unit u//projectile
unit uT// trigger unit
real angle
real moved = 0

boolean stop = false

method control takes nothing returns nothing
local location moveLoc = PolarProjectionBJ(GetUnitLoc(.u), MOVE, .angle)
//valriable for collision detect:
local group cGrp = GetUnitsInRangeOfLocAll(radius(),moveLoc)
local unit uDam

//move the unit(projectile)
call SetUnitPositionLoc(.u,moveLoc)

//collision detect and dam enemy:
set uDam = FirstOfGroup(cGrp)
if uDam != null then

loop
exitwhen uDam == null
if IsUnitEnemy(uDam,GetOwningPlayer(.uT)) and IsUnitAliveBJ(uDam) then

call UnitDamageTargetBJ(.uT, uDam, dam(GetUnitAbilityLevel(.uT,SPELL_ID)),ATTACK_TYPE_MAGIC,DAMAGE_TYPE_MAGIC)
call addOn(.uT,uDam)
set .stop = true//need improve
endif

call GroupRemoveUnit(cGrp,uDam)

set uDam = FirstOfGroup(cGrp)
endloop


endif


//out of range detect:
if .moved < range() then
set .moved = .moved + MOVE//if still in range, then set the .moved value go up
else
set .stop = true
endif

//play animation
if .stop then
call DestroyEffect(AddSpecialEffectLoc(EFF,moveLoc))
endif

//remove leak
call RemoveLocation(moveLoc)
call DestroyGroup(cGrp)
set moveLoc = null
set cGrp = null
set uDam = null
endmethod


endstruct

globals
private integer Total = 0
private timer T = CreateTimer()
private Projectile array pArr
endglobals



private function timerLoop takes nothing returns nothing
local integer i = 0
loop
exitwhen(i >= Total)

if pArr.stop then
call KillUnit(pArr.u)//kill the projectile to not display it any more
call pArr.destroy()//Not need this instance any more
set Total=Total-1//degrease the Total by 1
if Total > 0 then
set pArr=pArr[Total]
set i=i-1//if not the loops will forget to handle the pArr[Total] ^^
else
call PauseTimer(T)
endif
else
call pArr.control()
endif


set i = i + 1
endloop

//call BJDebugMsg("yeah")
endfunction

//extra function for formula caculate:
private function angleCalculate takes real angle, integer iAddOne returns real
local real result = 0
//==========for div number of *amount()*:
local real halfDev //deviation / 2
local real cen1
local real cen2
local integer cen1Index
local integer cen2Index
//==========for odd number of *amount()*:
local integer cenIndex
local real cen

//div:
if ModuloInteger(amount(),2)==0 then
//call BJDebugMsg("so chan")
set halfDev = deviation/2
set cen1 = angle - halfDev
set cen2 = angle + halfDev
set cen1Index = amount()/2
set cen2Index = cen1Index + 1

if iAddOne == cen1Index then
set result = cen1
elseif iAddOne < cen1Index then
set result = cen1 - deviation*(cen1Index - iAddOne)
elseif iAddOne == cen2Index then
set result = cen2
elseif iAddOne > cen2Index then
set result = cen2 + deviation*(iAddOne - cen2Index)
endif


//odd:
else
//call BJDebugMsg("so le")
set cen = angle
set cenIndex = ((amount() - 1)/2) + 1

if iAddOne == cenIndex then
set result = angle
elseif iAddOne > cenIndex then
set result = cen - (deviation*(iAddOne - cenIndex))
else
set result = cen + (deviation*(cenIndex - iAddOne))
endif
endif

return result
endfunction

//====================end=====================//


//Condition================================================================
private function condition takes nothing returns boolean
return GetSpellAbilityId() == SPELL_ID
endfunction

//Actions==================================================================


private function Actions takes nothing returns nothing
local player pT = GetOwningPlayer(GetTriggerUnit())
local location tar = GetSpellTargetLoc()
local location self = GetUnitLoc(GetTriggerUnit())
local real deg = AngleBetweenPoints(self,tar)
local Projectile p
//
local integer iPlus = 1



if Total == 0 then
call TimerStart (T, speed(), true, function timerLoop)
endif

//
loop
exitwhen iPlus > amount()
set p = Projectile.create()
set p.u = CreateUnitAtLoc(pT,EFF_UNIT_ID,self,angleCalculate(deg,iPlus))
set p.angle = angleCalculate(deg,iPlus)
set p.uT = GetTriggerUnit()

//call BJDebugMsg(R2S(angleCalculate(deg,iPlus)))
//call BJDebugMsg(I2S(Total))

set pArr[Total] = p
set Total = Total + 1

set iPlus = iPlus + 1
endloop

//remove leak
set pT = null
call RemoveLocation(tar)
call RemoveLocation(self)
set tar = null
set self = null

endfunction

//Initializer==============================================================
private function init takes nothing returns nothing
local trigger t = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddAction( t, function Actions )
call TriggerAddCondition(t,Condition(function condition))
endfunction

endscope
demo map: http://dl.dropbox.com/u/14083092/Map...FireRanger.w3x

Spell đơn giản thôi, bắn 1 lượng cung tùy ý ra phía trước. Có thể thêm bất cứ hiệu ứng nào vào unit bị trúng tên (dam over time hay knock back.... tùy)
Có gì giải thích sau nhé h đang bận với cái project



Vì mình ko nghiên cứu phần kỹ năng nên cho ình hỏi tý:
Mình mún chỉnh mũi tên bắn ra là mũi tên băng hoặc thường thì làm sao?
Thêm hiệu ứng nào để khi trúng mục tiêu thì làm chậm theo kiểu bj đóng băng?
LÀm sao cho số dâmge gây ra = số damage của chiêu + 1/2 dâmge bản thân?
Mình đang rất cần chiêu này.mong các bạn chỉ dùm^^
 
Cho hỏi làm sao góc trái trên cùng không hiện avatar của hero vậy ? hoặc là khi có thay đổi hero thì cái avatar đó thay đổi luôn ?
 
Khi bạn thay đổi thì biểu tượng góc trên-trái nó tự thay.

Làm cho nó mất thì vào Object Editor, tất cả các tướng đề có các dòng:
Mã:
Stats - Hero - Hide Hero Death Message (Ẩn Thông Báo Tướng Hi Sinh)
Stats - Hero - Hide Hero Inteface Icon (Ẩn Biểu Tượng Giao Tiếp) <== Cái bạn cần.
Stats - Hero - Hide Hero Minimap Display (Ẩn Biểu Tượng Trên Bản Đò Nhỏ)

Chỉnh cho nó ẩn đi (True), là nó mất.
 
Giúp với sao mình bấm vô cái dòng HP regention để chỉnh trừ máu mà không chỉnh âm được
 
Giúp với sao mình bấm vô cái dòng HP regention để chỉnh trừ máu mà không chỉnh âm được
trừ máu thì bạn xài skill damage ấy ai xài regention bao giờ sao âm được ?
 
trừ máu thì bạn xài skill damage ấy ai xài regention bao giờ sao âm được ?

@,@ skill damage là sao nói rõ hơn đi cứ nói chung chung. Vã lại tui thấy con phoenix của blood mage vẫn âm regen hp được
 
@,@ skill damage là sao nói rõ hơn đi cứ nói chung chung. Vã lại tui thấy con phoenix của blood mage vẫn âm regen hp được
cái đó là kĩ năng của phoenix chứ bạn mún xài regention mà âm máu thì làm gì đc zz còn skill damage thì nhìu skill rút máu lắm xài 1 skill nào thấy hợp là đc
 
^... con phoenix có HP regen là: -25.00 (skill cái gì...)

muốn cho giá trị âm thì giữ phím shift rồi bấm vào phần HP regen (và 1 số cái khác) cho phép bạn đánh giá trị âm.

hình như cái jassnewgen có cho phép bạn dùng giá trị âm mà ko cần giữ shift (lâu ko làm quên rồi)
 
^... con phoenix có HP regen là: -25.00 (skill cái gì...)

muốn cho giá trị âm thì giữ phím shift rồi bấm vào phần HP regen (và 1 số cái khác) cho phép bạn đánh giá trị âm.

hình như cái jassnewgen có cho phép bạn dùng giá trị âm mà ko cần giữ shift (lâu ko làm quên rồi)
vậy ah cái này mình mới biết đó =="
 
^... con phoenix có HP regen là: -25.00 (skill cái gì...)

muốn cho giá trị âm thì giữ phím shift rồi bấm vào phần HP regen (và 1 số cái khác) cho phép bạn đánh giá trị âm.

hình như cái jassnewgen có cho phép bạn dùng giá trị âm mà ko cần giữ shift (lâu ko làm quên rồi)


Mình dùng jass mà có âm được đâu. Nếu giữ shift thì bấm cái gì để ra dấu trừ. Còn cái skill thì skill nào rút máu đâu kiếm chả ra đọc tên vài cái điển hình coi

- - - Updated - - -

^... con phoenix có HP regen là: -25.00 (skill cái gì...)

muốn cho giá trị âm thì giữ phím shift rồi bấm vào phần HP regen (và 1 số cái khác) cho phép bạn đánh giá trị âm.

hình như cái jassnewgen có cho phép bạn dùng giá trị âm mà ko cần giữ shift (lâu ko làm quên rồi)


Mình dùng jass mà có âm được đâu. Nếu giữ shift thì bấm cái gì để ra dấu trừ. Còn cái skill thì skill nào rút máu đâu kiếm chả ra đọc tên vài cái điển hình coi
 
Mình dùng jass mà có âm được đâu. Nếu giữ shift thì bấm cái gì để ra dấu trừ. Còn cái skill thì skill nào rút máu đâu kiếm chả ra đọc tên vài cái điển hình coi

- - - Updated - - -




Mình dùng jass mà có âm được đâu. Nếu giữ shift thì bấm cái gì để ra dấu trừ. Còn cái skill thì skill nào rút máu đâu kiếm chả ra đọc tên vài cái điển hình coi

shift+enter sau đó ghi kết quả dấu trừ -25.00 là dc rồi :|
 
Cho mình hỏi mình muốn máy mua đồ theo trình tự thì phải làm trig như thế nào
 
À cho hỏi típ muốn làm skill làm bằng trigger gây damage thì dùng lệnh nào trong trig. Thấy mấy cái spells trên mạng đẹp mà gây damage ít wá nên vô chỉnh tí
 
Mình đang muốn làm 1 map kết hợp vs game Yugioh, nhưng lại ko bik làm hệ thống map ai giúp mình vs :( Map player 5-5 Làm sao để mới vô thì pick hero hay các item trong shop vậy ? Muốn pick sao thì pick nhưng maximum 30.

Khi pick thì hero/item thì xuất hiện trong khu vực màu trắng (deck) khu vực ở dưới là mộ khi hero chết hay item đã dc sài (graveyard)

Và cứ lần lượt cứ 30s thì pick random trong deck và triệu hồi trong khu vực đất màu trắng (cái light moon là "máu" mình) và cứ thế mà mình đi đánh :)
Khi deck mình hết “bài” thì tự động tất cả các hero/item trong “mộ” dịch chuyển lên deck và cứ thế tiếp tục
 
Back
Top