From 50ded53db6f410f7e8dcb5fa4b7f60f669bb275e Mon Sep 17 00:00:00 2001 From: glighta Date: Sat, 15 Jun 2013 15:53:15 +0000 Subject: [PATCH] -Upd configure.in / configure --add --enable-warn=extra to show -Wconversion issues --move -Wno-switch from prod only to all case -Update packet_db thx (TTest) --fix index typo for itemlistwindowselected(all),cashshopbuy(2010-11-24 => v26-30, 2012-04-10 => v30-34) bugreport:7723 -Add utils::date2version (lookup a version with a date for later usage) -Fix missing revert part in mmo_send_char bugreport:7734 -Merge little herc change: --fix possible mapcrash in SCB_MATK with SC_RECOGNIZEDSPELL and change status->matk_min calculation order to speed up thing --add OFFICIAL_WALKPATH exception for BL_NPC git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17367 54d463be-8e91-2dee-dedb-b68131a5f0ec --- configure | 41 +++++++++++++++++++++---- configure.in | 57 +++++++++++++++++++++++----------- db/packet_db.txt | 28 ++++++++--------- src/char/char.c | 15 ++++++--- src/common/utils.c | 46 ++++++++++++++++++++++++++-- src/common/utils.h | 2 ++ src/map/status.c | 76 ++++++++++++++++++++++++---------------------- src/map/unit.c | 5 +-- 8 files changed, 186 insertions(+), 84 deletions(-) diff --git a/configure b/configure index 2d01cdab7e..94b5e2ae6e 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 17181 . +# From configure.in Revision: 17342 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # @@ -1325,7 +1325,7 @@ Optional Features: --enable-debug[=ARG] Compiles extra debug code. (disabled by default) (available options: yes, no, gdb) --enable-warn[=ARG] Compiles with warnings. (disabled by default) - (available options: yes, no) + (available options: yes, no, extra) --enable-buildbot[=ARG] (available options: yes, no) --enable-rdtsc Uses rdtsc as timing source (disabled by default) Enable it when you've timing issues. (For example: @@ -3479,6 +3479,7 @@ if test "${enable_warn+set}" = set; then : case $enableval in "no");; "yes");; + "extra");; *) as_fn_error $? "invalid argument --enable-warn=$enableval... stopping" "$LINENO" 5;; esac @@ -4958,17 +4959,17 @@ _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } - PROD_WARN="$PROD_WARN -Wno-switch" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } + CFLAGS="$OLD_CFLAGS" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -CFLAGS="$OLD_CFLAGS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fPIC" >&5 $as_echo_n "checking whether $CC supports -fPIC... " >&6; } @@ -5020,6 +5021,31 @@ $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# +# check if support conversion check +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wconversion" >&5 +$as_echo_n "checking whether $CC supports -Wconversion... " >&6; } +OLD_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -Wconversion" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo; +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + EXTRA_WARN="-Wconversion" + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CFLAGS="$OLD_CFLAGS" + ############################################################################### # Check for libraries and header files. @@ -5177,6 +5203,9 @@ case $enable_warn in "yes") CFLAGS="$CFLAGS" ;; + "extra") + CFLAGS="$CFLAGS $EXTRA_WARN" + ;; esac # @@ -6119,8 +6148,8 @@ else $as_echo "no" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: PROD_WARN= $PROD_WARN" >&5 -$as_echo "$as_me: PROD_WARN= $PROD_WARN" >&6;} +#AC_MSG_NOTICE([PROD_WARN= $PROD_WARN]) +#AC_MSG_NOTICE([EXTRA_WARN= $EXTRA_WARN]) { $as_echo "$as_me:${as_lineno-$LINENO}: Configure finish, CFLAG= $CFLAGS" >&5 $as_echo "$as_me: Configure finish, CFLAG= $CFLAGS" >&6;} ############################################################################### diff --git a/configure.in b/configure.in index 302013d160..23ff87b6ad 100644 --- a/configure.in +++ b/configure.in @@ -85,7 +85,7 @@ AC_ARG_ENABLE( [--enable-warn@<:@=ARG@:>@], [ Compiles with warnings. (disabled by default) - (available options: yes, no) + (available options: yes, no, extra) ] ), [ @@ -93,6 +93,7 @@ AC_ARG_ENABLE( case $enableval in "no");; "yes");; + "extra");; *) AC_MSG_ERROR([[invalid argument --enable-warn=$enableval... stopping]]);; esac ], @@ -120,7 +121,7 @@ AC_ARG_ENABLE( ) # -# RDTSC as Tick Source +# RDTSC as Tick Source # AC_ARG_ENABLE( [rdtsc], @@ -131,7 +132,7 @@ AC_ARG_ENABLE( Enable it when you've timing issues. (For example: in conjunction with XEN or Other Virtualization mechanisms) - + Note: Please ensure that you've disabled dynamic CPU-Frequencys, such as power saving options. (On the most modern Dedicated Servers cpufreq is preconfigured, see your distribution's manual @@ -223,9 +224,9 @@ AC_ARG_WITH( ), [ if test "$withval" == "no"; then - CFLAGS="$CFLAGS -DMAXCONN=16384" + CFLAGS="$CFLAGS -DMAXCONN=16384" else - + if ! test "$withval" -ge 0 -o "$withval" -lt 0 2>&- ; then AC_MSG_ERROR([Invalid argument --with-maxconn=$withval ... stopping]) else @@ -389,7 +390,7 @@ if test "$enable_64bit" = "no" ; then fi -# +# # check if we're producing 32bit code - so well produce binarys for at least i686 (speedup: cmovs, and cmpchg8 support) # AC_MSG_CHECKING([whether $CC produces 32bit code]) @@ -414,10 +415,10 @@ AC_RUN_IFELSE( ) -# -# Check if CC supports __thread attribute (Thread Local Storage) +# +# Check if CC supports __thread attribute (Thread Local Storage) # (Usually our OSX friends 're lacking support of it in older llvm versions ..) -# +# AC_MSG_CHECKING([whether $CC supports __thread specifier (TLS)]) AC_RUN_IFELSE( [ @@ -425,7 +426,7 @@ AC_RUN_IFELSE( int main(int argc, char **argv){ g_Test = 0; - return g_Test; + return g_Test; } ], [ @@ -509,7 +510,7 @@ AC_COMPILE_IFELSE( ) ], [ - AC_MSG_RESULT([no]) + AC_MSG_RESULT([no]) ] ) CFLAGS="$OLD_CFLAGS" @@ -521,13 +522,13 @@ CFLAGS="$CFLAGS -Wno-switch" AC_COMPILE_IFELSE( [int foo;], [ AC_MSG_RESULT([yes]) - PROD_WARN="$PROD_WARN -Wno-switch" ], [ AC_MSG_RESULT([no]) + CFLAGS="$OLD_CFLAGS" ] ) -CFLAGS="$OLD_CFLAGS" + AC_MSG_CHECKING([whether $CC supports -fPIC]) OLD_CFLAGS="$CFLAGS" @@ -561,6 +562,22 @@ AC_COMPILE_IFELSE( ] ) +# +# check if support conversion check +# +AC_MSG_CHECKING([whether $CC supports -Wconversion]) +OLD_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -Wconversion" +AC_COMPILE_IFELSE( + [int foo;], + [ + AC_MSG_RESULT([yes]) + EXTRA_WARN="-Wconversion" + ], + [AC_MSG_RESULT([no])] +) +CFLAGS="$OLD_CFLAGS" + ############################################################################### # Check for libraries and header files. @@ -648,7 +665,10 @@ case $enable_warn in "yes") CFLAGS="$CFLAGS" ;; -esac + "extra") + CFLAGS="$CFLAGS $EXTRA_WARN" + ;; +esac # # Buildbot @@ -727,7 +747,7 @@ if test "$ac_cv_search_clock_gettime" != "no" ; then #include #include #include - + int main(int argc, char** argv) { struct timespec tval; @@ -807,7 +827,7 @@ AC_SUBST([MYSQL_LIBS]) # # PCRE library (optional) -# +# PCRE_LIBS="" PCRE_CFLAGS="" @@ -815,7 +835,7 @@ if test "$want_pcre" = "no" ; then AC_MSG_NOTICE([ignoring PCRE (optional)]) else host_os="`uname`" - if test "$host_os" = "FreeBSD" ; then + if test "$host_os" = "FreeBSD" ; then if test -z "$PCRE_HOME" ; then PCRE_HOME="/usr/local"; fi fi if test -z "$PCRE_HOME" ; then @@ -895,7 +915,8 @@ else AC_MSG_RESULT([no]) fi -AC_MSG_NOTICE([PROD_WARN= $PROD_WARN]) +#AC_MSG_NOTICE([PROD_WARN= $PROD_WARN]) +#AC_MSG_NOTICE([EXTRA_WARN= $EXTRA_WARN]) AC_MSG_NOTICE([Configure finish, CFLAG= $CFLAGS]) ############################################################################### AC_OUTPUT diff --git a/db/packet_db.txt b/db/packet_db.txt index 3b00e675c7..612fd91ca2 100644 --- a/db/packet_db.txt +++ b/db/packet_db.txt @@ -1416,7 +1416,7 @@ packet_ver: 25 //2009-08-18aRagexeRE 0x07e3,6 -0x07e4,-1,itemlistwindowselected,2:4:8 +0x07e4,-1,itemlistwindowselected,2:4:8:12 0x07e6,8 //2009-08-25aRagexeRE @@ -1612,7 +1612,7 @@ packet_ver: 25 //2010-11-24aRagexeRE packet_ver: 26 -0x0288,-1,cashshopbuy,2:4:8:10 +0x0288,-1,cashshopbuy,2:4:6:10 0x0436,19,wanttoconnection,2:6:10:14:18 0x035f,5,walktoxy,2 0x0360,6,ticksend,2 @@ -1658,7 +1658,7 @@ packet_ver: 28 0x083c,19,wanttoconnection,2:6:10:14:18 0x08aa,7,actionrequest,2:6 0x02c4,10,useskilltoid,2:4:6 -0x0811,-1,itemlistwindowselected,2:4:8 +0x0811,-1,itemlistwindowselected,2:4:8:12 0x890,8 0x08a5,18,bookingregreq,2:4:6 0x0835,-1,reqopenbuyingstore,2:4:8:9:89 @@ -1689,7 +1689,7 @@ packet_ver:29 0x0929,26,partyinvite2,2 0x0885,7,actionrequest,2:6 0x0889,10,useskilltoid,2:4:6 -0x0870,-1,itemlistwindowselected,2:4:8 +0x0870,-1,itemlistwindowselected,2:4:8:12 //0x0926,18,bookingregreq,2:4:6 0x0815,-1,reqopenbuyingstore,2:4:8:9:89 0x0817,2,reqclosebuyingstore,0 @@ -1707,13 +1707,13 @@ packet_ver: 30 0x089c,26,friendslistadd,2 0x0885,5,hommenu,2:4 0x0961,36,storagepassword,2:4:20 -0x0288,-1,cashshopbuy,2:4:8:10 +0x0288,-1,cashshopbuy,2:4:6:10 0x091c,26,partyinvite2,2 0x094b,19,wanttoconnection,2:6:10:14:18 0x0369,7,actionrequest,2:6 0x083c,10,useskilltoid,2:4:6 0x0439,8,useitem,2:4 -0x0945,-1,itemlistwindowselected,2:4:8 +0x0945,-1,itemlistwindowselected,2:4:8:12 0x0815,-1,reqopenbuyingstore,2:4:8:9:89 0x0817,2,reqclosebuyingstore,0 0x0360,6,reqclickbuyingstore,2 @@ -1769,7 +1769,7 @@ packet_ver:31 0x08A8,36,storagepassword,2:4:20 0x0802,26,partyinvite2,2 0x022D,19,wanttoconnection,2:6:10:14:18 -0x0281,-1,itemlistwindowselected,2:4:8 +0x0281,-1,itemlistwindowselected,2:4:8:12 0x035F,6,ticksend,2 0x0202,5,changedir,2:4 0x07E4,6,takeitem,2 @@ -1808,7 +1808,7 @@ packet_ver: 33 packet_ver: 34 0x014f,6,guildrequestinfo,2 0x01fd,15,repairitem,2:4:6:7:9:11:13 -//0x0281,-1,itemlistwindowselected,2:4:8 +//0x0281,-1,itemlistwindowselected,2:4:8:12 0x035f,6,reqclickbuyingstore,2 0x0363,6,ticksend,2 0x0365,12,searchstoreinfolistitemclick,2:6:10 @@ -1821,7 +1821,7 @@ packet_ver: 34 0x084b,19 //fallitem4 0x085a,90,useskilltoposinfo,2:4:6:8:10 0x085d,18,bookingregreq,2:4:6 -0x0868,-1,itemlistwindowselected,2:4:8 +0x0868,-1,itemlistwindowselected,2:4:8:12 0x086d,26,partyinvite2,2 0x086f,26,friendslistadd,2 0x0874,8,movefromkafra,2:4 @@ -1891,7 +1891,7 @@ packet_ver: 35 0x0815,-1,reqopenbuyingstore,2:4:8:9:89 0x092D,18,bookingregreq,2:4:6 //0x08AA,8 CZ_JOIN_BATTLE_FIELD -0x0963,-1,itemlistwindowselected,2:4:8 +0x0963,-1,itemlistwindowselected,2:4:8:12 0x0943,19,wanttoconnection,2:6:10:14:18 0x0947,26,partyinvite2,2 //0x0862,4 CZ_GANGSI_RANK @@ -1923,7 +1923,7 @@ packet_ver: 36 0x0874,-1,reqopenbuyingstore,2:4:8:9:89 0x089B,18,bookingregreq,2:4:6 //0x0965,8 CZ_JOIN_BATTLE_FIELD -0x086A,-1,itemlistwindowselected,2:4:8 +0x086A,-1,itemlistwindowselected,2:4:8:12 0x08A9,19,wanttoconnection,2:6:10:14:18 0x0950,26,partyinvite2,2 //0x08AC,4 CZ_GANGSI_RANK @@ -1955,7 +1955,7 @@ packet_ver: 37 0x0869,-1,reqopenbuyingstore,2:4:8:9:89 0x0874,41,bookingregreq,2,4:6 // 0x088E,8); // CZ_JOIN_BATTLE_FIELD -0x0958,-1,itemlistwindowselected,2:4:8 +0x0958,-1,itemlistwindowselected,2:4:8:12 0x0919,19,wanttoconnection,2:6:10:14:18 0x08A8,26,partyinvite2,2 // 0x0888,4); // CZ_GANGSI_RANK @@ -1987,7 +1987,7 @@ packet_ver: 38 0x0815,-1,reqopenbuyingstore,2:4:8:9:89 0x0365,41,bookingregreq,2:4:6 // 0x0363,8 // CZ_JOIN_BATTLE_FIELD -0x0281,-1,itemlistwindowselected,2:4:8 +0x0281,-1,itemlistwindowselected,2:4:8:12 0x022D,19,wanttoconnection,2:6:10:14:18 0x0802,26,partyinvite2,2 // 0x0436,4 // CZ_GANGSI_RANK @@ -2019,7 +2019,7 @@ packet_ver: 39 0x0815,-1,reqopenbuyingstore,2:4:8:9:89 0x0365,18,bookingregreq,2:4:6 // 0x0363,8 CZ_JOIN_BATTLE_FIELD -0x0281,-1,itemlistwindowselected,2:4:8 +0x0281,-1,itemlistwindowselected,2:4:8:12 0x0919,19,wanttoconnection,2:6:10:14:18 0x0802,26,partyinvite2,2 // 0x0436,4 CZ_GANGSI_RANK diff --git a/src/char/char.c b/src/char/char.c index a92766d00c..2dd4d949fd 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -1960,19 +1960,24 @@ void char_parse_req_charlist(int fd, struct char_session_data* sd){ //---------------------------------------- int mmo_char_send006b(int fd, struct char_session_data* sd){ int j, offset = 0; - if(sd->version > 25) //20100413 + //bool newvers = (sd->version >= date2version(20100413) ); +#if PACKETVER >= 20100413 + //if(newvers) //20100413 offset += 3; +#endif if (save_log) ShowInfo("Loading Char Data ("CL_BOLD"%d"CL_RESET")\n",sd->account_id); j = 24 + offset; // offset WFIFOHEAD(fd,j + MAX_CHARS*MAX_CHAR_BUF); WFIFOW(fd,0) = 0x6b; - if(sd->version > 25){ //20100413 +#if PACKETVER >= 20100413 +// if(newvers){ //20100413 WFIFOB(fd,4) = MAX_CHARS; // Max slots. WFIFOB(fd,5) = sd->char_slots; // Available slots. (PremiumStartSlot) WFIFOB(fd,6) = MAX_CHARS; // Premium slots. (Any existent chars past sd->char_slots but within MAX_CHARS will show a 'Premium Service' in red) - } +// } +#endif memset(WFIFOP(fd,4 + offset), 0, 20); // unknown bytes j+=mmo_chars_fromsql(sd, WFIFOP(fd,j)); WFIFOW(fd,2) = j; // packet len @@ -2000,12 +2005,14 @@ void mmo_char_send082d(int fd, struct char_session_data* sd) { } void mmo_char_send(int fd, struct char_session_data* sd){ - ShowInfo("sd->version = %d\n",sd->version); + //ShowInfo("sd->version = %d\n",sd->version); #if PACKETVER >= 20130000 + //if(sd->version > date2version(20130000) ){ mmo_char_send082d(fd,sd); char_charlist_notify(fd,sd); char_block_character(fd,sd); #endif + //} //@FIXME dump from kro doesn't show 6b transmission mmo_char_send006b(fd,sd); } diff --git a/src/common/utils.c b/src/common/utils.c index 296df7e709..d799285aff 100644 --- a/src/common/utils.c +++ b/src/common/utils.c @@ -109,16 +109,16 @@ void findfile(const char *p, const char *pat, void (func)(const char*)) WIN32_FIND_DATAA FindFileData; HANDLE hFind; char tmppath[MAX_PATH+1]; - + const char *path = (p ==NULL)? "." : p; const char *pattern = (pat==NULL)? "" : pat; - + checkpath(tmppath,path); if( PATHSEP != tmppath[strlen(tmppath)-1]) strcat(tmppath, "\\*"); else strcat(tmppath, "*"); - + hFind = FindFirstFileA(tmppath, &FindFileData); if (hFind != INVALID_HANDLE_VALUE) { @@ -259,6 +259,46 @@ uint32 MakeDWord(uint16 word0, uint16 word1) ( (uint32)(word1 << 0x10) ); } +int date2version(int date){ + if(date < 20040906) return 5; + else if(date < 20040920) return 10; + else if(date < 20041005) return 11; + else if(date < 20041025) return 12; + else if(date < 20041129) return 13; + else if(date < 20050110) return 14; + else if(date < 20050509) return 15; + else if(date < 20050628) return 16; + else if(date < 20050718) return 17; + else if(date < 20050719) return 18; + else if(date < 20060327) return 19; + else if(date < 20070108) return 20; + else if(date < 20070212) return 21; + //wtf @FIXME + else if(date < 20080910) return 22; + else if(date < 20080827) return 23; + else if(date < 20080910) return 24; + //unable to solve from date + else if(date < 20101124) return 25; + else if(date < 20111005) return 26; + else if(date < 20111102) return 27; + else if(date < 20120307) return 28; + else if(date < 20120410) return 29; + else if(date < 20120418) return 30; + else if(date < 20120618) return 31; + else if(date < 20120702) return 32; + else if(date < 20130320) return 33; + else if(date < 20130515) return 34; + else if(date < 20130522) return 35; + else if(date < 20130529) return 36; + else if(date < 20130605) return 37; + else if(date < 20130612) return 38; + else if(date >= 20130612) return 39; +// else if(date < 20040920) return 40; +// else if(date < 20040920) return 41; +// else if(date < 20040920) return 42; +// else if(date < 20040920) return 43; + else return 30; //default +} /// calculates the value of A / B, in percent (rounded down) unsigned int get_percentage(const unsigned int A, const unsigned int B) diff --git a/src/common/utils.h b/src/common/utils.h index 8e39f26557..6ce163946c 100644 --- a/src/common/utils.h +++ b/src/common/utils.h @@ -29,4 +29,6 @@ extern uint16 GetWord(uint32 val, int idx); extern uint16 MakeWord(uint8 byte0, uint8 byte1); extern uint32 MakeDWord(uint16 word0, uint16 word1); +int date2version(int date); + #endif /* _UTILS_H_ */ diff --git a/src/map/status.c b/src/map/status.c index c93dfc3e71..835e6870df 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -3950,8 +3950,8 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) status->matk_max += sd->bonus.ematk; status->matk_min += sd->bonus.ematk; } - status->matk_min = status_calc_ematk(bl, sc, status->matk_min); - status->matk_max = status_calc_ematk(bl, sc, status->matk_max); + status->matk_min = status_calc_ematk(bl, sc, status->matk_min); + status->matk_max = status_calc_ematk(bl, sc, status->matk_max); //This is the only portion in MATK that varies depending on the weapon level and refinement rate. if( status->rhw.matk > 0 ){ int wMatk = status->rhw.matk; @@ -3961,17 +3961,19 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) } } #endif - if (bl->type&BL_PC && sd->matk_rate != 100) { + if (bl->type&BL_PC && sd->matk_rate != 100) { status->matk_max = status->matk_max * sd->matk_rate/100; status->matk_min = status->matk_min * sd->matk_rate/100; } - status->matk_min = status_calc_matk(bl, sc, status->matk_min); + status->matk_max = status_calc_matk(bl, sc, status->matk_max); - if ((bl->type&BL_HOM && battle_config.hom_setting&0x20) //Hom Min Matk is always the same as Max Matk - || sc->data[SC_RECOGNIZEDSPELL]) - status->matk_min = status->matk_max; + if ((bl->type&BL_HOM && battle_config.hom_setting&0x20) //Hom Min Matk is always the same as Max Matk + || (sc && sc->data[SC_RECOGNIZEDSPELL])) + status->matk_min = status->matk_max; + else + status->matk_min = status_calc_matk(bl, sc, status->matk_min); #ifdef RENEWAL if( sd && sd->right_weapon.overrefine > 0){ @@ -4741,37 +4743,37 @@ static unsigned short status_calc_matk(struct block_list *bl, struct status_chan return cap_value(matk,0,USHRT_MAX); #ifndef RENEWAL // take note fixed value first before % modifiers - if (sc->data[SC_MATKPOTION]) - matk += sc->data[SC_MATKPOTION]->val1; - if (sc->data[SC_MATKFOOD]) - matk += sc->data[SC_MATKFOOD]->val1; - if (sc->data[SC_MANA_PLUS]) - matk += sc->data[SC_MANA_PLUS]->val1; - if (sc->data[SC_AQUAPLAY_OPTION]) - matk += sc->data[SC_AQUAPLAY_OPTION]->val2; - if (sc->data[SC_CHILLY_AIR_OPTION]) - matk += sc->data[SC_CHILLY_AIR_OPTION]->val2; - if (sc->data[SC_WATER_BARRIER]) - matk -= sc->data[SC_WATER_BARRIER]->val3; - if (sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 3) - matk += 50; - if (sc->data[SC_ODINS_POWER]) - matk += 40 + 30 * sc->data[SC_ODINS_POWER]->val1; //70 lvl1, 100lvl2 - if (sc->data[SC_IZAYOI]) - matk += 50 * sc->data[SC_IZAYOI]->val1; + if (sc->data[SC_MATKPOTION]) + matk += sc->data[SC_MATKPOTION]->val1; + if (sc->data[SC_MATKFOOD]) + matk += sc->data[SC_MATKFOOD]->val1; + if (sc->data[SC_MANA_PLUS]) + matk += sc->data[SC_MANA_PLUS]->val1; + if (sc->data[SC_AQUAPLAY_OPTION]) + matk += sc->data[SC_AQUAPLAY_OPTION]->val2; + if (sc->data[SC_CHILLY_AIR_OPTION]) + matk += sc->data[SC_CHILLY_AIR_OPTION]->val2; + if (sc->data[SC_WATER_BARRIER]) + matk -= sc->data[SC_WATER_BARRIER]->val3; + if (sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 3) + matk += 50; + if (sc->data[SC_ODINS_POWER]) + matk += 40 + 30 * sc->data[SC_ODINS_POWER]->val1; //70 lvl1, 100lvl2 + if (sc->data[SC_IZAYOI]) + matk += 50 * sc->data[SC_IZAYOI]->val1; #endif - if (sc->data[SC_MAGICPOWER] && sc->data[SC_MAGICPOWER]->val4) - matk += matk * sc->data[SC_MAGICPOWER]->val3/100; - if (sc->data[SC_MINDBREAKER]) - matk += matk * sc->data[SC_MINDBREAKER]->val2/100; - if (sc->data[SC_INCMATKRATE]) - matk += matk * sc->data[SC_INCMATKRATE]->val1/100; - if (sc->data[SC_MOONLITSERENADE]) - matk += matk * sc->data[SC_MOONLITSERENADE]->val2/100; - if (sc->data[SC_MELODYOFSINK]) - matk += matk * sc->data[SC_MELODYOFSINK]->val3/100; - if (sc->data[SC_BEYONDOFWARCRY]) - matk -= matk * sc->data[SC_BEYONDOFWARCRY]->val3/100; + if (sc->data[SC_MAGICPOWER] && sc->data[SC_MAGICPOWER]->val4) + matk += matk * sc->data[SC_MAGICPOWER]->val3/100; + if (sc->data[SC_MINDBREAKER]) + matk += matk * sc->data[SC_MINDBREAKER]->val2/100; + if (sc->data[SC_INCMATKRATE]) + matk += matk * sc->data[SC_INCMATKRATE]->val1/100; + if (sc->data[SC_MOONLITSERENADE]) + matk += matk * sc->data[SC_MOONLITSERENADE]->val2/100; + if (sc->data[SC_MELODYOFSINK]) + matk += matk * sc->data[SC_MELODYOFSINK]->val3/100; + if (sc->data[SC_BEYONDOFWARCRY]) + matk -= matk * sc->data[SC_BEYONDOFWARCRY]->val3/100; if( sc->data[SC_ZANGETSU] ) matk += matk * sc->data[SC_ZANGETSU]->val2 / 100; diff --git a/src/map/unit.c b/src/map/unit.c index 55f36c7d33..aa0482ace1 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -384,8 +384,9 @@ int unit_walktoxy( struct block_list *bl, short x, short y, int flag) path_search(&wpd, bl->m, bl->x, bl->y, x, y, flag&1, CELL_CHKNOPASS); // Count walk path cells #ifdef OFFICIAL_WALKPATH if( !path_search_long(NULL, bl->m, bl->x, bl->y, x, y, CELL_CHKNOPASS) // Check if there is an obstacle between - && wpd.path_len > 14 ) // Official number of walkable cells is 14 if and only if there is an obstacle between. [malufett] - return 0; + && wpd.path_len > 14 // Official number of walkable cells is 14 if and only if there is an obstacle between. [malufett] + && (bl->type != BL_NPC) ) // If type is a NPC, please disregard. + return 0; #endif if( (battle_config.max_walk_path < wpd.path_len) && (bl->type != BL_NPC) ) return 0;