From: Laszlo T. <ave...@us...> - 2005-06-26 13:58:02
|
Update of /cvsroot/gemrb/gemrb/gemrb/plugins/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6285/plugins/Core Modified Files: Actions.cpp Actor.h GSUtils.cpp GSUtils.h Game.cpp Game.h GameControl.cpp GameControl.h GameScript.cpp GameScript.h Triggers.cpp Log Message: Reputation change will be seen on display Implemented Reaction* triggers Fixed HotKey trigger Index: GSUtils.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GSUtils.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** GSUtils.h 18 Jun 2005 21:33:40 -0000 1.2 --- GSUtils.h 26 Jun 2005 13:57:51 -0000 1.3 *************** *** 36,41 **** #define MIC_GOTITEM 1 ! extern int happiness[3][20]; void CreateVisualEffectCore(Scriptable *Sender, Point &position, const char *effect); void GetPositionFromScriptable(Scriptable* scr, Point &position, bool trap); --- 36,44 ---- #define MIC_GOTITEM 1 ! //extern int happiness[3][20]; + int GetReaction(Scriptable *Sender); + int GetHappiness(Scriptable *Sender, int reputation); + int GetHPPercent(Scriptable *Sender); void CreateVisualEffectCore(Scriptable *Sender, Point &position, const char *effect); void GetPositionFromScriptable(Scriptable* scr, Point &position, bool trap); Index: GameScript.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameScript.cpp,v retrieving revision 1.298 retrieving revision 1.299 diff -C2 -d -r1.298 -r1.299 *** GameScript.cpp 22 Jun 2005 15:55:24 -0000 1.298 --- GameScript.cpp 26 Jun 2005 13:57:51 -0000 1.299 *************** *** 258,261 **** --- 258,264 ---- {"randomnumlt", GameScript::RandomNumLT, 0}, {"range", GameScript::Range, 0}, + {"reaction", GameScript::Reaction, 0}, + {"reactiongt", GameScript::ReactionGT, 0}, + {"reactionlt", GameScript::ReactionLT, 0}, {"realglobaltimerexact", GameScript::RealGlobalTimerExact,TF_MERGESTRINGS}, {"realglobaltimerexpired", GameScript::RealGlobalTimerExpired,TF_MERGESTRINGS}, Index: Game.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Game.h,v retrieving revision 1.58 retrieving revision 1.59 diff -C2 -d -r1.58 -r1.59 *** Game.h 25 Jun 2005 20:05:52 -0000 1.58 --- Game.h 26 Jun 2005 13:57:51 -0000 1.59 *************** *** 167,170 **** --- 167,172 ---- /* returns the npcs count */ int GetNPCCount() const { return (int)NPCs.size(); } + /* sends the hotkey trigger to all selected pcs */ + void SetHotKey(int Key); /* select PC for non-walking environment (shops, inventory, ...) */ bool SelectPCSingle(int index); *************** *** 235,239 **** void IncrementChapter(); /* sets party reputation */ ! void SetReputation(int r); /* sets the gamescreen control status (pane states, dialog textarea size) */ void SetControlStatus(int value, int operation); --- 237,241 ---- void IncrementChapter(); /* sets party reputation */ ! void SetReputation(ieDword r); /* sets the gamescreen control status (pane states, dialog textarea size) */ void SetControlStatus(int value, int operation); Index: GSUtils.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GSUtils.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** GSUtils.cpp 25 Jun 2005 08:50:19 -0000 1.6 --- GSUtils.cpp 26 Jun 2005 13:57:51 -0000 1.7 *************** *** 45,48 **** --- 45,50 ---- int InDebug = 0; int happiness[3][20]; + int rmodrep[20]; + int rmodchr[25]; int RandomNumValue; *************** *** 50,55 **** { //initializing the happiness table ! int hptable = core->LoadTable( "happy" ); ! TableMgr *tab = core->GetTable( hptable ); for (int alignment=0;alignment<3;alignment++) { for (int reputation=0;reputation<20;reputation++) { --- 52,58 ---- { //initializing the happiness table ! { ! int table = core->LoadTable( "happy" ); ! TableMgr *tab = core->GetTable( table ); for (int alignment=0;alignment<3;alignment++) { for (int reputation=0;reputation<20;reputation++) { *************** *** 57,63 **** } } ! core->DelTable( hptable ); ! // } --- 60,126 ---- } } ! core->DelTable( table ); ! } ! //initializing the reaction mod. reputation table ! { ! int table = core->LoadTable( "rmodrep" ); ! TableMgr *tab = core->GetTable( table ); ! for (int reputation=0;reputation<20;reputation++) { ! rmodrep[reputation]=strtol(tab->QueryField(0,reputation), NULL, 0); ! } ! core->DelTable( table ); ! } ! ! //initializing the reaction mod. charisma table ! { ! int table = core->LoadTable( "rmodchr" ); ! TableMgr *tab = core->GetTable( table ); ! for (int charisma=0;charisma<25;charisma++) { ! rmodchr[charisma]=strtol(tab->QueryField(0,charisma), NULL, 0); ! } ! core->DelTable( table ); ! } ! } ! ! int GetReaction(Scriptable* Sender) ! { ! if (Sender->Type != ST_ACTOR) { ! return 0; ! } ! Actor* ab = ( Actor* ) Sender; ! int chr = ab->GetStat(IE_CHR)-1; ! int rep = core->GetGame()->Reputation/10; ! return 10 + rmodrep[rep]+rmodchr[chr]; ! } ! ! int GetHappiness(Scriptable* Sender, int reputation) ! { ! if (Sender->Type != ST_ACTOR) { ! return 0; ! } ! Actor* ab = ( Actor* ) Sender; ! int alignment = ab->GetStat(IE_ALIGNMENT)&AL_GNE_MASK; //good, neutral, evil ! if (reputation>19) { ! reputation=19; ! } ! return happiness[alignment][reputation/10]; ! } ! ! int GetHPPercent(Scriptable* Sender) ! { ! if (Sender->Type != ST_ACTOR) { ! return 0; ! } ! Actor* ab = ( Actor* ) Sender; ! int hp1 = ab->GetStat(IE_MAXHITPOINTS); ! if (hp1<1) { ! return 0; ! } ! int hp2 = ab->GetStat(IE_HITPOINTS); ! if (hp2<1) { ! return 0; ! } ! return hp2*100/hp1; } Index: Actor.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Actor.h,v retrieving revision 1.74 retrieving revision 1.75 diff -C2 -d -r1.74 -r1.75 *** Actor.h 20 Jun 2005 17:15:25 -0000 1.74 --- Actor.h 26 Jun 2005 13:57:51 -0000 1.75 *************** *** 147,151 **** ieDword ModalState; public: - Actor *LastTarget; Actor *LastTalkedTo; --- 147,150 ---- *************** *** 158,165 **** Actor *LastHeard; Actor *LastSummoner; ! int LastCommand; ! int LastShout; ! int LastDamage; ! int LastDamageType; EffectQueue fxqueue; --- 157,168 ---- Actor *LastHeard; Actor *LastSummoner; ! //this is an ugly ugly hack, the triggers are stored on a pointer ! //these triggers are not pointers by nature ! Actor *HotKey; ! ! int LastCommand; //lastcommander ! int LastShout; //lastheard ! int LastDamage; //lasthitter ! int LastDamageType;//lasthitter EffectQueue fxqueue; Index: Game.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Game.cpp,v retrieving revision 1.83 retrieving revision 1.84 diff -C2 -d -r1.83 -r1.84 *** Game.cpp 25 Jun 2005 20:05:52 -0000 1.83 --- Game.cpp 26 Jun 2005 13:57:51 -0000 1.84 *************** *** 275,278 **** --- 275,292 ---- } + /* sends the hotkey trigger to all selected actors */ + void Game::SetHotKey(int Key) + { + for(unsigned int i=0;i<PCs.size();i++) { + Actor *actor = PCs[i]; + + if (actor->IsSelected()) { + // the hotkey is cleared by the standard trigger handling protocol + // we'll never use it as a pointer + actor->HotKey = (Actor *) Key; + } + } + } + bool Game::SelectPCSingle(int index) { *************** *** 637,645 **** PCs[i]->NewStat(IE_XP,xp,MOD_ADDITIVE); } - //char value[10]; - - //sprintf( value, "%d", xp ); - //value is a string and must be copied because it is not on heap - //core->GetTokenDictionary()->SetAtCopy( "XP", value ); if (xp>0) { core->DisplayConstantStringValue( STR_GOTXP, 0xc0c000, (ieDword) xp); //you have gained ... xp --- 651,654 ---- *************** *** 711,719 **** } ! void Game::SetReputation(int r) { if (r<10) r=10; else if (r>200) r=200; ! Reputation = (ieDword) r; for (unsigned int i=0; i<PCs.size(); i++) { PCs[i]->SetStat(IE_REPUTATION, Reputation); --- 720,733 ---- } ! void Game::SetReputation(ieDword r) { if (r<10) r=10; else if (r>200) r=200; ! if (Reputation>r) { ! core->DisplayConstantStringValue(STR_LOSTREP,0xc0c000,(Reputation-r)/10); ! } else if (Reputation<r) { ! core->DisplayConstantStringValue(STR_GOTREP,0xc0c000,(r-Reputation)/10); ! } ! Reputation = r; for (unsigned int i=0; i<PCs.size(); i++) { PCs[i]->SetStat(IE_REPUTATION, Reputation); Index: GameScript.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameScript.h,v retrieving revision 1.197 retrieving revision 1.198 diff -C2 -d -r1.197 -r1.198 *** GameScript.h 22 Jun 2005 15:55:25 -0000 1.197 --- GameScript.h 26 Jun 2005 13:57:52 -0000 1.198 *************** *** 637,660 **** Response* ReadResponse(DataStream* stream); Trigger* ReadTrigger(DataStream* stream); - //Object* DecodeObject(const char* line); bool EvaluateCondition(Scriptable* Sender, Condition* condition); static int EvaluateTrigger(Scriptable* Sender, Trigger* trigger); int ExecuteResponseSet(Scriptable* Sender, ResponseSet* rS); int ExecuteResponse(Scriptable* Sender, Response* rE); - //static Targets* EvaluateObject(Scriptable* Sender, Object* oC); static int ParseInt(const char*& src); static void ParseString(const char*& src, char* tmp); - //static void DisplayStringCore(Scriptable* Sender, int Strref, int flags); - //static int ValidForDialogCore(Scriptable* Sender, Actor* target); private: - //static void CreateVisualEffectCore(Scriptable *Sender, Point &position, const char *effect); - //static int SeeCore(Scriptable* Sender, Trigger* parameters, int flags); - //static void BeginDialog(Scriptable* Sender, Action* parameters, int flags); - //static void CreateCreatureCore(Scriptable* Sender, Action* parameters, int flags); - //static int MoveItemCore(Scriptable *Sender, Scriptable *Target, const char *resref, int flags); - //static void AttackCore(Scriptable *actor, Scriptable *target, Action *parameters, int flags); - //static Action *GenerateActionCore(const char *src, const char *str, int acIndex, bool autoFree); - //static Trigger *GenerateTriggerCore(const char *src, const char *str, int trIndex, int negate); - //static Trigger* GenerateTrigger(char* String); /* returns true if actor matches the object specs. */ static bool MatchActor(Scriptable *Sender, Actor* actor, Object* oC); --- 637,647 ---- *************** *** 662,667 **** static int GetObjectCount(Scriptable* Sender, Object* oC); - static int GetHappiness(Scriptable* Sender, int reputation); - static int GetHPPercent(Scriptable* Sender); static Targets *XthNearestOf(Targets *parameters, int count); static Targets *XthNearestEnemyOf(Targets *parameters, int count); --- 649,652 ---- *************** *** 669,673 **** static Targets *XthNearestMyGroupOfType(Scriptable *origin, Targets *parameters, int count); - //static unsigned char GetOrient(Point &s, Point &d); private: //Internal variables unsigned long lastRunTime; --- 654,657 ---- *************** *** 682,696 **** ~GameScript(); const char *GetName() { return this?Name:"NONE\0\0\0\0"; } - //static void ReplaceMyArea(Scriptable* Sender, char* newVarName); - //static ieDword CheckVariable(Scriptable* Sender, const char* VarName, const char* Context); - //static ieDword CheckVariable(Scriptable* Sender, const char* VarName); - - //static void SetVariable(Scriptable* Sender, const char* VarName, - // const char* Context, ieDword value); - //static void SetVariable(Scriptable* Sender, const char* VarName, ieDword value); static void ExecuteString(Scriptable* Sender, char* String); static int EvaluateString(Scriptable* Sender, char* String); static void ExecuteAction(Scriptable* Sender, Action* aC); - //static Action* GenerateAction(char* String, bool autoFree=false); static void MoveBetweenAreasCore(Actor* actor, const char *area, Point &position, int face, bool adjust); public: //Script Functions --- 666,672 ---- *************** *** 910,913 **** --- 886,892 ---- static int RandomNumLT(Scriptable* Sender, Trigger* parameters); static int Range(Scriptable* Sender, Trigger* parameters); + static int Reaction(Scriptable* Sender, Trigger* parameters); + static int ReactionLT(Scriptable* Sender, Trigger* parameters); + static int ReactionGT(Scriptable* Sender, Trigger* parameters); static int RealGlobalTimerExact(Scriptable* Sender, Trigger* parameters); static int RealGlobalTimerExpired(Scriptable* Sender, Trigger* parameters); Index: GameControl.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameControl.cpp,v retrieving revision 1.237 retrieving revision 1.238 diff -C2 -d -r1.237 -r1.238 *** GameControl.cpp 25 Jun 2005 20:05:52 -0000 1.237 --- GameControl.cpp 26 Jun 2005 13:57:51 -0000 1.238 *************** *** 105,109 **** target = NULL; speaker = NULL; - HotKey = 0; } --- 105,108 ---- *************** *** 365,369 **** void GameControl::OnKeyPress(unsigned char Key, unsigned short /*Mod*/) { ! HotKey=toupper(Key); } --- 364,368 ---- void GameControl::OnKeyPress(unsigned char Key, unsigned short /*Mod*/) { ! core->GetGame()->SetHotKey(toupper(Key)); } Index: Triggers.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Triggers.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** Triggers.cpp 22 Jun 2005 15:55:26 -0000 1.5 --- Triggers.cpp 26 Jun 2005 13:57:52 -0000 1.6 *************** *** 32,35 **** --- 32,56 ---- } + int GameScript::Reaction(Scriptable* Sender, Trigger* parameters) + { + Scriptable* scr = GetActorFromObject( Sender, parameters->objectParameter ); + int value=GetReaction(scr); + return value == parameters->int0Parameter; + } + + int GameScript::ReactionGT(Scriptable* Sender, Trigger* parameters) + { + Scriptable* scr = GetActorFromObject( Sender, parameters->objectParameter ); + int value=GetReaction(scr); + return value > parameters->int0Parameter; + } + + int GameScript::ReactionLT(Scriptable* Sender, Trigger* parameters) + { + Scriptable* scr = GetActorFromObject( Sender, parameters->objectParameter ); + int value=GetReaction(scr); + return value < parameters->int0Parameter; + } + int GameScript::Happiness(Scriptable* Sender, Trigger* parameters) { *************** *** 2159,2169 **** } ! int GameScript::HotKey(Scriptable* /*Sender*/, Trigger* parameters) { ! int ret=core->GetGameControl()->HotKey==parameters->int0Parameter; //probably we need to implement a trigger mechanism, clear //the hotkey only when the triggerblock was evaluated as true if (ret) { ! core->GetGameControl()->HotKey=0; } return ret; --- 2180,2194 ---- } ! int GameScript::HotKey(Scriptable* Sender, Trigger* parameters) { ! if (Sender->Type!=ST_ACTOR) { ! return 0; ! } ! Actor *scr = (Actor *) Sender; ! int ret=(int) scr->HotKey==parameters->int0Parameter; //probably we need to implement a trigger mechanism, clear //the hotkey only when the triggerblock was evaluated as true if (ret) { ! Sender->AddTrigger (&scr->HotKey); } return ret; *************** *** 2292,2298 **** } Actor* actor = ( Actor* ) Sender; ! if (actor->LastDamage) { ! //well, int and Actor * are not compatible ! //Sender->AddTrigger (&actor->LastDamage); return 1; } --- 2317,2323 ---- } Actor* actor = ( Actor* ) Sender; ! //zero damage doesn't count? ! if (actor->LastHitter && actor->LastDamage) { ! Sender->AddTrigger(&actor->LastHitter); return 1; } *************** *** 2306,2312 **** } Actor* actor = ( Actor* ) Sender; ! if (actor->LastDamage==parameters->int0Parameter) { ! //well, int and Actor * are not compatible ! //Sender->AddTrigger (&actor->LastDamage); return 1; } --- 2331,2336 ---- } Actor* actor = ( Actor* ) Sender; ! if (actor->LastHitter && (actor->LastDamage==parameters->int0Parameter)) { ! Sender->AddTrigger(&actor->LastHitter); return 1; } *************** *** 2320,2326 **** } Actor* actor = ( Actor* ) Sender; ! if (actor->LastDamage>parameters->int0Parameter) { ! //well, int and Actor * are not compatible ! //Sender->AddTrigger (&actor->LastDamage); return 1; } --- 2344,2349 ---- } Actor* actor = ( Actor* ) Sender; ! if (actor->LastHitter && (actor->LastDamage>parameters->int0Parameter)) { ! Sender->AddTrigger(&actor->LastHitter); return 1; } *************** *** 2334,2340 **** } Actor* actor = ( Actor* ) Sender; ! if (actor->LastDamage<parameters->int0Parameter) { ! //well, int and Actor * are not compatible ! //Sender->AddTrigger (&actor->LastDamage); return 1; } --- 2357,2362 ---- } Actor* actor = ( Actor* ) Sender; ! if (actor->LastHitter && (actor->LastDamage<parameters->int0Parameter)) { ! Sender->AddTrigger(&actor->LastHitter); return 1; } *************** *** 2367,2371 **** Actor* actor = ( Actor* ) Sender; if (parameters->int0Parameter) { ! if (!(parameters->int0Parameter&actor->LastShout) ) { return 0; } --- 2389,2393 ---- Actor* actor = ( Actor* ) Sender; if (parameters->int0Parameter) { ! if (parameters->int0Parameter!=actor->LastShout) { return 0; } Index: Actions.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Actions.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** Actions.cpp 25 Jun 2005 20:05:51 -0000 1.9 --- Actions.cpp 26 Jun 2005 13:57:51 -0000 1.10 *************** *** 472,505 **** } - int GameScript::GetHappiness(Scriptable* Sender, int reputation) - { - if (Sender->Type != ST_ACTOR) { - return 0; - } - Actor* ab = ( Actor* ) Sender; - int alignment = ab->GetStat(IE_ALIGNMENT)&3; //good, neutral, evil - if (reputation>19) { - reputation=19; - } - return happiness[alignment][reputation/10]; - } - - int GameScript::GetHPPercent(Scriptable* Sender) - { - if (Sender->Type != ST_ACTOR) { - return 0; - } - Actor* ab = ( Actor* ) Sender; - int hp1 = ab->GetStat(IE_MAXHITPOINTS); - if (hp1<1) { - return 0; - } - int hp2 = ab->GetStat(IE_HITPOINTS); - if (hp2<1) { - return 0; - } - return hp2*100/hp1; - } - //don't use offset from Sender void GameScript::CreateCreature(Scriptable* Sender, Action* parameters) --- 472,475 ---- *************** *** 2787,2791 **** void GameScript::ReputationSet(Scriptable* /*Sender*/, Action* parameters) { ! core->GetGame()->SetReputation(parameters->int0Parameter); } --- 2757,2761 ---- void GameScript::ReputationSet(Scriptable* /*Sender*/, Action* parameters) { ! core->GetGame()->SetReputation(parameters->int0Parameter*10); } *************** *** 2793,2797 **** { Game *game = core->GetGame(); ! game->SetReputation( (int) game->Reputation + parameters->int0Parameter); } --- 2763,2767 ---- { Game *game = core->GetGame(); ! game->SetReputation( (int) game->Reputation + parameters->int0Parameter*10); } Index: GameControl.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameControl.h,v retrieving revision 1.70 retrieving revision 1.71 diff -C2 -d -r1.70 -r1.71 *** GameControl.h 22 Jun 2005 15:55:24 -0000 1.70 --- GameControl.h 26 Jun 2005 13:57:51 -0000 1.71 *************** *** 89,93 **** int action; public: - char HotKey; Door* overDoor; Container* overContainer; --- 89,92 ---- |