From a65e4681cd29db1d0936523cc8ff5646dc7dca5b Mon Sep 17 00:00:00 2001 From: skotlex Date: Fri, 22 Dec 2006 14:19:39 +0000 Subject: - Added support for the new "make new char" packet that has the rename button data. Thanks to Sara-chan for the format change update. - Fixed itemdb.c sql compilation - 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. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@9558 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 3 +++ src/char/char.c | 14 ++++++++++---- src/char_sql/char.c | 20 ++++++++++++-------- src/map/itemdb.c | 12 ++++++------ src/map/pc.c | 7 ++++++- 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]); -- cgit v1.2.3-60-g2f50