123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- class ActionGiveBloodData : ActionData
- {
- int m_ItemBloodType;
- float m_BloodAmount;
- int m_Agents;
- }
- class ActionGiveBloodSelfCB : ActionContinuousBaseCB
- {
- override void CreateActionComponent()
- {
- m_ActionData.m_ActionComponent = new CAContinuousQuantityBloodTransfer(UAQuantityConsumed.BLOOD, UATimeSpent.BLOOD);
- }
- };
- class ActionGiveBloodSelf: ActionContinuousBase
- {
- const float CHEM_AGENT_BLOOD_REMOVAL_MODIFIER = 0.25;
- void ActionGiveBloodSelf()
- {
- m_CallbackClass = ActionGiveBloodSelfCB;
- m_SpecialtyWeight = UASoftSkillsWeight.PRECISE_HIGH;
-
- m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_SALINEBLOODBAG;
- m_FullBody = true;
- m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT | DayZPlayerConstants.STANCEMASK_CROUCH;
- m_Text = "#give_blood";
- }
-
- override void CreateConditionComponents()
- {
- m_ConditionItem = new CCINotRuinedAndEmpty;
- m_ConditionTarget = new CCTSelf;
- }
- override bool HasTarget()
- {
- return false;
- }
-
- override ActionData CreateActionData()
- {
- ActionGiveBloodData action_data = new ActionGiveBloodData;
- return action_data;
- }
-
- override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL )
- {
- if ( super.SetupAction(player, target, item, action_data, extra_data ) )
- {
- ActionGiveBloodData action_data_b = ActionGiveBloodData.Cast( action_data );
- action_data_b.m_ItemBloodType = action_data.m_MainItem.GetLiquidType();
- action_data_b.m_BloodAmount = action_data.m_MainItem.GetQuantity();
- action_data_b.m_Agents = action_data.m_MainItem.GetAgents();
- return true;
- }
- return false;
- }
- override void OnEndAnimationLoopServer( ActionData action_data )
- {
- //OnFinishProgressServer(action_data);
- if ( action_data.m_MainItem.IsKindOf("BloodSyringe") )
- {
- SyringeLambda lambda = new SyringeLambda(action_data.m_MainItem, "Syringe", action_data.m_Player);
- lambda.SetTransferParams(true, true, true);
- MiscGameplayFunctions.TurnItemIntoItemEx(action_data.m_Player, lambda);
- }
- }
-
- override void OnEndServer(ActionData action_data)
- {
- super.OnEndServer(action_data);
-
- ActionGiveBloodData action_data_b = ActionGiveBloodData.Cast( action_data );
- float blood_obtained = action_data_b.m_BloodAmount - action_data_b.m_MainItem.GetQuantity();
-
- PluginTransmissionAgents plugin = PluginTransmissionAgents.Cast(GetPlugin(PluginTransmissionAgents));
- plugin.TransmitAgentsEx(action_data.m_MainItem, action_data.m_Player, AGT_UACTION_TO_PLAYER,blood_obtained ,action_data_b.m_Agents);
-
-
- int bloodtypetarget = action_data_b.m_Player.GetStatBloodType().Get();
- bool bloodmatch = BloodTypes.MatchBloodCompatibility(action_data_b.m_ItemBloodType, bloodtypetarget);
- if ( !bloodmatch )
- {
-
-
- if (blood_obtained > PlayerConstants.HEMOLYTIC_RISK_SHOCK_THRESHOLD)
- {
- action_data_b.m_Player.m_UnconsciousEndTime = -60;
- action_data_b.m_Player.SetHealth("","Shock",0);
- if (blood_obtained > PlayerConstants.HEMOLYTIC_REACTION_THRESHOLD)
- {
- action_data_b.m_Player.m_ModifiersManager.ActivateModifier(eModifiers.MDF_HEMOLYTIC_REACTION);
- }
- }
- }
-
- if ( action_data_b.m_MainItem && action_data_b.m_MainItem.GetQuantity() <= 0.01 )
- {
- action_data_b.m_MainItem.SetQuantity(0);
- }
-
- if (!(action_data_b.m_Agents & eAgents.CHEMICAL_POISON))//does bloodbag NOT contain nerve agent ?
- {
- float remove_count_agents = blood_obtained * CHEM_AGENT_BLOOD_REMOVAL_MODIFIER;
- action_data.m_Player.InsertAgent(eAgents.CHEMICAL_POISON, -remove_count_agents);
-
- }
- }
- };
- class SyringeLambda : TurnItemIntoItemLambda
- {
- void SyringeLambda (EntityAI old_item, string new_item_type, PlayerBase player) { }
- };
|