1826{
1828
1836
1846
1848
1850 {
1852 {
1854
1856 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1857
1861 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1862 }
1863 }
1864
1866 {
1868
1870 }
1871
1873 {
1874 super.EEDelete(parent);
1875
1877
1880 }
1881
1883 {
1884 super.EEItemLocationChanged(oldLoc, newLoc);
1885
1888 {
1889 switch (oldLoc.GetParent().GetType())
1890 {
1891 case "FryingPan":
1892 case "Pot":
1893 case "Cauldron":
1894 case "SharpWoodenStick":
1896 break;
1897 }
1898
1901 {
1903 }
1904 }
1905
1906 if (oldLoc.IsValid())
1908
1911 }
1912
1914 {
1917 }
1918
1920 {
1923
1924 return true;
1925 }
1926
1928 {
1930 {
1932 }
1933 }
1934
1937 {
1938 int foodStageType;
1939
1941 if (foodStage)
1942 foodStageType = foodStage.GetFoodStageType();
1943
1948
1949 return agentsIn;
1950 }
1951
1952
1954 {
1955 return false;
1956 }
1957
1959 {
1960 return false;
1961 }
1962
1964 {
1966 {
1968 {
1971
1974
1975 default:
1976 return super.GetTemperatureFreezeTime();
1977 }
1978 }
1979
1980 return super.GetTemperatureFreezeTime();
1981 }
1982
1984 {
1986 {
1988 {
1991
1994
1995 default:
1996 return super.GetTemperatureThawTime();
1997 }
1998 }
1999
2000 return super.GetTemperatureThawTime();
2001 }
2002
2004 {
2006 }
2007
2008
2009
2010
2012 {
2013 SetSynchDirty();
2014 }
2015
2017 {
2018 super.OnVariablesSynchronized();
2019
2020
2021
2022
2024 {
2026 }
2027 else
2028 {
2030 }
2031
2034 }
2035
2036
2037
2038
2040 {
2043
2045 }
2046
2048 {
2049 string soundName = "";
2050
2053
2055 {
2057 }
2058 else
2059 {
2061 {
2063 {
2068 else
2069 soundName = "";
2070 break;
2071 }
2072
2074 {
2079 else
2080 soundName = "";
2081 break;
2082 }
2083
2085 {
2090 else
2091 soundName = "";
2092 break;
2093 }
2094
2095 default:
2096 soundName = "";
2097 break;
2098 }
2099
2101 {
2102 if (soundName == "")
2103 {
2105 }
2106 else
2107 {
2109 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2110 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2112 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2113 {
2115 }
2116 }
2117 }
2118 }
2119
2121 }
2122
2124 {
2127 }
2128
2129
2130
2131
2133 {
2134 super.OnStoreSave(ctx);
2135
2137 {
2139 }
2140
2141
2144 }
2145
2147 {
2148 if (!super.OnStoreLoad(ctx, version))
2149 return false;
2150
2152 {
2154 return false;
2155 }
2156
2157 if (version >= 115)
2158 {
2160 {
2162 return false;
2163 }
2165 {
2167 return false;
2168 }
2169 }
2170
2173
2174 return true;
2175 }
2176
2178 {
2179 super.AfterStoreLoad();
2180
2182 }
2183
2184
2186 {
2188 }
2189
2190
2192 {
2193 return false;
2194 }
2195
2197 {
2198 return false;
2199 }
2200
2202 {
2203 return false;
2204 }
2205
2207 {
2208 return false;
2209 }
2210
2211
2212
2213
2214
2216 {
2219 {
2220 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2221 }
2222 else if (classname != "" && food_stage)
2223 {
2224 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2225 }
2226 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2228
2229 }
2230
2232 {
2235 {
2237 }
2238 else if (classname != "" && food_stage)
2239 {
2240 return FoodStage.GetEnergy(null, food_stage, classname);
2241 }
2242 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2244 }
2245
2247 {
2250 {
2252 }
2253 else if (classname != "" && food_stage)
2254 {
2255 return FoodStage.GetWater(null, food_stage, classname);
2256 }
2257 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2259 }
2260
2262 {
2265 {
2266 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2267 }
2268 else if (classname != "" && food_stage)
2269 {
2270 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2271 }
2272 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2274
2275 }
2276
2278 {
2281 {
2282 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2283 }
2284 else if (classname != "" && food_stage)
2285 {
2286 return FoodStage.GetToxicity(null, food_stage, classname);
2287 }
2288 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2290 }
2291
2293 {
2296 {
2298 }
2299 else if (classname != "" && food_stage)
2300 {
2301 return FoodStage.GetAgents(null, food_stage, classname);
2302 }
2303 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2305 }
2306
2308 {
2311 {
2312 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2313 }
2314 else if (classname != "" && food_stage)
2315 {
2316 return FoodStage.GetDigestibility(null, food_stage, classname);
2317 }
2318 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2320 }
2321
2323 {
2326 {
2327 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2328 }
2329 else if (className != "" && foodStage)
2330 {
2331 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2332 }
2333 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2335 }
2336
2338 {
2348
2349 return profile;
2350 }
2351
2352
2353
2354
2356 {
2358 }
2359
2360
2362 {
2364 {
2366 }
2367
2368 return false;
2369 }
2370
2372 {
2374 {
2376 }
2377
2378 return false;
2379 }
2380
2382 {
2384 {
2386 }
2387
2388 return false;
2389 }
2390
2392 {
2394 {
2396 }
2397
2398 return false;
2399 }
2400
2402 {
2404 {
2406 }
2407
2408 return false;
2409 }
2410
2412 {
2414 {
2416 }
2417
2418 return false;
2419 }
2420
2421
2423 {
2425 }
2426
2428 {
2429 return GetFoodStage().GetNextFoodStageType( cooking_method );
2430 }
2431
2433 {
2434 return GetFoodStage().GetFoodStageName( food_stage_type );
2435 }
2436
2438 {
2439 return GetFoodStage().CanChangeToNewStage( cooking_method );
2440 }
2441
2442
2444 {
2445 if ( !source.GetFoodStage())
2446 return;
2451 }
2452
2455 {
2458 }
2459
2462 {
2463 switch (stageNew)
2464 {
2469 break;
2470
2473 break;
2474 }
2475 }
2476
2477
2478
2479
2480
2482 {
2484 }
2485
2487 {
2489
2490
2492 }
2493
2495 {
2497 {
2500 }
2501 }
2502
2503
2505 {
2507 if (player)
2508 {
2510 player.ServerReplaceItemInHandsWithNew(lambda);
2511 }
2512 else
2513 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2514 }
2515
2517 {
2519 }
2520
2522 {
2523 super.SetActions();
2524
2527 }
2528
2530 {
2531 #ifndef SERVER
2533 {
2535
2538 }
2539 #endif
2540 }
2541
2543 {
2544 #ifndef SERVER
2546 {
2550 }
2551 #endif
2552 }
2553
2555 {
2556 return false;
2557 }
2558
2560 {
2562 }
2563
2564 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2565 {
2567
2568 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2570 if ( hasRootAsPlayer )
2572
2573
2574
2575
2576
2577
2578
2580 {
2581
2583 {
2585 {
2589 break;
2590
2594 break;
2595
2599 break;
2600
2604 default:
2607 return;
2608 }
2609
2610
2611 }
2612
2614
2616 {
2618 {
2619
2621 {
2623 }
2625 {
2628 {
2630 }
2631 else
2632 {
2634 {
2636 }
2637 else
2638 {
2640 }
2641 }
2642 }
2643 }
2644 }
2645
2646 }
2648 {
2649
2651 {
2653 {
2657 break;
2658
2662 break;
2663
2667 break;
2668
2672 break;
2673
2676 default:
2679 return;
2680 }
2681 }
2682
2684
2686 {
2688 {
2689
2691 {
2693 }
2694 }
2695 }
2696 }
2698 {
2699
2701 {
2703 {
2707 break;
2708
2711 default:
2714 return;
2715 }
2716 }
2717
2719
2721 {
2723 {
2724
2726 {
2728 }
2729 }
2730 }
2731 }
2732 else
2733 {
2734
2736
2738 {
2741
2742 }
2743 else
2744 {
2746 {
2749 }
2750 }
2751 }
2752 }
2753
2755 {
2756 if (
GetGame().IsDedicatedServer())
2757 return;
2758
2760 {
2762 GetInventory().GetCurrentInventoryLocation(invLoc);
2764 {
2766 if (ptcMgr)
2767 {
2772 }
2773 }
2774 }
2776 {
2778 {
2781 return;
2782 }
2783
2785 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2787 {
2790 }
2791 }
2792 }
2793
2794 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2795 {
2796 super.GetDebugActions(outputList);
2797
2799 {
2803 }
2804 }
2805
2807 {
2808 super.OnAction(action_id, player, ctx);
2809
2811 {
2812 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2813 {
2815 if (food_stage_prev <= 0)
2816 {
2818 }
2820 return true;
2821 }
2822 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2823 {
2826 {
2828 }
2830 return true;
2831 }
2832
2833 }
2834
2835 #ifdef DIAG_DEVELOPER
2836 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2837 {
2838 PrintNutritionsData();
2839 return true;
2840 }
2841 #endif
2842
2843 return false;
2844 }
2845
2847 {
2848 string debug_output;
2849
2850 debug_output = super.GetDebugText();
2851
2854
2855 return debug_output;
2856 }
2857
2858
2859
2860
2861
2863 {
2864 float ret = super.GetBaitEffectivity();
2865
2867 {
2868 ret *= 0.5;
2869 }
2870
2871 return ret;
2872 }
2873
2875 {
2877 }
2878
2880 {
2882 }
2883
2885 {
2887 }
2888
2889 #ifdef DIAG_DEVELOPER
2890 private void PrintNutritionsData()
2891 {
2892 string nutritionsData = "";
2893
2896
2898 if (profile)
2899 {
2900 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2902 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2906 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2908
2911
2912 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2914 }
2915
2916 nutritionsData += "-----\n";
2917
2919 }
2920 #endif
2921
2923
2926 {
2928 }
2929}
2930
2932{
2934};
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.