diff options
-rw-r--r-- | Changelog-Trunk.txt | 3 | ||||
-rw-r--r-- | npc/quests/quests_alberta.txt | 2 | ||||
-rw-r--r-- | src/map/pc.c | 3 | ||||
-rw-r--r-- | src/map/status.c | 18 |
4 files changed, 15 insertions, 11 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index f5e262954..c12dfe842 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,6 +3,9 @@ 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. +2009/11/23 + * Fixed player keeps bleeding when dead. [Inkfish] + - If battle_config.invincible_nodamage is true, reflected damage to targets in invincible status is now 1. 2009/11/22 * Added 'ipban_cleanup_interval' option which determines how often expired IP bans are cleaned from the database. (bugreport:3734) [Paradox924X] * Modified ipban_check() to only include ipbans that haven't already expired. (bugreport:3734) [Paradox924X] diff --git a/npc/quests/quests_alberta.txt b/npc/quests/quests_alberta.txt index fecb43dc1..938552655 100644 --- a/npc/quests/quests_alberta.txt +++ b/npc/quests/quests_alberta.txt @@ -2219,7 +2219,7 @@ tur_dun03,104,171,4 script Knight#tur3 105,{ mes "[Squall]"; mes "Am I the only one left? Where are all my comrades?! I... I'm about to go crazy!"; next; - if(select("Maybe they ran away?:What happened?")) { + if(select("Maybe they ran away?:What happened?") == 1) { mes "[Squall]"; mes "No, we would never run away from the face of danger."; next; diff --git a/src/map/pc.c b/src/map/pc.c index 5d94a1942..a186d4c6c 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -7369,6 +7369,9 @@ void pc_bleeding (struct map_session_data *sd, unsigned int diff_tick) { int hp = 0, sp = 0; + //if( pc_isdead(sd) ) + // return; + if (sd->hp_loss.value) { sd->hp_loss.tick += diff_tick; while (sd->hp_loss.tick >= sd->hp_loss.rate) { diff --git a/src/map/status.c b/src/map/status.c index de87bb98a..78fcc742d 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -628,6 +628,7 @@ int status_charge(struct block_list* bl, int hp, int sp) //If flag&1, damage is passive and does not triggers cancelling status changes. //If flag&2, fail if target does not has enough to substract. //If flag&4, if killed, mob must not give exp/loot. +//If flag&8, sp loss on dead target. int status_damage(struct block_list *src,struct block_list *target,int hp, int sp, int walkdelay, int flag) { struct status_data *status; @@ -653,9 +654,11 @@ int status_damage(struct block_list *src,struct block_list *target,int hp, int s return skill_unit_ondamaged((struct skill_unit *)target, src, hp, gettick()); status = status_get_status_data(target); + if( status == &dummy_status ) + return 0; - if( status == &dummy_status || (!status->hp && hp) ) - return 0; //Invalid targets: no damage or dead + if( !status->hp ) + flag |= 8; // Let through. battle.c/skill.c have the whole logic of when it's possible or // not to hurt someone (and this check breaks pet catching) [Skotlex] @@ -663,15 +666,10 @@ int status_damage(struct block_list *src,struct block_list *target,int hp, int s // return 0; //Cannot damage a bl not on a map, except when "charging" hp/sp sc = status_get_sc(target); - if( battle_config.invincible_nodamage && src && sc && sc->data[SC_INVINCIBLE] && !sc->data[SC_INVINCIBLEOFF] ) - { - if( !sp ) - return 0; hp = 1; - } - if( hp && !(flag&1) ) { + if( hp && !(flag&1|8) ) { if( sc ) { struct status_change_entry *sce; if( (sce = sc->data[SC_DEVOTION]) && src && battle_getcurrentskill(src) != PA_PRESSURE ) @@ -751,8 +749,8 @@ int status_damage(struct block_list *src,struct block_list *target,int hp, int s case BL_MER: mercenary_damage((TBL_MER*)target,src,hp,sp); break; } - if (status->hp) - { //Still lives! + if( status->hp || flag&8 ) + { //Still lives or has been dead before this damage. if (walkdelay) unit_set_walkdelay(target, gettick(), walkdelay, 0); return hp+sp; |