From 17ff108170e4affee53d448de14237f0da04d92e Mon Sep 17 00:00:00 2001 From: Ketmar Dark Date: Mon, 30 Oct 2017 09:58:59 +0200 Subject: [PATCH] cosmetix --- script/k8debug/chars/dog.dat | 2 +- src/felib/feparse.cpp | 5 ++++- src/game/char.cpp | 12 ++++++++---- src/game/commands/Kick.cpp | 8 +++----- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/script/k8debug/chars/dog.dat b/script/k8debug/chars/dog.dat index 85a7c53..fe3127f 100644 --- a/script/k8debug/chars/dog.dat +++ b/script/k8debug/chars/dog.dat @@ -1,6 +1,6 @@ Extend dog { - on die { + on before_die { if @team == PLAYER_TEAM; if @name; AddMessage "Your doggie ", @name, " is dead"; diff --git a/src/felib/feparse.cpp b/src/felib/feparse.cpp index e940552..5cf75a0 100644 --- a/src/felib/feparse.cpp +++ b/src/felib/feparse.cpp @@ -1127,7 +1127,10 @@ void EventHandlerMap::collectSource (std::stack &infStack, TextInpu auto ehs = collectEventHandlerSource(infStack, iff); if (ehs.type.IsEmpty()) ABORT("Empty handler type in file '%s' at line %d", ehs.fname.CStr(), ehs.startline); auto it = mMap.find(ehs.type); - if (it != mMap.end()) ABORT("Duplicate handler type '%s' in file '%s' at line %d", ehs.type.CStr(), ehs.fname.CStr(), ehs.startline); + if (it != mMap.end()) { + //ABORT("Duplicate handler type '%s' in file '%s' at line %d", ehs.type.CStr(), ehs.fname.CStr(), ehs.startline); + mMap.erase(it); + } mMap.insert(std::make_pair(ehs.type, ehs)); } diff --git a/src/game/char.cpp b/src/game/char.cpp index ccd4b3b..37a5b24 100644 --- a/src/game/char.cpp +++ b/src/game/char.cpp @@ -620,9 +620,10 @@ int character::TakeHit (character *Enemy, item *Weapon, bodypart *EnemyBodyPart, game::ClearEventData(); game::mActor = Enemy; game::mResult = DID_NO_DAMAGE; - if (game::RunOnCharEvent(this, CONST_S("take_hit"))) { game::ClearEventData(); return game::mResult; } + if (game::RunOnCharEvent(this, CONST_S("before_take_hit"))) { game::ClearEventData(); return DID_NO_DAMAGE; } game::ClearEventData(); - int Dir = Type == BITE_ATTACK ? YOURSELF : GivenDir; + + int Dir = (Type == BITE_ATTACK ? YOURSELF : GivenDir); double DodgeValue = GetDodgeValue(); if (!Enemy->IsPlayer() && GetAttackWisdomLimit() != NO_LIMIT) Enemy->EditExperience(WISDOM, 75, 1 << 13); if (!Enemy->CanBeSeenBy(this)) ToHitValue *= 2; @@ -1174,10 +1175,12 @@ void character::Die (ccharacter *Killer, cfestring &Msg, feuLong DeathFlags) { /* Note: This function musn't delete any objects, since one of these may be the one currently processed by pool::Be()! */ if (!IsEnabled()) return; + game::ClearEventData(); game::mActor = Killer; - if (game::RunOnCharEvent(this, CONST_S("die"))) { game::ClearEventData(); RemoveTraps(); return; } + if (!game::RunOnCharEvent(this, CONST_S("before_die"))) { game::ClearEventData(); RemoveTraps(); return; } game::ClearEventData(); + RemoveTraps(); if (IsPlayer()) { ADD_MESSAGE("You die."); @@ -2017,9 +2020,10 @@ void character::BeKicked (character *Kicker, item *Boot, bodypart *Leg, v2 HitPo //FIXME: other args game::ClearEventData(); game::mActor = Kicker; - if (game::RunOnCharEvent(this, CONST_S("before_be_kicked"))) { game::ClearEventData(); return; } + if (!game::RunOnCharEvent(this, CONST_S("before_kicked_by"))) { game::ClearEventData(); return; } game::ClearEventData(); game::mActor = 0; + auto hitres = (TakeHit(Kicker, Boot, Leg, HitPos, KickDamage, ToHitValue, Success, KICK_ATTACK, Direction, Critical, ForceHit)); if (hitres == HAS_HIT || hitres == HAS_BLOCKED || hitres == DID_NO_DAMAGE) { if (IsEnabled() && !CheckBalance(KickDamage)) { diff --git a/src/game/commands/Kick.cpp b/src/game/commands/Kick.cpp index 02770cd..ad59c6e 100644 --- a/src/game/commands/Kick.cpp +++ b/src/game/commands/Kick.cpp @@ -14,15 +14,13 @@ COMMAND(Kick) { if (Enemy && !(Enemy->IsMasochist() && Char->GetRelation(Enemy) == FRIEND) && Char->GetRelation(Enemy) != HOSTILE) { if (!game::TruthQuestion(CONST_S("This might cause a hostile reaction. Are you sure?"))) return false; } - game::ClearEventData(); - game::mActor = Square->GetCharacter(); - game::mSecondActor = Char; - if (game::RunOnCharEvent(Char, CONST_S("before_kick"))) { game::ClearEventData(); return game::mResult != 0; } + game::ClearEventData(); game::mActor = Char; game::mSecondActor = Square->GetCharacter(); - if (game::RunOnCharEvent(Square->GetCharacter(), CONST_S("before_kicked_by"))) { game::ClearEventData(); return game::mResult != 0; } + if (!game::RunOnCharEvent(Square->GetCharacter(), CONST_S("before_kicked_by"))) { game::ClearEventData(); return false; } game::ClearEventData(); + Char->Hostility(Square->GetCharacter()); Char->Kick(Square, Dir); return true; -- 2.11.4.GIT