ka3ant1p

Как получить название класса?

Вопрос

Подскажите как можно получить название класса из файла конфига?
А то как значение параметра в классе я знаю получить:
Например вот так:
 

_unitTypes = 	[]+ getArray (configFile >> "CfgBuildingLoot" >> "Default" >> "zombieClass");

или так:
 

_lootType = configFile >> "CfgVehicles" >> _type >> "zombieLoot";
_array = getArray (configFile >> "cfgLoot" >> getText(_lootType));

а как получить название класса?

Пробовал на зомби, не вышло:
 

_type = ConfigFile >> "CfgVehicles" >> "z_hunter";
_agent = createAgent [_type, _originalPos, [], 10, "NONE"];

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

31 ответ на этот вопрос

Забронировать это рекламное место


Ты про TypeOf

?

Возможно, но наверное не свосем.

Ну вот смотри есть класс к примеру CfgVehicles и в нем есть подклассы, как так написать функцию что бы скажем получить в ответ название какого то из под классов? Например получить в ответ: "z_hunter"

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

https://community.bistudio.com/wiki/typeOf

Ну и заодно -

https://community.bistudio.com/wiki/ArmA:_CfgVehicles

 

P.S.

CfgVehicles - это конфиг, а не класс. В нем описаны базовые классы и наследники.

Выбирай нужный тебе конфиг, с базовым классом, и определяй наследника через typeOf

Изменено пользователем NoNameUltima (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

мне как бы это нужно для другого.... в общем ладно объясню....
Думаю нашел способ добавить классы зомбакам, но по сколько в скриптах нет запроса к параметрам и значениям каждого из скинов - смею предположить что это происходит в описании функции createAgent. И потому создавай не создавай в миссии кастомный CfgVehicles - его значения использоваться не будут, разве что те кто напрямую к нему обращаются как в случае с лутом. Но если получится в ответ получить название класса тогда возможно будет в кастомном CfgVehicles создать доп скині для зомби, просто создать новые классы с другими стандартными моделями....
Правда вероятность что это получится маловероятна, т.к. тот же createAgent будет за параметрами лезть в файл конфига где не найдет такого класса =(((

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тогда следующий вопрос, где можно найти полное описание функции createAgent?
Ее действие ведь должно же быть прописано где то что бы игра понимала что делать при такой команде

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

мне как бы это нужно для другого.... в общем ладно объясню....

Думаю нашел способ добавить классы зомбакам, но по сколько в скриптах нет запроса к параметрам и значениям каждого из скинов - смею предположить что это происходит в описании функции createAgent. И потому создавай не создавай в миссии кастомный CfgVehicles - его значения использоваться не будут, разве что те кто напрямую к нему обращаются как в случае с лутом. Но если получится в ответ получить название класса тогда возможно будет в кастомном CfgVehicles создать доп скині для зомби, просто создать новые классы с другими стандартными моделями....

Правда вероятность что это получится маловероятна, т.к. тот же createAgent будет за параметрами лезть в файл конфига где не найдет такого класса =(((

А что мешает сделать так же как таблицу лута? Взять да поменять вызов конфигов...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

мне как бы это нужно для другого.... в общем ладно объясню....

Думаю нашел способ добавить классы зомбакам, но по сколько в скриптах нет запроса к параметрам и значениям каждого из скинов - смею предположить что это происходит в описании функции createAgent. И потому создавай не создавай в миссии кастомный CfgVehicles - его значения использоваться не будут, разве что те кто напрямую к нему обращаются как в случае с лутом. Но если получится в ответ получить название класса тогда возможно будет в кастомном CfgVehicles создать доп скині для зомби, просто создать новые классы с другими стандартными моделями....

Правда вероятность что это получится маловероятна, т.к. тот же createAgent будет за параметрами лезть в файл конфига где не найдет такого класса =(((

А что мешает сделать так же как таблицу лута? Взять да поменять вызов конфигов...

 

В смысле? Типо просто добавить кастомный класс CfgVehicles с новыми подклассами зомби? И вызывать их сразу по названию класса? Если да то - не работает такая схема, все по той же причине, что по всей видимости при использовании createAgent первый параметр из массива ищется именно в стандартных конфигах не находит его там и соответсвенно не получает значения параметров

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я имею ввиду что должно быть где то описание такого рода:
Если использовалась команда createAgent тогда
и тут понеслось получение значений из файла конфига, от армора и до расположения модельки и текстур
Разместить на карте с получеными значениями по координатам из массива в радиусе из массива и так далее
 

То есть должно быть описание какие действие выполнять при получении клиентом\сервером команды createAgent

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

мне как бы это нужно для другого.... в общем ладно объясню....

Думаю нашел способ добавить классы зомбакам, но по сколько в скриптах нет запроса к параметрам и значениям каждого из скинов - смею предположить что это происходит в описании функции createAgent. И потому создавай не создавай в миссии кастомный CfgVehicles - его значения использоваться не будут, разве что те кто напрямую к нему обращаются как в случае с лутом. Но если получится в ответ получить название класса тогда возможно будет в кастомном CfgVehicles создать доп скині для зомби, просто создать новые классы с другими стандартными моделями....

Правда вероятность что это получится маловероятна, т.к. тот же createAgent будет за параметрами лезть в файл конфига где не найдет такого класса =(((

А что мешает сделать так же как таблицу лута? Взять да поменять вызов конфигов...

 

В смысле? Типо просто добавить кастомный класс CfgVehicles с новыми подклассами зомби? И вызывать их сразу по названию класса? Если да то - не работает такая схема, все по той же причине, что по всей видимости при использовании createAgent первый параметр из массива ищется именно в стандартных конфигах не находит его там и соответсвенно не получает значения параметров

Скопируй cfgVehicles, подключи его в description.ext, добавь свои подклассы.

Распакуй dayz_code, и замени все вызовы cfgVehicels с configFile на missionConfigFile

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Скопируй cfgVehicles, подключи его в description.ext, добавь свои подклассы.

Распакуй dayz_code, и замени все вызовы cfgVehicels с configFile на missionConfigFile

 

Я фактически так и делал...

Все фалы связанные с зомби а так же compiles и variables скопировал из дейз кода в папку с миссией, сперва поменял в ините пути к compiles и variables далее правил уже их.

В файлах вполне понятны обращения к конфигам, так например для спауна зомби идет обращение: 

_unitTypes = []+ getArray (configFile >> CfgBuildingLoot >> тут либо Default либо переменная которая получила название объекта >> zombieClass);

Сам zombieClass в файле конфига выгладит так например: zombieClass[] = {"zZombie_Base","z_hunter","z_teacher","z_villager1","z_villager2","z_villager3"};

Итог мы получим в результате _unitTypes = ["zZombie_Base","z_hunter","z_teacher","z_villager1","z_villager2","z_villager3"];

По сути это будет то же самое что указать вручную, просто таким образом мы получаем разных зомби в зависимости от объекта

 

И вот что получается дальше, дальше рандомом выбирается какой то из классов пусть обозначим его Z, позицию обозначим XYZ, радиус - R:

_agent = createAgent [Z, XYZ, [], R, "NONE"];

 

И тут createAgent начинает выполнять некую функцию (которая должна быть где то прописана).

Не знаю как выглядят описания таких функций, объясню на примере функций которые вызываются через call.

Допустим у нас есть файл createAgent.sqf то в нем мы бы получили такое описание:

 

_type = _this select 0;
_position = _this select 1;
_radius = _this select 3;
_method = _this select 4;

_model = configFile >> CfgVehickles >> _type >> model;
_wounds = getArray (configFile >> CfgVehickles >> _type >> Wounds >> mat;)
//ну и еще куча параметров таких как текстуры, кол-во слотов, и так далее
//далее выполняется функция какой нибудь placeObject [куча параметров в виде переменных перечисленных выше]
//но если у нас будет первым параметром вместо Z стоять к примеру название класса из кастомного CfgVehicles то при выполнении функции createAgent, 
//она просто напросто не найдет такого класса и все значения получит 0 точнее просто не будет выполнятся, т.к. думаю там есть проверка isConfig

Так вот для того что бы спавнился кастомный класс - нужно поменять вызов configFile на missionConfigFile там где описываются действия функции createAgent, вернее даже скопировать оттуда код создать кастомную функцию и запихнуть ее вв compiles, и тогда спавнить кастомные классы как то так: _agent = [Z, XYZ, [], R, "NONE"] call createAgent;

Потому как если тупо изменить функцию, придется добротный кусок кода запихивать в миссию, один только полный CfgVehicles (общий который формируется из всех аддонов) будет весить около 10 мБ.

 

Так вот вопрос в том где описываются действия createAgent. Где то же это в любом случае должно быть. Вот и нужно достать кусок кода который описывает действие при использовании этой функции

Изменено пользователем ka3ant1p (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Суть такая в общем -

 

1. Тебе надо взять cfgVehicles из bin файла.

2. Подключить его в description.ext

3. Добавить свой класс к уже существующим, сделав его наследником от какого либо созданного .

*Например так -

 

class my_zombie : PZombie_VB
    {
        model = "\ca\characters2\civil\Policeman\Policeman";
        class Wounds
            {
                tex[] = {};
                mat[] = {"ca\characters2\civil\policeman\data\policeman.rvmat", "ca\characters2\civil\policeman\data\w1_policeman.rvmat", "ca\characters2\civil\policeman\data\w2_policeman.rvmat", "ca\characters\heads\male\defaulthead\data\hhl.rvmat", "ca\characters\heads\male\defaulthead\data\hhl_wounds.rvmat", "ca\characters\heads\male\defaulthead\data\hhl_wounds.rvmat"};
            };
    };
 

 

4. Подключить данный файл вместо cfgVehicles

5. Перелопатить все файлы в dayz_code, и на сервере, и заменить строки -

configFile >> CfgVehicles

на

missionconfigFile >> CfgVehicles

 

Попутно добавляя их в миску, и заменяя стандартные вызовы данных файлов из variables.sqf,  compiles.sqf и т.п. - везде где есть, на новые пути уже в твоей папке миссии.

 

 

В принципе все.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ты создал свой класс в vehicles ?

??? 

Я сделал так:

Создал файл customconfig.hpp:

 

class CfgVehicles {
class zZombie_Base;
class z_rocker : zZombie_Base {
		model = "\ca\characters2\civil\Rocker\Rocker";
		hiddenSelections[] = {"Camo", "CamoB"};
		hiddenSelectionsTextures[] = {"\ca\characters2\Civil\Rocker\Data\rocker_co.paa", "\ca\characters2\Civil\Rocker\Data\rockerhair_ca.paa"};
		zombieLoot = "office";
		
		class Wounds {
			tex[] = {};
			mat[] = {"ca\characters2\civil\Rocker\data\Rocker.rvmat", "ca\characters2\civil\Rocker\data\W1_Rocker.rvmat", "ca\characters2\civil\Rocker\data\W2_Rocker.rvmat", "ca\characters\heads\male\defaulthead\data\hhl.rvmat", "ca\characters\heads\male\defaulthead\data\hhl_Wounds.rvmat", "ca\characters\heads\male\defaulthead\data\hhl_Wounds.rvmat"};
		};
	};
};

и в самом верху в description.ext вставил строку:

#include "custom\customconfig.hpp"

При попытке создать такого зомби ничего не происходит =(

Проверю через екзекьютер таким скриптом:

private ["_unitTypes","_originalPos","_type","_agent","_position"];
_unitTypes = ["z_rocker", "z_hunter"];

_originalPos = getPosATL player;

_i = 1;

for "_i" from 1 to 10 do
{
_type = _unitTypes call BIS_fnc_selectRandom;
_agent = createAgent [_type, _originalPos, [], 10, "NONE"];

_position = getPosATL _agent;

[_position,_agent] execFSM "\z\AddOns\dayz_code\system\zombie_agent.fsm";
};

 

В итоге спавнятся только z_hunter

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почитай 14 пост...

У тебя -

 

class CfgVehicles {
class zZombie_Base;
 

 

 

вообще то, zZombie_Base, это наследник citizen1

Вот из оригинала -

 

class CfgVehicles {
    class Citizen1;    // External class reference
class zZombie_Base : Citizen1 {
.........
 

 

У тебя он не объявлен, а просто создан пустышкой. без наследования и т.п.

Изменено пользователем NoNameUltima (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас