1680{
1682
1690
1700
1702
1704 {
1706 {
1708
1710 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1711
1715 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1716 }
1717 }
1718
1720 {
1722
1724 }
1725
1727 {
1728 super.EEDelete(parent);
1729
1731
1734 }
1735
1737 {
1738 super.EEItemLocationChanged(oldLoc, newLoc);
1739
1742 {
1743 switch (oldLoc.GetParent().GetType())
1744 {
1745 case "FryingPan":
1746 case "Pot":
1747 case "Cauldron":
1748 case "SharpWoodenStick":
1750 break;
1751 }
1752
1755 {
1757 }
1758 }
1759
1760 if (oldLoc.IsValid())
1762
1765 }
1766
1768 {
1771 }
1772
1774 {
1777
1778 return true;
1779 }
1780
1782 {
1784 {
1786 }
1787 }
1788
1791 {
1792 int foodStageType;
1793
1795 if (foodStage)
1796 foodStageType = foodStage.GetFoodStageType();
1797
1802
1803 return agentsIn;
1804 }
1805
1806
1808 {
1809 return false;
1810 }
1811
1813 {
1814 return false;
1815 }
1816
1818 {
1820 {
1822 {
1825
1828
1829 default:
1830 return super.GetTemperatureFreezeTime();
1831 }
1832 }
1833
1834 return super.GetTemperatureFreezeTime();
1835 }
1836
1838 {
1840 {
1842 {
1845
1848
1849 default:
1850 return super.GetTemperatureThawTime();
1851 }
1852 }
1853
1854 return super.GetTemperatureThawTime();
1855 }
1856
1858 {
1860 }
1861
1862
1863
1864
1866 {
1867 SetSynchDirty();
1868 }
1869
1871 {
1872 super.OnVariablesSynchronized();
1873
1874
1875
1876
1878 {
1880 }
1881 else
1882 {
1884 }
1885
1888 }
1889
1890
1891
1892
1894 {
1897
1899 }
1900
1902 {
1903 string soundName = "";
1904
1907
1909 {
1911 }
1912 else
1913 {
1915 {
1917 {
1922 else
1923 soundName = "";
1924 break;
1925 }
1926
1928 {
1933 else
1934 soundName = "";
1935 break;
1936 }
1937
1939 {
1944 else
1945 soundName = "";
1946 break;
1947 }
1948
1949 default:
1950 soundName = "";
1951 break;
1952 }
1953
1955 {
1956 if (soundName == "")
1957 {
1959 }
1960 else
1961 {
1963 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1964 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1966 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1967 {
1969 }
1970 }
1971 }
1972 }
1973
1975 }
1976
1978 {
1981 }
1982
1983
1984
1985
1987 {
1988 super.OnStoreSave(ctx);
1989
1991 {
1993 }
1994
1995
1998 }
1999
2001 {
2002 if (!super.OnStoreLoad(ctx, version))
2003 return false;
2004
2006 {
2008 return false;
2009 }
2010
2011 if (version >= 115)
2012 {
2014 {
2016 return false;
2017 }
2019 {
2021 return false;
2022 }
2023 }
2024
2027
2028 return true;
2029 }
2030
2032 {
2033 super.AfterStoreLoad();
2034
2036 }
2037
2038
2040 {
2042 }
2043
2044
2046 {
2047 return false;
2048 }
2049
2051 {
2052 return false;
2053 }
2054
2056 {
2057 return false;
2058 }
2059
2061 {
2062 return false;
2063 }
2064
2065
2066
2067
2068
2070 {
2073 {
2074 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2075 }
2076 else if (classname != "" && food_stage)
2077 {
2078 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2079 }
2080 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2081 return g_Game.ConfigGetFloat( class_path +
" fullnessIndex" );
2082
2083 }
2084
2086 {
2089 {
2091 }
2092 else if (classname != "" && food_stage)
2093 {
2094 return FoodStage.GetEnergy(null, food_stage, classname);
2095 }
2096 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2097 return g_Game.ConfigGetFloat( class_path +
" energy" );
2098 }
2099
2101 {
2104 {
2106 }
2107 else if (classname != "" && food_stage)
2108 {
2109 return FoodStage.GetWater(null, food_stage, classname);
2110 }
2111 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2112 return g_Game.ConfigGetFloat( class_path +
" water" );
2113 }
2114
2116 {
2119 {
2120 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2121 }
2122 else if (classname != "" && food_stage)
2123 {
2124 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2125 }
2126 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2127 return g_Game.ConfigGetFloat( class_path +
" nutritionalIndex" );
2128
2129 }
2130
2132 {
2135 {
2136 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2137 }
2138 else if (classname != "" && food_stage)
2139 {
2140 return FoodStage.GetToxicity(null, food_stage, classname);
2141 }
2142 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2143 return g_Game.ConfigGetFloat( class_path +
" toxicity" );
2144 }
2145
2147 {
2150 {
2152 }
2153 else if (classname != "" && food_stage)
2154 {
2155 return FoodStage.GetAgents(null, food_stage, classname);
2156 }
2157 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2158 return g_Game.ConfigGetInt( class_path +
" agents" );
2159 }
2160
2162 {
2165 {
2166 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2167 }
2168 else if (classname != "" && food_stage)
2169 {
2170 return FoodStage.GetDigestibility(null, food_stage, classname);
2171 }
2172 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2173 return g_Game.ConfigGetInt( class_path +
" digestibility" );
2174 }
2175
2177 {
2180 {
2181 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2182 }
2183 else if (className != "" && foodStage)
2184 {
2185 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2186 }
2187 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2188 return g_Game.ConfigGetInt(classPath +
" agentsPerDigest");
2189 }
2190
2192 {
2202
2203 return profile;
2204 }
2205
2206
2207
2208
2210 {
2212 }
2213
2214
2216 {
2218 {
2220 }
2221
2222 return false;
2223 }
2224
2226 {
2228 {
2230 }
2231
2232 return false;
2233 }
2234
2236 {
2238 {
2240 }
2241
2242 return false;
2243 }
2244
2246 {
2248 {
2250 }
2251
2252 return false;
2253 }
2254
2256 {
2258 {
2260 }
2261
2262 return false;
2263 }
2264
2266 {
2268 {
2270 }
2271
2272 return false;
2273 }
2274
2275
2277 {
2279 }
2280
2282 {
2283 return GetFoodStage().GetNextFoodStageType( cooking_method );
2284 }
2285
2287 {
2288 return GetFoodStage().GetFoodStageName( food_stage_type );
2289 }
2290
2292 {
2293 return GetFoodStage().CanChangeToNewStage( cooking_method );
2294 }
2295
2296
2298 {
2299 if ( !source.GetFoodStage())
2300 return;
2305 }
2306
2309 {
2312 }
2313
2316 {
2317 switch (stageNew)
2318 {
2323 break;
2324
2327 break;
2328 }
2329 }
2330
2331
2332
2333
2334
2336 {
2338 }
2339
2341 {
2343
2344
2346 }
2347
2349 {
2351 {
2354 }
2355 }
2356
2357
2359 {
2361 if (player)
2362 {
2364 player.ServerReplaceItemInHandsWithNew(lambda);
2365 }
2366 else
2367 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2368 }
2369
2371 {
2373 }
2374
2376 {
2377 super.SetActions();
2378
2381 }
2382
2384 {
2385 #ifndef SERVER
2386 #ifndef NO_GUI
2388 {
2390
2393 }
2394 #endif
2395 #endif
2396 }
2397
2399 {
2400 #ifndef SERVER
2401 #ifndef NO_GUI
2403 {
2407 }
2408 #endif
2409 #endif
2410 }
2411
2413 {
2414 return false;
2415 }
2416
2418 {
2420 }
2421
2422 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2423 {
2425
2426 delta *= DayZGame.Cast(
g_Game).GetFoodDecayModifier();
2428 if ( hasRootAsPlayer )
2430
2431
2432
2433
2434
2435
2436
2438 {
2439
2441 {
2443 {
2447 break;
2448
2452 break;
2453
2457 break;
2458
2462 default:
2465 return;
2466 }
2467
2468
2469 }
2470
2472
2474 {
2476 {
2477
2479 {
2481 }
2483 {
2486 {
2488 }
2489 else
2490 {
2492 {
2494 }
2495 else
2496 {
2498 }
2499 }
2500 }
2501 }
2502 }
2503
2504 }
2506 {
2507
2509 {
2511 {
2515 break;
2516
2520 break;
2521
2525 break;
2526
2530 break;
2531
2534 default:
2537 return;
2538 }
2539 }
2540
2542
2544 {
2546 {
2547
2549 {
2551 }
2552 }
2553 }
2554 }
2556 {
2557
2559 {
2561 {
2565 break;
2566
2569 default:
2572 return;
2573 }
2574 }
2575
2577
2579 {
2581 {
2582
2584 {
2586 }
2587 }
2588 }
2589 }
2590 else
2591 {
2592
2594
2596 {
2599
2600 }
2601 else
2602 {
2604 {
2607 }
2608 }
2609 }
2610 }
2611
2613 {
2614 if (
g_Game.IsHeadlessOrDedicatedServer())
2615 return;
2616
2618 {
2620 GetInventory().GetCurrentInventoryLocation(invLoc);
2622 {
2624 if (ptcMgr)
2625 {
2630 }
2631 }
2632 }
2634 {
2636 {
2639 return;
2640 }
2641
2643 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2645 {
2648 }
2649 }
2650 }
2651
2652 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2653 {
2655 {
2660 }
2661
2662 super.GetDebugActions(outputList);
2663 }
2664
2666 {
2667 super.OnAction(action_id, player, ctx);
2668
2670 {
2671 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2672 {
2674 if (food_stage_prev <= 0)
2675 {
2677 }
2679 return true;
2680 }
2681 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2682 {
2685 {
2687 }
2689 return true;
2690 }
2691
2692 }
2693
2694 #ifdef DIAG_DEVELOPER
2695 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2696 {
2697 PrintNutritionsData();
2698 return true;
2699 }
2700 #endif
2701
2702 return false;
2703 }
2704
2706 {
2707 string debug_output;
2708
2709 debug_output = super.GetDebugText();
2710
2713
2714 return debug_output;
2715 }
2716
2717
2718
2719
2720
2722 {
2723 float ret = super.GetBaitEffectivity();
2724
2726 {
2727 ret *= 0.5;
2728 }
2729
2730 return ret;
2731 }
2732
2734 {
2736 }
2737
2739 {
2741 }
2742
2744 {
2746 }
2747
2748 #ifdef DIAG_DEVELOPER
2749 private void PrintNutritionsData()
2750 {
2751 string nutritionsData = "";
2752
2755
2757 if (profile)
2758 {
2759 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2761 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2765 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2767
2770
2771 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2773 }
2774
2775 nutritionsData += "-----\n";
2776
2778 }
2779 #endif
2780
2782
2785 {
2787 }
2788}
2789
2791{
2793};
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.