1675{
1677
1685
1695
1697
1699 {
1701 {
1703
1705 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1706
1710 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1711 }
1712 }
1713
1715 {
1717
1719 }
1720
1722 {
1723 super.EEDelete(parent);
1724
1726
1729 }
1730
1732 {
1733 super.EEItemLocationChanged(oldLoc, newLoc);
1734
1737 {
1738 switch (oldLoc.GetParent().GetType())
1739 {
1740 case "FryingPan":
1741 case "Pot":
1742 case "Cauldron":
1743 case "SharpWoodenStick":
1745 break;
1746 }
1747
1750 {
1752 }
1753 }
1754
1755 if (oldLoc.IsValid())
1757
1760 }
1761
1763 {
1766 }
1767
1769 {
1772
1773 return true;
1774 }
1775
1777 {
1779 {
1781 }
1782 }
1783
1786 {
1787 int foodStageType;
1788
1790 if (foodStage)
1791 foodStageType = foodStage.GetFoodStageType();
1792
1797
1798 return agentsIn;
1799 }
1800
1801
1803 {
1804 return false;
1805 }
1806
1808 {
1809 return false;
1810 }
1811
1813 {
1815 {
1817 {
1820
1823
1824 default:
1825 return super.GetTemperatureFreezeTime();
1826 }
1827 }
1828
1829 return super.GetTemperatureFreezeTime();
1830 }
1831
1833 {
1835 {
1837 {
1840
1843
1844 default:
1845 return super.GetTemperatureThawTime();
1846 }
1847 }
1848
1849 return super.GetTemperatureThawTime();
1850 }
1851
1853 {
1855 }
1856
1857
1858
1859
1861 {
1862 SetSynchDirty();
1863 }
1864
1866 {
1867 super.OnVariablesSynchronized();
1868
1869
1870
1871
1873 {
1875 }
1876 else
1877 {
1879 }
1880
1883 }
1884
1885
1886
1887
1889 {
1892
1894 }
1895
1897 {
1898 string soundName = "";
1899
1902
1904 {
1906 }
1907 else
1908 {
1910 {
1912 {
1917 else
1918 soundName = "";
1919 break;
1920 }
1921
1923 {
1928 else
1929 soundName = "";
1930 break;
1931 }
1932
1934 {
1939 else
1940 soundName = "";
1941 break;
1942 }
1943
1944 default:
1945 soundName = "";
1946 break;
1947 }
1948
1950 {
1951 if (soundName == "")
1952 {
1954 }
1955 else
1956 {
1958 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1959 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1961 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1962 {
1964 }
1965 }
1966 }
1967 }
1968
1970 }
1971
1973 {
1976 }
1977
1978
1979
1980
1982 {
1983 super.OnStoreSave(ctx);
1984
1986 {
1988 }
1989
1990
1993 }
1994
1996 {
1997 if (!super.OnStoreLoad(ctx, version))
1998 return false;
1999
2001 {
2003 return false;
2004 }
2005
2006 if (version >= 115)
2007 {
2009 {
2011 return false;
2012 }
2014 {
2016 return false;
2017 }
2018 }
2019
2022
2023 return true;
2024 }
2025
2027 {
2028 super.AfterStoreLoad();
2029
2031 }
2032
2033
2035 {
2037 }
2038
2039
2041 {
2042 return false;
2043 }
2044
2046 {
2047 return false;
2048 }
2049
2051 {
2052 return false;
2053 }
2054
2056 {
2057 return false;
2058 }
2059
2060
2061
2062
2063
2065 {
2068 {
2069 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2070 }
2071 else if (classname != "" && food_stage)
2072 {
2073 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2074 }
2075 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2077
2078 }
2079
2081 {
2084 {
2086 }
2087 else if (classname != "" && food_stage)
2088 {
2089 return FoodStage.GetEnergy(null, food_stage, classname);
2090 }
2091 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2093 }
2094
2096 {
2099 {
2101 }
2102 else if (classname != "" && food_stage)
2103 {
2104 return FoodStage.GetWater(null, food_stage, classname);
2105 }
2106 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2108 }
2109
2111 {
2114 {
2115 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2116 }
2117 else if (classname != "" && food_stage)
2118 {
2119 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2120 }
2121 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2123
2124 }
2125
2127 {
2130 {
2131 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2132 }
2133 else if (classname != "" && food_stage)
2134 {
2135 return FoodStage.GetToxicity(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.GetAgents(null, food_stage, classname);
2151 }
2152 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2154 }
2155
2157 {
2160 {
2161 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2162 }
2163 else if (classname != "" && food_stage)
2164 {
2165 return FoodStage.GetDigestibility(null, food_stage, classname);
2166 }
2167 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2169 }
2170
2172 {
2175 {
2176 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2177 }
2178 else if (className != "" && foodStage)
2179 {
2180 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2181 }
2182 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2184 }
2185
2187 {
2197
2198 return profile;
2199 }
2200
2201
2202
2203
2205 {
2207 }
2208
2209
2211 {
2213 {
2215 }
2216
2217 return false;
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
2270
2272 {
2274 }
2275
2277 {
2278 return GetFoodStage().GetNextFoodStageType( cooking_method );
2279 }
2280
2282 {
2283 return GetFoodStage().GetFoodStageName( food_stage_type );
2284 }
2285
2287 {
2288 return GetFoodStage().CanChangeToNewStage( cooking_method );
2289 }
2290
2291
2293 {
2294 if ( !source.GetFoodStage())
2295 return;
2300 }
2301
2304 {
2307 }
2308
2311 {
2312 switch (stageNew)
2313 {
2318 break;
2319
2322 break;
2323 }
2324 }
2325
2326
2327
2328
2329
2331 {
2333 }
2334
2336 {
2338
2339
2341 }
2342
2344 {
2346 {
2349 }
2350 }
2351
2352
2354 {
2356 if (player)
2357 {
2359 player.ServerReplaceItemInHandsWithNew(lambda);
2360 }
2361 else
2362 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2363 }
2364
2366 {
2368 }
2369
2371 {
2372 super.SetActions();
2373
2376 }
2377
2379 {
2380 #ifndef SERVER
2382 {
2384
2387 }
2388 #endif
2389 }
2390
2392 {
2393 #ifndef SERVER
2395 {
2399 }
2400 #endif
2401 }
2402
2404 {
2405 return false;
2406 }
2407
2409 {
2411 }
2412
2413 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2414 {
2416
2417 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2419 if ( hasRootAsPlayer )
2421
2422
2423
2424
2425
2426
2427
2429 {
2430
2432 {
2434 {
2438 break;
2439
2443 break;
2444
2448 break;
2449
2453 default:
2456 return;
2457 }
2458
2459
2460 }
2461
2463
2465 {
2467 {
2468
2470 {
2472 }
2474 {
2477 {
2479 }
2480 else
2481 {
2483 {
2485 }
2486 else
2487 {
2489 }
2490 }
2491 }
2492 }
2493 }
2494
2495 }
2497 {
2498
2500 {
2502 {
2506 break;
2507
2511 break;
2512
2516 break;
2517
2521 break;
2522
2525 default:
2528 return;
2529 }
2530 }
2531
2533
2535 {
2537 {
2538
2540 {
2542 }
2543 }
2544 }
2545 }
2547 {
2548
2550 {
2552 {
2556 break;
2557
2560 default:
2563 return;
2564 }
2565 }
2566
2568
2570 {
2572 {
2573
2575 {
2577 }
2578 }
2579 }
2580 }
2581 else
2582 {
2583
2585
2587 {
2590
2591 }
2592 else
2593 {
2595 {
2598 }
2599 }
2600 }
2601 }
2602
2604 {
2605 if (
GetGame().IsDedicatedServer())
2606 return;
2607
2609 {
2611 GetInventory().GetCurrentInventoryLocation(invLoc);
2613 {
2615 if (ptcMgr)
2616 {
2621 }
2622 }
2623 }
2625 {
2627 {
2630 return;
2631 }
2632
2634 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2636 {
2639 }
2640 }
2641 }
2642
2643 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2644 {
2645 super.GetDebugActions(outputList);
2646
2648 {
2652 }
2653 }
2654
2656 {
2657 super.OnAction(action_id, player, ctx);
2658
2660 {
2661 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2662 {
2664 if (food_stage_prev <= 0)
2665 {
2667 }
2669 return true;
2670 }
2671 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2672 {
2675 {
2677 }
2679 return true;
2680 }
2681
2682 }
2683
2684 #ifdef DIAG_DEVELOPER
2685 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2686 {
2687 PrintNutritionsData();
2688 return true;
2689 }
2690 #endif
2691
2692 return false;
2693 }
2694
2696 {
2697 string debug_output;
2698
2699 debug_output = super.GetDebugText();
2700
2703
2704 return debug_output;
2705 }
2706
2707
2708
2709
2710
2712 {
2713 float ret = super.GetBaitEffectivity();
2714
2716 {
2717 ret *= 0.5;
2718 }
2719
2720 return ret;
2721 }
2722
2724 {
2726 }
2727
2729 {
2731 }
2732
2734 {
2736 }
2737
2738 #ifdef DIAG_DEVELOPER
2739 private void PrintNutritionsData()
2740 {
2741 string nutritionsData = "";
2742
2745
2747 if (profile)
2748 {
2749 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2751 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2755 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2757
2760
2761 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2763 }
2764
2765 nutritionsData += "-----\n";
2766
2768 }
2769 #endif
2770
2772
2775 {
2777 }
2778}
2779
2781{
2783};
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.