Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into feature/coords-rework
Browse files Browse the repository at this point in the history
# Conflicts:
#	Source/Client/CritterHexView.cpp
#	Source/Client/HexView.cpp
#	Source/Client/HexView.h
  • Loading branch information
cvet committed Dec 21, 2024
2 parents ef60719 + 0b89659 commit cf7a845
Show file tree
Hide file tree
Showing 17 changed files with 405 additions and 275 deletions.
1 change: 0 additions & 1 deletion BuildTools/FinalizeGeneration.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -894,7 +894,6 @@ list(APPEND FO_BAKER_SOURCE
"${FO_ENGINE_ROOT}/Source/Tools/Baker.cpp"
"${FO_ENGINE_ROOT}/Source/Tools/EffectBaker.h"
"${FO_ENGINE_ROOT}/Source/Tools/EffectBaker.cpp"
"${FO_ENGINE_ROOT}/Source/Tools/F2Palette-Include.h"
"${FO_ENGINE_ROOT}/Source/Tools/ImageBaker.h"
"${FO_ENGINE_ROOT}/Source/Tools/ImageBaker.cpp"
"${FO_ENGINE_ROOT}/Source/Tools/ModelBaker.h"
Expand Down
13 changes: 4 additions & 9 deletions Source/Client/Client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@ FOClient::FOClient(GlobalSettings& settings, AppWindow* window, bool mapper_mode
set_callback(GetPropertyRegistrator(CritterProperties::ENTITY_TYPE_NAME), CritterView::ContourColor_RegIndex, [this](Entity* entity, const Property* prop) { OnSetCritterContourColor(entity, prop); });
set_callback(GetPropertyRegistrator(CritterProperties::ENTITY_TYPE_NAME), CritterView::HideSprite_RegIndex, [this](Entity* entity, const Property* prop) { OnSetCritterHideSprite(entity, prop); });
set_callback(GetPropertyRegistrator(ItemProperties::ENTITY_TYPE_NAME), ItemView::Colorize_RegIndex, [this](Entity* entity, const Property* prop) { OnSetItemFlags(entity, prop); });
set_callback(GetPropertyRegistrator(ItemProperties::ENTITY_TYPE_NAME), ItemView::ColorizeColor_RegIndex, [this](Entity* entity, const Property* prop) { OnSetItemFlags(entity, prop); });
set_callback(GetPropertyRegistrator(ItemProperties::ENTITY_TYPE_NAME), ItemView::BadItem_RegIndex, [this](Entity* entity, const Property* prop) { OnSetItemFlags(entity, prop); });
set_callback(GetPropertyRegistrator(ItemProperties::ENTITY_TYPE_NAME), ItemView::ShootThru_RegIndex, [this](Entity* entity, const Property* prop) { OnSetItemFlags(entity, prop); });
set_callback(GetPropertyRegistrator(ItemProperties::ENTITY_TYPE_NAME), ItemView::LightThru_RegIndex, [this](Entity* entity, const Property* prop) { OnSetItemFlags(entity, prop); });
Expand Down Expand Up @@ -3004,13 +3005,14 @@ void FOClient::OnSetItemFlags(Entity* entity, const Property* prop)

NON_CONST_METHOD_HINT();

// Colorize, BadItem, ShootThru, LightThru, NoBlock
// Colorize, ColorizeColor, BadItem, ShootThru, LightThru, NoBlock

if (auto* item = dynamic_cast<ItemHexView*>(entity); item != nullptr) {
auto rebuild_cache = false;

if (prop == item->GetPropertyColorize()) {
if (prop == item->GetPropertyColorize() || prop == item->GetPropertyColorizeColor()) {
item->RefreshAlpha();
item->RefreshSprite();
}
else if (prop == item->GetPropertyBadItem()) {
item->RefreshSprite();
Expand Down Expand Up @@ -3640,13 +3642,6 @@ auto FOClient::CustomCall(string_view command, string_view separator) -> string
CurMap->SetSkipRoof({static_cast<uint16>(hx), static_cast<uint16>(hy)});
}
}
else if (cmd == "ChosenAlpha" && args.size() == 2) {
const auto alpha = strex(args[1]).toInt();

if (auto* chosen = GetMapChosen(); chosen != nullptr) {
chosen->Alpha = static_cast<uint8>(alpha);
}
}
else {
throw ScriptException("Invalid custom call command", cmd, args.size());
}
Expand Down
9 changes: 3 additions & 6 deletions Source/Client/CritterHexView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -600,11 +600,8 @@ void CritterHexView::Process()
_offsExtNextTime = _engine->GameTime.GameplayTime() + std::chrono::milliseconds {30};

const auto dist = GenericUtils::DistSqrt({0, 0}, {iround(_offsExt.x), iround(_offsExt.y)});
const auto dist_div = dist / 10u;
auto mul = static_cast<float>(dist_div);
if (mul < 1.0f) {
mul = 1.0f;
}
const auto dist_div = dist / 10;
const auto mul = std::max(static_cast<float>(dist_div), 1.0f);

_offsExt.x += _offsExtSpeed.x * mul;
_offsExt.y += _offsExtSpeed.y * mul;
Expand Down Expand Up @@ -957,7 +954,7 @@ void CritterHexView::DrawName()

ucolor color = GetNameColor();
color = color != ucolor::clear ? color : COLOR_TEXT;
color = ucolor {color, Alpha};
color = ucolor {color, GetCurAlpha()};

ipos pos;

Expand Down
52 changes: 34 additions & 18 deletions Source/Client/HexView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ auto HexView::AddSprite(MapSpriteList& list, DrawOrderType draw_order, mpos hex,
RUNTIME_ASSERT(!_mapSprValid);

auto& mspr = list.AddSprite(draw_order, hex, {_map->GetEngine()->Settings.MapHexWidth / 2, _map->GetEngine()->Settings.MapHexHeight / 2}, //
hex_offset, nullptr, &Spr, &SprOffset, &Alpha, &DrawEffect, &_mapSprValid);
hex_offset, nullptr, &Spr, &SprOffset, &_curAlpha, &DrawEffect, &_mapSprValid);

SetupSprite(&mspr);

Expand All @@ -69,7 +69,7 @@ auto HexView::InsertSprite(MapSpriteList& list, DrawOrderType draw_order, mpos h
RUNTIME_ASSERT(!_mapSprValid);

auto& mspr = list.InsertSprite(draw_order, hex, {_map->GetEngine()->Settings.MapHexWidth / 2, _map->GetEngine()->Settings.MapHexHeight / 2}, //
hex_offset, nullptr, &Spr, &SprOffset, &Alpha, &DrawEffect, &_mapSprValid);
hex_offset, nullptr, &Spr, &SprOffset, &_curAlpha, &DrawEffect, &_mapSprValid);

SetupSprite(&mspr);

Expand Down Expand Up @@ -108,11 +108,7 @@ void HexView::ProcessFading()
{
STACK_TRACE_ENTRY();

Alpha = EvaluateFadeAlpha();

if (Alpha > _maxAlpha) {
Alpha = _maxAlpha;
}
EvaluateCurAlpha();
}

void HexView::FadeUp()
Expand All @@ -132,36 +128,56 @@ void HexView::SetFade(bool fade_up)
_fadeUp = fade_up;
_fading = true;

Alpha = EvaluateFadeAlpha();
EvaluateCurAlpha();
}

auto HexView::EvaluateFadeAlpha() -> uint8
void HexView::EvaluateCurAlpha()
{
STACK_TRACE_ENTRY();

const auto time = _map->GetEngine()->GameTime.GameplayTime();
const auto fading_proc = 100 - GenericUtils::Percent(_map->GetEngine()->Settings.FadingDuration, _fadingTime > time ? time_duration_to_ms<uint>(_fadingTime - time) : 0);
if (_fading) {
const auto time = _map->GetEngine()->GameTime.GameplayTime();
const auto fading_proc = 100 - GenericUtils::Percent(_map->GetEngine()->Settings.FadingDuration, _fadingTime > time ? time_duration_to_ms<uint>(_fadingTime - time) : 0);

if (fading_proc == 100) {
_fading = false;
if ((_fadeUp && fading_proc == 100) || (!_fadeUp && fading_proc == 0)) {
_fading = false;
}

_curAlpha = static_cast<uint8>(_fadeUp ? fading_proc * _targetAlpha / 100 : (100 - fading_proc) * _targetAlpha / 100);
}
else {
_curAlpha = _targetAlpha;
}
}

const auto alpha = _fadeUp ? fading_proc * 255 / 100 : (100 - fading_proc) * 255 / 100;
return static_cast<uint8>(alpha);
void HexView::SetTargetAlpha(uint8 alpha)
{
STACK_TRACE_ENTRY();

_targetAlpha = alpha;
EvaluateCurAlpha();
}

void HexView::SetMaxAlpha(uint8 alpha)
void HexView::SetDefaultAlpha(uint8 alpha)
{
STACK_TRACE_ENTRY();

_maxAlpha = alpha;
if (_defaultAlpha == _targetAlpha) {
_defaultAlpha = alpha;
_targetAlpha = alpha;
EvaluateCurAlpha();
}
else {
_defaultAlpha = alpha;
}
}

void HexView::RestoreAlpha()
{
STACK_TRACE_ENTRY();

Alpha = _maxAlpha;
_targetAlpha = _defaultAlpha;
EvaluateCurAlpha();
}

void HexView::RefreshSprite()
Expand Down
15 changes: 9 additions & 6 deletions Source/Client/HexView.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,9 @@ class HexView
[[nodiscard]] auto IsSpriteVisible() const noexcept -> bool { return _mapSprValid && !_mapSpr->IsHidden(); }
[[nodiscard]] auto GetSprite() const -> const MapSprite*;
[[nodiscard]] auto GetSprite() -> MapSprite*;
[[nodiscard]] auto IsTransparent() const noexcept -> bool { return _maxAlpha < 0xFF; }
[[nodiscard]] auto IsFullyTransparent() const noexcept -> bool { return _maxAlpha == 0; }
[[nodiscard]] auto GetCurAlpha() const noexcept -> uint8 { return _curAlpha; }
[[nodiscard]] auto IsTransparent() const noexcept -> bool { return _targetAlpha < 0xFF; }
[[nodiscard]] auto IsFullyTransparent() const noexcept -> bool { return _targetAlpha == 0; }
[[nodiscard]] auto IsFading() const noexcept -> bool { return _fading; }
[[nodiscard]] auto IsFinishing() const noexcept -> bool { return _finishing; }
[[nodiscard]] auto IsFinished() const noexcept -> bool;
Expand All @@ -69,16 +70,16 @@ class HexView
auto StoreFading() -> tuple<bool, bool, time_point> { return {_fading, _fadeUp, _fadingTime}; }
void RestoreFading(const tuple<bool, bool, time_point>& data) { std::tie(_fading, _fadeUp, _fadingTime) = data; }
void FadeUp();
void SetTargetAlpha(uint8 alpha);
void SetDefaultAlpha(uint8 alpha);
void RestoreAlpha();
void SetMaxAlpha(uint8 alpha);
void RefreshSprite();
void InvalidateSprite();
void SetSpriteVisiblity(bool enabled);

// Todo: incapsulate hex view fileds
const Sprite* Spr {};
ipos SprOffset {};
uint8 Alpha {0xFF};
RenderEffect* DrawEffect {};

protected:
Expand All @@ -89,13 +90,15 @@ class HexView

private:
void SetFade(bool fade_up);
auto EvaluateFadeAlpha() -> uint8;
void EvaluateCurAlpha();

MapSprite* _mapSpr {};
bool _mapSprValid {};
bool _mapSprHidden {};

uint8 _maxAlpha {0xFF};
uint8 _curAlpha {0xFF};
uint8 _defaultAlpha {0xFF};
uint8 _targetAlpha {0xFF};

bool _fading {};
bool _fadeUp {};
Expand Down
4 changes: 2 additions & 2 deletions Source/Client/ItemHexView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ void ItemHexView::SetupSprite(MapSprite* mspr)

HexView::SetupSprite(mspr);

mspr->SetColor(GetColorize() ? GetLightColor() : ucolor::clear);
mspr->SetColor(GetColorize() ? GetColorizeColor() : ucolor::clear);
mspr->SetEggAppearence(GetEggType());

if (GetBadItem()) {
Expand Down Expand Up @@ -164,7 +164,7 @@ void ItemHexView::RefreshAlpha()
{
STACK_TRACE_ENTRY();

SetMaxAlpha(GetColorize() ? GetLightColor().comp.a : 255);
SetDefaultAlpha(GetColorize() ? GetColorizeColor().comp.a : 0xFF);
}

void ItemHexView::RefreshAnim()
Expand Down
2 changes: 2 additions & 0 deletions Source/Common/EntityProperties.h
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,8 @@ class ItemProperties : public EntityProperties
ENTITY_PROPERTY(Public, uint8, LightFlags);
///@ ExportProperty
ENTITY_PROPERTY(Public, ucolor, LightColor);
///@ ExportProperty
ENTITY_PROPERTY(Public, ucolor, ColorizeColor);

// Todo: exclude item properties from engine:
///@ ExportProperty ScriptFuncType = ItemTrigger
Expand Down
36 changes: 18 additions & 18 deletions Source/Scripting/AngelScriptScripting-Template.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -896,7 +896,7 @@ static auto AngelScriptFuncCall(SCRIPTING_CLASS::AngelScriptImpl* script_sys, Sc
{
STACK_TRACE_ENTRY();

static unordered_map<std::type_index, std::function<void(asIScriptContext*, asUINT, void*)>> CtxSetValueMap = {
static unordered_map<std::type_index, std::function<void(asIScriptContext*, asUINT, void*)>> ctx_set_value_map = {
{typeid(bool), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgByte(index, *static_cast<bool*>(ptr)); }},
{typeid(int8), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgByte(index, *static_cast<int8*>(ptr)); }},
{typeid(int16), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgWord(index, *static_cast<int16*>(ptr)); }},
Expand All @@ -908,27 +908,27 @@ static auto AngelScriptFuncCall(SCRIPTING_CLASS::AngelScriptImpl* script_sys, Sc
{typeid(uint64), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgQWord(index, *static_cast<uint64*>(ptr)); }},
{typeid(float), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgFloat(index, *static_cast<float*>(ptr)); }},
{typeid(double), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgDouble(index, *static_cast<double*>(ptr)); }},
{typeid(bool*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, static_cast<bool*>(ptr)); }},
{typeid(int8*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, static_cast<int8*>(ptr)); }},
{typeid(int16*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, static_cast<int16*>(ptr)); }},
{typeid(int*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, static_cast<int*>(ptr)); }},
{typeid(int64*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, static_cast<int64*>(ptr)); }},
{typeid(uint8*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, static_cast<uint8*>(ptr)); }},
{typeid(uint16*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, static_cast<uint16*>(ptr)); }},
{typeid(uint*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, static_cast<uint*>(ptr)); }},
{typeid(uint64*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, static_cast<uint64*>(ptr)); }},
{typeid(float*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, static_cast<float*>(ptr)); }},
{typeid(double*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, static_cast<double*>(ptr)); }},
{typeid(bool*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, *static_cast<bool**>(ptr)); }},
{typeid(int8*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, *static_cast<int8**>(ptr)); }},
{typeid(int16*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, *static_cast<int16**>(ptr)); }},
{typeid(int*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, *static_cast<int**>(ptr)); }},
{typeid(int64*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, *static_cast<int64**>(ptr)); }},
{typeid(uint8*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, *static_cast<uint8**>(ptr)); }},
{typeid(uint16*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, *static_cast<uint16**>(ptr)); }},
{typeid(uint*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, *static_cast<uint**>(ptr)); }},
{typeid(uint64*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, *static_cast<uint64**>(ptr)); }},
{typeid(float*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, *static_cast<float**>(ptr)); }},
{typeid(double*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, *static_cast<double**>(ptr)); }},
{typeid(hstring), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgObject(index, static_cast<hstring*>(ptr)); }},
{typeid(string), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgObject(index, static_cast<string*>(ptr)); }},
{typeid(any_t), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgObject(index, static_cast<any_t*>(ptr)); }},
{typeid(ident_t), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgObject(index, static_cast<ident_t*>(ptr)); }},
{typeid(tick_t), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgObject(index, static_cast<tick_t*>(ptr)); }},
{typeid(hstring*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, static_cast<hstring*>(ptr)); }},
{typeid(string*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, static_cast<string*>(ptr)); }},
{typeid(any_t*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, static_cast<any_t*>(ptr)); }},
{typeid(ident_t*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, static_cast<ident_t*>(ptr)); }},
{typeid(tick_t*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, static_cast<tick_t*>(ptr)); }},
{typeid(hstring*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, *static_cast<hstring**>(ptr)); }},
{typeid(string*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, *static_cast<string**>(ptr)); }},
{typeid(any_t*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, *static_cast<any_t**>(ptr)); }},
{typeid(ident_t*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, *static_cast<ident_t**>(ptr)); }},
{typeid(tick_t*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgAddress(index, *static_cast<tick_t**>(ptr)); }},
#if SERVER_SCRIPTING
{typeid(Player*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgObject(index, *static_cast<Player**>(ptr)); }},
{typeid(Item*), [](asIScriptContext* ctx, asUINT index, void* ptr) { ctx->SetArgObject(index, *static_cast<Item**>(ptr)); }},
Expand Down Expand Up @@ -1011,7 +1011,7 @@ static auto AngelScriptFuncCall(SCRIPTING_CLASS::AngelScriptImpl* script_sys, Sc
if (args.size() != 0) {
auto it = args.begin();
for (asUINT i = 0; i < args.size(); i++, it++) {
CtxSetValueMap[func_desc->ArgsType[i]](ctx, i, *it);
ctx_set_value_map[func_desc->ArgsType[i]](ctx, i, *it);
}
}

Expand Down
10 changes: 9 additions & 1 deletion Source/Scripting/ClientCritterScriptMethods.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,15 @@
[[maybe_unused]] uint8 Client_Critter_GetAlpha(CritterView* self)
{
const auto* hex_cr = dynamic_cast<CritterHexView*>(self);
return hex_cr != nullptr ? hex_cr->Alpha : 0xFF;
return hex_cr != nullptr ? hex_cr->GetCurAlpha() : 0xFF;
}

///@ ExportMethod
[[maybe_unused]] void Client_Critter_SetAlpha(CritterView* self, uint8 alpha)
{
if (auto* hex_cr = dynamic_cast<CritterHexView*>(self); hex_cr != nullptr) {
hex_cr->SetTargetAlpha(alpha);
}
}

///@ ExportMethod
Expand Down
10 changes: 9 additions & 1 deletion Source/Scripting/ClientItemScriptMethods.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,5 +129,13 @@ static void ItemGetMapPos(ItemView* self, mpos& hex)
[[maybe_unused]] uint8 Client_Item_GetAlpha(ItemView* self)
{
const auto* hex_item = dynamic_cast<ItemHexView*>(self);
return hex_item != nullptr ? hex_item->Alpha : 0xFF;
return hex_item != nullptr ? hex_item->GetCurAlpha() : 0xFF;
}

///@ ExportMethod
[[maybe_unused]] void Client_Item_SetAlpha(ItemView* self, uint8 alpha)
{
if (auto* hex_item = dynamic_cast<ItemHexView*>(self); hex_item != nullptr) {
hex_item->SetTargetAlpha(alpha);
}
}
2 changes: 1 addition & 1 deletion Source/Scripting/ClientMapScriptMethods.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@

if (mapSpr->ProtoId) {
const auto* proto = self->GetEngine()->ProtoMngr.GetProtoItem(mapSpr->ProtoId);
color = proto->GetColorize() ? proto->GetLightColor() : ucolor::clear;
color = proto->GetColorize() ? proto->GetColorizeColor() : ucolor::clear;
is_flat = proto->GetDrawFlatten();
const auto is_item = proto->GetIsScenery() || proto->GetIsWall();
no_light = is_flat && !is_item;
Expand Down
7 changes: 7 additions & 0 deletions Source/Scripting/ServerCritterScriptMethods.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1191,3 +1191,10 @@
{
return tick_t {time_duration_to_ms<tick_t::underlying_type>(self->GetOfflineTime())};
}

///@ ExportMethod
[[maybe_unused]] void Server_Critter_RefreshDialogTime(Critter* self)
{
self->Talk.StartTime = self->GetEngine()->GameTime.GameplayTime();
self->Talk.TalkTime = std::chrono::milliseconds {self->Talk.Barter ? self->GetEngine()->Settings.DlgBarterMaxTime : self->GetEngine()->Settings.DlgTalkMaxTime};
}
3 changes: 3 additions & 0 deletions Source/Server/ItemManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,9 @@ auto ItemManager::CreateItem(hstring pid, uint count, const Properties* props) -
if (count != 0 && item->GetStackable()) {
item->SetCount(count);
}
else {
item->SetCount(1);
}

if (item->GetIsRadio()) {
RegisterRadio(item);
Expand Down
Loading

0 comments on commit cf7a845

Please sign in to comment.