1695{
1697
1705
1715
1717
1719 {
1721 {
1723
1725 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1726
1730 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1731 }
1732 }
1733
1735 {
1737
1739 }
1740
1742 {
1743 super.EEDelete(parent);
1744
1746
1749 }
1750
1752 {
1753 super.EEItemLocationChanged(oldLoc, newLoc);
1754
1757 {
1758 switch (oldLoc.GetParent().GetType())
1759 {
1760 case "FryingPan":
1761 case "Pot":
1762 case "Cauldron":
1763 case "SharpWoodenStick":
1765 break;
1766 }
1767
1770 {
1772 }
1773 }
1774
1775 if (oldLoc.IsValid())
1777
1780 }
1781
1783 {
1786 }
1787
1789 {
1792
1793 return true;
1794 }
1795
1797 {
1799 {
1801 }
1802 }
1803
1806 {
1807 int foodStageType;
1808
1810 if (foodStage)
1811 foodStageType = foodStage.GetFoodStageType();
1812
1817
1818 return agentsIn;
1819 }
1820
1821
1823 {
1824 return false;
1825 }
1826
1828 {
1829 return false;
1830 }
1831
1833 {
1835 {
1837 {
1840
1843
1844 default:
1845 return super.GetTemperatureFreezeTime();
1846 }
1847 }
1848
1849 return super.GetTemperatureFreezeTime();
1850 }
1851
1853 {
1855 {
1857 {
1860
1863
1864 default:
1865 return super.GetTemperatureThawTime();
1866 }
1867 }
1868
1869 return super.GetTemperatureThawTime();
1870 }
1871
1873 {
1875 }
1876
1877
1878
1879
1881 {
1882 SetSynchDirty();
1883 }
1884
1886 {
1887 super.OnVariablesSynchronized();
1888
1889
1890
1891
1893 {
1895 }
1896 else
1897 {
1899 }
1900
1903 }
1904
1905
1906
1907
1909 {
1912
1914 }
1915
1917 {
1918 string soundName = "";
1919
1922
1924 {
1926 }
1927 else
1928 {
1930 {
1932 {
1937 else
1938 soundName = "";
1939 break;
1940 }
1941
1943 {
1948 else
1949 soundName = "";
1950 break;
1951 }
1952
1954 {
1959 else
1960 soundName = "";
1961 break;
1962 }
1963
1964 default:
1965 soundName = "";
1966 break;
1967 }
1968
1970 {
1971 if (soundName == "")
1972 {
1974 }
1975 else
1976 {
1978 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1979 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1981 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1982 {
1984 }
1985 }
1986 }
1987 }
1988
1990 }
1991
1993 {
1996 }
1997
1998
1999
2000
2002 {
2003 super.OnStoreSave(ctx);
2004
2006 {
2008 }
2009
2010
2013 }
2014
2016 {
2017 if (!super.OnStoreLoad(ctx, version))
2018 return false;
2019
2021 {
2023 return false;
2024 }
2025
2026 if (version >= 115)
2027 {
2029 {
2031 return false;
2032 }
2034 {
2036 return false;
2037 }
2038 }
2039
2042
2043 return true;
2044 }
2045
2047 {
2048 super.AfterStoreLoad();
2049
2051 }
2052
2053
2055 {
2057 }
2058
2059
2061 {
2062 return false;
2063 }
2064
2066 {
2067 return false;
2068 }
2069
2071 {
2072 return false;
2073 }
2074
2076 {
2077 return false;
2078 }
2079
2080
2081
2082
2083
2085 {
2088 {
2089 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2090 }
2091 else if (classname != "" && food_stage)
2092 {
2093 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2094 }
2095 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2097
2098 }
2099
2101 {
2104 {
2106 }
2107 else if (classname != "" && food_stage)
2108 {
2109 return FoodStage.GetEnergy(null, food_stage, classname);
2110 }
2111 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2113 }
2114
2116 {
2119 {
2121 }
2122 else if (classname != "" && food_stage)
2123 {
2124 return FoodStage.GetWater(null, food_stage, classname);
2125 }
2126 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2128 }
2129
2131 {
2134 {
2135 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2136 }
2137 else if (classname != "" && food_stage)
2138 {
2139 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2140 }
2141 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2143
2144 }
2145
2147 {
2150 {
2151 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2152 }
2153 else if (classname != "" && food_stage)
2154 {
2155 return FoodStage.GetToxicity(null, food_stage, classname);
2156 }
2157 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2159 }
2160
2162 {
2165 {
2167 }
2168 else if (classname != "" && food_stage)
2169 {
2170 return FoodStage.GetAgents(null, food_stage, classname);
2171 }
2172 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2174 }
2175
2177 {
2180 {
2181 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2182 }
2183 else if (classname != "" && food_stage)
2184 {
2185 return FoodStage.GetDigestibility(null, food_stage, classname);
2186 }
2187 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2189 }
2190
2192 {
2195 {
2196 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2197 }
2198 else if (className != "" && foodStage)
2199 {
2200 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2201 }
2202 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2204 }
2205
2207 {
2217
2218 return profile;
2219 }
2220
2221
2222
2223
2225 {
2227 }
2228
2229
2231 {
2233 {
2235 }
2236
2237 return false;
2238 }
2239
2241 {
2243 {
2245 }
2246
2247 return false;
2248 }
2249
2251 {
2253 {
2255 }
2256
2257 return false;
2258 }
2259
2261 {
2263 {
2265 }
2266
2267 return false;
2268 }
2269
2271 {
2273 {
2275 }
2276
2277 return false;
2278 }
2279
2281 {
2283 {
2285 }
2286
2287 return false;
2288 }
2289
2290
2292 {
2294 }
2295
2297 {
2298 return GetFoodStage().GetNextFoodStageType( cooking_method );
2299 }
2300
2302 {
2303 return GetFoodStage().GetFoodStageName( food_stage_type );
2304 }
2305
2307 {
2308 return GetFoodStage().CanChangeToNewStage( cooking_method );
2309 }
2310
2311
2313 {
2314 if ( !source.GetFoodStage())
2315 return;
2320 }
2321
2324 {
2327 }
2328
2331 {
2332 switch (stageNew)
2333 {
2338 break;
2339
2342 break;
2343 }
2344 }
2345
2346
2347
2348
2349
2351 {
2353 }
2354
2356 {
2358
2359
2361 }
2362
2364 {
2366 {
2369 }
2370 }
2371
2372
2374 {
2376 if (player)
2377 {
2379 player.ServerReplaceItemInHandsWithNew(lambda);
2380 }
2381 else
2382 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2383 }
2384
2386 {
2388 }
2389
2391 {
2392 super.SetActions();
2393
2396 }
2397
2399 {
2400 #ifndef SERVER
2402 {
2404
2407 }
2408 #endif
2409 }
2410
2412 {
2413 #ifndef SERVER
2415 {
2419 }
2420 #endif
2421 }
2422
2424 {
2425 return false;
2426 }
2427
2429 {
2431 }
2432
2433 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2434 {
2436
2437 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2439 if ( hasRootAsPlayer )
2441
2442
2443
2444
2445
2446
2447
2449 {
2450
2452 {
2454 {
2458 break;
2459
2463 break;
2464
2468 break;
2469
2473 default:
2476 return;
2477 }
2478
2479
2480 }
2481
2483
2485 {
2487 {
2488
2490 {
2492 }
2494 {
2497 {
2499 }
2500 else
2501 {
2503 {
2505 }
2506 else
2507 {
2509 }
2510 }
2511 }
2512 }
2513 }
2514
2515 }
2517 {
2518
2520 {
2522 {
2526 break;
2527
2531 break;
2532
2536 break;
2537
2541 break;
2542
2545 default:
2548 return;
2549 }
2550 }
2551
2553
2555 {
2557 {
2558
2560 {
2562 }
2563 }
2564 }
2565 }
2567 {
2568
2570 {
2572 {
2576 break;
2577
2580 default:
2583 return;
2584 }
2585 }
2586
2588
2590 {
2592 {
2593
2595 {
2597 }
2598 }
2599 }
2600 }
2601 else
2602 {
2603
2605
2607 {
2610
2611 }
2612 else
2613 {
2615 {
2618 }
2619 }
2620 }
2621 }
2622
2624 {
2625 if (
GetGame().IsDedicatedServer())
2626 return;
2627
2629 {
2631 GetInventory().GetCurrentInventoryLocation(invLoc);
2633 {
2635 if (ptcMgr)
2636 {
2641 }
2642 }
2643 }
2645 {
2647 {
2650 return;
2651 }
2652
2654 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2656 {
2659 }
2660 }
2661 }
2662
2663 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2664 {
2665 super.GetDebugActions(outputList);
2666
2668 {
2672 }
2673 }
2674
2676 {
2677 super.OnAction(action_id, player, ctx);
2678
2680 {
2681 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2682 {
2684 if (food_stage_prev <= 0)
2685 {
2687 }
2689 return true;
2690 }
2691 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2692 {
2695 {
2697 }
2699 return true;
2700 }
2701
2702 }
2703
2704 #ifdef DIAG_DEVELOPER
2705 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2706 {
2707 PrintNutritionsData();
2708 return true;
2709 }
2710 #endif
2711
2712 return false;
2713 }
2714
2716 {
2717 string debug_output;
2718
2719 debug_output = super.GetDebugText();
2720
2723
2724 return debug_output;
2725 }
2726
2727
2728
2729
2730
2732 {
2733 float ret = super.GetBaitEffectivity();
2734
2736 {
2737 ret *= 0.5;
2738 }
2739
2740 return ret;
2741 }
2742
2744 {
2746 }
2747
2749 {
2751 }
2752
2754 {
2756 }
2757
2758 #ifdef DIAG_DEVELOPER
2759 private void PrintNutritionsData()
2760 {
2761 string nutritionsData = "";
2762
2765
2767 if (profile)
2768 {
2769 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2771 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2775 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2777
2780
2781 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2783 }
2784
2785 nutritionsData += "-----\n";
2786
2788 }
2789 #endif
2790
2792
2795 {
2797 }
2798}
2799
2801{
2803};
Param4< int, int, string, int > TSelectableActionInfoWithColor
eBleedingSourceType GetType()
AttachActionData ActionData ActionAttach()
void AddAction(typename actionName)
DamageType
exposed from C++ (do not change)
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.