diff --git a/docs/apis/GameAPI/Player.zh.md b/docs/apis/GameAPI/Player.zh.md index 0b6aede2..94fd86e0 100644 --- a/docs/apis/GameAPI/Player.zh.md +++ b/docs/apis/GameAPI/Player.zh.md @@ -1766,6 +1766,14 @@ ### 模拟玩家 - 函数 每一个模拟玩家对象都包含一些可以执行的成员函数(成员方法)。对于某个特定的模拟玩家对象`sp`,可以通过以下这些函数对这个模拟玩家进行一些操作 +#### 模拟重生 + +'sp.simulateRespawn()' + +- 返回值:是否成功模拟操作 +- 返回值类型:'Boolean' + +参考:[mojang-gametest docs](https://learn.microsoft.com/zh-cn/minecraft/creator/scriptapi/minecraft/server-gametest/simulatedplayer?view=minecraft-bedrock-experimental#respawn) #### 模拟攻击 diff --git a/src/legacy/api/ScoreboardAPI.cpp b/src/legacy/api/ScoreboardAPI.cpp index 302c2623..fcc884e5 100644 --- a/src/legacy/api/ScoreboardAPI.cpp +++ b/src/legacy/api/ScoreboardAPI.cpp @@ -82,6 +82,8 @@ Local ObjectiveClass::setDisplay(const Arguments& args) { CATCH("Fail in setDisplay"); } +/////////////////////////////////////////////////////////////////// + Local ObjectiveClass::setScore(const Arguments& args) { CHECK_ARGS_COUNT(args, 2) CHECK_ARG_TYPE(args[1], ValueKind::kNumber) @@ -92,7 +94,7 @@ Local ObjectiveClass::setScore(const Arguments& args) { if (args[0].isString()) { std::string name = args[0].toStr(); Scoreboard& scoreboard = ll::service::getLevel()->getScoreboard(); - Objective* obj = scoreboard.getObjective(objname); + Objective* obj = get(); if (!obj) { return Boolean::newBoolean(false); } @@ -103,14 +105,15 @@ Local ObjectiveClass::setScore(const Arguments& args) { bool isSuccess = false; scoreboard.modifyPlayerScore(isSuccess, id, *obj, score, PlayerScoreSetFunction::Set); if (isSuccess) return Number::newNumber(score); + return Local(); } else if (IsInstanceOf(args[0])) { auto player = PlayerClass::extract(args[0]); Scoreboard& scoreboard = ll::service::getLevel()->getScoreboard(); - Objective* obj = scoreboard.getObjective(objname); + Objective* obj = get(); if (!obj) { return Boolean::newBoolean(false); } - const ScoreboardId& id = scoreboard.getScoreboardId(player->getOrCreateUniqueID()); + const ScoreboardId& id = scoreboard.getScoreboardId(*player); if (!id.isValid()) { scoreboard.createScoreboardId(*player); } @@ -118,6 +121,7 @@ Local ObjectiveClass::setScore(const Arguments& args) { scoreboard .modifyPlayerScore(isSuccess, id, *obj, args[1].asNumber().toInt32(), PlayerScoreSetFunction::Set); if (isSuccess) return Number::newNumber(score); + return Local(); } else { LOG_WRONG_ARG_TYPE(); return Local(); @@ -137,7 +141,7 @@ Local ObjectiveClass::addScore(const Arguments& args) { if (args[0].isString()) { std::string name = args[0].toStr(); Scoreboard& scoreboard = ll::service::getLevel()->getScoreboard(); - Objective* obj = scoreboard.getObjective(objname); + Objective* obj = get(); if (!obj) { return Boolean::newBoolean(false); } @@ -149,14 +153,15 @@ Local ObjectiveClass::addScore(const Arguments& args) { scoreboard .modifyPlayerScore(isSuccess, id, *obj, args[1].asNumber().toInt32(), PlayerScoreSetFunction::Add); if (isSuccess) return Number::newNumber(score); + return Local(); } else if (IsInstanceOf(args[0])) { auto player = PlayerClass::extract(args[0]); Scoreboard& scoreboard = ll::service::getLevel()->getScoreboard(); - Objective* obj = scoreboard.getObjective(objname); + Objective* obj = get(); if (!obj) { return Boolean::newBoolean(false); } - const ScoreboardId& id = scoreboard.getScoreboardId(player->getOrCreateUniqueID()); + const ScoreboardId& id = scoreboard.getScoreboardId(*player); if (!id.isValid()) { scoreboard.createScoreboardId(*player); } @@ -164,6 +169,7 @@ Local ObjectiveClass::addScore(const Arguments& args) { scoreboard .modifyPlayerScore(isSuccess, id, *obj, args[1].asNumber().toInt32(), PlayerScoreSetFunction::Add); if (isSuccess) return Number::newNumber(score); + return Local(); } else { LOG_WRONG_ARG_TYPE(); return Local(); @@ -183,7 +189,7 @@ Local ObjectiveClass::reduceScore(const Arguments& args) { if (args[0].isString()) { std::string name = args[0].toStr(); Scoreboard& scoreboard = ll::service::getLevel()->getScoreboard(); - Objective* obj = scoreboard.getObjective(objname); + Objective* obj = get(); if (!obj) { return Boolean::newBoolean(false); } @@ -195,14 +201,15 @@ Local ObjectiveClass::reduceScore(const Arguments& args) { scoreboard .modifyPlayerScore(isSuccess, id, *obj, args[1].asNumber().toInt32(), PlayerScoreSetFunction::Subtract); if (isSuccess) return Number::newNumber(score); + return Local(); } else if (IsInstanceOf(args[0])) { auto player = PlayerClass::extract(args[0]); Scoreboard& scoreboard = ll::service::getLevel()->getScoreboard(); - Objective* obj = scoreboard.getObjective(objname); + Objective* obj = get(); if (!obj) { return Boolean::newBoolean(false); } - const ScoreboardId& id = scoreboard.getScoreboardId(player->getOrCreateUniqueID()); + const ScoreboardId& id = scoreboard.getScoreboardId(*player); if (!id.isValid()) { scoreboard.createScoreboardId(*player); } @@ -210,6 +217,7 @@ Local ObjectiveClass::reduceScore(const Arguments& args) { scoreboard .modifyPlayerScore(isSuccess, id, *obj, args[1].asNumber().toInt32(), PlayerScoreSetFunction::Subtract); if (isSuccess) return Number::newNumber(score); + return Local(); } else { LOG_WRONG_ARG_TYPE(); return Local(); @@ -225,7 +233,7 @@ Local ObjectiveClass::deleteScore(const Arguments& args) { try { if (args[0].isString()) { Scoreboard& scoreboard = ll::service::getLevel()->getScoreboard(); - Objective* obj = scoreboard.getObjective(objname); + Objective* obj = get(); if (!obj) { return Boolean::newBoolean(false); } @@ -237,11 +245,11 @@ Local ObjectiveClass::deleteScore(const Arguments& args) { } else if (IsInstanceOf(args[0])) { Player* player = PlayerClass::extract(args[0]); Scoreboard& scoreboard = ll::service::getLevel()->getScoreboard(); - Objective* obj = scoreboard.getObjective(objname); + Objective* obj = get(); if (!obj) { return Boolean::newBoolean(false); } - const ScoreboardId& id = scoreboard.getScoreboardId(player->getOrCreateUniqueID()); + const ScoreboardId& id = scoreboard.getScoreboardId(*player); if (!id.isValid()) { return Boolean::newBoolean(true); } @@ -261,8 +269,7 @@ Local ObjectiveClass::getScore(const Arguments& args) { if (args[0].isString()) { Scoreboard& board = ll::service::getLevel()->getScoreboard(); Objective* objective = board.getObjective(objname); - ScoreboardId sid = - board.getScoreboardId(PlayerScoreboardId(std::atoll(args[0].asString().toString().c_str()))); + ScoreboardId sid = board.getScoreboardId(args[0].asString().toString()); if (!objective || !sid.isValid() || !objective->hasScore(sid)) { return {}; } @@ -294,7 +301,7 @@ Local McClass::getDisplayObjective(const Arguments& args) { auto res = ll::service::getLevel()->getScoreboard().getDisplayObjective(slot); if (!res) return Local(); - return ObjectiveClass::newObjective((Objective*)res); + return ObjectiveClass::newObjective(const_cast(res->mObjective)); } CATCH("Fail in GetDisplayObjective"); } @@ -307,8 +314,8 @@ Local McClass::clearDisplayObjective(const Arguments& args) { string slot = args[0].toStr(); auto res = ll::service::getLevel()->getScoreboard().clearDisplayObjective(slot); - if (!res) return Local(); - return ObjectiveClass::newObjective(res); + if (!res) return Boolean::newBoolean(false); + return Boolean::newBoolean(true); } CATCH("Fail in ClearDisplayObjective"); }