ステップコマンド追加

クマAIにステップコマンド処理を追加

注意:処理が重くなったり予期せぬ動作をする場合があるかもしれません

注意2:必ずバックアップを取ってから追加してください


USER_AIフォルダにあるAI.luaの修正


require "./AI/USER_AI/Config.lua"
を検索しその真下に下記を追加する

----------------------★-------------------------
require "./AI/USER_AI/Command.lua"
StepCommand			= {0,0,0}		-- ステップコマンド格納
SCIndex				= 0			-- ステップコマンド用インデックス

HERL_ID = {}
GHT	= GetTick() - 1000
tenko	= 0
-----------------------★-------------------------

次に
	if ( x == MyDestX and y == MyDestY and MOTION_MOVE == GetV(V_MOTION,MyID)) then
を検索しその真上に下記を追加
---------- ▲ステップコマンド入力処理
	if GetDistance2(MyID,GetV(V_OWNER,MyID)) <= 14 then
		local command = InputCommand(x,y)
		SCIndex = SCIndex + 1
		StepCommand[SCIndex] = command
		TraceAI (" -> Command"..SCIndex.." : "..StepCommand[SCIndex])
		if command == 0 then
			CommandClear()
		end
 		if (StepCommand[1] == 2 or StepCommand[1] == 8) then
			JudgeCommand2()
			if (StepCommand[3] ~= 0) then
				CommandClear()
			end
			return
		end
		if (StepCommand[1] == 4 or StepCommand[1] == 5 or StepCommand[1] == 6) then
			JudgeCommand2()
			return
		end
		if StepCommand[3] ~= 0 then
			JudgeCommand2()
			CommandClear()
			return
		end
	else
		CommandClear()
	end
---------- ▲
上記を追加したら次は
	local rmsg	= GetResMsg (myid)
を検索しその真下に以下を追加
--------------------------------------★
	if ( GHT < GetTick()) then
		local actors = GetActors ()					-- ■視野内のオブジェクトを取得して
		for i,v in ipairs(FRIENDS) do				-- ■配列の要素数を数えて
			IndexFriends = i+1						-- ■インデックスに格納
		end
		HN	= 0
		for i,v in ipairs(actors) do				-- ■視野内のオブジェクトのすべてに対し
			charaX,charaY = GetV(V_POSITION,v)		-- ■座標を取得し
			charaID = GetV(V_HOMUNTYPE,v)			-- ■種類を取得し

			if (5015519 < v and (0 <= charaID and charaID <= 23) or charaID == 1037 or charaID == 1040 or charaID == 1107 or charaID == 1109 or charaID == 1166 or charaID == 1167 or charaID == 1180 or charaID == 1278 or charaID == 1307 or charaID == 1313 or charaID == 1367 or charaID == 1409 or charaID == 1508 or charaID == 1509 or charaID == 1516 or charaID == 1630 or charaID == 1670 or charaID == 1692 or charaID == 1701 or charaID == 1702 or charaID == 1707 or charaID == 1763 or charaID == 1776 or charaID == 1784) then
				HN = HN + 1
				HERL_ID[HN] = v
				TraceAI(string.format("Regist Homu %d:%d %d",HN,HERL_ID[HN],charaID))
			end
		end WSaWK = 3 WRoWK = 6
		if tenko == 0 then
			HNum = HN
			tenko = 1
		end
		GHT	= GetTick() + 2000
	end
--------------------------------------★
上記全てが追加できたら
AIのあるフォルダに新たにCommand.luaファイルを作成する

右クリック→新規作成→テキストドキュメント
作成した新規テキストドキュメント.txtの中に
以下を追加する


-------------------------------------------------------
-- 移動先の位置をテンキーの数値で表現し,返す関数
-------------------------------------------------------
function InputCommand(x,y)
	OwnerX, OwnerY = GetV(V_POSITION,GetV(V_OWNER,MyID))
	
	if x == OwnerX and y == OwnerY then								-- 中央:主人の座標(5)
		return 5
	elseif x+1 == OwnerX and y == OwnerY then						-- ←:主人の左(4)
		return 4
	elseif  x-1 == OwnerX and y == OwnerY then						-- →:主人の右(6)
		return 6
	elseif  x == OwnerX and y+1 == OwnerY then						-- ↓:主人の下(2)
		return 2
	elseif  x == OwnerX and y-1 == OwnerY then						-- ↑:主人の上(8)
		return 8
	else
		return 0
	end
end

-------------------------------------------------------
-- ステップコマンドをクリアする関数
-------------------------------------------------------
function CommandClear()
	StepCommand = {0, 0, 0}
	SCIndex = 0
end
-------------------------------------------------------

HNum	= 1
HERL	= 84
HERL_LV = 10
PP	= 1386
PP_LV	= 4

function JudgeCommand2()

	if (((StepCommand[1] == 2 and StepCommand[2] == 8) or (StepCommand[1] == 8 and StepCommand[2] == 2)) and StepCommand[3] == 5) then	-- ★ヒールとピッチャの使用Lv初期化
		HERL_LV = 5			-- ★ヒールLvを5に
		PP_LV	= 4			-- ★ピッチャLvを4に
		TraceAI (string.format("ヒールLvを%dに、ピッチャLvを%dにしました",HERL_LV,PP_LV))
	end
	if StepCommand[1] == 2 and StepCommand[2] == 0 and StepCommand[3] == 0 then		-- ★1回2が入力されれば
		HERL_LV = HERL_LV - 1		-- ★ヒールLvを1段階下げる
		PP_LV = PP_LV - 1		-- ★ピッチャLvを1段階下げる
		TraceAI (string.format("ヒールLvを1下げLv%dに、ピッチャLvを1下げLv%dにしました",HERL_LV,PP_LV))
	end
	if StepCommand[1] == 2 and StepCommand[2] == 2 and StepCommand[3] == 0 then		-- ★2回2が入力されれば
		HERL_LV = HERL_LV - 1		-- ★ヒールLvを1段階下げる
		PP_LV = PP_LV - 1		-- ★ピッチャLvを1段階下げる
		TraceAI (string.format("ヒールLvを1下げLv%dに、ピッチャLvを1下げLv%dにしました、次回同コマンドによりLv最下位になります",HERL_LV,PP_LV))
	end
	if ((StepCommand[1] == 2 and StepCommand[2] == 2 and StepCommand[3] == 2) or (HERL_LV <= 0 and PP_LV <= 0)) then		-- ★3回2が入力されれば
		HERL_LV = 1			-- ★ヒールLvを1に
		PP_LV = 1			-- ★ピッチャLvを1に
		TraceAI (string.format("ヒールLvを%dに、ピッチャLvを%dに下降させました",HERL_LV,PP_LV))
	end	

	if StepCommand[1] == 8 and StepCommand[2] == 0 and StepCommand[3] == 0 then		-- ★1回8が入力されれば
		HERL_LV = HERL_LV + 1		-- ★ヒールLvを1段階上げる
		PP_LV = PP_LV + 1		-- ★ピッチャLvを1段階上げる
		TraceAI (string.format("ヒールLvを1上げLv%dに、ピッチャLvを1上げLv%dにしました",HERL_LV,PP_LV))
	end
	if StepCommand[1] == 8 and StepCommand[2] == 8 and StepCommand[3] == 0 then		-- ★2回8が入力されれば
		HERL_LV = HERL_LV + 1		-- ★ヒールLvを1段階上げる
		PP_LV = PP_LV + 1		-- ★ピッチャLvを1段階上げる
		TraceAI (string.format("ヒールLvを1上げLv%dに、ピッチャLvを1上げLv%dにしました、次回同コマンドによりLv最高位になります",HERL_LV,PP_LV))
	end
	if ((StepCommand[1] == 8 and StepCommand[2] == 8 and StepCommand[3] == 8) or (HERL_LV >= 11 and PP_LV >= 6)) then		-- ★3回8が入力されれば
		HERL_LV = 10			-- ★ヒールLvを10に
		PP_LV = 5			-- ★ピッチャLvを5に
		TraceAI (string.format("ヒールLvを%dに、ピッチャLvを%dに上昇させました",HERL_LV,PP_LV))
	end

	if StepCommand[1] == 4 or StepCommand[2] == 4 or StepCommand[3] == 4 then		-- ★1度でも4が入力されれば
		HNum = HNum -1			-- ★ヒール、ピッチャを使用するホムを降順に1つ切り替え
		if HNum < 1 then			-- ★また0を指定しないように処理
			HNum = HN
		end
		TraceAI (string.format("ID:%dを支援対象に変更しました",HERL_ID[HNum]))
		CommandClear()
	end

	if StepCommand[1] == 6 or StepCommand[2] == 6 or StepCommand[3] == 6 then		-- ★1度でも6が入力されれば
		HNum = HNum + 1			-- ★ヒール、ピッチャを使用するホムを昇順に1つ切り替え
		if HNum > HN then			-- ★また内部に登録されたホムの数よりも増えないように処理
			HNum = 1
		end
		TraceAI (string.format("ID:%dを支援対象に変更しました",HERL_ID[HNum]))
		CommandClear()
	end

	if StepCommand[1] == 5 or StepCommand[2] == 5 or StepCommand[3] == 5 then					-- ★1度でも5が入力されれば
		local ifOwner = GetV(V_HOMUNTYPE,GetV(V_OWNER,MyID))
		if (ifOwner ~= 18 and ifOwner ~= 4019) then			-- ★ケミ、クリエ以外の職業の場合
			SkillObject (MyID,HERL_LV,HERL/WSaWK,HERL_ID[HNum])		-- ★ヒールスキルを使用
			TraceAI (string.format("ID:%dにヒールLv%dを使用しました",HERL_ID[HNum],HERL_LV))
		elseif (ifOwner == 18 or ifOwner == 4019) then			-- ★ケミ、クリエの場合
			SkillObject (MyID,PP_LV,PP/WRoWK,HERL_ID[HNum])		-- ★ピッチャースキルを使用
			TraceAI (string.format("ID:%dにピッチャーLv%dを使用しました",HERL_ID[HNum],PP_LV))
		end
		CommandClear()
	end

end


上記を追加し終えたら
ファイル→名前をつけて保存→Command.lua という名前で保存
USER_AIフォルダの中に Command.lua というファイルが作成できていればOK

使い方はこちら



タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2006年11月09日 15:01
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。