Перейти к содержимому


Фотография

(sfall) дополнения


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 1246

#861 chieftain

chieftain

    Новичок

  • Пользователи
  • Pip
  • 2 сообщений

Отправлено 08 июля 2017 - 21:55

@Fakeman, @Crafty
Огромный спасиб за подробные разъяснения!
Про перк Mutate! я сходу не подумал. Да, тогда ситуация с перераспределением блокированных баллов предстаёт в другом свете и их действительно нельзя трогать.


#862 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 13 июля 2017 - 04:18

CODE
;Set to 2 to add time when party member used the skill first aid, doctor or repair on critters and add experience at successful using skill.

; Установите значение 2, чтобы добавить время, когда участник группы использовал умение первой помощи, доктору или ремонт у тварей и добавил опыт при успешном использовании навыка.

растолковать можешь, какое еще добавочное время), и что-то там с опытом не все понятно кому добавит ГГ?
И как там на счет всяких собак в парии они тоже применяют умения не свойственные им? помница говорил тебе об этом)

Это сообщение отредактировано Fakeman - 13 июля 2017 | 04:19


#863 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 13 июля 2017 - 20:23

QUOTE (Fakeman)
растолковать можешь, какое еще добавочное время), и что-то там с опытом не все понятно кому добавит ГГ?
Если ГГ лечит Вика первой помощью (неважно удачно или нет), то в игре проходит 30 минут. При UsePartySkills=1 уже Сулик может оказывать помощь Вику, но мгновенно. При 2 лечение сопартийцами требует времени, но при удачном ещё и добавит опыт ГГ. Вообще алгоритм никак не поменялся, просто отключаются проверки что это ГГ.
И наверное ещё 3 нужно добавить для отключения проверки расстояния.

QUOTE (Fakeman)
помница говорил тебе об этом)
Да-да, ty — животинки (Body_Type_Quadruped) исключаются.


#864 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 14 июля 2017 - 02:16

QUOTE
При UsePartySkills=1 уже Сулик может оказывать помощь Вику, но мгновенно. При 2 лечение сопартийцами требует времени

сулик лечит мгновенно, т.е. время не увеличивается на 30 мин?
если да то выпиливай первый вариант нафиг такая фигня нужна)
сделай так 2+3=1


#865 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 14 июля 2017 - 23:20

QUOTE (Fakeman)
сулик лечит мгновенно, т.е. время не увеличивается на 30 мин?
если да то выпиливай первый вариант нафиг такая фигня нужна)
Ну зачем такие крайности, время не добавляется, но и опыта нет.

QUOTE (Fakeman)
сделай так 2+3=1
Та даже 3 не добавить, я вспомнил что были причины для этого — научное взаимодействие с объектами (компьютер).


#866 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 15 июля 2017 - 01:10

QUOTE
Ну зачем такие крайности, время не добавляется, но и опыта нет.

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


#867 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 15 июля 2017 - 02:14

QUOTE (Fakeman)
По механике движка время должно увеличиваться вне зависимости успешно ли полечил или нет.
Но только для ГГ, там как раз есть чёткие проверки:
CODE
cmp  eax, [ds:_obj_dude]
jne  .skip
mov  eax, 1800
call inc_game_time_in_seconds_
.skip:


#868 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 15 июля 2017 - 19:07

QUOTE
Но только для ГГ

т.е. в оригинале если нпс будет лечить вместо ГГ время не увеличивается?


#869 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 15 июля 2017 - 21:02

QUOTE (Fakeman)
т.е. в оригинале если нпс будет лечить вместо ГГ время не увеличивается?
Ага — отключи UsePartySkills=0, Сулику сделай первую помощь главным скиллом и пусть бегает лечит Вика. А ты с помощью "?" время смотри.
И у Ленни же вроде лечение главный стат, можно на нём проверить.


#870 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 24 июля 2017 - 18:08

Crafty, как можно ли как-нибудь добавить игроку бонусные очки для передвижения (желтые поинты которые от перка даются) ?
(по другому, можно ли скрыть перк у гг, чтобы он не отображался в списке)
...
Что-то мне кажется нельзя, ибо смотрю на это дело, и думаю куда же тут можно впихнуть дополнительную прибавку к очкам действия)
CODE

004229F0            mov     edx, PERK_bonus_move    ; Бонус движения
004229F5            call    intface_update_ac_
004229FA            mov     eax, ds:_obj_dude        ; who
004229FF            call    perk_level_              ; Bonus Move|Бонус движения
00422A04            add     eax, eax
00422A06            mov     ds:_combat_free_move, eax
00422A0B            mov     edx, eax
00422A0D            mov     eax, [ebx+pobj.curr_mp]  ; Current Action Points|Тек. очки действия


Кстати на вики баги с этим описаны.
  • В бою при сохранении и загрузке эти ОД восстанавливаются, что даёт возможность неограниченно перемещаться по карте, не тратя «обычные» ОД;
  • В Fallout 1, ход заканчивается после того, как кончились «основные» ОД, независимо от наличия дополнительных.
Пофиксить их не хочешь?

Отправлено: 24 июл 17 18:40
Воу я тут кое чего обнаружил, строка cmp edx, 119
Это типа функция возвращает 0 если номер проверяемого перка больше 118?
если да, то сфалл это как-то фиксит? или надо самим туда число по больше вписать.
я правда не пробовал добавлять 120 перк через перкс.ини, может оно и нельзя.

CODE
; int __usercall perk_level_<eax>(int who<eax>, int perk<edx>)
00496B78 perk_level_ proc near                      ; pick_death_+6Cp ...
00496B78            test    edx, edx
00496B7A            jl      short loc_496B81
00496B7C            cmp     edx, 119
00496B7F            jl      short loc_496B84
00496B81
00496B81 loc_496B81:                                ; perk_level_+2j
00496B81            xor     eax, eax
00496B83            retn


Это сообщение отредактировано Fakeman - 24 июля 2017 | 18:49


#871 Foxx

Foxx

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 120 сообщений

Отправлено 24 июля 2017 - 23:36

QUOTE ("Fakeman")
я правда не пробовал добавлять 120 перк через перкс.ини, может оно и нельзя.
Я уже пытался на Неваде, не добавляется 120 перк через ini


#872 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 25 июля 2017 - 01:20

QUOTE (Fakeman)
Что-то мне кажется нельзя
Нормально нельзя ;-p
А так сделать функцию вроде set_critter_current_ap с +/- значением, которое модифицирует результат возвращаемый perk_level_ (по адресу 0x4229FF).

QUOTE (Fakeman)
  • В бою при сохранении и загрузке эти ОД восстанавливаются, что даёт возможность неограниченно перемещаться по карте, не тратя «обычные» ОД;
  • В Fallout 1, ход заканчивается после того, как кончились «основные» ОД, независимо от наличия дополнительных.
Пофиксить их не хочешь?
Та да, пофиксил ;)

QUOTE (Fakeman)
Это типа функция возвращает 0 если номер проверяемого перка больше 118?
если да, то сфалл это как-то фиксит?
Да, возвращает 0, но не фиксит ибо нечего фиксить. Перков всего 119 (0-118), с чего бы там (и много ещё где) другому значению быть. В perks.ini номер 119 для примера, а по факту он игнорируется.
Скриптовые фейковые перки используют свою таблицу.


#873 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 25 июля 2017 - 03:58

QUOTE
А так сделать функцию вроде set_critter_current_ap с +/- значением, которое модифицирует результат возвращаемый perk_level_ (по адресу 0x4229FF).

То есть я прямо из скрипта туда могу записывать значение
вместо
mov eax, ds:_obj_dude
на
mov eax, level из скрипта
call perk_level_ < а это за NOPить

и оно типа будет думать что есть уже перк? какой я умный))

CODE

write_int(0x4229FB, 0x01); < set level
write_int(0x4229FF, 0x90909090);
write_byte(0x422A03, 0x90);

set_pc_bonus_ap функция готова), потом попробую может не все так гладко как кажется.

Это сообщение отредактировано Fakeman - 25 июля 2017 | 04:30


#874 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 25 июля 2017 - 12:16

QUOTE (Fakeman)
call perk_level_ < а это за NOPить
Можно прямо сюда mov eax, level — write_byte(0x4229FF, 0xB8) и write_int(0x422A00, level). И стоит сначала прочитать и проверить предыдущее содержимое :-p
QUOTE (Fakeman)
set_pc_bonus_ap функция готова), потом попробую может не все так гладко как кажется.
Ага, не советую так изменять зашитый в движок алгоритм работы перка ;) Как минимум ты херишь последнее исправление игнорирования реального значения дополнительных ОД при загрузке в бою (там проверка что перк взят).
Хочешь спрятать перк от появления в списке доступных перков — меняй через perks.ini или скриптово значение Level в сторону запредельного значения (100+), потом скриптово через critter_add_trait добровольно-принудительно давай в нужный момент перк и всё так же через нормально сделанную set_pc_bonus_ap меняй эффект.
К примеру, set_pc_bonus_ap(int value, bool force), где второе значение при FALSE будет добавлять [-]value к значению, которое вернёт perk_level_, а при TRUE будет его игнорировать и использовать только value.


#875 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 25 июля 2017 - 13:59

Так я собираюсь прямо из скрипта писать в двиг. И В скрипте будет будет узнаваться имеет ли гг перк, а потом прибавлять доп бонус сверху.
Если запишу моv вместо call то что-то поломается в твоем исправлении? — да и фиг сним))

Ты исходники собираешься выкладывать? Вот случится с тобой "беда" как с HRP, потомже не исправишь в твоем сфале ничего.

Это сообщение отредактировано Fakeman - 25 июля 2017 | 14:08


#876 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 25 июля 2017 - 15:10

QUOTE (Fakeman)
Так я собираюсь прямо из скрипта писать в двиг.
Убедись сначала что там действительно код движка :-p

QUOTE (Fakeman)
Если запишу моv вместо call то что-то поломается в твоем исправлении? — да и фиг сним))
Пфф, если бы поломалось (к примеру отключишь перк), то ты вернул бы эксплоит с твоим доп бонусом сверху.

QUOTE (Fakeman)
Ты исходники собираешься выкладывать?
Там бардак, приводить в порядок лень (да и не нужно никому).

QUOTE (Fakeman)
Вот случится с тобой "беда" как с HRP
Что за беда там случилась? Полностью рабочий HRP, но без исходников?

QUOTE (Fakeman)
потомже не исправишь в твоем сфале ничего.
Такой план, о мифических толпах мододелов (а в данном случае программистов) я наслышан :-p


#877 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 25 июля 2017 - 16:16

QUOTE
Убедись сначала что там действительно код движка :-p

А что бывает такое что код сдвигается?)

QUOTE
Что за беда там случилась? Полностью рабочий HRP, но без исходников?

Ну да в том-то и беда что нет исходников.

QUOTE
Такой план, о мифических толпах мододелов (а в данном случае программистов) я наслышан :-p

Ты их не видишь? а они есть))))

QUOTE
если бы поломалось (к примеру отключишь перк), то ты вернул бы эксплоит с твоим доп бонусом сверху.

ничего не понял, так что-то будет не так работать? можешь показать код твоего исправления?
и как можно сделать чтобы работал фикс бага и моя правка, без изменения кода сфала?


#878 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 25 июля 2017 - 18:52

QUOTE (Fakeman)
А что бывает такое что код сдвигается?)
CODE
Вот так выглядит оригинал (7 байт):
004229FF E8 74 41 07 00     call perk_level_
00422A04 01 C0              add  eax, eax

Допустим кто-то тоже решил скриптово подправить результат перка и всегда возвращать 5 (убив команду add). При этом он сильно не заморачивался и поменял порядок:
004229FF 90                 nop
00422A00 90                 nop
00422A01 B8 05 00 00 00     mov  eax, 5

Потом подключился ты (ну так получилось что твой скрипт загрузился позже):
004229FF B8 02 00 00 00     mov  eax, 2
00422A04 00 00              add  [eax], al
Это конечно извратный пример и всё может оказаться проще — место куда ты будешь писать уже может использоваться, к примеру, HRP.

QUOTE (Fakeman)
Ну да в том-то и беда что нет исходников.
HRP рабочий, но исходников нет. Ай беда ;)

QUOTE (Fakeman)
ничего не понял, так что-то будет не так работать? можешь показать код твоего исправления?
Вот Новарейн портировал:
CODE
static DWORD combat_free_move = 0x509;

static void __declspec(naked) combat_load_hook() {
   __asm {
       call db_freadInt_;
       test eax, eax;                            // Successful?
       jnz  end;                                 // No
       push PERK_bonus_move;
       pop  edx;
       mov  eax, dword ptr ds:[_obj_dude];
       call perk_level_;
       test eax, eax;                            // Have the perk?
       jz   end;                                 // No
       mov  eax, ds:[_combat_free_move];         // eax = real value
       mov  combat_free_move, eax                // Temporarily save
       xor  eax, eax
end:
       retn
   }
}

static void __declspec(naked) combat_turn_hack() {
   __asm {
       mov  edx, combat_free_move
       cmp  edx, 0x509;                          // Is there a real value?
       je   end;                                 // No
       mov  combat_free_move, 0x509;
       xchg edx, eax;
end:
       mov  ds:[_combat_free_move], eax;
       retn;
   }
}

HookCall(0x420E93, &combat_load_hook);
MakeCall(0x422A06, &combat_turn_hack, false);
0x509 — "случайное" магическое значение (сначало было -1).

QUOTE (Fakeman)
и как можно сделать чтобы работал фикс бага и моя правка, без изменения кода сфала?
Если убьёшь перк (ГГ не сможет его получить) и будешь просто подсовывать нужное тебе значение — это провал.

PS. Говорят последняя версия крашится с "The instruction at 00467504 referenced memory at 00000730" при загрузке или старте новой игры в RP 2.3.3.

Это сообщение отредактировано Crafty - 25 июля 2017 | 19:35


#879 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 25 июля 2017 - 19:56

QUOTE
Допустим кто-то тоже решил скриптово подправить результат перка

Не это исключено, чтобы кто-то, что-то там делал)

QUOTE
Потом подключился ты (ну так получилось что твой скрипт загрузился позже)

Кстати о порядке выполнения скриптов, заметил что сфаловские скрипты выполняются в порядке сортировки по имени скрипта, это очень хорошо, можно контролировать очередность. С хуками не совсем понятно, в каком скрипте будет выполнятся первым обработчик, но написано что в обратном порядке при их регистрации.
А в какой очередности выполняются родные скрипты фола, по названию или по порядковому номеру из script.lsl (у какого скрипта на одной карте будет приоритет выше)?

QUOTE
Вот Новарейн портировал:

О так это че старый фикс, и оно что не работало?
ты что-то меня запутал...я такого кода нигде не нашел в оригинале.

Отправлено: 25 июл 17 20:27
QUOTE
Если убьёшь перк (ГГ не сможет его получить) и будешь просто подсовывать нужное тебе значение — это провал.

CODE
write_byte(0x4229FF, 0xB8);
levelBonusMove := has_trait(TRAIT_PERK, dude_obj, PERK_bonus_move);
write_int(0x422A00, 1 + levelBonusMove);

Не может быть никакого провала)

Это сообщение отредактировано Fakeman - 25 июля 2017 | 21:06


#880 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 25 июля 2017 - 21:11

QUOTE (Fakeman)
Не это исключено, чтобы кто-то, что-то там делал)
Скриптово может и да, но HRP/sfall используешь? Знаешь какие места в памяти изменяются в зависимости от тех или иных значений переменных в инишниках? Лучше проверяй.

QUOTE (Fakeman)
Кстати о порядке выполнения скриптов, заметил что сфаловские скрипты выполняются в порядке сортировки по имени скрипта, это очень хорошо, можно контролировать очередность.
Не особо: я пользователь-пакостник, меняю gl_a/gl_b местами, и всё — легенда изменилась :-p

QUOTE (Fakeman)
А в какой очередности выполняются родные скрипты фола, по названию или по порядковому номеру из script.lsl (у какого скрипта на одной карте будет приоритет выше)?
Ну для, к примеру, map_update_p_proc есть приоритет по типу скрипта — s_system -> s_spatial -> s_time -> s_item -> s_critter. Дальше не изучал ;-p

QUOTE (Fakeman)
О так это че старый фикс, и оно что не работало?
Дак пару часов как портировал.

QUOTE
Если убьёшь перк (ГГ не сможет его получить) и будешь просто подсовывать нужное тебе значение — это провал.
QUOTE (Fakeman)
Crafty, как можно ли как-нибудь добавить игроку бонусные очки для передвижения (желтые поинты которые от перка даются) ?
(по другому, можно ли скрыть перк у гг, чтобы он не отображался в списке)




Похожие темы Свернуть

  Название темы Форум Автор Статистика Последнее сообщение


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных

Рейтинг@Mail.ru