summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt3
-rw-r--r--src/char/char.c14
-rw-r--r--src/char_sql/char.c20
-rw-r--r--src/map/itemdb.c12
-rw-r--r--src/map/pc.c7
5 files changed, 37 insertions, 19 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 6a4ea4e7d..222ae80a9 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -4,6 +4,9 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2006/12/22
+ * Now when you specify a max level beyond what the exp table has, the last
+ entry of the exp table will be duplicated to fill in the remaining levels.
+ [Skotlex]
* Change strncpy to memcpy when parsing switches in the script engine
since it's guaranteed to be a word of that size (skip_word).
* Made scriptlabel_db duplicate the key. When str_buf is reallocated, the
diff --git a/src/char/char.c b/src/char/char.c
index ac70d3046..a95a1cfda 100644
--- a/src/char/char.c
+++ b/src/char/char.c
@@ -3631,9 +3631,9 @@ int parse_char(int fd) {
break;
}
{ //Send to player.
- WFIFOHEAD(fd, 108);
+ WFIFOHEAD(fd, 110);
WFIFOW(fd,0) = 0x6d;
- memset(WFIFOP(fd,2), 0, 106);
+ memset(WFIFOP(fd,2), 0, 108);
WFIFOL(fd,2) = char_dat[i].status.char_id;
WFIFOL(fd,2+4) = char_dat[i].status.base_exp>LONG_MAX?LONG_MAX:char_dat[i].status.base_exp;
@@ -3649,7 +3649,7 @@ int parse_char(int fd) {
WFIFOW(fd,2+44) = (char_dat[i].status.max_hp > SHRT_MAX) ? SHRT_MAX : char_dat[i].status.max_hp;
WFIFOW(fd,2+46) = (char_dat[i].status.sp > SHRT_MAX) ? SHRT_MAX : char_dat[i].status.sp;
WFIFOW(fd,2+48) = (char_dat[i].status.max_sp > SHRT_MAX) ? SHRT_MAX : char_dat[i].status.max_sp;
- WFIFOW(fd,2+50) = DEFAULT_WALK_SPEED; // char_dat[i].status.speed;
+ WFIFOW(fd,2+50) = DEFAULT_WALK_SPEED;
WFIFOW(fd,2+52) = char_dat[i].status.class_;
WFIFOW(fd,2+54) = char_dat[i].status.hair;
@@ -3669,9 +3669,15 @@ int parse_char(int fd) {
WFIFOB(fd,2+101) = (char_dat[i].status.int_ > UCHAR_MAX) ? UCHAR_MAX : char_dat[i].status.int_;
WFIFOB(fd,2+102) = (char_dat[i].status.dex > UCHAR_MAX) ? UCHAR_MAX : char_dat[i].status.dex;
WFIFOB(fd,2+103) = (char_dat[i].status.luk > UCHAR_MAX) ? UCHAR_MAX : char_dat[i].status.luk;
+#if PACKETVER > 7
+ //Updated packet structure with rename-button included. Credits to Sara-chan
+ WFIFOW(fd,2+104) = char_dat[i].status.char_num;
+ WFIFOB(fd,2+106) = 1; //Rename bit.
+ WFIFOSET(fd,110);
+#else
WFIFOB(fd,2+104) = char_dat[i].status.char_num;
-
WFIFOSET(fd,108);
+#endif
RFIFOSKIP(fd,37);
}
for(ch = 0; ch < 9; ch++) {
diff --git a/src/char_sql/char.c b/src/char_sql/char.c
index 77e72805d..0333798d1 100644
--- a/src/char_sql/char.c
+++ b/src/char_sql/char.c
@@ -1680,11 +1680,7 @@ int mmo_char_send006b(int fd, struct char_session_data *sd) {
int i, j, found_num = 0;
struct mmo_charstatus *p = NULL;
const int offset = 24;
-#if PACKETVER > 7
WFIFOHEAD(fd, offset +9*108);
-#else
- WFIFOHEAD(fd, offset +9*106);
-#endif
set_char_online(-1, 99,sd->account_id);
@@ -1712,6 +1708,7 @@ int mmo_char_send006b(int fd, struct char_session_data *sd) {
WFIFOW(fd, 0) = 0x6b;
#if PACKETVER > 7
+ //Updated packet structure with rename-button included. Credits to Sara-chan
memset(WFIFOP(fd, 0), 0, offset + found_num * 108);
WFIFOW(fd, 2) = offset + found_num * 108;
#else
@@ -1773,6 +1770,7 @@ int mmo_char_send006b(int fd, struct char_session_data *sd) {
WFIFOB(fd,j+102) = (p->dex > UCHAR_MAX) ? UCHAR_MAX : p->dex;
WFIFOB(fd,j+103) = (p->luk > UCHAR_MAX) ? UCHAR_MAX : p->luk;
#if PACKETVER > 7
+ //Updated packet structure with rename-button included. Credits to Sara-chan
WFIFOW(fd,j+104) = p->char_num;
WFIFOB(fd,j+106) = 1; //TODO: Handle this rename bit: 0 to enable renaming
#else
@@ -3435,12 +3433,12 @@ int parse_char(int fd) {
break;
}
{ //Send data.
- WFIFOHEAD(fd, 108);
+ WFIFOHEAD(fd, 110);
WFIFOW(fd, 0) = 0x6d;
- memset(WFIFOP(fd, 2), 0x00, 106);
+ memset(WFIFOP(fd, 2), 0x00, 108);
mmo_char_fromsql_short(i, &char_dat); //Only the short data is needed.
- WFIFOL(fd, 2) = char_dat.char_id;
+ WFIFOL(fd,2) = char_dat.char_id;
WFIFOL(fd,2+4) = char_dat.base_exp>LONG_MAX?LONG_MAX:char_dat.base_exp;
WFIFOL(fd,2+8) = char_dat.zeny;
WFIFOL(fd,2+12) = char_dat.job_exp>LONG_MAX?LONG_MAX:char_dat.job_exp;
@@ -3474,9 +3472,15 @@ int parse_char(int fd) {
WFIFOB(fd,2+101) = char_dat.int_>UCHAR_MAX?UCHAR_MAX:char_dat.int_;
WFIFOB(fd,2+102) = char_dat.dex>UCHAR_MAX?UCHAR_MAX:char_dat.dex;
WFIFOB(fd,2+103) = char_dat.luk>UCHAR_MAX?UCHAR_MAX:char_dat.luk;
+#if PACKETVER > 7
+ //Updated packet structure with rename-button included. Credits to Sara-chan
+ WFIFOW(fd,2+104) = char_dat.char_num;
+ WFIFOB(fd,2+106) = 1; //Rename bit.
+ WFIFOSET(fd, 110);
+#else
WFIFOB(fd,2+104) = char_dat.char_num;
-
WFIFOSET(fd, 108);
+#endif
RFIFOSKIP(fd, 37);
}
//to do
diff --git a/src/map/itemdb.c b/src/map/itemdb.c
index 68a61724f..63aaa0bcf 100644
--- a/src/map/itemdb.c
+++ b/src/map/itemdb.c
@@ -954,10 +954,10 @@ static int itemdb_read_sqldb(void)
script_free_code(id->script);
if (sql_row[19] != NULL) {
if (sql_row[19][0] == '{')
- id->script = parse_script((unsigned char *) sql_row[19],item_db_name[i], 0);
+ id->script = parse_script((unsigned char *) sql_row[19],item_db_name[i], ln, 0);
else {
sprintf(script, "{%s}", sql_row[19]);
- id->script = parse_script((unsigned char *) script, item_db_name[i], 0);
+ id->script = parse_script((unsigned char *) script, item_db_name[i], ln, 0);
}
} else id->script = NULL;
@@ -965,10 +965,10 @@ static int itemdb_read_sqldb(void)
script_free_code(id->equip_script);
if (sql_row[20] != NULL) {
if (sql_row[20][0] == '{')
- id->equip_script = parse_script((unsigned char *) sql_row[20], item_db_name[i], 0);
+ id->equip_script = parse_script((unsigned char *) sql_row[20], item_db_name[i], ln, 0);
else {
sprintf(script, "{%s}", sql_row[20]);
- id->equip_script = parse_script((unsigned char *) script, item_db_name[i], 0);
+ id->equip_script = parse_script((unsigned char *) script, item_db_name[i], ln, 0);
}
} else id->equip_script = NULL;
@@ -976,10 +976,10 @@ static int itemdb_read_sqldb(void)
script_free_code(id->unequip_script);
if (sql_row[21] != NULL) {
if (sql_row[21][0] == '{')
- id->unequip_script = parse_script((unsigned char *) sql_row[21],item_db_name[i], 0);
+ id->unequip_script = parse_script((unsigned char *) sql_row[21],item_db_name[i], ln, 0);
else {
sprintf(script, "{%s}", sql_row[21]);
- id->unequip_script = parse_script((unsigned char *) script, item_db_name[i], 0);
+ id->unequip_script = parse_script((unsigned char *) script, item_db_name[i], ln, 0);
}
} else id->unequip_script = NULL;
diff --git a/src/map/pc.c b/src/map/pc.c
index 5fdb19378..9aefa3f08 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -7314,7 +7314,12 @@ int pc_readdb(void)
max_level[job][type]--;
if (max_level[job][type] < max) {
ShowWarning("pc_readdb: Specified max %d for job %d, but that job's exp table only goes up to level %d.\n", max, job, max_level[job][type]);
- ShowNotice("(You may still reach lv %d through scripts/gm-commands)\n", max);
+ ShowInfo("Filling the missing values with the last exp entry.\n");
+ //Fill the requested values with the last entry.
+ i = max_level[job][type]-2;
+ if (i < 0) i = 0;
+ for (; i < max-2; i++)
+ exp_table[job][type][i] = exp_table[job][type][i-1];
max_level[job][type] = max;
}
// ShowDebug("%s - Class %d: %d\n", type?"Job":"Base", job, max_level[job][type]);