Resubmitting changes from /trunk to /branches/stable =p

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@405 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
celest 2004-11-28 20:34:22 +00:00
parent b2674befff
commit eade9859d8
5 changed files with 56 additions and 29 deletions

View File

@ -6,6 +6,13 @@ Date Added
* Changed Suilds Extention Skill to +6 people per level. [Lupus] * Changed Suilds Extention Skill to +6 people per level. [Lupus]
(tested it for 2 weeks! or a big server) (tested it for 2 weeks! or a big server)
* Added a fix for gettimeofday() for WIN32 [Codemaster] * 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 11/27
* Fixed a few map crashes when char-server crashes [Wizputer] * Fixed a few map crashes when char-server crashes [Wizputer]
* Added fix of 0x2aff and 0x2af8 flooding [Wizputer - thanks Toster] * Added fix of 0x2aff and 0x2af8 flooding [Wizputer - thanks Toster]

View File

@ -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. 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 Assigned: N/a
Progess: 0% 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%

View File

@ -2057,8 +2057,9 @@ static struct Damage battle_calc_pet_weapon_attack(
damage2 = damage2*(100+ 40*skill_lv)/100; damage2 = damage2*(100+ 40*skill_lv)/100;
break; break;
case MO_FINGEROFFENSIVE: //Žwe case MO_FINGEROFFENSIVE: //Žwe
damage = damage * (100 + 50 * skill_lv) / 100; damage = damage * (125 + 25 * skill_lv) / 100;
div_ = 1; div_ = 1;
flag=(flag&~BF_RANGEMASK)|BF_LONG; //orn
break; break;
case MO_INVESTIGATE: // ”­ ™¤ case MO_INVESTIGATE: // ”­ ™¤
if(def1 < 1000000) if(def1 < 1000000)
@ -2549,8 +2550,9 @@ static struct Damage battle_calc_mob_weapon_attack(
damage2 = damage2*(100+ 40*skill_lv)/100; damage2 = damage2*(100+ 40*skill_lv)/100;
break; break;
case MO_FINGEROFFENSIVE: //Žwe case MO_FINGEROFFENSIVE: //Žwe
damage = damage * (100 + 50 * skill_lv) / 100; damage = damage * (125 + 25 * skill_lv) / 100;
div_ = 1; div_ = 1;
flag=(flag&~BF_RANGEMASK)|BF_LONG; //orn
break; break;
case MO_INVESTIGATE: // ”­ ™¤ case MO_INVESTIGATE: // ”­ ™¤
if(def1 < 1000000) if(def1 < 1000000)
@ -3329,15 +3331,16 @@ static struct Damage battle_calc_pc_weapon_attack(
break; break;
case MO_FINGEROFFENSIVE: //Žwe case MO_FINGEROFFENSIVE: //Žwe
if(battle_config.finger_offensive_type == 0) { if(battle_config.finger_offensive_type == 0) {
damage = damage * (100 + 50 * skill_lv) / 100 * sd->spiritball_old; damage = damage * (125 + 25 * skill_lv) / 100 * sd->spiritball_old;
damage2 = damage2 * (100 + 50 * skill_lv) / 100 * sd->spiritball_old; damage2 = damage2 * (125 + 25 * skill_lv) / 100 * sd->spiritball_old;
div_ = sd->spiritball_old; div_ = sd->spiritball_old;
} }
else { else {
damage = damage * (100 + 50 * skill_lv) / 100; damage = damage * (125 + 25 * skill_lv) / 100;
damage2 = damage2 * (100 + 50 * skill_lv) / 100; damage2 = damage2 * (125 + 25 * skill_lv) / 100;
div_ = 1; div_ = 1;
} }
flag=(flag&~BF_RANGEMASK)|BF_LONG; //orn
break; break;
case MO_INVESTIGATE: // ”­ ™¤ case MO_INVESTIGATE: // ”­ ™¤
if(def1 < 1000000) { 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.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.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.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.min_hair_style = 0;
battle_config.max_hair_style = 20; battle_config.max_hair_style = 20;
battle_config.min_hair_color = 0; battle_config.min_hair_color = 0;
@ -5548,8 +5551,8 @@ void battle_validate_conf() {
battle_config.any_warp_GM_min_level = 100; battle_config.any_warp_GM_min_level = 100;
// at least 1 client must be accepted // at least 1 client must be accepted
if ((battle_config.packet_ver_flag & 63) == 0) // added by [Yor] if ((battle_config.packet_ver_flag & 511) == 0) // added by [Yor]
battle_config.packet_ver_flag = 63; // accept all clients battle_config.packet_ver_flag = 511; // accept all clients
if (battle_config.night_darkness_level > 10) // Celest if (battle_config.night_darkness_level > 10) // Celest
battle_config.night_darkness_level = 10; battle_config.night_darkness_level = 10;

View File

@ -31,6 +31,7 @@
#include "nullpo.h" #include "nullpo.h"
#include "atcommand.h" #include "atcommand.h"
#include "log.h" #include "log.h"
#include "showmsg.h"
#ifndef TXT_ONLY // mail system [Valaris] #ifndef TXT_ONLY // mail system [Valaris]
#include "mail.h" #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); fclose(fp);
} }
else if(battle_config.error_log) {
sprintf(buf, "%s not found\n", motd_txt);
ShowWarning (buf);
}
} }
#ifndef TXT_ONLY #ifndef TXT_ONLY
@ -5947,10 +5952,15 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper)
return 1; return 1;
// check if we are changing from 1st to 2nd job // check if we are changing from 1st to 2nd job
if (s_class.job > 0 && s_class.job < 7 && job >= 7 && job <= 21) if (job >= 7 && job <= 21) {
if (s_class.job > 0 && s_class.job < 7)
sd->change_level = sd->status.job_level; sd->change_level = sd->status.job_level;
else
sd->change_level = 40;
}
else else
sd->change_level = 0; sd->change_level = 0;
pc_setglobalreg (sd, "jobchange_level", sd->change_level); pc_setglobalreg (sd, "jobchange_level", sd->change_level);
sd->status.class = sd->view_class = b_class; 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) && if ((battle_config.natural_heal_weight_rate > 100 || sd->weight*100/sd->max_weight < battle_config.natural_heal_weight_rate) &&
!pc_isdead(sd) && !pc_isdead(sd) &&
!pc_ishiding(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 ) { sd->sc_data[SC_BERSERK].timer == -1 ) {
pc_natural_heal_hp(sd); pc_natural_heal_hp(sd);
if( sd->sc_data && sd->sc_data[SC_EXTREMITYFIST].timer == -1 && //阿修羅?態ではSPが回復しない if( sd->sc_data && sd->sc_data[SC_EXTREMITYFIST].timer == -1 && //阿修羅?態ではSPが回復しない

View File

@ -5965,7 +5965,8 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int
int type=SkillStatusChangeTable[sg->skill_id]; int type=SkillStatusChangeTable[sg->skill_id];
if(sg->src_id == bl->id) if(sg->src_id == bl->id)
break; break;
if(sc_data && sc_data[type].timer==-1) if(sc_data) {
if (sc_data[type].timer==-1)
skill_status_change_start(bl,type,sg->skill_lv,sg->val1,sg->val2, 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); (int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0);
else if( (unit2=(struct skill_unit *)sc_data[type].val4) && unit2 != src ){ else if( (unit2=(struct skill_unit *)sc_data[type].val4) && unit2 != src ){
@ -5974,6 +5975,7 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int
(int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0); (int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0);
ts->tick-=sg->interval; ts->tick-=sg->interval;
} }
}
} break; } break;
case 0xaa: /* イドゥンの林檎 */ case 0xaa: /* イドゥンの林檎 */