viewing paste readparam_allow_constant | Diff

Posted on the | Last edited on
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
 db/const.txt     |  5 +++++
 src/map/map.h    |  2 ++
 src/map/pc.c     |  5 +++++
 src/map/script.c | 23 ++++++++++++++++++-----
 4 files changed, 30 insertions(+), 5 deletions(-)
 
diff --git a/db/const.txt b/db/const.txt
index 3f0fbdb..6acaa1a 100644
--- a/db/const.txt
+++ b/db/const.txt
@@ -415,6 +415,8 @@ CharRename  124     1
 ModExp 125     1
 ModDrop        126     1
 ModDeath       127     1
+BankVault      128     1
+MaxStatus      129     1
 
 bMaxHP 6
 bMaxSP 8
@@ -3523,3 +3525,6 @@ SEPTEMBER 9
 OCTOBER        10
 NOVEMBER       11
 DECEMBER       12
+
+abcd   1234
+abcde  4321    1
\ No newline at end of file
diff --git a/src/map/map.h b/src/map/map.h
index 974fbc4..0e919e9 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -381,6 +381,8 @@ enum status_point_types {
        SP_MOD_EXP=125,
        SP_MOD_DROP=126,
        SP_MOD_DEATH=127,
+       SP_BANK_VAULT=128,
+       SP_MAXSTATUS=129,
 
        // Mercenaries
        SP_MERCFLEE=165, SP_MERCKILLS=189, SP_MERCFAITH=190,
diff --git a/src/map/pc.c b/src/map/pc.c
index 43adf33..5e4debf 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -7995,6 +7995,8 @@ int pc_readparam(struct map_session_data* sd,int type)
                case SP_MOD_EXP:         val = sd->status.mod_exp; break;
                case SP_MOD_DROP:        val = sd->status.mod_drop; break;
                case SP_MOD_DEATH:       val = sd->status.mod_death; break;
+               case SP_BANK_VAULT:      val = sd->status.bank_vault; break;
+               case SP_MAXSTATUS:       val = pc_maxparameter(sd); break;
                case SP_CRITICAL:        val = sd->battle_status.cri/10; break;
                case SP_ASPD:            val = (2000-sd->battle_status.amotion)/10; break;
                case SP_BASE_ATK:        val = sd->battle_status.batk; break;
@@ -8096,6 +8098,9 @@ int pc_readparam(struct map_session_data* sd,int type)
                case SP_VARCASTRATE:     val = sd->bonus.varcastrate; break;
                case SP_ADD_VARIABLECAST:val = sd->bonus.add_varcast; break;
 #endif
+               default:
+                       ShowError("pc_readparam: Attempt to read unknown parameter '%d'.\n", type);
+                       return -1;
        }
 
        return val;
diff --git a/src/map/script.c b/src/map/script.c
index cfc7ed0..ccffdf3 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -2223,6 +2223,7 @@ void script_set_constant(const char* name, int value, bool isparameter) {
        if( script->str_data[n].type == C_NOP ) {// new
                script->str_data[n].type = isparameter ? C_PARAM : C_INT;
                script->str_data[n].val  = value;
+               ShowDebug("%d %d %d\n",isparameter, value, script->str_data[n].type);
        } else if( script->str_data[n].type == C_PARAM || script->str_data[n].type == C_INT ) {// existing parameter or constant
                ShowError("script_set_constant: Attempted to overwrite existing %s '%s' (old value=%d, new value=%d).\n", ( script->str_data[n].type == C_PARAM ) ? "parameter" : "constant", name, script->str_data[n].val, value);
        } else {// existing name
@@ -2279,6 +2280,7 @@ void read_constdb(void) {
                type = 0;
                if (sscanf(line, "%1023[A-Za-z0-9_],%1023[-0-9xXA-Fa-f],%d", name, val, &type) >=2
                 || sscanf(line, "%1023[A-Za-z0-9_] %1023[-0-9xXA-Fa-f] %d", name, val, &type) >=2
+                || sscanf(line, "%1023[A-Za-z0-9_]     %1023[-0-9xXA-Fa-f]     %d", name, val, &type) >=2
                ) {
                        script->set_constant(name, (int)strtol(val, NULL, 0), (bool)type);
                }
@@ -7705,19 +7707,30 @@ BUILDIN(disableitemuse)
  *------------------------------------------*/
 BUILDIN(readparam) {
        int type;
+       struct script_data *data = script_getdata(st,2);
        TBL_PC *sd;
 
-       type=script_getnum(st,2);
-       if( script_hasdata(st,3) )
-               sd=map->nick2sd(script_getstr(st,3));
+       type = script_getnum(st,2);
+       if (script_hasdata(st,3)) {
+               if (script_isstringtype(st,3))
+                       sd = map->nick2sd(script_getstr(st,3));
+               else
+                       sd = map->id2sd(script_getnum(st,3));
+       }
        else
-               sd=script->rid2sd(st);
+               sd = script->rid2sd(st);
 
-       if(sd==NULL) {
+       if (sd == NULL) {
                script_pushint(st,-1);
                return true;
        }
 
+       ShowDebug( "%d %d %d %d %d %d\n", type, data->type, C_INT, C_PARAM, reference_toparam(data), reference_toconstant(data));
+       if (data->type == C_INT && !reference_toconstant(data)) {
+               script_pushint(st, (int)data->u.num);
+               return true;
+       }
+
        script_pushint(st,pc->readparam(sd,type));
 
        return true;
 
Viewed 968 times, submitted by AnnieRuru.