diff options
author | Lance <Lance@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-05-29 16:15:48 +0000 |
---|---|---|
committer | Lance <Lance@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-05-29 16:15:48 +0000 |
commit | ca1b74a373e9487e7eefe6f58af0c2453d038baa (patch) | |
tree | 62b85247a427176d8c44ff1e5f6769f7a1787f9b /src | |
parent | 6277250d56cf88f1ec22ac20816d887089ebda45 (diff) | |
download | hercules-ca1b74a373e9487e7eefe6f58af0c2453d038baa.tar.gz hercules-ca1b74a373e9487e7eefe6f58af0c2453d038baa.tar.bz2 hercules-ca1b74a373e9487e7eefe6f58af0c2453d038baa.tar.xz hercules-ca1b74a373e9487e7eefe6f58af0c2453d038baa.zip |
[Fixed]:
- pc_follow_timer possible triggering crash.
- pc_reg_received to use battle_status.hp instead of status.hp
[Added]:
- macro map_id2index for non-cyptic mapid to mapindex conversion.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@6822 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r-- | src/map/map.h | 4 | ||||
-rw-r--r-- | src/map/pc.c | 21 |
2 files changed, 15 insertions, 10 deletions
diff --git a/src/map/map.h b/src/map/map.h index 23d920011..2043f65b6 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -53,6 +53,8 @@ #define MAX_SEARCH 5
#define MAX_DUEL 1024
+#define map_id2index(id) map[(id)].index
+
//These mark the ID of the jobs, as expected by the client. [Skotlex]
enum {
JOB_NOVICE,
@@ -1278,7 +1280,7 @@ extern char db_path[256]; // gat?֧
int map_getcell(int,int,int,cell_t);
-int map_getcellp(struct map_data*,int,int,cell_t);
+int map_getcellp(struct map_data*,int,int,int);
void map_setcell(int,int,int,int);
extern int map_read_flag; // 0: grfիE1: ëE2: ëE?)
enum {
diff --git a/src/map/pc.c b/src/map/pc.c index b0e7e8506..21ed024cf 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -795,8 +795,7 @@ int pc_reg_received(struct map_session_data *sd) sd->mission_count = pc_readglobalreg(sd,"TK_MISSION_COUNT");
}
- if(sd->status.hp <= 0){
- sd->status.hp = 0;
+ if(sd->battle_status.hp == 0){
pc_setrestartvalue(sd, 1);
}
@@ -3644,7 +3643,8 @@ char * job_name(int class_) { int pc_follow_timer(int tid,unsigned int tick,int id,int data)
{
- struct map_session_data *sd, *tsd;
+ struct map_session_data *sd;
+ struct block_list *tbl;
sd = map_id2sd(id);
nullpo_retr(0, sd);
@@ -3660,19 +3660,22 @@ int pc_follow_timer(int tid,unsigned int tick,int id,int data) if (pc_isdead(sd))
return 0;
- if ((tsd = map_id2sd(sd->followtarget)) == NULL || pc_isdead(tsd))
+ if ((tbl = map_id2bl(sd->followtarget)) == NULL)
+ return 0;
+
+ if(tbl->type == BL_PC && pc_isdead((TBL_PC *)tbl))
return 0;
// either player or target is currently detached from map blocks (could be teleporting),
// but still connected to this map, so we'll just increment the timer and check back later
- if (sd->bl.prev != NULL && tsd->bl.prev != NULL &&
+ if (sd->bl.prev != NULL && tbl->prev != NULL &&
sd->ud.skilltimer == -1 && sd->ud.attacktimer == -1 && sd->ud.walktimer == -1)
{
- if((sd->bl.m == tsd->bl.m) && unit_can_reach_bl(&sd->bl,&tsd->bl, AREA_SIZE, 0, NULL, NULL)) {
- if (!check_distance_bl(&sd->bl, &tsd->bl, 5))
- unit_walktobl(&sd->bl, &tsd->bl, 5, 0);
+ if((sd->bl.m == tbl->m) && unit_can_reach_bl(&sd->bl,tbl, AREA_SIZE, 0, NULL, NULL)) {
+ if (!check_distance_bl(&sd->bl, tbl, 5))
+ unit_walktobl(&sd->bl, tbl, 5, 0);
} else
- pc_setpos(sd, tsd->mapindex, tsd->bl.x, tsd->bl.y, 3);
+ pc_setpos(sd, map_id2index(tbl->m), tbl->x, tbl->y, 3);
}
sd->followtimer = add_timer(
tick + 1000, // increase time a bit to loosen up map's load
|