1716{
1718
1726
1736
1738
1740 {
1742 {
1744
1746 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1747
1751 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1752 }
1753 }
1754
1756 {
1758
1760 }
1761
1763 {
1764 super.EEDelete(parent);
1765
1767
1770 }
1771
1773 {
1774 super.EEItemLocationChanged(oldLoc, newLoc);
1775
1778 {
1779 switch (oldLoc.GetParent().GetType())
1780 {
1781 case "FryingPan":
1782 case "Pot":
1783 case "Cauldron":
1784 case "SharpWoodenStick":
1786 break;
1787 }
1788
1791 {
1793 }
1794 }
1795
1796 if (oldLoc.IsValid())
1798
1801 }
1802
1804 {
1807 }
1808
1810 {
1813
1814 return true;
1815 }
1816
1818 {
1820 {
1822 }
1823 }
1824
1827 {
1828 int foodStageType;
1829
1831 if (foodStage)
1832 foodStageType = foodStage.GetFoodStageType();
1833
1838
1839 return agentsIn;
1840 }
1841
1842
1844 {
1845 return false;
1846 }
1847
1849 {
1850 return false;
1851 }
1852
1854 {
1856 {
1858 {
1861
1864
1865 default:
1866 return super.GetTemperatureFreezeTime();
1867 }
1868 }
1869
1870 return super.GetTemperatureFreezeTime();
1871 }
1872
1874 {
1876 {
1878 {
1881
1884
1885 default:
1886 return super.GetTemperatureThawTime();
1887 }
1888 }
1889
1890 return super.GetTemperatureThawTime();
1891 }
1892
1894 {
1896 }
1897
1898
1899
1900
1902 {
1903 SetSynchDirty();
1904 }
1905
1907 {
1908 super.OnVariablesSynchronized();
1909
1910
1911
1912
1914 {
1916 }
1917 else
1918 {
1920 }
1921
1924 }
1925
1926
1927
1928
1930 {
1933
1935 }
1936
1938 {
1939 string soundName = "";
1940
1943
1945 {
1947 }
1948 else
1949 {
1951 {
1953 {
1958 else
1959 soundName = "";
1960 break;
1961 }
1962
1964 {
1969 else
1970 soundName = "";
1971 break;
1972 }
1973
1975 {
1980 else
1981 soundName = "";
1982 break;
1983 }
1984
1985 default:
1986 soundName = "";
1987 break;
1988 }
1989
1991 {
1992 if (soundName == "")
1993 {
1995 }
1996 else
1997 {
1999 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2000 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2002 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2003 {
2005 }
2006 }
2007 }
2008 }
2009
2011 }
2012
2014 {
2017 }
2018
2019
2020
2021
2023 {
2024 super.OnStoreSave(ctx);
2025
2027 {
2029 }
2030
2031
2034 }
2035
2037 {
2038 if (!super.OnStoreLoad(ctx, version))
2039 return false;
2040
2042 {
2044 return false;
2045 }
2046
2047 if (version >= 115)
2048 {
2050 {
2052 return false;
2053 }
2055 {
2057 return false;
2058 }
2059 }
2060
2063
2064 return true;
2065 }
2066
2068 {
2069 super.AfterStoreLoad();
2070
2072 }
2073
2074
2076 {
2078 }
2079
2080
2082 {
2083 return false;
2084 }
2085
2087 {
2088 return false;
2089 }
2090
2092 {
2093 return false;
2094 }
2095
2097 {
2098 return false;
2099 }
2100
2101
2102
2103
2104
2106 {
2109 {
2110 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2111 }
2112 else if (classname != "" && food_stage)
2113 {
2114 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2115 }
2116 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2118
2119 }
2120
2122 {
2125 {
2127 }
2128 else if (classname != "" && food_stage)
2129 {
2130 return FoodStage.GetEnergy(null, food_stage, classname);
2131 }
2132 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2134 }
2135
2137 {
2140 {
2142 }
2143 else if (classname != "" && food_stage)
2144 {
2145 return FoodStage.GetWater(null, food_stage, classname);
2146 }
2147 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2149 }
2150
2152 {
2155 {
2156 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2157 }
2158 else if (classname != "" && food_stage)
2159 {
2160 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2161 }
2162 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2164
2165 }
2166
2168 {
2171 {
2172 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2173 }
2174 else if (classname != "" && food_stage)
2175 {
2176 return FoodStage.GetToxicity(null, food_stage, classname);
2177 }
2178 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2180 }
2181
2183 {
2186 {
2188 }
2189 else if (classname != "" && food_stage)
2190 {
2191 return FoodStage.GetAgents(null, food_stage, classname);
2192 }
2193 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2195 }
2196
2198 {
2201 {
2202 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2203 }
2204 else if (classname != "" && food_stage)
2205 {
2206 return FoodStage.GetDigestibility(null, food_stage, classname);
2207 }
2208 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2210 }
2211
2213 {
2216 {
2217 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2218 }
2219 else if (className != "" && foodStage)
2220 {
2221 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2222 }
2223 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2225 }
2226
2228 {
2238
2239 return profile;
2240 }
2241
2242
2243
2244
2246 {
2248 }
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
2282 {
2284 {
2286 }
2287
2288 return false;
2289 }
2290
2292 {
2294 {
2296 }
2297
2298 return false;
2299 }
2300
2302 {
2304 {
2306 }
2307
2308 return false;
2309 }
2310
2311
2313 {
2315 }
2316
2318 {
2319 return GetFoodStage().GetNextFoodStageType( cooking_method );
2320 }
2321
2323 {
2324 return GetFoodStage().GetFoodStageName( food_stage_type );
2325 }
2326
2328 {
2329 return GetFoodStage().CanChangeToNewStage( cooking_method );
2330 }
2331
2332
2334 {
2335 if ( !source.GetFoodStage())
2336 return;
2341 }
2342
2345 {
2348 }
2349
2352 {
2353 switch (stageNew)
2354 {
2359 break;
2360
2363 break;
2364 }
2365 }
2366
2367
2368
2369
2370
2372 {
2374 }
2375
2377 {
2379
2380
2382 }
2383
2385 {
2387 {
2390 }
2391 }
2392
2393
2395 {
2397 if (player)
2398 {
2400 player.ServerReplaceItemInHandsWithNew(lambda);
2401 }
2402 else
2403 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2404 }
2405
2407 {
2409 }
2410
2412 {
2413 super.SetActions();
2414
2417 }
2418
2420 {
2421 #ifndef SERVER
2423 {
2425
2428 }
2429 #endif
2430 }
2431
2433 {
2434 #ifndef SERVER
2436 {
2440 }
2441 #endif
2442 }
2443
2445 {
2446 return false;
2447 }
2448
2450 {
2452 }
2453
2454 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2455 {
2457
2458 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2460 if ( hasRootAsPlayer )
2462
2463
2464
2465
2466
2467
2468
2470 {
2471
2473 {
2475 {
2479 break;
2480
2484 break;
2485
2489 break;
2490
2494 default:
2497 return;
2498 }
2499
2500
2501 }
2502
2504
2506 {
2508 {
2509
2511 {
2513 }
2515 {
2518 {
2520 }
2521 else
2522 {
2524 {
2526 }
2527 else
2528 {
2530 }
2531 }
2532 }
2533 }
2534 }
2535
2536 }
2538 {
2539
2541 {
2543 {
2547 break;
2548
2552 break;
2553
2557 break;
2558
2562 break;
2563
2566 default:
2569 return;
2570 }
2571 }
2572
2574
2576 {
2578 {
2579
2581 {
2583 }
2584 }
2585 }
2586 }
2588 {
2589
2591 {
2593 {
2597 break;
2598
2601 default:
2604 return;
2605 }
2606 }
2607
2609
2611 {
2613 {
2614
2616 {
2618 }
2619 }
2620 }
2621 }
2622 else
2623 {
2624
2626
2628 {
2631
2632 }
2633 else
2634 {
2636 {
2639 }
2640 }
2641 }
2642 }
2643
2645 {
2646 if (
GetGame().IsDedicatedServer())
2647 return;
2648
2650 {
2652 GetInventory().GetCurrentInventoryLocation(invLoc);
2654 {
2656 if (ptcMgr)
2657 {
2662 }
2663 }
2664 }
2666 {
2668 {
2671 return;
2672 }
2673
2675 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2677 {
2680 }
2681 }
2682 }
2683
2684 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2685 {
2686 super.GetDebugActions(outputList);
2687
2689 {
2693 }
2694 }
2695
2697 {
2698 super.OnAction(action_id, player, ctx);
2699
2701 {
2702 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2703 {
2705 if (food_stage_prev <= 0)
2706 {
2708 }
2710 return true;
2711 }
2712 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2713 {
2716 {
2718 }
2720 return true;
2721 }
2722
2723 }
2724
2725 #ifdef DIAG_DEVELOPER
2726 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2727 {
2728 PrintNutritionsData();
2729 return true;
2730 }
2731 #endif
2732
2733 return false;
2734 }
2735
2737 {
2738 string debug_output;
2739
2740 debug_output = super.GetDebugText();
2741
2744
2745 return debug_output;
2746 }
2747
2748
2749
2750
2751
2753 {
2754 float ret = super.GetBaitEffectivity();
2755
2757 {
2758 ret *= 0.5;
2759 }
2760
2761 return ret;
2762 }
2763
2765 {
2767 }
2768
2770 {
2772 }
2773
2775 {
2777 }
2778
2779 #ifdef DIAG_DEVELOPER
2780 private void PrintNutritionsData()
2781 {
2782 string nutritionsData = "";
2783
2786
2788 if (profile)
2789 {
2790 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2792 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2796 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2798
2801
2802 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2804 }
2805
2806 nutritionsData += "-----\n";
2807
2809 }
2810 #endif
2811
2813
2816 {
2818 }
2819}
2820
2822{
2824};
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.