1666{
1668
1676
1686
1688
1690 {
1692 {
1694
1696 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1697
1701 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1702 }
1703 }
1704
1706 {
1708
1710 }
1711
1713 {
1714 super.EEDelete(parent);
1715
1717
1720 }
1721
1723 {
1724 super.EEItemLocationChanged(oldLoc, newLoc);
1725
1728 {
1729 switch (oldLoc.GetParent().GetType())
1730 {
1731 case "FryingPan":
1732 case "Pot":
1733 case "Cauldron":
1734 case "SharpWoodenStick":
1736 break;
1737 }
1738
1741 {
1743 }
1744 }
1745
1746 if (oldLoc.IsValid())
1748
1751 }
1752
1754 {
1757 }
1758
1760 {
1763
1764 return true;
1765 }
1766
1768 {
1770 {
1772 }
1773 }
1774
1777 {
1778 int foodStageType;
1779
1781 if (foodStage)
1782 foodStageType = foodStage.GetFoodStageType();
1783
1788
1789 return agentsIn;
1790 }
1791
1792
1794 {
1795 return false;
1796 }
1797
1799 {
1800 return false;
1801 }
1802
1804 {
1806 {
1808 {
1811
1814
1815 default:
1816 return super.GetTemperatureFreezeTime();
1817 }
1818 }
1819
1820 return super.GetTemperatureFreezeTime();
1821 }
1822
1824 {
1826 {
1828 {
1831
1834
1835 default:
1836 return super.GetTemperatureThawTime();
1837 }
1838 }
1839
1840 return super.GetTemperatureThawTime();
1841 }
1842
1844 {
1846 }
1847
1848
1849
1850
1852 {
1853 SetSynchDirty();
1854 }
1855
1857 {
1858 super.OnVariablesSynchronized();
1859
1860
1861
1862
1864 {
1866 }
1867 else
1868 {
1870 }
1871
1874 }
1875
1876
1877
1878
1880 {
1883
1885 }
1886
1888 {
1889 string soundName = "";
1890
1893
1895 {
1897 }
1898 else
1899 {
1901 {
1903 {
1908 else
1909 soundName = "";
1910 break;
1911 }
1912
1914 {
1919 else
1920 soundName = "";
1921 break;
1922 }
1923
1925 {
1930 else
1931 soundName = "";
1932 break;
1933 }
1934
1935 default:
1936 soundName = "";
1937 break;
1938 }
1939
1941 {
1942 if (soundName == "")
1943 {
1945 }
1946 else
1947 {
1949 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1950 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1952 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1953 {
1955 }
1956 }
1957 }
1958 }
1959
1961 }
1962
1964 {
1967 }
1968
1969
1970
1971
1973 {
1974 super.OnStoreSave(ctx);
1975
1977 {
1979 }
1980
1981
1984 }
1985
1987 {
1988 if (!super.OnStoreLoad(ctx, version))
1989 return false;
1990
1992 {
1994 return false;
1995 }
1996
1997 if (version >= 115)
1998 {
2000 {
2002 return false;
2003 }
2005 {
2007 return false;
2008 }
2009 }
2010
2013
2014 return true;
2015 }
2016
2018 {
2019 super.AfterStoreLoad();
2020
2022 }
2023
2024
2026 {
2028 }
2029
2030
2032 {
2033 return false;
2034 }
2035
2037 {
2038 return false;
2039 }
2040
2042 {
2043 return false;
2044 }
2045
2047 {
2048 return false;
2049 }
2050
2051
2052
2053
2054
2056 {
2059 {
2060 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2061 }
2062 else if (classname != "" && food_stage)
2063 {
2064 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2065 }
2066 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2068
2069 }
2070
2072 {
2075 {
2077 }
2078 else if (classname != "" && food_stage)
2079 {
2080 return FoodStage.GetEnergy(null, food_stage, classname);
2081 }
2082 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2084 }
2085
2087 {
2090 {
2092 }
2093 else if (classname != "" && food_stage)
2094 {
2095 return FoodStage.GetWater(null, food_stage, classname);
2096 }
2097 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2099 }
2100
2102 {
2105 {
2106 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2107 }
2108 else if (classname != "" && food_stage)
2109 {
2110 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2111 }
2112 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2114
2115 }
2116
2118 {
2121 {
2122 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2123 }
2124 else if (classname != "" && food_stage)
2125 {
2126 return FoodStage.GetToxicity(null, food_stage, classname);
2127 }
2128 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2130 }
2131
2133 {
2136 {
2138 }
2139 else if (classname != "" && food_stage)
2140 {
2141 return FoodStage.GetAgents(null, food_stage, classname);
2142 }
2143 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2145 }
2146
2148 {
2151 {
2152 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2153 }
2154 else if (classname != "" && food_stage)
2155 {
2156 return FoodStage.GetDigestibility(null, food_stage, classname);
2157 }
2158 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2160 }
2161
2163 {
2166 {
2167 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2168 }
2169 else if (className != "" && foodStage)
2170 {
2171 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2172 }
2173 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2175 }
2176
2178 {
2188
2189 return profile;
2190 }
2191
2192
2193
2194
2196 {
2198 }
2199
2200
2202 {
2204 {
2206 }
2207
2208 return false;
2209 }
2210
2212 {
2214 {
2216 }
2217
2218 return false;
2219 }
2220
2222 {
2224 {
2226 }
2227
2228 return false;
2229 }
2230
2232 {
2234 {
2236 }
2237
2238 return false;
2239 }
2240
2242 {
2244 {
2246 }
2247
2248 return false;
2249 }
2250
2252 {
2254 {
2256 }
2257
2258 return false;
2259 }
2260
2261
2263 {
2265 }
2266
2268 {
2269 return GetFoodStage().GetNextFoodStageType( cooking_method );
2270 }
2271
2273 {
2274 return GetFoodStage().GetFoodStageName( food_stage_type );
2275 }
2276
2278 {
2279 return GetFoodStage().CanChangeToNewStage( cooking_method );
2280 }
2281
2282
2284 {
2285 if ( !source.GetFoodStage())
2286 return;
2291 }
2292
2295 {
2298 }
2299
2302 {
2303 switch (stageNew)
2304 {
2309 break;
2310
2313 break;
2314 }
2315 }
2316
2317
2318
2319
2320
2322 {
2324 }
2325
2327 {
2329
2330
2332 }
2333
2335 {
2337 {
2340 }
2341 }
2342
2343
2345 {
2347 if (player)
2348 {
2350 player.ServerReplaceItemInHandsWithNew(lambda);
2351 }
2352 else
2353 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2354 }
2355
2357 {
2359 }
2360
2362 {
2363 super.SetActions();
2364
2367 }
2368
2370 {
2371 #ifndef SERVER
2373 {
2375
2378 }
2379 #endif
2380 }
2381
2383 {
2384 #ifndef SERVER
2386 {
2390 }
2391 #endif
2392 }
2393
2395 {
2396 return false;
2397 }
2398
2400 {
2402 }
2403
2404 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2405 {
2407
2408 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2410 if ( hasRootAsPlayer )
2412
2413
2414
2415
2416
2417
2418
2420 {
2421
2423 {
2425 {
2429 break;
2430
2434 break;
2435
2439 break;
2440
2444 default:
2447 return;
2448 }
2449
2450
2451 }
2452
2454
2456 {
2458 {
2459
2461 {
2463 }
2465 {
2468 {
2470 }
2471 else
2472 {
2474 {
2476 }
2477 else
2478 {
2480 }
2481 }
2482 }
2483 }
2484 }
2485
2486 }
2488 {
2489
2491 {
2493 {
2497 break;
2498
2502 break;
2503
2507 break;
2508
2512 break;
2513
2516 default:
2519 return;
2520 }
2521 }
2522
2524
2526 {
2528 {
2529
2531 {
2533 }
2534 }
2535 }
2536 }
2538 {
2539
2541 {
2543 {
2547 break;
2548
2551 default:
2554 return;
2555 }
2556 }
2557
2559
2561 {
2563 {
2564
2566 {
2568 }
2569 }
2570 }
2571 }
2572 else
2573 {
2574
2576
2578 {
2581
2582 }
2583 else
2584 {
2586 {
2589 }
2590 }
2591 }
2592 }
2593
2595 {
2596 if (
GetGame().IsDedicatedServer())
2597 return;
2598
2600 {
2602 GetInventory().GetCurrentInventoryLocation(invLoc);
2604 {
2606 if (ptcMgr)
2607 {
2612 }
2613 }
2614 }
2616 {
2618 {
2621 return;
2622 }
2623
2625 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2627 {
2630 }
2631 }
2632 }
2633
2634 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2635 {
2637 {
2642 }
2643
2644 super.GetDebugActions(outputList);
2645 }
2646
2648 {
2649 super.OnAction(action_id, player, ctx);
2650
2652 {
2653 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2654 {
2656 if (food_stage_prev <= 0)
2657 {
2659 }
2661 return true;
2662 }
2663 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2664 {
2667 {
2669 }
2671 return true;
2672 }
2673
2674 }
2675
2676 #ifdef DIAG_DEVELOPER
2677 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2678 {
2679 PrintNutritionsData();
2680 return true;
2681 }
2682 #endif
2683
2684 return false;
2685 }
2686
2688 {
2689 string debug_output;
2690
2691 debug_output = super.GetDebugText();
2692
2695
2696 return debug_output;
2697 }
2698
2699
2700
2701
2702
2704 {
2705 float ret = super.GetBaitEffectivity();
2706
2708 {
2709 ret *= 0.5;
2710 }
2711
2712 return ret;
2713 }
2714
2716 {
2718 }
2719
2721 {
2723 }
2724
2726 {
2728 }
2729
2730 #ifdef DIAG_DEVELOPER
2731 private void PrintNutritionsData()
2732 {
2733 string nutritionsData = "";
2734
2737
2739 if (profile)
2740 {
2741 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2743 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2747 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2749
2752
2753 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2755 }
2756
2757 nutritionsData += "-----\n";
2758
2760 }
2761 #endif
2762
2764
2767 {
2769 }
2770}
2771
2773{
2775};
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.