1722{
1724
1732
1742
1744
1746 {
1748 {
1750
1752 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1753
1757 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1758 }
1759 }
1760
1762 {
1764
1766 }
1767
1769 {
1770 super.EEDelete(parent);
1771
1773
1776 }
1777
1779 {
1780 super.EEItemLocationChanged(oldLoc, newLoc);
1781
1784 {
1785 switch (oldLoc.GetParent().GetType())
1786 {
1787 case "FryingPan":
1788 case "Pot":
1789 case "Cauldron":
1790 case "SharpWoodenStick":
1792 break;
1793 }
1794
1797 {
1799 }
1800 }
1801
1802 if (oldLoc.IsValid())
1804
1807 }
1808
1810 {
1813 }
1814
1816 {
1819
1820 return true;
1821 }
1822
1824 {
1826 {
1828 }
1829 }
1830
1833 {
1834 int foodStageType;
1835
1837 if (foodStage)
1838 foodStageType = foodStage.GetFoodStageType();
1839
1844
1845 return agentsIn;
1846 }
1847
1848
1850 {
1851 return false;
1852 }
1853
1855 {
1856 return false;
1857 }
1858
1860 {
1862 {
1864 {
1867
1870
1871 default:
1872 return super.GetTemperatureFreezeTime();
1873 }
1874 }
1875
1876 return super.GetTemperatureFreezeTime();
1877 }
1878
1880 {
1882 {
1884 {
1887
1890
1891 default:
1892 return super.GetTemperatureThawTime();
1893 }
1894 }
1895
1896 return super.GetTemperatureThawTime();
1897 }
1898
1900 {
1902 }
1903
1904
1905
1906
1908 {
1909 SetSynchDirty();
1910 }
1911
1913 {
1914 super.OnVariablesSynchronized();
1915
1916
1917
1918
1920 {
1922 }
1923 else
1924 {
1926 }
1927
1930 }
1931
1932
1933
1934
1936 {
1939
1941 }
1942
1944 {
1945 string soundName = "";
1946
1949
1951 {
1953 }
1954 else
1955 {
1957 {
1959 {
1964 else
1965 soundName = "";
1966 break;
1967 }
1968
1970 {
1975 else
1976 soundName = "";
1977 break;
1978 }
1979
1981 {
1986 else
1987 soundName = "";
1988 break;
1989 }
1990
1991 default:
1992 soundName = "";
1993 break;
1994 }
1995
1997 {
1998 if (soundName == "")
1999 {
2001 }
2002 else
2003 {
2005 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2006 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2008 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2009 {
2011 }
2012 }
2013 }
2014 }
2015
2017 }
2018
2020 {
2023 }
2024
2025
2026
2027
2029 {
2030 super.OnStoreSave(ctx);
2031
2033 {
2035 }
2036
2037
2040 }
2041
2043 {
2044 if (!super.OnStoreLoad(ctx, version))
2045 return false;
2046
2048 {
2050 return false;
2051 }
2052
2053 if (version >= 115)
2054 {
2056 {
2058 return false;
2059 }
2061 {
2063 return false;
2064 }
2065 }
2066
2069
2070 return true;
2071 }
2072
2074 {
2075 super.AfterStoreLoad();
2076
2078 }
2079
2080
2082 {
2084 }
2085
2086
2088 {
2089 return false;
2090 }
2091
2093 {
2094 return false;
2095 }
2096
2098 {
2099 return false;
2100 }
2101
2103 {
2104 return false;
2105 }
2106
2107
2108
2109
2110
2112 {
2115 {
2116 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2117 }
2118 else if (classname != "" && food_stage)
2119 {
2120 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2121 }
2122 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2124
2125 }
2126
2128 {
2131 {
2133 }
2134 else if (classname != "" && food_stage)
2135 {
2136 return FoodStage.GetEnergy(null, food_stage, classname);
2137 }
2138 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2140 }
2141
2143 {
2146 {
2148 }
2149 else if (classname != "" && food_stage)
2150 {
2151 return FoodStage.GetWater(null, food_stage, classname);
2152 }
2153 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2155 }
2156
2158 {
2161 {
2162 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2163 }
2164 else if (classname != "" && food_stage)
2165 {
2166 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2167 }
2168 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2170
2171 }
2172
2174 {
2177 {
2178 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2179 }
2180 else if (classname != "" && food_stage)
2181 {
2182 return FoodStage.GetToxicity(null, food_stage, classname);
2183 }
2184 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2186 }
2187
2189 {
2192 {
2194 }
2195 else if (classname != "" && food_stage)
2196 {
2197 return FoodStage.GetAgents(null, food_stage, classname);
2198 }
2199 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2201 }
2202
2204 {
2207 {
2208 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2209 }
2210 else if (classname != "" && food_stage)
2211 {
2212 return FoodStage.GetDigestibility(null, food_stage, classname);
2213 }
2214 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2216 }
2217
2219 {
2222 {
2223 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2224 }
2225 else if (className != "" && foodStage)
2226 {
2227 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2228 }
2229 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2231 }
2232
2234 {
2244
2245 return profile;
2246 }
2247
2248
2249
2250
2252 {
2254 }
2255
2256
2258 {
2260 {
2262 }
2263
2264 return false;
2265 }
2266
2268 {
2270 {
2272 }
2273
2274 return false;
2275 }
2276
2278 {
2280 {
2282 }
2283
2284 return false;
2285 }
2286
2288 {
2290 {
2292 }
2293
2294 return false;
2295 }
2296
2298 {
2300 {
2302 }
2303
2304 return false;
2305 }
2306
2308 {
2310 {
2312 }
2313
2314 return false;
2315 }
2316
2317
2319 {
2321 }
2322
2324 {
2325 return GetFoodStage().GetNextFoodStageType( cooking_method );
2326 }
2327
2329 {
2330 return GetFoodStage().GetFoodStageName( food_stage_type );
2331 }
2332
2334 {
2335 return GetFoodStage().CanChangeToNewStage( cooking_method );
2336 }
2337
2338
2340 {
2341 if ( !source.GetFoodStage())
2342 return;
2347 }
2348
2351 {
2354 }
2355
2358 {
2359 switch (stageNew)
2360 {
2365 break;
2366
2369 break;
2370 }
2371 }
2372
2373
2374
2375
2376
2378 {
2380 }
2381
2383 {
2385
2386
2388 }
2389
2391 {
2393 {
2396 }
2397 }
2398
2399
2401 {
2403 if (player)
2404 {
2406 player.ServerReplaceItemInHandsWithNew(lambda);
2407 }
2408 else
2409 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2410 }
2411
2413 {
2415 }
2416
2418 {
2419 super.SetActions();
2420
2423 }
2424
2426 {
2427 #ifndef SERVER
2429 {
2431
2434 }
2435 #endif
2436 }
2437
2439 {
2440 #ifndef SERVER
2442 {
2446 }
2447 #endif
2448 }
2449
2451 {
2452 return false;
2453 }
2454
2456 {
2458 }
2459
2460 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2461 {
2463
2464 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2466 if ( hasRootAsPlayer )
2468
2469
2470
2471
2472
2473
2474
2476 {
2477
2479 {
2481 {
2485 break;
2486
2490 break;
2491
2495 break;
2496
2500 default:
2503 return;
2504 }
2505
2506
2507 }
2508
2510
2512 {
2514 {
2515
2517 {
2519 }
2521 {
2524 {
2526 }
2527 else
2528 {
2530 {
2532 }
2533 else
2534 {
2536 }
2537 }
2538 }
2539 }
2540 }
2541
2542 }
2544 {
2545
2547 {
2549 {
2553 break;
2554
2558 break;
2559
2563 break;
2564
2568 break;
2569
2572 default:
2575 return;
2576 }
2577 }
2578
2580
2582 {
2584 {
2585
2587 {
2589 }
2590 }
2591 }
2592 }
2594 {
2595
2597 {
2599 {
2603 break;
2604
2607 default:
2610 return;
2611 }
2612 }
2613
2615
2617 {
2619 {
2620
2622 {
2624 }
2625 }
2626 }
2627 }
2628 else
2629 {
2630
2632
2634 {
2637
2638 }
2639 else
2640 {
2642 {
2645 }
2646 }
2647 }
2648 }
2649
2651 {
2652 if (
GetGame().IsDedicatedServer())
2653 return;
2654
2656 {
2658 GetInventory().GetCurrentInventoryLocation(invLoc);
2660 {
2662 if (ptcMgr)
2663 {
2668 }
2669 }
2670 }
2672 {
2674 {
2677 return;
2678 }
2679
2681 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2683 {
2686 }
2687 }
2688 }
2689
2690 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2691 {
2693 {
2698 }
2699
2700 super.GetDebugActions(outputList);
2701 }
2702
2704 {
2705 super.OnAction(action_id, player, ctx);
2706
2708 {
2709 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2710 {
2712 if (food_stage_prev <= 0)
2713 {
2715 }
2717 return true;
2718 }
2719 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2720 {
2723 {
2725 }
2727 return true;
2728 }
2729
2730 }
2731
2732 #ifdef DIAG_DEVELOPER
2733 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2734 {
2735 PrintNutritionsData();
2736 return true;
2737 }
2738 #endif
2739
2740 return false;
2741 }
2742
2744 {
2745 string debug_output;
2746
2747 debug_output = super.GetDebugText();
2748
2751
2752 return debug_output;
2753 }
2754
2755
2756
2757
2758
2760 {
2761 float ret = super.GetBaitEffectivity();
2762
2764 {
2765 ret *= 0.5;
2766 }
2767
2768 return ret;
2769 }
2770
2772 {
2774 }
2775
2777 {
2779 }
2780
2782 {
2784 }
2785
2786 #ifdef DIAG_DEVELOPER
2787 private void PrintNutritionsData()
2788 {
2789 string nutritionsData = "";
2790
2793
2795 if (profile)
2796 {
2797 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2799 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2803 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2805
2808
2809 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2811 }
2812
2813 nutritionsData += "-----\n";
2814
2816 }
2817 #endif
2818
2820
2823 {
2825 }
2826}
2827
2829{
2831};
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.