1645{
1647
1655
1665
1667
1669 {
1671 {
1673
1675 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1676
1680 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1681 }
1682 }
1683
1685 {
1687
1689 }
1690
1692 {
1693 super.EEDelete(parent);
1694
1696
1699 }
1700
1702 {
1703 super.EEItemLocationChanged(oldLoc, newLoc);
1704
1707 {
1708 switch (oldLoc.GetParent().GetType())
1709 {
1710 case "FryingPan":
1711 case "Pot":
1712 case "Cauldron":
1713 case "SharpWoodenStick":
1715 break;
1716 }
1717
1720 {
1722 }
1723 }
1724
1725 if (oldLoc.IsValid())
1727
1730 }
1731
1733 {
1736 }
1737
1739 {
1742
1743 return true;
1744 }
1745
1747 {
1749 {
1751 }
1752 }
1753
1756 {
1757 int foodStageType;
1758
1760 if (foodStage)
1761 foodStageType = foodStage.GetFoodStageType();
1762
1767
1768 return agentsIn;
1769 }
1770
1771
1773 {
1774 return false;
1775 }
1776
1778 {
1779 return false;
1780 }
1781
1783 {
1785 {
1787 {
1790
1793
1794 default:
1795 return super.GetTemperatureFreezeTime();
1796 }
1797 }
1798
1799 return super.GetTemperatureFreezeTime();
1800 }
1801
1803 {
1805 {
1807 {
1810
1813
1814 default:
1815 return super.GetTemperatureThawTime();
1816 }
1817 }
1818
1819 return super.GetTemperatureThawTime();
1820 }
1821
1823 {
1825 }
1826
1827
1828
1829
1831 {
1832 SetSynchDirty();
1833 }
1834
1836 {
1837 super.OnVariablesSynchronized();
1838
1839
1840
1841
1843 {
1845 }
1846 else
1847 {
1849 }
1850
1853 }
1854
1855
1856
1857
1859 {
1862
1864 }
1865
1867 {
1868 string soundName = "";
1869
1872
1874 {
1876 }
1877 else
1878 {
1880 {
1882 {
1887 else
1888 soundName = "";
1889 break;
1890 }
1891
1893 {
1898 else
1899 soundName = "";
1900 break;
1901 }
1902
1904 {
1909 else
1910 soundName = "";
1911 break;
1912 }
1913
1914 default:
1915 soundName = "";
1916 break;
1917 }
1918
1920 {
1921 if (soundName == "")
1922 {
1924 }
1925 else
1926 {
1928 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1929 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1931 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1932 {
1934 }
1935 }
1936 }
1937 }
1938
1940 }
1941
1943 {
1946 }
1947
1948
1949
1950
1952 {
1953 super.OnStoreSave(ctx);
1954
1956 {
1958 }
1959
1960
1963 }
1964
1966 {
1967 if (!super.OnStoreLoad(ctx, version))
1968 return false;
1969
1971 {
1973 return false;
1974 }
1975
1976 if (version >= 115)
1977 {
1979 {
1981 return false;
1982 }
1984 {
1986 return false;
1987 }
1988 }
1989
1992
1993 return true;
1994 }
1995
1997 {
1998 super.AfterStoreLoad();
1999
2001 }
2002
2003
2005 {
2007 }
2008
2009
2011 {
2012 return false;
2013 }
2014
2016 {
2017 return false;
2018 }
2019
2021 {
2022 return false;
2023 }
2024
2026 {
2027 return false;
2028 }
2029
2030
2031
2032
2033
2035 {
2038 {
2039 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2040 }
2041 else if (classname != "" && food_stage)
2042 {
2043 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2044 }
2045 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2047
2048 }
2049
2051 {
2054 {
2056 }
2057 else if (classname != "" && food_stage)
2058 {
2059 return FoodStage.GetEnergy(null, food_stage, classname);
2060 }
2061 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2063 }
2064
2066 {
2069 {
2071 }
2072 else if (classname != "" && food_stage)
2073 {
2074 return FoodStage.GetWater(null, food_stage, classname);
2075 }
2076 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2078 }
2079
2081 {
2084 {
2085 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2086 }
2087 else if (classname != "" && food_stage)
2088 {
2089 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2090 }
2091 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2093
2094 }
2095
2097 {
2100 {
2101 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2102 }
2103 else if (classname != "" && food_stage)
2104 {
2105 return FoodStage.GetToxicity(null, food_stage, classname);
2106 }
2107 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2109 }
2110
2112 {
2115 {
2117 }
2118 else if (classname != "" && food_stage)
2119 {
2120 return FoodStage.GetAgents(null, food_stage, classname);
2121 }
2122 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2124 }
2125
2127 {
2130 {
2131 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2132 }
2133 else if (classname != "" && food_stage)
2134 {
2135 return FoodStage.GetDigestibility(null, food_stage, classname);
2136 }
2137 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2139 }
2140
2142 {
2145 {
2146 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2147 }
2148 else if (className != "" && foodStage)
2149 {
2150 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2151 }
2152 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2154 }
2155
2157 {
2167
2168 return profile;
2169 }
2170
2171
2172
2173
2175 {
2177 }
2178
2179
2181 {
2183 {
2185 }
2186
2187 return false;
2188 }
2189
2191 {
2193 {
2195 }
2196
2197 return false;
2198 }
2199
2201 {
2203 {
2205 }
2206
2207 return false;
2208 }
2209
2211 {
2213 {
2215 }
2216
2217 return false;
2218 }
2219
2221 {
2223 {
2225 }
2226
2227 return false;
2228 }
2229
2231 {
2233 {
2235 }
2236
2237 return false;
2238 }
2239
2240
2242 {
2244 }
2245
2247 {
2248 return GetFoodStage().GetNextFoodStageType( cooking_method );
2249 }
2250
2252 {
2253 return GetFoodStage().GetFoodStageName( food_stage_type );
2254 }
2255
2257 {
2258 return GetFoodStage().CanChangeToNewStage( cooking_method );
2259 }
2260
2261
2263 {
2264 if ( !source.GetFoodStage())
2265 return;
2270 }
2271
2274 {
2277 }
2278
2281 {
2282 switch (stageNew)
2283 {
2288 break;
2289
2292 break;
2293 }
2294 }
2295
2296
2297
2298
2299
2301 {
2303 }
2304
2306 {
2308
2309
2311 }
2312
2314 {
2316 {
2319 }
2320 }
2321
2322
2324 {
2326 if (player)
2327 {
2329 player.ServerReplaceItemInHandsWithNew(lambda);
2330 }
2331 else
2332 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2333 }
2334
2336 {
2338 }
2339
2341 {
2342 super.SetActions();
2343
2346 }
2347
2349 {
2350 #ifndef SERVER
2352 {
2354
2357 }
2358 #endif
2359 }
2360
2362 {
2363 #ifndef SERVER
2365 {
2369 }
2370 #endif
2371 }
2372
2374 {
2375 return false;
2376 }
2377
2379 {
2381 }
2382
2383 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2384 {
2386
2387 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2389 if ( hasRootAsPlayer )
2391
2392
2393
2394
2395
2396
2397
2399 {
2400
2402 {
2404 {
2408 break;
2409
2413 break;
2414
2418 break;
2419
2423 default:
2426 return;
2427 }
2428
2429
2430 }
2431
2433
2435 {
2437 {
2438
2440 {
2442 }
2444 {
2447 {
2449 }
2450 else
2451 {
2453 {
2455 }
2456 else
2457 {
2459 }
2460 }
2461 }
2462 }
2463 }
2464
2465 }
2467 {
2468
2470 {
2472 {
2476 break;
2477
2481 break;
2482
2486 break;
2487
2491 break;
2492
2495 default:
2498 return;
2499 }
2500 }
2501
2503
2505 {
2507 {
2508
2510 {
2512 }
2513 }
2514 }
2515 }
2517 {
2518
2520 {
2522 {
2526 break;
2527
2530 default:
2533 return;
2534 }
2535 }
2536
2538
2540 {
2542 {
2543
2545 {
2547 }
2548 }
2549 }
2550 }
2551 else
2552 {
2553
2555
2557 {
2560
2561 }
2562 else
2563 {
2565 {
2568 }
2569 }
2570 }
2571 }
2572
2574 {
2575 if (
GetGame().IsDedicatedServer())
2576 return;
2577
2579 {
2581 GetInventory().GetCurrentInventoryLocation(invLoc);
2583 {
2585 if (ptcMgr)
2586 {
2591 }
2592 }
2593 }
2595 {
2597 {
2600 return;
2601 }
2602
2604 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2606 {
2609 }
2610 }
2611 }
2612
2613 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2614 {
2615 super.GetDebugActions(outputList);
2616
2618 {
2622 }
2623 }
2624
2626 {
2627 super.OnAction(action_id, player, ctx);
2628
2630 {
2631 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2632 {
2634 if (food_stage_prev <= 0)
2635 {
2637 }
2639 return true;
2640 }
2641 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2642 {
2645 {
2647 }
2649 return true;
2650 }
2651
2652 }
2653
2654 #ifdef DIAG_DEVELOPER
2655 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2656 {
2657 PrintNutritionsData();
2658 return true;
2659 }
2660 #endif
2661
2662 return false;
2663 }
2664
2666 {
2667 string debug_output;
2668
2669 debug_output = super.GetDebugText();
2670
2673
2674 return debug_output;
2675 }
2676
2677
2678
2679
2680
2682 {
2683 float ret = super.GetBaitEffectivity();
2684
2686 {
2687 ret *= 0.5;
2688 }
2689
2690 return ret;
2691 }
2692
2694 {
2696 }
2697
2699 {
2701 }
2702
2704 {
2706 }
2707
2708 #ifdef DIAG_DEVELOPER
2709 private void PrintNutritionsData()
2710 {
2711 string nutritionsData = "";
2712
2715
2717 if (profile)
2718 {
2719 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2721 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2725 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2727
2730
2731 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2733 }
2734
2735 nutritionsData += "-----\n";
2736
2738 }
2739 #endif
2740
2742
2745 {
2747 }
2748}
2749
2751{
2753};
Param4< int, int, string, int > TSelectableActionInfoWithColor
eBleedingSourceType GetType()
AttachActionData ActionData ActionAttach()
void AddAction(typename actionName)
DamageType
exposed from C++ (do not change)
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.