summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/map')
-rw-r--r--src/map/battle.c7
-rw-r--r--src/map/battle.h1
-rw-r--r--src/map/map.h2
-rw-r--r--src/map/mob.c2
-rw-r--r--src/map/pc.c15
5 files changed, 23 insertions, 4 deletions
diff --git a/src/map/battle.c b/src/map/battle.c
index 60e038fd0..f82e60cd2 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -5325,7 +5325,8 @@ static const struct {
{ "motd_type", &battle_config.motd_type}, // [celest]
{ "allow_atcommand_when_mute", &battle_config.allow_atcommand_when_mute}, // [celest]
{ "finding_ore_rate", &battle_config.finding_ore_rate}, // [celest]
- { "exp_calc_type", &battle_config.exp_calc_type}, // [celest]
+ { "exp_calc_type", &battle_config.exp_calc_type}, // [celest]
+ { "double_login_system", &battle_config.double_login_system}, // [celest]
//SQL-only options start
#ifndef TXT_ONLY
@@ -5586,6 +5587,7 @@ void battle_set_defaults() {
battle_config.castrate_dex_scale = 150;
battle_config.area_size = 14;
battle_config.exp_calc_type = 1;
+ battle_config.double_login_system = 0;
//SQL-only options start
#ifndef TXT_ONLY
@@ -5723,6 +5725,9 @@ void battle_validate_conf() {
if (battle_config.vending_max_value > 10000000 || battle_config.vending_max_value<=0) // Lupus & Kobra_k88
battle_config.vending_max_value = 10000000;
+ if (battle_config.double_login_system < 0)
+ battle_config.double_login_system = 0;
+
}
/*==========================================
diff --git a/src/map/battle.h b/src/map/battle.h
index 021346294..29b537080 100644
--- a/src/map/battle.h
+++ b/src/map/battle.h
@@ -357,6 +357,7 @@ extern struct Battle_Config {
int allow_atcommand_when_mute; // [celest]
int finding_ore_rate; // orn
int exp_calc_type;
+ int double_login_system;
#ifndef TXT_ONLY /* SQL-only options */
int mail_system; // [Valaris]
diff --git a/src/map/map.h b/src/map/map.h
index 812785f13..7f3fa5d71 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -16,7 +16,7 @@
#define LIFETIME_FLOORITEM 60
#define DAMAGELOG_SIZE 30
#define LOOTITEM_SIZE 10
-#define MAX_SKILL_LEVEL 10
+#define MAX_SKILL_LEVEL 20
#define MAX_STATUSCHANGE 210
#define MAX_SKILLUNITGROUP 32
#define MAX_MOBSKILLUNITGROUP 8
diff --git a/src/map/mob.c b/src/map/mob.c
index 4f80c23bb..21ec6c585 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -2298,7 +2298,7 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
mobskill_use_id(md,&md->bl,skillidx);//自爆詠唱開始
md->state.special_mob_ai++;
}
- if (md->master_id==src->id)
+ if (src && md->master_id==src->id)
md->target_dir=map_calc_dir(src,md->bl.x,md->bl.y)+1;
}
diff --git a/src/map/pc.c b/src/map/pc.c
index 8f2ce5654..adc2d68da 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -720,8 +720,14 @@ int pc_authok(int id, int login_id2, time_t connect_until_time, struct mmo_chars
sd = map_id2sd(id);
nullpo_retr(1, sd);
+ // check if double login occured
+ if(sd->new_fd){
+ // 2重login状態だったので、両方落す
+ clif_authfail_fd(sd->fd,2); // same id
+ clif_authfail_fd(sd->new_fd,8); // same id
+ return 1;
+ }
sd->login_id2 = login_id2;
-
memcpy(&sd->status, st, sizeof(*st));
if (sd->status.sex != sd->sex) {
@@ -945,6 +951,13 @@ int pc_authfail(int id) {
if (sd == NULL)
return 1;
+ if(sd->new_fd){
+ // 2重login状態だったので、新しい接続のみ落す
+ clif_authfail_fd(sd->new_fd,0);
+ sd->new_fd=0;
+ return 0;
+ }
+
clif_authfail_fd(sd->fd, 0);
return 0;