You are not logged in.
не радиус небольшой,я веселился и поставил 3@ = 500.0 и сделал скрипт на взрыв актера........у меня апокалипсис начался ,повсему городу люди взрывались так что незнаю почему у тебя непашет
Sergino_thirty_seven ака Sergino37 скриптер с missions.gtamaps.net
Offline
Выложи код!(C Inceptorom полностью!)!!!
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
Который со взрывом?
Sergino_thirty_seven ака Sergino37 скриптер с missions.gtamaps.net
Offline
да
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
Вот
:EXPLODE wait 0 if 00E1: key_Pressed 0 4 jf @EXPLODE Actor.SetImmunities($PLAYER_ACTOR,0,0,0,0,0) Actor.SetImmunities($PLAYER_ACTOR,1,1,1,1,1) Jump @FIND :FIND wait 0 if 80E1: key_pressed 0 8 jf @EXPLODE Actor.StorePos($PLAYER_ACTOR,0@,1@,2@) 3@ = 500.0 Gosub @AIC_GETACTOR if 9@ <> -1 jf @FIND Actor.StorePos(9@,21@,22@,23@) 020C: create_explosion_with_radius 7 at 21@ 22@ 23@ wait 100 Actor.RemoveReferences(9@) Jump @FIND :AIC_GETACTOR 0006: 16@ = 305868 0006: 17@ = @AIC_TESTACTORHANDLE 0006: 20@ = 1988 0002: jump @AIC_STARTSEARCH :AIC_GETVEHICLE 0006: 16@ = 305869 0006: 17@ = @AIC_TESTVEHICLEHANDLE 0006: 18@ = -1 0006: 20@ = 2584 0256: player $PLAYER_CHAR defined 004D: jump_if_false @AIC_STARTSEARCH 00DF: actor $PLAYER_ACTOR driving 004D: jump_if_false @AIC_STARTSEARCH 03C0: 18@ = actor $PLAYER_ACTOR car 0002: jump @AIC_STARTSEARCH :AIC_GETOBJECT 0006: 16@ = 305871 0006: 17@ = @AIC_TESTOBJECTHANDLE 0006: 20@ = 412 :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_TESTVEHICLEHANDLE 056E: is 9@ valid_vehicle_handle 004D: jump_if_false @AIC_NOHANDLE 00D6: if or 003B: 18@ == 9@ // (int) 0119: car 9@ wrecked 004D: jump_if_false @AIC_NEWSEARCHRADIUS 0002: jump @AIC_NOHANDLE :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_TESTOBJECTHANDLE //0001: wait 0 83CA: not object 9@ exists 004D: jump_if_false @AIC_NEWSEARCHRADIUS :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@ -= 10787168 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 Sergino_thirty_seven (09-06-2007 17:14)
Sergino_thirty_seven ака Sergino37 скриптер с missions.gtamaps.net
Offline
2Seeman Почему в Interceptor'e радиус уменшается по какомуто основонному на чтении байтов ПрИНцыПу?:(:|
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
Код перебирает всех актеров поочередно и если он находится в радиусе, делает его позицию эталонной. Это для того, чтобы найти именно ближайшего актера. Если нужно найти любого актера в данном радиусе (необязательно ближайшего к игроку), нужно поставить return после AIC_NEWSEARCHRADIUS
Offline
Спасибо!:D:cool:
А то я мудохался с этим радиусом!:rolleyes:
А кстати как сделать так чтобы было искать следуещего?;)
Last edited by kostay scr (10-06-2007 11:10)
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
там есть закомментированный участок. Раскомментируй его и перед поиском запиши в 21@ хендл предыдущего найденного актера. Правда тогда он будет переключаться между двумя ближайшими актерами.
Offline
Я типа того зделал и он переключался как ты говориш.( зделал по своему:)(принцип понял:D))
Seemann у меня для тебя придложение: ты мог бы сделать пропуск актера(тоесть его хендла) с помощью массива, путем добавления его хендла туда и последущей проверки совпадения хендла найденого актера со всеви ячейками массива,при условии что ячейка с которой производится сравнение - правильный хэндл.:cool:
Last edited by kostay scr (10-06-2007 13:52)
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
ты мог бы сделать пропуск актера(тоесть его хендла) с помощью массива, путем добавления его хендла туда и последущей проверки совпадения хендла найденого актера со всеви ячейками массива,при условии что ячейка с которой производится сравнение - правильный хэндл.
Это не соответствует первоначальному смыслу скрипта: найти ближайшего актера. Но ты сам можешь модифицировать его под свои нужды.
Offline
Да, но просто я думаю многим понадобится находить много актеров без их уничтожения.
И я в скриптинге не профессионал, не подскажеш как работать с массивами?
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
Кажется разобралась.
Last edited by svetka (05-07-2007 06:26)
Offline
Если кто-то еще пользуется этим кодом, вот оптимизированная версия с использованием опкодов CLEO:
{
The Interceptor 1.1
by PLPynton and Seemann
Parameters:
0@ - input coord X
1@ - input coord Y
2@ - input coord Z
3@ - search radius
variables 4@..16@ in use
9@ = Result (returns -1 if not found)
}
:AIC_GETACTOR
0006: 16@ = 305868
0006: 5@ = @AIC_TESTACTORHANDLE
0006: 6@ = 1988
0002: jump @AIC_STARTSEARCH
:AIC_GETVEHICLE
0006: 16@ = 305869
0006: 5@ = @AIC_TESTVEHICLEHANDLE
0006: 6@ = 2584
0006: 8@ = -1
0256: player $PLAYER_CHAR defined
004D: jump_if_false @AIC_STARTSEARCH
00DF: actor $PLAYER_ACTOR driving
004D: jump_if_false @AIC_STARTSEARCH
03C0: 8@ = actor $PLAYER_ACTOR car
0002: jump @AIC_STARTSEARCH
:AIC_GETOBJECT
0006: 16@ = 305871
0006: 5@ = @AIC_TESTOBJECTHANDLE
0006: 6@ = 412
:AIC_STARTSEARCH
008B: 16@ = &0(16@,1i) // CPool*
0AB1: call_scm_func @AIC_READMEMOFFSET 2 ( 16@ + 8 )^ = 7@ // CPool.Size
0A8D: 11@ = read_memory 16@ size 4 virtual_protect 0 // CPool.pUnits
0006: 9@ = -1
0006: 10@ = 0
:AIC_SEARCHLOOPMAIN
0AB1: call_scm_func @AIC_READMEMOFFSET 2 ( 11@ + 20 )^ = 4@ // xyz*
8039: not 4@ == 0
004D: jump_if_false @AIC_SEARCHLOOPNEXT
0AB1: call_scm_func @AIC_READMEMOFFSET 2 ( 4@ + 48 )^ = 12@ // x
0AB1: call_scm_func @AIC_READMEMOFFSET 2 ( 4@ + 52 )^ = 13@ // y
0AB1: call_scm_func @AIC_READMEMOFFSET 2 ( 4@ + 56 )^ = 14@ // z
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) // counter
0AB1: call_scm_func @AIC_READMEMOFFSET 2 ( 16@ + 4 )^ = 4@ // CPool.flags
005A: 4@ += 9@ // (int)
0A8D: 4@ = read_memory 4@ size 1 virtual_protect 0
0012: 9@ *= 256
005A: 9@ += 4@ // (int)
0002: jump 5@
:AIC_TESTVEHICLEHANDLE
056E: is 9@ valid_vehicle_handle
004D: jump_if_false @AIC_NOHANDLE
00D6: if or
003B: 8@ == 9@ // (int)
0119: car 9@ wrecked
004D: jump_if_false @AIC_NEWSEARCHRADIUS
0002: jump @AIC_NOHANDLE
: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_TESTOBJECTHANDLE
83CA: not object 9@ exists
004D: jump_if_false @AIC_NEWSEARCHRADIUS
:AIC_NOHANDLE
0006: 9@ = -1
0002: jump @AIC_SEARCHLOOPNEXT
:AIC_NEWSEARCHRADIUS
{
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
0085: 3@ = 15@
:AIC_SEARCHLOOPNEXT
005A: 11@ += 6@ // (int)
000A: 10@ += 1
002D: 10@ >= 7@ // (int)
004D: jump_if_false @AIC_SEARCHLOOPMAIN
0051: return
:AIC_READMEMOFFSET
0A8E: 0@ = 0@ + 1@ // int
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
0AB2: ret 1 0@
Last edited by Seemann (08-06-2008 07:45)
Offline
А как можно находить СТАТИЧЕСКИЕ обьекты?=)
Возможно ли подстроить Interceptor под это или он рассчитан только на динамические обьекты?
(Статические обьекты можно созавать!)
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
Мне ответят?=)
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
Нельзя. Статические идут отдельно.
Offline
есть такая проверка......что-то типа
XXXX: if_no_obstacles_between_XYZ 1@ 2@ 3@ and_XYZ 1@ 2@ 3@ actor 0 car 0 object 0 particle 0
если поставить object 1, то статика тоже считается за объект
Last edited by 3Doomer (06-12-2008 17:37)
GIMS developer
Offline
Нельзя. Статические идут отдельно.
Тоесть вообще нельзя?Или только через инкретопор(за орфографические ошибки отвественности не несу)
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
занеси объект в data\object.dat и он будет пригоден скрипту:-)
А там нет лимита?
(Мне нуны усе обьекты)
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline