1622{
1624
1632
1642
1644
1646 {
1648 {
1650
1652 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1653
1657 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1658 }
1659 }
1660
1662 {
1664
1666 }
1667
1669 {
1670 super.EEDelete(parent);
1671
1673
1676 }
1677
1679 {
1680 super.EEItemLocationChanged(oldLoc, newLoc);
1681
1684 {
1685 switch (oldLoc.GetParent().GetType())
1686 {
1687 case "FryingPan":
1688 case "Pot":
1689 case "Cauldron":
1690 case "SharpWoodenStick":
1692 break;
1693 }
1694
1697 {
1699 }
1700 }
1701
1702 if (oldLoc.IsValid())
1704
1707 }
1708
1710 {
1713 }
1714
1716 {
1719
1720 return true;
1721 }
1722
1724 {
1726 {
1728 }
1729 }
1730
1733 {
1734 int foodStageType;
1735
1737 if (foodStage)
1738 foodStageType = foodStage.GetFoodStageType();
1739
1744
1745 return agentsIn;
1746 }
1747
1748
1750 {
1751 return false;
1752 }
1753
1755 {
1756 return false;
1757 }
1758
1760 {
1762 {
1764 {
1767
1770
1771 default:
1772 return super.GetTemperatureFreezeTime();
1773 }
1774 }
1775
1776 return super.GetTemperatureFreezeTime();
1777 }
1778
1780 {
1782 {
1784 {
1787
1790
1791 default:
1792 return super.GetTemperatureThawTime();
1793 }
1794 }
1795
1796 return super.GetTemperatureThawTime();
1797 }
1798
1800 {
1802 }
1803
1804
1805
1806
1808 {
1809 SetSynchDirty();
1810 }
1811
1813 {
1814 super.OnVariablesSynchronized();
1815
1816
1817
1818
1820 {
1822 }
1823 else
1824 {
1826 }
1827
1830 }
1831
1832
1833
1834
1836 {
1839
1841 }
1842
1844 {
1845 string soundName = "";
1846
1849
1851 {
1853 }
1854 else
1855 {
1857 {
1859 {
1864 else
1865 soundName = "";
1866 break;
1867 }
1868
1870 {
1875 else
1876 soundName = "";
1877 break;
1878 }
1879
1881 {
1886 else
1887 soundName = "";
1888 break;
1889 }
1890
1891 default:
1892 soundName = "";
1893 break;
1894 }
1895
1897 {
1898 if (soundName == "")
1899 {
1901 }
1902 else
1903 {
1905 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1906 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1908 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1909 {
1911 }
1912 }
1913 }
1914 }
1915
1917 }
1918
1920 {
1923 }
1924
1925
1926
1927
1929 {
1930 super.OnStoreSave(ctx);
1931
1933 {
1935 }
1936
1937
1940 }
1941
1943 {
1944 if (!super.OnStoreLoad(ctx, version))
1945 return false;
1946
1948 {
1950 return false;
1951 }
1952
1953 if (version >= 115)
1954 {
1956 {
1958 return false;
1959 }
1961 {
1963 return false;
1964 }
1965 }
1966
1969
1970 return true;
1971 }
1972
1974 {
1975 super.AfterStoreLoad();
1976
1978 }
1979
1980
1982 {
1984 }
1985
1986
1988 {
1989 return false;
1990 }
1991
1993 {
1994 return false;
1995 }
1996
1998 {
1999 return false;
2000 }
2001
2003 {
2004 return false;
2005 }
2006
2007
2008
2009
2010
2012 {
2015 {
2016 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2017 }
2018 else if (classname != "" && food_stage)
2019 {
2020 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2021 }
2022 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2024
2025 }
2026
2028 {
2031 {
2033 }
2034 else if (classname != "" && food_stage)
2035 {
2036 return FoodStage.GetEnergy(null, food_stage, classname);
2037 }
2038 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2040 }
2041
2043 {
2046 {
2048 }
2049 else if (classname != "" && food_stage)
2050 {
2051 return FoodStage.GetWater(null, food_stage, classname);
2052 }
2053 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2055 }
2056
2058 {
2061 {
2062 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2063 }
2064 else if (classname != "" && food_stage)
2065 {
2066 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2067 }
2068 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2070
2071 }
2072
2074 {
2077 {
2078 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2079 }
2080 else if (classname != "" && food_stage)
2081 {
2082 return FoodStage.GetToxicity(null, food_stage, classname);
2083 }
2084 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2086 }
2087
2089 {
2092 {
2094 }
2095 else if (classname != "" && food_stage)
2096 {
2097 return FoodStage.GetAgents(null, food_stage, classname);
2098 }
2099 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2101 }
2102
2104 {
2107 {
2108 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2109 }
2110 else if (classname != "" && food_stage)
2111 {
2112 return FoodStage.GetDigestibility(null, food_stage, classname);
2113 }
2114 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2116 }
2117
2119 {
2122 {
2123 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2124 }
2125 else if (className != "" && foodStage)
2126 {
2127 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2128 }
2129 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2131 }
2132
2134 {
2144
2145 return profile;
2146 }
2147
2148
2149
2150
2152 {
2154 }
2155
2156
2158 {
2160 {
2162 }
2163
2164 return false;
2165 }
2166
2168 {
2170 {
2172 }
2173
2174 return false;
2175 }
2176
2178 {
2180 {
2182 }
2183
2184 return false;
2185 }
2186
2188 {
2190 {
2192 }
2193
2194 return false;
2195 }
2196
2198 {
2200 {
2202 }
2203
2204 return false;
2205 }
2206
2208 {
2210 {
2212 }
2213
2214 return false;
2215 }
2216
2217
2219 {
2221 }
2222
2224 {
2225 return GetFoodStage().GetNextFoodStageType( cooking_method );
2226 }
2227
2229 {
2230 return GetFoodStage().GetFoodStageName( food_stage_type );
2231 }
2232
2234 {
2235 return GetFoodStage().CanChangeToNewStage( cooking_method );
2236 }
2237
2238
2240 {
2241 if ( !source.GetFoodStage())
2242 return;
2247 }
2248
2251 {
2254 }
2255
2258 {
2259 switch (stageNew)
2260 {
2265 break;
2266
2269 break;
2270 }
2271 }
2272
2273
2274
2275
2276
2278 {
2280 }
2281
2283 {
2285
2286
2288 }
2289
2291 {
2293 {
2296 }
2297 }
2298
2299
2301 {
2303 if (player)
2304 {
2306 player.ServerReplaceItemInHandsWithNew(lambda);
2307 }
2308 else
2309 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2310 }
2311
2313 {
2315 }
2316
2318 {
2319 super.SetActions();
2320
2323 }
2324
2326 {
2327 #ifndef SERVER
2329 {
2331
2334 }
2335 #endif
2336 }
2337
2339 {
2340 #ifndef SERVER
2342 {
2346 }
2347 #endif
2348 }
2349
2351 {
2352 return false;
2353 }
2354
2356 {
2358 }
2359
2360 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2361 {
2363
2364 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2366 if ( hasRootAsPlayer )
2368
2369
2370
2371
2372
2373
2374
2376 {
2377
2379 {
2381 {
2385 break;
2386
2390 break;
2391
2395 break;
2396
2400 default:
2403 return;
2404 }
2405
2406
2407 }
2408
2410
2412 {
2414 {
2415
2417 {
2419 }
2421 {
2424 {
2426 }
2427 else
2428 {
2430 {
2432 }
2433 else
2434 {
2436 }
2437 }
2438 }
2439 }
2440 }
2441
2442 }
2444 {
2445
2447 {
2449 {
2453 break;
2454
2458 break;
2459
2463 break;
2464
2468 break;
2469
2472 default:
2475 return;
2476 }
2477 }
2478
2480
2482 {
2484 {
2485
2487 {
2489 }
2490 }
2491 }
2492 }
2494 {
2495
2497 {
2499 {
2503 break;
2504
2507 default:
2510 return;
2511 }
2512 }
2513
2515
2517 {
2519 {
2520
2522 {
2524 }
2525 }
2526 }
2527 }
2528 else
2529 {
2530
2532
2534 {
2537
2538 }
2539 else
2540 {
2542 {
2545 }
2546 }
2547 }
2548 }
2549
2551 {
2552 if (
GetGame().IsDedicatedServer())
2553 return;
2554
2556 {
2558 GetInventory().GetCurrentInventoryLocation(invLoc);
2560 {
2562 if (ptcMgr)
2563 {
2568 }
2569 }
2570 }
2572 {
2574 {
2577 return;
2578 }
2579
2581 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2583 {
2586 }
2587 }
2588 }
2589
2590 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2591 {
2593 {
2598 }
2599
2600 super.GetDebugActions(outputList);
2601 }
2602
2604 {
2605 super.OnAction(action_id, player, ctx);
2606
2608 {
2609 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2610 {
2612 if (food_stage_prev <= 0)
2613 {
2615 }
2617 return true;
2618 }
2619 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2620 {
2623 {
2625 }
2627 return true;
2628 }
2629
2630 }
2631
2632 #ifdef DIAG_DEVELOPER
2633 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2634 {
2635 PrintNutritionsData();
2636 return true;
2637 }
2638 #endif
2639
2640 return false;
2641 }
2642
2644 {
2645 string debug_output;
2646
2647 debug_output = super.GetDebugText();
2648
2651
2652 return debug_output;
2653 }
2654
2655
2656
2657
2658
2660 {
2661 float ret = super.GetBaitEffectivity();
2662
2664 {
2665 ret *= 0.5;
2666 }
2667
2668 return ret;
2669 }
2670
2672 {
2674 }
2675
2677 {
2679 }
2680
2682 {
2684 }
2685
2686 #ifdef DIAG_DEVELOPER
2687 private void PrintNutritionsData()
2688 {
2689 string nutritionsData = "";
2690
2693
2695 if (profile)
2696 {
2697 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2699 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2703 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2705
2708
2709 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2711 }
2712
2713 nutritionsData += "-----\n";
2714
2716 }
2717 #endif
2718
2720
2723 {
2725 }
2726}
2727
2729{
2731};
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.