浏览代码

Merge branch 'master' of https://github.com/rathena/rathena

Euphy 11 年之前
父节点
当前提交
0d6aba208e
共有 6 个文件被更改,包括 17 次插入25 次删除
  1. 1 1
      src/common/mmo.h
  2. 5 7
      src/map/battle.c
  3. 1 2
      src/map/channel.c
  4. 2 5
      src/map/guild.c
  5. 3 1
      src/map/pc.c
  6. 5 9
      src/map/skill.c

+ 1 - 1
src/common/mmo.h

@@ -532,10 +532,10 @@ struct guild {
 	struct guild_alliance alliance[MAX_GUILDALLIANCE];
 	struct guild_expulsion expulsion[MAX_GUILDEXPULSION];
 	struct guild_skill skill[MAX_GUILDSKILL];
+	struct Channel *channel;
 
 	/* TODO: still used for something? */
 	unsigned short save_flag; // for TXT saving
-	void *channel;
 };
 
 struct guild_castle {

+ 5 - 7
src/map/battle.c

@@ -3617,21 +3617,19 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
 			skillratio += -100 + 70 * skill_lv;
 			break;
 		case MH_SONIC_CRAW:
-			skillratio += -100 + 40 * skill_lv * status_get_lv(src);
-			skillratio = skillratio/100; //@TODO uv1 factor need to be confirmed
+			skillratio = 40 * skill_lv;
 			break;
 		case MH_SILVERVEIN_RUSH:
-			skillratio += -100 + (150 * skill_lv * status_get_lv(src)) / 100;
+			skillratio = 150 * skill_lv;
 			break;
 		case MH_MIDNIGHT_FRENZY:
-			skillratio += -100 + (300 * skill_lv * status_get_lv(src)) / 150;
+			skillratio = 300 * skill_lv;
 			break;
 		case MH_TINDER_BREAKER:
-			skillratio += -100 + (100 * skill_lv + status_get_str(src));
-			skillratio = (skillratio * status_get_lv(src)) / 120;
+			skillratio = 100 * skill_lv;
 			break;
 		case MH_CBC:
-			skillratio += 300 * skill_lv + 4 * status_get_lv(src);
+			skillratio = 400 * skill_lv; //! TODO: This doesn't seem to be a ratio, but straight damage?
 			break;
 		case MH_MAGMA_FLOW:
 			skillratio += -100 + 100 * skill_lv + 3 * status_get_lv(src);

+ 1 - 2
src/map/channel.c

@@ -75,7 +75,7 @@ struct Channel* channel_create(char *name, char *pass, unsigned char color, enum
 int channel_delete(struct Channel *channel) {
 	if(!channel)
 		return -1;
-	if(channel->type == CHAN_TYPE_PUBLIC && runflag != MAPSERVER_ST_RUNNING) //only delete those serv stop
+	if(channel->type == CHAN_TYPE_PUBLIC && runflag == MAPSERVER_ST_RUNNING) //only delete those serv stop
 		return -2;
 	if( db_size(channel->users)) {
 		struct map_session_data *sd;
@@ -101,7 +101,6 @@ int channel_delete(struct Channel *channel) {
 	}
 	default:
 		strdb_remove(channel_db, channel->name);
-                aFree(channel);
 		break;
 	}
 	return 0;

+ 2 - 5
src/map/guild.c

@@ -500,7 +500,6 @@ int guild_recv_info(struct guild *sg)
 	DBData data;
 	struct map_session_data *sd;
 	bool guild_new = false;
-	struct Channel *channel;
 
 	nullpo_ret(sg);
 
@@ -545,10 +544,8 @@ int guild_recv_info(struct guild *sg)
 	}
 
 	if(Channel_Config.ally_enable){
-		channel = g->channel;
-		if(!channel){
-			channel = channel_create(Channel_Config.ally_chname,NULL,Channel_Config.ally_chcolor,CHAN_TYPE_ALLY,g->guild_id);
-			g->channel = channel;
+		if(!g->channel){
+			g->channel = channel_create(Channel_Config.ally_chname,NULL,Channel_Config.ally_chcolor,CHAN_TYPE_ALLY,g->guild_id);
 			channel_ajoin(g);
 		}
 	}

+ 3 - 1
src/map/pc.c

@@ -8537,8 +8537,10 @@ int pc_checkcombo(struct map_session_data *sd, struct item_data *data ) {
 		}
 
 		/* means we broke out of the count loop w/o finding all ids, we can move to the next combo */
-		if( j < data->combos[i]->count )
+		if( j < data->combos[i]->count ) {
+			aFree(pair);
 			continue;
+		}
 
 		/* we got here, means all items in the combo are matching */
 		idx = sd->combos.count;

+ 5 - 9
src/map/skill.c

@@ -696,11 +696,11 @@ bool skill_isNotOk_hom(uint16 skill_id, struct homun_data *hd)
 			break;
 		case MH_CBC:
 			if(!(hd->sc.data[SC_COMBO] && hd->sc.data[SC_COMBO]->val1 == MH_TINDER_BREAKER)
-				|| !hd->homunculus.spiritball) return true;
+				|| !hd->homunculus.spiritball < 2) return true;
 			break;
 		case MH_EQC:
 			if(!(hd->sc.data[SC_COMBO] && hd->sc.data[SC_COMBO]->val1 == MH_CBC)
-				|| !hd->homunculus.spiritball) return true;
+				|| !hd->homunculus.spiritball < 3) return true;
 			break;
 	}
 
@@ -5009,19 +5009,15 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 
 	case MH_STAHL_HORN:
 	case MH_NEEDLE_OF_PARALYZE:
+	case MH_SONIC_CRAW:
 		skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag);
 		break;
 	case MH_MIDNIGHT_FRENZY:
 	case MH_SILVERVEIN_RUSH:
-	case MH_SONIC_CRAW:
 		{
 			TBL_HOM *hd = BL_CAST(BL_HOM,src);
-			short remove_sphere = (skill_id==MH_SILVERVEIN_RUSH?1:2);
-
-			if(skill_id == MH_SONIC_CRAW)
-				remove_sphere = hd->homunculus.spiritball;
 			skill_attack(skill_get_type(skill_id),src,src,bl,skill_id,skill_lv,tick,flag);
-			hom_delspiritball(hd,remove_sphere,0);
+			hom_delspiritball(hd,skill_id==MH_SILVERVEIN_RUSH?1:2,0);
 		}
 		break;
 	case MH_TINDER_BREAKER:
@@ -5031,7 +5027,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 			int duration=0;
 			TBL_HOM *hd = BL_CAST(BL_HOM,src);
 			duration = max(skill_lv,(status_get_str(src)/7 - status_get_str(bl)/10))*1000; //Yommy formula
-			hom_delspiritball(hd,skill_id==MH_EQC?2:1,0); //only EQC consume 2 in grp 2
+			hom_delspiritball(hd,skill_id==MH_EQC?3:2,0); //only EQC consume 3 in grp 2
 			skill_attack(skill_get_type(skill_id),src,src,bl,skill_id,skill_lv,tick,flag);
 			clif_skill_nodamage(src,bl,skill_id,skill_lv,
 				sc_start4(src,bl,status_skill2sc(skill_id),100,skill_lv,src->id,0,0,duration));