Bay h mình xin up bài tut này hướng dẫn mọi người cách sử dụng Hashtable và tác dụng thật của Hashtable là gì.. Hashing là cái gì? Hashtable (mảng băm) là một cấu trúc dữ liệu cho phép lưu trữ & tìm kiếm giá trị (dạng chuỗi ký tự X Y) ở độ dạng Custom Variable. Nghĩa là tốc độ tìm kiếm phần tử luôn là một hằng số, dù số phần tử lên đến cả tỷ. củng có thể sử dụng ký tự dc. Một Hashtable là gì? phần 2 Tại sao hastable gọi là custom variable? Tại vì hashtable là sử dạng cấu trúc định tùy biến như Variable chỉ khác 1 điều hashtable tự tạo tùy biến Variable không cần phải vào Ctrl +B Variables tạo lập tên giá trị tùy biến. ví dụ trong Variable thì thế này. Mã: [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/set.gif[/IMG]Set TempUnit = (Triggering unit) [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/set.gif[/IMG]Unit - Kill TempUnit còn trong Hastable Variable thì Mã: [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/unit.gif[/IMG]Unit - Kill (Load (Key unit) of (Key unit) in Hastabletmp) tại sao thế này dc? cái này sẽ giải thích ở phần tiếp theo. Cách sử dụng hastable làm sao ? bước 1 chúng ta lập trước 1 trigger thế này để làm bộ nhớ hastable Mã: int [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/events.gif[/IMG]Events [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/page.gif[/IMG]Map initialization [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/cond.gif[/IMG]Conditions [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/actions.gif[/IMG]Actions [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/set.gif[/IMG]Hashtable - Create a hashtable [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/set.gif[/IMG]Set Hastabletmp = (Last created hashtable) cách nhớ giá trị trong Variable Mã: AUS [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/events.gif[/IMG]Events [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/unit.gif[/IMG]Unit - A unit Starts the effect of an ability [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/cond.gif[/IMG]Conditions [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/if.gif[/IMG](Ability being cast) Equal to Thunder Clap [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/actions.gif[/IMG]Actions [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/set.gif[/IMG]Set TempUnit = (Triggering unit) Unit - Create 1 Footman for (Owner of (Triggering unit)) at (Center of (Playable map area)) facing Default building facing degrees cách nhớ giá trị trong Hastable Mã: AUS [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/events.gif[/IMG]Events [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/unit.gif[/IMG]Unit - A unit Starts the effect of an ability [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/cond.gif[/IMG]Conditions [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/if.gif[/IMG](Ability being cast) Equal to Thunder Clap [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/actions.gif[/IMG]Actions [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/set.gif[/IMG]Hashtable - Save Handle Of(Triggering unit) as (Key unit) of (Key unit) in Hastabletmp [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/unit.gif[/IMG]Unit - Create 1 Footman for (Owner of (Load (Key unit) of (Key unit) in Hastabletmp)) at (Center of (Playable map area)) facing Default building facing degrees liều này khác gì ? chẳng khác gì cả , cả 2 điều thực hiện tùy biến nhân hastable nó khó hơn 1 chút. lý do nó lưu bộ nhớ Variable theo dạng phân từ ký tự hoặc số theo X Y nên khác 1 chút so với Variable, Variable save dạng TempUnit = Triggering unit còn hastable thì thế mà khác nó lưu nhớ giá trị trong 1 bộ nhớ chung và cách xài chung nhau. Vậy Hashtable và Variable ai tốt hơn ? theo như so sánh Hashtable và Variable là không thể so sánh ai tốt ai không tốt cả lý do Hashtable là lưu nhớ tùy biến của Variable mục đích sử dụng khả năng hoạt động cao còn Variable thì cách lưu nhớ tùy biến đơn giản. Cách sử dụng hashtable và cách nhập hashtable sẻ như thế nào ? bước 1 tạo 1 trigger và tạo 1 value nhớ lại điểm tắt (Last created hashtable) Mã: int [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/events.gif[/IMG]Events [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/page.gif[/IMG]Map initialization [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/cond.gif[/IMG]Conditions [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/actions.gif[/IMG]Actions [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/set.gif[/IMG]Hashtable - Create a hashtable [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/set.gif[/IMG]Set Hastabletmp = (Last created hashtable) Mã: [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/set.gif[/IMG]Hashtable - Save Handle Of(Triggering unit) as [B][COLOR="red"](Key unit)[/COLOR][/B] of [COLOR="blue"][B](Key unit)[/B][/COLOR] in Hastabletmp mục key tô màu R là key X mục key tô màu B là key Y 2 giá trị này rất quan trọng trong hashtable value có thể bị trùng nhau khi 2 trigger bạn sử dụng giá trị cùng nhau ví dụ sử dụng tại trigger phần 1 Mã: [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/set.gif[/IMG]Hashtable - Save Handle Of(Triggering unit) as (Key unit) of (Key unit) in Hastabletmp và 1 trigger khác nếu sử dụng Mã: [s][IMG]http://www.hiveworkshop.com/forums/images_all/trigger/set.gif[/IMG]Hashtable - Save Handle Of(Triggering unit) as (Key unit) of (Key unit) in Hastabletmp[/s] thế là sai bạn có thể sử dụng kiểu Mã: [b][IMG]http://www.hiveworkshop.com/forums/images_all/trigger/set.gif[/IMG]Hashtable - Save Handle Of(Triggering unit) as (Key unit2) of (Key unit2) in Hastabletmp[/b] (Key unit2) hoặc (Key unit3) cách lấy giá trị tùy biến từ Hashtable Mã: [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/unit.gif[/IMG]Unit - Kill (Load [B][COLOR="red"](Key unit2)[/COLOR][/B] of [COLOR="blue"][B](Key unit2)[/B][/COLOR] in Hastabletmp) muốn xóa 1 giá trị thì sử dụng kiểu Mã: [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/set.gif[/IMG]Hashtable - Clear all child hashtables of child (Key unit2) in Hastabletmp tương tự như Mã: [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/set.gif[/IMG]Set TempUnit = No unit tại sao lại xóa dc? lý do mình xóa mục key có tên là unit2 key này sử dụng giá trị (Triggering unit) được qua No unit cách load giá trị thì sử dụng tên key X và Y không bắt buộc bạn phải sử dụng tên unit bạn có thể sử dụng bất kỳ 1 tên giá trị nào chỉ cần cần load và cần save đúng cách Mã: [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/unit.gif[/IMG]Unit - Create 1 Footman for [B](Owner of (Load (Key unit) of (Key unit) in Hastabletmp))[/B] at (Center of (Playable map area)) facing Default building facing degrees Hashtable có phải là MUI ko ? Hashtable tùy biến giá trị như hẹt Variable việc tùy biến giá trị bạn có thể sử dụng MUI Integer hoặc MUI Group ví dụ Mã: [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/set.gif[/IMG]Set TempUnit[MUI] = (Triggering unit) [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/unit.gif[/IMG]Unit - Create 1 Footman for (Owner of TempUnit[MUI]) at (Center of (Playable map area)) facing Default building facing degrees còn Hashtable thì Mã: [IMG]http://www.hiveworkshop.com/forums/images_all/trigger/unit.gif[/IMG]Unit - Create 1 Footman for (Owner of (Load MUI of (Key unit) in Hastabletmp)) at (Center of (Playable map area)) facing Default building facing degrees bạn có thể sử dụng 1 key X và Y 1 key dạng Integer[MUI] 1 key dạng name để lưu lại giá trị tùy biến kiểu MUI việc hướng dẫn mình chỉ viết tới đây thôi nếu có bị nếu không hiểu hay thắc mắc thì liên hệ mình..
Dù sao thì hashtable trong war cũng ko đc nhanh lắm... nếu có thể tốt nhất là học vJass và dùng 1 lib chuyên dùng để indexing nào đó (UnitIndexer, AIDS, PUI...)
nói thật mình cảm nhận hashtable rất tiện cho tiện tạo variable nhanh chóng. 100% là không hashtable chỉ có hiệu lực trong 1 bản đồ nếu muốn hỗ trợ next map thì sử dụng game cache
Ý dà....Game cache thì chết mất! khổ mỗi load và tạo! Tại hạ làm xong thần long định làm tiếp RPG mà kiểu này chắc gian hồ bất tái ngộ rồi!
Cách sử dụng Hashtable không phải là khó. Nếu không muốn nói là cực đơn giản. Nhưng sử dụng nó như thế nào để có hiệu quả (ví dụ như MUI 1 skill dồn dmg chẳng hạn, hay ghi nhớ từng unit sau khi bị cast skill mà vẫn load chính xác được khi cast lại vào unit đó...) là cực khó. Tut này vẫn chưa nêu được nhiều công dụng khác của hashtable. Và cái này thì chỉ cần google cũng ra .
tạm thời post nhiêu đó thôi đau đầu quá cái việc hashtable trong TUT này chỉ giải thích sử dụng ra sao là good rồi
Mã: Set TempUnit = (Triggering unit) Unit - Create 1 Footman for (Owner of (Triggering unit)) at (Center of (Playable map area)) facing Default building facing degrees vừa đặt biến TempUnit xong ở dưới lại dùng Triggering unit, vậy đặt biến làm gì? Mã: Hashtable - Save Handle Of(Triggering unit) as (Key unit) of (Key unit) in Hastabletmp Unit - Create 1 Footman for (Owner of (Load (Key unit) of (Key unit) in Hastabletmp)) at (Center of (Playable map area)) facing Default building facing degrees cách trên và cách dùng variable, đúng là không khác nhau, tuy nhiên cách này chậm hơn trông thấy, không ai làm vậy cả -------- Mã: Unit - Kill (Load (Key unit2) of (Key unit2) in Hastabletmp) lấy ví dụ về cách lấy unit trong hashtable sao lại dùng ví dụ này? cái này: Mã: Set TempUnit = Load (Key unit2) of (Key unit2) in Hastabletmp ko tốt hơn?