diff options
-rw-r--r-- | Changelog.txt | 7 | ||||
-rw-r--r-- | Dev/bugs.txt | 5 | ||||
-rw-r--r-- | src/map/battle.c | 21 | ||||
-rw-r--r-- | src/map/pc.c | 20 | ||||
-rw-r--r-- | src/map/skill.c | 32 |
5 files changed, 56 insertions, 29 deletions
diff --git a/Changelog.txt b/Changelog.txt index 689cd90eb..36d461626 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -6,6 +6,13 @@ Date Added * Changed Suilds Extention Skill to +6 people per level. [Lupus] (tested it for 2 weeks! or a big server) * Added a fix for gettimeofday() for WIN32 [Codemaster] + * skill Updates: + - Updated Slow Poison, modified checks for skill_unit_onplace abit. [celest] + - Updated Finger Offensive, thanks to orn [celest] + * Updated packet_ver_flag's default value, thanks to iscandium [celest] + * Added warning if motd.txt was not found [celest] + (Turn on error_log in battle_athena.conf to enable it) + 11/27 * Fixed a few map crashes when char-server crashes [Wizputer] * Added fix of 0x2aff and 0x2af8 flooding [Wizputer - thanks Toster] diff --git a/Dev/bugs.txt b/Dev/bugs.txt index 944e98837..81e707d07 100644 --- a/Dev/bugs.txt +++ b/Dev/bugs.txt @@ -83,3 +83,8 @@ http://eathena.deltaanime.net/forum/viewtopic.php?p=79951#79951) Problem: @disguise has no death sprite so the client crashes when you die, a solution would be that upon death before the sprites change you're undisguised. Assigned: N/a Progess: 0% + +Problem: Changing email and Broadcast both use the same packets / Packet 0x3000 assigned to changing email instead of broadcasting? +Notes: Refer to char.c line 2272 and line 2416, intif.c line 107, chrif.c line 377 +Assigned: N/A +Progress: 0% diff --git a/src/map/battle.c b/src/map/battle.c index 24547762d..00ca5a9e0 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2057,8 +2057,9 @@ static struct Damage battle_calc_pet_weapon_attack( damage2 = damage2*(100+ 40*skill_lv)/100; break; case MO_FINGEROFFENSIVE: //Žw’e - damage = damage * (100 + 50 * skill_lv) / 100; + damage = damage * (125 + 25 * skill_lv) / 100; div_ = 1; + flag=(flag&~BF_RANGEMASK)|BF_LONG; //orn break; case MO_INVESTIGATE: // ” ™¤ if(def1 < 1000000) @@ -2549,8 +2550,9 @@ static struct Damage battle_calc_mob_weapon_attack( damage2 = damage2*(100+ 40*skill_lv)/100; break; case MO_FINGEROFFENSIVE: //Žw’e - damage = damage * (100 + 50 * skill_lv) / 100; + damage = damage * (125 + 25 * skill_lv) / 100; div_ = 1; + flag=(flag&~BF_RANGEMASK)|BF_LONG; //orn break; case MO_INVESTIGATE: // ” ™¤ if(def1 < 1000000) @@ -3329,15 +3331,16 @@ static struct Damage battle_calc_pc_weapon_attack( break; case MO_FINGEROFFENSIVE: //Žw’e if(battle_config.finger_offensive_type == 0) { - damage = damage * (100 + 50 * skill_lv) / 100 * sd->spiritball_old; - damage2 = damage2 * (100 + 50 * skill_lv) / 100 * sd->spiritball_old; + damage = damage * (125 + 25 * skill_lv) / 100 * sd->spiritball_old; + damage2 = damage2 * (125 + 25 * skill_lv) / 100 * sd->spiritball_old; div_ = sd->spiritball_old; } else { - damage = damage * (100 + 50 * skill_lv) / 100; - damage2 = damage2 * (100 + 50 * skill_lv) / 100; + damage = damage * (125 + 25 * skill_lv) / 100; + damage2 = damage2 * (125 + 25 * skill_lv) / 100; div_ = 1; } + flag=(flag&~BF_RANGEMASK)|BF_LONG; //orn break; case MO_INVESTIGATE: // ” ™¤ if(def1 < 1000000) { @@ -5418,7 +5421,7 @@ void battle_set_defaults() { battle_config.ban_spoof_namer = 5; // added by [Yor] (default: 5 minutes) battle_config.hack_info_GM_level = 60; // added by [Yor] (default: 60, GM level) battle_config.any_warp_GM_min_level = 20; // added by [Yor] - battle_config.packet_ver_flag = 63; // added by [Yor] + battle_config.packet_ver_flag = 511; // added by [Yor] battle_config.min_hair_style = 0; battle_config.max_hair_style = 20; battle_config.min_hair_color = 0; @@ -5548,8 +5551,8 @@ void battle_validate_conf() { battle_config.any_warp_GM_min_level = 100; // at least 1 client must be accepted - if ((battle_config.packet_ver_flag & 63) == 0) // added by [Yor] - battle_config.packet_ver_flag = 63; // accept all clients + if ((battle_config.packet_ver_flag & 511) == 0) // added by [Yor] + battle_config.packet_ver_flag = 511; // accept all clients if (battle_config.night_darkness_level > 10) // Celest battle_config.night_darkness_level = 10; diff --git a/src/map/pc.c b/src/map/pc.c index 5ec5b8a1b..bbf40eae6 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -31,6 +31,7 @@ #include "nullpo.h" #include "atcommand.h" #include "log.h" +#include "showmsg.h" #ifndef TXT_ONLY // mail system [Valaris] #include "mail.h" @@ -841,6 +842,10 @@ int pc_authok(int id, int login_id2, time_t connect_until_time, struct mmo_chars } fclose(fp); } + else if(battle_config.error_log) { + sprintf(buf, "%s not found\n", motd_txt); + ShowWarning (buf); + } } #ifndef TXT_ONLY @@ -5947,10 +5952,15 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper) return 1; // check if we are changing from 1st to 2nd job - if (s_class.job > 0 && s_class.job < 7 && job >= 7 && job <= 21) - sd->change_level = sd->status.job_level; - else - sd->change_level = 0; + if (job >= 7 && job <= 21) { + if (s_class.job > 0 && s_class.job < 7) + sd->change_level = sd->status.job_level; + else + sd->change_level = 40; + } + else + sd->change_level = 0; + pc_setglobalreg (sd, "jobchange_level", sd->change_level); sd->status.class = sd->view_class = b_class; @@ -7341,7 +7351,7 @@ static int pc_natural_heal_sub(struct map_session_data *sd,va_list ap) { if ((battle_config.natural_heal_weight_rate > 100 || sd->weight*100/sd->max_weight < battle_config.natural_heal_weight_rate) && !pc_isdead(sd) && !pc_ishiding(sd) && - sd->sc_data[SC_POISON].timer == -1 && + !(sd->sc_data[SC_POISON].timer != -1 && sd->sc_data[SC_SLOWPOISON].timer == -1) && sd->sc_data[SC_BERSERK].timer == -1 ) { pc_natural_heal_hp(sd); if( sd->sc_data && sd->sc_data[SC_EXTREMITYFIST].timer == -1 && //ˆ¢C—…?‘Ô‚Å‚ÍSP‚ª‰ñ•œ‚µ‚È‚¢ diff --git a/src/map/skill.c b/src/map/skill.c index ed0521aec..dc708c906 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -2384,16 +2384,16 @@ int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int s { struct status_change *sc_data = battle_get_sc_data(src); - if(!battle_config.finger_offensive_type) - skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); - else { - skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); - if(sd) { - for(i=1;i<sd->spiritball_old;i++) - skill_addtimerskill(src,tick+i*200,bl->id,0,0,skillid,skilllv,BF_WEAPON,flag); - sd->canmove_tick = tick + (sd->spiritball_old-1)*200; + if(!battle_config.finger_offensive_type) + skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); + else { + skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); + if(sd) { + for(i=1;i<sd->spiritball_old;i++) + skill_addtimerskill(src,tick+i*200,bl->id,0,0,skillid,skilllv,BF_WEAPON,flag); + sd->canmove_tick = tick + (sd->spiritball_old-1)*200; + } } - } if(sc_data && sc_data[SC_BLADESTOP].timer != -1) skill_status_change_end(src,SC_BLADESTOP,-1); } @@ -5965,14 +5965,16 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int int type=SkillStatusChangeTable[sg->skill_id]; if(sg->src_id == bl->id) break; - if(sc_data && sc_data[type].timer==-1) - skill_status_change_start(bl,type,sg->skill_lv,sg->val1,sg->val2, - (int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0); - else if( (unit2=(struct skill_unit *)sc_data[type].val4) && unit2 != src ){ - if( unit2->group && DIFF_TICK(sg->tick,unit2->group->tick)>0 ) + if(sc_data) { + if (sc_data[type].timer==-1) skill_status_change_start(bl,type,sg->skill_lv,sg->val1,sg->val2, (int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0); - ts->tick-=sg->interval; + else if( (unit2=(struct skill_unit *)sc_data[type].val4) && unit2 != src ){ + if( unit2->group && DIFF_TICK(sg->tick,unit2->group->tick)>0 ) + skill_status_change_start(bl,type,sg->skill_lv,sg->val1,sg->val2, + (int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0); + ts->tick-=sg->interval; + } } } break; |