ADDMEMBER.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System;
  2. namespace OpenVIII.Fields.Scripts.Instructions
  3. {
  4. /// <summary>
  5. /// Adds a PC to the available party (not to the active party).
  6. /// </summary>
  7. internal sealed class ADDMEMBER : JsmInstruction
  8. {
  9. private readonly Characters _characterId;
  10. public ADDMEMBER(Characters characterId)
  11. {
  12. _characterId = characterId;
  13. }
  14. public ADDMEMBER(Int32 parameter, IStack<IJsmExpression> stack)
  15. : this(
  16. characterId: (Characters)((Jsm.Expression.PSHN_L)stack.Pop()).Int32())
  17. {
  18. }
  19. public override String ToString()
  20. {
  21. return $"{nameof(ADDMEMBER)}({nameof(_characterId)}: {_characterId})";
  22. }
  23. public override void Format(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices services)
  24. {
  25. sw.Format(formatterContext, services)
  26. .StaticType(nameof(IPartyService))
  27. .Method(nameof(IPartyService.AddPlayableCharacter))
  28. .Enum(_characterId)
  29. .Comment(nameof(ADDMEMBER));
  30. }
  31. public override IAwaitable TestExecute(IServices services)
  32. {
  33. ServiceId.Party[services].AddPlayableCharacter(_characterId);
  34. return DummyAwaitable.Instance;
  35. }
  36. }
  37. }