some minor cleaning of player variable loading/saving
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@11975 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
7d92eb8e27
commit
67088ee436
159
src/map/pc.c
159
src/map/pc.c
@ -7,6 +7,7 @@
|
|||||||
#include "../common/nullpo.h"
|
#include "../common/nullpo.h"
|
||||||
#include "../common/showmsg.h"
|
#include "../common/showmsg.h"
|
||||||
#include "../common/socket.h" // RFIFO*()
|
#include "../common/socket.h" // RFIFO*()
|
||||||
|
#include "../common/strlib.h" // safestrncpy()
|
||||||
#include "../common/timer.h"
|
#include "../common/timer.h"
|
||||||
#include "../common/utils.h"
|
#include "../common/utils.h"
|
||||||
|
|
||||||
@ -5876,38 +5877,35 @@ int pc_candrop(struct map_session_data *sd,struct item *item)
|
|||||||
/*==========================================
|
/*==========================================
|
||||||
* script用??の値を?む
|
* script用??の値を?む
|
||||||
*------------------------------------------*/
|
*------------------------------------------*/
|
||||||
int pc_readreg(struct map_session_data *sd,int reg)
|
int pc_readreg(struct map_session_data* sd, int reg)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
nullpo_retr(0, sd);
|
nullpo_retr(0, sd);
|
||||||
|
|
||||||
for(i=0;i<sd->reg_num;i++)
|
ARR_FIND( 0, sd->reg_num, i, sd->reg[i].index == reg );
|
||||||
if(sd->reg[i].index==reg)
|
return ( i < sd->reg_num ) ? sd->reg[i].data : 0;
|
||||||
return sd->reg[i].data;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
/*==========================================
|
/*==========================================
|
||||||
* script用??の値を設定
|
* script用??の値を設定
|
||||||
*------------------------------------------*/
|
*------------------------------------------*/
|
||||||
int pc_setreg(struct map_session_data *sd,int reg,int val)
|
int pc_setreg(struct map_session_data* sd, int reg, int val)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
nullpo_retr(0, sd);
|
nullpo_retr(0, sd);
|
||||||
|
|
||||||
for (i = 0; i < sd->reg_num; i++) {
|
ARR_FIND( 0, sd->reg_num, i, sd->reg[i].index == reg );
|
||||||
if (sd->reg[i].index == reg){
|
if( i < sd->reg_num )
|
||||||
sd->reg[i].data = val;
|
// overwrite existing entry
|
||||||
return 1;
|
sd->reg[i].data = val;
|
||||||
}
|
else {
|
||||||
|
// insert new entry
|
||||||
|
sd->reg_num++;
|
||||||
|
RECREATE(sd->reg, struct script_reg, sd->reg_num);
|
||||||
|
sd->reg[i].index = reg;
|
||||||
|
sd->reg[i].data = val;
|
||||||
}
|
}
|
||||||
sd->reg_num++;
|
|
||||||
sd->reg = (struct script_reg *) aRealloc(sd->reg, sizeof(*(sd->reg)) * sd->reg_num);
|
|
||||||
memset(sd->reg + (sd->reg_num - 1), 0, sizeof(struct script_reg));
|
|
||||||
sd->reg[i].index = reg;
|
|
||||||
sd->reg[i].data = val;
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -5915,22 +5913,19 @@ int pc_setreg(struct map_session_data *sd,int reg,int val)
|
|||||||
/*==========================================
|
/*==========================================
|
||||||
* script用文字列??の値を?む
|
* script用文字列??の値を?む
|
||||||
*------------------------------------------*/
|
*------------------------------------------*/
|
||||||
char *pc_readregstr(struct map_session_data *sd,int reg)
|
char* pc_readregstr(struct map_session_data* sd, int reg)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
nullpo_retr(0, sd);
|
nullpo_retr(0, sd);
|
||||||
|
|
||||||
for(i=0;i<sd->regstr_num;i++)
|
ARR_FIND( 0, sd->regstr_num, i, sd->regstr[i].index == reg );
|
||||||
if(sd->regstr[i].index==reg)
|
return ( i < sd->regstr_num ) ? sd->regstr[i].data : NULL;
|
||||||
return sd->regstr[i].data;
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
/*==========================================
|
/*==========================================
|
||||||
* script用文字列??の値を設定
|
* script用文字列??の値を設定
|
||||||
*------------------------------------------*/
|
*------------------------------------------*/
|
||||||
int pc_setregstr(struct map_session_data *sd,int reg,char *str)
|
int pc_setregstr(struct map_session_data* sd, int reg, char* str)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -5941,29 +5936,29 @@ int pc_setregstr(struct map_session_data *sd,int reg,char *str)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i=0;i<sd->regstr_num;i++)
|
ARR_FIND( 0, sd->regstr_num, i, sd->regstr[i].index == reg );
|
||||||
if(sd->regstr[i].index==reg){
|
if( i < sd->regstr_num )
|
||||||
if (str && strcmp(str,"")!=0)
|
{
|
||||||
strcpy(sd->regstr[i].data,str);
|
if (str && strcmp(str,"")!=0)
|
||||||
else { //Delete last entry.
|
safestrncpy(sd->regstr[i].data, str, sizeof(sd->regstr[i].data));
|
||||||
sd->regstr_num--;
|
else {
|
||||||
memcpy(&sd->regstr[i], &sd->regstr[sd->regstr_num], sizeof(sd->regstr[0]));
|
sd->regstr_num--;
|
||||||
sd->regstr = (struct script_regstr *) aRealloc(sd->regstr, sizeof(sd->regstr[0]) * sd->regstr_num);
|
memcpy(&sd->regstr[i], &sd->regstr[sd->regstr_num], sizeof(sd->regstr[0]));
|
||||||
}
|
RECREATE(sd->regstr, struct script_regstr, sd->regstr_num);
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (!str) return 1;
|
if (!str) return 1;
|
||||||
|
|
||||||
sd->regstr_num++;
|
sd->regstr_num++;
|
||||||
sd->regstr = (struct script_regstr *) aRealloc(sd->regstr, sizeof(sd->regstr[0]) * sd->regstr_num);
|
RECREATE(sd->regstr, struct script_regstr, sd->regstr_num);
|
||||||
if(sd->regstr==NULL){
|
if(sd->regstr==NULL){
|
||||||
ShowFatalError("out of memory : pc_setreg\n");
|
ShowFatalError("out of memory : pc_setreg\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
memset(sd->regstr + (sd->regstr_num - 1), 0, sizeof(struct script_regstr));
|
|
||||||
sd->regstr[i].index = reg;
|
sd->regstr[i].index = reg;
|
||||||
strcpy(sd->regstr[i].data, str);
|
safestrncpy(sd->regstr[i].data, str, sizeof(sd->regstr[i].data));
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -5996,11 +5991,9 @@ int pc_readregistry(struct map_session_data *sd,const char *reg,int type)
|
|||||||
intif_request_registry(sd,type==3?4:type);
|
intif_request_registry(sd,type==3?4:type);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
for(i=0;i<max;i++){
|
|
||||||
if(strcmp(sd_reg[i].str,reg)==0)
|
ARR_FIND( 0, max, i, strcmp(sd_reg[i].str,reg) == 0 );
|
||||||
return atoi(sd_reg[i].value);
|
return ( i < max ) ? atoi(sd_reg[i].value) : 0;
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char* pc_readregistry_str(struct map_session_data *sd,char *reg,int type)
|
char* pc_readregistry_str(struct map_session_data *sd,char *reg,int type)
|
||||||
@ -6031,11 +6024,9 @@ char* pc_readregistry_str(struct map_session_data *sd,char *reg,int type)
|
|||||||
intif_request_registry(sd,type==3?4:type);
|
intif_request_registry(sd,type==3?4:type);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
for(i=0;i<max;i++){
|
|
||||||
if(strcmp(sd_reg[i].str,reg)==0)
|
ARR_FIND( 0, max, i, strcmp(sd_reg[i].str,reg) == 0 );
|
||||||
return sd_reg[i].value;
|
return ( i < max ) ? sd_reg[i].value : NULL;
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int pc_setregistry(struct map_session_data *sd,const char *reg,int val,int type)
|
int pc_setregistry(struct map_session_data *sd,const char *reg,int val,int type)
|
||||||
@ -6077,32 +6068,31 @@ int pc_setregistry(struct map_session_data *sd,const char *reg,int val,int type)
|
|||||||
|
|
||||||
// delete reg
|
// delete reg
|
||||||
if (val == 0) {
|
if (val == 0) {
|
||||||
for(i = 0; i < *max; i++) {
|
ARR_FIND( 0, *max, i, strcmp(sd_reg[i].str, reg) == 0 );
|
||||||
if (strcmp(sd_reg[i].str, reg) == 0) {
|
if( i < *max )
|
||||||
if (i != *max - 1)
|
{
|
||||||
memcpy(&sd_reg[i], &sd_reg[*max - 1], sizeof(struct global_reg));
|
if (i != *max - 1)
|
||||||
memset(&sd_reg[*max - 1], 0, sizeof(struct global_reg));
|
memcpy(&sd_reg[i], &sd_reg[*max - 1], sizeof(struct global_reg));
|
||||||
(*max)--;
|
memset(&sd_reg[*max - 1], 0, sizeof(struct global_reg));
|
||||||
sd->state.reg_dirty |= 1<<(type-1); //Mark this registry as "need to be saved"
|
(*max)--;
|
||||||
break;
|
sd->state.reg_dirty |= 1<<(type-1); //Mark this registry as "need to be saved"
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
// change value if found
|
// change value if found
|
||||||
for(i = 0; i < *max; i++) {
|
ARR_FIND( 0, *max, i, strcmp(sd_reg[i].str, reg) == 0 );
|
||||||
if (strcmp(sd_reg[i].str, reg) == 0) {
|
if( i < *max )
|
||||||
sprintf(sd_reg[i].value, "%d", val);
|
{
|
||||||
sd->state.reg_dirty |= 1<<(type-1);
|
safesnprintf(sd_reg[i].value, sizeof(sd_reg[i].value), "%d", val);
|
||||||
return 1;
|
sd->state.reg_dirty |= 1<<(type-1);
|
||||||
}
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// add value if not found
|
// add value if not found
|
||||||
if (i < regmax) {
|
if (i < regmax) {
|
||||||
memset(&sd_reg[i], 0, sizeof(struct global_reg));
|
memset(&sd_reg[i], 0, sizeof(struct global_reg));
|
||||||
strncpy(sd_reg[i].str, reg, 32);
|
safestrncpy(sd_reg[i].str, reg, sizeof(sd_reg[i].str));
|
||||||
sprintf(sd_reg[i].value, "%d", val);
|
safesnprintf(sd_reg[i].value, sizeof(sd_reg[i].value), "%d", val);
|
||||||
(*max)++;
|
(*max)++;
|
||||||
sd->state.reg_dirty |= 1<<(type-1);
|
sd->state.reg_dirty |= 1<<(type-1);
|
||||||
return 1;
|
return 1;
|
||||||
@ -6149,35 +6139,36 @@ int pc_setregistry_str(struct map_session_data *sd,char *reg,char *val,int type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// delete reg
|
// delete reg
|
||||||
if (!val || strcmp(val,"")==0) {
|
if (!val || strcmp(val,"")==0)
|
||||||
for(i = 0; i < *max; i++) {
|
{
|
||||||
if (strcmp(sd_reg[i].str, reg) == 0) {
|
ARR_FIND( 0, *max, i, strcmp(sd_reg[i].str, reg) == 0 );
|
||||||
if (i != *max - 1)
|
if( i < *max )
|
||||||
memcpy(&sd_reg[i], &sd_reg[*max - 1], sizeof(struct global_reg));
|
{
|
||||||
memset(&sd_reg[*max - 1], 0, sizeof(struct global_reg));
|
if (i != *max - 1)
|
||||||
(*max)--;
|
memcpy(&sd_reg[i], &sd_reg[*max - 1], sizeof(struct global_reg));
|
||||||
sd->state.reg_dirty |= 1<<(type-1); //Mark this registry as "need to be saved"
|
memset(&sd_reg[*max - 1], 0, sizeof(struct global_reg));
|
||||||
if (type!=3) intif_saveregistry(sd,type);
|
(*max)--;
|
||||||
break;
|
sd->state.reg_dirty |= 1<<(type-1); //Mark this registry as "need to be saved"
|
||||||
}
|
if (type!=3) intif_saveregistry(sd,type);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// change value if found
|
// change value if found
|
||||||
for(i = 0; i < *max; i++) {
|
ARR_FIND( 0, *max, i, strcmp(sd_reg[i].str, reg) == 0 );
|
||||||
if (strcmp(sd_reg[i].str, reg) == 0) {
|
if( i < *max )
|
||||||
strncpy(sd_reg[i].value, val, 256);
|
{
|
||||||
sd->state.reg_dirty |= 1<<(type-1); //Mark this registry as "need to be saved"
|
safestrncpy(sd_reg[i].value, val, sizeof(sd_reg[i].value));
|
||||||
if (type!=3) intif_saveregistry(sd,type);
|
sd->state.reg_dirty |= 1<<(type-1); //Mark this registry as "need to be saved"
|
||||||
return 1;
|
if (type!=3) intif_saveregistry(sd,type);
|
||||||
}
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// add value if not found
|
// add value if not found
|
||||||
if (i < regmax) {
|
if (i < regmax) {
|
||||||
memset(&sd_reg[i], 0, sizeof(struct global_reg));
|
memset(&sd_reg[i], 0, sizeof(struct global_reg));
|
||||||
strncpy(sd_reg[i].str, reg, 32);
|
safestrncpy(sd_reg[i].str, reg, sizeof(sd_reg[i].str));
|
||||||
strncpy(sd_reg[i].value, val, 256);
|
safestrncpy(sd_reg[i].value, val, sizeof(sd_reg[i].value));
|
||||||
(*max)++;
|
(*max)++;
|
||||||
sd->state.reg_dirty |= 1<<(type-1); //Mark this registry as "need to be saved"
|
sd->state.reg_dirty |= 1<<(type-1); //Mark this registry as "need to be saved"
|
||||||
if (type!=3) intif_saveregistry(sd,type);
|
if (type!=3) intif_saveregistry(sd,type);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user