Browse Source

* Added bAddRace2
* Added mob_race2_db.txt
* Updated description for backup_txt in char_athena.conf a bit
* Added some suggestions by Poki#3
* Use the event names from script_athena.conf to check whenever a player event trigger is being read/set
* Removed an unused save/bank.txt

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@1131 54d463be-8e91-2dee-dedb-b68131a5f0ec

celest 20 years ago
parent
commit
25d104d8c4

+ 11 - 0
Changelog-SVN.txt

@@ -1,7 +1,18 @@
 Date	Added
 Date	Added
 
 
 02/18
 02/18
+        * Added bAddRace2 -- check item_bonus.txt [celest]
+        * Added mob_race2_db.txt -- contains 'main races' of certain monsters [celest]
+        * Updated description for backup_txt in char_athena.conf a bit [celest]
+        * Set read_map_from_cache to 2 (enable compression), and map_cache_file back to
+          saving in /db instead of /save, as suggested by Poki#3 [celest]
+        * Updated description for auto_counter_type, and set plaer_auto_counter_type
+          to 0 by default, as suggested by Poki#3 [celest]
+        * Use the event names from script_athena.conf to check whenever a player event
+          trigger is being read/set [celest]
+        * Removed an unused save/bank.txt [celest]
 	* Added some new cards effects. (check DB\changelog.txt) [Lupus]
 	* Added some new cards effects. (check DB\changelog.txt) [Lupus]
+
 02/17
 02/17
 	* Now all mobs have 10 drops slots. the last one is used for Cards Drops [Lupus]
 	* Now all mobs have 10 drops slots. the last one is used for Cards Drops [Lupus]
 	  Don't forget to update your SQL files (Drop Log: logs.sql and db_tables.sql
 	  Don't forget to update your SQL files (Drop Log: logs.sql and db_tables.sql

+ 2 - 2
conf-tmpl/battle_athena.conf

@@ -466,12 +466,12 @@ save_clothcolor: yes
 // 2 = both
 // 2 = both
 undead_detect_type: 2
 undead_detect_type: 2
 
 
-// Operational mode of automatic counter.
+// Counter Attack Skill Type
 // 0 = 100% critical
 // 0 = 100% critical
 // 1 = disregard DEF and HIT+20, CRI*2
 // 1 = disregard DEF and HIT+20, CRI*2
 // 2 = Same as 0, but can counter skills (?)
 // 2 = Same as 0, but can counter skills (?)
 // Players
 // Players
-player_auto_counter_type: 1
+player_auto_counter_type: 0
 // Monsters
 // Monsters
 monster_auto_counter_type: 0
 monster_auto_counter_type: 0
 
 

+ 1 - 1
conf-tmpl/char_athena.conf

@@ -84,7 +84,7 @@ char_txt: save/athena.txt
 // default is 'no', because backup file take time for nothing. Actually, there is no problem on characters file creation and save.
 // default is 'no', because backup file take time for nothing. Actually, there is no problem on characters file creation and save.
 backup_txt_flag: no
 backup_txt_flag: no
 
 
-// Character server flatfile database (backup)
+// Character server flatfile database (backup, TXT only)
 backup_txt: save/athena_backup.txt
 backup_txt: save/athena_backup.txt
 
 
 // Friends list flatfile database
 // Friends list flatfile database

+ 2 - 2
conf-tmpl/map_athena.conf

@@ -57,10 +57,10 @@ map_port: 5121
 // It is possible to reduce the map cache to 1MB for 400+ maps with compression
 // It is possible to reduce the map cache to 1MB for 400+ maps with compression
 // enabled. If all maps are already loaded in the cache, Athena can boot without
 // enabled. If all maps are already loaded in the cache, Athena can boot without
 // reading the grf files.
 // reading the grf files.
-read_map_from_cache: 1
+read_map_from_cache: 2
 //
 //
 //Where is the bitmap file stored?
 //Where is the bitmap file stored?
-map_cache_file: save/mapinfo.txt
+map_cache_file: db/mapinfo.txt
 
 
 // Console Commands
 // Console Commands
 // Allow for console commands to be used on/off
 // Allow for console commands to be used on/off

+ 2 - 0
db/Changelog.txt

@@ -6,6 +6,8 @@
 	Skill databases == celest working on them i believe.
 	Skill databases == celest working on them i believe.
 
 
 02/18
 02/18
+        * Changed Goblin Leader Card to using bAddRace2 -- each player can only save
+          10 AddDamageClass, so this would save some space for other cards ^^ [celest]
 	* Started adding new cards effects. Also big thanks to Landarma [Lupus]
 	* Started adding new cards effects. Also big thanks to Landarma [Lupus]
 
 
 02/17
 02/17

+ 1 - 0
db/const.txt

@@ -245,6 +245,7 @@ bAddDamageByClass	2020
 bSPGainValue	2021
 bSPGainValue	2021
 bIgnoreDefMob	2022
 bIgnoreDefMob	2022
 bHPLossRate	2023
 bHPLossRate	2023
+bAddRace2	2024
 
 
 
 
 Eff_Stone	0
 Eff_Stone	0

+ 1 - 1
db/item_db.txt

@@ -1185,7 +1185,7 @@
 4152,Galapago_Card,Galapago Card,6,20,0,10,,,,,,,,,,,{},{}
 4152,Galapago_Card,Galapago Card,6,20,0,10,,,,,,,,,,,{},{}
 4153,Crab_Card,Crab Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bAtk,5; bonus2 bAddDamageClass,1266,30; bonus2 bAddEle,4,30; if(isequipped(4247,4273)) bonus3 bAddMonsterDropItem,544,5,3000; }
 4153,Crab_Card,Crab Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bAtk,5; bonus2 bAddDamageClass,1266,30; bonus2 bAddEle,4,30; if(isequipped(4247,4273)) bonus3 bAddMonsterDropItem,544,5,3000; }
 4154,Dumpling_Child_Card,Dumpling Child Card,6,20,0,10,,,,,,,,,,,{},{}
 4154,Dumpling_Child_Card,Dumpling Child Card,6,20,0,10,,,,,,,,,,,{},{}
-4155,Goblin_Leader_Card,Goblin Leader Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddDamageClass,1122,30; bonus2 bAddDamageClass,1123,30; bonus2 bAddDamageClass,1124,30; bonus2 bAddDamageClass,1125,30; bonus2 bAddDamageClass,1126,30; bAddDamageClass,1245,30; bAddDamageClass,1258,30; bAddDamageClass,1280,30; bAddDamageClass,1299,30; bAddDamageClass,1308,30; }
+4155,Goblin_Leader_Card,Goblin Leader Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddRace2,1,30; }
 4156,Goblin_Steamrider_Card,Goblin Steamrider Card,6,20,0,10,,,,,,,2,,,,{},{}
 4156,Goblin_Steamrider_Card,Goblin Steamrider Card,6,20,0,10,,,,,,,2,,,,{},{}
 4157,Goblin_Archer_Card,Goblin Archer Card,6,20,0,10,,,,,,,2,,,,{},{}
 4157,Goblin_Archer_Card,Goblin Archer Card,6,20,0,10,,,,,,,2,,,,{},{}
 4158,Sky_Deleter_Card,Sky Deleter Card,6,20,0,10,,,,,,,16,,,,{},{}
 4158,Sky_Deleter_Card,Sky Deleter Card,6,20,0,10,,,,,,,16,,,,{},{}

+ 6 - 0
db/mob_race2_db.txt

@@ -0,0 +1,6 @@
+// RACE,Mob ID1,Mob ID2,Mob ID3,...,Mob ID9
+1,1122,1123,1124,1125,1126,1245,1258,1280,1308	// Goblins
+2,1133,1134,1135,1136,1137,1226,1282,1455	// Kobolds
+3,1023,1152,1153,1177,1189,1213,1273		// Orcs
+4,1040,1278,1366,1497				// Golems
+5,1285,1286,1287				// Guardians

+ 2 - 0
doc/item_bonus.txt

@@ -157,6 +157,8 @@ bonus2 bAddEffWhenHit,n,x;		n% chance to cause x state to the enemy when
 bonus2 bSkillAtk,n,x;			Increase damage of skill n by x%
 bonus2 bSkillAtk,n,x;			Increase damage of skill n by x%
 bonus2 bAddDamageByClass,n,x;		When being hit by monster of class n increase
 bonus2 bAddDamageByClass,n,x;		When being hit by monster of class n increase
                                         damage taken by x%
                                         damage taken by x%
+bonus2 bAddRace2,n,x;			Increase damage by x% vs. enemies of race n
+                                        (Check db/mob_race2_db.txt)
 
 
 bonus3 bHPLossRate,n,x,y;		Lose n amount of hp every x amount of time
 bonus3 bHPLossRate,n,x,y;		Lose n amount of hp every x amount of time
                                         y:0=Don't show damage 1=Show damage
                                         y:0=Don't show damage 1=Show damage

+ 0 - 0
save-tmpl/bank.txt


+ 13 - 7
src/map/battle.c

@@ -1617,6 +1617,7 @@ static struct Damage battle_calc_pc_weapon_attack(
 	int damage,damage2,damage3=0,damage4=0,type,div_,blewcount=skill_get_blewcount(skill_num,skill_lv);
 	int damage,damage2,damage3=0,damage4=0,type,div_,blewcount=skill_get_blewcount(skill_num,skill_lv);
 	int flag,skill,dmg_lv = 0;
 	int flag,skill,dmg_lv = 0;
 	int t_mode=0,t_race=0,t_size=1,s_race=7,s_ele=0;
 	int t_mode=0,t_race=0,t_size=1,s_race=7,s_ele=0;
+	int t_race2=0;
 	struct status_change *sc_data,*t_sc_data;
 	struct status_change *sc_data,*t_sc_data;
 	short *sc_count;
 	short *sc_count;
 	short *option, *opt1, *opt2;
 	short *option, *opt1, *opt2;
@@ -1644,6 +1645,7 @@ static struct Damage battle_calc_pc_weapon_attack(
 	option=status_get_option(src); //鷹とかペコとかカートとか
 	option=status_get_option(src); //鷹とかペコとかカートとか
 	opt1=status_get_opt1(src); //石化、凍結、スタン、睡眠、暗闇
 	opt1=status_get_opt1(src); //石化、凍結、スタン、睡眠、暗闇
 	opt2=status_get_opt2(src); //毒、呪い、沈黙、暗闇?
 	opt2=status_get_opt2(src); //毒、呪い、沈黙、暗闇?
+	t_race2=status_get_race2(target);
 
 
 	if(skill_num != CR_GRANDCROSS) //グランドクロスでないなら
 	if(skill_num != CR_GRANDCROSS) //グランドクロスでないなら
 		sd->state.attack_type = BF_WEAPON; //攻撃タイプは武器攻撃
 		sd->state.attack_type = BF_WEAPON; //攻撃タイプは武器攻撃
@@ -2517,17 +2519,20 @@ static struct Damage battle_calc_pc_weapon_attack(
 			cardfix=cardfix*(100+sd->addrace[t_race])/100;	// 種族によるダメージ修正
 			cardfix=cardfix*(100+sd->addrace[t_race])/100;	// 種族によるダメージ修正
 			cardfix=cardfix*(100+sd->addele[t_ele])/100;	// 属性によるダメージ修正
 			cardfix=cardfix*(100+sd->addele[t_ele])/100;	// 属性によるダメージ修正
 			cardfix=cardfix*(100+sd->addsize[t_size])/100;	// サイズによるダメージ修正
 			cardfix=cardfix*(100+sd->addsize[t_size])/100;	// サイズによるダメージ修正
+			cardfix=cardfix*(100+sd->addrace2[t_race2])/100;
 		}
 		}
 		else {
 		else {
 			cardfix=cardfix*(100+sd->addrace[t_race]+sd->addrace_[t_race])/100;	// 種族によるダメージ修正(左手による追加あり)
 			cardfix=cardfix*(100+sd->addrace[t_race]+sd->addrace_[t_race])/100;	// 種族によるダメージ修正(左手による追加あり)
 			cardfix=cardfix*(100+sd->addele[t_ele]+sd->addele_[t_ele])/100;	// 属性によるダメージ修正(左手による追加あり)
 			cardfix=cardfix*(100+sd->addele[t_ele]+sd->addele_[t_ele])/100;	// 属性によるダメージ修正(左手による追加あり)
 			cardfix=cardfix*(100+sd->addsize[t_size]+sd->addsize_[t_size])/100;	// サイズによるダメージ修正(左手による追加あり)
 			cardfix=cardfix*(100+sd->addsize[t_size]+sd->addsize_[t_size])/100;	// サイズによるダメージ修正(左手による追加あり)
+			cardfix=cardfix*(100+sd->addrace2[t_race2]+sd->addrace2_[t_race2])/100;
 		}
 		}
 	}
 	}
 	else { //弓矢
 	else { //弓矢
 		cardfix=cardfix*(100+sd->addrace[t_race]+sd->arrow_addrace[t_race])/100;	// 種族によるダメージ修正(弓矢による追加あり)
 		cardfix=cardfix*(100+sd->addrace[t_race]+sd->arrow_addrace[t_race])/100;	// 種族によるダメージ修正(弓矢による追加あり)
 		cardfix=cardfix*(100+sd->addele[t_ele]+sd->arrow_addele[t_ele])/100;	// 属性によるダメージ修正(弓矢による追加あり)
 		cardfix=cardfix*(100+sd->addele[t_ele]+sd->arrow_addele[t_ele])/100;	// 属性によるダメージ修正(弓矢による追加あり)
 		cardfix=cardfix*(100+sd->addsize[t_size]+sd->arrow_addsize[t_size])/100;	// サイズによるダメージ修正(弓矢による追加あり)
 		cardfix=cardfix*(100+sd->addsize[t_size]+sd->arrow_addsize[t_size])/100;	// サイズによるダメージ修正(弓矢による追加あり)
+		cardfix=cardfix*(100+sd->addrace2[t_race2])/100;
 	}
 	}
 	if(t_mode & 0x20) { //ボス
 	if(t_mode & 0x20) { //ボス
 		if(!sd->state.arrow_atk) { //弓矢攻撃以外なら
 		if(!sd->state.arrow_atk) { //弓矢攻撃以外なら
@@ -2567,6 +2572,7 @@ static struct Damage battle_calc_pc_weapon_attack(
 		cardfix=cardfix*(100+sd->addrace_[t_race])/100;	// 種族によるダメージ修正左手
 		cardfix=cardfix*(100+sd->addrace_[t_race])/100;	// 種族によるダメージ修正左手
 		cardfix=cardfix*(100+sd->addele_[t_ele])/100;	// 属 性によるダメージ修正左手
 		cardfix=cardfix*(100+sd->addele_[t_ele])/100;	// 属 性によるダメージ修正左手
 		cardfix=cardfix*(100+sd->addsize_[t_size])/100;	// サイズによるダメージ修正左手
 		cardfix=cardfix*(100+sd->addsize_[t_size])/100;	// サイズによるダメージ修正左手
+		cardfix=cardfix*(100+sd->addrace2_[t_race2])/100;
 		if(t_mode & 0x20) //ボス
 		if(t_mode & 0x20) //ボス
 			cardfix=cardfix*(100+sd->addrace_[10])/100; //ボスモンスターに追加ダメージ左手
 			cardfix=cardfix*(100+sd->addrace_[10])/100; //ボスモンスターに追加ダメージ左手
 		else
 		else
@@ -2580,8 +2586,8 @@ static struct Damage battle_calc_pc_weapon_attack(
 		}
 		}
 	}
 	}
 	if(!no_cardfix)
 	if(!no_cardfix)
-
 		damage2=damage2*cardfix/100;
 		damage2=damage2*cardfix/100;
+
 //カード補正による左手ダメージ増加
 //カード補正による左手ダメージ増加
 //カードによるダメージ増加処理(左手)ここまで
 //カードによるダメージ増加処理(左手)ここまで
 
 
@@ -2629,14 +2635,14 @@ static struct Damage battle_calc_pc_weapon_attack(
 		}
 		}
 		if(t_sc_data[SC_ASSUMPTIO].timer != -1){ //アスムプティオ
 		if(t_sc_data[SC_ASSUMPTIO].timer != -1){ //アスムプティオ
 			if(!map[target->m].flag.pvp){
 			if(!map[target->m].flag.pvp){
-			damage=damage/3;
-			damage2=damage2/3;
-		}else{
-			damage=damage/2;
-			damage2=damage2/2;
+				damage=damage/3;
+				damage2=damage2/3;
+			}else{
+				damage=damage/2;
+				damage2=damage2/2;
+			}
 		}
 		}
 	}
 	}
-	}
 //対象にステータス異常がある場合のダメージ減算処理ここまで
 //対象にステータス異常がある場合のダメージ減算処理ここまで
 
 
 	if(damage < 0) damage = 0;
 	if(damage < 0) damage = 0;

+ 2 - 1
src/map/map.h

@@ -289,6 +289,7 @@ struct map_session_data {
 	short ignore_def_mob, ignore_def_mob_;
 	short ignore_def_mob, ignore_def_mob_;
 	int hp_loss_tick, hp_loss_rate;
 	int hp_loss_tick, hp_loss_rate;
 	short hp_loss_value, hp_loss_type;
 	short hp_loss_value, hp_loss_type;
+	int addrace2[6],addrace2_[6];
 
 
 	short spiritball, spiritball_old;
 	short spiritball, spiritball_old;
 	int spirit_timer[MAX_SKILL_LEVEL];
 	int spirit_timer[MAX_SKILL_LEVEL];
@@ -630,7 +631,7 @@ enum {
 
 
 	SP_CRIT_ATK_RATE, SP_CRITICAL_ADDRACE, SP_NO_REGEN, SP_ADDEFF_WHENHIT, SP_AUTOSPELL_WHENHIT, // 2013-2017
 	SP_CRIT_ATK_RATE, SP_CRITICAL_ADDRACE, SP_NO_REGEN, SP_ADDEFF_WHENHIT, SP_AUTOSPELL_WHENHIT, // 2013-2017
 	SP_SKILL_ATK, SP_UNSTRIPABLE, SP_ADD_DAMAGE_BY_CLASS, // 2018-2020
 	SP_SKILL_ATK, SP_UNSTRIPABLE, SP_ADD_DAMAGE_BY_CLASS, // 2018-2020
-	SP_SP_GAIN_VALUE, SP_IGNORE_DEF_MOB, SP_HP_LOSS_RATE // 2021-2023
+	SP_SP_GAIN_VALUE, SP_IGNORE_DEF_MOB, SP_HP_LOSS_RATE, SP_ADDRACE2 // 2021-2023
 };
 };
 
 
 enum {
 enum {

+ 52 - 1
src/map/mob.c

@@ -35,7 +35,6 @@
 #define MAX_MOB_DB 2000		/* Change this to increase the table size in your mob_db to accomodate
 #define MAX_MOB_DB 2000		/* Change this to increase the table size in your mob_db to accomodate
 								numbers more than 2000 for mobs if you want to (and know what you're doing).
 								numbers more than 2000 for mobs if you want to (and know what you're doing).
 								Be sure to note that 4001 to 4047 are for advanced classes. */
 								Be sure to note that 4001 to 4047 are for advanced classes. */
-
 struct mob_db mob_db[2001];
 struct mob_db mob_db[2001];
 
 
 #define CLASSCHANGE_BOSS_NUM 21
 #define CLASSCHANGE_BOSS_NUM 21
@@ -4318,6 +4317,57 @@ static int mob_readskilldb(void)
 	}
 	}
 	return 0;
 	return 0;
 }
 }
+/*==========================================
+ * db/mob_race_db.txt reading
+ *------------------------------------------
+ */
+static int mob_readdb_race(void)
+{
+	FILE *fp;
+	char line[1024];
+	int race,j,k;
+	char *str[20],*p,*np;
+
+	if( (fp=fopen("db/mob_race2_db.txt","r"))==NULL ){
+		printf("can't read db/mob_race2_db.txt\n");
+		return -1;
+	}
+	
+	while(fgets(line,1020,fp)){
+		if(line[0]=='/' && line[1]=='/')
+			continue;
+		memset(str,0,sizeof(str));
+
+		for(j=0,p=line;j<12;j++){
+			if((np=strchr(p,','))!=NULL){
+				str[j]=p;
+				*np=0;
+				p=np+1;
+			} else
+				str[j]=p;
+		}
+		if(str[0]==NULL)
+			continue;
+
+		race=atoi(str[0]);
+		if (race < 0 || race >= MAX_MOB_RACE_DB)
+			continue;
+
+		for (j=1; j<20; j++) {
+			if (!str[j])
+				break;
+			k=atoi(str[j]);
+			if (k < 1000 || k > MAX_MOB_DB)
+				continue;
+			mob_db[k].race2 = race;
+			//mob_race_db[race][j] = k;
+		}
+	}
+	fclose(fp);
+	sprintf(tmp_output,"Done reading '"CL_WHITE"%s"CL_RESET"'.\n","db/mob_race2_db.txt");
+	ShowStatus(tmp_output);
+	return 0;
+}
 
 
 void mob_reload(void)
 void mob_reload(void)
 {
 {
@@ -4495,6 +4545,7 @@ int do_init_mob(void)
 	mob_readdb_mobavail();
 	mob_readdb_mobavail();
 	mob_read_randommonster();
 	mob_read_randommonster();
 	mob_readskilldb();
 	mob_readskilldb();
+	mob_readdb_race();
 
 
 	add_timer_func_list(mob_timer,"mob_timer");
 	add_timer_func_list(mob_timer,"mob_timer");
 	add_timer_func_list(mob_delayspawn,"mob_delayspawn");
 	add_timer_func_list(mob_delayspawn,"mob_delayspawn");

+ 2 - 0
src/map/mob.h

@@ -3,6 +3,7 @@
 #define _MOB_H_
 #define _MOB_H_
 
 
 #define MAX_RANDOMMONSTER 3
 #define MAX_RANDOMMONSTER 3
+#define MAX_MOB_RACE_DB 6
 
 
 struct mob_skill {
 struct mob_skill {
 	short state;
 	short state;
@@ -26,6 +27,7 @@ struct mob_db {
 	int str,agi,vit,int_,dex,luk;
 	int str,agi,vit,int_,dex,luk;
 	int range,range2,range3;
 	int range,range2,range3;
 	int size,race,element,mode;
 	int size,race,element,mode;
+	short race2;	// celest
 	int speed,adelay,amotion,dmotion;
 	int speed,adelay,amotion,dmotion;
 	int mexp,mexpper;
 	int mexp,mexpper;
 	struct { int nameid,p; } dropitem[10]; //8 -> 10 Lupus
 	struct { int nameid,p; } dropitem[10]; //8 -> 10 Lupus

+ 14 - 6
src/map/pc.c

@@ -809,9 +809,9 @@ int pc_authok(int id, int login_id2, time_t connect_until_time, struct mmo_chars
 
 
 	// Automated script events
 	// Automated script events
 	if (script_config.event_requires_trigger) {
 	if (script_config.event_requires_trigger) {
-		sd->state.event_death = pc_readglobalreg(sd,"PCDieEvent");
-		sd->state.event_kill = pc_readglobalreg(sd,"PCKillEvent");
-		sd->state.event_disconnect = pc_readglobalreg(sd,"PCLogoffEvent");
+		sd->state.event_death = pc_readglobalreg(sd, script_config.die_event_name);
+		sd->state.event_kill = pc_readglobalreg(sd, script_config.kill_event_name);
+		sd->state.event_disconnect = pc_readglobalreg(sd, script_config.logout_event_name);
 	// if script triggers are not required
 	// if script triggers are not required
 	} else {
 	} else {
 		sd->state.event_death = 1;
 		sd->state.event_death = 1;
@@ -1839,6 +1839,14 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
 			sd->hp_loss_rate = val;
 			sd->hp_loss_rate = val;
 		}
 		}
 		break;
 		break;
+	case SP_ADDRACE2:
+		if (type2 > 0 && type2 < MAX_MOB_RACE_DB)
+			break;
+		if(sd->state.lr_flag != 2)
+			sd->addrace2[type2] += val;
+		else
+			sd->addrace2_[type2] += val;
+		break;
 
 
 	default:
 	default:
 		if(battle_config.error_log)
 		if(battle_config.error_log)
@@ -5560,11 +5568,11 @@ int pc_setglobalreg(struct map_session_data *sd,char *reg,int val)
 	if(strcmp(reg,"PC_DIE_COUNTER") == 0 && sd->die_counter != val){
 	if(strcmp(reg,"PC_DIE_COUNTER") == 0 && sd->die_counter != val){
 		sd->die_counter = val;
 		sd->die_counter = val;
 		status_calc_pc(sd,0);
 		status_calc_pc(sd,0);
-	} else if(strcmp(reg,"PCDieEvent") == 0){
+	} else if(strcmp(reg,script_config.die_event_name) == 0){
 		sd->state.event_death = val;
 		sd->state.event_death = val;
-	} else if(strcmp(reg,"PCKillEvent") == 0){
+	} else if(strcmp(reg,script_config.kill_event_name) == 0){
 		sd->state.event_kill = val;
 		sd->state.event_kill = val;
-	} else if(strcmp(reg,"PCLogoutEvent") == 0){
+	} else if(strcmp(reg,script_config.logout_event_name) == 0){
 		sd->state.event_disconnect = val;
 		sd->state.event_disconnect = val;
 	}
 	}
 
 

+ 12 - 0
src/map/status.c

@@ -510,6 +510,8 @@ int status_calc_pc(struct map_session_data* sd,int first)
 	sd->sp_gain_value = 0;
 	sd->sp_gain_value = 0;
 	sd->ignore_def_mob = sd->ignore_def_mob_ = 0;
 	sd->ignore_def_mob = sd->ignore_def_mob_ = 0;
 	sd->hp_loss_rate = sd->hp_loss_value = sd->hp_loss_type = 0;
 	sd->hp_loss_rate = sd->hp_loss_value = sd->hp_loss_type = 0;
+	memset(sd->addrace2,0,sizeof(sd->addrace2));
+	memset(sd->addrace2_,0,sizeof(sd->addrace2_));
 
 
 	if(!sd->disguiseflag && sd->disguise) {
 	if(!sd->disguiseflag && sd->disguise) {
 		sd->disguise=0;
 		sd->disguise=0;
@@ -2812,6 +2814,16 @@ int status_get_mexp(struct block_list *bl)
 	else
 	else
 		return 0;
 		return 0;
 }
 }
+int status_get_race2(struct block_list *bl)
+{
+	nullpo_retr(0, bl);
+	if(bl->type == BL_MOB && (struct mob_data *)bl)
+		return mob_db[((struct mob_data *)bl)->class_].race2;
+	else if(bl->type==BL_PET && (struct pet_data *)bl)
+		return mob_db[((struct pet_data *)bl)->class_].race2;
+	else
+		return 0;
+}
 
 
 // StatusChangeŒn‚Ì�Š“¾
 // StatusChangeŒn‚Ì�Š“¾
 struct status_change *status_get_sc_data(struct block_list *bl)
 struct status_change *status_get_sc_data(struct block_list *bl)

+ 1 - 0
src/map/status.h

@@ -240,6 +240,7 @@ int status_get_race(struct block_list *bl);
 int status_get_size(struct block_list *bl);
 int status_get_size(struct block_list *bl);
 int status_get_mode(struct block_list *bl);
 int status_get_mode(struct block_list *bl);
 int status_get_mexp(struct block_list *bl);
 int status_get_mexp(struct block_list *bl);
+int status_get_race2(struct block_list *bl);
 
 
 struct status_change *status_get_sc_data(struct block_list *bl);
 struct status_change *status_get_sc_data(struct block_list *bl);
 short *status_get_sc_count(struct block_list *bl);
 short *status_get_sc_count(struct block_list *bl);