From: <mal...@us...> - 2013-01-27 19:43:28
|
Revision: 7343 http://exult.svn.sourceforge.net/exult/?rev=7343&view=rev Author: malignantmanor Date: 2013-01-27 19:43:21 +0000 (Sun, 27 Jan 2013) Log Message: ----------- * actors.*: charmed_more_difficult was updated for new charmed alignment. charmed_more_difficult will now only put charmed party members into combat when not in combat mode. Modified Paths: -------------- exult/trunk/ChangeLog exult/trunk/actors.cc exult/trunk/actors.h Modified: exult/trunk/ChangeLog =================================================================== --- exult/trunk/ChangeLog 2013-01-26 21:16:46 UTC (rev 7342) +++ exult/trunk/ChangeLog 2013-01-27 19:43:21 UTC (rev 7343) @@ -1,3 +1,8 @@ +2013-01-27 Malignant Manor <mal...@us...> + * actors.*: charmed_more_difficult was updated for new charmed alignment. + charmed_more_difficult will now only put charmed party members into combat + when not in combat mode. + 2013-01-26 Marzo Sette Torres Junior <ma...@ya...> * actors.cc: Clearing frame_time when avatar and NPCs aren't performing an action (since actions force a delay at the end to prevent skipping steps). Modified: exult/trunk/actors.cc =================================================================== --- exult/trunk/actors.cc 2013-01-26 21:16:46 UTC (rev 7342) +++ exult/trunk/actors.cc 2013-01-27 19:43:21 UTC (rev 7343) @@ -1949,9 +1949,11 @@ void Actor::set_effective_alignment( int newalign ) { + charmalign = newalign; if (!(flags & (1 << Obj_flags::charmed))) alignment = newalign; - charmalign = newalign; + else + set_charmed_combat(); } /* @@ -2496,9 +2498,23 @@ } bool Actor::can_act_charmed() { - return !(Combat::charmed_more_difficult && get_flag(Obj_flags::charmed)); + return !(Combat::charmed_more_difficult && get_effective_alignment() != good); } +/* + * Have charmed party members attack if charmed_more_difficult and party member is hostile + */ + +void Actor::set_charmed_combat() { + if (Combat::charmed_more_difficult && + (is_in_party() || this == gwin->get_main_actor()) && + get_effective_alignment() != good) { + set_schedule_type(Schedule::combat); + if (get_attack_mode() == flee) + set_attack_mode(nearest); + } +} + void Actor::fight_back( Game_object *attacker ) { @@ -3098,9 +3114,6 @@ (gear_powers & (Frame_flags::power_safe | Frame_flags::charm_safe))) return; // Don't do anything. need_timers()->start_charm(); - if (!gwin->in_combat() && Combat::charmed_more_difficult && - (is_in_party() || this == avatar)) - gwin->toggle_combat(); // Actual alignment shift must be done elsewhere. Combat_schedule::stop_attacking_npc(this); set_target(0); // Need new opponent if in combat. @@ -3859,6 +3872,7 @@ charmalign = npc->get_effective_alignment(); else charmalign = chaotic; // Verified. + set_charmed_combat(); } if ((powers & Weapon_data::sleep) && roll_to_win(attint, defint)) set_flag(Obj_flags::asleep); Modified: exult/trunk/actors.h =================================================================== --- exult/trunk/actors.h 2013-01-26 21:16:46 UTC (rev 7342) +++ exult/trunk/actors.h 2013-01-27 19:43:21 UTC (rev 7343) @@ -634,6 +634,7 @@ // Hit-point algorithm: bool can_act(); bool can_act_charmed(); // checks for charmed and charmed_more_difficult + void set_charmed_combat(); virtual void fall_down(); virtual void lay_down(bool die); virtual void die(Game_object *attacker); // We're dead. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |