@@ -3924,6 +3924,82 @@ void CLuaBaseEntity::setHomePoint()
39243924 PChar->id);
39253925}
39263926
3927+ /************************************************************************
3928+ * Function: learnMazeVoucher(uint8)
3929+ * Purpose : Marks a Moblin Maze Mongers voucher as learned, persists it,
3930+ * and refreshes the client's voucher/rune list.
3931+ * Example : player:learnMazeVoucher(xi.maze.voucher.SANITIZATION_TEAM_ALPHA)
3932+ ************************************************************************/
3933+
3934+ void CLuaBaseEntity::learnMazeVoucher(uint8 voucherId)
3935+ {
3936+ auto* PChar = dynamic_cast<CCharEntity*>(m_PBaseEntity);
3937+ if (!PChar)
3938+ {
3939+ ShowWarningFmt("CLuaBaseEntity::learnMazeVoucher called on non-PC entity ({}).", m_PBaseEntity->getName());
3940+ return;
3941+ }
3942+
3943+ PChar->maze().learnVoucher(voucherId);
3944+ charutils::SaveMazeUnlocks(PChar);
3945+ }
3946+
3947+ /************************************************************************
3948+ * Function: hasMazeVoucher(uint8)
3949+ * Purpose : Returns true if the player has learned the given voucher.
3950+ * Example : player:hasMazeVoucher(xi.maze.voucher.SANITIZATION_TEAM_ALPHA)
3951+ ************************************************************************/
3952+
3953+ auto CLuaBaseEntity::hasMazeVoucher(uint8 voucherId) -> bool
3954+ {
3955+ auto* PChar = dynamic_cast<CCharEntity*>(m_PBaseEntity);
3956+ if (!PChar)
3957+ {
3958+ ShowWarningFmt("CLuaBaseEntity::hasMazeVoucher called on non-PC entity ({}).", m_PBaseEntity->getName());
3959+ return false;
3960+ }
3961+
3962+ return PChar->maze().hasVoucher(voucherId);
3963+ }
3964+
3965+ /************************************************************************
3966+ * Function: learnMazeRune(uint8)
3967+ * Purpose : Marks a Moblin Maze Mongers rune as learned, persists it,
3968+ * and refreshes the client's voucher/rune list.
3969+ * Example : player:learnMazeRune(xi.maze.rune.GUIDANCE_CONTRACT)
3970+ ************************************************************************/
3971+
3972+ void CLuaBaseEntity::learnMazeRune(uint16 runeId)
3973+ {
3974+ auto* PChar = dynamic_cast<CCharEntity*>(m_PBaseEntity);
3975+ if (!PChar)
3976+ {
3977+ ShowWarningFmt("CLuaBaseEntity::learnMazeRune called on non-PC entity ({}).", m_PBaseEntity->getName());
3978+ return;
3979+ }
3980+
3981+ PChar->maze().learnRune(runeId);
3982+ charutils::SaveMazeUnlocks(PChar);
3983+ }
3984+
3985+ /************************************************************************
3986+ * Function: hasMazeRune(uint16)
3987+ * Purpose : Returns true if the player has learned the given rune.
3988+ * Example : player:hasMazeRune(xi.maze.rune.GUIDANCE_CONTRACT)
3989+ ************************************************************************/
3990+
3991+ auto CLuaBaseEntity::hasMazeRune(uint16 runeId) -> bool
3992+ {
3993+ auto* PChar = dynamic_cast<CCharEntity*>(m_PBaseEntity);
3994+ if (!PChar)
3995+ {
3996+ ShowWarningFmt("CLuaBaseEntity::hasMazeRune called on non-PC entity ({}).", m_PBaseEntity->getName());
3997+ return false;
3998+ }
3999+
4000+ return PChar->maze().hasRune(runeId);
4001+ }
4002+
39274003/************************************************************************
39284004 * Function: resetPlayer()
39294005 * Purpose : Delete player's account session and send them to Lower Jeuno
@@ -19808,6 +19884,10 @@ void CLuaBaseEntity::Register()
1980819884 SOL_REGISTER("setTeleportMenu", CLuaBaseEntity::setTeleportMenu);
1980919885 SOL_REGISTER("getTeleportMenu", CLuaBaseEntity::getTeleportMenu);
1981019886 SOL_REGISTER("setHomePoint", CLuaBaseEntity::setHomePoint);
19887+ SOL_REGISTER("learnMazeVoucher", CLuaBaseEntity::learnMazeVoucher);
19888+ SOL_REGISTER("hasMazeVoucher", CLuaBaseEntity::hasMazeVoucher);
19889+ SOL_REGISTER("learnMazeRune", CLuaBaseEntity::learnMazeRune);
19890+ SOL_REGISTER("hasMazeRune", CLuaBaseEntity::hasMazeRune);
1981119891 SOL_REGISTER("resetPlayer", CLuaBaseEntity::resetPlayer);
1981219892
1981319893 SOL_REGISTER("gotoEntity", CLuaBaseEntity::gotoEntity);
0 commit comments