public override void ActionResult(byte actionToken, List <int> objectList, Vector3 bombedPos) { if (ActionTokens.ContainsKey(actionToken) == false) { //Log.Information($"ActionResult already execute ({string.Join(",", objectList)}), {actionToken}"); return; } //if(objectList.Count > 0) // Log.Information($"ActionResult ({string.Join(",", objectList)}), {actionToken}"); JSkillData skillData = ACDC.SkillData[ActionTokens[actionToken].SkillId]; NetGameObject obj; for (int i = 0; i < objectList.Count; ++i) { obj = NetworkManagerServer.sInstance.GetGameObject(objectList[i], WorldId); if (obj == null) { continue; } var applyDamage = obj.OnExplode((int)GetPlayerId(), GetNetworkId(), GetDamage(ActionTokens[actionToken].SkillId, (GameObjectClassId)obj.GetClassId())); // add spell SActor actor = obj as SActor; if (actor != null && skillData != null) { //actor.AddableSpell((int)GetPlayerId(), skillData.spellId); //Log.Information($"ActionResult AddSpell {skillData.spellId}"); foreach (int nSpellID in skillData.spellId) { actor.AddableSpell(this, (int)GetPlayerId(), nSpellID, applyDamage); } } } // Link Skill if (skillData != null && skillData.linkSkillId != 0) { var linkSkillData = ACDC.SkillData[skillData.linkSkillId]; if (linkSkillData != null && linkSkillData.skillType == (int)SkillType.InstallAreaOfEffect) { AreaOfEffect aoe = (AreaOfEffect)GameObjectRegistry.sInstance.CreateGameObject((uint)GameObjectClassId.AreaOfEffect, true, WorldId); aoe.InitFrom(this, (ushort)linkSkillData.skillId, bombedPos); } } ActionTokens.Remove(actionToken); }
void AddSpell(Actor inActor, JSpellData spellData) { #if UNITY_EDITOR || DEBUG Log.Information($"SAreaOfEffect AddSpell {inActor.GetPlayerId()} spellId {mSkillData.spellId}"); #endif SActor sActor = inActor as SActor; if (sActor != null) { sActor.AddableSpell(sActor, sActor.GetPlayerId(), spellData, 0); } }
public override void ActionResult2(byte actionToken, List <int> objectList, int hitProjectileIdx) { ActionInfo actionInfo = null; //Log.Information($"ActionResult2 ({string.Join(",", objectList)}), {actionToken}, {hitProjectileIdx}"); if (ActionTokens.TryGetValue(actionToken, out actionInfo)) { if (actionInfo.hitIndex == null) { //Log.Information($"ActionResult2 hitIndex is null ({string.Join(",", objectList)}), {actionToken}, {hitProjectileIdx}"); return; } if (actionInfo.hitIndex.Contains((byte)hitProjectileIdx)) { //Log.Information($"ActionResult2 already hit execute ({string.Join(",", objectList)}), {actionToken}, {hitProjectileIdx}, hitIndex:({string.Join(",", actionInfo.hitIndex)})"); return; } } else { //Log.Information($"ActionResult2 already execute ({string.Join(",", objectList)}), {actionToken}, {hitProjectileIdx}"); return; } //Log.Information($"ActionResult2 OK objectList:({string.Join(",", objectList)}), actionToken:{actionToken}, {hitProjectileIdx}, ({string.Join(",", actionInfo.hitIndex)})"); JSkillData skillData = ACDC.SkillData[actionInfo.SkillId]; NetGameObject obj; for (int i = 0; i < objectList.Count; ++i) { obj = NetworkManagerServer.sInstance.GetGameObject(objectList[i], WorldId); if (obj == null) { continue; } var applyDamage = obj.OnExplode((int)GetPlayerId(), GetNetworkId(), GetDamage(ActionTokens[actionToken].SkillId, (GameObjectClassId)obj.GetClassId())); // add spell SActor actor = obj as SActor; if (actor != null && skillData != null) { //Log.Information($"ActionResult AddSpell {skillData.spellId}"); //actor.AddableSpell((int)GetPlayerId(), skillData.spellId); foreach (int nSpellID in skillData.spellId) { actor.AddableSpell(this, (int)GetPlayerId(), nSpellID, applyDamage); } } } actionInfo.hitIndex.Add((byte)hitProjectileIdx); if (skillData.projectileNum.Aggregate(1, (a, b) => a * b) <= actionInfo.hitIndex.Count) { //Log.Information($"ActionResult2 remove ({string.Join(",", objectList)}), {actionToken}, {hitProjectileIdx}, {string.Join(", ", actionInfo.hitIndex)}"); ActionTokens.Remove(actionToken); } }