Quellcode durchsuchen

- Updated Box of thunder to use "agi up" effect for 30 secs instead of NPC Agi Up for 20.
- Guild expulsion now will fail when the character to be kicked is in a guild castle (rather than checking for the character doing the expulsion)
- pk damage reduction settings now will take effect only on Player VS player damage.
- Fixed produce_db2.txt entries overwriting produce_db.txt ones.
- Fixed item-granted/plagiarized skills unlocking skill trees when only your real learned level should.


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

skotlex vor 18 Jahren
Ursprung
Commit
d403e06178
9 geänderte Dateien mit 50 neuen und 16 gelöschten Zeilen
  1. 8 0
      Changelog-Trunk.txt
  2. 2 0
      db/Changelog.txt
  3. 1 1
      db/item_db.txt
  4. 1 1
      sql-files/item_db.sql
  5. 0 1
      src/char_sql/char.c
  6. 1 1
      src/map/battle.c
  7. 8 1
      src/map/guild.c
  8. 28 10
      src/map/pc.c
  9. 1 1
      src/map/skill.c

+ 8 - 0
Changelog-Trunk.txt

@@ -3,6 +3,14 @@ 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.
 
+2007/02/23
+	* Guild expulsion now will fail when the character to be kicked is in a
+	  guild castle (rather than checking for the character doing the expulsion)
+	* pk damage reduction settings now will take effect only on Player VS
+	  player damage.
+	* Fixed produce_db2.txt entries overwriting produce_db.txt ones.
+	* Fixed item-granted/plagiarized skills unlocking skill trees when only
+	  your real learned level should. [Skotlex]
 2007/02/21
 	* Applied a consistent look to all header files (copyright, ifdefs)
 	* Minor stuff (typos, socket.c, junk in login reply packet) [ultramage]

+ 2 - 0
db/Changelog.txt

@@ -20,6 +20,8 @@
 
 ========================
 02/23
+	* Updated Box of thunder to use "agi up" effect for 30 secs instead of NPC
+	  Agi Up for 20. [Skotlex]
 	* Added and fixed some etc items [Playtester]
 02/13
 	* Fixed Bacsojin's mob id in mob_boss [Playtester]

+ 1 - 1
db/item_db.txt

@@ -2495,7 +2495,7 @@
 12026,Egg_Girl,Dano Festival Egg,2,,10,200,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 // Effect Boxes
 12027,Giggling_Box,Giggling Box,2,,500,200,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 9,0; if(rand(100)<30) sc_start SC_Curse,30000,0; },{},{}
-12028,Box_Of_Thunder,Box of Thunder,2,,500,200,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_SpeedUp1,20000,0; },{},{}
+12028,Box_Of_Thunder,Box of Thunder,2,,500,200,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_SpeedUp0,30000,0; },{},{}
 12029,Gloomy_Box,Box of Gloom,11,,500,200,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill 45,1,"Improve Concentration"; },{},{}
 12030,Box_Of_Grudge,Box of Resentment,2,,500,200,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_ATKPOTION,60000,20; },{},{}
 12031,Sleepy_Box,Box of Drowsiness,2,,500,200,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_MATKPOTION,60000,20; },{},{}

+ 1 - 1
sql-files/item_db.sql

@@ -2510,7 +2510,7 @@ REPLACE INTO `item_db` VALUES (12025,'Egg_Boy','Dano Festival Egg',2,NULL,10,200
 REPLACE INTO `item_db` VALUES (12026,'Egg_Girl','Dano Festival Egg',2,NULL,10,200,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 # // Effect Boxes
 REPLACE INTO `item_db` VALUES (12027,'Giggling_Box','Giggling Box',2,NULL,500,200,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,' percentheal 9,0; if(rand(100)<30) sc_start SC_Curse,30000,0; ',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12028,'Box_Of_Thunder','Box of Thunder',2,NULL,500,200,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,' sc_start SC_SpeedUp1,20000,0; ',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12028,'Box_Of_Thunder','Box of Thunder',2,NULL,500,200,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,' sc_start SC_SpeedUp0,30000,0; ',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12029,'Gloomy_Box','Box of Gloom',11,NULL,500,200,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,' itemskill 45,1,"Improve Concentration"; ',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12030,'Box_Of_Grudge','Box of Resentment',2,NULL,500,200,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,' sc_start SC_ATKPOTION,60000,20; ',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12031,'Sleepy_Box','Box of Drowsiness',2,NULL,500,200,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,' sc_start SC_MATKPOTION,60000,20; ',NULL,NULL);

+ 0 - 1
src/char_sql/char.c

@@ -1742,7 +1742,6 @@ int mmo_char_tobuf(uint8* buf, struct mmo_charstatus *p, int new_charscreen)
 
 int mmo_char_send006b(int fd, struct char_session_data *sd) {
 	int i, j, found_num = 0;
-	struct mmo_charstatus *p = NULL;
 
 	set_char_online(-1, 99,sd->account_id);
 

+ 1 - 1
src/map/battle.c

@@ -486,7 +486,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
 	if (sc && sc->count) {
 	}
 */	
-	if (battle_config.pk_mode && sd && damage)
+	if (battle_config.pk_mode && sd && bl->type == BL_PC && damage)
   	{
 		if (flag & BF_SKILL) { //Skills get a different reduction than non-skills. [Skotlex]
 			if (flag&BF_WEAPON)

+ 8 - 1
src/map/guild.c

@@ -789,6 +789,7 @@ int guild_leave(struct map_session_data *sd,int guild_id,
 int guild_expulsion(struct map_session_data *sd,int guild_id,
 	int account_id,int char_id,const char *mes)
 {
+	struct map_session_data *tsd;
 	struct guild *g;
 	int i,ps;
 
@@ -799,12 +800,18 @@ int guild_expulsion(struct map_session_data *sd,int guild_id,
 	if(g==NULL)
 		return 0;
 
-	if(sd->status.guild_id!=guild_id || map[sd->bl.m].flag.gvg_castle) //Can't leave inside guild castles.
+	if(sd->status.guild_id!=guild_id)
 		return 0;
 
 	if( (ps=guild_getposition(sd,g))<0 || !(g->position[ps].mode&0x0010) )
 		return 0;	//Expulsion permission
 
+  	//Can't leave inside guild castles.
+	if ((tsd = map_id2sd(account_id)) == NULL ||
+		tsd->status.char_id != char_id ||
+		map[tsd->bl.m].flag.gvg_castle)
+		return 0;
+
 	for(i=0;i<g->max_member;i++){	// �Š‘®‚µ‚Ä‚¢‚é‚©
 		if(g->member[i].account_id==account_id &&
 			g->member[i].char_id==char_id ){

+ 28 - 10
src/map/pc.c

@@ -946,7 +946,7 @@ int pc_calc_skilltree(struct map_session_data *sd)
 	do {
 		flag = 0;
 		for(i = 0; i < MAX_SKILL_TREE && (id = skill_tree[c][i].id) > 0; i++) {
-			int j, f, inf2;
+			int j, f, k, inf2;
 
 			if(sd->status.skill[id].id)
 				continue; //Skill already known.
@@ -954,9 +954,19 @@ int pc_calc_skilltree(struct map_session_data *sd)
 			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; // one or more prerequisites wasn't satisfied
-						break;
+					if((k=skill_tree[c][i].need[j].id))
+					{
+						if (!sd->status.skill[k].id || sd->status.skill[k].flag == 13)
+							k = 0; //Not learned.
+						else if (sd->status.skill[k].flag) //Real lerned level
+							k = sd->status.skill[skill_tree[c][i].need[j].id].flag-2;
+						else
+							k = pc_checkskill(sd,k);
+						if (k < skill_tree[c][i].need[j].lv)
+						{
+							f=0;
+							break;
+						}
 					}
 				}
 				if (sd->status.job_level < skill_tree[c][i].joblv)
@@ -1021,17 +1031,25 @@ static void pc_check_skilltree(struct map_session_data *sd, int skill) {
 	do {
 		flag=0;
 		for(i=0;i < MAX_SKILL_TREE && (id=skill_tree[c][i].id)>0;i++){
-			int j,f=1;
+			int j,f=1, k;
 
 			if(sd->status.skill[id].id) //Already learned
 				continue;
 			
 			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;
-					break;
+				if((k=skill_tree[c][i].need[j].id))
+				{
+					if (!sd->status.skill[k].id || sd->status.skill[k].flag == 13)
+						k = 0; //Not learned.
+					else if (sd->status.skill[k].flag) //Real lerned level
+						k = sd->status.skill[skill_tree[c][i].need[j].id].flag-2;
+					else
+						k = pc_checkskill(sd,k);
+					if (k < skill_tree[c][i].need[j].lv)
+					{
+						f=0;
+						break;
+					}
 				}
 			}
 			if (!f)

+ 1 - 1
src/map/skill.c

@@ -11412,6 +11412,7 @@ int skill_readdb (void)
 	skill_init_unit_layout();
 
 	memset(skill_produce_db,0,sizeof(skill_produce_db));
+	k=0;
 	for(m=0;m<2;m++){
 		sprintf(path, "%s/%s", db_path, filename[m]);
 		fp=fopen(path,"r");
@@ -11421,7 +11422,6 @@ int skill_readdb (void)
 			ShowError("can't read %s\n",path);
 			return 1;
 		}
-		k=0;
 		while(fgets(line,1020,fp)){
 			char *split[7 + MAX_PRODUCE_RESOURCE * 2];
 			int x,y;