Miese Corona Zeiten push für Lenhardt
This commit is contained in:
@@ -1,11 +1,9 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
|
||||
/**
|
||||
* @overview Life of German Reallife - Managers ATMManager (ATMManager.cs)
|
||||
@@ -16,136 +14,140 @@ using ReallifeGamemode.Database.Models;
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
public class ATMManager : Script
|
||||
{
|
||||
public static List<ColShape> ATMColShapes = new List<ColShape>();
|
||||
|
||||
public static void InitATMs()
|
||||
{
|
||||
var addedATMs = 0;
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
foreach (var currentATM in dbContext.Blips)
|
||||
public static List<ColShape> ATMColShapes = new List<ColShape>();
|
||||
|
||||
public static void InitATMs()
|
||||
{
|
||||
if (currentATM.Sprite == 500)
|
||||
{
|
||||
if (dbContext.ATMs.FirstOrDefault(a => a.Id == currentATM.Id) == null)
|
||||
var addedATMs = 0;
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new ATM
|
||||
{
|
||||
Id = currentATM.Id,
|
||||
X = currentATM.PositionX,
|
||||
Y = currentATM.PositionY,
|
||||
Z = currentATM.PositionZ
|
||||
};
|
||||
dbContext.Add(dataSet);
|
||||
addedATMs++;
|
||||
foreach (var currentATM in dbContext.Blips)
|
||||
{
|
||||
if (currentATM.Sprite == 500)
|
||||
{
|
||||
if (dbContext.ATMs.FirstOrDefault(a => a.Id == currentATM.Id) == null)
|
||||
{
|
||||
var dataSet = new ATM
|
||||
{
|
||||
Id = currentATM.Id,
|
||||
X = currentATM.PositionX,
|
||||
Y = currentATM.PositionY,
|
||||
Z = currentATM.PositionZ
|
||||
};
|
||||
dbContext.Add(dataSet);
|
||||
addedATMs++;
|
||||
}
|
||||
else
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (addedATMs > 0)
|
||||
{
|
||||
NAPI.Util.ConsoleOutput(addedATMs + " Geldautomaten hinzugefügt");
|
||||
}
|
||||
else
|
||||
{
|
||||
NAPI.Util.ConsoleOutput("Keine Geldautomaten hinzugefügt");
|
||||
}
|
||||
|
||||
dbContext.SaveChanges();
|
||||
LoadATMs();
|
||||
}
|
||||
else
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (addedATMs > 0)
|
||||
{
|
||||
NAPI.Util.ConsoleOutput(addedATMs + " Geldautomaten hinzugefügt");
|
||||
}
|
||||
else
|
||||
{
|
||||
NAPI.Util.ConsoleOutput("Keine Geldautomaten hinzugefügt");
|
||||
}
|
||||
|
||||
dbContext.SaveChanges();
|
||||
LoadATMs();
|
||||
}
|
||||
}
|
||||
public static void LoadATMs()
|
||||
{
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
foreach (var currentATM in dbContext.ATMs)
|
||||
public static void LoadATMs()
|
||||
{
|
||||
var currentColShape = NAPI.ColShape.CreateCylinderColShape(new Vector3(currentATM.X, currentATM.Y, currentATM.Z), 2.5f, 3, 0);
|
||||
currentColShape.OnEntityEnterColShape += EnterATMRange;
|
||||
currentColShape.OnEntityExitColShape += ExitATMRange;
|
||||
ATMColShapes.Add(currentColShape);
|
||||
currentColShape.SetData("id", currentATM.Id);
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
foreach (var currentATM in dbContext.ATMs)
|
||||
{
|
||||
var currentColShape = NAPI.ColShape.CreateCylinderColShape(new Vector3(currentATM.X, currentATM.Y, currentATM.Z), 2.5f, 3, 0);
|
||||
currentColShape.OnEntityEnterColShape += EnterATMRange;
|
||||
currentColShape.OnEntityExitColShape += ExitATMRange;
|
||||
ATMColShapes.Add(currentColShape);
|
||||
currentColShape.SetData("id", currentATM.Id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public static void EnterATMRange(ColShape colShape, Player client)
|
||||
{
|
||||
client.SetData("nearATM", colShape.GetData<int>("id"));
|
||||
}
|
||||
public static void ExitATMRange(ColShape colShape, Player client)
|
||||
{
|
||||
client.ResetData("nearATM");
|
||||
}
|
||||
public static void ShowAtmUi(Player player, int atmId)
|
||||
{
|
||||
player.TriggerEvent("SERVER:ShowAtmUi", atmId);
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:ATM_MANAGER:ATM_ACTION")]
|
||||
public void AtmAction(Player client, int site, int inputField1, int inputField2)
|
||||
{
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
var user = client.GetUser(dbContext);
|
||||
int nearATM = client.GetData<int>("nearATM");
|
||||
//SITE //0 Geld einzahlen //1 Geld auszahlen //2 Geld überweisen
|
||||
switch (site)
|
||||
public static void EnterATMRange(ColShape colShape, Player client)
|
||||
{
|
||||
//GELD EINZAHLEN in1
|
||||
case 0:
|
||||
|
||||
if (user.Handmoney < inputField1)
|
||||
{
|
||||
//TODO im CEFBrowser anzeigen
|
||||
//client.TriggerEvent("SERVER:WORLD_INTERACTION:ATM_ERROR", 0, checkATM.Balance);
|
||||
client.SendNotification("~r~Nicht genügend Geld auf der Hand!");
|
||||
}
|
||||
else
|
||||
{
|
||||
var updateBankMoneyIn = user.BankAccount;
|
||||
var updateATMBalanceIn = dbContext.ATMs.FirstOrDefault(a => a.Id == nearATM);
|
||||
user.Handmoney -= inputField1;
|
||||
updateBankMoneyIn.Balance += inputField1;
|
||||
updateATMBalanceIn.Balance += inputField1;
|
||||
client.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney);
|
||||
}
|
||||
break;
|
||||
|
||||
//GELD AUSZAHLEN in1
|
||||
case 1:
|
||||
var checkATM = dbContext.ATMs.FirstOrDefault(a => a.Id == nearATM);
|
||||
|
||||
if (user.BankAccount.Balance < inputField1)
|
||||
{
|
||||
client.SendNotification("~r~Nicht genügend Geld auf dem Bankkonto!"); //TODO Im Automaten anzeigen lassen
|
||||
}
|
||||
else if (checkATM.Balance < inputField1)
|
||||
{
|
||||
client.SendNotification("~r~Nicht genügend Geld im Automaten vorhanden!"); //TODO Im Automaten anzeigen lassen |||| oder OUT OF ORDER anzeigen wenn leer
|
||||
}
|
||||
else
|
||||
{
|
||||
var updateHandMoneyOut = dbContext.Users.FirstOrDefault(u => u.Id == user.Id);
|
||||
var updateATMBalanceOut = dbContext.ATMs.FirstOrDefault(a => a.Id == nearATM);
|
||||
updateHandMoneyOut.Handmoney += inputField1;
|
||||
user.BankAccount.Balance -= inputField1;
|
||||
updateATMBalanceOut.Balance -= inputField1;
|
||||
client.TriggerEvent("SERVER:SET_HANDMONEY", updateHandMoneyOut.Handmoney);
|
||||
}
|
||||
break;
|
||||
|
||||
//GELD ÜBERWEISEN in1 = Kontonr // in2 = Betrag
|
||||
case 2:
|
||||
|
||||
break;
|
||||
client.SetData("nearATM", colShape.GetData<int>("id"));
|
||||
}
|
||||
|
||||
public static void ExitATMRange(ColShape colShape, Player client)
|
||||
{
|
||||
client.ResetData("nearATM");
|
||||
}
|
||||
|
||||
public static void ShowAtmUi(Player player, int atmId)
|
||||
{
|
||||
player.TriggerEvent("SERVER:ShowAtmUi", atmId);
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:ATM_MANAGER:ATM_ACTION")]
|
||||
public void AtmAction(Player client, int site, int inputField1, int inputField2)
|
||||
{
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
var user = client.GetUser(dbContext);
|
||||
int nearATM = client.GetData<int>("nearATM");
|
||||
//SITE //0 Geld einzahlen //1 Geld auszahlen //2 Geld überweisen
|
||||
switch (site)
|
||||
{
|
||||
//GELD EINZAHLEN in1
|
||||
case 0:
|
||||
|
||||
if (user.Handmoney < inputField1)
|
||||
{
|
||||
//TODO im CEFBrowser anzeigen
|
||||
//client.TriggerEvent("SERVER:WORLD_INTERACTION:ATM_ERROR", 0, checkATM.Balance);
|
||||
client.SendNotification("~r~Nicht genügend Geld auf der Hand!");
|
||||
}
|
||||
else
|
||||
{
|
||||
var updateBankMoneyIn = user.BankAccount;
|
||||
var updateATMBalanceIn = dbContext.ATMs.FirstOrDefault(a => a.Id == nearATM);
|
||||
user.Handmoney -= inputField1;
|
||||
updateBankMoneyIn.Balance += inputField1;
|
||||
updateATMBalanceIn.Balance += inputField1;
|
||||
client.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney);
|
||||
}
|
||||
break;
|
||||
|
||||
//GELD AUSZAHLEN in1
|
||||
case 1:
|
||||
var checkATM = dbContext.ATMs.FirstOrDefault(a => a.Id == nearATM);
|
||||
|
||||
if (user.BankAccount.Balance < inputField1)
|
||||
{
|
||||
client.SendNotification("~r~Nicht genügend Geld auf dem Bankkonto!"); //TODO Im Automaten anzeigen lassen
|
||||
}
|
||||
else if (checkATM.Balance < inputField1)
|
||||
{
|
||||
client.SendNotification("~r~Nicht genügend Geld im Automaten vorhanden!"); //TODO Im Automaten anzeigen lassen |||| oder OUT OF ORDER anzeigen wenn leer
|
||||
}
|
||||
else
|
||||
{
|
||||
var updateHandMoneyOut = dbContext.Users.FirstOrDefault(u => u.Id == user.Id);
|
||||
var updateATMBalanceOut = dbContext.ATMs.FirstOrDefault(a => a.Id == nearATM);
|
||||
updateHandMoneyOut.Handmoney += inputField1;
|
||||
user.BankAccount.Balance -= inputField1;
|
||||
updateATMBalanceOut.Balance -= inputField1;
|
||||
client.TriggerEvent("SERVER:SET_HANDMONEY", updateHandMoneyOut.Handmoney);
|
||||
}
|
||||
break;
|
||||
|
||||
//GELD ÜBERWEISEN in1 = Kontonr // in2 = Betrag
|
||||
case 2:
|
||||
|
||||
break;
|
||||
}
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Server.Business;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
using ReallifeGamemode.Database;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Database.Entities.Logs;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Entities.Logs;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
|
||||
/**
|
||||
* @overview Life of German Reallife - Managers BankManager (BankManager.cs)
|
||||
@@ -20,98 +15,98 @@ using ReallifeGamemode.Database.Entities;
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
public class BankManager
|
||||
{
|
||||
public static TransactionResult SetMoney(Player admin, IBankAccountOwner owner, int amount, string reason = "Von Admin gesetzt")
|
||||
{
|
||||
using (var transferMoney = new DatabaseContext())
|
||||
{
|
||||
if (amount < 0) return TransactionResult.NEGATIVE_MONEY_SENT;
|
||||
|
||||
IBankAccount account = owner.GetBankAccount(transferMoney);
|
||||
|
||||
if (account == null) return TransactionResult.RECEIVER_NO_BANKACCOUNT;
|
||||
|
||||
var transactionLog = new BankAccountTransactionHistory
|
||||
public static TransactionResult SetMoney(Player admin, IBankAccountOwner owner, int amount, string reason = "Von Admin gesetzt")
|
||||
{
|
||||
Sender = "ADMIN: " + admin.Name,
|
||||
SenderBalance = 0,
|
||||
Receiver = owner.Name,
|
||||
ReceiverBalance = amount,
|
||||
NewReceiverBalance = amount,
|
||||
NewSenderBalance = 0,
|
||||
MoneySent = amount,
|
||||
Fee = 0,
|
||||
Origin = reason
|
||||
};
|
||||
using (var transferMoney = new DatabaseContext())
|
||||
{
|
||||
if (amount < 0) return TransactionResult.NEGATIVE_MONEY_SENT;
|
||||
|
||||
// add log
|
||||
transferMoney.BankAccountTransactionLogs.Add(transactionLog);
|
||||
IBankAccount account = owner.GetBankAccount(transferMoney);
|
||||
|
||||
account.Balance = amount;
|
||||
if (account == null) return TransactionResult.RECEIVER_NO_BANKACCOUNT;
|
||||
|
||||
transferMoney.SaveChanges();
|
||||
var transactionLog = new BankAccountTransactionHistory
|
||||
{
|
||||
Sender = "ADMIN: " + admin.Name,
|
||||
SenderBalance = 0,
|
||||
Receiver = owner.Name,
|
||||
ReceiverBalance = amount,
|
||||
NewReceiverBalance = amount,
|
||||
NewSenderBalance = 0,
|
||||
MoneySent = amount,
|
||||
Fee = 0,
|
||||
Origin = reason
|
||||
};
|
||||
|
||||
return TransactionResult.SUCCESS;
|
||||
}
|
||||
// add log
|
||||
transferMoney.BankAccountTransactionLogs.Add(transactionLog);
|
||||
|
||||
account.Balance = amount;
|
||||
|
||||
transferMoney.SaveChanges();
|
||||
|
||||
return TransactionResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
public static TransactionResult TransferMoney<TSender, TReceiver>(
|
||||
BankAccountHolder<TSender> sender,
|
||||
BankAccountHolder<TReceiver> receiver,
|
||||
int amount,
|
||||
string origin,
|
||||
DatabaseContext dbContext) where TSender : class, IBankAccount, new() where TReceiver : class, IBankAccount, new()
|
||||
{
|
||||
if (amount < 0) return TransactionResult.NEGATIVE_MONEY_SENT;
|
||||
|
||||
IBankAccount senderAccount;
|
||||
IBankAccount receiverAccount;
|
||||
|
||||
if (sender is BankAccountHolder<BusinessBankAccount> businessSender)
|
||||
{
|
||||
senderAccount = dbContext.BusinessBankAccounts.Where(b => b.Id == businessSender.BankAccountId).First();
|
||||
}
|
||||
else
|
||||
{
|
||||
senderAccount = sender.BankAccount;
|
||||
}
|
||||
|
||||
if (receiver is BankAccountHolder<BusinessBankAccount> businessReceiver)
|
||||
{
|
||||
receiverAccount = dbContext.BusinessBankAccounts.Where(b => b.Id == businessReceiver.BankAccountId).First();
|
||||
}
|
||||
else
|
||||
{
|
||||
receiverAccount = receiver.BankAccount;
|
||||
}
|
||||
|
||||
if (senderAccount == null) return TransactionResult.SENDER_NO_BANKACCOUNT;
|
||||
if (receiverAccount == null) return TransactionResult.RECEIVER_NO_BANKACCOUNT;
|
||||
|
||||
if (senderAccount.Balance < amount) return TransactionResult.SENDER_NOT_ENOUGH_MONEY;
|
||||
|
||||
var transactionLog = new BankAccountTransactionHistory
|
||||
{
|
||||
Sender = sender.BankAccountName,
|
||||
SenderBalance = senderAccount.Balance,
|
||||
Receiver = receiver.BankAccountName,
|
||||
ReceiverBalance = receiverAccount.Balance,
|
||||
NewReceiverBalance = receiverAccount.Balance + amount,
|
||||
NewSenderBalance = senderAccount.Balance - amount,
|
||||
MoneySent = amount,
|
||||
Fee = 0,
|
||||
Origin = origin
|
||||
};
|
||||
|
||||
// add log
|
||||
dbContext.BankAccountTransactionLogs.Add(transactionLog);
|
||||
|
||||
senderAccount.Balance -= amount;
|
||||
receiverAccount.Balance += amount;
|
||||
|
||||
dbContext.SaveChanges();
|
||||
|
||||
return TransactionResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
public static TransactionResult TransferMoney<TSender, TReceiver>(
|
||||
BankAccountHolder<TSender> sender,
|
||||
BankAccountHolder<TReceiver> receiver,
|
||||
int amount,
|
||||
string origin,
|
||||
DatabaseContext dbContext) where TSender : class, IBankAccount, new() where TReceiver : class, IBankAccount, new()
|
||||
{
|
||||
if (amount < 0) return TransactionResult.NEGATIVE_MONEY_SENT;
|
||||
|
||||
IBankAccount senderAccount;
|
||||
IBankAccount receiverAccount;
|
||||
|
||||
if (sender is BankAccountHolder<BusinessBankAccount> businessSender)
|
||||
{
|
||||
senderAccount = dbContext.BusinessBankAccounts.Where(b => b.Id == businessSender.BankAccountId).First();
|
||||
}
|
||||
else
|
||||
{
|
||||
senderAccount = sender.BankAccount;
|
||||
}
|
||||
|
||||
if (receiver is BankAccountHolder<BusinessBankAccount> businessReceiver)
|
||||
{
|
||||
receiverAccount = dbContext.BusinessBankAccounts.Where(b => b.Id == businessReceiver.BankAccountId).First();
|
||||
}
|
||||
else
|
||||
{
|
||||
receiverAccount = receiver.BankAccount;
|
||||
}
|
||||
|
||||
if (senderAccount == null) return TransactionResult.SENDER_NO_BANKACCOUNT;
|
||||
if (receiverAccount == null) return TransactionResult.RECEIVER_NO_BANKACCOUNT;
|
||||
|
||||
if (senderAccount.Balance < amount) return TransactionResult.SENDER_NOT_ENOUGH_MONEY;
|
||||
|
||||
var transactionLog = new BankAccountTransactionHistory
|
||||
{
|
||||
Sender = sender.BankAccountName,
|
||||
SenderBalance = senderAccount.Balance,
|
||||
Receiver = receiver.BankAccountName,
|
||||
ReceiverBalance = receiverAccount.Balance,
|
||||
NewReceiverBalance = receiverAccount.Balance + amount,
|
||||
NewSenderBalance = senderAccount.Balance - amount,
|
||||
MoneySent = amount,
|
||||
Fee = 0,
|
||||
Origin = origin
|
||||
};
|
||||
|
||||
// add log
|
||||
dbContext.BankAccountTransactionLogs.Add(transactionLog);
|
||||
|
||||
senderAccount.Balance -= amount;
|
||||
receiverAccount.Balance += amount;
|
||||
|
||||
dbContext.SaveChanges();
|
||||
|
||||
return TransactionResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,22 +1,21 @@
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Server.Business;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Services;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using ReallifeGamemode.Database;
|
||||
using ReallifeGamemode.Server.Types;
|
||||
using GTANetworkAPI;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Database;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Business;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Server.Services;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
class BusinessManager : Script
|
||||
internal class BusinessManager : Script
|
||||
{
|
||||
public static List<BusinessBase> Businesses { get; private set; }
|
||||
|
||||
|
||||
@@ -1,333 +1,332 @@
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
public class CharacterCreator : Script
|
||||
{
|
||||
[RemoteEvent("creator_GenderChange")]
|
||||
public void changeGender(Player player, int gender)
|
||||
{
|
||||
if(gender == 0) player.SetSkin(PedHash.FreemodeMale01);
|
||||
else player.SetSkin(PedHash.FreemodeFemale01);
|
||||
}
|
||||
[RemoteEvent("creatorSave")]
|
||||
public void CreatorSave(Player player, bool gender, string parentData, string featureData, string appearanceData, string hairAndColorData)
|
||||
{
|
||||
var jParentData = JObject.Parse(parentData);
|
||||
var jFeatureData = JArray.Parse(featureData);
|
||||
var jAppearanceData = JArray.Parse(appearanceData);
|
||||
var jHairAndColorData = JArray.Parse(hairAndColorData);
|
||||
|
||||
byte father = jParentData.Value<byte>("Father");
|
||||
byte mother = jParentData.Value<byte>("Mother");
|
||||
float similarity = jParentData.Value<float>("Similarity");
|
||||
float skinSimilarity = jParentData.Value<float>("SkinSimilarity");
|
||||
|
||||
float noseWidth = jFeatureData.Value<float>(0);
|
||||
float noseBottomHeight = jFeatureData.Value<float>(1);
|
||||
float noseTipLength = jFeatureData.Value<float>(2);
|
||||
float noseBridgeDepth = jFeatureData.Value<float>(3);
|
||||
float noseTipHeight = jFeatureData.Value<float>(4);
|
||||
float noseBroken = jFeatureData.Value<float>(5);
|
||||
float browHeight = jFeatureData.Value<float>(6);
|
||||
float browDepth = jFeatureData.Value<float>(7);
|
||||
float cheekboneHeight = jFeatureData.Value<float>(8);
|
||||
float cheekboneWidth = jFeatureData.Value<float>(9);
|
||||
float cheekDepth = jFeatureData.Value<float>(10);
|
||||
float eyeSize = jFeatureData.Value<float>(11);
|
||||
float lipThickness = jFeatureData.Value<float>(12);
|
||||
float jawWidth = jFeatureData.Value<float>(13);
|
||||
float jawShape = jFeatureData.Value<float>(14);
|
||||
float chinHeight = jFeatureData.Value<float>(15);
|
||||
float chinDepth = jFeatureData.Value<float>(16);
|
||||
float chinWidth = jFeatureData.Value<float>(17);
|
||||
float chinIndent = jFeatureData.Value<float>(18);
|
||||
float neckWidth = jFeatureData.Value<float>(19);
|
||||
|
||||
byte blemishes = jAppearanceData[0].Value<byte>("Value");
|
||||
float blemishesOpacity = jAppearanceData[0].Value<byte>("Opacity");
|
||||
byte facialHair = jAppearanceData[1].Value<byte>("Value");
|
||||
float facialHairOpacity = jAppearanceData[1].Value<byte>("Opacity");
|
||||
byte eyebrows = jAppearanceData[2].Value<byte>("Value");
|
||||
float eyebrowsOpacity = jAppearanceData[2].Value<byte>("Opacity");
|
||||
byte ageing = jAppearanceData[3].Value<byte>("Value");
|
||||
float ageingOpacity = jAppearanceData[3].Value<byte>("Opacity");
|
||||
byte makeup = jAppearanceData[4].Value<byte>("Value");
|
||||
float makeupOpacity = jAppearanceData[4].Value<byte>("Opacity");
|
||||
byte blush = jAppearanceData[5].Value<byte>("Value");
|
||||
float blushOpacity = jAppearanceData[5].Value<byte>("Opacity");
|
||||
byte complexion = jAppearanceData[6].Value<byte>("Value");
|
||||
float complexionOpacity = jAppearanceData[6].Value<byte>("Opacity");
|
||||
byte sunDamage = jAppearanceData[7].Value<byte>("Value");
|
||||
float sunDamageOpacity = jAppearanceData[7].Value<byte>("Opacity");
|
||||
byte lipstick = jAppearanceData[8].Value<byte>("Value");
|
||||
float lipstickOpacity = jAppearanceData[8].Value<byte>("Opacity");
|
||||
byte freckles = jAppearanceData[9].Value<byte>("Value");
|
||||
float frecklesOpacity = jAppearanceData[9].Value<byte>("Opacity");
|
||||
byte chestHair = jAppearanceData[10].Value<byte>("Value");
|
||||
float chestHairOpacity = jAppearanceData[10].Value<byte>("Opacity");
|
||||
|
||||
byte hair = jHairAndColorData.Value<byte>(0);
|
||||
byte hairColor = jHairAndColorData.Value<byte>(1);
|
||||
byte hairHighlightColor = jHairAndColorData.Value<byte>(2);
|
||||
byte eyebrowColor = jHairAndColorData.Value<byte>(3);
|
||||
byte beardColor = jHairAndColorData.Value<byte>(4);
|
||||
byte eyeColor = jHairAndColorData.Value<byte>(5);
|
||||
byte blushColor = jHairAndColorData.Value<byte>(6);
|
||||
byte lipstickColor = jHairAndColorData.Value<byte>(7);
|
||||
byte chestHairColor = jHairAndColorData.Value<byte>(8);
|
||||
|
||||
using (var saveCharacter = new DatabaseContext())
|
||||
{
|
||||
var character = new Database.Entities.Character
|
||||
[RemoteEvent("creator_GenderChange")]
|
||||
public void changeGender(Player player, int gender)
|
||||
{
|
||||
UserId = player.GetUser().Id,
|
||||
Gender = gender,
|
||||
Father = father,
|
||||
Mother = mother,
|
||||
Similarity = similarity,
|
||||
SkinSimilarity = skinSimilarity,
|
||||
|
||||
NoseWidth = noseWidth,
|
||||
NoseBottomHeight = noseBottomHeight,
|
||||
NoseTipLength = noseTipLength,
|
||||
NoseBridgeDepth = noseBridgeDepth,
|
||||
NoseTipHeight = noseTipHeight,
|
||||
NoseBroken = noseBroken,
|
||||
BrowHeight = browHeight,
|
||||
BrowDepth = browDepth,
|
||||
CheekboneHeight = cheekboneHeight,
|
||||
CheekboneWidth = cheekboneWidth,
|
||||
CheekDepth = cheekDepth,
|
||||
EyeSize = eyeSize,
|
||||
LipThickness = lipThickness,
|
||||
JawWidth = jawWidth,
|
||||
JawShape = jawShape,
|
||||
ChinHeight = chinHeight,
|
||||
ChinDepth = chinDepth,
|
||||
ChinWidth = chinWidth,
|
||||
ChinIndent = chinIndent,
|
||||
NeckWidth = neckWidth,
|
||||
|
||||
Blemishes = blemishes,
|
||||
BlemishesOpacity = blemishesOpacity,
|
||||
FacialHair = facialHair,
|
||||
FacialHairOpacity = facialHairOpacity,
|
||||
Eyebrows = eyebrows,
|
||||
EyebrowsOpacity = eyebrowsOpacity,
|
||||
Ageing = ageing,
|
||||
AgeingOpacity = ageingOpacity,
|
||||
Makeup = makeup,
|
||||
MakeupOpacity = makeupOpacity,
|
||||
Blush = blush,
|
||||
BlushOpacity = blushOpacity,
|
||||
Complexion = complexion,
|
||||
ComplexionOpacity = complexionOpacity,
|
||||
SunDamage = sunDamage,
|
||||
SunDamageOpacity = sunDamageOpacity,
|
||||
Lipstick = lipstick,
|
||||
LipstickOpacity = lipstickOpacity,
|
||||
Freckles = freckles,
|
||||
FrecklesOpacity = frecklesOpacity,
|
||||
ChestHair = chestHair,
|
||||
ChestHairOpacity = chestHairOpacity,
|
||||
|
||||
Hair = hair,
|
||||
HairColor = hairColor,
|
||||
HairHighlightColor = hairHighlightColor,
|
||||
EyebrowColor = eyebrowColor,
|
||||
BeardColor = beardColor,
|
||||
EyeColor = eyeColor,
|
||||
BlushColor = blushColor,
|
||||
LipstickColor = lipstickColor,
|
||||
ChestHairColor = chestHairColor
|
||||
};
|
||||
|
||||
saveCharacter.Characters.Add(character);
|
||||
saveCharacter.SaveChanges();
|
||||
|
||||
var userId = player.GetUser().Id;
|
||||
var user = saveCharacter.Users.SingleOrDefault(u => u.Id == userId);
|
||||
|
||||
user.CharacterId = character.Id;
|
||||
saveCharacter.SaveChanges();
|
||||
}
|
||||
//HeadOverlay makeupHo = new HeadOverlay()
|
||||
//{
|
||||
// Index = 0,
|
||||
// Opacity = 0.0f,
|
||||
// Color = 0,
|
||||
// SecondaryColor = 0
|
||||
//};
|
||||
//HeadOverlay blushHo = new HeadOverlay()
|
||||
//{
|
||||
// Index = 0,
|
||||
// Opacity = 0.0f,
|
||||
// Color = 0,
|
||||
// SecondaryColor = 0
|
||||
//};
|
||||
//player.SetHeadOverlay(4, makeupHo);
|
||||
//player.SetHeadOverlay(5, blushHo);
|
||||
NAPI.Player.SpawnPlayer(player, Main.DEFAULT_SPAWN_POSITION, Main.DEFAULT_SPAWN_HEADING);
|
||||
player.TriggerEvent("draw", player.Name, player.Handle.Value);
|
||||
player.Dimension = 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wendet den Character eines Spielers auf diesen an
|
||||
/// </summary>
|
||||
/// <param name="player">Der Player, dessen Aussehen man setzen will</param>
|
||||
public static void ApplyCharacter(Player player)
|
||||
{
|
||||
var user = player.GetUser();
|
||||
using (var loadCharacter = new DatabaseContext())
|
||||
{
|
||||
var character = loadCharacter.Characters.SingleOrDefault(c => c.Id == user.CharacterId);
|
||||
|
||||
if (character == null) return;
|
||||
|
||||
//Männlich / Weiblich
|
||||
if (character.Gender == false)
|
||||
{
|
||||
player.SetSkin(PedHash.FreemodeMale01);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.SetSkin(PedHash.FreemodeFemale01);
|
||||
if (gender == 0) player.SetSkin(PedHash.FreemodeMale01);
|
||||
else player.SetSkin(PedHash.FreemodeFemale01);
|
||||
}
|
||||
|
||||
//Gesichtszüge
|
||||
float[] faceFeatures = new float[] { character.NoseWidth, character.NoseBottomHeight, character.NoseTipLength, character.NoseBridgeDepth, character.NoseTipHeight,
|
||||
[RemoteEvent("creatorSave")]
|
||||
public void CreatorSave(Player player, bool gender, string parentData, string featureData, string appearanceData, string hairAndColorData)
|
||||
{
|
||||
var jParentData = JObject.Parse(parentData);
|
||||
var jFeatureData = JArray.Parse(featureData);
|
||||
var jAppearanceData = JArray.Parse(appearanceData);
|
||||
var jHairAndColorData = JArray.Parse(hairAndColorData);
|
||||
|
||||
byte father = jParentData.Value<byte>("Father");
|
||||
byte mother = jParentData.Value<byte>("Mother");
|
||||
float similarity = jParentData.Value<float>("Similarity");
|
||||
float skinSimilarity = jParentData.Value<float>("SkinSimilarity");
|
||||
|
||||
float noseWidth = jFeatureData.Value<float>(0);
|
||||
float noseBottomHeight = jFeatureData.Value<float>(1);
|
||||
float noseTipLength = jFeatureData.Value<float>(2);
|
||||
float noseBridgeDepth = jFeatureData.Value<float>(3);
|
||||
float noseTipHeight = jFeatureData.Value<float>(4);
|
||||
float noseBroken = jFeatureData.Value<float>(5);
|
||||
float browHeight = jFeatureData.Value<float>(6);
|
||||
float browDepth = jFeatureData.Value<float>(7);
|
||||
float cheekboneHeight = jFeatureData.Value<float>(8);
|
||||
float cheekboneWidth = jFeatureData.Value<float>(9);
|
||||
float cheekDepth = jFeatureData.Value<float>(10);
|
||||
float eyeSize = jFeatureData.Value<float>(11);
|
||||
float lipThickness = jFeatureData.Value<float>(12);
|
||||
float jawWidth = jFeatureData.Value<float>(13);
|
||||
float jawShape = jFeatureData.Value<float>(14);
|
||||
float chinHeight = jFeatureData.Value<float>(15);
|
||||
float chinDepth = jFeatureData.Value<float>(16);
|
||||
float chinWidth = jFeatureData.Value<float>(17);
|
||||
float chinIndent = jFeatureData.Value<float>(18);
|
||||
float neckWidth = jFeatureData.Value<float>(19);
|
||||
|
||||
byte blemishes = jAppearanceData[0].Value<byte>("Value");
|
||||
float blemishesOpacity = jAppearanceData[0].Value<byte>("Opacity");
|
||||
byte facialHair = jAppearanceData[1].Value<byte>("Value");
|
||||
float facialHairOpacity = jAppearanceData[1].Value<byte>("Opacity");
|
||||
byte eyebrows = jAppearanceData[2].Value<byte>("Value");
|
||||
float eyebrowsOpacity = jAppearanceData[2].Value<byte>("Opacity");
|
||||
byte ageing = jAppearanceData[3].Value<byte>("Value");
|
||||
float ageingOpacity = jAppearanceData[3].Value<byte>("Opacity");
|
||||
byte makeup = jAppearanceData[4].Value<byte>("Value");
|
||||
float makeupOpacity = jAppearanceData[4].Value<byte>("Opacity");
|
||||
byte blush = jAppearanceData[5].Value<byte>("Value");
|
||||
float blushOpacity = jAppearanceData[5].Value<byte>("Opacity");
|
||||
byte complexion = jAppearanceData[6].Value<byte>("Value");
|
||||
float complexionOpacity = jAppearanceData[6].Value<byte>("Opacity");
|
||||
byte sunDamage = jAppearanceData[7].Value<byte>("Value");
|
||||
float sunDamageOpacity = jAppearanceData[7].Value<byte>("Opacity");
|
||||
byte lipstick = jAppearanceData[8].Value<byte>("Value");
|
||||
float lipstickOpacity = jAppearanceData[8].Value<byte>("Opacity");
|
||||
byte freckles = jAppearanceData[9].Value<byte>("Value");
|
||||
float frecklesOpacity = jAppearanceData[9].Value<byte>("Opacity");
|
||||
byte chestHair = jAppearanceData[10].Value<byte>("Value");
|
||||
float chestHairOpacity = jAppearanceData[10].Value<byte>("Opacity");
|
||||
|
||||
byte hair = jHairAndColorData.Value<byte>(0);
|
||||
byte hairColor = jHairAndColorData.Value<byte>(1);
|
||||
byte hairHighlightColor = jHairAndColorData.Value<byte>(2);
|
||||
byte eyebrowColor = jHairAndColorData.Value<byte>(3);
|
||||
byte beardColor = jHairAndColorData.Value<byte>(4);
|
||||
byte eyeColor = jHairAndColorData.Value<byte>(5);
|
||||
byte blushColor = jHairAndColorData.Value<byte>(6);
|
||||
byte lipstickColor = jHairAndColorData.Value<byte>(7);
|
||||
byte chestHairColor = jHairAndColorData.Value<byte>(8);
|
||||
|
||||
using (var saveCharacter = new DatabaseContext())
|
||||
{
|
||||
var character = new Database.Entities.Character
|
||||
{
|
||||
UserId = player.GetUser().Id,
|
||||
Gender = gender,
|
||||
Father = father,
|
||||
Mother = mother,
|
||||
Similarity = similarity,
|
||||
SkinSimilarity = skinSimilarity,
|
||||
|
||||
NoseWidth = noseWidth,
|
||||
NoseBottomHeight = noseBottomHeight,
|
||||
NoseTipLength = noseTipLength,
|
||||
NoseBridgeDepth = noseBridgeDepth,
|
||||
NoseTipHeight = noseTipHeight,
|
||||
NoseBroken = noseBroken,
|
||||
BrowHeight = browHeight,
|
||||
BrowDepth = browDepth,
|
||||
CheekboneHeight = cheekboneHeight,
|
||||
CheekboneWidth = cheekboneWidth,
|
||||
CheekDepth = cheekDepth,
|
||||
EyeSize = eyeSize,
|
||||
LipThickness = lipThickness,
|
||||
JawWidth = jawWidth,
|
||||
JawShape = jawShape,
|
||||
ChinHeight = chinHeight,
|
||||
ChinDepth = chinDepth,
|
||||
ChinWidth = chinWidth,
|
||||
ChinIndent = chinIndent,
|
||||
NeckWidth = neckWidth,
|
||||
|
||||
Blemishes = blemishes,
|
||||
BlemishesOpacity = blemishesOpacity,
|
||||
FacialHair = facialHair,
|
||||
FacialHairOpacity = facialHairOpacity,
|
||||
Eyebrows = eyebrows,
|
||||
EyebrowsOpacity = eyebrowsOpacity,
|
||||
Ageing = ageing,
|
||||
AgeingOpacity = ageingOpacity,
|
||||
Makeup = makeup,
|
||||
MakeupOpacity = makeupOpacity,
|
||||
Blush = blush,
|
||||
BlushOpacity = blushOpacity,
|
||||
Complexion = complexion,
|
||||
ComplexionOpacity = complexionOpacity,
|
||||
SunDamage = sunDamage,
|
||||
SunDamageOpacity = sunDamageOpacity,
|
||||
Lipstick = lipstick,
|
||||
LipstickOpacity = lipstickOpacity,
|
||||
Freckles = freckles,
|
||||
FrecklesOpacity = frecklesOpacity,
|
||||
ChestHair = chestHair,
|
||||
ChestHairOpacity = chestHairOpacity,
|
||||
|
||||
Hair = hair,
|
||||
HairColor = hairColor,
|
||||
HairHighlightColor = hairHighlightColor,
|
||||
EyebrowColor = eyebrowColor,
|
||||
BeardColor = beardColor,
|
||||
EyeColor = eyeColor,
|
||||
BlushColor = blushColor,
|
||||
LipstickColor = lipstickColor,
|
||||
ChestHairColor = chestHairColor
|
||||
};
|
||||
|
||||
saveCharacter.Characters.Add(character);
|
||||
saveCharacter.SaveChanges();
|
||||
|
||||
var userId = player.GetUser().Id;
|
||||
var user = saveCharacter.Users.SingleOrDefault(u => u.Id == userId);
|
||||
|
||||
user.CharacterId = character.Id;
|
||||
saveCharacter.SaveChanges();
|
||||
}
|
||||
//HeadOverlay makeupHo = new HeadOverlay()
|
||||
//{
|
||||
// Index = 0,
|
||||
// Opacity = 0.0f,
|
||||
// Color = 0,
|
||||
// SecondaryColor = 0
|
||||
//};
|
||||
//HeadOverlay blushHo = new HeadOverlay()
|
||||
//{
|
||||
// Index = 0,
|
||||
// Opacity = 0.0f,
|
||||
// Color = 0,
|
||||
// SecondaryColor = 0
|
||||
//};
|
||||
//player.SetHeadOverlay(4, makeupHo);
|
||||
//player.SetHeadOverlay(5, blushHo);
|
||||
NAPI.Player.SpawnPlayer(player, Main.DEFAULT_SPAWN_POSITION, Main.DEFAULT_SPAWN_HEADING);
|
||||
player.TriggerEvent("draw", player.Name, player.Handle.Value);
|
||||
player.Dimension = 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wendet den Character eines Spielers auf diesen an
|
||||
/// </summary>
|
||||
/// <param name="player">Der Player, dessen Aussehen man setzen will</param>
|
||||
public static void ApplyCharacter(Player player)
|
||||
{
|
||||
var user = player.GetUser();
|
||||
using (var loadCharacter = new DatabaseContext())
|
||||
{
|
||||
var character = loadCharacter.Characters.SingleOrDefault(c => c.Id == user.CharacterId);
|
||||
|
||||
if (character == null) return;
|
||||
|
||||
//Männlich / Weiblich
|
||||
if (character.Gender == false)
|
||||
{
|
||||
player.SetSkin(PedHash.FreemodeMale01);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.SetSkin(PedHash.FreemodeFemale01);
|
||||
}
|
||||
|
||||
//Gesichtszüge
|
||||
float[] faceFeatures = new float[] { character.NoseWidth, character.NoseBottomHeight, character.NoseTipLength, character.NoseBridgeDepth, character.NoseTipHeight,
|
||||
character.NoseBroken, character.BrowHeight, character.BrowDepth, character.CheekboneHeight, character.CheekboneWidth,
|
||||
character.CheekboneWidth, character.CheekDepth, character.EyeSize, character.LipThickness, character.JawWidth,
|
||||
character.JawShape, character.ChinHeight, character.ChinDepth, character.ChinWidth, character.ChinIndent, character.NeckWidth };
|
||||
|
||||
for (var i = 0; i < faceFeatures.Length; i++)
|
||||
{
|
||||
player.SetFaceFeature(i, faceFeatures[i]);
|
||||
for (var i = 0; i < faceFeatures.Length; i++)
|
||||
{
|
||||
player.SetFaceFeature(i, faceFeatures[i]);
|
||||
}
|
||||
|
||||
//Gesichtsmerkmale
|
||||
HeadOverlay blemishes = new HeadOverlay()
|
||||
{
|
||||
Index = character.Blemishes,
|
||||
Opacity = character.BlemishesOpacity,
|
||||
Color = 255,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay facialHair = new HeadOverlay()
|
||||
{
|
||||
Index = character.FacialHair,
|
||||
Opacity = character.FacialHairOpacity,
|
||||
Color = character.BeardColor,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay eyebrows = new HeadOverlay()
|
||||
{
|
||||
Index = character.Eyebrows,
|
||||
Opacity = character.EyebrowsOpacity,
|
||||
Color = character.EyebrowColor,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay ageing = new HeadOverlay()
|
||||
{
|
||||
Index = character.Ageing,
|
||||
Opacity = character.AgeingOpacity,
|
||||
Color = 255,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay makeup = new HeadOverlay()
|
||||
{
|
||||
Index = character.Makeup,
|
||||
Opacity = character.MakeupOpacity,
|
||||
Color = 255,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay blush = new HeadOverlay()
|
||||
{
|
||||
Index = character.Blush,
|
||||
Opacity = character.BlushOpacity,
|
||||
Color = character.BlushColor,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay complexion = new HeadOverlay()
|
||||
{
|
||||
Index = character.Complexion,
|
||||
Opacity = character.ComplexionOpacity,
|
||||
Color = 255,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay sunDamage = new HeadOverlay()
|
||||
{
|
||||
Index = character.SunDamage,
|
||||
Opacity = character.SunDamageOpacity,
|
||||
Color = 255,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay lipstick = new HeadOverlay()
|
||||
{
|
||||
Index = character.Lipstick,
|
||||
Opacity = character.LipstickOpacity,
|
||||
Color = character.LipstickColor,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay freckles = new HeadOverlay()
|
||||
{
|
||||
Index = character.Freckles,
|
||||
Opacity = character.FrecklesOpacity,
|
||||
Color = 255,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay chestHair = new HeadOverlay()
|
||||
{
|
||||
Index = character.ChestHair,
|
||||
Opacity = character.ChestHairOpacity,
|
||||
Color = character.ChestHairColor,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
|
||||
player.SetHeadOverlay(0, blemishes);
|
||||
player.SetHeadOverlay(1, facialHair);
|
||||
player.SetHeadOverlay(2, eyebrows);
|
||||
player.SetHeadOverlay(3, ageing);
|
||||
player.SetHeadOverlay(4, makeup);
|
||||
player.SetHeadOverlay(5, blush);
|
||||
player.SetHeadOverlay(6, complexion);
|
||||
player.SetHeadOverlay(7, sunDamage);
|
||||
player.SetHeadOverlay(8, lipstick);
|
||||
player.SetHeadOverlay(9, freckles);
|
||||
player.SetHeadOverlay(10, chestHair);
|
||||
player.SetHeadOverlay(11, blemishes);
|
||||
player.SetHeadOverlay(12, blemishes);
|
||||
|
||||
//Gesicht (Vererbung durch Mutter / Vater)
|
||||
HeadBlend headBlend = new HeadBlend()
|
||||
{
|
||||
ShapeFirst = character.Mother,
|
||||
ShapeSecond = character.Father,
|
||||
ShapeThird = 0,
|
||||
SkinFirst = character.Mother,
|
||||
SkinSecond = character.Father,
|
||||
SkinThird = 0,
|
||||
ShapeMix = character.Similarity,
|
||||
SkinMix = character.SkinSimilarity,
|
||||
ThirdMix = 0.0f
|
||||
};
|
||||
NAPI.Player.SetPlayerHeadBlend(player, headBlend);
|
||||
|
||||
//Haare und Haarfarbe
|
||||
player.SetClothes(2, character.Hair, 0);
|
||||
NAPI.Player.SetPlayerHairColor(player, character.HairColor, character.HairHighlightColor);
|
||||
|
||||
//Augenfarbe
|
||||
NAPI.Player.SetPlayerEyeColor(player, character.EyeColor);
|
||||
}
|
||||
}
|
||||
|
||||
//Gesichtsmerkmale
|
||||
HeadOverlay blemishes = new HeadOverlay()
|
||||
{
|
||||
Index = character.Blemishes,
|
||||
Opacity = character.BlemishesOpacity,
|
||||
Color = 255,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay facialHair = new HeadOverlay()
|
||||
{
|
||||
Index = character.FacialHair,
|
||||
Opacity = character.FacialHairOpacity,
|
||||
Color = character.BeardColor,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay eyebrows = new HeadOverlay()
|
||||
{
|
||||
Index = character.Eyebrows,
|
||||
Opacity = character.EyebrowsOpacity,
|
||||
Color = character.EyebrowColor,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay ageing = new HeadOverlay()
|
||||
{
|
||||
Index = character.Ageing,
|
||||
Opacity = character.AgeingOpacity,
|
||||
Color = 255,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay makeup = new HeadOverlay()
|
||||
{
|
||||
Index = character.Makeup,
|
||||
Opacity = character.MakeupOpacity,
|
||||
Color = 255,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay blush = new HeadOverlay()
|
||||
{
|
||||
Index = character.Blush,
|
||||
Opacity = character.BlushOpacity,
|
||||
Color = character.BlushColor,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay complexion = new HeadOverlay()
|
||||
{
|
||||
Index = character.Complexion,
|
||||
Opacity = character.ComplexionOpacity,
|
||||
Color = 255,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay sunDamage = new HeadOverlay()
|
||||
{
|
||||
Index = character.SunDamage,
|
||||
Opacity = character.SunDamageOpacity,
|
||||
Color = 255,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay lipstick = new HeadOverlay()
|
||||
{
|
||||
Index = character.Lipstick,
|
||||
Opacity = character.LipstickOpacity,
|
||||
Color = character.LipstickColor,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay freckles = new HeadOverlay()
|
||||
{
|
||||
Index = character.Freckles,
|
||||
Opacity = character.FrecklesOpacity,
|
||||
Color = 255,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
HeadOverlay chestHair = new HeadOverlay()
|
||||
{
|
||||
Index = character.ChestHair,
|
||||
Opacity = character.ChestHairOpacity,
|
||||
Color = character.ChestHairColor,
|
||||
SecondaryColor = 255
|
||||
};
|
||||
|
||||
player.SetHeadOverlay(0, blemishes);
|
||||
player.SetHeadOverlay(1, facialHair);
|
||||
player.SetHeadOverlay(2, eyebrows);
|
||||
player.SetHeadOverlay(3, ageing);
|
||||
player.SetHeadOverlay(4, makeup);
|
||||
player.SetHeadOverlay(5, blush);
|
||||
player.SetHeadOverlay(6, complexion);
|
||||
player.SetHeadOverlay(7, sunDamage);
|
||||
player.SetHeadOverlay(8, lipstick);
|
||||
player.SetHeadOverlay(9, freckles);
|
||||
player.SetHeadOverlay(10, chestHair);
|
||||
player.SetHeadOverlay(11, blemishes);
|
||||
player.SetHeadOverlay(12, blemishes);
|
||||
|
||||
|
||||
//Gesicht (Vererbung durch Mutter / Vater)
|
||||
HeadBlend headBlend = new HeadBlend()
|
||||
{
|
||||
ShapeFirst = character.Mother,
|
||||
ShapeSecond = character.Father,
|
||||
ShapeThird = 0,
|
||||
SkinFirst = character.Mother,
|
||||
SkinSecond = character.Father,
|
||||
SkinThird = 0,
|
||||
ShapeMix = character.Similarity,
|
||||
SkinMix = character.SkinSimilarity,
|
||||
ThirdMix = 0.0f
|
||||
};
|
||||
NAPI.Player.SetPlayerHeadBlend(player, headBlend);
|
||||
|
||||
//Haare und Haarfarbe
|
||||
player.SetClothes(2, character.Hair, 0);
|
||||
NAPI.Player.SetPlayerHairColor(player, character.HairColor, character.HairHighlightColor);
|
||||
|
||||
//Augenfarbe
|
||||
NAPI.Player.SetPlayerEyeColor(player, character.EyeColor);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,20 +1,15 @@
|
||||
using GTANetworkAPI;
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Server.Services;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using ReallifeGamemode.Database;
|
||||
using ReallifeGamemode.Server.Types;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
class CityHallManager : Script
|
||||
internal class CityHallManager : Script
|
||||
{
|
||||
private static readonly Vector3 _cityHallPosition = new Vector3(273.22, -278.14, 53.9);
|
||||
|
||||
|
||||
@@ -2,11 +2,10 @@
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
using ReallifeGamemode.Database;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Server.Types;
|
||||
|
||||
/**
|
||||
* @overview Life of German Reallife - Managers BankManager (BankManager.cs)
|
||||
* @author VegaZ
|
||||
@@ -16,71 +15,71 @@ using ReallifeGamemode.Server.Types;
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
public class DoorManager : Script
|
||||
{
|
||||
private static Dictionary<int, NetHandle> _doorColShapes = new Dictionary<int, NetHandle>();
|
||||
|
||||
public static void LoadDoors()
|
||||
{
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
foreach (Door door in dbContext.Doors)
|
||||
private static Dictionary<int, NetHandle> _doorColShapes = new Dictionary<int, NetHandle>();
|
||||
|
||||
public static void LoadDoors()
|
||||
{
|
||||
_doorColShapes[door.Id] = NAPI.ColShape.CreateSphereColShape(door.Position, 30f);
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
foreach (Door door in dbContext.Doors)
|
||||
{
|
||||
_doorColShapes[door.Id] = NAPI.ColShape.CreateSphereColShape(door.Position, 30f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void ReloadDoors()
|
||||
{
|
||||
foreach (var doorPair in _doorColShapes)
|
||||
{
|
||||
doorPair.Value.Entity<ColShape>().Delete();
|
||||
}
|
||||
_doorColShapes.Clear();
|
||||
LoadDoors();
|
||||
}
|
||||
|
||||
public static void ChangeDoorState(Player player)
|
||||
{
|
||||
var user = player.GetUser();
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
IQueryable<Door> NearDoors = dbContext.Doors.Where(d => d.Position.DistanceTo(player.Position) <= d.Radius);
|
||||
foreach (Door d in NearDoors)
|
||||
public static void ReloadDoors()
|
||||
{
|
||||
if (!user.IsAdmin(AdminLevel.ADMIN) && (d.FactionId != user.FactionId || d.FactionId == null))
|
||||
{
|
||||
string lockState = "~r~Du hast kein Recht diese T\u00fcr " + (d.Locked == true ? "auf" : "ab") + "zuschlie\u00dfen!";
|
||||
player.SendNotification(lockState, true);
|
||||
continue;
|
||||
}
|
||||
|
||||
d.Locked = !d.Locked;
|
||||
|
||||
string notStr = d.Name + " " + (d.Locked == false ? "~g~auf" : "~r~ab") + "geschlossen";
|
||||
|
||||
player.SendNotification(notStr, true);
|
||||
|
||||
NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, (d.Locked ? 1 : 0), 0.0f, 0.0f, 0.0f));
|
||||
foreach (var doorPair in _doorColShapes)
|
||||
{
|
||||
doorPair.Value.Entity<ColShape>().Delete();
|
||||
}
|
||||
_doorColShapes.Clear();
|
||||
LoadDoors();
|
||||
}
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
[ServerEvent(Event.PlayerEnterColshape)]
|
||||
public void DoorManagerPlayerEnterColShapeEvent(ColShape colShape, Player player)
|
||||
{
|
||||
if (_doorColShapes.ContainsValue(colShape.Handle))
|
||||
{
|
||||
int doorId = _doorColShapes.Where(d => d.Value.Value == colShape.Handle.Value).FirstOrDefault().Key;
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
public static void ChangeDoorState(Player player)
|
||||
{
|
||||
Door door = dbContext.Doors.Where(d => d.Id == doorId).First();
|
||||
player.TriggerEvent("changeDoorState", door.Model, door.X, door.Y, door.Z, (door.Locked ? 1 : 0), 0.0f, 0.0f, 0.0f);
|
||||
var user = player.GetUser();
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
IQueryable<Door> NearDoors = dbContext.Doors.Where(d => d.Position.DistanceTo(player.Position) <= d.Radius);
|
||||
foreach (Door d in NearDoors)
|
||||
{
|
||||
if (!user.IsAdmin(AdminLevel.ADMIN) && (d.FactionId != user.FactionId || d.FactionId == null))
|
||||
{
|
||||
string lockState = "~r~Du hast kein Recht diese T\u00fcr " + (d.Locked == true ? "auf" : "ab") + "zuschlie\u00dfen!";
|
||||
player.SendNotification(lockState, true);
|
||||
continue;
|
||||
}
|
||||
|
||||
d.Locked = !d.Locked;
|
||||
|
||||
string notStr = d.Name + " " + (d.Locked == false ? "~g~auf" : "~r~ab") + "geschlossen";
|
||||
|
||||
player.SendNotification(notStr, true);
|
||||
|
||||
NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, (d.Locked ? 1 : 0), 0.0f, 0.0f, 0.0f));
|
||||
}
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
[ServerEvent(Event.PlayerEnterColshape)]
|
||||
public void DoorManagerPlayerEnterColShapeEvent(ColShape colShape, Player player)
|
||||
{
|
||||
if (_doorColShapes.ContainsValue(colShape.Handle))
|
||||
{
|
||||
int doorId = _doorColShapes.Where(d => d.Value.Value == colShape.Handle.Value).FirstOrDefault().Key;
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
Door door = dbContext.Doors.Where(d => d.Id == doorId).First();
|
||||
player.TriggerEvent("changeDoorState", door.Model, door.X, door.Y, door.Z, (door.Locked ? 1 : 0), 0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
using GTANetworkAPI;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Server.Job;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Services;
|
||||
using ReallifeGamemode.Server.Types;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using ReallifeGamemode.Database;
|
||||
using ReallifeGamemode.Services;
|
||||
using ReallifeGamemode.Server.Types;
|
||||
using System.Buffers;
|
||||
@@ -26,31 +24,30 @@ using ReallifeGamemode.Server.Events;
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
public class InteractionManager : Script
|
||||
{
|
||||
#region Umgebungsinteraktionen PFEILTASTE-HOCH
|
||||
#endregion
|
||||
#region Eigeninteraktionen PFEILTASTE-RUNTER
|
||||
[RemoteEvent("CLIENT:InteractionMenu_AcceptInvite")]
|
||||
public void InteractionMenuAcceptInvite(Player player, string type)
|
||||
{
|
||||
if (type != "Fraktion" && type != "Gruppe") return;
|
||||
#region Eigeninteraktionen PFEILTASTE-RUNTER
|
||||
|
||||
if (type == "Fraktion") // Fraktions Invite annehmen
|
||||
{
|
||||
if (!player.HasData("accept_faction_invite"))
|
||||
[RemoteEvent("CLIENT:InteractionMenu_AcceptInvite")]
|
||||
public void InteractionMenuAcceptInvite(Player player, string type)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du hast keine Einladung in eine Fraktion erhalten");
|
||||
return;
|
||||
}
|
||||
if (type != "Fraktion" && type != "Gruppe") return;
|
||||
|
||||
if (type == "Fraktion") // Fraktions Invite annehmen
|
||||
{
|
||||
if (!player.HasData("accept_faction_invite"))
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du hast keine Einladung in eine Fraktion erhalten");
|
||||
return;
|
||||
}
|
||||
|
||||
Player leader = NAPI.Player.GetPlayerFromName(player.GetData<string>("accept_faction_invite"));
|
||||
player.ResetData("accept_faction_invite");
|
||||
|
||||
if (leader == null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Die Einladung ist abgelaufen");
|
||||
return;
|
||||
}
|
||||
if (leader == null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Die Einladung ist abgelaufen");
|
||||
return;
|
||||
}
|
||||
|
||||
using (var dbContext = new DatabaseContext(true))
|
||||
{
|
||||
@@ -67,205 +64,208 @@ namespace ReallifeGamemode.Server.Managers
|
||||
.Where(r => r.FactionId == own.FactionId)
|
||||
.FirstOrDefault();
|
||||
|
||||
ChatService.SendMessage(leader, "!{02FCFF}" + player.Name + " hat die Einladung angenommen.");
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast die Einladung angenommen.");
|
||||
ChatService.SendMessage(leader, "!{02FCFF}" + player.Name + " hat die Einladung angenommen.");
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast die Einladung angenommen.");
|
||||
|
||||
switch (own.FactionId)
|
||||
{
|
||||
default:
|
||||
player.SetSharedData("blipColor", 0);
|
||||
break;
|
||||
|
||||
case 8:
|
||||
player.SetSharedData("blipColor", 83);
|
||||
break;
|
||||
|
||||
case 7:
|
||||
player.SetSharedData("blipColor", 52);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
player.SetSharedData("blipColor", 5);
|
||||
break;
|
||||
}
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
else if (type == "Gruppe") // Gruppen Einladung annehmen
|
||||
{
|
||||
if (!player.HasData("accept_group_invite"))
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du hast keine Einladung in eine Gruppe erhalten");
|
||||
return;
|
||||
}
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
else if (type == "Gruppe") // Gruppen Einladung annehmen
|
||||
{
|
||||
if (!player.HasData("accept_group_invite"))
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du hast keine Einladung in eine Gruppe erhalten");
|
||||
return;
|
||||
}
|
||||
|
||||
Player leader = NAPI.Player.GetPlayerFromName(player.GetData<string>("accept_group_invite"));
|
||||
player.ResetData("accept_group_invite");
|
||||
|
||||
if (leader == null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Die Einladung ist abgelaufen");
|
||||
return;
|
||||
if (leader == null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Die Einladung ist abgelaufen");
|
||||
return;
|
||||
}
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
User u = leader.GetUser(dbContext);
|
||||
User own = player.GetUser(dbContext);
|
||||
|
||||
own.Group = u.Group;
|
||||
own.GroupRank = GroupRank.MEMBER;
|
||||
|
||||
ChatService.SendMessage(leader, "!{02FCFF}" + player.Name + " hat die Einladung angenommen.");
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast die Einladung angenommen.");
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
[RemoteEvent("CLIENT:InteractionMenu_EndShow")]
|
||||
public void InteractionMenuEndShow(Player client)
|
||||
{
|
||||
User u = leader.GetUser(dbContext);
|
||||
User own = player.GetUser(dbContext);
|
||||
|
||||
own.Group = u.Group;
|
||||
own.GroupRank = GroupRank.MEMBER;
|
||||
|
||||
ChatService.SendMessage(leader, "!{02FCFF}" + player.Name + " hat die Einladung angenommen.");
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast die Einladung angenommen.");
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
[RemoteEvent("CLIENT:InteractionMenu_EndShow")]
|
||||
public void InteractionMenuEndShow(Player client)
|
||||
{
|
||||
client.ResetData("ShowActive");
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_Show")]
|
||||
public void InteractionMenuShow(Player player, string type, string nameOrId)
|
||||
{
|
||||
if (type != "License")
|
||||
return;
|
||||
|
||||
Player target = PlayerService.GetPlayerByNameOrId(nameOrId);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(player);
|
||||
return;
|
||||
}
|
||||
|
||||
User targetUser = target.GetUser();
|
||||
User playerUser = player.GetUser();
|
||||
|
||||
if (type == "License")
|
||||
{
|
||||
if (!playerUser.DriverLicenseBike && !playerUser.DriverLicenseVehicle && !playerUser.FlyingLicensePlane && !playerUser.WeaponLicense)
|
||||
{
|
||||
player.SendNotification("~r~Sie besitzen keine Scheine!");
|
||||
return;
|
||||
}
|
||||
if (player.Position.DistanceTo(target.Position) > 5)
|
||||
return;
|
||||
|
||||
if (target.HasData("ShowActive"))
|
||||
{
|
||||
player.SendNotification("Spieler ist beschäftigt.");
|
||||
return;
|
||||
}
|
||||
target.SetData("ShowActive", true);
|
||||
List<bool> licenses = new List<bool>();
|
||||
licenses.Add(playerUser.DriverLicenseVehicle);
|
||||
licenses.Add(playerUser.DriverLicenseBike);
|
||||
licenses.Add(playerUser.FlyingLicensePlane);
|
||||
licenses.Add(playerUser.WeaponLicense);
|
||||
target.TriggerEvent("ShowLicenses", player.Name, licenses.ToArray());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_Invite")]
|
||||
public void InteractionMenuInviteFaction(Player player, string type, string nameOrId)
|
||||
{
|
||||
if (type != "Fraktion" && type != "Gruppe") return;
|
||||
|
||||
Player target = PlayerService.GetPlayerByNameOrId(nameOrId);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(player);
|
||||
return;
|
||||
}
|
||||
|
||||
User targetUser = target.GetUser();
|
||||
User playerUser = player.GetUser();
|
||||
|
||||
if (type == "Fraktion")
|
||||
{
|
||||
if (playerUser?.FactionId == null || playerUser?.FactionLeader == false)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
client.ResetData("ShowActive");
|
||||
}
|
||||
|
||||
if (targetUser?.FactionId != null)
|
||||
[RemoteEvent("CLIENT:InteractionMenu_Show")]
|
||||
public void InteractionMenuShow(Player player, string type, string nameOrId)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist schon in einer Fraktion");
|
||||
return;
|
||||
if (type != "License")
|
||||
return;
|
||||
|
||||
Player target = PlayerService.GetPlayerByNameOrId(nameOrId);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(player);
|
||||
return;
|
||||
}
|
||||
|
||||
User targetUser = target.GetUser();
|
||||
User playerUser = player.GetUser();
|
||||
|
||||
if (type == "License")
|
||||
{
|
||||
if (!playerUser.DriverLicenseBike && !playerUser.DriverLicenseVehicle && !playerUser.FlyingLicensePlane && !playerUser.WeaponLicense)
|
||||
{
|
||||
player.SendNotification("~r~Sie besitzen keine Scheine!");
|
||||
return;
|
||||
}
|
||||
if (player.Position.DistanceTo(target.Position) > 5)
|
||||
return;
|
||||
|
||||
if (target.HasData("ShowActive"))
|
||||
{
|
||||
player.SendNotification("Spieler ist beschäftigt.");
|
||||
return;
|
||||
}
|
||||
target.SetData("ShowActive", true);
|
||||
List<bool> licenses = new List<bool>();
|
||||
licenses.Add(playerUser.DriverLicenseVehicle);
|
||||
licenses.Add(playerUser.DriverLicenseBike);
|
||||
licenses.Add(playerUser.FlyingLicensePlane);
|
||||
licenses.Add(playerUser.WeaponLicense);
|
||||
target.TriggerEvent("ShowLicenses", player.Name, licenses.ToArray());
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_Invite")]
|
||||
public void InteractionMenuInviteFaction(Player player, string type, string nameOrId)
|
||||
{
|
||||
if (type != "Fraktion" && type != "Gruppe") return;
|
||||
|
||||
Player target = PlayerService.GetPlayerByNameOrId(nameOrId);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(player);
|
||||
return;
|
||||
}
|
||||
|
||||
User targetUser = target.GetUser();
|
||||
User playerUser = player.GetUser();
|
||||
|
||||
if (type == "Fraktion")
|
||||
{
|
||||
if (playerUser?.FactionId == null || playerUser?.FactionLeader == false)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetUser?.FactionId != null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist schon in einer Fraktion");
|
||||
return;
|
||||
}
|
||||
|
||||
target.SetData("accept_faction_invite", player.Name);
|
||||
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast dem Spieler " + target.Name + " eine Einladung in deine Fraktion gesendet.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Du hast von " + player.Name + " eine Einladung in die Fraktion \"" + playerUser.Faction.Name + "\" erhalten.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Benutze das Interaktionsmenü, um die Einladung anzunehmen");
|
||||
}
|
||||
else if (type == "Gruppe")
|
||||
{
|
||||
if (playerUser?.Group == null || playerUser.GroupRank < GroupRank.MANAGER)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast dem Spieler " + target.Name + " eine Einladung in deine Fraktion gesendet.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Du hast von " + player.Name + " eine Einladung in die Fraktion \"" + playerUser.Faction.Name + "\" erhalten.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Benutze das Interaktionsmenü, um die Einladung anzunehmen");
|
||||
}
|
||||
else if (type == "Gruppe")
|
||||
{
|
||||
if (playerUser?.Group == null || playerUser.GroupRank < GroupRank.MANAGER)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetUser?.Group != null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist schon in einer Gruppe");
|
||||
return;
|
||||
}
|
||||
if (targetUser?.Group != null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist schon in einer Gruppe");
|
||||
return;
|
||||
}
|
||||
|
||||
target.SetData("accept_group_invite", player.Name);
|
||||
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast dem Spieler " + target.Name + " eine Einladung in deine Gruppe gesendet.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Du hast von " + player.Name + " eine Einladung in die Gruppe \"" + playerUser.Group.Name + "\" erhalten.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Benutze das Interaktionsmenü, um die Einladung anzunehmen");
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_Uninvite")]
|
||||
public void InteractionMenuInviteGroup(Player player, string type, string name)
|
||||
{
|
||||
if (type != "Fraktion" && type != "Gruppe") return;
|
||||
|
||||
Player target = PlayerService.GetPlayerByNameOrId(name);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(player);
|
||||
return;
|
||||
}
|
||||
|
||||
User targetUser = target.GetUser();
|
||||
User playerUser = player.GetUser();
|
||||
|
||||
if (type == "Fraktion")
|
||||
{
|
||||
if (playerUser?.FactionId == null || playerUser.FactionLeader == false)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast dem Spieler " + target.Name + " eine Einladung in deine Gruppe gesendet.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Du hast von " + player.Name + " eine Einladung in die Gruppe \"" + playerUser.Group.Name + "\" erhalten.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Benutze das Interaktionsmenü, um die Einladung anzunehmen");
|
||||
}
|
||||
}
|
||||
|
||||
if (targetUser?.FactionId != playerUser?.FactionId)
|
||||
[RemoteEvent("CLIENT:InteractionMenu_Uninvite")]
|
||||
public void InteractionMenuInviteGroup(Player player, string type, string name)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist nicht in deiner Fraktion");
|
||||
return;
|
||||
}
|
||||
if (type != "Fraktion" && type != "Gruppe") return;
|
||||
|
||||
if (player.Handle == target.Handle)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst dich nicht selber uninviten");
|
||||
return;
|
||||
}
|
||||
Player target = PlayerService.GetPlayerByNameOrId(name);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(player);
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetUser?.FactionLeader ?? false)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst keinen Leader uninviten");
|
||||
return;
|
||||
}
|
||||
User targetUser = target.GetUser();
|
||||
User playerUser = player.GetUser();
|
||||
|
||||
if (type == "Fraktion")
|
||||
{
|
||||
if (playerUser?.FactionId == null || playerUser.FactionLeader == false)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetUser?.FactionId != playerUser?.FactionId)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist nicht in deiner Fraktion");
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.Handle == target.Handle)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst dich nicht selber uninviten");
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetUser?.FactionLeader ?? false)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst keinen Leader uninviten");
|
||||
return;
|
||||
}
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
@@ -290,89 +290,88 @@ namespace ReallifeGamemode.Server.Managers
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetUser?.Group.Id != playerUser?.Group.Id)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist nicht in deiner Fraktion");
|
||||
return;
|
||||
if (targetUser?.Group.Id != playerUser?.Group.Id)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist nicht in deiner Fraktion");
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.Handle == target.Handle)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst dich nicht selber uninviten");
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetUser?.GroupRank >= GroupRank.MANAGER && playerUser?.GroupRank != GroupRank.OWNER)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst keinen Leader uninviten");
|
||||
return;
|
||||
}
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
target.GetUser(dbContext).Group = null;
|
||||
target.GetUser(dbContext).GroupRank = GroupRank.NONE;
|
||||
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " aus der Gruppe geworfen.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Du wurdest von " + player.Name + " aus der Gruppe geworfen.");
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (player.Handle == target.Handle)
|
||||
[RemoteEvent("CLIENT:InteractionMenu_CallService_Taxi")]
|
||||
public void CallServiceTaxi(Player player, string street, string zone)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst dich nicht selber uninviten");
|
||||
return;
|
||||
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
|
||||
|
||||
if (taxiJob.TaxiContracts.Where(t => t.Name == player.Name).Count() != 0)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst nur einmal ein Taxi rufen");
|
||||
return;
|
||||
}
|
||||
|
||||
taxiJob.TaxiContracts.Add(new TaxiContract()
|
||||
{
|
||||
Name = player.Name,
|
||||
Position = player.Position
|
||||
});
|
||||
|
||||
string msg = $"!{{02FCFF}}{player.Name} hat in der Straße {street} in {zone} ein Taxi gerufen.";
|
||||
ChatService.BroadcastJob(msg, taxiJob);
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast erfolgreich ein Taxi zu deiner aktuellen Position gerufen.");
|
||||
}
|
||||
|
||||
if (targetUser?.GroupRank >= GroupRank.MANAGER && playerUser?.GroupRank != GroupRank.OWNER)
|
||||
[RemoteEvent("CLIENT:InteractionMenu_VehicleInteraction")]
|
||||
public void VehicleInteraction(Player player, int id, string selection)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst keinen Leader uninviten");
|
||||
return;
|
||||
}
|
||||
using var dbContext = new DatabaseContext(true);
|
||||
var user = player.GetUser(dbContext);
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
|
||||
target.GetUser(dbContext).Group = null;
|
||||
target.GetUser(dbContext).GroupRank = GroupRank.NONE;
|
||||
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " aus der Gruppe geworfen.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Du wurdest von " + player.Name + " aus der Gruppe geworfen.");
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_CallService_Taxi")]
|
||||
public void CallServiceTaxi(Player player, string street, string zone)
|
||||
{
|
||||
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
|
||||
|
||||
if (taxiJob.TaxiContracts.Where(t => t.Name == player.Name).Count() != 0)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst nur einmal ein Taxi rufen");
|
||||
return;
|
||||
}
|
||||
|
||||
taxiJob.TaxiContracts.Add(new TaxiContract()
|
||||
{
|
||||
Name = player.Name,
|
||||
Position = player.Position
|
||||
});
|
||||
|
||||
string msg = $"!{{02FCFF}}{player.Name} hat in der Straße {street} in {zone} ein Taxi gerufen.";
|
||||
ChatService.BroadcastJob(msg, taxiJob);
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast erfolgreich ein Taxi zu deiner aktuellen Position gerufen.");
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_VehicleInteraction")]
|
||||
public void VehicleInteraction(Player player, int id, string selection)
|
||||
{
|
||||
using var dbContext = new DatabaseContext(true);
|
||||
var user = player.GetUser(dbContext);
|
||||
|
||||
var userVehicle = dbContext.UserVehicles.Where(v => v.Id == id && v.UserId == user.Id).FirstOrDefault();
|
||||
if (userVehicle == null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Das Fahrzeug wurde nicht gefunden");
|
||||
}
|
||||
var userVehicle = dbContext.UserVehicles.Where(v => v.Id == id && v.UserId == user.Id).FirstOrDefault();
|
||||
if (userVehicle == null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Das Fahrzeug wurde nicht gefunden");
|
||||
}
|
||||
|
||||
GTANetworkAPI.Vehicle veh = VehicleManager.GetVehicleFromServerVehicle(userVehicle);
|
||||
|
||||
if (selection == "Finden")
|
||||
{
|
||||
player.TriggerEvent("SERVER:Util_setWaypoint", veh.Position.X, veh.Position.Y);
|
||||
}
|
||||
else if (selection == "Verkaufen")
|
||||
{
|
||||
var vehPrice = dbContext.ShopVehicles.Where(v => v.Model == userVehicle.Model).Select(v => v.Price).FirstOrDefault();
|
||||
var backPrice = (int)(vehPrice * 0.6);
|
||||
if (selection == "Finden")
|
||||
{
|
||||
player.TriggerEvent("SERVER:Util_setWaypoint", veh.Position.X, veh.Position.Y);
|
||||
}
|
||||
else if (selection == "Verkaufen")
|
||||
{
|
||||
var vehPrice = dbContext.ShopVehicles.Where(v => v.Model == userVehicle.Model).Select(v => v.Price).FirstOrDefault();
|
||||
var backPrice = (int)(vehPrice * 0.6);
|
||||
|
||||
user.BankAccount.Balance += backPrice;
|
||||
user.BankAccount.Balance += backPrice;
|
||||
|
||||
ChatService.SendMessage(player, $"~b~[INFO]~s~ Du hast durch den Autoverkauf ~g~{backPrice.ToMoneyString()}~s~ erhalten.");
|
||||
ChatService.SendMessage(player, $"~b~[INFO]~s~ Du hast durch den Autoverkauf ~g~{backPrice.ToMoneyString()}~s~ erhalten.");
|
||||
|
||||
dbContext.UserVehicles.Remove(userVehicle);
|
||||
dbContext.SaveChanges();
|
||||
dbContext.UserVehicles.Remove(userVehicle);
|
||||
dbContext.SaveChanges();
|
||||
|
||||
veh.Delete();
|
||||
}
|
||||
@@ -411,7 +410,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
player.SendNotification("~r~Du kannst nur zwischen 1$ und 10000$ angeben!");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
[RemoteEvent("CLIENT:InteractionMenu_LSPD_Points3")]
|
||||
public void InteractionMenu_LSPD_Points3(Player player, string jsonNameOrId, string jsoAmount, string jsonReason)
|
||||
@@ -484,7 +482,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Du hast nun ~y~{target.GetUser().Points}/8 ~x~Strafpunkten.", true);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -532,7 +529,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
target.ResetData("ticket_boolean");
|
||||
target.ResetData("ticket_amount");
|
||||
target.ResetData("ticket_player");
|
||||
|
||||
}
|
||||
else if (type == "Abgelehnt")
|
||||
{
|
||||
@@ -543,8 +539,11 @@ namespace ReallifeGamemode.Server.Managers
|
||||
target.ResetData("ticket_player");
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#endregion Eigeninteraktionen PFEILTASTE-RUNTER
|
||||
|
||||
#region Spielerinteraktionen PFEILTASTE-LINKS
|
||||
|
||||
[RemoteEvent("openTradeInventory")]
|
||||
public void OpenTradeInventory(Player player, string targetPlayer)
|
||||
{
|
||||
@@ -552,59 +551,58 @@ namespace ReallifeGamemode.Server.Managers
|
||||
player.TriggerEvent("openTradeMenu", targetPlayer);
|
||||
}
|
||||
|
||||
[RemoteEvent("sendTradeItemsToPartner")]
|
||||
public void SendTradeItemsToPartner(Player player, string tradeItemArray, int tradePrize, string tradePartnerName)
|
||||
{
|
||||
var tradeItems = JsonConvert.DeserializeObject<string[][]>(tradeItemArray);
|
||||
Player tradePartner = PlayerService.GetPlayerByNameOrId(tradePartnerName);
|
||||
InventoryManager.GetUserItems(player);
|
||||
tradePartner.TriggerEvent("showTradeRequest", player.Name, tradeItems, tradePrize);
|
||||
player.TriggerEvent("startTradeRequestTimer");
|
||||
}
|
||||
|
||||
[RemoteEvent("tradeDecision")]
|
||||
public void TradeDecision(Player player, string tradeSelection, string tradeItemArray, string tradeRequesterName, int tradePrize)
|
||||
{
|
||||
var tradeItems = JsonConvert.DeserializeObject<string[][]>(tradeItemArray);
|
||||
Player tradeRequester = PlayerService.GetPlayerByNameOrId(tradeRequesterName);
|
||||
if (tradeSelection == "accept")
|
||||
{
|
||||
if (player.GetUser().Handmoney < tradePrize)
|
||||
[RemoteEvent("sendTradeItemsToPartner")]
|
||||
public void SendTradeItemsToPartner(Player player, string tradeItemArray, int tradePrize, string tradePartnerName)
|
||||
{
|
||||
tradeRequester.TriggerEvent("unlockTradeItems");
|
||||
tradeRequester.SendNotification("~y~" + player.Name + " ~r~hat nicht genügend Bargeld! ~s~Handel abgebrochen.");
|
||||
player.SendNotification("~r~Du hast nicht genügend Bargeld! ~s~Handel abgebrochen.");
|
||||
var tradeItems = JsonConvert.DeserializeObject<string[][]>(tradeItemArray);
|
||||
Player tradePartner = PlayerService.GetPlayerByNameOrId(tradePartnerName);
|
||||
InventoryManager.GetUserItems(player);
|
||||
tradePartner.TriggerEvent("showTradeRequest", player.Name, tradeItems, tradePrize);
|
||||
player.TriggerEvent("startTradeRequestTimer");
|
||||
}
|
||||
else
|
||||
|
||||
[RemoteEvent("tradeDecision")]
|
||||
public void TradeDecision(Player player, string tradeSelection, string tradeItemArray, string tradeRequesterName, int tradePrize)
|
||||
{
|
||||
InventoryManager.GetUserItems(player);
|
||||
tradeRequester.TriggerEvent("clearTradeItems");
|
||||
player.TriggerEvent("showTradeItems", tradeItemArray);
|
||||
var tradeItems = JsonConvert.DeserializeObject<string[][]>(tradeItemArray);
|
||||
Player tradeRequester = PlayerService.GetPlayerByNameOrId(tradeRequesterName);
|
||||
if (tradeSelection == "accept")
|
||||
{
|
||||
if (player.GetUser().Handmoney < tradePrize)
|
||||
{
|
||||
tradeRequester.TriggerEvent("unlockTradeItems");
|
||||
tradeRequester.SendNotification("~y~" + player.Name + " ~r~hat nicht genügend Bargeld! ~s~Handel abgebrochen.");
|
||||
player.SendNotification("~r~Du hast nicht genügend Bargeld! ~s~Handel abgebrochen.");
|
||||
}
|
||||
else
|
||||
{
|
||||
InventoryManager.GetUserItems(player);
|
||||
tradeRequester.TriggerEvent("clearTradeItems");
|
||||
player.TriggerEvent("showTradeItems", tradeItemArray);
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
var playerUserId = player.GetUser().Id;
|
||||
var tradeRUserId = tradeRequester.GetUser().Id;
|
||||
var playerUser = dbContext.Users.FirstOrDefault(u => u.Id == playerUserId);
|
||||
var tradeRequesterUser = dbContext.Users.FirstOrDefault(u => u.Id == tradeRUserId);
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
var playerUserId = player.GetUser().Id;
|
||||
var tradeRUserId = tradeRequester.GetUser().Id;
|
||||
var playerUser = dbContext.Users.FirstOrDefault(u => u.Id == playerUserId);
|
||||
var tradeRequesterUser = dbContext.Users.FirstOrDefault(u => u.Id == tradeRUserId);
|
||||
|
||||
playerUser.Handmoney -= tradePrize;
|
||||
player.TriggerEvent("SERVER:WORLD_INTERACTION:UPDATE_HANDMONEY", playerUser.Handmoney);
|
||||
playerUser.Handmoney -= tradePrize;
|
||||
player.TriggerEvent("SERVER:WORLD_INTERACTION:UPDATE_HANDMONEY", playerUser.Handmoney);
|
||||
|
||||
tradeRequesterUser.Handmoney += tradePrize;
|
||||
tradeRequester.TriggerEvent("SERVER:WORLD_INTERACTION:UPDATE_HANDMONEY", tradeRequesterUser.Handmoney);
|
||||
tradeRequesterUser.Handmoney += tradePrize;
|
||||
tradeRequester.TriggerEvent("SERVER:WORLD_INTERACTION:UPDATE_HANDMONEY", tradeRequesterUser.Handmoney);
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
tradeRequester.TriggerEvent("unlockTradeItems");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
tradeRequester.TriggerEvent("unlockTradeItems");
|
||||
}
|
||||
|
||||
#endregion Spielerinteraktionen PFEILTASTE-LINKS
|
||||
}
|
||||
#endregion
|
||||
#region Fraktionsinteraktionen / Jobinteraktionen PFEILTASTE-RECHTS
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,17 +1,17 @@
|
||||
using GTANetworkAPI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Timers;
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Server.Inventory;
|
||||
using ReallifeGamemode.Server.Inventory.Interfaces;
|
||||
using ReallifeGamemode.Server.Services;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
using System;
|
||||
using System.Timers;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Services;
|
||||
|
||||
/**
|
||||
@@ -30,6 +30,85 @@ namespace ReallifeGamemode.Server.Managers
|
||||
private static Dictionary<int, Timer> TradeTimer { get; set; } = new Dictionary<int, Timer>();
|
||||
private static Dictionary<int, int> TradeValue { get; set; } = new Dictionary<int, int>();
|
||||
|
||||
public static Dictionary<Player, List<InventoryItem>> backpackItems { get; set; } = new Dictionary<Player, List<InventoryItem>>();
|
||||
public static Dictionary<Player, List<InventoryItem>> vehicleItems { get; set; } = new Dictionary<Player, List<InventoryItem>>();
|
||||
|
||||
public class InventoryItem
|
||||
{
|
||||
public string Name;
|
||||
public int Amount;
|
||||
public int ItemId;
|
||||
public int Weight;
|
||||
public Vehicle vehicle;
|
||||
}
|
||||
|
||||
public static void SetBackpackItems(Player player)
|
||||
{
|
||||
List<UserItem> itemList = GetUserItems(player);
|
||||
if (itemList == null) return;
|
||||
|
||||
if (!backpackItems.ContainsKey(player))
|
||||
backpackItems.Add(player, new List<InventoryItem>());
|
||||
|
||||
backpackItems[player] = new List<InventoryItem>();
|
||||
|
||||
foreach (var i in itemList)
|
||||
{
|
||||
var newItem = new InventoryItem()
|
||||
{
|
||||
Name = GetItemById(i.ItemId).Name,
|
||||
Amount = i.Amount,
|
||||
ItemId = i.ItemId,
|
||||
Weight = GetUserInventoryWeight(player),
|
||||
};
|
||||
backpackItems[player].Add(newItem);
|
||||
}
|
||||
|
||||
player.SetSharedData("backpackItems", JsonConvert.SerializeObject(backpackItems[player].ToArray()));
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:getVehicleInventory")]
|
||||
public static void SetVehicleItems(Player player)
|
||||
{
|
||||
if (player.IsInVehicle)
|
||||
{
|
||||
player.TriggerEvent("Error", "Du kannst dein Kofferraum nicht betätigen.");
|
||||
}
|
||||
Vehicle veh = NAPI.Pools.GetAllVehicles().ToList().Where(v => v.Position.DistanceTo(player.Position) <= 2).FirstOrDefault();
|
||||
if (veh == null)
|
||||
{
|
||||
player.TriggerEvent("Error", "Kein Fahrzeug in der Nähe !");
|
||||
return;
|
||||
}
|
||||
List<VehicleItem> itemList = GetVehicleItems(veh);
|
||||
|
||||
if (itemList == null)
|
||||
{
|
||||
player.TriggerEvent("Error", "Kofferraum ist leer !");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!vehicleItems.ContainsKey(player))
|
||||
vehicleItems.Add(player, new List<InventoryItem>());
|
||||
//VehicleStreaming.SetDoorState(veh, DoorID.DoorTrunk, DoorState.DoorOpen);
|
||||
|
||||
vehicleItems[player] = new List<InventoryItem>();
|
||||
|
||||
foreach (var i in itemList)
|
||||
{
|
||||
var newItem = new InventoryItem
|
||||
{
|
||||
Name = GetItemById(i.ItemId).Name,
|
||||
Amount = i.Amount,
|
||||
ItemId = i.ItemId,
|
||||
Weight = GetVehicleInventoryWeight(veh),
|
||||
vehicle = veh,
|
||||
};
|
||||
vehicleItems[player].Add(newItem);
|
||||
}
|
||||
|
||||
player.SetSharedData("vehicleItems", JsonConvert.SerializeObject(vehicleItems[player].ToArray()));
|
||||
}
|
||||
|
||||
public static void LoadItems()
|
||||
{
|
||||
@@ -78,43 +157,79 @@ namespace ReallifeGamemode.Server.Managers
|
||||
dbContext.Remove(userItem);
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
Player player = user.Player;
|
||||
|
||||
List<UserItem> itemList = GetUserItems(player);
|
||||
if (itemList == null) return;
|
||||
|
||||
if (!backpackItems.ContainsKey(player))
|
||||
backpackItems.Add(player, new List<InventoryItem>());
|
||||
|
||||
backpackItems[player] = new List<InventoryItem>();
|
||||
|
||||
foreach (var i in itemList)
|
||||
{
|
||||
var newItem = new InventoryItem
|
||||
{
|
||||
Name = GetItemById(i.ItemId).Name,
|
||||
Amount = i.Amount,
|
||||
ItemId = i.ItemId,
|
||||
Weight = GetUserInventoryWeight(player),
|
||||
};
|
||||
backpackItems[player].Add(newItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void GetUserItems(Player player)
|
||||
public static void RemoveVehicleItem(ServerVehicle sVeh, VehicleItem item, int amount, Player player)
|
||||
{
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
var vehicleItem = dbContext.VehicleItems.FirstOrDefault(i => i.Id == item.Id);
|
||||
|
||||
vehicleItem.Amount -= amount;
|
||||
|
||||
dbContext.SaveChanges();
|
||||
|
||||
if (vehicleItem.Amount == 0)
|
||||
{
|
||||
dbContext.Remove(vehicleItem);
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
List<UserItem> itemList = GetUserItems(player);
|
||||
if (itemList == null) return;
|
||||
|
||||
if (!vehicleItems.ContainsKey(player))
|
||||
vehicleItems.Add(player, new List<InventoryItem>());
|
||||
|
||||
vehicleItems[player] = new List<InventoryItem>();
|
||||
|
||||
foreach (var i in itemList)
|
||||
{
|
||||
var newItem = new InventoryItem
|
||||
{
|
||||
Name = GetItemById(i.ItemId).Name,
|
||||
Amount = i.Amount,
|
||||
ItemId = i.ItemId,
|
||||
Weight = GetUserInventoryWeight(player),
|
||||
};
|
||||
vehicleItems[player].Add(newItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static List<VehicleItem> GetVehicleItems(Vehicle vehicle)
|
||||
{
|
||||
return new DatabaseContext().VehicleItems.ToList().FindAll(i => i.GetVehicle().GetVehicle() == vehicle);
|
||||
}
|
||||
|
||||
public static List<UserItem> GetUserItems(Player player)
|
||||
{
|
||||
var user = player.GetUser();
|
||||
var inventoryWeight = 0;
|
||||
List<string> iName = new List<string>();
|
||||
List<int> iAmount = new List<int>();
|
||||
List<int> iId = new List<int>();
|
||||
List<int> iWeight = new List<int>();
|
||||
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
List<UserItem> userItems = context.UserItems.ToList().FindAll(i => i.UserId == user.Id);
|
||||
|
||||
|
||||
foreach (var item in userItems)
|
||||
{
|
||||
IItem iItem = GetItemById(item.ItemId);
|
||||
var currentItemWeight = iItem.Gewicht * item.Amount;
|
||||
inventoryWeight += currentItemWeight;
|
||||
|
||||
iName.Add(iItem.Name);
|
||||
iAmount.Add(item.Amount);
|
||||
iId.Add(iItem.Id);
|
||||
|
||||
}
|
||||
List<Player> targetList = NAPI.Player.GetPlayersInRadiusOfPlayer(2, player);
|
||||
List<string> username = new List<string>();
|
||||
foreach (var target in targetList)
|
||||
{
|
||||
User cl = target.GetUser();
|
||||
username.Add(cl.Name);
|
||||
}
|
||||
|
||||
player.TriggerEvent("inventoryShow", inventoryWeight, iName.ToArray(), iAmount.ToArray(), iId.ToArray(), username.ToArray());
|
||||
return context.UserItems.ToList().FindAll(i => i.UserId == user.Id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -137,7 +252,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
return inventoryWeight;
|
||||
}
|
||||
|
||||
|
||||
public static int GetVehicleInventoryWeight(Vehicle veh)
|
||||
{
|
||||
var inventoryWeight = 0;
|
||||
@@ -193,318 +307,170 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
}
|
||||
|
||||
public bool CheckOriginOfItem(Player client, string jsonItemID, string jsonItemAmount, string jsonOrigin, string jsonVehAmount)
|
||||
{
|
||||
var origin = JsonConvert.DeserializeObject<int[]>(jsonOrigin);
|
||||
var itemID = JsonConvert.DeserializeObject<int>(jsonItemID);
|
||||
var itemAmount = JsonConvert.DeserializeObject<int>(jsonItemAmount);
|
||||
var vehAmount = JsonConvert.DeserializeObject<int>(jsonVehAmount);
|
||||
var user = client.GetUser();
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
if (origin.Length < 1)
|
||||
return false;
|
||||
|
||||
|
||||
if (origin[0] == 1)
|
||||
{
|
||||
foreach (Vehicle veh in NAPI.Pools.GetAllVehicles())
|
||||
{
|
||||
if (veh.Position.DistanceTo(client.Position) < 5f)
|
||||
{
|
||||
if (VehicleStreaming.GetDoorState(veh, DoorID.DoorTrunk) == DoorState.DoorOpen || VehicleStreaming.GetDoorState(veh, DoorID.DoorRearLeft) == DoorState.DoorOpen || VehicleStreaming.GetDoorState(veh, DoorID.DoorRearRight) == DoorState.DoorOpen)
|
||||
{
|
||||
|
||||
UserItem vItem = new UserItem
|
||||
{
|
||||
Amount = vehAmount,
|
||||
ItemId = itemID,
|
||||
UserId = user.Id,
|
||||
Slot = -1
|
||||
};
|
||||
|
||||
ServerVehicle serverVehicle = VehicleManager.GetServerVehicleFromVehicle(veh, context);
|
||||
VehicleItem vehItem = context.VehicleItems.Where(v => v.VehicleId == origin[1] && v.ItemId == vItem.ItemId).FirstOrDefault();
|
||||
if (vehItem != null)
|
||||
{
|
||||
IItem iItem = GetItemById(vItem.ItemId);
|
||||
|
||||
if (GetUserInventoryWeight(client) + (iItem.Gewicht * vItem.Amount) > 40000)
|
||||
{
|
||||
for (int i = 0; i <= vItem.Amount; i++)
|
||||
{
|
||||
if (GetUserInventoryWeight(client) + (iItem.Gewicht * i) > 40000)
|
||||
{
|
||||
vItem.Amount = i - 1;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (vItem.Amount == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (itemAmount < vehItem.Amount)
|
||||
{
|
||||
UserItem uItem = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == vItem.ItemId).FirstOrDefault();
|
||||
if (uItem == null)
|
||||
{
|
||||
context.Add(vItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
uItem.Amount += vItem.Amount;
|
||||
}
|
||||
context.SaveChanges();
|
||||
return true;
|
||||
}
|
||||
else if (itemAmount == vehItem.Amount)
|
||||
{
|
||||
UserItem uItem = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == vItem.ItemId).FirstOrDefault();
|
||||
if (uItem == null)
|
||||
{
|
||||
context.Add(vItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
uItem.Amount += vItem.Amount;
|
||||
}
|
||||
context.SaveChanges();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (origin[0] == 0)
|
||||
{
|
||||
|
||||
VehicleItem cItem = new VehicleItem
|
||||
{
|
||||
Amount = vehAmount,
|
||||
ItemId = itemID,
|
||||
VehicleId = origin[1],
|
||||
Slot = -1,
|
||||
};
|
||||
|
||||
UserItem uItem = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == cItem.ItemId).FirstOrDefault();
|
||||
IItem iItem = GetItemById(cItem.ItemId);
|
||||
Vehicle veh = VehicleManager.GetVehicleFromId(cItem.VehicleId);
|
||||
if (GetVehicleInventoryWeight(veh) + (iItem.Gewicht * cItem.Amount) > 250000)
|
||||
{
|
||||
for (int i = 0; i <= cItem.Amount; i++)
|
||||
{
|
||||
if (GetVehicleInventoryWeight(veh) + (iItem.Gewicht * i) > 250000)
|
||||
{
|
||||
cItem.Amount = i - 1;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (cItem.Amount == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (iItem is IWeaponDealItem weaponDealItem)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (uItem != null)
|
||||
{
|
||||
if (vehAmount < uItem.Amount)
|
||||
{
|
||||
|
||||
VehicleItem vehItem = context.VehicleItems.Where(v => v.VehicleId == cItem.VehicleId && v.ItemId == cItem.ItemId).FirstOrDefault();
|
||||
if (vehItem == null)
|
||||
{
|
||||
context.Add(cItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
vehItem.Amount += cItem.Amount;
|
||||
}
|
||||
context.SaveChanges();
|
||||
return true;
|
||||
|
||||
|
||||
}
|
||||
else if (vehAmount == uItem.Amount)
|
||||
{
|
||||
VehicleItem vehItem = context.VehicleItems.Where(v => v.VehicleId == cItem.VehicleId && v.ItemId == cItem.ItemId).FirstOrDefault();
|
||||
if (vehItem == null)
|
||||
{
|
||||
context.Add(cItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
vehItem.Amount += cItem.Amount;
|
||||
}
|
||||
context.SaveChanges();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("saveVehicleInventory")]
|
||||
public void SaveVehicleInventory(Player player, string jsonItemID, string jsonItemAmount, string jsonGotFrom, string vehAmount)
|
||||
[RemoteEvent("transferToBackpack")]
|
||||
public void TransferToBackpack(Player player, string jsonItemID, string jsonItemAmount)
|
||||
{
|
||||
var itemID = JsonConvert.DeserializeObject<int>(jsonItemID);
|
||||
var itemAmount = JsonConvert.DeserializeObject<int>(jsonItemAmount);
|
||||
var origin = JsonConvert.DeserializeObject<int[]>(jsonGotFrom);
|
||||
|
||||
if (!CheckOriginOfItem(player, jsonItemID, jsonItemAmount, jsonGotFrom, vehAmount))
|
||||
return;
|
||||
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
if (!vehicleItems.ContainsKey(player))
|
||||
vehicleItems.Add(player, new List<InventoryItem>());
|
||||
Vehicle veh = null;
|
||||
if (vehicleItems[player].Count != 0)
|
||||
veh = vehicleItems[player].FirstOrDefault().vehicle;
|
||||
|
||||
VehicleItem vItem = new VehicleItem
|
||||
{
|
||||
Amount = itemAmount,
|
||||
ItemId = itemID,
|
||||
VehicleId = origin[1],
|
||||
Slot = -1
|
||||
};
|
||||
ServerVehicle serverVehicle = VehicleManager.GetServerVehicleFromVehicle(veh, context);
|
||||
|
||||
VehicleItem vehItem = context.VehicleItems.Where(v => v.VehicleId == vItem.VehicleId && v.ItemId == vItem.ItemId).FirstOrDefault();
|
||||
VehicleItem vehItem = context.VehicleItems.Where(v => v.VehicleId == serverVehicle.Id && v.ItemId == itemID).FirstOrDefault();
|
||||
if (vehItem == null)
|
||||
{
|
||||
context.VehicleItems.Add(vItem);
|
||||
}
|
||||
else if (vItem.Amount <= 0)
|
||||
{
|
||||
context.VehicleItems.Remove(vehItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
vehItem.Amount = vItem.Amount;
|
||||
player.TriggerEvent("Error", "Transfer nicht möglich.");
|
||||
return;
|
||||
}
|
||||
|
||||
RemoveVehicleItem(serverVehicle, vehItem, itemAmount, player);
|
||||
SetVehicleItems(player);
|
||||
|
||||
AddItemToInventory(player, itemID, itemAmount);
|
||||
|
||||
SetBackpackItems(player);
|
||||
context.SaveChanges();
|
||||
IItem iItem = GetItemById(vItem.ItemId);
|
||||
player.TriggerEvent("aproveTransfer", JsonConvert.DeserializeObject<int>(vehAmount), iItem.Name, "Rucksack");
|
||||
IItem iItem = GetItemById(vehItem.ItemId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[RemoteEvent("saveInventory")]
|
||||
public void SavePlayerInventory(Player player, string jsonItemID, string jsonItemAmount, string jsonGotFrom, string vehAmount)
|
||||
[RemoteEvent("transferToVehicle")]
|
||||
public void TransferToVehicle(Player player, string jsonItemID, string jsonItemAmount)
|
||||
{
|
||||
|
||||
var user = player.GetUser();
|
||||
var itemID = JsonConvert.DeserializeObject<int>(jsonItemID);
|
||||
var itemAmount = JsonConvert.DeserializeObject<int>(jsonItemAmount);
|
||||
var origin = JsonConvert.DeserializeObject<int[]>(jsonGotFrom);
|
||||
|
||||
if (!CheckOriginOfItem(player, jsonItemID, jsonItemAmount, jsonGotFrom, vehAmount))
|
||||
return;
|
||||
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemID && u.Amount <= itemAmount).FirstOrDefault();
|
||||
|
||||
UserItem cItem = new UserItem
|
||||
{
|
||||
Amount = itemAmount,
|
||||
ItemId = itemID,
|
||||
UserId = user.Id,
|
||||
Slot = -1,
|
||||
};
|
||||
|
||||
|
||||
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == cItem.ItemId).FirstOrDefault();
|
||||
if (item == null)
|
||||
{
|
||||
context.UserItems.Add(cItem);
|
||||
}
|
||||
else if (cItem.Amount <= 0)
|
||||
{
|
||||
context.UserItems.Remove(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
item.Amount = cItem.Amount;
|
||||
player.TriggerEvent("Error", "Transfer nicht möglich.");
|
||||
return;
|
||||
}
|
||||
|
||||
RemoveUserItem(user, item, itemAmount);
|
||||
|
||||
if (!vehicleItems.ContainsKey(player))
|
||||
{
|
||||
player.TriggerEvent("Error", "Transfer nicht möglich.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!vehicleItems.ContainsKey(player))
|
||||
vehicleItems.Add(player, new List<InventoryItem>());
|
||||
Vehicle veh = null;
|
||||
if (vehicleItems[player].Count != 0)
|
||||
veh = vehicleItems[player].FirstOrDefault().vehicle;
|
||||
|
||||
if (veh == null)
|
||||
{
|
||||
player.TriggerEvent("Error", "Transfer nicht möglich.");
|
||||
return;
|
||||
}
|
||||
|
||||
AddItemToVehicleInventory(veh, itemID, itemAmount);
|
||||
SetVehicleItems(player);
|
||||
VehicleItem vehicleItem = context.VehicleItems.Where(f => f.ItemId == itemID && f.Vehicle == VehicleManager.GetServerVehicleFromVehicle(veh, context)).FirstOrDefault();
|
||||
context.SaveChanges();
|
||||
IItem iItem = GetItemById(item.ItemId);
|
||||
player.TriggerEvent("aproveTransfer", JsonConvert.DeserializeObject<int>(vehAmount), iItem.Name, "Kofferraum");
|
||||
IItem iItem = GetItemById(itemID);
|
||||
player.TriggerEvent("aproveTransfer", vehicleItem.Amount, iItem.Name, "Kofferraum");
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddItemToInventory(Player player, UserItem item)
|
||||
public static void AddItemToInventory(Player player, int itemId, int amount)
|
||||
{
|
||||
var user = player.GetUser();
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
UserItem existingItem = context.UserItems.FirstOrDefault(i => i.ItemId == item.ItemId && i.UserId == item.UserId);
|
||||
int setAmount = 0;
|
||||
for (int i = 1; i <= amount; i++)
|
||||
{
|
||||
if (GetUserInventoryWeight(player) + (i * GetItemById(itemId).Gewicht) > 40000)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
setAmount = i;
|
||||
}
|
||||
}
|
||||
|
||||
if (setAmount == 0)
|
||||
{
|
||||
player.TriggerEvent("Error", "Du kannst nicht so viel tragen.");
|
||||
return;
|
||||
}
|
||||
|
||||
UserItem existingItem = context.UserItems.FirstOrDefault(i => i.ItemId == itemId && i.UserId == user.Id);
|
||||
if (existingItem != null)
|
||||
{
|
||||
existingItem.Amount += item.Amount;
|
||||
existingItem.Amount += setAmount;
|
||||
}
|
||||
else
|
||||
{
|
||||
List<UserItem> allItemsByUser = context.UserItems.ToList().FindAll(i => i.UserId == user.Id);
|
||||
var slotArr = Enumerable.Range(1, 20).ToList();
|
||||
allItemsByUser.ForEach(allItem =>
|
||||
var newItem = new UserItem()
|
||||
{
|
||||
if (slotArr.Contains(allItem.Slot)) slotArr.Remove(allItem.Slot);
|
||||
});
|
||||
|
||||
int newSlot = slotArr.Min();
|
||||
|
||||
item.Slot = newSlot;
|
||||
context.UserItems.Add(item);
|
||||
|
||||
IItem iItem = GetItemById(item.ItemId);
|
||||
|
||||
string[] newItem = new string[] { iItem.Name, iItem.Description, iItem.Gewicht.ToString(), item.Amount.ToString(), newSlot.ToString(), item.Id.ToString() };
|
||||
|
||||
player.TriggerEvent("addItem", JsonConvert.SerializeObject(newItem));
|
||||
ItemId = itemId,
|
||||
Amount = setAmount,
|
||||
Slot = -1,
|
||||
UserId = user.Id,
|
||||
};
|
||||
context.UserItems.Add(newItem);
|
||||
}
|
||||
context.SaveChanges();
|
||||
IItem iItem = GetItemById(itemId);
|
||||
player.TriggerEvent("aproveTransfer", setAmount, iItem.Name, "Rucksack");
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddItemToVehicleInventory(Player player, VehicleItem item, Vehicle veh)
|
||||
public static void AddItemToVehicleInventory(Vehicle veh, int itemId, int amount)
|
||||
{
|
||||
var user = player.GetUser();
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
int setAmount = 0;
|
||||
for (int i = 1; i <= amount; i++)
|
||||
{
|
||||
if (GetVehicleInventoryWeight(veh) + (i * GetItemById(itemId).Gewicht) > 200000)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
setAmount = i;
|
||||
}
|
||||
}
|
||||
|
||||
if (setAmount == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(veh);
|
||||
VehicleItem existingItem = context.VehicleItems.FirstOrDefault(i => i.ItemId == item.ItemId && i.VehicleId == sVeh.Id);
|
||||
VehicleItem existingItem = context.VehicleItems.FirstOrDefault(i => i.ItemId == itemId && i.VehicleId == sVeh.Id);
|
||||
if (existingItem != null)
|
||||
{
|
||||
existingItem.Amount += item.Amount;
|
||||
existingItem.Amount += amount;
|
||||
}
|
||||
else
|
||||
{
|
||||
List<VehicleItem> allItemsByVehicle = context.VehicleItems.ToList().FindAll(i => i.VehicleId == sVeh.Id);
|
||||
var slotArr = Enumerable.Range(1, 20).ToList();
|
||||
allItemsByVehicle.ForEach(allItem =>
|
||||
var newVehItem = new VehicleItem()
|
||||
{
|
||||
if (slotArr.Contains(allItem.Slot)) slotArr.Remove(allItem.Slot);
|
||||
});
|
||||
|
||||
int newSlot = slotArr.Min();
|
||||
|
||||
item.Slot = newSlot;
|
||||
context.VehicleItems.Add(item);
|
||||
|
||||
IItem iItem = GetItemById(item.ItemId);
|
||||
|
||||
string[] newItem = new string[] { iItem.Name, iItem.Description, iItem.Gewicht.ToString(), item.Amount.ToString(), newSlot.ToString(), item.Id.ToString() };
|
||||
ItemId = itemId,
|
||||
Amount = amount,
|
||||
Slot = -1,
|
||||
VehicleId = sVeh.Id,
|
||||
};
|
||||
context.VehicleItems.Add(newVehItem);
|
||||
}
|
||||
context.SaveChanges();
|
||||
}
|
||||
@@ -581,11 +547,13 @@ namespace ReallifeGamemode.Server.Managers
|
||||
if (iItem is IUsableItem usableItemObj)
|
||||
{
|
||||
usableItemObj.Use(fItem);
|
||||
player.TriggerEvent("removeItem", itemId, 1);
|
||||
List<InventoryItem> items = backpackItems[player];
|
||||
player.SetSharedData("backpackItems", JsonConvert.SerializeObject(items.ToArray()));
|
||||
player.TriggerEvent("aproveUse", 1, iItem.Name);
|
||||
}
|
||||
else player.TriggerEvent("Error", "Du kannst dieses Item nicht benutzen.");
|
||||
break;
|
||||
|
||||
case "drop":
|
||||
|
||||
if (iItem == null)
|
||||
@@ -606,18 +574,19 @@ namespace ReallifeGamemode.Server.Managers
|
||||
//new Vector3(player.Position.X, player.Position.Y, player.Position.Z - 0.8f);
|
||||
Random r = new Random();
|
||||
GTANetworkAPI.Object grndObject;
|
||||
Vector3 textPos = dropPosition;
|
||||
if (iItem is IWeaponDealItem obj)
|
||||
{
|
||||
dropPosition.Z -= 1.05f;
|
||||
grndObject = NAPI.Object.CreateObject(3666746839, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 0);
|
||||
grndObject = NAPI.Object.CreateObject(3666746839, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 255, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
dropPosition.Z -= 0.8f;
|
||||
grndObject = NAPI.Object.CreateObject(3777723516, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 0);
|
||||
grndObject = NAPI.Object.CreateObject(3777723516, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 255, 0);
|
||||
}
|
||||
GroundItem grndItem = new GroundItem { ItemId = iItem.Id, Amount = amount, Position = dropPosition };
|
||||
TextLabel grndTxtLbl = NAPI.TextLabel.CreateTextLabel(iItem.Name + " ~s~(~y~" + amount + "~s~)", dropPosition, 5, 0.5f, 4, new Color(255, 255, 255), false, 0);
|
||||
TextLabel grndTxtLbl = NAPI.TextLabel.CreateTextLabel(iItem.Name + " ~s~(~y~" + amount + "~s~)", textPos, 5, 0.5f, 4, new Color(255, 255, 255), false, 0);
|
||||
GroundItem.AddGroundItem(grndItem, grndObject, grndTxtLbl);
|
||||
if (fItem.Amount > amount)
|
||||
{
|
||||
@@ -627,7 +596,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
context.UserItems.Remove(fItem);
|
||||
}
|
||||
player.TriggerEvent("removeItem", itemId, amount);
|
||||
SetBackpackItems(player);
|
||||
player.TriggerEvent("aproveThrow", amount, iItem.Name);
|
||||
}
|
||||
break;
|
||||
@@ -636,250 +605,23 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[RemoteEvent("tradeItem")]
|
||||
public void ServerEvent_tradeItem(Player client, int value, string jsonNameOrId, string itemIdArrStr, string itemAmountArrStr)
|
||||
{
|
||||
User user = client.GetUser();
|
||||
string nameOrId = JsonConvert.DeserializeObject<string>(jsonNameOrId);
|
||||
Player target = PlayerService.GetPlayerByNameOrId(nameOrId);
|
||||
if (target == null || !target.IsLoggedIn() || target == client)
|
||||
{
|
||||
ChatService.PlayerNotFound(client);
|
||||
return;
|
||||
}
|
||||
if (client.Position.DistanceTo(target.Position) >= 5)
|
||||
{
|
||||
ChatService.ErrorMessage(client, "Spieler ist zu weit entfernt.");
|
||||
return;
|
||||
}
|
||||
int[] itemIdArr = JsonConvert.DeserializeObject<int[]>(itemIdArrStr);
|
||||
int[] itemAmountArr = JsonConvert.DeserializeObject<int[]>(itemAmountArrStr);
|
||||
List<string> itemNameList = new List<string>();
|
||||
|
||||
|
||||
if (target.HasData("inTrade") && target.GetData<bool>("inTrade") == true)
|
||||
{
|
||||
ChatService.SendMessage(client, $"~r~[FEHLER] ~w~{target.Name} befindet sich bereits in einem Handel.");
|
||||
return;
|
||||
}
|
||||
int inventoryWeight = 0;
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
int targetInvWeight = GetUserInventoryWeight(target);
|
||||
|
||||
for (int i = 0; i < itemIdArr.Length; i++)
|
||||
{
|
||||
int itemId = itemIdArr[i];
|
||||
int itemAmount = itemAmountArr[i];
|
||||
UserItem uitem = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemId).FirstOrDefault();
|
||||
IItem iItem = GetItemById(uitem.ItemId);
|
||||
var currentItemWeight = iItem.Gewicht * itemAmount;
|
||||
inventoryWeight += currentItemWeight;
|
||||
}
|
||||
if (((targetInvWeight + inventoryWeight) / 1000) > 40)
|
||||
{
|
||||
ChatService.ErrorMessage(client, "Handel kann nicht getätigt werden.");
|
||||
return;
|
||||
}
|
||||
|
||||
for (int x = 0; x < itemIdArr.Length; x++)
|
||||
{
|
||||
int itemId = itemIdArr[x];
|
||||
int itemAmount = itemAmountArr[x];
|
||||
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemId).FirstOrDefault();
|
||||
if (item.Amount - itemAmount > 0)
|
||||
{
|
||||
item.Amount -= itemAmount;
|
||||
}
|
||||
else
|
||||
{
|
||||
context.UserItems.Remove(item);
|
||||
}
|
||||
IItem iItem = GetItemById(itemId);
|
||||
itemNameList.Add(iItem.Name);
|
||||
context.SaveChanges();
|
||||
}
|
||||
}
|
||||
ChatService.SendMessage(client, $"~b~Du hast eine Handelsanfrage an {target.Name} gesendet.");
|
||||
TradeItems[user.Id] = (itemIdArr, itemAmountArr);
|
||||
TradeValue[user.Id] = value;
|
||||
target.SetData("tradePartner", user.Id);
|
||||
target.SetData("trade", client.Name);
|
||||
SendTradeOffer(target, client);
|
||||
target.TriggerEvent("addTradeItems", itemIdArr, itemAmountArr, itemNameList.ToArray(), inventoryWeight);
|
||||
}
|
||||
|
||||
public void SendTradeOffer(Player client, Player sender)
|
||||
{
|
||||
client.SetData("inTrade", true);
|
||||
sender.SetData("inTrade", true);
|
||||
ChatService.SendMessage(client, $"~b~ Du hast eine Handelsanfrage von {sender.Name} bekommen.");
|
||||
client.SetSharedData("tradeOffer", JsonConvert.SerializeObject(1));
|
||||
User user = sender.GetUser();
|
||||
Timer tradeTimer = new Timer(30000);
|
||||
TradeTimer[user.Id] = tradeTimer;
|
||||
tradeTimer.Start();
|
||||
tradeTimer.Elapsed += (s, e) => { SendBackToSender(sender); client.SetData("inTrade", false); sender.SetData("inTrade", false); client.SetSharedData("tradeOffer", JsonConvert.SerializeObject(0)); };
|
||||
}
|
||||
|
||||
public void SendBackToSender(Player client)
|
||||
{
|
||||
User user = client.GetUser();
|
||||
ChatService.SendMessage(client, "Dein Handelspartner hat die Anfrage nicht angenommen.");
|
||||
(int[] itemIdArr, int[] itemAmountArr) = TradeItems[user.Id];
|
||||
Timer timer = TradeTimer[user.Id];
|
||||
timer.Stop();
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
for (int x = 0; x < itemIdArr.Length; x++)
|
||||
{
|
||||
int itemId = itemIdArr[x];
|
||||
int itemAmount = itemAmountArr[x];
|
||||
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemId).FirstOrDefault();
|
||||
if (item != null)
|
||||
{
|
||||
item.Amount += itemAmount;
|
||||
}
|
||||
else
|
||||
{
|
||||
var newItem = new UserItem
|
||||
{
|
||||
ItemId = itemId,
|
||||
UserId = user.Id,
|
||||
Amount = itemAmount,
|
||||
Slot = -1
|
||||
};
|
||||
|
||||
context.UserItems.Add(newItem);
|
||||
}
|
||||
context.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("declineTrade")]
|
||||
public void ServerEvent_declineTrade(Player client)
|
||||
{
|
||||
client.SetSharedData("tradeOffer", JsonConvert.SerializeObject(0));
|
||||
if (!client.GetData<bool>("inTrade"))
|
||||
{
|
||||
ChatService.ErrorMessage(client, "Das Handelsangebot ist abgelaufen.");
|
||||
return;
|
||||
}
|
||||
string name = client.GetData<string>("trade");
|
||||
Player target = PlayerService.GetPlayerByNameOrId(name);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(client);
|
||||
return;
|
||||
}
|
||||
|
||||
client.SetData("inTrade", false);
|
||||
target.SetData("inTrade", false);
|
||||
SendBackToSender(target);
|
||||
}
|
||||
|
||||
public static void OpenTradeAccept(Player client)
|
||||
{
|
||||
User user = client.GetUser();
|
||||
int id = client.GetData<int>("tradePartner");
|
||||
(int[] itemIdArr, int[] itemAmountArr) = TradeItems[id];
|
||||
Timer tradeTimer = TradeTimer[id];
|
||||
tradeTimer.Stop();
|
||||
tradeTimer.Start();
|
||||
client.TriggerEvent("openTradeWindow", TradeValue[id], itemIdArr, itemAmountArr);
|
||||
}
|
||||
|
||||
[RemoteEvent("acceptTrade")]
|
||||
public void ServerEvent_AcceptTrade(Player client)
|
||||
{
|
||||
if (!client.GetData<bool>("inTrade"))
|
||||
{
|
||||
ChatService.ErrorMessage(client, "Das Handelsangebot ist abgelaufen.");
|
||||
return;
|
||||
}
|
||||
client.SetSharedData("tradeOffer", JsonConvert.SerializeObject(0));
|
||||
client.SetData("inTrade", false);
|
||||
|
||||
User user = client.GetUser();
|
||||
int id = client.GetData<int>("tradePartner");
|
||||
(int[] itemIdArr, int[] itemAmountArr) = TradeItems[id];
|
||||
Timer tradeTimer = TradeTimer[id];
|
||||
tradeTimer.Stop();
|
||||
string name = client.GetData<string>("trade");
|
||||
Player target = PlayerService.GetPlayerByNameOrId(name);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(client);
|
||||
return;
|
||||
}
|
||||
target.SetData("inTrade", false);
|
||||
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
|
||||
int targetInvWeight = GetUserInventoryWeight(client);
|
||||
int inventoryWeight = 0;
|
||||
for (int i = 0; i < itemIdArr.Length; i++)
|
||||
{
|
||||
int itemId = itemIdArr[i];
|
||||
int itemAmount = itemAmountArr[i];
|
||||
UserItem uitem = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemId).FirstOrDefault();
|
||||
IItem iItem = GetItemById(uitem.ItemId);
|
||||
var currentItemWeight = iItem.Gewicht * itemAmount;
|
||||
inventoryWeight += currentItemWeight;
|
||||
}
|
||||
if (((targetInvWeight + inventoryWeight) / 1000) > 40)
|
||||
{
|
||||
ChatService.ErrorMessage(client, "Handel kann nicht getätigt werden.");
|
||||
return;
|
||||
}
|
||||
|
||||
for (int x = 0; x < itemIdArr.Length; x++)
|
||||
{
|
||||
int itemId = itemIdArr[x];
|
||||
int itemAmount = itemAmountArr[x];
|
||||
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemId).FirstOrDefault();
|
||||
if (item != null)
|
||||
{
|
||||
item.Amount += itemAmount;
|
||||
}
|
||||
else
|
||||
{
|
||||
var newItem = new UserItem
|
||||
{
|
||||
ItemId = itemId,
|
||||
UserId = user.Id,
|
||||
Amount = itemAmount,
|
||||
Slot = -1
|
||||
};
|
||||
|
||||
context.UserItems.Add(newItem);
|
||||
}
|
||||
context.SaveChanges();
|
||||
}
|
||||
}
|
||||
ChatService.SendMessage(target, $"{client.Name} hat deine Anfrage angenommen.");
|
||||
|
||||
}
|
||||
|
||||
[RemoteEvent("SERVER:BuyItems")]
|
||||
public void SrvEvent_BuyItem(Player client, string itemName)
|
||||
{
|
||||
IItem shopItem = GetItemByName(itemName);
|
||||
|
||||
using(var dbContext = new DatabaseContext()){
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
User user = client.GetUser(dbContext);
|
||||
|
||||
if (user.Handmoney < shopItem.Price)
|
||||
{
|
||||
client.TriggerEvent("itemMenu:Error");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
UserItem item = dbContext.UserItems.Where(i => i.ItemId == shopItem.Id && i.UserId == user.Id).FirstOrDefault();
|
||||
if(item == null)
|
||||
if (item == null)
|
||||
{
|
||||
var newItem = new UserItem
|
||||
{
|
||||
@@ -898,7 +640,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
dbContext.SaveChanges();
|
||||
client.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
using GTANetworkAPI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
@@ -7,332 +11,324 @@ using ReallifeGamemode.Server.Job;
|
||||
using ReallifeGamemode.Server.Services;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
using ReallifeGamemode.Services;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
public class JobManager : Script
|
||||
{
|
||||
private static List<JobBase> _jobs = new List<JobBase>();
|
||||
|
||||
public static void LoadJobs()
|
||||
{
|
||||
IEnumerable<Type> jobTypes = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.IsSubclassOf(typeof(JobBase)) && !t.IsAbstract);
|
||||
private static List<JobBase> _jobs = new List<JobBase>();
|
||||
|
||||
foreach (var type in jobTypes)
|
||||
{
|
||||
var instance = Activator.CreateInstance(type) as JobBase;
|
||||
if (GetJob(instance.Id) != null)
|
||||
public static void LoadJobs()
|
||||
{
|
||||
throw new InvalidOperationException($"Double Job ID found: {instance.Id} | {instance.Name}");
|
||||
}
|
||||
_jobs.Add(instance);
|
||||
NAPI.Util.ConsoleOutput($"Loading job {instance.Name}");
|
||||
}
|
||||
NAPI.Util.ConsoleOutput($"Loaded {_jobs.Count} jobs");
|
||||
}
|
||||
IEnumerable<Type> jobTypes = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.IsSubclassOf(typeof(JobBase)) && !t.IsAbstract);
|
||||
|
||||
public static JobBase GetJob(int id) => _jobs.Where(j => j.Id == id).FirstOrDefault();
|
||||
|
||||
public static T GetJob<T>() where T : JobBase
|
||||
{
|
||||
return _jobs.Where(j => j.GetType() == typeof(T)).FirstOrDefault() as T;
|
||||
}
|
||||
|
||||
public static List<JobBase> GetJobs() => _jobs.OrderBy(j => j.Id).ToList();
|
||||
|
||||
[RemoteEvent("CLIENT:JobCenter_CancelJob")]
|
||||
public void CancelJobEvent(Player player)
|
||||
{
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
User u = player.GetUser(dbContext);
|
||||
|
||||
if (u == null) return;
|
||||
|
||||
if (u.JobId == null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du hast momentan keinen Job, den du kündigen könntest.");
|
||||
return;
|
||||
}
|
||||
|
||||
u.JobId = null;
|
||||
|
||||
ChatService.SendMessage(player, "~y~[JOBCENTER]~s~ Du hast deinen Job erfolgreich gekündigt.");
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:JobCenter_AcceptJob")]
|
||||
public void AcceptJobEvent(Player player, int jobId)
|
||||
{
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
User u = player.GetUser(dbContext);
|
||||
|
||||
if (u == null) return;
|
||||
|
||||
if (u.JobId != null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du musst deinen alten Job kündigen, bevor du einen neuen ausüben kannst");
|
||||
return;
|
||||
}
|
||||
|
||||
JobBase job = JobManager.GetJob(jobId);
|
||||
|
||||
if (job == null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Bei der Job-Annahme ist ein Fehler aufgetretet: Dieser Job wurde nicht gefunden");
|
||||
return;
|
||||
}
|
||||
|
||||
ChatService.SendMessage(player, $"~y~[JOBCENTER]~s~ Du hast erfolgreich deinen neuen Job: ~o~{job.Name}~s~ angenommen.");
|
||||
|
||||
u.JobId = jobId;
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:JobManager_ShowJobMenu")]
|
||||
public void ShowJobMenuEvent(Player player)
|
||||
{
|
||||
User u = player.GetUser();
|
||||
|
||||
if (u.JobId == null) return;
|
||||
|
||||
JobBase job = GetJob(u.JobId.Value);
|
||||
|
||||
dynamic data = null;
|
||||
|
||||
if (job.Id == 1 && job.GetUsersInJob().Contains(player))
|
||||
{
|
||||
var taxiCalls = JobManager.GetJob<TaxiDriverJob>().TaxiContracts;
|
||||
if (!taxiCalls.Any(t => t.Driver?.Handle == player.Handle)) // Spieler in keiner aktiven Fahrt
|
||||
{
|
||||
data = new
|
||||
{
|
||||
job.Id,
|
||||
Status = 0,
|
||||
JobData = new
|
||||
foreach (var type in jobTypes)
|
||||
{
|
||||
TaxiCalls = taxiCalls
|
||||
.Where(t => t.Driver == null)
|
||||
.Select(t => new
|
||||
{
|
||||
t.Name,
|
||||
Distance = Math.Round(t.Position.DistanceTo(player.Position), 0)
|
||||
})
|
||||
.OrderBy(t => t.Distance)
|
||||
var instance = Activator.CreateInstance(type) as JobBase;
|
||||
if (GetJob(instance.Id) != null)
|
||||
{
|
||||
throw new InvalidOperationException($"Double Job ID found: {instance.Id} | {instance.Name}");
|
||||
}
|
||||
_jobs.Add(instance);
|
||||
NAPI.Util.ConsoleOutput($"Loading job {instance.Name}");
|
||||
}
|
||||
};
|
||||
NAPI.Util.ConsoleOutput($"Loaded {_jobs.Count} jobs");
|
||||
}
|
||||
else // Spieler in aktiver Fahrt
|
||||
|
||||
public static JobBase GetJob(int id) => _jobs.Where(j => j.Id == id).FirstOrDefault();
|
||||
|
||||
public static T GetJob<T>() where T : JobBase
|
||||
{
|
||||
data = new
|
||||
{
|
||||
job.Id,
|
||||
Status = 1,
|
||||
JobData = new
|
||||
return _jobs.Where(j => j.GetType() == typeof(T)).FirstOrDefault() as T;
|
||||
}
|
||||
|
||||
public static List<JobBase> GetJobs() => _jobs.OrderBy(j => j.Id).ToList();
|
||||
|
||||
[RemoteEvent("CLIENT:JobCenter_CancelJob")]
|
||||
public void CancelJobEvent(Player player)
|
||||
{
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
taxiCalls.Where(t => t.Driver.Handle == player.Handle).First().Name
|
||||
User u = player.GetUser(dbContext);
|
||||
|
||||
if (u == null) return;
|
||||
|
||||
if (u.JobId == null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du hast momentan keinen Job, den du kündigen könntest.");
|
||||
return;
|
||||
}
|
||||
|
||||
u.JobId = null;
|
||||
|
||||
ChatService.SendMessage(player, "~y~[JOBCENTER]~s~ Du hast deinen Job erfolgreich gekündigt.");
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
JobPoint nearJobPoint = PositionManager.jobPoints.Find(p => p.Position.DistanceTo(player.Position) <= 2);
|
||||
if (nearJobPoint == null && u.JobId == 2) return;
|
||||
|
||||
|
||||
|
||||
var json = JsonConvert.SerializeObject(data);
|
||||
|
||||
player.TriggerEvent("SERVER:Job_ShowJobMenu", job.Name, json);
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:Job_StartJob")]
|
||||
public void StartJobEvent(Player player)
|
||||
{
|
||||
User u = player.GetUser();
|
||||
|
||||
if (u.JobId == null) return;
|
||||
|
||||
JobBase job = GetJob(u.JobId.Value);
|
||||
|
||||
if (job.GetUsersInJob().Contains(player))
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du bist schon in deinem Job aktiv");
|
||||
return;
|
||||
}
|
||||
|
||||
if (job.NeedVehicleToStart && !job.GetJobVehicles().Any(v => v.GetVehicle().Handle.Value == player.Vehicle?.Handle.Value))
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Zum Start dieses Jobs musst du in einem Jobfahrzeug sein");
|
||||
return;
|
||||
}
|
||||
|
||||
job.StartJob(player);
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:Job_StopJob")]
|
||||
public void StopJob(Player player)
|
||||
{
|
||||
User u = player.GetUser();
|
||||
|
||||
if (u.JobId == null) return;
|
||||
|
||||
JobBase job = GetJob(u.JobId.Value);
|
||||
|
||||
if (!job.GetUsersInJob().Contains(player))
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du führst deinen Job momentan nicht aus");
|
||||
return;
|
||||
}
|
||||
|
||||
if (job.NeedVehicleToStart && player.Vehicle != null)
|
||||
{
|
||||
VehicleStreaming.SetEngineState(player.Vehicle, false);
|
||||
}
|
||||
|
||||
job.StopJob(player);
|
||||
}
|
||||
|
||||
[ServerEvent(Event.PlayerExitVehicle)]
|
||||
public void JobManagerPlayerExitVehicle(Player player, Vehicle veh)
|
||||
{
|
||||
User u = player.GetUser();
|
||||
|
||||
if (u.JobId == null) return;
|
||||
|
||||
JobBase job = GetJob(u.JobId.Value);
|
||||
|
||||
if (job.GetUsersInJob().Contains(player) && job.NeedVehicleToStart)
|
||||
{
|
||||
job.StopJob(player);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
[ServerEvent(Event.PlayerEnterVehicle)]
|
||||
public void JobManagerPlayerEnterVehicle(Player player, Vehicle veh, sbyte seat)
|
||||
{
|
||||
if (seat == 0) return;
|
||||
ServerVehicle sVeh = veh.GetServerVehicle();
|
||||
if (sVeh == null) return;
|
||||
if (sVeh is JobVehicle jV && jV.JobId == 1) // Spieler steigt in Taxi ein
|
||||
{
|
||||
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
|
||||
|
||||
Player driver = veh.GetDriver();
|
||||
if (!driver.HasData("DriverPrice")) return;
|
||||
int taxiPrice = driver.GetData<int>("DriverPrice");
|
||||
float km = 0;
|
||||
if (!driver.HasData("FareKm")) { driver.SetData<float>("FareKm", km); }
|
||||
km = driver.GetData<float>("FareKm");
|
||||
if (driver.HasData("Passager")) return;
|
||||
driver.SetData<int>("Passager", player.GetUser().Id);
|
||||
driver.SetData<bool>("hasPassager", true);
|
||||
using (var dbContext = new DatabaseContext())
|
||||
[RemoteEvent("CLIENT:JobCenter_AcceptJob")]
|
||||
public void AcceptJobEvent(Player player, int jobId)
|
||||
{
|
||||
User contractUser = player.GetUser(dbContext);
|
||||
contractUser.Handmoney -= (int)Math.Round(km * taxiPrice);
|
||||
dbContext.SaveChanges();
|
||||
contractUser.Player.TriggerEvent("SERVER:SET_HANDMONEY", contractUser.Handmoney);
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
User u = player.GetUser(dbContext);
|
||||
|
||||
if (u == null) return;
|
||||
|
||||
if (u.JobId != null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du musst deinen alten Job kündigen, bevor du einen neuen ausüben kannst");
|
||||
return;
|
||||
}
|
||||
|
||||
JobBase job = JobManager.GetJob(jobId);
|
||||
|
||||
if (job == null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Bei der Job-Annahme ist ein Fehler aufgetretet: Dieser Job wurde nicht gefunden");
|
||||
return;
|
||||
}
|
||||
|
||||
ChatService.SendMessage(player, $"~y~[JOBCENTER]~s~ Du hast erfolgreich deinen neuen Job: ~o~{job.Name}~s~ angenommen.");
|
||||
|
||||
u.JobId = jobId;
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
player.TriggerEvent("CLIENT:startCustomerFare", taxiPrice, km);
|
||||
|
||||
var taxiContracts = taxiJob.TaxiContracts.Where(t => t.Name == player.Name);
|
||||
if (taxiContracts.Count() == 0) return;
|
||||
|
||||
var contract = taxiContracts.First();
|
||||
taxiJob.TaxiContracts.Remove(contract);
|
||||
|
||||
if (driver != null && contract.Driver != null && contract.Driver.Handle != veh.GetDriver().Handle)
|
||||
[RemoteEvent("CLIENT:JobManager_ShowJobMenu")]
|
||||
public void ShowJobMenuEvent(Player player)
|
||||
{
|
||||
ChatService.SendMessage(contract.Driver, $"!{{02FCFF}}{player.Name} ist in ein Taxi eingestiegen, der Auftrag wurde beendet.");
|
||||
ChatService.SendMessage(player, $"!{{02FCFF}}Du bist in ein Taxi eingestiegen, der Auftrag wurde beendet.");
|
||||
}
|
||||
}
|
||||
}
|
||||
User u = player.GetUser();
|
||||
|
||||
[ServerEvent(Event.PlayerEnterVehicleAttempt)]
|
||||
private void JobManagerEnterVehicleAttempt(Player player, Vehicle vehicle, sbyte seat)
|
||||
{
|
||||
if (JobManager.GetJob<RefuseCollectorJob>().GetUsersInJob().Contains(player)){ JobManager.GetJob<RefuseCollectorJob>().MuellmannOnPlayerEnterVehicle(player, vehicle, seat); }
|
||||
}
|
||||
if (u.JobId == null) return;
|
||||
|
||||
[ServerEvent(Event.PlayerDeath)]
|
||||
private void JobManagerOnPlayerDeath(Player player, Player killer, uint reason)
|
||||
{
|
||||
if (JobManager.GetJob<RefuseCollectorJob>().GetUsersInJob().Contains(player)) { JobManager.GetJob<RefuseCollectorJob>().MuellmannOnPlayerDeath(player); }
|
||||
}
|
||||
JobBase job = GetJob(u.JobId.Value);
|
||||
|
||||
[ServerEvent(Event.PlayerDisconnected)]
|
||||
private void JobManagerOnPlayerDisconnect(Player player, DisconnectionType type, string reason)
|
||||
{
|
||||
if (JobManager.GetJob<RefuseCollectorJob>().GetUsersInJob().Contains(player)) { JobManager.GetJob<RefuseCollectorJob>().MuellmannOnPlayerDc(player); }
|
||||
}
|
||||
dynamic data = null;
|
||||
|
||||
[ServerEvent(Event.PlayerExitVehicle)]
|
||||
public void JobManagerPlayerEnterVehicle(Player player, Vehicle veh)
|
||||
{
|
||||
ServerVehicle sVeh = veh.GetServerVehicle();
|
||||
if (sVeh == null) return;
|
||||
if (sVeh is JobVehicle jV && jV.JobId == 1) // Spieler steigt vom Taxi aus
|
||||
{
|
||||
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
|
||||
if (veh.Occupants.Count == 0) return;
|
||||
Player driver = veh.GetDriver();
|
||||
if (driver == null) return;
|
||||
if (player.GetUser().Id != driver.GetData<int>("Passager")) { player.TriggerEvent("CLIENT:cancelFare"); return; }
|
||||
player.TriggerEvent("CLIENT:cancelFareCustomer");
|
||||
driver.TriggerEvent("CLIENT:resetFareClock");
|
||||
driver.ResetData("Passager");
|
||||
driver.ResetData("hasPassager");
|
||||
driver.SetData<float>("FareKm", 0);
|
||||
foreach (Player occupant in veh.Occupants)
|
||||
{
|
||||
if (occupant == driver) continue;
|
||||
occupant.WarpOutOfVehicle();
|
||||
if (job.Id == 1 && job.GetUsersInJob().Contains(player))
|
||||
{
|
||||
var taxiCalls = JobManager.GetJob<TaxiDriverJob>().TaxiContracts;
|
||||
if (!taxiCalls.Any(t => t.Driver?.Handle == player.Handle)) // Spieler in keiner aktiven Fahrt
|
||||
{
|
||||
data = new
|
||||
{
|
||||
job.Id,
|
||||
Status = 0,
|
||||
JobData = new
|
||||
{
|
||||
TaxiCalls = taxiCalls
|
||||
.Where(t => t.Driver == null)
|
||||
.Select(t => new
|
||||
{
|
||||
t.Name,
|
||||
Distance = Math.Round(t.Position.DistanceTo(player.Position), 0)
|
||||
})
|
||||
.OrderBy(t => t.Distance)
|
||||
}
|
||||
};
|
||||
}
|
||||
else // Spieler in aktiver Fahrt
|
||||
{
|
||||
data = new
|
||||
{
|
||||
job.Id,
|
||||
Status = 1,
|
||||
JobData = new
|
||||
{
|
||||
taxiCalls.Where(t => t.Driver.Handle == player.Handle).First().Name
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
JobPoint nearJobPoint = PositionManager.jobPoints.Find(p => p.Position.DistanceTo(player.Position) <= 2);
|
||||
if (nearJobPoint == null && u.JobId == 2) return;
|
||||
|
||||
var json = JsonConvert.SerializeObject(data);
|
||||
|
||||
player.TriggerEvent("SERVER:Job_ShowJobMenu", job.Name, json);
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:Job_StartJob")]
|
||||
public void StartJobEvent(Player player)
|
||||
{
|
||||
User u = player.GetUser();
|
||||
|
||||
if (u.JobId == null) return;
|
||||
|
||||
JobBase job = GetJob(u.JobId.Value);
|
||||
|
||||
if (job.GetUsersInJob().Contains(player))
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du bist schon in deinem Job aktiv");
|
||||
return;
|
||||
}
|
||||
|
||||
if (job.NeedVehicleToStart && !job.GetJobVehicles().Any(v => v.GetVehicle().Handle.Value == player.Vehicle?.Handle.Value))
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Zum Start dieses Jobs musst du in einem Jobfahrzeug sein");
|
||||
return;
|
||||
}
|
||||
|
||||
job.StartJob(player);
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:Job_StopJob")]
|
||||
public void StopJob(Player player)
|
||||
{
|
||||
User u = player.GetUser();
|
||||
|
||||
if (u.JobId == null) return;
|
||||
|
||||
JobBase job = GetJob(u.JobId.Value);
|
||||
|
||||
if (!job.GetUsersInJob().Contains(player))
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du führst deinen Job momentan nicht aus");
|
||||
return;
|
||||
}
|
||||
|
||||
if (job.NeedVehicleToStart && player.Vehicle != null)
|
||||
{
|
||||
VehicleStreaming.SetEngineState(player.Vehicle, false);
|
||||
}
|
||||
|
||||
job.StopJob(player);
|
||||
}
|
||||
|
||||
[ServerEvent(Event.PlayerExitVehicle)]
|
||||
public void JobManagerPlayerExitVehicle(Player player, Vehicle veh)
|
||||
{
|
||||
User u = player.GetUser();
|
||||
|
||||
if (u.JobId == null) return;
|
||||
|
||||
JobBase job = GetJob(u.JobId.Value);
|
||||
|
||||
if (job.GetUsersInJob().Contains(player) && job.NeedVehicleToStart)
|
||||
{
|
||||
job.StopJob(player);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
[ServerEvent(Event.PlayerEnterVehicle)]
|
||||
public void JobManagerPlayerEnterVehicle(Player player, Vehicle veh, sbyte seat)
|
||||
{
|
||||
if (seat == 0) return;
|
||||
ServerVehicle sVeh = veh.GetServerVehicle();
|
||||
if (sVeh == null) return;
|
||||
if (sVeh is JobVehicle jV && jV.JobId == 1) // Spieler steigt in Taxi ein
|
||||
{
|
||||
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
|
||||
|
||||
Player driver = veh.GetDriver();
|
||||
if (!driver.HasData("DriverPrice")) return;
|
||||
int taxiPrice = driver.GetData<int>("DriverPrice");
|
||||
float km = 0;
|
||||
if (!driver.HasData("FareKm")) { driver.SetData<float>("FareKm", km); }
|
||||
km = driver.GetData<float>("FareKm");
|
||||
if (driver.HasData("Passager")) return;
|
||||
driver.SetData<int>("Passager", player.GetUser().Id);
|
||||
driver.SetData<bool>("hasPassager", true);
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
User contractUser = player.GetUser(dbContext);
|
||||
contractUser.Handmoney -= (int)Math.Round(km * taxiPrice);
|
||||
dbContext.SaveChanges();
|
||||
contractUser.Player.TriggerEvent("SERVER:SET_HANDMONEY", contractUser.Handmoney);
|
||||
}
|
||||
player.TriggerEvent("CLIENT:startCustomerFare", taxiPrice, km);
|
||||
|
||||
var taxiContracts = taxiJob.TaxiContracts.Where(t => t.Name == player.Name);
|
||||
if (taxiContracts.Count() == 0) return;
|
||||
|
||||
var contract = taxiContracts.First();
|
||||
taxiJob.TaxiContracts.Remove(contract);
|
||||
|
||||
if (driver != null && contract.Driver != null && contract.Driver.Handle != veh.GetDriver().Handle)
|
||||
{
|
||||
ChatService.SendMessage(contract.Driver, $"!{{02FCFF}}{player.Name} ist in ein Taxi eingestiegen, der Auftrag wurde beendet.");
|
||||
ChatService.SendMessage(player, $"!{{02FCFF}}Du bist in ein Taxi eingestiegen, der Auftrag wurde beendet.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[ServerEvent(Event.PlayerEnterVehicleAttempt)]
|
||||
private void JobManagerEnterVehicleAttempt(Player player, Vehicle vehicle, sbyte seat)
|
||||
{
|
||||
if (JobManager.GetJob<RefuseCollectorJob>().GetUsersInJob().Contains(player)) { JobManager.GetJob<RefuseCollectorJob>().MuellmannOnPlayerEnterVehicle(player, vehicle, seat); }
|
||||
}
|
||||
|
||||
[ServerEvent(Event.PlayerDeath)]
|
||||
private void JobManagerOnPlayerDeath(Player player, Player killer, uint reason)
|
||||
{
|
||||
if (JobManager.GetJob<RefuseCollectorJob>().GetUsersInJob().Contains(player)) { JobManager.GetJob<RefuseCollectorJob>().MuellmannOnPlayerDeath(player); }
|
||||
}
|
||||
|
||||
[ServerEvent(Event.PlayerDisconnected)]
|
||||
private void JobManagerOnPlayerDisconnect(Player player, DisconnectionType type, string reason)
|
||||
{
|
||||
if (JobManager.GetJob<RefuseCollectorJob>().GetUsersInJob().Contains(player)) { JobManager.GetJob<RefuseCollectorJob>().MuellmannOnPlayerDc(player); }
|
||||
}
|
||||
|
||||
[ServerEvent(Event.PlayerExitVehicle)]
|
||||
public void JobManagerPlayerEnterVehicle(Player player, Vehicle veh)
|
||||
{
|
||||
ServerVehicle sVeh = veh.GetServerVehicle();
|
||||
if (sVeh == null) return;
|
||||
if (sVeh is JobVehicle jV && jV.JobId == 1) // Spieler steigt vom Taxi aus
|
||||
{
|
||||
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
|
||||
if (veh.Occupants.Count == 0) return;
|
||||
Player driver = veh.GetDriver();
|
||||
if (driver == null) return;
|
||||
if (player.GetUser().Id != driver.GetData<int>("Passager")) { player.TriggerEvent("CLIENT:cancelFare"); return; }
|
||||
player.TriggerEvent("CLIENT:cancelFareCustomer");
|
||||
driver.TriggerEvent("CLIENT:resetFareClock");
|
||||
driver.ResetData("Passager");
|
||||
driver.ResetData("hasPassager");
|
||||
driver.SetData<float>("FareKm", 0);
|
||||
foreach (Player occupant in veh.Occupants)
|
||||
{
|
||||
if (occupant == driver) continue;
|
||||
occupant.WarpOutOfVehicle();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:JobManager_TaxiJob_AcceptCall")]
|
||||
public void TaxiJobAcceptCall(Player player, string name)
|
||||
{
|
||||
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
|
||||
|
||||
if (!taxiJob.TaxiContracts.Any(t => t.Name == name))
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler hat kein Taxi gerufen oder der Auftrag ist nicht mehr aktuell");
|
||||
return;
|
||||
}
|
||||
|
||||
var job = taxiJob.TaxiContracts.Where(t => t.Name == name).First();
|
||||
|
||||
var target = PlayerService.GetPlayerByNameOrId(name);
|
||||
if (target == null)
|
||||
{
|
||||
taxiJob.TaxiContracts.Remove(job);
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist nicht mehr online");
|
||||
return;
|
||||
}
|
||||
|
||||
job.Driver = player;
|
||||
|
||||
player.TriggerEvent("SERVER:Util_setWaypoint", target.Position.X, target.Position.Y);
|
||||
player.SetData<bool>("hasPassager", true);
|
||||
|
||||
ChatService.SendMessage(target, $"!{{02FCFF}}Dein Auftrag wurde von {player.Name} angenommen. Warte an deiner aktuellen Position.");
|
||||
ChatService.SendMessage(target, $"!{{02FCFF}}Für die Anfahrt fallen zusätzlich Kosten auf.");
|
||||
ChatService.SendMessage(player, $"!{{02FCFF}}Du hast den Auftrag von {name} angenommen. Hole ihn nun ab.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[RemoteEvent("CLIENT:JobManager_TaxiJob_AcceptCall")]
|
||||
public void TaxiJobAcceptCall(Player player, string name)
|
||||
{
|
||||
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
|
||||
|
||||
if (!taxiJob.TaxiContracts.Any(t => t.Name == name))
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler hat kein Taxi gerufen oder der Auftrag ist nicht mehr aktuell");
|
||||
return;
|
||||
}
|
||||
|
||||
var job = taxiJob.TaxiContracts.Where(t => t.Name == name).First();
|
||||
|
||||
var target = PlayerService.GetPlayerByNameOrId(name);
|
||||
if (target == null)
|
||||
{
|
||||
taxiJob.TaxiContracts.Remove(job);
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist nicht mehr online");
|
||||
return;
|
||||
}
|
||||
|
||||
job.Driver = player;
|
||||
|
||||
player.TriggerEvent("SERVER:Util_setWaypoint", target.Position.X, target.Position.Y);
|
||||
player.SetData<bool>("hasPassager", true);
|
||||
|
||||
ChatService.SendMessage(target, $"!{{02FCFF}}Dein Auftrag wurde von {player.Name} angenommen. Warte an deiner aktuellen Position.");
|
||||
ChatService.SendMessage(target, $"!{{02FCFF}}Für die Anfahrt fallen zusätzlich Kosten auf.");
|
||||
ChatService.SendMessage(player, $"!{{02FCFF}}Du hast den Auftrag von {name} angenommen. Hole ihn nun ab.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,30 +13,29 @@ using ReallifeGamemode.Server.Extensions;
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
public class LoadManager : Script
|
||||
{
|
||||
|
||||
[ServerEvent(Event.ResourceStart)]
|
||||
public void OnResourceStart()
|
||||
{
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
foreach (SavedBlip b in dbContext.Blips)
|
||||
[ServerEvent(Event.ResourceStart)]
|
||||
public void OnResourceStart()
|
||||
{
|
||||
if (b.Active == true)
|
||||
{
|
||||
NAPI.Blip.CreateBlip((uint)b.Sprite, new Vector3(b.PositionX, b.PositionY, b.PositionZ), b.Scale,
|
||||
b.Color, b.Name, b.Alpha, b.DrawDistance, b.ShortRange, (short)b.Rotation, b.Dimension);
|
||||
}
|
||||
}
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
foreach (SavedBlip b in dbContext.Blips)
|
||||
{
|
||||
if (b.Active == true)
|
||||
{
|
||||
NAPI.Blip.CreateBlip((uint)b.Sprite, new Vector3(b.PositionX, b.PositionY, b.PositionZ), b.Scale,
|
||||
b.Color, b.Name, b.Alpha, b.DrawDistance, b.ShortRange, (short)b.Rotation, b.Dimension);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (ServerVehicle veh in dbContext.ServerVehicles)
|
||||
{
|
||||
if (!veh.Active) continue;
|
||||
foreach (ServerVehicle veh in dbContext.ServerVehicles)
|
||||
{
|
||||
if (!veh.Active) continue;
|
||||
|
||||
Vehicle current = veh.Spawn();
|
||||
TuningManager.ApplyTuningToServerVehicle(veh);
|
||||
Vehicle current = veh.Spawn();
|
||||
TuningManager.ApplyTuningToServerVehicle(veh);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -151,6 +151,8 @@ namespace ReallifeGamemode.Server.Managers
|
||||
|
||||
#endregion ElevetaorPoints
|
||||
|
||||
#region JobPoints
|
||||
|
||||
JobPoint jobPointRefuseCollector = new JobPoint()
|
||||
{
|
||||
Position = new Vector3(-429.237, -1727.9839, 19.73836),
|
||||
@@ -159,15 +161,18 @@ namespace ReallifeGamemode.Server.Managers
|
||||
|
||||
jobPoints.Add(jobPointRefuseCollector);
|
||||
|
||||
foreach(JobPoint p in jobPoints)
|
||||
foreach (JobPoint p in jobPoints)
|
||||
{
|
||||
NAPI.Marker.CreateMarker(1, new Vector3(p.Position.X, p.Position.Y, p.Position.Z - 2), new Vector3(p.Position.X, p.Position.Y, p.Position.Z + 1),
|
||||
new Vector3(0, 0, 0), 1.5f, new Color(255, 255, 255, 50), false, 0);
|
||||
NAPI.TextLabel.CreateTextLabel("M\u00fcllmann - Dr\u00fccke ~y~J~s~ um Job zu starten", p.Position, 7, 1, 0, new Color(255, 255, 255), false, 0);
|
||||
NAPI.Blip.CreateBlip(318, p.Position, 1f, 0, "Müllmann", 255, 0,true);
|
||||
NAPI.Blip.CreateBlip(318, p.Position, 1f, 0, "Müllmann", 255, 0, true);
|
||||
}
|
||||
|
||||
|
||||
#endregion JobPoints
|
||||
|
||||
#region Shops
|
||||
|
||||
foreach (var shop in ShopManager.clotheStores)
|
||||
{
|
||||
shop.LoadClothes();
|
||||
@@ -186,7 +191,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
NAPI.TextLabel.CreateTextLabel("Kleiderladen - Dr\u00fccke ~y~E", s.Position, 7, 1, 0, new Color(255, 255, 255), false, 0);
|
||||
}
|
||||
|
||||
|
||||
foreach (var shop in ShopManager.itemShops)
|
||||
{
|
||||
shop.LoadItems();
|
||||
@@ -216,12 +220,70 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
}
|
||||
|
||||
public static class MarkerBehinVehicle
|
||||
{
|
||||
public static List<BehindVehiclePoint> behindVehiclePoints = new List<BehindVehiclePoint>();
|
||||
|
||||
public static bool HasMarkerBehind(this Vehicle vehicle)
|
||||
{
|
||||
BehindVehiclePoint point = behindVehiclePoints.Find(v => v.vehicle == vehicle);
|
||||
if (point != null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void RemoveMarkerBehind(this Vehicle vehicle)
|
||||
{
|
||||
BehindVehiclePoint point = behindVehiclePoints.Find(v => v.vehicle == vehicle);
|
||||
point.marker.Delete();
|
||||
point.textLabel.Delete();
|
||||
behindVehiclePoints.Remove(point);
|
||||
}
|
||||
|
||||
public static void AddMarkerBehind(this Vehicle vehicle, Vector3 vector3)
|
||||
{
|
||||
Marker marker = NAPI.Marker.CreateMarker(1, vector3, new Vector3(), new Vector3(), 2, new Color(255, 255, 255, 70));
|
||||
TextLabel textLabel = NAPI.TextLabel.CreateTextLabel("Dr\u00fccke ~y~E~s~ um zu benutzen", new Vector3(vector3.X, vector3.Y, vector3.Z + 1.4), 7, 1, 0, new Color(255, 255, 255), false, 0);
|
||||
BehindVehiclePoint behindVehiclePoint = new BehindVehiclePoint(vehicle, marker, textLabel);
|
||||
behindVehiclePoints.Add(behindVehiclePoint);
|
||||
}
|
||||
}
|
||||
|
||||
public class DutyPoint
|
||||
{
|
||||
public Vector3 Position { get; set; }
|
||||
public int FactionId { get; set; }
|
||||
}
|
||||
|
||||
public class BehindVehiclePoint
|
||||
{
|
||||
public Vehicle vehicle { get; set; }
|
||||
public Marker marker { get; set; }
|
||||
public TextLabel textLabel { get; set; }
|
||||
|
||||
public BehindVehiclePoint(Vehicle vehicle, Marker marker, TextLabel textLabel)
|
||||
{
|
||||
this.vehicle = vehicle;
|
||||
this.marker = marker;
|
||||
this.textLabel = textLabel;
|
||||
}
|
||||
|
||||
public void usePoint(Player player)
|
||||
{
|
||||
if (vehicle.HasData("WeaponDealLoad") && vehicle.GetData<bool>("WeaponDealLoad") == true)
|
||||
{
|
||||
if (!player.HasAttachment("ammobox"))
|
||||
{
|
||||
player.PlayAnimation("anim@heists@box_carry@", "idle", 49);
|
||||
player.AddAttachment("ammobox", false);
|
||||
NAPI.Player.SetPlayerCurrentWeapon(player, WeaponHash.Unarmed);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class WeaponPoint
|
||||
{
|
||||
public Vector3 Position { get; set; }
|
||||
@@ -237,21 +299,18 @@ public class ClotheshopPoint
|
||||
{
|
||||
public Vector3 Position { get; set; }
|
||||
public ClotheShop clotheShop { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class ItemshopPoint
|
||||
{
|
||||
public Vector3 Position { get; set; }
|
||||
public ItemShop itemShop { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class JobPoint
|
||||
{
|
||||
public Vector3 Position { get; set; }
|
||||
public int jobId { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class ElevatorPoint
|
||||
@@ -260,4 +319,3 @@ public class ElevatorPoint
|
||||
public int FactionId { get; set; }
|
||||
public string Stage { get; set; }
|
||||
}
|
||||
|
||||
|
||||
@@ -1,207 +1,204 @@
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Server.Business;
|
||||
using System;
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Entities.Saves;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using System;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Server.Business;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
public class SaveManager : Script
|
||||
{
|
||||
|
||||
[RemoteEvent("OnSaveBlipData")]
|
||||
public static void OnSaveBlipData(Player player, string blipSprite, string blipName, string blipScale, string blipColor,
|
||||
string blipAlpha, string blipDrawDistance, string blipShortRange, string blipRotation, string blipDimension)
|
||||
{
|
||||
float x = player.Position.X;
|
||||
float y = player.Position.Y;
|
||||
float z = player.Position.Z;
|
||||
short sprite = short.Parse(blipSprite);
|
||||
string name = blipName;
|
||||
float scale = float.Parse(blipScale);
|
||||
byte color = Convert.ToByte(blipColor);
|
||||
byte alpha = Convert.ToByte(blipAlpha);
|
||||
float drawDistance = float.Parse(blipDrawDistance);
|
||||
bool shortRange = bool.Parse(blipShortRange);
|
||||
float rotation = float.Parse(blipRotation);
|
||||
byte dimension = Convert.ToByte(blipDimension);
|
||||
|
||||
NAPI.Blip.CreateBlip(uint.Parse(blipSprite), new Vector3(x, y, z), scale, color, name, alpha, drawDistance, shortRange, short.Parse(blipRotation), dimension);
|
||||
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new SavedBlip
|
||||
[RemoteEvent("OnSaveBlipData")]
|
||||
public static void OnSaveBlipData(Player player, string blipSprite, string blipName, string blipScale, string blipColor,
|
||||
string blipAlpha, string blipDrawDistance, string blipShortRange, string blipRotation, string blipDimension)
|
||||
{
|
||||
Sprite = sprite,
|
||||
PositionX = x,
|
||||
PositionY = y,
|
||||
PositionZ = z,
|
||||
Name = blipName,
|
||||
Scale = scale,
|
||||
Color = color,
|
||||
Alpha = alpha,
|
||||
DrawDistance = drawDistance,
|
||||
ShortRange = shortRange,
|
||||
Rotation = rotation,
|
||||
Dimension = dimension,
|
||||
Active = true
|
||||
};
|
||||
saveData.Blips.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
}
|
||||
}
|
||||
float x = player.Position.X;
|
||||
float y = player.Position.Y;
|
||||
float z = player.Position.Z;
|
||||
short sprite = short.Parse(blipSprite);
|
||||
string name = blipName;
|
||||
float scale = float.Parse(blipScale);
|
||||
byte color = Convert.ToByte(blipColor);
|
||||
byte alpha = Convert.ToByte(blipAlpha);
|
||||
float drawDistance = float.Parse(blipDrawDistance);
|
||||
bool shortRange = bool.Parse(blipShortRange);
|
||||
float rotation = float.Parse(blipRotation);
|
||||
byte dimension = Convert.ToByte(blipDimension);
|
||||
|
||||
public static Vehicle SaveVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
|
||||
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked)
|
||||
{
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new SavedVehicle
|
||||
NAPI.Blip.CreateBlip(uint.Parse(blipSprite), new Vector3(x, y, z), scale, color, name, alpha, drawDistance, shortRange, short.Parse(blipRotation), dimension);
|
||||
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new SavedBlip
|
||||
{
|
||||
Sprite = sprite,
|
||||
PositionX = x,
|
||||
PositionY = y,
|
||||
PositionZ = z,
|
||||
Name = blipName,
|
||||
Scale = scale,
|
||||
Color = color,
|
||||
Alpha = alpha,
|
||||
DrawDistance = drawDistance,
|
||||
ShortRange = shortRange,
|
||||
Rotation = rotation,
|
||||
Dimension = dimension,
|
||||
Active = true
|
||||
};
|
||||
saveData.Blips.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
public static Vehicle SaveVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
|
||||
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked)
|
||||
{
|
||||
Model = vehicleModel,
|
||||
PositionX = vehiclePosition.X,
|
||||
PositionY = vehiclePosition.Y,
|
||||
PositionZ = vehiclePosition.Z,
|
||||
Heading = vehicleHeading,
|
||||
NumberPlate = vehicleNumberPlate,
|
||||
PrimaryColor = vehiclePrimaryColor,
|
||||
SecondaryColor = vehicleSecondaryColor,
|
||||
Locked = vehicleLocked,
|
||||
Active = true
|
||||
};
|
||||
saveData.Vehicles.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new SavedVehicle
|
||||
{
|
||||
Model = vehicleModel,
|
||||
PositionX = vehiclePosition.X,
|
||||
PositionY = vehiclePosition.Y,
|
||||
PositionZ = vehiclePosition.Z,
|
||||
Heading = vehicleHeading,
|
||||
NumberPlate = vehicleNumberPlate,
|
||||
PrimaryColor = vehiclePrimaryColor,
|
||||
SecondaryColor = vehicleSecondaryColor,
|
||||
Locked = vehicleLocked,
|
||||
Active = true
|
||||
};
|
||||
saveData.Vehicles.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
|
||||
return dataSet.Spawn(veh);
|
||||
}
|
||||
}
|
||||
return dataSet.Spawn(veh);
|
||||
}
|
||||
}
|
||||
|
||||
public static Vehicle SaveJobVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
|
||||
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int jobId)
|
||||
{
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new JobVehicle
|
||||
public static Vehicle SaveJobVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
|
||||
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int jobId)
|
||||
{
|
||||
Model = vehicleModel,
|
||||
JobId = jobId,
|
||||
PositionX = vehiclePosition.X,
|
||||
PositionY = vehiclePosition.Y,
|
||||
PositionZ = vehiclePosition.Z,
|
||||
Heading = vehicleHeading,
|
||||
NumberPlate = vehicleNumberPlate,
|
||||
PrimaryColor = vehiclePrimaryColor,
|
||||
SecondaryColor = vehicleSecondaryColor,
|
||||
Locked = vehicleLocked,
|
||||
Active = true
|
||||
};
|
||||
saveData.JobVehicles.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new JobVehicle
|
||||
{
|
||||
Model = vehicleModel,
|
||||
JobId = jobId,
|
||||
PositionX = vehiclePosition.X,
|
||||
PositionY = vehiclePosition.Y,
|
||||
PositionZ = vehiclePosition.Z,
|
||||
Heading = vehicleHeading,
|
||||
NumberPlate = vehicleNumberPlate,
|
||||
PrimaryColor = vehiclePrimaryColor,
|
||||
SecondaryColor = vehicleSecondaryColor,
|
||||
Locked = vehicleLocked,
|
||||
Active = true
|
||||
};
|
||||
saveData.JobVehicles.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
|
||||
return dataSet.Spawn(veh);
|
||||
}
|
||||
}
|
||||
return dataSet.Spawn(veh);
|
||||
}
|
||||
}
|
||||
|
||||
public static Vehicle SaveSchoolVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
|
||||
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int schoolId)
|
||||
{
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new SchoolVehicle
|
||||
public static Vehicle SaveSchoolVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
|
||||
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int schoolId)
|
||||
{
|
||||
Model = vehicleModel,
|
||||
SchoolId = schoolId,
|
||||
PositionX = vehiclePosition.X,
|
||||
PositionY = vehiclePosition.Y,
|
||||
PositionZ = vehiclePosition.Z,
|
||||
Heading = vehicleHeading,
|
||||
NumberPlate = vehicleNumberPlate,
|
||||
PrimaryColor = vehiclePrimaryColor,
|
||||
SecondaryColor = vehicleSecondaryColor,
|
||||
Locked = vehicleLocked,
|
||||
Active = true
|
||||
};
|
||||
saveData.SchoolVehicles.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new SchoolVehicle
|
||||
{
|
||||
Model = vehicleModel,
|
||||
SchoolId = schoolId,
|
||||
PositionX = vehiclePosition.X,
|
||||
PositionY = vehiclePosition.Y,
|
||||
PositionZ = vehiclePosition.Z,
|
||||
Heading = vehicleHeading,
|
||||
NumberPlate = vehicleNumberPlate,
|
||||
PrimaryColor = vehiclePrimaryColor,
|
||||
SecondaryColor = vehicleSecondaryColor,
|
||||
Locked = vehicleLocked,
|
||||
Active = true
|
||||
};
|
||||
saveData.SchoolVehicles.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
|
||||
return dataSet.Spawn(veh);
|
||||
}
|
||||
}
|
||||
return dataSet.Spawn(veh);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static Vehicle SaveFactionVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
|
||||
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int[] factionId, int livery)
|
||||
{
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new FactionVehicle
|
||||
public static Vehicle SaveFactionVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
|
||||
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int[] factionId, int livery)
|
||||
{
|
||||
Model = vehicleModel,
|
||||
Owners = JsonConvert.SerializeObject(factionId),
|
||||
PositionX = vehiclePosition.X,
|
||||
PositionY = vehiclePosition.Y,
|
||||
PositionZ = vehiclePosition.Z,
|
||||
Heading = vehicleHeading,
|
||||
NumberPlate = vehicleNumberPlate,
|
||||
PrimaryColor = vehiclePrimaryColor,
|
||||
SecondaryColor = vehicleSecondaryColor,
|
||||
Locked = vehicleLocked,
|
||||
Active = true,
|
||||
Livery = livery
|
||||
};
|
||||
saveData.FactionVehicles.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new FactionVehicle
|
||||
{
|
||||
Model = vehicleModel,
|
||||
Owners = JsonConvert.SerializeObject(factionId),
|
||||
PositionX = vehiclePosition.X,
|
||||
PositionY = vehiclePosition.Y,
|
||||
PositionZ = vehiclePosition.Z,
|
||||
Heading = vehicleHeading,
|
||||
NumberPlate = vehicleNumberPlate,
|
||||
PrimaryColor = vehiclePrimaryColor,
|
||||
SecondaryColor = vehicleSecondaryColor,
|
||||
Locked = vehicleLocked,
|
||||
Active = true,
|
||||
Livery = livery
|
||||
};
|
||||
saveData.FactionVehicles.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
|
||||
return dataSet.Spawn(veh);
|
||||
}
|
||||
}
|
||||
return dataSet.Spawn(veh);
|
||||
}
|
||||
}
|
||||
|
||||
public static Vehicle SaveShopVehicleData(Vehicle veh, VehicleHash vehicleModel, string vehicleModelName, Vector3 vehiclePosition, float vehicleHeading,
|
||||
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, BusinessBase business, int price)
|
||||
{
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new ShopVehicle
|
||||
public static Vehicle SaveShopVehicleData(Vehicle veh, VehicleHash vehicleModel, string vehicleModelName, Vector3 vehiclePosition, float vehicleHeading,
|
||||
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, BusinessBase business, int price)
|
||||
{
|
||||
Model = vehicleModel,
|
||||
PositionX = vehiclePosition.X,
|
||||
PositionY = vehiclePosition.Y,
|
||||
PositionZ = vehiclePosition.Z,
|
||||
Heading = vehicleHeading,
|
||||
NumberPlate = vehicleNumberPlate,
|
||||
PrimaryColor = vehiclePrimaryColor,
|
||||
SecondaryColor = vehicleSecondaryColor,
|
||||
Active = true,
|
||||
BusinessId = business.Id,
|
||||
Price = price
|
||||
};
|
||||
saveData.ShopVehicles.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new ShopVehicle
|
||||
{
|
||||
Model = vehicleModel,
|
||||
PositionX = vehiclePosition.X,
|
||||
PositionY = vehiclePosition.Y,
|
||||
PositionZ = vehiclePosition.Z,
|
||||
Heading = vehicleHeading,
|
||||
NumberPlate = vehicleNumberPlate,
|
||||
PrimaryColor = vehiclePrimaryColor,
|
||||
SecondaryColor = vehicleSecondaryColor,
|
||||
Active = true,
|
||||
BusinessId = business.Id,
|
||||
Price = price
|
||||
};
|
||||
saveData.ShopVehicles.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
|
||||
return dataSet.Spawn(veh);
|
||||
}
|
||||
}
|
||||
return dataSet.Spawn(veh);
|
||||
}
|
||||
}
|
||||
|
||||
public static void SaveGotoPoint(Player player, string description)
|
||||
{
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new GotoPoint
|
||||
public static void SaveGotoPoint(Player player, string description)
|
||||
{
|
||||
Description = description,
|
||||
X = player.Position.X,
|
||||
Y = player.Position.Y,
|
||||
Z = player.Position.Z,
|
||||
Active = true
|
||||
};
|
||||
saveData.GotoPoints.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
}
|
||||
}
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new GotoPoint
|
||||
{
|
||||
Description = description,
|
||||
X = player.Position.X,
|
||||
Y = player.Position.Y,
|
||||
Z = player.Position.Z,
|
||||
Active = true
|
||||
};
|
||||
saveData.GotoPoints.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
public static void SaveAllOnSave()
|
||||
{
|
||||
@@ -222,8 +219,8 @@ namespace ReallifeGamemode.Server.Managers
|
||||
user.PositionZ = pos.Z;
|
||||
}
|
||||
|
||||
saveAll.SaveChanges();
|
||||
}
|
||||
saveAll.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Database.Entities.Saves;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
@@ -11,59 +9,57 @@ using ReallifeGamemode.Server.Shop.SevenEleven;
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
public class ShopManager
|
||||
{
|
||||
|
||||
public static List<ClotheShop> clotheStores = new List<ClotheShop>();
|
||||
public static List<ItemShop> itemShops = new List<ItemShop>();
|
||||
|
||||
public static void LoadClotheShops()
|
||||
{
|
||||
using(var dbContext = new DatabaseContext())
|
||||
{
|
||||
List<SavedBlip> discount = dbContext.Blips.ToList().FindAll(s => s.Name == "Binco" || s.Name == "Discount Store");
|
||||
List<SavedBlip> midclass = dbContext.Blips.ToList().FindAll(s => s.Name == "Suburban");
|
||||
List<SavedBlip> luxury = dbContext.Blips.ToList().FindAll(s => s.Name == "Ponsonbys");
|
||||
public static List<ClotheShop> clotheStores = new List<ClotheShop>();
|
||||
public static List<ItemShop> itemShops = new List<ItemShop>();
|
||||
|
||||
foreach(var store in discount) {
|
||||
Vector3 pos = new Vector3(store.PositionX, store.PositionY, store.PositionZ);
|
||||
ClotheShop newShop = new ClotheShop(1, pos);
|
||||
clotheStores.Add(newShop);
|
||||
NAPI.Util.ConsoleOutput($"Loading ClotheShop {store.Name}");
|
||||
}
|
||||
foreach(var store in midclass)
|
||||
public static void LoadClotheShops()
|
||||
{
|
||||
Vector3 pos = new Vector3(store.PositionX, store.PositionY, store.PositionZ);
|
||||
ClotheShop newShop = new ClotheShop(2, pos);
|
||||
clotheStores.Add(newShop);
|
||||
NAPI.Util.ConsoleOutput($"Loading ClotheShop {store.Name}");
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
List<SavedBlip> discount = dbContext.Blips.ToList().FindAll(s => s.Name == "Binco" || s.Name == "Discount Store");
|
||||
List<SavedBlip> midclass = dbContext.Blips.ToList().FindAll(s => s.Name == "Suburban");
|
||||
List<SavedBlip> luxury = dbContext.Blips.ToList().FindAll(s => s.Name == "Ponsonbys");
|
||||
|
||||
foreach (var store in discount)
|
||||
{
|
||||
Vector3 pos = new Vector3(store.PositionX, store.PositionY, store.PositionZ);
|
||||
ClotheShop newShop = new ClotheShop(1, pos);
|
||||
clotheStores.Add(newShop);
|
||||
NAPI.Util.ConsoleOutput($"Loading ClotheShop {store.Name}");
|
||||
}
|
||||
foreach (var store in midclass)
|
||||
{
|
||||
Vector3 pos = new Vector3(store.PositionX, store.PositionY, store.PositionZ);
|
||||
ClotheShop newShop = new ClotheShop(2, pos);
|
||||
clotheStores.Add(newShop);
|
||||
NAPI.Util.ConsoleOutput($"Loading ClotheShop {store.Name}");
|
||||
}
|
||||
foreach (var store in luxury)
|
||||
{
|
||||
Vector3 pos = new Vector3(store.PositionX, store.PositionY, store.PositionZ);
|
||||
ClotheShop newShop = new ClotheShop(3, pos);
|
||||
clotheStores.Add(newShop);
|
||||
NAPI.Util.ConsoleOutput($"Loading ClotheShop {store.Name}");
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach (var store in luxury)
|
||||
|
||||
public static void LoadItemShops()
|
||||
{
|
||||
Vector3 pos = new Vector3(store.PositionX, store.PositionY, store.PositionZ);
|
||||
ClotheShop newShop = new ClotheShop(3, pos);
|
||||
clotheStores.Add(newShop);
|
||||
NAPI.Util.ConsoleOutput($"Loading ClotheShop {store.Name}");
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
int id = 0;
|
||||
List<SavedBlip> shops = dbContext.Blips.ToList().FindAll(s => s.Name == "24/7");
|
||||
foreach (var store in shops)
|
||||
{
|
||||
Vector3 pos = new Vector3(store.PositionX, store.PositionY, store.PositionZ);
|
||||
ItemShop newShop = new ItemShop(pos, id);
|
||||
itemShops.Add(newShop);
|
||||
id++;
|
||||
}
|
||||
NAPI.Util.ConsoleOutput($"Loaded {itemShops.Count}x 24/7");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void LoadItemShops()
|
||||
{
|
||||
using(var dbContext = new DatabaseContext())
|
||||
{
|
||||
int id = 0;
|
||||
List<SavedBlip> shops = dbContext.Blips.ToList().FindAll(s => s.Name == "24/7");
|
||||
foreach(var store in shops)
|
||||
{
|
||||
Vector3 pos = new Vector3(store.PositionX, store.PositionY, store.PositionZ);
|
||||
ItemShop newShop = new ItemShop(pos, id);
|
||||
itemShops.Add(newShop);
|
||||
id++;
|
||||
}
|
||||
NAPI.Util.ConsoleOutput($"Loaded {itemShops.Count}x 24/7");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,35 +1,33 @@
|
||||
using GTANetworkAPI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System;
|
||||
using System.Timers;
|
||||
using GTANetworkAPI;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
public class TimeManager
|
||||
{
|
||||
private static Timer realTimeTimer;
|
||||
|
||||
public static void StartTimeManager()
|
||||
{
|
||||
if (realTimeTimer == null)
|
||||
{
|
||||
realTimeTimer = new Timer(1000);
|
||||
realTimeTimer.Elapsed += SetTime;
|
||||
}
|
||||
private static Timer realTimeTimer;
|
||||
|
||||
realTimeTimer.Start();
|
||||
}
|
||||
public static void StartTimeManager()
|
||||
{
|
||||
if (realTimeTimer == null)
|
||||
{
|
||||
realTimeTimer = new Timer(1000);
|
||||
realTimeTimer.Elapsed += SetTime;
|
||||
}
|
||||
|
||||
public static void PauseTimeManager()
|
||||
{
|
||||
realTimeTimer.Stop();
|
||||
}
|
||||
realTimeTimer.Start();
|
||||
}
|
||||
|
||||
private static void SetTime(object sender, ElapsedEventArgs args)
|
||||
{
|
||||
DateTime now = DateTime.Now;
|
||||
NAPI.World.SetTime(now.Hour, now.Minute, now.Second);
|
||||
public static void PauseTimeManager()
|
||||
{
|
||||
realTimeTimer.Stop();
|
||||
}
|
||||
|
||||
private static void SetTime(object sender, ElapsedEventArgs args)
|
||||
{
|
||||
DateTime now = DateTime.Now;
|
||||
NAPI.World.SetTime(now.Hour, now.Minute, now.Second);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
class TuningManager : Script
|
||||
internal class TuningManager : Script
|
||||
{
|
||||
private static List<ColShape> tuningGarages = new List<ColShape>();
|
||||
|
||||
@@ -21,6 +21,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fügt eine Tuning-Garage zum Spiel hinzu
|
||||
/// </summary>
|
||||
@@ -56,7 +57,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
Vehicle veh = VehicleManager.GetVehicleFromServerVehicle(sVeh);
|
||||
if (veh == null) return;
|
||||
|
||||
|
||||
veh.SetSharedData("mod18", false);
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
@@ -778,7 +779,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
if (sVeh == null) continue;
|
||||
|
||||
sVeh.DistanceDriven = (float)v.GetSharedData<dynamic>("drivenDistance");
|
||||
|
||||
}
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
@@ -799,6 +799,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
|
||||
_serverVehicles[serverVehicle.Id] = vehicle.Handle;
|
||||
}
|
||||
|
||||
internal static void DeleteVehicle(Vehicle veh)
|
||||
{
|
||||
ServerVehicle sVeh;
|
||||
@@ -869,7 +870,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
ServerVehicle serverVehicle = GetServerVehicleFromVehicle(vehicle);
|
||||
|
||||
|
||||
if (serverVehicle == null)
|
||||
{
|
||||
vehicle.Delete();
|
||||
@@ -879,8 +879,14 @@ namespace ReallifeGamemode.Server.Managers
|
||||
await Task.Delay(2000);
|
||||
newVeh.Repair();
|
||||
newVeh.Rotation = new Vector3(0, 0, serverVehicle.Heading);
|
||||
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:setMarkerBehindVehicle")]
|
||||
public void setVectorBehindVehicle(Player player, int id, string jsonX, string jsonY, string jsonZ)
|
||||
{
|
||||
Vehicle vehicle = NAPI.Pools.GetAllVehicles().Find(v => v.Id == id);
|
||||
Vector3 vector3 = new Vector3(Convert.ToSingle((double)JsonConvert.DeserializeObject(jsonX)), Convert.ToSingle((double)JsonConvert.DeserializeObject(jsonY)), Convert.ToSingle((double)JsonConvert.DeserializeObject(jsonZ)));
|
||||
vehicle.AddMarkerBehind(vector3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
using GTANetworkAPI;
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using GTANetworkAPI;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
class WeaponManager
|
||||
internal class WeaponManager
|
||||
{
|
||||
private static readonly List<string> _modWeapons = new List<string>()
|
||||
{
|
||||
@@ -336,8 +335,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{ 727643628, "Ceramic Pistol"}
|
||||
};
|
||||
|
||||
|
||||
|
||||
public static bool IsValidHash(uint hash)
|
||||
{
|
||||
foreach (WeaponHash vh in Enum.GetValues(typeof(WeaponHash)))
|
||||
|
||||
Reference in New Issue
Block a user