В общем я потестил, пока что в соло (не проверял дамаг по своим из огнестрела) и разобрался. Вероятно кому-то будет это полезно, потому что половина не работает вариантов, а на половину нет инструкций по порядку взаимодействия и использования функционала.
Краткий туториал по созданию групп:
Для начала требуется обозначить уровни взаимоотношения между группами, у RAGE имеются следующие константы:
JavaScript:
const RelationshipTypes = {
Companion: 0,
Respect: 1,
Like: 2,
Neutral: 3,
Dislike: 4,
Hate: 5,
Pedestrians: 255
};
Затем для удобства создадим наименования нашим группам, обозначив их так же как константы:
JavaScript:
const RelationshipNames = {
neutral: "NA",
TeamOne: "TeamOne",
TeamTwo: "TeamTwo"
};
Следующим этапом нам нужно "сформировать" HASH нашей группы (уникальный идентификатор группы), делается это с помощью функции mp.game.joaat(name), которая принимает строковое представление группы и переводит его в HASH значение (uint тип):
JavaScript:
const NAhash = mp.game.joaat(RelationshipNames.NA);
const TeamOnehash = mp.game.joaat(RelationshipNames.TeamOne);
const TeamTwohash = mp.game.joaat(RelationshipNames.TeamTwo);
После этого уже создаём сами группы, за создание новой группы отвечает функция addRelationshipGroup именно у Ped'a. Принимает функция строковое представление группы и её хэш:
JavaScript:
mp.game.ped.addRelationshipGroup(RelationshipNames.NA, NAhash);
mp.game.ped.addRelationshipGroup(RelationshipNames.TeamOne, TeamOnehash);
mp.game.ped.addRelationshipGroup(RelationshipNames.TeamOne, TeamTwohash);
mp.players.local.setRelationshipGroupHash(NAhash);//Делаю нашего игрока по умолчанию в группе нейтральных
Затем создаём взаимоотношения между группами с помощью ранее добавленной константы RelationshipTypes. Как я смог пока понять - тип Companion означает что урон проходить не будет (исключая вариант взрывов и сбития машиной), а тип Hate разрешает наносить дамаг соответствующей команде, в которой установлено данное взаимоотношение. Создаётся взаимоотношение с помощью функции
setRelationshipBetweenGroups, которая принимает из аргументов - тип взаимоотношения, первая группа, вторая группа:
JavaScript:
mp.game.ped.setRelationshipBetweenGroups(RelationshipTypes.Companion, NAhash, TeamOnehash);
mp.game.ped.setRelationshipBetweenGroups(RelationshipTypes.Companion, NAhash, TeamTwohash);
mp.game.ped.setRelationshipBetweenGroups(RelationshipTypes.Hate, TeamOnehash, TeamTwohash);
В данном примере описано взаимоотношение нейтральной группы к первой и второй команде, то есть они друг другу (ПО ИДЕЕ) урон нанести не смогут. А первая и вторая команда смогут друг другу нанести урон.
Далее дело остаётся за малым, нужно каждому игроку переопределить группу в зависимости от ваших потребностей. Лично у меня берётся JSON список ID игроков с серверной части на клиентскую (такой геморрой потому что группы определяются на сервере) и на клиентской части в цикле обозначаю каждому игроку его группу. Обозначается группа игроку следующей функцией:
JavaScript:
player.setRelationshipGroupHash(hash)
где hash - идентификатор группы.
Результат проверки в RAGE:MP:
Надеюсь это кому-то пригодится. Спасибо за внимание! По поводу дружественного огня по данному функционалу - проверю позже.