Двойная отправка в чат. Почему так?

Статус
В этой теме нельзя размещать новые ответы.

BiggySmolz

Новичок
Автор темы
19
2
Вот собственно код. (Проблема описана ниже)
Код:
loop
{
GetChatLine(0, Out)
if out contains Ты тут, Вы тут, Вы здесь, Ты здесь, вы здесь, ты здесь, ты тут, вы тут, Тут, тут
    {
    Random, var, 1, 5 
    If (var = 1) 
        { 
        Sleep 2500 
        SendChat("Да, я тут, просто занят чуть чуть.")
        FileDelete, C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        FileAppend, , C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        sleep 1000
        } 
    else if (var == 2) 
        {       
        Sleep 1000 
        SendChat("Да.")
        FileDelete, C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        FileAppend, , C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt       
        sleep 1000
        } 
    else if (var == 3) 
        {
        Sleep 1500 
        SendChat("Да, я тут.")
        FileDelete, C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        FileAppend, , C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        sleep 1000
        } 
    else if (var == 4) 
        {
        Sleep 1500 
        SendChat("Что?") 
        FileDelete, C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        FileAppend, , C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        sleep 1000
        } 
    else if (var == 5) 
        {       
        Sleep 2000 
        SendChat("Да тут я, тут")
        FileDelete, C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        FileAppend, , C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        sleep 1000
        }
    }
}
return
Вопрос: почему при введении в чат Вы тут, Вы здесь, вы тут, вы здесь. иногда выскакивают 2 ответа ??? Тоесть при вопросе ты тут? он в чат отправляет к примеру : Да тут я, тут. и через несколько секунд: Да.

Как решить этот вопрос подскажите пожалуйста:sad_frog2:
 

BiggySmolz

Новичок
Автор темы
19
2
Скорее всего Loop настолько быстрый что успевает считать 2-ой раз чат, пока еще не отравилась SendChat
Сяб, сейчас попробую sleep 1s вставить в начало.

Кстати код написан Rinat'oм Namazov'ым за что ему огромное спасибо

Код:
loop
{
sleep 1000
code...
}
return
Sleep 1000 правильно поставил?
 
Последнее редактирование модератором:

#Rin

Известный
Всефорумный модератор
1,214
1,036
AutoHotKey:
Sleep 2500
Лучше написать до Random'a
Код:
FileDelete, C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
FileAppend, , C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt     
sleep 1000
А это лучше после проверки что выпало после Random
И зачем удалять чатлог и затем его открывать?
GetChatLine(0, Out) получает последнюю строчку через чатлог, есть аналог по чтению из памяти.

Код:
loop
{
sleep 1000
code...
}
return
Sleep 1000 правильно поставил?
Ну попробуй тестани.
 

BiggySmolz

Новичок
Автор темы
19
2
Скорее всего Loop настолько быстрый что успевает считать 2-ой раз чат, пока еще не отравилась SendChat
не работает, что перед { поставил sleep что после { поставил sleep
а через while (true) { code } будет работать не знаете?
 

Vlad Horii

Известный
Проверенный
310
171
если у тебя задержка чтения будет 2500, и ты будешь читать ПОСЛЕДНЮЮ строку из чата, то есть шанс, что скрипт пропустит нужную строку. (Объяснять почему думаю не нужно)\

не работает, что перед { поставил sleep что после { поставил sleep
а через while (true) { code } будет работать не знаете?
код давай
 

BiggySmolz

Новичок
Автор темы
19
2
AutoHotKey:
Sleep 2500
Лучше написать до Random'a
Код:
FileDelete, C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
FileAppend, , C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt    
sleep 1000
А это лучше после проверки что выпало после Random
И зачем удалять чатлог и затем его открывать?
GetChatLine(0, Out) получает последнюю строчку через чатлог, есть аналог по чтению из памяти.


Ну попробуй тестани.
Все равно 2 раза выпадает
Код:
loop
{
GetChatLine(0, Out)
if out contains Ты тут, Вы тут, Вы здесь, Ты здесь, вы здесь, ты здесь, ты тут, вы тут, Тут, тут
    {
    Sleep 2500
    Random, var, 1, 5 
    If (var = 1) 
        { 
        SendChat("Да, я тут, просто занят чуть чуть.")
        FileDelete, C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        FileAppend, , C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        sleep 1000
        } 
    else if (var == 2) 
        {
        SendChat("Да.")
        FileDelete, C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        FileAppend, , C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        sleep 1000
        } 
    else if (var == 3) 
        {
        SendChat("Да, я тут.")
        FileDelete, C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        FileAppend, , C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        sleep 1000
        } 
    else if (var == 4) 
        {
        SendChat("Что?") 
        FileDelete, C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        FileAppend, , C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        sleep 1000
        } 
    else if (var == 5) 
        {
        SendChat("Да тут я, тут")
        FileDelete, C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        FileAppend, , C:\Users\Admin\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
        sleep 1000
        }
    }
}
return
 

Vlad Horii

Известный
Проверенный
310
171
Ну тогда можно просто запоминать текст последней строки, и после сверять равна ли она новому сообщению.
Бля, проще на Lua хуком ловить сообщение. Пересесть на Lua после AHK как нехуй делать)
 

BiggySmolz

Новичок
Автор темы
19
2
Бля, проще на Lua хуком ловить сообщение. Пересесть на Lua после AHK как нехуй делать)
Дак я еще ахк не знаю чтобы куда то переходить. А хуки на клео пробывал (когда начинал на клео писать) там вообще пиздаешься
 

Vlad Horii

Известный
Проверенный
310
171
Дак я еще ахк не знаю чтобы куда то переходить. А хуки на клео пробывал (когда начинал на клео писать) там вообще пиздаешься
Ничего подобного. Хук на ловлю сообщений в луа пишется как нехуй делать
Lua:
function hook.onServerMessage(color, message)
    if message:find("Тут") or message:find("Вы тут?") or message:find("Вы на месте?") then
        sampAddChatMessage("Я тут! Не мешайте!")
    end
end
 

D3.Pheonix

🎹
Модератор
2,817
1,599
Вопрос: почему при введении в чат Вы тут, Вы здесь, вы тут, вы здесь. иногда выскакивают 2 ответа ??? Тоесть при вопросе ты тут? он в чат отправляет к примеру : Да тут я, тут. и через несколько секунд: Да.

Как решить этот вопрос подскажите пожалуйста:sad_frog2:
вставляй сообщение после удачного скана, например, "question detected", чтобы сбить последнюю строку
 
Последнее редактирование:

#Rin

Известный
Всефорумный модератор
1,214
1,036
Бля, проще на Lua хуком ловить сообщение. Пересесть на Lua после AHK как нехуй делать)
Хуки — это технология перехвата вызовов функций в чужих процессах.
Технический это можно написать и на AHK, в версии AHK_H появилась компиляция в формате dll, заинжектить это в процесс с кодом для перехвата.

Хук на ловлю сообщений в луа пишется как нехуй делать
Ты лишь используешь готовую функцию для вызова хука, но писал то его не ты)
 
  • Нравится
Реакции: Vlad Horii

Nika23830

Новичок
11
3
Код:
#include udf.ahk
s := ["Да, я тут, просто занят чуть чуть.","Да.","Да, я тут.","Что?","Да тут я, тут"]
SetTimer,Admin,100

Admin:
p := GetChatLineEx()
if p contains Ты тут, Вы тут, Вы здесь, Ты здесь, вы здесь, ты здесь, ты тут, вы тут, Тут, тут
{
    Random,i,5
    SendChat(s[i])
    Sleep, 300
}
return
getChatLineEx - читает строку из памяти, а не из чатлога
Код:
getChatLineEx(line := 0) {
    ; 0x152 - offset for first message
    ; 0xFC - size of a message
    ; 99 - max count of a messages
    if(!checkHandles())
        return
    dwPtr := dwSAMP + ADDR_SAMP_CHATMSG_PTR
    dwAddress := readDWORD(hGTA, dwPtr)
    if(ErrorLevel)
        return
    msg := readString(hGTA, dwAddress + 0x152 + ( (99-line) * 0xFC), 0xFC)
    if(ErrorLevel)
        return
    return msg
}
 

deddosouru

Смотрю аниме, служу Сатане
Друг
2,036
1,319
Ничего подобного. Хук на ловлю сообщений в луа пишется как нехуй делать
Lua:
function hook.onServerMessage(color, message)
    if message:find("Тут") or message:find("Вы тут?") or message:find("Вы на месте?") then
        sampAddChatMessage("Я тут! Не мешайте!")
    end
end
а теперь сделай задержку ответа и выдачу рандом результата.
Ты лишь используешь готовую функцию для вызова хука, но писал то его не ты)
справедливо так-же для samp udf с его сканом последней строки и прочей ебаторией. там тоже используются готовые функции но писали их не вы лул
 
Статус
В этой теме нельзя размещать новые ответы.