#3551 28-06-2011 20:00

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

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

Можно ли значение стринговой переменной перевести в integer

В строках за один символ отвечает один байт ( http://ru.wikipedia.org/wiki/ASCII#.D0. … 0.BA.D0.B0 ). Зная это, можно предложить простой способ решения задачи: 1.читаем значение первого байта строки 2.проверяем, является ли символ цифрой (0x40 > X > 0x29) - если да, то вычитаем 0x30. 3.Записываем результат в переменную-приёмник. 4.Повторяем операции для остальных байтов строки. Результат, помноженный на 10^X, где X - порядковый номер символа в строке, прибавляем к переменной-приёмнику.
Если число может быть отрицательным, то надо предусмотреть возможность чтения символа минуса.

Кстати, не мешало бы ещё знать, сколько разрядов максимум может содержать число.

Целое число word имеет размер 2 байта, следовательно максимальное значение равно 0xFFFF = 65535
Целое число dword имеет размер 4 байта, что соответствует 0xFFFFFFFF = 4294967295

Last edited by Den_spb (28-06-2011 20:02)

Offline

#3552 28-06-2011 21:13

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

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

Den_spb wrote:

Можно ли значение стринговой переменной перевести в integer

В строках за один символ отвечает один байт ( http://ru.wikipedia.org/wiki/ASCII#.D0. … 0.BA.D0.B0 ). Зная это, можно предложить простой способ решения задачи: 1.читаем значение первого байта строки 2.проверяем, является ли символ цифрой (0x40 > X > 0x29) - если да, то вычитаем 0x30. 3.Записываем результат в переменную-приёмник. 4.Повторяем операции для остальных байтов строки. Результат, помноженный на 10^X, где X - порядковый номер символа в строке, прибавляем к переменной-приёмнику.
Если число может быть отрицательным, то надо предусмотреть возможность чтения символа минуса.

Кстати, не мешало бы ещё знать, сколько разрядов максимум может содержать число.

Целое число word имеет размер 2 байта, следовательно максимальное значение равно 0xFFFF = 65535
Целое число dword имеет размер 4 байта, что соответствует 0xFFFFFFFF = 4294967295

Это я собственно и хотел ему предложить) в точности) а насчёт этого:

Кстати, не мешало бы ещё знать, сколько разрядов максимум может содержать число.

я просто неправильно выразился. Я в курсе про максимально возможные значения переменных, я спросил о том, сколько ему надо максимум...


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

Offline

#3553 29-06-2011 05:38

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

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

Спасибо.=)

Offline

#3554 29-06-2011 07:51

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

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

@kenking
Вот здесь посмотри, 4 сообщение сверху.
ссылка

Edit: упс, там тоже CLEO4.

Не в тему:
SannyBuilder на китайском

Last edited by DK22Pac (29-06-2011 07:53)


Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Offline

#3555 30-06-2011 11:58

doxtop
Registered: 29-09-2009
Posts: 12

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

listener wrote:

Пул состоит из двух массивов: в обном лежат объекты, в другом - флаги к ним (по байту на объект).
Старший бит этого байта - флаг того, что элемент пула свободен.

Добрался до посмотреть на эти флаги.

0xB74494 - Contains a pointer to main struct
This struct:
+4 = Contains a pointer to a byte map indicating which elements are in use

пытають прочитать

0A8D: 0@ = read_memory 0xB74494 size 4 virtual_protect 0
0@ += 4
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0

по идее ведь в 0@ должен записаться указатель на начало массива байтов флажков.
но когда я пытаюсь прочитать что либо из 0@ игра вылетает.
что не так? как эти байтики найти?

Offline

#3556 30-06-2011 12:18

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

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

while true
    003D:
    0A8D: 0@ = read_memory 0xB74494 size 4 virtual_protect 0
    inc(0@, 4)
    0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
    for 1@ = 0 to 27904 step 0x100
        0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0
        inc(0@)
        if and
            2@ >= 0 
            2@ < 0x80
        then 
            005A: 2@ += 1@
            car.StorePos(2@, 3@, 4@, 5@)
            016F: create_particle 2 rotation_factor 0.0 size 1.0 intensity 355 0 0 255 at 3@ 4@ 5@       
        end 
    end
end

Last edited by DK22Pac (30-06-2011 12:19)


Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Offline

#3557 30-06-2011 13:39

doxtop
Registered: 29-09-2009
Posts: 12

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

DK22Pac wrote:

0A8D: 0@ = read_memory 0xB74494 size 4 virtual_protect 0
    inc(0@, 4)
    0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
....
    0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0
...

вот так и читал, не был уверенн что это именно те байты.
получаеться что по 0xB74494+4 лежит первый элемент массива, а не указатель pointer to a byte map smile спасибо

ну и для полного счастья, что значит когда в 0xB74494+12 (количество элементов в vehicle pool) значение -1? вроде количество чего-то должно с 0 начинаться.

Offline

#3558 30-06-2011 13:48

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

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

@doxtop

	BYTE *	objects; // +0
	BYTE *	flags;  // +4
	int		size; // +8
	int		top; // +12
	BYTE	initialized; // +16
	BYTE	_f11[3];  // +17, не используется

по смещению +12 лежит индекс последнего выделенного/освобожденного элемента (чтобы выделение элементов работало быстрее - поиск свободного начинается с top+1).

Offline

#3559 04-07-2011 12:15

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

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

Здрасьте, а можно как-нибудь узнать координаты ближайшего "красного маркера"? Именно маркера, а не иконки.

Offline

#3560 04-07-2011 12:34

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

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

Sw[ee wrote:

t]Здрасьте, а можно как-нибудь узнать координаты ближайшего "красного маркера"? Именно маркера, а не иконки.

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

1@[1] = 0.0      // координата X для первого маркера
2@[1] = 0.0      // координата Y для первого маркера
3@[1] = 0.0      // координата Z для первого маркера

1@[2] = 1.0      // координата X для второго маркера
2@[2] = 1.0      // координата Y для второго маркера
3@[2] = 1.0      // координата Z для второго маркера

а затем, когда нужно узнать координаты ближайшего маркера применяешь вот такую конструкцию:

4@ = 1
actor.StorePos($PLAYER_ACTOR, 5@, 6@, 7@)
050A: 9@ = distance_between_XYZ 5@ 6@ 7@ and_XYZ 1@[4@] 2@[4@] 3@[4@]
10@ = 1     // 10@ - указатель на номер маркера, который ближе всего
while not 4@ == 10  // 10 - общее кол-во маркеров, ставишь столько, сколько тебе надо
4@ += 1
050A: 8@ = distance_between_XYZ 5@ 6@ 7@ and_XYZ 1@[4@] 2@[4@] 3@[4@]
    if
    8@ < 9@
    then
    0087: 9@ = 8@ // (float)
    0085: 10@ = 4@ // (int)
    end
wait 0
end

1@[10@] 2@[10@] 3@[10@] - координаты ближайшего маркера

Минус такого способа состоит в довольно большой задержке при поиске. Чем больше маркеров - тем больше задержка.

Last edited by Voron295 (04-07-2011 12:51)


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

Offline

#3561 04-07-2011 12:39

~AquaZ~
Registered: 01-03-2010
Posts: 726

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

Ворон, 1@[0] - это 1@, 1@[1] - это 2@ и т.д.. Обсуждалось не раз, что локальные массивы живут в одном блоке с локальными переменными.

Offline

#3562 04-07-2011 12:47

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

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

@Voron295 - нет. мне нужно найти ближайший маркер к игроку. созданный скриптовым путём не мной, а мэйном.

Offline

#3563 04-07-2011 12:53

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

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

~AquaZ~ wrote:

Ворон, 1@[0] - это 1@, 1@[1] - это 2@ и т.д.. Обсуждалось не раз, что локальные массивы живут в одном блоке с локальными переменными.

сорри, забыл об этом...

Sw[ee wrote:

t]@Voron295 - нет. мне нужно найти ближайший маркер к игроку. созданный скриптовым путём не мной, а мэйном.

понятно...


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

Offline

#3564 06-07-2011 09:28

doxtop
Registered: 29-09-2009
Posts: 12

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

Раскройте секрет, как работает

0893: put_trailer @ on_cab @

?
крешит игру при непонятных обстоятельствах.
стопроцентно ставит трейлер только если тягач стоит на месте.
если же ловить машину просто в пуле например и ставить, то 50 на 50. либо поставит либо вывалит игру. скинул бы и логи, но scmlog нифига не пишет после краша. бывают еще варианты ведения логов?

танцы с бубнами типа установки скорости, имунитетов, лока в текущей позиции и видимости как в скрипте T_TRAIL_XX не спасают от вылетов, они вообще даже и не нужны совсем, если создать тягач как car.create() и цеплять к нему прицеп он и так цепляеться на отлично и без дополнительных манипуляций. 

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

хочу заменить его на что-то более внятное и без звука клацания при стыковке.
кода пока под рукой нет, сорри. просто если кто чего копал в этом направлении поделитесь мыслями и ссылочками на инфу smile

--------
UPD: вопрос по опкоду снимается. скачал компактный ехе, базу и дебугер в котором хоть нифига практически и не понятно, но понятно, что натупил где-то с освобождением созданной тачки. 0893 работает на 100%.

Last edited by doxtop (07-07-2011 00:49)

Offline

#3565 06-07-2011 20:55

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

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

Отписываюсь, если вдруг кому-то пригодится. Я недавно просил решить проблему с камерой в моём виде от первого лица - при втором включении камера "срезала" часть тела игрока. Сейчас чисто случайно наткнулся на опкод с подозрительным описанием)) я и раньше его видел, но не придавал ему значения, а тут меня вдруг осенило. Я проверил - работает!) Вобщем вот он:

041D: set_camera_near_clip 0.1

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

Offline

#3566 07-07-2011 16:44

[ED]Andr
Registered: 24-07-2010
Posts: 17

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

Помогите пожалуйста..Нашёл косинус нужного угла, а опкода с текстом arccos  не нашлось, попробовал ещё 1 способ - так же не получилось.Как можно найти угол, зная его косинус?

Offline

#3568 08-07-2011 06:50

[ED]Andr
Registered: 24-07-2010
Posts: 17

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

Seemann,спасибо большое.

Last edited by [ED]Andr (08-07-2011 06:51)

Offline

#3569 08-07-2011 06:55

Alien
Registered: 12-10-2008
Posts: 564

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

@[ED]Andr - наверное проще использовать функции C std из msvcrt.dll.

Offline

#3570 09-07-2011 10:36

[ED]Andr
Registered: 24-07-2010
Posts: 17

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

Alien, проще, но я не умею

Offline

#3571 10-07-2011 16:23

hack_death
Registered: 15-07-2009
Posts: 10

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

Около столбика (автобусная остановка) собираются люди и куда его не поставь, они всё равно к нему будут подходить. Где прописано это свойство? речь идёт о VC.


673028.gif

Offline

#3572 11-07-2011 12:56

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

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

За то, что подходят, отвечает объект CPedAttractor.
Я еще не выяснял,  как это конкретно сделано в VC, но обычно аттракторы назначаются при создании объекта по ID модели.

Offline

#3573 23-07-2011 20:11

Alexsx
Registered: 23-07-2011
Posts: 2

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

Погоня с перестрелкой

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

Вообщем мне нужно для миссии код погони.
Итак, имеется машина 3@, в ней водитель 4@ и еще один актер 0@ (стрелок). Эта машина должна ехать к точке (которая находится в другом конце города). Ехать она должна по дороге, но игнорируя светофоры и объезжая машины.
Игрок, находясь на мотоцикле 1@, должен ее преследовать, а друг 2@, сидя позади обстреливать.

Вот то, что я писал:

Actor.SetImmunities(0@,1,1,1,1,1)
Actor.SetImmunities(4@,1,1,1,1,1)
Car.SetImmunities(3@,1,1,1,1,1) 
// создаем маркер
Marker.CreateAboveCar(10@,3@)
Marker.SetColor(10@,5) 
// восстанавливаем движение в городе
01EB: set_traffic_density_multiplier_to 1.0 
03DE: set_pedestrians_density_multiplier_to 1.0
// отключаем широкий экран
02A3: toggle_widescreen 0
// разрешаем игроку двигаться
Player.CanMove($PLAYER_CHAR) = True
// снимаем бессмертие со всех
Actor.SetImmunities($PLAYER_ACTOR,0,0,0,0,0)
Car.SetImmunities(1@,0,0,0,0,0)
Actor.SetImmunities(2@,0,0,0,0,0)
// восстанавливаем камеру
Camera.Restore_WithJumpCut()
// разблокировка байка
Car.LockInCurrentPosition(1@) = False
Car.DoorStatus(3@) = 2
00AE: set_car 3@ traffic_behaviour_to 2 
Car.SetToPsychoDriver(3@)
05D1: AS_actor 4@ drive_car 3@ to -125.807 -1202.0946 2.6953 speed 25.0 0 model #NULL 0 
// перестрелка
Actor.WeaponAccuracy(0@) = 60
Actor.WeaponAccuracy(2@) = 75
01B2: give_actor 2@ weapon 28 ammo -1
01B2: give_actor 0@ weapon 28 ammo -1
0713: actor 0@ driveby_actor 2@ car -1 point 0.0 0.0 0.0 radius 5000.0 4 1 firing_rate 40 
0713: actor 2@ driveby_actor 0@ car -1 point 0.0 0.0 0.0 radius 5000.0 4 1 firing_rate 90

В итоге, машина останавливается на светофорах, в пробках. А герои плохо стреляют, в смысле, то стреляют то не стреляют, только целятся...

Помогите, пожалуйста, новичку!

Offline

#3574 24-07-2011 06:12

VcSaJen
Registered: 25-08-2006
Posts: 217

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

Чтоб стреляли очередями, нужно прописать:

07DD: set_actor 1@ temper_to 100 // see pedstats.dat

Чтоб машина не останавливалась на светофорах и объезжала другие машины, нужно поставить:

00AE: set_car 0@ traffic_behaviour_to 2

[small][/small]

Offline

#3575 24-07-2011 06:51

VintProg_Pro
Registered: 17-06-2010
Posts: 153

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

А для VC есть нападобие такого:

07DD: set_actor 1@ temper_to 100 //

Offline

Board footer

Powered by FluxBB