ステップコマンド追加

「ステップコマンド追加」の編集履歴(バックアップ)一覧に戻る

ステップコマンド追加 - (2006/11/05 (日) 22:37:12) のソース

*クマ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 == 5440) 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

**[[使い方はこちら>こちら]] 

----
[[加筆、修正一覧へ>http://www13.atwiki.jp/cocktail/pages/648.html]]
ツールボックス

下から選んでください:

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