Краш игры при выполнении команды АХК

MIDIT

Новичок
Автор темы
10
2
Вообщем, первый раз сюда пишу, уже голову сломал. Решил сделать АХК для облегчения работы Медика в САМП. Сделал его на командах, но при вводе любой из них - самп просто вылетает..
Просьба помочь, полный код оставлю, также АХК вместе с Samp.udf
Samp.ahk и мой файл в одной папке, скорее всего или я накосячил или что-то с гта..

Код:
#IfWinActive GTA:SA:MP
#include samp.ahk
#SingleInstance, force

:?:/ahk::
ShowDialog("0","Список команд (by Rey McQueen)","Список команд биндера:`n`n /peci - выдача рецепта`n /badi - лечение от наркозависимости.`n /hpbi - лечение","Понятно")
return

:?:/peci::
addChatMessageEx("00FF00", "{#87CEEB}Информация о выдаче рецепта")
addChatMessageEx("00FF00", "{#1E90FF}/peci - информация")
addChatMessageEx("00FF00", "{#1E90FF}/pec1 - Приветствие")
addChatMessageEx("00FF00", "{#1E90FF}/pec2 - Оплата услуги")
addChatMessageEx("00FF00", "{#1E90FF}/pec3 - РП отыгровка")
return
:?:/badi::
addChatMessageEx("00FF00", "{#87CEEB}Информация о лечении нарко")
addChatMessageEx("00FF00", "{#1E90FF}/badi - информация")
addChatMessageEx("00FF00", "/bad1 - Приветствие")
addChatMessageEx("00FF00", "/bad2 - Оплата услуги")
addChatMessageEx("00FF00", "/bad3 - РП отыгровка")
return
:?:/hpbi::
addChatMessageEx("00FF00", "{#87CEEB}Информация о лечении")
addChatMessageEx("00FF00", "{#1E90FF}/hpbi - информация")
addChatMessageEx("00FF00", "{#1E90FF}/hpb1 - Приветствие") 
addChatMessageEx("00FF00", "{#1E90FF}/hpb2 - Процесс лечения")
return

:?:/hpb1::
SendChat("Здравствуйте, я сотрудник данного медицинского центра Рей МакКвин .Что вас беспокоит?")
return
:?:/hpb2::
SendChat("/me легким движением достал блокнот и ручку")
sleep 2000
SendChat("/do Блокнот и ручка в руках.")
sleep 2000
SendChat("/me записал симптомы в блокнот")
sleep 2000
SendChat("/me правой рукой снял сумку с плеча, затем расстегнул её")
sleep 2000
SendChat("/todo Это лекарство Вам поможет*доставая нужное лекарство из сумки")
sleep 2000
SendChat("/me правой рукой достал лекарство")
sleep 2000
SendChat("/do Лекарство в правой руке.")
sleep 2000
SendChat("/me протянув руку, передал лекарство пациенту")
sleep 2000
SendChat("/todo Всего хорошего,Принимайте это лекарство! И вам станет лучше! не болейте*улыбаясь.")
sleep 2000
SendInput, {f6}/heal
sleep 2000

:?:/pec1::
SendChat("Здравствуйте, вы хотели бы получить рецепт?")
return
:?:/pec2::
SendChat("Стоимость одного 4.000$")
sleep 2000
SendChat("Сколько вам рецептов?")
return
:?:/pec3::
SendChat("/do На плече у Рея весит мед.сумка.")
sleep 1500
SendChat("/me правой рукой снял мед.сумку с плеча")
sleep 1500
SendChat("/me открыл мед.сумку и достал бланки")
sleep 1500
SendChat("/me заполняет бланки на оформление лекарств")
sleep 1500
SendChat("/do Бланки заполнены.")
sleep 1500
SendChat("/me поставил печать Больница Лос-Сантоса")
sleep 1500
SendChat("/me оформил рецепт и закрыл мед.сумку")
sleep 1500
SendChat("/me движением правой руки повесил мед.сумку на плечо")
sleep 1500
SendChat("/do Мед.сумка на плече. Рецепт в руке.")
sleep 1500
SendChat("/me передал рецепт человеку напротив ")
sleep 1500
SendInput, {f6}/recept 
return

:?:/bad1::
SendChat("Здравствуйте, вам нужна Лечение от наркозависимости?")
return
:?:/bad2::
SendChat("Это для Вас будет стоить 15.000$.")
sleep 1500
SendChat("Оплатите и продолжим процедуру оформления карты.")
return
:?:/bad3::
SendChat("/do В тумбочке лежат все необходимые предметы для проведения курса.")
sleep 1500
SendChat("/me наклонился и открыл дверцу тумбочки")
sleep 1500
SendChat("/do Дверца тумбы открыта.")
sleep 1500
SendChat("/me достал из тумбочки жгут")
sleep 1500
SendChat("/do Жгут в руке.")
sleep 1500
SendChat("/me наложил жгут на руку пациента и крепко затянул его")
sleep 1500
SendChat("/do Жгут на руке пациента.")
sleep 1500
SendChat("/me нащупал вену на руке больного")
sleep 1500
SendChat("/me достал из тумбочки шприц с вакциной")
sleep 1500
SendChat("/do Вакцина в правой руке.")
sleep 1500
SendChat("/me вводит содержимое шприца в вену наркозависимого")
sleep 1500
SendChat("/do В кровь пациента введен анти-наркотический препарат.")
sleep 1500
SendChat("/me отложил шприц в сторону")
sleep 1500
SendChat("/me снял жгут с руки пациента")
sleep 1500
SendChat("/me приложил смоченную в спирту ватку к месту прокола")
sleep 1500
SendInput, {f6}/healbad 
return

Также кому не сложно помогите сделать мол уменьшить кол-во команд, что-бы ввел /hpb один раз оно написало потом ещё раз /hpb и оно пишет уже следующую отыгровку.
Буду очень благодарен если поможете решить проблему!
 
Последнее редактирование:

darksoor

Известный
674
353
Вообщем, первый раз сюда пишу, уже голову сломал. Решил сделать АХК для облегчения работы Медика в САМП. Сделал его на командах, но при вводе любой из них - самп просто вылетает..
Просьба помочь, полный код оставлю, также АХК вместе с Samp.udf
Samp.ahk и мой файл в одной папке, скорее всего или я накосячил или что-то с гта..

Код:
#IfWinActive GTA:SA:MP
#include samp.ahk
#SingleInstance, force

:?:/ahk::
ShowDialog("0","Список команд (by Rey McQueen)","Список команд биндера:`n /peci - выдача рецепта`n /badi - лечение от наркозависимости.`n /hpbi - лечение","Понятно")
return

:?:/peci::
Text := "{#87CEEB}Информация о выдаче рецепта`n {#1E90FF}/peci - информация`n /pec1 - Приветствие`n /pec2 - Оплата услуги`n /pec3 - РП отыгровка"
Addchatmessage(text)
return
:?:/badi::
Text := "{#87CEEB}Информация о лечении нарко`n {#1E90FF}/badi - информация`n /bad1 - Приветствие`n /bad2 - Оплата услуги`n /bad3 - РП отыгровка"
Addchatmessage(text)
return
:?:/hpbi::
Text := "{#87CEEB}Информация о лечении`n {#1E90FF}/hpbi - информация`n /hpb1 - Приветствие`n /hpb2 - Процесс лечения"
Addchatmessage(text)
return

:?:/hpb1::
SendChat("Здравствуйте, я сотрудник данного медицинского центра Рей МакКвин .Что вас беспокоит?")
return
:?:/hpb2::
SendChat("/me легким движением достал блокнот и ручку")
sleep 2000
SendChat("/do Блокнот и ручка в руках.")
sleep 2000
SendChat("/me записал симптомы в блокнот")
sleep 2000
SendChat("/me правой рукой снял сумку с плеча, затем расстегнул её")
sleep 2000
SendChat("/todo Это лекарство Вам поможет*доставая нужное лекарство из сумки")
sleep 2000
SendChat("/me правой рукой достал лекарство")
sleep 2000
SendChat("/do Лекарство в правой руке.")
sleep 2000
SendChat("/me протянув руку, передал лекарство пациенту")
sleep 2000
SendChat("/todo Всего хорошего,Принимайте это лекарство! И вам станет лучше! не болейте*улыбаясь.")
sleep 2000
SendInput, {f6}/heal
sleep 2000

:?:/pec1::
SendChat("Здравствуйте, вы хотели бы получить рецепт?")
return
:?:/pec2::
SendChat("Стоимость одного 4.000$")
sleep 2000
SendChat("Сколько вам рецептов?")
return
:?:/pec3::
SendChat("/do На плече у Рея весит мед.сумка.")
sleep 1500
SendChat("/me правой рукой снял мед.сумку с плеча")
sleep 1500
SendChat("/me открыл мед.сумку и достал бланки")
sleep 1500
SendChat("/me заполняет бланки на оформление лекарств")
sleep 1500
SendChat("/do Бланки заполнены.")
sleep 1500
SendChat("/me поставил печать Больница Лос-Сантоса")
sleep 1500
SendChat("/me оформил рецепт и закрыл мед.сумку")
sleep 1500
SendChat("/me движением правой руки повесил мед.сумку на плечо")
sleep 1500
SendChat("/do Мед.сумка на плече. Рецепт в руке.")
sleep 1500
SendChat("/me передал рецепт человеку напротив ")
sleep 1500
SendInput, {f6}/recept
return

:?:/bad1::
SendChat("Здравствуйте, вам нужна Лечение от наркозависимости?")
return
:?:/bad2::
SendChat("Это для Вас будет стоить 15.000$.")
sleep 1500
SendChat("Оплатите и продолжим процедуру оформления карты.")
return
:?:/bad3::
SendChat("/do В тумбочке лежат все необходимые предметы для проведения курса.")
sleep 1500
SendChat("/me наклонился и открыл дверцу тумбочки")
sleep 1500
SendChat("/do Дверца тумбы открыта.")
sleep 1500
SendChat("/me достал из тумбочки жгут")
sleep 1500
SendChat("/do Жгут в руке.")
sleep 1500
SendChat("/me наложил жгут на руку пациента и крепко затянул его")
sleep 1500
SendChat("/do Жгут на руке пациента.")
sleep 1500
SendChat("/me нащупал вену на руке больного")
sleep 1500
SendChat("/me достал из тумбочки шприц с вакциной")
sleep 1500
SendChat("/do Вакцина в правой руке.")
sleep 1500
SendChat("/me вводит содержимое шприца в вену наркозависимого")
sleep 1500
SendChat("/do В кровь пациента введен анти-наркотический препарат.")
sleep 1500
SendChat("/me отложил шприц в сторону")
sleep 1500
SendChat("/me снял жгут с руки пациента")
sleep 1500
SendChat("/me приложил смоченную в спирту ватку к месту прокола")
sleep 1500
SendInput, {f6}/healbad
return

Также кому не сложно помогите сделать мол уменьшить кол-во команд, что-бы ввел /hpb один раз оно написало потом ещё раз /hpb и оно пишет уже следующую отыгровку.
Буду очень благодарен если поможете решить проблему!

По крашам - возможные причины:
- как ты используешь addChatMessage - недопустимо. Один раз вызывай функцию на одну строку;
- версия Samp UDF не совпадает с твоей версией клиента;
- отключи антивирус;
- установи программу AutoHotKey в кодировку Ansi-32.

Если будет время, перепишу тебе код в человеческий вид.
 
  • Нравится
Реакции: MIDIT

MIDIT

Новичок
Автор темы
10
2
По крашам - возможные причины:
- как ты используешь addChatMessage - недопустимо. Один раз вызывай функцию на одну строку;
- версия Samp UDF не совпадает с твоей версией клиента;
- отключи антивирус;
- установи программу AutoHotKey в кодировку Ansi-32.

Если будет время, перепишу тебе код в человеческий вид.

Всё таки решил. Мучался и решил поставить 0.3.7 R1 и получилось, оказывается всё таки проблема с UDF была.. А какой всё таки человеческий код?
 
Последнее редактирование:

darksoor

Известный
674
353
А какой всё таки человеческий код?

Вижу, что ты старался написать, теперь покажу тебе более-менее правильный пример.

Для начала добавляем две функции в SAMP-UDF.
Первой функцией будет парная отправка сообщений через массив.
AutoHotKey:
ArrayToSendChat(ArrayName, wSleep := 1500) { ; Функция парной отправки сообщений (массив, задержка).
   for i, element in ArrayName
   {
      SendChat(element)
      Sleep, %wSleep%
   }
}

Использование функции:
AutoHotKey:
ArrayToSendChat(["Какой хороший день сегодня.", "/me осмотрелся вокруг и насладился красотой природы"], 2000)
; Первое - нам нужен обычный массив, берём его обязательно в [ ]
; 2000 - это задержка, которую можно опустить. По умолчанию выставлена задержка в 1500 м.с.

Вторая функция для выбора дальнейшего действия и прыжка на другую метку (чтобы не писать всё по 100 раз, функцией лучше):
AutoHotKey:
functionChoise(var)
{
   addChatMessageEx("00FF00", "{87CEEB}Продолжить - F2, для отмены действия - F3.")
   while (!GetKeyState("F2", "P") && !GetKeyState("F3", "P"))
      continue
   if (GetKeyState("F2", "P"))
   {
      Gosub, %var%
      return
   }
   else if (GetKeyState("F3", "P"))
   {
      addChatMessageEx("00FF00", "{87CEEB}Вы отменили действие.")
      return
   }
}

Кидаем две функции в самый конец SAMP-UDF.ahk, сохраняем и переходим к коду скрипта.
AutoHotKey:
#NoEnv
#SingleInstance force
#Include SAMP-UDF.ahk
#IfWinActive GTA:SA:MP

$~NumpadEnter::
$~Enter::
if (!isInChat()) || (isDialogOpen())
   Return
Sleep 250
blockChatInput()
tempText := readString(hGTA, dwSAMP + 0x12D8F8, 256)
tempCmd := StrSplit(tempText, " ")[1]
unblockChatInput()

if (tempText == "/ahk")
{
   ShowDialog(0, "Список команд (by Rey McQueen)", "Список команд биндера:`n`n/pec [id] - выдача рецепта.`n/bad [id] - лечение от наркозависимости.`n/hpb [id] - лечение.", "Понятно")
   return
}

if (tempCmd == "/pec")
{
    if (RegExMatch(tempText, "^" tempCmd "\s(\d{1,3})$", out_pars))
    {
        Gosub, pec_1
        return
    }
    Else
        addChatMessageEx("00FF00", "{87CEEB}Используйте: " tempCmd " [Ид]")
}
if (tempCmd == "/bad")
{
    if (RegExMatch(tempText, "^" tempCmd "\s(\d{1,3})$", out_pars))
    {
        Gosub, bad_1
        return
    }
    Else
        addChatMessageEx("00FF00", "{87CEEB}Используйте: " tempCmd " [Ид]")
}
if (tempCmd == "/hpb")
{
    if (RegExMatch(tempText, "^" tempCmd "\s(\d{1,3})$", out_pars))
    {
        Gosub, hpb_1
        return
    }
    Else
         addChatMessageEx("00FF00", "{87CEEB}Используйте: " tempCmd " [Ид]")
}
return

; ======================================================
; Выдача рецепта
; ======================================================
pec_1:
SendChat("Здравствуйте, вы хотели бы получить рецепт?")
Sleep, 250
functionChoise("pec_2")
return
pec_2:
ArrayToSendChat(["Стоимость одного 4.000$", "Сколько вам рецептов?"], 2000)
functionChoise("pec_3")
return
pec_3:
ArrayToSendChat(["/do На плече у Рея весит мед.сумка.", "/me правой рукой снял мед.сумку с плеча", "/me открыл мед.сумку и достал бланки", "/me заполняет бланки на оформление лекарств", "/do Бланки заполнены.", "/me поставил печать Больница Лос-Сантоса", "/me оформил рецепт и закрыл мед.сумку", "/me движением правой руки повесил мед.сумку на плечо", "/do Мед.сумка на плече. Рецепт в руке.", "/me передал рецепт человеку напротив", "/recept " out_pars1])
return

; ======================================================
; Лечение от наркозависимости
; ======================================================
bad_1:
SendChat("Здравствуйте, вам нужно лечение от наркозависимости?")
Sleep, 250
functionChoise("bad_1")
return
bad_2:
ArrayToSendChat(["Это для Вас будет стоить 15.000$.", "Оплатите и продолжим процедуру оформления карты."])
functionChoise("bad_2")
return
bad_3:
ArrayToSendChat(["/do В тумбочке лежат все необходимые предметы для проведения курса.", "/me наклонился и открыл дверцу тумбочки", "/do Дверца тумбы открыта.", "/me достал из тумбочки жгут", "/do Жгут в руке.", "/me наложил жгут на руку пациента и крепко затянул его", "/do Жгут на руке пациента.", "/me нащупал вену на руке больного", "/me достал из тумбочки шприц с вакциной", "/do Вакцина в правой руке.", "/me вводит содержимое шприца в вену наркозависимого", "/do В кровь пациента введен анти-наркотический препарат.", "/me отложил шприц в сторону", "/me снял жгут с руки пациента", "/me приложил смоченную в спирту ватку к месту прокола", "/healbad " out_pars1])
return

; ======================================================
; Лечение
; ======================================================
hpb_1:
SendChat("Здравствуйте, я сотрудник данного медицинского центра Рей МакКвин. Что вас беспокоит?")
Sleep, 250
functionChoise("hpb_2")
return
hpb_2:
ArrayToSendChat(["/me легким движением достал блокнот и ручку", "/do Блокнот и ручка в руках.", "/me записал симптомы в блокнот", "/me правой рукой снял сумку с плеча, затем расстегнул её", "/todo Это лекарство Вам поможет*доставая нужное лекарство из сумки", "/me правой рукой достал лекарство", "/do Лекарство в правой руке.", "/me протянув руку, передал лекарство пациенту", "/todo Всего хорошего,Принимайте это лекарство! И вам станет лучше! не болейте*улыбаясь.", "heal " out_pars1], 2000)
return

С кодом думаю разберёшься, ничего там сложного нет.
 
  • Нравится
Реакции: Ex3m и MIDIT

MIDIT

Новичок
Автор темы
10
2
Вижу, что ты старался написать, теперь покажу тебе более-менее правильный пример.

Для начала добавляем две функции в SAMP-UDF.
Первой функцией будет парная отправка сообщений через массив.
AutoHotKey:
ArrayToSendChat(ArrayName, wSleep := 1500) { ; Функция парной отправки сообщений (массив, задержка).
   for i, element in ArrayName
   {
      SendChat(element)
      Sleep, %wSleep%
   }
}

Использование функции:
AutoHotKey:
ArrayToSendChat(["Какой хороший день сегодня.", "/me осмотрелся вокруг и насладился красотой природы"], 2000)
; Первое - нам нужен обычный массив, берём его обязательно в [ ]
; 2000 - это задержка, которую можно опустить. По умолчанию выставлена задержка в 1500 м.с.

Вторая функция для выбора дальнейшего действия и прыжка на другую метку (чтобы не писать всё по 100 раз, функцией лучше):
AutoHotKey:
functionChoise(var)
{
   addChatMessageEx("00FF00", "{87CEEB}Продолжить - F2, для отмены действия - F3.")
   while (!GetKeyState("F2", "P") && !GetKeyState("F3", "P"))
      continue
   if (GetKeyState("F2", "P"))
   {
      Gosub, %var%
      return
   }
   else if (GetKeyState("F3", "P"))
   {
      addChatMessageEx("00FF00", "{87CEEB}Вы отменили действие.")
      return
   }
}

Кидаем две функции в самый конец SAMP-UDF.ahk, сохраняем и переходим к коду скрипта.
AutoHotKey:
#NoEnv
#SingleInstance force
#Include SAMP-UDF.ahk
#IfWinActive GTA:SA:MP

$~NumpadEnter::
$~Enter::
if (!isInChat()) || (isDialogOpen())
   Return
Sleep 250
blockChatInput()
tempText := readString(hGTA, dwSAMP + 0x12D8F8, 256)
tempCmd := StrSplit(tempText, " ")[1]
unblockChatInput()

if (tempText == "/ahk")
{
   ShowDialog(0, "Список команд (by Rey McQueen)", "Список команд биндера:`n`n/pec [id] - выдача рецепта.`n/bad [id] - лечение от наркозависимости.`n/hpb [id] - лечение.", "Понятно")
   return
}

if (tempCmd == "/pec")
{
    if (RegExMatch(tempText, "^" tempCmd "\s(\d{1,3})$", out_pars))
    {
        Gosub, pec_1
        return
    }
    Else
        addChatMessageEx("00FF00", "{87CEEB}Используйте: " tempCmd " [Ид]")
}
if (tempCmd == "/bad")
{
    if (RegExMatch(tempText, "^" tempCmd "\s(\d{1,3})$", out_pars))
    {
        Gosub, bad_1
        return
    }
    Else
        addChatMessageEx("00FF00", "{87CEEB}Используйте: " tempCmd " [Ид]")
}
if (tempCmd == "/hpb")
{
    if (RegExMatch(tempText, "^" tempCmd "\s(\d{1,3})$", out_pars))
    {
        Gosub, hpb_1
        return
    }
    Else
         addChatMessageEx("00FF00", "{87CEEB}Используйте: " tempCmd " [Ид]")
}
return

; ======================================================
; Выдача рецепта
; ======================================================
pec_1:
SendChat("Здравствуйте, вы хотели бы получить рецепт?")
Sleep, 250
functionChoise("pec_2")
return
pec_2:
ArrayToSendChat(["Стоимость одного 4.000$", "Сколько вам рецептов?"], 2000)
functionChoise("pec_3")
return
pec_3:
ArrayToSendChat(["/do На плече у Рея весит мед.сумка.", "/me правой рукой снял мед.сумку с плеча", "/me открыл мед.сумку и достал бланки", "/me заполняет бланки на оформление лекарств", "/do Бланки заполнены.", "/me поставил печать Больница Лос-Сантоса", "/me оформил рецепт и закрыл мед.сумку", "/me движением правой руки повесил мед.сумку на плечо", "/do Мед.сумка на плече. Рецепт в руке.", "/me передал рецепт человеку напротив", "/recept " out_pars1])
return

; ======================================================
; Лечение от наркозависимости
; ======================================================
bad_1:
SendChat("Здравствуйте, вам нужно лечение от наркозависимости?")
Sleep, 250
functionChoise("bad_1")
return
bad_2:
ArrayToSendChat(["Это для Вас будет стоить 15.000$.", "Оплатите и продолжим процедуру оформления карты."])
functionChoise("bad_2")
return
bad_3:
ArrayToSendChat(["/do В тумбочке лежат все необходимые предметы для проведения курса.", "/me наклонился и открыл дверцу тумбочки", "/do Дверца тумбы открыта.", "/me достал из тумбочки жгут", "/do Жгут в руке.", "/me наложил жгут на руку пациента и крепко затянул его", "/do Жгут на руке пациента.", "/me нащупал вену на руке больного", "/me достал из тумбочки шприц с вакциной", "/do Вакцина в правой руке.", "/me вводит содержимое шприца в вену наркозависимого", "/do В кровь пациента введен анти-наркотический препарат.", "/me отложил шприц в сторону", "/me снял жгут с руки пациента", "/me приложил смоченную в спирту ватку к месту прокола", "/healbad " out_pars1])
return

; ======================================================
; Лечение
; ======================================================
hpb_1:
SendChat("Здравствуйте, я сотрудник данного медицинского центра Рей МакКвин. Что вас беспокоит?")
Sleep, 250
functionChoise("hpb_2")
return
hpb_2:
ArrayToSendChat(["/me легким движением достал блокнот и ручку", "/do Блокнот и ручка в руках.", "/me записал симптомы в блокнот", "/me правой рукой снял сумку с плеча, затем расстегнул её", "/todo Это лекарство Вам поможет*доставая нужное лекарство из сумки", "/me правой рукой достал лекарство", "/do Лекарство в правой руке.", "/me протянув руку, передал лекарство пациенту", "/todo Всего хорошего,Принимайте это лекарство! И вам станет лучше! не болейте*улыбаясь.", "heal " out_pars1], 2000)
return

С кодом думаю разберёшься, ничего там сложного нет.

Огромное спасибо что помог разобраться и решить проблему. И ещё благодарю за подсказку по поводу функций, полезные, возьму на ум.
Ещё раз спасибо )
 
  • Нравится
Реакции: Nerchik и darksoor