1655{
1657
1665
1675
1677
1679 {
1681 {
1683
1685 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1686
1690 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1691 }
1692 }
1693
1695 {
1697
1699 }
1700
1702 {
1703 super.EEDelete(parent);
1704
1706
1709 }
1710
1712 {
1713 super.EEItemLocationChanged(oldLoc, newLoc);
1714
1717 {
1718 switch (oldLoc.GetParent().GetType())
1719 {
1720 case "FryingPan":
1721 case "Pot":
1722 case "Cauldron":
1723 case "SharpWoodenStick":
1725 break;
1726 }
1727
1730 {
1732 }
1733 }
1734
1735 if (oldLoc.IsValid())
1737
1740 }
1741
1743 {
1746 }
1747
1749 {
1752
1753 return true;
1754 }
1755
1757 {
1759 {
1761 }
1762 }
1763
1766 {
1767 int foodStageType;
1768
1770 if (foodStage)
1771 foodStageType = foodStage.GetFoodStageType();
1772
1777
1778 return agentsIn;
1779 }
1780
1781
1783 {
1784 return false;
1785 }
1786
1788 {
1789 return false;
1790 }
1791
1793 {
1795 {
1797 {
1800
1803
1804 default:
1805 return super.GetTemperatureFreezeTime();
1806 }
1807 }
1808
1809 return super.GetTemperatureFreezeTime();
1810 }
1811
1813 {
1815 {
1817 {
1820
1823
1824 default:
1825 return super.GetTemperatureThawTime();
1826 }
1827 }
1828
1829 return super.GetTemperatureThawTime();
1830 }
1831
1833 {
1835 }
1836
1837
1838
1839
1841 {
1842 SetSynchDirty();
1843 }
1844
1846 {
1847 super.OnVariablesSynchronized();
1848
1849
1850
1851
1853 {
1855 }
1856 else
1857 {
1859 }
1860
1863 }
1864
1865
1866
1867
1869 {
1872
1874 }
1875
1877 {
1878 string soundName = "";
1879
1882
1884 {
1886 }
1887 else
1888 {
1890 {
1892 {
1897 else
1898 soundName = "";
1899 break;
1900 }
1901
1903 {
1908 else
1909 soundName = "";
1910 break;
1911 }
1912
1914 {
1919 else
1920 soundName = "";
1921 break;
1922 }
1923
1924 default:
1925 soundName = "";
1926 break;
1927 }
1928
1930 {
1931 if (soundName == "")
1932 {
1934 }
1935 else
1936 {
1938 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1939 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1941 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1942 {
1944 }
1945 }
1946 }
1947 }
1948
1950 }
1951
1953 {
1956 }
1957
1958
1959
1960
1962 {
1963 super.OnStoreSave(ctx);
1964
1966 {
1968 }
1969
1970
1973 }
1974
1976 {
1977 if (!super.OnStoreLoad(ctx, version))
1978 return false;
1979
1981 {
1983 return false;
1984 }
1985
1986 if (version >= 115)
1987 {
1989 {
1991 return false;
1992 }
1994 {
1996 return false;
1997 }
1998 }
1999
2002
2003 return true;
2004 }
2005
2007 {
2008 super.AfterStoreLoad();
2009
2011 }
2012
2013
2015 {
2017 }
2018
2019
2021 {
2022 return false;
2023 }
2024
2026 {
2027 return false;
2028 }
2029
2031 {
2032 return false;
2033 }
2034
2036 {
2037 return false;
2038 }
2039
2040
2041
2042
2043
2045 {
2048 {
2049 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2050 }
2051 else if (classname != "" && food_stage)
2052 {
2053 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2054 }
2055 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2057
2058 }
2059
2061 {
2064 {
2066 }
2067 else if (classname != "" && food_stage)
2068 {
2069 return FoodStage.GetEnergy(null, food_stage, classname);
2070 }
2071 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2073 }
2074
2076 {
2079 {
2081 }
2082 else if (classname != "" && food_stage)
2083 {
2084 return FoodStage.GetWater(null, food_stage, classname);
2085 }
2086 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2088 }
2089
2091 {
2094 {
2095 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2096 }
2097 else if (classname != "" && food_stage)
2098 {
2099 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2100 }
2101 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2103
2104 }
2105
2107 {
2110 {
2111 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2112 }
2113 else if (classname != "" && food_stage)
2114 {
2115 return FoodStage.GetToxicity(null, food_stage, classname);
2116 }
2117 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2119 }
2120
2122 {
2125 {
2127 }
2128 else if (classname != "" && food_stage)
2129 {
2130 return FoodStage.GetAgents(null, food_stage, classname);
2131 }
2132 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2134 }
2135
2137 {
2140 {
2141 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2142 }
2143 else if (classname != "" && food_stage)
2144 {
2145 return FoodStage.GetDigestibility(null, food_stage, classname);
2146 }
2147 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2149 }
2150
2152 {
2155 {
2156 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2157 }
2158 else if (className != "" && foodStage)
2159 {
2160 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2161 }
2162 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2164 }
2165
2167 {
2177
2178 return profile;
2179 }
2180
2181
2182
2183
2185 {
2187 }
2188
2189
2191 {
2193 {
2195 }
2196
2197 return false;
2198 }
2199
2201 {
2203 {
2205 }
2206
2207 return false;
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
2250
2252 {
2254 }
2255
2257 {
2258 return GetFoodStage().GetNextFoodStageType( cooking_method );
2259 }
2260
2262 {
2263 return GetFoodStage().GetFoodStageName( food_stage_type );
2264 }
2265
2267 {
2268 return GetFoodStage().CanChangeToNewStage( cooking_method );
2269 }
2270
2271
2273 {
2274 if ( !source.GetFoodStage())
2275 return;
2280 }
2281
2284 {
2287 }
2288
2291 {
2292 switch (stageNew)
2293 {
2298 break;
2299
2302 break;
2303 }
2304 }
2305
2306
2307
2308
2309
2311 {
2313 }
2314
2316 {
2318
2319
2321 }
2322
2324 {
2326 {
2329 }
2330 }
2331
2332
2334 {
2336 if (player)
2337 {
2339 player.ServerReplaceItemInHandsWithNew(lambda);
2340 }
2341 else
2342 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2343 }
2344
2346 {
2348 }
2349
2351 {
2352 super.SetActions();
2353
2356 }
2357
2359 {
2360 #ifndef SERVER
2362 {
2364
2367 }
2368 #endif
2369 }
2370
2372 {
2373 #ifndef SERVER
2375 {
2379 }
2380 #endif
2381 }
2382
2384 {
2385 return false;
2386 }
2387
2389 {
2391 }
2392
2393 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2394 {
2396
2397 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2399 if ( hasRootAsPlayer )
2401
2402
2403
2404
2405
2406
2407
2409 {
2410
2412 {
2414 {
2418 break;
2419
2423 break;
2424
2428 break;
2429
2433 default:
2436 return;
2437 }
2438
2439
2440 }
2441
2443
2445 {
2447 {
2448
2450 {
2452 }
2454 {
2457 {
2459 }
2460 else
2461 {
2463 {
2465 }
2466 else
2467 {
2469 }
2470 }
2471 }
2472 }
2473 }
2474
2475 }
2477 {
2478
2480 {
2482 {
2486 break;
2487
2491 break;
2492
2496 break;
2497
2501 break;
2502
2505 default:
2508 return;
2509 }
2510 }
2511
2513
2515 {
2517 {
2518
2520 {
2522 }
2523 }
2524 }
2525 }
2527 {
2528
2530 {
2532 {
2536 break;
2537
2540 default:
2543 return;
2544 }
2545 }
2546
2548
2550 {
2552 {
2553
2555 {
2557 }
2558 }
2559 }
2560 }
2561 else
2562 {
2563
2565
2567 {
2570
2571 }
2572 else
2573 {
2575 {
2578 }
2579 }
2580 }
2581 }
2582
2584 {
2585 if (
GetGame().IsDedicatedServer())
2586 return;
2587
2589 {
2591 GetInventory().GetCurrentInventoryLocation(invLoc);
2593 {
2595 if (ptcMgr)
2596 {
2601 }
2602 }
2603 }
2605 {
2607 {
2610 return;
2611 }
2612
2614 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2616 {
2619 }
2620 }
2621 }
2622
2623 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2624 {
2625 super.GetDebugActions(outputList);
2626
2628 {
2632 }
2633 }
2634
2636 {
2637 super.OnAction(action_id, player, ctx);
2638
2640 {
2641 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2642 {
2644 if (food_stage_prev <= 0)
2645 {
2647 }
2649 return true;
2650 }
2651 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2652 {
2655 {
2657 }
2659 return true;
2660 }
2661
2662 }
2663
2664 #ifdef DIAG_DEVELOPER
2665 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2666 {
2667 PrintNutritionsData();
2668 return true;
2669 }
2670 #endif
2671
2672 return false;
2673 }
2674
2676 {
2677 string debug_output;
2678
2679 debug_output = super.GetDebugText();
2680
2683
2684 return debug_output;
2685 }
2686
2687
2688
2689
2690
2692 {
2693 float ret = super.GetBaitEffectivity();
2694
2696 {
2697 ret *= 0.5;
2698 }
2699
2700 return ret;
2701 }
2702
2704 {
2706 }
2707
2709 {
2711 }
2712
2714 {
2716 }
2717
2718 #ifdef DIAG_DEVELOPER
2719 private void PrintNutritionsData()
2720 {
2721 string nutritionsData = "";
2722
2725
2727 if (profile)
2728 {
2729 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2731 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2735 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2737
2740
2741 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2743 }
2744
2745 nutritionsData += "-----\n";
2746
2748 }
2749 #endif
2750
2752
2755 {
2757 }
2758}
2759
2761{
2763};
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.