You are not logged in.
Seemann, я попыталась использовать код для двух разных скриптов с участием педов. В каждый скрипт я прописываю код индивидуально (под конкретный срипт). Игрушка вылетает. Так и должно быть, или..?
Offline
Т.е. у тебя 2 потока, а в каждом этот скрипт?
Interceptor специально рассчитан на мультипоточное использование. Это значит, что ты можешь вставить его в майн только единожды, а потом делать gosub на него из любого потока. Представь, что этот скрипт как один большой-большой опкод.
Вылеты скорее всего связаны с самими скриптами, а не Interceptor'ом.
Offline
Вот мой пример с вылетом, где NONAME_22 и NNME два разных потока. С Interceptor'ом, каждый по отдельности работают нормально.
:NONAME_22 while true wait 100 00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@ 3@ = 20.0 gosub @AIC_GETACTOR if 9@ <> -1 then Marker.Disable($m3) Marker.CreateAboveActor($m3, 9@) wait 1000 0631: put_actor 9@ in_group $PLAYER_GROUP end end :NNME thread 'NNME' while true wait 100 00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@ 3@ = 20.0 gosub @AIC_GETACTOR if 9@ <> -1 then Marker.Disable($m2) Marker.CreateAboveActor($m2, 9@) wait 1000 if 056D: actor 9@ defined jf @NNME if Actor.Driving(9@) jf @NNME 03C0: 26@ = actor 9@ car jf @NNME wait 0 080E: get_actor 9@ ped_event_to 25@ if 25@ == 73 jf @NNME 21@ = Car.Health(26@) 0084: 23@ = 21@ // $ = $ (int) 0060: 23@ -= 25@ // $ -= $ (int) 23@ /= 50 24@ = Actor.Health(9@) 0060: 24@ -= 23@ // $ -= $ (int) Actor.Health(9@) = 24@ jump @NNME end end :AIC_GETACTOR 0006: 16@ = 305868 0006: 17@ = @AIC_TESTACTORHANDLE 0006: 20@ = 1988 0002: jump @AIC_STARTSEARCH :AIC_STARTSEARCH 0085: 4@ = 16@ // (int) 008B: 4@ = &0(4@,1i) // (int) 0085: 19@ = 4@ // (int) 000E: 19@ -= 10787160 0016: 19@ /= 4 008B: 19@ = &0(19@,1i) // (int) 000E: 4@ -= 10787168 0016: 4@ /= 4 008B: 4@ = &0(4@,1i) // (int) 0006: 9@ = -1 0085: 11@ = 4@ // (int) 0006: 10@ = 0 :AIC_SEARCHLOOPMAIN 000A: 4@ += 20 0050: gosub @AIC_READ4B 0085: 4@ = 5@ // (int) 8039: not 4@ == 0 004D: jump_if_false @AIC_SEARCHLOOPNEXT 000A: 4@ += 48 0050: gosub @AIC_READ4B 0085: 12@ = 5@ // (int) 000A: 4@ += 4 0050: gosub @AIC_READ4B 0085: 13@ = 5@ // (int) 000A: 4@ += 4 0050: gosub @AIC_READ4B 0085: 14@ = 5@ // (int) 050A: 15@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 12@ 13@ 14@ 0025: 3@ > 15@ // (float) 004D: jump_if_false @AIC_SEARCHLOOPNEXT 0085: 9@ = 10@ // (int) 0085: 4@ = 16@ // (int) 008B: 4@ = &0(4@,1i) // (int) 000A: 4@ += 4 0050: gosub @AIC_READ4B 0085: 4@ = 5@ // (int) 005A: 4@ += 9@ // (int) 0050: gosub @AIC_READ1B 0012: 9@ *= 256 005A: 9@ += 5@ // (int) 0002: jump 17@ :AIC_TESTACTORHANDLE 056D: is 9@ valid_actor_handle 004D: jump_if_false @AIC_NOHANDLE 00D6: if or 003C: $PLAYER_ACTOR == 9@ // (int) 0118: actor 9@ dead 004D: jump_if_false @AIC_NEWSEARCHRADIUS 0002: jump @AIC_NOHANDLE :AIC_NOHANDLE 0006: 9@ = -1 0002: jump @AIC_SEARCHLOOPNEXT :AIC_NEWSEARCHRADIUS 0085: 3@ = 15@ :AIC_SEARCHLOOPNEXT 005A: 11@ += 20@ // (int) 0085: 4@ = 11@ // (int) 000A: 10@ += 1 002D: 10@ >= 19@ // (int) 004D: jump_if_false @AIC_SEARCHLOOPMAIN 0051: return :AIC_READ1B 0085: 6@ = 4@ // (int) 0085: 8@ = 4@ // (int) 0016: 4@ /= 4 0012: 4@ *= 4 0062: 8@ -= 4@ // (int) 0012: 8@ *= 8 000E: 4@ -= 5393584 0016: 4@ /= 4 008B: 7@ = &0(4@,1i) // (int) 0085: 4@ = 6@ // (int) 0006: 5@ = 0 0006: 6@ = 0 :AIC_READ1B_LOOP 08B9: test 7@ bit 8@ 004D: jump_if_false @AIC_READ1B_NEXTBIT 08BF: set 5@ bit 6@ :AIC_READ1B_NEXTBIT 000A: 6@ += 1 000A: 8@ += 1 0039: 6@ == 8 004D: jump_if_false @AIC_READ1B_LOOP 0051: return :AIC_READ4B 0085: 6@ = 4@ // (int) 000E: 4@ -= 10787168 0016: 4@ /= 4 008B: 5@ = &0(4@,1i) // (int) 0085: 4@ = 6@ // (int) 0051: return
Last edited by svetka (08-06-2007 12:07)
Offline
Не могу понять, что у тебя происходит с метками? Ты постоянно декомпилируешь файл что ли?
В этом блоке
:NNME_222
16@ = 305868
17@ = 197708
20@ = 1988
jump @NNME_257
в оригинале в переменную 17@ записывается метка. После декомпиляции ее имя пропадет и будет заменено на число как у тебя (197708). Если ты пытаешься повторно скомпилировать такой код, то не факт что это число будет указывать на положенное место. Замени весь код Interceptor'а на оригинальный.
21@ = Car.Health(26@) jf @NNME
почему после здоровья jf?
Offline
В свой предыдущий пост (сегодня 08:16:13) я вставила оригинал до компиляции. В этот после.
:NONAME_22 wait 100 Actor.StorePos($PLAYER_ACTOR, 0@, 1@, 2@) 3@ = 20.0 gosub @NNME_235 if not 9@ == -1 jf @NONAME_22_79 Marker.Disable($10948) $10948 = Marker.CreateAboveActor(9@) wait 1000 0631: put_actor 9@ in_group $PLAYER_GROUP :NONAME_22_79 jump @NONAME_22 :NNME thread 'NNME' :NNME_11 wait 100 Actor.StorePos($PLAYER_ACTOR, 0@, 1@, 2@) 3@ = 20.0 gosub @NNME_235 if not 9@ == -1 jf @NNME_228 Marker.Disable($10949) $10949 = Marker.CreateAboveActor(9@) wait 1000 if 056D: actor 9@ defined jf @NNME if Actor.Driving(9@) jf @NNME 03C0: 26@ = actor 9@ car jf @NNME wait 0 080E: get_actor 9@ ped_event_to 25@ if 25@ == 73 jf @NNME 21@ = Car.Health(26@) 0084: 23@ = 21@ // $ = $ (int) 0060: 23@ -= 25@ // $ -= $ (int) 23@ /= 50 24@ = Actor.Health(9@) 0060: 24@ -= 23@ // $ -= $ (int) Actor.Health(9@) = 24@ jump @NNME :NNME_228 jump @NNME_11 :NNME_235 16@ = 305868 17@ = 194986 20@ = 1988 jump @NNME_270 :NNME_270 0085: 4@ = 16@ // @ = @ (int) 008B: 4@ = &0(4@,1i) // @ = $ (int) 0085: 19@ = 4@ // @ = @ (int) 19@ -= 10787160 19@ /= 4 008B: 19@ = &0(19@,1i) // @ = $ (int) 4@ -= 10787168 4@ /= 4 008B: 4@ = &0(4@,1i) // @ = $ (int) 9@ = -1 0085: 11@ = 4@ // @ = @ (int) 10@ = 0 :NNME_378 4@ += 20 gosub @NNME_858 0085: 4@ = 5@ // @ = @ (int) not 4@ == 0 jf @NNME_669 4@ += 48 gosub @NNME_858 0085: 12@ = 5@ // @ = @ (int) 4@ += 4 gosub @NNME_858 0085: 13@ = 5@ // @ = @ (int) 4@ += 4 gosub @NNME_858 0085: 14@ = 5@ // @ = @ (int) 050A: 15@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 12@ 13@ 14@ 0025: 3@ > 15@ // @ > @ (float) jf @NNME_669 0085: 9@ = 10@ // @ = @ (int) 0085: 4@ = 16@ // @ = @ (int) 008B: 4@ = &0(4@,1i) // @ = $ (int) 4@ += 4 gosub @NNME_858 0085: 4@ = 5@ // @ = @ (int) 005A: 4@ += 9@ // @ += @ (int) gosub @NNME_709 9@ *= 256 005A: 9@ += 5@ // @ += @ (int) jump 17@ 056D: actor 9@ defined jf @NNME_647 if or 003C: $PLAYER_ACTOR == 9@ // $ == @ (int) Actor.Dead(9@) jf @NNME_661 jump @NNME_647 :NNME_647 9@ = -1 jump @NNME_669 :NNME_661 0085: 3@ = 15@ // @ = @ (int) :NNME_669 005A: 11@ += 20@ // @ += @ (int) 0085: 4@ = 11@ // @ = @ (int) 10@ += 1 002D: 10@ >= 19@ // @ >= @ (int) jf @NNME_378 return :NNME_709 0085: 6@ = 4@ // @ = @ (int) 0085: 8@ = 4@ // @ = @ (int) 4@ /= 4 4@ *= 4 0062: 8@ -= 4@ // @ -= @ (int) 8@ *= 8 4@ -= 5393584 4@ /= 4 008B: 7@ = &0(4@,1i) // @ = $ (int) 0085: 4@ = 6@ // @ = @ (int) 5@ = 0 6@ = 0 :NNME_805 08B9: test 7@ bit 8@ jf @NNME_828 08BF: set 5@ bit 6@ :NNME_828 6@ += 1 8@ += 1 6@ == 8 jf @NNME_805 return :NNME_858 0085: 6@ = 4@ // @ = @ (int) 4@ -= 10787168 4@ /= 4 008B: 5@ = &0(4@,1i) // @ = $ (int) 0085: 4@ = 6@ // @ = @ (int) return
Хотя игрушка и не вылетает - скрипты работают больше, чем через раз. А именно:
1. Пед in_group появляется в единственном числе и то один раз. Остальные меня игнорируют.
2. NNME-скрипт вообще никак не проявляет себя.
Маркеры в обоих случаях не появляются, за исключением первого завербованного in_group педа.
Last edited by svetka (08-06-2007 14:19)
Offline
Seemann помоги у меня почемуто актер находится (в смысле поиска) только когда я к нему вплотную подхожу.Не знаешь почему?
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
Ставь радиус поиска больше,например 3@ = 10.0 будет вестись поиск в радиусе 10
Sergino_thirty_seven ака Sergino37 скриптер с missions.gtamaps.net
Offline
Seemann, жутко извиняюсь, я, если что, исправила пост. Теперь всё так. Вобщем работает тот скрипт, что выше стоит по списку. И работает - жуть. Наверняка я опять что-то упускаю.
Offline
Уф-ф...
По отдельности с Interceptor'ом скрипты работают. Но стоит вставить в мейн оба скрипта - работает тот, что дальше (выше) от Interceptor'а. При компиляции использую оригинальный (нескомпилированный) код Interceptor'а.
Seemann, а ты сам пробовал "вешать" одновременно два однородных скрипта (типа с выбором только педов) на код? Если да, то может покажешь пример
Offline
А create_thread для обоих потоков добавила?
Offline
Seemann, я наверное сошла с ума, но create_thread для обоих потоков я точно прописывала. Это просто 100%. Вобщем всё работает.:|
Я прям не знаю. Извини за напрасное беспокойство.:/
Offline
2svetka:
успокойся, дыши глубоко. Отдохни денька два-три Помешанные нам тут не нужны
Offline
Ставь радиус поиска больше,например 3@ = 10.0 будет вестись поиск в радиусе 10
Радиус вообще 30.0!НО НАХОДИТ КОГДА ПОДХОЖУ ВПЛОТНУЮ!
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
Если что код:
:marker while true wait 100 00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@ 3@ = 20.0 gosub @AIC_GETactor 00e1: 0 4 jf @marker if 9@ <> -1 then Marker.Disable($m2) Marker.CreateAboveactor($m2, 9@) 0631: 9@ $player_group end end { The Interceptor by PLPynton and Seemann Parameters: 0@ - input coord X 1@ - input coord Y 2@ - input coord Z 3@ - search radius variables 4@..20@ in use 9@ = Result (returns -1 if not found) } :AIC_GETACTOR 0006: 16@ = 305868 0006: 17@ = @AIC_TESTACTORHANDLE 0006: 20@ = 1988 0002: jump @AIC_STARTSEARCH ...
Простите что не воспользовался кнопкой редактировать.
Last edited by kostay scr (08-06-2007 18:59)
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
2svetka:
успокойся, дыши глубоко. Отдохни денька два-три Помешанные нам тут не нужны
Да-да-да
Вобщем вот как. Когда берешь педа в группу - другой скрипт отключается. Но педов в группу можно еще набирать. СтОит от них избавиться, как включается второй скрипт. Наверное идет некая взаимокомпенсация. Вот из-за этого я и запуталась.
Offline
kostay scr, воспользуйся моим кодом (смотри выше от 08:16:13 в этом топике). В нем те же задачи.
Убери из него всё, что связяно с потоком @NNME и всё будет ok!
Offline
kostay scr, воспользуйся моим кодом (смотри выше от 08:16:13 в этом топике). В нем те же задачи.
Убери из него всё, что связяно с потоком @NNME и всё будет ok!
Как то не ок
P.S. Утебя кусок :NEWSEARCHRADIUS РАскаминтирован?
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
kostay scr, это в мои потребности не входило, и потому мне достаточно того, что есть.
Тебе сколько надо набрать в группу? 20 человек? Если так, то и моего варианта достаточно. Я для себя вообще радиус выставила 1.2, чтобы ото всюду не сбегались.
Offline
Кому нибудь нужен пример использования Interceptor'а
спасибо Seemann'у за Interceptor пример с его использванием можно будет найти на missions.gtamaps.net
Last edited by Sergino_thirty_seven (09-06-2007 07:40)
Sergino_thirty_seven ака Sergino37 скриптер с missions.gtamaps.net
Offline
пример с его использванием можно будет найти на missions.gtamaps.net
Блин не нашел.Svetka так раскоментирован или нет?
Last edited by kostay scr (09-06-2007 16:45)
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
kostay scr, честно говоря я слабо владею терминологией, и потому твой вопрос для меня непонятен. Ты лучше скажи, чего ты хочешь добиться от скрипта? У меня сейчас с Interceptor'ом всё получается.
Offline
kostay scr, не грузи людей терминологией
2svetka он имел ввиду у тебя вот это есть?
{
use 0051: return to break the loop
immediately when found at least one actor/car/object,
does not matter if he's nearest one.
}
// v EXTRA SEARCH CRITERIA GOES HERE v
{
21@ contains the handle of an actor/car/object
that should be excluded from the search result
(for example a handle found previously).
}
//803B: 21@ <> 9@
//004D: jump_if_false @AIC_NOHANDLE
Last edited by Sergino_thirty_seven (09-06-2007 09:42)
Sergino_thirty_seven ака Sergino37 скриптер с missions.gtamaps.net
Offline
kostay scr, не грузи людей терминологией
Хорошо,но это не такая уж терминология.
2svetka он имел ввиду у тебя вот это есть?
Именно.
2svetka от Interceptor'a нужно чтоб на большом растоянии от кординат находил актера\обьект\тачку.
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
kostay scr, не грузи людей терминологией
Костя, это даже не терминология. Лично я только после третьего прочтения этого слова, понял, что тебе нужны комментарии. Потому как раскОмМЕнтирован пишется не совсем так как у тебя
Offline
2Tector Спасибо!:cool:
2Sergino_thirty_seven а можа радиус большой ?(20.0)
Last edited by kostay scr (09-06-2007 16:49)
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline