/// <summary>jackしたAIを全て解放</summary>
 public void releaseAi()
 {
     //予約名は先にreleaseする
     foreach (string tName in new string[] { "invoker", "invoked", "player" })
     {
         if (!mAiDic.ContainsKey(tName))
         {
             continue;
         }
         MapCharacter.JackedAi tAi = mAiDic[tName];
         //予約名とキャラ名が異なる場合
         if (tAi.parent.mName != tName)
         {
             mAiDic.Remove(tAi.parent.mName);
         }
         //release
         tAi.release();
         mAiDic.Remove(tName);
     }
     //予約名以外
     foreach (KeyValuePair <string, MapCharacter.JackedAi> tPair in mAiDic)
     {
         tPair.Value.release();
     }
 }
        /// <summary>指定名のキャラのAIをジャック(予約名考慮)(ジャック成功時もしくは指定名のキャラが存在しない時true)</summary>
        public bool jack(string aName)
        {
            //ジャックするキャラ取得
            MapCharacter tCharacter = null;

            if (aName == "invoker")
            {
                tCharacter = mInvoker;
            }
            else if (aName == "invoked" && mInvoked is MapCharacter)
            {
                tCharacter = (MapCharacter)mInvoked;
            }
            else if (aName == "player")
            {
                tCharacter = parent.mWorld.getPlayer();
            }
            else
            {
                tCharacter = parent.mWorld.getCharacter(aName);
            }
            if (tCharacter == null)
            {
                return(true);
            }
            //ジャックスする
            MapCharacter.JackedAi tAi = tCharacter.jack();
            if (tAi != null)
            {
                //ジャックできた
                mAiDic.Add(aName, tAi);
                mAiDic.Add(tCharacter.mName, tAi);
                return(true);
            }
            //ジャックできなかった場合
            if (mAiDic.ContainsKey(aName))
            {
                return(true);//既にジャック済み
            }
            //ジャック失敗
            return(false);
        }