/// <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); }