Scriptname _FollowerMealAnimationQuest extends Quest

Function OnLoadedGame()
	;ゲームがロードされたイベントからここを呼び出す必要がある
	RegisterForModEvent("KNNSendMealAnim", "KNNOnFollowerPlayMealAnim")
EndFunction

Event OnInIt()
	;ニューゲーム時にはOnLoadedGame()は呼ばれないので初期化時にこれを呼び出す必要がある
	RegisterForModEvent("KNNSendMealAnim", "KNNOnFollowerPlayMealAnim")
EndEvent

;このイベントはextends Quest なら、クエストが起動していないとイベントを受け取れない
;extends ReferenceAlias ならクエストが起動していてReferenceAliasが埋められていないとイベントを受け取れない
;extends ActiveEffect なら魔法が掛かっている状態でないとイベントを受け取れない
;RegisterForModEvent()が何なのかCK wikiで調べてみて下さい
Event KNNOnFollowerPlayMealAnim(Form playedActor, string animEventName, bool IsFoodsAnim, int alwaysNULL)
	;プレイヤーにかかったActiveEffectからSKSE経由で飛んできます
	;IsFoodsAnimがtrueの時は食べ物、falseの時は飲み物
	;playedActorは常にプレイヤーのフォーム
	;animEventNameはプレイヤーが再生するアニメーションの名前
	if playedActor as Actor
		Actor thisActor = playedActor as Actor
		if thisActor
			;Debug.Trace(thisActor.GetBaseObject().GetName())
			if thisActor != Game.GetPlayer()
				return
			endIf
	
			;ここでフォロワー管理MODのフォロワーのObjectReferenceどうにかして拾ってそのフォロワーがアニメーション出来る状態かどうか調べて発動させる
			;以下はアニメーション可能かどうかを調べていない。ご自身の環境に合わせて書き直してください。

			;例)バニラのフォロワークエストの人間枠のフォロワーのObjectReferenceを引っこ抜く
			;ReferenceAnilas Property  aliasFollower auto　を書いてCKでDialogueFollower Quest　の follower AliasをFillしているのとやっていることは同じ
			int modIndex = Game.GetModByName("Skyrim.esm")
			if 0xFF != modIndex
				Quest dialoguefollower = GetFormEX(Math.LogicalOr(Math.LeftShift(modIndex, 24), 0x0750BA) as Quest
				if dialoguefollower && dialoguefollower.IsRunning()
					ReferenceAlias aliasFollower = dialoguefollower.GetAlias(0) as ReferenceAlias
					if aliasFollower
						Actor follower = aliasFollower.GetActorReference()
						if follower
							;フォロワーが所持している食べ物又は飲み物をインベントリから拾う関数
							;IsFoodsAnim : trueで食べ物, falseで飲み物
							;所持していない場合はnone
							Form foods = KNNPlugin_Utility.GetFood(follower, IsFoodsAnim)
							if foods
								;食品からその食品の食べる(飲む)アニメーション用スペルをゲットする。MOD食品をMCMのアニメーション設定をしてあればそのスペルが返ってきます(設定してない場合はPCの時と同様にパンをかじるアニメーションが返ってくる)
								;引数をnoneで送らない事。ミスがなければ最悪でもパンをかじる(またはコップから飲む)アニメーションスペル（どちらもバニラのアニメ）が返ってくるはずです。
								Spell mealAnimSpell = KNNPlugin_Utility.GetMealAnim(follower, foods)
								if mealAnimSpell
									mealAnimSpell.Cast(follower)
								endIf
							endIf
						endIf
					endIf
				endIf
			endIf
		endIf
	endIf
EndEvent