Example #1
0
        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);
        }
Example #2
0
        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);
            }
        }
Example #3
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);
            }
        }