Yoko

All sides of Injection
It is currently 2025-12-19 00:39:58

All times are UTC+02:00




Post new topic  Reply to topic  [ 20 posts ] 
Author Message
PostPosted: 2006-05-14 11:46:25 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
Криво тему назвал, ну да ладно.
Суть в том, что мне нужно спросить у пользователя переменную.
Чтобы к переменной 'x' присваивалось то значение, что пользователь укажет. Укажет, естественно в самой игре, а не в скрипте.
Если такое вообще возможно, конечно. :)


Top
   
PostPosted: 2006-05-14 12:16:47 
Offline
Expert!
User avatar

Joined: 2006-02-07 08:51:40
Posts: 1348
Location: г. Старый Оскол
1a2a3a4a5a6a wrote:
Криво тему назвал, ну да ладно.
Суть в том, что мне нужно спросить у пользователя переменную.
Чтобы к переменной 'x' присваивалось то значение, что пользователь укажет. Укажет, естественно в самой игре, а не в скрипте.
Если такое вообще возможно, конечно. :)


Вполне возможно, только нужен АСМ, а функция такая:
Code:
string asmInputString(string Request[, string PreValue])
Функция выводит на экран диалоговое окно ввода строки. Параметр Request это тот вопрос, на который пользователь должен ответить. Результатом функции является ответ пользователя. Функция вернет пустую строку если пользователь уклонился от ответа.
Если задан необязательный параметр PreValue, то его значение окажется в поле ввода строки. В противном случае поле ввода строки будет пустым и пользователю придется самостоятельно его заполнить.


Top
   
 Post subject:
PostPosted: 2006-05-14 14:18:50 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
А без АСМ вообще никак?


Top
   
 Post subject:
PostPosted: 2006-05-14 15:06:18 
Offline
Expert!
User avatar

Joined: 2004-08-11 23:56:17
Posts: 746
Location: The Citadel
Если у тебя несколько вариантов ответа, то можно. Если много, то впринципе тоже можно, но муторно.

_________________
- Мои скрипты.


Top
   
 Post subject:
PostPosted: 2006-05-14 16:26:14 
Offline
Expert!
User avatar

Joined: 2006-02-07 08:51:40
Posts: 1348
Location: г. Старый Оскол
1a2a3a4a5a6a wrote:
А без АСМ вообще никак?


Только по журналу читать, сам понимаешь что это ненадежно и без смысленно...


Top
   
 Post subject:
PostPosted: 2006-05-14 17:37:38 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
Cooper wrote:
1a2a3a4a5a6a wrote:
А без АСМ вообще никак?


Только по журналу читать, сам понимаешь что это ненадежно и без смысленно...

Смысл есть. А набросочек можно?


Top
   
 Post subject:
PostPosted: 2006-05-14 19:59:01 
Offline
Expert!
User avatar

Joined: 2006-02-07 08:51:40
Posts: 1348
Location: г. Старый Оскол
1a2a3a4a5a6a wrote:
Cooper wrote:
1a2a3a4a5a6a wrote:
А без АСМ вообще никак?


Только по журналу читать, сам понимаешь что это ненадежно и без смысленно...

Смысл есть. А набросочек можно?


Лучше ASM поставь, на пару килобайт меньше будет, да и голову ломать не надо


Top
   
 Post subject:
PostPosted: 2006-05-14 21:10:43 
Offline
Expert!
User avatar

Joined: 2004-08-11 23:56:17
Posts: 746
Location: The Citadel
mess - массив с вариантами ответа
ch - соответствующий массив с выбором.

Code:
for a = 1 to num
  if uo.injournal(mess[a]) then
    choise = ch[a]
  endif
next

_________________
- Мои скрипты.


Top
   
 Post subject:
PostPosted: 2006-05-14 21:28:17 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
Спасибо. Я правильно намолевал?
Code:
sub vibor()
 VAR a, choise

  DIM mess[5] 
  mess[0]=10
  mess[1]=20
  mess[2]=30
  mess[3]=40
  mess[4]=50

  DIM ch[5] 
  mess[0]=10
  mess[1]=20
  mess[2]=30
  mess[3]=40
  mess[4]=50   

for a = 0 to 4
  if uo.injournal(mess[a]) then
    choise = ch[a]
  endif
next

end sub


Top
   
 Post subject:
PostPosted: 2006-05-14 21:49:40 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
Блин, парни, вы чего тут такое выдумываете?
А не проще тогда прям из журнала брать?
Например придумываешь кодовае слово, после которого должно идти то что ты хочешь спросить. Например так:
Code:
sub waitingforvalue()
while not uo.injournal('секр слово')
wait(100)
wend
var string=uo.journal(uo.injournal('секр слово')-1)
string=GetWord(string,тут с учётом вашего ника и т.д. написать номер)
return string
end sub

#А тут превеед от Edred'a =)
Sub GetWord( st, nom )
; (c) Edred
; Возвращает слово из строки str за номером num
; если такого слова нет - возвращаем ''
;
; Разделителем слов считаем пробел. Несколько пробелов подряд считаются за один.
; Функция сделана без рекурсии специально для считывания слов из сверхдлинных строк!
;
   VAR tmpst, i, dlin, kol = 0, start = 0
   dlin = len( st )
   For i=0 To dlin - 1
      If mid( st, i, 1 ) == ' ' OR i == dlin - 1 Then
         kol = kol + 1
         If kol == nom Then
            ; это первый пробел после нужного нам слова
            tmpst = mid( st, start, i - start )
            return tmpst
         Else
            While mid( st, i, 1 ) == ' '
               i = i + 1
            Wend
            If kol == nom - 1 Then
               start = i
            Endif
         Endif
      Endif
   Next
   tmpst = ''
   return tmpst
endsub


Самое изящьное решение =)

Как пользоватся: пишем в консоли кодовое слово (например asd) потом то что нам нужно и жмём ентер:
Code:
asd 10
чкрипт сам схватит это число, только не забываем про числа/строки =)
Удачи...

_________________
DerMeister сейчас на нейрале!


Top
   
 Post subject:
PostPosted: 2006-05-15 06:05:38 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
Окей. Вчера не получилось, возможности не было, а сегодня попробую.


Top
   
 Post subject:
PostPosted: 2006-05-15 15:33:10 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
Der, а что значит "тут с учётом вашего ника и т.д. написать номер" ?


Top
   
 Post subject:
PostPosted: 2006-05-15 16:12:51 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
1a2a3a4a5a6a wrote:
Der, а что значит "тут с учётом вашего ника и т.д. написать номер" ?

Там же для Sub GetWord( st, nom ) Edred оставил свои комментарии.
Тебе нужно брать последнее слово из строчки. Слова разделены пробелами; если у тебя ник чара состоит из двух слов, а не из одного, то и номер num нужно будет другой передавать.
Если бы я делал под себя, то я бы поставил num=3. Всё зависит от шарда и ника чара. Вобщем, я думаю, тебе по силам разобратся... Поэкспериментируй.

_________________
DerMeister сейчас на нейрале!


Top
   
 Post subject:
PostPosted: 2006-05-20 16:17:03 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
С этим числом все равно ничего не понял. Пробовал достаточно большой промежуток. Никаких результатов. Даже сама функция запускается и сразу пропадает.


Top
   
 Post subject:
PostPosted: 2006-05-20 16:21:52 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
Я так понял, что это он второй раз не хочет запускаться. Приходится перезапускать инжект, а с ним и игру.


Top
   
 Post subject:
PostPosted: 2006-05-20 16:22:18 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
А в какую переменную он сохраняет число при удачной попытке?


Top
   
 Post subject:
PostPosted: 2006-05-21 22:00:45 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
Неужели тебе
Code:
...return string
...

ни о чём не говорит? :lol:

Пишешь в своём главном скрипте и всё ок:
Code:
...
x=waitingforvalue()
...


Вобщем для тебя выкладываю 100% рабочий вариант с примером:
В моём случае кодовым словом было "asd", num=3 (Когда я произносил в клиенте строчку "asd 1234", в журнале было написано: "DerMeister: asd 1234", тоесть мне нужно было "схватить" третье по счёту слово из строки журнала [не забывай: разделители слов - ПРОБЕЛЫ]...)

Code:
sub main()
var x
wait(2000)
uo.print("Vvedite X")
x=waitingforvalue()
wait(2000)
uo.print(x)
end sub


sub waitingforvalue()
uo.deletejournal()
while not uo.injournal('asd')
wait(100)
wend
var string=uo.journal(uo.injournal('asd')-1)
string=GetWord(string,3)
return string
end sub

#А тут превеед от Edred'a =)
Sub GetWord( st, nom )
; (c) Edred
; Возвращает слово из строки str за номером num
; если такого слова нет - возвращаем ''
;
; Разделителем слов считаем пробел. Несколько пробелов подряд считаются за один.
; Функция сделана без рекурсии специально для считывания слов из сверхдлинных строк!
;
   VAR tmpst, i, dlin, kol = 0, start = 0
   dlin = len( st )
   For i=0 To dlin - 1
      If mid( st, i, 1 ) == ' ' OR i == dlin - 1 Then
         kol = kol + 1
         If kol == nom Then
            ; это первый пробел после нужного нам слова
            tmpst = mid( st, start, i - start + 1 )
            return tmpst
         Else
            While mid( st, i, 1 ) == ' '
               i = i + 1
            Wend
            If kol == nom - 1 Then
               start = i
            Endif
         Endif
      Endif
   Next
   tmpst = ''
   return tmpst
end sub


ЗЫ:Можно еще проверку на серийник сообщения приляпать, но это ты уж сам как нить...
ЗЗЫ: Я хз, но почему-то в оригинале процедуры GetWord( st, nom ) , она возвращала слово, но БЕЗ последней буквы (видимо это происходит только когда берешь последнее слово из строки (я там подправил чтоб всё норм было для случая, когда посленее слово берём)).

_________________
DerMeister сейчас на нейрале!


Top
   
 Post subject:
PostPosted: 2006-05-21 22:16:13 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Был в каких-то версиях GetWord этот глюк, я обычно, чтобы не заморачиваться, просто во все строки, которые потом гетвордом пилил, в конец пробел добавлял.

_________________
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...


Top
   
 Post subject:
PostPosted: 2006-05-21 22:32:05 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
Edred wrote:
Был в каких-то версиях GetWord этот глюк, я обычно, чтобы не заморачиваться, просто во все строки, которые потом гетвордом пилил, в конец пробел добавлял.
Ну я так и понял :wink: ... просто неудобно ему будит пробел добавлять, тем более ему же последнее слово надо, так что я там +1 селал и всё ок -)
ЗЫ: Сам разберётся если ему это надо -)

_________________
DerMeister сейчас на нейрале!


Top
   
 Post subject:
PostPosted: 2006-05-22 01:47:39 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
DerMeister =) wrote:
просто неудобно ему будит пробел добавлять, тем более ему же последнее слово надо, так что я там +1 селал и всё ок -)


Плюс 1 катит только если тебе последнее слово надо, иначе он будет возвращать слово плюс пробел. А это некорректно. Проще прямо в функции перед считыванием длины добавить в строку в конец пробел.

_________________
Ни один скрипт не работает? Пора обновить Инжект...

Все работает, но хочется большего? Пора переходить на стелс...


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 20 posts ] 

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 4 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited