1581{
1583
1591
1601
1603
1605 {
1607 {
1609
1611 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1612
1616 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1617 }
1618 }
1619
1621 {
1623
1625 }
1626
1628 {
1629 super.EEDelete(parent);
1630
1632
1635 }
1636
1638 {
1639 super.EEItemLocationChanged(oldLoc, newLoc);
1640
1643 {
1644 switch (oldLoc.GetParent().GetType())
1645 {
1646 case "FryingPan":
1647 case "Pot":
1648 case "Cauldron":
1649 case "SharpWoodenStick":
1651 break;
1652 }
1653
1656 {
1658 }
1659 }
1660
1661 if (oldLoc.IsValid())
1663
1666 }
1667
1669 {
1672 }
1673
1675 {
1678
1679 return true;
1680 }
1681
1683 {
1685 {
1687 }
1688 }
1689
1692 {
1693 int foodStageType;
1694
1696 if (foodStage)
1697 foodStageType = foodStage.GetFoodStageType();
1698
1703
1704 return agentsIn;
1705 }
1706
1707
1709 {
1710 return false;
1711 }
1712
1714 {
1715 return false;
1716 }
1717
1719 {
1721 {
1723 {
1726
1729
1730 default:
1731 return super.GetTemperatureFreezeTime();
1732 }
1733 }
1734
1735 return super.GetTemperatureFreezeTime();
1736 }
1737
1739 {
1741 {
1743 {
1746
1749
1750 default:
1751 return super.GetTemperatureThawTime();
1752 }
1753 }
1754
1755 return super.GetTemperatureThawTime();
1756 }
1757
1759 {
1761 }
1762
1763
1764
1765
1767 {
1768 SetSynchDirty();
1769 }
1770
1772 {
1773 super.OnVariablesSynchronized();
1774
1775
1776
1777
1779 {
1781 }
1782 else
1783 {
1785 }
1786
1789 }
1790
1791
1792
1793
1795 {
1798
1800 }
1801
1803 {
1804 string soundName = "";
1805
1808
1810 {
1812 }
1813 else
1814 {
1816 {
1818 {
1823 else
1824 soundName = "";
1825 break;
1826 }
1827
1829 {
1834 else
1835 soundName = "";
1836 break;
1837 }
1838
1840 {
1845 else
1846 soundName = "";
1847 break;
1848 }
1849
1850 default:
1851 soundName = "";
1852 break;
1853 }
1854
1856 {
1857 if (soundName == "")
1858 {
1860 }
1861 else
1862 {
1864 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1865 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1867 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1868 {
1870 }
1871 }
1872 }
1873 }
1874
1876 }
1877
1879 {
1882 }
1883
1884
1885
1886
1888 {
1889 super.OnStoreSave(ctx);
1890
1892 {
1894 }
1895
1896
1899 }
1900
1902 {
1903 if (!super.OnStoreLoad(ctx, version))
1904 return false;
1905
1907 {
1909 return false;
1910 }
1911
1912 if (version >= 115)
1913 {
1915 {
1917 return false;
1918 }
1920 {
1922 return false;
1923 }
1924 }
1925
1928
1929 return true;
1930 }
1931
1933 {
1934 super.AfterStoreLoad();
1935
1937 }
1938
1939
1941 {
1943 }
1944
1945
1947 {
1948 return false;
1949 }
1950
1952 {
1953 return false;
1954 }
1955
1957 {
1958 return false;
1959 }
1960
1962 {
1963 return false;
1964 }
1965
1966
1967
1968
1969
1971 {
1974 {
1975 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1976 }
1977 else if (classname != "" && food_stage)
1978 {
1979 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1980 }
1981 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1982 return g_Game.ConfigGetFloat( class_path +
" fullnessIndex" );
1983
1984 }
1985
1987 {
1990 {
1992 }
1993 else if (classname != "" && food_stage)
1994 {
1995 return FoodStage.GetEnergy(null, food_stage, classname);
1996 }
1997 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1998 return g_Game.ConfigGetFloat( class_path +
" energy" );
1999 }
2000
2002 {
2005 {
2007 }
2008 else if (classname != "" && food_stage)
2009 {
2010 return FoodStage.GetWater(null, food_stage, classname);
2011 }
2012 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2013 return g_Game.ConfigGetFloat( class_path +
" water" );
2014 }
2015
2017 {
2020 {
2021 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2022 }
2023 else if (classname != "" && food_stage)
2024 {
2025 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2026 }
2027 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2028 return g_Game.ConfigGetFloat( class_path +
" nutritionalIndex" );
2029
2030 }
2031
2033 {
2036 {
2037 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2038 }
2039 else if (classname != "" && food_stage)
2040 {
2041 return FoodStage.GetToxicity(null, food_stage, classname);
2042 }
2043 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2044 return g_Game.ConfigGetFloat( class_path +
" toxicity" );
2045 }
2046
2048 {
2051 {
2053 }
2054 else if (classname != "" && food_stage)
2055 {
2056 return FoodStage.GetAgents(null, food_stage, classname);
2057 }
2058 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2059 return g_Game.ConfigGetInt( class_path +
" agents" );
2060 }
2061
2063 {
2066 {
2067 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2068 }
2069 else if (classname != "" && food_stage)
2070 {
2071 return FoodStage.GetDigestibility(null, food_stage, classname);
2072 }
2073 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2074 return g_Game.ConfigGetInt( class_path +
" digestibility" );
2075 }
2076
2078 {
2081 {
2082 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2083 }
2084 else if (className != "" && foodStage)
2085 {
2086 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2087 }
2088 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2089 return g_Game.ConfigGetInt(classPath +
" agentsPerDigest");
2090 }
2091
2093 {
2103
2104 return profile;
2105 }
2106
2107
2108
2109
2111 {
2113 }
2114
2115
2117 {
2119 {
2121 }
2122
2123 return false;
2124 }
2125
2127 {
2129 {
2131 }
2132
2133 return false;
2134 }
2135
2137 {
2139 {
2141 }
2142
2143 return false;
2144 }
2145
2147 {
2149 {
2151 }
2152
2153 return false;
2154 }
2155
2157 {
2159 {
2161 }
2162
2163 return false;
2164 }
2165
2167 {
2169 {
2171 }
2172
2173 return false;
2174 }
2175
2176
2178 {
2180 }
2181
2183 {
2184 return GetFoodStage().GetNextFoodStageType( cooking_method );
2185 }
2186
2188 {
2189 return GetFoodStage().GetFoodStageName( food_stage_type );
2190 }
2191
2193 {
2194 return GetFoodStage().CanChangeToNewStage( cooking_method );
2195 }
2196
2197
2199 {
2200 if ( !source.GetFoodStage())
2201 return;
2206 }
2207
2210 {
2213 }
2214
2217 {
2218 switch (stageNew)
2219 {
2224 break;
2225
2228 break;
2229 }
2230 }
2231
2232
2233
2234
2235
2237 {
2239 }
2240
2242 {
2244
2245
2247 }
2248
2250 {
2252 {
2255 }
2256 }
2257
2258
2260 {
2262 if (player)
2263 {
2265 player.ServerReplaceItemInHandsWithNew(lambda);
2266 }
2267 else
2268 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2269 }
2270
2272 {
2274 }
2275
2277 {
2278 super.SetActions();
2279
2282 }
2283
2285 {
2286 #ifndef SERVER
2287 #ifndef NO_GUI
2289 {
2291
2294 }
2295 #endif
2296 #endif
2297 }
2298
2300 {
2301 #ifndef SERVER
2302 #ifndef NO_GUI
2304 {
2308 }
2309 #endif
2310 #endif
2311 }
2312
2314 {
2315 return false;
2316 }
2317
2319 {
2321 }
2322
2323 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2324 {
2326
2327 delta *= DayZGame.Cast(
g_Game).GetFoodDecayModifier();
2329 if ( hasRootAsPlayer )
2331
2332
2333
2334
2335
2336
2337
2339 {
2340
2342 {
2344 {
2348 break;
2349
2353 break;
2354
2358 break;
2359
2363 default:
2366 return;
2367 }
2368
2369
2370 }
2371
2373
2375 {
2377 {
2378
2380 {
2382 }
2384 {
2387 {
2389 }
2390 else
2391 {
2393 {
2395 }
2396 else
2397 {
2399 }
2400 }
2401 }
2402 }
2403 }
2404
2405 }
2407 {
2408
2410 {
2412 {
2416 break;
2417
2421 break;
2422
2426 break;
2427
2431 break;
2432
2435 default:
2438 return;
2439 }
2440 }
2441
2443
2445 {
2447 {
2448
2450 {
2452 }
2453 }
2454 }
2455 }
2457 {
2458
2460 {
2462 {
2466 break;
2467
2470 default:
2473 return;
2474 }
2475 }
2476
2478
2480 {
2482 {
2483
2485 {
2487 }
2488 }
2489 }
2490 }
2491 else
2492 {
2493
2495
2497 {
2500
2501 }
2502 else
2503 {
2505 {
2508 }
2509 }
2510 }
2511 }
2512
2514 {
2515 if (
g_Game.IsHeadlessOrDedicatedServer())
2516 return;
2517
2519 {
2521 GetInventory().GetCurrentInventoryLocation(invLoc);
2523 {
2525 if (ptcMgr)
2526 {
2531 }
2532 }
2533 }
2535 {
2537 {
2540 return;
2541 }
2542
2544 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2546 {
2549 }
2550 }
2551 }
2552
2553 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2554 {
2556 {
2561 }
2562
2563 super.GetDebugActions(outputList);
2564 }
2565
2567 {
2568 super.OnAction(action_id, player, ctx);
2569
2571 {
2572 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2573 {
2575 if (food_stage_prev <= 0)
2576 {
2578 }
2580 return true;
2581 }
2582 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2583 {
2586 {
2588 }
2590 return true;
2591 }
2592
2593 }
2594
2595 #ifdef DIAG_DEVELOPER
2596 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2597 {
2598 PrintNutritionsData();
2599 return true;
2600 }
2601 #endif
2602
2603 return false;
2604 }
2605
2607 {
2608 string debug_output;
2609
2610 debug_output = super.GetDebugText();
2611
2614
2615 return debug_output;
2616 }
2617
2618
2619
2620
2621
2623 {
2624 float ret = super.GetBaitEffectivity();
2625
2627 {
2628 ret *= 0.5;
2629 }
2630
2631 return ret;
2632 }
2633
2635 {
2637 }
2638
2640 {
2642 }
2643
2645 {
2647 }
2648
2649 #ifdef DIAG_DEVELOPER
2650 private void PrintNutritionsData()
2651 {
2652 string nutritionsData = "";
2653
2656
2658 if (profile)
2659 {
2660 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2662 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2666 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2668
2671
2672 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2674 }
2675
2676 nutritionsData += "-----\n";
2677
2679 }
2680 #endif
2681
2683
2686 {
2688 }
2689}
2690
2692{
2694};
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 RemoveAllAgentsExcept(int agent_to_keep)
override void InsertAgent(int agent, float count=1)
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.
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
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
vector GetPosition()
Get the world position of the Effect.
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.