Автор Тема: Написание плагина. Настройка проекта  (Прочитано 41810 раз)

Оффлайн Saint

  • Прохожий
  • *
  • Сообщений: 71
  • Репутация: +1/-0
  • Saint Games
    • saint36rus
    • Просмотр профиля
Re: Написание плагина. Настройка проекта
« Ответ #315 : Март 13, 2020, 11:39:51 pm »
Почему-то не могу получить 5 или 6 звёзд розыска с помощью скриптовой команды , 

cначало надо установить максимальный уровень розыска https://gtamods.com/wiki/01F0

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 181
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Написание плагина. Настройка проекта
« Ответ #316 : Март 24, 2020, 01:45:11 am »
Спасибо  xanser  вам ответ.

Камера работает следующим образом
Код: Javascript
  1. CCamera* cam;
  2. cam = (CCamera*)0x7E4688;
  3. cam->Restore();
  4.  
 

Наконец-то удалось  установить угол для  камеры https://www.youtube.com/watch?v=kyDgJicxGdQ&feature=youtu.be

Спасибо за подсказку, теперь уровень розыска устанавливается нужный.
Код: Javascript
  1.  
  2. Command<COMMAND_SET_MAX_WANTED_LEVEL>(wanted);
  3.  
  4. Command<COMMAND_ALTER_WANTED_LEVEL>(CWorld::PlayerInFocus, wanted);
  5.  
  Интересно, можно ли  заменить их функциями?
Скажите, пожалуйста, какие функции отвечают за проверки целиться игрок ли в педа? Получил ли пед  урон от игрока, получил ли пед урон конкретного вида оружия?

Оффлайн kenking

  • Новичок
  • **
  • Сообщений: 233
  • Репутация: +16/-0
    • Просмотр профиля
Re: Написание плагина. Настройка проекта
« Ответ #317 : Март 24, 2020, 02:59:15 pm »
Цитировать
Интересно, можно ли  заменить их функциями?
Как я уже писал ранее, надо открыть базу и посмотреть соответствующие опкоды. Для разбора опкодов можно взять базу для GTA3, большинство опкодов для VC и тройки одинаковые. А база для тройки разобрана намного больше.

опкод 01F0: set_max_wanted_level_to 6 - CWanted::SetMaximumWantedLevel

опкод 010D: set_player $PLAYER_CHAR wanted_level_to 6 - CPlayerPed::SetWantedLevel

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 181
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Написание плагина. Настройка проекта
« Ответ #318 : Март 29, 2020, 03:51:48 pm »

Спасибо большое за ваш ответ уважаемый kenking.
Хорошо, что у нас есть база, где можно посмотреть функции, жаль, что с ней мало кто может работать продуктивно.   
Нужны знания ассемблера, он гораздо сложнее с++.

Изучаю sdk plugin. Вот, что выяснил.
Код: Javascript
  1. CCamera* cam;
  2. cam = (CCamera*)0x7E4688;
  3. //float res = cam->CarZoomIndicator; // режим камеры в авто от 0 до 5, 4 пропускает.
  4. //float res = cam->CarZoomValue;// что-то с зумом в авто, насколько приближенная к авто.
  5. //float res = cam->DistanceToWater;// странная дистанция до воды.
  6. //float res = player->GetHeading();// получить угол педа
  7. CWeapon weapon = ped->m_aWeapons[ped->m_nActiveWeaponSlot];
  8. int ammo = weapon.m_nTotalAmmo;// кол-во патронов в текущем оружии.
  9.  
  10. Также научился немного  работать с огнём.
  11. int fire;// переменная хранить id огня.
  12. CPed* ped = findpedinpool(p);//  получить указатель на педа.
  13. Command<COMMAND_START_CHAR_FIRE>(CPools::GetPedRef(ped), &fire);// создать огонь на педе.
  14.  
  15. CVehicle* car = findcarinpool(p);// получить указатель на авто.
  16. Command<COMMAND_START_CAR_FIRE>(CPools::GetVehicleRef(car), &fire);// создать огонь на авто.
  17.  
  18. float x = lua_tonumber(L, 1);
  19. float y = lua_tonumber(L, 2); float z = lua_tonumber(L, 3);
  20. int fire;// переменная хранить id огоня.
  21. CVector pos = { x,y,z };
  22.  
  23. Command<COMMAND_START_SCRIPT_FIRE>( pos.x, pos.y, pos.z, &fire);// создать огонь на координатах.
  24.  
  25. Command<COMMAND_REMOVE_SCRIPT_FIRE>(fire);// удалить огонь.
  26.  
  27.  
У меня возникли вопросы, при вызове этих функции, нет никакого эффекта

Код: Javascript
  1. CWeapon weapon = ped->m_aWeapons[ped->m_nActiveWeaponSlot];
  2. weapon.InitialiseWeapons();
  3. weapon.Shutdown();*/
  4. //weapon.ShutdownWeapons();
  5. weapon.Reload();
  6.  

может кто-то из вас с ними работает? Скажите, пожалуйста, как они действуют, на что они влияют?   

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 181
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Написание плагина. Настройка проекта
« Ответ #319 : Апрель 04, 2020, 05:41:32 pm »
Если долго мучиться, что-нибудь получится. Искал в базе, вот нашёл.

Нашёл скриптовую команду игрок целиться в педа, проверяем педа.
Код: Javascript
  1. bool check_target = Command<COMMAND_IS_PLAYER_TARGETTING_CHAR>(CWorld::PlayerInFocus, CPools::GetPedRef(ped));
  2.  

Также научился изменять характеристики оружия, пока урон.

Код: Javascript
  1.         CWeapon weapon = ped->m_aWeapons[ped->m_nActiveWeaponSlot];
  2.         eWeaponType type = weapon.m_nType;
  3.         CWeaponInfo* w = CWeaponInfo::GetWeaponInfo(type);
  4.         w->m_nDamage = 500
  5.  

размер обоймы пока изменить не удалось.

Выяснил, что Shutdown помогает удалить текущее оружие.

Код: Javascript
  1. ped->SetAmmo((eWeaponType)tipe, 0);
  2. CWeapon weapon = ped->m_aWeapons[ped->m_nActiveWeaponSlot];
  3. ped->RemoveWeaponModel(idweapon);
  4. weapon.Shutdown();
  5. weapon.UpdateWeapons();
  6.  
  7.  

такой прогресс.

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 181
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Написание плагина. Настройка проекта
« Ответ #320 : Апрель 16, 2020, 09:25:28 am »
Возникла такая ситуация. Функция и скриптовая команда, при установке количество денег педа, при его смерти, выпадает сумма денег, которая отличается от установленной, в чём причина такой ситуации?


Код: Javascript
  1. ped->m_nPedMoney = 100;
  2. ped->CreateDeadPedMoney();
  3.  
  4.  
  5. Command<COMMAND_SET_CHAR_MONEY>(CPools::GetPedRef(ped), 0);
  6. this_thread::sleep_for(chrono::milliseconds(1));
  7. Command<COMMAND_SET_CHAR_MONEY>(CPools::GetPedRef(ped), 100);
  8.  

Оффлайн kenking

  • Новичок
  • **
  • Сообщений: 233
  • Репутация: +16/-0
    • Просмотр профиля
Re: Написание плагина. Настройка проекта
« Ответ #321 : Апрель 16, 2020, 11:28:48 am »
Цитировать
при установке количество денег педа, при его смерти, выпадает сумма денег, которая отличается от установленной, в чём причина такой ситуации?
Функцию CPed::CreateDeadPedMoney открой в IDA (нажми F5 для генерации псевдокода на С++)

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 181
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Написание плагина. Настройка проекта
« Ответ #322 : Апрель 29, 2020, 11:21:23 am »
Спасибо за уделённое время kenking, с этой функцией, в ней есть некий рандом.
Код: Javascript
  1. pedmoney = this->wPedMoney;
  2. if ( pedmoney >= 10u ){
  3. x = this->physical.entity.replacement.m_matrix.pos.x;
  4. у = this->physical.entity.m_placement.m_matrix.pos;
  5. z = this->physical.entity, replacement.m_matrix.pos.z;
  6. v4 = ((signed int)(0x66666667 * (unsigned       int64)pedmoney >> 32) >> 3) + ((unsigned int)pedmoney >> 31) + 1;
  7. if ( V4 >= 7 )
  8.  v4 = 7;
  9.  v5 = 0;
  10. for ( pedmoney_ = pedmoney / v4; v5 < v4; -H-v5 )
  11. {
  12.   v9 = sin((double)(unsigned    int8) *and() * 0.024543693);
  13.  if ( v8 & 0x400 )
  14. {
  15.   deg2rad(v7);
  16.   v9 = sin(v9);
  17. }
  18. vl0 = v9;
  19. x = 1.5 * vl0 + x;
  20. vl3 = cos((double)(unsigned     int8)rand() * 0.024543693);
  21. if ( vl2 & 0x400 )
  22. {
  23. deg2rad(v11);
  24. v13 = cos(v13);
  25. }
  26. v14 = v13; у = 1.5 * vl4 + y;
  27. z = eWorld::FindGroundZFor3DCoord(x, y, z, &a4) + 0.5; if ( a4 )
  28. {
  29. vl5 = rand();
  30. CPickups::GenerateNewOne(pedmoney_, x, y, z, wMIDMoney, 8, pedmoney_ + (vl5 & 3), 0, 0, 0);
  31.    }
  32.   }
  33. v1->wPedMoney = 0;
  34.  }
  35.