From 16c5028d6274e5c1a21dfcc0f26f926597ff2edd Mon Sep 17 00:00:00 2001 From: skotlex Date: Mon, 12 Feb 2007 18:02:41 +0000 Subject: - Corrected range of self destruction / bio explosion to be equal to their splash range. - Corrected Spider Web casting around caster instead of target's position - Corrected a possible crash during login due to checking for the incorrect variable (lets pc_calc_status be invoked when it shouldn't) - Reenabled the base status aspd calculation for homunc (status_calc_bl calculates battle_status, status_calc_homunculus calculates base_status, they are not the same!) - Corrected the meaning of "skill_display_fail&2", made 2 the default setting. - Added bounds checking to map_foreachincell - Opt2 values (poison, blind, and so on) are now resent on warp/map-change - Corrected description of isloggedin script command. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@9853 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 7 +++++++ conf-tmpl/Changelog.txt | 3 +++ conf-tmpl/battle/skill.conf | 2 +- db/Changelog.txt | 3 +++ db/skill_db.txt | 4 ++-- doc/script_commands.txt | 4 ++-- src/map/atcommand.c | 6 +++--- src/map/clif.c | 3 +++ src/map/map.c | 2 ++ src/map/pc.c | 2 +- src/map/skill.c | 37 +++++++++++++++++++------------------ src/map/status.c | 5 ++--- 12 files changed, 48 insertions(+), 30 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 854d5ad44..770595f71 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,6 +3,13 @@ Date Added AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. +2007/02/12 + * Corrected Spider Web casting around caster instead of target's position. + * Corrected a possible crash during login due to checking for the incorrect + variable (lets pc_calc_status be invoked when it shouldn't) + * Added bounds checking to map_foreachincell. + * Opt2 values (poison, blind, and so on) are now resent on warp/map-change. + * Corrected description of isloggedin script command. [Skotlex] 2007/02/11 * Fixed the inverted behavior of display_skill_fail, caused by r9823 * Fixed @loadnpc not updating the script_event[] array diff --git a/conf-tmpl/Changelog.txt b/conf-tmpl/Changelog.txt index b5b49e50c..a73a69e99 100644 --- a/conf-tmpl/Changelog.txt +++ b/conf-tmpl/Changelog.txt @@ -1,5 +1,8 @@ Date Added +2007/02/12 + * Corrected the meaning of "skill_display_fail&2", made 2 the default + setting. [Skotlex] 2007/02/08 * Since the mysql ping interval is now autoconfigured, removed the connection_ping_interval config setting in inter_athena.conf diff --git a/conf-tmpl/battle/skill.conf b/conf-tmpl/battle/skill.conf index 8c7d00e17..ebd8b2ea3 100644 --- a/conf-tmpl/battle/skill.conf +++ b/conf-tmpl/battle/skill.conf @@ -161,7 +161,7 @@ land_skill_limit: 1 // 2 - Disable skill-failed messages due to can-act delays. // 4 - Disable failed message from Snatcher // 8 - Disable failed message from Envenom -display_skill_fail: 0 +display_skill_fail: 2 // Can a player in chat room (in-game), be warped by a warp portal? (Note 1) chat_warpportal: no diff --git a/db/Changelog.txt b/db/Changelog.txt index 3e0b2ab65..e6213af2c 100644 --- a/db/Changelog.txt +++ b/db/Changelog.txt @@ -19,6 +19,9 @@ ----- ======================== +02/12 + * Corrected range of self destruction / bio explosion to be equal to their + splash range. [Skotlex] 02/10 * Fixed Armeyer Dinze Card [Playtester] * Reverted Fly Wing and Butterfly Wing to the old version [Playtester] diff --git a/db/skill_db.txt b/db/skill_db.txt index 293dd3910..e07c1b524 100644 --- a/db/skill_db.txt +++ b/db/skill_db.txt @@ -400,7 +400,7 @@ 366,0,6,4,0,1,0,10,1,no,0,0,0,magic,0 //HW_MAGICPOWER#Mystical Amplification# 367,9,8,1,0,0,0,5,1,no,0,0,0,misc,0 //PA_PRESSURE#Gloria Domini# 368,0,6,4,0,1,0,5,1,yes,0,0,0,weapon,0 //PA_SACRIFICE# Martyr's Reckoning# -369,5,6,4,0,1,0,10,1,yes,0,0,0,misc,0 //PA_GOSPEL#Battle Chant# +369,0,6,4,0,1,0,10,1,yes,0,0,0,misc,0 //PA_GOSPEL#Battle Chant# 370,-2,6,1,-1,0,0,5,1,yes,0,0,0,weapon,3 //CH_PALMSTRIKE#Raging Palm Strike# 371,-2,8,4,-1,0,0,5,1,no,0,0x200,0,weapon,0 //CH_TIGERFIST#Glacier Fist# 372,-2,8,4,-1,0,0,10,-1:-1:-2:-2:-3:-3:-4:-4:-5:-5,no,0,0x200,0,weapon,0 //CH_CHAINCRUSH#Chain Crush Combo# @@ -612,7 +612,7 @@ 8013,9,6,1,0,0,0,5,1:2:3:4:5,no,0,0,0,magic,0 //HVAN_CAPRICE 8014,0,6,4,0,1,0,5,0,no,0,0,0,none,0 //HVAN_CHAOTIC 8015,0,0,0,0,1,0,5,0,no,0,0,0,none,0 //HVAN_INSTRUCT -8016,5,6,4,-1,2,4,3,1,no,0,0,0,misc,0 //HVAN_EXPLOSION +8016,4,6,4,-1,2,4,3,1,no,0,0,0,misc,0 //HVAN_EXPLOSION 10000,0,0,0,0,0,0,1,0,no,0,0x10,0,none,0 //GD_APPROVAL#Approval# 10001,0,0,0,0,0,0,1,0,no,0,0x10,0,none,0 //GD_KAFRACONTRACT#Kafra Contract# diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 549fbb729..a6293172f 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -2838,9 +2838,9 @@ account ID. ------------------------- -*isloggedin() +*isloggedin() -This function returns 1 if the specified character is logged in and 0 if they +This function returns 1 if the specified account is logged in and 0 if they aren't. --------------------------------------- diff --git a/src/map/atcommand.c b/src/map/atcommand.c index d0fbdf291..9a427547c 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -4167,14 +4167,14 @@ int atcommand_stat_all(const int fd, struct map_session_data* sd, const char* co *status[index] = new_value; clif_updatestatus(sd, SP_STR + index); clif_updatestatus(sd, SP_USTR + index); - status_calc_pc(sd, 0); count++; } } - if (count > 0) // if at least 1 stat modified + if (count > 0) { // if at least 1 stat modified + status_calc_pc(sd, 0); clif_displaymessage(fd, msg_txt(84)); // All stats changed! - else { + } else { if (value < 0) clif_displaymessage(fd, msg_txt(177)); // Impossible to decrease a stat. else diff --git a/src/map/clif.c b/src/map/clif.c index 4b642f84c..2645b55bb 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -8298,6 +8298,9 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) if (pc_checkskill(sd, SG_DEVIL) && !pc_nextjobexp(sd)) clif_status_load(&sd->bl, SI_DEVIL, 1); //blindness [Komurka] + if (sd->sc.opt2) //Client loses these on warp. + clif_changeoption(&sd->bl); + clif_weather_check(sd); map_foreachinarea(clif_getareachar,sd->bl.m, diff --git a/src/map/map.c b/src/map/map.c index af3f48ad0..02d3bbdeb 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -996,6 +996,8 @@ int map_foreachincell(int (*func)(struct block_list*,va_list),int m,int x,int y, va_list ap; int blockcount=bl_list_count,i,c; + if (x < 0 || y < 0 || x >= map[m].xs || y >= map[m].ys) return 0; + va_start(ap,type); by=y/BLOCK_SIZE; diff --git a/src/map/pc.c b/src/map/pc.c index 4e9c93dc9..3fba85898 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -613,7 +613,7 @@ int pc_authok(struct map_session_data *sd, int login_id2, time_t connect_until_t if (battle_config.disp_zeny) sd->state.showzeny = 1; - if (battle_config.display_skill_fail&2) + if (!(battle_config.display_skill_fail&2)) sd->state.showdelay = 1; // Request all registries. diff --git a/src/map/skill.c b/src/map/skill.c index f5283b9d8..8f003aa6b 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -5550,24 +5550,6 @@ int skill_castend_id (int tid, unsigned int tick, int id, int data) return 0; } - switch (ud->skillid) { - //These should become skill_castend_pos - case WE_CALLPARTNER: - case WE_CALLPARENT: - case WE_CALLBABY: - case AM_RESURRECTHOMUN: - case PF_SPIDERWEB: - //Find a random spot to place the skill. [Skotlex] - inf2 = skill_get_splash(ud->skillid, ud->skilllv); - ud->skillx = src->x + inf2; - ud->skilly = src->y + inf2; - if (inf2 && !map_random_dir(src, &ud->skillx, &ud->skilly)) { - ud->skillx = src->x; - ud->skilly = src->y; - } - return skill_castend_pos(tid,tick,id,data); - } - if(ud->skillid != SA_CASTCANCEL ) { if( ud->skilltimer != tid ) { ShowError("skill_castend_id: Timer mismatch %d!=%d!\n", ud->skilltimer, tid); @@ -5584,12 +5566,31 @@ int skill_castend_id (int tid, unsigned int tick, int id, int data) else target = map_id2bl(ud->skilltarget); + // Use a do so that you can break out of it when the skill fails. do { if(!target || target->prev==NULL) break; if(src->m != target->m || status_isdead(src)) break; + switch (ud->skillid) { + //These should become skill_castend_pos + case WE_CALLPARTNER: + case WE_CALLPARENT: + case WE_CALLBABY: + case AM_RESURRECTHOMUN: + case PF_SPIDERWEB: + //Find a random spot to place the skill. [Skotlex] + inf2 = skill_get_splash(ud->skillid, ud->skilllv); + ud->skillx = target->x + inf2; + ud->skilly = target->y + inf2; + if (inf2 && !map_random_dir(target, &ud->skillx, &ud->skilly)) { + ud->skillx = target->x; + ud->skilly = target->y; + } + return skill_castend_pos(tid,tick,id,data); + } + if(ud->skillid == RG_BACKSTAP) { int dir = map_calc_dir(src,target->x,target->y),t_dir = unit_getdir(target); if(check_distance_bl(src, target, 0) || map_check_dir(dir,t_dir)) { diff --git a/src/map/status.c b/src/map/status.c index 3a5afa2ee..e3ad739cf 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -1530,7 +1530,7 @@ int status_calc_pc(struct map_session_data* sd,int first) int i,index; int skill,refinedef=0; - if(sd->state.connect_new && !(first&1)) //Shouldn't invoke yet until player is done loading. + if(!sd->state.auth && !(first&1)) //Shouldn't invoke yet until player is done loading. return -1; if (++calculating > 10) //Too many recursive calls! @@ -2413,12 +2413,11 @@ int status_calc_homunculus(struct homun_data *hd, int first) status->aspd_rate = 1000; - /* //this calc is useless since status_calc_bl(SCB_ALL) does it already skill = (1000 -4*status->agi -status->dex) *hd->homunculusDB->baseASPD/1000; status->amotion = cap_value(skill,battle_config.max_aspd,2000); - status->adelay = status->amotion; //It seems adelay = amotion for Homunculus.*/ + status->adelay = status->amotion; //It seems adelay = amotion for Homunculus. status_calc_misc(&hd->bl, status, hom->level); status_calc_bl(&hd->bl, SCB_ALL); //Status related changes. -- cgit v1.2.3-60-g2f50