Последние сообщения

Страницы: [1] 2 3 ... 10
1
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от kenking Сегодня в 08:00:56 am »
Цитировать
//ped->bfFlagsD &= 0x7F;//это метода нет
Это установка флага. В базе и в sdk записи в данный момент не совпадают и не все флаги "обозначены" правильно.
Надо так:
Код: C++
  1. ped->m_nPedFlags.b32 = 0;
2
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от egor230 Сегодня в 12:17:06 am »
Спасибо вам большое за вас ответ, kenking. сделал в цикле- находит людей, они начинают атаковать меня. Всё хорошо, но есть 2 но, враги  они становится медленнее находится чем на cleo, через пару минут  игра вылетает, Как решить данную проблему?

Код: Text
  1.  
  2. CPed* randomfindped(CPed *p, float radius) {CVehicle* v = NULL;
  3.  
  4.         if (p->m_bInVehicle && p->m_pVehicle != NULL) {// в авто игрок?
  5.                 CVehicle *v = p->m_pVehicle;    }// получить указатель на хенлд авто в котором сидит томии.
  6.         for (auto car : CPools::ms_pVehiclePool) {
  7.                 if (car != v && DistanceBetweenPoints(car->GetPosition(), p->GetPosition()) < radius && car->m_fHealth > 50) {
  8.                 car->CanPedExitCar(true);
  9.                 if (CPed*ped = car->m_pDriver) {if (ped != NULL && ped != p) {
  10.                         CMessages::AddMessageJumpQ("found ped", 1000, 0);//выводит сообщение на экран
  11.                                 return ped;     }}}}
  12.         for (auto ped : CPools::ms_pPedPool) {
  13.                 if (ped != p && DistanceBetweenPoints(ped->GetPosition(), p->GetPosition()) < radius && ped->m_fHealth > 50) {
  14.                         CMessages::AddMessageJumpQ("found ped", 1000, 0);//выводит сообщение на экран
  15.                         return ped;     }}
  16.        
  17.                  CMessages::AddMessageJumpQ("not found ped", 1000, 0);  
  18. };
  19. bool flag = false;
  20. class Message {//имя класса
  21. public:
  22.         Message() {
  23.                 Events::gameProcessEvent += [] {//обработчик событий игры
  24.                                 CPed *player = FindPlayerPed();// найти игрока
  25.                         KeyCheck::Update();
  26.                         if (KeyCheck::CheckWithDelay('M', 200)|| flag==true) {//если м нажата
  27.                                 flag=true;
  28.                                 if (!player) return;// проверка найден игрок
  29.                                 CPed *ped = randomfindped(player, 20.0);
  30.                                 //ped->bfFlagsD &= 0x7F;//это метода нет
  31.                                 ped->SetObjective(OBJECTIVE_KILL_CHAR_ON_FOOT, CWorld::Players[CWorld::PlayerInFocus].m_pPed);
  32.                         }};
  33.         }
  34. } message;
  35.  

все работает без проблем.

Код: Text
  1. CPed* randomfindped(CPed *p, float radius) {CVehicle* v = NULL;
  2.  
  3.         if (p->m_bInVehicle && p->m_pVehicle != NULL) {// в авто игрок?
  4.                 CVehicle *v = p->m_pVehicle;    }// получить указатель на хенлд авто в котором сидит томии.
  5.         for (auto car : CPools::ms_pVehiclePool) {
  6.                 if (car != v && DistanceBetweenPoints(car->GetPosition(), p->GetPosition()) < radius && car->m_fHealth > 50) {
  7.                 car->CanPedExitCar(true);// пед может выйти из авто
  8.                 if (car->m_pDriver != NULL && car->m_pDriver != p) {
  9.                         CMessages::AddMessageJumpQ("found ped", 1000, 0);//выводит сообщение на экран
  10.                         return car->m_pDriver;
  11.                 }
  12.  
  13.         }
  14. }
  15.         for (auto ped : CPools::ms_pPedPool) {
  16.                 if (ped != p && DistanceBetweenPoints(ped->GetPosition(), p->GetPosition()) < radius && ped->m_fHealth > 50) {
  17.                         CMessages::AddMessageJumpQ("found ped", 1000, 0);//выводит сообщение на экран
  18.                         return ped;     }
  19.        
  20.         }
  21.                  CMessages::AddMessageJumpQ("not found ped", 1000, 0);  
  22.                         return NULL;
  23. };
  24. bool flag = false;
  25. class Message {//имя класса
  26. public:
  27.         Message() {
  28.                 Events::gameProcessEvent += [] {//обработчик событий игры
  29.                                 CPed *player = FindPlayerPed();// найти игрока
  30.                         KeyCheck::Update();
  31.                         if (KeyCheck::CheckWithDelay('M', 200)|| flag==true) {//если м нажата
  32.                                 flag=true;
  33.                                 if (!player) return;// проверка найден игрок
  34.                                 CPed *ped = randomfindped(player, 20.0);
  35.  
  36.                                 if (ped == NULL) return;// проверка найден игрок
  37.                                 ped->SetObjective(OBJECTIVE_KILL_CHAR_ON_FOOT, CWorld::Players[CWorld::PlayerInFocus].m_pPed);
  38.                         }
  39.                 };
  40.         }
  41. } message;
  42.  
3
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от kenking Март 19, 2019, 07:46:41 am »
Цитировать
Есть  задача, чтобы ped нападал  на  игрока.
Думал, сделать так, через функции не получилось.
пришлось, чтобы пед  атаковал игрока, использовать скриптовую команду.
Надо смотреть, как устроен соответствующий опкод в базе (я уже ранее писал про это). Опкоды:
01C9: actor $2324 kill_actor $2291
01CA: actor $853 kill_player $PLAYER_CHAR

в базе выглядят так:
Код: C++
  1. case SET_CHAR_OBJ_KILL_CHAR_ON_FOOT:
  2.       CRunningScript::CollectParameters(this, &this->m_nIp, 2);
  3.       CPed *ped_01C9 = CPool<CPed,CPlayerPed>::GetAt(CPools::ms_pPedPool, ScriptParams[0].m_nIntValue);
  4.       CPed *ped_01C9a = CPool<CPed,CPlayerPed>::GetAt(CPools::ms_pPedPool, ScriptParams[1].m_nIntValue);
  5.       ped_01C9->bfFlagsD &= 0x7F;
  6.       CPed::SetObjective(ped_01C9, OBJECTIVE_KILL_CHAR_ON_FOOT, ped_01C9a);
  7.       result = 0;
  8. break;
  9. case SET_CHAR_OBJ_KILL_PLAYER_ON_FOOT:
  10.       CRunningScript::CollectParameters(this, &this->m_nIp, 2);
  11.       CPed *ped_01CA = CPool<CPed,CPlayerPed>::GetAt(CPools::ms_pPedPool, ScriptParams[0].m_nIntValue);
  12.       id_01CA = ScriptParams[1].m_nIntValue;
  13.       ped_01CA->bfFlagsD &= 0x7F;
  14.       CPed::SetObjective(ped_01CA, OBJECTIVE_KILL_CHAR_ON_FOOT, CWorld::Players[id_01CA].m_pPed);
  15.       result = 0;
  16. break;

Значит в первом случае надо сделать так:
Код: C++
  1. pedOne->bfFlagsD &= 0x7F;
  2. CPed::SetObjective(pedOne, OBJECTIVE_KILL_CHAR_ON_FOOT, pedTwo);

Во втором случае с игроком так:
Код: C++
  1. ped->bfFlagsD &= 0x7F;
  2. CPed::SetObjective(ped, OBJECTIVE_KILL_CHAR_ON_FOOT, CWorld::Players[CWorld::PlayerInFocus].m_pPed);

4
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от egor230 Март 18, 2019, 10:30:26 pm »
Спасибо вам большое за ваш ответ  xanser. Выходит,Класс CEntity  является родительским классом, других классов, они от него  наследуются.

 Получается в некотором роде Функция AttachPedToEntity является аналогом 0464: put_actor 4@ into_turret_on_car 3@ at_car_offset 0.4242 -0.0679 1.1322 position 0 angle 360.0 with_weapon 30


 Хочется чтобы  всё было  максимально просто и понятно. значит  метод Ped->Dress(), мы можем переопределить сами.

согласен с вами,  лучше работать в одном направлении.  Есть  задача, чтобы ped нападал  на  игрока.
 Думал, сделать так, через функции не получилось.
Код: Text
  1. ped->Attack();
  2. ped->m_dwAction;
  3. ped->m_fAttachRot =17;
  4.  

пришлось, чтобы пед  атаковал игрока, использовать скриптовую команду.

Код: Text
  1. CPed *ped = randomfindped(player, 20.0);
  2. Command<COMMAND_SET_CHAR_OBJ_KILL_CHAR_ON_FOOT>(ped, player );
  3.  

Да, заработало, но не так хотел, нападают, при любом количестве нажатии на клавишу активации, максимум только 2.
как сделать это через функции, метода класса CPed?
5
Справочная информация / Re: Различные скрипты, программы и т.д
« Последний ответ от xanser Март 18, 2019, 03:25:11 pm »
Какая-то всеобъемлющая тема. Для глобального мода нужно все, что создано за историю моддинга: редакторы ресурсов, плагины для моделирования, редакторы графики, компиляторы кода, сборки полезных скриптов/плагинов или свои наработки, даже всякие рипперы. Пока я наблюдаю в теме не софт, а очищенные файлы. Могу дополнить очищенным paths.ipl или что-то в этом роде )))

Если по делу, то есть например полезная штука:

IMGOrganizer

Она преобразует gta3.img в кучу отдельных img-файлов, которые уже легче очистить, например целыми районами типа airport.img, оставив только самое необходимое.
6
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от xanser Март 18, 2019, 05:02:43 am »
Класс CEntity - это основа для всех сущностей игры: зданий, объектов, машин, людей, оружия и др, имеющих общие свойства, например идентификатор, матрицу поворота, флаги коллизии и прочее. От этого класса происходят остальные классы CVehicle, CPed и т.д. Функция AttachPedToEntity означает крепление педа к сущности, обычно к транспорту, как в некоторых миссиях, где пед стреляет с машины. Но можно крепить и к другим объектам, к карусели какой-нибудь, поэтому и используется общий класс CEntity.
Параметры функции:
entity - машина или другой объект, к которой происходит крепление педа
offset - точка крепления
position - от 0 до 3 - это сторона, в которую смотрит пед
angle - угол, на который может вращаться пед при стрельбе
weaponType - тип оружия

С остальными функциями надо разбираться, обычно из названия понятно, что они делают, дальше внутри смотри и ищи ссылки, откуда они вызываются. Например Ped->Dress() может переодеть педа. Если описать ее так, то можно менять скин игроку:

Код: C++
  1. void CPed::Dress(char * name) {
  2.         ((void(__thiscall *)(CPed *, char *))0x4EF030)(this, name);
  3.         ((void(__cdecl *)(bool _))0x40B5F0)(0);
  4.         ((void(__thiscall *)(CPed *))0x4EEFD0)(this);
  5. }
  6.  
  7. PlayerPed->Dress("player2");

А вообще не стоит все смешивать в одну кучу, вот зачем тебе все эти функции сразу, если непонятно их назначение. Выбери что-то конкретное и копай в этом направлении. Научиться писать плагины - это что-то слишком размытое. Ну напишешь ты 30 плагинов про все подряд, и что это будет? Лучше развивать конкретное направление, смотреть чего именно не хватает и собирать по кирпичику. Вообще эта тема зафлудилась.
7
Программирование / Re: Написание плагина. Настройка проекта
« Последний ответ от egor230 Март 17, 2019, 01:17:21 pm »
Пытаюсь разобраться с функциями в sdk plugin,  с классом CPed, помогите, понять за что отвечают эти функции?
Код: C++
  1.                                 //ped->AttachPedToEntity();//?
  2.                                 //ped->DriveVehicle();//?
  3.                                 //ped->Duck();//?
  4.                                 //ped->BuyIceCream();// ?
  5.                                 //ped->Add();//?
  6.                                 //ped->BuildPedLists();//?
  7.                                 //ped->LookForInterestingNodes();//?
  8.                                 //ped->Dress();//пед дергается?
  9.                                 //ped->LoadFightData();//?
  10.                                 //ped->Idle();//??
  11.                                 //ped->Avoid();// избегает пед.
  12.                                 //ped->Flee();//?
  13.                                 //ped->Attack();//?
  14.                                 //ped->Fall();//пед падает
  15.                                 //ePedAction атака = 17;
  16.  

В некоторых функция есть параметр CEntity, что это за класс? Он использует в этой функции
 CEntity* AttachPedToEntity(CEntity* entity, CVector offset, unsigned short position, float angle, eWeaponType weaponType);

Очень хочу научиться писать плагины для gta vc.   
8
Общие вопросы / Re: Как изменить название игры
« Последний ответ от Saint Март 16, 2019, 11:08:48 pm »
Saint, а как изменить путь сохранения?

.text:00601AB9
.text:006022A9

.data:006D63D8 5C 47 54 41 20 56 69 63+aGtaViceCityUse db '\GTA Vice City User Files',0  //

вот адресса памяти отвечающие за папку GTA Vice City User Files
9
Общие вопросы / Re: Как изменить название игры
« Последний ответ от Saint Март 16, 2019, 11:04:11 pm »
Saint, а как изменить путь сохранения?

.text:00601AB9
.text:006022A9
.data:006D63D8

вот адресса памяти отвечающие за папку GTA Vice City User Files
10
Общие вопросы / Re: Как перебрать все обьекты в игре?
« Последний ответ от xanser Март 16, 2019, 05:25:33 pm »
Пул рассчитан на 460 объектов, вряд ли это карта. Это пикапы и всякие объекты из object.dat
Для "удаления" можно использовать функцию CEntity::PreRender и там каждому нужному объекту установить масштаб в ноль или нулевую прозрачность.
Страницы: [1] 2 3 ... 10