1685{
1687
1695
1705
1707
1709 {
1711 {
1713
1715 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1716
1720 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1721 }
1722 }
1723
1725 {
1727
1729 }
1730
1732 {
1733 super.EEDelete(parent);
1734
1736
1739 }
1740
1742 {
1743 super.EEItemLocationChanged(oldLoc, newLoc);
1744
1747 {
1748 switch (oldLoc.GetParent().GetType())
1749 {
1750 case "FryingPan":
1751 case "Pot":
1752 case "Cauldron":
1753 case "SharpWoodenStick":
1755 break;
1756 }
1757
1760 {
1762 }
1763 }
1764
1765 if (oldLoc.IsValid())
1767
1770 }
1771
1773 {
1776 }
1777
1779 {
1782
1783 return true;
1784 }
1785
1787 {
1789 {
1791 }
1792 }
1793
1796 {
1797 int foodStageType;
1798
1800 if (foodStage)
1801 foodStageType = foodStage.GetFoodStageType();
1802
1807
1808 return agentsIn;
1809 }
1810
1811
1813 {
1814 return false;
1815 }
1816
1818 {
1819 return false;
1820 }
1821
1823 {
1825 {
1827 {
1830
1833
1834 default:
1835 return super.GetTemperatureFreezeTime();
1836 }
1837 }
1838
1839 return super.GetTemperatureFreezeTime();
1840 }
1841
1843 {
1845 {
1847 {
1850
1853
1854 default:
1855 return super.GetTemperatureThawTime();
1856 }
1857 }
1858
1859 return super.GetTemperatureThawTime();
1860 }
1861
1863 {
1865 }
1866
1867
1868
1869
1871 {
1872 SetSynchDirty();
1873 }
1874
1876 {
1877 super.OnVariablesSynchronized();
1878
1879
1880
1881
1883 {
1885 }
1886 else
1887 {
1889 }
1890
1893 }
1894
1895
1896
1897
1899 {
1902
1904 }
1905
1907 {
1908 string soundName = "";
1909
1912
1914 {
1916 }
1917 else
1918 {
1920 {
1922 {
1927 else
1928 soundName = "";
1929 break;
1930 }
1931
1933 {
1938 else
1939 soundName = "";
1940 break;
1941 }
1942
1944 {
1949 else
1950 soundName = "";
1951 break;
1952 }
1953
1954 default:
1955 soundName = "";
1956 break;
1957 }
1958
1960 {
1961 if (soundName == "")
1962 {
1964 }
1965 else
1966 {
1968 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1969 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1971 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1972 {
1974 }
1975 }
1976 }
1977 }
1978
1980 }
1981
1983 {
1986 }
1987
1988
1989
1990
1992 {
1993 super.OnStoreSave(ctx);
1994
1996 {
1998 }
1999
2000
2003 }
2004
2006 {
2007 if (!super.OnStoreLoad(ctx, version))
2008 return false;
2009
2011 {
2013 return false;
2014 }
2015
2016 if (version >= 115)
2017 {
2019 {
2021 return false;
2022 }
2024 {
2026 return false;
2027 }
2028 }
2029
2032
2033 return true;
2034 }
2035
2037 {
2038 super.AfterStoreLoad();
2039
2041 }
2042
2043
2045 {
2047 }
2048
2049
2051 {
2052 return false;
2053 }
2054
2056 {
2057 return false;
2058 }
2059
2061 {
2062 return false;
2063 }
2064
2066 {
2067 return false;
2068 }
2069
2070
2071
2072
2073
2075 {
2078 {
2079 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2080 }
2081 else if (classname != "" && food_stage)
2082 {
2083 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2084 }
2085 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2087
2088 }
2089
2091 {
2094 {
2096 }
2097 else if (classname != "" && food_stage)
2098 {
2099 return FoodStage.GetEnergy(null, food_stage, classname);
2100 }
2101 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2103 }
2104
2106 {
2109 {
2111 }
2112 else if (classname != "" && food_stage)
2113 {
2114 return FoodStage.GetWater(null, food_stage, classname);
2115 }
2116 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2118 }
2119
2121 {
2124 {
2125 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2126 }
2127 else if (classname != "" && food_stage)
2128 {
2129 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2130 }
2131 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2133
2134 }
2135
2137 {
2140 {
2141 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2142 }
2143 else if (classname != "" && food_stage)
2144 {
2145 return FoodStage.GetToxicity(null, food_stage, classname);
2146 }
2147 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2149 }
2150
2152 {
2155 {
2157 }
2158 else if (classname != "" && food_stage)
2159 {
2160 return FoodStage.GetAgents(null, food_stage, classname);
2161 }
2162 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2164 }
2165
2167 {
2170 {
2171 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2172 }
2173 else if (classname != "" && food_stage)
2174 {
2175 return FoodStage.GetDigestibility(null, food_stage, classname);
2176 }
2177 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2179 }
2180
2182 {
2185 {
2186 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2187 }
2188 else if (className != "" && foodStage)
2189 {
2190 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2191 }
2192 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2194 }
2195
2197 {
2207
2208 return profile;
2209 }
2210
2211
2212
2213
2215 {
2217 }
2218
2219
2221 {
2223 {
2225 }
2226
2227 return false;
2228 }
2229
2231 {
2233 {
2235 }
2236
2237 return false;
2238 }
2239
2241 {
2243 {
2245 }
2246
2247 return false;
2248 }
2249
2251 {
2253 {
2255 }
2256
2257 return false;
2258 }
2259
2261 {
2263 {
2265 }
2266
2267 return false;
2268 }
2269
2271 {
2273 {
2275 }
2276
2277 return false;
2278 }
2279
2280
2282 {
2284 }
2285
2287 {
2288 return GetFoodStage().GetNextFoodStageType( cooking_method );
2289 }
2290
2292 {
2293 return GetFoodStage().GetFoodStageName( food_stage_type );
2294 }
2295
2297 {
2298 return GetFoodStage().CanChangeToNewStage( cooking_method );
2299 }
2300
2301
2303 {
2304 if ( !source.GetFoodStage())
2305 return;
2310 }
2311
2314 {
2317 }
2318
2321 {
2322 switch (stageNew)
2323 {
2328 break;
2329
2332 break;
2333 }
2334 }
2335
2336
2337
2338
2339
2341 {
2343 }
2344
2346 {
2348
2349
2351 }
2352
2354 {
2356 {
2359 }
2360 }
2361
2362
2364 {
2366 if (player)
2367 {
2369 player.ServerReplaceItemInHandsWithNew(lambda);
2370 }
2371 else
2372 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2373 }
2374
2376 {
2378 }
2379
2381 {
2382 super.SetActions();
2383
2386 }
2387
2389 {
2390 #ifndef SERVER
2392 {
2394
2397 }
2398 #endif
2399 }
2400
2402 {
2403 #ifndef SERVER
2405 {
2409 }
2410 #endif
2411 }
2412
2414 {
2415 return false;
2416 }
2417
2419 {
2421 }
2422
2423 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2424 {
2426
2427 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2429 if ( hasRootAsPlayer )
2431
2432
2433
2434
2435
2436
2437
2439 {
2440
2442 {
2444 {
2448 break;
2449
2453 break;
2454
2458 break;
2459
2463 default:
2466 return;
2467 }
2468
2469
2470 }
2471
2473
2475 {
2477 {
2478
2480 {
2482 }
2484 {
2487 {
2489 }
2490 else
2491 {
2493 {
2495 }
2496 else
2497 {
2499 }
2500 }
2501 }
2502 }
2503 }
2504
2505 }
2507 {
2508
2510 {
2512 {
2516 break;
2517
2521 break;
2522
2526 break;
2527
2531 break;
2532
2535 default:
2538 return;
2539 }
2540 }
2541
2543
2545 {
2547 {
2548
2550 {
2552 }
2553 }
2554 }
2555 }
2557 {
2558
2560 {
2562 {
2566 break;
2567
2570 default:
2573 return;
2574 }
2575 }
2576
2578
2580 {
2582 {
2583
2585 {
2587 }
2588 }
2589 }
2590 }
2591 else
2592 {
2593
2595
2597 {
2600
2601 }
2602 else
2603 {
2605 {
2608 }
2609 }
2610 }
2611 }
2612
2614 {
2615 if (
GetGame().IsDedicatedServer())
2616 return;
2617
2619 {
2621 GetInventory().GetCurrentInventoryLocation(invLoc);
2623 {
2625 if (ptcMgr)
2626 {
2631 }
2632 }
2633 }
2635 {
2637 {
2640 return;
2641 }
2642
2644 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2646 {
2649 }
2650 }
2651 }
2652
2653 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2654 {
2655 super.GetDebugActions(outputList);
2656
2658 {
2662 }
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)
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.