- 2,684
- 2,768
Да, весь текст диалога записываешь в .txt, считываешь построчно и сканируешь.Можно ли как то сделать скан диалога?
![]()
Да, весь текст диалога записываешь в .txt, считываешь построчно и сканируешь.Можно ли как то сделать скан диалога?
![]()
Запись текста диалога в файл dialogtext.txtМожно по подробнее? С диалогами работаю 2-3 раз.
alloc 0@ 1024
memset 0@ 0x0 1024
0BD7: samp get_dialog_text 0@
0A9A: 1@ = openfile "CLEO\dialogtext.txt" mode "wt"
0AD8: write_string_to_file 1@ from 0@
0A9B: closefile 1@
0A9A: 1@ = openfile "CLEO\dialogtext.txt" mode "rt"
0AD7: read_string_from_file 1@ to 2@ size 128
if 0AD4: 0 = scan_string 2@ format "%d - подлежит обработке" 3@А как именно считать строку с %d - подлежит обработке ?
Регулярные выражения. Типа %[a-zA-Zа-яА-Я0-9]
Так ты сканируешь только последнюю строку текстовика же. И сканировать в этом случае нужно на "%d - {4BB85A}подлежит обработке{ffffff}".Всё пашет,но номер куста не тот.
![]()
Код:{$CLEO .cs} 0000: NOP 0662: printstring "kraft1k" 0x33FFCC repeat wait 0 until SAMP.Available() 0B34: samp register_client_command "drugsbot" to_label @Dialog While True wait 0 if 10@ == 1 then say "/makedrugs" if SAMP.IsDialogActive(3684) then alloc 0@ 1024 memset 0@ 0x0 1024 0BD7: samp get_dialog_text 0@ 0A9A: 1@ = openfile "CLEO\dialogtext.txt" mode "wt" 0AD8: write_string_to_file 1@ from 0@ 0A9B: closefile 1@ wait 0 0A9A: 1@ = openfile "CLEO\dialogtext.txt" mode "rt" 0AC8: 2@ = allocate_memory_size 256 repeat 0AD7: read_string_from_file 1@ to 2@ size 256 until 0AD6: end_of_file 1@ reached if 0AD4: 0@ = scan_string 2@ format "%d - ïîäëåæèò îáðàáîòêå" 3@ then SAMP.SetDialogInputBoxText(3@) SAMP.CloseDialog(3684) 0AC9: free_allocated_memory 2@ wait 30000 end end end end :Dialog 0B12: 10@ = 10@ XOR 1 if 10@ == 1 then 0acd: "[Kraft1k]GRUGS BOT ~r~ON" 1500 else 0acd: "[Kraft1k]DRUGS BOT ~r~OFF" 1500 end SAMP.Cmdret()
Не диалог. Через рендер текста сделано.Что это за диалог? Локальный или DXUT?
Или это не диалог?![]()
Ясно, не подскажешь как реализовать какое-либо действие при нажатии на такой рендер текст?Не диалог. Через рендер текста сделано.
Нужно рассчитать координаты площади, в которой находится текст, получить координаты курсора и сравнить их с координатами текста, и дальше просто отлавливать нажатие ЛКМ в этих координатах.Ясно, не подскажешь как реализовать какое-либо действие при нажатии на такой рендер текст?
Я же тебе уже сказал, что ты сканируешь только последнюю строку. Сканирование нужно делать внутри цикла repeat - until, и если нужный текст найден, то выйти из цикла, вставить полученный номер в диалог и закрыть его.Всё ещё маюсь с этим диалогом... Может кто посмотрит?
Код:{$CLEO .cs} 0000: NOP 0662: printstring "kraft1k" 0x33FFCC repeat wait 0 until SAMP.Available() 0B34: samp register_client_command "drugsbot" to_label @Dialog While True wait 0 if 10@ == 1 then say "/makedrugs" wait 160 if SAMP.IsDialogActive(3684) then alloc 0@ 1024 alloc 2@ 1024 alloc 3@ 1024 memset 0@ 0x0 1024 0BD7: samp get_dialog_text 0@ 0A9A: 1@ = openfile "CLEO\dialogtext.txt" mode "wt" 0AD8: write_string_to_file 1@ from 0@ 0A9B: closefile 1@ if SAMP.IsDialogActive(3684) then 0A9A: 1@ = openfile "CLEO\dialogtext.txt" mode "rt" repeat 0AD6: read_string_from_file 1@ size 1024 until 0AD6: end_of_file 1@ reached if 0AD4: 1@ = scan_string 1@ format "%d - {4BB85A}ïîäëåæèò îáðàáîòêå{ffffff}" 3@ then 0B4A: samp 3@ = get_current_dialog_editbox_text wait 30000 end end end end end :Dialog 0B12: 10@ = 10@ XOR 1 if 10@ == 1 then 0acd: "[Kraft1k]DRUGS BOT ~r~ON" 1500 else 0acd: "[Kraft1k]DRUGS BOT ~r~OFF" 1500 end SAMP.Cmdret()
Спасибо. Не подскажешь как разделить строку на множество строк и записать их в разные переменные?Нужно рассчитать координаты площади, в которой находится текст, получить координаты курсора и сравнить их с координатами текста, и дальше просто отлавливать нажатие ЛКМ в этих координатах.
Я делал примерно тоже самое, но я в файл записывал значения, а потом вытаскивалСпасибо. Не подскажешь как разделить строку на множество строк и записать их в разные переменные?
https://www.blast.hk/wiki/opcodes:0c16Спасибо. Не подскажешь как разделить строку на множество строк и записать их в разные переменные?
{$CLEO}
0000: 'AW_Rage'
repeat
wait 400
until SAMP.Available
0B34: samp register_client_command "phide" to_label @PlayerHide
0B34: samp register_client_command "pshow" to_label @PlayerShow
0B6D: render 10@ = create_font "Arial" height 10 flags 5
while true
if 25@ = true
then
2@ = 500
for 0@ = -1 to 999 step 1
if and
0B23: samp is_player_connected 0@
0B64: samp is_player 0@ npc
then
0B20: samp 1@ = actor_handle_by_samp_player_id 0@
if
056D: actor 1@ defined
then
0B36: 1@ = get_player_nickname 0@
0B6F: render font 10@ draw_text 1@ pos 50 2@ color 0xFFFFFFFF
2@ += 10
end
end
end
end
wait 0
end
:PlayerHide
25@ = false
cmdret
:PlayerShow
25@ = true
cmdret