Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 0
Славик

Отражение урона убийце

Как сделать отражение урона убийце? Имеется PVE сервер (убивать нельзя) и чтобы игроки соблюдали это правило нужно как-то отключить урон или зазеркалить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 1

Славик Отключить урон полностью SetAllowDamage(false) - это значит не будет урона вообще - никогда - никакого - те God MOde что не катит по понятным причинам

Отключить урон от выстрелов и ударов можно, но от прямого выстрела в бошку это не спасет тк обработка эта не долетает до стороны скриптов и смерть обрабатывается в движке абсолютно и бесповоротно

 

Так вот

Отключить урон от ударов и выстрелов игроков можно тут

Класс PlayerBase

Функция EEHitBy

Там же можно и зазеркалить

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах





  • 0

BorizzK Спасибо за быстрый ответ ))) Я ещё только учусь, поэтому не знаю где это всё находится. В какком файле это пишется? В Init.c?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Славик Класс PlayerBase это PlayerBase.c в scripts\4_World\Entities\ManBase

 

В общих чертах распишу

 

1 Для начала Вам надо понять что такое моддинг, скриптинг, как устроен язык enfusion, структуру и тп

Для этого читаем

 

и

 

https://community.bistudio.com/wiki/DayZ:Enforce_Script_Syntax

 

сопоставляем

 

можно еще вкратце прочитать про C#

 

Далее

 

открываем pbo-менеджером (скачать, уствновить) файл scripts.pbo из папки dta

его содержимое вытаскиваем в папку scripts в корне сервера

в параметр запуска сервера добавляем -filepatching

в конфиге сервера (по нему и параметрам запуска читаем отдельную тему (поиск рулит) на форуме и в вики богемии (и на их форуме forums.dayz.com)

отключаем проверку сигнатур (на время тестов - отладки и тп - что бы тестить было проще без постоянной перепаковки серверного мода)

и приступаем

 

хотим отмоддидь этот PlayerBase

копируем PlayerBase.c рядом в PlayerBase_mymod.c

 

открываем

 

видим

 

class PlayerBase extends ManBase
{
 

тут содержимое класса (тело) - его переменные функциии и тп

это класс игрока - когда подключается игрок для него создается экземпляр класса и все операции с игроком идут через него

часть функций вызывает движок при определенных событиях

часть функций вызывается из функций класса или из других классов и тп

 

}

 

конец  тела класса

 

меняем - добавляем modded - движок (его компилятор при старте поймет что это мод и что оно перекроет/дополнит существующий класс)

modded class PlayerBase extends ManBase
{
 

все содержимое удаляем кроме функции

 

override void EEHitBy(TotalDamageResult damageResult, int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos)
{

 

тут код функции


}

 

}

 

функцию EEHitBy движок вызывает для конкретного игрока всякий раз когда по нему прилетает от игрков, зомби, машин и тп - кроме прямого попадания в бошку

override это означает что функция перекрывает существующую в нативном классе функцию или функцию в родительском классе (если в ее нет в нативном))

ну и дальше

 

Однако  - прямое попадание в бошку можно перехватить чуть ранее в DayZPlayerImplement.c - однако игрок всеравно будет мертвый - посему пофиг и туда не лезем

 

и вот берем мы эту функцию и видим

 

	override void EEHitBy(TotalDamageResult damageResult, int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos)
	{
		/*
		Print("ProjectileDebugging | Damage Health: " + damageResult.GetDamage(dmgZone,"Health") + " | Zone: " + dmgZone);
		Print("ProjectileDebugging | Damage Blood: " + damageResult.GetDamage(dmgZone,"Blood") + " | Zone: " + dmgZone);
		Print("ProjectileDebugging | speedCoef: " + speedCoef);
		Print("-----------------------------------------------");*/
		
		if( m_AdminLog )
		{
			m_AdminLog.PlayerHitBy( damageResult, damageType, this, source, component, dmgZone, ammo );
		}
		
		super.EEHitBy(damageResult, damageType, source, component, dmgZone, ammo, modelPos);
		
		if( damageResult != null && damageResult.GetDamage(dmgZone, "Shock") > 0)
		{
			m_LastShockHitTime = GetGame().GetTime();
		}
		
		 //! DT_EXPLOSION & FlashGrenade
		if( damageType == DT_EXPLOSION && ammo == "FlashGrenade_Ammo" )
		{
			GetStaminaHandler().DepleteStamina(EStaminaModifiers.OVERALL_DRAIN);
		}
		
		//new bleeding computation
		//---------------------------------------
		if( damageResult != null && GetBleedingManagerServer() )
		{
			float dmg = damageResult.GetDamage(dmgZone, "Blood");
			GetBleedingManagerServer().ProcessHit(dmg, source, component, dmgZone, ammo, modelPos);
		}
		//---------------------------------------
		
		#ifdef DEVELOPER
		if(DiagMenu.GetBool(DiagMenuIDs.DM_MELEE_DEBUG_ENABLE))
		{
			Print("EEHitBy() | Charater " + GetDisplayName() + " hit by " + source.GetDisplayName() + " to " + dmgZone);
		}
		
		PluginRemotePlayerDebugServer plugin_remote_server = PluginRemotePlayerDebugServer.Cast( GetPlugin(PluginRemotePlayerDebugServer) );
		if(plugin_remote_server)
		{
			plugin_remote_server.OnDamageEvent(this, damageResult);
		}
		#endif
		if( GetGame().IsDebugMonitor() )
			m_DebugMonitorValues.SetLastDamage(source.GetDisplayName());
		
		if( m_ActionManager )
			m_ActionManager.Interrupt();
		
		//analytics
		GetGame().GetAnalyticsServer().OnEntityHit( source, this );
	}

Видим мы что в функцию передаются различные параметры

Сам игрок по которому прилетело там не указан тк он тут везде по умолчанию - экземпляр класса же его и двигло свам его где надо подпихивает

ну или можно самому указать где надо - this - в этой переменной он и будет

 

Так вот

нас интерисует уСЧерб и от кого оно прилетело

 

по коду функции все в приниципе понятно

 

Продолжение следует

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

BorizzK Всё, понял. Сейчас разбираться буду. От этого языка программирования я далёк конечно, в основном только сайты делал... Вижу, что опять предстоит путь познаний длинною в жизнь ))))) Спасибо тебе огромное

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.