From: <ave...@us...> - 2008-01-30 17:59:51
|
Revision: 5023 http://gemrb.svn.sourceforge.net/gemrb/?rev=5023&view=rev Author: avenger_teambg Date: 2008-01-30 09:32:28 -0800 (Wed, 30 Jan 2008) Log Message: ----------- added KnowSpell trigger added ExitPocketPlane (but it still needs some work) Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actions.cpp gemrb/trunk/gemrb/plugins/Core/GameScript.cpp gemrb/trunk/gemrb/plugins/Core/GameScript.h gemrb/trunk/gemrb/plugins/Core/Spellbook.cpp gemrb/trunk/gemrb/plugins/Core/Spellbook.h gemrb/trunk/gemrb/plugins/Core/Triggers.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actions.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actions.cpp 2008-01-28 17:45:43 UTC (rev 5022) +++ gemrb/trunk/gemrb/plugins/Core/Actions.cpp 2008-01-30 17:32:28 UTC (rev 5023) @@ -546,6 +546,25 @@ } } +//add some animation effects too? +void GameScript::ExitPocketPlane(Scriptable* /*Sender*/, Action* /*parameters*/) +{ + Game *game = core->GetGame(); + int i = game->GetPartySize(false); + if (!i) return; + Actor *actor = game->GetPC(0, false); + ieResRef area; + Point p((short) actor->GetStat(IE_SAVEDXPOS), (short) actor->GetStat(IE_SAVEDYPOS) ); + //FIXME: calculate area + //This action is not working now!!! + memcpy(area,actor->GetCurrentArea(),sizeof(ieResRef) ); + //end of hack + while (i--) { + Actor *tar = game->GetPC(i, false); + MoveBetweenAreasCore( tar, area, p, -1, true); + } +} + //moves pcs and npcs from an area to another area void GameScript::MoveGlobalsTo(Scriptable* /*Sender*/, Action* parameters) { Modified: gemrb/trunk/gemrb/plugins/Core/GameScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/GameScript.cpp 2008-01-28 17:45:43 UTC (rev 5022) +++ gemrb/trunk/gemrb/plugins/Core/GameScript.cpp 2008-01-30 17:32:28 UTC (rev 5023) @@ -213,6 +213,7 @@ {"isweather", GameScript::IsWeather, 0}, //gemrb extension {"itemisidentified", GameScript::ItemIsIdentified, 0}, {"kit", GameScript::Kit, 0}, + {"knowspell", GameScript::KnowSpell, 0}, //gemrb specific {"lastmarkedobject", GameScript::LastMarkedObject_Trigger, 0}, {"lastpersontalkedto", GameScript::LastPersonTalkedTo, 0}, //pst {"level", GameScript::Level, 0}, @@ -524,6 +525,7 @@ {"escapeareadestroy", GameScript::EscapeAreaDestroy, 0}, {"escapeareaobject", GameScript::EscapeAreaObject, 0}, {"escapeareaobjectnosee", GameScript::EscapeAreaObjectNoSee, 0}, + {"exitpocketplane", GameScript::ExitPocketPlane, 0}, {"expansionendcredits", GameScript::QuitGame, 0},//ends game too {"explore", GameScript::Explore, 0}, {"exploremapchunk", GameScript::ExploreMapChunk, 0}, Modified: gemrb/trunk/gemrb/plugins/Core/GameScript.h =================================================================== --- gemrb/trunk/gemrb/plugins/Core/GameScript.h 2008-01-28 17:45:43 UTC (rev 5022) +++ gemrb/trunk/gemrb/plugins/Core/GameScript.h 2008-01-30 17:32:28 UTC (rev 5023) @@ -812,6 +812,7 @@ static int IsWeather(Scriptable* Sender, Trigger* parameters); static int ItemIsIdentified(Scriptable* Sender, Trigger* parameters); static int Kit(Scriptable* Sender, Trigger* parameters); + static int KnowSpell(Scriptable* Sender, Trigger* parameters); static int LastMarkedObject_Trigger(Scriptable* Sender, Trigger* parameters); static int LastPersonTalkedTo(Scriptable* Sender, Trigger* parameters); static int Level(Scriptable* Sender, Trigger* parameters); @@ -1087,6 +1088,7 @@ static void EquipMostDamagingMelee(Scriptable *Sender, Action *parameters); static void EquipRanged(Scriptable *Sender, Action *parameters); static void EquipWeapon(Scriptable *Sender, Action *parameters); + static void ExitPocketPlane(Scriptable* Sender, Action* parameters); static void ExpansionEndCredits(Scriptable* Sender, Action* parameters); static void Explore(Scriptable *Sender, Action *parameters); static void ExploreMapChunk(Scriptable *Sender, Action *parameters); Modified: gemrb/trunk/gemrb/plugins/Core/Spellbook.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Spellbook.cpp 2008-01-28 17:45:43 UTC (rev 5022) +++ gemrb/trunk/gemrb/plugins/Core/Spellbook.cpp 2008-01-30 17:32:28 UTC (rev 5023) @@ -190,6 +190,45 @@ return false; } +bool Spellbook::KnowSpell(int spellid) +{ + int type = spellid/1000; + if (type>4) { + return false; + } + type = sections[type]; + spellid = spellid % 1000; + + for (unsigned int j = 0; j < GetSpellLevelCount(type); j++) { + CRESpellMemorization* sm = spells[type][j]; + for (unsigned int k = 0; k < sm->memorized_spells.size(); k++) { + CREKnownSpell* ks = sm->known_spells[k]; + if (atoi(ks->SpellResRef+4)==spellid) { + return true; + } + } + } + return false; +} + +//if resref=="" then it is a knownanyspell +bool Spellbook::KnowSpell(const char *resref) +{ + for (int i = 0; i < NUM_BOOK_TYPES; i++) { + for (unsigned int j = 0; j < spells[i].size(); j++) { + CRESpellMemorization* sm = spells[i][j]; + for (unsigned int k = 0; k < sm->memorized_spells.size(); k++) { + CREKnownSpell* ks = sm->known_spells[k]; + if (resref[0] && stricmp(ks->SpellResRef, resref) ) { + continue; + } + return true; + } + } + } + return false; +} + //if resref=="" then it is a haveanyspell bool Spellbook::HaveSpell(const char *resref, ieDword flags) { Modified: gemrb/trunk/gemrb/plugins/Core/Spellbook.h =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Spellbook.h 2008-01-28 17:45:43 UTC (rev 5022) +++ gemrb/trunk/gemrb/plugins/Core/Spellbook.h 2008-01-30 17:32:28 UTC (rev 5023) @@ -165,9 +165,12 @@ static void ReleaseMemory(); void FreeSpellPage(CRESpellMemorization* sm); - /** Check if the spell exists, optionally deplete it (casting) */ + /** Check if the spell is memorised, optionally deplete it (casting) */ bool HaveSpell(const char *resref, ieDword flags); bool HaveSpell(int spellid, ieDword flags); + /** Check if the spell is in the book */ + bool KnowSpell(const char *resref); + bool KnowSpell(int spellid); bool AddSpellMemorization(CRESpellMemorization* sm); int GetTypes() const; Modified: gemrb/trunk/gemrb/plugins/Core/Triggers.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Triggers.cpp 2008-01-28 17:45:43 UTC (rev 5022) +++ gemrb/trunk/gemrb/plugins/Core/Triggers.cpp 2008-01-30 17:32:28 UTC (rev 5023) @@ -1161,6 +1161,18 @@ return 0; } +int GameScript::KnowSpell(Scriptable *Sender, Trigger *parameters) +{ + if (Sender->Type!=ST_ACTOR) { + return 0; + } + Actor *actor = (Actor *) Sender; + if (parameters->string0Parameter[0]) { + return actor->spellbook.KnowSpell(parameters->string0Parameter); + } + return actor->spellbook.KnowSpell(parameters->int0Parameter); +} + int GameScript::True(Scriptable * /* Sender*/, Trigger * /*parameters*/) { return 1; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |