mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-29 03:26:38 +00:00 
			
		
		
		
	test stuff
This commit is contained in:
		
							parent
							
								
									f9bb19fcdc
								
							
						
					
					
						commit
						0c61f0d294
					
				
					 4 changed files with 89 additions and 20 deletions
				
			
		|  | @ -123,4 +123,5 @@ op 0x200013d: FadeOut | |||
| op 0x200013e: FadeTo | ||||
| op 0x200013f: GetCurrentWeather | ||||
| op 0x2000140: ChangeWeather | ||||
| opcodes 0x2000141-0x3ffffff unused | ||||
| op 0x2000141: OpPCJoinFaction | ||||
| opcodes 0x2000142-0x3ffffff unused | ||||
|  |  | |||
|  | @ -8,6 +8,8 @@ | |||
| #include <components/interpreter/opcodes.hpp> | ||||
| 
 | ||||
| #include "../mwworld/class.hpp" | ||||
| #include "../mwworld/environment.hpp" | ||||
| #include "../mwworld/player.hpp" | ||||
| 
 | ||||
| #include "../mwmechanics/creaturestats.hpp" | ||||
| #include "../mwmechanics/npcstats.hpp" | ||||
|  | @ -280,6 +282,36 @@ namespace MWScript | |||
|                 } | ||||
|         }; | ||||
| 
 | ||||
|         class OpPCJoinFaction : public Interpreter::Opcode0 | ||||
|         { | ||||
|             public: | ||||
| 
 | ||||
|                 virtual void execute (Interpreter::Runtime& runtime) | ||||
|                 { | ||||
|                     MWScript::InterpreterContext& context | ||||
|                         = static_cast<MWScript::InterpreterContext&> (runtime.getContext()); | ||||
| 
 | ||||
|                     std::string factionID = runtime.getStringLiteral (runtime[0].mInteger); | ||||
|                     runtime.pop(); | ||||
|                     context.getEnvironment().mWorld->getPlayer().addFaction(factionID); | ||||
|                 } | ||||
|         }; | ||||
| 
 | ||||
|         class OpPCRaiseRank : public Interpreter::Opcode0 | ||||
|         { | ||||
|             public: | ||||
| 
 | ||||
|                 virtual void execute (Interpreter::Runtime& runtime) | ||||
|                 { | ||||
|                     MWScript::InterpreterContext& context | ||||
|                         = static_cast<MWScript::InterpreterContext&> (runtime.getContext()); | ||||
| 
 | ||||
|                     std::string factionID = runtime.getStringLiteral (runtime[0].mInteger); | ||||
|                     runtime.pop(); | ||||
|                     context.getEnvironment().mWorld->getPlayer().raiseRank(factionID); | ||||
|                 } | ||||
|         }; | ||||
|          | ||||
|         const int numberOfAttributes = 8; | ||||
| 
 | ||||
|         const int opcodeGetAttribute = 0x2000027; | ||||
|  | @ -310,6 +342,8 @@ namespace MWScript | |||
|         const int opcodeSetSkillExplicit = 0x20000df; | ||||
|         const int opcodeModSkill = 0x20000fa; | ||||
|         const int opcodeModSkillExplicit = 0x2000115; | ||||
|         const int opcodePCJoinFaction = 0x2000141; | ||||
|         const int opcodePCRaiseRank = 0x2000142; | ||||
| 
 | ||||
|         void registerExtensions (Compiler::Extensions& extensions) | ||||
|         { | ||||
|  | @ -381,6 +415,8 @@ namespace MWScript | |||
|                 extensions.registerInstruction (mod + skills[i], "l", | ||||
|                     opcodeModSkill+i, opcodeModSkillExplicit+i); | ||||
|             } | ||||
|             extensions.registerInstruction("PCJoinFaction","S",opcodePCJoinFaction); | ||||
|             extensions.registerInstruction("PCRaiseRank","S",opcodePCRaiseRank); | ||||
|         } | ||||
| 
 | ||||
|         void installOpcodes (Interpreter::Interpreter& interpreter) | ||||
|  | @ -436,6 +472,9 @@ namespace MWScript | |||
|                 interpreter.installSegment5 (opcodeModSkill+i, new OpModSkill<ImplicitRef> (i)); | ||||
|                 interpreter.installSegment5 (opcodeModSkillExplicit+i, new OpModSkill<ExplicitRef> (i)); | ||||
|             } | ||||
| 
 | ||||
|             interpreter.installSegment5(opcodePCJoinFaction,new OpPCJoinFaction); | ||||
|             interpreter.installSegment5(opcodePCRaiseRank,new OpPCRaiseRank); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -90,11 +90,11 @@ namespace MWWorld | |||
|         MWWorld::Class::get (ptr).setStance (ptr, MWWorld::Class::Run, !running); | ||||
|     } | ||||
| 
 | ||||
|     Player::Faction Player::getFaction(std::string faction) | ||||
|     Player::Faction Player::getFaction(std::string factionID) | ||||
|     { | ||||
|         for(std::list<Player::Faction>::iterator it = mFactions.begin(); it != mFactions.end();it++) | ||||
|         { | ||||
|             if(it->name == faction) return *it; | ||||
|             if(it->name == factionID) return *it; | ||||
|         } | ||||
|         //faction was not found->dummy faction
 | ||||
|         Player::Faction fact; | ||||
|  | @ -105,41 +105,66 @@ namespace MWWorld | |||
|         return fact; | ||||
|     } | ||||
| 
 | ||||
|     void Player::addFaction(std::string faction) | ||||
|     void Player::addFaction(std::string factionID) | ||||
|     { | ||||
|         if(getFaction(faction).name == "not found") | ||||
|         if(getFaction(factionID).name == "not found") | ||||
|         { | ||||
|             Player::Faction fact; | ||||
|             const ESM::Faction* eFact = mWorld.getStore().factions.find(faction); | ||||
|             const ESM::Faction* eFact = mWorld.getStore().factions.find(factionID); | ||||
|             fact.expelled = false; | ||||
|             fact.rank = 0; | ||||
|             fact.name = faction; | ||||
|             fact.name = eFact->name; | ||||
|             fact.id = eFact->id; | ||||
|             mFactions.push_back(fact); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     int Player::getRank(std::string faction) | ||||
|     int Player::getRank(std::string factionID) | ||||
|     { | ||||
|         Player::Faction fact = getFaction(faction); | ||||
|         Player::Faction fact = getFaction(factionID); | ||||
|         return fact.rank; | ||||
|     } | ||||
| 
 | ||||
|     void Player::setRank(std::string faction,int rank) | ||||
|     void Player::setRank(std::string factionID,int rank) | ||||
|     { | ||||
|         Player::Faction fact = getFaction(faction); | ||||
|         Player::Faction fact = getFaction(factionID); | ||||
|         fact.rank = rank; | ||||
|     } | ||||
| 
 | ||||
|     bool Player::isExpelled(std::string faction) | ||||
|     void Player::raiseRank(std::string factionID) | ||||
|     { | ||||
|         Player::Faction fact = getFaction(faction); | ||||
|         if(getFaction(factionID).name == "not found") | ||||
|         { | ||||
|             addFaction(factionID); | ||||
|             setRank(factionID,1); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             setRank(factionID,getRank(factionID) + 1); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     void Player::lowerRank(std::string factionID) | ||||
|     { | ||||
|         if(getFaction(factionID).name == "not found") | ||||
|         { | ||||
|             std::cout << "cannot lower the rank of the player: faction no found. Faction: "<< factionID << std::endl; | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             setRank(factionID,getRank(factionID) - 1); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     bool Player::isExpelled(std::string factionID) | ||||
|     { | ||||
|         Player::Faction fact = getFaction(factionID); | ||||
|         return fact.expelled; | ||||
|     } | ||||
| 
 | ||||
|     void Player::setExpelled(std::string faction,bool expelled) | ||||
|     void Player::setExpelled(std::string factionID,bool expelled) | ||||
|     { | ||||
|         Player::Faction fact = getFaction(faction); | ||||
|         Player::Faction fact = getFaction(factionID); | ||||
|         fact.expelled = expelled; | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -119,15 +119,19 @@ namespace MWWorld | |||
| 
 | ||||
|         void setAutoMove (bool enable); | ||||
| 
 | ||||
|         void addFaction(std::string faction); | ||||
|         void addFaction(std::string factionID); | ||||
| 
 | ||||
|         int getRank(std::string faction); | ||||
|         int getRank(std::string factionID); | ||||
| 
 | ||||
|         void setRank(std::string faction,int rank); | ||||
|         void setRank(std::string factionID,int rank); | ||||
| 
 | ||||
|         bool isExpelled(std::string faction); | ||||
|         void raiseRank(std::string factionID); | ||||
| 
 | ||||
|         void setExpelled(std::string faction,bool expelled); | ||||
|         void lowerRank(std::string factionID); | ||||
| 
 | ||||
|         bool isExpelled(std::string factionID); | ||||
| 
 | ||||
|         void setExpelled(std::string factionID,bool expelled); | ||||
| 
 | ||||
|         void setLeftRight (int value); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue