diff options
author | Haru <haru@dotalux.com> | 2013-10-11 05:07:45 +0200 |
---|---|---|
committer | Haru <haru@dotalux.com> | 2013-10-26 12:46:46 +0200 |
commit | 44c33fda3614d588e6bf6cee1cf884e98f1531f0 (patch) | |
tree | b617c00c97675668f3c3a8a44b4c966e39ed520c /src/map/elemental.c | |
parent | d39918017d4416add066fb78ab7f23cb4436c614 (diff) | |
download | hercules-44c33fda3614d588e6bf6cee1cf884e98f1531f0.tar.gz hercules-44c33fda3614d588e6bf6cee1cf884e98f1531f0.tar.bz2 hercules-44c33fda3614d588e6bf6cee1cf884e98f1531f0.tar.xz hercules-44c33fda3614d588e6bf6cee1cf884e98f1531f0.zip |
Changed 'tick' variables to 64 bit
- This fixes an issue with timers that stop working after about 24-49
days when the tick overflows (note that this may happen much earlier
than that, and at hard to predict times, on some systems)
- Updated the RDTSC help message in the configure script to also warn
users about issues with SpeedStep enabled systems.
- On Windows, tick() still has a resolution of 10~15ms (or even as low
as 100ms on some systems). A TODO comment (thanks, Ai4rei) was added
for a follow-up patch, as I want this one to be as small as possible)
- Note: on Windows versions earlier than 6.x (Vista, Server 2008), the
tick overflow issue is NOT fixed, since they don't support the
function used to retrieve a 64 bit tick. This isn't a big issue, since
those platforms are already - or going soon to be - out of their
extended support period, and it's already advisable to upgrade, for
other reasons. If you're the unfortunate user of such a system, it is
recommended that you reboot your machine at least once every 49 days
for Hercules to work reliably.
- Note: To clear some doubts, since I've already been asked, this has
absolutely NOTHING to do with 32/64 bit CPUs or OSes. It's all about
a variable's size, not the size of registers of your CPU, and your
32bit CPU will be able to handle this just fine.
Signed-off-by: Haru <haru@dotalux.com>
Diffstat (limited to 'src/map/elemental.c')
-rw-r--r-- | src/map/elemental.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/map/elemental.c b/src/map/elemental.c index 3251ca992..f15b735b2 100644 --- a/src/map/elemental.c +++ b/src/map/elemental.c @@ -148,7 +148,7 @@ int elemental_get_lifetime(struct elemental_data *ed) { return 0; td = timer->get(ed->summon_timer); - return (td != NULL) ? DIFF_TICK(td->tick, timer->gettick()) : 0; + return (td != NULL) ? DIFF_TICK32(td->tick, timer->gettick()) : 0; } int elemental_save(struct elemental_data *ed) { @@ -169,7 +169,7 @@ int elemental_save(struct elemental_data *ed) { return 1; } -int elemental_summon_end_timer(int tid, unsigned int tick, int id, intptr_t data) { +int elemental_summon_end_timer(int tid, int64 tick, int id, intptr_t data) { struct map_session_data *sd; struct elemental_data *ed; @@ -388,7 +388,7 @@ int elemental_clean_effect(struct elemental_data *ed) { return 1; } -int elemental_action(struct elemental_data *ed, struct block_list *bl, unsigned int tick) { +int elemental_action(struct elemental_data *ed, struct block_list *bl, int64 tick) { struct skill_condition req; uint16 skill_id, skill_lv; int i; @@ -636,7 +636,7 @@ int elemental_ai_sub_timer_activesearch(struct block_list *bl, va_list ap) { return 0; } -int elemental_ai_sub_timer(struct elemental_data *ed, struct map_session_data *sd, unsigned int tick) { +int elemental_ai_sub_timer(struct elemental_data *ed, struct map_session_data *sd, int64 tick) { struct block_list *target = NULL; int master_dist, view_range, mode; @@ -723,7 +723,7 @@ int elemental_ai_sub_timer(struct elemental_data *ed, struct map_session_data *s } if( battle->check_range(&ed->bl,target,view_range) && rnd()%100 < 2 ) { // 2% chance to cast attack skill. - if( elemental->action(ed,target,tick) ) + if( elemental->action(ed,target,tick) ) return 1; } @@ -746,14 +746,14 @@ int elemental_ai_sub_timer(struct elemental_data *ed, struct map_session_data *s } int elemental_ai_sub_foreachclient(struct map_session_data *sd, va_list ap) { - unsigned int tick = va_arg(ap,unsigned int); + int64 tick = va_arg(ap,int64); if(sd->status.ele_id && sd->ed) elemental->ai_sub_timer(sd->ed,sd,tick); return 0; } -int elemental_ai_timer(int tid, unsigned int tick, int id, intptr_t data) { +int elemental_ai_timer(int tid, int64 tick, int id, intptr_t data) { map->foreachpc(elemental->ai_sub_foreachclient,tick); return 0; } |