Index: src/map/mercenary.c
===================================================================
--- src/map/mercenary.c (revision 17348)
+++ src/map/mercenary.c (working copy)
@@ -321,6 +321,7 @@
map_addiddb(&md->bl);
status_calc_mercenary(md,1);
md->contract_timer = INVALID_TIMER;
+ md->masterteleport_timer = INVALID_TIMER;
merc_contract_init(md);
}
else
@@ -473,7 +474,7 @@
ShowError("read_mercenary_skilldb : Class %d not found in mercenary_db for skill entry.\n", class_);
return false;
}
-
+
skill_id = atoi(str[1]);
if( skill_id < MC_SKILLBASE || skill_id >= MC_SKILLBASE + MAX_MERCSKILL )
{
@@ -502,7 +503,7 @@
{
read_mercenarydb();
read_mercenary_skilldb();
-
+
//add_timer_func_list(mercenary_contract, "mercenary_contract");
return 0;
}
Index: src/map/unit.c
===================================================================
--- src/map/unit.c (revision 17348)
+++ src/map/unit.c (working copy)
@@ -140,22 +140,15 @@
struct block_list *bl = map_id2bl(id);
int *mast_tid = unit_get_masterteleport_timer(bl);
- if(tid == INVALID_TIMER)
+ if(tid == INVALID_TIMER || mast_tid == NULL)
return 0;
- else if(*mast_tid && *mast_tid != tid)
+ else if(*mast_tid != tid)
return 0;
else {
TBL_PC *msd = unit_get_master(bl);
- switch(data){
- case BL_HOM:
- case BL_ELEM:
- case BL_PET :
- case BL_MER :
- if(msd && *mast_tid != INVALID_TIMER && !check_distance_bl(&msd->bl, bl, MAX_MER_DISTANCE)){
- *mast_tid = INVALID_TIMER;
- unit_warp(bl, msd->bl.id, msd->bl.x, msd->bl.y, CLR_TELEPORT );
- }
- break;
+ if(msd && !check_distance_bl(&msd->bl, bl, data)){
+ *mast_tid = INVALID_TIMER;
+ unit_warp(bl, msd->bl.id, msd->bl.x, msd->bl.y, CLR_TELEPORT );
}
}
return 0;
@@ -163,19 +156,19 @@
int unit_check_start_teleport_timer(struct block_list *sbl){
TBL_PC *msd = unit_get_master(sbl);
- int max_dist=AREA_SIZE;
+ int max_dist=0;
switch(sbl->type){
- //case BL_HOM: max_dist = MAX_HOM_DISTANCE; break;
+ case BL_HOM: max_dist = AREA_SIZE; break;
case BL_ELEM: max_dist = MAX_ELEDISTANCE; break;
- //case BL_PET : max_dist = MAX_PET_DISTANCE; break;
+ case BL_PET : max_dist = AREA_SIZE; break;
case BL_MER : max_dist = MAX_MER_DISTANCE; break;
}
- if(msd){ //if there is a master
+ if(msd && max_dist){ //if there is a master and it's a valid type
int *msd_tid = unit_get_masterteleport_timer(sbl);
-
+ if(msd_tid == NULL) return 0;
if (!check_distance_bl(&msd->bl, sbl, max_dist)) {
if(*msd_tid == INVALID_TIMER || *msd_tid == 0)
- *msd_tid = add_timer(gettick()+3000,unit_teleport_timer,sbl->id,BL_MER);
+ *msd_tid = add_timer(gettick()+3000,unit_teleport_timer,sbl->id,max_dist);
}
else {
if(*msd_tid && *msd_tid != INVALID_TIMER)
Index: src/map/pet.c
===================================================================
--- src/map/pet.c (revision 17348)
+++ src/map/pet.c (working copy)
@@ -382,6 +382,7 @@
if( interval <= 0 )
interval = 1;
pd->pet_hungry_timer = add_timer(gettick() + interval, pet_hungry, sd->bl.id, 0);
+ pd->masterteleport_timer = INVALID_TIMER;
return 0;
}
Index: src/map/homunculus.c
===================================================================
--- src/map/homunculus.c (revision 17348)
+++ src/map/homunculus.c (working copy)
@@ -798,6 +798,7 @@
status_calc_homunculus(hd,1);
hd->hungry_timer = INVALID_TIMER;
+ hd->masterteleport_timer = INVALID_TIMER;
return 0;
}
Index: src/map/elemental.c
===================================================================
--- src/map/elemental.c (revision 17348)
+++ src/map/elemental.c (working copy)
@@ -261,6 +261,7 @@
status_calc_elemental(ed,1);
ed->last_spdrain_time = ed->last_thinktime = gettick();
ed->summon_timer = INVALID_TIMER;
+ ed->masterteleport_timer = INVALID_TIMER;
elemental_summon_init(ed);
} else {
memcpy(&sd->ed->elemental, ele, sizeof(struct s_elemental));