Показать сообщение отдельно

  #5  
Старый 09.02.2022, 22:25
ImmortalDev
Познающий
Регистрация: 02.12.2019
Сообщений: 86
С нами: 3393864

Репутация: 23
По умолчанию

Цитата:
Сообщение от Dark_Knight  

Да. За CTimer я хз, не работал с ним, но я не вижу тут проверки на указатель и тебе все это можно в общей функе делать. Нет смысла разный код пихать в один и тот же элемент. Хотя кому как удобней)
Спасибо. Кажется, все понял. Пойду писать, проверять, заодно с CTimer получше познакомлюсь.

Проверку на указатель сделаю, само собой

C++:





Код:
static
int
timm
=
500
;
Events
::
gameProcessEvent
+=
[
&
ped
]
{
if
(
FindPlayerPed
(
)
)
{
if
(
ped
)
{
ped
->
SetOrientation
(
0.0f
,
0.0f
,
0.0f
)
;
ped
->
SetPosn
(
coordinates
[
0
]
,
coordinates
[
1
]
,
coordinates
[
2
]
)
;
//ped->UpdatePosition();
timm
=
CTimer
::
m_snTimeInMilliseconds
;
//Sleep(50);
}
}
}
;


Написал такой вот код, но все равно крашит. Что тут не так?

Сейчас кину полный код:

C++:





Код:
void
spawncPed
(
)
//(float* car_data)
{
static
int
keyPressTime
=
0
;
//static int timm = 0;
Events
::
gameProcessEvent
+=
[
]
{
//&car_data] {
if
(
FindPlayerPed
(
)
&&
KeyPressed
(
VK_F9
)
&&
CTimer
::
m_snTimeInMilliseconds
-
keyPressTime
>
500
)
{
#ifdef GTASA
keyPressTime
=
CTimer
::
m_snTimeInMilliseconds
;
int
modelID
=
pedModelIds
[
rand
(
)
%
250
]
;
CStreaming
::
RequestModel
(
modelID
,
0
)
;
CStreaming
::
LoadAllRequestedModels
(
false
)
;
CPed
*
ped
=
new
CCivilianPed
(
CPopulation
::
IsFemale
(
modelID
)
?
PED_TYPE_CIVFEMALE
:
PED_TYPE_CIVMALE
,
modelID
)
;
if
(
ped
)
{
ped
->
SetPosn
(
coordinates
[
0
]
,
coordinates
[
1
]
,
coordinates
[
2
]
)
;
ped
->
SetOrientation
(
0.0f
,
0.0f
,
0.0f
)
;
CWorld
::
Add
(
ped
)
;
/*ped->SetPosn(coordinates[0], coordinates[1], coordinates[2]);
                            ped->UpdatePosition();
                            CTimer::m_snTimeInMilliseconds - timm > 500;
                            timm = CTimer::m_snTimeInMilliseconds;*/
/*ped->PositionAnyPedOutOfCollision();
                            ped->m_pIntelligence->m_TaskMgr.SetTask(new CTaskComplexWanderStandard(4, rand() % 8, true), 4, false);*/
}
static
int
timm
=
500
;
Events
::
gameProcessEvent
+=
[
&
ped
]
{
if
(
FindPlayerPed
(
)
)
{
if
(
ped
)
{
ped
->
SetOrientation
(
0.0f
,
0.0f
,
0.0f
)
;
ped
->
SetPosn
(
coordinates
[
0
]
,
coordinates
[
1
]
,
coordinates
[
2
]
)
;
//ped->UpdatePosition();
timm
=
CTimer
::
m_snTimeInMilliseconds
;
//Sleep(50);
}
}
}
;
#else
CHud
::
SetHelpMessage
(
L
"Not done yet!"
,
true
,
false
)
;
#endif
}
}
;
}




Хорошо, я решил сделать так. В одном gameProcessEvent, я создаю педа и в нем же постоянно обновляю его позицию.

Только вот незадача, gameProcessEvent это цикл, значит педов будет создаваться дофига и это крашнет игру.

А вне gameProcessEvent создать невозможно, тоже крашнет.

Как быть?

Нужна наводка, пожалуйста, дальше сам разберусь

Я уже и класс пытался создать, чтоб создать новый поток, где будет обновление координат, но это тоже не увенчалось успехом

Всё! Я всё решил, сам разобрался))

Кароче, сPed *ped объявил глобальной переменной, в одной функции создавал самого педа, в другой функции я синхронизировал его с игроком.

После этого, просто

C++:





Код:
plugin
::
Events
::
gameProcessEvent
.
Add
(
spawncped
)
;
plugin
::
Events
::
gameProcessEvent
.
Add
(
sync
)
;


Для обеих функций)))

Спасибо

Dark_Knight​За наводку, видел бы ты радость на моем лице сейчас)
 
Ответить с цитированием