You are not logged in.
Можно ли значение стринговой переменной перевести в 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
Можно ли значение стринговой переменной перевести в 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
Это я собственно и хотел ему предложить) в точности) а насчёт этого:
Кстати, не мешало бы ещё знать, сколько разрядов максимум может содержать число.
я просто неправильно выразился. Я в курсе про максимально возможные значения переменных, я спросил о том, сколько ему надо максимум...
Offline
Спасибо.=)
Offline
@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
Пул состоит из двух массивов: в обном лежат объекты, в другом - флаги к ним (по байту на объект).
Старший бит этого байта - флаг того, что элемент пула свободен.
Добрался до посмотреть на эти флаги.
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
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
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 спасибо
ну и для полного счастья, что значит когда в 0xB74494+12 (количество элементов в vehicle pool) значение -1? вроде количество чего-то должно с 0 начинаться.
Offline
@doxtop
BYTE * objects; // +0 BYTE * flags; // +4 int size; // +8 int top; // +12 BYTE initialized; // +16 BYTE _f11[3]; // +17, не используется
по смещению +12 лежит индекс последнего выделенного/освобожденного элемента (чтобы выделение элементов работало быстрее - поиск свободного начинается с top+1).
Offline
Здрасьте, а можно как-нибудь узнать координаты ближайшего "красного маркера"? Именно маркера, а не иконки.
Offline
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)
Offline
Ворон, 1@[0] - это 1@, 1@[1] - это 2@ и т.д.. Обсуждалось не раз, что локальные массивы живут в одном блоке с локальными переменными.
Offline
@Voron295 - нет. мне нужно найти ближайший маркер к игроку. созданный скриптовым путём не мной, а мэйном.
Offline
Ворон, 1@[0] - это 1@, 1@[1] - это 2@ и т.д.. Обсуждалось не раз, что локальные массивы живут в одном блоке с локальными переменными.
сорри, забыл об этом...
t]@Voron295 - нет. мне нужно найти ближайший маркер к игроку. созданный скриптовым путём не мной, а мэйном.
понятно...
Offline
Раскройте секрет, как работает
0893: put_trailer @ on_cab @
?
крешит игру при непонятных обстоятельствах.
стопроцентно ставит трейлер только если тягач стоит на месте.
если же ловить машину просто в пуле например и ставить, то 50 на 50. либо поставит либо вывалит игру. скинул бы и логи, но scmlog нифига не пишет после краша. бывают еще варианты ведения логов?
танцы с бубнами типа установки скорости, имунитетов, лока в текущей позиции и видимости как в скрипте T_TRAIL_XX не спасают от вылетов, они вообще даже и не нужны совсем, если создать тягач как car.create() и цеплять к нему прицеп он и так цепляеться на отлично и без дополнительных манипуляций.
банальная запись указателя на трейлер по смещению в тягач тоже не помогла, прицеп не цепляеться, либо я что-то не так сделал, по крайней мере прочитать ее обратно можно было.
хочу заменить его на что-то более внятное и без звука клацания при стыковке.
кода пока под рукой нет, сорри. просто если кто чего копал в этом направлении поделитесь мыслями и ссылочками на инфу
--------
UPD: вопрос по опкоду снимается. скачал компактный ехе, базу и дебугер в котором хоть нифига практически и не понятно, но понятно, что натупил где-то с освобождением созданной тачки. 0893 работает на 100%.
Last edited by doxtop (07-07-2011 00:49)
Offline
Отписываюсь, если вдруг кому-то пригодится. Я недавно просил решить проблему с камерой в моём виде от первого лица - при втором включении камера "срезала" часть тела игрока. Сейчас чисто случайно наткнулся на опкод с подозрительным описанием)) я и раньше его видел, но не придавал ему значения, а тут меня вдруг осенило. Я проверил - работает!) Вобщем вот он:
041D: set_camera_near_clip 0.1
Offline
Помогите пожалуйста..Нашёл косинус нужного угла, а опкода с текстом arccos не нашлось, попробовал ещё 1 способ - так же не получилось.Как можно найти угол, зная его косинус?
Offline
Offline
Seemann,спасибо большое.
Last edited by [ED]Andr (08-07-2011 06:51)
Offline
@[ED]Andr - наверное проще использовать функции C std из msvcrt.dll.
Offline
Alien, проще, но я не умею
Offline
Offline
Погоня с перестрелкой
Крайне извиняюсь, если это уже было, если это элементарно и т.п. Но у меня ничего не получается и время поджимает...
Вообщем мне нужно для миссии код погони.
Итак, имеется машина 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
Чтоб стреляли очередями, нужно прописать:
07DD: set_actor 1@ temper_to 100 // see pedstats.dat
Чтоб машина не останавливалась на светофорах и объезжала другие машины, нужно поставить:
00AE: set_car 0@ traffic_behaviour_to 2
[small][/small]
Offline
А для VC есть нападобие такого:
07DD: set_actor 1@ temper_to 100 //
Offline