public void OpenPortal(Character owner, SkillObjectUnk1 obj) { var portalInfo = owner.Portals.GetPortalInfo(obj.Id); if (CheckCanOpenPortal(owner, portalInfo.ZoneId)) { MakePortal(owner, false, portalInfo); // Entrance (green) MakePortal(owner, true, portalInfo); // Exit (yellow) } }
public void OpenPortal(Character owner, SkillObjectUnk1 portalEffectObj) { var portalInfo = owner.Portals.GetPortalInfo((uint)portalEffectObj.Id); if (!CheckCanOpenPortal(owner, portalInfo.ZoneId)) { return; } MakePortal(owner, false, portalInfo, portalEffectObj); // Entrance (green) MakePortal(owner, true, portalInfo, portalEffectObj); // Exit (yellow) }
private static void MakePortal(Unit owner, bool isExit, Portal portalInfo, SkillObjectUnk1 portalEffectObj) { // 3891 - Portal Entrance // 6949 - Portal Exit var portalPointDestination = new Point { X = portalInfo.X, Y = portalInfo.Y, Z = portalInfo.Z, ZoneId = portalInfo.ZoneId, RotationZ = Helpers.ConvertRotation(Convert.ToInt16(portalInfo.ZRot)), WorldId = WorldManager.Instance.GetWorldByZone(portalInfo.ZoneId).Id }; var portalPointLocation = new Point { X = portalEffectObj.X, Y = portalEffectObj.Y, Z = portalEffectObj.Z, ZoneId = owner.Position.ZoneId, RotationZ = owner.Position.RotationZ, WorldId = owner.Position.WorldId }; var templateId = isExit ? 6949u : 3891u; // TODO - better way? maybe not hardcoded var template = NpcManager.Instance.GetTemplate(templateId); var portalUnitModel = new Models.Game.Units.Portal { ObjId = ObjectIdManager.Instance.GetNextId(), OwnerId = ((Character)owner).Id, TemplateId = templateId, Template = template, ModelId = template.ModelId, Faction = owner.Faction, // INFO - FactionManager.Instance.GetFaction(template.FactionId) Level = template.Level, Position = isExit ? portalPointDestination : portalPointLocation, Name = portalInfo.Name, Hp = 955, // BUG - portal.MaxHp does not work 1.0 Mp = 290, // TODO - portal.MaxMp TeleportPosition = portalPointDestination }; portalUnitModel.Spawn(); }