[Вопрос] Помогите пофиксить краши из-за диалогового окна АХК - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Sanoxxx, Alowir, Phoenixxx_Czar  
[Вопрос] Помогите пофиксить краши из-за диалогового окна АХК
trenisk Дата: Понедельник, 05.02.2018, 19:25 | Сообщение # 1
Любитель
Сообщений: 42
Статус: Offline
Всем привет. Недавно нашел диалог, которые сделан через АХК, и настроил под себя. На данный момент там 563 строки, но как я заметил, игра начала крашить/зависать. Помогите пожалуйста решить проблему. Вот краткий пример скрипта(у меня же несколько диалогов c измененным содержимым текстом):
Код

if !A_IsAdmin && !%False%
{
    if A_OSVersion not in WIN_2003,WIN_XP,WIN_2000
    {
        Run *RunAs "%A_ScriptFullPath%" ,, UseErrorLevel
        if !ErrorLevel
        ExitApp
    }
    MsgBox 0x31, Ошибка запуска,
    (
        Для правильной работы программы в GTA:SA:MP нужны права Администратора.`nПродолжить в любом случае, нажмите "OK".  Для отмены нажмите "Cancel". ( Может ничего не работать. )
    )
    IfMsgBox Cancel
    ExitApp
}
#include %A_ScriptDir%\samp-udf.ahk ; Инклуд
#NoEnv  ; Для стабильности работы скрипта
#IfWinActive ahk_group Game
GroupAdd, Game, GTA:SA:MP
GroupAdd, Game, MTA: San Andreas
GroupAdd, Game, Multi Theft Auto
GroupAdd, Game, GTA: San Andreas
LineResult() {
if (!isDialogOpen() || getDialogStyle() = 0 || getDialogStyle() = 1 || getDialogStyle() = 3)
return false
while (isDialogOpen())
continue
if(GetKeyState("Esc", "P"))
return false
return getDialogLineNumber()
}

F3::
ShowDialog("2", "Помощь по функциям | {FF0000}Author: Madrasso", "Пример 1`nПример 2", "Выбрать", "Закрыть")
Result := LineResult()
if (!Result)
return
Gosub, Label%Result%
return
Label1:
{
ShowDialog("2", "Пример 1 | {FF0000}Author: Madrasso", "Пример 1.1`nПример 1.2", "Выбрать", "Закрыть")
Result := LineResult()
if (!Result)
return
Gosub, primer1%Result%
return
}
Label2:
{
ShowDialog("2", "Пример 2 | {FF0000}Author: Madrasso", "Пример 2.1`nПример 2.2", "Выбрать", "Закрыть")
Result := LineResult()
if (!Result)
return
Gosub, primer2%Result%
return
}
primer11:
ShowDialog("1", "Пример 1.1 | {FF0000}Author: Madrasso", "[Пример 1.1]", "Выбрать", "Закрыть")
input, text228, V, {enter}
KeyWait Enter, D
sendchat("" getDialogText() ": " text228 " ")
return
primer12:
ShowDialog("1", "Пример 1.2 | {FF0000}Author: Madrasso", "[Пример 1.2]", "Выбрать", "Закрыть")
input, text228, V, {enter}
KeyWait Enter, D
sendchat("" getDialogText() ": " text228 " ")
return
primer21:
ShowDialog("1", "Пример 2.1 | {FF0000}Author: Madrasso", "[Пример 2.1]", "Выбрать", "Закрыть")
input, text228, V, {enter}
KeyWait Enter, D
sendchat("" getDialogText() ": " text228 " ")
return
primer22:
ShowDialog("1", "Пример 2.2 | {FF0000}Author: Madrasso", "[Пример 2.2]", "Выбрать", "Закрыть")
input, text228, V, {enter}
KeyWait Enter, D
sendchat("" getDialogText() ": " text228 " ")
return


Сообщение отредактировал trenisk - Понедельник, 05.02.2018, 19:32
Wyareri Дата: Понедельник, 05.02.2018, 21:13 | Сообщение # 2
Боец
Сообщений: 56
Статус: Offline
Насколько я знаю это нельзя пофиксить вроде бы из-за разности кодировок САМПа, и АХК.
Сколько лазил по всяким форумам - так ответа и не нашёл.
Rinat_Namazov Дата: Понедельник, 05.02.2018, 22:14 | Сообщение # 3
Боец
Сообщений: 122
Статус: Offline
Цитата Wyareri ()
из-за разности кодировок САМПа, и АХК.

Бред.
Цитата trenisk ()
игра начала крашить/зависать

Более мене сложные функции в SAMP UDF по типу ShowDialog работают по принципу:
NumPut + writeRaw + createRemoteThread + waitForSingleObject + closeProcess
А это выделение памяти и создание временного потока для вызова какой-либо функции.
Можно скомпилировать AHK в *.dll формат в компиляторе AHK_H и заинжектить в процесс gta_sa.exe
Но для этого нужно переписать систему вызова функций диалога, и крашит естественно перестанет.

Заинжектить можно любым инжектором, даже который написан на AHK в формате *.exe


Сообщение отредактировал Rinat_Namazov - Понедельник, 05.02.2018, 22:16
trenisk Дата: Понедельник, 05.02.2018, 23:47 | Сообщение # 4
Любитель
Сообщений: 42
Статус: Offline
Цитата Rinat_Namazov ()
Но для этого нужно переписать систему вызова функций диалога, и крашит естественно перестанет.
Можете предоставить инструкцию пожалуйста?
Rinat_Namazov Дата: Понедельник, 05.02.2018, 23:57 | Сообщение # 5
Боец
Сообщений: 122
Статус: Offline
Цитата trenisk ()
Можете предоставить инструкцию пожалуйста?

Этим никто не занимался, и инструкции естественно нет.
Как новичку, для вас это будет сложновато.

Посоветую только ставить задержку перед вызовом диалога миллисекунд 200 где-то, а также использовать функцию AntiCrash() из UDF.
trenisk Дата: Вторник, 06.02.2018, 12:30 | Сообщение # 6
Любитель
Сообщений: 42
Статус: Offline
Цитата Rinat_Namazov ()
ставить задержку перед вызовом диалога миллисекунд 200 где-то, а также использовать функцию AntiCrash() из UDF
Не помогло sad

Добавлено (06.02.2018, 12:30)
---------------------------------------------
Проблема еще не решена.
up

Rinat_Namazov Дата: Вторник, 06.02.2018, 16:43 | Сообщение # 7
Боец
Сообщений: 122
Статус: Offline
Нельзя вызвать диалоги очень часто, поэтому между вызовами диалога нужна задержка, а также используй функцию антикраша перед и после(Так то хватит и один вызов этой функции, ну мы незнаем запустили ли скрипт раньше чем самп).

Можешь не ждать, ничего лучше того что я написал выше не предложат.
Joni228 Дата: Четверг, 08.02.2018, 09:41 | Сообщение # 8
Бывалый
Сообщений: 314
Статус: Offline
Смотрите свой код, возможно где то допустили ошибку!


  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума