Browse Source

- Fixed while statements not "reserving" the curly before parsing the test expression.
Ref: http://www.eathena.ws/board/index.php?showtopic=134596

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9680 54d463be-8e91-2dee-dedb-b68131a5f0ec

FlavioJS 18 năm trước cách đây
mục cha
commit
5117e39fac
3 tập tin đã thay đổi với 8 bổ sung2 xóa
  1. 3 0
      Changelog-Trunk.txt
  2. 4 1
      src/map/script.c
  3. 1 1
      src/map/skill.c

+ 3 - 0
Changelog-Trunk.txt

@@ -3,6 +3,9 @@ Date	Added
 AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
+2007/01/21
+	* Fixed while statements not "reserving" the curly before parsing the test 
+	  expression. [FlavioJS]
 2007/01/20
 	* Fixed some joker's code trying to dereference a null pointer
 	* Fixed the server not reacting properly to atcommands/charcommands when using

+ 4 - 1
src/map/script.c

@@ -61,8 +61,11 @@
 #define script_hasdata(st,i) ( (st)->end > (st)->start + (i) )
 /// Returns the index of the last data in the stack
 #define script_lastdata(st) ( (st)->end - (st)->start - 1 )
+/// Pushes an int into the stack
 #define script_pushint(st,val) push_val((st)->stack, C_INT, (val))
+/// Returns if the stack data is a string
 #define script_isstring(data) ( (data)->type == C_STR || (data)->type == C_CONSTSTR )
+/// Returns if the stack data is an int
 #define script_isint(data) ( (data)->type == C_INT )
 
 #define FETCH(n, t) \
@@ -1368,13 +1371,13 @@ const char* parse_syntax(const char* p) {
 
 			// 条件が偽なら終了地点に飛ばす
 			sprintf(label,"__WL%x_FIN",syntax.curly[syntax.curly_count].index);
+			syntax.curly_count++;
 			add_scriptl(add_str("jump_zero"));
 			add_scriptc(C_ARG);
 			p=parse_expr(p);
 			p=skip_space(p);
 			add_scriptl(add_str(label));
 			add_scriptc(C_FUNC);
-			syntax.curly_count++;
 			return p;
 		}
 		break;

+ 1 - 1
src/map/skill.c

@@ -8039,7 +8039,7 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
 		if(!battle_config.duel_allow_teleport && sd->duel_group) { // duel restriction [LuzZza]
 			clif_displaymessage(sd->fd, "Duel: Can't use warp in duel.");
 			return 0;
-		}				
+		}
 		break;
 	case MO_CALLSPIRITS:
 		if(sd->spiritball >= lv) {