Довольно тупое охлаждение жратвы и кастрюли если они оказались на земле
Прикрутить охлаждение содержимого кастрюли как 2 байта сами знаете что
Сделать охлаждение после снятия с костра и тп вобщем то же не проблема
Просто код и ничего лишнего
Комментарии к коду добавлю позже
Логгирование в коде закомментировано - раскомментируйте, что бы наблюдать за процессом
Для жратвы убавление температуры раз в 10 сек на 1 градус
Для кастрюли на 2 градуса
Охлаждается до дневной температуры воздуха далее охлаждение прекращается
У бгемотов есть 2 температуры воздуха - дневная и ночная
Идиотизм? Однозначно
Я пытался в погоде сделать ее плавное изменение в зависимости от Overcast, Rain и тп, но забил - потом как-нибудь
Есть вопросы, задавайте, отвечу если будет время.
Вобщем как-то так:
//08.05.2020
modded class ItemBase extends InventoryItem
{
ref Timer m_TemperatureDecrease;
private float m_InitTemperature;
private float m_DecreaseTempTime = 10;
private float m_TempDecreaseCoef = -1;
void ItemBase()
{
m_InitTemperature = 12; //g_Game.GetMission().GetWorldData().GetDayTemperature(); // Не работает ((( какого художника - я хз
if ( IsInherited(Pot) /* GetInventory().GetCargo() */ )
{
m_TempDecreaseCoef = -2;
}
}
override void AfterStoreLoad()
{
super.AfterStoreLoad();
if (!IsInherited(FireplaceBase)) TryToStartTempDecrease();
}
private void TryToStartTempDecrease()
{
if (GetTemperature() > GetInitTemperature())
{
if (!GetHierarchyParent())
{
if (!m_TemperatureDecrease)
{
Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: Init: TryToStartTempDecrease: this: " + this + ": GetHierarchyParent(): " + GetHierarchyParent() + ": GetTemperature(): " + GetTemperature());
StartTemperatureDecrease();
}
}
}
}
override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
{
super.EEItemLocationChanged(oldLoc,newLoc);
//Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: EEItemLocationChanged: this: " + this + ": newLoc.GetType(): " + newLoc.GetType() + ": newLoc.GetParent(): " + newLoc.GetParent() + ": GetTemperature(): " + GetTemperature());
if (GetTemperature() > GetInitTemperature())
{
if (!newLoc.GetParent() || newLoc.GetType() == InventoryLocationType.GROUND)
{
if (!m_TemperatureDecrease)
{
Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: EEItemLocationChanged: this: " + this + ": Begin decrease temperature: GetTemperature(): " + GetTemperature());
StartTemperatureDecrease();
}
}
}
else
{
if (m_TemperatureDecrease)
{
Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: EEItemLocationChanged: this: " + this + ": End decrease temperature: GetTemperature(): " + GetTemperature());
StopTemperatureDecrease();
}
}
}
private void StartTemperatureDecrease()
{
m_TemperatureDecrease = new Timer( CALL_CATEGORY_SYSTEM );
m_TemperatureDecrease.Run(m_DecreaseTempTime, this, "DecreaseTemperature", NULL, true);
}
private void StopTemperatureDecrease()
{
m_TemperatureDecrease.Stop();
m_TemperatureDecrease = NULL;
}
void DecreaseTemperature()
{
if (GetTemperature() > GetInitTemperature())
{
AddTemperature(GetTempDecreaseCoef());
if ( IsInherited(Pot) /* GetInventory().GetCargo() */)
{
DecreaseCargoTemperature();
}
Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseTemperature: this: " + this + ": Decrease: GetTemperature(): " + GetTemperature());
}
else
{
SetTemperature(GetInitTemperature());
StopTemperatureDecrease();
Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseTemperature: this: " + this + ": Stop decrease: GetTemperature(): " + GetTemperature());
}
}
void DecreaseCargoTemperature()
{
ItemBase item;
int item_count = GetInventory().GetCargo().GetItemCount();
for (int i = 0; i < item_count; i++)
{
item = ItemBase.Cast(GetInventory().GetCargo().GetItem(i));
if (item)
{
if (item.GetTemperature() > item.GetInitTemperature())
{
item.AddTemperature(item.GetTempDecreaseCoef());
Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseCargoTemperature: this: " + this + ": Decrease: item: " + item + ": item.GetTemperature(): " + item.GetTemperature());
}
else
{
item.SetTemperature(item.GetInitTemperature());
Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseCargoTemperature: this: " + this + ": Stop decrease: item: " + item + ": item.GetTemperature(): " + item.GetTemperature());
}
}
}
}
float GetInitTemperature()
{
return m_InitTemperature;
}
float GetTempDecreaseCoef()
{
return m_TempDecreaseCoef;
}
}
Немного переделал код
Теперь охлаждается все если оно имеет Т выше 12, а если это кастрюля с содержимым, то и ее содержимое
Получить Т воздуха в конструкторе не выходит потому указал руками