1717{
1719
1727
1737
1739
1741 {
1743 {
1745
1747 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1748
1752 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1753 }
1754 }
1755
1757 {
1759
1761 }
1762
1764 {
1765 super.EEDelete(parent);
1766
1768
1771 }
1772
1774 {
1775 super.EEItemLocationChanged(oldLoc, newLoc);
1776
1779 {
1780 switch (oldLoc.GetParent().GetType())
1781 {
1782 case "FryingPan":
1783 case "Pot":
1784 case "Cauldron":
1785 case "SharpWoodenStick":
1787 break;
1788 }
1789
1792 {
1794 }
1795 }
1796
1797 if (oldLoc.IsValid())
1799
1802 }
1803
1805 {
1808 }
1809
1811 {
1814
1815 return true;
1816 }
1817
1819 {
1821 {
1823 }
1824 }
1825
1828 {
1829 int foodStageType;
1830
1832 if (foodStage)
1833 foodStageType = foodStage.GetFoodStageType();
1834
1839
1840 return agentsIn;
1841 }
1842
1843
1845 {
1846 return false;
1847 }
1848
1850 {
1851 return false;
1852 }
1853
1855 {
1857 {
1859 {
1862
1865
1866 default:
1867 return super.GetTemperatureFreezeTime();
1868 }
1869 }
1870
1871 return super.GetTemperatureFreezeTime();
1872 }
1873
1875 {
1877 {
1879 {
1882
1885
1886 default:
1887 return super.GetTemperatureThawTime();
1888 }
1889 }
1890
1891 return super.GetTemperatureThawTime();
1892 }
1893
1895 {
1897 }
1898
1899
1900
1901
1903 {
1904 SetSynchDirty();
1905 }
1906
1908 {
1909 super.OnVariablesSynchronized();
1910
1911
1912
1913
1915 {
1917 }
1918 else
1919 {
1921 }
1922
1925 }
1926
1927
1928
1929
1931 {
1934
1936 }
1937
1939 {
1940 string soundName = "";
1941
1944
1946 {
1948 }
1949 else
1950 {
1952 {
1954 {
1959 else
1960 soundName = "";
1961 break;
1962 }
1963
1965 {
1970 else
1971 soundName = "";
1972 break;
1973 }
1974
1976 {
1981 else
1982 soundName = "";
1983 break;
1984 }
1985
1986 default:
1987 soundName = "";
1988 break;
1989 }
1990
1992 {
1993 if (soundName == "")
1994 {
1996 }
1997 else
1998 {
2000 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2001 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2003 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2004 {
2006 }
2007 }
2008 }
2009 }
2010
2012 }
2013
2015 {
2018 }
2019
2020
2021
2022
2024 {
2025 super.OnStoreSave(ctx);
2026
2028 {
2030 }
2031
2032
2035 }
2036
2038 {
2039 if (!super.OnStoreLoad(ctx, version))
2040 return false;
2041
2043 {
2045 return false;
2046 }
2047
2048 if (version >= 115)
2049 {
2051 {
2053 return false;
2054 }
2056 {
2058 return false;
2059 }
2060 }
2061
2064
2065 return true;
2066 }
2067
2069 {
2070 super.AfterStoreLoad();
2071
2073 }
2074
2075
2077 {
2079 }
2080
2081
2083 {
2084 return false;
2085 }
2086
2088 {
2089 return false;
2090 }
2091
2093 {
2094 return false;
2095 }
2096
2098 {
2099 return false;
2100 }
2101
2102
2103
2104
2105
2107 {
2110 {
2111 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2112 }
2113 else if (classname != "" && food_stage)
2114 {
2115 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2116 }
2117 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2119
2120 }
2121
2123 {
2126 {
2128 }
2129 else if (classname != "" && food_stage)
2130 {
2131 return FoodStage.GetEnergy(null, food_stage, classname);
2132 }
2133 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2135 }
2136
2138 {
2141 {
2143 }
2144 else if (classname != "" && food_stage)
2145 {
2146 return FoodStage.GetWater(null, food_stage, classname);
2147 }
2148 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2150 }
2151
2153 {
2156 {
2157 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2158 }
2159 else if (classname != "" && food_stage)
2160 {
2161 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2162 }
2163 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2165
2166 }
2167
2169 {
2172 {
2173 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2174 }
2175 else if (classname != "" && food_stage)
2176 {
2177 return FoodStage.GetToxicity(null, food_stage, classname);
2178 }
2179 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2181 }
2182
2184 {
2187 {
2189 }
2190 else if (classname != "" && food_stage)
2191 {
2192 return FoodStage.GetAgents(null, food_stage, classname);
2193 }
2194 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2196 }
2197
2199 {
2202 {
2203 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2204 }
2205 else if (classname != "" && food_stage)
2206 {
2207 return FoodStage.GetDigestibility(null, food_stage, classname);
2208 }
2209 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2211 }
2212
2214 {
2217 {
2218 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2219 }
2220 else if (className != "" && foodStage)
2221 {
2222 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2223 }
2224 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2226 }
2227
2229 {
2239
2240 return profile;
2241 }
2242
2243
2244
2245
2247 {
2249 }
2250
2251
2253 {
2255 {
2257 }
2258
2259 return false;
2260 }
2261
2263 {
2265 {
2267 }
2268
2269 return false;
2270 }
2271
2273 {
2275 {
2277 }
2278
2279 return false;
2280 }
2281
2283 {
2285 {
2287 }
2288
2289 return false;
2290 }
2291
2293 {
2295 {
2297 }
2298
2299 return false;
2300 }
2301
2303 {
2305 {
2307 }
2308
2309 return false;
2310 }
2311
2312
2314 {
2316 }
2317
2319 {
2320 return GetFoodStage().GetNextFoodStageType( cooking_method );
2321 }
2322
2324 {
2325 return GetFoodStage().GetFoodStageName( food_stage_type );
2326 }
2327
2329 {
2330 return GetFoodStage().CanChangeToNewStage( cooking_method );
2331 }
2332
2333
2335 {
2336 if ( !source.GetFoodStage())
2337 return;
2342 }
2343
2346 {
2349 }
2350
2353 {
2354 switch (stageNew)
2355 {
2360 break;
2361
2364 break;
2365 }
2366 }
2367
2368
2369
2370
2371
2373 {
2375 }
2376
2378 {
2380
2381
2383 }
2384
2386 {
2388 {
2391 }
2392 }
2393
2394
2396 {
2398 if (player)
2399 {
2401 player.ServerReplaceItemInHandsWithNew(lambda);
2402 }
2403 else
2404 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2405 }
2406
2408 {
2410 }
2411
2413 {
2414 super.SetActions();
2415
2418 }
2419
2421 {
2422 #ifndef SERVER
2424 {
2426
2429 }
2430 #endif
2431 }
2432
2434 {
2435 #ifndef SERVER
2437 {
2441 }
2442 #endif
2443 }
2444
2446 {
2447 return false;
2448 }
2449
2451 {
2453 }
2454
2455 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2456 {
2458
2459 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2461 if ( hasRootAsPlayer )
2463
2464
2465
2466
2467
2468
2469
2471 {
2472
2474 {
2476 {
2480 break;
2481
2485 break;
2486
2490 break;
2491
2495 default:
2498 return;
2499 }
2500
2501
2502 }
2503
2505
2507 {
2509 {
2510
2512 {
2514 }
2516 {
2519 {
2521 }
2522 else
2523 {
2525 {
2527 }
2528 else
2529 {
2531 }
2532 }
2533 }
2534 }
2535 }
2536
2537 }
2539 {
2540
2542 {
2544 {
2548 break;
2549
2553 break;
2554
2558 break;
2559
2563 break;
2564
2567 default:
2570 return;
2571 }
2572 }
2573
2575
2577 {
2579 {
2580
2582 {
2584 }
2585 }
2586 }
2587 }
2589 {
2590
2592 {
2594 {
2598 break;
2599
2602 default:
2605 return;
2606 }
2607 }
2608
2610
2612 {
2614 {
2615
2617 {
2619 }
2620 }
2621 }
2622 }
2623 else
2624 {
2625
2627
2629 {
2632
2633 }
2634 else
2635 {
2637 {
2640 }
2641 }
2642 }
2643 }
2644
2646 {
2647 if (
GetGame().IsDedicatedServer())
2648 return;
2649
2651 {
2653 GetInventory().GetCurrentInventoryLocation(invLoc);
2655 {
2657 if (ptcMgr)
2658 {
2663 }
2664 }
2665 }
2667 {
2669 {
2672 return;
2673 }
2674
2676 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2678 {
2681 }
2682 }
2683 }
2684
2685 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2686 {
2688 {
2693 }
2694
2695 super.GetDebugActions(outputList);
2696 }
2697
2699 {
2700 super.OnAction(action_id, player, ctx);
2701
2703 {
2704 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2705 {
2707 if (food_stage_prev <= 0)
2708 {
2710 }
2712 return true;
2713 }
2714 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2715 {
2718 {
2720 }
2722 return true;
2723 }
2724
2725 }
2726
2727 #ifdef DIAG_DEVELOPER
2728 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2729 {
2730 PrintNutritionsData();
2731 return true;
2732 }
2733 #endif
2734
2735 return false;
2736 }
2737
2739 {
2740 string debug_output;
2741
2742 debug_output = super.GetDebugText();
2743
2746
2747 return debug_output;
2748 }
2749
2750
2751
2752
2753
2755 {
2756 float ret = super.GetBaitEffectivity();
2757
2759 {
2760 ret *= 0.5;
2761 }
2762
2763 return ret;
2764 }
2765
2767 {
2769 }
2770
2772 {
2774 }
2775
2777 {
2779 }
2780
2781 #ifdef DIAG_DEVELOPER
2782 private void PrintNutritionsData()
2783 {
2784 string nutritionsData = "";
2785
2788
2790 if (profile)
2791 {
2792 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2794 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2798 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2800
2803
2804 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2806 }
2807
2808 nutritionsData += "-----\n";
2809
2811 }
2812 #endif
2813
2815
2818 {
2820 }
2821}
2822
2824{
2826};
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.