Browse Source

- Corrected range of self destruction / bio explosion to be equal to their splash range.
- Corrected Spider Web casting around caster instead of target's position
- Corrected a possible crash during login due to checking for the incorrect variable (lets pc_calc_status be invoked when it shouldn't)
- Reenabled the base status aspd calculation for homunc (status_calc_bl calculates battle_status, status_calc_homunculus calculates base_status, they are not the same!)
- Corrected the meaning of "skill_display_fail&2", made 2 the default setting.
- Added bounds checking to map_foreachincell
- Opt2 values (poison, blind, and so on) are now resent on warp/map-change
- Corrected description of isloggedin script command.


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

skotlex 18 years ago
parent
commit
68e1eb420a

+ 7 - 0
Changelog-Trunk.txt

@@ -3,6 +3,13 @@ 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/12
+	* Corrected Spider Web casting around caster instead of target's position.
+	* Corrected a possible crash during login due to checking for the incorrect
+	  variable (lets pc_calc_status be invoked when it shouldn't)
+	* Added bounds checking to map_foreachincell.
+	* Opt2 values (poison, blind, and so on) are now resent on warp/map-change.
+	* Corrected description of isloggedin script command. [Skotlex]
 2007/02/11
 	* Fixed the inverted behavior of display_skill_fail, caused by r9823
 	* Fixed @loadnpc not updating the script_event[] array

+ 3 - 0
conf-tmpl/Changelog.txt

@@ -1,5 +1,8 @@
 Date	Added
 
+2007/02/12
+	* Corrected the meaning of "skill_display_fail&2", made 2 the default
+	  setting. [Skotlex]
 2007/02/08
 	* Since the mysql ping interval is now autoconfigured, removed
 	the connection_ping_interval config setting in inter_athena.conf

+ 1 - 1
conf-tmpl/battle/skill.conf

@@ -161,7 +161,7 @@ land_skill_limit: 1
 // 2 - Disable skill-failed messages due to can-act delays.
 // 4 - Disable failed message from Snatcher
 // 8 - Disable failed message from Envenom
-display_skill_fail: 0
+display_skill_fail: 2
 
 // Can a player in chat room (in-game), be warped by a warp portal? (Note 1)
 chat_warpportal: no

+ 3 - 0
db/Changelog.txt

@@ -19,6 +19,9 @@
 	-----
 
 ========================
+02/12
+	* Corrected range of self destruction / bio explosion to be equal to their
+	  splash range. [Skotlex]
 02/10
 	* Fixed Armeyer Dinze Card [Playtester]
 	* Reverted Fly Wing and Butterfly Wing to the old version [Playtester]

+ 2 - 2
db/skill_db.txt

@@ -400,7 +400,7 @@
 366,0,6,4,0,1,0,10,1,no,0,0,0,magic,0	//HW_MAGICPOWER#Mystical Amplification#
 367,9,8,1,0,0,0,5,1,no,0,0,0,misc,0	//PA_PRESSURE#Gloria Domini#
 368,0,6,4,0,1,0,5,1,yes,0,0,0,weapon,0	//PA_SACRIFICE# Martyr's Reckoning#
-369,5,6,4,0,1,0,10,1,yes,0,0,0,misc,0	//PA_GOSPEL#Battle Chant#
+369,0,6,4,0,1,0,10,1,yes,0,0,0,misc,0	//PA_GOSPEL#Battle Chant#
 370,-2,6,1,-1,0,0,5,1,yes,0,0,0,weapon,3	//CH_PALMSTRIKE#Raging Palm Strike#
 371,-2,8,4,-1,0,0,5,1,no,0,0x200,0,weapon,0	//CH_TIGERFIST#Glacier Fist#
 372,-2,8,4,-1,0,0,10,-1:-1:-2:-2:-3:-3:-4:-4:-5:-5,no,0,0x200,0,weapon,0	//CH_CHAINCRUSH#Chain Crush Combo#
@@ -612,7 +612,7 @@
 8013,9,6,1,0,0,0,5,1:2:3:4:5,no,0,0,0,magic,0	//HVAN_CAPRICE
 8014,0,6,4,0,1,0,5,0,no,0,0,0,none,0	//HVAN_CHAOTIC
 8015,0,0,0,0,1,0,5,0,no,0,0,0,none,0	//HVAN_INSTRUCT
-8016,5,6,4,-1,2,4,3,1,no,0,0,0,misc,0	//HVAN_EXPLOSION
+8016,4,6,4,-1,2,4,3,1,no,0,0,0,misc,0	//HVAN_EXPLOSION
 
 10000,0,0,0,0,0,0,1,0,no,0,0x10,0,none,0	//GD_APPROVAL#Approval#
 10001,0,0,0,0,0,0,1,0,no,0,0x10,0,none,0	//GD_KAFRACONTRACT#Kafra Contract#

+ 2 - 2
doc/script_commands.txt

@@ -2838,9 +2838,9 @@ account ID.
 
 -------------------------
 
-*isloggedin(<character id>)
+*isloggedin(<account id>)
 
-This function returns 1 if the specified character is logged in and 0 if they 
+This function returns 1 if the specified account is logged in and 0 if they 
 aren't.
 
 ---------------------------------------

+ 3 - 3
src/map/atcommand.c

@@ -4167,14 +4167,14 @@ int atcommand_stat_all(const int fd, struct map_session_data* sd, const char* co
 			*status[index] = new_value;
 			clif_updatestatus(sd, SP_STR + index);
 			clif_updatestatus(sd, SP_USTR + index);
-			status_calc_pc(sd, 0);
 			count++;
 		}
 	}
 
-	if (count > 0) // if at least 1 stat modified
+	if (count > 0) { // if at least 1 stat modified
+		status_calc_pc(sd, 0);
 		clif_displaymessage(fd, msg_txt(84)); // All stats changed!
-	else {
+	} else {
 		if (value < 0)
 			clif_displaymessage(fd, msg_txt(177)); // Impossible to decrease a stat.
 		else

+ 3 - 0
src/map/clif.c

@@ -8298,6 +8298,9 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
 	if (pc_checkskill(sd, SG_DEVIL) && !pc_nextjobexp(sd))
 		clif_status_load(&sd->bl, SI_DEVIL, 1);  //blindness [Komurka]
 
+	if (sd->sc.opt2) //Client loses these on warp.
+		clif_changeoption(&sd->bl);
+
 	clif_weather_check(sd);
 	
 	map_foreachinarea(clif_getareachar,sd->bl.m,

+ 2 - 0
src/map/map.c

@@ -996,6 +996,8 @@ int map_foreachincell(int (*func)(struct block_list*,va_list),int m,int x,int y,
 	va_list ap;
 	int blockcount=bl_list_count,i,c;
 
+	if (x < 0 || y < 0 || x >= map[m].xs || y >= map[m].ys) return 0;
+
 	va_start(ap,type);
 
 	by=y/BLOCK_SIZE;

+ 1 - 1
src/map/pc.c

@@ -613,7 +613,7 @@ int pc_authok(struct map_session_data *sd, int login_id2, time_t connect_until_t
 	if (battle_config.disp_zeny)
 		sd->state.showzeny = 1;
 	
-	if (battle_config.display_skill_fail&2)
+	if (!(battle_config.display_skill_fail&2))
 		sd->state.showdelay = 1;
 		
 	// Request all registries.

+ 19 - 18
src/map/skill.c

@@ -5550,24 +5550,6 @@ int skill_castend_id (int tid, unsigned int tick, int id, int data)
 		return 0;
 	}
 
-	switch (ud->skillid) {
-		//These should become skill_castend_pos
-		case WE_CALLPARTNER:
-		case WE_CALLPARENT:
-		case WE_CALLBABY:
-		case AM_RESURRECTHOMUN:
-		case PF_SPIDERWEB:
-			//Find a random spot to place the skill. [Skotlex]
-			inf2 = skill_get_splash(ud->skillid, ud->skilllv);
-			ud->skillx = src->x + inf2;
-			ud->skilly = src->y + inf2;
-			if (inf2 && !map_random_dir(src, &ud->skillx, &ud->skilly)) {
-				ud->skillx = src->x;
-				ud->skilly = src->y;
-			}
-			return skill_castend_pos(tid,tick,id,data);
-	}
-
 	if(ud->skillid != SA_CASTCANCEL ) {
 		if( ud->skilltimer != tid ) {
 			ShowError("skill_castend_id: Timer mismatch %d!=%d!\n", ud->skilltimer, tid);
@@ -5584,12 +5566,31 @@ int skill_castend_id (int tid, unsigned int tick, int id, int data)
 	else
 		target = map_id2bl(ud->skilltarget);
 
+
 	// Use a do so that you can break out of it when the skill fails.
 	do {
 		if(!target || target->prev==NULL) break;
 
 		if(src->m != target->m || status_isdead(src)) break;
 
+		switch (ud->skillid) {
+			//These should become skill_castend_pos
+			case WE_CALLPARTNER:
+			case WE_CALLPARENT:
+			case WE_CALLBABY:
+			case AM_RESURRECTHOMUN:
+			case PF_SPIDERWEB:
+				//Find a random spot to place the skill. [Skotlex]
+				inf2 = skill_get_splash(ud->skillid, ud->skilllv);
+				ud->skillx = target->x + inf2;
+				ud->skilly = target->y + inf2;
+				if (inf2 && !map_random_dir(target, &ud->skillx, &ud->skilly)) {
+					ud->skillx = target->x;
+					ud->skilly = target->y;
+				}
+				return skill_castend_pos(tid,tick,id,data);
+		}
+
 		if(ud->skillid == RG_BACKSTAP) {
 			int dir = map_calc_dir(src,target->x,target->y),t_dir = unit_getdir(target);
 			if(check_distance_bl(src, target, 0) || map_check_dir(dir,t_dir)) {

+ 2 - 3
src/map/status.c

@@ -1530,7 +1530,7 @@ int status_calc_pc(struct map_session_data* sd,int first)
 	int i,index;
 	int skill,refinedef=0;
 
-	if(sd->state.connect_new && !(first&1)) //Shouldn't invoke yet until player is done loading.
+	if(!sd->state.auth && !(first&1)) //Shouldn't invoke yet until player is done loading.
 		return -1;
 
 	if (++calculating > 10) //Too many recursive calls!
@@ -2413,12 +2413,11 @@ int status_calc_homunculus(struct homun_data *hd, int first)
 
 	status->aspd_rate = 1000;
 
-	/* //this calc is useless since status_calc_bl(SCB_ALL) does it already
 	skill = (1000 -4*status->agi -status->dex)
 			*hd->homunculusDB->baseASPD/1000;
 
 	status->amotion = cap_value(skill,battle_config.max_aspd,2000);
-	status->adelay = status->amotion; //It seems adelay = amotion for Homunculus.*/
+	status->adelay = status->amotion; //It seems adelay = amotion for Homunculus.
 
 	status_calc_misc(&hd->bl, status, hom->level);
 	status_calc_bl(&hd->bl, SCB_ALL); //Status related changes.