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

Status
Không mở trả lời sau này.
Mình muốn làm 1 spell pass thế này:
- Level 1: + 20 attack speed (AS)
- Level 2: + 40 AS
- Level 3: + 60 AS
AS ở đây được tính là point chứ không phải %, như skill 3 soul ấy. Ai giúp giùm.
 
Mình muốn làm 1 spell pass thế này:
- Level 1: + 20 attack speed (AS)
- Level 2: + 40 AS
- Level 3: + 60 AS
AS ở đây được tính là point chứ không phải %, như skill 3 soul ấy. Ai giúp giùm.

point là sao? không ghi % nhưng thực chất nó là % =))
 
Mấy bác cho em hỏi, có phải bất kỳ map nào cũng có thể dùng tool add cheat để add vào ?
Có cách nào để khắc chế cái tool add cheat ?
 
Wait hoặc PolledWait đều ko được !
Đấy là câu lệnh nó làm trigger trễ lại 1 khoảng thời gian trước khi xử lý nốt các lệnh bên dưới câu lệnh này.
Như vậy là cái xử lý bị kéo dài. Trong khoảng thời gian nó chưa xử lý xong mà có trigger khác cũng xử lý cái biến này thì đó là tình trạnh ghi đè và mất dữ liệu.
Tức là ko có wait ở giữa việc xử lý biến temp là được. Còn cách dùng đã nêu trên, ko thắc mắc nữa chứ ????

Ngoài group, các biến khác cũng có thể dùng kiểu tương tự vậy. Đó là ý nghĩa của Temp (tạm thời) tức ko xử lý về lâu dài

à quên chưa nói. Mấy cái này chính xác là lạc đề topic rồi đấy, sau post bên Hỏi đáp nhé :D Topic huyền thoại với lịch sử lâu đời thuộc hạng nhất trên gamevn đấy ;)

Nếu mà nói như vậy tức là dùng biến tạm để xử lý là ko an toàn vì nếu xảy ra 1 lúc nào đó 2 Triggers cùng xảy ra (kể cả khi ko dùng PolledWait) và cùng sử dụng biến đó thì giá trị của biến sẽ bị lung tung lên hết?
(mà có thể 2 triggers cùng xảy ra ko nhỉ? Ý là CHÍNH XÁC NGAY CÙNG 1 THỜI ĐIỂM ấy)

Ví dụ như ở đây
Mình hỏi cái, giả sử tạo 1 Custom Spell ví dụ khi Unit A dùng skill X, đếm số Unit 800 range quanh A là Hero, rồi gây 200 dam * số Hero đã đếm lên các hero đó. Mình dùng nhóm tạm để lọc Unit quanh A
Code của mình sẽ đại loại là:
Mã:
globals
 group tmpG=CreateGroup()
endglobals


function Fil takes nothing returns boolean
 if IsUnitType(GetFilterUnit(),UNIT_TYPE_HERO) then
  set bj_groupCountUnits=bj_groupCountUnits+1
  return true
 endif
  return false
endfunction

function DealDam takes nothing  returns nothing
 call UnitDamageTargetBJ( GetTriggerUnit(), GetEnumUnit(), 200*bj_groupCountUnits, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
endfunction


function Action takes nothing returns nothing
 set bj_groupCountUnits = 0
 call GroupEnumUnitsInRange(tmpG, GetUnitX(GetSpellAbilityUnit()),GetUnitY(GetSpellAbilityUnit()),800,Filter(function Fil))
 call ForGroup(tmpG,function DealDam)
endfunction 

function Cond takes nothing returns boolean
 return GetSpellAbilityId()== ID_CUA_SKILL_X
endfunction


function KhoiDau takes nothing returns nothing
 local trigger trig = CreateTrigger( )
 call TriggerRegisterAnyUnitEventBJ( trig, EVENT_PLAYER_UNIT_SPELL_FINISH )
 call TriggerAddCondition( trig, Condition( function Cond ) )
 call TriggerAddAction( trig, function Action )
endfunction
Vậy có bị leak gì ko.
Và nếu trong 1 trigger khác (ví dụ 1 skill Y khác), mình cũng dùng group tmpG với công dụng tương tự vậy, thì có khả năng nào cả 2 trigger cùng thực hiện 1 lúc (2 cái lệnh GroupEnumUnitsInRange xài cực kỳ gần nhau) thì có làm cho tmpG bị ghi đè lộn xộn ko?
 
Chỉnh sửa cuối:
ai cho mình xin hỏi tại sao sử dụng lệnh sẽ gây desync thế :|
call RemovePlayer( whichPlayer, PLAYER_GAME_RESULT_VICTORY )
 
làm vậy thì whichPlayer victory rồi, có desync hay không có ảnh hưởng gì đâu?
 
[TẠO DUMMY ABILITY]

có 4 ability dummy, base từ Item Armor Bonus (hay ability nào thì tùy) có số level, required level y như các spell thường ( 3 ability có 3 level, 1 ultimate require level 6)

gọi các ability trên lần lượt là:

  • Dummy Learning Skill - I
  • Dummy Learning Skill - II
  • Dummy Learning Skill - III
  • Dummy Learning Skill - Ultimate

đưa cho hero các ability trên.
dùng trigger disable tất cả ability trên

[TẠO SHIFTER]
để hero có ability thật để học thì ta dùng Engineering Upgrade để chuyển các ability (gọi các ability này là các "shifter" nhé) và sẽ bị disable bằng trigger. Chú ý: Engineering Upgrade dù bị disable nó vẫn chuyển ability

ví dụ ta có các ability: A, B, C và D là ultimate

  • với các ability thường: tạo shifter có 3 level cho mỗi ability:

    level 1: chuyển Dummy Learning Skill - I => A
    level 2: chuyển Dummy Learning Skill - II => A
    level 3: chuyển Dummy Learning Skill - III => A

    ... tương tự với B và C
  • với ultimate thì cần 1 level: chuyển Dummy Learning Skill - Ultimate => D

    dùng trigger disable tất cả shifter

[TẠO DUMMY ĐỂ MUA]
mỗi ability có một dummy unit đi kèm để "mua"
mua dummy -> add shifter cho unit mua để có ability
save các dữ liệu này ra sao thì tùy, tôi chọn Hashtable

[LEVEL CHO SHIFTER]
với ultimate, chỉ có chuyển từ ability Dummy Learning Skill - Ultimate ra ultimate thật nên không cần quan tâm (shifter của nó chỉ có một level =)))

với normal skill, tùy theo số skill của bạn đã có, sẽ đặt level của shifter theo
ví dụ, chưa có ability nào, level của shifter là 1, để Dummy Learning Skill - I sẽ chuyển thành skill 1
nếu đã có một ability, Dummy Learning Skill - I đã bị chuyển rồi, vậy cần chuyển Dummy Learning Skill - II, shifter sẽ có level 2
(vì sao thì xem bước tạo shifter)

[DEMO]
demo map gửi kèm đó

nhưng xem sẽ hơi khó vì tôi làm theo GUI, mà GUI làm việc với Hashtable hơi bị khó chịu nên có Custom Script vào đó =))

[P.S]
tôi không chơi LOD nhưng có thấy người khác chơi, ngồi pick skill khá là mất thời gian =))

kiểu pick skill thì tự mò nhé, trong map demo chỉ đơn giản thôi.

Thanks anh,em thay kiểu pick skill = Unit - A unit Acquires an item tạo dummy nhanh hơn :D

Tiện đây muốn hỏi mọi người vụ này,mình dùng Loop integer 1 to (biến gì đó chẳng hạn)
mà không biết vì lý do gì mà chơi game lúc có lúc không,không phải là trong 1 game lúc có lúc không mà game nào có thì có hẳn,game nào mất thì mất luôn từ đầu tới cuối trận =_=,ai biết vụ này không ? Mình gặp 2 trigger spell bị vụ này rồi.
 
làm vậy thì whichPlayer victory rồi, có desync hay không có ảnh hưởng gì đâu?

tại lúc nhà base bị phá hủy. rồi em call RemovePlayer( whichPlayer, PLAYER_GAME_RESULT_VICTORY ) nhưng mọi người bị desync :|
 
Làm sao khi full Item rùi hero vẫn có thể mua item the' ? như trong dota ấy khi full túi thì vẫn có thể buy item rùi tự động ép nó zô lun ? thanks các bác :D
 
Mấy bác cho e hỏi, có cách nào để Anti cái tool add cheat map ?
 
cái đấy thì bạn cho các item buy là dạng power up khi mua thì check @@
 
Nếu mà nói như vậy tức là dùng biến tạm để xử lý là ko an toàn vì nếu xảy ra 1 lúc nào đó 2 Triggers cùng xảy ra (kể cả khi ko dùng PolledWait) và cùng sử dụng biến đó thì giá trị của biến sẽ bị lung tung lên hết?
(mà có thể 2 triggers cùng xảy ra ko nhỉ? Ý là CHÍNH XÁC NGAY CÙNG 1 THỜI ĐIỂM ấy)

Ko biết ko nên cười hay khóc đây ???
Tại sao cậu lo biến group lẫn lộn mà ko lo cái bj_groupCountUnits hay là GetSpellAbilityUnit() luôn đi. Đấy cũng là global đấy =))

Ko bao h có truyện "cùng xảy ra" ở đây cả. Thậm chí đến chính máy tính đơn nhiệm(xử lý từng công việc 1) mang tính đa nhiệm(mở nhiều ứng dụng cùng lúc) nhưng thực chất vẫn là xử lý đơn nhiệm với tốc độ cực nhanh tạo ảo giác là cùng lúc mà thôi !!!

Mình đã từng nói về vấn đề này rồi
Đầu tiên phải nói về trigger...
Nếu 1 trigger ko có wait thì bao h nó cũng chạy 1 mạch cho đến khi xử lý hết action trong trigger đó mới thôi.

Nếu ko wait thì trigger sẽ chạy lần lượt, KHÔNG có trigger nào chạy trước lại kết thúc sau cả.
Trigger ở đây là nói về cái xảy ra khi có cùng event chứ ko nói về trigger event khác nhau độc lập, riêng biệt với nhau.
Thậm chí trigger mà chạy chưa xong thì trigger sau còn ko chạy (Lag... đến cứng hình :-s)
Nên bt mà làm spell thì thậm chí chỉ cần 1->4 biến dùng chung cho trigger cả map cũng ko sao:-??
Điển hình chính là GetTriggerUnit (Triggering Unit - GUI) dùng chung cho tất cả các thể loại event có liên quan đến 1 unit làm cái gì đó

Tại sao chỉ 1 biến dùng chung cho cả map lại ko bị nhầm khi xử lý ???
Cả khi nhiều trigger cùng 1 event xử lý vấn đề khác nhau cũng ko lo bị nhầm biến nọ và biến kia?
Như ở trên đã nói lý do rồi đây vẫn cứ liệt kê lại 2 ý đó để nhấn mạnh vấn đề này :)
- 1 trigger ko có wait được kích hoạt thì nó chắc chắn sẽ chạy 1 mạch cho đến khi xử lý hết action trong trigger đó mới thôi (trừ khi lỗi)
- ko wait thì trigger sẽ chạy lần lượt
Nghe thì có vẻ vô lý nhưng đúng là vậy, cùng 1 event Unit died chả hạn vẫn có thứ tự trước và sau. Ko tin? Hãy dùng Display Message để thử
1 Cái đặt đầu trigger Ghi "Start Event ABC"
1 Cái đặt cuối trigger Ghi "End Event ABC"
Làm tương tự với 1 cái trigger khác cùng event và thay tên event "XYZ" vào sẽ thấy ko bao h có 2 cái "Start(End) Event ..." cạnh nhau cả
Đây là demo cho ai lười cả test nữa (Attach cuối bài) :-??
 
Ko biết ko nên cười hay khóc đây ???
Tại sao cậu lo biến group lẫn lộn mà ko lo cái bj_groupCountUnits hay là GetSpellAbilityUnit() luôn đi. Đấy cũng là global đấy =))

Ko bao h có truyện "cùng xảy ra" ở đây cả. Thậm chí đến chính máy tính đơn nhiệm(xử lý từng công việc 1) mang tính đa nhiệm(mở nhiều ứng dụng cùng lúc) nhưng thực chất vẫn là xử lý đơn nhiệm với tốc độ cực nhanh tạo ảo giác là cùng lúc mà thôi !!!

Mình đã từng nói về vấn đề này rồi
À thật ra cũng có lo cái bj_groupCountUnits với GetSpellAbilityUnit đó, nhưng mà hỏi 1 cái 2 cái kia tự trả lời đc :">

Tại ko biết cách test :(
Thank bạn nhiều, cái bài trên trong quote của bạn mình chưa đọc :D
Vậy là cái TriggerSleepAction nó hoạt động sao vậy bạn. Mình nghe nói người ta ưu tiên dùng timer cho chính xác hơn nhưng mà muốn tìm hiểu về nó

p/s: h mới biết cái Wait bạn nói là TriggerSleepAction
function PolledWait takes real duration returns nothing
local timer t
local real timeRemaining
if (duration > 0) then
set t = CreateTimer()
call TimerStart(t, duration, false, null)
loop
set timeRemaining = TimerGetRemaining(t)
exitwhen timeRemaining <= 0
// If we have a bit of time left, skip past 10% of the remaining
// duration instead of checking every interval, to minimize the
// polling on long waits.
if (timeRemaining > bj_POLLED_WAIT_SKIP_THRESHOLD) then
call TriggerSleepAction(0.1 * timeRemaining)
else
call TriggerSleepAction(bj_POLLED_WAIT_INTERVAL)
endif
endloop
call DestroyTimer(t)
endif
endfunction
Cám ơn bạn nhiều lắm nha, mình mới tập làm, khó quá chừng, tùm lum cái ko biết T_T
 
Chỉnh sửa cuối:
Mình mới tìm đc cái Tool Anti Cheat Map mà đọc ko hiểu sài ra sao, vì vốn TA còn gà, mấy bác ai pro có thể hướng dẫn e dùng đc ko
Anti Cheat Map
 
Cái đó là "removing anti-cheats", em tưởng nghĩa là cách chống cái system anti cheat chứ nhỉ? Ko phải là chống add cheat :-?
 
mún cho 1 skill shockwave đánh nhà không mất máu thì làm sao ạ ? nhưng skill khác cho đánh đc nhưng shockwave đánh ko đc chỉnh sao vậy ạ hihihihihihi
 
mún cho 1 skill shockwave đánh nhà không mất máu thì làm sao ạ ? ,, nhưng skill khác cho đánh đc nhưng shockwave đánh ko đc chỉnh sao vậy ạ hihihihihihi

Cái thằng, tôi nhớ đã có ng` trả lời r đó :-@
Tìm ability đó trong F6 =>Target Allowed bỏ mục Struc
 
Status
Không mở trả lời sau này.
Back
Top