Improve House system
This commit is contained in:
@@ -10,12 +10,7 @@ export default function house(globalData: GlobalData) {
|
|||||||
|
|
||||||
var keyBound = false;
|
var keyBound = false;
|
||||||
|
|
||||||
mp.events.add("SERVER:ShowHouseMenu", (dataStr, state: number) => {
|
mp.events.add("SERVER:ShowHouseMenu", () => {
|
||||||
houseData = JSON.parse(dataStr);
|
|
||||||
houseState = state;
|
|
||||||
mp.gui.chat.push(state.toString());
|
|
||||||
mp.gui.chat.push(dataStr);
|
|
||||||
|
|
||||||
mp.game.ui.setTextComponentFormat('STRING');
|
mp.game.ui.setTextComponentFormat('STRING');
|
||||||
mp.game.ui.addTextComponentSubstringPlayerName('Drücke ~INPUT_CONTEXT~, um das Hausmenü öffnen');
|
mp.game.ui.addTextComponentSubstringPlayerName('Drücke ~INPUT_CONTEXT~, um das Hausmenü öffnen');
|
||||||
mp.game.ui.displayHelpTextFromStringLabel(0, true, true, -1);
|
mp.game.ui.displayHelpTextFromStringLabel(0, true, true, -1);
|
||||||
@@ -24,13 +19,18 @@ export default function house(globalData: GlobalData) {
|
|||||||
keyBound = true;
|
keyBound = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
mp.events.add("SERVER:SetHouseData", (dataStr, state) => {
|
||||||
|
houseData = JSON.parse(dataStr);
|
||||||
|
houseState = state;
|
||||||
|
});
|
||||||
|
|
||||||
function keyPressHandler() {
|
function keyPressHandler() {
|
||||||
mp.gui.chat.push("open menu");
|
mp.gui.chat.push("open menu");
|
||||||
mp.game.ui.clearHelp(true);
|
mp.game.ui.clearHelp(true);
|
||||||
|
|
||||||
var subTitle = houseData.Type;
|
var subTitle = houseData.Type;
|
||||||
if (houseData.OwnerName) {
|
if (houseData.OwnerName) {
|
||||||
subTitle += " von " + houseData.OwnerData;
|
subTitle += " von " + houseData.OwnerName;
|
||||||
}
|
}
|
||||||
|
|
||||||
houseMenu = new Menu("Hausverwaltung", subTitle, new Point(50, 50), null, null);
|
houseMenu = new Menu("Hausverwaltung", subTitle, new Point(50, 50), null, null);
|
||||||
@@ -39,15 +39,14 @@ export default function house(globalData: GlobalData) {
|
|||||||
mp.gui.chat.push(houseState.toString());
|
mp.gui.chat.push(houseState.toString());
|
||||||
|
|
||||||
var rentInItem: UIMenuItem;
|
var rentInItem: UIMenuItem;
|
||||||
|
var cancelOwnRentalItem: UIMenuItem;
|
||||||
|
|
||||||
var buyHouseItem: UIMenuItem;
|
var buyHouseItem: UIMenuItem;
|
||||||
|
|
||||||
var setRentalFeeItem: UIMenuItem;
|
var setRentalFeeItem: UIMenuItem;
|
||||||
var cancelRentalsItem: UIMenuItem;
|
var cancelRentalsItem: UIMenuItem;
|
||||||
|
|
||||||
var houseRentals = 0;
|
var houseRentals = houseData.Rentals.length;
|
||||||
|
|
||||||
if (houseData.Rentals) houseRentals = houseData.Rentals.length;
|
|
||||||
|
|
||||||
if (houseState === -1) { // Keine Beziehung zum Haus
|
if (houseState === -1) { // Keine Beziehung zum Haus
|
||||||
mp.gui.chat.push("einmieten");
|
mp.gui.chat.push("einmieten");
|
||||||
@@ -65,21 +64,38 @@ export default function house(globalData: GlobalData) {
|
|||||||
setRentalFeeItem.SetRightLabel(moneyFormat(houseData.RentalFee, 0) + "$");
|
setRentalFeeItem.SetRightLabel(moneyFormat(houseData.RentalFee, 0) + "$");
|
||||||
houseMenu.AddItem(setRentalFeeItem);
|
houseMenu.AddItem(setRentalFeeItem);
|
||||||
|
|
||||||
|
if (houseRentals > 0) {
|
||||||
cancelRentalsItem = new UIMenuItem("Mieter", "Liste deine Mieter auf");
|
cancelRentalsItem = new UIMenuItem("Mieter", "Liste deine Mieter auf");
|
||||||
cancelRentalsItem.SetRightLabel(houseRentals.toString());
|
cancelRentalsItem.SetRightLabel(houseRentals.toString());
|
||||||
|
houseMenu.AddItem(cancelRentalsItem);
|
||||||
|
|
||||||
if (houseRentals > 0) {
|
|
||||||
var cancelRentalsMenu = new Menu("Mieter", "Kündige einen Mieter", new Point(50, 50), null, null);
|
var cancelRentalsMenu = new Menu("Mieter", "Kündige einen Mieter", new Point(50, 50), null, null);
|
||||||
cancelRentalsMenu.Visible = false;
|
cancelRentalsMenu.Visible = false;
|
||||||
|
|
||||||
houseData.Rentals.forEach(rental => {
|
houseData.Rentals.forEach(rental => {
|
||||||
var item = new UIMenuItem(rental.Name, "");
|
var item = new UIMenuItem(rental, "");
|
||||||
item.SetRightLabel("Kündigen");
|
item.SetRightLabel("Kündigen");
|
||||||
cancelRentalsMenu.AddItem(item);
|
cancelRentalsMenu.AddItem(item);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
cancelRentalsMenu.ItemSelect.on((item: UIMenuItem, index: number) => {
|
||||||
|
mp.events.callRemote("CLIENT:House_CancelUserRental", item.Text);
|
||||||
|
houseRentals--;
|
||||||
|
cancelRentalsItem.SetRightLabel(houseRentals.toString());
|
||||||
|
if (houseRentals === 0) {
|
||||||
|
cancelRentalsMenu.Visible = false;
|
||||||
|
houseMenu.Visible = true;
|
||||||
|
houseMenu.RemoveItem(cancelRentalsItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
cancelRentalsMenu.RemoveItem(item);
|
||||||
|
});
|
||||||
|
|
||||||
houseMenu.BindMenuToItem(cancelRentalsMenu, cancelRentalsItem);
|
houseMenu.BindMenuToItem(cancelRentalsMenu, cancelRentalsItem);
|
||||||
}
|
}
|
||||||
|
} else if (houseState === 2) {
|
||||||
|
cancelOwnRentalItem = new UIMenuItem("Mietvertrag kündigen", "Ziehe aus der Wohnung aus");
|
||||||
|
houseMenu.AddItem(cancelOwnRentalItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
var cancelItem = new UIMenuItem("Abbrechen");
|
var cancelItem = new UIMenuItem("Abbrechen");
|
||||||
@@ -97,6 +113,7 @@ export default function house(globalData: GlobalData) {
|
|||||||
mp.events.call("SERVER:CloseHouseMenu");
|
mp.events.call("SERVER:CloseHouseMenu");
|
||||||
} else if (item === setRentalFeeItem) {
|
} else if (item === setRentalFeeItem) {
|
||||||
var rentalFeeInput = new InputHelper("Wie viel soll die Miete betragen?", globalData);
|
var rentalFeeInput = new InputHelper("Wie viel soll die Miete betragen?", globalData);
|
||||||
|
rentalFeeInput.show();
|
||||||
rentalFeeInput.getValue(data => {
|
rentalFeeInput.getValue(data => {
|
||||||
if (isNaN(data)) {
|
if (isNaN(data)) {
|
||||||
return;
|
return;
|
||||||
@@ -107,13 +124,20 @@ export default function house(globalData: GlobalData) {
|
|||||||
mp.events.callRemote("CLIENT:House_SetRentalFee", rentalFee);
|
mp.events.callRemote("CLIENT:House_SetRentalFee", rentalFee);
|
||||||
mp.events.call("SERVER:CloseHouseMenu");
|
mp.events.call("SERVER:CloseHouseMenu");
|
||||||
});
|
});
|
||||||
|
} else if (item === rentInItem) {
|
||||||
|
mp.events.callRemote("CLIENT:House_RentInHouse");
|
||||||
|
} else if (item === cancelOwnRentalItem) {
|
||||||
|
mp.events.callRemote("CLIENT:House_CancelOwnRental");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
houseMenu.MenuClose.on(() => {
|
||||||
|
globalData.InMenu = false;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
mp.events.add("SERVER:CloseHouseMenu", () => {
|
mp.events.add("SERVER:CloseHouseMenu", () => {
|
||||||
mp.game.ui.clearHelp(true);
|
mp.game.ui.clearHelp(true);
|
||||||
globalData.InMenu = false;
|
|
||||||
if (houseMenu != null) {
|
if (houseMenu != null) {
|
||||||
houseMenu.Close();
|
houseMenu.Close();
|
||||||
}
|
}
|
||||||
|
|||||||
1045
ReallifeGamemode.Client/package-lock.json
generated
1045
ReallifeGamemode.Client/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,18 +1,18 @@
|
|||||||
{
|
{
|
||||||
"name": "reallifegamemode.client",
|
"name": "client",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.3.4",
|
"@babel/core": "^7.5.5",
|
||||||
"@types/node": "^11.9.5",
|
"@types/node": "^11.13.18",
|
||||||
"@types/ragemp-c": "github:CocaColaBear/types-ragemp-c#master",
|
"@types/ragemp-c": "github:CocaColaBear/types-ragemp-c#master",
|
||||||
"NativeUI": "https://github.com/sprayzcs/RageMP-NativeUI/tarball/master",
|
"NativeUI": "git+ssh://git@github.com/sprayzcs/RageMP-NativeUI.git",
|
||||||
"babel-loader": "^8.0.5",
|
"babel-loader": "^8.0.6",
|
||||||
"copy-webpack-plugin": "^5.0.1",
|
"copy-webpack-plugin": "^5.0.4",
|
||||||
"ts-loader": "^5.3.3",
|
"ts-loader": "^5.4.5",
|
||||||
"typescript": "^3.3.3333",
|
"typescript": "^3.5.3",
|
||||||
"uglifyjs-webpack-plugin": "^2.1.2",
|
"uglifyjs-webpack-plugin": "^2.1.3",
|
||||||
"webpack": "^4.29.6",
|
"webpack": "^4.38.0",
|
||||||
"webpack-cli": "^3.2.3"
|
"webpack-cli": "^3.3.6"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"watch": "webpack --watch --config webpack.config.development.js",
|
"watch": "webpack --watch --config webpack.config.development.js",
|
||||||
|
|||||||
@@ -13,13 +13,12 @@
|
|||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"**/*",
|
"**/*",
|
||||||
"node_modules/NativeUI/index.ts", "../ReallifeGamemode.Server/Entities/FactionWeapon.cs"
|
"node_modules/NativeUI/index.ts"
|
||||||
],
|
],
|
||||||
"files": [
|
"files": [
|
||||||
"node_modules/NativeUI/index.ts"
|
"node_modules/NativeUI/index.ts"
|
||||||
],
|
],
|
||||||
"exclude": [
|
"exclude": [
|
||||||
"node_modules",
|
"node_modules"
|
||||||
"wwwroot"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using System.Text;
|
|||||||
|
|
||||||
namespace ReallifeGamemode.Server.Entities
|
namespace ReallifeGamemode.Server.Entities
|
||||||
{
|
{
|
||||||
public class HouseRentals
|
public class HouseRental
|
||||||
{
|
{
|
||||||
[Key]
|
[Key]
|
||||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
@@ -48,12 +48,12 @@ namespace ReallifeGamemode.Server.Managers
|
|||||||
{
|
{
|
||||||
using (dbContext = new DatabaseContext())
|
using (dbContext = new DatabaseContext())
|
||||||
{
|
{
|
||||||
return dbContext.Houses.Where(h => h.Position.DistanceTo(position) <= 5f).OrderBy(h => h.Position.DistanceTo(position)).FirstOrDefault();
|
return dbContext.Houses.Where(h => h.Position.DistanceTo(position) <= 5f).Include(h => h.Owner).OrderBy(h => h.Position.DistanceTo(position)).FirstOrDefault();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return dbContext.Houses.Where(h => h.Position.DistanceTo(position) <= 5f).OrderBy(h => h.Position.DistanceTo(position)).FirstOrDefault();
|
return dbContext.Houses.Where(h => h.Position.DistanceTo(position) <= 5f).Include(h => h.Owner).OrderBy(h => h.Position.DistanceTo(position)).FirstOrDefault();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,14 +129,22 @@ namespace ReallifeGamemode.Server.Managers
|
|||||||
House house = GetHouseById(houseId);
|
House house = GetHouseById(houseId);
|
||||||
User user = client.GetUser();
|
User user = client.GetUser();
|
||||||
|
|
||||||
var userHouseStatus = -1;
|
client.SendChatMessage("SERVER:ShowHouseMenu");
|
||||||
|
SendClientHouseData(client, house);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void SendClientHouseData(Client player, House house)
|
||||||
|
{
|
||||||
|
User user = player.GetUser();
|
||||||
|
var userHouseStatus = -1;
|
||||||
|
|
||||||
using (var dbContext = new DatabaseContext())
|
using (var dbContext = new DatabaseContext())
|
||||||
{
|
{
|
||||||
if (house.OwnerId == null) userHouseStatus = 0;
|
if (house.OwnerId == null) userHouseStatus = 0;
|
||||||
else if (house.OwnerId == user?.Id) userHouseStatus = 1;
|
else if (house.OwnerId == user?.Id) userHouseStatus = 1;
|
||||||
else if (dbContext.HouseRentals.Where(h => h.HouseId == houseId && h.UserId == user.Id).Count() == 1) userHouseStatus = 2;
|
else if (dbContext.HouseRentals.Where(h => h.HouseId == house.Id && h.UserId == user.Id).Count() == 1) userHouseStatus = 2;
|
||||||
|
|
||||||
|
var rentals = dbContext.HouseRentals.Where(h => h.HouseId == house.Id).Include(h => h.User).Select(h => h.User.Name).ToList();
|
||||||
|
|
||||||
var newHouse = new
|
var newHouse = new
|
||||||
{
|
{
|
||||||
@@ -144,13 +152,10 @@ namespace ReallifeGamemode.Server.Managers
|
|||||||
house.RentalFee,
|
house.RentalFee,
|
||||||
house.Price,
|
house.Price,
|
||||||
house.Type,
|
house.Type,
|
||||||
Rentals = dbContext.HouseRentals.Where(h => h.Id == houseId).Include(h => h.UserId).Select(h => new
|
Rentals = rentals
|
||||||
{
|
|
||||||
h.User.Name
|
|
||||||
}).ToList()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
client.TriggerEvent("SERVER:ShowHouseMenu", JsonConvert.SerializeObject(newHouse), userHouseStatus);
|
player.TriggerEvent("SERVER:SetHouseData", JsonConvert.SerializeObject(newHouse), userHouseStatus);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -182,7 +187,7 @@ namespace ReallifeGamemode.Server.Managers
|
|||||||
{
|
{
|
||||||
User user = player.GetUser(dbContext);
|
User user = player.GetUser(dbContext);
|
||||||
|
|
||||||
if(user.HouseId != null)
|
if (user.HouseId != null)
|
||||||
{
|
{
|
||||||
ChatService.ErrorMessage(player, "Du kann nicht mehrere Häuser besitzen");
|
ChatService.ErrorMessage(player, "Du kann nicht mehrere Häuser besitzen");
|
||||||
return;
|
return;
|
||||||
@@ -227,9 +232,118 @@ namespace ReallifeGamemode.Server.Managers
|
|||||||
|
|
||||||
house.RentalFee = rentalFee;
|
house.RentalFee = rentalFee;
|
||||||
|
|
||||||
|
dbContext.SaveChanges();
|
||||||
|
|
||||||
player.SendNotification($"Der Mietpreis wurde auf ~g~{rentalFee.ToMoneyString()}~s~ gesetzt");
|
player.SendNotification($"Der Mietpreis wurde auf ~g~{rentalFee.ToMoneyString()}~s~ gesetzt");
|
||||||
|
|
||||||
|
RemoveHouse(house);
|
||||||
|
LoadHouse(house);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[RemoteEvent("CLIENT:House_CancelUserRental")]
|
||||||
|
public void HouseManagerCancelUserRentalEvent(Client player, string userName)
|
||||||
|
{
|
||||||
|
using (var dbContext = new DatabaseContext())
|
||||||
|
{
|
||||||
|
User user = player.GetUser(dbContext);
|
||||||
|
if (user.HouseId == null)
|
||||||
|
{
|
||||||
|
ChatService.ErrorMessage(player, "Du besitzt kein Haus");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
User target = dbContext.Users.Where(u => u.Name == userName).FirstOrDefault();
|
||||||
|
if (target == null)
|
||||||
|
{
|
||||||
|
player.SendNotification("~r~Dieser Spieler wurde nicht gefunden.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
House house = GetHouseById(user.HouseId.Value, dbContext);
|
||||||
|
|
||||||
|
if (user.HouseId == null)
|
||||||
|
{
|
||||||
|
ChatService.ErrorMessage(player, "Du besitzt kein Haus");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
HouseRental rental = dbContext.HouseRentals.Where(h => h.HouseId == house.Id && h.UserId == target.Id).FirstOrDefault();
|
||||||
|
if (rental == null)
|
||||||
|
{
|
||||||
|
player.SendNotification("~r~Der Spieler ist nicht in deinem Haus eingemietet");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dbContext.HouseRentals.Remove(rental);
|
||||||
dbContext.SaveChanges();
|
dbContext.SaveChanges();
|
||||||
|
|
||||||
|
player.SendNotification("Du hast dem Spieler ~y~" + target.Name + "~s~ den Mietvertrag gekündigt.");
|
||||||
|
SendClientHouseData(player, house);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[RemoteEvent("CLIENT:House_RentInHouse")]
|
||||||
|
public void HouseManagerRentInHouseEvent(Client player)
|
||||||
|
{
|
||||||
|
using (var dbContext = new DatabaseContext())
|
||||||
|
{
|
||||||
|
User user = player.GetUser(dbContext);
|
||||||
|
House house = GetNearHouse(player.Position, dbContext);
|
||||||
|
|
||||||
|
if (house == null)
|
||||||
|
{
|
||||||
|
ChatService.ErrorMessage(player, "In deiner Nähe ist kein Haus");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
HouseRental newRental = new HouseRental
|
||||||
|
{
|
||||||
|
HouseId = house.Id,
|
||||||
|
UserId = user.Id
|
||||||
|
};
|
||||||
|
|
||||||
|
dbContext.HouseRentals.Add(newRental);
|
||||||
|
|
||||||
|
dbContext.SaveChanges();
|
||||||
|
|
||||||
|
player.SendNotification("~g~Du hast dich in das Haus eingemietet");
|
||||||
|
|
||||||
|
house.User?.SendNotification($"~y~{player.Name}~s~ hat sich in dein Haus eingemietet.");
|
||||||
|
SendClientHouseData(player, house);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[RemoteEvent("CLIENT:House_CancelOwnRental")]
|
||||||
|
public void HouseManagerCancelOwnRentalEvent(Client player)
|
||||||
|
{
|
||||||
|
using (var dbContext = new DatabaseContext())
|
||||||
|
{
|
||||||
|
User user = player.GetUser(dbContext);
|
||||||
|
House house = GetNearHouse(player.Position, dbContext);
|
||||||
|
|
||||||
|
if (house == null)
|
||||||
|
{
|
||||||
|
ChatService.ErrorMessage(player, "In deiner Nähe ist kein Haus");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
HouseRental rental = dbContext.HouseRentals.Where(h => h.HouseId == house.Id && h.UserId == user.Id).FirstOrDefault();
|
||||||
|
|
||||||
|
if (rental == null)
|
||||||
|
{
|
||||||
|
player.SendNotification("~r~Du bist nin diesem Haus nicht eingemietet");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dbContext.HouseRentals.Remove(rental);
|
||||||
|
|
||||||
|
dbContext.SaveChanges();
|
||||||
|
|
||||||
|
player.SendNotification("~g~Du hast den Mietvertrag gekündigt.");
|
||||||
|
house.User?.SendNotification($"~y~{player.Name}~s~ hat seinen Mietvertrag gekündigt.");
|
||||||
|
|
||||||
|
SendClientHouseData(player, house);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ namespace ReallifeGamemode.Server.Models
|
|||||||
|
|
||||||
// Houses
|
// Houses
|
||||||
public DbSet<Entities.House> Houses { get; set; }
|
public DbSet<Entities.House> Houses { get; set; }
|
||||||
public DbSet<Entities.HouseRentals> HouseRentals { get; set; }
|
public DbSet<Entities.HouseRental> HouseRentals { get; set; }
|
||||||
|
|
||||||
// Bus Routes
|
// Bus Routes
|
||||||
public DbSet<Entities.BusRoute> BusRoutes { get; set; }
|
public DbSet<Entities.BusRoute> BusRoutes { get; set; }
|
||||||
|
|||||||
Reference in New Issue
Block a user