Merged group system into develop

This commit is contained in:
hydrant
2019-05-09 15:23:36 +02:00
68 changed files with 2447 additions and 565 deletions

View File

@@ -14,9 +14,9 @@ import moneyFormat from '../moneyformat';
export default function carDealer() {
var shopMenu;
var shopMenu: NativeUI.Menu;
mp.events.add('ShopVehicle_OpenMenu', (businessName, price) => {
mp.events.add('ShopVehicle_OpenMenu', (businessName, price, availableOptions: string[]) => {
var veh = mp.players.local.vehicle;
if (!veh) return;
mp.gui.chat.show(false);
@@ -34,6 +34,10 @@ export default function carDealer() {
priceItem.SetRightLabel("~g~$~s~ " + moneyFormat(price));
shopMenu.AddItem(priceItem);
var targetsCollection = new ItemsCollection(availableOptions);
var targetItem = new UIMenuListItem("Kaufen f<>r", "W<>hle den Besitzer aus", targetsCollection);
shopMenu.AddItem(targetItem);
var saveItem = new UIMenuItem("Kaufen");
saveItem.BackColor = new Color(0, 100, 0);
saveItem.HighlightedBackColor = new Color(0, 150, 0);
@@ -48,7 +52,7 @@ export default function carDealer() {
if (item === cancelItem) {
shopMenu.Close();
} else if (item === saveItem) {
mp.events.callRemote("VehShop_BuyVehicle");
mp.events.callRemote("VehShop_BuyVehicle", targetItem.SelectedValue);
shopMenu.Close();
}
});

View File

@@ -0,0 +1,70 @@
import * as NativeUI from 'NativeUI';
const Menu = NativeUI.Menu;
const UIMenuItem = NativeUI.UIMenuItem;
const UIMenuListItem = NativeUI.UIMenuListItem;
const UIMenuCheckboxItem = NativeUI.UIMenuCheckboxItem;
const BadgeStyle = NativeUI.BadgeStyle;
const Point = NativeUI.Point;
const ItemsCollection = NativeUI.ItemsCollection;
const Color = NativeUI.Color;
import InputHelper from '../inputhelper';
export default function (globalData: GlobalData) {
var keyBound = false;
var menu: NativeUI.Menu = null;
mp.events.add("SERVER:CityHall_ShowHelpText", () => {
mp.game.ui.setTextComponentFormat('STRING');
mp.game.ui.addTextComponentSubstringPlayerName('Drücke ~INPUT_CONTEXT~, um das Stadthallen-Menü zu öffnen');
mp.game.ui.displayHelpTextFromStringLabel(0, true, true, -1);
if (!keyBound) {
keyBound = true;
mp.keys.bind(0x45, false, keyPressHandler);
}
});
mp.events.add("SERVER:CityHall_ClearHelpText", () => {
mp.game.ui.clearHelp(false);
if (keyBound) {
mp.keys.unbind(0x45, false, keyPressHandler);
keyBound = false;
}
});
function keyPressHandler(): void {
if (globalData.InChat || globalData.Interaction) return;
menu = new Menu("Stadthalle", "", new Point(50, 50), null, null);
globalData.Interaction = true;
mp.gui.chat.show(false);
var groupCreateItem = new UIMenuItem("Gruppe erstellen", "Erstelle eine neue Gruppe");
groupCreateItem.SetRightLabel("~g~50.000$");
menu.AddItem(groupCreateItem);
var cancelItem = new UIMenuItem("Schließen");
cancelItem.BackColor = new Color(213, 0, 0);
cancelItem.HighlightedBackColor = new Color(229, 57, 53);
menu.AddItem(cancelItem);
menu.ItemSelect.on((item, index) => {
if (index === 0) { // Gruppe
var input = new InputHelper("Wie soll die Gruppe heißen?");
input.show();
input.getValue((name: string) => {
mp.events.callRemote("CLIENT:CityHall_CreateGroup", name);
});
}
menu.Close();
});
menu.MenuClose.on(() => {
globalData.Interaction = false;
mp.gui.chat.show(true);
});
}
}

View File

@@ -0,0 +1,133 @@
import * as NativeUI from 'NativeUI';
import InputHelper from '../inputhelper';
const Menu = NativeUI.Menu;
const UIMenuItem = NativeUI.UIMenuItem;
const UIMenuListItem = NativeUI.UIMenuListItem;
const UIMenuCheckboxItem = NativeUI.UIMenuCheckboxItem;
const BadgeStyle = NativeUI.BadgeStyle;
const Point = NativeUI.Point;
const ItemsCollection = NativeUI.ItemsCollection;
const Color = NativeUI.Color;
export default function (globalData: GlobalData) {
var menuClose = false;
var accountItem = new UIMenuItem("Account", "Account Informationen");
var factionItem = new UIMenuItem("Fraktion", "Verwalte deine Fraktion");
var groupItem = new UIMenuItem("Gruppe", "Verwalte deine Gruppe");
mp.events.add("SERVER:InteractionMenu_OpenMenu", (accountDataJson: string, faction: string, group: string, factionInvite: boolean, groupInvite: boolean) => {
var accountData: AccountData = JSON.parse(accountDataJson);
var menu = getInteractionMenu();
menu.AddItem(accountItem);
menu.BindMenuToItem(getAccountMenu(accountData), accountItem);
if (faction) {
factionItem.SetRightLabel(faction);
menu.AddItem(factionItem);
menu.BindMenuToItem(getFactionMenu(faction, menu), factionItem);
}
if (group) {
groupItem.SetRightLabel(group);
menu.AddItem(groupItem);
menu.BindMenuToItem(getGroupMenu(group), groupItem);
}
var items: Array<string> = new Array<string>();
if (factionInvite) items.push("Fraktion");
if (groupInvite) items.push("Gruppe");
var acceptItem: NativeUI.UIMenuListItem;
if (items.length !== 0) {
acceptItem = new UIMenuListItem("Einladung annehmen", "", new ItemsCollection(items));
menu.AddItem(acceptItem);
}
menu.Visible = true;
mp.gui.chat.show(false);
globalData.Interaction = true;
menu.ItemSelect.on((item, index) => {
if (item === acceptItem) {
mp.events.callRemote("CLIENT:InteractionMenu_AcceptInvite", acceptItem.SelectedValue);
}
});
menu.MenuClose.on(() => {
globalData.Interaction = false;
mp.gui.chat.show(true);
})
});
function getInteractionMenu(): NativeUI.Menu {
return new Menu("Hauptmenü", "Interaktionen | " + mp.players.local.name, new Point(50, 50), null, null);
}
function getAccountMenu(data: AccountData): NativeUI.Menu {
var accountMenu = new NativeUI.Menu("Account", mp.players.local.name, new Point(50, 50), null, null);
var menuItem = new UIMenuItem("Fraktion");
menuItem.SetRightLabel(data.faction);
accountMenu.AddItem(menuItem);
menuItem = new UIMenuItem("Fraktionsrang");
menuItem.SetRightLabel(data.factionRank);
accountMenu.AddItem(menuItem);
menuItem = new UIMenuItem("Gruppe");
menuItem.SetRightLabel(data.group);
accountMenu.AddItem(menuItem);
menuItem = new UIMenuItem("Gruppenrang");
menuItem.SetRightLabel(data.groupRank);
accountMenu.AddItem(menuItem);
menuItem = new UIMenuItem("Registrierungsdatum");
menuItem.SetRightLabel(data.regDate);
accountMenu.AddItem(menuItem);
menuItem = new UIMenuItem("Adminrang");
menuItem.SetRightLabel(data.adminLevel);
accountMenu.AddItem(menuItem);
accountMenu.Visible = false;
return accountMenu;
}
function getFactionMenu(faction: string, parentMenu: NativeUI.Menu): NativeUI.Menu {
var factionMenu = new NativeUI.Menu("Fraktion", faction, new Point(50, 50), null, null);
factionMenu.AddItem(new UIMenuItem("Spieler einladen"));
factionMenu.AddItem(new UIMenuItem("Spieler rauswerfen"));
factionMenu.Visible = false;
factionMenu.ItemSelect.on((item, index) => {
if (index === 0) { // Inviten
var input = new InputHelper("Welchen Spieler möchtest du inviten (Name / ID)?");
input.show();
input.getValue(name => {
mp.events.callRemote("CLIENT:InteractionMenu_InviteFaction", name);
parentMenu.Close();
});
} else if (index === 1) { // Uninviten
}
})
return factionMenu;
}
function getGroupMenu(group: string): NativeUI.Menu {
var groupMenu = new NativeUI.Menu("Gruppe", group, new Point(50, 50), null, null);
groupMenu.AddItem(new UIMenuItem("Spieler einladen"));
groupMenu.AddItem(new UIMenuItem("Spieler rauswerfen"));
groupMenu.Visible = false;
return groupMenu;
}
}

View File

@@ -1,135 +1,131 @@
export default function freeCam() {
const controlsIds = {
F5: 327,
W: 32, // 232
S: 33, // 31, 219, 233, 268, 269
A: 34, // 234
D: 35, // 30, 218, 235, 266, 267
Space: 321,
LCtrl: 326
export default function () {
var getNormalizedVector = function (vector) {
var mag = Math.sqrt(
vector.x * vector.x + vector.y * vector.y + vector.z * vector.z
);
vector.x = vector.x / mag;
vector.y = vector.y / mag;
vector.z = vector.z / mag;
return vector;
};
var global = {
gameplayCam: undefined,
fly: undefined
var getCrossProduct = function (v1, v2) {
var vector = new mp.Vector3(0, 0, 0);
vector.x = v1.y * v2.z - v1.z * v2.y;
vector.y = v1.z * v2.x - v1.x * v2.z;
vector.z = v1.x * v2.y - v1.y * v2.x;
return vector;
};
global.fly = {
flying: false, f: 2.0, w: 2.0, h: 2.0, point_distance: 1000, l:0
var bindVirtualKeys = {
F2: 0x71
};
global.gameplayCam = mp.cameras.new('gameplay');
mp.game.graphics.notify('~r~Fly script loaded!');
mp.game.graphics.notify('~r~F5~w~ - enable/disable\n~r~F5+Space~w~ - disable without warping to ground\n~r~W/A/S/D/Space/LCtrl~w~ - move');
mp.game.graphics.notify('~r~/savecam~w~ - save Camera position.');
let direction = null;
let coords = null;
function pointingAt(distance) {
const farAway = new mp.Vector3((direction.x * distance) + (coords.x), (direction.y * distance) + (coords.y), (direction.z * distance) + (coords.z));
const result = mp.raycasting.testPointToPoint(coords, farAway, 16);
if (result === undefined) {
return 'undefined';
}
return result;
}
mp.events.add('render', () => {
const controls = mp.game.controls;
const fly = global.fly;
direction = global.gameplayCam.getDirection();
coords = global.gameplayCam.getCoord();
coords.x = coords.x.toFixed(2);
coords.y = coords.y.toFixed(2);
coords.z = coords.z.toFixed(2);
direction.x = direction.x.toFixed(2);
direction.y = direction.y.toFixed(2);
direction.z = direction.z.toFixed(2);
//mp.game.graphics.drawText(`Coords: ${JSON.stringify(coords)}`, [0.5, 0.005], {
// font: 0,
// color: [255, 255, 255, 185],
// scale: [0.3, 0.3],
// outline: true,
// centre: false
//});
if (controls.isControlJustPressed(0, controlsIds.F5)) {
fly.flying = !fly.flying;
const player = mp.players.local;
player.setInvincible(fly.flying);
player.freezePosition(fly.flying);
player.setAlpha(fly.flying ? 0 : 255);
if (!fly.flying && !controls.isControlPressed(0, controlsIds.Space)) {
const position = mp.players.local.position;
position.z = mp.game.gameplay.getGroundZFor3dCoord(position.x, position.y, position.z, 0.0, false);
mp.players.local.setCoordsNoOffset(position.x, position.y, position.z, 0, 0, 0);
}
mp.game.graphics.notify(fly.flying ? 'Fly: ~g~Enabled' : 'Fly: ~r~Disabled');
} else if (fly.flying) {
let updated = false;
const position = mp.players.local.position;
if (controls.isControlPressed(0, controlsIds.W)) {
if (fly.f < 8.0) { fly.f *= 1.025; }
position.x += direction.x * fly.f;
position.y += direction.y * fly.f;
position.z += direction.z * fly.f;
updated = true;
} else if (controls.isControlPressed(0, controlsIds.S)) {
if (fly.f < 8.0) { fly.f *= 1.025; }
position.x -= direction.x * fly.f;
position.y -= direction.y * fly.f;
position.z -= direction.z * fly.f;
updated = true;
} else {
fly.f = 2.0;
}
if (controls.isControlPressed(0, controlsIds.A)) {
if (fly.l < 8.0) { fly.l *= 1.025; }
position.x += (-direction.y) * fly.l;
position.y += direction.x * fly.l;
updated = true;
} else if (controls.isControlPressed(0, controlsIds.D)) {
if (fly.l < 8.0) { fly.l *= 1.05; }
position.x -= -direction.y * fly.l;
position.y -= direction.x * fly.l;
updated = true;
} else {
fly.l = 2.0;
}
if (controls.isControlPressed(0, controlsIds.Space)) {
if (fly.h < 8.0) { fly.h *= 1.025; }
position.z += fly.h;
updated = true;
} else if (controls.isControlPressed(0, controlsIds.LCtrl)) {
if (fly.h < 8.0) { fly.h *= 1.05; }
position.z -= fly.h;
updated = true;
} else {
fly.h = 2.0;
}
if (updated) {
mp.players.local.setCoordsNoOffset(position.x, position.y, position.z, 0, 0, 0);
}
var bindASCIIKeys = {
Q: 69,
E: 81,
LCtrl: 17,
Shift: 16
};
mp.game.graphics.notify('~r~NoClip ~w~by ~b~Morbo');
var isNoClip = false;
var noClipCamera;
var shiftModifier = false;
var controlModifier = false;
var localPlayer = mp.players.local;
mp.keys.bind(bindVirtualKeys.F2, true, function () {
isNoClip = !isNoClip;
mp.game.ui.displayRadar(!isNoClip);
if (isNoClip) {
startNoClip();
} else {
stopNoClip();
}
});
function startNoClip() {
mp.game.graphics.notify('NoClip ~g~activated');
var camPos = new mp.Vector3(
localPlayer.position.x,
localPlayer.position.y,
localPlayer.position.z
);
var camRot = mp.game.cam.getGameplayCamRot(2);
noClipCamera = mp.cameras.new('default', camPos, camRot, 45);
noClipCamera.setActive(true);
mp.game.cam.renderScriptCams(true, false, 0, true, false);
localPlayer.freezePosition(true);
localPlayer.setInvincible(true);
localPlayer.setVisible(false, false);
localPlayer.setCollision(false, false);
}
function stopNoClip() {
mp.game.graphics.notify('NoClip ~r~disabled');
if (noClipCamera) {
localPlayer.position = noClipCamera.getCoord();
localPlayer.setHeading(noClipCamera.getRot(2).z);
noClipCamera.destroy(true);
noClipCamera = null;
}
mp.game.cam.renderScriptCams(false, false, 0, true, false);
localPlayer.freezePosition(false);
localPlayer.setInvincible(false);
localPlayer.setVisible(true, false);
localPlayer.setCollision(true, false);
}
mp.events.add('render', function () {
if (!noClipCamera || mp.gui.cursor.visible) {
return;
}
controlModifier = mp.keys.isDown(bindASCIIKeys.LCtrl);
shiftModifier = mp.keys.isDown(bindASCIIKeys.Shift);
var rot = noClipCamera.getRot(2);
var fastMult = 1;
var slowMult = 1;
if (shiftModifier) {
fastMult = 3;
} else if (controlModifier) {
slowMult = 0.5;
}
var rightAxisX = mp.game.controls.getDisabledControlNormal(0, 220);
var rightAxisY = mp.game.controls.getDisabledControlNormal(0, 221);
var leftAxisX = mp.game.controls.getDisabledControlNormal(0, 218);
var leftAxisY = mp.game.controls.getDisabledControlNormal(0, 219);
var pos = noClipCamera.getCoord();
var rr = noClipCamera.getDirection();
var vector = new mp.Vector3(0, 0, 0);
vector.x = rr.x * leftAxisY * fastMult * slowMult;
vector.y = rr.y * leftAxisY * fastMult * slowMult;
vector.z = rr.z * leftAxisY * fastMult * slowMult;
var upVector = new mp.Vector3(0, 0, 1);
var rightVector = getCrossProduct(
getNormalizedVector(rr),
getNormalizedVector(upVector)
);
rightVector.x *= leftAxisX * 0.5;
rightVector.y *= leftAxisX * 0.5;
rightVector.z *= leftAxisX * 0.5;
var upMovement = 0.0;
if (mp.keys.isDown(bindASCIIKeys.Q)) {
upMovement = 0.5;
}
var downMovement = 0.0;
if (mp.keys.isDown(bindASCIIKeys.E)) {
downMovement = 0.5;
}
mp.players.local.position = new mp.Vector3(
pos.x + vector.x + 1,
pos.y + vector.y + 1,
pos.z + vector.z + 1
);
mp.players.local.heading = rr.z;
noClipCamera.setCoord(
pos.x - vector.x + rightVector.x,
pos.y - vector.y + rightVector.y,
pos.z - vector.z + rightVector.z + upMovement - downMovement
);
noClipCamera.setRot(
rot.x + rightAxisY * -5.0,
0.0,
rot.z + rightAxisX * -5.0,
2
);
});
}

View File

@@ -6,6 +6,15 @@
LoggedIn: boolean
}
declare interface AccountData {
regDate: string;
adminLevel: string;
faction: string;
factionRank: string;
group: string;
groupRank: string;
}
declare interface FactionRanks {
factionId: number,
ranks: FactionRank[]

View File

@@ -12,6 +12,9 @@ let globalData: GlobalData = {
LoggedIn: false
};
import cityHall from './Gui/cityhall';
cityHall(globalData);
import adminSpeed from './admin/aspeed';
adminSpeed();
@@ -69,6 +72,9 @@ worldInteraction();
import playerInteraction from './Interaction/playerinteraction';
playerInteraction(globalData);
import interactionMenu from './Interaction/interactionmenu';
interactionMenu(globalData);
import Login from './Login/main';
Login(globalData);

View File

@@ -1,8 +1,8 @@
export default class InputHelper {
title: string;
value: string;
created: boolean;
browser: BrowserMp;
private title: string;
private value: string;
private created: boolean;
private browser: BrowserMp;
constructor(title: string) {
this.title = title;
@@ -23,7 +23,7 @@
mp.events.add('render', this.disableControls);
}
disableControls() {
private disableControls() {
for (var i = 0; i <= 33; i++) {
mp.game.controls.disableAllControlActions(i);
}
@@ -35,7 +35,7 @@
this.browser = mp.browsers.new('package://assets/html/inputhelper/index.html');
}
finish() {
private finish() {
if (this.browser) {
mp.events.remove('cef_inputhelper_sendvalue');
mp.events.remove('cef_request_title');
@@ -45,16 +45,16 @@
}
}
cefTitleCall() {
private cefTitleCall() {
this.browser.execute(`setTitle('${this.title}')`);
}
cefCallback(val) {
private cefCallback(val) {
this.value = val;
this.finish();
}
valueGetter() {
private valueGetter(): Promise<string> {
return new Promise(resolve => {
setInterval(() => {
if (this.value !== undefined) resolve(this.value);

View File

@@ -349,8 +349,9 @@
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
},
"NativeUI": {
"version": "git+https://github.com/sprayzcs/RageMP-NativeUI.git#0ca40b56d9124056ceb9ca016d209aa4e3ecfeb3",
"from": "git+https://github.com/sprayzcs/RageMP-NativeUI.git#master"
"version": "https://github.com/sprayzcs/RageMP-NativeUI/tarball/master",
"integrity": "sha512-iG7Cym2lnzuiwNBY6ATvSoaQ5Pfs4p8hW0s2EYL7MhPYrCpVhr/5zZOvQHijTV4gv5bipPtnuT0c1k4pkrlFZA==",
"dev": true
},
"acorn": {
"version": "6.1.1",
@@ -1565,13 +1566,11 @@
},
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"optional": true
"bundled": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -1584,18 +1583,15 @@
},
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"optional": true
"bundled": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"optional": true
"bundled": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"optional": true
"bundled": true
},
"core-util-is": {
"version": "1.0.2",
@@ -1698,8 +1694,7 @@
},
"inherits": {
"version": "2.0.3",
"bundled": true,
"optional": true
"bundled": true
},
"ini": {
"version": "1.3.5",
@@ -1709,7 +1704,6 @@
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -1722,20 +1716,17 @@
"minimatch": {
"version": "3.0.4",
"bundled": true,
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"bundled": true,
"optional": true
"bundled": true
},
"minipass": {
"version": "2.3.5",
"bundled": true,
"optional": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
@@ -1752,7 +1743,6 @@
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
@@ -1825,8 +1815,7 @@
},
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"optional": true
"bundled": true
},
"object-assign": {
"version": "4.1.1",
@@ -1836,7 +1825,6 @@
"once": {
"version": "1.4.0",
"bundled": true,
"optional": true,
"requires": {
"wrappy": "1"
}
@@ -1942,7 +1930,6 @@
"string-width": {
"version": "1.0.2",
"bundled": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",

View File

@@ -3,13 +3,11 @@
"version": "1.0.0",
"devDependencies": {
"@types/ragemp-c": "git+https://github.com/sprayzcs/types-ragemp-c.git#master",
"NativeUI": "https://github.com/sprayzcs/RageMP-NativeUI/tarball/master",
"copy-webpack-plugin": "^5.0.1",
"uglifyjs-webpack-plugin": "^2.1.2"
},
"dependencies": {
"uglifyjs-webpack-plugin": "^2.1.2",
"@babel/core": "^7.3.4",
"@types/node": "^11.9.5",
"NativeUI": "git+https://github.com/sprayzcs/RageMP-NativeUI.git#master",
"babel-loader": "^8.0.5",
"ts-loader": "^5.3.3",
"typescript": "^3.3.3333",
@@ -19,5 +17,10 @@
"scripts": {
"watch": "webpack --watch --config webpack.config.development.js",
"build:server": "webpack --config webpack.config.build.js"
},
"-vs-binding": {
"ProjectOpened": [
"watch"
]
}
}