Fixing hp bugs
This commit is contained in:
parent
49501e32ce
commit
21bf3f0710
@ -75,12 +75,13 @@ end
|
|||||||
game_api.set_location_callbacks(
|
game_api.set_location_callbacks(
|
||||||
function()
|
function()
|
||||||
print("Enter location dorm")
|
print("Enter location dorm")
|
||||||
local hp = game_api.getIntValue("player_hp")
|
local hp = game_api.getFloatValue("player_hp")
|
||||||
game_api.set_player_hp(hp)
|
game_api.set_player_hp(hp)
|
||||||
end,
|
end,
|
||||||
function()
|
function()
|
||||||
|
print("Exit location dorm")
|
||||||
local hp = game_api.get_player_hp()
|
local hp = game_api.get_player_hp()
|
||||||
game_api.setIntValue("player_hp", hp)
|
game_api.setFloatValue("player_hp", hp)
|
||||||
end
|
end
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -38,12 +38,13 @@ game_api.set_darklands_callbacks(
|
|||||||
game_api.set_location_callbacks(
|
game_api.set_location_callbacks(
|
||||||
function()
|
function()
|
||||||
print("Enter location uni exterior")
|
print("Enter location uni exterior")
|
||||||
local hp = game_api.getIntValue("player_hp")
|
local hp = game_api.getFloatValue("player_hp")
|
||||||
game_api.set_player_hp(hp)
|
game_api.set_player_hp(hp)
|
||||||
end,
|
end,
|
||||||
function()
|
function()
|
||||||
|
print("Exit location uni exterior")
|
||||||
local hp = game_api.get_player_hp()
|
local hp = game_api.get_player_hp()
|
||||||
game_api.setIntValue("player_hp", hp)
|
game_api.setFloatValue("player_hp", hp)
|
||||||
end
|
end
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -334,24 +334,26 @@ function setDay1setup()
|
|||||||
game_api.set_npc_enabled(5, false)
|
game_api.set_npc_enabled(5, false)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
game_api.set_location_callbacks(
|
game_api.set_location_callbacks(
|
||||||
function()
|
function()
|
||||||
print("Enter location uni interior")
|
print("Enter location uni interior")
|
||||||
local hp = game_api.getIntValue("player_hp")
|
local hp = game_api.getFloatValue("player_hp")
|
||||||
game_api.set_player_hp(hp)
|
game_api.set_player_hp(hp)
|
||||||
|
--[[
|
||||||
local need_sleep = game_api.getIntValue("need_sleep")
|
local need_sleep = game_api.getIntValue("need_sleep")
|
||||||
local day = game_api.getIntValue("day")
|
local day = game_api.getIntValue("day")
|
||||||
if (day==1) then
|
if (day==1) then
|
||||||
setDay1setup()
|
setDay1setup()
|
||||||
end
|
end]]
|
||||||
end,
|
end,
|
||||||
function()
|
function()
|
||||||
|
print("Exit location uni interior")
|
||||||
local hp = game_api.get_player_hp()
|
local hp = game_api.get_player_hp()
|
||||||
game_api.setIntValue("player_hp", hp)
|
game_api.setFloatValue("player_hp", hp)
|
||||||
end
|
end
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
print("Lua script loaded successfully!")
|
print("Lua script loaded successfully!")
|
||||||
@ -7,7 +7,6 @@
|
|||||||
#include "GameConstants.h"
|
#include "GameConstants.h"
|
||||||
#include "Environment.h"
|
#include "Environment.h"
|
||||||
|
|
||||||
|
|
||||||
namespace ZL {
|
namespace ZL {
|
||||||
|
|
||||||
const float ATTACK_COOLDOWN_TIME = 1.6f;
|
const float ATTACK_COOLDOWN_TIME = 1.6f;
|
||||||
@ -149,8 +148,6 @@ float Character::getSpeedMultiplier(float transitionProgress) const {
|
|||||||
|
|
||||||
void Character::update(int64_t deltaMs) {
|
void Character::update(int64_t deltaMs) {
|
||||||
if (!enabled) return;
|
if (!enabled) return;
|
||||||
if (initialHp <= 0.f) initialHp = hp;
|
|
||||||
|
|
||||||
if (slowMoTimeRemaining > 0.0f) {
|
if (slowMoTimeRemaining > 0.0f) {
|
||||||
slowMoTimeRemaining -= static_cast<float>(deltaMs) / 1000.0f;
|
slowMoTimeRemaining -= static_cast<float>(deltaMs) / 1000.0f;
|
||||||
|
|
||||||
|
|||||||
@ -108,9 +108,7 @@ public:
|
|||||||
std::string npcId;
|
std::string npcId;
|
||||||
std::string npcName;
|
std::string npcName;
|
||||||
float hp = 200.f;
|
float hp = 200.f;
|
||||||
// Captured lazily from `hp` on the first update() tick if left at zero;
|
float initialHp = 200.f;
|
||||||
// set explicitly if you need a different reference for the health bar.
|
|
||||||
float initialHp = 0.f;
|
|
||||||
|
|
||||||
|
|
||||||
int battle_state = 0;
|
int battle_state = 0;
|
||||||
|
|||||||
@ -189,7 +189,7 @@ namespace ZL
|
|||||||
ItemRegistry::instance().loadFromJson("resources/config2/items.json", CONST_ZIP_FILE);
|
ItemRegistry::instance().loadFromJson("resources/config2/items.json", CONST_ZIP_FILE);
|
||||||
|
|
||||||
|
|
||||||
globalInts["player_hp"] = 200;
|
globalFloats["player_hp"] = 200;
|
||||||
|
|
||||||
LocationSetup uniInteriorParams;
|
LocationSetup uniInteriorParams;
|
||||||
uniInteriorParams.gameObjectsJsonPath = "resources/config2/gameobjects_uni_interior.json";
|
uniInteriorParams.gameObjectsJsonPath = "resources/config2/gameobjects_uni_interior.json";
|
||||||
@ -226,6 +226,7 @@ namespace ZL
|
|||||||
locations["uni_interior"] = std::make_shared<Location>(renderer, inventory);
|
locations["uni_interior"] = std::make_shared<Location>(renderer, inventory);
|
||||||
locations["uni_interior"]->setup(uniInteriorParams);
|
locations["uni_interior"]->setup(uniInteriorParams);
|
||||||
locations["uni_interior"]->scriptEngine.setGlobalStore(&globalInts);
|
locations["uni_interior"]->scriptEngine.setGlobalStore(&globalInts);
|
||||||
|
locations["uni_interior"]->scriptEngine.setGlobalFloatStore(&globalFloats);
|
||||||
locations["uni_interior"]->requestDarklandsTransition = [this]() { return startDarklandsTransition(); };
|
locations["uni_interior"]->requestDarklandsTransition = [this]() { return startDarklandsTransition(); };
|
||||||
if (locations["uni_interior"]->player)
|
if (locations["uni_interior"]->player)
|
||||||
locations["uni_interior"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
|
locations["uni_interior"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
|
||||||
@ -245,6 +246,7 @@ namespace ZL
|
|||||||
locations["uni_exterior"] = std::make_shared<Location>(renderer, inventory);
|
locations["uni_exterior"] = std::make_shared<Location>(renderer, inventory);
|
||||||
locations["uni_exterior"]->setup(uniExteriorParams);
|
locations["uni_exterior"]->setup(uniExteriorParams);
|
||||||
locations["uni_exterior"]->scriptEngine.setGlobalStore(&globalInts);
|
locations["uni_exterior"]->scriptEngine.setGlobalStore(&globalInts);
|
||||||
|
locations["uni_exterior"]->scriptEngine.setGlobalFloatStore(&globalFloats);
|
||||||
locations["uni_exterior"]->requestDarklandsTransition = [this]() { return startDarklandsTransition(); };
|
locations["uni_exterior"]->requestDarklandsTransition = [this]() { return startDarklandsTransition(); };
|
||||||
if (locations["uni_exterior"]->player)
|
if (locations["uni_exterior"]->player)
|
||||||
locations["uni_exterior"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
|
locations["uni_exterior"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
|
||||||
@ -265,6 +267,7 @@ namespace ZL
|
|||||||
locations["location_dorm"] = std::make_shared<Location>(renderer, inventory);
|
locations["location_dorm"] = std::make_shared<Location>(renderer, inventory);
|
||||||
locations["location_dorm"]->setup(params_dorm);
|
locations["location_dorm"]->setup(params_dorm);
|
||||||
locations["location_dorm"]->scriptEngine.setGlobalStore(&globalInts);
|
locations["location_dorm"]->scriptEngine.setGlobalStore(&globalInts);
|
||||||
|
locations["location_dorm"]->scriptEngine.setGlobalFloatStore(&globalFloats);
|
||||||
locations["location_dorm"]->requestDarklandsTransition = [this]() { return startDarklandsTransition(); };
|
locations["location_dorm"]->requestDarklandsTransition = [this]() { return startDarklandsTransition(); };
|
||||||
if (locations["location_dorm"]->player)
|
if (locations["location_dorm"]->player)
|
||||||
locations["location_dorm"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
|
locations["location_dorm"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
|
||||||
|
|||||||
@ -56,6 +56,7 @@ namespace ZL {
|
|||||||
InteractiveObject* pickedUpObject = nullptr;
|
InteractiveObject* pickedUpObject = nullptr;
|
||||||
|
|
||||||
std::unordered_map<std::string, int> globalInts;
|
std::unordered_map<std::string, int> globalInts;
|
||||||
|
std::unordered_map<std::string, float> globalFloats;
|
||||||
|
|
||||||
MenuManager menuManager;
|
MenuManager menuManager;
|
||||||
|
|
||||||
|
|||||||
@ -17,6 +17,7 @@ namespace ZL {
|
|||||||
std::unordered_map<std::string, sol::protected_function> triggerExitCallbacks;
|
std::unordered_map<std::string, sol::protected_function> triggerExitCallbacks;
|
||||||
std::unordered_map<std::string, sol::protected_function> cutsceneCompleteCallbacks;
|
std::unordered_map<std::string, sol::protected_function> cutsceneCompleteCallbacks;
|
||||||
std::unordered_map<std::string, int>* globalInts = nullptr;
|
std::unordered_map<std::string, int>* globalInts = nullptr;
|
||||||
|
std::unordered_map<std::string, float>* globalFloats = nullptr;
|
||||||
sol::protected_function locationEnterCallback;
|
sol::protected_function locationEnterCallback;
|
||||||
sol::protected_function locationExitCallback;
|
sol::protected_function locationExitCallback;
|
||||||
sol::protected_function darklandsEnterCallback;
|
sol::protected_function darklandsEnterCallback;
|
||||||
@ -192,6 +193,18 @@ namespace ZL {
|
|||||||
api.set_function("is_darklands",
|
api.set_function("is_darklands",
|
||||||
[game]() { return game->isDarklands; });
|
[game]() { return game->isDarklands; });
|
||||||
|
|
||||||
|
api.set_function("setFloatValue",
|
||||||
|
[this_impl = impl.get()](const std::string& key, float value) {
|
||||||
|
if (this_impl->globalFloats)
|
||||||
|
(*this_impl->globalFloats)[key] = value;
|
||||||
|
});
|
||||||
|
api.set_function("getFloatValue",
|
||||||
|
[this_impl = impl.get()](const std::string& key) -> float {
|
||||||
|
if (!this_impl->globalFloats) return 0.0f;
|
||||||
|
auto it = this_impl->globalFloats->find(key);
|
||||||
|
return it != this_impl->globalFloats->end() ? it->second : 0.0f;
|
||||||
|
});
|
||||||
|
|
||||||
// set_player_hp(value) — sets the player's current HP directly.
|
// set_player_hp(value) — sets the player's current HP directly.
|
||||||
api.set_function("set_player_hp",
|
api.set_function("set_player_hp",
|
||||||
[game](float value) {
|
[game](float value) {
|
||||||
@ -476,6 +489,10 @@ namespace ZL {
|
|||||||
if (impl) impl->globalInts = store;
|
if (impl) impl->globalInts = store;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScriptEngine::setGlobalFloatStore(std::unordered_map<std::string, float>* store) {
|
||||||
|
if (impl) impl->globalFloats = store;
|
||||||
|
}
|
||||||
|
|
||||||
void ScriptEngine::callLocationEnterCallback() {
|
void ScriptEngine::callLocationEnterCallback() {
|
||||||
if (!impl || !impl->locationEnterCallback.valid()) return;
|
if (!impl || !impl->locationEnterCallback.valid()) return;
|
||||||
auto result = impl->locationEnterCallback();
|
auto result = impl->locationEnterCallback();
|
||||||
|
|||||||
@ -29,6 +29,7 @@ public:
|
|||||||
void callTriggerExitCallback(const std::string& zoneId);
|
void callTriggerExitCallback(const std::string& zoneId);
|
||||||
|
|
||||||
void setGlobalStore(std::unordered_map<std::string, int>* store);
|
void setGlobalStore(std::unordered_map<std::string, int>* store);
|
||||||
|
void setGlobalFloatStore(std::unordered_map<std::string, float>* store);
|
||||||
|
|
||||||
void callLocationEnterCallback();
|
void callLocationEnterCallback();
|
||||||
void callLocationExitCallback();
|
void callLocationExitCallback();
|
||||||
|
|||||||
@ -351,6 +351,7 @@ namespace ZL {
|
|||||||
npc->position = Eigen::Vector3f(npcData.positionX, npcData.positionY, npcData.positionZ);
|
npc->position = Eigen::Vector3f(npcData.positionX, npcData.positionY, npcData.positionZ);
|
||||||
npc->facingAngle = npcData.facingAngle;
|
npc->facingAngle = npcData.facingAngle;
|
||||||
npc->hp = npcData.hp;
|
npc->hp = npcData.hp;
|
||||||
|
npc->initialHp = npcData.hp;
|
||||||
npc->canAttack = npcData.canAttack;
|
npc->canAttack = npcData.canAttack;
|
||||||
npc->enabled = npcData.enabled;
|
npc->enabled = npcData.enabled;
|
||||||
npc->interactionRadius = npcData.interactionRadius;
|
npc->interactionRadius = npcData.interactionRadius;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user