13class PluginTransmissionAgents
extends PluginBase
98 target.RemoveAllAgents();
108 target.RemoveAgent(agent_id);
119 return m_AgentList.Get(agent_id).GetTransferabilityIn();
151 return m_AgentList.Get(agent_id).GetDieOffSpeedEx(player);
174 return m_AgentList.Get(agent_id).GetPotencyEx(player);
187 return m_AgentList.Get(agent_id).GetInvasibilityEx(player);
197 return m_AgentList.Get(agent_id).GetDrugResistance(drugType, player);
208 return m_AgentList.Get(agent_id).GetAntiboticsResistance();
221 return m_AgentList.Get(agent_id).GetAntibioticsResistanceEx(player);
233 return m_AgentList.Get(agent_id).GetTransferabilityOut();
245 return m_AgentList.Get(agent_id).GetTransferabilityAirOut();
257 return m_AgentList.Get(agent_id).GetInvasibility();
267 return m_AgentList.Get(agent_id).GetDigestibility();
280 return m_AgentList.Get(agent_id).GetDigestibilityEx(player);
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() )
427 for (
int i = 0; i < bit_count; i++)
432 target.InsertAgent(agent_bit,dose_size);
448 if(target && (agents != 0) && target.IsEntityAI() )
452 for (
int i = 0; i < bit_count; 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 )
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
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.
void RemoveAllAgents(EntityAI target)
Removes all agents from given entity.
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)
map< int, string > GetSimpleAgentList()
Returns map of all registered agents in simplified format(for non-gameplay purposas mainly)
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)
void ConstructSimpleAgentList()
Builds simplified list of agents in <id, name> format.
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())
static void RemoveAgent(EntityAI target, int agent_id)
Removes given agent from given entity.
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.
static ref map< int, ref AgentBase > m_AgentList
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.
bool m_IsConstructed
simple <eAgents, agentName> pair
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)
void RegisterAgent(AgentBase agent)
Registers new agent into system.
map< int, ref AgentBase > GetAgentList()
Returns map of all registered agent classes.
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.
void PluginTransmissionAgents()
static string GetNameByID(int agent_id)
Returns agent's name from given id.
float GetAgentTransferabilityIn(int agent_id)
Returns transferabilityIn attribute for given agent.
ref map< int, string > m_SimpleAgentList
float GetAgentTransferabilityOut(int agent_id)
Returns transferabilityOut attribute for given agent.
Plugin interface for controlling of agent pool system.
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
static float RandomFloat01()
Returns a random float number between and min [inclusive] and max [inclusive].
static proto float Max(float x, float y)
Returns bigger of two given values.
static proto int GetNthBitSet(int value, int n)
returns the the index of n-th bit set in a bit mask counting from the right, for instance,...
static proto float Pow(float v, float power)
Return power of v ^ power.
static proto int GetNumberOfSetBits(int i)
returns the number of bits set in a bitmask i