From f648da19a914152a6d772f377dda110fa9248972 Mon Sep 17 00:00:00 2001 From: skotlex Date: Wed, 29 Nov 2006 14:18:20 +0000 Subject: - Some cleaning on the homunc speed calculating code, so that it correctly uses the default walk speed if the player has no speed yet. - Some speed up code when loading status changes (use a pointer instead of memcpy'ing all the time) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@9359 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/chrif.c | 10 +++++----- src/map/pc.c | 2 +- src/map/status.c | 12 ++++++++---- 3 files changed, 14 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/map/chrif.c b/src/map/chrif.c index e08ee8cdf..8c1acdaa4 100644 --- a/src/map/chrif.c +++ b/src/map/chrif.c @@ -1258,7 +1258,7 @@ int chrif_load_scdata(int fd) { //Retrieve and load sc_data for a player. [Skotlex] #ifdef ENABLE_SC_SAVING struct map_session_data *sd; - struct status_change_data data; + struct status_change_data *data; int aid, cid, i, count; RFIFOHEAD(fd); @@ -1279,13 +1279,13 @@ int chrif_load_scdata(int fd) count = RFIFOW(fd,12); //sc_count for (i = 0; i < count; i++) { - memcpy(&data, RFIFOP(fd,14 + i*sizeof(struct status_change_data)), sizeof(struct status_change_data)); - if (data.tick < 1) + data = (struct status_change_data*)RFIFOP(fd,14 + i*sizeof(struct status_change_data)); + if (data->tick < 1) { //Protection against invalid tick values. [Skotlex] - ShowWarning("chrif_load_scdata: Received invalid duration (%d ms) for status change %d (character %s)\n", data.tick, data.type, sd->status.name); + ShowWarning("chrif_load_scdata: Received invalid duration (%d ms) for status change %d (character %s)\n", data->tick, data->type, sd->status.name); continue; } - status_change_start(&sd->bl, data.type, 10000, data.val1, data.val2, data.val3, data.val4, data.tick, 15); + status_change_start(&sd->bl, data->type, 10000, data->val1, data->val2, data->val3, data->val4, data->tick, 15); } #endif return 0; diff --git a/src/map/pc.c b/src/map/pc.c index 80ce76857..51fb2e23a 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -666,7 +666,7 @@ int pc_authok(struct map_session_data *sd, int login_id2, time_t connect_until_t intif_request_petdata(sd->status.account_id, sd->status.char_id, sd->status.pet_id); // Homunculus [albator] - if (sd->status.hom_id > 0) + if (sd->status.hom_id > 0) intif_homunculus_requestload(sd->status.account_id, sd->status.hom_id); if (sd->status.party_id > 0 && party_search(sd->status.party_id) == NULL) diff --git a/src/map/status.c b/src/map/status.c index 164c6f4e6..3b36944c1 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2364,10 +2364,11 @@ int status_calc_homunculus(struct homun_data *hd, int first) status->size = hd->homunculusDB->size ; status->rhw.range = 1 + status->size; status->mode = MD_CANMOVE|MD_CANATTACK|MD_ASSIST|MD_AGGRESSIVE|MD_CASTSENSOR; - if (battle_config.slaves_inherit_speed && hd->master) + status->speed = DEFAULT_WALK_SPEED; + if (battle_config.slaves_inherit_speed&1 && + hd->master && hd->master->state.auth) //Master needs be authed to have valid speed. status->speed = status_get_speed(&hd->master->bl); - else - status->speed = DEFAULT_WALK_SPEED; + status->hp = 1; status->sp = 1; } @@ -2849,7 +2850,10 @@ void status_calc_bl_sub_hom(struct homun_data *hd, unsigned long flag) //[orn] if(flag&SCB_MATK) //Hom Min Matk is always the same as Max Matk status->matk_min = status->matk_max; - + + if(flag&SCB_SPEED && battle_config.slaves_inherit_speed&1 && hd->master) + status->speed = status_get_speed(&hd->master->bl); + if(flag&(SCB_ASPD|SCB_AGI|SCB_DEX)) { flag|=SCB_ASPD; -- cgit v1.2.3-70-g09d2