1 (изменено: SeaVodikendu, 2016-03-13 03:09:02)

Тема: Повтор предыдущей строки в цикле [для SA:MP]

Здравствуйте.
У меня имеется скрипт, в котором много РП отыгровок.
Бывает что нужно повторить фразу из цикла несколько раз, а бывает что вовсе фраза в чат не прописалась из-за "Не флуди".
Подскажите, какие методы существуют для повторения строки в цикле.
Примеры циклов:


sendinput, {f6}Предъявите, пожалуйста, ваш паспорт.{enter}
sleep 2000
sendinput, {f6}/b Команда - /showpass [id]{enter}
sleep 3000
sendinput, {f6}/me проверят нужную информацию{enter}
sleep 3000
sendinput, {f6}/me отдал паспорт{enter}
...
sendinput, {f6}Хорошо. Теперь покажите мне ваш пакет лицензий{enter}
sleep 2000
sendinput, {f6}/b Команда - /showlicenses [id]{enter}
sleep 3000
sendinput, {f6}/me проверяет лицензии{enter}
sleep 3000
sendinput, {f6}/me отдал лицензии{enter}


Нужно повторить например:

sendinput, {f6}/b Команда - /showpass [id]{enter}
...
sendinput, {f6}/b Команда - /showlicenses [id]{enter}

2

Re: Повтор предыдущей строки в цикле [для SA:MP]

Вроде так:

SelectedFile = %A_MyDocuments%\Gta San Andreas User Files\samp\chatlog.txt(проверка на наличие текста в chatLog'e)
LicNet:(название метки)
Loop, Read, %SelectedFile%(повтор прочтения строки из chatlog'а)
{
IfInString, A_LoopReadLine, (тут сам текст паспорта, но я не знаю как это делать)
{
Gosub, LicPass(переход к метке LicPass)
}
}
Goto, LicNet(переход к метке LicNet)

LicPass:(название метки)
sendChat("/b Команда - /showpass [id]")
Sleep x (x-переменная)
sendChat("/b Команда - /showlicenses [id]")

Если не правильно, teadrinker, исправь мои ошибки)).

3

Re: Повтор предыдущей строки в цикле [для SA:MP]

Igor|Fixes|Armando

Не, не то.
1. В скрипте циклов (РП отыгровок) очень много, повторить нужно не конкретную строку.
2. Не обращаясь к чатлогу, т.к.

фраза в чат не прописалась из-за "Не флуди".

4 (изменено: Keller, 2016-03-14 10:19:42)

Re: Повтор предыдущей строки в цикле [для SA:MP]

Способ реализации нагло спер отсюда: http://forum.script-coding.com/viewtopic.php?id=10723

global Fraza := ["Предъявите, пожалуйста, ваш паспорт.", "/b Команда - /showpass [id]", "/me проверят нужную информацию", "/me отдал паспорт", "Хорошо. Теперь покажите мне ваш пакет лицензий", "/b Команда - /showlicenses [id]", "/me проверяет лицензии", "/me отдал лицензии"] ; Сами фразы
global Numb := "8" ; Количество фраз в массиве

~F3:: ; Жмем F3
keywait F3 ; и ждем его отжатия, что бы скрипт сразу же не выключился.
K:="0"
loop ; Запускаем цикл
   {
   if GetKeyState("F3","p") ; Если нажмется F3, то после отжатия останавливается цикл
      {
      keywait F3
      return
      }    
   if GetKeyState("Numpad1","p") ; Если нажмется Numpad1, то после отжатия пишет следущую фразу
      {
      keywait Numpad1
      K:=K+1 
      if (K>Numb) ; Если наш массив фраз кончился, то все должно начаться сначала
         K:="1"
      L:=Fraza[K]
      sendinput, {f6}%L%{enter}
      }   
   if GetKeyState("Numpad2","p") ; Если нажмется Numpad2, то после отжатия повторяет фразу
      {
      keywait Numpad2
      L:=Fraza[K]
      sendinput, {f6}%L%{enter}
      }   
   if GetKeyState("Numpad3","p") ; Если нажмется Numpad3, то после отжатия произойдет сброс счетчика номера фразы
      {
      keywait Numpad3
      K:="0"
      }   
            
   }

5 (изменено: SeaVodikendu, 2016-03-14 12:19:27)

Re: Повтор предыдущей строки в цикле [для SA:MP]

Keller
Пока лучший вариант. Но возможно ли что-то еще, дабы минимизировать кол-во хоткеев?
Это нужно сейчас будет редачить скрипт а в нем около 20 отыгровок.
Вот была бы команда которая запоминает, что было послано последним и повторить это...

6

Re: Повтор предыдущей строки в цикле [для SA:MP]

Если есть samp.ahk, то можно данный массив в диалоговых окнах реализовать.

7

Re: Повтор предыдущей строки в цикле [для SA:MP]

Keller, у меня есть, если мне объяснят как такое реализовать, то я помогу человеку, и сделаю рабочий код.
А так, я сам особо не шарю в ahk.