Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
  • 0
thessend

Агенты и их передача

Начну сначала.
У меня стоит радиационная зона на скриптах перенесенная в мод( с добавлением агента и лечением) собственно при нахождении в зоне накапливаются агенты(логично,да) и есть от этих агентов лечение, тоже добавленное на основе витаминок сделанное которое при использовании убирает N кол-во агентов. Их в пачке 10 штук. 
Суть темы в том, что при использовании этой самой таблетки остальные таблетки становятся зараженными сальмонеллой. Откуда она берется я так и не смог выяснить вообще. 

Скрытый текст

Прилагаю настройки самой болезни :
Собственно сам агент 
 


class RadAgentSSS extends AgentBase
{
	override void Init()
	{
		m_Type 					= RadAgentsSSS.RADIATIONSSS;
		m_Invasibility 			= 0;//increase the agent count by this number per second if potent enough to grow
		m_TransferabilityIn		= 0;//to the player
		m_TransferabilityOut	= 0;//from the player
		m_AntibioticsResistance = 1;//[0..1], 0 means antibiotics have full effect, 1 means no effect
		m_MaxCount 				= 500;
		m_Potency 				= EStatLevels.GREAT;//grow when player's immune system is at this level or lower
		m_DieOffSpeed 			= 1;//how fast the agent dies off when not potent enough to grow(per sec)
	}
}

Модификатор 
 


class RadiationSSSMdfr: ModifierBase
{
	static const int RAD_AGENTSSS_THRESHOLD_ACTIVATE = 100;
	static const int RAD_AGENTSSS_THRESHOLD_DEACTIVATE = 0;
	// float chanceVomit = 0.1;
	// float chanceCough = 0.2;
	// bool m_IsVomiting;
	// bool m_IsCoughing;

	override void Init()
	{
		m_TrackActivatedTime 	= false;
		m_ID 					= RadModifiersSSS.MDF_RADIATIONSSS;
		m_TickIntervalInactive 	= DEFAULT_TICK_TIME_INACTIVE;
		m_TickIntervalActive 	= DEFAULT_TICK_TIME_ACTIVE;
	}

	override protected bool ActivateCondition(PlayerBase player)
	{
		if(player.GetSingleAgentCount(RadAgentsSSS.RADIATIONSSS) > RAD_AGENTSSS_THRESHOLD_ACTIVATE)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
 
	override protected void OnActivate(PlayerBase player)
	{
		// m_IsVomiting = false;
		// m_IsCoughing = false;
		//if( player.m_NotifiersManager ) player.m_NotifiersManager.AttachByType(eNotifiers.NTF_SICK);
		//player.DZ_SetRadSick(true);
		player.IncreaseDiseaseCount();
	}

	override protected void OnDeactivate(PlayerBase player)
	{
		//player.DZ_SetRadSick(false);
		player.DecreaseDiseaseCount();
	}

	override protected bool DeactivateCondition(PlayerBase player)
	{
		if(player.GetSingleAgentCount(RadAgentsSSS.RADIATIONSSS) <= RAD_AGENTSSS_THRESHOLD_DEACTIVATE)
		{
			return true;
		}
		else
		{
			return false;
		}
	}

	override protected void OnTick(PlayerBase player, float deltaT)
	{
		float currenthealth = player.GetHealth("GlobalHealth", "Health");
		player.SetHealth("GlobalHealth", "Health" ,  currenthealth - 0.4 );
		// if(!m_IsCoughing && chanceCough > Math.RandomFloatInclusive(0,1))
		// {
			// SymptomBase symptom1 = player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_COUGH);
			// m_IsCoughing = true;
		// }
		// if(!m_IsVomiting && chanceVomit > Math.RandomFloatInclusive(0,1))
		// {
			// SymptomBase symptom2 = player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_VOMIT);
			// m_IsVomiting = true;
		// }
	}
};

Лекарство 
 


class AntiRad: Edible_Base
{
	override void OnConsume(float amount, PlayerBase consumer)
	{
		float currenthealth = consumer.GetHealth("GlobalHealth", "Health");
		consumer.SetHealth("GlobalHealth", "Health" ,  currenthealth - 7 );
		consumer.m_AgentPool.AddAgent(RadAgentsSSS.RADIATIONSSS, -50);
	}
	
	override void SetActions()
	{
		super.SetActions();
		
		AddAction(ActionForceConsumeSingle);
		AddAction(ActionConsumeSingle);
	}
}

 

Если нужна еще какая то информация - пишите, дополню. 
 

 

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts










Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By BorizzK
      Ситуация такая
      В функцию надо передать 27 разнашерстных параметров
      если указывать больше 19 при запуске сервер крашит без крашлога и тп
      Передавать через массивы? вариант, но хотелось бы сделать красиво-красиво
       
      Взялся за класс Param
      прикинул - Param'сы бывают от 1 до 5 параметровые
      Значит можно передать 5 шт Param5 и 1 Param2
       
      Взялся тестить
      void FormingAreas() { private ref Param5<string, int, vector, float, int> MainParams; MainParams = new Param5<string, int, vector, float, int>("", 0, vector.Zero, 0.0, 0); MainParams.param1 = "AREA 1"; MainParams.param2 = 1; MainParams.param3 = vector.Zero; MainParams.param4 = 1.1; MainParams.param5 = 2; AddAreaParams(MainParams); }  
      Собственно ошибка возникает тут
       
      void AddAreaParams(Param p) { ref Areas Area = new ref Areas; //AreaMainParams Param AreaMainParams = Param.Cast(p); Area.name = AreaMainParams.param1; //318 строка Area.id = AreaMainParams.param2; Area.center = AreaMainParams.param3; Area.center[1] = GetGame().SurfaceY(Area.center[0], Area.center[2]); Area.radius = AreaMainParams.param4; Area.maxplayers = AreaMainParams.param5; Тут про компиляции ошибочка
      $CurrentDir://mpmissions//dayzOffline.chernarusplus//_MOD//StrikeAreas//StrikeAreasClass.c(318): Can't find variable 'param1'
       
      Можно конечно определить MainParams в классе и передавать через него вызывая AddAreaParams без параметров
       
      Но хотелось бы разобраться именно с таким вариантом
       
      Спасибо!
    • By anap
      Доброго времени суток! Вопрос в следующем, как убрать меню передачи денег у ботов?
      if (_isMan and _isAlive and !_isZombie and !_isAnimal and !(_traderType in serverTraders)) then { if (s_givemoney_dialog < 0) then { s_givemoney_dialog = player addAction [format["Передать деньги %1", (name _cursorTarget)], "ZSC\actions\give_player_dialog.sqf",_cursorTarget, 3, true, true, "", ""]; }; } else { player removeAction s_givemoney_dialog; s_givemoney_dialog = -1; };
    • By almalk454
      Здравствуйте, в общем появилась необходимость передать данные на сервер, чтобы тот записал их в лог файл. Начал копать и наткнулся на PublicVariable, и PublicVariableServer. На сайте багемии говорится:
      Send the variable value to the server
      Т.е. послать переменную на сервер. В общем в необходимом файле я сделал так: 
       
      LOG_ = format["Testing: Player(%1)", (name player)]; publicVariableServer LOG_; А как отловить изменение или передачу этой переменной со стороны сервера?
       
       
       
  • Our picks

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.