Merge branch 'develop' into 'master'

Develop

See merge request log-gtav/reallife-gamemode!37
This commit is contained in:
hydrant
2021-04-05 17:05:55 +00:00
20 changed files with 678 additions and 696 deletions

View File

@@ -1,8 +1,4 @@

export default function playerBlips() {
export default function playerBlips() {
var playerBlipMap: Map<PlayerMp, BlipMp>;
var ready = false;
@@ -17,9 +13,11 @@ export default function playerBlips() {
if (!playerBlipMap.has(player)) {
let pBlip = mp.blips.new(1, player.position, {
alpha: 200,
shortRange: true,
dimension: mp.players.local.dimension,
drawDistance: 300
drawDistance: 300,
scale: 0.7,
});
pBlip.setCategory(7);
@@ -47,7 +45,6 @@ export default function playerBlips() {
}
});
mp.events.addDataHandler("blipColor", (entity, value) => {
if (entity.type === "player") {
let color = parseInt(value);

View File

@@ -1,20 +1,19 @@
export default function RefuseCollector() {
var State = false;
var Traegt = false;
var HintenVoll = false;
var hasBinBag = false;
var dumptruckIsFull = false;
var BlipTonneHinten = null;
var CheckpointTonneHinten = null;
var ShapeTonneHinten = null;
var BlipTonneBase = null;
var CheckpointTonneBase = null;
var ShapeTonneBase = null;
var vehicle = null;
var blipDumptruck = null;
var dumptruckMarker = null;
var colshapeDumptruck = null;
var blipBase = null;
var markerBase = null;
var colshapeBase = null;
var vehRemoteID = null;
var interval = null;
var BlipTonne = [];
var ShapeTonne = [];
var garbageToCollect = new Map<number, { blip: BlipMp, colshape: ColshapeMp }>();
mp.events.add('SERVER:MuellmannStatusTrue', () => {
State = true;
@@ -24,57 +23,73 @@
State = false;
});
mp.events.add('SERVER:MuellmannBCSErstellen', (jsonPosArr, veh) => {
mp.events.add('SERVER:MuellmannBCSErstellen', (jsonPosArr, veh: VehicleMp) => {
let posArr = JSON.parse(jsonPosArr);
vehicle = veh;
vehRemoteID = veh.remoteId;
for (var i = 0; i < posArr.length; i++) {
let pos = new mp.Vector3(posArr[i].x, posArr[i].y, posArr[i].z - 1)
BlipTonne.push(mp.blips.new(1, pos, { name: 'Mülltonne', color: 45, shortRange: false }));
BlipTonne[i].setFlashTimer(2000);
ShapeTonne.push(mp.colshapes.newSphere(posArr[i].x, posArr[i].y, posArr[i].z + 0.5, 1.75));
let newBlip = mp.blips.new(1, new mp.Vector3(pos.x, pos.y, pos.z), { name: 'Mülltonne', color: 0, shortRange: false, scale: 0.7 });
let newColShape = mp.colshapes.newSphere(posArr[i].x, posArr[i].y, posArr[i].z + 0.5, 1.75);
newBlip.setPriority(1000);
newBlip.setFlashTimer(2000);
garbageToCollect.set(i, { blip: newBlip, colshape: newColShape });
}
BlipTonneBase = mp.blips.new(1, new mp.Vector3(-442.3999, -1701.5234, 18.933002 - 1), { name: 'Recylinganlage', color: 5, shortRange: false });
CheckpointTonneBase = mp.markers.new(1, new mp.Vector3(-442.3999, -1701.5234, 18.933002 - 1), 10, { direction: new mp.Vector3(-235.5747, -1685.475, 32.7207), color: [255, 255, 0, 150], visible: true, dimension: 0 });
ShapeTonneBase = mp.colshapes.newSphere(-442.3999, -1701.5234, 18.933002 - 1, 10);
blipBase = mp.blips.new(515, new mp.Vector3(-442.3999, -1701.5234, 18.933002 - 1), { name: 'Recylinganlage', color: 24, shortRange: false });
markerBase = mp.markers.new(1, new mp.Vector3(-442.3999, -1701.5234, 18.933002 - 1), 10, { direction: new mp.Vector3(-235.5747, -1685.475, 32.7207), color: [255, 255, 0, 150], visible: true, dimension: 0 });
colshapeBase = mp.colshapes.newSphere(-442.3999, -1701.5234, 18.933002 - 1, 10);
});
mp.events.add('SERVER:MuellmannBCSEntfernen', () => {
for (var i = 0; i < BlipTonne.length; i++) {
if (BlipTonne[i] == null) continue;
BlipTonne[i].destroy();
ShapeTonne[i].destroy();
}
BlipTonne = [];
ShapeTonne = [];
garbageToCollect.forEach((collection, index) => {
let { blip, colshape } = collection;
if (BlipTonneHinten) BlipTonneHinten.destroy();
BlipTonneHinten = null;
if (CheckpointTonneHinten) CheckpointTonneHinten.destroy();
CheckpointTonneHinten = null;
if (ShapeTonneHinten) ShapeTonneHinten.destroy();
ShapeTonneHinten = null;
if (BlipTonneBase) BlipTonneBase.destroy();
BlipTonneBase = null;
if (CheckpointTonneBase) CheckpointTonneBase.destroy();
CheckpointTonneBase = null;
if (ShapeTonneBase) ShapeTonneBase.destroy();
ShapeTonneBase = null;
Traegt = false;
if (colshape && mp.colshapes.exists(colshape))
colshape.destroy();
if (blip && mp.blips.exists(blip))
blip.destroy();
});
mp.events.add("playerEnterColshape", (Shape, player) => {
garbageToCollect.clear();
if (blipDumptruck) blipDumptruck.destroy();
blipDumptruck = null;
if (dumptruckMarker) dumptruckMarker.destroy();
dumptruckMarker = null;
if (colshapeDumptruck) colshapeDumptruck.destroy();
colshapeDumptruck = null;
if (blipBase) blipBase.destroy();
blipBase = null;
if (markerBase) markerBase.destroy();
markerBase = null;
if (colshapeBase) colshapeBase.destroy();
colshapeBase = null;
hasBinBag = false;
});
mp.events.add("playerEnterColshape", (currentShape, player) => {
//mp.events.callRemote('CLIENT:ImShape', JSON.stringify(Shape));
for (var i = 0; i < ShapeTonne.length; i++) {
if (Shape != ShapeTonne[i]) continue;
if (!mp.players.local.vehicle) {
if (!Traegt) {
if (!HintenVoll) {
let i = getIndex(currentShape);
if (garbageToCollect.has(i)) {
let { blip, colshape } = garbageToCollect.get(i);
if (mp.players.local.vehicle) { mp.events.call("renderTextOnScreen", "Steige aus dem Müllwagen aus um den Müllsack zu entnehmen."); return; }
if (hasBinBag) { mp.gui.chat.push("Du trägst bereits einen Müllsack!"); return; }
if (!dumptruckIsFull) {
mp.events.callRemote('CLIENT:MuellmannImShape', i);
Traegt = true;
BlipTonne[i].destroy();
BlipTonne[i] = null;
ShapeTonne[i].destroy();
ShapeTonne[i] = null;
hasBinBag = true;
if (colshape)
colshape.destroy();
if (blip)
blip.destroy();
garbageToCollect.delete(i);
interval = setInterval(function () { createMarker(); }, 2);
}
@@ -83,52 +98,63 @@
return;
}
}
else {
mp.gui.chat.push(`Du trägst bereits einen Müllsack!`);
return;
}
}
else {
mp.events.call("renderTextOnScreen", "Steige aus dem Müllwagen aus um den Müllsack zu entnehmen.");
}
}
if (Shape == ShapeTonneHinten) {
if (Traegt) {
Traegt = false;
if (currentShape == colshapeDumptruck) {
if (hasBinBag) {
hasBinBag = false;
mp.events.callRemote('CLIENT:MuellmannAddSack');
clearInterval(interval);
if (BlipTonneHinten) BlipTonneHinten.destroy();
BlipTonneHinten = null;
if (CheckpointTonneHinten) CheckpointTonneHinten.destroy();
CheckpointTonneHinten = null;
if (ShapeTonneHinten) ShapeTonneHinten.destroy();
ShapeTonneHinten = null;
if (blipDumptruck) blipDumptruck.destroy();
blipDumptruck = null;
if (dumptruckMarker) dumptruckMarker.destroy();
dumptruckMarker = null;
if (colshapeDumptruck) colshapeDumptruck.destroy();
colshapeDumptruck = null;
}
}
else if (Shape == ShapeTonneBase) {
BlipTonneBase.setRoute(false);
else if (currentShape == colshapeBase) {
blipBase.setRoute(false);
mp.events.callRemote('CLIENT:MuellmannBaseSack');
HintenVoll = false;
dumptruckIsFull = false;
}
});
mp.events.add("MuellmannUpdateColshape", (index) => {
if (BlipTonne[index] != null)
BlipTonne[index].destroy();
BlipTonne[index] = null;
if (ShapeTonne[index] != null)
ShapeTonne[index].destroy();
ShapeTonne[index] = null;
if (!garbageToCollect.has(index)) return;
let { blip, colshape } = garbageToCollect.get(index);
if (blip && mp.blips.exists(blip)) {
blip.destroy();
}
if (colshape && mp.colshapes.exists(colshape)) {
colshape.destroy();
}
garbageToCollect.delete(index);
});
mp.events.add("SERVER:MuellmannZuBase", () => {
BlipTonneBase.setRoute(true);
BlipTonneBase.setRouteColour(5);
HintenVoll = true;
blipBase.setRoute(true);
blipBase.setRouteColour(5);
dumptruckIsFull = true;
});
function getIndex(shape: ColshapeMp): number {
let i = -1;
garbageToCollect.forEach((collection, index) => {
let { blip, colshape } = collection;
if (shape == colshape) i = index;
});
return i;
}
function createMarker() {
let vehicle;
if (vehRemoteID)
vehicle = mp.vehicles.atRemoteId(vehRemoteID);
if (vehicle != null) {
var boneIndex2 = vehicle.getBoneIndexByName("platelight");
var boneIndex1 = vehicle.getBoneIndexByName("chassis_dummy");
@@ -153,15 +179,15 @@
let pos = plateVec.add(temp);
if (BlipTonneHinten) BlipTonneHinten.destroy();
BlipTonneHinten = null;
if (CheckpointTonneHinten) CheckpointTonneHinten.destroy();
CheckpointTonneHinten = null;
if (ShapeTonneHinten) ShapeTonneHinten.destroy();
ShapeTonneHinten = null;
BlipTonneHinten = mp.blips.new(318, pos, { name: 'Müllmann', color: 24, shortRange: false });
CheckpointTonneHinten = mp.markers.new(1, pos, 1, { direction: new mp.Vector3(-235.5747, -1685.475, 32.7207), color: [0, 255, 0, 255], visible: true, dimension: 0 });
ShapeTonneHinten = mp.colshapes.newSphere(pos.x, pos.y, pos.z, 2);
if (blipDumptruck) blipDumptruck.destroy();
blipDumptruck = null;
if (dumptruckMarker) dumptruckMarker.destroy();
dumptruckMarker = null;
if (colshapeDumptruck) colshapeDumptruck.destroy();
colshapeDumptruck = null;
blipDumptruck = mp.blips.new(318, pos, { name: 'Müllmann', color: 24, shortRange: false });
dumptruckMarker = mp.markers.new(1, pos, 1, { direction: new mp.Vector3(-235.5747, -1685.475, 32.7207), color: [0, 255, 0, 255], visible: true, dimension: 0 });
colshapeDumptruck = mp.colshapes.newSphere(pos.x, pos.y, pos.z, 2);
}
};
}

View File

@@ -113,8 +113,6 @@ export default function keys(globalData: IGlobalData) {
//N //Motor Starten
mp.keys.bind(0x4E, false, function () {
if (!globalData.InChat) {
if (!player.vehicle) return;
if (player.vehicle.getSpeed() > 5) return;
mp.events.callRemote("keyPress:N");
}
});
@@ -136,7 +134,8 @@ export default function keys(globalData: IGlobalData) {
//J // Job Starten
mp.keys.bind(0x4A, false, () => {
if (!globalData.InChat && globalData.LoggedIn && !globalData.InTuning) {
mp.events.callRemote("CLIENT:JobManager_ShowJobMenu");
//mp.events.callRemote("CLIENT:JobManager_ShowJobMenu");
mp.events.callRemote("keyPress:J");
}
});

View File

@@ -203,26 +203,50 @@ class RageVehicle extends RageEntity implements IVehicle {
}
isSeatFree(seat: VehicleSeat): boolean {
if (!mp.vehicles.exists(this.vehicle)) {
return false;
}
return this.vehicle.isSeatFree(<number>seat - 1);
}
setEngineStatus(status: boolean, instantly: boolean, otherwise: boolean) {
if (!mp.vehicles.exists(this.vehicle)) {
return false;
}
this.vehicle.setEngineOn(status, instantly, otherwise);
}
setUndriveable(status: boolean) {
if (!mp.vehicles.exists(this.vehicle)) {
return false;
}
this.vehicle.setUndriveable(status);
}
setDoorsLocked(state: boolean) {
if (!mp.vehicles.exists(this.vehicle)) {
return false;
}
this.vehicle.setDoorsLocked(state ? 2 : 1);
}
setDoorOpen(door: number, loose: boolean, instantly: boolean) {
if (!mp.vehicles.exists(this.vehicle)) {
return false;
}
this.vehicle.setDoorOpen(door, loose, instantly);
}
setDoorShut(door: number, instantly: boolean) {
if (!mp.vehicles.exists(this.vehicle)) {
return false;
}
this.vehicle.setDoorShut(door, instantly);
}
}

View File

@@ -276,7 +276,8 @@ namespace ReallifeGamemode.Server.Commands
[Command("tsupport", "~m~Benutzung: ~s~/tsupport", Alias = "ts")]
public void CmdAdminTSupport(Player player)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
User user = player.GetUser();
if (!user.IsAdmin(AdminLevel.SUPPORTER))
{
ChatService.NotAuthorized(player);
return;
@@ -289,51 +290,14 @@ namespace ReallifeGamemode.Server.Commands
if (player.GetData<bool>("SAdminduty") == false)
{
player.SetData("SAdminduty", true);
player.SetSharedData("blipColor", 30);
player.SetSharedData("nameTagColor", -2);
ChatService.SendMessage(player, "~g~ ** " + "Du befindest dich im T-Support");
}
else
{
player.SetData("SAdminduty", false);
ChatService.SendMessage(player, "!{#ee4d2e}** " + "Du befindest dich nicht mehr im T-Support");
using (var dbContext = new DatabaseContext())
{
User targetUser = player.GetUser(dbContext);
switch (targetUser.FactionId)
{
case null:
player.SetSharedData("blipColor", 0);
player.SetSharedData("nameTagColor", 0);
break;
case 0:
player.SetSharedData("blipColor", 0);
player.SetSharedData("nameTagColor", 0);
break;
case 8:
player.SetSharedData("blipColor", 83);
player.SetSharedData("nameTagColor", 8);
break;
case 7:
player.SetSharedData("blipColor", 52);
player.SetSharedData("nameTagColor", 7);
break;
case 4:
player.SetSharedData("blipColor", 5);
player.SetSharedData("nameTagColor", 4);
break;
case 9:
player.SetSharedData("blipColor", 25);
player.SetSharedData("nameTagColor", 9);
break;
}
player.SetSharedData("nameTagColor", targetUser.FactionId);
}
}
user.SetBlipAndNametagColor();
}
[Command("aduty", "~m~Benutzung: ~s~/aduty")]
public void CmdAdminAduty(Player player)
@@ -354,6 +318,11 @@ namespace ReallifeGamemode.Server.Commands
}
else
{
if(player.GetData<bool>("SAdminduty"))
{
CmdAdminTSupport(player);
}
player.SetData("Adminduty", false);
ChatService.Broadcast("!{#ee4d2e}[SUPPORT] " + player.Name + " hat sich vom Support abgemeldet");
@@ -1493,37 +1462,12 @@ namespace ReallifeGamemode.Server.Commands
}
ChatService.SendMessage(target, "!{#8181E9}Deine Akte wurde vom Admin " + player.Name + " gelöscht. Grund: " + reason);
ChatService.BroadcastFaction("!{#8181E9}HQ: Die Akte von " + target.Name + " wurde vom Admin " + player.Name + " gelöscht. Grund: " + reason + ".", new List<int>() { 1, 3 });
switch (targetUser.FactionId)
{
case null:
target.SetSharedData("blipColor", 0);
target.SetSharedData("nameTagColor", 0);
break;
case 0:
target.SetSharedData("blipColor", 0);
target.SetSharedData("nameTagColor", 0);
break;
case 8:
target.SetSharedData("blipColor", 83);
target.SetSharedData("nameTagColor", 8);
break;
case 7:
target.SetSharedData("blipColor", 52);
target.SetSharedData("nameTagColor", 7);
break;
case 4:
target.SetSharedData("blipColor", 5);
target.SetSharedData("nameTagColor", 4);
break;
case 9:
target.SetSharedData("blipColor", 25);
target.SetSharedData("nameTagColor", 9);
break;
}
target.TriggerEvent("jailTime", 0);
targetUser.Wanteds = 0;
targetUser.SetBlipAndNametagColor();
dbContext.SaveChanges();
}
}
@@ -1573,7 +1517,7 @@ namespace ReallifeGamemode.Server.Commands
return;
}
Vehicle v = NAPI.Vehicle.CreateVehicle(uHash, player.Position, player.Rotation.Z, color1, color2, engine: true);
Vehicle v = NAPI.Vehicle.CreateVehicle(uHash, player.Position, player.Heading, color1, color2, engine: true);
VehicleStreaming.SetEngineState(v, true);
VehicleStreaming.SetLockStatus(v, false);
player.SetIntoVehicle(v.Handle, 0);
@@ -2489,38 +2433,7 @@ namespace ReallifeGamemode.Server.Commands
}
u.FactionLeader = false;
switch (u.FactionId)
{
case null:
target.SetSharedData("blipColor", 0);
target.SetSharedData("nameTagColor", 0);
break;
case 0:
target.SetSharedData("blipColor", 0);
target.SetSharedData("nameTagColor", 0);
break;
case 8:
target.SetSharedData("blipColor", 83);
target.SetSharedData("nameTagColor", 8);
break;
case 7:
target.SetSharedData("blipColor", 52);
target.SetSharedData("nameTagColor", 7);
break;
case 4:
target.SetSharedData("blipColor", 5);
target.SetSharedData("nameTagColor", 4);
break;
case 9:
target.SetSharedData("blipColor", 25);
target.SetSharedData("nameTagColor", 9);
break;
}
u.SetBlipAndNametagColor();
dbContext.SaveChanges();
}
}
@@ -2563,36 +2476,7 @@ namespace ReallifeGamemode.Server.Commands
ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast hast den Spieler ~y~" + target.Name + "~s~ zum Leader der Fraktion ~o~" + f.Name + "~s~ ernannt.");
ChatService.SendMessage(target, "~b~[ADMIN]~s~ Du wurdest von ~y~" + player.Name + "~s~ zum Leader der Fraktion ~o~" + f.Name + "~s~ ernannt.");
switch (u.FactionId)
{
case null:
target.SetSharedData("blipColor", 0);
target.SetSharedData("nameTagColor", 0);
break;
case 0:
target.SetSharedData("blipColor", 0);
target.SetSharedData("nameTagColor", 0);
break;
case 8:
target.SetSharedData("blipColor", 83);
target.SetSharedData("nameTagColor", 8);
break;
case 7:
target.SetSharedData("blipColor", 52);
target.SetSharedData("nameTagColor", 7);
break;
case 4:
target.SetSharedData("blipColor", 5);
target.SetSharedData("nameTagColor", 4);
break;
case 9:
target.SetSharedData("blipColor", 25);
target.SetSharedData("nameTagColor", 9);
break;
}
u.SetBlipAndNametagColor();
dbContext.SaveChanges();
}
}
@@ -3637,7 +3521,7 @@ namespace ReallifeGamemode.Server.Commands
public void CmdAdminCheckStats(Player player, string nameOrId)
{
User user = player.GetUser();
if(!user.IsAdmin(AdminLevel.ADMIN))
if(!user.IsAdmin(AdminLevel.SUPPORTER))
{
ChatService.NotAuthorized(player);
}

View File

@@ -109,9 +109,9 @@ namespace ReallifeGamemode.Server.Commands
string factionName = string.Empty;
if(f.StateOwned)
if(f?.StateOwned ?? false)
{
factionName = player.GetUser().GetFactionRank().RankName;
factionName = u.GetFactionRank().RankName;
}
else
{
@@ -292,16 +292,15 @@ namespace ReallifeGamemode.Server.Commands
if (player.IsInVehicle)
{
ChatService.ErrorMessage(player, "Du kannst in einem Auto nicht wiederbeleben.");
ChatService.ErrorMessage(player, "Du kannst in einem Auto nicht wiederbeleben");
return;
}
using var dbContext = new DatabaseContext();
var nearPlayers = NAPI.Player.GetPlayersInRadiusOfPlayer(4, player);
var deadPlayer = nearPlayers.Where(i => i.GetData<bool>("isDead") == true).FirstOrDefault();
if (player == deadPlayer)
{
ChatService.ErrorMessage(player, "Du kannst dich nicht selbst wiederbeleben.");
ChatService.ErrorMessage(player, "Du kannst dich nicht selbst wiederbeleben");
return;
}
@@ -311,6 +310,13 @@ namespace ReallifeGamemode.Server.Commands
return;
}
if (deadPlayer.HasData("reviveSperre"))
{
ChatService.ErrorMessage(player, "Der Spieler hat eine Revivesperre");
return;
}
using (var dbContext = new DatabaseContext())
{
var deadPlayerUser = deadPlayer.GetUser(dbContext);
if (deadPlayerUser.Handmoney >= 100)
@@ -324,10 +330,6 @@ namespace ReallifeGamemode.Server.Commands
deadPlayerUser.BankAccount.Balance -= bankMoney;
}
dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == 2).First().BankAccount.Balance += Medic.ReviveIncome;
dbContext.SaveChanges();
player.PlayAnimation("amb@medic@standing@kneel@enter", "enter", 0);
deadPlayer.TriggerEvent("onPlayerRevived");
@@ -335,10 +337,12 @@ namespace ReallifeGamemode.Server.Commands
deadPlayer.SendNotification($"Du wurdest von ~y~{player.Name}~s~ für ~g~{100.ToMoneyString()} ~s~wiederbelebt.");
player.SendNotification($"Du hast ~y~{deadPlayer.Name}~s~ wiederbelebt und ~g~{Medic.ReviveIncome}$ ~s~für die Fraktion verdient.");
deadPlayer.SetData("isDead", false);
using (var dbContext1 = new DatabaseContext())
{
deadPlayer.SetData("reviveSperre", 5);
dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == 2).First().BankAccount.Balance += Medic.ReviveIncome;
User u;
u = deadPlayer.GetUser(dbContext1);
u = deadPlayer.GetUser(dbContext);
u.Dead = false;
dbContext.SaveChanges();
}
@@ -350,7 +354,7 @@ namespace ReallifeGamemode.Server.Commands
}
[Command("heal", "~m~Benutzung: ~s~/heal [Spieler] (Preis)")] //TODO Eventuell noch mit Geldbetrag wie bei SA:MP
public void CmdFactionMedicHealive(Player player, string receiver, int price = 100)
public void CmdFactionMedicHealive(Player player, string receiver, int price = 10)
{
Player target = PlayerService.GetPlayerByNameOrId(receiver);
if (player.GetUser()?.FactionId != 2)
@@ -359,7 +363,7 @@ namespace ReallifeGamemode.Server.Commands
return;
}
if(player.Position.DistanceTo(target.Position) > 3)
if(player.Position.DistanceTo(target.Position) > 5)
{
ChatService.ErrorMessage(player, "Der Patient ist zu weit entfernt");
return;
@@ -394,28 +398,10 @@ namespace ReallifeGamemode.Server.Commands
return;
}
using var dbContext = new DatabaseContext();
User targetUser = target.GetUser(dbContext);
if (targetUser.Handmoney >= price)
{
targetUser.Handmoney -= price;
}
else
{
int bankMoney = price - targetUser.Handmoney;
targetUser.Handmoney = 0;
targetUser.BankAccount.Balance -= bankMoney;
}
dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == 2).First().BankAccount.Balance += price;
dbContext.SaveChanges();
target.Health = 100;
target.SendNotification($"Du wurdest von ~g~{player.Name} ~s~ für ~g~{price.ToMoneyString()} geheilt.", false);
player.SendNotification($"Du hast ~g~{target.Name} ~s~ für {price.ToMoneyString()} geheilt.", false);
player.TriggerEvent("delHealTask");
ChatService.SendMessage(target,"~g~" + player.Name + " ~s~möchte dich für ~g~$" + price + " ~s~heilen. Drücke ~g~J~s~ zum Erlauben oder ~r~N ~s~zum Verbieten");
player.SendNotification("Du hast " + target.Name + " einen Heal angeboten",false);
target.SetData<bool>("healDecision", true);
Medic.HealDecisions.Add(new Medic.HealDecision {dMedic = player, dTarget = target, dPrice = price});
}
#endregion Sanitäter Commands
@@ -494,40 +480,12 @@ namespace ReallifeGamemode.Server.Commands
}
ChatService.SendMessage(target, "!{#8181E9}Deine Akte wurde von " + player.Name + " gelöscht. Grund: " + reason);
ChatService.BroadcastFaction("!{#8181E9}HQ: Die Akte von " + target.Name + " wurde von " + player.Name + " gelöscht. Grund: " + reason + ".", new List<int>() { 1, 3 });
target.SetSharedData("blipColor", 0);
switch (targetUser.FactionId)
{
case null:
target.SetSharedData("blipColor", 0);
target.SetSharedData("nameTagColor", 0);
break;
case 0:
target.SetSharedData("blipColor", 0);
target.SetSharedData("nameTagColor", 0);
break;
case 8:
target.SetSharedData("blipColor", 83);
target.SetSharedData("nameTagColor", 8);
break;
case 7:
target.SetSharedData("blipColor", 52);
target.SetSharedData("nameTagColor", 7);
break;
case 4:
target.SetSharedData("blipColor", 5);
target.SetSharedData("nameTagColor", 4);
break;
case 9:
target.SetSharedData("blipColor", 25);
target.SetSharedData("nameTagColor", 9);
break;
}
target.TriggerEvent("jailTime", 0);
targetUser.Wanteds = 0;
targetUser.SetBlipAndNametagColor();
dbContext.SaveChanges();
}
}

View File

@@ -78,9 +78,12 @@ namespace ReallifeGamemode.Server.Commands
return;
}
if (pVeh.GetServerVehicle() is ServerVehicle veh)
using var dbContext = new DatabaseContext();
if (pVeh.GetServerVehicle(dbContext) is ServerVehicle veh)
{
ChatService.SendMessage(player, "~m~" + ((VehicleHash)pVeh.Model) + " | " + veh.ToString() + " | Farbe 1: " + pVeh.PrimaryColor + " | Farbe 2: " + pVeh.SecondaryColor + " | ID: " + pVeh.Handle.Value);
string dbIdStr = player.GetUser(dbContext).IsAdmin(AdminLevel.ADMIN) ? $" | DB-ID: {veh.Id}" : "";
ChatService.SendMessage(player, "~m~" + ((VehicleHash)pVeh.Model) + " | " + veh.ToString() + " | Farbe 1: " + pVeh.PrimaryColor + " | Farbe 2: " + pVeh.SecondaryColor + " | ID: " + pVeh.Handle.Value + dbIdStr);
}
else
{

View File

@@ -32,6 +32,7 @@ namespace ReallifeGamemode.Server.Events
player.Kick();
return;
}
player.SetData("isDead", true);
@@ -42,9 +43,6 @@ namespace ReallifeGamemode.Server.Events
userDeath.SaveChanges();
}
//TODO: Zum Full Release entfernen
if (player.HasData("togdeath")) {
ChatService.SendMessage(player, "Du bist durch " + (killer?.Name ?? "Niemanden") + " gestorben: " + reason.ToString());
@@ -91,6 +89,8 @@ namespace ReallifeGamemode.Server.Events
User user = player.GetUser();
if (user.JailTime <= 0)
{
if (!player.HasData("reviveSperre"))
{
//MEDIC AUFTRAG
MedicTask reviveTask = new MedicTask()
@@ -107,6 +107,9 @@ namespace ReallifeGamemode.Server.Events
Medic.AddTaskToList(reviveTask);
Medic.delHealTask(player);
ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " ist soeben verstorben.", new List<int>() { 2 });
}
if (player.GetUser().IsAdmin(AdminLevel.ADMIN) == true)
{

View File

@@ -99,7 +99,7 @@ namespace ReallifeGamemode.Server.Events
{
//if (player.Vehicle.GetData<bool>("timerJobVehicleRespawn") == true)
//{
if (player.Vehicle.GetServerVehicle() is JobVehicle vehJ)
if (player.Vehicle.GetServerVehicle() is JobVehicle vehJ && job.Id == JobManager.GetJob<RefuseCollectorJob>().Id)
{
player.Vehicle.ResetData("timerJobVehicleRespawn");
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(player.Vehicle);

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using GTANetworkAPI;
using Newtonsoft.Json;
@@ -11,6 +12,7 @@ using ReallifeGamemode.Server.Factions.Medic;
using ReallifeGamemode.Server.Finance;
using ReallifeGamemode.Server.Inventory;
using ReallifeGamemode.Server.Inventory.Interfaces;
using ReallifeGamemode.Server.Job;
using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Types;
@@ -198,6 +200,14 @@ namespace ReallifeGamemode.Server.Events
return;
}
if(!player.IsInVehicle)
{
if(GroundItem.PickUpGroundItem(player))
{
return;
}
}
DutyPoint nearestDuty = PositionManager.DutyPoints.Find(d => d.Position.DistanceTo(player.Position) <= 1.5 && d.FactionId == user.FactionId);
WeaponPoint nearestWeapon = PositionManager.WeaponPoints.Find(w => w.Position.DistanceTo(player.Position) <= 1.5 && w.FactionId == user.FactionId);
JailReleasePoint nearestJailReleasePoint = PositionManager.JailReleasePoints.Find(j => j.Position.DistanceTo(player.Position) <= 1.5 && (user.FactionId == 1 || user.FactionId == 3) && user.GetData<bool>("duty"));
@@ -285,27 +295,8 @@ namespace ReallifeGamemode.Server.Events
}
switch (factionId)
{
//LSPD
case 1:
//nameTagColor = new Color(28, 134, 238);
//player.TriggerEvent("setNameTag", JsonConvert.SerializeObject(new int[] { 28, 134, 238 }));
player.SetSharedData("nameTagColor", factionId);
player.SetSharedData("blipColor", 38);
break;
//Medic
case 2:
//nameTagColor = new Color(255, 0, 0);
//player.TriggerEvent("setNameTag", JsonConvert.SerializeObject(new int[] { 255, 0, 0 }));
player.SetSharedData("nameTagColor", factionId);
player.SetSharedData("blipColor", 6);
break;
//FBI
case 3:
//nameTagColor = new Color(173, 0, 118);
player.SetSharedData("nameTagColor", factionId);
player.SetSharedData("blipColor", 63);
player.SetAccessories(2, 2, 0);
break;
}
@@ -339,10 +330,9 @@ namespace ReallifeGamemode.Server.Events
player.SendNotification("Du bist nun ~r~außer Dienst.");
player.TriggerEvent("toggleDutyMode", false);
Medic.UpdateDutyMedics(-1);
player.SetSharedData("blipColor", 0);
player.SetSharedData("nameTagColor", 0);
UpdateCharacterCloth.LoadCharacterDefaults(player);
}
user.SetBlipAndNametagColor();
}
if (nearestWeapon != null) // Weapon Point
@@ -505,6 +495,11 @@ namespace ReallifeGamemode.Server.Events
foreach (Player target in NAPI.Pools.GetAllPlayers())
{
User c = target.GetUser();
if(c == null)
{
continue;
}
if (c.JailTime > 0)
{
criminals.Add(c.Name);
@@ -616,6 +611,72 @@ namespace ReallifeGamemode.Server.Events
InventoryManager.SetBackpackItems(player);
}
[RemoteEvent("keyPress:J")]
public void KeyPressJ(Player player)
{
if (!player.IsLoggedIn()) return;
if (player.GetData<bool>("healDecision") == true)
{
player.ResetData("healDecision");
Medic.MakeHealDecision(player, true);
return;
}
User u = player.GetUser();
if (u.JobId == null) return;
JobBase job = JobManager.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
{
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 (u.JobId == 2 || u.JobId == 3 || u.JobId == 4)
{
return;
}
var json = JsonConvert.SerializeObject(data);
player.TriggerEvent("SERVER:Job_ShowJobMenu", job.Name, json);
}
[RemoteEvent("keyPress:O")]
public void KeyPressO(Player player)
{
@@ -704,6 +765,13 @@ namespace ReallifeGamemode.Server.Events
{
if (!player.IsLoggedIn()) return;
if (player.GetData<bool>("healDecision") == true)
{
player.ResetData("healDecision");
Medic.MakeHealDecision(player, false);
return;
}
if (!player.IsInVehicle) return;
if (player.VehicleSeat != 0) return;
@@ -875,8 +943,6 @@ namespace ReallifeGamemode.Server.Events
if (!player.IsInVehicle)
{
Vehicle.VehicleMenuLockCarEvent(player);
GroundItem.PickUpGroundItem(player);
}
if (player.IsInVehicle && player.VehicleSeat == 0)

View File

@@ -100,42 +100,7 @@ namespace ReallifeGamemode.Server.Events
var userItems = dbContext.UserItems.Where(u => u.UserId == user.Id).ToList();
player.SetData("items", userItems);
switch (user.FactionId)
{
case null:
player.SetSharedData("blipColor", 0);
player.SetSharedData("nameTagColor", 0);
break;
case 0:
player.SetSharedData("blipColor", 0);
player.SetSharedData("nameTagColor", 0);
break;
case 8:
player.SetSharedData("blipColor", 83);
player.SetSharedData("nameTagColor", 8);
break;
case 7:
player.SetSharedData("blipColor", 52);
player.SetSharedData("nameTagColor", 7);
break;
case 4:
player.SetSharedData("blipColor", 5);
player.SetSharedData("nameTagColor", 4);
break;
case 9:
player.SetSharedData("blipColor", 25);
player.SetSharedData("nameTagColor", 9);
break;
default:
player.SetSharedData("blipColor", 0);
player.SetSharedData("nameTagColor", 0);
break;
}
user.SetBlipAndNametagColor();
if (user.CharacterId == null)
{

View File

@@ -129,10 +129,9 @@ namespace ReallifeGamemode.Server.Extensions
{
User dbUser = dbContext.Users.Where(u => u.Id == user.Id).FirstOrDefault();
dbUser.Wanteds = newWanteds;
dbUser.SetBlipAndNametagColor();
dbContext.SaveChanges();
}
user.Player.SetSharedData("nameTagColor", -1);
user.Player.SetSharedData("blipColor", 64);
ChatService.SendMessage(user.Player, "!{#FF614A}Du hast ein Verbrechen begangen: " + reason + "" + (cop != null ? " | Gemeldet von: " + cop.Name + "." : ""));
ChatService.SendMessage(user.Player, " !{#FFFF00}Fahnundgslevel:~s~ " + newWanteds);
@@ -243,5 +242,77 @@ namespace ReallifeGamemode.Server.Extensions
}
return user.AdminLevel >= adminLevel;
}
public static void SetBlipAndNametagColor(this User user)
{
if (user == null)
{
return;
}
int blipColor = 0;
int nameTagColor = 0;
Player player = user.Player;
bool duty = user.GetData<bool>("duty");
if (player.GetData<bool>("SAdminduty"))
{
blipColor = 30;
nameTagColor = -2;
}
else if (user.Wanteds > 0)
{
nameTagColor = -1;
blipColor = 64;
}
else if (user.FactionId != null)
{
if(user.FactionId > 3 || (user.FactionId >= 1 && user.FactionId <= 3 && duty))
{
nameTagColor = user.FactionId.Value;
}
switch (user.FactionId)
{
case 1 when duty:
blipColor = 38;
break;
case 2 when duty:
blipColor = 6;
break;
case 3 when duty:
blipColor = 63;
break;
case 4:
blipColor = 5;
break;
case 5:
break;
case 6:
break;
case 7:
blipColor = 52;
break;
case 8:
blipColor = 83;
break;
case 9:
blipColor = 25;
break;
}
}
user.Player.SetSharedData("nameTagColor", nameTagColor);
user.Player.SetSharedData("blipColor", blipColor);
}
}
}

View File

@@ -8,6 +8,7 @@ using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using Microsoft.EntityFrameworkCore;
using System;
using ReallifeGamemode.Server.Extensions;
/**
* @overview Life of German Reallife - Server Factions Medic Medic.cs
@@ -22,10 +23,18 @@ namespace ReallifeGamemode.Server.Factions.Medic
public static List<MedicTask> ReviveTasks = new List<MedicTask>();
public static List<MedicTask> HealTasks = new List<MedicTask>();
public static List<MedicTask> FireTasks = new List<MedicTask>();
public static List<HealDecision> HealDecisions = new List<HealDecision>();
public static int ReviveIncome = 100;
public static int dutyMedics = 0;
public static int reviveTaskTime = 240;
public class HealDecision
{
public Player dMedic;
public Player dTarget;
public int dPrice;
}
public static void AddTaskToList(MedicTask task)
{
if (task == null)
@@ -72,6 +81,79 @@ namespace ReallifeGamemode.Server.Factions.Medic
}
}
public static void UpdateReviveSperre()
{
var allRevivedPlayers = NAPI.Pools.GetAllPlayers().Where(c => c.HasData("reviveSperre"));
foreach(var player in allRevivedPlayers)
{
var timeLeft = player.GetData<int>("reviveSperre");
if (timeLeft > 0)
{
player.SetData("reviveSperre", timeLeft - 1);
}
else
{
player.ResetData("reviveSperre");
}
}
}
public static void CheckHealDecisionDistance()
{
foreach(var healAuftrag in HealDecisions.ToList())
{
if (healAuftrag.dMedic.Position.DistanceTo(healAuftrag.dTarget.Position) > 5)
{
healAuftrag.dMedic.SendNotification("~r~Die Heal-Anfrage wurde abgebrochen");
healAuftrag.dTarget.SendNotification("~r~Die Heal-Anfrage wurde abgebrochen");
healAuftrag.dTarget.ResetData("healDecision");
var activeDecision = HealDecisions.FirstOrDefault(d => d.dTarget == healAuftrag.dTarget);
HealDecisions.Remove(healAuftrag);
}
}
}
public static void MakeHealDecision(Player target, bool decision)
{
var activeDecision = HealDecisions.FirstOrDefault(d => d.dTarget == target);
if(decision == false)
{
activeDecision.dMedic.SendNotification(activeDecision.dTarget.Name + " hat den Heal ~r~abgelehnt",false);
activeDecision.dTarget.SendNotification("Du hast den Heal ~r~abgelehnt", false);
}
else
{
activeDecision.dMedic.SendNotification(activeDecision.dTarget.Name + " hat den Heal ~g~akzeptiert", false);
activeDecision.dTarget.SendNotification("Du hast den Heal ~g~akzeptiert", false);
using var dbContext = new DatabaseContext();
{
User targetUser = target.GetUser(dbContext);
if (targetUser.Handmoney >= activeDecision.dPrice)
{
targetUser.Handmoney -= activeDecision.dPrice;
}
else
{
int bankMoney = activeDecision.dPrice - targetUser.Handmoney;
targetUser.Handmoney = 0;
targetUser.BankAccount.Balance -= bankMoney;
}
dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == 2).First().BankAccount.Balance += activeDecision.dPrice / 2;
activeDecision.dMedic.GetUser(dbContext).Wage += activeDecision.dPrice / 2;
dbContext.SaveChanges();
}
activeDecision.dTarget.Health = 100;
activeDecision.dTarget.SendNotification($"Du wurdest von ~g~{activeDecision.dMedic.Name} ~s~ für ~g~{activeDecision.dPrice.ToMoneyString()} geheilt", false);
activeDecision.dMedic.SendNotification($"Du hast ~g~{activeDecision.dTarget.Name} ~s~ für {activeDecision.dPrice.ToMoneyString()} geheilt", false);
delHealTask(activeDecision.dTarget);
}
HealDecisions.Remove(activeDecision);
}
public static void UpdateTaskTimeLeft()
{
DateTime actualTime = DateTime.Now;
@@ -84,7 +166,7 @@ namespace ReallifeGamemode.Server.Factions.Medic
var taskTimeLeft = Math.Abs((Int32)(((DateTimeOffset)actualTime).ToUnixTimeSeconds() - ((DateTimeOffset)task.Time).ToUnixTimeSeconds() - reviveTaskTime));
task.TimeLeft = taskTimeLeft;
var medic = PlayerService.GetPlayerByNameOrId(task.MedicName);
if(task.MedicName != "none") medic.TriggerEvent("setTaskTimeLeft", taskTimeLeft);
if(medic != null) medic.TriggerEvent("setTaskTimeLeft", taskTimeLeft);
}
}
}
@@ -139,7 +221,7 @@ namespace ReallifeGamemode.Server.Factions.Medic
public static void delHealTask(Player player)
{
MedicTask task = HealTasks.FirstOrDefault(t => t.Victim == player.Name);
RemoveTaskFromList(task);
if(task != null) RemoveTaskFromList(task);
player.SetData("healauftrag", false);
}

View File

@@ -26,7 +26,7 @@ namespace ReallifeGamemode.Server.Inventory
GroundTextLabels.Add(grndTextLabel);
}
public static void PickUpGroundItem(Player player)
public static bool PickUpGroundItem(Player player)
{
GroundItem nearest = GroundItems.FirstOrDefault(d => d.Position.DistanceTo(player.Position) <= 1.2);
if (nearest != null)
@@ -39,7 +39,7 @@ namespace ReallifeGamemode.Server.Inventory
UserItem existingItem = InventoryManager.UserHasThisItem(player, nearest.ItemId);
var user = player.GetUser();
if (player.HasAttachment("ammobox"))
{ player.SendNotification("~r~Du kannst momentan nichts tragen!", false); return; }
{ player.SendNotification("~r~Du kannst momentan nichts tragen!", false); return false; }
if (nearestItem.Gewicht * nearest.Amount + invWeight > 40000)
{
for (var i = 1; i <= nearest.Amount; i++)
@@ -106,7 +106,10 @@ namespace ReallifeGamemode.Server.Inventory
NAPI.Player.SetPlayerCurrentWeapon(player, WeaponHash.Unarmed);
}
}
return true;
}
return false;
}
public static void RemoveGroundItem(GroundItem grndItem, GTANetworkAPI.Object grndObject, TextLabel grndTextLabel)

View File

@@ -19,7 +19,7 @@ namespace ReallifeGamemode.Server.Job
public override bool NeedVehicleToStart => false;
const int MAX_BAG = 40;
private const int MAX_BAG = 40;
public RefuseCollectorJob()
{
@@ -39,6 +39,7 @@ namespace ReallifeGamemode.Server.Job
}
public static List<MuellmannData> muellmanData = new List<MuellmannData>();
public float blipHeight = 1000;
private readonly IReadOnlyCollection<Vector3> vector3s = new List<Vector3>
{
@@ -156,7 +157,6 @@ namespace ReallifeGamemode.Server.Job
new Vector3(-921.0493774414062, -1095.1513671875, 2.1503124237060547),
new Vector3(-942.0684204101562, -1077.1378173828125, 2.1503121852874756),
new Vector3(-951.5316772460938, -1078.955078125, 2.1503100395202637),
}.AsReadOnly();
[RemoteEvent("CLIENT:MuellmannJobStarten")]
@@ -209,13 +209,13 @@ namespace ReallifeGamemode.Server.Job
}
[RemoteEvent("CLIENT:MuellmannImShape")]
public void MuellmannImShape(Player player, int colshapeIndex)
public void MuellmannImShape(Player player, int index)
{
foreach (var data in muellmanData)
{
if (data.getDataFromClient(player) == null) continue;
Player target = data.getPartnerClient(player);
if (target != null) target.TriggerEvent("MuellmannUpdateColshape", colshapeIndex);
if (target != null) target.TriggerEvent("MuellmannUpdateColshape", index);
player.TriggerEvent("renderTextOnScreen", "Wirf den Müllsack in den Müllwagen.");
player.AddAttachment("binbag", false);
return;
@@ -265,12 +265,10 @@ namespace ReallifeGamemode.Server.Job
}
else
{
if (target != null)
{
user1.Wage += 25;
user2.Wage += 25;
}
else
{

View File

@@ -63,38 +63,13 @@ namespace ReallifeGamemode.Server.Managers
own.FactionRank = dbContext
.FactionRanks
.OrderBy(x => x.Order)
.Where(r => r.FactionId == own.FactionId)
.Where(r => r.FactionId == u.FactionId)
.FirstOrDefault();
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);
player.SetSharedData("nameTagColor", 0);
break;
case 8:
player.SetSharedData("blipColor", 83);
player.SetSharedData("nameTagColor", 8);
break;
case 7:
player.SetSharedData("blipColor", 52);
player.SetSharedData("nameTagColor", 7);
break;
case 4:
player.SetSharedData("blipColor", 5);
player.SetSharedData("nameTagColor", 4);
break;
case 9:
player.SetSharedData("blipColor", 25);
player.SetSharedData("nameTagColor", 9);
break;
}
own.SetBlipAndNametagColor();
dbContext.SaveChanges();
}
}
@@ -247,8 +222,10 @@ namespace ReallifeGamemode.Server.Managers
return;
}
User targetUser = target.GetUser();
User playerUser = player.GetUser();
using var dbContext = new DatabaseContext();
User targetUser = target.GetUser(dbContext);
User playerUser = player.GetUser(dbContext);
if (type == "Fraktion")
{
@@ -276,22 +253,17 @@ namespace ReallifeGamemode.Server.Managers
return;
}
using (var dbContext = new DatabaseContext())
{
target.SetData("duty", false);
target.TriggerEvent("toggleDutyMode", false);
Medic.UpdateDutyMedics(-1);
target.SetSharedData("blipColor", 0);
UpdateCharacterCloth.LoadCharacterDefaults(target);
target.GetUser(dbContext).FactionRankId = null;
target.GetUser(dbContext).FactionId = null;
ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " aus der Fraktion geworfen.");
ChatService.SendMessage(target, "!{02FCFF}Du wurdest von " + player.Name + " aus der Fraktion geworfen.");
target.SetSharedData("blipColor", 0);
player.SetSharedData("nameTagColor", 0);
targetUser.SetBlipAndNametagColor();
dbContext.SaveChanges();
}
}
else if (type == "Gruppe")
{
if (playerUser?.Group == null || playerUser.GroupRank < GroupRank.MANAGER)
@@ -318,10 +290,8 @@ namespace ReallifeGamemode.Server.Managers
return;
}
using (var dbContext = new DatabaseContext())
{
target.GetUser(dbContext).Group = null;
target.GetUser(dbContext).GroupRank = GroupRank.NONE;
targetUser.Group = null;
targetUser.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.");
@@ -329,7 +299,6 @@ namespace ReallifeGamemode.Server.Managers
dbContext.SaveChanges();
}
}
}
[RemoteEvent("CLIENT:InteractionMenu_MemberList")]
public void InteractionMenuGroupMemberList(Player player, string type, string name)
@@ -854,7 +823,8 @@ namespace ReallifeGamemode.Server.Managers
if (player.GetData<bool>("healauftrag") == true)
{
player.SendNotification("~r~[Fehler] ~w~Du hast bereits ein Sanitäter gerufen.");
}else
}
else
{
Medic.AddTaskToList(healTask);
player.SetData("healauftrag", true);

View File

@@ -13,8 +13,6 @@ using ReallifeGamemode.Server.Util;
using ReallifeGamemode.Services;
using ReallifeGamemode.Server.Types;
namespace ReallifeGamemode.Server.Managers
{
public class JobManager : Script
@@ -124,63 +122,6 @@ namespace ReallifeGamemode.Server.Managers
}
}
[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
{
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 (u.JobId == 2 || u.JobId == 3 || u.JobId == 4)
{
return;
}
var json = JsonConvert.SerializeObject(data);
player.TriggerEvent("SERVER:Job_ShowJobMenu", job.Name, json);
}
[RemoteEvent("CLIENT:Job_StartJob")]
public void StartJobEvent(Player player)
{
@@ -210,6 +151,7 @@ namespace ReallifeGamemode.Server.Managers
playerJobStartPosition[player] = player.Position;
job.StartJob(player);
}
[ServerEvent(Event.PlayerExitVehicle)]
public void JobManagerPlayerExitVehicle(Player player, Vehicle veh)
{
@@ -298,10 +240,14 @@ namespace ReallifeGamemode.Server.Managers
if (vehJ.GetJob().GetUsersInJob().Contains(player))
{
if (LastVehicle != null)
{
if (job.Id != 2) //Müllman Handelt Fahrzeug respawn eigenständig
{
LastVehicle.ResetData("timerJobVehicleRespawn");
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(LastVehicle);
ServerVehicleExtensions.Spawn(sVeh, LastVehicle);
}
job.StopJob(player);
ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet.");
CheckPointHandle.DeleteCheckpoints(player);
@@ -397,7 +343,7 @@ namespace ReallifeGamemode.Server.Managers
player.Heading = (57.03f);
}
Vehicle LastVehicle = player.GetData<Vehicle>("LastVehicle");
if (LastVehicle != null)
if (LastVehicle != null && job.Id != GetJob<RefuseCollectorJob>().Id)
{
LastVehicle.ResetData("timerJobVehicleRespawn");
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(LastVehicle);

View File

@@ -49,6 +49,7 @@ namespace ReallifeGamemode.Server.Util
NAPI.Task.Run(() =>
{
Medic.UpdateTaskTimeLeft();
Medic.CheckHealDecisionDistance();
});
}
@@ -59,6 +60,7 @@ namespace ReallifeGamemode.Server.Util
Jail.JailOut_Elapsed();
Economy.Timer_Elapsed();
WeaponDealManager.Timer_Elapsed();
Medic.UpdateReviveSperre();
});
}

View File

@@ -66,10 +66,12 @@ namespace ReallifeGamemode.Server.Wanted
jailTime /= 2;
}
client.GetUser(dbContext).JailTime = jailTime;
User clientUser = client.GetUser(dbContext);
clientUser.JailTime = jailTime;
Jailtime[user.Id] = jailTime; // 54 sec for each wanted star -> in total 45min for 50 Wanteds
client.GetUser(dbContext).Wanteds = 0;
clientUser.Wanteds = 0;
client.SetData("isDead", false);
client.RemoveAllWeapons();
client.SetSharedData("blipColor", 0);
@@ -100,24 +102,7 @@ namespace ReallifeGamemode.Server.Wanted
client.TriggerEvent("jailTime", JsonConvert.SerializeObject(timeMinutes));
switch (user.FactionId)
{
case null:
client.SetSharedData("blipColor", 0);
break;
case 8:
client.SetSharedData("blipColor", 83);
break;
case 7:
client.SetSharedData("blipColor", 52);
break;
case 4:
client.SetSharedData("blipColor", 5);
break;
case 9:
client.SetSharedData("blipColor", 25);
break;
}
clientUser.SetBlipAndNametagColor();
if (announceHq)
{