1640{
1642
1650
1660
1662
1664 {
1666 {
1668
1670 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1671
1675 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1676 }
1677 }
1678
1680 {
1682
1684 }
1685
1687 {
1688 super.EEDelete(parent);
1689
1691
1694 }
1695
1697 {
1698 super.EEItemLocationChanged(oldLoc, newLoc);
1699
1702 {
1703 switch (oldLoc.GetParent().GetType())
1704 {
1705 case "FryingPan":
1706 case "Pot":
1707 case "Cauldron":
1708 case "SharpWoodenStick":
1710 break;
1711 }
1712
1715 {
1717 }
1718 }
1719
1720 if (oldLoc.IsValid())
1722
1725 }
1726
1728 {
1731 }
1732
1734 {
1737
1738 return true;
1739 }
1740
1742 {
1744 {
1746 }
1747 }
1748
1751 {
1752 int foodStageType;
1753
1755 if (foodStage)
1756 foodStageType = foodStage.GetFoodStageType();
1757
1762
1763 return agentsIn;
1764 }
1765
1766
1768 {
1769 return false;
1770 }
1771
1773 {
1774 return false;
1775 }
1776
1778 {
1780 {
1782 {
1785
1788
1789 default:
1790 return super.GetTemperatureFreezeTime();
1791 }
1792 }
1793
1794 return super.GetTemperatureFreezeTime();
1795 }
1796
1798 {
1800 {
1802 {
1805
1808
1809 default:
1810 return super.GetTemperatureThawTime();
1811 }
1812 }
1813
1814 return super.GetTemperatureThawTime();
1815 }
1816
1818 {
1820 }
1821
1822
1823
1824
1826 {
1827 SetSynchDirty();
1828 }
1829
1831 {
1832 super.OnVariablesSynchronized();
1833
1834
1835
1836
1838 {
1840 }
1841 else
1842 {
1844 }
1845
1848 }
1849
1850
1851
1852
1854 {
1857
1859 }
1860
1862 {
1863 string soundName = "";
1864
1867
1869 {
1871 }
1872 else
1873 {
1875 {
1877 {
1882 else
1883 soundName = "";
1884 break;
1885 }
1886
1888 {
1893 else
1894 soundName = "";
1895 break;
1896 }
1897
1899 {
1904 else
1905 soundName = "";
1906 break;
1907 }
1908
1909 default:
1910 soundName = "";
1911 break;
1912 }
1913
1915 {
1916 if (soundName == "")
1917 {
1919 }
1920 else
1921 {
1923 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1924 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1926 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1927 {
1929 }
1930 }
1931 }
1932 }
1933
1935 }
1936
1938 {
1941 }
1942
1943
1944
1945
1947 {
1948 super.OnStoreSave(ctx);
1949
1951 {
1953 }
1954
1955
1958 }
1959
1961 {
1962 if (!super.OnStoreLoad(ctx, version))
1963 return false;
1964
1966 {
1968 return false;
1969 }
1970
1971 if (version >= 115)
1972 {
1974 {
1976 return false;
1977 }
1979 {
1981 return false;
1982 }
1983 }
1984
1987
1988 return true;
1989 }
1990
1992 {
1993 super.AfterStoreLoad();
1994
1996 }
1997
1998
2000 {
2002 }
2003
2004
2006 {
2007 return false;
2008 }
2009
2011 {
2012 return false;
2013 }
2014
2016 {
2017 return false;
2018 }
2019
2021 {
2022 return false;
2023 }
2024
2025
2026
2027
2028
2030 {
2033 {
2034 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2035 }
2036 else if (classname != "" && food_stage)
2037 {
2038 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2039 }
2040 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2042
2043 }
2044
2046 {
2049 {
2051 }
2052 else if (classname != "" && food_stage)
2053 {
2054 return FoodStage.GetEnergy(null, food_stage, classname);
2055 }
2056 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2058 }
2059
2061 {
2064 {
2066 }
2067 else if (classname != "" && food_stage)
2068 {
2069 return FoodStage.GetWater(null, food_stage, classname);
2070 }
2071 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2073 }
2074
2076 {
2079 {
2080 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2081 }
2082 else if (classname != "" && food_stage)
2083 {
2084 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2085 }
2086 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2088
2089 }
2090
2092 {
2095 {
2096 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2097 }
2098 else if (classname != "" && food_stage)
2099 {
2100 return FoodStage.GetToxicity(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.GetAgents(null, food_stage, classname);
2116 }
2117 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2119 }
2120
2122 {
2125 {
2126 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2127 }
2128 else if (classname != "" && food_stage)
2129 {
2130 return FoodStage.GetDigestibility(null, food_stage, classname);
2131 }
2132 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2134 }
2135
2137 {
2140 {
2141 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2142 }
2143 else if (className != "" && foodStage)
2144 {
2145 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2146 }
2147 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2149 }
2150
2152 {
2162
2163 return profile;
2164 }
2165
2166
2167
2168
2170 {
2172 }
2173
2174
2176 {
2178 {
2180 }
2181
2182 return false;
2183 }
2184
2186 {
2188 {
2190 }
2191
2192 return false;
2193 }
2194
2196 {
2198 {
2200 }
2201
2202 return false;
2203 }
2204
2206 {
2208 {
2210 }
2211
2212 return false;
2213 }
2214
2216 {
2218 {
2220 }
2221
2222 return false;
2223 }
2224
2226 {
2228 {
2230 }
2231
2232 return false;
2233 }
2234
2235
2237 {
2239 }
2240
2242 {
2243 return GetFoodStage().GetNextFoodStageType( cooking_method );
2244 }
2245
2247 {
2248 return GetFoodStage().GetFoodStageName( food_stage_type );
2249 }
2250
2252 {
2253 return GetFoodStage().CanChangeToNewStage( cooking_method );
2254 }
2255
2256
2258 {
2259 if ( !source.GetFoodStage())
2260 return;
2265 }
2266
2269 {
2272 }
2273
2276 {
2277 switch (stageNew)
2278 {
2283 break;
2284
2287 break;
2288 }
2289 }
2290
2291
2292
2293
2294
2296 {
2298 }
2299
2301 {
2303
2304
2306 }
2307
2309 {
2311 {
2314 }
2315 }
2316
2317
2319 {
2321 if (player)
2322 {
2324 player.ServerReplaceItemInHandsWithNew(lambda);
2325 }
2326 else
2327 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2328 }
2329
2331 {
2333 }
2334
2336 {
2337 super.SetActions();
2338
2341 }
2342
2344 {
2345 #ifndef SERVER
2347 {
2349
2352 }
2353 #endif
2354 }
2355
2357 {
2358 #ifndef SERVER
2360 {
2364 }
2365 #endif
2366 }
2367
2369 {
2370 return false;
2371 }
2372
2374 {
2376 }
2377
2378 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2379 {
2381
2382 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2384 if ( hasRootAsPlayer )
2386
2387
2388
2389
2390
2391
2392
2394 {
2395
2397 {
2399 {
2403 break;
2404
2408 break;
2409
2413 break;
2414
2418 default:
2421 return;
2422 }
2423
2424
2425 }
2426
2428
2430 {
2432 {
2433
2435 {
2437 }
2439 {
2442 {
2444 }
2445 else
2446 {
2448 {
2450 }
2451 else
2452 {
2454 }
2455 }
2456 }
2457 }
2458 }
2459
2460 }
2462 {
2463
2465 {
2467 {
2471 break;
2472
2476 break;
2477
2481 break;
2482
2486 break;
2487
2490 default:
2493 return;
2494 }
2495 }
2496
2498
2500 {
2502 {
2503
2505 {
2507 }
2508 }
2509 }
2510 }
2512 {
2513
2515 {
2517 {
2521 break;
2522
2525 default:
2528 return;
2529 }
2530 }
2531
2533
2535 {
2537 {
2538
2540 {
2542 }
2543 }
2544 }
2545 }
2546 else
2547 {
2548
2550
2552 {
2555
2556 }
2557 else
2558 {
2560 {
2563 }
2564 }
2565 }
2566 }
2567
2569 {
2570 if (
GetGame().IsDedicatedServer())
2571 return;
2572
2574 {
2576 GetInventory().GetCurrentInventoryLocation(invLoc);
2578 {
2580 if (ptcMgr)
2581 {
2586 }
2587 }
2588 }
2590 {
2592 {
2595 return;
2596 }
2597
2599 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2601 {
2604 }
2605 }
2606 }
2607
2608 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2609 {
2611 {
2616 }
2617
2618 super.GetDebugActions(outputList);
2619 }
2620
2622 {
2623 super.OnAction(action_id, player, ctx);
2624
2626 {
2627 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2628 {
2630 if (food_stage_prev <= 0)
2631 {
2633 }
2635 return true;
2636 }
2637 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2638 {
2641 {
2643 }
2645 return true;
2646 }
2647
2648 }
2649
2650 #ifdef DIAG_DEVELOPER
2651 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2652 {
2653 PrintNutritionsData();
2654 return true;
2655 }
2656 #endif
2657
2658 return false;
2659 }
2660
2662 {
2663 string debug_output;
2664
2665 debug_output = super.GetDebugText();
2666
2669
2670 return debug_output;
2671 }
2672
2673
2674
2675
2676
2678 {
2679 float ret = super.GetBaitEffectivity();
2680
2682 {
2683 ret *= 0.5;
2684 }
2685
2686 return ret;
2687 }
2688
2690 {
2692 }
2693
2695 {
2697 }
2698
2700 {
2702 }
2703
2704 #ifdef DIAG_DEVELOPER
2705 private void PrintNutritionsData()
2706 {
2707 string nutritionsData = "";
2708
2711
2713 if (profile)
2714 {
2715 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2717 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2721 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2723
2726
2727 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2729 }
2730
2731 nutritionsData += "-----\n";
2732
2734 }
2735 #endif
2736
2738
2741 {
2743 }
2744}
2745
2747{
2749};
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.