You are not logged in.
rect_x1 = center_x - width/2 rect_x2 = center_x + width/2 rect_y1 = center_y - height/2 rect_y2 = center_y + height/2
Спасибо! Но я сообразить не могу, как рисовать текстуру в центре экрана?
Люди! У меня появился вопрос. Я использую опкод 0D7E от DK22Pac, для рисования индикатора. И в этом опкоде есть параметры at_cornerA и at_cornerB. Я в at_cornerB вписал значения 512.0 и 256.0. Насколько я понял, cornerB отвечает за ширину и высоту рисования текстуры. При изменении at_cornerA текстура изменяется по размерам и прочему, насколько я понял. Вопрос: Как текстуру рисовать в центре используя опкод рисования от DK22Pac?
Здравствуйте! Не знаю в какой раздел поместить эту тему, поместил сюда. Вобщеем, у меня такая проблема. В GTA SA стал пропадать звук. Часто появляется, и пропадает. Пропадает весь звук, кроме звуков меню. Как решить эту проблему?
Очень серьезный вопрос от меня: меняю опкодом 09C7 скин CJ, но после сохранения и дальнейшней загрузки скин снова меняется на стандартный CJ-я, как это исправить?
Проверить опкодом 03D9 завершено ли сохранение, после изменить скин.
Nikita592 wrote:Он будет работать сначала.
В начале main стоит создание игрока, помещение его в определенные координаты и начало 0 миссии, это тоже все будет выполняться после загрузки сохранения?
Нет не будет, я ошибся, игра будет работать с того скрипта, который завершился при сохранении. Вроде так он работает.
wmysterio wrote:Kim wrote:Можно подробнее как так сделать?
Можете почитать статью RRR-файлы в GTA SA на моём сайте. Там я более-менее рассказал как делать RRR-файлы. Маршрут будет гарантировать, что транспорт будет ехать строго по указанному маршруту.
Я надеюсь, вам не надоели мои вопросы. Такое назрело спросить: как работает main.scm? При запуске новой игры он идет сначала, а если загрузить игру через сохранение, то откуда будет начинаться скрипт?
Он будет работать сначала.
Такой вопрос появился: в миссиях машины едут прямо очень аккуратно, как заставить их ехать так же? Я слышал, что так можно заставить ехать даже лодку.
Вроде с помощью путей автомобилей такой параметр задаётся. Иначе говоря, с помощью RRR файлов.
Здравствуйте! У меня появился такой вопрос. Можно ли как-то прикрепить какой-либо текст к текстуре? Т.е в текстуре допустим есть кружок и в этом кружке нужно например нарисовать значение HP какой-либо машины.
Nikita592, нету.
Жаль
Всем привет! У меня возник такой вопрос. Есть опкод записывающий время огня? Если допустим горит игрок, то записывается время огня. Как только игрок перестаёт гореть, таймер огня останавливается.
Можно сделать по другому. Можно проверить что актёр/ы водят транспорт и вместе с этой проверкой добавить проверку на то, что актёр мёртв.
Здравствуйте! Подскажите, как изменить цвет букв в Sanny Builder 3? Я поменял фон и отступ на чёрный, так как белый глаза мозолит. Буквы в том смысле что например опкод 0AF0: get_int_from_ini_file и мне сам get_int_from_ini_file нужно изменить на цвет серый.
Такой возможности нет. Но, можно сделать проверку на то, что если у игрока скин женщины (это можно сделать с помощью опкода 02F2), и с помощью опкода 0245 можно поставить походку, какую хочешь. Походки можно посмотреть в animgrp.dat в папке data.
Nikita592 wrote:Shag wrote:Nikita592 wrote:Люди, хочу спросить а как можно трансформировать позицию игрока и позицию атакующего актёра (который атаковал игрока), в экранные координаты?
В VC это функция
5778B0 ; char __cdecl CSprite::CalcScreenCoors(RwV3d *a1, RwV2d *a2, float *a3, float *a4, char a5)В SA вроде
70CE30 ; CSprite::CalcScreenCoors(RwV3d const&, RwV3d*, float *, float *, bool, bool)Shag, спасибо, но как этим пользоваться? Использовать опкод 0A8D? Если да, то как? Просто я в памяти игры плохо разбираюсь, и как пользоваться этим адресом памяти я не знаю.
А для какой игры? Если для VC - могу накатать код на досуге(я не профи, так что для меня это работка на несколько часов, т.к. я всегда допускаю какие-нибудь ошибки и приходится тестировать по-нескольку раз), но вообще я работаю над новыми опкодами для Вайса, и этот опкод тоже в планах на добавление.
Если для SA - то навряд ли смогу помочь, т.к. с ней не работаю(даже в функции для неё не уверен).
UPD:
А, нашел всё же инфу по СА:
https://sannybuilder.com/forums/viewtop … 8988#p8988
Shag, спасибо. Для SA хочу это всё сделать.
Nikita592 wrote:Люди, хочу спросить а как можно трансформировать позицию игрока и позицию атакующего актёра (который атаковал игрока), в экранные координаты?
В VC это функция
5778B0 ; char __cdecl CSprite::CalcScreenCoors(RwV3d *a1, RwV2d *a2, float *a3, float *a4, char a5)В SA вроде
70CE30 ; CSprite::CalcScreenCoors(RwV3d const&, RwV3d*, float *, float *, bool, bool)
Shag, спасибо, но как этим пользоваться? Использовать опкод 0A8D? Если да, то как? Просто я в памяти игры плохо разбираюсь, и как пользоваться этим адресом памяти я не знаю.
Люди, хочу спросить а как можно трансформировать позицию игрока и позицию атакующего актёра (который атаковал игрока), в экранные координаты?
Можно покопаться в памяти SA, там должен быть какой-либо адрес памяти который вызывает меню загрузки.
И вот у меня появился вопрос. Как сделать так, чтобы индикатор обстрела показывал ТОЧНОЕ местоположение актёра который атаковал игрока. Как это сделать?
Тебе хп нужны в процентах?
Да! Я сделал индикатор обстрела! Только я не трансформировал позицию игрока и атакующего в экранные координаты. Я просто записал в переменные позицию игрока и атакующего, и сложил в переменную (Опкод 0509). Дальше я в переменные записал в переменные позицию камеры. Потом, вычитал от позиции камеры общую позицию игрока и атакующего. И на фоне всего этого используя опкоды от DK22Pac нарисовал спрайт с углом поворота.
Вот код:
{$CLEO} 0000: :ATTACK_PLAYER thread "ATTACK_PLAYER" wait 0 if 031D: actor $PLAYER_ACTOR hit_by_weapon 57 jf @ATTACK_PLAYER_Reload if 0AB1: call_scm_func @GetAttackActor 1 $PLAYER_ACTOR 1@ jf @ATTACK_PLAYER Actor.StorePos(1@,10@,11@,12@) wait 0 Actor.StorePos($PLAYER_ACTOR,13@,14@,15@) 0509: 16@ = distance_between_XY 10@ 11@ and_XY 13@ 14@ 068D: get_camera_position_to 18@ 19@ 20@ 0063: 19@ -= 16@ // (float) 32@ = 0 while 32@ < 1000 wait 0 03E3: set_texture_to_be_drawn_antialiased 1 0@ = Texture.LoadFromPNG("cleo\IMG_PIC\down1.png") 0D7E: draw_sprite_with_texture 0@ at_cornerA 100.0 100.0 cornerB 300.0 35.0 color 220 220 220 255 angle 19@ end wait 300 03F0: enable_text_draw 0 Texture.Unload(0@) :Release_TExture wait 0 if 0AB0: key_pressed 85 // U then Texture.Unload(0@) end jump @ATTACK_PLAYER :GetAttackActor 0A96: 1@ = actor 0@ struct 1@ += 0x764 :TestPed 0A8D: 0@ = read_memory 1@ size 4 virtual_protect 0 if 0@ > 0 then 0A8D: 8@ = read_memory 0x00B74490 size 4 virtual_protect 0 0AA8: call_function_method 0x4442D0 struct 8@ num_params 1 pop 0 0@ 1@ if 056D: actor 1@ defined then 0AB2: ret 1 1@ end end 0AB2: ret 1 -1 :ATTACK_PLAYER_Reload wait 0 if 0ADC: test_cheat "RED" jf @ATTACK_PLAYER 0A92: create_custom_thread "Attack.cs" 0ACE: show_formatted_text_box "Reloading" 0A93: end_custom_thread
Форум спит?
Трансформировать в экранные координаты? Как это сделать?
P.S. Индикатор обстрела я хочу сделать в CLEO.
Здравствуйте, форумчане! У меня появилась идея, но я понятия не имею как её реализовать. Вообщем, суть моей идеи. В GTA V есть такая фича, когда в тебя стреляют, появляется стрелка обстрела (т.е если игрок получил урон то появится стрелка с той стороны с какой игрока атакуют.), и я такую фичу хочу сделать в SA, но не знаю как. Возможно ли реализовать такое в SA? Если да, то как?
Goldfish, вот полный код получения времени:
:FPS_COUNTER thread 'FPS_COUNTER' 2@ = 30 $DEBUG_TEXT_SIZE_X = 0.4 $DEBUG_TEXT_SIZE_Y = 1.15 $DEBUG_ALPHA = 0 $DEBUG_ALPHA_IN_FLAG = 0 :FPS_COUNTER_60 1@ = 0 32@ = 0 :FPS_COUNTER_74 wait 0 if $DEBUG_ALPHA_IN_FLAG == 0 jf @FPS_COUNTER_129 $DEBUG_ALPHA += 15 if $DEBUG_ALPHA == 255 jf @FPS_COUNTER_129 $DEBUG_ALPHA_IN_FLAG = 1 :FPS_COUNTER_129 if $FPS_ENABLED == 1 jf @FPS_COUNTER_74 1@ += 1 03F0: enable_text_draw 1 0342: set_text_draw_centered 1 03E0: draw_text_behind_textures 1 0340: set_text_draw_RGBA 180 180 180 $DEBUG_ALPHA 081C: draw_text_outline 1 RGBA 0 0 0 $DEBUG_ALPHA 033F: set_text_draw_letter_size $DEBUG_TEXT_SIZE_X $DEBUG_TEXT_SIZE_Y if 2@ > 27 jf @FPS_COUNTER_269 045A: draw_text_1number 600.0 3.0 GXT 'DBG18' number 2@ :FPS_COUNTER_269 if and not 2@ >= 27 2@ > 22 jf @FPS_COUNTER_318 045A: draw_text_1number 600.0 3.0 GXT 'DBG24' number 2@ :FPS_COUNTER_318 if not 2@ >= 22 jf @FPS_COUNTER_360 045A: draw_text_1number 600.0 3.0 GXT 'DBG25' number 2@ :FPS_COUNTER_360 0342: set_text_draw_centered 1 03E0: draw_text_behind_textures 1 0340: set_text_draw_RGBA 180 180 180 $DEBUG_ALPHA 081C: draw_text_outline 1 RGBA 0 0 0 $DEBUG_ALPHA 033F: set_text_draw_letter_size $DEBUG_TEXT_SIZE_X $DEBUG_TEXT_SIZE_Y if and $LOCAL_HOUR > 9 $LOCAL_MINUTE > 9 jf @FPS_COUNTER_455 045B: draw_text_2numbers 545.0 3.0 GXT 'DBG23' numbers $LOCAL_HOUR $LOCAL_MINUTE :FPS_COUNTER_455 if and not $LOCAL_HOUR > 9 $LOCAL_MINUTE > 9 jf @FPS_COUNTER_507 045B: draw_text_2numbers 545.0 3.0 GXT 'DBG20' numbers $LOCAL_HOUR $LOCAL_MINUTE :FPS_COUNTER_507 if and not $LOCAL_HOUR > 9 not $LOCAL_MINUTE > 9 jf @FPS_COUNTER_559 045B: draw_text_2numbers 545.0 3.0 GXT 'DBG21' numbers $LOCAL_HOUR $LOCAL_MINUTE :FPS_COUNTER_559 if and $LOCAL_HOUR > 9 not $LOCAL_MINUTE > 9 jf @FPS_COUNTER_611 045B: draw_text_2numbers 545.0 3.0 GXT 'DBG22' numbers $LOCAL_HOUR $LOCAL_MINUTE 00C0: set_current_time_hours_to $LOCAL_HOUR minutes_to $LOCAL_MINUTE :FPS_COUNTER_611 0A8D: 10@ = read_memory 12045156 size 4 virtual_protect 0 11@ = 999.0 006B: 11@ *= 10@ // (float) 0092: 11@ = float 11@ to_integer 0342: set_text_draw_centered 1 03E0: draw_text_behind_textures 1 0340: set_text_draw_RGBA 180 180 180 $DEBUG_ALPHA 081C: draw_text_outline 1 RGBA 0 0 0 $DEBUG_ALPHA 033F: set_text_draw_letter_size $DEBUG_TEXT_SIZE_X $DEBUG_TEXT_SIZE_Y 045B: draw_text_2numbers 45.0 3.0 GXT 'DBG19' numbers $BUILD_VERSION1 $BUILD_VERSION2 if 001D: 32@ > 11@ // (int) jf @FPS_COUNTER_74 03F0: enable_text_draw 1 0342: set_text_draw_centered 1 03E0: draw_text_behind_textures 1 0340: set_text_draw_RGBA 180 180 180 $DEBUG_ALPHA 081C: draw_text_outline 1 RGBA 0 0 0 $DEBUG_ALPHA 033F: set_text_draw_letter_size $DEBUG_TEXT_SIZE_X $DEBUG_TEXT_SIZE_Y if 2@ > 27 jf @FPS_COUNTER_829 045A: draw_text_1number 600.0 3.0 GXT 'DBG18' number 2@ :FPS_COUNTER_829 if and not 2@ >= 27 2@ > 22 jf @FPS_COUNTER_878 045A: draw_text_1number 600.0 3.0 GXT 'DBG24' number 2@ :FPS_COUNTER_878 if not 2@ >= 22 jf @FPS_COUNTER_920 045A: draw_text_1number 600.0 3.0 GXT 'DBG25' number 2@ :FPS_COUNTER_920 0342: set_text_draw_centered 1 03E0: draw_text_behind_textures 1 0340: set_text_draw_RGBA 180 180 180 $DEBUG_ALPHA 081C: draw_text_outline 1 RGBA 0 0 0 $DEBUG_ALPHA 033F: set_text_draw_letter_size $DEBUG_TEXT_SIZE_X $DEBUG_TEXT_SIZE_Y if and $LOCAL_HOUR > 9 $LOCAL_MINUTE > 9 jf @FPS_COUNTER_1015 045B: draw_text_2numbers 545.0 3.0 GXT 'DBG23' numbers $LOCAL_HOUR $LOCAL_MINUTE :FPS_COUNTER_1015 if and not $LOCAL_HOUR >= 9 $LOCAL_MINUTE > 9 jf @FPS_COUNTER_1067 045B: draw_text_2numbers 545.0 3.0 GXT 'DBG20' numbers $LOCAL_HOUR $LOCAL_MINUTE :FPS_COUNTER_1067 if and not $LOCAL_HOUR >= 9 not $LOCAL_MINUTE >= 9 jf @FPS_COUNTER_1119 045B: draw_text_2numbers 545.0 3.0 GXT 'DBG21' numbers $LOCAL_HOUR $LOCAL_MINUTE :FPS_COUNTER_1119 if and $LOCAL_HOUR > 9 not $LOCAL_MINUTE >= 9 jf @FPS_COUNTER_1171 045B: draw_text_2numbers 545.0 3.0 GXT 'DBG22' numbers $LOCAL_HOUR $LOCAL_MINUTE 00C0: set_current_time_hours_to $LOCAL_HOUR minutes_to $LOCAL_MINUTE :FPS_COUNTER_1171 0342: set_text_draw_centered 1 03E0: draw_text_behind_textures 1 0340: set_text_draw_RGBA 180 180 180 $DEBUG_ALPHA 081C: draw_text_outline 1 RGBA 0 0 0 $DEBUG_ALPHA 033F: set_text_draw_letter_size $DEBUG_TEXT_SIZE_X $DEBUG_TEXT_SIZE_Y 045B: draw_text_2numbers 45.0 3.0 GXT 'DBG19' numbers $BUILD_VERSION1 $BUILD_VERSION2 0085: 2@ = 1@ // (int) jump @FPS_COUNTER_60
Вот текст из DBG23:
~1~:~1~
Текст из DBG20:
0~1~:~1~
Текст из DBG21:
0~1~:0~1~
Текст из DBG22:
~1~:0~1~