فهرست منبع

* Fixed typo in 'deletearray' messing up the script engine
* Added a check to pc_skill() to prevent crashes on unknown skill ids

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

ultramage 18 سال پیش
والد
کامیت
a07af78342
3فایلهای تغییر یافته به همراه13 افزوده شده و 4 حذف شده
  1. 3 0
      Changelog-Trunk.txt
  2. 8 2
      src/map/pc.c
  3. 2 2
      src/map/script.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/07/07
+	* Fixed typo in 'deletearray' messing up the script engine
+	* Added a check to pc_skill() to prevent crashes on unknown skill ids
 2007/07/06
 	* Cleaned up some nasty code related to skill_blown
 	- split 'direction' value from flags

+ 8 - 2
src/map/pc.c

@@ -2494,11 +2494,17 @@ int pc_skill(TBL_PC* sd, int id, int level, int flag)
 {
 	nullpo_retr(0, sd);
 
-	if( level > MAX_SKILL_LEVEL ){
+	if( id <= 0 || id >= MAX_SKILL || skill_db[id].name == NULL) {
 		if( battle_config.error_log )
-			ShowError("pc_skill: Skill level %d too high. Max lv supported is MAX_SKILL_LEVEL (%d)\n", level, MAX_SKILL_LEVEL);
+			ShowError("pc_skill: Skill with id %d does not exist in the skill database\n", id);
 		return 0;
 	}
+	if( level > MAX_SKILL_LEVEL ) {
+		if( battle_config.error_log )
+			ShowError("pc_skill: Skill level %d too high. Max lv supported is %d\n", level, MAX_SKILL_LEVEL);
+		return 0;
+	}
+
 	switch( flag ){
 	case 0: //Set skill data overwriting whatever was there before.
 		sd->status.skill[id].id   = id;

+ 2 - 2
src/map/script.c

@@ -5758,12 +5758,12 @@ BUILDIN_FUNC(deletearray)
 	if( is_string_variable(name) )
 	{
 		for( ; start < end; ++start )
-			set_reg(st, sd, reference_uid(id, start), name, (void*)0, reference_getref(data));
+			set_reg(st, sd, reference_uid(id, start), name, (void *)"", reference_getref(data));
 	}
 	else 
 	{
 		for( ; start < end; ++start )
-			set_reg(st, sd, reference_uid(id, start), name, (void *)"", reference_getref(data));
+			set_reg(st, sd, reference_uid(id, start), name, (void*)0, reference_getref(data));
 	}
 	return 0;
 }