13class PluginTransmissionAgents
extends PluginBase
16 ref map<int, string> m_SimpleAgentList =
new map<int, string>;
17 bool m_IsConstructed =
false;
19 void PluginTransmissionAgents()
22 RegisterAgent(
new InfluenzaAgent);
23 RegisterAgent(
new CholeraAgent);
24 RegisterAgent(
new SalmonellaAgent);
25 RegisterAgent(
new BrainAgent);
26 RegisterAgent(
new FoodPoisonAgent);
27 RegisterAgent(
new ChemicalAgent);
28 RegisterAgent(
new WoundAgent);
29 RegisterAgent(
new NerveAgent);
30 RegisterAgent(
new HeavyMetalAgent);
37 void RegisterAgent(AgentBase agent)
45 void ConstructSimpleAgentList()
50 for(
int i = 0; i < m_AgentList.Count();i++)
52 AgentBase agent = m_AgentList.GetElement(i);
55 m_SimpleAgentList.Insert(agent_type, agent_name);
72 map<int, string> GetSimpleAgentList()
74 if( !m_IsConstructed )
76 ConstructSimpleAgentList();
77 m_IsConstructed =
true;
79 return m_SimpleAgentList;
87 static string GetNameByID(
int agent_id)
89 return m_AgentList.Get(agent_id).GetName();
98 target.RemoveAllAgents();
108 target.RemoveAgent(agent_id);
118 if( !m_AgentList.Get(agent_id) )
return 0;
119 return m_AgentList.Get(agent_id).GetTransferabilityIn();
124 AgentBase agent = m_AgentList.Get(agentId);
136 if( !m_AgentList.Get(agent_id) )
138 return m_AgentList.Get(agent_id).GetDieOffSpeed();
149 if( !m_AgentList.Get(agent_id) )
151 return m_AgentList.Get(agent_id).GetDieOffSpeedEx(player);
159 if( !m_AgentList.Get(agent_id) )
161 return m_AgentList.Get(agent_id).GetPotency();
172 if( !m_AgentList.Get(agent_id) )
174 return m_AgentList.Get(agent_id).GetPotencyEx(player);
185 if( !m_AgentList.Get(agent_id) )
187 return m_AgentList.Get(agent_id).GetInvasibilityEx(player);
195 if(!m_AgentList.Get(agent_id))
197 return m_AgentList.Get(agent_id).GetDrugResistance(drugType, player);
206 if( !m_AgentList.Get(agent_id) )
208 return m_AgentList.Get(agent_id).GetAntiboticsResistance();
219 if( !m_AgentList.Get(agent_id) )
221 return m_AgentList.Get(agent_id).GetAntibioticsResistanceEx(player);
231 if(!m_AgentList.Get(agent_id))
233 return m_AgentList.Get(agent_id).GetTransferabilityOut();
243 if(!m_AgentList.Get(agent_id))
245 return m_AgentList.Get(agent_id).GetTransferabilityAirOut();
255 if( !m_AgentList.Get(agent_id) )
257 return m_AgentList.Get(agent_id).GetInvasibility();
265 if( !m_AgentList.Get(agent_id) )
267 return m_AgentList.Get(agent_id).GetDigestibility();
278 if (!m_AgentList.Get(agent_id))
280 return m_AgentList.Get(agent_id).GetDigestibilityEx(player);
290 if( !m_AgentList.Get(agent_id) )
292 return m_AgentList.Get(agent_id).GetMaxCount();
307 int sourceAgents = agents;
309 if(!sourceAgents && source) sourceAgents = source.GetAgents();
310 if(target) targetAgents = target.GetAgents();
311 int pollution =
g_Game.GetMission().GetWorldData().GetPollution();
328 if (pollution & EPollution.HEAVYMETAL)
330 sourceAgents = sourceAgents |
eAgents.HEAVYMETAL;
332 sourceAgents = sourceAgents |
eAgents.CHOLERA;
337 sourceAgents = sourceAgents |
eAgents.FOOD_POISON |
eAgents.HEAVYMETAL;
342 if (pollution & EPollution.HEAVYMETAL)
344 sourceAgents = sourceAgents |
eAgents.HEAVYMETAL;
375 float prot_level_target =
Math.Max(prot_level_mask_target, prot_level_headgear_target);
376 float prot_level_source =
Math.Max(prot_level_mask_source, prot_level_headgear_source);
377 float prot_level_combined = 1 - (1 - prot_level_target) * (1 - prot_level_source);
406 if( target.IsItemBase() )
409 ib_target.TransferAgents(agents);
423 if(target && (agents != 0) && target.IsEntityAI() )
425 int bit_count =
Math.GetNumberOfSetBits(agents);
427 for (
int i = 0; i < bit_count; i++)
429 int agent_bit =
Math.Pow(2,
Math.GetNthBitSet(agents,i));
432 target.InsertAgent(agent_bit,dose_size);
448 if(target && (agents != 0) && target.IsEntityAI() )
450 int bit_count =
Math.GetNumberOfSetBits(agents);
452 for (
int i = 0; i < bit_count; i++)
454 int agent_bit =
Math.Pow(2,
Math.GetNthBitSet(agents,i));
456 target.InsertAgent(agent_bit,count);
476 target.InsertAgent(agent, count);
490 agents_out.Insert(mask);
506 ItemBase attachment =
ItemBase.Cast(player.GetInventory().FindAttachment(slot));
511 return attachment.GetProtectionLevel(type, consider_filter, system);
538 float prot = 1 - protection;
546 else if( inject_type ==
InjectTypes.ITEM_TO_PLAYER )
550 else if( inject_type ==
InjectTypes.PLAYER_AIR_PLAYER )
557 float result = 1 * prot * transf * dose_size;
576 float prot = 1 - protection;
584 else if( inject_type ==
InjectTypes.ITEM_TO_PLAYER )
588 else if( inject_type ==
InjectTypes.PLAYER_AIR_PLAYER )
596 bool dice =
Math.RandomFloat01() < (prot * transf);
607 if (!m_AgentList.Get(agent_id))
610 return m_AgentList.Get(agent_id).GrowDuringMedicalDrugsAttack(
EMedicalDrugsType.ANTIBIOTICS, player);
bool GrowDuringMedicalDrugsAttack(EMedicalDrugsType drugType, PlayerBase player)
should this agent grow based on invasibility even during usage of specific medical drugs attack
provides access to slot configuration
Plugin interface for controlling of agent pool system.
float InjectAgentWithPlayerDose(EntityAI target, int agent, float protection, float dose_size, int inject_type)
Injects agent to a given target.
bool GrowDuringMedicalDrugsAttack(int agentId, EMedicalDrugsType drugType, PlayerBase player)
static int GetAgentMaxCount(int agent_id)
Returns max count attribute for given agent.
static float GetProtectionLevelEx(int type, int slot, Man player, bool consider_filter=true, int system=0)
Protection level of an attachment against enviromental hazard (mask/filters for example).
int GetAgentSpecificDrugResistance(int agent_id, EMedicalDrugsType drugType, PlayerBase player)
float GetAgentInvasibilityEx(int agent_id, PlayerBase player)
Returns invasibility attribute for given agent.
float CalculateAgentsToTransmit(int agent_id, float protection, int dose_size, int inject_type)
Calculates number of agents that can be transmitted (based on given dose_size).
bool DetermineChanceToTransmit(int agent_id, float protection, int inject_type)
Agent transmission chance processing.
void TransmitAgents(EntityAI source, EntityAI target, int pathway, int dose_size=1000)
Process transmission of agents between entities (for specified transmission type) (see TransmitAgents...
float GetAgentDigestibility(int agent_id)
Returns stomach digetibility attribute for given agent (see GetAgentDigestibilityEx()).
float GetDieOffSpeed(int agent_id)
Returns dieOfSpeed attribute for given agent (see GetDieOffSpeedEx()).
void InjectAgentsWithPlayer(EntityAI target, int agents, float protection, int dose_size, int inject_type)
Injects agents to a given target, using chance of transmission and full dose size if chance succeeds.
float GetAgentTransferabilityAirOut(int agent_id)
Returns transferabilitAiryOut attribute for given agent.
float GetAgentInvasibility(int agent_id)
Returns invasibility attribute for given agent.
EStatLevels GetPotency(int agent_id)
Returns potency attribute for given agent (see GetAgentPotencyEx()).
void InjectAgentsWithPlayerCount(EntityAI target, int agents, float protection, int dose_size, int inject_type)
Injects agents to a given target, with no probability, but the dose size is modified by m_Transferabi...
void InjectAgentsWithoutPlayer(EntityAI target, int agents)
Injects specified agents directly to target.
float GetAgentDieOffSpeedEx(int agent_id, PlayerBase player)
Returns dieOfSpeed attribute for given agent.
float GetProtectionLevel(int type, int slot, Man player)
Protection level of an attachment against enviromental hazard (mask/filters for example) (see GetProt...
float GetAgentDigestibilityEx(int agent_id, PlayerBase player)
Returns stomach digetibility attribute for given agent.
bool GrowDuringAntibioticsAttack(int agent_id, PlayerBase player)
DEPRECATED.
static void BuildAgentArray(int agents, array< int > agents_out)
float GetAgentAntiboticsResistanceEx(int agent_id, PlayerBase player)
Returns antibiotics resistance attribute for given agent.
float TransmitAgentsEx(EntityAI source, EntityAI target, int pathway, int dose_size=1000, int agents=0)
Process transmission of agents between entities (for specified transmission type).
float GetAgentAntiboticsResistance(int agent_id)
Returns antibiotics resistance attribute for given agent see GetAgentAntiboticsResistanceEx().
EStatLevels GetAgentPotencyEx(int agent_id, PlayerBase player)
Returns potency attribute for given agent.
float GetAgentTransferabilityIn(int agent_id)
Returns transferabilityIn attribute for given agent.
float GetAgentTransferabilityOut(int agent_id)
Returns transferabilityOut attribute for given agent.
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
const int AGT_UACTION_CONSUME
const int AGT_ITEM_TO_FLESH
const int AGT_UACTION_TOUCH
const int AGT_AIRBOURNE_BIOLOGICAL
const int AGT_TRANSFER_COPY
const int AGT_WATER_HOT_SPRING
const int AGT_UACTION_TO_PLAYER
const int AGT_AIRBOURNE_CHEMICAL
const int AGT_UACTION_TO_ITEM
override void RemoveAllAgents()
override void RemoveAgent(int agent_id)