#3251 13-05-2011 18:43

444andrei444
Registered: 29-03-2011
Posts: 317
Website

Re: Один вопрос

Может это потомучто карта на которой едет машина удаляется
тогда я думаю надо проверять расстояние между твоей машиной и той и если расстояние между ними больше 100 метров ты победил
кстати это из за этого так как телепорт по маркеру приводит к вылету
так как проверить расстояние между ними help

Last edited by 444andrei444 (13-05-2011 18:47)

Offline

#3252 13-05-2011 19:20

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Один вопрос

Уважаемый 444andrei444, старайтесь грамотно формулировать свои мысли и пользоваться знаками препинания.

Offline

#3253 13-05-2011 19:39

444andrei444
Registered: 29-03-2011
Posts: 317
Website

Re: Один вопрос

Хорошо !
Без лишних слов, меня интерисует как проверить, что расстояние между машиной на которой еду я, во время гонки меньше 100 метров , если больше 100 метров, то гонка заканчивается

Last edited by 444andrei444 (13-05-2011 19:54)

Offline

#3254 13-05-2011 19:53

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Один вопрос

Расстояние между машиной и чем?
Вообще близость транспортного средства к определённой точке проверяется опкодом:

01AD:   car 99@ sphere 0 near_point 252@ 253@ radius 6.0 6.0

Last edited by Den_spb (13-05-2011 19:55)

Offline

#3255 13-05-2011 20:37

444andrei444
Registered: 29-03-2011
Posts: 317
Website

Re: Один вопрос

Извините, за то что , ввел вас в заблуждение. Мне надо проверить расстояние между моей машиной и машиной противника, чтобы оно было не больше 100 метров

Offline

#3256 13-05-2011 21:43

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: Один вопрос

ну примерно так:

: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

и снова всё при помощи поисковика опкодов... ничего сверхъестественного


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#3257 14-05-2011 04:06

444andrei444
Registered: 29-03-2011
Posts: 317
Website

Re: Один вопрос

Спасибо. по поводу поисковика опкодов, я им пользуюсь но в некоторых случаях он не помогает , наверное потомучто моих знаний английского недостаточно

Offline

#3258 14-05-2011 12:26

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: Один вопрос

Давно хотел сделать один скрипт, замедление времени не действующее на игрока smile Для этого нужно было замедлять время опкодом 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

правда почти ничего не понял, т.к. ассемблер не знаю... но, тогда, обращусь к тем, кто знает smile вероятно как-то можно (подозреваю что одним из опкодов 0AA5-0AA8) выдрать из этого опкода именно то, что мне нужно - название текущей анимации. Заранее спасибо.


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#3259 14-05-2011 15:04

ForT
Registered: 14-05-2011
Posts: 4

Re: Один вопрос

Здравствуйте. У меня имеется проблема с моим количеством модов и 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

#3260 14-05-2011 15:16

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: Один вопрос

ForT wrote:

Когда вес gta_sa.exe доходит до почти 1.6 гига

фига се :wow: я и не думал что это реально, разве процесс не должен выгружать ненужное? скорее всего это из-за StreamMemoryFix, там наверное либо с настройками надо поиграться либо убрать, что ты врядли захочешь делать, если у тебя возникают проблемы без него.


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#3261 14-05-2011 15:24

ForT
Registered: 14-05-2011
Posts: 4

Re: Один вопрос

Voron295 без него текстуры просто не прогружаются, так как высокого качества. Я просто не могу понять, как люди ставят модификации, как SRT 1.7, который делает архив gta3.img 2.02 гига + ещё туда осмеливаются запихнуть проект Обливион (HQ растительность в GTA SA) , который добавляет ещё мегабайтов 200, ENB Series, и ещё плюс ко всему этому всовывают туда уйму машин высокого качества. Ладно, всё это у меня пойдёт, машинка не слабая, но ёлы палы, можно ли как нибудь увеличить объём достигаемой памяти в процессах, в StreamMemoryFix? я просто совсем не умею это делать и не занимаюсь этим.

Offline

#3262 14-05-2011 19:10

Amaimon
From: Yakutsk
Registered: 20-03-2009
Posts: 11

Re: Один вопрос

как вырубить дождь?:) насовсем?:)


Эпитафия на могиле фидошника: "Меня видно?"

Offline

#3263 14-05-2011 19:16

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: Один вопрос

Amaimon wrote:

как вырубить дождь?:) насовсем?:)

"вырубить" скорее всего не получится, хотя может и получится, я знаю просто только 1 вариант - в цикле применять хорошую погоду...

ForT, дай ссылку на StreamMemoryFix которым пользуешься, гляну какие там настройки существуют smile может и помогу чем-нибудь smile

P.S. Кто-нибудь может что-нибудь сказать по поводу моего #3258 поста?

Last edited by Voron295 (14-05-2011 19:21)


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#3264 15-05-2011 01:45

Viger
Registered: 14-05-2009
Posts: 24

Re: Один вопрос

Название анимации хранится в CRC32, а не в текстовом виде, поэтому можно только сравнить, а получить текущее название не удастся. Может и есть способ, но я говорю изучив работу опкода, который ты в пример поставил.
И у stream memory fix вроде нет настроек, он просто прописывает лимиту memory дофига памяти(0x8A5A80 = 0xEFFFFFFF). Кому надо - меняйте значение через память(например cleo скриптом), единица измерения скорее всего в байтах(т.е. максимум ~3 ГБ)

Offline

#3265 15-05-2011 05:46

ForT
Registered: 14-05-2011
Posts: 4

Re: Один вопрос

Offline

#3266 15-05-2011 06:22

444andrei444
Registered: 29-03-2011
Posts: 317
Website

Re: Один вопрос

У меня вопрос как создать машину на ближайшей дороге (скрипт такси )

Offline

#3267 15-05-2011 09:51

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: Один вопрос

Viger wrote:

Название анимации хранится в CRC32, а не в текстовом виде, поэтому можно только сравнить, а получить текущее название не удастся. Может и есть способ, но я говорю изучив работу опкода, который ты в пример поставил.

то есть из CRC32 невозможно получить строку, да?

444andrei444 wrote:

У меня вопрос как создать машину на ближайшей дороге (скрипт такси )

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@)

Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#3268 16-05-2011 03:34

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Один вопрос

Есть ли способ создавать струю воды, как на пожарной машине, по подобию опкода 06BC:, не находясь в машине? Т.е. из одной точки в другую, или просто из одной точки.

Offline

#3269 16-05-2011 17:39

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Один вопрос

За работу водяных пушек автомобилей отвечает функция 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

#3270 16-05-2011 17:39

444andrei444
Registered: 29-03-2011
Posts: 317
Website

Re: Один вопрос

Вообщем я сделал очередные поправки в скрипте race edit, но он вылетает. Не всегда, можно выполнить 2- 5 гонок потом вылетит. Помогите. Самому уже ничего в голову не идет

Last edited by 444andrei444 (16-05-2011 17:40)

Offline

#3271 17-05-2011 16:20

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Один вопрос

@Den_spb - а прикрепить источник воды к игроку/объекту/etc никак не получится?

Offline

#3272 17-05-2011 17:16

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: Один вопрос

Sergey81 wrote:

@Den_spb - а прикрепить источник воды к игроку/объекту/etc никак не получится?

прикрепи к игроку машину и сделай её невидимой а дальше уже.... прикрепить к игроку машину можно таким способом: прикрепляешь к игроку объект (069B или 070A), а к объекту крепишь машину (0939). Не очень рациональный способ, но других вариантов вроде нет.

444andrei444 wrote:

Вообщем я сделал очередные поправки в скрипте 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? smile

: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

что за странная конструкция? smile

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

неужели и я где-то ошибку упустил?))


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#3273 18-05-2011 14:42

kenking
From: Казахстан
Registered: 28-06-2010
Posts: 253

Re: Один вопрос

@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

#3274 18-05-2011 15:58

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Один вопрос

А можно ли вывести текст, записанный по адресу 0xBAB040, как обычный GXT?

Offline

#3275 18-05-2011 16:24

444andrei444
Registered: 29-03-2011
Posts: 317
Website

Re: Один вопрос

kenking wrote:

@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

Board footer

Powered by FluxBB