summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-02-21 19:19:15 +0300
committerAndrei Karas <akaras@inbox.ru>2015-02-21 19:19:15 +0300
commitec431e54185f525e7006cae9f7e1a6fe9ced39b5 (patch)
treee5bd4f5cfd3207b628a3bb1d8d53579db470bacd /src
parent5931a58658c9c5a486dacaf4d1515d4f736da19f (diff)
downloadplugin-ec431e54185f525e7006cae9f7e1a6fe9ced39b5.tar.gz
plugin-ec431e54185f525e7006cae9f7e1a6fe9ced39b5.tar.bz2
plugin-ec431e54185f525e7006cae9f7e1a6fe9ced39b5.tar.xz
plugin-ec431e54185f525e7006cae9f7e1a6fe9ced39b5.zip
Fix heavy CPU usage while walking.
After this commit and some changes in configuration it allow spawn more than 7k mobs in small area with small CPU usage.
Diffstat (limited to 'src')
-rw-r--r--src/map/init.c1
-rw-r--r--src/map/unit.c11
-rw-r--r--src/map/unit.h1
3 files changed, 13 insertions, 0 deletions
diff --git a/src/map/init.c b/src/map/init.c
index 810089d..3c736f9 100644
--- a/src/map/init.c
+++ b/src/map/init.c
@@ -133,6 +133,7 @@ HPExport void plugin_init (void)
addHookPre("itemdb->is_item_usable", eitemdb_is_item_usable);
addHookPre("itemdb->readdb_additional_fields", eitemdb_readdb_additional_fields);
addHookPre("unit->can_move", eunit_can_move);
+ addHookPre("unit->walktoxy", eunit_walktoxy);
addHookPost("clif->getareachar_unit", eclif_getareachar_unit_post);
addHookPost("clif->authok", eclif_authok_post);
diff --git a/src/map/unit.c b/src/map/unit.c
index 2e6276e..0c6445b 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -145,3 +145,14 @@ int eunit_can_move(struct block_list *bl)
hookStop();
return 1;
}
+
+int eunit_walktoxy(struct block_list *bl __attribute__ ((unused)),
+ short *x __attribute__ ((unused)),
+ short *y __attribute__ ((unused)),
+ int *flagPtr)
+{
+ // reset flag "Search for an unoccupied cell and cancel if none available"
+ // this reduce CPU usage and allow mobs to walk on each other.
+ if ((*flagPtr)&8)
+ *flagPtr = ((*flagPtr) | 8) ^ 8;
+}
diff --git a/src/map/unit.h b/src/map/unit.h
index 00fba4a..675bf0e 100644
--- a/src/map/unit.h
+++ b/src/map/unit.h
@@ -5,5 +5,6 @@
#define EVOL_MAP_UNIT
int eunit_can_move(struct block_list *bl);
+int eunit_walktoxy(struct block_list *bl, short *x, short *y, int *flagPtr);
#endif // EVOL_MAP_UNIT