continue Gangwar System
This commit is contained in:
BIN
Import/bridge.dll
Normal file
BIN
Import/bridge.dll
Normal file
Binary file not shown.
@@ -29,6 +29,7 @@
|
|||||||
<Folder Include="assets\html\Reportlist\" />
|
<Folder Include="assets\html\Reportlist\" />
|
||||||
<Folder Include="assets\img\atm\" />
|
<Folder Include="assets\img\atm\" />
|
||||||
<Folder Include="assets\img\items\" />
|
<Folder Include="assets\img\items\" />
|
||||||
|
<Folder Include="Gangwar\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -180,3 +180,6 @@ planeSchoolHandle(globalData);
|
|||||||
|
|
||||||
import PilotRouteList from './Jobs/PilotRouteSelect';
|
import PilotRouteList from './Jobs/PilotRouteSelect';
|
||||||
PilotRouteList(globalData);
|
PilotRouteList(globalData);
|
||||||
|
|
||||||
|
import gangwarHandle from './util/Gangwar';
|
||||||
|
gangwarHandle(globalData);
|
||||||
324
ReallifeGamemode.Client/util/Gangwar.ts
Normal file
324
ReallifeGamemode.Client/util/Gangwar.ts
Normal file
@@ -0,0 +1,324 @@
|
|||||||
|
export default function gangwarHandle(globalData: GlobalData) {
|
||||||
|
|
||||||
|
function inside(point, vs) {
|
||||||
|
let x = point[0],
|
||||||
|
y = point[1];
|
||||||
|
let inside = false;
|
||||||
|
for (let i = 0, j = vs.length - 1; i < vs.length; j = i++) {
|
||||||
|
let xi = vs[i][0],
|
||||||
|
yi = vs[i][1];
|
||||||
|
let xj = vs[j][0],
|
||||||
|
yj = vs[j][1];
|
||||||
|
let intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
|
||||||
|
if (intersect) inside = !inside;
|
||||||
|
}
|
||||||
|
return inside;
|
||||||
|
};
|
||||||
|
|
||||||
|
const Natives = {
|
||||||
|
SET_BLIP_CATEGORY: "0x234CDD44D996FD9A",
|
||||||
|
SHOW_HEADING_INDICATOR_ON_BLIP: "0x5FBCA48327B914DF",
|
||||||
|
SET_BLIP_AS_SHORT_RANGE: "0xBE8BE4FE60E27B72",
|
||||||
|
SET_BLIP_DISPLAY: "0x9029B2F3DA924928",
|
||||||
|
SET_BLIP_SPRITE: "0xDF735600A4696DAF",
|
||||||
|
SET_BLIP_ALPHA: "0x45FF974EEE1C8734",
|
||||||
|
ADD_BLIP_FOR_RADIUS: "0x46818D79B1F7499A",
|
||||||
|
SET_BLIP_COLOUR: "0x03D7FB09E75D6B7E",
|
||||||
|
SET_BLIP_ROTATION: "0xF87683CDF73C3F6E",
|
||||||
|
SET_BLIP_FLASHES: "0xB14552383D39CE3E",
|
||||||
|
GET_FIRST_BLIP_INFO_ID: "0x1BEDE233E6CD2A1F",
|
||||||
|
GET_NEXT_BLIP_INFO_ID: "0x14F96AA50D6FBEA7",
|
||||||
|
DOES_BLIP_EXIST: "0xA6DB27D19ECBB7DA"
|
||||||
|
};
|
||||||
|
|
||||||
|
var Gangturf = class {
|
||||||
|
|
||||||
|
name: string;
|
||||||
|
id: number;
|
||||||
|
range: number;
|
||||||
|
x: number;
|
||||||
|
y: number;
|
||||||
|
color: number;
|
||||||
|
colorZone_r: number;
|
||||||
|
colorZone_g: number;
|
||||||
|
colorZone_b: number;
|
||||||
|
rotation: number;
|
||||||
|
owner: string;
|
||||||
|
blip: BlipMp;
|
||||||
|
_colshape: ColshapeMp;
|
||||||
|
vector: Vector3Mp;
|
||||||
|
_status: string;
|
||||||
|
_entered: boolean;
|
||||||
|
_isEntering: boolean;
|
||||||
|
_inColshape: boolean;
|
||||||
|
_timerCheck;
|
||||||
|
edit: boolean;
|
||||||
|
|
||||||
|
constructor(name, id, x, y, range, color, rot, owner, edit) {
|
||||||
|
this._setup(name, id, x, y, range, color, rot, owner, edit);
|
||||||
|
}
|
||||||
|
|
||||||
|
_setup(name, id, x, y, range, color, rot, owner, edit) {
|
||||||
|
var self = this;
|
||||||
|
self.name = name;
|
||||||
|
self.id = id;
|
||||||
|
self.range = range;
|
||||||
|
if (owner = "Ballas") {
|
||||||
|
self.colorZone_r = 143;
|
||||||
|
self.colorZone_g = 0;
|
||||||
|
self.colorZone_b = 199;
|
||||||
|
} else if (owner = "GroveStreet") {
|
||||||
|
self.colorZone_r = 22;
|
||||||
|
self.colorZone_g = 87;
|
||||||
|
self.colorZone_b = 0;
|
||||||
|
} else if (owner = "Neutral") {
|
||||||
|
self.colorZone_r = 255;
|
||||||
|
self.colorZone_g = 255;
|
||||||
|
self.colorZone_b = 255;
|
||||||
|
}
|
||||||
|
self.color = color;
|
||||||
|
self.x = x;
|
||||||
|
self.y = y;
|
||||||
|
|
||||||
|
self.rotation = rot;
|
||||||
|
self._colshape = null;
|
||||||
|
self._status = "normal";
|
||||||
|
self._entered = false;
|
||||||
|
self._isEntering = false;
|
||||||
|
self._inColshape = false;
|
||||||
|
self._timerCheck;
|
||||||
|
self.owner = owner;
|
||||||
|
self.edit = edit;
|
||||||
|
self.loadArea();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
loadArea() {
|
||||||
|
var self = this;
|
||||||
|
self.blip = mp.game.ui.addBlipForRadius(self.x, self.y, 1, self.range);
|
||||||
|
mp.game.invoke(Natives.SET_BLIP_SPRITE, self.blip, 5);
|
||||||
|
mp.game.invoke(Natives.SET_BLIP_ALPHA, self.blip, 70);
|
||||||
|
mp.game.invoke(Natives.SET_BLIP_COLOUR, self.blip, self.color);
|
||||||
|
self._colshape = mp.colshapes.newCircle(self.x, self.y, self.range * 1.5);
|
||||||
|
}
|
||||||
|
render() {
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
if (self.blip) {
|
||||||
|
mp.game.invoke(Natives.SET_BLIP_ROTATION, self.blip, self.rotation);
|
||||||
|
}
|
||||||
|
if (self._status == "attack") {
|
||||||
|
if (self.blip) {
|
||||||
|
if (mp.game.gameplay.getDistanceBetweenCoords(mp.players.local.position.x, mp.players.local.position.y, 0, self.x, self.y, 0, true) < self.range * 1.5) {
|
||||||
|
var range = Math.sqrt(((self.range * 1.2) * (self.range * 1.2)) + (((self.range * 1.2) / 2) * ((self.range * 1.2) / 2)));
|
||||||
|
let degrees = (self.rotation + 45) * (Math.PI / 180);
|
||||||
|
let top_right = {
|
||||||
|
x: self.x + range * Math.cos(degrees),
|
||||||
|
y: self.y + range * Math.sin(degrees)
|
||||||
|
}
|
||||||
|
degrees = (self.rotation + 135) * (Math.PI / 180);
|
||||||
|
let top_left = {
|
||||||
|
x: self.x + range * Math.cos(degrees),
|
||||||
|
y: self.y + range * Math.sin(degrees)
|
||||||
|
}
|
||||||
|
degrees = (self.rotation + 225) * (Math.PI / 180);
|
||||||
|
let bottom_left = {
|
||||||
|
x: self.x + range * Math.cos(degrees),
|
||||||
|
y: self.y + range * Math.sin(degrees)
|
||||||
|
}
|
||||||
|
degrees = (self.rotation + 315) * (Math.PI / 180);
|
||||||
|
let bottom_right = {
|
||||||
|
x: self.x + range * Math.cos(degrees),
|
||||||
|
y: self.y + range * Math.sin(degrees)
|
||||||
|
}
|
||||||
|
let z = mp.game.gameplay.getGroundZFor3dCoord(mp.players.local.position.x, mp.players.local.position.y, mp.players.local.position.z, 0, false);
|
||||||
|
//mp.game.graphics.drawLine(bottom_right.x, bottom_right.y, z, bottom_right.x, bottom_right.y, z + 25, 0, 255, 0, 255);
|
||||||
|
//mp.game.graphics.drawLine(top_left.x, top_left.y, z, top_left.x, top_left.y, z + 25, 0, 0, 255, 255);
|
||||||
|
let a = 0;
|
||||||
|
for (var i = z; i < z + 1; i += 0.001) {
|
||||||
|
mp.game.graphics.drawLine(top_left.x, top_left.y, i, top_right.x, top_right.y, i, self.colorZone_r, self.colorZone_g, self.colorZone_b, 60 - a * 100);
|
||||||
|
mp.game.graphics.drawLine(top_right.x, top_right.y, i, bottom_right.x, bottom_right.y, i, self.colorZone_r, self.colorZone_g, self.colorZone_b, 60 - a * 100);
|
||||||
|
mp.game.graphics.drawLine(bottom_right.x, bottom_right.y, i, bottom_left.x, bottom_left.y, i, self.colorZone_r, self.colorZone_g, self.colorZone_b, 60 - a * 100);
|
||||||
|
mp.game.graphics.drawLine(bottom_left.x, bottom_left.y, i, top_left.x, top_left.y, i, self.colorZone_r, self.colorZone_g, self.colorZone_b, 60 - a * 100);
|
||||||
|
a += 0.001
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (self.isInsideArea()) {
|
||||||
|
mp.game.graphics.drawText(self.name, [self.x, self.y, mp.players.local.position.z + 20], {
|
||||||
|
font: 7,
|
||||||
|
color: [255, 255, 255, 185],
|
||||||
|
scale: [0.4, 0.4],
|
||||||
|
outline: true,
|
||||||
|
centre: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updateArea(status, ...args) {
|
||||||
|
var self = this;
|
||||||
|
if (status == "attack") {
|
||||||
|
self._status = "attack";
|
||||||
|
mp.game.invoke(Natives.SET_BLIP_FLASHES, self.blip, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (status == "normal") {
|
||||||
|
self._status = "normal";
|
||||||
|
mp.game.invoke(Natives.SET_BLIP_FLASHES, self.blip, false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (status == "conquered") {
|
||||||
|
self._status = "normal";
|
||||||
|
self.owner = args[1];
|
||||||
|
mp.game.invoke(Natives.SET_BLIP_FLASHES, self.blip, false);
|
||||||
|
self.blip.setColour(args[0]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
isTurfArea(shape) {
|
||||||
|
return (shape == this._colshape)
|
||||||
|
}
|
||||||
|
|
||||||
|
isOwner(gang) {
|
||||||
|
return (gang == this.owner)
|
||||||
|
}
|
||||||
|
|
||||||
|
check() {
|
||||||
|
var self = this
|
||||||
|
if (self._entered == true) {
|
||||||
|
if (!self.isInsideArea() || (self.isNearGround() == false)) {
|
||||||
|
self._entered = false;
|
||||||
|
// mp.events.callRemote("Gangarea:Leave", self.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enter() {
|
||||||
|
var self = this;
|
||||||
|
self._timerCheck = setInterval(function () {
|
||||||
|
if ((!self._entered)) {
|
||||||
|
if (self.isInsideArea() && (self.isNearGround() == true)) {
|
||||||
|
self._entered = true;
|
||||||
|
// mp.events.callRemote("Gangarea:Enter", self.id);
|
||||||
|
}
|
||||||
|
} else if (self._entered == true) {
|
||||||
|
if (!self.isInsideArea() || (self.isNearGround() == false)) {
|
||||||
|
self._entered = false;
|
||||||
|
//mp.events.callRemote("Gangarea:Leave", self.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
leave() {
|
||||||
|
var self = this;
|
||||||
|
clearInterval(self._timerCheck);
|
||||||
|
self.check();
|
||||||
|
}
|
||||||
|
isNearGround() {
|
||||||
|
let self = this;
|
||||||
|
let ground = mp.game.gameplay.getGroundZFor3dCoord(self.x, self.y, 9000, 0, false);
|
||||||
|
let max_diff = 75;
|
||||||
|
let dist = mp.game.system.vdist(0, 0, ground, 0, 0, mp.players.local.position.z);
|
||||||
|
if (dist <= max_diff) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
isInsideArea() {
|
||||||
|
var self = this;
|
||||||
|
let player = {
|
||||||
|
x: mp.players.local.position.x,
|
||||||
|
y: mp.players.local.position.y,
|
||||||
|
z: mp.players.local.position.z
|
||||||
|
};
|
||||||
|
var range = Math.sqrt(((self.range * 1.2) * (self.range * 1.2)) + (((self.range * 1.2) / 2) * ((self.range * 1.2) / 2)));
|
||||||
|
let degrees = (self.rotation + 45) * (Math.PI / 180);
|
||||||
|
let top_right = {
|
||||||
|
x: self.x + range * Math.cos(degrees),
|
||||||
|
y: self.y + range * Math.sin(degrees)
|
||||||
|
}
|
||||||
|
degrees = (self.rotation + 135) * (Math.PI / 180);
|
||||||
|
let top_left = {
|
||||||
|
x: self.x + range * Math.cos(degrees),
|
||||||
|
y: self.y + range * Math.sin(degrees)
|
||||||
|
}
|
||||||
|
degrees = (self.rotation + 225) * (Math.PI / 180);
|
||||||
|
let bottom_left = {
|
||||||
|
x: self.x + range * Math.cos(degrees),
|
||||||
|
y: self.y + range * Math.sin(degrees)
|
||||||
|
}
|
||||||
|
degrees = (self.rotation + 315) * (Math.PI / 180);
|
||||||
|
let bottom_right = {
|
||||||
|
x: self.x + range * Math.cos(degrees),
|
||||||
|
y: self.y + range * Math.sin(degrees)
|
||||||
|
}
|
||||||
|
let turf = [
|
||||||
|
[top_right.x, top_right.y],
|
||||||
|
[top_left.x, top_left.y],
|
||||||
|
[bottom_left.x, bottom_left.y],
|
||||||
|
[bottom_right.x, bottom_right.y]
|
||||||
|
]
|
||||||
|
if (inside([player.x, player.y], turf)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var gangturfs = [];
|
||||||
|
|
||||||
|
mp.events.add('playerEnterColshape', (shape) => {
|
||||||
|
let turfEntered;
|
||||||
|
gangturfs.forEach(function (turf) {
|
||||||
|
if (turf.isTurfArea(shape) == true) {
|
||||||
|
turfEntered = turf;
|
||||||
|
turfEntered.enter()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
mp.events.add('playerExitColshape', (shape) => {
|
||||||
|
let turfExitted;
|
||||||
|
gangturfs.forEach(function (turf) {
|
||||||
|
if (turf.isTurfArea(shape) == true) {
|
||||||
|
turfExitted = turf;
|
||||||
|
turfExitted.leave()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
mp.events.add('render', () => {
|
||||||
|
gangturfs.forEach(function (turf, id) {
|
||||||
|
turf.render();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
function clearBlips() {
|
||||||
|
mp.game.gameplay.setThisScriptCanRemoveBlipsCreatedByAnyScript(true);
|
||||||
|
var x = 0;
|
||||||
|
let last_blip = mp.game.invoke(Natives.GET_FIRST_BLIP_INFO_ID, 5);
|
||||||
|
|
||||||
|
while (mp.game.invoke(Natives.DOES_BLIP_EXIST, last_blip)) {
|
||||||
|
mp.game.ui.removeBlip(last_blip);
|
||||||
|
last_blip = mp.game.invoke(Natives.GET_NEXT_BLIP_INFO_ID, 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mp.events.add('GangAreas:Create', (turfsJSON) => {
|
||||||
|
var turfs = JSON.parse(turfsJSON);
|
||||||
|
clearBlips();
|
||||||
|
if (turfs.length > 0) {
|
||||||
|
gangturfs = [];
|
||||||
|
turfs.forEach(function (turf) {
|
||||||
|
if (turf.Id != undefined) {
|
||||||
|
gangturfs[gangturfs.length] = new Gangturf(turf.Name, turf.Id, turf.X, turf.Y, turf.Range, turf.Color, turf.Rotation, turf.Owner);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
31
ReallifeGamemode.Database/Entities/Turfs.cs
Normal file
31
ReallifeGamemode.Database/Entities/Turfs.cs
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
using GTANetworkAPI;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ReallifeGamemode.Database.Entities
|
||||||
|
{
|
||||||
|
public class Turfs
|
||||||
|
{
|
||||||
|
[Key]
|
||||||
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[ForeignKey("Faction")]
|
||||||
|
public int? FactionId { get; set; }
|
||||||
|
public static Faction Faction { get; set; }
|
||||||
|
|
||||||
|
public string Owner { get; set; }
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
public int X { get; set; }
|
||||||
|
public int Y { get; set; }
|
||||||
|
public int Rotation { get; set; }
|
||||||
|
public int Range { get; set; }
|
||||||
|
public int Color { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
1384
ReallifeGamemode.Database/Migrations/20191129201024_Turfs.Designer.cs
generated
Normal file
1384
ReallifeGamemode.Database/Migrations/20191129201024_Turfs.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
37
ReallifeGamemode.Database/Migrations/20191129201024_Turfs.cs
Normal file
37
ReallifeGamemode.Database/Migrations/20191129201024_Turfs.cs
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
namespace ReallifeGamemode.Database.Migrations
|
||||||
|
{
|
||||||
|
public partial class Turfs : Migration
|
||||||
|
{
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Turfs",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Id = table.Column<int>(nullable: false)
|
||||||
|
.Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
|
||||||
|
FactionId = table.Column<int>(nullable: true),
|
||||||
|
Owner = table.Column<string>(nullable: true),
|
||||||
|
Name = table.Column<string>(nullable: true),
|
||||||
|
X = table.Column<int>(nullable: false),
|
||||||
|
Y = table.Column<int>(nullable: false),
|
||||||
|
Rotation = table.Column<float>(nullable: false),
|
||||||
|
Range = table.Column<float>(nullable: false),
|
||||||
|
Color = table.Column<int>(nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Turfs", x => x.Id);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Turfs");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -890,6 +890,32 @@ namespace ReallifeGamemode.Database.Migrations
|
|||||||
b.ToTable("TuningGarages");
|
b.ToTable("TuningGarages");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ReallifeGamemode.Database.Entities.Turfs", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<int>("Color");
|
||||||
|
|
||||||
|
b.Property<int?>("FactionId");
|
||||||
|
|
||||||
|
b.Property<string>("Name");
|
||||||
|
|
||||||
|
b.Property<string>("Owner");
|
||||||
|
|
||||||
|
b.Property<float>("Range");
|
||||||
|
|
||||||
|
b.Property<float>("Rotation");
|
||||||
|
|
||||||
|
b.Property<int>("X");
|
||||||
|
|
||||||
|
b.Property<int>("Y");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Turfs");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("ReallifeGamemode.Database.Entities.User", b =>
|
modelBuilder.Entity("ReallifeGamemode.Database.Entities.User", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
|
|||||||
@@ -122,5 +122,8 @@ namespace ReallifeGamemode.Database.Models
|
|||||||
//Driving/Bike/Flight School
|
//Driving/Bike/Flight School
|
||||||
public DbSet<Entities.SchoolVehicle> SchoolVehicles { get; set; }
|
public DbSet<Entities.SchoolVehicle> SchoolVehicles { get; set; }
|
||||||
|
|
||||||
|
//Gangwar
|
||||||
|
public DbSet<Entities.Turfs> Turfs { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ namespace ReallifeGamemode.Server.Events
|
|||||||
player.SetData("spec", true);
|
player.SetData("spec", true);
|
||||||
player.SetData("duty", false);
|
player.SetData("duty", false);
|
||||||
player.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney, 0);
|
player.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney, 0);
|
||||||
|
Gangwar.Gangwar.loadClient(player);
|
||||||
if (user.IsAdmin(AdminLevel.HEADADMIN) == true)
|
if (user.IsAdmin(AdminLevel.HEADADMIN) == true)
|
||||||
{
|
{
|
||||||
player.SetData("editmode", false);
|
player.SetData("editmode", false);
|
||||||
@@ -102,8 +102,6 @@ namespace ReallifeGamemode.Server.Events
|
|||||||
{
|
{
|
||||||
Jail.Check_PutBehindBars(player);
|
Jail.Check_PutBehindBars(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
player.TriggerEvent("draw", player.Name, player.Handle.Value);
|
player.TriggerEvent("draw", player.Name, player.Handle.Value);
|
||||||
|
|||||||
44
ReallifeGamemode.Server/Gangwar/Gangwar.cs
Normal file
44
ReallifeGamemode.Server/Gangwar/Gangwar.cs
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using GTANetworkAPI;
|
||||||
|
using System.Linq;
|
||||||
|
using ReallifeGamemode.Database.Models;
|
||||||
|
using ReallifeGamemode.Database.Entities;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace ReallifeGamemode.Server.Gangwar
|
||||||
|
{
|
||||||
|
public class Gangwar
|
||||||
|
{
|
||||||
|
public static Turf[] _loadedTurfs;
|
||||||
|
private static List<Turfs> turfs;
|
||||||
|
|
||||||
|
public static void loadTurfs()
|
||||||
|
{
|
||||||
|
_loadedTurfs = null;
|
||||||
|
using (var context = new DatabaseContext())
|
||||||
|
{
|
||||||
|
turfs = context.Turfs.Select(t => t).ToList();
|
||||||
|
List<Turf> turfing = new List<Turf>();
|
||||||
|
foreach (var t in turfs)
|
||||||
|
{
|
||||||
|
Turf newTurf = new Turf(t.Id, t.Name, t.Color, t.Owner);
|
||||||
|
turfing.Add(newTurf);
|
||||||
|
}
|
||||||
|
_loadedTurfs = turfing.ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void loadClient(Client client)
|
||||||
|
{
|
||||||
|
client.TriggerEvent("GangAreas:Create", JsonConvert.SerializeObject(turfs.ToArray()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Turf[] getTurfs()
|
||||||
|
{
|
||||||
|
return _loadedTurfs;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -83,11 +83,23 @@ namespace ReallifeGamemode.Server.Gangwar
|
|||||||
{
|
{
|
||||||
Client[] owners = this.playerInside.Where(c => c.GetUser().Faction.Name == this.Owner ).ToArray();
|
Client[] owners = this.playerInside.Where(c => c.GetUser().Faction.Name == this.Owner ).ToArray();
|
||||||
Client[] attackers = this.playerInside.Where(c => c.GetUser().Faction.Name == this.Attacker).ToArray();
|
Client[] attackers = this.playerInside.Where(c => c.GetUser().Faction.Name == this.Attacker).ToArray();
|
||||||
|
/*
|
||||||
if (owners.Length > attackers.Length)
|
if (owners.Length > attackers.Length)
|
||||||
this.Att_Score -= owners.Length - attackers.Length;
|
this.Att_Score -= owners.Length - attackers.Length;
|
||||||
if(owners.Length < attackers.Length)
|
if(owners.Length < attackers.Length)
|
||||||
this.Def_Score -= attackers.Length - owners.Length;
|
this.Def_Score -= attackers.Length - owners.Length;
|
||||||
|
*/
|
||||||
|
foreach (Client playerInArea in this.playerInside)
|
||||||
|
{
|
||||||
|
playerInArea.TriggerEvent("CLIENT:Turf_Update", this.TurfID, this.status, this.Owner, this.Attacker, this.Color, this.Att_Score, this.Def_Score);
|
||||||
|
}
|
||||||
|
if(this.Def_Score <= 0)
|
||||||
|
{
|
||||||
|
this.takeOver(this.Attacker);
|
||||||
|
}else if(this.Att_Score <= 0)
|
||||||
|
{
|
||||||
|
this.takeOver(this.Owner);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void enter(Client client)
|
public void enter(Client client)
|
||||||
@@ -108,5 +120,32 @@ namespace ReallifeGamemode.Server.Gangwar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void takeOver(string FactionName)
|
||||||
|
{
|
||||||
|
this.timer.Stop();
|
||||||
|
this.timer = null;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void attack(Client client)
|
||||||
|
{
|
||||||
|
if(this.status == "normal")
|
||||||
|
{
|
||||||
|
if(this.timer != null)
|
||||||
|
{
|
||||||
|
this.timer.Stop();
|
||||||
|
this.timer = null;
|
||||||
|
}
|
||||||
|
this.Attacker = client.GetUser().Faction.Name;
|
||||||
|
this.status = "attack";
|
||||||
|
foreach(Client playerInArea in this.playerInside)
|
||||||
|
{
|
||||||
|
playerInArea.TriggerEvent("CLIENT:Turf_Update", this.TurfID, this.status, this.Owner, this.Attacker, this.Color, this.Att_Score, this.Def_Score);
|
||||||
|
}
|
||||||
|
this.TurfTick();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ namespace ReallifeGamemode.Server
|
|||||||
HouseManager.LoadHouses();
|
HouseManager.LoadHouses();
|
||||||
DrivingSchool.DrivingSchool.Setup();
|
DrivingSchool.DrivingSchool.Setup();
|
||||||
PlaneSchool.Setup();
|
PlaneSchool.Setup();
|
||||||
|
Gangwar.Gangwar.loadTurfs();
|
||||||
|
|
||||||
TempBlip tempBlip = new TempBlip()
|
TempBlip tempBlip = new TempBlip()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -723,8 +723,15 @@ namespace ReallifeGamemode.Server.Managers
|
|||||||
Vector3 lastPosition = v.Position;
|
Vector3 lastPosition = v.Position;
|
||||||
if (lastPositions.ContainsKey(v.Handle)) lastPosition = lastPositions[v.Handle];
|
if (lastPositions.ContainsKey(v.Handle)) lastPosition = lastPositions[v.Handle];
|
||||||
lastPositions[v.Handle] = v.Position;
|
lastPositions[v.Handle] = v.Position;
|
||||||
|
double distanceDriven;
|
||||||
double distanceDriven = v.HasSharedData("drivenDistance") ? (double)v.GetSharedData("drivenDistance") : 0D;
|
try
|
||||||
|
{
|
||||||
|
distanceDriven = v.HasSharedData("drivenDistance") ? (double)v.GetSharedData("drivenDistance") : 0D;
|
||||||
|
}
|
||||||
|
catch(Microsoft.CSharp.RuntimeBinder.RuntimeBinderException ex)
|
||||||
|
{
|
||||||
|
distanceDriven = (double)0;
|
||||||
|
}
|
||||||
|
|
||||||
double distance = lastPosition.DistanceTo(v.Position) / 1000.0;
|
double distance = lastPosition.DistanceTo(v.Position) / 1000.0;
|
||||||
if (distance > 0.2) return;
|
if (distance > 0.2) return;
|
||||||
|
|||||||
Reference in New Issue
Block a user