1728{
1730
1738
1748
1750
1752 {
1754 {
1756
1758 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1759
1763 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1764 }
1765 }
1766
1768 {
1770
1772 }
1773
1775 {
1776 super.EEDelete(parent);
1777
1779
1782 }
1783
1785 {
1786 super.EEItemLocationChanged(oldLoc, newLoc);
1787
1790 {
1791 switch (oldLoc.GetParent().GetType())
1792 {
1793 case "FryingPan":
1794 case "Pot":
1795 case "Cauldron":
1796 case "SharpWoodenStick":
1798 break;
1799 }
1800
1803 {
1805 }
1806 }
1807
1808 if (oldLoc.IsValid())
1810
1813 }
1814
1816 {
1819 }
1820
1822 {
1825
1826 return true;
1827 }
1828
1830 {
1832 {
1834 }
1835 }
1836
1839 {
1840 int foodStageType;
1841
1843 if (foodStage)
1844 foodStageType = foodStage.GetFoodStageType();
1845
1850
1851 return agentsIn;
1852 }
1853
1854
1856 {
1857 return false;
1858 }
1859
1861 {
1862 return false;
1863 }
1864
1866 {
1868 {
1870 {
1873
1876
1877 default:
1878 return super.GetTemperatureFreezeTime();
1879 }
1880 }
1881
1882 return super.GetTemperatureFreezeTime();
1883 }
1884
1886 {
1888 {
1890 {
1893
1896
1897 default:
1898 return super.GetTemperatureThawTime();
1899 }
1900 }
1901
1902 return super.GetTemperatureThawTime();
1903 }
1904
1906 {
1908 }
1909
1910
1911
1912
1914 {
1915 SetSynchDirty();
1916 }
1917
1919 {
1920 super.OnVariablesSynchronized();
1921
1922
1923
1924
1926 {
1928 }
1929 else
1930 {
1932 }
1933
1936 }
1937
1938
1939
1940
1942 {
1945
1947 }
1948
1950 {
1951 string soundName = "";
1952
1955
1957 {
1959 }
1960 else
1961 {
1963 {
1965 {
1970 else
1971 soundName = "";
1972 break;
1973 }
1974
1976 {
1981 else
1982 soundName = "";
1983 break;
1984 }
1985
1987 {
1992 else
1993 soundName = "";
1994 break;
1995 }
1996
1997 default:
1998 soundName = "";
1999 break;
2000 }
2001
2003 {
2004 if (soundName == "")
2005 {
2007 }
2008 else
2009 {
2011 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2012 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2014 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2015 {
2017 }
2018 }
2019 }
2020 }
2021
2023 }
2024
2026 {
2029 }
2030
2031
2032
2033
2035 {
2036 super.OnStoreSave(ctx);
2037
2039 {
2041 }
2042
2043
2046 }
2047
2049 {
2050 if (!super.OnStoreLoad(ctx, version))
2051 return false;
2052
2054 {
2056 return false;
2057 }
2058
2059 if (version >= 115)
2060 {
2062 {
2064 return false;
2065 }
2067 {
2069 return false;
2070 }
2071 }
2072
2075
2076 return true;
2077 }
2078
2080 {
2081 super.AfterStoreLoad();
2082
2084 }
2085
2086
2088 {
2090 }
2091
2092
2094 {
2095 return false;
2096 }
2097
2099 {
2100 return false;
2101 }
2102
2104 {
2105 return false;
2106 }
2107
2109 {
2110 return false;
2111 }
2112
2113
2114
2115
2116
2118 {
2121 {
2122 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2123 }
2124 else if (classname != "" && food_stage)
2125 {
2126 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2127 }
2128 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2130
2131 }
2132
2134 {
2137 {
2139 }
2140 else if (classname != "" && food_stage)
2141 {
2142 return FoodStage.GetEnergy(null, food_stage, classname);
2143 }
2144 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2146 }
2147
2149 {
2152 {
2154 }
2155 else if (classname != "" && food_stage)
2156 {
2157 return FoodStage.GetWater(null, food_stage, classname);
2158 }
2159 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2161 }
2162
2164 {
2167 {
2168 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2169 }
2170 else if (classname != "" && food_stage)
2171 {
2172 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2173 }
2174 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2176
2177 }
2178
2180 {
2183 {
2184 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2185 }
2186 else if (classname != "" && food_stage)
2187 {
2188 return FoodStage.GetToxicity(null, food_stage, classname);
2189 }
2190 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2192 }
2193
2195 {
2198 {
2200 }
2201 else if (classname != "" && food_stage)
2202 {
2203 return FoodStage.GetAgents(null, food_stage, classname);
2204 }
2205 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2207 }
2208
2210 {
2213 {
2214 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2215 }
2216 else if (classname != "" && food_stage)
2217 {
2218 return FoodStage.GetDigestibility(null, food_stage, classname);
2219 }
2220 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2222 }
2223
2225 {
2228 {
2229 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2230 }
2231 else if (className != "" && foodStage)
2232 {
2233 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2234 }
2235 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2237 }
2238
2240 {
2250
2251 return profile;
2252 }
2253
2254
2255
2256
2258 {
2260 }
2261
2262
2264 {
2266 {
2268 }
2269
2270 return false;
2271 }
2272
2274 {
2276 {
2278 }
2279
2280 return false;
2281 }
2282
2284 {
2286 {
2288 }
2289
2290 return false;
2291 }
2292
2294 {
2296 {
2298 }
2299
2300 return false;
2301 }
2302
2304 {
2306 {
2308 }
2309
2310 return false;
2311 }
2312
2314 {
2316 {
2318 }
2319
2320 return false;
2321 }
2322
2323
2325 {
2327 }
2328
2330 {
2331 return GetFoodStage().GetNextFoodStageType( cooking_method );
2332 }
2333
2335 {
2336 return GetFoodStage().GetFoodStageName( food_stage_type );
2337 }
2338
2340 {
2341 return GetFoodStage().CanChangeToNewStage( cooking_method );
2342 }
2343
2344
2346 {
2347 if ( !source.GetFoodStage())
2348 return;
2353 }
2354
2357 {
2360 }
2361
2364 {
2365 switch (stageNew)
2366 {
2371 break;
2372
2375 break;
2376 }
2377 }
2378
2379
2380
2381
2382
2384 {
2386 }
2387
2389 {
2391
2392
2394 }
2395
2397 {
2399 {
2402 }
2403 }
2404
2405
2407 {
2409 if (player)
2410 {
2412 player.ServerReplaceItemInHandsWithNew(lambda);
2413 }
2414 else
2415 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2416 }
2417
2419 {
2421 }
2422
2424 {
2425 super.SetActions();
2426
2429 }
2430
2432 {
2433 #ifndef SERVER
2435 {
2437
2440 }
2441 #endif
2442 }
2443
2445 {
2446 #ifndef SERVER
2448 {
2452 }
2453 #endif
2454 }
2455
2457 {
2458 return false;
2459 }
2460
2462 {
2464 }
2465
2466 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2467 {
2469
2470 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2472 if ( hasRootAsPlayer )
2474
2475
2476
2477
2478
2479
2480
2482 {
2483
2485 {
2487 {
2491 break;
2492
2496 break;
2497
2501 break;
2502
2506 default:
2509 return;
2510 }
2511
2512
2513 }
2514
2516
2518 {
2520 {
2521
2523 {
2525 }
2527 {
2530 {
2532 }
2533 else
2534 {
2536 {
2538 }
2539 else
2540 {
2542 }
2543 }
2544 }
2545 }
2546 }
2547
2548 }
2550 {
2551
2553 {
2555 {
2559 break;
2560
2564 break;
2565
2569 break;
2570
2574 break;
2575
2578 default:
2581 return;
2582 }
2583 }
2584
2586
2588 {
2590 {
2591
2593 {
2595 }
2596 }
2597 }
2598 }
2600 {
2601
2603 {
2605 {
2609 break;
2610
2613 default:
2616 return;
2617 }
2618 }
2619
2621
2623 {
2625 {
2626
2628 {
2630 }
2631 }
2632 }
2633 }
2634 else
2635 {
2636
2638
2640 {
2643
2644 }
2645 else
2646 {
2648 {
2651 }
2652 }
2653 }
2654 }
2655
2657 {
2658 if (
GetGame().IsDedicatedServer())
2659 return;
2660
2662 {
2664 GetInventory().GetCurrentInventoryLocation(invLoc);
2666 {
2668 if (ptcMgr)
2669 {
2674 }
2675 }
2676 }
2678 {
2680 {
2683 return;
2684 }
2685
2687 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2689 {
2692 }
2693 }
2694 }
2695
2696 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2697 {
2699 {
2704 }
2705
2706 super.GetDebugActions(outputList);
2707 }
2708
2710 {
2711 super.OnAction(action_id, player, ctx);
2712
2714 {
2715 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2716 {
2718 if (food_stage_prev <= 0)
2719 {
2721 }
2723 return true;
2724 }
2725 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2726 {
2729 {
2731 }
2733 return true;
2734 }
2735
2736 }
2737
2738 #ifdef DIAG_DEVELOPER
2739 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2740 {
2741 PrintNutritionsData();
2742 return true;
2743 }
2744 #endif
2745
2746 return false;
2747 }
2748
2750 {
2751 string debug_output;
2752
2753 debug_output = super.GetDebugText();
2754
2757
2758 return debug_output;
2759 }
2760
2761
2762
2763
2764
2766 {
2767 float ret = super.GetBaitEffectivity();
2768
2770 {
2771 ret *= 0.5;
2772 }
2773
2774 return ret;
2775 }
2776
2778 {
2780 }
2781
2783 {
2785 }
2786
2788 {
2790 }
2791
2792 #ifdef DIAG_DEVELOPER
2793 private void PrintNutritionsData()
2794 {
2795 string nutritionsData = "";
2796
2799
2801 if (profile)
2802 {
2803 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2805 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2809 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2811
2814
2815 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2817 }
2818
2819 nutritionsData += "-----\n";
2820
2822 }
2823 #endif
2824
2826
2829 {
2831 }
2832}
2833
2835{
2837};
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.