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

Страницы: [1] 2 3 ... 10
1
Где то еще должен быть пункт который добавляет к источнику lens-flare
Это уже в 2dfx. PointLight - это чисто сам свет от источника. Т.е. то, что освещает педов, авто, катсценовые и динамические объекты.
Так же у источников есть тот самый 2dfx + "тень"(отрисовка текстуры света на горизонтальной поверхности). Это уже в другом массиве(ах).

Это насколько я это всё понимаю(могу ошибаться, но вроде всё верно).
2
CPointLights:

0x9751B0 - количество PointLights
0x7E4FE0 - начало пула PointLights (максимум - 32 элемента)
каждый PointLight состоит из 44(0x2С) байт.

Структура совпадает с GTA3, я просто добавлю пояснения.

0x00 [float] - x coord
0x04 [float] - y coord
0x08 [float] - z coord
0x0С [float] - x direction
0x10 [float] - y direction
0x14 [float] - z direction
0x18 [float] - дальность света
0x1С [float] - red(0.0-1.0)
0x20 [float] - green(0.0-1.0)
0x24 [float] - blue(0.0-1.0)
0x28 [byte] - тип света(0 - светит во все стороны из центра, 1 - фары, светят строго по вектору, 3-4 - хз, не освещают динамику, скорее всего нужны для источников, которые кроме 2dfx никак не проявляют себя)
0x29 [byte] - тип "дымки" вокруг света(0 - нет "дымки", 1 и 2 - есть)
0x2A [bool] - генерация дополнительной тени авто игрока вблизи тени(0 - нет, 1 - да)
0x2B [byte] - не используется(пустышка)

Продолжаю разбор каждого элемента, пост будет обновляться.


Где то еще должен быть пункт который добавляет к источнику lens-flare
3
CPointLights:

0x9751B0 - количество PointLights
0x7E4FE0 - начало массива PointLights (максимум - 32 элемента)
каждый PointLight состоит из 44(0x2С) байт.

Структура совпадает с GTA3, я просто добавлю пояснения.

0x00 [float] - x coord
0x04 [float] - y coord
0x08 [float] - z coord
0x0С [float] - x direction
0x10 [float] - y direction
0x14 [float] - z direction
0x18 [float] - дальность света
0x1С [float] - red(0.0-1.0)
0x20 [float] - green(0.0-1.0)
0x24 [float] - blue(0.0-1.0)
0x28 [byte] - тип света(0 - светит во все стороны из центра, 1 - directional(фары), светят строго по вектору, 2 - не используется(вроде), становятся слабее, если источников этого типа много, 3-4 - хз, не освещают динамику, скорее всего нужны для источников, которые кроме 2dfx никак не проявляют себя)
0x29 [byte] - тип "дымки" вокруг света(0 - нет "дымки", 1 и 2 - есть)
0x2A [bool] - генерация дополнительной тени авто игрока вблизи источника света(0 - нет, 1 - да), работает только для типа света 0, при параметре LightShd в timecyc.dat больше 0
0x2B [byte] - не используется(пустышка)

Продолжаю разбор каждого элемента, пост будет обновляться.
4
Ой, я олень, сори - говорю же: давно не юзал это.

В общем, OutCoords - это нужные тебе координаты экрана(высчитывать разрешение экрана игрока дополнительно не надо), а вот width и height уже хз что такое. Меня спутала база idb, которую я сейчас юзаю.

Короче - как-то так:
Код: C++
  1.                 float MyCoords[3]; // наши 3d координаты
  2.                 float OutCoords[3]; // будущие X и Y координаты экрана, а также расстояние до 3d точки от камеры
  3.                 float width; // хз что
  4.                 float height; // хз что
  5.                 MyCoords[0] = 1245.0; // записываем свой X(просто пример)
  6.                 MyCoords[1] = 657.0; // записываем свой Y(просто пример)
  7.                 MyCoords[2] = 33.0; // записываем свой Z(просто пример)
  8.                 _CalcScreenCoors(&MyCoords[0], &OutCoords[0], &width, &height, 1);
  9.                 // теперь в переменных OutCoords[0] и OutCoords[1] уже записаны действительные координаты экрана игрока, юзаем их по надобности
Также эта функция может возвращать bool значение, которое true, если 3d точка примерно в зоне видимости экрана, и false - если нет, т.е. ты сразу можешь юзать функцию, как условие.

благодарю, разобрался.
5
Ой, я олень, сори - говорю же: давно не юзал это.

В общем, OutCoords - это нужные тебе координаты экрана(высчитывать разрешение экрана игрока дополнительно не надо), а вот width и height уже хз что такое. Меня спутала база idb, которую я сейчас юзаю.

Короче - как-то так:
Код: C++
  1.                 float MyCoords[3]; // наши 3d координаты
  2.                 float OutCoords[3]; // будущие X и Y координаты экрана, а также расстояние до 3d точки от камеры
  3.                 float width; // хз что
  4.                 float height; // хз что
  5.                 MyCoords[0] = 1245.0; // записываем свой X(просто пример)
  6.                 MyCoords[1] = 657.0; // записываем свой Y(просто пример)
  7.                 MyCoords[2] = 33.0; // записываем свой Z(просто пример)
  8.                 _CalcScreenCoors(&MyCoords[0], &OutCoords[0], &width, &height, 1);
  9.                 // теперь в переменных OutCoords[0] и OutCoords[1] уже записаны действительные координаты экрана игрока, юзаем их по надобности
Также эта функция может возвращать bool значение, которое true, если 3d точка примерно в зоне видимости экрана, и false - если нет, т.е. ты сразу можешь юзать функцию, как условие.
6
всё равно оно как-то не верно работает


даже если использовать стандартную функцию https://msdn.microsoft.com/en-us/library/windows/desktop/dd162498(v=vs.85).aspx
7
Я не внимательно прочел, и дал функцию для SA.
Для вайса вот:
Код: C++
  1. 5778B0           ; char __cdecl CSprite::CalcScreenCoors(const RwV3d *posn, RwV3d *out, float *w, float *h, bool checkMaxVisible)

пример использования?

Ну, объявляешь функцию как-то так:
Код: C++
  1. auto            _CalcScreenCoors        = (unsigned int (__cdecl*)(float*, float*, float*, float*, bool))0x5778B0;

затем юзаешь так:
Код: C++
  1.                 float MyCoords[3]; // наши 3d координаты
  2.                 float OutCoords[3]; // хз зачем, не особо ковырял функцию и не разобрался
  3.                 float width; // будущая x координата экрана
  4.                 float height; // будущая y координата экрана
  5.                 MyCoords[0] = 1245.0; // записываем свой X(просто пример)
  6.                 MyCoords[1] = 657.0; // записываем свой Y(просто пример)
  7.                 MyCoords[2] = 33.0; // записываем свой Z(просто пример)
  8.                 _CalcScreenCoors(&MyCoords[0], &OutCoords[0], &width, &height, 1);
  9.                 // теперь в переменных width и height уже записаны координаты экрана, если бы разрешение было бы 640x480
  10.                 width = width/640*(*(signed int *)(0xA0FD04));
  11.                 height = width/480*(*(signed int *)(0xA0FD08));
  12.                 // теперь в переменных width и height уже записаны действительные координаты экрана игрока, юзаем их по надобности

Следует отметить 2 вещи:
1) Я говнокодер, и можно сделать лучше
2) Этот код я не тестировал(я тестил эту функцию давно и на CLEO, а не в C++), но главное - передать смысл(надеюсь, мне это удалось)
8
Высчитать координаты экрана по мировым 3d координатам можно этой функцией:
70CE30                             ; CSprite::CalcScreenCoors(RwV3d const&, RwV3d*, float *, float *, bool, bool)

Первый RwV3d - указатель на твои мировые 3d координаты. Второй RwV3d - хз что.
В следующие два указателя float будут записаны координаты из расчета разрешения 640x480, так что их нужно еще будет перемножать на ширину экрана игрока/640(для ширины) и на высоту экрана игрока/480(для высоты, ессно).
Последние оба bool ставь на единицы.
В СА не тестил, в ВС аналогичная функция работает.

пример использования?
9
Общие вопросы / Re: Помощь с CLEO
« Последний ответ от Shagg_E Июнь 03, 2018, 02:10:03 am »
Попробуй при создании актера заменить 4 pedtype на другой(от полицейского или члена банды). Либо сделать "цель" не объектом, а актером.
Если второе сработает - сделай актера-цель невидимым, затем помести этого невидимого актера в невидимый(модель #NULL) или маленький(модель кастета) объект и отключи у этого объекта коллизию, чтобы этот летающий невидимый актер никому не мешал.
10
Общие вопросы / Re: Помощь с CLEO
« Последний ответ от egor230 Июнь 03, 2018, 01:25:03 am »
Здравствуйте, уважаемый Shagg_E.  Вы меня направили на верный путь.
 Всё-таки  добился,  чтобы  актер стрелял из машины.  Конечно я тебя только прототип скрипта.
 вот   смотрите https://www.youtube.com/watch?v=Riejcb3uVo0&feature=youtu.be
Только почему он стреляет одиночными выстрелами, а ни очередью? Погулять любовь подсказке.
Код: Javascript
  1. {$CLEO .cs}
  2. 0000:  
  3. :1
  4. wait 0      
  5. 80E0:  player $player_char driving // не в авто
  6. jf @1
  7. 0ADC: test_cheat "xc"
  8. jf @1      
  9. 04C4: create_coordinate 0@ 1@ 2@ from_actor $PLAYER_ACTOR offset 0.0 6.2 0.0
  10. 05F5: call_scm_func @fun params_count 3 0@ 1@ 2@ 3@ 4@        
  11. 0407: create_coordinate 0@ 1@ 2@ from_car 3@ offset 0.0 20.0 1.50 // коор цели
  12. 0107: 5@ = create_object 350 at 0@ 1@ 2@            
  13. 02E2: set_actor 4@ weapon_accuracy_to 10
  14. :2
  15. wait 0
  16. if 8AB0: not key_pressed 0x46 // f
  17. jf @1                                    
  18. 01D8: unknown_actor 4@ unknown_fire_at_target 5@
  19. jump @2                                      
  20. :fun
  21. repeat                        
  22. wait 0
  23. 0247: request_model #SENTXS  
  24. 0247: request_model #WMOST  
  25. 0247: request_model #m4    
  26. 0247: request_model 350                                      
  27. 038B: load_requested_models            
  28. gosub @delay
  29. until gosub @available
  30. 00A5: 3@ = create_car #SENTXS at 0@ 1@ 2@    
  31. 000B: 2@ += 4.0  // floating-point values
  32. 009A: 4@ = create_actor_pedtype 4 model #WMOST at 0@ 1@ 2@        
  33. 01B2: give_actor 4@ weapon 26 ammo 9999 // Load the weapon model before using this    
  34. 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 26  
  35. 0249: release_model #SENTXS
  36. 0249: release_model #WMOST
  37. 0249: release_model #m4
  38. 0AB2: ret 2 3@ 4@
  39. :delay
  40. 16@ = 0
  41. repeat
  42. wait 0                
  43. until 0029: 16@ >= 3 // задержка
  44. return    
  45. :available
  46. wait 0                
  47. if and
  48. 0248: model #SENTXS available
  49. 0248: model #WMOST available
  50. 0248: model #m4 available    
  51. 0248: model 350 available
  52. jf @available
  53. return                  
  54.  
Страницы: [1] 2 3 ... 10