1. Tổng quan về Dialog Box: * Dialog box là gì? - Dialog Box là một hộp thoại hỏi trong game đưa ra với các nút để chọn lựa! Nó giống như những box của Window như khi bạn tắt một chương trình bị đứng, window của bạn sẽ mở một hộp thoại và hỏi bạn có muốn gửi lỗi đi không? Nó sẽ có 2 nút để bạn chọn đó là Gửi lỗi này đi và Đừng gửi!. Dialog Box là thứ tương tự như thế! * Cơ bản để tạo: Khi muốn tạo một dialog, bạn cần làm những bước đơn giản sau: a) Tạo Giá trị (Variables trong Trigger Editor) - Bạn cần tạo trước các giá trị sau nếu muốn bắt đầu làm một Dialog Box: + Tạo trước một giá trị kiểu "Dialog" . + Tạo trước một giá trị kiểu "Dialog Button". b) Tạo Dialog: Events Time - Elapsed game time is 1.00 seconds Conditions Actions Dialog - Clear myDialog Dialog - Change the title of myDialog to "vài đoạn văn bản" Dialog - Create a dialog button for myDialog labeled "Tiêu đề của nút" Set myButton = (Last created dialog Button) Dialog - Show myDialog for Player 1 (Red)c) Thực hiện hành động khi click vào dialog: Events Dialog - A dialog button is clicked for myDialog Conditions (Clicked dialog button) Equal to myButton Actions ... Cho hành động nào đó ở đây ... 2. Tạo Dialog Box đầu tiên của mình: Đây là thí dụ về một dạng Dialog đơn giản mà mình đã tạo: Đó là một Dialog box như mình đã nói trên phần 1! Tựa đề của nó là "My first dialog". Và có một phím đề là "This is a button". Nào bắt tay vào công việc nhé! Để tạo một Dialog như trên, đầu tiên các bạn cần một vài giá trị trong Trigger Editor. Mở Trigger Editor lên . Chọn nút "new variable button" (Tạo một giá trị mới) (Nút có đề biểu tượng chữ X màu vàng) Nó sẽ hiện lên một cái bảng nhỏ, tiếp tục chọn nút "new variable" (Nút đề biểu tượng chữ X màu lục) Và xong sẽ hiện lên một cái bảng nhỏ nữa, bạn hãy làm theo sau đây: Ta có Variables Name (Tên giá trị ) là myDialog Variables Type (Kiểu giá trị) là Dialog Xong thì ta chọn nút "OK" Nào giờ thì chúng ta đã có một giá trị để bắt đầu công việc đây Giờ thì hãy trở lại Trigger Editor, chúng ta cần tạo một Trigger mới (New Trigger) và đặt cho nó một cái tên! Ví dụ như "MyFirstDialog" chả hạng Ồ! Bây giờ chúng ta cần một event (sự kiện) để cho trigger chạy hiện Dialog lên Kích chuột phải vào chữ Events và chọn "New Event" để tạo một lệnh sự kiện! Nó hiện lên một cái bảng và Select Box (Hộp chọn) của nó hiện lên lệnh đầu tiên là "Map initialization". Chọn Select Box đó và đưa tới lệnh tên là "Time - Time elapsed" Chọn OK và dưới chữ Event lúc nãy sẽ có mục chữ con nằm trong đó là "Elapsed game time is 5.00 seconds" Số 5.00 đó là một giá trị Reals (R : Giá trị số hữu tỉ), thể hiện thời gian trigger chạy! Mình dịch cả câu lệnh trên sẽ là "Khi thời gian của trò chơi là (đạt đến mốc) 5.00 giây" - Như vậy nghĩa là khi thời gian trong game đạt đến 5 giây thì trigger này sẽ bắt đầu chạy!Các bạn có thể sửa số năm đó thành tùy ý thời gian để trigger chạy! Xong rồi, chọn OK các bạn nhé! Lưu ý: Sở dĩ chọn Time - Time elapsed thay event là Map initialization (Map bắt đầu chạy) vì Dialog ko thể hoạt động lúc game mới vừa chạy lên đc! Các bạn lưu ý nhé! Hiện tại chúng ta sẽ bỏ qua mục Conditions (Điều kiện) Nào thì làm Dialog hiện nhé Kích chuột phải vào phần Actions và chọn New Action và chọn đến mục "Dialog - " Có bao gồm 4 lệnh Dialog mà bạn thấy là: Giờ chúng ta hãy làm tiếp công việc đầu tiên cần làm trước khi cho hiện một Dialog Box là Xóa sạch nó (Dialog - Clear). Chọn hàm lệnh đó nào. Sau đó thì phía dưới đó sẽ hiện ra mục mà chúng ta sẽ chọn là Dọn sạch Dialog nào? Chọn giá trị Dialog mà chúng ta tạo lúc nãy, chọn OK hết cho đến khi mất cái bảng Tạo Actions đó đi thì thôi. Và bây giờ hàng chữ đầu tiên nằm trong mục con của mục Actions của bạn có như của mình không nào? - "Dialog - Clear myDialog" Lưu ý: Bởi vì Dialog luôn cần phải Clear nó trước khi lôi ra sử dụng Tiếp tục tạo một Actions mới, lần này chúng ta chọn phần Dialog - Change Title Lại hiện ra với đoạn text có chứa hai phần chữ Màu Đỏ đúng không? Chọn vào chữ Dialog rồi chọn giá trị Dialog của bạn, tiếp theo thì chọn vào chữ Title và đánh vào tiêu đề cho Dialogs khi hiện lên (Vd: My first dialog)! Xong rồi, xem nào? Cái của bạn có giống của mình không? - Dialog - Change the title of myDialog to My first dialog Giờ việc chúng ta cần làm tiếp theo là tạo cho nó một nút trên Dialog Chọn New Actions nữa, chọn mục Dialog - Create dialog button Chọn giá trị Dialogs của bạn như phía trên. chọn mục Text và đặt cho nó một tiêu đề, ở đây mình cho nó tên là "This is a button"! Chọn OK nếu đã hoàn thành các bước trên. Tiếp tục để cho Dialog hiện lên khi chạy trigger, chọn tiếp New Action, chọn phần Dialog - Show/Hide Để sẵn giá trị nếu có phần chữ xanh đề là Show, nếu để chữ Hide thì bạn kích vào sửa lại thành Show nhé! Giá trị Dialog thì bạn cũng chọn giá trị như các bước trước! Lần này lại có thêm một giá trị đó là Player 1 (red) ở chữ cuối dòng! Đó là Player mà Dialog hiện lên chỉ cho Player đó thấy! Ta chọn Player 1 (Red) ! Xem lại các bước trên nào! Trigger của bạn có như mình chưa nào? Lưu ý: Nếu thứ tự các dòng Action của bạn không như hình trên , bạn hãy nắm và kéo lê nó xuống sao cho như bên hình nhé! Hiện tại bạn có thể cho chạy map ở thời điểm này Tuy nhiên chúng ta vẫn chưa cho một hành động nào khi chọn vào nút của Dialog Box đó! Vào mục Variables lần nữa và tạo một giá trị kiểu Dialog Button. Xem xem bạn có làm như của mình không nè: Xong rồi thì ta trở lại Trigger 'MyFirstDialog' trước, Thêm một dòng Actions vào giữa dòng Dialog - Show/Hide và Dialog - create a dialog button... một dòng action là Set Variables = .... Kích vào chữ variables phía dưới và chọn giá trị mới tạo 'myButton', sau khi chọn xong ta sẽ cho giá trị bằng của nó là (Last created dialog button) Rồi, thế là đã hoàn thành Trigger này! Chúng ta tiếp tục tạo một trigger khác để cho mỗi khi ấn vào nút "This is a button" thì nó sẽ chạy gì đó! Tạo một trigger và đặt tên cho nó như ở bước đầu ấy! Mình đặt tên cho trigger này là "Button" Chọn Event và chọn hàm Event trong mục chọn là Dialog - Dialog button click, chọn giá trị Dialog là giá trị Dialog mà bạn đã tạo (myDialog). Xong rồi chọn OK! Giờ thì chọn vào mục Conditions, tạo một New Conditions cho trigger đó nào! Điều này có nghĩa là khi bạn làm theo event trên, nó sẽ kiểm tra qua bước điều kiện này rồi mới thực hiện hành động dưới! Chọn New Conditions, Chọn mục "Dialog Button Comparison" Có hai bên phần, một bên là để sẵn giá trị "(clicked dialog button)" thì chuẩn không cần chỉnh rồi! Nhưng vẫn còn một giá trị bên kia vẫn còn sót cần chúng ta chỉnh , chọn nó và chọn giá trị 'myButton' mà chúng ta tạo! Vẫn chọn OK như lần hoàn thành trên! Và chúng ta sẽ cho nó một hành động gì đó, mình sẽ cho hàm Game - Text message (auto-timed) là ví dụ sau! Và hãy làm theo các bước tương tự ở các bước trên. Ô! Mình làm xong rồi này? Các bạn xem có giống mình không nhé: Nào hãy thử lưu lại và chạy map vừa lưu xem nào? Có như hình này không? Nếu như thế thì chúc mừng bạn! Bạn đã thành công trong việc tạo Dialog Box đầu tiên cho mình rồi đấy! [spoil] 3. Nâng cao kỹ thuật làm Dialog Box: Đây là phần bài tập nâng cao làm Dialog box sau khi các bạn đã thành thạo phần 2 phía trên! Ở đây chúng ta sẽ học cách làm một Dialogs chọn Hero cho map Và Dialog Box trên sẽ tương tự như thế này: 3.1. Bắt đầu: Ở đây có 2 Dialog riêng biệt! Vì thế chúng ta cần tạo 2 giá trị kiểu Dialog riêng biệt! Mình đã tạo 2 giá trị này và đặt tên nó là "HeroDialog1","HeroDialog2" Và cái 'Tiêu đề' cho hai cái Giá trị Dialog trên trong phần tạo mình sẽ đặt tên chúng lần lượt là: "Choose a Hero (1/2)" và "Choose a Hero (2/2)" Giá trị Buttons? Nên nhớ, để cho các nút chúng ta tạo có thể dùng/ hành động sau này, chúng ta cần những giá trị button gắn với mỗi nút! Cần bao nhiêu giá trị cho 2 Dialog này đây? Ồ hãy nhớ rằng chúng ta đang tập làm bảng chọn Hero, bao gồm 8 hero, chia đều mỗi bảng 4 người, cùng 2 phím chuyển đổi qua lại giữa 2 dialog! Tổng cộng chúng ta cần 10 giá trị Dialog Button cho bài tập này! Chúng ta phải và tất nhiên tạo ra 10 giá trị Dialog Button! Nhưng nếu vậy thì rất rắc rối vì phải tạo từng cái một (Ôi chết tôi mất!). Cách đơn giản hơn ở đây là chúng ta sẽ sử dụng Array! Chúng ta chỉ cần tạo một biến Dialog Button, check vào ô Array phía dưới đó và cho giá trị dính kèm tối đa cho giá trị này là 10! Rồi! Chúng ta đã có một biến Dialog Button tên là "DialogButtons" và cho nó array chứa kích thước là 10 giá trị dính kèm! Chúng ta tiếp tục. Sau đó hãy nghĩ đến các hành động và điều kiện sau: Khi phím 1 được chọn, tạo Hero số 1 Khi phím 2 được chọn, tạo Hero số 2... và cũng cần tới các phím sang trang: Khi phím "to page 1" được chọn, hiện Dialog 1 Khi phím "to page 2" được chọn, hiện Dialog 2 Thế là đã chuẩn bị xong mỗi giá trị kèm cho mỗi array của Button! Tiếp tục tạo một biến có array để đính kèm giá trị của những Hero của chúng ta! Vì vậy hãy làm một danh sách hero trước! Nếu đã lập xong, tạo một giá trị mới tên là Heroes , kiểu Unit-Type có giá trị array và lượng dính kèm giá trị tối đa là 10 (size)! Tuy nhiên chúng ta chỉ có 8 Hero được cho thay vì số kích thước của array biến đó là 10, chính vì vậy sẽ có những điểm dính kèm trong giá trị được bỏ trống! Và chỗ đó sẽ là thứ tự trong biến array để sang Dialog 1 và Dialog 2 Xong thì các giá trị chúng ta đã tạo sẽ tương tự như sau: 3.2. Triggers: a) Tổng quát: Chúng ta cần dính kèm mỗi Hero vào mỗi đơn vị của biến Heroes array đã tạo. Làm việc đó nhờ vào trigger Khởi động map: Khi bạn làm xong các bước trên, chúng ta cùng quay sang việc tạo Dialog số 1 nào! Tạo các button array đính các đơn vị array từ 1 tới 4 và lần lượt cho nó các tiêu đề là "Alchemist","Naga Sea Witch","Tinker","Beast Master" (Đơn vị thứ tự đặt theo đơn vị đính kèm của biến Heroes). Tất nhiên giá trị thứ 5 là để "To Page 2", các button array từ 6-> 10 thì cũng đặt theo tên hero của bạn đã đính kèm giá trị Heroes array đó từ trước! Giá trị Button thứ 10 là để "To Page 1". Trigger tạo Dialog đặt riêng với bên Đặt biến Heroes array nhé! Nhớ cả lưu ý Dialog không thể hiện lên khi chạy bởi event Map Initialization! Bởi nếu bây giờ cho Dialog hiện lên ngay để chúng ta chọn thì quá sớm! Như vậy không thể hiện cái gì lên màn hình vào lúc đó! Vì vậy chúng ta cần một hàm đợi, khoảng 0.25 giây hoặc như trigger dưới đây để tạo Dialog b) Chi tiết: Dialog - Clear HeroDialog1 Dialog cần được dọn sạch trước khi tạo cho nó bất kỳ phím nào, đơn giản bởi vì để cho nó được "ngăn nắp" hơn và tránh khỏi "mớ hỗn độn" được bày ra trước đó! Dialog - Change the title of HeroDialog1 to Choose a Hero (1/2) Hành động chỉnh tiêu đề chính cho Dialog (Bạn có thể hiểu nôn na là một câu yêu cầu hoặc hỏi của một lỗi Window!) Dialog - Create a dialog button for HeroDialog1 labeled Alchemist Set DialogButtons[1] = (Last created dialog Button) Tạo cho Dialog 1 một nút có tiêu đề là Alchemist, phía dưới là đính kèm cho giá trị DialogButtons[ đơn vị 1] là nút vừa tạo trên! Dialog - Create a dialog button for HeroDialog1 labeled Naga Sea Witch Set DialogButtons[2] = (Last created dialog Button) Dialog - Create a dialog button for HeroDialog1 labeled Tinker Set DialogButtons[3] = (Last created dialog Button) Dialog - Create a dialog button for HeroDialog1 labeled Beastmaster Set DialogButtons[4] = (Last created dialog Button) Tương tự trên! Nhưng bạn nên nhớ, mỗi một đơn vị trong array của DialogButtons thì phải ứng với số đơn vị array của Heroes được đính kèm, ví dụ Heroes[1] là hero Alchemist thì DialogButtons[1] cũng phải ứng với nút được tạo có tiêu đề là tên hero đó! cuối cùng là Dialog - Create a dialog button for HeroDialog1 labeled ...to page 2 Set DialogButtons[5] = (Last created dialog Button) Tạo cho Dialog1 một nút để chuyển qua Dialog2, đính kèm đơn vị array là 5! Tất nhiên Dialog2 cũng sẽ tương tự như những điều đã giải thích trên! Tuy nhiên Đơn vị array của nó là từ 6-> 10, số 10 là nút chuyển lại Dialog1 Cuối cùng là hiển thị Dialog đã tạo lên cho mọi người thấy để chọn Player Group - Pick every player in (All players controlled by a User player) and do (Actions) Loop - Actions Dialog - Show HeroDialog1 for (Picked player) Hành động này sẽ khiến tất cả những Người chơi trong map (Không phải máy tính) được hiển thị bản chọn Hero lên, tuy nhiên nên nhớ ta chỉ cho hiển thị Dialog1 thôi vì từ nó chuyển sang Dialog2 được! 3.3.Trigger dành cho Dialog: a) Tổng quát: Giờ thì Dialog của chúng ta đã thật sự có thể hiện thị lên màn hình rồi!Nhưng khi chọn vào các nút không có chuyện gì xảy ra cả phải không? Vì vậy để hoạt động, chúng ta cần môt trigger để hoạt động mỗi khi chọn một nút nào đó! Đây: Nhìn hình ảnh trên nhé! Sau đây sẽ là cách chi tiết b) Chi tiết : Event Dialog - A dialog button is clicked for HeroDialog1 Dialog - A dialog button is clicked for HeroDialog2Là Event cho Trigger, một khi bạn chọn một nút trong Dialog1 hoặc Dialog2 thì sẽ thực hiện hành động bên dưới! Conditions: Ở trigger này không cần Điều kiện chính, dưới actions kia chúng ta sẽ học cách làm các điều kiện con! Actions: * Hành động chuyển đổi 2 Dialog: If (All Conditions are True) then do (Then Actions) else do (Else Actions) If - Conditions (Clicked dialog button) Equal to DialogButtons[5]Then - Actions Dialog - Change the title of HeroDialog2 to Choose a Hero (2/2) Dialog - Show HeroDialog2 for (Triggering player) Skip remaining actionsElse - Actions Cho điều kiện con của nó là (Clicked dialog button) Equal to DialogButtons[5] nằm trong "Dialog Button Comparison". Khi DialogButton số 5 (tức là nút 'to page 2') được ấn thì sẽ chỉnh tiêu đề của Dialog2 thành 'Choose a Hero (2/2)', sau đó hiện Dialog2 lên cho (Triggering Player) - người chơi đã chọn phím đó! Hàm Skip remaining actions này nghĩa là bỏ qua tất cả hành động còn lại, nghĩa là sẽ không xét tới các kiện hàm phía dưới! Lưu ý: Chúng ta cần đặt lại tiêu đề cho Dialog hiện lên bởi vì nếu không thực hiện, mỗi lần Dialog đó hiện lên tiêu đề đều bị 'không cánh mà bay'! Hãy đặt lại trước khi hiện dialog đó lên cho một người nào đó nhé! Chúng ta không cần phải Phá hủy (Destroy Dialog) một Dialog nào bởi mặc định khi chọn một nút, dialog đó sẽ tự ẩn đi! * Đổi sang Dialog 1: If (All Conditions are True) then do (Then Actions) else do (Else Actions) If - Conditions (Clicked dialog button) Equal to DialogButtons[10]Then - Actions Dialog - Change the title of HeroDialog1 to Choose a Hero (1/2) Dialog - Show HeroDialog1 for (Triggering player) Skip remaining actionsElse - Actions Tương tự như trên rồi! Có lẽ mình không cần giải thích rườm rà nhỉ ! Chỉ cần đổi array 5 sang array 10 rồi cho hành động ngược lại thôi! * Tạo hero: For each (Integer A) from 1 to 10, do (Actions) Loop - Actions If (All Conditions are True) then do (Then Actions) else do (Else Actions) If - Conditions (Clicked dialog button) Equal to DialogButtons[(Integer A)]Then - Actions Unit - Create 1 Heroes[(Integer A)] for (Triggering player) at ((Triggering player) start location) facing Default building facing degrees Selection - Select (Last created unit) for (Triggering player) Game - Display to (Player group((Triggering player))) the text: (Name of (Last created unit))Else - Actions Nếu hoàn thành bước này, người chơi sẽ có được hero mà họ đã chọn Giờ mình sẽ giải nghĩa nó nhé: Chúng ta có bao gồm từ 1 tới 10 đơn vị ở array của DialogButtons! Vì thế chúng ta sẽ thực hiện một hàm lập đi đơn giản: Vòng lặp đi từ 1 cho tới 10 tính theo (Integer A), tức nghĩa đây sẽ chạy hết 10 nút! NẾU Nút mà người chơi nào đó chọn là nút thứ (Integer A) (Vì Integer A này sẽ được lập lại, giá trị ban đầu của nó là 1, mỗi lần lập nó sẽ được +1 đơn vị, lập đến khi nào giá trị của nó bằng 10 thì thôi!) (Hàm này nghĩa là kiểm tra xem nút của người ta chọn là nút nằm ở Integer A nào) THÌ Khi kiểm tra nút người chơi chọn ở đơn vị mấy, lập tức hàm Nếu sẽ thông qua và Mở cổng chính cho Hero đó xuất khẩu nếu phím người chơi chọn có đơn vị là Integer A Sau đó hãy tạo một hero trong biến Unit-Type array đã cho từ trước và đơn vị array là Integer A cho hàm chọn Hero vừa tạo để không cần phải chọn nó bằng thủ công! Cho hàm thông báo người chơi đó đã chọn Hero gì? Thế là kết thúc phần nâng cao rồi! Hi vọng các bạn có thể làm cho mình một Dialog tương tự thật tuyệt! [/spoil] --------------------------------------------------------------------------------- Gửi lời cảm ơn tới \ Thanks to: AceHart Source:http://world-editor-tutorials.thehelper.net/dialogs.php Đây là bài hướng dẫn thứ hai của em! Các bác xem và nhận xét giúp em nhé! Mình hi vọng các bạn Newbie qua phần này có thể có thêm phần nào ý tưởng hay hay cho map và thêm phần nào kiến thức cho các bạn! Map demo cho các bạn nào tìm hiểu, mình lấy từ bác AceHart cho:http://www.mediafire.com/?6j3xbqi2f8b351b
Dorae.Mun chịu cài ghê nhỉ. Dịch thuật khá tốt phát huy nha. Àk có gì gom link lại 1 chỗ mình tổng hợp lại lun
Hì hì thấy mấy bác như vậy em cũng muốn đóng góp một tay ạ! Phần lớn trong đây em xem qua tham khảo rồi sửa bản chứ em nhìn thì... translate kĩ hơn 1 nửa ! thêm 1 người còn hơn thiếu 1 người! Mà em chắc chưa gom đc bao nhiu đâu, để em viết thêm vài bài nữa rồi em gom link hướng dẫn vô từng bài ạ!
Em đã hoàn thành bài hướng dẫn rồi! Yeahhh!!! Bài 3 này hơi khó dịch! Các bác giúp em xem nha! ^^ Hi vọng các bạn newbie chịu khó đọc nha! Người ta nói có công mài sắt có ngày nên kim mà!
Cậu mới vào forum mà rành mấy cái Button đó ghê, tui làm WE từ đó giờ ko hề biết tạo 1 cái nút thôi chứ đừng nói mà nhìu nút rồi còn Page @@!
Cám ơn đóng góp của bạn, rất hữu ích. Nhưng bạn nên chú ý khi trình bày trigger thì cho vào thẻ Mã: cho dễ nhìn nhé.[/COLOR][/B]