public bool Run(params object[] args) { NWObject door = Object.OBJECT_SELF; if (!door.Area.IsInstance) { return(false); } NWObject target = _.GetTransitionTarget(door); NWPlayer player = _.GetClickingObject(); _.DelayCommand(6.0f, () => { int playerCount = NWModule.Get().Players.Count(x => !Equals(x, player) && Equals(x.Area, door.Area)); if (playerCount <= 0) { _area.DestroyAreaInstance(door.Area); } }); player.AssignCommand(() => { _.ActionJumpToLocation(target.Location); }); return(true); }
public void OnPlayerRespawn() { NWPlayer oPC = _.GetLastRespawnButtonPresser(); int amount = oPC.MaxHP / 2; _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectResurrection(), oPC.Object); _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectHeal(amount), oPC.Object); NWArea area = oPC.Area; TeleportPlayerToBindPoint(oPC); // If player is the last person in an instance, destroy the instance. if (area.IsInstance) { int playersInArea = NWModule.Get().Players.Count(x => x.Area == oPC.Area && x != oPC); if (playersInArea <= 0) { _.DelayCommand(12.0f, () => { _area.DestroyAreaInstance(area); }); } } }
public void DoPlayerExitBuildingInstance(NWPlayer player, NWPlaceable door = null) { NWArea area = player.Area; if (!area.IsInstance) { return; } if (door == null) { NWObject obj = (_.GetFirstObjectInArea(area.Object)); while (obj.IsValid) { if (obj.Tag == "building_exit") { door = (obj.Object); break; } obj = (_.GetNextObjectInArea(area.Object)); } } if (door == null) { return; } Location location = door.GetLocalLocation("PLAYER_HOME_EXIT_LOCATION"); player.AssignCommand(() => _.ActionJumpToLocation(location)); _.DelayCommand(1.0f, () => { player = (_.GetFirstPC()); while (player.IsValid) { if (Equals(player.Area, area)) { return; } player = (_.GetNextPC()); } _area.DestroyAreaInstance(area); }); }