他人の空似自作物置場

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