mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Fixed inconsistent return value of get_npc_level.
Some edits to documents.
This commit is contained in:
@@ -103,6 +103,7 @@
|
||||
#define RMOBJ_RM_MULT_OBJS 4563866
|
||||
#define RMOBJ_REPLACE_WEAPON 4658526
|
||||
#define RMOBJ_THROW 4266040
|
||||
#define RMOBJ_SUB_CONTAINER 4683191 // search and remove the item from a container inside of an inventory
|
||||
|
||||
// offsets for get_proto_data
|
||||
#define PROTO_PID (1)
|
||||
@@ -274,7 +275,7 @@
|
||||
#define OBJ_DATA_FID (0x20)
|
||||
#define OBJ_DATA_ELEVATION (0x28)
|
||||
#define OBJ_DATA_PID (0x64)
|
||||
#define OBJ_DATA_CID (0x68)
|
||||
#define OBJ_DATA_CID (0x68) // combat id, used for savegame
|
||||
#define OBJ_DATA_SID (0x78)
|
||||
// items
|
||||
#define OBJ_DATA_CUR_CHARGES (0x3C)
|
||||
|
||||
@@ -242,12 +242,12 @@ int ret1 - overrides hard-coded handler and selects what should happen with
|
||||
|
||||
HOOK_REMOVEINVENOBJ (hs_removeinvenobj.int)
|
||||
|
||||
Runs when an object is removed from a critters inventory for any reason
|
||||
Runs when an object is removed from a container or critter's inventory for any reason
|
||||
|
||||
critter arg1 - the critter the object is being removed from
|
||||
Obj arg1 - the owner that the object is being removed from
|
||||
item arg2 - the item that is being removed
|
||||
int arg3 - a flag, or possibly the number of items to remove
|
||||
int arg4 - The reason the object is being removed. (Actually, the site from which _item_remove_mult was called)
|
||||
int arg3 - the number of items to remove
|
||||
int arg4 - The reason the object is being removed (see RMOBJ_* constants)
|
||||
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
@@ -100,11 +100,12 @@ array - array ID to be used with array-related functions (actually an integer)
|
||||
> int game_loaded()
|
||||
- returns 1 the first time it is called after a new game or game load, and 0 any time after. It works on an individual basis for each script, so one script wont interfere with others. Its primary use is for global scripts, so that they know when to call set_global_script_repeat, but it can be called from normal scripts too.
|
||||
|
||||
> void inc_npc_level(string npc)
|
||||
- takes an NPC name as an argument. The NPC must be in your party. This function ignores player level requirements and the minimum 3 player level delay between NPC level gains. It also ignores the random element, regardless of sfall's NPCAutoLevel setting.
|
||||
> void inc_npc_level(int pid/string name)
|
||||
- takes a party member PID or an NPC name (deprecated, for compatibility with sfall 4.1.5/3.8.15 or earlier) as an argument. The NPC must be in your party.
|
||||
- This function ignores player level requirements and the minimum 3 player level delay between NPC level gains. It also ignores the random element, regardless of sfall's NPCAutoLevel setting.
|
||||
|
||||
> int get_npc_level(string npc)
|
||||
- also takes the NPC name as an argument, and returns the NPC's current level. Again, the NPC needs to be in your party.
|
||||
> int get_npc_level(int pid/string name)
|
||||
- also takes the party member PID or NPC name (deprecated, for compatibility with sfall 4.1.5/3.8.15 or earlier) as an argument, and returns the NPC's current level. Again, the NPC needs to be in your party.
|
||||
|
||||
> void set_car_current_town(int town)
|
||||
- changes the current town index for the player's car
|
||||
|
||||
@@ -162,8 +162,8 @@
|
||||
0x81a3 - int eax_available()
|
||||
0x81a4 - void set_eax_environment(int environment)
|
||||
|
||||
0x81a5 - void inc_npc_level(string npcName/int pid)
|
||||
0x8241 - int get_npc_level(string npcName/int pid)
|
||||
0x81a5 - void inc_npc_level(int pid/string name)
|
||||
0x8241 - int get_npc_level(int pid/string name)
|
||||
|
||||
0x81a6 - int get_viewport_x()
|
||||
0x81a7 - int get_viewport_y()
|
||||
|
||||
@@ -143,10 +143,10 @@ DWORD* ptr_optionsButtonUpKey = reinterpret_cast<DWORD*>(_optionsButtonU
|
||||
DWORD* ptr_outlined_object = reinterpret_cast<DWORD*>(_outlined_object);
|
||||
DWORD* ptr_partyMemberAIOptions = reinterpret_cast<DWORD*>(_partyMemberAIOptions);
|
||||
DWORD* ptr_partyMemberCount = reinterpret_cast<DWORD*>(_partyMemberCount);
|
||||
DWORD* ptr_partyMemberLevelUpInfoList = reinterpret_cast<DWORD*>(_partyMemberLevelUpInfoList);
|
||||
DWORD* ptr_partyMemberList = reinterpret_cast<DWORD*>(_partyMemberList); // each struct - 4 integers, first integer - objPtr
|
||||
DWORD** ptr_partyMemberLevelUpInfoList = reinterpret_cast<DWORD**>(_partyMemberLevelUpInfoList);
|
||||
DWORD** ptr_partyMemberList = reinterpret_cast<DWORD**>(_partyMemberList); // each struct - 4 integers, first integer - objPtr
|
||||
DWORD* ptr_partyMemberMaxCount = reinterpret_cast<DWORD*>(_partyMemberMaxCount);
|
||||
DWORD* ptr_partyMemberPidList = reinterpret_cast<DWORD*>(_partyMemberPidList);
|
||||
DWORD** ptr_partyMemberPidList = reinterpret_cast<DWORD**>(_partyMemberPidList);
|
||||
DWORD* ptr_patches = reinterpret_cast<DWORD*>(_patches);
|
||||
DWORD* ptr_paths = reinterpret_cast<DWORD*>(_paths);
|
||||
DWORD* ptr_pc_crit_succ_eff = reinterpret_cast<DWORD*>(_pc_crit_succ_eff);
|
||||
|
||||
@@ -367,10 +367,10 @@ extern DWORD* ptr_optionsButtonUpKey;
|
||||
extern DWORD* ptr_outlined_object;
|
||||
extern DWORD* ptr_partyMemberAIOptions;
|
||||
extern DWORD* ptr_partyMemberCount;
|
||||
extern DWORD* ptr_partyMemberLevelUpInfoList;
|
||||
extern DWORD* ptr_partyMemberList; // each struct - 4 integers, first integer - objPtr
|
||||
extern DWORD** ptr_partyMemberLevelUpInfoList;
|
||||
extern DWORD** ptr_partyMemberList; // each struct - 4 integers, first integer - objPtr
|
||||
extern DWORD* ptr_partyMemberMaxCount;
|
||||
extern DWORD* ptr_partyMemberPidList;
|
||||
extern DWORD** ptr_partyMemberPidList;
|
||||
extern DWORD* ptr_patches;
|
||||
extern DWORD* ptr_paths;
|
||||
extern DWORD* ptr_pc_crit_succ_eff;
|
||||
|
||||
+25
-19
@@ -508,13 +508,11 @@ static void __declspec(naked) GetActiveHand() {
|
||||
retn;
|
||||
}
|
||||
}
|
||||
|
||||
static void __declspec(naked) ToggleActiveHand() {
|
||||
__asm {
|
||||
push ebx;
|
||||
mov eax, 1;
|
||||
mov ebx, intface_toggle_items_;
|
||||
call ebx;
|
||||
pop ebx;
|
||||
call intface_toggle_items_;
|
||||
retn;
|
||||
}
|
||||
}
|
||||
@@ -601,12 +599,14 @@ static void __declspec(naked) IncNPCLevel() {
|
||||
|
||||
static void _stdcall get_npc_level2() {
|
||||
int level = -1;
|
||||
DWORD pid = opHandler.arg(0).asInt(); // set to 0 if passing npc name
|
||||
if (!pid) {
|
||||
const char *critterName, *name = opHandler.arg(0).strValue();
|
||||
if (name[0] != 0) {
|
||||
DWORD* members = *(DWORD**)_partyMemberList;
|
||||
for (DWORD i = 0; i < *(DWORD*)_partyMemberCount; i++) {
|
||||
DWORD findPid = opHandler.arg(0).asInt(); // set to 0 if passing npc name
|
||||
const char *critterName, *name = opHandler.arg(0).asString();
|
||||
|
||||
if (findPid || name[0] != 0) {
|
||||
DWORD pid = 0;
|
||||
DWORD* members = *ptr_partyMemberList;
|
||||
for (DWORD i = 0; i < *ptr_partyMemberCount; i++) {
|
||||
if (!findPid) {
|
||||
__asm {
|
||||
mov eax, members;
|
||||
mov eax, [eax];
|
||||
@@ -617,17 +617,23 @@ static void _stdcall get_npc_level2() {
|
||||
pid = ((TGameObj*)*members)->pid;
|
||||
break;
|
||||
}
|
||||
members += 4;
|
||||
} else {
|
||||
DWORD _pid = ((TGameObj*)*members)->pid;
|
||||
if (findPid == _pid) {
|
||||
pid = _pid;
|
||||
break;
|
||||
}
|
||||
}
|
||||
members += 4;
|
||||
}
|
||||
}
|
||||
if (pid) {
|
||||
DWORD* pids = *(DWORD**)_partyMemberPidList;
|
||||
DWORD* lvlUpInfo = *(DWORD**)_partyMemberLevelUpInfoList;
|
||||
for (DWORD j = 0; j < *(DWORD*)_partyMemberMaxCount; j++) {
|
||||
if (pids[j] == pid) {
|
||||
level = lvlUpInfo[j * 3];
|
||||
break;
|
||||
if (pid) {
|
||||
DWORD* pids = *ptr_partyMemberPidList;
|
||||
DWORD* lvlUpInfo = *ptr_partyMemberLevelUpInfoList;
|
||||
for (DWORD j = 0; j < *ptr_partyMemberMaxCount; j++) {
|
||||
if (pids[j] == pid) {
|
||||
level = lvlUpInfo[j * 3];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user