Granado Espadaち〜とすれっど11

このエントリーをはてなブックマークに追加
924ネトゲ廃人@名無し:2008/01/26(土) 09:22:25 ID:???
インテだけはなんとかなった(´・ω・`)
他ができません(;´Д`)

var Timer = 0;
func SCR_HEALER_TS_KEEP(self)
{
sleep(100);
buff_time = buff_time + 1;
// start log
AiLog('SCR_HEALER_TS_KEEP : Start!!!');
// declare variables
var selfAi = GetAiActor(self);
var prevTS = GetPrevTS(selfAi);
// Hold Check
SCR_AI_LIB_UNHOLD(selfAi, prevTS);
// Main Loop
925ネトゲ廃人@名無し:2008/01/26(土) 09:22:51 ID:???
while(1){
Timer = Timer;
//Buff1 Intensify
if(Timer >= 6000){
Call();
Skill(2,0);
Timer2 = Timer2+1;
Timer1 = 0;
ChangeTacticsAi(selfAi, 'TS_KEEP');
return;
}
//Buff2 Acceleration
if(Timer >= 6000){
sleep(4000);
Call();
Skill(2,3);
Timer3 = Timer3+1;
Timer2 = 0;
ChangeTacticsAi(selfAi, 'TS_KEEP');
return;
}
//Buff3 Meditation
if(Timer >= 6000){
sleep(4000);
Call();
Skill(2,4);
Timer3 = 0;
ChangeTacticsAi(selfAi, 'TS_KEEP');
return;
}
926みすった・・:2008/01/26(土) 09:25:08 ID:???
後半これです
while(1){
Timer = Timer;
//Buff1 Intensify
if(Timer >= 6000){
Call();
Skill(2,0);
Timer = Timer;
Timer = 0;
ChangeTacticsAi(selfAi, 'TS_KEEP');
return;
}
//Buff2 Acceleration
if(Timer >= 6000){
sleep(4000);
Call();
Skill(2,3);
Timer = Timer;
Timer = 0;
ChangeTacticsAi(selfAi, 'TS_KEEP');
return;
}
//Buff3 Meditation
if(Timer >= 6000){
sleep(4000);
Call();
Skill(2,4);
Timer = 0;
ChangeTacticsAi(selfAi, 'TS_KEEP');
return;
}
927ネトゲ廃人@名無し:2008/01/26(土) 10:53:46 ID:???
オレはスカバフこうしてる

var BuffTimer = 0;
func SCR_HEALER_TS_KEEP(self)

var job = GetJobName(selfAi);
ShowInfo(1);
// Hold Check
SCR_AI_LIB_UNHOLD(selfAi, prevTS);
// Main Loop
while(1){
BuffTimer = BuffTimer+1;
//Buff
if(BuffTimer >= 400){
if(job == 'Scout'){
if('ChangeTS' == SCR_AI_LIB_BUFF(self,selfAi)){
BuffTimer = 0;
return;
}
}
}
// User Skill Check

928ネトゲ廃人@名無し:2008/01/26(土) 10:54:36 ID:???
//Buff
func SCR_AI_LIB_BUFF(self,selfAi)
{
Call();
Skill(2,0);
sleep(4500);
Call();
Skill(2,3);
sleep(4500);
Call();
Skill(2,4);
ChangeTacticsAi(selfAi, 'TS_KEEP');
return 'ChangeTS';
}
929ネトゲ廃人@名無し:2008/01/26(土) 10:57:33 ID:???
オレはプロテクこうしてる

var gTarget = nil;
var BuffTimer = 0;
func SCR_ATTACKER_TS_KEEP(self)

var job = GetJobName(selfAi);
// Hold Check
SCR_AI_LIB_UNHOLD(selfAi, prevTS);
ShowInfo(1);
// Main Loop
while(1){
BuffTimer = BuffTimer+1;
//ProtectionField
if(BuffTimer >= 15){
if(job == 'Emilia' || job=='EmiliaSage'){
if('ChangeTS' == SCR_AI_LIB_PROTECTION(self,selfAi)){
BuffTimer = 0;
return;
}
}
}
// User Target Check
930ネトゲ廃人@名無:2008/01/26(土) 10:58:14 ID:???
//ProtectionField
func SCR_AI_LIB_PROTECTION(self,selfAi)
{
Call();
Skill(2,2);
SkillOnMyPc(0);
sleep(4800);
Call();
Skill(2,2);
SkillOnMyPc(1);
sleep(4800);
Call();
Skill(2,2);
SkillOnMyPc(2);
sleep(500);
ChangeTacticsAi(selfAi, 'TS_KEEP');
return 'ChangeTS';
}
931ネトゲ廃人@名無:2008/01/26(土) 11:01:51 ID:???
Call(); は無くてもいいかもしんない。
離れてると行き違いでかからない時ある。

でもメンドイからそのまま使ってるw
932ネトゲ廃人@名無し:2008/01/26(土) 11:04:04 ID:???
Timer = Timer
が謎すぎて意味わからん。プログラミングやったことないだろ?w

>>924の部分について、buff_timeをグローバル変数で定義してるとしてもその後使っていないため無駄。
・それから関数内のvarの前で計算処理入れないほうがいいはず。
>>926の部分について、whileの最初の処理はTimer = Timer + 1だよな?
・このAIだとTimerが6000以上になったときにインテが発動して、
 Timerを0に戻しているからいつまでたってもインテしかかからないのは当たり前だろ。
 if(TimerがA以上のとき){処理X→Timer初期化}
 if(TimerがA以上のとき){処理Y→Timer初期化}
 if(TimerがA以上のとき){処理Z→Timer初期化}
 こう書いた場合条件は全て同じAなんだから処理Xしか発動しないだろ。if文の使い方勉強しなおせ。
・Callした直後にスキル発動ではCallの意味がない。Callしてからキャラが集まるまでの時間をsleepしないといけない。
933ネトゲ廃人@名無し:2008/01/26(土) 11:14:14 ID:???
1つのTimerで同じカウントの時に3つのスキル使わせようとすると、
1番最初のスキルしか使わなかった

かといって、Timerのカウントを 30 60 90 みたいにわけても
30の時点で0に戻さないとやっぱり最初のスキルだけになってしまったw
カウンターが回らないのかね…

う〜んイジンコ以下なのでオレのバフは >927−930 で妥協している…
934ネトゲ廃人@名無し:2008/01/26(土) 11:15:29 ID:???
>>928だとバフの部分に入ってからしばらくヒールがなくなってしまうので
俺は各バフを個別にLIBに記述して、KEEPの方から時間をずらして呼び出してるよ。

>>926への補足。スキル発動後にはsleepを入れたほうがたぶんいい。
935ネトゲ廃人@名無し:2008/01/26(土) 11:18:53 ID:???
>>933
君はif elseという使い方を知っているか?w

それとは別に条件を30 60 90にしたって、「Timerが○○以上」で判断してるんだから
if(Timer >= 30){ ここは30以上で発動 }
if(Timer >= 60){ ここは60以上で発動 }
if(TImer >= 90){ ここは90以上で発動 }
考えてみろ。60は30以上だし、90も30以上かつ60以上だろ。最初のしか発動しなくて当たり前だ。
936ネトゲ廃人@名無し:2008/01/26(土) 11:25:11 ID:???
>>935
おおぉGJです!ありがとう!

if else の使い方が全然意味分かんなくて、
シカトしてたからこういう結果になったんだね

使い方を勉強します マジで感謝!!
いや〜改AIって面白い… ゲームよりも面白いw
937ネトゲ廃人@名無し:2008/01/26(土) 11:26:13 ID:???
読み返してて、的外れなことかいてたかもしれん。そうだったらすまんw

なんらかの原因でバフがうまく発動できなかったとしても大して影響ないと思ってるのでこうしていた。
if(Timer == 1000){インテ}
if(Timer == 2000){アクセラ}
if(Timer > 3000){メディテ後Timer初期化}
938ネトゲ廃人@名無し:2008/01/26(土) 11:33:27 ID:???
>>936
うーんと、自動バフのところではelseはあまり必要ないんだ。(if elseってか書き方はelse ifだったスマソw)
けど、他の部分で絶対必要になってくる。基本だしね。
簡単に日本語で説明できる処理だし、説明どっかでみてくればすぐわかると思うよ。
939ネトゲ廃人@名無し:2008/01/26(土) 11:40:28 ID:???
>>938
重ね重ねほんとに感謝 モチベーション上がりました!!!
940ネトゲ廃人@名無し:2008/01/26(土) 11:55:53 ID:???
多重起動は過去に何度も出ているようにX虎はずさなかぎり無理じゃね
941ネトゲ廃人@名無し:2008/01/26(土) 14:34:15 ID:???
自動収集空中キャッチしちゃうんですがsleepいじっても意味ないですよね?
942ネトゲ廃人@名無し:2008/01/26(土) 14:44:59 ID:???
なんで意味ないと思ってるのに聞くんだ?過去のレス見たか?
943ネトゲ廃人@名無し:2008/01/26(土) 14:52:18 ID:???
反応あるまで待つのめんどいから投下してやんよ
SCR_AI_LIB_NEARITEMのPickItemの前にsleep(800)程度の休みを入れて様子を見て時間を調節しろ
944ネトゲ廃人@名無し:2008/01/26(土) 14:57:25 ID:???
いわゆるツン ですね
ありです
945ネトゲ廃人@名無し:2008/01/26(土) 15:09:23 ID:???
アク禁解除記念にリクエストくれたらどれか1つ貼るよ\(^o^)/

・GetAiIndex配列使用、キャラ変更対応版
・ヒーラーキープ解除対策(NONEに行くのを防止してKEEP維持)
・銃キャラがじりじり押されてしまう問題対策
・ビキの新スタンススキルID
・HP残量にあわせてヒーリングとキュアオール使い分け
946ネトゲ廃人@名無し:2008/01/26(土) 15:19:06 ID:???
・HP残量にあわせてヒーリングとキュアオール使い分け
947945:2008/01/26(土) 15:27:17 ID:???
func SCR_AI_LIB_HEALING(self, selfAi)
{
var option = GetOption(self);
var skillId = 1003; // healing auto
var needHealFriend = GetNeedHealFriend(selfAi, option.KeepRange, 70);
if( needHealFriend != nil ){
skillId = 30114; // cure all
} else {
needHealFriend = GetNeedHealFriend(selfAi, option.KeepRange, option.Heal);
}
if( needHealFriend != nil ){
InstantHold(selfAi);
UseSkill(selfAi, needHealFriend, skillId);
if(IsSkillUsing(selfAi) == 'NO') { // failed?
UseSkill(selfAi, needHealFriend, 1003);
}
ChangeTacticsAi(selfAi, 'TS_USER_SKILL');
return 'ChangeTS';
}
}
948945:2008/01/26(土) 15:29:42 ID:???
スタンスやSPの問題でキュアオールが出来なかったら通常ヒールが発動するようにしてある。
70はHP70%以下ならキュアオール使うってこと。自分のHPにあわせて適度に変更してくれ。

ノシ
949ネトゲ廃人@名無し:2008/01/26(土) 15:32:27 ID:???
gj
950ネトゲ廃人@名無し:2008/01/26(土) 15:38:24 ID:???
・ビキの新スタンススキルID

頼むww
951945:2008/01/26(土) 15:52:47 ID:???
1つだって言ってんだろ。それにそれが人にモノを頼む態度か?

30321 CallTurryDog
30323 SummonHillGiant
30325 SummonArarat
30333 SummonTreasureGolem
30334 SummonTachyon
30335 SummonIronArarat
952ネトゲ廃人@名無し:2008/01/26(土) 15:59:02 ID:???
お前かわいいな
953ネトゲ廃人@名無し:2008/01/26(土) 16:01:35 ID:???
954ネトゲ廃人@名無し:2008/01/26(土) 16:07:54 ID:???
・ヒーラーキープ解除対策(NONEに行くのを防止してKEEP維持)
955945:2008/01/26(土) 16:17:40 ID:???
アク禁解除ではしゃぎすぎた。自重するわ。

元のAIがなぜNONEに行ってしまうのかを理解汁。
そうすれば数行の変更でNONEに行かないようにできる。
NONEからKEEPに強制的に飛ばす方法は邪道。
死んでしまって党員にリサテでもされたら動き出して\(^o^)/
956ネトゲ廃人@名無し:2008/01/26(土) 17:45:39 ID:???
で、同じアイテムに3匹群がらないようにするのは解決したのかね?
957ネトゲ廃人@名無し:2008/01/26(土) 18:04:12 ID:???
>>951 thx
958ネトゲ廃人@名無し:2008/01/26(土) 20:17:05 ID:???
もう面倒くさいからみんなの完成品改AIうpしようぜ!
959ネトゲ廃人@名無し:2008/01/26(土) 20:18:29 ID:???
うpすんのメンドクサイからまた今度な
960ネトゲ廃人@名無し:2008/01/27(日) 00:48:53 ID:???
不正者申告されたら音がなるようにできたりします?
961ネトゲ廃人@名無し:2008/01/27(日) 00:51:15 ID:???
AIでは無理。そういうソフトつくればできる。
俺は・・・頭の中に処理の流れはできてるがあまり必要ないのと詳しい作り方わからんのでやってないw
962ネトゲ廃人@名無し:2008/01/27(日) 00:53:26 ID:???
そっか
ソクレスthx
963ネトゲ廃人@名無し:2008/01/27(日) 01:25:42 ID:???
俺のAi 不正申告来るとBEEPなるんだけど
これって異常?
964ネトゲ廃人@名無し:2008/01/27(日) 01:56:06 ID:???
え・・・普通ならなくね?wどっちなんだろwww
いつの蔵?
965ネトゲ廃人@名無し:2008/01/27(日) 04:43:06 ID:???
自動でPOTバフ
インテとアクセラかけるにはどうすればいいんでしょう?
966ネトゲ廃人@名無し:2008/01/27(日) 05:05:46 ID:???
>>965
直前でスカバフの話題でてるんだから読めや
POTはUseItem(X,Y)で飲ませる。Xはキャラの位置(左から0,1,2)Yはアイテムショートカットの位置(左から0,1)
HP残量確認はLIBのヒールのところ読んで、どうすればいいか考えろ
967ネトゲ廃人@名無し:2008/01/27(日) 05:07:13 ID:???
>>956
理由わかる?正常AIだとそういう現象起きないんだけどなぁ・・・
968ネトゲ廃人@名無し:2008/01/27(日) 07:53:22 ID:???
自動収集をホットキーで分けたいんですが
宣告は
//AUTO GET ITEM
func SCR_AI_LIB_CHANGE_SETTING_AUTOGETITEM()
{
// declare variables
var g_auto_getItem = 0;
var g_auto_getItem = 1;
var g_auto_getItem = 2;
var g_auto_getItem = 3;

な感じでいいんですか?
969968:2008/01/27(日) 07:58:04 ID:???
各TS KEEPに
// Near Item
if(0 != SCR_AI_LIB_SHOULD_I_GETITEM(selfAi)){
if('ChangeTS' == SCR_AI_LIB_NEARITEM(selfAi)){
return;
}
}
に追加
970968:2008/01/27(日) 07:59:23 ID:???
//AUTO GET ITEM
func SCR_AI_LIB_CHANGE_SETTING_AUTOGETITEM()
{
// declare variables
var g_auto_getItem = 0;
var g_auto_getItem = 1;
var g_auto_getItem = 2;
var g_auto_getItem = 3;

//AUTO GET ITEM CHANGE SETTING
func SCR_AI_LIB_CHANGE_SETTING_AUTOGETITEM()
{
g_auto_getItem = g_auto_getItem + 1;
if(g_auto_getItem >= 6){
g_auto_getItem = 0;
}
SysMsg('[Setting Change]Auto Get Item Setting :: ' .. g_auto_getItem);
SysMsg('0:Disabled 1:Adjacent only 2:Leader only 3:Everyone');
}
//ASK Should I Get Near Item?
func SCR_AI_LIB_SHOULD_I_GETITEM(selfAi)
{
if(g_auto_getItem == 0 || g_auto_getItem == -1) return 0;
var job = GetJobName(selfAi);
if(g_auto_getItem == 1){
if(GetMyAtkLayer(selfAi) == 1){
return 1;
}

971968:2008/01/27(日) 08:04:36 ID:???
} else if (g_auto_getItem == 2){
if(IsLeader(selfAi) == 'YES'){
return 1;
}
} else return 1;
return 0;
}

で、あとはホットキーで登録させたんですが
応答すらしません('A`)
972968:2008/01/27(日) 08:07:08 ID:???
<HotKey Name="ON/OFF auto_getItem" Scp="SCR_AI_LIB_CHANGE_SETTING_AUTOGETITEM()" Key="F1" UseAlt="NO" UseCtrl="YES" UseShift="NO" OnEdit="YES" />
<HotKey Name="ON/OFF auto_getItem" Scp="SCR_AI_LIB_CHANGE_SETTING_AUTOGETITEM()" Key="F2" UseAlt="NO" UseCtrl="YES" UseShift="NO" OnEdit="YES" />
<HotKey Name="ON/OFF auto_getItem" Scp="SCR_AI_LIB_CHANGE_SETTING_AUTOGETITEM()" Key="F3" UseAlt="NO" UseCtrl="YES" UseShift="NO" OnEdit="YES" />

user.xmlのデフォ→C:〜〜〜
973ネトゲ廃人@名無し
>>970
var g_auto_getItem = 0;
var g_auto_getItem = 1;
var g_auto_getItem = 2;
var g_auto_getItem = 3;
何度も同じ変数を定義するな。変数の定義・初期化について勉強しなおして来い。

SCR_AI_LIB_CHANGE_SETTING_AUTOGETITEM()この関数を2回定義してるのは何故?g_auto_getItemという変数をスイッチにしたいんなら、AIの冒頭でグローバル変数として定義しておけ。

SCR_AI_LIB_SHOULD_I_GETITEMで、変数定義の前に処理を入れるべきでない。

>>972
それだとどのホットキー押しても同じ関数呼び出してるのわかる?