Tự viết AI cho vGE trong 30 phút

Thảo luận trong 'Granado Espada' bắt đầu bởi HeyHiAll, 18/9/10.

  1. HeyHiAll

    HeyHiAll Youtube Master Race

    Tham gia ngày:
    21/6/09
    Bài viết:
    82
    Đây là bản Ak Fighter 30p V100.
    Thời gian để tôi viết nó chỉ mất 30 phút, nên đặt tên là Ak Fighter 30p.

    Những bạn muốn tự viết AI có thể lấy bản này làm điểm xuất phát, rồi phát triển thêm dần.
    Bản này có các tính chất sau:
    -Xuất phát từ vGE gốc, 17-05-2010,
    -Rất đơn giản, ngắn gọn.
    -Trong AI này hàm phức tạp nhất là hàm Ak_INIT(), do tôi thiết kế, đang xài trong AkFtPro 2V330.
    -Duy nhất 1 hotkey là Shift 4: AutoKeep = ON/OFF.
    -Chỉ: Đánh chay, Ăn HP (khi HP < 60%) và Nhặt đồ.
    -Đánh (chay) rất nhanh, không thể có AI nào đánh nhanh hơn được.
    -Nó đánh nhanh vì logic đánh đơn giản: cứ phang quái nào ở gần mình nhất.
    -Nhưng vì logic quá đơn giản nên sẽ gặp các tình huống bất lợi, cứ xài thử sẽ hiểu bất lợi là như thế nào.
    -Để xử lý các tình huống bất lợi đó bạn hãy tự mình tìm giải pháp.
    -Các giải pháp của bạn sẽ làm AI đánh khôn dần lên, nhưng cũng sẽ chậm dần đi, vì mất thêm thời gian xử lý.

    Chúc bạn thành công.

    Tải về bằng link này:
    http://www.MidiUtility.com/Element/DownLxx.asp?sID=GE_AI2
     
  2. HeyHiAll

    HeyHiAll Youtube Master Race

    Tham gia ngày:
    21/6/09
    Bài viết:
    82
    Nếu có khả năng, thì hãy tự viết một AI cho team của mình, với thành phần team xác định, vị trí nhân vật cũng xác định luôn.
    Ví dụ:
    -Nhân vật số 1: Chiến Binh kiếm bản lớn
    -Nhân vật số 2: Mus súng trường
    -Nhân vật số 3: Mus 2 súng ngắn.

    ....
    AI đó sẽ được viết tối ưu cho team của bạn.
    Nhưng team khác không sử dụng được.
     
  3. MagicOne

    MagicOne Mario & Luigi Lão Làng GVN

    Tham gia ngày:
    22/3/05
    Bài viết:
    769
    Thx bác rất nhiều, có cái này thì em sẽ nghiên cứu cả đêm nay để làm cho đội hình phù hợp
     
  4. zeychu

    zeychu Youtube Master Race

    Tham gia ngày:
    6/5/07
    Bài viết:
    3
    bác akiet hướng dẫn thêm hàm buf scout, auto doping và vứt đạn như bản akft đi bác :)
     
  5. MagicOne

    MagicOne Mario & Luigi Lão Làng GVN

    Tham gia ngày:
    22/3/05
    Bài viết:
    769
    Có khá nhiều ng còn chưa biết viết auto ra sao, hơn nữa lại càng khó với cách viết của bác Ak mang nặng thương hiệu của bác ấy, ai ko bít ko hiểu là khỏi sửa :D
     
  6. xaydaygia

    xaydaygia Youtube Master Race

    Tham gia ngày:
    11/3/07
    Bài viết:
    2
    pác chỉ cách viết cho mọi người có thể viết lun :D:K
     
  7. HeyHiAll

    HeyHiAll Youtube Master Race

    Tham gia ngày:
    21/6/09
    Bài viết:
    82
    Đầu tiên hãy đặt mục tiêu đánh (chay) ngon trước.
    Sau đó mới làm tiếp buff các kiểu, đặc biệt là scout buff, vì nó cần cho nhiều team.

    Việc tiếp theo cần làm có lẽ là giới hạn phạm vi đánh.
    Những ai đã chạy thử V100 sẽ thấy hạn chế của nó là chạy khắp map nên phá người chơi khác, có thể gặp Boss,... Người ta bị phá, khó chịu quá thì có thể pk mình cho bỏ ghét :)).

    Tạm thời có thể hạn chế phạm vi là 4000, không chạy xa hơn nữa, khỏi làm hotkey.
    Hãy tìm cách đưa team quay về điểm gốc khi nó cách xa điểm gốc hơn 4000.
     
  8. zeychu

    zeychu Youtube Master Race

    Tham gia ngày:
    6/5/07
    Bài viết:
    3
    để chỉnh phạm vi 6000 thì làm sao vậy bác ?
     
  9. xaydaygia

    xaydaygia Youtube Master Race

    Tham gia ngày:
    11/3/07
    Bài viết:
    2
    chỉ cách để viết lun đi bác.
    nói thế sao hiểu đc
     
  10. HeyHiAll

    HeyHiAll Youtube Master Race

    Tham gia ngày:
    21/6/09
    Bài viết:
    82
    Sau khi init chạy thành công, 3 nhân vật trong team được xác định bởi 3 giá trị (khác nhau) self1, self2, self3 (hoặc 3 giá trị selfAi tương ứng).
    Để kiểm tra khoảng cách từ nhân vật SelfAi đến điểm gốc, dùng hàm sau (của GE):
    IsNearFromKeepDestPosition(selfAi, x) (x là khoảng cách cần kiểm tra).
    -Nếu hàm trả về 'YES' (chuỗi ký tự) thì nv SelfAi nằm trong bán kính x tính từ điểm gốc.
    -Nếu hàm trả về khác 'YES' thì nv SelfAi nằm ngoài bán kính x tính từ điểm gốc.
    -Điểm gốc là điểm nhân vật đang đứng tại thời điểm người dùng nhấn phím Space.

    Do vậy thử tìm cách làm như sau:
    if(IsNearFromKeepDestPosition(selfAi,4000) != 'YES') KeepDestMoveTo(selfAi);

    Hàm KeepDestMoveTo(selfAi) sẽ làm cho nhân vật SelfAi chạy về điểm gốc.
     
  11. lina_angel

    lina_angel Alone In The Dark Darkness... Lão Làng GVN

    Tham gia ngày:
    29/9/04
    Bài viết:
    2,242
    Nơi ở:
    DoTa of warcraft
    ơ con mizzz mà cũng lão làng @@ ............................
     
  12. xaydaygia

    xaydaygia Youtube Master Race

    Tham gia ngày:
    11/3/07
    Bài viết:
    2
    mấy cái này chỉnh trong Ai hã pác.Làm sao để chỉnh trong đó đc
     
  13. HeyHiAll

    HeyHiAll Youtube Master Race

    Tham gia ngày:
    21/6/09
    Bài viết:
    82
    Theo như cách bạn xaydaygia hỏi thì có vẻ bạn chưa đủ khả năng tự viết AI.
    Để tự viết được AI không đơn giản đâu.
    Ở đây tôi đặt vấn đề viết mới một AI, chứ không phải là chỉnh một AI đang có sẵn.
    Không thể chỉ "chỉnh" những gì có sẵn trong vGE gốc, mà phải viết thêm rất nhiều.

    ---------- Post added at 08:33 ---------- Previous post was at 08:29 ----------

    Bản gốc ban đầu có kích thước 4k, bây giờ đã lên tới 6k, tức là mình đã viết thêm vào đó 2k rồi.
    Cái AkFtPro 2V330 có kích thước tới 26k đấy.
     
  14. MagicOne

    MagicOne Mario & Luigi Lão Làng GVN

    Tham gia ngày:
    22/3/05
    Bài viết:
    769
    Ý kiến gì tên bạn già kia, ta gia nhập từ năm 2005, già rồi thì phải lên lão làng chứ =))

    Chắc bác HeyHiAll phải làm nguyên cái tutorial hướng dẫn từ bước đầu tiên cho ng chưa bít gì lun thì tiện hơn :D
     
  15. zeychu

    zeychu Youtube Master Race

    Tham gia ngày:
    6/5/07
    Bài viết:
    3
    Bác ak cho hỏi hàm chuyển kênh đi bác

    p/s:Bác ak có cách nào nén các file thành Ai.ipf nhanh không?
     
  16. luckyhieu

    luckyhieu Youtube Master Race

    Tham gia ngày:
    12/6/07
    Bài viết:
    1
    mình thi IT hơi bị yếu (gà) nên bác Kiet chỉ kỷ một chút
    chẳng hạng sài chương trình gì để viết (dùng chương trình nào hay, dể sử dụng chẳng hạn)
    các hàm đơn giản cho ae tham khảo.
    Giống như là một lớp học IT về BOT GE (do bác KIET đứng lớp)
    Nói gì thì cũng phải thanksssss bác KIET đã đóng góp cho các mem_vge.
    thanks thanks thanks
     
  17. HeyHiAll

    HeyHiAll Youtube Master Race

    Tham gia ngày:
    21/6/09
    Bài viết:
    82
    Muốn viết được AI này bạn cần:
    1-Hiểu và dùng được ngôn ngữ lập trình C (gần giống C, nhưng không giống hoàn toàn).
    2-Viết bằng Notepad kèm theo Windows
    3-AI gồm 4 files dạng văn bản là: attacker.scp, healer.scp, lib.scp, và puppet.scp;
    4-Sau khi viết hoặc sửa gì đó phải zip 4 files này lại thành 1 file duy nhất, tên là ai.zip
    5-Sửa cái ai.zip đó một chút (có thể sửa bằng Hex Editor) rồi đổi tên thành ai.ipf
    6-Thay cái ai.ipf này vào thư mục ge để chạy thử, kiểm tra.
    7-Nếu thấy có lỗi, hoặc chưa vừa ý cái gì đó, thì làm lại từ bước 1.

    Nếu bạn có một ai.ipf, và muốn xem code của nó, thì:
    -Sửa nó một chút, ngược lại với "một chút" ở trên
    -Đổi tên nó thành ai.zip
    -Xả zip ra, có thể bị yêu cầu nhập mật khẩu zip.
    -Sẽ được 4 files dạng văn bản là: attacker.scp, healer.scp, lib.scp, và puppet.scp;

    ---------- Post added at 15:18 ---------- Previous post was at 14:55 ----------

    Sửa "một chút" cụ thể như sau:
    Tại mục số 5, sửa "xuôi" (gọi là pack):
    A/
    -Tìm trong ai.zip các ký tự: 'a', 't', 't', 'a', 'c', 'k', 'e', 'r', '.', 's', 'c', 'p'
    -Thay nó tương ứng bằng 0x95,0xDC,0x5A,0x6B,0x40,0x63,0x5C,0xAD,0x72,0x50,0x52,0x30

    B/
    -Tìm trong ai.zip các ký tự: 'h', 'e', 'a', 'l', 'e', 'r', '.', 's', 'c', 'p'
    -Thay nó tương ứng bằng 0x9C,0x6C,0x8C,0x63,0x7E,0xF3,0x9B,0x09,0xC2,0x1D

    C/
    -Tìm trong ai.zip các ký tự: 'l', 'i', 'b', '.', 's', 'c', 'p'
    -Thay nó tương ứng bằng 0x98,0x58,0x7C,0x97,0xE6,0xE9,0xDC

    D/
    -Tìm trong ai.zip các ký tự: 'p', 'u', 'p', 'p', 'e', 't', '.', 's', 'c', 'p'
    -Thay nó tương ứng bằng 0x84,0x3B,0x55,0xB3,0xE4,0x7F,0xC8,0x85,0x32,0x65

    Khi sửa ai.ifp "một chút" ngược lại (gọi là unpack), thì tìm các giá trị bên dưới, thay bằng chữ cái tương ứng phía trên.

    Mỗi mục A,B,C,D đều có 2 lần, giống hệt nhau
    Một số ai.ipf có nhiều hơn 2 lần, chắc là người viết nó muốn "gây rối" đánh lừa các công cụ nén/xả thôi.

    ---------- Post added at 15:31 ---------- Previous post was at 15:18 ----------

    Cần nói rõ hơn một chút khi tìm là tìm chuỗi liên tiếp các ký tự hoặc chuỗi liên tiếp các giá trị.
     
  18. zeychu

    zeychu Youtube Master Race

    Tham gia ngày:
    6/5/07
    Bài viết:
    3
    bác ak post lên hàm chuyển kênh đi :)...
     
  19. Melodylove

    Melodylove Youtube Master Race

    Tham gia ngày:
    3/9/04
    Bài viết:
    7
    Cái Script để viết AI nó là 1 dạng của Lua Script và phiên bản dùng cho GE là bản 5.0 các bạn có thể vào game dùng SysMsg(_VERSION); để check link online của Lua Script 5.0 http://www.lua.org/manual/5.0/ tuy nhiên nó chỉ khác ở vài điểm như sau VD: ở câu lệnh điều kiện IF ở Lua là If A>B then câu lênh End thì ở AI là if (A>B) {cau lệnh} ngoài cái này ra còn lại là dùng dc hết bạn nào muốn viết AI tìm hiểu qua Lua Script sẽ viết dễ hơn.
     
  20. HeyHiAll

    HeyHiAll Youtube Master Race

    Tham gia ngày:
    21/6/09
    Bài viết:
    82
    Để "Chuyển kênh" tôi không dùng một hàm rõ ràng, mà dùng nhiều lệnh phân bố rải rác trong AI.
    Do vậy gọi nó là "giải thuật" đúng hơn là "hàm", và bởi vậy không post riêng hàm đó lên được.
    Có thể trình bày dưới dạng giải thuật thôi.

    ---------- Post added at 18:05 ---------- Previous post was at 17:54 ----------

    Ví dụ khi muốn chuyển kênh tự động thì làm các việc (giải thuật) sau:
    -Bật cờ báo bắt đầu chuyển kênh
    -Tắt AutoKeep
    -Lưu các trạng thái Tự Động Đánh, Tự Động Hồi Máu của tất cả nhân vật,
    -Tắt tự động đánh, tự động hồi máu của tất cả nhân vật
    -Khi thấy cờ chuyển kênh bật, tất cả nhân vật ngưng đánh, chuyển sang trạng thái nghỉ (TS_NONE)
    -Leader chạy về điểm gốc
    -Khi leader đã về tới điểm gốc: hiện bảng chọn kênh lên
    -Kiểm ra nếu bảng chọn kênh đã hiện lên, thì bấm chọn kênh,
    -Nếu sau 8 giây vẫn thấy bảng chọn kênh, thì bấm lại chọn kênh lần nữa
    -Cứ như vậy cho đến khi không thấy bảng chọn kênh nữa (tức là GE đang thực hiện việc chuyển kênh)
    ....

    ---------- Post added at 18:17 ---------- Previous post was at 18:05 ----------

    Những việc không thể làm gọn trong 1 hàm rõ ràng, mà phải làm bằng nhiều lệnh phân bố rải rác như thế, là thuộc loại rất khó làm.
     

Chia sẻ trang này