73 {
74 super.OnEndServer(action_data);
75
76 ActionGiveBloodData action_data_b = ActionGiveBloodData.Cast( action_data );
77 float blood_obtained = action_data_b.
m_BloodAmount - action_data_b.m_MainItem.GetQuantity();
78
79 PluginTransmissionAgents plugin = PluginTransmissionAgents.Cast(
GetPlugin(PluginTransmissionAgents));
81
82
83 int bloodtypetarget = action_data_b.m_Player.GetStatBloodType().Get();
84 bool bloodmatch = BloodTypes.MatchBloodCompatibility(action_data_b.
m_ItemBloodType, bloodtypetarget);
85
86 if ( !bloodmatch )
87 {
88
89
90 if (blood_obtained > PlayerConstants.HEMOLYTIC_RISK_SHOCK_THRESHOLD)
91 {
92 action_data_b.m_Player.m_UnconsciousEndTime = -60;
93 action_data_b.m_Player.SetHealth("","Shock",0);
94
95 if (blood_obtained > PlayerConstants.HEMOLYTIC_REACTION_THRESHOLD)
96 {
97 action_data_b.m_Player.m_ModifiersManager.ActivateModifier(
eModifiers.MDF_HEMOLYTIC_REACTION);
98 }
99 }
100 }
101
102 if ( action_data_b.m_MainItem && action_data_b.m_MainItem.GetQuantity() <= 0.01 )
103 {
104 action_data_b.m_MainItem.SetQuantity(0);
105 }
106
108 {
110 action_data.m_Player.InsertAgent(
eAgents.CHEMICAL_POISON, -remove_count_agents);
111
112 }
113 }
PluginBase GetPlugin(typename plugin_type)
const float CHEM_AGENT_BLOOD_REMOVAL_MODIFIER
const int AGT_UACTION_TO_PLAYER