diff options
author | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-04-13 00:45:55 +0000 |
---|---|---|
committer | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-04-13 00:45:55 +0000 |
commit | 3cf706a09c00cf3ceee18a1a26446e3edafdbbec (patch) | |
tree | d6238ce920f94a6fb31d94da69e2cb4094478e3b /src/map | |
parent | ca5e45d061b2d70499651d437a2d7f97f0ebbb67 (diff) | |
download | hercules-3cf706a09c00cf3ceee18a1a26446e3edafdbbec.tar.gz hercules-3cf706a09c00cf3ceee18a1a26446e3edafdbbec.tar.bz2 hercules-3cf706a09c00cf3ceee18a1a26446e3edafdbbec.tar.xz hercules-3cf706a09c00cf3ceee18a1a26446e3edafdbbec.zip |
- Changed slave chasing from using unit_walktobl to map_search_freecell + unit_walktoxy, since the previous behaviour makes all slaves always end up on the same cell.
- Changed some function declarations to take x,y arguments as short rather than int.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@6024 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/map.c | 2 | ||||
-rw-r--r-- | src/map/map.h | 2 | ||||
-rw-r--r-- | src/map/mob.c | 16 | ||||
-rw-r--r-- | src/map/mob.h | 2 | ||||
-rw-r--r-- | src/map/skill.c | 4 | ||||
-rw-r--r-- | src/map/unit.c | 2 | ||||
-rw-r--r-- | src/map/unit.h | 2 |
7 files changed, 16 insertions, 14 deletions
diff --git a/src/map/map.c b/src/map/map.c index bfe0f777f..a1a517ec8 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -1380,7 +1380,7 @@ static int map_count_sub(struct block_list *bl,va_list ap) * &4 = there shouldn't be any players around the target tile (use the no_spawn_on_player setting) *------------------------------------------
*/ -int map_search_freecell(struct block_list *src, int m, int *x,int *y, int rx, int ry, int flag) { +int map_search_freecell(struct block_list *src, int m, short *x,short *y, int rx, int ry, int flag) { int tries, spawn=0; int bx, by; int rx2 = 2*rx+1; diff --git a/src/map/map.h b/src/map/map.h index 0fa350f8b..83c3f3cdb 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -1248,7 +1248,7 @@ int map_addobject(struct block_list *); int map_delobject(int);
int map_delobjectnofree(int id);
void map_foreachobject(int (*)(struct block_list*,va_list),int,...);
-int map_search_freecell(struct block_list *src, int m, int *x,int *y, int rx, int ry, int flag);
+int map_search_freecell(struct block_list *src, int m, short *x, short *y, int rx, int ry, int flag);
//
int map_quit(struct map_session_data *);
// npc
diff --git a/src/map/mob.c b/src/map/mob.c index f7e007bdd..8e28ff6bf 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -256,7 +256,7 @@ int mob_get_random_id(int type, int flag, int lv) { *------------------------------------------
*/
int mob_once_spawn (struct map_session_data *sd, char *mapname,
- int x, int y, const char *mobname, int class_, int amount, const char *event)
+ short x, short y, const char *mobname, int class_, int amount, const char *event)
{
struct mob_data *md = NULL;
struct spawn_data data;
@@ -633,7 +633,7 @@ int mob_spawn (struct mob_data *md) if ((md->spawn->x == 0 && md->spawn->y == 0) || md->spawn->xs || md->spawn->ys)
{ //Monster can be spawned on an area.
- int x, y, xs, ys;
+ short x, y, xs, ys;
if (md->spawn->x == 0 && md->spawn->y == 0)
xs = ys = -1;
else {
@@ -917,9 +917,11 @@ static int mob_ai_sub_hard_slavemob(struct mob_data *md,unsigned int tick) (md->master_dist>MOB_SLAVEDISTANCE || md->master_dist == 0) &&
unit_can_move(&md->bl))
{
+ short x = bl->x, y = bl->y;
mob_stop_attack(md);
- unit_walktobl(&md->bl, bl, MOB_SLAVEDISTANCE, 0);
- }
+ if (map_search_freecell(&md->bl, bl->m, &x, &y, MOB_SLAVEDISTANCE, MOB_SLAVEDISTANCE, 1))
+ unit_walktoxy(&md->bl, x, y, 0);
+ }
} else if (bl->m != md->bl.m && map_flag_gvg(md->bl.m)) {
//Delete the summoned mob if it's in a gvg ground and the master is elsewhere. [Skotlex]
if(md->special_state.ai>0)
@@ -2305,7 +2307,7 @@ int mob_warpslave_sub(struct block_list *bl,va_list ap) {
struct mob_data *md=(struct mob_data *)bl;
struct block_list *master;
- int x,y,range=0;
+ short x,y,range=0;
master = va_arg(ap, struct block_list*);
range = va_arg(ap, int);
@@ -2388,7 +2390,7 @@ int mob_summonslave(struct mob_data *md2,int *value,int amount,int skill_id) amount+=k; //Increase final value by same amount to preserve total number to summon.
}
for(;k<amount;k++) {
- int x,y;
+ short x,y;
data.class_ = value[k%count]; //Summon slaves in round-robin fashion. [Skotlex]
if (mobdb_checkid(data.class_) == 0)
continue;
@@ -2667,7 +2669,7 @@ int mobskill_use(struct mob_data *md, unsigned int tick, int event) {
// ꏊw
struct block_list *bl = NULL;
- int x = 0, y = 0;
+ short x = 0, y = 0;
if (ms[i].target <= MST_AROUND) {
switch (ms[i].target) {
case MST_TARGET:
diff --git a/src/map/mob.h b/src/map/mob.h index 8fb930e1f..3a7a36d4a 100644 --- a/src/map/mob.h +++ b/src/map/mob.h @@ -114,7 +114,7 @@ int mobdb_searchname_array(struct mob_db** data, int size, const char *str); int mobdb_checkid(const int id);
struct view_data* mob_get_viewdata(int class_);
int mob_once_spawn(struct map_session_data *sd,char *mapname,
- int x,int y,const char *mobname,int class_,int amount,const char *event);
+ short x,short y,const char *mobname,int class_,int amount,const char *event);
int mob_once_spawn_area(struct map_session_data *sd,char *mapname,
int x0,int y0,int x1,int y1,
const char *mobname,int class_,int amount,const char *event);
diff --git a/src/map/skill.c b/src/map/skill.c index 92ea69325..f17d63952 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -2349,7 +2349,7 @@ static int skill_timerskill(int tid, unsigned int tick, int id,int data ) switch(skl->skill_id) {
case RG_INTIMIDATE:
if (unit_warp(src,-1,-1,-1,3) == 0) {
- int x,y;
+ short x,y;
map_search_freecell(src, 0, &x, &y, 1, 1, 0);
if (!status_isdead(target))
unit_warp(target, -1, x, y, 3);
@@ -6003,7 +6003,7 @@ int skill_castend_pos2( struct block_list *src, int x,int y,int skillid,int skil case WZ_METEOR: //?eIXg?
{
int flag=0, area = skill_get_splash(skillid, skilllv);
- int tmpx, tmpy, x1 = 0, y1 = 0;
+ short tmpx, tmpy, x1 = 0, y1 = 0;
if (sc && sc->data[SC_MAGICPOWER].timer != -1)
flag = flag|2; //Store the magic power flag for future use. [Skotlex]
for(i=0;i<2+(skilllv>>1);i++) {
diff --git a/src/map/unit.c b/src/map/unit.c index 599ed6a3e..a24cfc723 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -423,7 +423,7 @@ int unit_getdir(struct block_list *bl) //Warps a unit/ud to a given map/position.
//In the case of players, pc_setpos is used.
//it respects the no warp flags, so it is safe to call this without doing nowarpto/nowarp checks.
-int unit_warp(struct block_list *bl,int m,int x,int y,int type)
+int unit_warp(struct block_list *bl,int m,short x,short y,int type)
{
struct unit_data *ud;
nullpo_retr(0, bl);
diff --git a/src/map/unit.h b/src/map/unit.h index 09eaafc30..5c4466351 100644 --- a/src/map/unit.h +++ b/src/map/unit.h @@ -25,7 +25,7 @@ int unit_set_walkdelay(struct block_list *bl, unsigned int tick, int delay, int // ʒűړ(Ȃ)
int unit_movepos(struct block_list *bl,int dst_x,int dst_y, int easy, int checkpath);
-int unit_warp(struct block_list *bl, int map, int x, int y, int type);
+int unit_warp(struct block_list *bl, int map, short x, short y, int type);
int unit_setdir(struct block_list *bl,unsigned char dir);
int unit_getdir(struct block_list *bl);
|