|
@@ -81,23 +81,23 @@ namespace CommonAI.Zone.Instance
|
|
|
[Desc("场景中是否存在Area")]
|
|
|
public bool HasArea { get { return mHasArea; } }
|
|
|
|
|
|
- //山大王id
|
|
|
- protected int mKingID;
|
|
|
- //绑定服务器
|
|
|
- protected string mBindGameSrvId;
|
|
|
+ //山大王id
|
|
|
+ protected int mKingID;
|
|
|
+ //绑定服务器
|
|
|
+ protected string mBindGameSrvId;
|
|
|
|
|
|
- //------------------------------------------------------------------------
|
|
|
- /// <summary>
|
|
|
- ///
|
|
|
- /// </summary>
|
|
|
- /// <param name="templates"></param>
|
|
|
- /// <param name="listener">消息接收者</param>
|
|
|
- /// <param name="data">场景数据</param>
|
|
|
- /// <param name="spaceDivSize">空间分割参数</param>
|
|
|
- /// <param name="maxUnitCount">最大单位数</param>
|
|
|
- /// <param name="randomSeed">随机种子</param>
|
|
|
- internal InstanceZone(TemplateManager templates, InstanceZoneListener listener, ZoneEditor.SceneData data, GSCreateAreaData gsData,
|
|
|
- int spaceDivSize, int maxUnitCount, int randomSeed)
|
|
|
+ //------------------------------------------------------------------------
|
|
|
+ /// <summary>
|
|
|
+ ///
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="templates"></param>
|
|
|
+ /// <param name="listener">消息接收者</param>
|
|
|
+ /// <param name="data">场景数据</param>
|
|
|
+ /// <param name="spaceDivSize">空间分割参数</param>
|
|
|
+ /// <param name="maxUnitCount">最大单位数</param>
|
|
|
+ /// <param name="randomSeed">随机种子</param>
|
|
|
+ internal InstanceZone(TemplateManager templates, InstanceZoneListener listener, ZoneEditor.SceneData data, GSCreateAreaData gsData,
|
|
|
+ int spaceDivSize, int maxUnitCount, int randomSeed)
|
|
|
{
|
|
|
InstanceZone.s_alloc_zone_count++;
|
|
|
InstanceZone.s_active_zone_count++;
|
|
@@ -120,7 +120,7 @@ namespace CommonAI.Zone.Instance
|
|
|
m_TerrainSrc.TotalHeight,
|
|
|
spaceDivSize * m_TerrainSrc.GridCellW,
|
|
|
spaceDivSize * m_TerrainSrc.GridCellH);
|
|
|
- this.mObjects = new InstanceZoneObjectMap();
|
|
|
+ this.mObjects = new InstanceZoneObjectMap("zoneId:" + this.GetSceneID());
|
|
|
// this.path_terrain_data = new InstanceZoneManhattanMap(templates, info.Clone() as ZoneInfo);
|
|
|
// this.path_finder = new AstarManhattan(path_terrain_data, true, spaceDivSize);
|
|
|
// this.path_terrain_area_gen = new ManhattanMapAreaGenerator(path_terrain_data.Data);
|
|
@@ -172,10 +172,10 @@ namespace CommonAI.Zone.Instance
|
|
|
this.EnvironmentVarMap.Clear();
|
|
|
this.mFlags.Clear();
|
|
|
|
|
|
- this.m_UnitsPos.Clear();
|
|
|
- this.m_UnitsStates.Clear();
|
|
|
+ this.m_UnitsPos.Clear();
|
|
|
+ this.m_UnitsStates.Clear();
|
|
|
|
|
|
- InstanceZone.s_active_zone_count--;
|
|
|
+ InstanceZone.s_active_zone_count--;
|
|
|
}
|
|
|
// -----------------------------------------------------------------------------------
|
|
|
protected Logger Log { get { return log; } }
|
|
@@ -264,11 +264,11 @@ namespace CommonAI.Zone.Instance
|
|
|
/// <summary>
|
|
|
/// 【线程安全】增加时间任务
|
|
|
/// </summary>
|
|
|
- /// <param name="intervalMS"></param>
|
|
|
- /// <param name="delayMS"></param>
|
|
|
- /// <param name="repeat"></param>
|
|
|
- /// <param name="handler"></param>
|
|
|
- public TimeTaskMS AddTimeTask(int intervalMS, int delayMS, int repeat, TickHandler handler)
|
|
|
+ /// <param name="intervalMS"></param>
|
|
|
+ /// <param name="delayMS"></param>
|
|
|
+ /// <param name="repeat"></param>
|
|
|
+ /// <param name="handler"></param>
|
|
|
+ public TimeTaskMS AddTimeTask(int intervalMS, int delayMS, int repeat, TickHandler handler)
|
|
|
{
|
|
|
return mTimeTasks.AddTimeTask(intervalMS, delayMS, repeat, handler);
|
|
|
}
|
|
@@ -378,7 +378,7 @@ namespace CommonAI.Zone.Instance
|
|
|
queueEventInternal(new TestMessageBox(msg));
|
|
|
}
|
|
|
|
|
|
- public virtual int GetSceneID() { return 0; }
|
|
|
+ public virtual int GetSceneID() { return 0; }
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
@@ -412,10 +412,10 @@ namespace CommonAI.Zone.Instance
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public bool CheckAutoDropItem()
|
|
|
- {
|
|
|
- return this.mListener.CheckDropItem();
|
|
|
- }
|
|
|
+ public bool CheckAutoDropItem()
|
|
|
+ {
|
|
|
+ return this.mListener.CheckDropItem();
|
|
|
+ }
|
|
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
|
public virtual void Update(int intervalMS, bool slowRefresh)
|
|
@@ -439,7 +439,7 @@ namespace CommonAI.Zone.Instance
|
|
|
mTasks.ProcessMessages(doTask);
|
|
|
mSyncActionQueue.ProcessMessages(updateAction);
|
|
|
|
|
|
- mObjects.Refresh();
|
|
|
+ mObjects.Refresh();
|
|
|
var objetes = mObjects.Objects;
|
|
|
{
|
|
|
// clean space div state
|
|
@@ -638,21 +638,21 @@ namespace CommonAI.Zone.Instance
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
- public InstanceUnit getUnitByID(int UnitID)
|
|
|
- {
|
|
|
- foreach (InstanceUnit obj in mObjects.Units)
|
|
|
- {
|
|
|
- if (obj.ID == UnitID)
|
|
|
- {
|
|
|
- return obj;
|
|
|
- }
|
|
|
- }
|
|
|
+ public InstanceUnit getUnitByID(int UnitID)
|
|
|
+ {
|
|
|
+ foreach (InstanceUnit obj in mObjects.Units)
|
|
|
+ {
|
|
|
+ if (obj.ID == UnitID)
|
|
|
+ {
|
|
|
+ return obj;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- return null;
|
|
|
- }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
|
|
|
- public IEnumerable<InstancePlayer> AllPlayers { get { return mObjects.Players; } }
|
|
|
+ public IEnumerable<InstancePlayer> AllPlayers { get { return mObjects.Players; } }
|
|
|
public int AllPlayersCount { get { return mObjects.PlayersCount; } }
|
|
|
|
|
|
public IEnumerable<InstanceUnit> AllUnits { get { return mObjects.Units; } }
|
|
@@ -767,9 +767,9 @@ namespace CommonAI.Zone.Instance
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //-------------------------------------------------------------------------------------------
|
|
|
+ //-------------------------------------------------------------------------------------------
|
|
|
|
|
|
- public InstanceUnit AddUnit(int unitTemplateID, string name, int force, int level, float x, float y, float direction, bool pointLv = false)
|
|
|
+ public InstanceUnit AddUnit(int unitTemplateID, string name, int force, int level, float x, float y, float direction, bool pointLv = false)
|
|
|
{
|
|
|
UnitInfo info = Templates.getUnit(unitTemplateID);
|
|
|
if (info != null)
|
|
@@ -830,10 +830,10 @@ namespace CommonAI.Zone.Instance
|
|
|
}
|
|
|
|
|
|
if (mTryAddUnit != null && !mTryAddUnit.Invoke(info))
|
|
|
- {
|
|
|
- //log.Info(string.Format("Zone Unit TryAdd max: {0}, {1}, 单位数量:{2}", this.TerrainSrc.ID, info.TemplateID, mObjects.UnitsCount));
|
|
|
- return null;
|
|
|
- }
|
|
|
+ {
|
|
|
+ //log.Info(string.Format("Zone Unit TryAdd max: {0}, {1}, 单位数量:{2}", this.TerrainSrc.ID, info.TemplateID, mObjects.UnitsCount));
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
// 创建实体单位
|
|
|
InstanceZoneObject ret = CreateUnit(info, name, force, alliesForce, level);
|
|
@@ -868,18 +868,18 @@ namespace CommonAI.Zone.Instance
|
|
|
unit.SetDiaplayerName(clientShowName);
|
|
|
}
|
|
|
|
|
|
- //// 阵营判断
|
|
|
- //if(info.UType == UnitType.TYPE_MONSTER && force > 1)
|
|
|
- //{
|
|
|
- // add.flag = 1;
|
|
|
- //}
|
|
|
+ //// 阵营判断
|
|
|
+ //if(info.UType == UnitType.TYPE_MONSTER && force > 1)
|
|
|
+ //{
|
|
|
+ // add.flag = 1;
|
|
|
+ //}
|
|
|
|
|
|
queueEvent(add);
|
|
|
}
|
|
|
}
|
|
|
catch (Exception err)
|
|
|
{
|
|
|
- log.Warn("AddUnit catch :" + name + ", e:" + err);
|
|
|
+ log.Warn("AddUnit catch :" + name + ", e:" + err);
|
|
|
add.ErrorMessage = err.Message;
|
|
|
return null;
|
|
|
}
|
|
@@ -947,9 +947,9 @@ namespace CommonAI.Zone.Instance
|
|
|
}
|
|
|
catch (Exception err)
|
|
|
{
|
|
|
- log.Warn("AddItem: " + template.ID + ", catch: " + err);
|
|
|
+ log.Warn("AddItem: " + template.ID + ", catch: " + err);
|
|
|
add.ErrorMessage = err.Message;
|
|
|
- return null;
|
|
|
+ return null;
|
|
|
}
|
|
|
finally
|
|
|
{
|
|
@@ -1086,8 +1086,8 @@ namespace CommonAI.Zone.Instance
|
|
|
// 移除一个单位
|
|
|
public bool RemoveObject(InstanceZoneObject obj)
|
|
|
{
|
|
|
- //Console.WriteLine("RemoveObject : " + obj.ID);
|
|
|
- if (mObjects.RemoveObject(obj))
|
|
|
+ //Console.WriteLine("RemoveObject : " + obj.ID);
|
|
|
+ if (mObjects.RemoveObject(obj))
|
|
|
{
|
|
|
obj.onRemoved(this);
|
|
|
if (obj is InstanceUnit)
|
|
@@ -1152,25 +1152,25 @@ namespace CommonAI.Zone.Instance
|
|
|
InstanceItem obj = mObjects.GetItem(unitTemplateId);
|
|
|
if (obj != null && RemoveObject(obj))
|
|
|
{
|
|
|
- Console.WriteLine("成功移除单位:" + unitTemplateId);
|
|
|
- return obj;
|
|
|
- }
|
|
|
- return null;
|
|
|
- }
|
|
|
+ Console.WriteLine("成功移除单位:" + unitTemplateId);
|
|
|
+ return obj;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
- public int GetZoneKingID()
|
|
|
- {
|
|
|
- return this.mKingID;
|
|
|
- }
|
|
|
+ public int GetZoneKingID()
|
|
|
+ {
|
|
|
+ return this.mKingID;
|
|
|
+ }
|
|
|
|
|
|
- public string GetBindGameSrvID()
|
|
|
- {
|
|
|
- return this.mBindGameSrvId;
|
|
|
- }
|
|
|
+ public string GetBindGameSrvID()
|
|
|
+ {
|
|
|
+ return this.mBindGameSrvId;
|
|
|
+ }
|
|
|
|
|
|
- //----------------------------------------------------------------------------------------------------------------------------------------
|
|
|
+ //----------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
- private class InstanceZoneObjectMap
|
|
|
+ private class InstanceZoneObjectMap
|
|
|
{
|
|
|
private class DirtyList<K, T> where T : InstanceZoneObject
|
|
|
{
|
|
@@ -1206,7 +1206,7 @@ namespace CommonAI.Zone.Instance
|
|
|
{
|
|
|
mObjectsCollection.Clear();
|
|
|
mObjects.Clear();
|
|
|
- }
|
|
|
+ }
|
|
|
public T Get(K key)
|
|
|
{
|
|
|
return mObjects.Get(key);
|
|
@@ -1215,7 +1215,7 @@ namespace CommonAI.Zone.Instance
|
|
|
{
|
|
|
return mObjects.ContainsKey(key);
|
|
|
}
|
|
|
- public IEnumerable<T> GetCollection()
|
|
|
+ public IEnumerable<T> GetCollection(string logFlag)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
@@ -1227,9 +1227,10 @@ namespace CommonAI.Zone.Instance
|
|
|
}
|
|
|
return mObjectsCollection;
|
|
|
}
|
|
|
- catch(Exception err)
|
|
|
+ catch (Exception err)
|
|
|
{
|
|
|
- log.Warn("GetCollectioncatch:" + mObjectsCollection.Count + ", e:" + err);
|
|
|
+ log.Warn("GetCollectioncatch:" + logFlag + ", CollectCnt: " + mObjectsCollection.Count +
|
|
|
+ ", mObjectsCnt: " + mObjects.Count + ", e:" + err);
|
|
|
}
|
|
|
return mObjects.Values;
|
|
|
}
|
|
@@ -1241,6 +1242,14 @@ namespace CommonAI.Zone.Instance
|
|
|
private DirtyList<uint, InstanceItem> mObjects_MirrorItems = new DirtyList<uint, InstanceItem>();
|
|
|
private DirtyList<string, InstancePlayer> mObjects_MirrorPlayers = new DirtyList<string, InstancePlayer>();
|
|
|
|
|
|
+ private string logFlag = "";
|
|
|
+
|
|
|
+
|
|
|
+ public InstanceZoneObjectMap(string logFlag)
|
|
|
+ {
|
|
|
+ this.logFlag = logFlag;
|
|
|
+ }
|
|
|
+
|
|
|
internal void Refresh()
|
|
|
{
|
|
|
//mObjects.Refresh();
|
|
@@ -1340,7 +1349,7 @@ namespace CommonAI.Zone.Instance
|
|
|
|
|
|
public InstanceUnit GetUnit(uint unitTemplateId)
|
|
|
{
|
|
|
- foreach (InstanceUnit obj in mObjects_MirrorUnits.GetCollection())
|
|
|
+ foreach (InstanceUnit obj in mObjects_MirrorUnits.GetCollection(logFlag))
|
|
|
{
|
|
|
if (obj.Info.ID == unitTemplateId)
|
|
|
{
|
|
@@ -1353,7 +1362,7 @@ namespace CommonAI.Zone.Instance
|
|
|
|
|
|
public InstanceSpell GetSpllByLanuchAndSpellId(int launchId, int spellId)
|
|
|
{
|
|
|
- foreach (InstanceSpell obj in mObjects_MirrorSpells.GetCollection())
|
|
|
+ foreach (InstanceSpell obj in mObjects_MirrorSpells.GetCollection(logFlag))
|
|
|
{
|
|
|
if (obj.Info.ID == spellId && obj.LauncherID == launchId)
|
|
|
{
|
|
@@ -1363,10 +1372,10 @@ namespace CommonAI.Zone.Instance
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
- public InstanceItem GetItem(uint itemId)
|
|
|
- {
|
|
|
- return mObjects_MirrorItems.Get(itemId);
|
|
|
- }
|
|
|
+ public InstanceItem GetItem(uint itemId)
|
|
|
+ {
|
|
|
+ return mObjects_MirrorItems.Get(itemId);
|
|
|
+ }
|
|
|
|
|
|
|
|
|
public InstancePlayer GetPlayer(string uuid)
|
|
@@ -1375,19 +1384,19 @@ namespace CommonAI.Zone.Instance
|
|
|
}
|
|
|
|
|
|
public int ObjectsCount { get { return mObjects.Count; } }
|
|
|
- public IEnumerable<InstanceZoneObject> Objects { get { return mObjects.GetCollection(); } }
|
|
|
+ public IEnumerable<InstanceZoneObject> Objects { get { return mObjects.GetCollection(logFlag); } }
|
|
|
|
|
|
public int UnitsCount { get { return mObjects_MirrorUnits.Count; } }
|
|
|
- public IEnumerable<InstanceUnit> Units { get { return mObjects_MirrorUnits.GetCollection(); } }
|
|
|
+ public IEnumerable<InstanceUnit> Units { get { return mObjects_MirrorUnits.GetCollection(logFlag); } }
|
|
|
|
|
|
public int SpellsCount { get { return mObjects_MirrorSpells.Count; } }
|
|
|
- public IEnumerable<InstanceSpell> Spells { get { return mObjects_MirrorSpells.GetCollection(); } }
|
|
|
+ public IEnumerable<InstanceSpell> Spells { get { return mObjects_MirrorSpells.GetCollection(logFlag); } }
|
|
|
|
|
|
public int ItemsCount { get { return mObjects_MirrorItems.Count; } }
|
|
|
- public IEnumerable<InstanceItem> Items { get { return mObjects_MirrorItems.GetCollection(); } }
|
|
|
+ public IEnumerable<InstanceItem> Items { get { return mObjects_MirrorItems.GetCollection(logFlag); } }
|
|
|
|
|
|
public int PlayersCount { get { return mObjects_MirrorPlayers.Count; } }
|
|
|
- public IEnumerable<InstancePlayer> Players { get { return mObjects_MirrorPlayers.GetCollection(); } }
|
|
|
+ public IEnumerable<InstancePlayer> Players { get { return mObjects_MirrorPlayers.GetCollection(logFlag); } }
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
@@ -1408,7 +1417,7 @@ namespace CommonAI.Zone.Instance
|
|
|
}
|
|
|
internal void cb_unitDeadCallBack(InstanceUnit obj, InstanceUnit attacker)
|
|
|
{
|
|
|
- statisticForceDead(obj);
|
|
|
+ statisticForceDead(obj);
|
|
|
|
|
|
LastHittedUnit = obj;
|
|
|
LastKilledUnit = obj;
|
|
@@ -1432,7 +1441,7 @@ namespace CommonAI.Zone.Instance
|
|
|
mOnUnitDead.Invoke(this, obj, attacker);
|
|
|
|
|
|
obj.mProcessDeadCallbackTime = CommonLang.CUtils.localTimeMS + 1000;
|
|
|
- }
|
|
|
+ }
|
|
|
internal void cb_unitActivatedCallBack(InstanceUnit obj)
|
|
|
{
|
|
|
nearChange(obj);
|
|
@@ -1464,41 +1473,41 @@ namespace CommonAI.Zone.Instance
|
|
|
if (mOnUnitLostInventoryItem != null)
|
|
|
mOnUnitLostInventoryItem.Invoke(this, obj, item, count);
|
|
|
}
|
|
|
- internal int cb_unitGotInstanceItemCallBack(InstanceUnit obj, InstanceItem item)
|
|
|
- {
|
|
|
- LastUnitGotInstanceItem = item;
|
|
|
- obj.callback_onGotInstanceItem(this, item);
|
|
|
- short times = 0;
|
|
|
- if (mOnUnitGotInstanceItem != null)
|
|
|
- {
|
|
|
- InstancePlayer player = (obj as InstancePlayer);
|
|
|
- if (player == null)
|
|
|
- {
|
|
|
- return 0;
|
|
|
- }
|
|
|
+ internal int cb_unitGotInstanceItemCallBack(InstanceUnit obj, InstanceItem item)
|
|
|
+ {
|
|
|
+ LastUnitGotInstanceItem = item;
|
|
|
+ obj.callback_onGotInstanceItem(this, item);
|
|
|
+ short times = 0;
|
|
|
+ if (mOnUnitGotInstanceItem != null)
|
|
|
+ {
|
|
|
+ InstancePlayer player = (obj as InstancePlayer);
|
|
|
+ if (player == null)
|
|
|
+ {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
|
|
|
- if (item.unitPickInfo != null)
|
|
|
- {
|
|
|
- if (item.Info.maxPickTimes > 0)
|
|
|
- {
|
|
|
- times = item.unitPickInfo.Get(player.PlayerUUID);
|
|
|
- if (times >= item.Info.maxPickTimes)
|
|
|
- {
|
|
|
- player.Virtual.SendMsgToClient(XmdsConstConfig.TIPS_PICK_MAX);
|
|
|
- return item.Info.maxPickTimes;
|
|
|
- }
|
|
|
- }
|
|
|
- item.unitPickInfo.Put(player.PlayerUUID, ++times);
|
|
|
- item.TotalPickTimes++;
|
|
|
- }
|
|
|
+ if (item.unitPickInfo != null)
|
|
|
+ {
|
|
|
+ if (item.Info.maxPickTimes > 0)
|
|
|
+ {
|
|
|
+ times = item.unitPickInfo.Get(player.PlayerUUID);
|
|
|
+ if (times >= item.Info.maxPickTimes)
|
|
|
+ {
|
|
|
+ player.Virtual.SendMsgToClient(XmdsConstConfig.TIPS_PICK_MAX);
|
|
|
+ return item.Info.maxPickTimes;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ item.unitPickInfo.Put(player.PlayerUUID, ++times);
|
|
|
+ item.TotalPickTimes++;
|
|
|
+ }
|
|
|
|
|
|
- mOnUnitGotInstanceItem.Invoke(this, obj, item);
|
|
|
- }
|
|
|
+ mOnUnitGotInstanceItem.Invoke(this, obj, item);
|
|
|
+ }
|
|
|
|
|
|
- return times;
|
|
|
- }
|
|
|
+ return times;
|
|
|
+ }
|
|
|
|
|
|
- internal void cb_unitUseItemCallBack(InstanceUnit obj, ItemTemplate item, InstanceUnit item_creater)
|
|
|
+ internal void cb_unitUseItemCallBack(InstanceUnit obj, ItemTemplate item, InstanceUnit item_creater)
|
|
|
{
|
|
|
LastUnitUseItem = item;
|
|
|
obj.callback_onUseItem(this, item, item_creater);
|
|
@@ -1532,18 +1541,18 @@ namespace CommonAI.Zone.Instance
|
|
|
{
|
|
|
mOnUnitPickUnit.Invoke(this, src, pickable);
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- public void cb_unitOutBattleCallBack(InstanceUnit obj)
|
|
|
+ public void cb_unitOutBattleCallBack(InstanceUnit obj)
|
|
|
{
|
|
|
if (mOnUnitOutBattle != null)
|
|
|
{
|
|
|
- mOnUnitOutBattle.Invoke(this, obj);
|
|
|
+ mOnUnitOutBattle.Invoke(this, obj);
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
|
|
|
- internal bool cb_unitTryPickItem(InstanceUnit unit, InstanceItem item)
|
|
|
+ internal bool cb_unitTryPickItem(InstanceUnit unit, InstanceItem item)
|
|
|
{
|
|
|
LastPickingItem = item;
|
|
|
LastPickingItemUnit = unit;
|
|
@@ -1692,8 +1701,8 @@ namespace CommonAI.Zone.Instance
|
|
|
|
|
|
case SkillTemplate.CastTarget.Self:
|
|
|
return src == target;
|
|
|
- case SkillTemplate.CastTarget.EnemyAndSelf:
|
|
|
- return src.Force != target.Force || src == target;
|
|
|
+ case SkillTemplate.CastTarget.EnemyAndSelf:
|
|
|
+ return src.Force != target.Force || src == target;
|
|
|
case SkillTemplate.CastTarget.NA:
|
|
|
default:
|
|
|
return false;
|
|
@@ -1976,8 +1985,8 @@ namespace CommonAI.Zone.Instance
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
- case LaunchSpell.PosType.POS_TYPE_X:
|
|
|
- {
|
|
|
+ case LaunchSpell.PosType.POS_TYPE_X:
|
|
|
+ {
|
|
|
float startAngle = direction + launch.StartAngle;
|
|
|
float[] interAngle = { launch.Angle, CMath.PI_F - launch.Angle, CMath.PI_F + launch.Angle, CMath.PI_F * 2 - launch.Angle };
|
|
|
Dictionary<uint, InstanceUnit> damageList = (spell.HitIntervalMS <= 0 ? new Dictionary<uint, InstanceUnit>() : null);
|
|
@@ -2014,13 +2023,13 @@ namespace CommonAI.Zone.Instance
|
|
|
case LaunchSpell.PosType.POS_TYPE_RANDOM_FOR_SPELL:
|
|
|
launch_randomTypeSpell(fromSkillType, spell, launcher, launch, chain, launcher, actionIndex);
|
|
|
break;
|
|
|
- case LaunchSpell.PosType.POS_TYPE_RANDOM_POS:
|
|
|
- launch_randomPosSpell(fromSkillType, spell, launcher, launch, chain, launcher, actionIndex);
|
|
|
- break;
|
|
|
- case LaunchSpell.PosType.POS_TYPE_MANY_CANNON:
|
|
|
- launch_ManyCannon(fromSkillType, spell, launcher, launch, chain, launcher, targetUnitID, actionIndex, createData);
|
|
|
- break;
|
|
|
- case LaunchSpell.PosType.POS_TYPE_DEFAULT_SINGLE:
|
|
|
+ case LaunchSpell.PosType.POS_TYPE_RANDOM_POS:
|
|
|
+ launch_randomPosSpell(fromSkillType, spell, launcher, launch, chain, launcher, actionIndex);
|
|
|
+ break;
|
|
|
+ case LaunchSpell.PosType.POS_TYPE_MANY_CANNON:
|
|
|
+ launch_ManyCannon(fromSkillType, spell, launcher, launch, chain, launcher, targetUnitID, actionIndex, createData);
|
|
|
+ break;
|
|
|
+ case LaunchSpell.PosType.POS_TYPE_DEFAULT_SINGLE:
|
|
|
default:
|
|
|
{
|
|
|
AddSpell(fromSkillType, spell, launch, launcher, launcher,
|
|
@@ -2063,8 +2072,8 @@ namespace CommonAI.Zone.Instance
|
|
|
}
|
|
|
}
|
|
|
SpellTemplate spell = Templates.getSpell(launch.SpellID);
|
|
|
- JSGCreateSpellData createData;
|
|
|
- if (spell != null && launch.Count > 0 && mFormula.TryLaunchSpell(sender.Launcher, launch, ref spell, out createData, ref startX, ref startY))
|
|
|
+ JSGCreateSpellData createData;
|
|
|
+ if (spell != null && launch.Count > 0 && mFormula.TryLaunchSpell(sender.Launcher, launch, ref spell, out createData, ref startX, ref startY))
|
|
|
{
|
|
|
float direction = sender.Direction;
|
|
|
if (targetPos != null)
|
|
@@ -2115,12 +2124,12 @@ namespace CommonAI.Zone.Instance
|
|
|
case LaunchSpell.PosType.POS_TYPE_RANDOM_FOR_SPELL:
|
|
|
launch_randomTypeSpell(fromSkillType, spell, sender, launch, chain, sender.Launcher, actionIndex);
|
|
|
break;
|
|
|
- case LaunchSpell.PosType.POS_TYPE_MANY_CANNON:
|
|
|
- launch_ManyCannon(fromSkillType, spell, sender, launch, chain, sender.Launcher, targetUnitID, actionIndex, createData);
|
|
|
- break;
|
|
|
- case LaunchSpell.PosType.POS_TYPE_RANDOM_POS:
|
|
|
- launch_randomPosSpell(fromSkillType, spell, sender, launch, chain, sender.Launcher, actionIndex);
|
|
|
- break;
|
|
|
+ case LaunchSpell.PosType.POS_TYPE_MANY_CANNON:
|
|
|
+ launch_ManyCannon(fromSkillType, spell, sender, launch, chain, sender.Launcher, targetUnitID, actionIndex, createData);
|
|
|
+ break;
|
|
|
+ case LaunchSpell.PosType.POS_TYPE_RANDOM_POS:
|
|
|
+ launch_randomPosSpell(fromSkillType, spell, sender, launch, chain, sender.Launcher, actionIndex);
|
|
|
+ break;
|
|
|
case LaunchSpell.PosType.POS_TYPE_RANDOM_DIRECTION:
|
|
|
{
|
|
|
for (int i = 0; i < launch.Count; i++)
|
|
@@ -2161,7 +2170,7 @@ namespace CommonAI.Zone.Instance
|
|
|
InstanceUnit attacker,
|
|
|
InstanceUnit damage,
|
|
|
AttackSource source,
|
|
|
- int serverExt = 0)
|
|
|
+ int serverExt = 0)
|
|
|
{
|
|
|
LaunchSpell launch = source.Attack.Spell;
|
|
|
if (launch == null)
|
|
@@ -2227,29 +2236,29 @@ namespace CommonAI.Zone.Instance
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
- case LaunchSpell.PosType.POS_TYPE_X:
|
|
|
- {
|
|
|
- float startAngle = sender.Direction + launch.StartAngle;
|
|
|
- float[] interAngle = { launch.Angle, CMath.PI_F - launch.Angle, CMath.PI_F + launch.Angle, CMath.PI_F * 2 - launch.Angle };
|
|
|
- Dictionary<uint, InstanceUnit> damageList = (spell.HitIntervalMS <= 0 ? new Dictionary<uint, InstanceUnit>() : null);
|
|
|
+ case LaunchSpell.PosType.POS_TYPE_X:
|
|
|
+ {
|
|
|
+ float startAngle = sender.Direction + launch.StartAngle;
|
|
|
+ float[] interAngle = { launch.Angle, CMath.PI_F - launch.Angle, CMath.PI_F + launch.Angle, CMath.PI_F * 2 - launch.Angle };
|
|
|
+ Dictionary<uint, InstanceUnit> damageList = (spell.HitIntervalMS <= 0 ? new Dictionary<uint, InstanceUnit>() : null);
|
|
|
|
|
|
- for (int i = 0; i < launch.Count; i++)
|
|
|
- {
|
|
|
- AddSpell(fromSkillType, spell, launch, sender, attacker, damage.ID, null,
|
|
|
- startX, startY, startAngle + interAngle[i], chain, serverExt, 0, damageList);
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
- case LaunchSpell.PosType.POS_TYPE_RANDOM_FOR_SPELL:
|
|
|
+ for (int i = 0; i < launch.Count; i++)
|
|
|
+ {
|
|
|
+ AddSpell(fromSkillType, spell, launch, sender, attacker, damage.ID, null,
|
|
|
+ startX, startY, startAngle + interAngle[i], chain, serverExt, 0, damageList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case LaunchSpell.PosType.POS_TYPE_RANDOM_FOR_SPELL:
|
|
|
launch_randomTypeSpell(fromSkillType, spell, sender, launch, chain, attacker, serverExt);
|
|
|
break;
|
|
|
- case LaunchSpell.PosType.POS_TYPE_MANY_CANNON:
|
|
|
- launch_ManyCannon(fromSkillType, spell, sender, launch, chain, attacker, damage.ID, serverExt, createData);
|
|
|
- break;
|
|
|
- case LaunchSpell.PosType.POS_TYPE_RANDOM_POS:
|
|
|
- launch_randomPosSpell(fromSkillType, spell, sender, launch, chain, attacker, serverExt);
|
|
|
- break;
|
|
|
- case LaunchSpell.PosType.POS_TYPE_RANDOM_DIRECTION:
|
|
|
+ case LaunchSpell.PosType.POS_TYPE_MANY_CANNON:
|
|
|
+ launch_ManyCannon(fromSkillType, spell, sender, launch, chain, attacker, damage.ID, serverExt, createData);
|
|
|
+ break;
|
|
|
+ case LaunchSpell.PosType.POS_TYPE_RANDOM_POS:
|
|
|
+ launch_randomPosSpell(fromSkillType, spell, sender, launch, chain, attacker, serverExt);
|
|
|
+ break;
|
|
|
+ case LaunchSpell.PosType.POS_TYPE_RANDOM_DIRECTION:
|
|
|
{
|
|
|
for (int i = 0; i < launch.Count; i++)
|
|
|
{
|
|
@@ -2320,9 +2329,9 @@ namespace CommonAI.Zone.Instance
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void launch_randomPosSpell(XmdsSkillType fromSkillType, SpellTemplate spell, InstanceZoneObject sender,
|
|
|
- LaunchSpell launch, SpellChainLevelInfo chain, InstanceUnit attacker, int serverExt = 0)
|
|
|
- {
|
|
|
+ private void launch_randomPosSpell(XmdsSkillType fromSkillType, SpellTemplate spell, InstanceZoneObject sender,
|
|
|
+ LaunchSpell launch, SpellChainLevelInfo chain, InstanceUnit attacker, int serverExt = 0)
|
|
|
+ {
|
|
|
for (int i = 0; i < launch.Count; i++)
|
|
|
{
|
|
|
float x = (float)(random.NextDouble() * launch.SpellRange/2);
|
|
@@ -2359,14 +2368,14 @@ namespace CommonAI.Zone.Instance
|
|
|
float radius = summoner.BodyBlockSize;
|
|
|
|
|
|
UnitInfo info = Templates.getUnit(summon.UnitTemplateID);
|
|
|
- if (info.UType != UnitType.TYPE_SUMMON || info.LifeTimeMS <= 0)
|
|
|
- {
|
|
|
- log.Warn("召唤非召唤类单位1:" + summoner.ID + ", 召唤id: " + summon.UnitTemplateID);
|
|
|
- return;
|
|
|
- }
|
|
|
- //UnitInfo un = (UnitInfo)info.Clone();
|
|
|
- //un.UType = UnitInfo.UnitType.TYPE_SUMMON;
|
|
|
- string name = null;
|
|
|
+ if (info.UType != UnitType.TYPE_SUMMON || info.LifeTimeMS <= 0)
|
|
|
+ {
|
|
|
+ log.Warn("召唤非召唤类单位1:" + summoner.ID + ", 召唤id: " + summon.UnitTemplateID);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //UnitInfo un = (UnitInfo)info.Clone();
|
|
|
+ //un.UType = UnitInfo.UnitType.TYPE_SUMMON;
|
|
|
+ string name = null;
|
|
|
if (TemplateManager.Formula.TrySummonUnit(summoner.Launcher, summon, ref info, ref name))
|
|
|
{
|
|
|
for (int i = 0; i < summon.Count; i++)
|
|
@@ -2429,16 +2438,16 @@ namespace CommonAI.Zone.Instance
|
|
|
MathVector.movePolar(ref x, ref y, summoner.Direction, summoner.BodyBlockSize * 4);
|
|
|
float radius = summoner.BodyBlockSize * 2;
|
|
|
|
|
|
- UnitInfo info = Templates.getUnit(summon.UnitTemplateID);
|
|
|
- if (info.UType != UnitType.TYPE_SUMMON || info.LifeTimeMS <= 0)
|
|
|
- {
|
|
|
- log.Warn("召唤非召唤类单位2:" + summoner.ID + ", 召唤id: " + summon.UnitTemplateID);
|
|
|
- return;
|
|
|
- }
|
|
|
+ UnitInfo info = Templates.getUnit(summon.UnitTemplateID);
|
|
|
+ if (info.UType != UnitType.TYPE_SUMMON || info.LifeTimeMS <= 0)
|
|
|
+ {
|
|
|
+ log.Warn("召唤非召唤类单位2:" + summoner.ID + ", 召唤id: " + summon.UnitTemplateID);
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- //UnitInfo un = (UnitInfo)info.Clone();
|
|
|
- //un.UType = UnitInfo.UnitType.TYPE_SUMMON;
|
|
|
- string name = null;
|
|
|
+ //UnitInfo un = (UnitInfo)info.Clone();
|
|
|
+ //un.UType = UnitInfo.UnitType.TYPE_SUMMON;
|
|
|
+ string name = null;
|
|
|
if (TemplateManager.Formula.TrySummonUnit(summoner, summon, ref info, ref name))
|
|
|
{
|
|
|
for (int i = 0; i < summon.Count; i++)
|
|
@@ -2470,13 +2479,13 @@ namespace CommonAI.Zone.Instance
|
|
|
|
|
|
public InstanceUnit summonUnit(InstanceUnit summoner, UnitInfo info, string name, int level, float x, float y, float direction)
|
|
|
{
|
|
|
- if (info.UType != UnitType.TYPE_SUMMON || info.LifeTimeMS <= 0)
|
|
|
- {
|
|
|
- log.Warn("召唤非召唤类单位3:" + summoner.ID + ", 召唤id: " + info.ID);
|
|
|
- return null;
|
|
|
- }
|
|
|
+ if (info.UType != UnitType.TYPE_SUMMON || info.LifeTimeMS <= 0)
|
|
|
+ {
|
|
|
+ log.Warn("召唤非召唤类单位3:" + summoner.ID + ", 召唤id: " + info.ID);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
- InstanceUnit unit = AddUnit(info, name, summoner.Force, level, x, y, direction, summoner);
|
|
|
+ InstanceUnit unit = AddUnit(info, name, summoner.Force, level, x, y, direction, summoner);
|
|
|
if (unit != null)
|
|
|
{
|
|
|
if (info.LifeTimeMS > 0)
|
|
@@ -2618,11 +2627,11 @@ namespace CommonAI.Zone.Instance
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**游戏服场景标识通知*/
|
|
|
- public virtual void GSZoneFlagNotifyMsg(int value1)
|
|
|
- {
|
|
|
+ /**游戏服场景标识通知*/
|
|
|
+ public virtual void GSZoneFlagNotifyMsg(int value1)
|
|
|
+ {
|
|
|
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
#endregion
|
|
|
|
|
@@ -2732,9 +2741,9 @@ namespace CommonAI.Zone.Instance
|
|
|
return (T)var.Value;
|
|
|
}
|
|
|
catch (Exception err)
|
|
|
- {
|
|
|
- log.Warn("GetEnvironmentVarAs : " + key + ", catch: " + err);
|
|
|
- }
|
|
|
+ {
|
|
|
+ log.Warn("GetEnvironmentVarAs : " + key + ", catch: " + err);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
return default(T);
|
|
@@ -2867,19 +2876,19 @@ namespace CommonAI.Zone.Instance
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- //给单个玩家发送消息
|
|
|
- internal void doSendMsgToPlayer(InstancePlayer player, CommonLang.Protocol.IMessage msg)
|
|
|
- {
|
|
|
- mQuestAdapter.DoSendMsgToPlayer(player.PlayerUUID, msg);
|
|
|
- }
|
|
|
+ //给单个玩家发送消息
|
|
|
+ internal void doSendMsgToPlayer(InstancePlayer player, CommonLang.Protocol.IMessage msg)
|
|
|
+ {
|
|
|
+ mQuestAdapter.DoSendMsgToPlayer(player.PlayerUUID, msg);
|
|
|
+ }
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 本地通知游戏服
|
|
|
- /// </summary>
|
|
|
- /// <param name="player"></param>
|
|
|
- /// <param name="quest"></param>
|
|
|
- /// <param name="args"></param>
|
|
|
- internal void doAcceptQuest(InstancePlayer player, string quest, string args)
|
|
|
+ /// <summary>
|
|
|
+ /// 本地通知游戏服
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="player"></param>
|
|
|
+ /// <param name="quest"></param>
|
|
|
+ /// <param name="args"></param>
|
|
|
+ internal void doAcceptQuest(InstancePlayer player, string quest, string args)
|
|
|
{
|
|
|
mQuestAdapter.DoAcceptQuest(player.PlayerUUID, quest, args);
|
|
|
}
|