1546{
1548
1556
1566
1568
1570 {
1572 {
1574
1576 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1577
1581 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1582 }
1583 }
1584
1586 {
1588
1590 }
1591
1593 {
1594 super.EEDelete(parent);
1595
1597
1600 }
1601
1603 {
1604 super.EEItemLocationChanged(oldLoc, newLoc);
1605
1608 {
1609 switch (oldLoc.GetParent().GetType())
1610 {
1611 case "FryingPan":
1612 case "Pot":
1613 case "Cauldron":
1614 case "SharpWoodenStick":
1616 break;
1617 }
1618
1621 {
1623 }
1624 }
1625
1626 if (oldLoc.IsValid())
1628
1631 }
1632
1634 {
1637 }
1638
1640 {
1643
1644 return true;
1645 }
1646
1648 {
1650 {
1652 }
1653 }
1654
1657 {
1658 int foodStageType;
1659
1661 if (foodStage)
1662 foodStageType = foodStage.GetFoodStageType();
1663
1668
1669 return agentsIn;
1670 }
1671
1672
1674 {
1675 return false;
1676 }
1677
1679 {
1680 return false;
1681 }
1682
1684 {
1686 {
1688 {
1691
1694
1695 default:
1696 return super.GetTemperatureFreezeTime();
1697 }
1698 }
1699
1700 return super.GetTemperatureFreezeTime();
1701 }
1702
1704 {
1706 {
1708 {
1711
1714
1715 default:
1716 return super.GetTemperatureThawTime();
1717 }
1718 }
1719
1720 return super.GetTemperatureThawTime();
1721 }
1722
1724 {
1726 }
1727
1728
1729
1730
1732 {
1733 SetSynchDirty();
1734 }
1735
1737 {
1738 super.OnVariablesSynchronized();
1739
1740
1741
1742
1744 {
1746 }
1747 else
1748 {
1750 }
1751
1754 }
1755
1756
1757
1758
1760 {
1763
1765 }
1766
1768 {
1769 string soundName = "";
1770
1773
1775 {
1777 }
1778 else
1779 {
1781 {
1783 {
1788 else
1789 soundName = "";
1790 break;
1791 }
1792
1794 {
1799 else
1800 soundName = "";
1801 break;
1802 }
1803
1805 {
1810 else
1811 soundName = "";
1812 break;
1813 }
1814
1815 default:
1816 soundName = "";
1817 break;
1818 }
1819
1821 {
1822 if (soundName == "")
1823 {
1825 }
1826 else
1827 {
1829 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1830 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1832 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1833 {
1835 }
1836 }
1837 }
1838 }
1839
1841 }
1842
1844 {
1847 }
1848
1849
1850
1851
1853 {
1854 super.OnStoreSave(ctx);
1855
1857 {
1859 }
1860
1861
1864 }
1865
1867 {
1868 if (!super.OnStoreLoad(ctx, version))
1869 return false;
1870
1872 {
1874 return false;
1875 }
1876
1877 if (version >= 115)
1878 {
1880 {
1882 return false;
1883 }
1885 {
1887 return false;
1888 }
1889 }
1890
1893
1894 return true;
1895 }
1896
1898 {
1899 super.AfterStoreLoad();
1900
1902 }
1903
1904
1906 {
1908 }
1909
1910
1912 {
1913 return false;
1914 }
1915
1917 {
1918 return false;
1919 }
1920
1922 {
1923 return false;
1924 }
1925
1927 {
1928 return false;
1929 }
1930
1931
1932
1933
1934
1936 {
1939 {
1940 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1941 }
1942 else if (classname != "" && food_stage)
1943 {
1944 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1945 }
1946 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1948
1949 }
1950
1952 {
1955 {
1957 }
1958 else if (classname != "" && food_stage)
1959 {
1960 return FoodStage.GetEnergy(null, food_stage, classname);
1961 }
1962 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1964 }
1965
1967 {
1970 {
1972 }
1973 else if (classname != "" && food_stage)
1974 {
1975 return FoodStage.GetWater(null, food_stage, classname);
1976 }
1977 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1979 }
1980
1982 {
1985 {
1986 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1987 }
1988 else if (classname != "" && food_stage)
1989 {
1990 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1991 }
1992 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1994
1995 }
1996
1998 {
2001 {
2002 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2003 }
2004 else if (classname != "" && food_stage)
2005 {
2006 return FoodStage.GetToxicity(null, food_stage, classname);
2007 }
2008 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2010 }
2011
2013 {
2016 {
2018 }
2019 else if (classname != "" && food_stage)
2020 {
2021 return FoodStage.GetAgents(null, food_stage, classname);
2022 }
2023 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2025 }
2026
2028 {
2031 {
2032 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2033 }
2034 else if (classname != "" && food_stage)
2035 {
2036 return FoodStage.GetDigestibility(null, food_stage, classname);
2037 }
2038 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2040 }
2041
2043 {
2046 {
2047 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2048 }
2049 else if (className != "" && foodStage)
2050 {
2051 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2052 }
2053 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2055 }
2056
2058 {
2068
2069 return profile;
2070 }
2071
2072
2073
2074
2076 {
2078 }
2079
2080
2082 {
2084 {
2086 }
2087
2088 return false;
2089 }
2090
2092 {
2094 {
2096 }
2097
2098 return false;
2099 }
2100
2102 {
2104 {
2106 }
2107
2108 return false;
2109 }
2110
2112 {
2114 {
2116 }
2117
2118 return false;
2119 }
2120
2122 {
2124 {
2126 }
2127
2128 return false;
2129 }
2130
2132 {
2134 {
2136 }
2137
2138 return false;
2139 }
2140
2141
2143 {
2145 }
2146
2148 {
2149 return GetFoodStage().GetNextFoodStageType( cooking_method );
2150 }
2151
2153 {
2154 return GetFoodStage().GetFoodStageName( food_stage_type );
2155 }
2156
2158 {
2159 return GetFoodStage().CanChangeToNewStage( cooking_method );
2160 }
2161
2162
2164 {
2165 if ( !source.GetFoodStage())
2166 return;
2171 }
2172
2175 {
2178 }
2179
2182 {
2183 switch (stageNew)
2184 {
2189 break;
2190
2193 break;
2194 }
2195 }
2196
2197
2198
2199
2200
2202 {
2204 }
2205
2207 {
2209
2210
2212 }
2213
2215 {
2217 {
2220 }
2221 }
2222
2223
2225 {
2227 if (player)
2228 {
2230 player.ServerReplaceItemInHandsWithNew(lambda);
2231 }
2232 else
2233 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2234 }
2235
2237 {
2239 }
2240
2242 {
2243 super.SetActions();
2244
2247 }
2248
2250 {
2251 #ifndef SERVER
2253 {
2255
2258 }
2259 #endif
2260 }
2261
2263 {
2264 #ifndef SERVER
2266 {
2270 }
2271 #endif
2272 }
2273
2275 {
2276 return false;
2277 }
2278
2280 {
2282 }
2283
2284 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2285 {
2287
2288 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2290 if ( hasRootAsPlayer )
2292
2293
2294
2295
2296
2297
2298
2300 {
2301
2303 {
2305 {
2309 break;
2310
2314 break;
2315
2319 break;
2320
2324 default:
2327 return;
2328 }
2329
2330
2331 }
2332
2334
2336 {
2338 {
2339
2341 {
2343 }
2345 {
2348 {
2350 }
2351 else
2352 {
2354 {
2356 }
2357 else
2358 {
2360 }
2361 }
2362 }
2363 }
2364 }
2365
2366 }
2368 {
2369
2371 {
2373 {
2377 break;
2378
2382 break;
2383
2387 break;
2388
2392 break;
2393
2396 default:
2399 return;
2400 }
2401 }
2402
2404
2406 {
2408 {
2409
2411 {
2413 }
2414 }
2415 }
2416 }
2418 {
2419
2421 {
2423 {
2427 break;
2428
2431 default:
2434 return;
2435 }
2436 }
2437
2439
2441 {
2443 {
2444
2446 {
2448 }
2449 }
2450 }
2451 }
2452 else
2453 {
2454
2456
2458 {
2461
2462 }
2463 else
2464 {
2466 {
2469 }
2470 }
2471 }
2472 }
2473
2475 {
2476 if (
GetGame().IsDedicatedServer())
2477 return;
2478
2480 {
2482 GetInventory().GetCurrentInventoryLocation(invLoc);
2484 {
2486 if (ptcMgr)
2487 {
2492 }
2493 }
2494 }
2496 {
2498 {
2501 return;
2502 }
2503
2505 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2507 {
2510 }
2511 }
2512 }
2513
2514 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2515 {
2517 {
2522 }
2523
2524 super.GetDebugActions(outputList);
2525 }
2526
2528 {
2529 super.OnAction(action_id, player, ctx);
2530
2532 {
2533 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2534 {
2536 if (food_stage_prev <= 0)
2537 {
2539 }
2541 return true;
2542 }
2543 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2544 {
2547 {
2549 }
2551 return true;
2552 }
2553
2554 }
2555
2556 #ifdef DIAG_DEVELOPER
2557 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2558 {
2559 PrintNutritionsData();
2560 return true;
2561 }
2562 #endif
2563
2564 return false;
2565 }
2566
2568 {
2569 string debug_output;
2570
2571 debug_output = super.GetDebugText();
2572
2575
2576 return debug_output;
2577 }
2578
2579
2580
2581
2582
2584 {
2585 float ret = super.GetBaitEffectivity();
2586
2588 {
2589 ret *= 0.5;
2590 }
2591
2592 return ret;
2593 }
2594
2596 {
2598 }
2599
2601 {
2603 }
2604
2606 {
2608 }
2609
2610 #ifdef DIAG_DEVELOPER
2611 private void PrintNutritionsData()
2612 {
2613 string nutritionsData = "";
2614
2617
2619 if (profile)
2620 {
2621 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2623 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2627 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2629
2632
2633 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2635 }
2636
2637 nutritionsData += "-----\n";
2638
2640 }
2641 #endif
2642
2644
2647 {
2649 }
2650}
2651
2653{
2655};
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.