public static void Knock(Client player) { if (!player.HasData("CurrentDoors")) { return; } BuildingEntity building = (BuildingEntity)player.GetData("CurrentDoors"); if (building._spamProtector) { return; } building._spamProtector = true; CharacterEntity character = player.GetAccountEntity().CharacterEntity; ChatScript.SendMessageToNearbyPlayers(character, "unosi dłoń i puka do drzwi budynku", ChatMessageType.ServerMe); ChatScript.SendMessageToSpecifiedPlayers(character, building.PlayersInBuilding.Select(x => x.CharacterEntity), "Słychać pukanie do drzwi.", ChatMessageType.ServerDo); // Ochrona przed spamem w pukaniu do drzwi Timer timer = new Timer(4000); timer.Start(); timer.Elapsed += (o, e) => { building._spamProtector = false; timer.Stop(); timer.Dispose(); }; }
public void ManageBuilding(Client sender, long id = -1) { //Dla administracji if (id != -1) { BuildingEntity buildindController = EntityHelper.GetBuilding(id); if (buildindController != null) { List <string> adminInfo = new List <string> { buildindController.DbModel.Name, buildindController.DbModel.Description, buildindController.DbModel.EnterCharge.ToString() }; sender.SetData("CurrentDoors", buildindController); sender.TriggerEvent("ShowBuildingManagePanel", adminInfo); return; } sender.SendError("Budynek o podanym Id nie istnieje."); return; } //CurrentBuilding jest po to żeby gracz mógł zarządzać budynkiem ze środka oraz do ofert if (sender.GetAccountEntity().CharacterEntity.CurrentBuilding != null || sender.HasData("CurrentDoors")) { BuildingEntity building = sender.HasData("CurrentDoors") ? sender.GetData("CurrentDoors") : sender.GetAccountEntity().CharacterEntity.CurrentBuilding; //TODO: Dodanie, żeby właściciel grupy mógł zarządzać budynkiem grupowym if (building.DbModel.Character == null || building.DbModel.Character.Id != sender.GetAccountEntity().CharacterEntity.DbModel.Id) { sender.SendError("Nie jesteś właścicielem tego budynku."); return; } List <string> info = new List <string> { building.DbModel.Name, building.DbModel.Description, building.DbModel.EnterCharge.ToString() }; sender.TriggerEvent("ShowBuildingManagePanel", info); } else { sender.SendInfo( "Aby otworzyć panel zarządzania budynkiem musisz znajdować się w markerze bądź środku budynku."); } }
public static void PassDoors(Client sender) { if (!sender.HasData("CurrentDoors") || !sender.HasSharedData("DoorsTarget")) { return; } BuildingEntity buildingEntity = (BuildingEntity)sender.GetData("CurrentDoors"); if (buildingEntity.DoorsLocked) { sender.SendWarning("Drzwi są zamknięte."); return; } CharacterEntity character = sender.GetAccountEntity().CharacterEntity; if (buildingEntity.DbModel.EnterCharge.HasValue && !character.HasMoney(buildingEntity.DbModel.EnterCharge.Value)) { sender.SendError("Nie posiadasz wystarczającej ilości gotówki"); return; } if (buildingEntity.DbModel.EnterCharge.HasValue) { character.RemoveMoney(buildingEntity.DbModel.EnterCharge.Value); } if (buildingEntity.PlayersInBuilding.Contains(sender.GetAccountEntity())) { sender.Position = (Vector3)sender.GetSharedData("DoorsTarget"); sender.Dimension = 0; buildingEntity.PlayersInBuilding.Remove(sender.GetAccountEntity()); character.CurrentBuilding = null; } else { sender.Position = (Vector3)sender.GetSharedData("DoorsTarget"); sender.Dimension = ((BuildingEntity)sender.GetData("CurrentDoors")).InteriorDoorsColshape .Dimension; buildingEntity.PlayersInBuilding.Add(sender.GetAccountEntity()); character.CurrentBuilding = sender.GetData("CurrentDoors"); } }
public void DeleteBuilding(Client sender, long id = -1) { if (!sender.HasRank(ServerRank.AdministratorRozgrywki2)) { sender.SendWarning("Nie posiadasz uprawnień do usuwania drzwi."); return; } if (id == -1 && !sender.HasData("CurrentDoors")) { sender.SendError("Aby usunąć budynek musisz podać jego Id, lub znajdować się w jego drzwiach."); } RoleplayContext ctx = Singletons.RoleplayContextFactory.Create(); using (BuildingsRepository repository = new BuildingsRepository(ctx)) { if (sender.HasData("CurrentDoors")) { BuildingEntity building = (BuildingEntity)sender.GetData("CurrentDoors"); building.Dispose(); repository.Delete(building.DbModel.Id); repository.Save(); return; } if (id != -1 && EntityHelper.GetBuilding(id) != null) { BuildingEntity building = EntityHelper.GetBuilding(id); building.Dispose(); repository.Delete(building.DbModel.Id); repository.Save(); } } sender.SendError("Podany budynek nie istnieje."); }
public void ChangeBuildingLockState(Client sender) { if (!sender.HasData("CurrentDoors")) { sender.SendError("Nie znajdujesz się przy drzwiach."); return; } BuildingEntity building = sender.GetData("CurrentDoors"); //TODO: Dodanie zeby pracownicy mogli otwierać budynki grupowe zgodnie z uprawnieniami if (building.DbModel.Character == null || building.DbModel.Character.Id != sender.GetAccountEntity().CharacterEntity.DbModel.Id) { sender.SendError("Nie jesteś właścicielem tego budynku."); return; } string text = building.DoorsLocked ? "otwarte" : "zamknięte"; sender.SendInfo($"Drzwi zostały {text}"); building.DoorsLocked = !building.DoorsLocked; }
private void API_OnClientEventTrigger(Client sender, string eventName, params object[] arguments) { switch (eventName) { case "PassDoors": BuildingEntity.PassDoors(sender); break; case "KnockDoors": BuildingEntity.Knock(sender); break; case "BuyBuilding": if (!sender.HasData("CurrentDoors")) { return; } BuildingEntity buildingEntity = sender.GetData("CurrentDoors"); buildingEntity.Buy(sender); break; case "AddBuilding": { /* Arguments * args[0] string Name * args[1] decimal cost * args[2] string interiorName * args[3] bool spawnPossible */ if (Constant.Items.DefaultInteriors.All(i => i.Name != (string)arguments[2]) || !sender.HasData("AdminDoorPosition")) { return; } Vector3 internalPosition = Constant.Items.DefaultInteriors .First(i => i.Name == (string)arguments[2]).InternalPosition; Vector3 externalPosition = sender.GetData("AdminDoorPosition"); BuildingEntity building = BuildingEntity.Create( sender.GetAccountEntity().DbModel, (string)arguments[0], Convert.ToDecimal(arguments[1]), internalPosition, externalPosition, (bool)arguments[3]); building.Save(); sender.SendInfo("Dodawanie budynku zakończyło się pomyślnie."); sender.Position = externalPosition; sender.Dimension = (uint)Dimension.Global; break; } case "EdingBuildingInfo": { /* Arguments * args[0] Name * args[1] description * args[2] enterCharge */ BuildingEntity building = sender.HasData("CurrentDoors") ? sender.GetData("CurrentDoors") : sender.GetAccountEntity().CharacterEntity.CurrentBuilding; building.DbModel.Name = arguments[0].ToString(); building.DbModel.Description = arguments[1].ToString(); if (decimal.TryParse(arguments[2].ToString(), out decimal result)) { building.DbModel.EnterCharge = result; } building.Save(); break; } } }