1721{
1723
1731
1741
1743
1745 {
1747 {
1749
1751 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1752
1756 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1757 }
1758 }
1759
1761 {
1763
1765 }
1766
1768 {
1769 super.EEDelete(parent);
1770
1772
1775 }
1776
1778 {
1779 super.EEItemLocationChanged(oldLoc, newLoc);
1780
1783 {
1784 switch (oldLoc.GetParent().GetType())
1785 {
1786 case "FryingPan":
1787 case "Pot":
1788 case "Cauldron":
1789 case "SharpWoodenStick":
1791 break;
1792 }
1793
1796 {
1798 }
1799 }
1800
1801 if (oldLoc.IsValid())
1803
1806 }
1807
1809 {
1812 }
1813
1815 {
1818
1819 return true;
1820 }
1821
1823 {
1825 {
1827 }
1828 }
1829
1832 {
1833 int foodStageType;
1834
1836 if (foodStage)
1837 foodStageType = foodStage.GetFoodStageType();
1838
1843
1844 return agentsIn;
1845 }
1846
1847
1849 {
1850 return false;
1851 }
1852
1854 {
1855 return false;
1856 }
1857
1859 {
1861 {
1863 {
1866
1869
1870 default:
1871 return super.GetTemperatureFreezeTime();
1872 }
1873 }
1874
1875 return super.GetTemperatureFreezeTime();
1876 }
1877
1879 {
1881 {
1883 {
1886
1889
1890 default:
1891 return super.GetTemperatureThawTime();
1892 }
1893 }
1894
1895 return super.GetTemperatureThawTime();
1896 }
1897
1899 {
1901 }
1902
1903
1904
1905
1907 {
1908 SetSynchDirty();
1909 }
1910
1912 {
1913 super.OnVariablesSynchronized();
1914
1915
1916
1917
1919 {
1921 }
1922 else
1923 {
1925 }
1926
1929 }
1930
1931
1932
1933
1935 {
1938
1940 }
1941
1943 {
1944 string soundName = "";
1945
1948
1950 {
1952 }
1953 else
1954 {
1956 {
1958 {
1963 else
1964 soundName = "";
1965 break;
1966 }
1967
1969 {
1974 else
1975 soundName = "";
1976 break;
1977 }
1978
1980 {
1985 else
1986 soundName = "";
1987 break;
1988 }
1989
1990 default:
1991 soundName = "";
1992 break;
1993 }
1994
1996 {
1997 if (soundName == "")
1998 {
2000 }
2001 else
2002 {
2004 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2005 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2007 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2008 {
2010 }
2011 }
2012 }
2013 }
2014
2016 }
2017
2019 {
2022 }
2023
2024
2025
2026
2028 {
2029 super.OnStoreSave(ctx);
2030
2032 {
2034 }
2035
2036
2039 }
2040
2042 {
2043 if (!super.OnStoreLoad(ctx, version))
2044 return false;
2045
2047 {
2049 return false;
2050 }
2051
2052 if (version >= 115)
2053 {
2055 {
2057 return false;
2058 }
2060 {
2062 return false;
2063 }
2064 }
2065
2068
2069 return true;
2070 }
2071
2073 {
2074 super.AfterStoreLoad();
2075
2077 }
2078
2079
2081 {
2083 }
2084
2085
2087 {
2088 return false;
2089 }
2090
2092 {
2093 return false;
2094 }
2095
2097 {
2098 return false;
2099 }
2100
2102 {
2103 return false;
2104 }
2105
2106
2107
2108
2109
2111 {
2114 {
2115 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2116 }
2117 else if (classname != "" && food_stage)
2118 {
2119 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2120 }
2121 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2123
2124 }
2125
2127 {
2130 {
2132 }
2133 else if (classname != "" && food_stage)
2134 {
2135 return FoodStage.GetEnergy(null, food_stage, classname);
2136 }
2137 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2139 }
2140
2142 {
2145 {
2147 }
2148 else if (classname != "" && food_stage)
2149 {
2150 return FoodStage.GetWater(null, food_stage, classname);
2151 }
2152 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2154 }
2155
2157 {
2160 {
2161 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2162 }
2163 else if (classname != "" && food_stage)
2164 {
2165 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2166 }
2167 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2169
2170 }
2171
2173 {
2176 {
2177 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2178 }
2179 else if (classname != "" && food_stage)
2180 {
2181 return FoodStage.GetToxicity(null, food_stage, classname);
2182 }
2183 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2185 }
2186
2188 {
2191 {
2193 }
2194 else if (classname != "" && food_stage)
2195 {
2196 return FoodStage.GetAgents(null, food_stage, classname);
2197 }
2198 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2200 }
2201
2203 {
2206 {
2207 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2208 }
2209 else if (classname != "" && food_stage)
2210 {
2211 return FoodStage.GetDigestibility(null, food_stage, classname);
2212 }
2213 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2215 }
2216
2218 {
2221 {
2222 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2223 }
2224 else if (className != "" && foodStage)
2225 {
2226 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2227 }
2228 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2230 }
2231
2233 {
2243
2244 return profile;
2245 }
2246
2247
2248
2249
2251 {
2253 }
2254
2255
2257 {
2259 {
2261 }
2262
2263 return false;
2264 }
2265
2267 {
2269 {
2271 }
2272
2273 return false;
2274 }
2275
2277 {
2279 {
2281 }
2282
2283 return false;
2284 }
2285
2287 {
2289 {
2291 }
2292
2293 return false;
2294 }
2295
2297 {
2299 {
2301 }
2302
2303 return false;
2304 }
2305
2307 {
2309 {
2311 }
2312
2313 return false;
2314 }
2315
2316
2318 {
2320 }
2321
2323 {
2324 return GetFoodStage().GetNextFoodStageType( cooking_method );
2325 }
2326
2328 {
2329 return GetFoodStage().GetFoodStageName( food_stage_type );
2330 }
2331
2333 {
2334 return GetFoodStage().CanChangeToNewStage( cooking_method );
2335 }
2336
2337
2339 {
2340 if ( !source.GetFoodStage())
2341 return;
2346 }
2347
2350 {
2353 }
2354
2357 {
2358 switch (stageNew)
2359 {
2364 break;
2365
2368 break;
2369 }
2370 }
2371
2372
2373
2374
2375
2377 {
2379 }
2380
2382 {
2384
2385
2387 }
2388
2390 {
2392 {
2395 }
2396 }
2397
2398
2400 {
2402 if (player)
2403 {
2405 player.ServerReplaceItemInHandsWithNew(lambda);
2406 }
2407 else
2408 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2409 }
2410
2412 {
2414 }
2415
2417 {
2418 super.SetActions();
2419
2422 }
2423
2425 {
2426 #ifndef SERVER
2428 {
2430
2433 }
2434 #endif
2435 }
2436
2438 {
2439 #ifndef SERVER
2441 {
2445 }
2446 #endif
2447 }
2448
2450 {
2451 return false;
2452 }
2453
2455 {
2457 }
2458
2459 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2460 {
2462
2463 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2465 if ( hasRootAsPlayer )
2467
2468
2469
2470
2471
2472
2473
2475 {
2476
2478 {
2480 {
2484 break;
2485
2489 break;
2490
2494 break;
2495
2499 default:
2502 return;
2503 }
2504
2505
2506 }
2507
2509
2511 {
2513 {
2514
2516 {
2518 }
2520 {
2523 {
2525 }
2526 else
2527 {
2529 {
2531 }
2532 else
2533 {
2535 }
2536 }
2537 }
2538 }
2539 }
2540
2541 }
2543 {
2544
2546 {
2548 {
2552 break;
2553
2557 break;
2558
2562 break;
2563
2567 break;
2568
2571 default:
2574 return;
2575 }
2576 }
2577
2579
2581 {
2583 {
2584
2586 {
2588 }
2589 }
2590 }
2591 }
2593 {
2594
2596 {
2598 {
2602 break;
2603
2606 default:
2609 return;
2610 }
2611 }
2612
2614
2616 {
2618 {
2619
2621 {
2623 }
2624 }
2625 }
2626 }
2627 else
2628 {
2629
2631
2633 {
2636
2637 }
2638 else
2639 {
2641 {
2644 }
2645 }
2646 }
2647 }
2648
2650 {
2651 if (
GetGame().IsDedicatedServer())
2652 return;
2653
2655 {
2657 GetInventory().GetCurrentInventoryLocation(invLoc);
2659 {
2661 if (ptcMgr)
2662 {
2667 }
2668 }
2669 }
2671 {
2673 {
2676 return;
2677 }
2678
2680 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2682 {
2685 }
2686 }
2687 }
2688
2689 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2690 {
2691 super.GetDebugActions(outputList);
2692
2694 {
2698 }
2699 }
2700
2702 {
2703 super.OnAction(action_id, player, ctx);
2704
2706 {
2707 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2708 {
2710 if (food_stage_prev <= 0)
2711 {
2713 }
2715 return true;
2716 }
2717 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2718 {
2721 {
2723 }
2725 return true;
2726 }
2727
2728 }
2729
2730 #ifdef DIAG_DEVELOPER
2731 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2732 {
2733 PrintNutritionsData();
2734 return true;
2735 }
2736 #endif
2737
2738 return false;
2739 }
2740
2742 {
2743 string debug_output;
2744
2745 debug_output = super.GetDebugText();
2746
2749
2750 return debug_output;
2751 }
2752
2753
2754
2755
2756
2758 {
2759 float ret = super.GetBaitEffectivity();
2760
2762 {
2763 ret *= 0.5;
2764 }
2765
2766 return ret;
2767 }
2768
2770 {
2772 }
2773
2775 {
2777 }
2778
2780 {
2782 }
2783
2784 #ifdef DIAG_DEVELOPER
2785 private void PrintNutritionsData()
2786 {
2787 string nutritionsData = "";
2788
2791
2793 if (profile)
2794 {
2795 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2797 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2801 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2803
2806
2807 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2809 }
2810
2811 nutritionsData += "-----\n";
2812
2814 }
2815 #endif
2816
2818
2821 {
2823 }
2824}
2825
2827{
2829};
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.