Преглед изворни кода

- Fixed pc_calc_skilltree ignoring prerequisites / joblvl requirements.
- Re-applied change r9593 that got accidentally reverted by r9595.
- Added the official behavior of monsters regaining full hp when they morph.
- Added support for text/comments at the end of monster spawn lines (<tab> required)
- Silenced the debug message in socket.c that's been freaking people out.
- Modified the useless error message in atcommand_effect.

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

ultramage пре 18 година
родитељ
комит
215762fe8c
9 измењених фајлова са 46 додато и 29 уклоњено
  1. 11 1
      Changelog-Trunk.txt
  2. 2 0
      conf-tmpl/Changelog.txt
  3. 2 2
      conf-tmpl/battle/monster.conf
  4. 2 2
      src/common/socket.c
  5. 1 1
      src/map/atcommand.c
  6. 1 1
      src/map/battle.c
  7. 1 1
      src/map/npc.c
  8. 24 21
      src/map/pc.c
  9. 2 0
      src/map/skill.c

+ 11 - 1
Changelog-Trunk.txt

@@ -3,7 +3,17 @@ 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.
 
-2006/12/02
+2007/01/03
+	* Modified the useless error message in atcommand_effect.
+	* Silenced the debug message in socket.c that's been freaking people out.
+	* Added support for text/comments at the end of monster spawn lines (<tab> required)
+	* Added the official behavior of monsters regaining full hp when they morph.
+	  > info at http://www.eathena.ws/board/index.php?showtopic=130103
+	* Fixed pc_calc_skilltree ignoring prerequisites / joblvl requirements.
+	  > TODOs at http://www.eathena.ws/board/index.php?showtopic=130788
+	* Re-applied change r9593 that got accidentally reverted by r9595. [ultramage]
+
+2007/01/02
 	* Fixed SC_JOINTBEAT not doing crit damage for the Neck Break ailment.
 	* Gospel sends the buff message to the affected player. [FlavioJS]
 2006/12/31

+ 2 - 0
conf-tmpl/Changelog.txt

@@ -1,5 +1,7 @@
 Date	Added
 
+2007/01/03
+	* Changed monster_class_change_full_recover to 'yes' (official) [ultramage]
 2006/12/20
 	* Fixed the meaning of stdout_with_ansisequence and changed the default 
 	  value to no. [FlavioJS]

+ 2 - 2
conf-tmpl/battle/monster.conf

@@ -167,8 +167,8 @@ retaliate_to_master: yes
 // the skill, otherwise B will be targetted by the reaction skill.
 mob_changetarget_byskill: no
 
-// If monster's class is changed will it fully recover HP and SP and Ailments? (Note 1)
-monster_class_change_full_recover: no
+// If monster's class is changed will it fully recover HP? (Note 1)
+monster_class_change_full_recover: yes
 
 // Display some mob info next to their name? (add as needed)
 // (does not works on guardian or emperium)

+ 2 - 2
src/common/socket.c

@@ -183,7 +183,7 @@ static int recv_to_fifo(int fd)
 			FD_CLR(fd, &readfds); //Remove the socket so the select() won't hang on it.
 		}
 		if (s_errno != S_EWOULDBLOCK) {
-			ShowDebug("recv_to_fifo: error %d, ending connection #%d\n", s_errno, fd);
+			//ShowDebug("recv_to_fifo: error %d, ending connection #%d\n", s_errno, fd);
 			set_eof(fd);
 		}
 		return 0;
@@ -219,7 +219,7 @@ static int send_from_fifo(int fd)
 			FD_CLR(fd, &readfds); //Remove the socket so the select() won't hang on it.
 		}
 		if (s_errno != S_EWOULDBLOCK) {
-			ShowDebug("send_from_fifo: error %d, ending connection #%d\n", s_errno, fd);
+			//ShowDebug("send_from_fifo: error %d, ending connection #%d\n", s_errno, fd);
 			session[fd]->wdata_size = 0; //Clear the send queue as we can't send anymore. [Skotlex]
 			set_eof(fd);
 		}

+ 1 - 1
src/map/atcommand.c

@@ -7120,7 +7120,7 @@ int atcommand_effect(
 	nullpo_retr(-1, sd);
 
 	if (!message || !*message || sscanf(message, "%d %d", &type,&flag) < 2) {
-		clif_displaymessage(fd, "Please, enter at least a option (usage: @effect <type+>).");
+		clif_displaymessage(fd, "Please, enter a type and a send flag (usage: @effect <type> <flag>).");
 		return -1;
 	}
 

+ 1 - 1
src/map/battle.c

@@ -4067,7 +4067,7 @@ void battle_set_defaults() {
 	battle_config.attack_direction_change = BL_ALL;
 	battle_config.land_skill_limit = BL_ALL;
 	battle_config.party_skill_penalty = 1;
-	battle_config.monster_class_change_full_recover = 0;
+	battle_config.monster_class_change_full_recover = 1;
 	battle_config.produce_item_name_input = 1;
 	battle_config.produce_potion_name_input = 1;
 	battle_config.making_arrow_name_input = 1;

+ 1 - 1
src/map/npc.c

@@ -2228,7 +2228,7 @@ int npc_parse_mob (char *w1, char *w2, char *w3, char *w4)
 
 	// ˆø�”‚ÌŒÂ�”ƒ`ƒFƒbƒN
 	if (sscanf(w1, "%15[^,],%d,%d,%d,%d", mapname, &x, &y, &xs, &ys) < 3 ||
-		sscanf(w4, "%d,%d,%u,%u,%49[^\r\n]", &class_, &num, &mob.delay1, &mob.delay2, mob.eventname) < 2 ) {
+		sscanf(w4, "%d,%d,%u,%u,%49[^\t\r\n]", &class_, &num, &mob.delay1, &mob.delay2, mob.eventname) < 2 ) {
 		ShowError("bad monster line : %s %s %s (file %s)\n", w1, w3, w4, current_file);
 		return 1;
 	}

+ 24 - 21
src/map/pc.c

@@ -918,6 +918,7 @@ int pc_calc_skilltree(struct map_session_data *sd)
 		if (sd->status.skill[i].flag != 13) //Don't touch plagiarized skills
 			sd->status.skill[i].id=0; //First clear skills.
 	}
+
 	for(i=0;i<MAX_SKILL;i++){ 
 		if (sd->status.skill[i].flag && sd->status.skill[i].flag != 13){ //Restore original level of skills after deleting earned skills.	
 			sd->status.skill[i].lv=(sd->status.skill[i].flag==1)?0:sd->status.skill[i].flag-2;
@@ -946,41 +947,43 @@ int pc_calc_skilltree(struct map_session_data *sd)
 		}
 		return 0;
 	}
+
 	do {
-		flag=0;
-		for(i=0;i < MAX_SKILL_TREE && (id=skill_tree[c][i].id)>0;i++){
-			int j,f=1;
+		flag = 0;
+		for(i = 0; i < MAX_SKILL_TREE && (id = skill_tree[c][i].id) > 0; i++) {
+			int j, f;
+
 			if(sd->status.skill[id].id)
 				continue; //Skill already known.
+
+			f = 1;
 			if(!battle_config.skillfree) {
-				for(j=0;j<5;j++) {
-					if( skill_tree[c][i].need[j].id &&
-						pc_checkskill(sd,skill_tree[c][i].need[j].id) <
-						skill_tree[c][i].need[j].lv) {
-						f=0;
+				for(j = 0; j < 5; j++) {
+					if( skill_tree[c][i].need[j].id && pc_checkskill(sd,skill_tree[c][i].need[j].id) < skill_tree[c][i].need[j].lv) {
+						f = 0; // one or more prerequisites wasn't satisfied
 						break;
 					}
 				}
 				if (sd->status.job_level < skill_tree[c][i].joblv)
-					f=0;
+					f = 0; // job level requirement wasn't satisfied
 				else if (pc_checkskill(sd, NV_BASIC) < 9 && id != NV_BASIC && !(skill_get_inf2(id)&INF2_QUEST_SKILL))
-					f=0; // Do not unlock normal skills when Basic Skills is not maxed out (can happen because of skill reset)
+					f = 0; // Do not unlock normal skills when Basic Skill is not maxed out (can happen because of skill reset)
 			}
-			if(skill_get_inf2(id)&INF2_SPIRIT_SKILL)
-			{	//Spirit skills cannot be learned, they will only show up on your tree when you get buffed.
-				if (sd->sc.count && sd->sc.data[SC_SPIRIT].timer != -1)
-				{	//Enable Spirit Skills. [Skotlex]
-					sd->status.skill[id].id=id;
-					sd->status.skill[id].lv=1;
-					sd->status.skill[id].flag=1; //So it is not saved, and tagged as a "bonus" skill.
-					flag=1;
+
+			if (f) {
+				sd->status.skill[id].id = id;
+
+				if(skill_get_inf2(id)&INF2_SPIRIT_SKILL && sd->sc.count && sd->sc.data[SC_SPIRIT].timer != -1)
+				{	//Spirit skills cannot be learned, they will only show up on your tree when you get buffed.
+					sd->status.skill[id].lv = 1; // need to manually specify a skill level
+					sd->status.skill[id].flag = 1; //So it is not saved, and tagged as a "bonus" skill.
 				}
-			} else if (f){
-				sd->status.skill[id].id=id;
-				flag=1;
+
+				flag = 1; // skill list has changed, perform another pass
 			}
 		}
 	} while(flag);
+
 	if ((sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON && sd->status.base_level >= 90 && pc_famerank(sd->status.char_id, MAPID_TAEKWON)) {
 		//Grant all Taekwon Tree, but only as bonus skills in case they drop from ranking. [Skotlex]
 		for(i=0;i < MAX_SKILL_TREE && (id=skill_tree[c][i].id)>0;i++){

+ 2 - 0
src/map/skill.c

@@ -7836,6 +7836,8 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
 		sd->skillitem = sd->skillitemlv = 0;
 		//Need to do arrow state check.
 		sd->state.arrow_atk = skill_get_ammotype(skill)?1:0; 
+		//Need to do Spiritball check.
+		sd->spiritball_old = sd->spiritball;
 		return 1;
 	}