Rainman
Пользователь
Posts: 69
|
|
Изменение traits
« on: 20 January 2011, 21:54:29 » |
|
Приветствую! Для знатоков кодинга у меня созрел еще один каверзный (и важный для моего проекта) вопрос: как можно изменить механику работы трейтов (т.е. "способностей") ? Есть совершенно бесполезная способность "Сексапильность", у которой вообще нет никакой механики, она используется только через скрипты. Мне нужно изменить её так, чтобы при выборе этой способности у игрока снижались бы на 1 все показатели s.p.e.c.i.a.l. Этакий "анти-талант". Положительную сторону трейта я задам через скрипты. На старом форуме откопал вот это Traits: 0x10c184 (Just the location- I haven't looked at them any yet) но описания, понятное дело, нет. Потратив несколько часов на анализ смещений по данному адресу я совершенно однозначно осознал, что ничего там не понимаю... Может, кто-нибудь знает, как мне помочь?
|
|
|
|
Jordan
Пользователь
Posts: 416
|
|
Re: Изменение traits
« Reply #1 on: 20 January 2011, 22:11:11 » |
|
Вы хочите трейты, они у на есть. Через сфал функции можно добавлять, изменять перки и трейты. В моддерс паке есть примеры. modderspack 2.12\example mods\Traits\Data\scripts\
|
|
« Last Edit: 20 January 2011, 22:15:05 by Jordan »
|
|
Воспрянет Россия, из праха отцов Расправятся крылья, миллионов сердец Поднимут все головы и грудью вздохнут И громка скажут, что пришли Мы пришли, со столетней войны
|
|
|
Rainman
Пользователь
Posts: 69
|
|
Re: Изменение traits
« Reply #2 on: 20 January 2011, 22:21:28 » |
|
Замечательно, но: ;This is a modification to trait 0 [t0] NoHardcode=0 Name=Example Desc=This is an example trait Image=72 Здесь только можно отключить эффект трейта, сменить описание (русский шрифт не поддерживается) и картинку поменять. Короче - "ни-о-чем". Есть другие варианты?
|
|
|
|
Jordan
Пользователь
Posts: 416
|
|
Re: Изменение traits
« Reply #3 on: 20 January 2011, 22:21:58 » |
|
Вот пример. Но для перков. GL_Perks.ssl #define SFALL_GVAR_PERK_HERCULES (2127)
#define NAME_PERK_HERCULES ("Name Hercules") #define DESC_PERK_HERCULES ("Desc Hercules")
#define PERK_ON (1) #define PERK_OFF (0)
#define select_perk(Perk, Active, Image) \ set_selectable_perk(message_str(NAME, Perk + 1000), Active, Image, message_str(NAME, Perk + 2000));
procedure start; procedure Add_Selectable_Fake_Perks; procedure Selected_Perk; procedure Apply_Perks_Repeat;
procedure start begin if (game_loaded) then begin set_global_script_repeat(100); end //set_perkbox_title("Choose a trait"); hide_real_perks; //perk_add_mode(1); //show_real_perks; display_msg("" + get_sfall_global_int(SFALL_GVAR_PERK_HERCULES)); call Add_Selectable_Fake_Perks; call Selected_Perk; call Apply_Perks_Repeat; end
procedure Add_Selectable_Fake_Perks begin // if(requierments for the perk to be selectable)then // begin
//set_sfall_global(SFALL_GVAR_PERK_HERCULES, 0); // end // else // begin // set_selectable_perk(NAME_PERK_HERCULES, 0, 3, DESC_PERK_HERCULES); // end IF (get_sfall_global_int(SFALL_GVAR_PERK_HERCULES) == 0) THEN set_selectable_perk(NAME_PERK_HERCULES, PERK_ON, 3, DESC_PERK_HERCULES); else set_selectable_perk(NAME_PERK_HERCULES, PERK_OFF, 3, DESC_PERK_HERCULES); end
procedure Selected_Perk begin if(has_fake_perk(NAME_PERK_HERCULES) AND (get_sfall_global_int(SFALL_GVAR_PERK_HERCULES) < 1)) then //need a var to stop it from being applied over and over begin add_mult_objs_to_inven(dude_obj, create_object_sid(6,0,0,-1), 1); set_sfall_global(SFALL_GVAR_PERK_HERCULES, get_sfall_global_int(SFALL_GVAR_PERK_HERCULES) + 1); display_msg("" + get_sfall_global_int(SFALL_GVAR_PERK_HERCULES)); end end
procedure Apply_Perks_Repeat begin //if (if has perk and needs to be repeated(game load etc)>) then begin // <bonuses> //end end
has_fake_perk замени на has_fake_trait
|
|
« Last Edit: 20 January 2011, 22:26:27 by Jordan »
|
|
Воспрянет Россия, из праха отцов Расправятся крылья, миллионов сердец Поднимут все головы и грудью вздохнут И громка скажут, что пришли Мы пришли, со столетней войны
|
|
|
Rainman
Пользователь
Posts: 69
|
|
Re: Изменение traits
« Reply #4 on: 20 January 2011, 22:41:25 » |
|
функции fake_trait и fake_perk не подходят, так как они именно "фейковые" (т.е. не дают ничего, кроме картинки и описания) и устанавливаются через скрипты, а мне нужна возможность выбрать (или не выбрать) трейт именно при генерации персонажа. Конечно, можно просто сменить описание и картинку трейта "Сексапильность", а при старте игры сделать проверку на наличие трейта и убавить все показатели на 1, но мне нужно, чтоб было как у трейта "Талант" -> выбираешь его - и сразу видишь, что все показатели повысились (только мне наоборот, нужно их понизить).
|
|
|
|
Jordan
Пользователь
Posts: 416
|
|
Re: Изменение traits
« Reply #5 on: 21 January 2011, 20:22:39 » |
|
В документации к сфалу
Global scripts have multiple modes, which can be set using the set_global_script_type function. In the default mode (i.e. mode 0) their execution is linked to the local map game loop, so the script will not run in dialogs or on the world map. In mode 1 their execution is linked to the player input, and so they will run whenever the mouse cursor is visible on screen, including the world map, character dialogs etc. In mode 2, execution is linked to the world map loop, so the script will only be executed on the world map and not on the local map or in any dialog windows. Mode 3 is a combination of modes 0 and 2, so scripts will be executed on both local maps and the world map, but not in dialog windows. Using mode 1 requires the input wrapper to be enabled. Use available_global_script_types to check what is available.
То есть режим 1 скрипт будет работать на карте мира, и когда курсор отображается на экране. Может быть скрипт будет работать и при создании героя.
|
Воспрянет Россия, из праха отцов Расправятся крылья, миллионов сердец Поднимут все головы и грудью вздохнут И громка скажут, что пришли Мы пришли, со столетней войны
|
|
|
Rainman
Пользователь
Posts: 69
|
|
Re: Изменение traits
« Reply #6 on: 21 January 2011, 21:49:18 » |
|
На всякий случай я, конечно, проверил, но, как я и думал, никакие скрипты не работают при генерации персонажа. Все таки sfall не всемогущ, и нужно опять кастовать вызов двиглоковырятелей... Ray?..
|
|
|
|
Ray
Глобальный модератор
Posts: 220
|
|
Re: Изменение traits
« Reply #7 on: 24 January 2011, 22:10:29 » |
|
Сколь я помню - глобальные скрипты работали везде, даже в главном меню. А уж при генерации персонажа должны работать и подавно... Не знаю, что менялось - давно не следил за проектом, всё как-то не до этого...
|
|
|
|
Rainman
Пользователь
Posts: 69
|
|
Re: Изменение traits
« Reply #8 on: 24 January 2011, 23:07:07 » |
|
Только что сделал sfall'у глобальную проверку:
set_global_script_type(1); set_global_script_repeat(1); if get_mouse_buttons == 1 and mouse_1_is_pressed == 0 then begin play_sfx("CENSOR"); mouse_1_is_pressed := 1; end if get_mouse_buttons == 0 and mouse_1_is_pressed == 1 then mouse_1_is_pressed := 0;
Понятно, при каждом нажатии на левую клавишу мыши Fallout говорит "пиии". Реакция начинается только после загрузки карты (например, если щелкнуть клавишей во время ролика старейшины - звука "пиии" нет, glscript не работает). Зато после загрузки карты - пищит повсюду, вплоть до нажатия кнопки "Да" в окошке "Вы точно хотите выйти?"
В любом случае, мне кажется, что sfall не сможет дать такого же эффекта, как при взятии трейта "Талант" (где сразу же повышаются все очки характеристик)... Ray (конечно, если ты не занят), не мог бы ты взглянуть на упомянутое смещение в 1.02d US ?
|
|
|
|
Jordan
Пользователь
Posts: 416
|
|
Re: Изменение traits
« Reply #9 on: 25 January 2011, 12:32:44 » |
|
Попробуй использовать ранние версии сфала. Может в этой версии глюк, поэтому в меню скрипт не работает.
|
Воспрянет Россия, из праха отцов Расправятся крылья, миллионов сердец Поднимут все головы и грудью вздохнут И громка скажут, что пришли Мы пришли, со столетней войны
|
|
|
|