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
|
// sfall_funcX macros
|
||||||
#define add_extra_msg_file(name) sfall_func1("add_extra_msg_file", name)
|
#define add_extra_msg_file(name) sfall_func1("add_extra_msg_file", name)
|
||||||
#define add_iface_tag sfall_func0("add_iface_tag")
|
#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 art_cache_clear sfall_func0("art_cache_clear")
|
||||||
#define attack_is_aimed sfall_func0("attack_is_aimed")
|
#define attack_is_aimed sfall_func0("attack_is_aimed")
|
||||||
#define car_gas_amount sfall_func0("car_gas_amount")
|
#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
|
- 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)
|
- 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 -------
|
------ MORE INFO -------
|
||||||
------------------------
|
------------------------
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ static MetaruleTableType metaruleTable;
|
|||||||
static const SfallMetarule metarules[] = {
|
static const SfallMetarule metarules[] = {
|
||||||
{"add_extra_msg_file", sf_add_extra_msg_file, 1, 2, {ARG_STRING, ARG_INT}},
|
{"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_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},
|
{"art_cache_clear", sf_art_cache_flush, 0, 0},
|
||||||
{"attack_is_aimed", sf_attack_is_aimed, 0, 0},
|
{"attack_is_aimed", sf_attack_is_aimed, 0, 0},
|
||||||
{"car_gas_amount", sf_car_gas_amount, 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);
|
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;
|
static bool protoMaxLimitPatch = false;
|
||||||
|
|
||||||
void sf_get_proto_data(OpcodeContext& ctx) {
|
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 __declspec() op_set_perk_level_mod();
|
||||||
|
|
||||||
|
void sf_add_trait(OpcodeContext&);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -158,7 +158,6 @@ static void InitModules() {
|
|||||||
|
|
||||||
// initialize all modules
|
// initialize all modules
|
||||||
manager.add<BugFixes>(); // fixes should be applied at the beginning
|
manager.add<BugFixes>(); // fixes should be applied at the beginning
|
||||||
manager.add<SpeedPatch>();
|
|
||||||
manager.add<Graphics>();
|
manager.add<Graphics>();
|
||||||
manager.add<Input>();
|
manager.add<Input>();
|
||||||
manager.add<LoadOrder>();
|
manager.add<LoadOrder>();
|
||||||
@@ -168,15 +167,16 @@ static void InitModules() {
|
|||||||
manager.add<MainMenu>();
|
manager.add<MainMenu>();
|
||||||
manager.add<Interface>();
|
manager.add<Interface>();
|
||||||
manager.add<Objects>();
|
manager.add<Objects>();
|
||||||
|
manager.add<SpeedPatch>();
|
||||||
manager.add<PlayerModel>();
|
manager.add<PlayerModel>();
|
||||||
manager.add<Worldmap>();
|
manager.add<Worldmap>();
|
||||||
manager.add<Stats>();
|
manager.add<Stats>();
|
||||||
manager.add<CritterStats>();
|
manager.add<CritterStats>();
|
||||||
manager.add<Criticals>();
|
|
||||||
manager.add<Perks>();
|
manager.add<Perks>();
|
||||||
manager.add<Combat>();
|
manager.add<Combat>();
|
||||||
manager.add<Skills>();
|
manager.add<Skills>();
|
||||||
manager.add<FileSystem>();
|
manager.add<FileSystem>();
|
||||||
|
manager.add<Criticals>();
|
||||||
manager.add<Karma>();
|
manager.add<Karma>();
|
||||||
manager.add<Tiles>();
|
manager.add<Tiles>();
|
||||||
manager.add<Credits>();
|
manager.add<Credits>();
|
||||||
|
|||||||
Reference in New Issue
Block a user