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 |
|
|
|
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
У ТЕБЯ ЕСТЬ ИДЕЯ ДЛЯ ПРОГРАММЫ, НО САМ ТЫ НЕ МОЖЕШЬ НАПИСАТЬ КОД? ПИШИ МНЕ
|
|
|
|
aknqkzxlcs_21 |
Дата: Среда, 09.08.2017, 21:19 | Сообщение # 9
|
Боец
Сообщений: 57
Статус: Offline
|
сама по себе функция removeChatLine работает долго, пока что она тестовая
|
|
|
|