public static void AppBlink(Effect effectData, EntityParent caster, XPoint basePoint, bool isCommunicateMix)
    {
        Pos                 pos     = new Pos();
        Vector2             vector  = new Vector2();
        Vector3             vector2 = Vector3.get_zero();
        Vector3             vector3 = caster.Actor.FixTransform.get_forward();
        EffectBasePointType @base   = (EffectBasePointType)effectData.@base;

        if (@base != EffectBasePointType.SpawnPoint)
        {
            vector2 = basePoint.ApplyOffset(effectData.offset).position;
        }
        else
        {
            vector2 = LocalAgent.GetSpawnPosition(effectData.summonId);
        }
        if (effectData.blinkPoint != 0)
        {
            vector3 = LocalAgent.GetSpawnPosition(effectData.blinkPoint) - vector2;
        }
        pos.x    = (float)((int)vector2.x * 100);
        pos.y    = (float)((int)vector2.z * 100);
        vector.x = vector3.x;
        vector.y = vector3.z;
        LocalBattleProtocolSimulator.SendTeleport(caster.ID, pos);
    }
Beispiel #2
0
        protected XPoint GetEffectBasePoint(EffectBasePointType basePointType, float shakeRange, long targetID, int spawnPointID, List <int> prescribedPositionList, List <int> prescribedToPositionList)
        {
            Vector3 zero = Vector3.get_zero();

            if (shakeRange != 0f)
            {
                Vector2 vector = Random.get_insideUnitCircle() * shakeRange * 0.01f;
                zero = new Vector3(vector.x, 0f, vector.y);
            }
            switch (basePointType)
            {
            case EffectBasePointType.Self:
                return(new XPoint
                {
                    position = this.ownerActor.FixTransform.get_position() + zero,
                    rotation = this.ownerActor.FixTransform.get_rotation()
                });

            case EffectBasePointType.Target:
                return((!EntityWorld.Instance.AllEntities.ContainsKey(targetID) || !EntityWorld.Instance.AllEntities[targetID].Actor) ? null : new XPoint
                {
                    position = EntityWorld.Instance.AllEntities[targetID].Actor.FixTransform.get_position() + zero,
                    rotation = this.ownerActor.FixTransform.get_rotation()
                });

            case EffectBasePointType.SpawnPoint:
            {
                if (spawnPointID == 0)
                {
                    return(null);
                }
                Vector2 point        = MapDataManager.Instance.GetPoint(MySceneManager.Instance.CurSceneID, spawnPointID);
                Vector3 terrainPoint = MySceneManager.GetTerrainPoint(point.x, point.y, this.ownerActor.FixTransform.get_position().y);
                Vector3 vector2      = Vector3.get_forward();
                if (prescribedToPositionList != null && prescribedToPositionList.get_Count() >= 3)
                {
                    vector2 = new Vector3((float)prescribedToPositionList.get_Item(0) * 0.01f, (float)prescribedToPositionList.get_Item(1) * 0.01f, (float)prescribedToPositionList.get_Item(2) * 0.01f) - terrainPoint;
                }
                return(new XPoint
                    {
                        position = terrainPoint + zero,
                        rotation = Quaternion.LookRotation(vector2)
                    });
            }

            case EffectBasePointType.TriggerPoint:
                return(null);

            case EffectBasePointType.PrescribedPoint:
            {
                if (prescribedPositionList == null)
                {
                    return(null);
                }
                if (prescribedPositionList.get_Count() < 3)
                {
                    return(null);
                }
                Vector3 vector3 = new Vector3((float)prescribedPositionList.get_Item(0) * 0.01f, (float)prescribedPositionList.get_Item(1) * 0.01f, (float)prescribedPositionList.get_Item(2) * 0.01f);
                Vector3 vector4 = Vector3.get_forward();
                if (prescribedToPositionList != null && prescribedToPositionList.get_Count() >= 3)
                {
                    vector4 = new Vector3((float)prescribedToPositionList.get_Item(0) * 0.01f, (float)prescribedToPositionList.get_Item(1) * 0.01f, (float)prescribedToPositionList.get_Item(2) * 0.01f) - vector3;
                }
                return(new XPoint
                    {
                        position = vector3 + zero,
                        rotation = Quaternion.LookRotation(vector4)
                    });
            }

            default:
                return(null);
            }
        }