HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #3561  
Старый 25.05.2019, 16:02
Receiver
Постоянный
Регистрация: 26.03.2016
Сообщений: 660
С нами: 5332594

Репутация: 163


По умолчанию

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



C++:





Код:
int
&
iDialogStatus
=
SF
->
getSAMP
(
)
->
getDialog
(
)
->
iIsActive
;



поставил, перед каждый вводом проверка, снова краш
 
Ответить с цитированием

  #3562  
Старый 25.05.2019, 17:21
Receiver
Постоянный
Регистрация: 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  

Фулл код дай.

Не достаточно просто вставить...
может объяснишь чё не так ?
 
Ответить с цитированием

  #3563  
Старый 25.05.2019, 18:43
Cake_
Участник форума
Регистрация: 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();
        }
    }


может объяснишь чё не так ?
Всё...
 
Ответить с цитированием

  #3564  
Старый 25.05.2019, 19:33
Receiver
Постоянный
Регистрация: 26.03.2016
Сообщений: 660
С нами: 5332594

Репутация: 163


По умолчанию

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

Всё...
а конкретнее ?
 
Ответить с цитированием

  #3565  
Старый 25.05.2019, 19:46
index
Новичок
Регистрация: 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/
 
Ответить с цитированием

  #3566  
Старый 25.05.2019, 20:15
Receiver
Постоянный
Регистрация: 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");
       }
}


нужен таймер без заморозки основного потока. (игры)

поток – краш.

таймер – краш.
 
Ответить с цитированием

  #3567  
Старый 25.05.2019, 20:36
ALF
Постоянный
Регистрация: 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
;
}
}
}
 
Ответить с цитированием

  #3568  
Старый 25.05.2019, 21:52
Receiver
Постоянный
Регистрация: 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 плохая идея

тупо нужен таймер, который игру бы не крашил
 
Ответить с цитированием

  #3569  
Старый 25.05.2019, 22:05
Receiver
Постоянный
Регистрация: 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, то есть вводу последнего символа
 
Ответить с цитированием

  #3570  
Старый 25.05.2019, 22:33
Receiver
Постоянный
Регистрация: 26.03.2016
Сообщений: 660
С нами: 5332594

Репутация: 163


По умолчанию

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

Cам код - полный ужас. Если делаешь клики диалогов делай это в хуке
C++:





Код:
if
(
GetTickCount
(
)
-
dwTime
>
timer
[
0
]
)
// warning C4018: >: несоответствие типов со знаком и без знака


я заметил что когда у меня задержка на каждом символе одинаковая, то все нормально.

если же разная, то эти символы вводятся без задержки. Что за бред блинблять
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.