Перейти к контенту

X-Ray extensions


Malandrinus

Рекомендуемые сообщения

_Призрак_, я имел ввиду то, что эти команды были вырезаны, или он их с нуля зарегистрировал, а потом начал туда передавать аргументы?

Поделиться этим сообщением


Ссылка на сообщение

_Призрак_,

не знаешь, где можно прочитать про методы иды? Ну эти:

mov, call, push, jmp.

 

DiXares, у разрабов

Изменено пользователем SkyLoader

Поделиться этим сообщением


Ссылка на сообщение

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

Поделиться этим сообщением


Ссылка на сообщение
amik, хм... я сейчас посмотрел функцию, там есть вызов смены шейдера. Но я вспомнил, что модель меняется.

Поделиться этим сообщением


Ссылка на сообщение

Кто-нибудь разбирал функцию bind_to_dik? Что в итоге она делает? Я только понял, что вроде туда надо передавать action_id.

-----------------------

malandrinus, а, спасибо, ясно.

Изменено пользователем SkyLoader

Поделиться этим сообщением


Ссылка на сообщение

У кого-нибудь работает db.actor:actor_body_state()? У меня все время возвращает число 40 с чем-то тысяч.

Поделиться этим сообщением


Ссылка на сообщение

malandrinus,

да, что-то не подумал посмотреть смещение, спасибо :)

Еще два вопроса:

1) Могут ли изменены параметры худа оружия, а именно position? Я пробовал перебором проверить, но что-то много похожих параметров нашел, буду еще искать.

2) Мне сказали, что в r16 можно управлять видимость костей любых моделей (не обязательно оружия), но могу ошибаться. Как эта функция называется? Я смотрел строение ф-ции set_wpn_bone_visible(), но там ты поставил проверку CScriptGameObject__IsWeapon, значит это не та ф-ция.

 

Darkscape,

Как уже сказал malandrinus, надо пользоваться ф-цией get_actor_int.

Поделиться этим сообщением


Ссылка на сообщение

Кстати, не представляю, как можно получить состояние тела актора с помощью ф-ции get_actor_int. Ведь неизвестно, какое число он передает при разных состояниях тела. Можно как-нибудь математически узнать, какое число нужно поставить в get_actor_int для получения состояния тела?

Поделиться этим сообщением


Ссылка на сообщение

_Призрак_,

Наверное ошибаюсь, но думаю, что для стринговых изменений созданы ф-ции get/set_wpn_shared_str и get/set_actor_shared_str.

Хотя, посмотрев, строение ф-ции теперь думаю, это вряд ли нужные ф-ции.

Поделиться этим сообщением


Ссылка на сообщение

malandrinus,

Хм... решил потестить ф-цию alife():teleport_object("", pos, lvx, gvx, parent_id). И не совсем понял, как ее использовать. Судя по строению функция принимает секцию (section_ = dword ptr 0Ch), зачем? Как можно определить по секции объект?

Второе, в вызове ф-ции из оригинала у тебя передается (unsigned __int16 id). Может ты перепутал section_ и id?

Поделиться этим сообщением


Ссылка на сообщение

malandrinus, непися телепортирует, спасибо.

 

А вот с db.actor:get_actor_shared_str(n) проблема: перебором пробовал получить хоть какое-то значение актора, но в итоге всегда получалось nil.

Изменено пользователем SkyLoader

Поделиться этим сообщением


Ссылка на сообщение
Andrey07071977, в r18 есть правка активации 8 слота, только не понятно, зачем она нужна.

Поделиться этим сообщением


Ссылка на сообщение

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

И все-таки неплохо было бы сделать управление видимостью костей не только для оружия.

Поделиться этим сообщением


Ссылка на сообщение
*Shoker*, манипуляции. Ну, например, сделать по формуле скриптовую раскачку оружия.

Поделиться этим сообщением


Ссылка на сообщение

Если кому надо, написал тут несколько функций новых:

1. Исправленная и переписанная ф-ция получения состояния актора:

В

game_object_fix.asm заменить ф-цию CScriptGameObject__ActorBodyState на эту:

CScriptGameObject__ActorBodyState proc
    push    ebp
    mov     ebp, esp
    and     esp, 0FFFFFFF8h
    push    ecx
    
    call    CScriptGameObject__IsActor
    test    eax, eax
    jz      short exit_fail
;---------------
    mov     eax, [eax+1428]
    jmp     exit_ok
exit_fail:
    xor     eax, eax
exit_ok:
    pop    ecx
    mov     esp, ebp
    pop     ebp
    retn
CScriptGameObject__ActorBodyState endp

 

 

 

2. "get_cam_effector", "get_pp_effector" - получить активность камеры/постпроцесса по айди:

1)В конце файла xrgame_stubs.asm дописать:

org 10458864h - shift
CCameraManager__GetCamEffector dword ?
org 10458478h - shift
CCameraManager__GetPpEffector dword ?
org 10190CF7h - shift
register__ns__int__int:

 

2) В level_ns_fix.asm после строк:

    call    get_snd_volume_register; регистрируем функцию с прототипом как у   get_snd_volume
;--------------------------------------

дописать:

;------------< регистрируем функцию получения активности эффекта камеры по айди >------
    pop     ecx
    pop     ecx
    mov     eax, esp
    push    offset GetCamEffector
    push    offset aGet_cam_effector; "get_cam_effector"
    push    eax
    call    register__ns__int__int
;--------------------------------------

;------------< регистрируем функцию получения активности pp эффекта по айди >------
    pop     ecx
    pop     ecx
    mov     eax, esp
    push    offset GetPpEffector
    push    offset aGet_pp_effector; "get_pp_effector"
    push    eax
    call    register__ns__int__int
;--------------------------------------

 

 

3) После строк:

; для get_target_dist
    mov     ecx, eax
    call    esi

 

дописать:

 

; для get_cam_effector
    mov     ecx, eax
    call    esi
; для get_pp_effector
    mov     ecx, eax
    call    esi

4) В конце файла дописать:

GetCamEffector proc
id         = dword ptr  4

    mov     edx, [esp+id]
    and     edx, 0FFFFh
    mov     ecx, g_Actor
    mov     ecx, [ecx+554h]
    push    edx
    call    ds:CCameraManager__GetCamEffector
    test    eax, eax
    jnz    short exit
    xor    al, al
    retn
exit:
    mov    al, 1
    retn
GetCamEffector endp

GetPpEffector proc
id         = dword ptr  4

    mov     ecx, g_Actor
    mov     edx, [esp+id]
    mov     ecx, [ecx+554h]
    push    edx
    call    ds:CCameraManager__GetPpEffector
    test    eax, eax
    jnz    short exit
    xor    al, al
    retn
exit:
    mov    al, 1
    retn
GetPpEffector endp

aGet_cam_effector  db "get_cam_effector", 0
aGet_pp_effector  db "get_pp_effector", 0

 

 

 

Есть еще функции получения/назначения видимости объекта, но назначение требует теста. Также вскоре допишу фунцию, чтобы в окне продажи предметы в слотах зеленым выделялись.

Может и Маландринус добавит ф-ции в себе, если захочет.

Поделиться этим сообщением


Ссылка на сообщение

Andrey07071977,

Какие параметры принимает actor_body_state?

И эта функция никакие аргументы не принимает. И, кстати, данная функция работает только на версии r18 и ниже. Для r20 нужно CScriptGameObject__IsActor заменить на CScriptGameObject__CActor.

 

Число которое возвращают эти функции (отличное от нуля) что-то означает

По идее, возвращать они должны 0 или 1. 1 - это как-бы true (эффект проигрывается по данному айди), 0 - false. Просто у меня не получилось сделать возвращение boolean значения.

Поделиться этим сообщением


Ссылка на сообщение
Andrey07071977, у меня все работает. Подобная ошибка встречается при нехватке памяти.

Поделиться этим сообщением


Ссылка на сообщение

Andrey07071977, если бы я не проверял, я бы не написал, что вызов надо заменить для версии r20. Перед написанием поста еще раз проверил.

Хм... Есть предположение, что я в посте написал русскую C в Cactor. Попробуй переписать.

 

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

...

Не заметил, что уже написали про хелп.

Изменено пользователем SkyLoader

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...