戻る

2006/3/28カスタムAIVer3:バニルミスト専用


AIはこちら
-- メモ帳にコピペし、"AI_2.lua"というファイル名で保存
-- AI_2.lua を AI.lua と同じUSER_AIフォルダにいれてください

-- ※使用は自己責任で※
-- こちらはAI_2.luaのほうです

----------------------------------------------------
-- 追加分コマンド
----------------------------------------------------
-------------------------------------------------
--フリーなMobまたは自分か主人をタゲってるMobを認識
-------------------------------------------------
-------------------------------------------------
function	IsNotNoManner( myid, id )	-- 攻撃行動中止
	local target = GetV( V_TARGET, id )	-- idのターゲット相手を抽出
	return target == 0 or ( target == myid or target == GetV( V_OWNER, myid ) )	-- タゲが居ない、またはタゲの対象がホム、持ち主(ケミだった場合)、値を返す
end
-------------------------------------------------
-- 攻撃対象であるかチェックする
-------------------------------------------------
-------------------------------------------------
function	IsNoAttack(id)				-- 個々で指定する以外の方法ないですかね…|||orz
	local target = GetV(V_HOMUNTYPE,id)		-- MOBのIDを取得

	if(target >= 1078 and target <= 1085) then	-- もし、ターゲットが草かキノコだったら
		NoAttackSwitch = 1 -- yesである1を返す
	elseif(target == 1008 or target == 1047 or target == 1048 or target == 1097 or target == 1236) then -- 卵系、プパだったら殴りにいかない
		NoAttackSwitch = 1 -- yesである1を返す

	elseif( target == 1118 or target == 1142 or target == 1048 or target == 1097 or target == 1277 or target == 1368) then	-- 動かないMobは殴りにいかない
		NoAttackSwitch = 1 -- yesである1を返す

	elseif( target == 1589 or target == 1579 or target == 1575 or target == 1555 or target == 1590) then	-- バイオプラントは殴りにいかない
		NoAttackSwitch = 1 -- yesである1を返す

	elseif(target == 1364) then -- おまけ:アサルトタートル(分身)には自分から殴りにいかない
		NoAttackSwitch = 1 -- yesである1を返す

	else
		NoAttackSwitch = 0 -- noを示す0を返す
	end


	return NoAttackSwitch == 0	-- この条件を満たす時値を返す
end
-----------------------------------------------
-- 逃亡時の敵判定チェック
-----------------------------------------------
-----------------------------------------------
function	IsAWAYENEMY(id)

	local target = GetV(V_HOMUNTYPE,id)		-- MOBのIDを取得

	if(target >= 1078 and target <= 1085) then	-- もし、ターゲットが草かキノコだったら
		AwayEnwmySwitch = 1 -- yesである1を返す
	elseif(target == 1008 or target == 1047 or target == 1048 or target == 1097 or target == 1236) then	-- 卵系、プパだったら
		AwayEnwmySwitch = 1 -- yesである1を返す
	elseif(target == 1589 or target == 1579 or target == 1575 or target == 1555 or target == 1590) then	-- バイオプラントは
		AwayEnwmySwitch = 1 -- yesである1を返す
	else
		AwayEnwmySwitch = 0 -- noを示す0を返す
	end

	return AwayEnwmySwitch == 0	-- この条件を満たす時値を返す
end

-----------------------------------------------
-- ホム逃亡処理	
-----------------------------------------------
-----------------------------------------------
function	OnRUNAWAY_ST ()			-- 万能ではないのでホムが逃げ出したらちゃんと助けてあげましょう
	TraceAI ("OnRUNAWAY_ST")

	local MyHP = GetV (V_HP,MyID)
	local MyMaxHP = GetV (V_MAXHP,MyID)
	local HPper = (MyHP / MyMaxHP) * 100
	if (AwayHP >= HPper) then 		-- AwayHP以下だと追跡(攻撃)しない

		local distance = GetDistanceFromOwner(MyID)
		if ( distance > AwayRange or distance == -1) then		-- Mobから逃げるより主人を追う方を優先
			MyState = FOLLOW_ST
			TraceAI ("RUNAWAY -> FOLLOW_ST")
			return;
		end

		local MyDestX,MyDestY = 0			-- MyDestX,MyDestYを初期化
		local AwayX,AwayY = GetV (V_POSITION,MyEnemy);
		local OwnerX, OwnerY = GetV (V_POSITION,GetV(V_OWNER,MyID))
		local MyX,MyY = GetV(V_POSITION,MyID)
		local distance = GetDistanceFromOwner(MyID)
		if (MySkill == 0) then 				-- スキル命令が入ってるかどうか

			if (OwnerX > AwayX) then
				MyDestX = AwayX + 3
			else
				MyDestX = AwayX - 3
			end

			if (OwnerY > AwayY) then
				MyDestY = AwayY + 3
			else
				MyDestY = AwayY - 3
			end
			Move (MyID,MyDestX,MyDestY)
			TraceAI ("RUNAWAY -> RUNAWAY")
		else							-- スキル命令が入ったら逃亡中でもスキルを使う
			SkillObject (MyID,MySkillLevel,MySkill,MyEnemy)
			MySkill = 0
			MySkillLevel = 0
			TraceAI ("RUNAWAY -> ATTACK_ST  : RUNAWAY_USESKILL")
		end
	end

	MyState = IDLE_ST
	TraceAI ("RUNAWAY -> IDLE_ST")
	return

end
-----------------------------------------------
-- オートスキル(戦闘時)
-----------------------------------------------
-----------------------------------------------
function	OnAUTOSKILL_ST ()			-- ホムスキルが増えたらもっと活用できるハズ…の関数
	TraceAI ("OnAUTOSKILL_ST")


	MySkill = 8013				-- カプリススキル(8013)
	MySkillLevel = CapriceLv
	MyState = VANILMIRTH_ST
	TraceAI ("OnAUTOSKILL_ST -> VANILMIRTH_ST")
	return
end


-----------------------------------------------
-- バニルミスト用のオートスキル処理
-----------------------------------------------
-----------------------------------------------
function	OnVANILMIRTH_ST ()
TraceAI ("OnVANILMIRTH_ST")

	if (MyEnemy ~= 0) then				-- 敵が居たら(交戦中なら)オートスキル攻撃判定
		if (MySkill ~= 0 and MySkillLevel ~= 0) then	-- スキルがセットされている場合
			local MySP = GetV (V_SP,MyID)		-- ホムのSP状態を取得
			local MyMaxSP = GetV (V_MAXSP,MyID)
			if (AutoSkill_SP < (MySP / MyMaxSP) * 100 and MySP ~= 0 and IsAWAYENEMY(MyEnemy)) then	-- SPが指定SP未満の場合で、草やキノコ、卵系、プパでない場合発動させない

				if (MySkill == 8013) then	-- スキルがカプリスだった場合
					if (MySP > 20 + MySkillLevel * 2) then		-- SPが必要SP以上だったら
						if (FastAttack == 1 and FastAttackSwitch == 0) then		-- 初撃スキルONで、初撃スキル使用の目印が0だったら初撃にスキル仕様
							SkillObject (MyID,MySkillLevel,MySkill,MyEnemy)		-- スキル攻撃
							MySkill = 0
							FastAttackSwitch = 1					-- 初撃スキル使用の目印を1に
							TraceAI ("VANILMIRTH_ST -> VANILMIRTH_ST  : FAST_SKILL")
						else
							local AutoSkill_ = AutoSkill - (100-((MySP / MyMaxSP) * 100))		-- 残りSPによって発動確率を調整
							local Dice = math.floor(math.random(100))				-- (0〜100のランダムの数字をDiceへ)
							if (AutoSkill_ < 1) then					-- 発動率が1%以下だったら1%に再調整(エラー防止)
								AutoSkill_ = 1
							end
							if (AutoSkill_ > Dice) then					-- 発動率の数字がランダム数字より大きい数字だったら
								SkillObject (MyID,MySkillLevel,MySkill,MyEnemy)		-- スキル攻撃
								MySkill = 0
							end
							TraceAI ("VANILMIRTH_ST -> VANILMIRTH_ST  : AUTO_SKILL")
						end
					end
				end
			end
		MySkill = 0
		MySkillLevel = 0
		MyState = ATTACK_ST
		TraceAI ("VANILMIRTH_ST -> ATTACK_ST")	
		return
		end
	end
	MyState = IDLE_ST
	TraceAI ("VANILMIRTH_ST -> IDLE_ST")	
	return
end




戻る

戻る