You are not logged in.
Посмотрев то, что исследовал листенер в gta_dll, нашёл следующее:
CRwCamera * (*RwCameraStreamRead)(CRwStream *) = (CRwCamera *(__cdecl *)(CRwStream *))0x808DE0; void (*RwCameraDestroy)(CRwCamera *) = (void (__cdecl *)(CRwCamera *))0x7EE4B0;
Значит ли это, что можно фактически создать ещё одну камеру и прицепить её, допустим, к педу/машине? Если да, то как такое можно реализовать?
Offline
Выводить изображения с камеры можно в текстуру (так сделаны зеркала и камеры наблюдения).
Стоит заметить, что данная функция используется при чтении clump - т.е. созданная камера может включаться в любую модель (правда, я с ходу не скажу, как это используется).
Offline
Ну вот. Я посмотрел ещё немного исходников по этой тематике, это правда что у камеры ещё есть, некая, Entity target? Можно об этом по подробней?
UPDATE:
Каким образом можно узнать, что target entity у камеры - опр. машина?
Я нашёл старт блока CCamera, далее, нашёл оффсет к ней 958 байт, который, якобы, отвечает за target entity. Я правильно делаю, либо в корни не верно?
Offline
Всем доброго дня/ночи, прошу помощи, долго уже мучаюс=)
(лирическое отступление:сразу скажу,что я далеко не гений програмирования, да и мой вопрос уровня новичка)
никак не могу понять как запускать возможность взятия 2ой мисси после выполнения 1ой.Что у меня получается: 1ямиссия запускается, я её прохожу, появляется маркер и метка на радаре, где нужно брать миссию 2, но когда я становлюсь на него ничего не происходит(учился по хелпу санни билдера)
так же хотелось бы узнать, что означает
fading
00BE: text_clear_all
03E6: remove_text_box
(в особенност fading), а так же, если можно, поподробнее узнать(в мануале я чёто недопонял=)), как собственно делать эти блоки миссий(т.е. сюжетную линию, можно сказать)
вот код(на основе stripped.txt):
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 23.02.2007
DEFINE OBJECTS 1
DEFINE OBJECT SANNY BUILDER v. 2.99f
DEFINE MISSIONS 2
DEFINE MISSION 0 AT @MISSION // Initial 1
DEFINE MISSION 1 AT @MISSION2
DEFINE EXTERNAL_SCRIPTS 0 // Use -1 in order not to compile AAA script
DEFINE UNKNOWN_EMPTY_SEGMENT 0
DEFINE UNKNOWN_THREADS_MEMORY 0
{$VERSION 3.1.0020}
//-------------MAIN---------------
thread 'MAIN'
fade 0 0
01F0: set_max_wanted_level_to 6
030D: set_total_mission_points_to 187
set_wb_check_to 0
00C0: set_current_time_hours_to 8 minutes_to 0
04E4: unknown_refresh_game_renderer_at 2488.56 -1666.84
Camera.SetAtPos(2488.56, -1666.84, 13.38)
$PLAYER_CHAR = Player.Create(#NULL, 2473.376, -1669.84, 13.38)
$PLAYER_ACTOR = Actor.EmulateFromPlayer($PLAYER_CHAR)
07AF: $PLAYER_GROUP = player $PLAYER_CHAR group
Camera.SetBehindPlayer
set_weather 0
09BA: show_entered_zone_name 0
wait 0
Player.SetClothes($PLAYER_CHAR, "PLAYER_FACE", "HEAD", Head)
Player.SetClothes($PLAYER_CHAR, "JEANSDENIM", "JEANS", Legs)
Player.SetClothes($PLAYER_CHAR, "SNEAKERBINCBLK", "SNEAKER", Shoes)
Player.SetClothes($PLAYER_CHAR, "VEST", "VEST", Torso)
Player.Build($PLAYER_CHAR)
Player.CanMove($PLAYER_CHAR) = True
$NEW_TOTAL_PASSED_MISSIONS = 0
fade 1 0
select_interior 0
0629: change_integer_stat 181 to 4
016C: restart_if_wasted_at 2027.77 -1420.52 15.99 angle 137.0 town_number 0
016D: restart_if_busted_at 1550.68 -1675.49 14.51 angle 90.0 town_number 0
0180: set_on_mission_flag_to $ONMISSION // Note: your missions have to use the variable defined here
03E6: remove_text_box
//create_thread @START
:MAIN_49 //297
if
fading
jf @MAIN_50
wait 0 ms
00BE: text_clear_all
03E6: remove_text_box
jump @MAIN_49
:MAIN_50
wait 0 ms
start_mission MISSION //Старт миссии
///end_thread
end_thread
:STARTER
thread 'STARTER'
// :STARTER
//thread 'STARTER'
:STARTER_11
wait 250
if
$NEW_TOTAL_PASSED_MISSIONS == 2
// Количество сюжетных миссий у нас равно 2
// если $NEW_TOTAL_PASSED_MISSIONS == 2, то закрываем поток
jf @STARTER_219POSLE1
end_thread
:STARTER_219POSLE1
if
$NEW_TOTAL_PASSED_MISSIONS == 1
jf @STARTER_352na_nachalo
if
00FF: actor $PLAYER_ACTOR sphere 0 in_sphere 2468.632 -1650.888 13.4716 radius 1.2 1.2 2.0 on_foot
jf @STARTER_352na_nachalo
Marker.Disable($Marker_Sweet_House)
$ONMISSION = 1
00BA: show_text_styled GXT 'SWEET1B' time 1000 style 2 // Cleaning the Hood
fade 0 500
// :STARTER_320DUNNO ///?????????????????
//if
//fading
//jf @STARTERMIS2
//wait 0
//00BE: text_clear_all
//03E6: remove_text_box
//jump @STARTER_320DUNNO
:STARTERMIS2 //NA 2U MISSIU
start_mission MISSION2
:STARTER_352na_nachalo
jump @STARTER_11
:START ///T_START priprovale 1 missii
thread 'START'
wait 0
1@ = Marker.CreateIconAndSphere(36, 2462.1006, -1716.0439, 13.5187)
:START_1 ///t_START
wait 250
if and
Player.Defined($PLAYER_CHAR)
0102: actor $PLAYER_ACTOR in_sphere 2462.1006 -1716.0439 13.5187 radius 2.0 2.0 1.0 sphere 1 stopped_on_foot
jf @START_1
Marker.Disable(1@)
00BA: show_text_styled GXT 'STAD_04' time 1000 style 2 //
//fade 0 500
wait 500
start_mission MISSION // Initial 1
end_thread
:MISSION
thread "MISSION"
gosub @Misstart
if
wasted_or_busted
jf @Misclean
gosub @Missfail
:Misclean
$ONMISSION = 0
mission_cleanup
end_thread
:Misstart
increment_mission_attempts
$ONMISSION = 1
model.load(#SAWNOFF)
model.load(#MP5LNG)
model.load(#BALLAS3) ///2462.1006 -1716.0439 13.5187 2455.2815 -1708.8257 13.6096 2328.4453 -1680.6447 14.8334
038B: load_reqested_models
:Misstart1
wait 0
if and
model.Available(#SAWNOFF)
model.Available(#MP5LNG)
model.Available(#BALLAS3)
jf @Misstart1
02A3: toggle_widescreen 1
Player.CanMove($PLAYER_CHAR) = False
:MissionStart_37
054C: use_GXT_table 'GARAGE1'
00BC: show_text_highpriority GXT 'GAR1_22' time 3000 flag 1 // ~s~Get inside the ~b~car~s~.
wait 5000
03D5: remove_text 'GAR1_22'
Player.CanMove($PLAYER_CHAR) = True
02A3: toggle_widescreen 0
032B: 3@ = create_weapon_pickup #SAWNOFF type 3 ammo 10 at 2455.2815 -1708.8257 13.6096
actor.create(2@,20,#BALLAS3,2328.4453, -1680.6447, 14.8334)
01B2: give_actor 2@ weapon 29 ammo 999999
wait 100
05E2: AS_actor 2@ kill_actor $PLAYER_ACTOR
:LabelMis1_3
wait 0
if
wasted_or_busted
jf @LabelMis1_4
jump @Missfail
:LabelMis1_4
wait 0
if and
//actor.Dead(1@)
actor.Dead(2@)
//actor.Dead(3@)
jf @LabelMis1_3
:Misspass
wait 200
0318: set_latest_mission_passed 'MISSION'
01E3: show_text_1number_styled GXT 'M_PASSS' number 200 time 5000 style 1 // MISSION PASSED!~n~~w~$~1~~n~~w~RESPECT +
//0998: add_respect 3
Player.Money($PLAYER_CHAR) += 200
Player.ClearWantedLevel($PLAYER_CHAR)
0394: play_music 1
$NEW_TOTAL_PASSED_MISSIONS += 1
$Marker_Sweet_Hous = Marker.CreateIconAndSphere(16, 2498.228, -1647.457, 13.5479)
// создаем маркер миссии FIRST
return
:Missfail
00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1
create_thread @START
return
/// 2477.2854 -1668.6162 13.3271
:MISSION2
thread "MISSION2"
gosub @Misstart2
if
wasted_or_busted
jf @Misclean2
gosub @Missfail2
:Misclean2
$ONMISSION = 0
mission_cleanup
end_thread
:Misstart2
increment_mission_attempts
$ONMISSION = 1
//model.load(#SAWNOFF)
model.load(#GUN_VIBE1) //323
model.load(#BALLAS2) ///2462.1006 -1716.0439 13.5187 2455.2815 -1708.8257 13.6096 2328.4453 -1680.6447 14.8334
038B: load_reqested_models
:Misstart12
wait 0
if and
///model.Available(#SAWNOFF)
model.Available(#GUN_VIBE1)
model.Available(#BALLAS2)
jf @Misstart12
//02A3: toggle_widescreen 1
//Player.CanMove($PLAYER_CHAR) = False
actor.create(2@,20,#BALLAS2,2469.7808, -1650.4218, 13.4718)
01B2: give_actor 2@ weapon 323 ammo 999999
wait 100
05E2: AS_actor 2@ kill_actor $PLAYER_ACTOR
:LabelMis1_32
wait 0
if
wasted_or_busted
jf @LabelMis1_42
jump @Missfail2
:LabelMis1_42
wait 0
if and
//actor.Dead(1@)
actor.Dead(2@)
//actor.Dead(3@)
jf @LabelMis1_32
:Misspass2
wait 200
0318: set_latest_mission_passed 'MISSION2'
01E3: show_text_1number_styled GXT 'M_PASSS' number 200 time 5000 style 1 // MISSION PASSED!~n~~w~$~1~~n~~w~RESPECT +
//0998: add_respect 3
Player.Money($PLAYER_CHAR) += 200
Player.ClearWantedLevel($PLAYER_CHAR)
0394: play_music 1
$NEW_TOTAL_PASSED_MISSIONS += 1
return
:Missfail2
00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1
//create_thread @START
return
Offline
А можно ли скриптово запустить войну банд сразу на всех вражеских территориях, а потом просто ездить и их по очереди отстреливать?
Offline
fading
00BE: text_clear_all
03E6: remove_text_box
fading - это проверка на затухание экрана (опкодом fade)
text_clear_all - ну а тут что не понятно? убрать весь текст этим опкодом можно
remove_text_box - убрать текст-бокс (чёрная полоска с текстом в левом верхнем углу экрана
Offline
Cпасибо, что ответили, но больше хотелось бы учлышать про создание линейки миссий.
Так же возникло ещё 2 вопроса(это пока=)):
1) как актёру запретить вылазить из машины, даже если она загорелась?(и как при необходимости снова дать ему эту возможность)
2)непонятно с камерой: команда Camera.SetAtPos, независимо от того, куда бы я камеру не ставил, показывает игрока.
при использовании команд Camera.pointat или camera.onvehicle (возможно и при исп других тоже, не пробовал) независимо от того, какие я ставлю координаты, показывается одно и то же место, даже ставил через некторое время set.behindplayer,- камера на игрока не переходит, так и продолжает висеть непонятно где,при этом игрок контролируем(судя по радару). что я делаю не так?
камера:
Offline
1) Поиск опкодов, stay_in_car 1 или 0.
2) Да, второй аргумент подводит. Попробуй поставить 0 или -1, как-то я выгребал из ситуации...
Offline
2)непонятно с камерой: команда Camera.SetAtPos, независимо от того, куда бы я камеру не ставил, показывает игрока.
при использовании команд Camera.pointat или camera.onvehicle (возможно и при исп других тоже, не пробовал) независимо от того, какие я ставлю координаты, показывается одно и то же место, даже ставил через некторое время set.behindplayer,- камера на игрока не переходит, так и продолжает висеть непонятно где,при этом игрок контролируем(судя по радару). что я делаю не так?
Есть такая фигня с камерой. Ставить её куда-либо можно только в том случае, если игрок заморожен (Player.CanMove($PLAYER_CHAR) = False). Можно так же, ставить её в цикле.
Offline
Sw[ee]t,~AquaZ~,спасибо за помощь.Я много чего пробовал, и расскажу,как я всё таки решил проблему:
вместо camera.setatpos(1,2,3)
использовал Camera.SetPosition(2467.4216 -1684.4646 13.5184, 0.0, 0.0,0.0) ,
затем- camera.pointat, который заработал нормально,а после анимации поставил Camera.Restore_WithJumpCut - кстати, если последнюю команду не ставить, камера остаётся на месте, при этом игрок может быть контролируем.
Offline
Offline
t]Ну вот. Я посмотрел ещё немного исходников по этой тематике, это правда что у камеры ещё есть, некая, Entity target? Можно об этом по подробней?
UPDATE:
Каким образом можно узнать, что target entity у камеры - опр. машина?
Я нашёл старт блока CCamera, далее, нашёл оффсет к ней 958 байт, который, якобы, отвечает за target entity. Я правильно делаю, либо в корни не верно?
Люди, ответьте на вопрос ёпте. Уже неделя прошла, никто ни слухом ни духом.
Offline
Offline
Какой опкод в Вайс Сити отвечает за буйства (вспышки ярости) ?
Не понял вопроса, что за буйство?
Offline
Offline
Это вроде "Rage" (Ярость) называется. Перекочевала из трёхи.
За это отвечает не опкод, а pickup.create, и в обработчике действий пикапа, уже, задаётся то что будет делать игрок после того как его поднимет.
Offline
Это называется Rampage и задается опкодом 01F9
http://gtag.gtagaming.com/opcode-databa … pcode=01F9
Offline
Такой вопрос: опкод для определения координат ближайшего педа к актёру?
SNKillers.net - всё о взломе и защите социальных сетей
Offline
Offline
Такой вопрос: опкод для определения координат ближайшего педа к актёру?
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@
а на мой вопрос никто не ответит? хотя бы на первый, оч надо, плз!!
можно ли сделать переменную типа Integer переменной типа String при этом сохраняя её значение?
и ещё если кому не сложно (предполагаю что это сложно), нужно написать один опкод, который будет цеплять камеру на объект наподобе 067С
Offline
можно ли сделать переменную типа Integer переменной типа String при этом сохраняя её значение?
объясни подробнее, что тебе нужно? вывести число на экран или записать его в файл?
Offline
Offline
объясни подробнее, что тебе нужно? вывести число на экран или записать его в файл?
мне нужно использовать его как имя записи GXT...
короче говоря я использую вот это -
0@ = -229908 008B: 1@ = &0(0@,1i) // get last keypresses 0085: 2@ = 1@ div(1@, 0x100) mul(1@, 0x100) 0062: 2@ -= 1@
чтобы узнать последнюю нажатую клавишу, насколько я понял это Integer, т.к. пробовал вывести значение переменной 2@ и оно соответственно равно значению Decimal из справки к опкоду 0AB0...
вот мне и нужно вывести на экран ту букву которая соответствует номеру этой клавиши. Я думал сделать GXT записи с именами равными значению Decimal каждой клавиши. Поэтому мне и надо преобразовать Integer переменную в String...
Last edited by BoPoH (14-09-2010 20:17)
Offline