Chirurgen aufgeräumt, buggt aber noch hart

This commit is contained in:
VegaZ
2021-04-28 21:15:04 +02:00
parent 0e1df9cf22
commit 36f2517844
2 changed files with 402 additions and 528 deletions

View File

@@ -384,7 +384,7 @@ export default function charCreator(globalData: IGlobalData) {
let features = []; let features = [];
for (let i = -1.0; i <= 1.01; i += 0.01) features.push(i.toFixed(2)); for (let i = -1.0; i <= 1.01; i += 0.01) features.push(i.toFixed(2));
let creatorFeaturesMenu = new Menu("Gesichtsz\u00fcge", "", new Point(0, screenRes.y / 3), null, null); let creatorFeaturesMenu = new Menu("Gesichtsmerkmale", "", new Point(0, screenRes.y / 3), null, null);
for (let i = 0; i < Data.featureNames.length; i++) { for (let i = 0; i < Data.featureNames.length; i++) {
let tempFeatureItem = new UIMenuListItem(Data.featureNames[i], "", new ItemsCollection(features)); let tempFeatureItem = new UIMenuListItem(Data.featureNames[i], "", new ItemsCollection(features));
@@ -394,7 +394,7 @@ export default function charCreator(globalData: IGlobalData) {
} }
creatorFeaturesMenu.AddItem(new UIMenuItem("Zuf\u00e4llig", "~r~Zuf\u00e4llige Gesichtsz\u00fcge.")); creatorFeaturesMenu.AddItem(new UIMenuItem("Zuf\u00e4llig", "~r~Zuf\u00e4llige Gesichtsz\u00fcge."));
creatorFeaturesMenu.AddItem(new UIMenuItem("Zur\u00fccksetzen", "~r~Setzt Gesichtsz\u00fcge zur\u00fcck.")); creatorFeaturesMenu.AddItem(new UIMenuItem("Zur\u00fccksetzen", "~r~Setzt Gesichtsmerkmale zurück."));
creatorFeaturesMenu.ItemSelect.on((item, index) => { creatorFeaturesMenu.ItemSelect.on((item, index) => {
switch (item.Text) { switch (item.Text) {

View File

@@ -21,158 +21,65 @@ const localPlayer = mp.players.local;
export default function charSurgery(globalData: IGlobalData) { export default function charSurgery(globalData: IGlobalData) {
var creatorHairMenu: NativeUI.Menu; var creatorCamera: CameraMp;
var newCharacter: PlayerCharacterData;
// color arrays
var hairColors = [];
for (var i = 0; i < Data.maxHairColor; i++) hairColors.push(i.toString());
var blushColors = [];
for (var i = 0; i < Data.maxBlushColor; i++) blushColors.push(i.toString());
var lipstickColors = [];
for (var i = 0; i < Data.maxLipstickColor; i++) lipstickColors.push(i.toString());
var characterData: PlayerCharacterData; var characterData: PlayerCharacterData;
function getRandomInt(min, max) { function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min; return Math.floor(Math.random() * (max - min + 1)) + min;
} }
function colorForOverlayIdx(index) { var creatorMainMenu: NativeUI.Menu;
let color; var debugString = [0, 0, 0, 0, 0];
switch (index) { mp.events.add("render", () => {
case 1: mp.game.graphics.drawText(debugString.toString(), [0.5, 0.1],
color = beardColorItem.Index; {
break; font: 4,
color: [255, 255, 255, 255],
scale: [0.5, 0.5],
outline: true,
centre: false
})
});
case 2: mp.events.add("toggleSurgery", (jsonCharacterData: string) => {
color = eyebrowColorItem.Index; if (!mp.cameras.exists(creatorCamera)) {
break; debugString[0] = 1;
characterData = JSON.parse(jsonCharacterData);
debugString[1] = 1;
loadCharacterData();
debugString[2] = 1;
creatorCamera = mp.cameras.new("creatorCamera", creatorCoords.camera, new mp.Vector3(0, 0, 0), 45);
creatorCamera.pointAtCoord(creatorCoords.cameraLookAt.x, creatorCoords.cameraLookAt.y, creatorCoords.cameraLookAt.z);
creatorCamera.setActive(true);
case 5: globalData.InMenu = true;
color = blushColorItem.Index; globalData.InMenu = true;
break; mp.gui.chat.show(false);
mp.game.ui.displayRadar(false);
case 8: mp.game.ui.displayHud(false);
color = lipstickColorItem.Index; localPlayer.clearTasksImmediately();
break; localPlayer.freezePosition(true);
mp.game.cam.renderScriptCams(true, false, 0, true, false);
case 10: debugString[3] = 1;
color = chestHairColorItem.Index; getCharacterMainMenu();
break;
default:
color = 0;
} }
});
return color;
}
function updateParents() {
localPlayer.setHeadBlendData(
// shape
Data.mothers[motherItem.Index],
Data.fathers[fatherItem.Index],
0,
// skin
Data.mothers[motherItem.Index],
Data.fathers[fatherItem.Index],
0,
// mixes
similarityItem.Index * 0.01,
skinSimilarityItem.Index * 0.01,
0.0,
false
);
}
function updateFaceFeature(index) {
localPlayer.setFaceFeature(index, parseFloat(featureItems[index].SelectedValue));
}
function updateAppearance(index) {
let overlayID = (appearanceItems[index].Index === 0) ? 255 : appearanceItems[index].Index - 1;
localPlayer.setHeadOverlay(index, overlayID, appearanceOpacityItems[index].Index * 0.01, colorForOverlayIdx(index), 0);
}
function updateHairAndColors() {
localPlayer.setComponentVariation(2, Data.hairList[currentGender][hairItem.Index].ID, 0, 2);
localPlayer.setHairColor(hairColorItem.Index, hairHighlightItem.Index);
localPlayer.setEyeColor(eyeColorItem.Index);
localPlayer.setHeadOverlayColor(1, 1, beardColorItem.Index, 0);
localPlayer.setHeadOverlayColor(2, 1, eyebrowColorItem.Index, 0);
localPlayer.setHeadOverlayColor(5, 2, blushColorItem.Index, 0);
localPlayer.setHeadOverlayColor(8, 2, lipstickColorItem.Index, 0);
localPlayer.setHeadOverlayColor(10, 1, chestHairColorItem.Index, 0);
}
function applyCreatorOutfit() {
if (currentGender === 0) {
localPlayer.setDefaultComponentVariation();
localPlayer.setComponentVariation(3, 15, 0, 2);
localPlayer.setComponentVariation(4, 21, 0, 2);
localPlayer.setComponentVariation(6, 34, 0, 2);
localPlayer.setComponentVariation(8, 15, 0, 2);
localPlayer.setComponentVariation(11, 15, 0, 2);
} else {
localPlayer.setDefaultComponentVariation();
localPlayer.setComponentVariation(3, 15, 0, 2);
localPlayer.setComponentVariation(4, 10, 0, 2);
localPlayer.setComponentVariation(6, 35, 0, 2);
localPlayer.setComponentVariation(8, 15, 0, 2);
localPlayer.setComponentVariation(11, 15, 0, 2);
}
}
function fillHairMenu() {
//hairItem = new UIMenuListItem("Haar", "Deine Haare", new ItemsCollection(Data.hairList[currentGender].map(h => h.Name)));
//creatorHairMenu.AddItem(hairItem);
//hairColorItem = new UIMenuListItem("Haarfarbe", "Deine Haarfarbe", new ItemsCollection(hairColors));
//creatorHairMenu.AddItem(hairColorItem);
//hairHighlightItem = new UIMenuListItem("Haarstr\u00e4hnen", "Farbe deiner Haarstr\u00e4hnen", new ItemsCollection(hairColors));
//creatorHairMenu.AddItem(hairHighlightItem);
eyebrowColorItem = new UIMenuListItem("Augenbrauen Farbe", "Farbe deiner Augenbrauen", new ItemsCollection(hairColors));
creatorHairMenu.AddItem(eyebrowColorItem);
beardColorItem = new UIMenuListItem("Farbe der Gesichtsbehaarung", "Farbe deiner Gesichtsbehaarung", new ItemsCollection(hairColors));
creatorHairMenu.AddItem(beardColorItem);
eyeColorItem = new UIMenuListItem("Augenfarbe", "Farbe deiner Augen", new ItemsCollection(Data.eyeColors));
creatorHairMenu.AddItem(eyeColorItem);
blushColorItem = new UIMenuListItem("Rouge", "Farbe des Rouges.", new ItemsCollection(blushColors));
creatorHairMenu.AddItem(blushColorItem);
lipstickColorItem = new UIMenuListItem("Lippenstift Farbe", "Farbe deines Lippenstifts.", new ItemsCollection(lipstickColors));
creatorHairMenu.AddItem(lipstickColorItem);
chestHairColorItem = new UIMenuListItem("Farbe der Brustbehaarung", "Farbe deiner Brustbehaarung", new ItemsCollection(hairColors));
creatorHairMenu.AddItem(chestHairColorItem);
creatorHairMenu.AddItem(new UIMenuItem("Zuf\u00e4llig", "~r~Zuf\u00e4lliges Haar & Farben"));
creatorHairMenu.AddItem(new UIMenuItem("Zur\u00fccksetzen", "~r~Zur\u00fccksetzen von Haar & Farben"));
}
function resetParentsMenu(refresh = false) {
fatherItem.Index = characterData.Father;
motherItem.Index = characterData.Mother;
similarityItem.Index = characterData.Similarity;//(currentGender === 0) ? 100 : 0;
skinSimilarityItem.Index = characterData.SkinSimilarity;//(currentGender === 0) ? 100 : 0;
updateParents();
if (refresh) creatorParentsMenu.RefreshIndex();
}
function resetFeaturesMenu(refresh = false) {
for (let i = 0; i < Data.featureNames.length; i++) {
featureItems[i].Index = loadedFeatures[i];
updateFaceFeature(i);
}
if (refresh) creatorFeaturesMenu.RefreshIndex();
}
var loadedFeatures; var loadedFeatures;
var loadedAppearence; var loadedAppearance;
var loadedAppearenceOpacity; var loadedAppearanceOpacity;
function loadCharacterData() { function loadCharacterData() {
loadedFeatures = [ loadedFeatures = [
@@ -197,7 +104,7 @@ export default function charSurgery(globalData: IGlobalData) {
characterData.ChinIndent, characterData.ChinIndent,
characterData.NeckWidth characterData.NeckWidth
]; ];
loadedAppearence = [ loadedAppearance = [
characterData.Blemishes, characterData.Blemishes,
characterData.FacialHair, characterData.FacialHair,
characterData.Eyebrows, characterData.Eyebrows,
@@ -210,7 +117,7 @@ export default function charSurgery(globalData: IGlobalData) {
characterData.Freckles, characterData.Freckles,
characterData.ChestHair characterData.ChestHair
]; ];
loadedAppearenceOpacity = [ loadedAppearanceOpacity = [
characterData.BlemishesOpacity, characterData.BlemishesOpacity,
characterData.FacialHairOpacity, characterData.FacialHairOpacity,
characterData.EyebrowsOpacity, characterData.EyebrowsOpacity,
@@ -226,368 +133,302 @@ export default function charSurgery(globalData: IGlobalData) {
} }
function getCharacterMainMenu(): NativeUI.Menu {
creatorMainMenu = new Menu("Chirurg", "", new Point(0, screenRes.y / 3), null, null);
creatorMainMenu.Visible = false;
var genderItem = new UIMenuListItem("Geschlecht", "~r~Dies setzt deine Einstellungen zurück.", new ItemsCollection(["Männlich", "Weiblich"]));
creatorMainMenu.AddItem(genderItem);
genderItem.Index = characterData.Gender == false ? 0 : 1;
var parentsItem = new UIMenuItem("Eltern", "Eltern des Charakters.");
creatorMainMenu.AddItem(parentsItem);
creatorMainMenu.BindMenuToItem(getParentsMenu(creatorMainMenu), parentsItem);
var featureItem = new UIMenuItem("Gesichtszüge", "Gesichtszüge des Charakters.")
creatorMainMenu.AddItem(featureItem);
creatorMainMenu.BindMenuToItem(getFeaturesMenu(creatorMainMenu), featureItem);
var appearanceItem = new UIMenuItem("Aussehen", "Aussehen des Charakters.")
creatorMainMenu.AddItem(appearanceItem);
creatorMainMenu.BindMenuToItem(getAppearanceMenu(creatorMainMenu), appearanceItem);
var hairAndColorItem = new UIMenuItem("Haar & Farben", "Haare & Farben deines Charakters.")
creatorMainMenu.AddItem(hairAndColorItem);
creatorMainMenu.BindMenuToItem(getHairAndColorMenu(creatorMainMenu), hairAndColorItem);
//Charakterdrehung
var angles = [];
for (var i = -180.0; i <= 180.0; i += 5.0) angles.push(i.toFixed(1));
var angleItem = new UIMenuListItem("Drehung", "", new ItemsCollection(angles));
creatorMainMenu.AddItem(angleItem);
var saveItem = new UIMenuItem("Erstellen", "Erstellt deinen Charakter.");
saveItem.BackColor = new Color(13, 71, 161);
saveItem.HighlightedBackColor = new Color(25, 118, 210);
creatorMainMenu.AddItem(saveItem);
creatorMainMenu.ListChange.on((item, listIndex) => {
if (item === genderItem) {
newCharacter.Gender = listIndex;
mp.events.callRemote("creator_GenderChange", listIndex);
setTimeout(() => {
localPlayer.clearTasksImmediately();
applyCreatorOutfit();
angleItem.Index = 0;
resetParents();
//resetParentsMenu(true);
//resetFeaturesMenu(true);
//resetAppearanceMenu(true);
}, 200);
} else if (item === angleItem) {
localPlayer.setHeading(parseFloat(angleItem.SelectedValue));
localPlayer.clearTasksImmediately();
}
});
creatorMainMenu.MenuClose.on(() => {
leaveCreator();
});
return creatorMainMenu;
}
function getParentsMenu(parentMenu: NativeUI.Menu): NativeUI.Menu {
var similarities = [];
for (var i = 0; i <= 100; i++) similarities.push(i + "%");
var creatorParentsMenu = new Menu("Eltern", "", new Point(0, screenRes.y / 3), null, null);
creatorParentsMenu.Visible = false;
var fatherItem = new UIMenuListItem("Vater", "Dem Charakter sein Vadda.", new ItemsCollection(Data.fatherNames));
creatorParentsMenu.AddItem(fatherItem);
fatherItem.Index = characterData.Father;
var motherItem = new UIMenuListItem("Mutter", "Dem Charakter seine Mudda.", new ItemsCollection(Data.motherNames));
creatorParentsMenu.AddItem(motherItem);
motherItem.Index = characterData.Mother;
var similarityItem = new UIMenuListItem("\u00c4hnlichkeit", "\u00c4hnlichkeit zu den Eltern.\n(niedriger = feminin, h\u00f6her = maskulin)", new ItemsCollection(similarities));
creatorParentsMenu.AddItem(similarityItem);
similarityItem.Index = characterData.Similarity;
var skinSimilarityItem = new UIMenuListItem("Hautfarbe", "Hautfarben \u00c4hnlichkeit zu den Eltern.\n(niedriger = Mutter, h\u00f6her = Vater)", new ItemsCollection(similarities));
creatorParentsMenu.AddItem(skinSimilarityItem);
skinSimilarityItem.Index = characterData.SkinSimilarity;
var resetItem = new UIMenuItem("Zurücksetzen", "~r~Setzt die Eltern zurück. :'(");
creatorParentsMenu.AddItem(resetItem);
creatorParentsMenu.ItemSelect.on((item, index) => {
switch (item) {
case resetItem:
fatherItem.Index = characterData.Father;
motherItem.Index = characterData.Mother;
similarityItem.Index = characterData.Similarity;//(currentGender === 0) ? 100 : 0;
skinSimilarityItem.Index = characterData.SkinSimilarity;//(currentGender === 0) ? 100 : 0;
resetParents();
//creatorParentsMenu.RefreshIndex();
break;
}
});
creatorParentsMenu.ListChange.on((item, listIndex) => {
updateParents();
});
creatorParentsMenu.RefreshIndex();
return creatorParentsMenu;
}
function updateParents() {
localPlayer.setHeadBlendData(
// shape
Data.mothers[newCharacter.Mother],
Data.fathers[newCharacter.Father],
0,
// skin
Data.mothers[newCharacter.Mother],
Data.fathers[newCharacter.Father],
0,
// mixes
newCharacter.Similarity * 0.01,
newCharacter.SkinSimilarity * 0.01,
0.0,
false
);
}
function resetParents() {
localPlayer.setHeadBlendData(
// shape
Data.mothers[characterData.Mother],
Data.fathers[characterData.Father],
0,
// skin
Data.mothers[characterData.Mother],
Data.fathers[characterData.Father],
0,
// mixes
characterData.Similarity * 0.01,
characterData.SkinSimilarity * 0.01,
0.0,
false
);
}
var featureItems = [];
function getFeaturesMenu(parentMenu: NativeUI.Menu): NativeUI.Menu {
var features = [];
for (var i = -1.0; i <= 1.01; i += 0.01) features.push(i.toFixed(2));
var creatorFeaturesMenu = new Menu("Gesichtsmerkmale", "", new Point(0, screenRes.y / 3), null, null);
creatorFeaturesMenu.Visible = false;
for (var i = 0; i < Data.featureNames.length; i++) {
var tempFeatureItem = new UIMenuListItem(Data.featureNames[i], "", new ItemsCollection(features));
tempFeatureItem.Index = 100;
featureItems.push(tempFeatureItem);
creatorFeaturesMenu.AddItem(tempFeatureItem);
tempFeatureItem.Index = loadedFeatures[i];
}
var resetItem = new UIMenuItem("Zurücksetzen", "~r~Setzt Gesichtsmerkmale zurück.");
creatorFeaturesMenu.AddItem(resetItem);
creatorFeaturesMenu.ItemSelect.on((item, index) => {
switch (item) {
case resetItem:
for (var i = 0; i < Data.featureNames.length; i++) {
featureItems[i].Index = loadedFeatures[i];
updateFaceFeature(i);
}
break;
}
});
creatorFeaturesMenu.ListChange.on((item, listIndex) => {
updateFaceFeature(featureItems.indexOf(item));
});
creatorFeaturesMenu.RefreshIndex();
return creatorFeaturesMenu;
}
function updateFaceFeature(index) {
localPlayer.setFaceFeature(index, parseFloat(featureItems[index].SelectedValue));
}
var appearanceItems = [];
var appearanceOpacityItems = [];
function getAppearanceMenu(parentMenu: NativeUI.Menu): NativeUI.Menu {
var opacities = [];
for (var i = 0; i <= 100; i++) opacities.push(i + "%");
var creatorAppearanceMenu = new Menu("Aussehen", "", new Point(0, screenRes.y / 3), null, null);
creatorAppearanceMenu.Visible = false;
for (var i = 0; i < Data.appearanceNames.length; i++) {
var items = [];
for (var j = 0, max = mp.game.ped.getNumHeadOverlayValues(i); j <= max; j++) items.push(Data.appearanceItemNames[i][j] === undefined ? j.toString() : Data.appearanceItemNames[i][j]);
var tempAppearanceItem = new UIMenuListItem(Data.appearanceNames[i], "", new ItemsCollection(items));
appearanceItems.push(tempAppearanceItem);
creatorAppearanceMenu.AddItem(tempAppearanceItem);
tempAppearanceItem.Index = loadedAppearance[i];
var tempAppearanceOpacityItem = new UIMenuListItem(Data.appearanceNames[i] + " Transparenz", "", new ItemsCollection(opacities));
tempAppearanceOpacityItem.Index = 100;
appearanceOpacityItems.push(tempAppearanceOpacityItem);
creatorAppearanceMenu.AddItem(tempAppearanceOpacityItem);
tempAppearanceOpacityItem.Index = loadedAppearanceOpacity[i];
}
var resetItem = new UIMenuItem("Zurücksetzen", "~r~Setzt das Aussehen zurück.");
creatorAppearanceMenu.AddItem(resetItem);
creatorAppearanceMenu.ItemSelect.on((item, index) => {
switch (item) {
case resetItem:
resetAppearanceMenu();
break;
}
});
creatorAppearanceMenu.ListChange.on((item, listIndex) => {
var idx = (creatorAppearanceMenu.CurrentSelection % 2 === 0) ? (creatorAppearanceMenu.CurrentSelection / 2) : Math.floor(creatorAppearanceMenu.CurrentSelection / 2);
updateAppearance(idx);
});
return creatorAppearanceMenu;
}
function updateAppearance(index) {
var overlayID = (appearanceItems[index].Index === 0) ? 255 : appearanceItems[index].Index - 1;
localPlayer.setHeadOverlay(index, overlayID, appearanceOpacityItems[index].Index * 0.01, colorForOverlayIdx(index), 0);
}
function resetAppearanceMenu(refresh = false) { function resetAppearanceMenu(refresh = false) {
for (let i = 0; i < Data.appearanceNames.length; i++) { for (var i = 0; i < Data.appearanceNames.length; i++) {
appearanceItems[i].Index = loadedAppearence[i]; appearanceItems[i].Index = loadedAppearance[i];
appearanceOpacityItems[i].Index = loadedAppearenceOpacity[i]; appearanceOpacityItems[i].Index = loadedAppearanceOpacity[i];
updateAppearance(i); updateAppearance(i);
} }
if (refresh) creatorAppearanceMenu.RefreshIndex();
} }
function resetHairAndColorsMenu(refresh = false) { function getHairAndColorMenu(parentMenu: NativeUI.Menu): NativeUI.Menu {
//hairItem.Index = 0;
//hairColorItem.Index = 0;
//hairHighlightItem.Index = 0;
eyebrowColorItem.Index = characterData.EyebrowColor;
beardColorItem.Index = characterData.BeardColor;
eyeColorItem.Index = characterData.EyeColor;
blushColorItem.Index = characterData.BlushColor;
lipstickColorItem.Index = characterData.LipstickColor;
chestHairColorItem.Index = characterData.ChestHairColor;
updateHairAndColors();
if (refresh) creatorHairMenu.RefreshIndex(); var creatorHairMenu = new Menu("Haar & Farben", "", new Point(0, screenRes.y / 3), null, null);
} creatorHairMenu.Visible = false;
let currentGender; var eyebrowColorItem = new UIMenuListItem("Augenbrauen Farbe", "Farbe deiner Augenbrauen", new ItemsCollection(hairColors));
let creatorMenus: NativeUI.Menu[] = []; creatorHairMenu.AddItem(eyebrowColorItem);
let creatorCamera: CameraMp;
// color arrays var beardColorItem = new UIMenuListItem("Farbe der Gesichtsbehaarung", "Farbe deiner Gesichtsbehaarung", new ItemsCollection(hairColors));
let hairColors = []; creatorHairMenu.AddItem(beardColorItem);
for (let i = 0; i < Data.maxHairColor; i++) hairColors.push(i.toString());
let blushColors = []; var eyeColorItem = new UIMenuListItem("Augenfarbe", "Farbe deiner Augen", new ItemsCollection(Data.eyeColors));
for (let i = 0; i < Data.maxBlushColor; i++) blushColors.push(i.toString()); creatorHairMenu.AddItem(eyeColorItem);
let lipstickColors = []; var blushColorItem = new UIMenuListItem("Rouge", "Farbe des Rouges.", new ItemsCollection(blushColors));
for (let i = 0; i < Data.maxLipstickColor; i++) lipstickColors.push(i.toString()); creatorHairMenu.AddItem(blushColorItem);
var lipstickColorItem = new UIMenuListItem("Lippenstift Farbe", "Farbe deines Lippenstifts.", new ItemsCollection(lipstickColors));
creatorHairMenu.AddItem(lipstickColorItem);
// CREATOR MAIN var chestHairColorItem = new UIMenuListItem("Farbe der Brustbehaarung", "Farbe deiner Brustbehaarung", new ItemsCollection(hairColors));
let creatorMainMenu = new Menu("Chirurg", "", new Point(0, screenRes.y / 3), null, null); creatorHairMenu.AddItem(chestHairColorItem);
let genderItem = new UIMenuListItem("Geschlecht", "~r~Dies setzt deine Einstellungen zur\u00fcck.", new ItemsCollection(["M\u00e4nnlich", "Weiblich"]));
creatorMainMenu.AddItem(genderItem);
creatorMainMenu.AddItem(new UIMenuItem("Eltern", "Eltern des Charakters."));
creatorMainMenu.AddItem(new UIMenuItem("Gesichtsz\u00fcge", "Gesichtsz\u00fcge des Charakters."));
creatorMainMenu.AddItem(new UIMenuItem("Aussehen", "Aussehen des Charakters."));
creatorMainMenu.AddItem(new UIMenuItem("Haar & Farben", "Haare & Farben deines Charakters."));
let angles = []; var cancelItem = new UIMenuItem("Zurücksetzen", "~r~Zurücksetzen von Haar & Farben");
for (let i = -180.0; i <= 180.0; i += 5.0) angles.push(i.toFixed(1)); creatorHairMenu.AddItem(cancelItem);
let angleItem = new UIMenuListItem("Drehung", "", new ItemsCollection(angles));
creatorMainMenu.AddItem(angleItem);
let saveItem = new UIMenuItem("Erstellen", "Erstellt deinen Charakter."); creatorHairMenu.ItemSelect.on((item, index) => {
saveItem.BackColor = new Color(13, 71, 161); switch (item) {
saveItem.HighlightedBackColor = new Color(25, 118, 210); case cancelItem:
creatorMainMenu.AddItem(saveItem); eyebrowColorItem.Index = characterData.EyebrowColor;
beardColorItem.Index = characterData.BeardColor;
//let cancelItem = new UIMenuItem("Abbrechen", "Setzt alle \u00c4nderungen zur\u00fcck."); eyeColorItem.Index = characterData.EyeColor;
//cancelItem.BackColor = new Color(213, 0, 0); blushColorItem.Index = characterData.BlushColor;
//cancelItem.HighlightedBackColor = new Color(229, 57, 53); lipstickColorItem.Index = characterData.LipstickColor;
//creatorMainMenu.AddItem(cancelItem); chestHairColorItem.Index = characterData.ChestHairColor;
updateHairAndColors();
creatorMainMenu.ListChange.on((item, listIndex) => {
if (item === genderItem) {
currentGender = listIndex;
mp.events.callRemote("creator_GenderChange", listIndex);
setTimeout(() => {
localPlayer.clearTasksImmediately();
applyCreatorOutfit();
angleItem.Index = 0;
resetParentsMenu(true);
resetFeaturesMenu(true);
resetAppearanceMenu(true);
//creatorHairMenu.Clear();
//fillHairMenu();
//creatorHairMenu.RefreshIndex();
}, 200);
} else if (item === angleItem) {
localPlayer.setHeading(parseFloat(angleItem.SelectedValue));
localPlayer.clearTasksImmediately();
}
});
creatorMainMenu.ItemSelect.on((item, index) => {
switch (index) {
case 1:
creatorMainMenu.Visible = false;
creatorParentsMenu.Visible = true;
break;
case 2:
creatorMainMenu.Visible = false;
creatorFeaturesMenu.Visible = true;
break;
case 3:
creatorMainMenu.Visible = false;
creatorAppearanceMenu.Visible = true;
break;
case 4:
creatorMainMenu.Visible = false;
creatorHairMenu.Visible = true;
break;
case 5:
let parentData = {
Father: Data.fathers[fatherItem.Index],
Mother: Data.mothers[motherItem.Index],
Similarity: similarityItem.Index * 0.01,
SkinSimilarity: skinSimilarityItem.Index * 0.01
};
let featureData = [];
for (let i = 0; i < featureItems.length; i++) featureData.push(parseFloat(featureItems[i].SelectedValue));
let appearanceData = [];
for (let i = 0; i < appearanceItems.length; i++) appearanceData.push({ Value: ((appearanceItems[i].Index === 0) ? 255 : appearanceItems[i].Index - 1), Opacity: appearanceOpacityItems[i].Index * 0.01 });
let hairAndColors = [
//Data.hairList[currentGender][hairItem.Index].ID,
//hairColorItem.Index,
//hairHighlightItem.Index,
eyebrowColorItem.Index,
beardColorItem.Index,
eyeColorItem.Index,
blushColorItem.Index,
lipstickColorItem.Index,
chestHairColorItem.Index
];
for (let i = 0; i < creatorMenus.length; i++) creatorMenus[i].Visible = false;
mp.gui.chat.show(true);
mp.game.ui.displayRadar(true);
mp.game.ui.displayHud(true);
localPlayer.freezePosition(false);
localPlayer.setDefaultComponentVariation();
localPlayer.setComponentVariation(2, Data.hairList[currentGender][hairItem.Index].ID, 0, 2);
mp.game.cam.renderScriptCams(false, false, 0, true, false);
creatorCamera.destroy(true);
mp.events.callRemote("SaveSurgery", currentGender, JSON.stringify(parentData), JSON.stringify(featureData), JSON.stringify(appearanceData), JSON.stringify(hairAndColors));
globalData.InMenu = false;
globalData.InMenu = false;
break;
case 6:
leaveCreator();
break;
}
});
creatorMainMenu.MenuClose.on(() => {
leaveCreator();
});
function leaveCreator() {
//resetParentsMenu();
//resetFeaturesMenu();
//resetAppearanceMenu();
//resetHairAndColorsMenu();
mp.gui.chat.show(true);
mp.game.ui.displayRadar(true);
mp.game.ui.displayHud(true);
localPlayer.freezePosition(false);
mp.game.cam.renderScriptCams(false, false, 0, true, false);
creatorCamera.destroy(true);
mp.events.callRemote("surgeryLeave");
globalData.InMenu = false;
globalData.InMenu = false;
}
creatorMainMenu.Visible = false;
creatorMenus.push(creatorMainMenu);
// CREATOR MAIN END
// CREATOR PARENTS
let similarities = [];
for (let i = 0; i <= 100; i++) similarities.push(i + "%");
let creatorParentsMenu = new Menu("Eltern", "", new Point(0, screenRes.y / 3), null, null);
let fatherItem = new UIMenuListItem("Vater", "Dem Charakter sein Vadda.", new ItemsCollection(Data.fatherNames));
let motherItem = new UIMenuListItem("Mutter", "Dem Charakter seine Mudda.", new ItemsCollection(Data.motherNames));
let similarityItem = new UIMenuListItem("\u00c4hnlichkeit", "\u00c4hnlichkeit zu den Eltern.\n(niedriger = feminin, h\u00f6her = maskulin)", new ItemsCollection(similarities));
let skinSimilarityItem = new UIMenuListItem("Hautfarbe", "Hautfarben \u00c4hnlichkeit zu den Eltern.\n(niedriger = Mutter, h\u00f6her = Vater)", new ItemsCollection(similarities));
creatorParentsMenu.AddItem(fatherItem);
creatorParentsMenu.AddItem(motherItem);
creatorParentsMenu.AddItem(similarityItem);
creatorParentsMenu.AddItem(skinSimilarityItem);
creatorParentsMenu.AddItem(new UIMenuItem("Zuf\u00e4llig", "~r~Zuf\u00e4llige Eltern."));
creatorParentsMenu.AddItem(new UIMenuItem("Zur\u00fccksetzen", "~r~Setzt die Eltern zur\u00fcck. :'("));
creatorParentsMenu.ItemSelect.on((item, index) => {
switch (item.Text) {
case "Zuf\u00e4llig":
fatherItem.Index = getRandomInt(0, Data.fathers.length - 1);
motherItem.Index = getRandomInt(0, Data.mothers.length - 1);
similarityItem.Index = getRandomInt(0, 100);
skinSimilarityItem.Index = getRandomInt(0, 100);
updateParents();
break;
case "Zur\u00fccksetzen":
resetParentsMenu();
break;
}
});
creatorParentsMenu.ListChange.on((item, listIndex) => {
updateParents();
});
creatorParentsMenu.ParentMenu = creatorMainMenu;
creatorParentsMenu.Visible = false;
creatorMenus.push(creatorParentsMenu);
// CREATOR PARENTS END
// CREATOR FEATURES
let featureItems = [];
let features = [];
for (let i = -1.0; i <= 1.01; i += 0.01) features.push(i.toFixed(2));
let creatorFeaturesMenu = new Menu("Gesichtsz\u00fcge", "", new Point(0, screenRes.y / 3), null, null);
for (let i = 0; i < Data.featureNames.length; i++) {
let tempFeatureItem = new UIMenuListItem(Data.featureNames[i], "", new ItemsCollection(features));
tempFeatureItem.Index = 100;
featureItems.push(tempFeatureItem);
creatorFeaturesMenu.AddItem(tempFeatureItem);
}
creatorFeaturesMenu.AddItem(new UIMenuItem("Zuf\u00e4llig", "~r~Zuf\u00e4llige Gesichtsz\u00fcge."));
creatorFeaturesMenu.AddItem(new UIMenuItem("Zur\u00fccksetzen", "~r~Setzt Gesichtsz\u00fcge zur\u00fcck."));
creatorFeaturesMenu.ItemSelect.on((item, index) => {
switch (item.Text) {
case "Zuf\u00e4llig":
for (let i = 0; i < Data.featureNames.length; i++) {
featureItems[i].Index = getRandomInt(0, 200);
updateFaceFeature(i);
}
break;
case "Zur\u00fccksetzen":
resetFeaturesMenu();
break;
}
});
creatorFeaturesMenu.ListChange.on((item, listIndex) => {
updateFaceFeature(featureItems.indexOf(item));
});
creatorFeaturesMenu.ParentMenu = creatorMainMenu;
creatorFeaturesMenu.Visible = false;
creatorMenus.push(creatorFeaturesMenu);
// CREATOR FEATURES END
// CREATOR APPEARANCE
let appearanceItems = [];
let appearanceOpacityItems = [];
let opacities = [];
for (let i = 0; i <= 100; i++) opacities.push(i + "%");
let creatorAppearanceMenu = new Menu("Aussehen", "", new Point(0, screenRes.y / 3), null, null);
for (let i = 0; i < Data.appearanceNames.length; i++) {
let items = [];
for (let j = 0, max = mp.game.ped.getNumHeadOverlayValues(i); j <= max; j++) items.push(Data.appearanceItemNames[i][j] === undefined ? j.toString() : Data.appearanceItemNames[i][j]);
let tempAppearanceItem = new UIMenuListItem(Data.appearanceNames[i], "", new ItemsCollection(items));
appearanceItems.push(tempAppearanceItem);
creatorAppearanceMenu.AddItem(tempAppearanceItem);
let tempAppearanceOpacityItem = new UIMenuListItem(Data.appearanceNames[i] + " Transparenz", "", new ItemsCollection(opacities));
tempAppearanceOpacityItem.Index = 100;
appearanceOpacityItems.push(tempAppearanceOpacityItem);
creatorAppearanceMenu.AddItem(tempAppearanceOpacityItem);
}
creatorAppearanceMenu.AddItem(new UIMenuItem("Zuf\u00e4llig", "~r~Zuf\u00e4lliges Aussehen."));
creatorAppearanceMenu.AddItem(new UIMenuItem("Zur\u00fccksetzen", "~r~Setzt das Aussehen zur\u00fcck."));
creatorAppearanceMenu.ItemSelect.on((item, index) => {
switch (item.Text) {
case "Zuf\u00e4llig":
for (let i = 0; i < Data.appearanceNames.length; i++) {
appearanceItems[i].Index = getRandomInt(0, mp.game.ped.getNumHeadOverlayValues(i) - 1);
appearanceOpacityItems[i].Index = getRandomInt(0, 100);
updateAppearance(i);
}
break;
case "Zur\u00fccksetzen":
resetAppearanceMenu();
break;
}
});
creatorAppearanceMenu.ListChange.on((item, listIndex) => {
let idx = (creatorAppearanceMenu.CurrentSelection % 2 === 0) ? (creatorAppearanceMenu.CurrentSelection / 2) : Math.floor(creatorAppearanceMenu.CurrentSelection / 2);
updateAppearance(idx);
});
creatorAppearanceMenu.ParentMenu = creatorMainMenu;
creatorAppearanceMenu.Visible = false;
creatorMenus.push(creatorAppearanceMenu);
// CREATOR APPEARANCE END
// CREATOR HAIR & COLORS
let hairItem;
let hairColorItem;
let hairHighlightItem;
let eyebrowColorItem: NativeUI.UIMenuListItem;
let beardColorItem: NativeUI.UIMenuListItem;
let eyeColorItem: NativeUI.UIMenuListItem;
let blushColorItem: NativeUI.UIMenuListItem;
let lipstickColorItem: NativeUI.UIMenuListItem;
let chestHairColorItem: NativeUI.UIMenuListItem;
creatorHairMenu = new Menu("Haar & Farben", "", new Point(0, screenRes.y / 3), null, null);
fillHairMenu();
creatorHairMenu.ItemSelect.on((item, index) => {
switch (item.Text) {
case "Zuf\u00e4llig":
//hairItem.Index = getRandomInt(0, Data.hairList[currentGender].length - 1);
//hairColorItem.Index = getRandomInt(0, Data.maxHairColor);
//hairHighlightItem.Index = getRandomInt(0, Data.maxHairColor);
eyebrowColorItem.Index = getRandomInt(0, Data.maxHairColor);
beardColorItem.Index = getRandomInt(0, Data.maxHairColor);
eyeColorItem.Index = getRandomInt(0, Data.maxEyeColor);
blushColorItem.Index = getRandomInt(0, Data.maxBlushColor);
lipstickColorItem.Index = getRandomInt(0, Data.maxLipstickColor);
chestHairColorItem.Index = getRandomInt(0, Data.maxHairColor);
updateHairAndColors();
break;
case "Zur\u00fccksetzen":
resetHairAndColorsMenu();
break;
}
});
creatorHairMenu.ListChange.on((item, listIndex) => {
if (item === hairItem) {
let hairStyle = Data.hairList[currentGender][listIndex];
localPlayer.setComponentVariation(2, hairStyle.ID, 0, 2);
} else {
switch (creatorHairMenu.CurrentSelection) {
/*case 1: // hair color
localPlayer.setHairColor(listIndex, hairHighlightItem.Index);
break; break;
}
});
case 2: // hair highlight color creatorHairMenu.ListChange.on((item, listIndex) => {
localPlayer.setHairColor(hairColorItem.Index, listIndex); switch (creatorHairMenu.CurrentSelection) {
break;*/
case 0: // eyebrow color case 0: // eyebrow color
localPlayer.setHeadOverlayColor(2, 1, listIndex, 0); localPlayer.setHeadOverlayColor(2, 1, listIndex, 0);
@@ -613,45 +454,78 @@ export default function charSurgery(globalData: IGlobalData) {
localPlayer.setHeadOverlayColor(10, 1, listIndex, 0); localPlayer.setHeadOverlayColor(10, 1, listIndex, 0);
break; break;
} }
});
return creatorHairMenu;
}
function updateHairAndColors() {
localPlayer.setEyeColor(newCharacter.EyeColor);
localPlayer.setHeadOverlayColor(1, 1, newCharacter.BeardColor, 0);
localPlayer.setHeadOverlayColor(2, 1, newCharacter.EyebrowColor, 0);
localPlayer.setHeadOverlayColor(5, 2, newCharacter.BlushColor, 0);
localPlayer.setHeadOverlayColor(8, 2, newCharacter.LipstickColor, 0);
localPlayer.setHeadOverlayColor(10, 1, newCharacter.ChestHairColor, 0);
}
function colorForOverlayIdx(index) {
var color;
switch (index) {
case 1:
color = newCharacter.BeardColor;
break;
case 2:
color = newCharacter.EyebrowColor;
break;
case 5:
color = newCharacter.BlushColor;
break;
case 8:
color = newCharacter.LipstickColor;
break;
case 10:
color = newCharacter.ChestHairColor;
break;
default:
color = 0;
} }
});
creatorHairMenu.ParentMenu = creatorMainMenu; return color;
creatorHairMenu.Visible = false; }
creatorMenus.push(creatorHairMenu);
// CREATOR HAIR & COLORS END
var character; function applyCreatorOutfit() {
// EVENTS if (newCharacter.Gender === false) {
mp.events.add("toggleSurgery", (jsonCharacterData: string) => { localPlayer.setDefaultComponentVariation();
if (!mp.cameras.exists(creatorCamera)) { localPlayer.setComponentVariation(3, 15, 0, 2);
localPlayer.setComponentVariation(4, 21, 0, 2);
characterData = JSON.parse(jsonCharacterData); localPlayer.setComponentVariation(6, 34, 0, 2);
loadCharacterData(); localPlayer.setComponentVariation(8, 15, 0, 2);
creatorCamera = mp.cameras.new("creatorCamera", creatorCoords.camera, new mp.Vector3(0, 0, 0), 45); localPlayer.setComponentVariation(11, 15, 0, 2);
creatorCamera.pointAtCoord(creatorCoords.cameraLookAt.x, creatorCoords.cameraLookAt.y, creatorCoords.cameraLookAt.z); } else {
creatorCamera.setActive(true); localPlayer.setDefaultComponentVariation();
localPlayer.setComponentVariation(3, 15, 0, 2);
globalData.InMenu = true; localPlayer.setComponentVariation(4, 10, 0, 2);
globalData.InMenu = true; localPlayer.setComponentVariation(6, 35, 0, 2);
localPlayer.setComponentVariation(8, 15, 0, 2);
creatorMainMenu.Visible = true; localPlayer.setComponentVariation(11, 15, 0, 2);
mp.gui.chat.show(false);
mp.game.ui.displayRadar(false);
mp.game.ui.displayHud(false);
localPlayer.clearTasksImmediately();
localPlayer.freezePosition(true);
mp.game.cam.renderScriptCams(true, false, 0, true, false);
} }
}); }
/* function leaveCreator() {
mp.events.add("sendToServer", (characterData) => { mp.gui.chat.show(true);
mp.events.callRemote("creatorSave", characterData); mp.game.ui.displayRadar(true);
}); mp.game.ui.displayHud(true);
*/ localPlayer.freezePosition(false);
mp.game.cam.renderScriptCams(false, false, 0, true, false);
creatorMenus.forEach(menu => { creatorCamera.destroy(true);
menu.Visible = false; mp.events.callRemote("surgeryLeave");
}) globalData.InMenu = false;
globalData.InMenu = false;
}
} }