This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Вопрос Координаты определенных объектов ванильной карты

Статус
В этой теме нельзя размещать новые ответы.

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,354
806
181
34
Приветствую. Вопрос скорее к мапперам.
Каким то образом можно вытащить координаты всех объектов по названию, на пример "imp_prop_impexp_boxwood_01" из ванильной карты?
Хочу написать парсер для создания необходимой мне таблицы в базе данных
 

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
2,392
237
100
Привет! К сожалению, ванильная карта в GTA V не предоставляет прямого доступа к координатам объектов по их названию. Однако, вы можете использовать инструменты моддинга, такие как CodeWalker или Codewalker, чтобы извлечь информацию о координатах объектов из игровых файлов (типично, форматы файлов .ydr или .ymap). Эти инструменты позволяют вам просматривать и анализировать объекты и их свойства.
 

MADARAdev

Старожил
media
FrontEnd developer
30 Дек 2020
744
285
141
28
итерировать не пробовал?
 

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,354
806
181
34
Точнее парсер уже написал для .xml файла, но не знаю где взять информацию

Код:
import * as xml2js from 'xml2js';
import fs from 'fs';
import path from 'path';
class Vector3 {
    constructor(public x: number, public y: number, public z: number) {}
}

declare namespace mp {
    export const objects: any;

    // Определение класса Vector3
    export class Vector3 {
        constructor(x: number, y: number, z: number);
    }
}

interface PositionRotation {
    X: [string];
    Y: [string];
    Z: [string];
    Pitch?: [string];
    Roll?: [string];
    Yaw?: [string];
}

interface Placement {
    ModelHash?: string[];
    Type?: string[];
    Dynamic?: string[];
    FrozenPos?: string[];
    HashName?: string[];
    InitialHandle?: string[];
    ObjectProperties?: { TextureVariation: string[] }[];
    OpacityLevel?: string[];
    LodDistance?: string[];
    IsVisible?: string[];
    MaxHealth?: string[];
    Health?: string[];
    HasGravity?: string[];
    IsOnFire?: string[];
    IsInvincible?: string[];
    IsBulletProof?: string[];
    IsCollisionProof?: string[];
    IsExplosionProof?: string[];
    IsFireProof?: string[];
    IsMeleeProof?: string[];
    IsOnlyDamagedByPlayer?: string[];
    PositionRotation?: PositionRotation[];
    Attachment?: { isAttached: string[] }[];
}

interface SpoonerPlacements {
    Note?: string;
    AudioFile?: { volume: string };
    ClearDatabase?: string;
    ClearWorld?: string;
    ClearMarkers?: string;
    IPLsToLoad?: { load_mp_maps: string; load_sp_maps: string };
    IPLsToRemove?: string[];
    WeatherToSet?: string;
    StartTaskSequencesOnLoad?: string;
    ReferenceCoords?: {
        X: string;
        Y: string;
        Z: string;
    };
    Placement?: Placement[] | Placement;
}

async function loadXML(filePath: string): Promise<SpoonerPlacements> {
    const xmlData = fs.readFileSync(filePath, 'utf-8');

    return new Promise((resolve, reject) => {
        xml2js.parseString(xmlData, { explicitArray: false }, (err, result) => {
            if (err) {
                reject(err);
            } else {
                resolve(result as SpoonerPlacements);
            }
        });
    });
}

async function processXML(xmlData: SpoonerPlacements): Promise<mp.objects.Object[] | null> {
    const spoonerPlacements = xmlData as SpoonerPlacements;

    if (!spoonerPlacements || !spoonerPlacements.SpoonerPlacements.Placement) {
        console.error('Неверный формат данных в XML');
        return null;
    }

    const placements = Array.isArray(spoonerPlacements.SpoonerPlacements.Placement)
        ? spoonerPlacements.SpoonerPlacements.Placement
        : [spoonerPlacements.SpoonerPlacements.Placement];

    const createdObjects: mp.objects.Object[] = [];

    for (const item of placements) {
        console.log('ModelHash:', item.ModelHash);
        console.log('PositionRotation:', item.PositionRotation);
    }

    return createdObjects.length ? createdObjects : null;
}

const filePath = path.join(__dirname, 'maps/city.xml');

async function parseObj() {
    // Вызов функции загрузки XML и обработки данных
    try {
        const xmlData = await loadXML(filePath);
        const parsedData = await processXML(xmlData);
        console.log(parsedData);
    } catch (error) {
        console.error('Ошибка при обработке XML:', error);
    }
}

parseObj();
 

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,354
806
181
34
итерировать не пробовал?
Если у меня есть файл .xml с форматом объектов, я могу получить информацию о них. Я имею ввиду, возможно где то в самих файлах GTA5 есть .xml с ванильной картой.

Код:
<Placement>
        <ModelHash>0x38f80043</ModelHash>
        <Type>3</Type>
        <Dynamic>false</Dynamic>
        <FrozenPos>true</FrozenPos>
        <HashName>prop_veg_crop_06</HashName>
        <InitialHandle>561501</InitialHandle>
        <ObjectProperties>
            <TextureVariation>0</TextureVariation>
        </ObjectProperties>
        <OpacityLevel>255</OpacityLevel>
        <LodDistance>16960</LodDistance>
        <IsVisible>true</IsVisible>
        <MaxHealth>1000</MaxHealth>
        <Health>1000</Health>
        <HasGravity>true</HasGravity>
        <IsOnFire>false</IsOnFire>
        <IsInvincible>false</IsInvincible>
        <IsBulletProof>false</IsBulletProof>
        <IsCollisionProof>false</IsCollisionProof>
        <IsExplosionProof>false</IsExplosionProof>
        <IsFireProof>false</IsFireProof>
        <IsMeleeProof>false</IsMeleeProof>
        <IsOnlyDamagedByPlayer>false</IsOnlyDamagedByPlayer>
        <PositionRotation>
            <X>-8.85451412</X>
            <Y>-1074.9563</Y>
            <Z>38.0202026</Z>
            <Pitch>0</Pitch>
            <Roll>-0</Roll>
            <Yaw>170.429474</Yaw>
        </PositionRotation>
        <Attachment isAttached="false" />
    </Placement>
 

h4cker777

Участник портала
3 Ноя 2020
47
7
72
Если я тебя правильно понял то все координаты ты можешь в Codewalker взять
 

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,354
806
181
34
Если я тебя правильно понял то все координаты ты можешь в Codewalker взять
В Codewalker есть такая функция? Я просто не совсем с ним разобрался. Найти не один объект по названию а все.
 

kirillzver

Гуру
BackEnd developer
2 Ноя 2020
190
117
104
Да. Через него можно найти все объекты по указанному названию, а потом выгрузить их координаты в файл.
 
Реакции: Vermilion

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,354
806
181
34

kirillzver

Гуру
BackEnd developer
2 Ноя 2020
190
117
104
Подскажи, как это сделать?
Я практически не работал с ним, но, если не ошибаюсь, то там была вкладка Tools, а в ней World search.
У меня сейчас нет установленной рабочей версии, поэтому не могу подсказать более точно.
 
Реакции: Vermilion

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,354
806
181
34
Да, есть такое. Благодарю. Тему можно закрывать.
 
Реакции: kirillzver
Статус
В этой теме нельзя размещать новые ответы.