浏览代码

-Apply EvilPuncker path from tid:71756
-Fix and upd logzeny enumeration type bugreport:6897
-Upd @zeny to send a message when succed bugreport:6886
-Upd ChaosPanic to affect all bugreport:6893
-Upd bloodylust cooldown and disable endure effect bugreport:6547

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

glighta 12 年之前
父节点
当前提交
805aedeff0

+ 4 - 0
db/const.txt

@@ -658,6 +658,10 @@ RC2_Golem	4
 RC2_Guardian	5
 RC2_Ninja	6
 
+SizeSmall	0
+SizeMedium	1
+SizeLarge	2
+
 BF_WEAPON	0x0001
 BF_MAGIC	0x0002
 BF_MISC	0x0004

+ 1 - 1
db/pre-re/skill_cast_db.txt

@@ -1371,7 +1371,7 @@
 //-- SC_MAELSTROM
 2302,2000,2000,0,7000:14000:21000,0,0
 //-- SC_BLOODYLUST
-2303,2000,2000,0,10000:20000:30000,0,0
+2303,2000,2000,0,10000:20000:30000,0,180000
 //-- SC_FEINTBOMB
 2304,1000,0,0,1000,0,5000
 //==========================================

+ 2 - 2
db/pre-re/skill_unit_db.txt

@@ -120,7 +120,7 @@
 
 2299,0xcc,    ,  0, 1,1000,all,   0x006	//SC_MANHOLE
 2300,0xcd,    ,  0, 1,1000,all,   0x006	//SC_DIMENSIONDOOR
-2301,0xce,    ,  2, 0,  -1,enemy,   0x200E	//SC_CHAOSPANIC
+2301,0xce,    ,  2, 0,  -1,all,   0x200E	//SC_CHAOSPANIC
 2302,0xcf,    ,  0, 2,  -1,enemy,   0x002	//SC_MAELSTROM
 2303,0xd0,    ,  3, 0,  -1,all,   0x2018	//SC_BLOODYLUST
 2304,0xd1,    ,  0, 2,  -1,enemy, 0x000	//SC_FEINTBOMB
@@ -178,4 +178,4 @@
 10006,0xc1,   ,  2, 0,  -1,guild, 0x040	//GD_LEADERSHIP 
 10007,0xc2,   ,  2, 0,  -1,guild, 0x040	//GD_GLORYWOUNDS 
 10008,0xc3,   ,  2, 0,  -1,guild, 0x040	//GD_SOULCOLD 
-10009,0xc4,   ,  2, 0,  -1,guild, 0x040	//GD_HAWKEYES 
+10009,0xc4,   ,  2, 0,  -1,guild, 0x040	//GD_HAWKEYES 

+ 4 - 4
db/re/item_combo_db.txt

@@ -95,7 +95,7 @@
 2377:2435:2538,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bStr,3; bonus bMaxHPRate,12; bonus2 bSkillAtk,"MC_MAMMONITE",20; bonus2 bSkillHeal,"AM_POTIONPITCHER",10; bonus2 bSkillHeal2,"AM_POTIONPITCHER",10; bonus2 bSkillHeal2,"AL_HEAL",10; bonus bUnbreakableArmor,0; }
 2378:2435:2538,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bAgi,3; bonus bMaxHPRate,12; bonus bCritical,5; bonus bAspdRate,5; autobonus "{ bonus2 bHPRegenRate,300,1000; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_HEAL; }"; }
 2379:2436:2539,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bResEff,Eff_Stun,2000; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }
-2380:2436:2539,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bVariableCastrate,156,-50; bonus bHealPower,6; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }
+2380:2436:2539,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bVariableCastrate,"AL_HOLYLIGHT",-50; bonus bHealPower,6; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }
 2381:2436:2539,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bDex,3; bonus bMaxHPRate,12; bonus bLongAtkDef,10; bonus bDelayRate,-25; }
 2382:2437:2540,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bDex,3; bonus bMaxHPRate,12; bonus bLongAtkDef,10; bonus bDelayRate,-25; }
 2387:2440:2744,{ bonus bMaxHPrate,7; bonus bMaxSPrate,7; bonus bVariableCastrate,-3; bonus bDelayrate,-15; }
@@ -132,8 +132,8 @@
 2608:2677,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
 2608:2711,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
 2608:2786,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
-2620:2746,{ bonus2 bAddSize,1,8; bonus bAspdRate,getequiprefinerycnt(EQI_HAND_R)/2; }
-2620:2747,{ bonus2 bAddSize,2,8; bonus bHit,getequiprefinerycnt(EQI_HAND_R)/2; bonus bVariableCastrate,-getequiprefinerycnt(EQI_HAND_R)/2; }
+2620:2746,{ bonus2 bAddSize,SizeMedium,8; bonus bAspdRate,getequiprefinerycnt(EQI_HAND_R)/2; }
+2620:2747,{ bonus2 bAddSize,SizeLarge,8; bonus bHit,getequiprefinerycnt(EQI_HAND_R)/2; bonus bVariableCastrate,-getequiprefinerycnt(EQI_HAND_R)/2; }
 2626:2677,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
 2626:2711,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
 2626:2786,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
@@ -195,5 +195,5 @@
 5401:5653,{ bonus bInt,1; bonus bMatkRate,2; }
 //5470:5653,{ bonus bDex,1; bonus bLongAtkRate,3; }
 13027:15044,{ bonus3 bAddMonsterDropItem,929,RC_Brute,100+(getrefine()*10); bonus3 bAddMonsterDropItem,929,RC_DemiHuman,100+(getrefine()*10); bonus3 bAddMonsterDropItem,970,RC_Brute,20+(getrefine()*2); bonus3 bAddMonsterDropItem,970,RC_DemiHuman,20+(getrefine()*2); }
-13034:13035,{ bonus bMaxSP,20; bonus bMaxHPRate,5; bonus bHit,10; bonus2 bAddSize,2,30; autobonus "{ bonus bAspdRate,100; }",1,7000,0,"{ specialeffect2 EF_POTION_BERSERK; }"; }
+13034:13035,{ bonus bMaxSP,20; bonus bMaxHPRate,5; bonus bHit,10; bonus2 bAddSize,SizeLarge,30; autobonus "{ bonus bAspdRate,100; }",1,7000,0,"{ specialeffect2 EF_POTION_BERSERK; }"; }
 18507:18539,{ bonus bUseSPrate,-3; }

文件差异内容过多而无法显示
+ 257 - 257
db/re/item_db.txt


+ 1 - 1
db/re/skill_cast_db.txt

@@ -1369,7 +1369,7 @@
 //-- SC_MAELSTROM
 2302,2000,2000,0,7000:14000:21000,0,0,-1
 //-- SC_BLOODYLUST //dur2=intr
-2303,2000,2000,0,10000:20000:30000,0,0,-1
+2303,2000,2000,0,10000:20000:30000,0,180000,-1
 //-- SC_FEINTBOMB
 2304,1000,0,0,1000,0,5000,-1
 //==========================================

+ 2 - 2
db/re/skill_unit_db.txt

@@ -122,7 +122,7 @@
 
 2299,0xcc,    ,  0, 1,1000,all,   0x006	//SC_MANHOLE
 2300,0xcd,    ,  0, 1,1000,all,   0x006	//SC_DIMENSIONDOOR
-2301,0xce,    ,  2, 0,  -1,enemy,   0x200E	//SC_CHAOSPANIC
+2301,0xce,    ,  2, 0,  -1,all,   0x200E	//SC_CHAOSPANIC
 2302,0xcf,    ,  0, 2,  -1,enemy,   0x002	//SC_MAELSTROM
 2303,0xd0,    ,  3, 0,  -1,all,   0x2018	//SC_BLOODYLUST
 2304,0xd1,    ,  0, 2,  -1,enemy, 0x000	//SC_FEINTBOMB
@@ -180,4 +180,4 @@
 10006,0xc1,   ,  2, 0,  -1,guild, 0x040	//GD_LEADERSHIP 
 10007,0xc2,   ,  2, 0,  -1,guild, 0x040	//GD_GLORYWOUNDS 
 10008,0xc3,   ,  2, 0,  -1,guild, 0x040	//GD_SOULCOLD 
-10009,0xc4,   ,  2, 0,  -1,guild, 0x040	//GD_HAWKEYES 
+10009,0xc4,   ,  2, 0,  -1,guild, 0x040	//GD_HAWKEYES 

+ 1 - 1
sql-files/logs.sql

@@ -31,7 +31,7 @@ CREATE TABLE `zenylog` (
   `time` datetime NOT NULL default '0000-00-00 00:00:00',
   `char_id` int(11) NOT NULL default '0',
   `src_id` int(11) NOT NULL default '0',
-  `type` enum('M','T','V','S','N','A','E','B','I','D') NOT NULL default 'S',
+  `type` enum('T','V','P','M','S','N','D','C','A','E','I','B') NOT NULL default 'S',
   `amount` int(11) NOT NULL default '0',
   `map` varchar(11) NOT NULL default '',
   PRIMARY KEY  (`id`),

+ 1 - 0
sql-files/upgrades/upgrade_svn16914.sql

@@ -0,0 +1 @@
+ALTER TABLE `zenylog` MODIFY `type` ENUM('T','V','P','M','S','N','D','C','A','E','I','B') NOT NULL DEFAULT 'S';

+ 4 - 3
src/map/atcommand.c

@@ -2526,7 +2526,7 @@ ACMD_FUNC(skillpoint)
  *------------------------------------------*/
 ACMD_FUNC(zeny)
 {
-	int zeny;
+	int zeny=0, ret=-1;
 	nullpo_retr(-1, sd);
 
 	if (!message || !*message || (zeny = atoi(message)) == 0) {
@@ -2535,12 +2535,13 @@ ACMD_FUNC(zeny)
 	}
 
 	if(zeny > 0){
-	    if(pc_getzeny(sd,zeny,LOG_TYPE_COMMAND,NULL) == 1)
+	    if((ret=pc_getzeny(sd,zeny,LOG_TYPE_COMMAND,NULL)) == 1)
 		clif_displaymessage(fd, msg_txt(149)); // Unable to increase the number/value.
 	}
-	else if(pc_payzeny(sd,-zeny,LOG_TYPE_COMMAND,NULL) == 1){
+	else if((ret=pc_payzeny(sd,-zeny,LOG_TYPE_COMMAND,NULL)) == 1){
 	    clif_displaymessage(fd, msg_txt(41)); // Unable to decrease the number/value.
 	}
+	if(!ret) clif_displaymessage(fd, msg_txt(176)); //ret=0 mean cmd success
 	return 0;
 }
 

+ 2 - 2
src/map/clif.c

@@ -10179,8 +10179,8 @@ void clif_parse_UseItem(int fd, struct map_session_data *sd)
 	if (sd->npc_id) {
 		if (sd->npc_id != sd->npc_item_flag)
 			return;
-	} else
-	if (pc_istrading(sd))
+	}
+	else if (pc_istrading(sd))
 		return;
 
 	//Whether the item is used or not is irrelevant, the char ain't idle. [Skotlex]

+ 1 - 1
src/map/mob.c

@@ -2436,7 +2436,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
 			if( sd->bonus.get_zeny_num && rnd()%100 < sd->bonus.get_zeny_rate ) {
 				i = sd->bonus.get_zeny_num > 0 ? sd->bonus.get_zeny_num : -md->level * sd->bonus.get_zeny_num;
 				if (!i) i = 1;
-				pc_getzeny(sd, 1+rnd()%i, LOG_TYPE_OTHER, NULL);
+				pc_getzeny(sd, 1+rnd()%i, LOG_TYPE_PICKDROP_MONSTER, NULL);
 			}
 		}
 

+ 9 - 5
src/map/pc.c

@@ -3588,7 +3588,7 @@ int pc_inventoryblank(struct map_session_data *sd)
  *------------------------------------------*/
 int pc_payzeny(struct map_session_data *sd,int zeny, enum e_log_pick_type type, struct map_session_data *tsd)
 {
-	nullpo_ret(sd);
+	nullpo_retr(-1,sd);
 
 	zeny = cap_value(zeny,-MAX_ZENY,MAX_ZENY); //prevent command UB
 	if( zeny < 0 )
@@ -3716,7 +3716,7 @@ int pc_getcash(struct map_session_data *sd, int cash, int points)
  *------------------------------------------*/
 int pc_getzeny(struct map_session_data *sd,int zeny, enum e_log_pick_type type, struct map_session_data *tsd)
 {
-	nullpo_ret(sd);
+	nullpo_retr(-1,sd);
 
 	zeny = cap_value(zeny,-MAX_ZENY,MAX_ZENY); //prevent command UB
 	if( zeny < 0 )
@@ -3848,6 +3848,10 @@ int pc_additem(struct map_session_data *sd,struct item *item_data,int amount,e_l
 
 /*==========================================
  * Remove an item at index n from inventory by amount.
+ * Parameters :
+ * @type
+ *	1 : don't notify deletion
+ *	2 : don't notify weight change
  * Return:
  *	0 = success
  *	1 = invalid itemid or negative amount
@@ -4200,7 +4204,7 @@ int pc_useitem(struct map_session_data *sd,int n)
 
 	/* Items with delayed consume are not meant to work while in mounts except reins of mount(12622) */
 	if( sd->inventory_data[n]->flag.delay_consume ) {
-		if( nameid != 12622 && sd->sc.option&OPTION_MOUNTING )
+		if( nameid != ITEMID_REINS_OF_MOUNT && sd->sc.option&OPTION_MOUNTING )
 			return 0;
 		else if( pc_issit(sd) )
 			return 0;
@@ -6661,7 +6665,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
 	  	{
 			base_penalty = (unsigned int)((double)sd->status.zeny * (double)battle_config.zeny_penalty / 10000.);
 			if(base_penalty)
-				pc_payzeny(sd, base_penalty, LOG_TYPE_OTHER, NULL); //@TODO that type suck
+				pc_payzeny(sd, base_penalty, LOG_TYPE_PICKDROP_PLAYER, NULL);
 		}
 	}
 
@@ -6871,7 +6875,7 @@ int pc_setparam(struct map_session_data *sd,int type,int val)
 	case SP_ZENY:
 		if( val < 0 )
 			return 0;// can't set negative zeny
-		log_zeny(sd, LOG_TYPE_NPC, sd, -(sd->status.zeny - cap_value(val, 0, MAX_ZENY)));
+		log_zeny(sd, LOG_TYPE_SCRIPT, sd, -(sd->status.zeny - cap_value(val, 0, MAX_ZENY)));
 		sd->status.zeny = cap_value(val, 0, MAX_ZENY);
 		break;
 	case SP_BASEEXP:

+ 7 - 5
src/map/skill.c

@@ -5003,7 +5003,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 		break;
 	case SA_FORTUNE:
 		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if(sd) pc_getzeny(sd,status_get_lv(bl)*100,LOG_TYPE_OTHER,NULL);
+		if(sd) pc_getzeny(sd,status_get_lv(bl)*100,LOG_TYPE_STEAL,NULL);
 		break;
 	case SA_TAMINGMONSTER:
 		clif_skill_nodamage(src,bl,skillid,skilllv,1);
@@ -10980,10 +10980,12 @@ static int skill_unit_onplace (struct skill_unit *src, struct block_list *bl, un
 		if (!sce) {
 			TBL_PC *sd = BL_CAST(BL_PC, bl); //prevent fullheal exploit
 			if (sd && sd->bloodylust_tick && DIFF_TICK(gettick(), sd->bloodylust_tick) < skill_get_time2(SC_BLOODYLUST, 1))
-				sc_start4(bl, type, 100, sg->skill_lv, 1, 0, 0, skill_get_time(LK_BERSERK, sg->skill_lv)); //do not refull heal
+				clif_skill_nodamage(&src->bl,bl,sg->skill_id,sg->skill_lv,
+					sc_start4(bl, type, 100, sg->skill_lv, 1, 0, 0, skill_get_time(LK_BERSERK, sg->skill_lv)));
 			else {
 				if (sd) sd->bloodylust_tick = gettick();
-					sc_start4(bl, type, 100, sg->skill_lv, 0, 0, 0, skill_get_time(LK_BERSERK, sg->skill_lv));
+					clif_skill_nodamage(&src->bl,bl,sg->skill_id,sg->skill_lv,
+						sc_start4(bl, type, 100, sg->skill_lv, 0, 0, 0, skill_get_time(LK_BERSERK, sg->skill_lv)));
 			}
 		}
 		break;
@@ -13288,7 +13290,7 @@ int skill_consume_requirement( struct map_session_data *sd, short skill, short l
 				req.zeny = 0; //Zeny is reduced on skill_attack.
 			if( sd->status.zeny < req.zeny )
 				req.zeny = sd->status.zeny;
-			pc_payzeny(sd,req.zeny,LOG_TYPE_OTHER,NULL); //@Need proper type
+			pc_payzeny(sd,req.zeny,LOG_TYPE_CONSUME,NULL);
 		}
 	}
 
@@ -17791,7 +17793,7 @@ void skill_reload (void) {
 	for( sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); sd = (TBL_PC*)mapit_next(iter) )
 		clif_skillinfoblock(sd);
 	mapit_free(iter);
-	
+
 }
 
 /*==========================================

+ 7 - 7
src/map/status.c

@@ -7471,10 +7471,10 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 				sc_start(bl,SC_BLEEDING,100,val1,skill_get_time2(status_sc2skill(type),val1));
 			break;
 
-		case SC__BLOODYLUST:
 		case SC_BERSERK:
 			if (!sc->data[SC_ENDURE] || !sc->data[SC_ENDURE]->val4)
 				sc_start4(bl, SC_ENDURE, 100,10,0,0,2, tick);
+		case SC__BLOODYLUST:
 			//HP healing is performing after the calc_status call.
 			//Val2 holds HP penalty
 			if (!val4) val4 = skill_get_time2(status_sc2skill(type),val1);
@@ -8609,10 +8609,10 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 			sc->opt3 |= OPT3_AURABLADE;
 			opt_flag = 0;
 			break;
-//		case SC__BLOODYLUST:
 		case SC_BERSERK:
-			sc->opt3 |= OPT3_BERSERK;
 			opt_flag = 0;
+//		case SC__BLOODYLUST:
+			sc->opt3 |= OPT3_BERSERK;
 			break;
 //		case ???: // doesn't seem to do anything
 //			sc->opt3 |= OPT3_LIGHTBLADE;
@@ -9240,17 +9240,17 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
 			}
 			break;
 
-		case SC__BLOODYLUST:
 		case SC_BERSERK:
 		case SC_SATURDAYNIGHTFEVER:
 			//If val2 is removed, no HP penalty (dispelled?) [Skotlex]
-			if (status->hp > 100 && sce->val2 && type != SC__BLOODYLUST)
+			if (status->hp > 100 && sce->val2)
 				status_set_hp(bl, 100, 0);
 			if(sc->data[SC_ENDURE] && sc->data[SC_ENDURE]->val4 == 2)
 			{
 				sc->data[SC_ENDURE]->val4 = 0;
 				status_change_end(bl, SC_ENDURE, INVALID_TIMER);
 			}
+		case SC__BLOODYLUST:
 			sc_start4(bl, SC_REGENERATION, 100, 10,0,0,(RGN_HP|RGN_SP), skill_get_time(LK_BERSERK, sce->val1));
 			if( type == SC_SATURDAYNIGHTFEVER ) //Sit down force of Saturday Night Fever has the duration of only 3 seconds.
 				sc_start(bl,SC_SITDOWN_FORCE,100,sce->val1,skill_get_time2(WM_SATURDAY_NIGHT_FEVER,sce->val1));
@@ -9531,10 +9531,10 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
 		sc->opt3 &= ~OPT3_AURABLADE;
 		opt_flag = 0;
 		break;
-//	case SC__BLOODYLUST:
 	case SC_BERSERK:
-		sc->opt3 &= ~OPT3_BERSERK;
 		opt_flag = 0;
+//	case SC__BLOODYLUST:
+		sc->opt3 &= ~OPT3_BERSERK;
 		break;
 //	case ???: // doesn't seem to do anything
 //		sc->opt3 &= ~OPT3_LIGHTBLADE;

部分文件因为文件数量过多而无法显示