Сообщение от
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За наводку, видел бы ты радость на моем лице сейчас)