1775{
1777
1785
1795
1797
1799 {
1801 {
1803
1805 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1806
1810 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1811 }
1812 }
1813
1815 {
1817
1819 }
1820
1822 {
1823 super.EEDelete(parent);
1824
1826
1829 }
1830
1832 {
1833 super.EEItemLocationChanged(oldLoc, newLoc);
1834
1837 {
1838 switch (oldLoc.GetParent().GetType())
1839 {
1840 case "FryingPan":
1841 case "Pot":
1842 case "Cauldron":
1843 case "SharpWoodenStick":
1845 break;
1846 }
1847
1850 {
1852 }
1853 }
1854
1855 if (oldLoc.IsValid())
1857
1860 }
1861
1863 {
1866 }
1867
1869 {
1872
1873 return true;
1874 }
1875
1877 {
1879 {
1881 }
1882 }
1883
1886 {
1887 int foodStageType;
1888
1890 if (foodStage)
1891 foodStageType = foodStage.GetFoodStageType();
1892
1897
1898 return agentsIn;
1899 }
1900
1901
1903 {
1904 return false;
1905 }
1906
1908 {
1909 return false;
1910 }
1911
1913 {
1915 {
1917 {
1920
1923
1924 default:
1925 return super.GetTemperatureFreezeTime();
1926 }
1927 }
1928
1929 return super.GetTemperatureFreezeTime();
1930 }
1931
1933 {
1935 {
1937 {
1940
1943
1944 default:
1945 return super.GetTemperatureThawTime();
1946 }
1947 }
1948
1949 return super.GetTemperatureThawTime();
1950 }
1951
1953 {
1955 }
1956
1957
1958
1959
1961 {
1962 SetSynchDirty();
1963 }
1964
1966 {
1967 super.OnVariablesSynchronized();
1968
1969
1970
1971
1973 {
1975 }
1976 else
1977 {
1979 }
1980
1983 }
1984
1985
1986
1987
1989 {
1992
1994 }
1995
1997 {
1998 string soundName = "";
1999
2002
2004 {
2006 }
2007 else
2008 {
2010 {
2012 {
2017 else
2018 soundName = "";
2019 break;
2020 }
2021
2023 {
2028 else
2029 soundName = "";
2030 break;
2031 }
2032
2034 {
2039 else
2040 soundName = "";
2041 break;
2042 }
2043
2044 default:
2045 soundName = "";
2046 break;
2047 }
2048
2050 {
2051 if (soundName == "")
2052 {
2054 }
2055 else
2056 {
2058 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2059 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2061 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2062 {
2064 }
2065 }
2066 }
2067 }
2068
2070 }
2071
2073 {
2076 }
2077
2078
2079
2080
2082 {
2083 super.OnStoreSave(ctx);
2084
2086 {
2088 }
2089
2090
2093 }
2094
2096 {
2097 if (!super.OnStoreLoad(ctx, version))
2098 return false;
2099
2101 {
2103 return false;
2104 }
2105
2106 if (version >= 115)
2107 {
2109 {
2111 return false;
2112 }
2114 {
2116 return false;
2117 }
2118 }
2119
2122
2123 return true;
2124 }
2125
2127 {
2128 super.AfterStoreLoad();
2129
2131 }
2132
2133
2135 {
2137 }
2138
2139
2141 {
2142 return false;
2143 }
2144
2146 {
2147 return false;
2148 }
2149
2151 {
2152 return false;
2153 }
2154
2156 {
2157 return false;
2158 }
2159
2160
2161
2162
2163
2165 {
2168 {
2169 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2170 }
2171 else if (classname != "" && food_stage)
2172 {
2173 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2174 }
2175 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2176 return g_Game.ConfigGetFloat( class_path +
" fullnessIndex" );
2177
2178 }
2179
2181 {
2184 {
2186 }
2187 else if (classname != "" && food_stage)
2188 {
2189 return FoodStage.GetEnergy(null, food_stage, classname);
2190 }
2191 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2192 return g_Game.ConfigGetFloat( class_path +
" energy" );
2193 }
2194
2196 {
2199 {
2201 }
2202 else if (classname != "" && food_stage)
2203 {
2204 return FoodStage.GetWater(null, food_stage, classname);
2205 }
2206 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2207 return g_Game.ConfigGetFloat( class_path +
" water" );
2208 }
2209
2211 {
2214 {
2215 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2216 }
2217 else if (classname != "" && food_stage)
2218 {
2219 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2220 }
2221 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2222 return g_Game.ConfigGetFloat( class_path +
" nutritionalIndex" );
2223
2224 }
2225
2227 {
2230 {
2231 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2232 }
2233 else if (classname != "" && food_stage)
2234 {
2235 return FoodStage.GetToxicity(null, food_stage, classname);
2236 }
2237 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2238 return g_Game.ConfigGetFloat( class_path +
" toxicity" );
2239 }
2240
2242 {
2245 {
2247 }
2248 else if (classname != "" && food_stage)
2249 {
2250 return FoodStage.GetAgents(null, food_stage, classname);
2251 }
2252 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2253 return g_Game.ConfigGetInt( class_path +
" agents" );
2254 }
2255
2257 {
2260 {
2261 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2262 }
2263 else if (classname != "" && food_stage)
2264 {
2265 return FoodStage.GetDigestibility(null, food_stage, classname);
2266 }
2267 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2268 return g_Game.ConfigGetInt( class_path +
" digestibility" );
2269 }
2270
2272 {
2275 {
2276 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2277 }
2278 else if (className != "" && foodStage)
2279 {
2280 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2281 }
2282 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2283 return g_Game.ConfigGetInt(classPath +
" agentsPerDigest");
2284 }
2285
2287 {
2297
2298 return profile;
2299 }
2300
2301
2302
2303
2305 {
2307 }
2308
2309
2311 {
2313 {
2315 }
2316
2317 return false;
2318 }
2319
2321 {
2323 {
2325 }
2326
2327 return false;
2328 }
2329
2331 {
2333 {
2335 }
2336
2337 return false;
2338 }
2339
2341 {
2343 {
2345 }
2346
2347 return false;
2348 }
2349
2351 {
2353 {
2355 }
2356
2357 return false;
2358 }
2359
2361 {
2363 {
2365 }
2366
2367 return false;
2368 }
2369
2370
2372 {
2374 }
2375
2377 {
2378 return GetFoodStage().GetNextFoodStageType( cooking_method );
2379 }
2380
2382 {
2383 return GetFoodStage().GetFoodStageName( food_stage_type );
2384 }
2385
2387 {
2388 return GetFoodStage().CanChangeToNewStage( cooking_method );
2389 }
2390
2391
2393 {
2394 if ( !source.GetFoodStage())
2395 return;
2400 }
2401
2404 {
2407 }
2408
2411 {
2412 switch (stageNew)
2413 {
2418 break;
2419
2422 break;
2423 }
2424 }
2425
2426
2427
2428
2429
2431 {
2433 }
2434
2436 {
2438
2439
2441 }
2442
2444 {
2446 {
2449 }
2450 }
2451
2452
2454 {
2456 if (player)
2457 {
2459 player.ServerReplaceItemInHandsWithNew(lambda);
2460 }
2461 else
2462 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2463 }
2464
2466 {
2468 }
2469
2471 {
2472 super.SetActions();
2473
2476 }
2477
2479 {
2480 #ifndef SERVER
2481 #ifndef NO_GUI
2483 {
2485
2488 }
2489 #endif
2490 #endif
2491 }
2492
2494 {
2495 #ifndef SERVER
2496 #ifndef NO_GUI
2498 {
2502 }
2503 #endif
2504 #endif
2505 }
2506
2508 {
2509 return false;
2510 }
2511
2513 {
2515 }
2516
2517 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2518 {
2520
2521 delta *= DayZGame.Cast(
g_Game).GetFoodDecayModifier();
2523 if ( hasRootAsPlayer )
2525
2526
2527
2528
2529
2530
2531
2533 {
2534
2536 {
2538 {
2542 break;
2543
2547 break;
2548
2552 break;
2553
2557 default:
2560 return;
2561 }
2562
2563
2564 }
2565
2567
2569 {
2571 {
2572
2574 {
2576 }
2578 {
2581 {
2583 }
2584 else
2585 {
2587 {
2589 }
2590 else
2591 {
2593 }
2594 }
2595 }
2596 }
2597 }
2598
2599 }
2601 {
2602
2604 {
2606 {
2610 break;
2611
2615 break;
2616
2620 break;
2621
2625 break;
2626
2629 default:
2632 return;
2633 }
2634 }
2635
2637
2639 {
2641 {
2642
2644 {
2646 }
2647 }
2648 }
2649 }
2651 {
2652
2654 {
2656 {
2660 break;
2661
2664 default:
2667 return;
2668 }
2669 }
2670
2672
2674 {
2676 {
2677
2679 {
2681 }
2682 }
2683 }
2684 }
2685 else
2686 {
2687
2689
2691 {
2694
2695 }
2696 else
2697 {
2699 {
2702 }
2703 }
2704 }
2705 }
2706
2708 {
2709 if (
g_Game.IsHeadlessOrDedicatedServer())
2710 return;
2711
2713 {
2715 GetInventory().GetCurrentInventoryLocation(invLoc);
2717 {
2719 if (ptcMgr)
2720 {
2725 }
2726 }
2727 }
2729 {
2731 {
2734 return;
2735 }
2736
2738 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2740 {
2743 }
2744 }
2745 }
2746
2747 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2748 {
2750 {
2755 }
2756
2757 super.GetDebugActions(outputList);
2758 }
2759
2761 {
2762 super.OnAction(action_id, player, ctx);
2763
2765 {
2766 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2767 {
2769 if (food_stage_prev <= 0)
2770 {
2772 }
2774 return true;
2775 }
2776 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2777 {
2780 {
2782 }
2784 return true;
2785 }
2786
2787 }
2788
2789 #ifdef DIAG_DEVELOPER
2790 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2791 {
2792 PrintNutritionsData();
2793 return true;
2794 }
2795 #endif
2796
2797 return false;
2798 }
2799
2801 {
2802 string debug_output;
2803
2804 debug_output = super.GetDebugText();
2805
2808
2809 return debug_output;
2810 }
2811
2812
2813
2814
2815
2817 {
2818 float ret = super.GetBaitEffectivity();
2819
2821 {
2822 ret *= 0.5;
2823 }
2824
2825 return ret;
2826 }
2827
2829 {
2831 }
2832
2834 {
2836 }
2837
2839 {
2841 }
2842
2843 #ifdef DIAG_DEVELOPER
2844 private void PrintNutritionsData()
2845 {
2846 string nutritionsData = "";
2847
2850
2852 if (profile)
2853 {
2854 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2856 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2860 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2862
2865
2866 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2868 }
2869
2870 nutritionsData += "-----\n";
2871
2873 }
2874 #endif
2875
2877
2880 {
2882 }
2883}
2884
2886{
2888};
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.