1531{
1533
1541
1551
1553
1555 {
1557 {
1559
1561 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1562
1566 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1567 }
1568 }
1569
1571 {
1573
1575 }
1576
1578 {
1579 super.EEDelete(parent);
1580
1582
1585 }
1586
1588 {
1589 super.EEItemLocationChanged(oldLoc, newLoc);
1590
1593 {
1594 switch (oldLoc.GetParent().GetType())
1595 {
1596 case "FryingPan":
1597 case "Pot":
1598 case "Cauldron":
1599 case "SharpWoodenStick":
1601 break;
1602 }
1603
1606 {
1608 }
1609 }
1610
1611 if (oldLoc.IsValid())
1613
1616 }
1617
1619 {
1622 }
1623
1625 {
1628
1629 return true;
1630 }
1631
1633 {
1635 {
1637 }
1638 }
1639
1642 {
1643 int foodStageType;
1644
1646 if (foodStage)
1647 foodStageType = foodStage.GetFoodStageType();
1648
1653
1654 return agentsIn;
1655 }
1656
1657
1659 {
1660 return false;
1661 }
1662
1664 {
1665 return false;
1666 }
1667
1669 {
1671 {
1673 {
1676
1679
1680 default:
1681 return super.GetTemperatureFreezeTime();
1682 }
1683 }
1684
1685 return super.GetTemperatureFreezeTime();
1686 }
1687
1689 {
1691 {
1693 {
1696
1699
1700 default:
1701 return super.GetTemperatureThawTime();
1702 }
1703 }
1704
1705 return super.GetTemperatureThawTime();
1706 }
1707
1709 {
1711 }
1712
1713
1714
1715
1717 {
1718 SetSynchDirty();
1719 }
1720
1722 {
1723 super.OnVariablesSynchronized();
1724
1725
1726
1727
1729 {
1731 }
1732 else
1733 {
1735 }
1736
1739 }
1740
1741
1742
1743
1745 {
1748
1750 }
1751
1753 {
1754 string soundName = "";
1755
1758
1760 {
1762 }
1763 else
1764 {
1766 {
1768 {
1773 else
1774 soundName = "";
1775 break;
1776 }
1777
1779 {
1784 else
1785 soundName = "";
1786 break;
1787 }
1788
1790 {
1795 else
1796 soundName = "";
1797 break;
1798 }
1799
1800 default:
1801 soundName = "";
1802 break;
1803 }
1804
1806 {
1807 if (soundName == "")
1808 {
1810 }
1811 else
1812 {
1814 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1815 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1817 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1818 {
1820 }
1821 }
1822 }
1823 }
1824
1826 }
1827
1829 {
1832 }
1833
1834
1835
1836
1838 {
1839 super.OnStoreSave(ctx);
1840
1842 {
1844 }
1845
1846
1849 }
1850
1852 {
1853 if (!super.OnStoreLoad(ctx, version))
1854 return false;
1855
1857 {
1859 return false;
1860 }
1861
1862 if (version >= 115)
1863 {
1865 {
1867 return false;
1868 }
1870 {
1872 return false;
1873 }
1874 }
1875
1878
1879 return true;
1880 }
1881
1883 {
1884 super.AfterStoreLoad();
1885
1887 }
1888
1889
1891 {
1893 }
1894
1895
1897 {
1898 return false;
1899 }
1900
1902 {
1903 return false;
1904 }
1905
1907 {
1908 return false;
1909 }
1910
1912 {
1913 return false;
1914 }
1915
1916
1917
1918
1919
1921 {
1924 {
1925 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1926 }
1927 else if (classname != "" && food_stage)
1928 {
1929 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1930 }
1931 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1933
1934 }
1935
1937 {
1940 {
1942 }
1943 else if (classname != "" && food_stage)
1944 {
1945 return FoodStage.GetEnergy(null, food_stage, classname);
1946 }
1947 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1949 }
1950
1952 {
1955 {
1957 }
1958 else if (classname != "" && food_stage)
1959 {
1960 return FoodStage.GetWater(null, food_stage, classname);
1961 }
1962 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1964 }
1965
1967 {
1970 {
1971 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1972 }
1973 else if (classname != "" && food_stage)
1974 {
1975 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1976 }
1977 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1979
1980 }
1981
1983 {
1986 {
1987 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1988 }
1989 else if (classname != "" && food_stage)
1990 {
1991 return FoodStage.GetToxicity(null, food_stage, classname);
1992 }
1993 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1995 }
1996
1998 {
2001 {
2003 }
2004 else if (classname != "" && food_stage)
2005 {
2006 return FoodStage.GetAgents(null, food_stage, classname);
2007 }
2008 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2010 }
2011
2013 {
2016 {
2017 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2018 }
2019 else if (classname != "" && food_stage)
2020 {
2021 return FoodStage.GetDigestibility(null, food_stage, classname);
2022 }
2023 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2025 }
2026
2028 {
2031 {
2032 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2033 }
2034 else if (className != "" && foodStage)
2035 {
2036 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2037 }
2038 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2040 }
2041
2043 {
2053
2054 return profile;
2055 }
2056
2057
2058
2059
2061 {
2063 }
2064
2065
2067 {
2069 {
2071 }
2072
2073 return false;
2074 }
2075
2077 {
2079 {
2081 }
2082
2083 return false;
2084 }
2085
2087 {
2089 {
2091 }
2092
2093 return false;
2094 }
2095
2097 {
2099 {
2101 }
2102
2103 return false;
2104 }
2105
2107 {
2109 {
2111 }
2112
2113 return false;
2114 }
2115
2117 {
2119 {
2121 }
2122
2123 return false;
2124 }
2125
2126
2128 {
2130 }
2131
2133 {
2134 return GetFoodStage().GetNextFoodStageType( cooking_method );
2135 }
2136
2138 {
2139 return GetFoodStage().GetFoodStageName( food_stage_type );
2140 }
2141
2143 {
2144 return GetFoodStage().CanChangeToNewStage( cooking_method );
2145 }
2146
2147
2149 {
2150 if ( !source.GetFoodStage())
2151 return;
2156 }
2157
2160 {
2163 }
2164
2167 {
2168 switch (stageNew)
2169 {
2174 break;
2175
2178 break;
2179 }
2180 }
2181
2182
2183
2184
2185
2187 {
2189 }
2190
2192 {
2194
2195
2197 }
2198
2200 {
2202 {
2205 }
2206 }
2207
2208
2210 {
2212 if (player)
2213 {
2215 player.ServerReplaceItemInHandsWithNew(lambda);
2216 }
2217 else
2218 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2219 }
2220
2222 {
2224 }
2225
2227 {
2228 super.SetActions();
2229
2232 }
2233
2235 {
2236 #ifndef SERVER
2238 {
2240
2243 }
2244 #endif
2245 }
2246
2248 {
2249 #ifndef SERVER
2251 {
2255 }
2256 #endif
2257 }
2258
2260 {
2261 return false;
2262 }
2263
2265 {
2267 }
2268
2269 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2270 {
2272
2273 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2275 if ( hasRootAsPlayer )
2277
2278
2279
2280
2281
2282
2283
2285 {
2286
2288 {
2290 {
2294 break;
2295
2299 break;
2300
2304 break;
2305
2309 default:
2312 return;
2313 }
2314
2315
2316 }
2317
2319
2321 {
2323 {
2324
2326 {
2328 }
2330 {
2333 {
2335 }
2336 else
2337 {
2339 {
2341 }
2342 else
2343 {
2345 }
2346 }
2347 }
2348 }
2349 }
2350
2351 }
2353 {
2354
2356 {
2358 {
2362 break;
2363
2367 break;
2368
2372 break;
2373
2377 break;
2378
2381 default:
2384 return;
2385 }
2386 }
2387
2389
2391 {
2393 {
2394
2396 {
2398 }
2399 }
2400 }
2401 }
2403 {
2404
2406 {
2408 {
2412 break;
2413
2416 default:
2419 return;
2420 }
2421 }
2422
2424
2426 {
2428 {
2429
2431 {
2433 }
2434 }
2435 }
2436 }
2437 else
2438 {
2439
2441
2443 {
2446
2447 }
2448 else
2449 {
2451 {
2454 }
2455 }
2456 }
2457 }
2458
2460 {
2461 if (
GetGame().IsDedicatedServer())
2462 return;
2463
2465 {
2467 GetInventory().GetCurrentInventoryLocation(invLoc);
2469 {
2471 if (ptcMgr)
2472 {
2477 }
2478 }
2479 }
2481 {
2483 {
2486 return;
2487 }
2488
2490 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2492 {
2495 }
2496 }
2497 }
2498
2499 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2500 {
2502 {
2507 }
2508
2509 super.GetDebugActions(outputList);
2510 }
2511
2513 {
2514 super.OnAction(action_id, player, ctx);
2515
2517 {
2518 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2519 {
2521 if (food_stage_prev <= 0)
2522 {
2524 }
2526 return true;
2527 }
2528 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2529 {
2532 {
2534 }
2536 return true;
2537 }
2538
2539 }
2540
2541 #ifdef DIAG_DEVELOPER
2542 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2543 {
2544 PrintNutritionsData();
2545 return true;
2546 }
2547 #endif
2548
2549 return false;
2550 }
2551
2553 {
2554 string debug_output;
2555
2556 debug_output = super.GetDebugText();
2557
2560
2561 return debug_output;
2562 }
2563
2564
2565
2566
2567
2569 {
2570 float ret = super.GetBaitEffectivity();
2571
2573 {
2574 ret *= 0.5;
2575 }
2576
2577 return ret;
2578 }
2579
2581 {
2583 }
2584
2586 {
2588 }
2589
2591 {
2593 }
2594
2595 #ifdef DIAG_DEVELOPER
2596 private void PrintNutritionsData()
2597 {
2598 string nutritionsData = "";
2599
2602
2604 if (profile)
2605 {
2606 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2608 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2612 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2614
2617
2618 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2620 }
2621
2622 nutritionsData += "-----\n";
2623
2625 }
2626 #endif
2627
2629
2632 {
2634 }
2635}
2636
2638{
2640};
Param4< int, int, string, int > TSelectableActionInfoWithColor
eBleedingSourceType GetType()
AttachActionData ActionData ActionAttach()
void AddAction(typename actionName)
DamageType
exposed from C++ (do not change)
AbstractWave m_SoundPlaying
EConsumptionPenaltyContext
void ReplaceEdibleWithNew(string typeName)
ref FoodStage m_FoodStage
static float GetFoodWater(ItemBase item, string classname="", int food_stage=0)
override bool CanBeCooked()
override string GetDebugText()
override void AfterStoreLoad()
void OnFoodStageChange(FoodStageType stageOld, FoodStageType stageNew)
called on server
override void OnVariablesSynchronized()
const string SOUND_BURNING_DONE
bool CanChangeToNewStage(CookingMethodType cooking_method)
override bool OnAction(int action_id, Man player, ParamsReadContext ctx)
override bool CanItemOverheat()
override float GetBaitEffectivity()
override FoodStage GetFoodStage()
override void SetActions()
override float GetTemperatureFreezeTime()
const string DIRECT_COOKING_SLOT_NAME
FoodStageType GetNextFoodStageType(CookingMethodType cooking_method)
void ChangeFoodStage(FoodStageType new_food_stage_type)
void OnConsume(float amount, PlayerBase consumer)
static float GetFoodNutritionalIndex(ItemBase item, string classname="", int food_stage=0)
SoundOnVehicle m_SoundCooking
static float GetFoodToxicity(ItemBase item, string classname="", int food_stage=0)
void UpdateVisualsEx(bool forced=false)
const string SOUND_BAKING_DONE
static NutritionalProfile GetNutritionalProfile(ItemBase item, string classname="", int food_stage=0)
int FilterAgents(int agentsIn)
Filter agents from the item (override on higher implementations)
override void EEDelete(EntityAI parent)
FoodStageType m_LastDecayStage
override bool CanBeCookedOnStick()
FoodStageType GetLastDecayStage()
string GetFoodStageName(FoodStageType food_stage_type)
override float GetTemperatureThawTime()
void UpdateVaporParticle()
static float GetFoodDigestibility(ItemBase item, string classname="", int food_stage=0)
void TransferFoodStage(notnull Edible_Base source)
override void ProcessDecay(float delta, bool hasRootAsPlayer)
const string SOUND_DRYING_START
void SetCookingTime(float time)
void SoundCookingStart(string sound_name)
const string SOUND_BAKING_START
static float GetFoodTotalVolume(ItemBase item, string classname="", int food_stage=0)
const string SOUND_DRYING_DONE
void HandleFoodStageChangeAgents(FoodStageType stageOld, FoodStageType stageNew)
removes select agents on foodstage transitions
Edible_Base ItemBase ReplaceEdibleWithNewLambda(EntityAI old_item, string new_item_type, PlayerBase player)
bool Consume(float amount, PlayerBase consumer)
EffectSound m_SoundEffectCooking
DEPRECATED.
override bool OnStoreLoad(ParamsReadContext ctx, int version)
FoodStageType GetFoodStageType()
override bool CanProcessDecay()
ParticleSource m_HotVaporParticle
void MakeSoundsOnClient(bool soundstate, CookingMethodType cookingMethod=CookingMethodType.NONE)
static int GetFoodAgents(ItemBase item, string classname="", int food_stage=0)
override bool IsMushroom()
static float GetFoodEnergy(ItemBase item, string classname="", int food_stage=0)
static float GetAgentsPerDigest(ItemBase item, string className="", int foodStage=0)
const string SOUND_BOILING_DONE
int GetConsumptionPenaltyContext()
const string SOUND_BOILING_START
override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
CookingMethodType m_CookedByMethod
override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
override void OnStoreSave(ParamsWriteContext ctx)
override bool CanHaveTemperature()
InventoryLocationType
types of Inventory Location
override void InsertAgent(int agent, float count=1)
override void RemoveAllAgentsExcept(int agent_to_keep)
bool AddQuantity(float value, bool destroy_config=true, bool destroy_forced=false)
add item quantity[related to varQuantity... config entry], destroy_config = true > if the quantity re...
void ParticleManager(ParticleManagerSettings settings)
Constructor (ctor)
ParticleAutoDestroyFlags
Flags to pass to ParticleSource.SetParticleAutoDestroyFlags.
proto native float ConfigGetFloat(string path)
Get float value from config on path.
proto native int ConfigGetInt(string path)
Get int value from config on path.
static void Log(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Prints debug message with normal prio.
override FoodStage GetFoodStage()
Wrapper class for managing sound through SEffectManager.
proto native int GetType()
returns type of InventoryLocation
static proto native owned string GetSlotName(int id)
converts slot_id to string
provides access to slot configuration
static const int ITEM_HOT_VAPOR
Entity which has the particle instance as an ObjectComponent.
static const float CONSUMPTION_DAMAGE_PER_BITE
static const float CONSUMPTION_DAMAGE_TEMP_THRESHOLD
static EffectSound PlaySound(string sound_set, vector position, float play_fade_in=0, float stop_fade_out=0, bool loop=false)
Create and play an EffectSound.
Manager class for managing Effect (EffectParticle, EffectSound)
proto bool Write(void value_out)
proto bool Read(void value_in)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Serializer ParamsReadContext
proto native CGame GetGame()
Serializer ParamsWriteContext
void Error(string err)
Messagebox with error message.
const float DECAY_FOOD_BAKED_FRVG
const float DECAY_FOOD_CAN_OPEN
const float DECAY_FOOD_RAW_FRVG
const int DECAY_TIMER_RANDOM_PERCENTAGE
const int DECAY_FOOD_FRVG_DRIED_CHANCE
const float DECAY_FOOD_RAW_MEAT
const float DECAY_FOOD_BAKED_MEAT
const float DECAY_FOOD_BOILED_MEAT
const float DECAY_FOOD_BOILED_FRVG
const float DECAY_FOOD_DRIED_MEAT
const float DECAY_FOOD_RAW_CORPSE
const float DECAY_RATE_ON_PLAYER
static const float TEMPERATURE_THAW_TIME_COEF_BURNED
static const float TEMPERATURE_FREEZE_TIME_COEF_BURNED
static const float TEMPERATURE_THAW_TIME_COEF_DRIED
static const float TEMPERATURE_FREEZE_TIME_COEF_DRIED
const int STATE_HOT_LVL_TWO
static float RandomFloat01()
Returns a random float number between and min [inclusive] and max [inclusive].
static int RandomIntInclusive(int min, int max)
Returns a random int number between and min [inclusive] and max [inclusive].
const int SAT_DEBUG_ACTION
class JsonUndergroundAreaTriggerData GetPosition
bool Contains(string sample)
Returns true if sample is substring of string.
static proto string Format(string fmt, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL)
Gets n-th character from string.