From: <ave...@us...> - 2009-04-25 19:35:30
|
Revision: 5888 http://gemrb.svn.sourceforge.net/gemrb/?rev=5888&view=rev Author: avenger_teambg Date: 2009-04-25 19:35:17 +0000 (Sat, 25 Apr 2009) Log Message: ----------- changed PartyRested from global trigger to local, setting it in partymembers, current area and game (other scriptables don't seem to handle it) Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/ActorBlock.cpp gemrb/trunk/gemrb/plugins/Core/ActorBlock.h gemrb/trunk/gemrb/plugins/Core/Game.cpp gemrb/trunk/gemrb/plugins/Core/Game.h gemrb/trunk/gemrb/plugins/Core/Triggers.cpp Modified: gemrb/trunk/gemrb/plugins/Core/ActorBlock.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/ActorBlock.cpp 2009-04-25 17:04:32 UTC (rev 5887) +++ gemrb/trunk/gemrb/plugins/Core/ActorBlock.cpp 2009-04-25 19:35:17 UTC (rev 5888) @@ -221,6 +221,11 @@ gamedata->FreePalette(palette); } +void Scriptable::DelayedEvent() +{ + lastRunTime = core->GetGame()->Ticks; +} + void Scriptable::ImmediateEvent() { lastRunTime = 0; @@ -460,12 +465,6 @@ InternalFlags |= IF_CUTSCENEID; } -//also turning off the idle flag so it won't run continuously -void Scriptable::Deactivate() -{ - InternalFlags &=~(IF_ACTIVE|IF_IDLE); -} - void Scriptable::Hide() { InternalFlags &=~(IF_ACTIVE|IF_VISIBLE); @@ -486,6 +485,12 @@ InternalFlags |= IF_NOINT; } +//also turning off the idle flag so it won't run continuously +void Scriptable::Deactivate() +{ + InternalFlags &=~(IF_ACTIVE|IF_IDLE); +} + //turning off the not interruptable flag, actions should reenable it themselves //also turning off the idle flag //heh, no, i wonder why did i touch the interruptable flag here @@ -495,6 +500,11 @@ InternalFlags &= ~IF_IDLE; } +void Scriptable::PartyRested() +{ + InternalFlags |=IF_PARTYRESTED; +} + ieDword Scriptable::GetInternalFlag() { return InternalFlags; @@ -529,6 +539,9 @@ if (bittriggers & BT_WASINDIALOG) { InternalFlags &= ~IF_WASINDIALOG; } + if (bittriggers & BT_PARTYRESTED) { + InternalFlags &= ~IF_PARTYRESTED; + } InitTriggers(); } Modified: gemrb/trunk/gemrb/plugins/Core/ActorBlock.h =================================================================== --- gemrb/trunk/gemrb/plugins/Core/ActorBlock.h 2009-04-25 17:04:32 UTC (rev 5887) +++ gemrb/trunk/gemrb/plugins/Core/ActorBlock.h 2009-04-25 19:35:17 UTC (rev 5888) @@ -118,6 +118,7 @@ #define IF_IDLE 0x10000 #define IF_INTRAP 0x20000 //actor is currently in a trap (intrap trigger event) #define IF_WASINDIALOG 0x40000 //actor just left dialog +#define IF_PARTYRESTED 0x80000 //party rested trigger event //the actor should stop attacking #define IF_STOPATTACK (IF_JUSTDIED|IF_REALLYDIED|IF_CLEANUP|IF_IDLE) @@ -135,11 +136,9 @@ #define BT_ONCREATION 2 #define BT_BECAMEVISIBLE 4 #define BT_WASINDIALOG 8 +#define BT_PARTYRESTED 16 +#define BT_VACANT 32 -//global bittriggers (set in game) -#define BT_PARTYRESTED 0x10000 -#define BT_VACANT 0x20000 - //xp bonus types (for xpbonus.2da) #define XP_LOCKPICK 0 #define XP_DISARM 1 @@ -227,6 +226,7 @@ void Unhide(); void Activate(); void Deactivate(); + void PartyRested(); ieDword GetInternalFlag(); const char* GetScriptName(); Map* GetCurrentArea() const; @@ -234,6 +234,8 @@ void SetScript(int index, GameScript* script); void DisplayHeadText(const char* text); void SetScriptName(const char* text); + //call this to deny script running in the next AI cycle + void DelayedEvent(); //call this to enable script running as soon as possible void ImmediateEvent(); bool IsPC(); Modified: gemrb/trunk/gemrb/plugins/Core/Game.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Game.cpp 2009-04-25 17:04:32 UTC (rev 5887) +++ gemrb/trunk/gemrb/plugins/Core/Game.cpp 2009-04-25 19:35:17 UTC (rev 5888) @@ -1259,8 +1259,11 @@ core->PlayMovie(restmovies[dream]); } } - //play dream (rest movie) - InternalFlags |= IF_PARTYRESTED; + + //set partyrested flags + PartyRested(); + area->PartyRested(); + int i = GetPartySize(false); while (i--) { @@ -1272,6 +1275,7 @@ tar->Heal(hp); //removes fatigue, recharges spells tar->Rest(0); + tar->PartyRested(); } core->SetEventFlag(EF_ACTION); } Modified: gemrb/trunk/gemrb/plugins/Core/Game.h =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Game.h 2009-04-25 17:04:32 UTC (rev 5887) +++ gemrb/trunk/gemrb/plugins/Core/Game.h 2009-04-25 19:35:17 UTC (rev 5888) @@ -59,9 +59,6 @@ //timer counts #define MAX_TIMER 32 -//for global triggers -#define IF_PARTYRESTED 1 - //ShareXP flags #define SX_DIVIDE 1 //divide XP among team members #define SX_CR 2 //use challenge rating resolution Modified: gemrb/trunk/gemrb/plugins/Core/Triggers.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Triggers.cpp 2009-04-25 17:04:32 UTC (rev 5887) +++ gemrb/trunk/gemrb/plugins/Core/Triggers.cpp 2009-04-25 19:35:17 UTC (rev 5888) @@ -3815,11 +3815,10 @@ return 0; } -int GameScript::PartyRested(Scriptable* /*Sender*/, Trigger* /*parameters*/) +int GameScript::PartyRested(Scriptable* Sender, Trigger* /*parameters*/) { - Game *game = core->GetGame(); - if (game->GetInternalFlag()&IF_PARTYRESTED) { - game->SetBitTrigger(BT_PARTYRESTED); + if (Sender->GetInternalFlag()&IF_PARTYRESTED) { + Sender->SetBitTrigger(BT_PARTYRESTED); return 1; } return 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |