You are not logged in.
Может это потомучто карта на которой едет машина удаляется
тогда я думаю надо проверять расстояние между твоей машиной и той и если расстояние между ними больше 100 метров ты победил
кстати это из за этого так как телепорт по маркеру приводит к вылету
так как проверить расстояние между ними help
Last edited by 444andrei444 (13-05-2011 18:47)
Offline
Хорошо !
Без лишних слов, меня интерисует как проверить, что расстояние между машиной на которой еду я, во время гонки меньше 100 метров , если больше 100 метров, то гонка заканчивается
Last edited by 444andrei444 (13-05-2011 19:54)
Offline
Offline
Извините, за то что , ввел вас в заблуждение. Мне надо проверить расстояние между моей машиной и машиной противника, чтобы оно было не больше 100 метров
Offline
ну примерно так:
:1 wait 0 car.StorePos(10@, 1@, 2@, 3@) // 10@ - машина игрока car.StorePos(11@, 4@, 5@, 6@) // 11@ - машина соперника 050A: 7@ = distance_between_XYZ 1@ 2@ 3@ and_XYZ 4@ 5@ 6@ // 7@ - расстояние между машинами if 7@ > 100.0 then ................. // гонка заканчивается else jump @1 end
и снова всё при помощи поисковика опкодов... ничего сверхъестественного
Offline
Спасибо. по поводу поисковика опкодов, я им пользуюсь но в некоторых случаях он не помогает , наверное потомучто моих знаний английского недостаточно
Offline
Давно хотел сделать один скрипт, замедление времени не действующее на игрока Для этого нужно было замедлять время опкодом 015D и ускорять текущую анимацию опкодом 0393 во столько же раз, во сколько замедлил время. Но проблема в том, что нет опкода, с помощью которого можно было бы получить название текущей анимации. Однако я подумал, что если есть опкод 0611, то значит игра должна определить текущую анимацию, чтобы сравнить с указанной стринговой переменной. Открыв базу listener'а в IDA я кое-что нашёл:
.text:004916CA ; __linkproc__ opcode_0611 .text:004916CA @@opcode_0611: ; CODE XREF: _opcode_handler_15+37j .text:004916CA ; DATA XREF: .text:__linkproc__ opcode_tableo .text:004916CA 234 push 1 ; actor %1d% performing_animation %2h% .text:004916CC 238 mov ecx, esi .text:004916CE 238 call CScriptThread__getNumberParams .text:004916D3 234 mov ecx, _opcodeParameters .text:004916D9 234 push ecx ; int .text:004916DA 238 mov ecx, _PedPool .text:004916E0 238 call ?atHandle@?$CPool@VCPed@@@@QAEPAVCVehicle@@I@Z ; CPed * CPool<CPed>::atHandle (u32 h); .text:004916E5 234 push 18h .text:004916E7 238 lea edx, [esp+238h+var_1E4] .text:004916EB 238 push edx .text:004916EC 23C mov ecx, esi .text:004916EE 23C mov edi, eax .text:004916F0 23C call _CScriptThread__getStringParam .text:004916F5 234 mov ecx, [edi+18h] .text:004916F8 234 lea eax, [esp+234h+var_1E4] .text:004916FC 234 push eax .text:004916FD 238 push ecx .text:004916FE 23C mov byte ptr [esp+23Ch+var_220], 0 .text:00491703 23C call sub_4D6870 .text:00491708 23C add esp, 8 .text:0049170B 234 test eax, eax .text:0049170D 234 jz short loc_491714 .text:0049170F 234 mov byte ptr [esp+234h+var_220], 1 .text:00491714 .text:00491714 loc_491714: ; CODE XREF: _opcode_handler_15+95Dj .text:00491714 234 mov edx, [esp+234h+var_220] .text:00491718 234 push edx .text:00491719 238 mov ecx, esi .text:0049171B 238 call _CScriptThread__setCondResult ; выставить результат логической операции (при необходимости, произведя саму операцию) .text:00491720 234 xor al, al .text:00491722 234 jmp loc_492AAB
правда почти ничего не понял, т.к. ассемблер не знаю... но, тогда, обращусь к тем, кто знает вероятно как-то можно (подозреваю что одним из опкодов 0AA5-0AA8) выдрать из этого опкода именно то, что мне нужно - название текущей анимации. Заранее спасибо.
Offline
Здравствуйте. У меня имеется проблема с моим количеством модов и StreamMemoryFix.
Для начала я скажу вам характеристики своей GTA San Andreas
Архив gta3.img - 1.6giga
StreamMemoryFix 2.0
gta_sa.exe 1.0 (14 383 616 байт)
GTA_IV_HUD
Проблема в том, что я играю в sa-mp и имею большое количество модов, которые переполняют мой gta3.img архив. Вот как всё происходит
Запускаю самп клиент
Выбираю сервер, захожу (в Диспетчере задач появляется процесс gta_sa.exe)
Играю себе какое-то количество времени, и бывает, что катаюсь вокруг карты, и свойственно процессу gta_sa.exe набирать вес, в диспетчере задач.
Когда вес gta_sa.exe доходит до почти 1.6 гига, или чуть ниже, или чуть выше, то игра просто заедает на 1 кадре, приходится завершать процесс через Ctrl+Alt+Delete.
Кто нибудь может помочь решить эту проблему?
Может кто сталкивался, или знает что делать?
Спасибо
Offline
Когда вес gta_sa.exe доходит до почти 1.6 гига
фига се :wow: я и не думал что это реально, разве процесс не должен выгружать ненужное? скорее всего это из-за StreamMemoryFix, там наверное либо с настройками надо поиграться либо убрать, что ты врядли захочешь делать, если у тебя возникают проблемы без него.
Offline
Voron295 без него текстуры просто не прогружаются, так как высокого качества. Я просто не могу понять, как люди ставят модификации, как SRT 1.7, который делает архив gta3.img 2.02 гига + ещё туда осмеливаются запихнуть проект Обливион (HQ растительность в GTA SA) , который добавляет ещё мегабайтов 200, ENB Series, и ещё плюс ко всему этому всовывают туда уйму машин высокого качества. Ладно, всё это у меня пойдёт, машинка не слабая, но ёлы палы, можно ли как нибудь увеличить объём достигаемой памяти в процессах, в StreamMemoryFix? я просто совсем не умею это делать и не занимаюсь этим.
Offline
как вырубить дождь?:) насовсем?:)
Эпитафия на могиле фидошника: "Меня видно?"
Offline
как вырубить дождь?:) насовсем?:)
"вырубить" скорее всего не получится, хотя может и получится, я знаю просто только 1 вариант - в цикле применять хорошую погоду...
ForT, дай ссылку на StreamMemoryFix которым пользуешься, гляну какие там настройки существуют может и помогу чем-нибудь
P.S. Кто-нибудь может что-нибудь сказать по поводу моего #3258 поста?
Last edited by Voron295 (14-05-2011 19:21)
Offline
Название анимации хранится в CRC32, а не в текстовом виде, поэтому можно только сравнить, а получить текущее название не удастся. Может и есть способ, но я говорю изучив работу опкода, который ты в пример поставил.
И у stream memory fix вроде нет настроек, он просто прописывает лимиту memory дофига памяти(0x8A5A80 = 0xEFFFFFFF). Кому надо - меняйте значение через память(например cleo скриптом), единица измерения скорее всего в байтах(т.е. максимум ~3 ГБ)
Offline
Voron295 вот http://dl.dropbox.com/u/10121296/ModsSA/SMF.rar
Offline
У меня вопрос как создать машину на ближайшей дороге (скрипт такси )
Offline
Название анимации хранится в CRC32, а не в текстовом виде, поэтому можно только сравнить, а получить текущее название не удастся. Может и есть способ, но я говорю изучив работу опкода, который ты в пример поставил.
то есть из CRC32 невозможно получить строку, да?
У меня вопрос как создать машину на ближайшей дороге (скрипт такси )
actor.StorePos($PLAYER_ACTOR, 1@, 2@, 3@) 02C1: store_to 4@ 5@ 6@ car_path_coords_closest_to 1@ 2@ 3@ // 1@, 2@, 3@ - координаты по отношению к которым ты ищешь ближайший путь // 4@, 5@, 6@ - координаты ближайшего пути car.Create(7@, #ADMIRAL, 4@, 5@, 6@)
Offline
Есть ли способ создавать струю воды, как на пожарной машине, по подобию опкода 06BC:, не находясь в машине? Т.е. из одной точки в другую, или просто из одной точки.
Offline
За работу водяных пушек автомобилей отвечает функция CAutomobile__useWaterCannon (0x729B60). Сам эффект водяной струи реализуется предположительно функцией 0x728CB0 (детально код не исследовал).
Пример в тему - источник воды появляется на любом транспортном средстве, в котором находится игрок:
{$CLEO} while true wait 0 if not player.Defined($player_char) then continue end if and actor.Driving($player_actor) 0AB0: pressed_key 1 // левая кнопка мыши then 03C0: 0@ = actor $PLAYER_ACTOR car 0A97: 0@ = car 0@ struct 0AA6: call_method 0x729B60 struct 0@ num_params 1 pop 0 0 end end
Offline
Вообщем я сделал очередные поправки в скрипте race edit, но он вылетает. Не всегда, можно выполнить 2- 5 гонок потом вылетит. Помогите. Самому уже ничего в голову не идет
Last edited by 444andrei444 (16-05-2011 17:40)
Offline
@Den_spb - а прикрепить источник воды к игроку/объекту/etc никак не получится?
Offline
@Den_spb - а прикрепить источник воды к игроку/объекту/etc никак не получится?
прикрепи к игроку машину и сделай её невидимой а дальше уже.... прикрепить к игроку машину можно таким способом: прикрепляешь к игроку объект (069B или 070A), а к объекту крепишь машину (0939). Не очень рациональный способ, но других вариантов вроде нет.
Вообщем я сделал очередные поправки в скрипте race edit, но он вылетает. Не всегда, можно выполнить 2- 5 гонок потом вылетит. Помогите. Самому уже ничего в голову не идет
никак не пойму, зачем писать опкодами то, что можно написать ключевыми словами...
00D6: if 0038: $ONMISSION == 0 0256: player $PLAYER_CHAR defined 00DF: actor $PLAYER_ACTOR driving 0AB0: key_pressed 48 004D: jump_if_false @GONKI_2F
где and после if?
............. 0001: wait 0 ms 010A: player $PLAYER_CHAR money > 99 004D: jump_if_false @GONKI_2F
где if?
:GONKI_75 0001: wait 0 ms 0AB6: store_target_marker_coords_to 1@ 2@ 3@ // IF and SET
лучше переделать вот так:
:GONKI_75 0001: wait 0 ms if 0AB6: store_target_marker_coords_to 1@ 2@ 3@ // IF and SET jf @GONKI_2F
тогда, если маркер вообще не поставлен, ничего не начнётся.
00D6: if 8039: not 4@ == -1 004D: jump_if_false @GONKI_75 8039: not 1@ == -1 004D: jump_if_false @GONKI_75
что за странная конструкция?
00D6: if 0256: player 5@ defined 00DF: actor 5@ driving 004D: jump_if_false @GONKI_240
тут сразу 2 ошибки - написал if без слова and, а player.defined лучше использовать 1 раз в самом начале скрипта...
04C4: store_coords_to 11@ 12@ 13@ from_actor $PLAYER_ACTOR with_offset 5.0 20.0 0.0 04C4: store_coords_to 14@ 15@ 16@ from_actor $PLAYER_ACTOR with_offset -5.0 1.0 0.0 053E: 4@ = get_random_car_with_model -1 in_rectangle_cornerA 11@ 12@ cornerB 14@ 15@
какой-то странный поиск у тебя получается, немного неравномерный... точнее очень неравномерный... может лучше так:
04C4: store_coords_to 11@ 12@ 13@ from_actor $PLAYER_ACTOR with_offset 10.0 10.0 0.0 04C4: store_coords_to 14@ 15@ 16@ from_actor $PLAYER_ACTOR with_offset -10.0 -10.0 0.0 053E: 4@ = get_random_car_with_model -1 in_rectangle_cornerA 11@ 12@ cornerB 14@ 15@
тут не and надо, а or
:GONKI_183 0001: wait 0 ms 00D6: if and 0119: car 4@ wrecked 02BF: car 4@ sunk 8448: not actor 5@ in_car 4@ 004D: jump_if_false @GONKI_1AB 0002: jump @GONKI_240
ещё без нужды употребляешь wait 0, короче у тебя тут куча мелких недочётов и ошибок....
однако всё равно происходят вылеты, пока только тогда, когда я не вижу машину соперника и она находится дальше 10-20 метров от меня
вот код:
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007 {$VERSION 3.1.0027} {$CLEO .cs} //-------------MAIN--------------- thread 'GONKI' while not player.Defined($PLAYER_CHAR) wait 0 end :GONKI_2F wait 0 if and $ONMISSION == 0 actor.Driving($PLAYER_ACTOR) 010A: player $PLAYER_CHAR money > 99 0AB0: key_pressed 48 0AB6: store_target_marker_coords_to 1@ 2@ 3@ // IF and SET jf @GONKI_2F 04C4: store_coords_to 11@ 12@ 13@ from_actor $PLAYER_ACTOR with_offset 20.0 20.0 0.0 04C4: store_coords_to 14@ 15@ 16@ from_actor $PLAYER_ACTOR with_offset -20.0 -20.0 0.0 053E: 4@ = get_random_car_with_model -1 in_rectangle_cornerA 11@ 12@ cornerB 14@ 15@ if 056E: car 4@ defined jf @GONKI_2F 00AE: set_car 4@ traffic_behaviour_to 2 00AD: set_car 4@ max_speed_to 240.0 00A7: car 4@ drive_to 1@ 2@ 3@ car.SetImmunities(4@,1,1,1,1,1) 03C0: 10@ = actor $PLAYER_ACTOR car 046C: 5@ = car 4@ driver 0186: 6@ = create_marker_above_car 4@ :GONKI_124 wait 0 car.StorePos(10@, 17@, 18@, 19@) car.StorePos(4@, 21@, 22@, 23@) 050A: 20@ = distance_between_XYZ 17@ 18@ 19@ and_XYZ 21@ 22@ 23@ if 20@ > 150.0 jf @GONKI_183 jump @GONKI_279 :GONKI_183 if or 0119: car 4@ wrecked 02BF: car 4@ sunk 8448: not actor 5@ in_car 4@ jf @GONKI_1AB jump @GONKI_240 :GONKI_1AB if or 0AB0: key_pressed 78 not actor.InCar($PLAYER_ACTOR, 10@) jf @GONKI_1D9 jump @GONKI_279 :GONKI_1D9 if 01AD: car 4@ sphere 0 near_point 1@ 2@ radius 10.0 10.0 jf @GONKI_21A jump @GONKI_279 :GONKI_21A if 01AD: car 10@ sphere 0 near_point 1@ 2@ radius 10.0 10.0 jf @GONKI_124 :GONKI_240 01E3: show_text_1number_styled GXT 'M_PASS' number 100 time 5000 style 4 // Ї…CC…• ‹‘ЊO‡!~n~~w~$~1~ 0109: player $PLAYER_CHAR money += 100 0110: clear_player $PLAYER_CHAR wanted_level 0394: play_music 1 0164: disable_marker 6@ actor.RemoveReferences(5@) car.RemoveReferences(4@) car.RemoveReferences(10@) jump @GONKI_2F :GONKI_279 00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1 // ~r~–…CC…• ЊPO‹A‡E! 0109: player $PLAYER_CHAR money += -100 0164: disable_marker 6@ actor.RemoveReferences(5@) car.RemoveReferences(4@) car.RemoveReferences(10@) jump @GONKI_2F
неужели и я где-то ошибку упустил?))
Offline
@444andrei444
Если уж 'ковыряешь' чужие старые скрипты, то хоть имя потока, метки и переменные поменял бы.:lol:
04C4: store_coords_to 11@ 12@ 13@ from_actor $PLAYER_ACTOR with_offset 5.0 20.0 0.0 04C4: store_coords_to 14@ 15@ 16@ from_actor $PLAYER_ACTOR with_offset -5.0 1.0 0.0 053E: 4@ = get_random_car_with_model -1 in_rectangle_cornerA 11@ 12@ cornerB 14@ 15@какой-то странный поиск у тебя получается, немного неравномерный... точнее очень неравномерный... может лучше так:
04C4: store_coords_to 11@ 12@ 13@ from_actor $PLAYER_ACTOR with_offset 10.0 10.0 0.0 04C4: store_coords_to 14@ 15@ 16@ from_actor $PLAYER_ACTOR with_offset -10.0 -10.0 0.0 053E: 4@ = get_random_car_with_model -1 in_rectangle_cornerA 11@ 12@ cornerB 14@ 15@
В первом случае поиск транспорта ведётся в зоне перед игроком от 1 до 20 игровых метра (так было надо в моём скрипте 'Стритрейсеры' из которого это всё и взято).
В твоём варианте поиск транспорта будет идти и позади игрока.
Offline
А можно ли вывести текст, записанный по адресу 0xBAB040, как обычный GXT?
Offline
@444andrei444
Если уж 'ковыряешь' чужие старые скрипты, то хоть имя потока, метки и переменные поменял бы.:lol:Voron295 wrote:04C4: store_coords_to 11@ 12@ 13@ from_actor $PLAYER_ACTOR with_offset 5.0 20.0 0.0 04C4: store_coords_to 14@ 15@ 16@ from_actor $PLAYER_ACTOR with_offset -5.0 1.0 0.0 053E: 4@ = get_random_car_with_model -1 in_rectangle_cornerA 11@ 12@ cornerB 14@ 15@какой-то странный поиск у тебя получается, немного неравномерный... точнее очень неравномерный... может лучше так:
04C4: store_coords_to 11@ 12@ 13@ from_actor $PLAYER_ACTOR with_offset 10.0 10.0 0.0 04C4: store_coords_to 14@ 15@ 16@ from_actor $PLAYER_ACTOR with_offset -10.0 -10.0 0.0 053E: 4@ = get_random_car_with_model -1 in_rectangle_cornerA 11@ 12@ cornerB 14@ 15@В первом случае поиск транспорта ведётся в зоне перед игроком от 1 до 20 игровых метра (так было надо в моём скрипте 'Стритрейсеры' из которого это всё и взято).
В твоём варианте поиск транспорта будет идти и позади игрока.
И все таки никто не знает почему вылетает во время гонки, а не во времф старта?
Я не все взял с твоего скрипта он длиннее раза в два. Я взял начало взял поиск машин и все. Ну точно не помню может еще что нибудь. Метки сами переименовываются во время компиляции. А переменные так и оставил.
Offline