 |
|

25.05.2019, 16:02
|
|
Постоянный
Регистрация: 26.03.2016
Сообщений: 660
С нами:
5332594
Репутация:
163
|
|
Сообщение от cakebou
C++:
Код:
int
&
iDialogStatus
=
SF
->
getSAMP
(
)
->
getDialog
(
)
->
iIsActive
;
поставил, перед каждый вводом проверка, снова краш
|
|
|

25.05.2019, 17:21
|
|
Постоянный
Регистрация: 26.03.2016
Сообщений: 660
С нами:
5332594
Репутация:
163
|
|
Сообщение от cakebou
Фулл код дай.
Не достаточно просто вставить...
Код:
Код:
if (SF->getSAMP()->getDialog()->iIsActive && SF->getSAMP()->getDialog()->DialogID == 1 && work_started)
{
const auto myTask = []()
{
int &iDialogStatus = SF->getSAMP()->getDialog()->iIsActive;
if (iDialogStatus)
{
Sleep(599);
SF->getSAMP()->getDialog()->SetInputText("1");
}
if (iDialogStatus)
{
Sleep(200);
SF->getSAMP()->getDialog()->SetInputText("2");
}
if (iDialogStatus)
{
Sleep(300);
SF->getSAMP()->getDialog()->SetInputText("3");
}
if (iDialogStatus)
{
Sleep(100;
SF->getSAMP()->getDialog()->SetInputText("4");
}
if (iDialogStatus)
{
Sleep(555);
SF->getSAMP()->getDialog()->SetInputText("5");
}
};
std::thread(myTask).detach();
}
}
Сообщение от cakebou
Фулл код дай.
Не достаточно просто вставить...
может объяснишь чё не так ?
|
|
|

25.05.2019, 18:43
|
|
Участник форума
Регистрация: 04.04.2017
Сообщений: 263
С нами:
4793630
Репутация:
133
|
|
Сообщение от Sane4K
Код:
Код:
if (SF->getSAMP()->getDialog()->iIsActive && SF->getSAMP()->getDialog()->DialogID == 1 && work_started)
{
const auto myTask = []()
{
int &iDialogStatus = SF->getSAMP()->getDialog()->iIsActive;
if (iDialogStatus)
{
Sleep(599);
SF->getSAMP()->getDialog()->SetInputText("1");
}
if (iDialogStatus)
{
Sleep(200);
SF->getSAMP()->getDialog()->SetInputText("2");
}
if (iDialogStatus)
{
Sleep(300);
SF->getSAMP()->getDialog()->SetInputText("3");
}
if (iDialogStatus)
{
Sleep(100;
SF->getSAMP()->getDialog()->SetInputText("4");
}
if (iDialogStatus)
{
Sleep(555);
SF->getSAMP()->getDialog()->SetInputText("5");
}
};
std::thread(myTask).detach();
}
}
может объяснишь чё не так ?
Всё...
|
|
|

25.05.2019, 19:33
|
|
Постоянный
Регистрация: 26.03.2016
Сообщений: 660
С нами:
5332594
Репутация:
163
|
|
Сообщение от cakebou
Всё...
а конкретнее ?
|
|
|

25.05.2019, 19:46
|
|
Новичок
Регистрация: 18.10.2015
Сообщений: 6
С нами:
5563739
Репутация:
0
|
|
Сообщение от Sane4K
я прекрасно знаю что в моём коде происходит пиздец ;d это рофел, вот тебе норм код:
Код:
Код:
if (SF->getSAMP()->getDialog()->iIsActive && (SF->getSAMP()->getDialog()->DialogID == 9089 || SF->getSAMP()->getDialog()->DialogID == 9090) && work_started)
{
const auto myTask = []()
{
Sleep(100);
SF->getSAMP()->getDialog()->SetInputText("1");
Sleep(200);
SF->getSAMP()->getDialog()->SetInputText("1");
};
std::thread(myTask).detach();
}
}
зависает игра, приходится через диспетчер офать
Чтобы самому понять, что и где не так - воспользуйтесь отладкой. Люди на форуме - не компиляторы и не дебаггеры.
https://blast.hk/threads/20320/
|
|
|

25.05.2019, 20:15
|
|
Постоянный
Регистрация: 26.03.2016
Сообщений: 660
С нами:
5332594
Репутация:
163
|
|
Код:
Код:
void CALLBACK mainloop()
{
if (SF->getSAMP()->getDialog()->iIsActive && SF->getSAMP()->getDialog()->DialogID == 1 && work_started)
{
SF->getSAMP()->getDialog()->SetInputText("1");
// нужна задержка в 5000 мс. перед вводом.
SF->getSAMP()->getDialog()->SetInputText("2");
}
}
нужен таймер без заморозки основного потока. (игры)
поток – краш.
таймер – краш.
|
|
|

25.05.2019, 20:36
|
|
Постоянный
Регистрация: 14.11.2017
Сообщений: 319
С нами:
4472205
Репутация:
163
|
|
Сообщение от Sane4K
Код:
Код:
void CALLBACK mainloop()
{
if (SF->getSAMP()->getDialog()->iIsActive && SF->getSAMP()->getDialog()->DialogID == 1 && work_started)
{
SF->getSAMP()->getDialog()->SetInputText("1");
// нужна задержка в 5000 мс. перед вводом.
SF->getSAMP()->getDialog()->SetInputText("2");
}
}
нужен таймер без заморозки основного потока. (игры)
поток – краш.
таймер – краш.
C++:
Код:
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
!
GAME
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
init
=
true
;
}
if
(
SF
->
getSAMP
(
)
->
getDialog
(
)
->
iIsActive
&&
SF
->
getSAMP
(
)
->
getDialog
(
)
->
DialogID
==
1
)
{
static
bool
state
=
false
;
static
DWORD dwTime
=
0
;
if
(
!
state
)
{
SF
->
getSAMP
(
)
->
getDialog
(
)
->
SetInputText
(
"1"
)
;
state
=
true
;
dwTime
=
GetTickCount
(
)
;
}
else
if
(
state
&&
GetTickCount
(
)
-
dwTime
>
5000
)
{
SF
->
getSAMP
(
)
->
getDialog
(
)
->
SetInputText
(
"2"
)
;
state
=
false
;
}
}
}
|
|
|

25.05.2019, 21:52
|
|
Постоянный
Регистрация: 26.03.2016
Сообщений: 660
С нами:
5332594
Репутация:
163
|
|
Сообщение от ALF
C++:
Код:
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
!
GAME
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
init
=
true
;
}
if
(
SF
->
getSAMP
(
)
->
getDialog
(
)
->
iIsActive
&&
SF
->
getSAMP
(
)
->
getDialog
(
)
->
DialogID
==
1
)
{
static
bool
state
=
false
;
static
DWORD dwTime
=
0
;
if
(
!
state
)
{
SF
->
getSAMP
(
)
->
getDialog
(
)
->
SetInputText
(
"1"
)
;
state
=
true
;
dwTime
=
GetTickCount
(
)
;
}
else
if
(
state
&&
GetTickCount
(
)
-
dwTime
>
5000
)
{
SF
->
getSAMP
(
)
->
getDialog
(
)
->
SetInputText
(
"2"
)
;
state
=
false
;
}
}
}
Код:
Код:
switch (state)
{
case 0: dwTime = GetTickCount(); state ++;
case 1:
{
if (GetTickCount() - dwTime > 500)
{
sprintf(result, "%c", text[0]);
SF->getSAMP()->getDialog()->SetInputText(result);
state ++;
dwTime = GetTickCount();
}
}
case 2:
{
if (GetTickCount() - dwTime > 600)
{
sprintf(result, "%c%c", text[0], text[1]);
SF->getSAMP()->getDialog()->SetInputText(result);
state ++;
dwTime = GetTickCount();
}
}
}
если в стриме 5-6 игроков, то скрипт сбивается
видимо TickCount плохая идея
тупо нужен таймер, который игру бы не крашил
|
|
|

25.05.2019, 22:05
|
|
Постоянный
Регистрация: 26.03.2016
Сообщений: 660
С нами:
5332594
Репутация:
163
|
|
Сообщение от cakebou
У тебя взаимодействий с игроками нет...
Кидай полный код откуда мы можем знать что у тебя еще есть?
C++:
Код:
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
255
,
55
,
55
)
,
"***ня загружена."
)
;
init
=
true
;
}
if
(
SF
->
getSAMP
(
)
->
getDialog
(
)
->
iIsActive
&&
(
SF
->
getSAMP
(
)
->
getDialog
(
)
->
DialogID
==
1
)
{
static
DWORD dwTime
=
0
;
char
result
[
5
]
;
char
*
text
=
"лох"
;
static
int
state
=
0
;
switch
(
state
)
{
case
0
:
dwTime
=
GetTickCount
(
)
;
state
++
;
case
1
:
{
if
(
GetTickCount
(
)
-
dwTime
>
500
)
{
sprintf
(
result
,
"%c"
,
text
[
0
]
)
;
SF
->
getSAMP
(
)
->
getDialog
(
)
->
SetInputText
(
result
)
;
state
++
;
dwTime
=
GetTickCount
(
)
;
}
}
case
2
:
{
if
(
GetTickCount
(
)
-
dwTime
>
600
)
{
sprintf
(
result
,
"%c%c"
,
text
[
0
]
,
text
[
1
]
)
;
SF
->
getSAMP
(
)
->
getDialog
(
)
->
SetInputText
(
result
)
;
state
++
;
dwTime
=
GetTickCount
(
)
;
}
}
case
3
:
{
if
(
GetTickCount
(
)
-
dwTime
>
700
)
{
sprintf
(
result
,
"%c%c%c"
,
text
[
0
]
,
text
[
1
]
,
text
[
2
]
)
;
SF
->
getSAMP
(
)
->
getDialog
(
)
->
SetInputText
(
result
)
;
state
++
;
dwTime
=
GetTickCount
(
)
;
}
}
}
char
result2
[
255
]
;
sprintf
(
result2
,
"%d | %d | %d"
,
GetTickCount
(
)
,
GetTickCount
(
)
-
dwTime
,
state
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
result2
)
;
}
}
если в зоне стрима есть человек, то скрипт сразу переходит к state 3, то есть вводу последнего символа
|
|
|

25.05.2019, 22:33
|
|
Постоянный
Регистрация: 26.03.2016
Сообщений: 660
С нами:
5332594
Репутация:
163
|
|
Сообщение от cakebou
Cам код - полный ужас. Если делаешь клики диалогов делай это в хуке
C++:
Код:
if
(
GetTickCount
(
)
-
dwTime
>
timer
[
0
]
)
// warning C4018: >: несоответствие типов со знаком и без знака
я заметил что когда у меня задержка на каждом символе одинаковая, то все нормально.
если же разная, то эти символы вводятся без задержки. Что за бред блинблять
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|