From f68bd7c915dc631d452b6ea2ac21cdf75bc26fe4 Mon Sep 17 00:00:00 2001 From: ultramage Date: Wed, 3 Jan 2007 03:05:43 +0000 Subject: - 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 ( 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://rathena.svn.sourceforge.net/svnroot/rathena/trunk@9608 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 12 +++++++++++- conf-tmpl/Changelog.txt | 2 ++ conf-tmpl/battle/monster.conf | 4 ++-- src/common/socket.c | 4 ++-- src/map/atcommand.c | 2 +- src/map/battle.c | 2 +- src/map/npc.c | 2 +- src/map/pc.c | 45 +++++++++++++++++++++++-------------------- src/map/skill.c | 2 ++ 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 ( 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 )."); + clif_displaymessage(fd, "Please, enter a type and a send flag (usage: @effect )."); 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;istatus.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; } -- cgit v1.2.3-60-g2f50