浏览代码

- Corrected Frost Nova's splash range and Land Protector's cast range. Thanks to Haplo.
- Fixed Beast Strafing not having inf2 = 512 (to make it a target-auto-select skill)
- Fixed the duration of Land Protector, removed unusued time2 value from their entries in skill_cast_db. Thanks to Haplo.
- Corrected Warp Portal being unable to warp people who are standing on it on the moment it triggers.
- Fixed @follow stopping the moment you are warped.
- Fixed pc_additem messing with the equip field of the passed item data. Fixes the famous "equip stuff on your arrow slot" bug.


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

skotlex 19 年之前
父节点
当前提交
376004a4f4
共有 8 个文件被更改,包括 33 次插入24 次删除
  1. 5 0
      Changelog-Trunk.txt
  2. 6 0
      db/Changelog.txt
  3. 4 4
      db/skill_cast_db.txt
  4. 3 3
      db/skill_db.txt
  5. 3 2
      src/map/pc.c
  6. 11 11
      src/map/skill.c
  7. 1 3
      src/map/status.c
  8. 0 1
      src/map/unit.c

+ 5 - 0
Changelog-Trunk.txt

@@ -4,6 +4,11 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2006/07/10
+	* Corrected Warp Portal being unable to warp people who are standing on it
+	  on the moment it triggers. [Skotlex]
+	* Fixed @follow stopping the moment you are warped. [Skotlex]
+	* Fixed pc_additem messing with the equip field of the passed item data.
+	  Fixes the famous "equip stuff on your arrow slot" bug. [Skotlex]
 	* Fixed cart-termination crashing the server if you used level 16 of it.
 	  [Skotlex]
 	* Fixed check_connect_login_server check in char-sql server. Fixes

+ 6 - 0
db/Changelog.txt

@@ -26,6 +26,12 @@
 =========================
 
 07/10
+	* Corrected Frost Nova's splash range and Land Protector's cast range.
+	  Thanks to Haplo.  [Skotlex]
+	* Fixed Beast Strafing not having inf2 = 512 (to make it a
+	  target-auto-select skill) [Skotlex]
+	* Fixed the duration of Land Protector, removed unused time2 value from
+	  their entries in skill_cast_db. Thanks to Haplo. [Skotlex]
 	* Corrected skill require entry from the Twilight Pharmacy skills.
 	  [Skotlex]
 	* Removed Frost Nova's skill_unit_db entry. [Skotlex]

+ 4 - 4
db/skill_cast_db.txt

@@ -441,13 +441,13 @@
 283,3000,0,0,1200000:1200000:1200000:1200000:1800000,0
 
 //-- SA_VOLCANO
-285,5000,0,0,60000:120000:180000:240000:300000,60000:120000:180000:240000:300000
+285,5000,0,0,60000:120000:180000:240000:300000,0
 //-- SA_DELUGE
-286,5000,0,0,60000:120000:180000:240000:300000,60000:120000:180000:240000:300000
+286,5000,0,0,60000:120000:180000:240000:300000,0
 //-- SA_VIOLENTGALE
-287,5000,0,0,60000:120000:180000:240000:300000,60000:120000:180000:240000:300000
+287,5000,0,0,60000:120000:180000:240000:300000,0
 //-- SA_LANDPROTECTOR
-288,5000,0,0,60000:120000:180000:240000:300000,60000:120000:180000:240000:300000
+288,5000,0,0,120000:165000:210000:245000:300000,0
 //-- SA_DISPELL
 289,2000,0,0,0,0
 //-- SA_REVERSEORCISH

+ 3 - 3
db/skill_db.txt

@@ -108,7 +108,7 @@
 85,9,8,2,4,0,0,10,-10,yes,0,0,0,magic,0	//WZ_VERMILION#Lord of Vermilion#
 86,9,8,1,1,0,0,5,1,yes,0,0,0,magic,0	//WZ_WATERBALL#Water Ball#
 87,9,6,2,1,0,0,10,1,yes,0,0,0,magic,0	//WZ_ICEWALL#Ice Wall#
-88,9,6,4,1,2,5,10,1,yes,0,0,0,magic,0	//WZ_FROSTNOVA#Frost Nova#
+88,0,6,4,1,2,2,10,1,yes,0,0,0,magic,0	//WZ_FROSTNOVA#Frost Nova#
 89,9,6,2,1,0,0,10,1,yes,0,0,0,magic,2	//WZ_STORMGUST#Storm Gust#
 90,9,8,1,2,0,0,5,1:2:3:4:5,yes,0,0,0,magic,0	//WZ_EARTHSPIKE#Earth Spike#
 91,9,8,2,2,0,0,5,1:2:3:4:5,yes,0,0,0,magic,0	//WZ_HEAVENDRIVE#Heaven's Drive#
@@ -308,7 +308,7 @@
 285,2,6,2,0,1,0,5,1,yes,0,0,0,magic,0	//SA_VOLCANO#Volcano#
 286,2,6,2,0,1,0,5,1,yes,0,0,0,magic,0	//SA_DELUGE#Deluge#
 287,2,6,2,0,1,0,5,1,yes,0,0,0,magic,0	//SA_VIOLENTGALE#Whirlwind#
-288,2,6,2,0,1,0,5,1,yes,0,0,0,magic,0	//SA_LANDPROTECTOR#Magnetic Earth#
+288,7:7:9:9:11,6,2,0,1,0,5,1,yes,0,0,0,magic,0	//SA_LANDPROTECTOR#Magnetic Earth#
 289,9,6,1,0,1,0,5,1,yes,0,0,0,magic,0	//SA_DISPELL#Dispel#
 290,0,6,4,0,1,0,10,1,yes,0,0,0,magic,0	//SA_ABRACADABRA#Hocus-pocus#
 291,9,6,1,0,1,0,1,1,yes,0,2,0,magic,0	//SA_MONOCELL#Monocell#
@@ -519,7 +519,7 @@
 496,0,6,4,0,1,0,1,0,no,0,8,0,none,0	//AM_TWILIGHT1#Twilight Alchemy 1#
 497,0,6,4,0,1,0,1,0,no,0,8,0,none,0	//AM_TWILIGHT2#Twilight Alchemy 2#
 498,0,6,4,0,1,0,1,0,no,0,8,0,none,0	//AM_TWILIGHT3#Twilight Alchemy 3#
-499,-9,8,4,-1,0,0,1,2,no,0,8,0,weapon,0	//HT_POWER#Beast Strafing#
+499,-9,8,4,-1,0,0,1,2,no,0,520,0,weapon,0	//HT_POWER#Beast Strafing#
 //Temp Plugs(using bash as base)
 500,0,6,4,0,0,0,5,1,no,0,0,0,none,0	//GS_GLITTERING#Flip the Coin#
 501,-3,6,1,0,0,0,1,1,no,0,0,0,weapon,0	//GS_FLING#Fling#

+ 3 - 2
src/map/pc.c

@@ -2603,10 +2603,11 @@ int pc_additem(struct map_session_data *sd,struct item *item_data,int amount)
 	if (i >= MAX_INVENTORY){
 		i = pc_search_inventory(sd,0);
 		if(i<0) return 4;
+		memcpy(&sd->status.inventory[i], item_data, sizeof(sd->status.inventory[0]));
 		// clear equips field first, just in case
 		if (item_data->equip)
-			item_data->equip = 0;
-		memcpy(&sd->status.inventory[i], item_data, sizeof(sd->status.inventory[0]));
+			sd->status.inventory[i].equip = 0;
+
 		sd->status.inventory[i].amount = amount;
 		sd->inventory_data[i] = data;
 		clif_additem(sd,i,amount,0);

+ 11 - 11
src/map/skill.c

@@ -6242,6 +6242,15 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
 	unit_flag = skill_get_unit_flag(skillid);
 	layout = skill_get_unit_layout(skillid,skilllv,src,x,y);
 
+	if (skillid == AL_WARP && flag && src->type == BL_SKILL)
+	{	//Warp Portal morphing to active mode, extract relevant data from src. [Skotlex]
+		group= ((TBL_SKILL*)src)->group;
+		src = map_id2bl(group->src_id);
+		if (!src) return NULL;
+		val2=group->val2; //Copy the (x,y) position you warp to
+		val3=group->val3; //as well as the mapindex to warp to.
+	}
+	
 	BL_CAST(BL_PC, src, sd);
 	status = status_get_status_data(src);
 	sc= status_get_sc(src);	// for traps, firewall and fogwall - celest
@@ -6263,7 +6272,6 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
 		val1=skilllv+6;
 		if(!(flag&1))
 			limit=2000;
-		active_flag=0;
 		break;
 
 	case PR_SANCTUARY:			/* サンクチュアリ */
@@ -7259,16 +7267,8 @@ int skill_unit_onlimit (struct skill_unit *src, unsigned int tick)
 	nullpo_retr(0, sg=src->group);
 
 	switch(sg->unit_id){
-	case UNT_WARP_ACTIVE:	/* ワープポータル(発動前) */
-		{
-			struct skill_unit_group *group=
-				skill_unitsetting(map_id2bl(sg->src_id),sg->skill_id,sg->skill_lv,
-					src->bl.x,src->bl.y,1);
-			if(group == NULL)
-				return 0;
-			group->val2=sg->val2; //Copy the (x,y) position you warp to
-			group->val3=sg->val3; //as well as the mapindex to warp to.
-		}
+	case UNT_WARP_ACTIVE:
+		skill_unitsetting(&src->bl,sg->skill_id,sg->skill_lv,src->bl.x,src->bl.y,1);
 		break;
 
 	case UNT_ICEWALL:	/* アイスウォール */

+ 1 - 3
src/map/status.c

@@ -1744,9 +1744,7 @@ int status_calc_pc(struct map_session_data* sd,int first)
 
 	if(sd->equip_index[EQI_AMMO] >= 0){ // –î
 		index = sd->equip_index[EQI_AMMO];
-		//FIXME: The equip check is a temporary measure until a speed exploit
-		// that has yet to be fixed!
-		if(sd->inventory_data[index] && sd->status.inventory[index].equip&EQP_AMMO){		// Arrows
+		if(sd->inventory_data[index]){		// Arrows
 			sd->state.lr_flag = 2;
 			run_script(sd->inventory_data[index]->script,0,sd->bl.id,0);
 			sd->state.lr_flag = 0;

+ 0 - 1
src/map/unit.c

@@ -1524,7 +1524,6 @@ int unit_remove_map(struct block_list *bl, int clrtype) {
 		if(sd->guild_alliance>0)
 			guild_reply_reqalliance(sd,sd->guild_alliance_account,0);
 
-		pc_stop_following(sd);
 		pc_delinvincibletimer(sd);
 
 		if(sd->pvp_timer!=-1) {