Forráskód Böngészése

- Removed SP_DISGUISE from the bonus list.
- Moved Sharp Shooting display to the block with Auto-Counter (since that's the other skill that can show critical as well)
- Corrected some fields in the still packet (guild emblem being stored as a Long when it should be Short)
- Modified most fields of view_data to be unsigned shorts rather than signed ones.
- On-Touch NPCs will now make you stop walking when you trigger them.
- Reduced stun duration of most skills to 3 secs.
- ShadowJump/JumpKick will make you land on the target's cell now.
- Fixed Kaahi triggering only once per skill duration.
- Added the kaahi_heal_timer to the list of status change functions.


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

skotlex 19 éve
szülő
commit
3b5ab1ba35
11 módosított fájl, 60 hozzáadás és 47 törlés
  1. 14 0
      Changelog-Trunk.txt
  2. 2 0
      db/Changelog.txt
  3. 1 1
      db/const.txt
  4. 4 4
      db/skill_cast_db.txt
  5. 5 5
      src/map/clif.c
  6. 1 1
      src/map/clif.h
  7. 13 11
      src/map/map.h
  8. 3 2
      src/map/npc.c
  9. 0 4
      src/map/pc.c
  10. 2 13
      src/map/skill.c
  11. 15 6
      src/map/status.c

+ 14 - 0
Changelog-Trunk.txt

@@ -3,6 +3,20 @@ 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.
 
+2006/05/08
+	* Removed SP_DISGUISE from the bonus list (onequip/onunequip should be used
+	  with the disguise/undisguise script commands instead). [Skotlex]
+	* Moved Sharp Shooting display to the block with Auto-Counter (since that's
+	  the other skill that can show critical as well) [Skotlex]
+	* Corrected some fields in the standing still packet (guild emblem being
+	  stored as a Long when it should be Short) [Skotlex]
+	* Modified most fields of view_data to be unsigned shorts rather than
+	  signed ones. [Skotlex]
+	* On-Touch NPCs will now make you stop walking when you trigger them.
+	  [Skotlex]
+	* ShadowJump/JumpKick will make you land on the target's cell now.
+	  [Skotlex]
+	* Fixed Kaahi triggering only once per skill duration. [Skotlex]
 2006/05/07
 	* Fixed readme/changelog.html [KillerBox]
 	* Removed old logs. [Lupus]

+ 2 - 0
db/Changelog.txt

@@ -26,6 +26,8 @@
 	-----
 
 =========================
+05/08
+	* Reduced stun duration of most skills to 3 secs. [Skotlex]
 05/07
 	* Updating drops to Aegis X.2 [Playtester]
 	- progress 25%

+ 1 - 1
db/const.txt

@@ -260,7 +260,7 @@ bAllStats		1073
 bAgiVit			1074
 bAgiDexStr		1075
 bPerfectHide		1076
-bDisguise		1077
+
 bClassChange	1078
 bHPDrainValue	1079
 bSPDrainValue	1080

+ 4 - 4
db/skill_cast_db.txt

@@ -200,7 +200,7 @@
 //-- BS_REPAIRWEAPON
 108,7500,0,0,0,0
 //-- BS_HAMMERFALL
-110,0,0,0,0,2000:3000:4000:5000:6000
+110,0,0,0,0,3000
 //-- BS_ADRENALINE
 111,0,0,0,30000:60000:90000:120000:150000,0
 //-- BS_WEAPONPEFECT
@@ -244,7 +244,7 @@
 //-- AS_CLOAKING
 135,0,0,0,500:1000:2000:3000:4000:5000:6000:7000:8000:9000,0
 //-- AS_SONICBLOW
-136,0,2000,0,0,6000:7000:8000:9000:10000:11000:12000:13000:14000:15000
+136,0,2000,0,0,3000
 //-- AS_GRIMTOOTH
 137,0,0,0,0,1000
 //-- AS_ENCHANTPOISON
@@ -296,7 +296,7 @@
 //-- NPC_SILENCEATTACK
 178,0,0,0,0,10000:12000:14000:16000:18000:20000:22000:24000:26000:28000
 //-- NPC_STUNATTACK
-179,0,0,0,0,2000:3000:4000:5000:6000
+179,0,0,0,0,3000
 //-- NPC_PETRIFYATTACK
 180,0,0,0,0,10000:11000:12000:13000:14000:15000:16000:17000:18000:19000
 //-- NPC_CURSEATTACK
@@ -483,7 +483,7 @@
 //-- DC_UGLYDANCE
 325,0,0,0,30000,3000
 //-- DC_SCREAM
-326,0,3000,0,0,10000:11000:12000:13000:14000
+326,0,3000,0,0,3000
 //-- DC_HUMMING
 327,0,0,0,60000,20000
 //-- DC_DONTFORGETME

+ 5 - 5
src/map/clif.c

@@ -775,7 +775,7 @@ int clif_clearchar_id(int id, int type, int fd) {
 	return 0;
 }
 
-void clif_get_weapon_view(TBL_PC* sd, short *rhand, short *lhand)
+void clif_get_weapon_view(TBL_PC* sd, unsigned short *rhand, unsigned short *lhand)
 {
 #if PACKETVER > 3
 	struct item_data *id;
@@ -884,7 +884,7 @@ static int clif_set0078(struct block_list *bl, struct view_data *vd, unsigned ch
 		WBUFW(buf,30)=vd->cloth_color;
 		WBUFW(buf,32)=sd?sd->head_dir:dir;
 		WBUFL(buf,34)=guild_id;
-		WBUFL(buf,38)=emblem_id;
+		WBUFW(buf,38)=emblem_id;
 		if (sd) {
 			WBUFW(buf,40)=sd->status.manner;
 			WBUFB(buf,44)=sd->status.karma;
@@ -907,6 +907,7 @@ static int clif_set0078(struct block_list *bl, struct view_data *vd, unsigned ch
 			WBUFW(buf,8)=sc->opt1;
 			WBUFW(buf,10)=sc->opt2;
 			WBUFW(buf,12)=sc->option;
+			WBUFW(buf,42)=sc->opt3;
 		}
 		WBUFW(buf,14)=vd->class_;
 		WBUFW(buf,16)=vd->hair_style;
@@ -920,10 +921,8 @@ static int clif_set0078(struct block_list *bl, struct view_data *vd, unsigned ch
 		WBUFW(buf,32)=sd?sd->head_dir:dir;
 		WBUFL(buf,34)=guild_id;
 		WBUFL(buf,38)=emblem_id;
-		if (sd) {
-			WBUFW(buf,42)=sd->status.manner;
+		if (sd)
 			WBUFB(buf,44)=sd->status.karma;
-		}
 		WBUFB(buf,45)=vd->sex;
 		WBUFPOS(buf,46,bl->x,bl->y);
 		WBUFB(buf,48)|=dir&0x0f;
@@ -944,6 +943,7 @@ static int clif_set0078(struct block_list *bl, struct view_data *vd, unsigned ch
 		WBUFW(buf,8)=sc->opt1;
 		WBUFW(buf,10)=sc->opt2;
 		WBUFW(buf,12)=sc->option;
+		WBUFW(buf,42)=sc->opt3;
 	}
 	WBUFW(buf,14)=vd->class_;
 	WBUFW(buf,16)=vd->hair_style;  //Required for pets.

+ 1 - 1
src/map/clif.h

@@ -323,7 +323,7 @@ int clif_disp_overhead(struct map_session_data *sd, char* mes);
 int do_final_clif(void);
 int do_init_clif(void);
 
-void clif_get_weapon_view(TBL_PC* sd, short *rhand, short *lhand);
+void clif_get_weapon_view(TBL_PC* sd, unsigned short *rhand, unsigned short *lhand);
 
 int clif_party_xy_remove(struct map_session_data *sd); //Fix for minimap [Kevin]
 void clif_parse_ReqFeel(int fd, struct map_session_data *sd, int skilllv); 

+ 13 - 11
src/map/map.h

@@ -457,15 +457,16 @@ struct weapon_data {
 };
 
 struct view_data {
-	short class_;
-	short weapon;
-	short shield; //Or left-hand weapon.
-	short head_top;
-	short head_mid;
-	short head_bottom;
-	short hair_style;
-	short hair_color;
-	short cloth_color;
+	unsigned short
+	  	class_,
+		weapon,
+		shield, //Or left-hand weapon.
+		head_top,
+		head_mid,
+		head_bottom,
+		hair_style,
+		hair_color,
+		cloth_color;
 	char sex;
 	unsigned dead_sit : 2;
 };
@@ -1124,7 +1125,7 @@ enum {
 	SP_SHORT_WEAPON_DAMAGE_RETURN,SP_LONG_WEAPON_DAMAGE_RETURN,SP_WEAPON_COMA_ELE,SP_WEAPON_COMA_RACE, // 1063-1066
 	SP_ADDEFF2,SP_BREAK_WEAPON_RATE,SP_BREAK_ARMOR_RATE,SP_ADD_STEAL_RATE, // 1067-1070
 	SP_MAGIC_DAMAGE_RETURN,SP_RANDOM_ATTACK_INCREASE,SP_ALL_STATS,SP_AGI_VIT,SP_AGI_DEX_STR,SP_PERFECT_HIDE, // 1071-1076
-	SP_DISGUISE,SP_CLASSCHANGE, // 1077-1078
+	SP_FREE,SP_CLASSCHANGE, // 1077-1078
 	SP_HP_DRAIN_VALUE,SP_SP_DRAIN_VALUE, // 1079-1080
 	SP_WEAPON_ATK,SP_WEAPON_ATK_RATE, // 1081-1082
 	SP_DELAYRATE,SP_HP_DRAIN_RATE_RACE,SP_SP_DRAIN_RATE_RACE, // 1083-1085
@@ -1141,7 +1142,8 @@ enum {
 	SP_UNSTRIPABLE_WEAPON,SP_UNSTRIPABLE_ARMOR,SP_UNSTRIPABLE_HELM,SP_UNSTRIPABLE_SHIELD,  // 2034-2037
 	SP_INTRAVISION, SP_ADD_MONSTER_DROP_ITEMGROUP, SP_SP_LOSS_RATE, // 2038-2040
 	SP_ADD_SKILL_BLOW, SP_SP_VANISH_RATE //2041
-	//Before adding another, note that 2007 (SP_FREE, previously Infinite Endure) is available!
+	//Before adding another, note that 1077 (SP_FREE, previously disguise) and
+	//2007 (SP_FREE, previously Infinite Endure) are available!
 };
 
 enum {

+ 3 - 2
src/map/npc.c

@@ -947,7 +947,6 @@ int npc_touch_areanpc(struct map_session_data *sd,int m,int x,int y)
 			if (sd->sc.option&6 ||
 				(!battle_config.duel_allow_teleport && sd->duel_group)) // duel rstrct [LuzZza]
 				break;
-			skill_stop_dancing(&sd->bl);
 			pc_setpos(sd,map[m].npc[i]->u.warp.mapindex,map[m].npc[i]->u.warp.x,map[m].npc[i]->u.warp.y,0);
 			break;
 		case SCRIPT:
@@ -961,8 +960,10 @@ int npc_touch_areanpc(struct map_session_data *sd,int m,int x,int y)
 
 			sprintf(name,"%s::OnTouch", map[m].npc[i]->exname); // It goes here too. exname being the unique identifier. [Lance]
 
-			if( npc_event(sd,name,0)>0 )
+			if( npc_event(sd,name,0)>0 ) {
+				pc_stop_walking(sd,1); //Make it stop walking!
 				npc_click(sd,map[m].npc[i]->bl.id);
+			}
 			//aFree(name);
 			break;
 		}

+ 0 - 4
src/map/pc.c

@@ -1521,10 +1521,6 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
 			sd->state.perfect_hiding=1;
 		}
 		break;
-	case SP_DISGUISE: // Disguise script for items [Valaris]
-		if(sd->state.lr_flag!=2)
-			pc_disguise(sd, val);
-		break;
 	case SP_UNBREAKABLE:
 		if(sd->state.lr_flag!=2) {
 			sd->unbreakable += val;

+ 2 - 13
src/map/skill.c

@@ -1924,7 +1924,6 @@ int skill_attack( int attack_type, struct block_list* src, struct block_list *ds
 		dmg.dmotion = clif_skill_damage(dsrc,bl,tick,dmg.amotion,dmg.dmotion, damage, dmg.div_, skillid, -1, 5);
 		break;
 	case KN_BRANDISHSPEAR:
-	case SN_SHARPSHOOTING:
 		{	//Only display skill animation for skill's target.
 			struct unit_data *ud = unit_bl2ud(src);
 			if (ud && ud->skilltarget == bl->id)
@@ -1955,6 +1954,7 @@ int skill_attack( int attack_type, struct block_list* src, struct block_list *ds
 	case KN_AUTOCOUNTER: //Skills that need be passed as a normal attack for the client to display correctly.
 	case TF_DOUBLE:
 	case GS_CHAINACTION:
+	case SN_SHARPSHOOTING:
 		dmg.dmotion = clif_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,dmg.div_,dmg.type,dmg.damage2);
 		break;
 	case CR_GRANDCROSS:
@@ -2574,22 +2574,11 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s
 
 	case NJ_SHADOWJUMP:	//[blackhole89]
 	case TK_JUMPKICK:
-	{
-		short x, y;
-		x = bl->x;
-		y = bl->y;
-		if (src->x < bl->x) x--;
-		else if (src->x > bl->x) x++;
-		if (src->y < bl->y) y--;
-		else if (src->y > bl->y) y++;
-		if (map_getcell(bl->m, x, y, CELL_CHKNOPASS))
-		{	x = bl->x; y = bl->y; }
 		if (skillid == TK_JUMPKICK)
 			skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-		if (unit_movepos(src, x, y, 0, 0))
+		if (unit_movepos(src, bl->x, bl->y, 0, 0))
 			clif_slide(src,src->x,src->y);
 		break;
-	}
 	case ASC_BREAKER:				/* ƒ\ƒEƒ‹ƒuƒŒ?ƒJ? */	// [DracoRPG]
 		// Separate weapon and magic attacks
 		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);

+ 15 - 6
src/map/status.c

@@ -1465,8 +1465,7 @@ int status_calc_pc(struct map_session_data* sd,int first)
 	// Skill-related HP recovery (only when sit)
 	if((skill=pc_checkskill(sd,MO_SPIRITSRECOVERY)) > 0)
 		sd->nsshealhp = skill*4 + (sd->status.max_hp*skill/500);
-	if((skill=pc_checkskill(sd,TK_HPTIME)) > 0 &&
-		(sd->state.rest || sd->sc.data[SC_TKREST].timer!=-1))
+	if((skill=pc_checkskill(sd,TK_HPTIME)) > 0 && sd->state.rest)
 		sd->nsshealhp = skill*30 + (sd->status.max_hp*skill/500);
 
 	if(sd->nshealhp > SHRT_MAX) sd->nshealhp = SHRT_MAX;
@@ -1535,8 +1534,7 @@ int status_calc_pc(struct map_session_data* sd,int first)
 		// Skill-related SP recovery (only when sit)
 		if((skill = pc_checkskill(sd,MO_SPIRITSRECOVERY)) > 0)
 			sd->nsshealsp = skill*2 + (sd->status.max_sp*skill/500);
-		if((skill=pc_checkskill(sd,TK_SPTIME)) > 0 &&
-			(sd->state.rest || sd->sc.data[SC_TKREST].timer!=-1))
+		if((skill=pc_checkskill(sd,TK_SPTIME)) > 0 && sd->state.rest)
 		{
 			sd->nsshealsp = skill*3 + (sd->status.max_sp*skill/500);
 			if ((skill=pc_checkskill(sd,SL_KAINA)) > 0) //Power up Enjoyable Rest
@@ -3894,6 +3892,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
 			status_change_end(bl,SC_DECREASEAGI,-1);
 			return 0;
 		}
+		break;
 	case SC_FUSION:
 		if(sc->data[SC_SPIRIT].timer!=-1 )
 			status_change_end(bl,SC_SPIRIT,-1);
@@ -5394,9 +5393,17 @@ int kaahi_heal_timer(int tid, unsigned int tick, int id, int data)
 	sc=status_get_sc(bl);
 	if (!sc || data != SC_KAAHI || sc->data[data].timer==-1)
 		return 0;
-
-	if (bl->type == BL_PC && ((TBL_PC*)bl)->status.sp < sc->data[data].val3)
+	if(sc->data[data].val4 != tid) {
+		if (battle_config.error_log)
+			ShowError("kaahi_heal_timer: Timer mismatch: %d != %d\n", tid, sc->data[data].val4);
+		sc->data[data].val4=-1;
+		return 0;
+	}
+		
+	if (bl->type == BL_PC && ((TBL_PC*)bl)->status.sp < sc->data[data].val3) {
+		sc->data[data].val4=-1;
 		return 0;
+	}
 
 	hp = status_get_max_hp(bl) - status_get_hp(bl);
 	if (hp > sc->data[data].val2)
@@ -5405,6 +5412,7 @@ int kaahi_heal_timer(int tid, unsigned int tick, int id, int data)
 		battle_heal(bl, bl, hp, -sc->data[data].val3, 1);
 		clif_skill_nodamage(NULL,bl,AL_HEAL,hp,1);
 	}
+	sc->data[data].val4=-1;
 	return 1;
 }
 
@@ -6097,6 +6105,7 @@ int do_init_status(void)
 		exit(1);
 	}
 	add_timer_func_list(status_change_timer,"status_change_timer");
+	add_timer_func_list(kaahi_heal_timer,"kaahi_heal_timer");
 	initChangeTables();
 	status_readdb();
 	status_calc_sigma();