th105_ai.zip/script/test.ai
ACT_UP = 0;
ACT_DOWN = 1;
ACT_LEFT = 2;
ACT_RIGHT = 3;
ACT_A = 4;
ACT_B = 5;
ACT_C = 6;
ACT_D = 7;
ACT_AB = 8;
ACT_BC = 9;
ACT_DLEFT = 10;
ACT_DRIGHT = 11;
ACT_ULEFT = 12;
ACT_URIGHT = 13;
TAG_MY = 0;
TAG_ENEMY = 1;
RIFT_ATTACK = 1;
SMASH_ATTACK = 2;
BORDER_RESIST = 4;
CHAIN_ARTS = 8;
CHAIN_SPELL = 16;
COUNTER_HIT = 32;
function shinki_hittest()
local i;
local id,ox,oy;
i = 0;
while(true)do
ox,oy = get_opt_xy(TAG_MY,i);
if(ox==nil)then break; end
if(math.abs(ex-ox)<300 and math.abs(ey+100-oy)<200)then
return true;
end
i = i+1;
end
return false;
end
--基本的に待ちアリス
--空中でのやりあいは考えていない(ガン守り)
--安全なときだけ前進
function main()
while true do
--相手が倒れている場合は一定距離になるように移動
if (enemy_act>189 and enemy_act<200) or (enemy_act>89 and enemy_act<100) then
if dis>400 then
key_on(front);
elseif dis<350 then
key_on(back);
end
--台風ならばひたすらDA
elseif weather==13 then
dattack(ACT_A);
--霊力が2/5未満で、敵に攻撃が届かないならばダッシュ(大抵ガード直後なので実質6回避結界)
elseif my_rei<400 and dis>400 then
dash();
--敵がレーザー系の攻撃中はダッシュ
elseif enemy_char==1 and (enemy_act==411 or enemy_act==415 or enemy_act==600 or enemy_act==566) then
if enemy_frame<30 then
dash();
else
key_reset();
key_event(ACT_BC);
end
elseif enemy_char==1 and (enemy_act==500 or enemy_act==305) then
key_on(back);
--射撃の攻撃判定が近くに存在し、敵に攻撃が届かず、自分がダッシュ中か射撃が近すぎない時はダッシュ
elseif obj_dis<300 and dis>400 and (my_act==200 or obj_dis>100) then
dash();
--花曇で射撃の攻撃判定が近くに存在しないならば後退(ガード)
elseif weather==5 or obj_dis<300 then
key_on(back);
--カードが3枚以上(カードが蓬莱の場合のみ4枚以上)で敵が大きな被弾モーション中ならばスペルカード使用
elseif(is_card_use and ((enemy_act>75 and enemy_act<80 and enemy_act~=78) or (enemy_act>85 and enemy_act<90)) )then
key_event(ACT_BC);
--遠距離で敵が攻撃振っていたら蓬莱
elseif my_card==205 and my_spell>=2000 and ey<=50 and enemy_act>=301 and enemy_act<600 and enemy_frame==0 then
key_event(ACT_BC);
--敵が吹き飛び中ならば6B
elseif enemy_act==74 then
key_event2(front,ACT_B);
--敵が前ダッシュ中で、距離が300〜500なら6A
elseif enemy_act==200 and dis>300 and dis<500 then
key_event2(front,ACT_A);
--敵との距離が300〜380ならば6A
elseif dis>300 and dis<390 and ey<100 then
key_event2(front,ACT_A);
--敵との距離が100未満で高さが30未満で敵がAモーション中で無いならばA(条件中は連打なので実質的にAAAA)
elseif dis<100 and ey<30 and enemy_act~=300 then
key_reset();
key_event(ACT_A);
--敵との距離が100〜350で高さが30未満で、敵が遠AかA〜AAAAのモーション中で無いならばDA
elseif dis<350 and dis>=100 and ey<20 and enemy_act~=301 and (enemy_act<320 or enemy_act>322) then
dattack(ACT_A);
--敵との距離が500以上で、敵の射撃が存在せず、人形付近に敵が居て、敵が攻撃モーション中なら22C
elseif dis>500 and obj_dis==10000 and shinki_hittest() and enemy_act>=301 and enemy_act<600 and enemy_frame==0 then
key_reset();
yield();
key_event(ACT_DOWN);
yield();
key_event(ACT_DOWN);
yield();
key_event(ACT_C);
yield();
--敵オブジェクト(レーザーの予告線、アリスの人形、レミリアの魔法陣など)が近くにあるか、敵が空中で近い場合は後退(ガード)
elseif obj_dis2<200 or (30<ey and dis<600) then
key_on(back);
--敵が空中に居ないか、距離が700以上か敵が地上で距離400以上ならば近づく
elseif dis>400 and (ey<20 or dis>700) then
key_on(front);
--敵が空中に居ないか、距離が700以上ならば近づく
elseif dis<300 then
key_on(back);
--敵の射撃が存在せず、自分が前ダッシュではなく、霊力が満タンなら6C
elseif obj_dis==10000 and my_act~=200 and my_rei == 1000 then
key_reset();
yield();
key_event2(front,ACT_C);
--上記以外ならば全てのキーを離す
else
key_reset();
end
yield();
end
end