mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Added "add_trait" script function
This commit is contained in:
@@ -250,6 +250,7 @@
|
||||
// sfall_funcX macros
|
||||
#define add_extra_msg_file(name) sfall_func1("add_extra_msg_file", name)
|
||||
#define add_iface_tag sfall_func0("add_iface_tag")
|
||||
#define add_trait(traitId) sfall_func1("add_trait", traitId)
|
||||
#define art_cache_clear sfall_func0("art_cache_clear")
|
||||
#define attack_is_aimed sfall_func0("attack_is_aimed")
|
||||
#define car_gas_amount sfall_func0("car_gas_amount")
|
||||
|
||||
@@ -627,6 +627,9 @@ optional argument:
|
||||
- can take off player's equipped item when the inventory is opened, or the player is in the barter screen
|
||||
- slot: 0 - armor slot, 1 - right slot, 2 - left slot (see INVEN_TYPE_* in define.h)
|
||||
|
||||
> void sfall_func1("add_trait", int traitId)
|
||||
- adds the specified trait to the player
|
||||
|
||||
------------------------
|
||||
------ MORE INFO -------
|
||||
------------------------
|
||||
|
||||
@@ -61,6 +61,7 @@ static MetaruleTableType metaruleTable;
|
||||
static const SfallMetarule metarules[] = {
|
||||
{"add_extra_msg_file", sf_add_extra_msg_file, 1, 2, {ARG_STRING, ARG_INT}},
|
||||
{"add_iface_tag", sf_add_iface_tag, 0, 0},
|
||||
{"add_trait", sf_add_trait, 1, 1, {ARG_INT}},
|
||||
{"art_cache_clear", sf_art_cache_flush, 0, 0},
|
||||
{"attack_is_aimed", sf_attack_is_aimed, 0, 0},
|
||||
{"car_gas_amount", sf_car_gas_amount, 0, 0},
|
||||
|
||||
@@ -435,7 +435,7 @@ void sf_get_loot_object(OpcodeContext& ctx) {
|
||||
ctx.setReturn((GetLoopFlags() & INTFACELOOT) ? LoadGameHook::LootTarget : 0);
|
||||
}
|
||||
|
||||
static const char* failedLoad = "%s() - failed to load a prototype id: %d";
|
||||
static const char* failedLoad = "%s() - failed to load a prototype ID: %d";
|
||||
static bool protoMaxLimitPatch = false;
|
||||
|
||||
void sf_get_proto_data(OpcodeContext& ctx) {
|
||||
|
||||
@@ -405,5 +405,24 @@ end:
|
||||
}
|
||||
}
|
||||
|
||||
void sf_add_trait(OpcodeContext& ctx) {
|
||||
if (fo::var::obj_dude->protoId != fo::PID_Player) {
|
||||
ctx.printOpcodeError("%s() - traits can be added only to the player.", ctx.getMetaruleName());
|
||||
return;
|
||||
}
|
||||
long traitId = ctx.arg(0).rawValue();
|
||||
if (traitId >= fo::TRAIT_fast_metabolism && traitId <= fo::TRAIT_gifted) {
|
||||
if (fo::var::pc_trait[0] == -1) {
|
||||
fo::var::pc_trait[0] = traitId;
|
||||
} else if (fo::var::pc_trait[0] != traitId && fo::var::pc_trait[1] == -1) {
|
||||
fo::var::pc_trait[1] = traitId;
|
||||
} else {
|
||||
ctx.printOpcodeError("%s() - cannot add the trait ID: %d", ctx.getMetaruleName(), traitId);
|
||||
}
|
||||
} else {
|
||||
ctx.printOpcodeError("%s() - invalid trait ID.", ctx.getMetaruleName());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,5 +77,7 @@ void __declspec() op_set_swiftlearner_mod();
|
||||
|
||||
void __declspec() op_set_perk_level_mod();
|
||||
|
||||
void sf_add_trait(OpcodeContext&);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -158,7 +158,6 @@ static void InitModules() {
|
||||
|
||||
// initialize all modules
|
||||
manager.add<BugFixes>(); // fixes should be applied at the beginning
|
||||
manager.add<SpeedPatch>();
|
||||
manager.add<Graphics>();
|
||||
manager.add<Input>();
|
||||
manager.add<LoadOrder>();
|
||||
@@ -168,15 +167,16 @@ static void InitModules() {
|
||||
manager.add<MainMenu>();
|
||||
manager.add<Interface>();
|
||||
manager.add<Objects>();
|
||||
manager.add<SpeedPatch>();
|
||||
manager.add<PlayerModel>();
|
||||
manager.add<Worldmap>();
|
||||
manager.add<Stats>();
|
||||
manager.add<CritterStats>();
|
||||
manager.add<Criticals>();
|
||||
manager.add<Perks>();
|
||||
manager.add<Combat>();
|
||||
manager.add<Skills>();
|
||||
manager.add<FileSystem>();
|
||||
manager.add<Criticals>();
|
||||
manager.add<Karma>();
|
||||
manager.add<Tiles>();
|
||||
manager.add<Credits>();
|
||||
|
||||
Reference in New Issue
Block a user