Hãy đặt nó vào trong trường hợp 1 bản auto running bạn à :) PF cần thiết với 1 số team thôi, và trong khi train cũng k cần thiết, thực sự chỉ cần thiết khi raid hay pvp, mà raid hay pvp thì dùng tay chứ ai auto :( Đến cả như phiên bản Nutkungx cũng mấy khi sài Emi hay wiz để PF khi train đâu :)
Máy em yếu đâu mà yếu. Chạy 2 acc với bộ cài gốc, hiệu ứng full k giật tý nào, k lag tý nào Nhưng chạy AkCrazy thì lag cứ gọi là ... hjk . ___________Auto Merge________________ . Àh àh. Giờ thì đỡ rồi, có lẽ lúc nãy nó lag server thì phải ... zzz Mà a ơi, cái này hay quá, chỉ em chỗ nào ng cứu học viết AI cho GE đc hok, iem học cntt, hứng thú với mấy cái này lắm
thì cứ gòogle mà táng chứ sao, mình còn chả học CNTT, chưa được học 1 ngày nào IT ai teo j cả
ai của akietk dùng vòng while nên cpu luôn max ít nhất 1 core ( với duo core ), nói chung tương đối hao tài nguyên, ko hiểu có cách nào giải quyết ?
à joker cí nút scroll của chuột để phóng to thu nhỏ bản free hình như bị ngược thì phải
Cái đấy là do mình quen kiểu đó nên để thế, bạn có thể chỉnh trong option mà, ở trong game ấn Alt O lên
1 bổ sung nho nhỏ nhưng có lẽ hợp lý : bổ sung vào hàm healing check 1 chút để có thể chuyển qua lại giữa stance 1 và 2 : bình thường để stance 1 ( hồi sinh ) đến hết chu kì buf thì tự chuyển qua stance 2 buff rồi quay lại . Tui cũng đang nghiên cứu bổ sung thêm buff veteran nhưng hơi nản, he. nếu được thì akietk thêm vào 1 nút để tắt autoheal. cái đó nhiều lúc cũng rách việc phết
Ẹc moneyrain add yahoo tui đi, đã sửa có thể on off heal mà, stance vet thì buff đc rồi, nhưng mà chuyện đổi stance thì đã tham khảo ý kiến bác Kiệt nhiều lần rồi. Cái đổi stance để hs với AkFT mình đã thử thêm vào hàm healing như money nghĩ đó, để ở hàm res là đổi stance sang 1, khi đến chu kỳ buf thì luôn đổi sang 2 để buff nhưng kết quả không khả quan, bởi đúng như bác Kiệt nói, còn phải trả lại leader nữa, như thế lại phải cố định leader (khi đổi stance thì scout nó làm leader mất rồi :( ) Theo như bản PhapSuPro của bác Kiệt nói thì có lẽ bác ấy giải quyết đc vấn đề này rồi nhưng chắc còn nhiều vấn đề liên quan đến đổi stance buff, vì buff khó hơn là đổi stance để bay kiểu như wiz nên bác ấy chưa đưa sang AKFT Hoặc là cũng có thể dạo này bác ấy đang mải mê xem phim HD khoe với mình như thế
Sau đây là một số giải thuật (và code) quan trọng, do tôi thiết kế và lập trình, đã được sử dụng trong các AI tôi viết. Trước khi tôi công bố các AI đó (bằng nhiều cách khác nhau: cho free, cho có hỗ trợ, thương mại hoá, tặng,...) thì các giải thuật này không có trong bất cứ một AI nào tìm thấy được trên internet. 1/Giải thuật phát hiện 3 (hoặc 2) nhân vật trong team ở gần nhau, sử dụng ngay từ phiên bản cho free "Ak Crazy Hunter V106". Trong các phiên bản sau giải thuật này được chỉnh sửa chút ít để giảm tải cho CPU. //Get HPMin in Team func GetHpMinInTeam() { var TestAi1; var TestAi2; var TestAi3; var tHp; var Hp1 = 100; var Hp2 = 100; var Hp3 = 100; if(Keep_SWM == 'OFF') return 100; if(JobsCnt == 0) return 100; TestAi1 = GetAiActor(self1); tHp = 1; while(tHp < 100) { if(GetNeedHealFriend(TestAi1, 1, tHp) == nil) tHp = tHp +1; else break; } Hp1 = tHp; if(JobsCnt == 1) return Hp1; if(JobsCnt > 1) { TestAi2 = GetAiActor(self2); tHp = 1; while(tHp < 100) { if(GetNeedHealFriend(TestAi2, 1, tHp) == nil) tHp = tHp +1; else break; } Hp2 = tHp; } if(JobsCnt > 2) { TestAi3 = GetAiActor(self3); tHp = 1; while(tHp < 100) { if(GetNeedHealFriend(TestAi3, 1, tHp) == nil) tHp = tHp +1; else break; } Hp3 = tHp; } if(JobsCnt == 2) { if(Hp1 < Hp2) return Hp1; else if(Hp2 < Hp1) return Hp2; else return 100; } if(JobsCnt == 3) { if(Hp1 < Hp2 && Hp1 < Hp3) return Hp1; else if(Hp2 < Hp1 && Hp2 < Hp3) return Hp2; else if(Hp3 < Hp1 && Hp3 < Hp2) return Hp3; else return 100; } return 100; } // Kiem tra 3 (hoac 2) nhan vat o gan nhau // Range la 1/2 tam tac dung cua Scout Buff // HpMin la gia tri cot mau can kiem tra func IsFamMembInRange(TestRange) { var TestAi1; var TestAi2; var TestAi3; var HpMin; if(JobsCnt == 0) return 'UNKNOW'; if(JobsCnt == 1) return 'YES'; HpMin = GetHpMinInTeam(); if(HpMin == 100) return 'UNKNOW'; if(JobsCnt == 2) { TestAi1 = GetAiActor(self1); TestAi2 = GetAiActor(self2); if(GetNeedHealFriend(TestAi1, TestRange, HpMin) != nil) { if(GetNeedHealFriend(TestAi2, TestRange, HpMin) != nil) { return 'YES'; } } return 'NO'; } if(JobsCnt == 3) { TestAi1 = GetAiActor(self1); TestAi2 = GetAiActor(self2); TestAi3 = GetAiActor(self3); if(GetNeedHealFriend(TestAi1, TestRange, HpMin) != nil) { if(GetNeedHealFriend(TestAi2, TestRange, HpMin) != nil) { if(GetNeedHealFriend(TestAi3, TestRange, HpMin) != nil) { return 'YES'; } } } return 'NO'; } return 'NO'; }
2/Hàm Ak_INIT() và cách gọi nó để cho kết quả init tốt nhất thế giới hiện nay. Sử dụng trong các phiên bản "Ak Fighter Pro" (V210, V212,...), "Ak Jack Pro", "Ak PhapSu Pro",... A/Ví dụ cách gọi từ attacker.scp func SCR_ATTACKER_TS_NONE(self) { sleep(100); // start log AiLog('ATTACKER_TS_NONE : Start!!!'); .... // Main Loop while(1){ // Do Init if('DONE' != Ak_INIT(self,selfAi)){ sleep(200); ChangeTacticsAi(selfAi,'TS_NONE'); return; } .... // Main Sleep sleep(200); } } B/Bản thân hàm trong lib.scp func Ak_INIT(self,selfAi) { //1.'YES' if(AkInit == 'YES'){ if(IsTheSelfOk(self) != 1){ JobsCnt = 0; Keep_SWM = 'TÃìT'; TimeSw = 0; self1 = 'NO'; self2 = 'NO'; self3 = 'NO'; job1 = 'NO'; job2 = 'NO'; job3 = 'NO'; ResetAllInitVal(); AkInit = 'NO'; return; } return 'DONE'; } //2.'NO' if(job1 != 'NO' && job2 != 'NO' && job3 != 'NO'){ if(job1 == 'Scout' || job1 == 'Soho' || job1 == 'SohoFighter' || job1 == 'Viki' || job2 == 'Scout' || job2 == 'Soho' || job2 == 'SohoFighter' || job2 == 'Viki' || job3 == 'Scout' || job3 == 'Soho' || job3 == 'SohoFighter' || job3 == 'Viki') ScoutExit = 1; else { ScoutExit = 0; ScoutMode = 0; } if(job1 != 'Empty') JobsCnt = 1; if(job2 != 'Empty') JobsCnt = 2; if(job3 != 'Empty') JobsCnt = 3; if(LanDau != 0){ LanDau = 0; SwitchSingleSelectMode(); } ResetCharOpt(); SysMsg('JobsCnt = ' .. JobsCnt .. ' : ' .. job1 .. ' / ' .. job2 .. ' / ' .. job3); SysMsg('Ak Fighter Pro V212 - Taìc GiaÒ: NguyêÞn Anh Kiêòt'); SysMsg('========== WWW.MidiUtility.COM =========='); SysMsg('ThuÒ tuòc Init ðaÞ hoaÌn thaÌnh 3/3.'); SysMsg('Moòi thãìc mãìc vui loÌng liên hêò nick Yahoo: arsene_lupin008'); AkInit = 'YES'; return 'DONE'; } //a.Tim tri self1,job1 cho nv so 1: if(job1 == 'NO'){ if(InitCnt < 8){ SelectMyPc(0); InitCnt = InitCnt +1; return; } if(IsLeader(selfAi) == 'YES'){ job1 = GetJobName(selfAi); self1 = self; ThLeadrAi = selfAi; SysMsg('ThuÒ tuòc Init ðaÞ hoaÌn thaÌnh 1/3...'); InitCnt = 0; } return; } //b.Tim tri self2,job2 cho nv so 2 (neu co): if(job2 == 'NO'){ if(InitCnt < 8){ SelectMyPc(1); InitCnt = InitCnt +1; return; } if(IsLeader(selfAi) == 'YES'){ if(self != self1){ job2 = GetJobName(selfAi); self2 = self; } else { self2 = ''; job2 = 'Empty'; } SysMsg('ThuÒ tuòc Init ðaÞ hoaÌn thaÌnh 2/3...'); InitCnt = 0; } return; } //c.Tim tri self3,job3 cho nv so 3 (neu co): if(job3 == 'NO'){ if(InitCnt < 8){ SelectMyPc(2); InitCnt = InitCnt +1; return; } if(IsLeader(selfAi) == 'YES'){ if(self != self1 && self != self2){ job3 = GetJobName(selfAi); self3 = self; } else { self3 = ''; job3 = 'Empty'; } InitCnt = 0; } return; } } (còn nữa)
3/Hàm tìm mục tiêu thông minh, sử dụng trong "Ak Fighter Pro" (V210, V212,...), "Ak Jack Pro", "Ak PhapSu Pro",... Hàm này làm các nhân vật là attacker tìm và tấn công mục tiêu rất nhanh và thông minh trong chế độ không sử dụng lệnh Call() ("Follow Leader OFF"). func AkGetNearEnemy(self,selfAi,AtkRange) { var OkToFind = 0; var AkTarget = nil; var Ch1_Ai = nil; var Ch2_Ai = nil; var Ch3_Ai = nil; var ImTLeader; var ImInRange; if(Bat_Range == 0) ImInRange = 1; else { if(IsNearFromKeepDestPosition(selfAi, Bat_Range) == 'YES') ImInRange = 1; else ImInRange = 0; } if(JobsCnt > 0){ Ch1_Ai = GetAiActor(self1); if(self == self1){ if(Ch1AtkOn != 0){ OkToFind = 1; } } } if(JobsCnt > 1){ Ch2_Ai = GetAiActor(self2); if(self == self2){ if(Ch2AtkOn != 0){ OkToFind = 1; } } } if(JobsCnt > 2){ Ch3_Ai = GetAiActor(self3); if(self == self3){ if(Ch3AtkOn != 0){ OkToFind = 1; } } } if(OkToFind == 1){ if(IsLeader(selfAi) == 'YES') ImTLeader = 1; else ImTLeader = 0; AkTarget = GetNearEnemy(selfAi, 400); if(AkTarget == nil && Ch1_Ai != nil) AkTarget = GetActorAttackMe(Ch1_Ai); if(AkTarget == nil && Ch2_Ai != nil) AkTarget = GetActorAttackMe(Ch2_Ai); if(AkTarget == nil && Ch3_Ai != nil) AkTarget = GetActorAttackMe(Ch3_Ai); if(AkTarget == nil && ImTLeader == 0 && ThLeadrAi != nil) AkTarget = GetAiTarget(ThLeadrAi); if(AkTarget == nil){ if(CLModeOn == 1){ if(ImTLeader == 1) AkTarget = GetNearEnemy(selfAi,AtkRange); else { if(AkTarget == nil && Ch1_Ai != nil){ if(IsLeader(Ch1_Ai) == 'YES') AkTarget = GetActorAttackMe(Ch1_Ai); } if(AkTarget == nil && Ch2_Ai != nil){ if(IsLeader(Ch2_Ai) == 'YES') AkTarget = GetActorAttackMe(Ch2_Ai); } if(AkTarget == nil && Ch3_Ai != nil){ if(IsLeader(Ch3_Ai) == 'YES') AkTarget = GetActorAttackMe(Ch3_Ai); } if(ImInRange == 1 && AkTarget == nil) AkTarget = GetNearEnemy(selfAi,AtkRange); } } else if(ImInRange == 1) AkTarget = GetNearEnemy(selfAi,AtkRange); } return AkTarget; } return nil; } (còn nữa)
Bác AKIET có phiên bản running nào mới share cho ae đi, chỉ xin bản running thôi ko dám xin mấy bản pro kia đâu :)
Mình cũng đang xài bản AI của AK(thương mại) thấy rất good ^^. giờ yên tâm đi làm ^^ Nhưng còn 1 vấn đề là dùng AI này cắm jack nó xây loạn xị quá ^^
Hi hi cái bản crazy mà bạn với bác kiet cho free đó có ver nào mới hơn tẹo ko mà bác kiệt bảo chỉnh sửa cho đỡ tốn cpu đó :)
Vốn dĩ đã định bỏ Jack đi mà bạn, đã là Running thì đâu có Jack @ Mr ???: Bản nào cũng tốn thế thôi chỉ có nhiều tính năng hơn hay ít hơn thôi
Jack Running thì phải xây loạn xạ thôi, làm sao khác được. Còn "Ak Jack Pro" thì không running, nên nó xây cực ngon, và rất đẹp. Nếu hai (hoặc 1) nhân vật còn lại của team là attacker, thi nó đánh như Ak Fighter Pro.
JokerB gửi cho email này [email protected] một bản FT212 nhen. Đây là người đã hỗ trợ mình trên forum của Liberi.