[Создание] Замена диалоговых окон на интерфейс чата - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Sanoxxx, Alowir, Phoenixxx_Czar  
[Создание] Замена диалоговых окон на интерфейс чата
belyankin12 Дата: Вторник, 08.08.2017, 22:46 | Сообщение # 1
Боец
Сообщений: 69
Статус: Offline
Здравствуйте, крч, меня начали бесить диалоги и я решил запилить через чат все. Сейчас у меня код с миллиардом костылей, куча быдлокодерства и прочее. Но пока что работает хорошо, есть только одна проблема: слишком долго удаляются строчки, я понимаю там функция лупит на 100 + внутри моей функции луп, но если кто знает как все это дело ускорить, жду советов. Кто хочет может использовать, жду советов по оптимизации или доработке. Скриншот (чат слева первый, чат справа второй, который был сделан уже после нажатия клавиши 3): https://prnt.sc/g60r98.

Код:
Код
chatinterface(text, label1=0, label2=0, label3=0, label4=0, label5=0, label6=0, label7=0, label8=0, label9=0, label10=0) {
        arr := []
        Loop, parse, text, `n ; парсим текст, чтобы в отдельной строчке каждое действие и клавиша описывались
        {
            arr[A_Index] := A_LoopField
        }
        tnum := 1
        textes := []
        textes[1] := "[CI] {FFFAFA} AppsButton - отмена"
        Loop 10 { ; вывод информации о клавише и действии, назначенной на неё
            if (arr[A_Index] != "") {
                addMessageToChatWindow2("{FF0000}", "[CE] {FFFAFA} " . A_Index . " - " . arr[A_Index] . "")
                textesnum := A_Index+1
                textes[textesnum] :=  "[CE] {FFFAFA} " . A_Index . " - " . arr[A_Index] . ""
                tnum := tnum+=1
            }
        }
        addMessageToChatWindow2("{FF0000}", "[CI] {FFFAFA} AppsButton - отмена")
      Loop {
            if (label10 != 0) { ; по количеству заданных лэйблов определяем количество отслеживаемых клавиш (кей 0 = клавиша 0 - лэйбл 10)
                key0 := GetKeyState("vk30", P)
                key1 := GetKeyState("vk31", P)
                key2 := GetKeyState("vk32", P)
                key3 := GetKeyState("vk33", P)
                key4 := GetKeyState("vk34", P)
                key5 := GetKeyState("vk35", P)
                key6 := GetKeyState("vk36", P)
                key7 := GetKeyState("vk37", P)
                key8 := GetKeyState("vk38", P)
                key9 := GetKeyState("vk39", P)
                keyCancel := GetKeyState("vk15d", P)
            } else if (label9 != 0) {
                key1 := GetKeyState("vk31", P)
                key2 := GetKeyState("vk32", P)
                key3 := GetKeyState("vk33", P)
                key4 := GetKeyState("vk34", P)
                key5 := GetKeyState("vk35", P)
                key6 := GetKeyState("vk36", P)
                key7 := GetKeyState("vk37", P)
                key8 := GetKeyState("vk38", P)
                key9 := GetKeyState("vk39", P)
                keyCancel := GetKeyState("vk15d", P)
            } else if (label8 != 0) {
                key1 := GetKeyState("vk31", P)
                key2 := GetKeyState("vk32", P)
                key3 := GetKeyState("vk33", P)
                key4 := GetKeyState("vk34", P)
                key5 := GetKeyState("vk35", P)
                key6 := GetKeyState("vk36", P)
                key7 := GetKeyState("vk37", P)
                key8 := GetKeyState("vk38", P)
                keyCancel := GetKeyState("vk15d", P)
            } else if (label7 != 0) {
                key1 := GetKeyState("vk31", P)
                key2 := GetKeyState("vk32", P)
                key3 := GetKeyState("vk33", P)
                key4 := GetKeyState("vk34", P)
                key5 := GetKeyState("vk35", P)
                key6 := GetKeyState("vk36", P)
                key7 := GetKeyState("vk37", P)
                keyCancel := GetKeyState("vk15d", P)
            } else if (label6 != 0) {
                key1 := GetKeyState("vk31", P)
                key2 := GetKeyState("vk32", P)
                key3 := GetKeyState("vk33", P)
                key4 := GetKeyState("vk34", P)
                key5 := GetKeyState("vk35", P)
                key6 := GetKeyState("vk36", P)
                keyCancel := GetKeyState("vk15d", P)
            } else if (label5 != 0) {
                key1 := GetKeyState("vk31", P)
                key2 := GetKeyState("vk32", P)
                key3 := GetKeyState("vk33", P)
                key4 := GetKeyState("vk34", P)
                key5 := GetKeyState("vk35", P)
                keyCancel := GetKeyState("vk15d", P)
            } else if (label4 != 0) {
                key1 := GetKeyState("vk31", P)
                key2 := GetKeyState("vk32", P)
                key3 := GetKeyState("vk33", P)
                key4 := GetKeyState("vk34", P)
                keyCancel := GetKeyState("vk15d", P)
            } else if (label3 != 0) {
                key1 := GetKeyState("vk31", P)
                key2 := GetKeyState("vk32", P)
                key3 := GetKeyState("vk33", P)
                keyCancel := GetKeyState("vk15d", P)
            } else if (label2 != 0) {
                key1 := GetKeyState("vk31", P)
                key2 := GetKeyState("vk32", P)
                keyCancel := GetKeyState("vk15d", P)
            } else if (label1 != 0) {
                key1 := GetKeyState("vk31", P)
                keyCancel := GetKeyState("vk15d", P)
            } else {
                return, Error
            }
                    if (key0 = 1) or (key1 = 1) or (key2 = 1) or (key3 = 1) or (key4 = 1) or (key5 = 1) or (key6 = 1) or (key7 = 1) or (key8 = 1) or (key9 = 1) or (key10 = 1) or (keyCancel = 1) { ; если какая-то клавиша нажалась - сразу начинаем удаление всех созданных в начале строчек
                        rnum := 0
                        ind := 0
                        re1 := " " . textes[1] . ""
                        re2 := " " . textes[2] . ""
                        re3 := " " . textes[3] . ""
                        re4 := " " . textes[4] . ""
                        re5 := " " . textes[5] . ""
                        re6 := " " . textes[6] . ""
                        re7 := " " . textes[7] . ""
                        re8 := " " . textes[8] . ""
                        re9 := " " . textes[9] . ""
                        re10 := " " . textes[10] . ""
                        re11 := " " . textes[11] . ""
                        
                        Loop 100 {
                            if (rnum = tnum) {
                    break
                            }
                            
                            GetChatLine(ind, var)                            
                            if (var = re1) or (var = re2) or (var = re3) or (var = re4) or (var = re5) or (var = re6) or (var = re7) or (var = re8) or (var = re9) or (var = re10) or (var = re11) {
                    removeChatLine(ind)
                    rnum := rnum+=1
                            } else {
                    ind := ind+=1
                            }
                            
                        }
                        
                        if (key0 = 1) { ; по нажатой клавише уходим на метку
                             gosub, %label10%
                             break
                        }
                        
                        if (key1 = 1) {
                             gosub, %label1%
                             break
                        }
                        
                        if (key2 = 1) {
                             gosub, %label2%
                             break
                        }
                        
                        if (key3 = 1) {
                             gosub, %label3%
                             break
                        }
                        
                        if (key4 = 1) {
                             gosub, %label4%
                             break
                        }
                        
                        if (key5 = 1) {
                             gosub, %label5%
                             break
                        }
                        
                        if (key6 = 1) {
                             gosub, %label6%
                             break
                        }
                        
                        if (key7 = 1) {
                             gosub, %label7%
                             break
                        }
                        
                        if (key8 = 1) {
                             gosub, %label8%
                             break
                        }
                        
                        if (key9 = 1) {
                             gosub, %label9%
                             break
                        }
                        
                        if (keyCancel = 1) {
                             addMessageToChatWindow2("{FF0000}", "[CI] {FFFAFA}Отменено.")
                             return
                        }
                    }
               }
    return
}

F1::
chatinterface("действие 1`nдействие 2`nдействие 3", 1, 2, 3, 4)
return

1:
addmessagetochatwindow2("{FF0000}", "[AHK] {FFFAFA} Вы выполнили действие 1")
return

2:
addmessagetochatwindow2("{FF0000}", "[AHK] {FFFAFA} Вы выполнили действие 2")
return

3:
addmessagetochatwindow2("{FF0000}", "[AHK] {FFFAFA} Вы выполнили действие 3")
return


Всего максимум 10 действий (цифры от 0 до 9).


Сообщение отредактировал belyankin12 - Вторник, 08.08.2017, 22:47
CZAR Дата: Среда, 09.08.2017, 05:03 | Сообщение # 2
Czar Of Scripts
Сообщений: 1373
Статус: Offline
belyankin12, как по мне, так это глупое решение.




Я в ВК
Ушел в веб.

• Ничего не покупаю.
• Способы не проверяю.


У меня теперь новый домен, если ссылка не работает - напишите.

Гарант Cheat-Master:
*тема*

AHK
[S-RP] House Finder / House Teleporter
[SAMP] Online Counter
[S-RP] [For Event] Show Star
[S-RP] AntiCasino
[S-RP] [BOT] Auto Fisher + Auto Find Worm + Auto Cook
[S-RP] [BOT] /dance
Winner | Делаем розыгрыши среди участников темы.
SAMP-UDF
[AHK Урок] Выбор в диалогах мышкой и enter`ом
[SAMP] Быстрый ответ на СМС
[ERP] Помощник для адвоката
[DRP] FakeTime

Достижения:
- 26.02.2017
- 03.01.2018
- 26.05.2018
- 22.09.2018
- 04.04.2019
belyankin12 Дата: Среда, 09.08.2017, 07:37 | Сообщение # 3
Боец
Сообщений: 69
Статус: Offline
Ну-ну, не ломай детские мечты(.
Coockie Дата: Среда, 09.08.2017, 07:45 | Сообщение # 4
Новичок
Сообщений: 27
Статус: Offline
Можно во втором параметре просто сделать массив и не париться с ограничениями меток
chatinterface("test", ["1", "2", "3", "4"])
Код

chatinterface(text, labels := "") {
    arr := []
    Loop, parse, text, `n
    {
  arr[A_Index] := A_LoopField
    }
    tnum := 1
    textes := []
    textes[1] := "[CI] {FFFAFA} AppsButton - отмена"
    for i, k in labels
    {
  addMessageToChatWindow2("{FF0000}", "[CE] {FFFAFA} " i " - " k "")
  textesnum := A_Index+1
  textes[textesnum] :=  "[CE] {FFFAFA} " i " - " k ""
    }
}


Сообщение отредактировал Coockie - Среда, 09.08.2017, 07:46
belyankin12 Дата: Среда, 09.08.2017, 10:25 | Сообщение # 5
Боец
Сообщений: 69
Статус: Offline
Вот, отлично, проверим и закодим, спасибо.
Demy Дата: Среда, 09.08.2017, 14:26 | Сообщение # 6
Бывалый
Сообщений: 422
Статус: Offline
Чет не понял. Что это и зачем?

AutoReporter / http://cheat-master.ru/forum/150-486717-1
Finder / http://cheat-master.ru/forum/160-497245-1
DLQ Binder / http://cheat-master.ru/forum/150-594163-1

У ТЕБЯ ЕСТЬ ИДЕЯ ДЛЯ ПРОГРАММЫ, НО САМ ТЫ НЕ МОЖЕШЬ НАПИСАТЬ КОД? ПИШИ МНЕ
Coockie Дата: Среда, 09.08.2017, 15:44 | Сообщение # 7
Новичок
Сообщений: 27
Статус: Offline
Demy, чтобы было
belyankin12 Дата: Среда, 09.08.2017, 17:35 | Сообщение # 8
Боец
Сообщений: 69
Статус: Offline
Плохо читаешь, значит.
aknqkzxlcs_21 Дата: Среда, 09.08.2017, 21:19 | Сообщение # 9
Боец
Сообщений: 57
Статус: Offline
сама по себе функция removeChatLine работает долго, пока что она тестовая
  • Страница 1 из 1
  • 1
Поиск: