1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-01-29 09:45:32 +00:00

script instruction: PCJoinFaction

This commit is contained in:
gugus 2012-04-09 14:30:42 +02:00
parent aa8418634f
commit 6ca212b9e9
2 changed files with 29 additions and 9 deletions

View file

@ -26,7 +26,8 @@ op 0x20009: LoopAnim, explicit reference
op 0x2000a: Choice op 0x2000a: Choice
op 0x2000b: PCRaiseRank op 0x2000b: PCRaiseRank
op 0x2000c: PCLowerRank op 0x2000c: PCLowerRank
opcodes 0x2000d-0x3ffff unused op x20000d: PCJoinFaction
opcodes 0x2000e-0x3ffff unused
Segment 4: Segment 4:
(not implemented yet) (not implemented yet)

View file

@ -284,18 +284,36 @@ namespace MWScript
} }
}; };
class OpPCJoinFaction : public Interpreter::Opcode0 class OpPCJoinFaction : public Interpreter::Opcode1
{ {
public: public:
virtual void execute (Interpreter::Runtime& runtime) virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0)
{ {
std::string factionID = "";
MWScript::InterpreterContext& context MWScript::InterpreterContext& context
= static_cast<MWScript::InterpreterContext&> (runtime.getContext()); = static_cast<MWScript::InterpreterContext&> (runtime.getContext());
if(arg0==0)
std::string factionID = runtime.getStringLiteral (runtime[0].mInteger); {
runtime.pop(); factionID = context.getEnvironment().mDialogueManager->getFaction();
context.getEnvironment().mWorld->getPlayer().addFaction(factionID); }
else
{
factionID = runtime.getStringLiteral (runtime[0].mInteger);
runtime.pop();
}
if(factionID != "")
{
MWWorld::Ptr player = context.getEnvironment().mWorld->getPlayer().getPlayer();
if(MWWorld::Class::get(player).getNpcStats(player).mFactionRank.find(factionID) == MWWorld::Class::get(player).getNpcStats(player).mFactionRank.end())
{
MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = 1;
}
else
{
//the player is already in the faction... Throw an exeption?
}
}
} }
}; };
@ -329,7 +347,6 @@ namespace MWScript
MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] +1; MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] +1;
} }
} }
std::cout << std::endl;
} }
}; };
@ -363,7 +380,6 @@ namespace MWScript
MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] -1; MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] -1;
} }
} }
std::cout << std::endl;
} }
}; };
@ -410,6 +426,7 @@ namespace MWScript
//const int opcodePCJoinFaction = 0x2000141; //const int opcodePCJoinFaction = 0x2000141;
const int opcodePCRaiseRank = 0x2000b; const int opcodePCRaiseRank = 0x2000b;
const int opcodePCLowerRank = 0x2000c; const int opcodePCLowerRank = 0x2000c;
const int opcodePCJoinFaction = 0x2000d;
const int opcodeModDisposition = 0x2000145; const int opcodeModDisposition = 0x2000145;
void registerExtensions (Compiler::Extensions& extensions) void registerExtensions (Compiler::Extensions& extensions)
@ -485,6 +502,7 @@ namespace MWScript
//extensions.registerInstruction("PCJoinFaction","S",opcodePCJoinFaction); //extensions.registerInstruction("PCJoinFaction","S",opcodePCJoinFaction);
extensions.registerInstruction("pcraiserank","/S",opcodePCRaiseRank); extensions.registerInstruction("pcraiserank","/S",opcodePCRaiseRank);
extensions.registerInstruction("pclowerrank","/S",opcodePCLowerRank); extensions.registerInstruction("pclowerrank","/S",opcodePCLowerRank);
extensions.registerInstruction("pcjoinfaction","/S",opcodePCJoinFaction);
extensions.registerInstruction("moddisposition","l",opcodeModDisposition); extensions.registerInstruction("moddisposition","l",opcodeModDisposition);
} }
@ -545,6 +563,7 @@ namespace MWScript
//interpreter.installSegment5(opcodePCJoinFaction,new OpPCJoinFaction); //interpreter.installSegment5(opcodePCJoinFaction,new OpPCJoinFaction);
interpreter.installSegment3(opcodePCRaiseRank,new OpPCRaiseRank); interpreter.installSegment3(opcodePCRaiseRank,new OpPCRaiseRank);
interpreter.installSegment3(opcodePCLowerRank,new OpPCLowerRank); interpreter.installSegment3(opcodePCLowerRank,new OpPCLowerRank);
interpreter.installSegment3(opcodePCJoinFaction,new OpPCJoinFaction);
interpreter.installSegment5(opcodeModDisposition,new OpModDisposition); interpreter.installSegment5(opcodeModDisposition,new OpModDisposition);
} }
} }