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