summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt12
-rw-r--r--conf-tmpl/Changelog.txt2
-rw-r--r--conf-tmpl/battle/monster.conf4
-rw-r--r--src/common/socket.c4
-rw-r--r--src/map/atcommand.c2
-rw-r--r--src/map/battle.c2
-rw-r--r--src/map/npc.c2
-rw-r--r--src/map/pc.c45
-rw-r--r--src/map/skill.c2
9 files changed, 46 insertions, 29 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 0864b76fa..4a6e0a174 100644
--- a/Changelog-Trunk.txt
+++ b/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
diff --git a/conf-tmpl/Changelog.txt b/conf-tmpl/Changelog.txt
index a713763b3..a35b3283e 100644
--- a/conf-tmpl/Changelog.txt
+++ b/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]
diff --git a/conf-tmpl/battle/monster.conf b/conf-tmpl/battle/monster.conf
index 925dae3b8..99cf4e267 100644
--- a/conf-tmpl/battle/monster.conf
+++ b/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)
diff --git a/src/common/socket.c b/src/common/socket.c
index 4e25abbb1..ca532f185 100644
--- a/src/common/socket.c
+++ b/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);
}
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index a621c8dfd..41aa7becd 100644
--- a/src/map/atcommand.c
+++ b/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;
}
diff --git a/src/map/battle.c b/src/map/battle.c
index b399960ab..92b630619 100644
--- a/src/map/battle.c
+++ b/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;
diff --git a/src/map/npc.c b/src/map/npc.c
index 598cc8ee7..7b7557a10 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -2228,7 +2228,7 @@ int npc_parse_mob (char *w1, char *w2, char *w3, char *w4)
// 引数の個数チェック
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;
}
diff --git a/src/map/pc.c b/src/map/pc.c
index eba537d9f..f0eb54ad6 100644
--- a/src/map/pc.c
+++ b/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++){
diff --git a/src/map/skill.c b/src/map/skill.c
index 50e85d621..8f7fc0b48 100644
--- a/src/map/skill.c
+++ b/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;
}