1686{
1688
1696
1706
1708
1710 {
1712 {
1714
1716 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1717
1721 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1722 }
1723 }
1724
1726 {
1728
1730 }
1731
1733 {
1734 super.EEDelete(parent);
1735
1737
1740 }
1741
1743 {
1744 super.EEItemLocationChanged(oldLoc, newLoc);
1745
1748 {
1749 switch (oldLoc.GetParent().GetType())
1750 {
1751 case "FryingPan":
1752 case "Pot":
1753 case "Cauldron":
1754 case "SharpWoodenStick":
1756 break;
1757 }
1758
1761 {
1763 }
1764 }
1765
1766 if (oldLoc.IsValid())
1768
1771 }
1772
1774 {
1777 }
1778
1780 {
1783
1784 return true;
1785 }
1786
1788 {
1790 {
1792 }
1793 }
1794
1797 {
1798 int foodStageType;
1799
1801 if (foodStage)
1802 foodStageType = foodStage.GetFoodStageType();
1803
1808
1809 return agentsIn;
1810 }
1811
1812
1814 {
1815 return false;
1816 }
1817
1819 {
1820 return false;
1821 }
1822
1824 {
1826 {
1828 {
1831
1834
1835 default:
1836 return super.GetTemperatureFreezeTime();
1837 }
1838 }
1839
1840 return super.GetTemperatureFreezeTime();
1841 }
1842
1844 {
1846 {
1848 {
1851
1854
1855 default:
1856 return super.GetTemperatureThawTime();
1857 }
1858 }
1859
1860 return super.GetTemperatureThawTime();
1861 }
1862
1864 {
1866 }
1867
1868
1869
1870
1872 {
1873 SetSynchDirty();
1874 }
1875
1877 {
1878 super.OnVariablesSynchronized();
1879
1880
1881
1882
1884 {
1886 }
1887 else
1888 {
1890 }
1891
1894 }
1895
1896
1897
1898
1900 {
1903
1905 }
1906
1908 {
1909 string soundName = "";
1910
1913
1915 {
1917 }
1918 else
1919 {
1921 {
1923 {
1928 else
1929 soundName = "";
1930 break;
1931 }
1932
1934 {
1939 else
1940 soundName = "";
1941 break;
1942 }
1943
1945 {
1950 else
1951 soundName = "";
1952 break;
1953 }
1954
1955 default:
1956 soundName = "";
1957 break;
1958 }
1959
1961 {
1962 if (soundName == "")
1963 {
1965 }
1966 else
1967 {
1969 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1970 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1972 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1973 {
1975 }
1976 }
1977 }
1978 }
1979
1981 }
1982
1984 {
1987 }
1988
1989
1990
1991
1993 {
1994 super.OnStoreSave(ctx);
1995
1997 {
1999 }
2000
2001
2004 }
2005
2007 {
2008 if (!super.OnStoreLoad(ctx, version))
2009 return false;
2010
2012 {
2014 return false;
2015 }
2016
2017 if (version >= 115)
2018 {
2020 {
2022 return false;
2023 }
2025 {
2027 return false;
2028 }
2029 }
2030
2033
2034 return true;
2035 }
2036
2038 {
2039 super.AfterStoreLoad();
2040
2042 }
2043
2044
2046 {
2048 }
2049
2050
2052 {
2053 return false;
2054 }
2055
2057 {
2058 return false;
2059 }
2060
2062 {
2063 return false;
2064 }
2065
2067 {
2068 return false;
2069 }
2070
2071
2072
2073
2074
2076 {
2079 {
2080 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2081 }
2082 else if (classname != "" && food_stage)
2083 {
2084 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2085 }
2086 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2088
2089 }
2090
2092 {
2095 {
2097 }
2098 else if (classname != "" && food_stage)
2099 {
2100 return FoodStage.GetEnergy(null, food_stage, classname);
2101 }
2102 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2104 }
2105
2107 {
2110 {
2112 }
2113 else if (classname != "" && food_stage)
2114 {
2115 return FoodStage.GetWater(null, food_stage, classname);
2116 }
2117 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2119 }
2120
2122 {
2125 {
2126 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2127 }
2128 else if (classname != "" && food_stage)
2129 {
2130 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2131 }
2132 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2134
2135 }
2136
2138 {
2141 {
2142 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2143 }
2144 else if (classname != "" && food_stage)
2145 {
2146 return FoodStage.GetToxicity(null, food_stage, classname);
2147 }
2148 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2150 }
2151
2153 {
2156 {
2158 }
2159 else if (classname != "" && food_stage)
2160 {
2161 return FoodStage.GetAgents(null, food_stage, classname);
2162 }
2163 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2165 }
2166
2168 {
2171 {
2172 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2173 }
2174 else if (classname != "" && food_stage)
2175 {
2176 return FoodStage.GetDigestibility(null, food_stage, classname);
2177 }
2178 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2180 }
2181
2183 {
2186 {
2187 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2188 }
2189 else if (className != "" && foodStage)
2190 {
2191 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2192 }
2193 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2195 }
2196
2198 {
2208
2209 return profile;
2210 }
2211
2212
2213
2214
2216 {
2218 }
2219
2220
2222 {
2224 {
2226 }
2227
2228 return false;
2229 }
2230
2232 {
2234 {
2236 }
2237
2238 return false;
2239 }
2240
2242 {
2244 {
2246 }
2247
2248 return false;
2249 }
2250
2252 {
2254 {
2256 }
2257
2258 return false;
2259 }
2260
2262 {
2264 {
2266 }
2267
2268 return false;
2269 }
2270
2272 {
2274 {
2276 }
2277
2278 return false;
2279 }
2280
2281
2283 {
2285 }
2286
2288 {
2289 return GetFoodStage().GetNextFoodStageType( cooking_method );
2290 }
2291
2293 {
2294 return GetFoodStage().GetFoodStageName( food_stage_type );
2295 }
2296
2298 {
2299 return GetFoodStage().CanChangeToNewStage( cooking_method );
2300 }
2301
2302
2304 {
2305 if ( !source.GetFoodStage())
2306 return;
2311 }
2312
2315 {
2318 }
2319
2322 {
2323 switch (stageNew)
2324 {
2329 break;
2330
2333 break;
2334 }
2335 }
2336
2337
2338
2339
2340
2342 {
2344 }
2345
2347 {
2349
2350
2352 }
2353
2355 {
2357 {
2360 }
2361 }
2362
2363
2365 {
2367 if (player)
2368 {
2370 player.ServerReplaceItemInHandsWithNew(lambda);
2371 }
2372 else
2373 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2374 }
2375
2377 {
2379 }
2380
2382 {
2383 super.SetActions();
2384
2387 }
2388
2390 {
2391 #ifndef SERVER
2393 {
2395
2398 }
2399 #endif
2400 }
2401
2403 {
2404 #ifndef SERVER
2406 {
2410 }
2411 #endif
2412 }
2413
2415 {
2416 return false;
2417 }
2418
2420 {
2422 }
2423
2424 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2425 {
2427
2428 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2430 if ( hasRootAsPlayer )
2432
2433
2434
2435
2436
2437
2438
2440 {
2441
2443 {
2445 {
2449 break;
2450
2454 break;
2455
2459 break;
2460
2464 default:
2467 return;
2468 }
2469
2470
2471 }
2472
2474
2476 {
2478 {
2479
2481 {
2483 }
2485 {
2488 {
2490 }
2491 else
2492 {
2494 {
2496 }
2497 else
2498 {
2500 }
2501 }
2502 }
2503 }
2504 }
2505
2506 }
2508 {
2509
2511 {
2513 {
2517 break;
2518
2522 break;
2523
2527 break;
2528
2532 break;
2533
2536 default:
2539 return;
2540 }
2541 }
2542
2544
2546 {
2548 {
2549
2551 {
2553 }
2554 }
2555 }
2556 }
2558 {
2559
2561 {
2563 {
2567 break;
2568
2571 default:
2574 return;
2575 }
2576 }
2577
2579
2581 {
2583 {
2584
2586 {
2588 }
2589 }
2590 }
2591 }
2592 else
2593 {
2594
2596
2598 {
2601
2602 }
2603 else
2604 {
2606 {
2609 }
2610 }
2611 }
2612 }
2613
2615 {
2616 if (
GetGame().IsDedicatedServer())
2617 return;
2618
2620 {
2622 GetInventory().GetCurrentInventoryLocation(invLoc);
2624 {
2626 if (ptcMgr)
2627 {
2632 }
2633 }
2634 }
2636 {
2638 {
2641 return;
2642 }
2643
2645 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2647 {
2650 }
2651 }
2652 }
2653
2654 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2655 {
2657 {
2662 }
2663
2664 super.GetDebugActions(outputList);
2665 }
2666
2668 {
2669 super.OnAction(action_id, player, ctx);
2670
2672 {
2673 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2674 {
2676 if (food_stage_prev <= 0)
2677 {
2679 }
2681 return true;
2682 }
2683 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2684 {
2687 {
2689 }
2691 return true;
2692 }
2693
2694 }
2695
2696 #ifdef DIAG_DEVELOPER
2697 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2698 {
2699 PrintNutritionsData();
2700 return true;
2701 }
2702 #endif
2703
2704 return false;
2705 }
2706
2708 {
2709 string debug_output;
2710
2711 debug_output = super.GetDebugText();
2712
2715
2716 return debug_output;
2717 }
2718
2719
2720
2721
2722
2724 {
2725 float ret = super.GetBaitEffectivity();
2726
2728 {
2729 ret *= 0.5;
2730 }
2731
2732 return ret;
2733 }
2734
2736 {
2738 }
2739
2741 {
2743 }
2744
2746 {
2748 }
2749
2750 #ifdef DIAG_DEVELOPER
2751 private void PrintNutritionsData()
2752 {
2753 string nutritionsData = "";
2754
2757
2759 if (profile)
2760 {
2761 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2763 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2767 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2769
2772
2773 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2775 }
2776
2777 nutritionsData += "-----\n";
2778
2780 }
2781 #endif
2782
2784
2787 {
2789 }
2790}
2791
2793{
2795};
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.