Мануал Добавляем анимацию "телефон в руке" - мод RedAge RolePlay (NeptuneEvo)

2pac

Профессиональный клоун
Автор темы
14 Сен 2020
154
85
74
В данном гайде я восстановлю тему которую делал Harland до слета БД, по просьбе челиков в чате.

Странно что он не восстановил ее сам🙃.

Приступим:

1. Открываем NeptuneEvo\GUI\Menu.cs.
2. Ищем по файлу (ctrl+f) строчку public static void Open(Client client, Menu menu, bool force = false).
(В данной функции игроку показывается телефон, сюда нам и нужно добавить сам телефон в руку и использовать анимацию на игрока.)
3. После строчки Trigger.ClientEvent(client, "phoneOpen", data); добавляем новые строчки:
C#:
Main.OnAntiAnim(client);
client.PlayAnimation("anim@cellphone@in_car@ds", "cellphone_text_read_base", 49); // Анимация взгляда в телефон для персонажа
Core.BasicSync.AttachObjectToPlayer(client, NAPI.Util.GetHashKey("prop_amb_phone"), 6286, new Vector3(0.06, 0.01, -0.02), new Vector3(80, -10, 110)); // Привязываем объект к руке
(Тут думаю все понятно, первая строчка - сама анимация телефона в руке, вторая - создаем объект телефона в руке у игрока на определенных координатах.)
4. Но это еще не все, в том же файле чуть ниже находим строчку public static async Task OpenAsync(Client client, Menu menu, bool force = false) и добавляем туда такие же строчки анимации и объекта в руке. Все тоже самое, только функция другая.
5. Мы уже на половине пути... Осталось убрать анимацию и объект из руки персонажа в момент закрытия телефона. В том же файле находим строчку public static void Close(Client client, bool hidePhone = true) и после строки Trigger.ClientEvent(client, "phoneClose"); добавляем этот код:
C#:
if (!client.IsInVehicle) client.StopAnimation();

client.ResetData("AntiAnimDown");
if (client.IsInVehicle) client.SetData("ToResetAnimPhone", true);

Core.BasicSync.DetachObject(client);
6.Также ниже находим строчку public static async Task CloseAsync(Client client, bool hidePhone = true) и добавляем туда такие же строчки удаления анимации и объекта телефона из рук.


В итоге, если вы сделали все верно, должно получиться вот так:
1. Достаем телефон
C#:
public static void Open(Client client, Menu menu, bool force = false)
        {
            try
            {
                if (Menus.ContainsKey(client.Handle))
                {
                    Log.Debug($"Client already have opened Menu! id:{Menus[client.Handle].ID}", nLog.Type.Warn);
                    if (!force) return;
                    Menus.Remove(client.Handle);
                }
                Menus.Add(client.Handle, menu);

                //string data = JsonConvert.SerializeObject(menu);
                string data = menu.getJsonStr();

                if (!client.HasData("Phone"))
                {
                    Trigger.ClientEvent(client, "phoneShow");
                    client.SetData("Phone", true);
                }
                Trigger.ClientEvent(client, "phoneOpen", data);
                Main.OnAntiAnim(client);
                client.PlayAnimation("anim@cellphone@in_car@ds", "cellphone_text_read_base", 49);
                Core.BasicSync.AttachObjectToPlayer(client, NAPI.Util.GetHashKey("prop_amb_phone"), 6286, new Vector3(0.06, 0.01, -0.02), new Vector3(80, -10, 110));
            } catch(Exception e)
            {
                Log.Write("EXCEPTION AT \"MENUCONTROL_OPEN\":\n" + e.ToString(), nLog.Type.Error);
            }
        }

2. Убираем телефон
C#:
public static void Close(Client client, bool hidePhone = true)
        {
            try
            {
                if (Menus.ContainsKey(client.Handle))
                    Menus.Remove(client.Handle);
                if (hidePhone)
                {
                    Trigger.ClientEvent(client, "phoneHide");
                    client.ResetData("Phone");
                }
                Trigger.ClientEvent(client, "phoneClose");

                if (!client.IsInVehicle) client.StopAnimation();

                client.ResetData("AntiAnimDown");
                if (client.IsInVehicle) client.SetData("ToResetAnimPhone", true);

                Core.BasicSync.DetachObject(client);

            } catch (Exception e)
            {
                Log.Write("EXCEPTION AT \"MENUCONTROL_CLOSE\":\n" + e.ToString(), nLog.Type.Error);
            }
        }

В функции PlayAnimation в конце есть число 49, это флаги анимации.

Все флаги запуска анимации:
NORMAL = 0,
REPEAT = 1,
STOP_LAST_FRAME = 2,
UPPERBODY = 16,
ENABLE_PLAYER_CONTROL = 32,
CANCELABLE = 120,
Odd number : loop infinitely
Even number : Freeze at last frame
Multiple of 4: Freeze at last frame but controllable
01 to 15 : Full body
10 to 31 : Upper body
32 to 47 : Full body > Controllable
48 to 63 : Upper body > Controllable
001 to 255 : Normal
256 to 511 : Garbled

Список всех анимаций - Список всех анимаций GTA V (+ Animation Viewer). https://wiki.gtanet.work/index.php?title=Animations
Очень удобный ресурс для просмотра объектов в 3D - Список объектов с просмотром в 3D. https://mwojtasik.dev/tools/gtav/objects

Годная тема, думаю есть вам смысл отблагодарить Харланда активностью на форуме 🙃
 
Последнее редактирование модератором:

Harland David Sanders

Куратор портала
Команда форума
Куратор портала
high coder
media
10 Сен 2020
1,952
1,285
196
Это первая версия анимации, она обрывистая.
Есть новая версия она плавнее + есть анимка как убирается телефон.

Пару лайков на этот пост и выложу. :devilish:
 

2pac

Профессиональный клоун
Автор темы
14 Сен 2020
154
85
74
Это первая версия анимации, она обрывистая.
Есть новая версия она плавнее + есть анимка как убирается телефон.

Пару лайков на этот пост и выложу. :devilish:
Ну Давай, типы просили в чате я не просто же так сделал
 
  • Like
Реакции: Alquaonte

Harland David Sanders

Куратор портала
Команда форума
Куратор портала
high coder
media
10 Сен 2020
1,952
1,285
196
Плавная анимация телефона (only client):


JavaScript:
// Создаем телефон, достаем его и смотрим
mp.game.mobile.createMobilePhone(3);
mp.game.mobile.setMobilePhoneScale (0);
mp.game.mobile.scriptIsMovingMobilePhoneOffscreen(false);
mp.game.mobile.setPhoneLean(false);

JavaScript:
// Удаляем телефон
mp.game.invoke ('0x3BC861DF703E5097', mp.players.local.handle, true);
 
Последнее редактирование:

Crazy_Man

Участник портала
16 Сен 2020
24
3
22
Плавная анимация телефона (only client):


JavaScript:
// Создаем телефон, достаем его и смотрим
mp.game.mobile.createMobilePhone(3);
mp.game.mobile.setMobilePhoneScale (0);
mp.game.mobile.scriptIsMovingMobilePhoneOffscreen(false);
mp.game.mobile.setPhoneLean(false);

JavaScript:
// Удаляем телефон
mp.game.invoke ('0x3BC861DF703E5097', mp.players.local.handle, true);

Его куда забросить в index.js?
 

Harland David Sanders

Куратор портала
Команда форума
Куратор портала
high coder
media
10 Сен 2020
1,952
1,285
196

Harland David Sanders

Куратор портала
Команда форума
Куратор портала
high coder
media
10 Сен 2020
1,952
1,285
196

Crazy_Man

Участник портала
16 Сен 2020
24
3
22
Нет, в сервере не надо.
может немного не по этой теме, можешь подсказать я сменил стоимость поставки в Дальнобойщике с 2000к на 5000к а в телефоне заказ светиться за 2000к где его еще нужно изменить, я так понял в клиенткой базе где-то?!
 

Harland David Sanders

Куратор портала
Команда форума
Куратор портала
high coder
media
10 Сен 2020
1,952
1,285
196
может немного не по этой теме, можешь подсказать я сменил стоимость поставки в Дальнобойщике с 2000к на 5000к а в телефоне заказ светиться за 2000к где его еще нужно изменить, я так понял в клиенткой базе где-то?!
В базе данных.
 

Crazy_Man

Участник портала
16 Сен 2020
24
3
22
короче не работает этот новый телефон, а тот что 2pас выложил все норм
 
Последнее редактирование:

Harland David Sanders

Куратор портала
Команда форума
Куратор портала
high coder
media
10 Сен 2020
1,952
1,285
196

wearnings

Активный участник
12 Окт 2020
52
14
33
26
короче не работает этот новый телефон, а тот что 2pас выложил все норм
// Достаем телефон и закрываем.
mp.keys.bind(Keys.VK_M, false, function () { // M key
// Создаем телефон, достаем его и смотрим
mp.game.mobile.createMobilePhone(3);
mp.game.mobile.setMobilePhoneScale (0);
mp.game.mobile.scriptIsMovingMobilePhoneOffscreen(false);
mp.game.mobile.setPhoneLean(false);
// Удаляем телефон
mp.game.invoke ('0x3BC861DF703E5097', mp.players.local.handle, true);
if (!loggedin || chatActive || editing || global.menuCheck() || cuffed || localplayer.getVariable('InDeath') == true) return;
mp.events.callRemote('openPlayerMenu');
lastCheck = new Date().getTime();
});
 

Crazy_Man

Участник портала
16 Сен 2020
24
3
22
// Достаем телефон и закрываем.
mp.keys.bind(Keys.VK_M, false, function () { // M key
// Создаем телефон, достаем его и смотрим
mp.game.mobile.createMobilePhone(3);
mp.game.mobile.setMobilePhoneScale (0);
mp.game.mobile.scriptIsMovingMobilePhoneOffscreen(false);
mp.game.mobile.setPhoneLean(false);
// Удаляем телефон
mp.game.invoke ('0x3BC861DF703E5097', mp.players.local.handle, true);
if (!loggedin || chatActive || editing || global.menuCheck() || cuffed || localplayer.getVariable('InDeath') == true) return;
mp.events.callRemote('openPlayerMenu');
lastCheck = new Date().getTime();
});
если бы ты указал путь куда забросить было бы норм, а то я себе закинул и не фуричит
 

Etader

Начинающий специалист
15 Сен 2020
130
23
47
там косяк в авто если достаешь-он едит с поднятой рукой
 
  • Like
Реакции: Supreme