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


Фотография

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


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

#801 Fakeman

Fakeman

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

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

Отправлено 13 мая 2017 - 16:46

Вот я уже и не помню что там конкретно было, еще год назад что-то там мутил, но точно что-то связанное с map_enter_proc в скрипте критера и получением координат игрока при его заходе не по координатам указанным в карте. как узнаю точно что конкретно сообщу.

Сейчас попробовал по тестировать это дело, и как оказывается в движке есть баг. critter_attempt_placement/override_map_start в map_enter_proc для игрока вообще не работают.

имеем такую конструкцию в скрипте карты.
CODE
map_enter_proc begin
     display_msg("map_enter:" + dude_tile);
     critter_attempt_placement(dude_obj, 20100, 0);
     display_msg("map_enter:" + dude_tile);
end

map_update_p_proc begin
   display_msg("map_update:" + dude_tile);
end

в логе у нас появляется такая последовательность:
CODE
"map_enter: 26000" //координаты захода на карту указанные в самой карте (стартовых координатах карты)
"map_enter: 20100" //координаты куда переместился наш игрок
-
"map_update:" 20100"  // ну да так и есть стоит там где надо
"map_update:" 26000"  // и тут БАЦ!!! что-то щелкнуло в движке, и игрока перекидывает обратно в стартовые координаты карты (или на координаты на которые указываю сетки перехода).

critter_attempt_placement в маппере работает корректно только при первом заходе на карту, в самой игре нет.
critter_attempt_placement/override_map_start — работает если их применять только в map_update.
это тесты для DUDE, для криттеров с critter_attempt_placement вроде проблем с этим нет.

а set_map_start — вообще какой-то не рабочий что-ли (тупо не меняет координаты карты еще и в дебаг-логе ошибку выдает) или я не понял как и где его можно правильно применить.

Отправлено: 13 мая 17 18:25
Вот еще тест с использованием добавочного криттера.
CODE
map_enter_proc begin
     display_msg("Critter map_enter:" + dude_tile);
end
map_update_p_proc begin
     display_msg("Critter map_update:" + dude_tile);
end

скрипт карты тот-же только без critter_attempt_placement
Просто заходим на карту из другой карты на координаты 11000, лог такой:
CODE
"MAP map_enter: 26000" //стартовые координаты указанные в самой карте.
"Critter map_enter: 26000"
-
"MAP map_update: 26000"  
"Critter map_update: 26000"
//второй проход update
"MAP map_update: 11000"  //координаты указанные в сетке перехода из другой карты.
"Critter map_update: 11000"

Вот о чем я говорил, не можем получить в map_enter_proc координаты игрока при заходе на карту, также сразу не можем получить и в map_update_proc, а только со второго прохода.
Можно с этим что-то сделать, или это специфика работы такая? — и нафига нужен этот двух проходный map_update может один удалить :P
а еще у криттеров обработчик start тоже всегда два раза под ряд выполняется.

И кстати заметил что стартовые координаты всегда открывают на авто-картах кусочек карты, как будто игрок там уже побывал — видимо по причине того что игрок всегда заходит на стартовые координаты, а потом его перемещает куда нужно.

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


#802 Crafty

Crafty

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

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

Отправлено 14 мая 2017 - 09:50

override_map_start сработает всегда, но эффект виден только при первой загрузке карты. При переходах через сетки выхода используются переменные в которые заносятся данные о точке выхода. Можно воспользоваться set_exit_grids для переопределения этих данных, но эффект будет постоянный. Или же, когда переход осуществляется через сетку выхода, отключать использование переменных с данными точки выхода. Если же нужен переход по координатам при использовании конкретной сетки выхода, то можно сравнивать значения переменных точки выхода:
CODE
read_int(0x631D2C) = elev
read_int(0x631D30) = tile_num, если равно 0 то пропускается установка данных сетки выхода
read_int(0x631D34) = rotation

Вот пример с переопределением координат при первой загрузке и при заходе через храм (если заходить через деревню, то используются координаты сетки), artemple.ssl:
CODE
procedure map_enter_p_proc begin
 display_msg("before:" + tile_num(dude_obj));
 override_map_start(18482 % 200, 18482 / 200, 0, 5);
 display_msg("override:" + tile_num(dude_obj)+", elev="+read_int(0x631D2C)+", tile_num="+read_int(0x631D30)+", rotation="+read_int(0x631D34));
 if read_int(0x631D28) > 0 and read_int(0x631D2C) == 0 and read_int(0x631D30) == 16486 then write_int(0x631D30, 0); // переход через сетку, игнорируем данные
 display_msg("after:" + tile_num(dude_obj));
end

QUOTE (Fakeman)
игрок всегда заходит на стартовые координаты, а потом его перемещает куда нужно.
Всё верно.


#803 Fakeman

Fakeman

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

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

Отправлено 14 мая 2017 - 16:05

А может тогда можно получить координаты игрока в map-enter, через read_int? Адресок не подскажешь?) 0x631D30 или это оно и ест.

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


#804 Crafty

Crafty

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

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

Отправлено 14 мая 2017 - 16:39

QUOTE (Fakeman)
А может тогда можно получить координаты игрока в map-enter, через read_int? Адресок не подскажешь?) 0x631D30 или это оно и ест.
tile_num(dude_obj), не? Если значение по адресу 0x631D30 не равно 0, то гг будет перемещён в это место.


#805 Fakeman

Fakeman

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

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

Отправлено 14 мая 2017 - 18:39

Dude_tile выше в логах видно что возвращает номер тайла указанный в карте, мне нужно координаты на которые будет перемещен гг в мап update.
read_int(0x631D30) — попробовал, это как раз то что нужно.



Это сообщение отредактировано Fakeman - 14 мая 2017 | 19:02


#806 Crafty

Crafty

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

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

Отправлено 14 мая 2017 - 19:07

QUOTE (Fakeman)
Dude_tile выше в логах видно что возвращает номер тайла указанный в карте, мне нужно координаты на которые будет перемещен гг в мап update
Я же специально привёл пример с уже готовыми отладочными строчками — достаточно добавить и проверить (начать новую игру, зайти в храм, потом выйти), чтобы на выходе получить (с настроенным map_update):
QUOTE
before:18492
override:18482, elev=0, tile_num=0, rotation=0
after:18482
update:18482
Вы находитесь в темном, сыром храме. Вам повсюду мерещатся тени, вы слышите слабые звуки — похоже, там кто-то движется.
before:18492
override:18482, elev=0, tile_num=16486, rotation=0
after:18482
update:18482
update:18482


#807 Fakeman

Fakeman

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

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

Отправлено 22 мая 2017 - 02:15

Ну что там у тебя... придумал для игры чего-нибудь нового и полезного?)

CODE
! Исправлен неправильный подсчёт количества вещей в движковой функции item_count_.
! Исправлен перк "Размах", а функция apply_heaveho_fix ничего не делает (пустышка).

а чего делал этот apply_heaveho_fix
и как ты исправил перк? :)

Чего там за баг такой был при подсчете в item_count_ ?
вроде как проблем с подсчетом не замечал, фильтр нормально работал и без фикса, единственное с сумками проблема.

CODE
* Теперь функция sfall_ver_build всегда возвращает "sfall2".

Ну вот видишь можешь, а говорил про какой-то несовместимый int

Это сообщение отредактировано Fakeman - 22 мая 2017 | 02:20


#808 Crafty

Crafty

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

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

Отправлено 22 мая 2017 - 17:58

QUOTE (Fakeman)
Ну что там у тебя... придумал для игры чего-нибудь нового и полезного?)
Мелкими улучшениями занимаюсь :-p

QUOTE (Fakeman)
и как ты исправил перк? :)
Описание для F1 звучит так:
QUOTE
{236}{}{За каждый уровень этой cпособности вы получаете +2 к cиле при применении метательного оружия, но только для определения расстояния.}
А для F2 более развёрнуто:
QUOTE
{1136}{}{Каждый уровень способности дает вам +2 к Силе (до 10) для повышения дальности броска. Она не позволяет превышать максимальную дальнобойность оружия.}

В данных перка есть защита от его взятия если сила превышает 8, однако с помощью эксплоита химии/радиации можно (при 10 силы) понизить до 4 и взять 3 уровня перка, получив при этом 16 силы (после окончания действия химии) для расчёта дальности. Сама же дальность считается как 3 гекса за 1 очко силы. Поэтому можно сделать дальность броска равной 48 гексам и это при том, что дальность у снайперской винтовки равна 50, а у другого оружия так и меньше. Что за нафик олимпийский метатель? Всё равно обычная дальность метательного оружия не превышает 15 гексов (максимум у святой гранаты = 20).
Теперь есть проверка и урезание силы до 10, а значит и максимальная дальность 30 гексов (но оружия такого всяко нет).

QUOTE (Fakeman)
а чего делал этот apply_heaveho_fix
Масло маслянное — убирал защиту от значения силы для взятия перка и менял формулу расчёта дальности с "дальность = (сила + (уровень_перка * 2)) * 3" на "дальность = ((сила * 3) + (уровень_перка * 6))".

QUOTE (Fakeman)
Чего там за баг такой был при подсчете в item_count_ ?
вроде как проблем с подсчетом не замечал, фильтр нормально работал и без фикса, единственное с сумками проблема.
Функция используется в destroy_object, rm_mult_objs_from_inven, destroy_mult_objs и при торговле. Вот с сумками это и проявлялось — неправильный переход в функции приводил к продолжению "подсчёта" несуществующих вещей ещё и в сумке, а потом сбрасывал количество ранее найденных вещей в 0, что в конечном итоге приводило к проблемам:
QUOTE
Per's guide said:
    The Bag is responsible for an inventory bug which sometimes lets you keep items that are really supposed to disappear from your inventory, depending on which script command is being used to remove them. Items are "protected" if they're below the Bag in your inventory, apparently because the engine can't handle the container item type properly.
С скриптовыми командами хлопотно заморачиваться, есть более простой способ для проверки бага — сумка и вещь, открыть с кем-то торговлю и перетащить на стол обмена сначала сумку, а потом вещь и нажать Esc (отмену торговли). Снова открыть торговлю — вещь и сумка вернулись в наш инвентарь. Теперь перетащить сначала вещь, а потом сумку и нажать Esc. Открыть торговлю — добро тю-тю.

QUOTE (Fakeman)
Ну вот видишь можешь, а говорил про какой-то несовместимый int
Да там полная анархия :(


#809 Fakeman

Fakeman

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

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

Отправлено 23 мая 2017 - 00:16

CODE
с
дальность = (сила + (уровень_перка * 2)) * 3
на
дальность = ((сила * 3) + (уровень_перка * 6))

не понял, тут у формул результат "дальность" один и тот же.
это две одинаковые формулы только написаны по разному.
в чем тут прикол?)

Это сообщение отредактировано Fakeman - 23 мая 2017 | 00:18


#810 Crafty

Crafty

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

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

Отправлено 23 мая 2017 - 00:55

QUOTE (Fakeman)
это две одинаковые формулы только написаны по разному.
в чем тут прикол?)
Вот в том и прикол — масло ;) Не считая конечно снятия ограничения на силу для получения перка. Что всё равно лишено смысла из-за отсутствия подходящего метательного оружия и абсурдности с дальностью в 48 гексов при максимуме.
Описание:
QUOTE
Edit2: In any case, I'll work the way through the rest of the useless perks in per's list, and see if any of the others can be easily altered. I'll alter heave ho to give bonuses above the normal cap on throwing range, at least.
.....
Heave ho will now increase thrown weapon range beyond their usual maximums


#811 Crafty

Crafty

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

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

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

QUOTE (Foxx)
не работает скорость DialogPanelAnimDelay — это касается только Невады.

QUOTE
not important — ERROR: At address 0x446846 expecting 0x0F30FE83, got 0x0F31FE83
DialogueFix.
QUOTE
not important — ERROR: At address 0x4BF3BA expecting 0xB8147431, got 0xB814EB31
Так называемый CityLimit patch.
QUOTE
not important — ERROR: At address 0x447EB5 expecting 0x000021BB, got 0x000012BB
DialogPanelAnimDelay.

Это "другой способ проверки целостности данных". Если экзешник (даже не сам экзешник, а код/данные в памяти) подправлен в нужном нам месте, то "патч" не накатывается, чтобы не возникли проблемы.
Не опасно если это "not important" — ну только что-то перестанет, как DialogPanelAnimDelay, работать, да и в faq придётся это отметить ;-p

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

Это сообщение отредактировано Crafty - 13 июня 2017 | 10:24


#812 Fakeman

Fakeman

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

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

Отправлено 09 июня 2017 - 22:26

Жаль, что я сейчас пока занят другим, а не скриптингом, а то бы занял бы тебя чем-нибудь более полезным, чем вот эта проверка данных на целку) Ничего скоро допишу программу и вернуть к скриптам, ты главное в режим Frozzzen не впадай)

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


#813 Crafty

Crafty

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

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

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

QUOTE (Foxx)
Цитирую полностью пользователя с ошибкой в Nevade:
QUOTE (milkinway)
Довольно неприятная ситуация, может быть БАГ, связанный с инвентарем. Ситуация следующая — нахожусь в Лас-Вегасе, побывал в нарколаборатории в Питомники, разобрался с местным "населением", когда собирал вещички, кое-что уложилось в инветаре странным образом. Так например вместо одних пустых шприцов в инвентаре появились сразу три независимых друг от друга набора пустых шприцов, то же самое — с цветками брока (4 и 3 в каждом "наборе").
Поправил (наверное) это (и только это). Проверить толком не могу — сейвы не исправить (вообще можно — так не_толком проверял), а начинать новую игру и искать карту (двигаясь по сюжету) где появляется, к примеру, корень брока в столе/ящике/etc нет времени.


#814 Fakeman

Fakeman

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

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

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

Скажи мне пожалуйста, мне необходимо в движке найти все возможные варианты опций к параметрам из конфигурационного файла AI.txt
на примере
hurt_too_much = string
ее варианты опций
crippled
blind
crippled_arms
Может еще чего там есть.
Еще несколько параметров есть которые хотелось бы проверить, а может там какие новые найду, которые отсутствуют в самом файле.

Еще хотелось бы про шерстить код двига на параметры из файла worldmap.txt, может тоже чего нового найдется, там меня интересуют условия
CODE
If:<something> -- conditionals, allows <,>,<=,>=,==,& as well as tests
;    on Player(<stat/attribute/skill/etc.>), Enctr(Num_Critters),
;    Time, Global(<variable index>), Rand(Chance%)

в частности интересует Player(<stat/attribute/skill/etc.>)
действительно ли можно задавать условия ну например на скиллы, или это так -написали без реализации... как-то сомнения есть что реализовали, потому как кроме проверка игрока на уровень там ничего больше и не проверяется.

Вообще это видно будет не вооруженным глазом в коде движка? — или там без спец оборудования не обойтись)

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


#815 Crafty

Crafty

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

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

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

QUOTE (Fakeman)
на примере
hurt_too_much = string
Открываешь в Иде окно строк (Shift-F12), потом фильтруешь (Ctrl-F) по hurt_too_much, переходишь по адресу и через ссылки (X) попадаешь в кусок кода где это используется. Обращаешь внимание на функцию parse_hurt_str_, заходишь в неё и видишь _matchHurtStrs с вариантами.

QUOTE (Fakeman)
действительно ли можно задавать условия ну например на скиллы, или это так -написали без реализации... как-то сомнения есть что реализовали, потому как кроме проверка игрока на уровень там ничего больше и не проверяется.
Видимо хотели, но не доделали — wmParseSubConditional_ обрабатывает rand, global, player(level), days_played, time_of_day и enctr(num_critters).


#816 Fakeman

Fakeman

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

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

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

ага спасибо нашел не достающие опции.
там как еще оказывается таких "<=",">=" операторов сравнения нет.
но и есть другие, типа "_" не знаешь, что это за такой новый знак для сравнения?)
"|" такую палку знаю, а нижнюю палку что-то никогда не видел в использовании.


#817 Crafty

Crafty

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

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

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

QUOTE (Fakeman)
там как еще оказывается таких "<=",">=" операторов сравнения нет.
но и есть другие, типа "_" не знаешь, что это за такой новый знак для сравнения?)
Посмотрел где в дальнейшем (конкретнее wmEvalSubConditional_) это проверяется — "_" не используется, также как " ", "and" и "or".


#818 Fakeman

Fakeman

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

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

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

как это AND не используется, вот
CODE
If(Global(386) > 0) And If(Global(386) < 6)


Вот OR там ни где нет, это точно что он не реализован?


#819 Crafty

Crafty

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

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

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

QUOTE (Fakeman)
как это AND не используется
Не, речь о другом.

QUOTE
там как еще оказывается таких "<=",">=" операторов сравнения нет.
но и есть другие, типа "_"
Если смотреть на список условий _wmConditionalOpStrs, то к нему можно случайно добавить ещё 3 условия из _wmConditionalQualifierStrs (поскольку на него нет ссылок) и предположить, что если бы варианты Player(<stat/attribute/skill/etc.>) были полностью реализованы, то вполне возможно в условии можно было бы делать проверку конкретного флага (или наверное атрибута).

С rand, global, player(level), days_played, time_of_day и enctr(num_critters) можно использовать только "==", "!=", "<" и ">".

QUOTE
Вот OR там ни где нет, это точно что он не реализован?
Так-то AND и OR конечно используются:
CODE
If(Player(Level) == 5) Or (Player(Level) == 7)


#820 Crafty

Crafty

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

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

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

QUOTE (Pyran)
До этого был sfall 1.7.31r3 и пара глюков
КАТЕГОРИЧЕСКИ не советую пользоваться версией 1.7.31r3 (и меньше) ;)




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

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


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

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

Рейтинг@Mail.ru