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
Sign in to follow this  
Славик

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

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

Share this post


Link to post
Share on other sites

4 answers to this question

Recommended Posts

  • 1

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

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

 

Так вот

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

Класс PlayerBase

Функция EEHitBy

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

 

 

Share this post


Link to post
Share on other sites









  • 0

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

Share this post


Link to post
Share on other sites
  • 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 - в этой переменной он и будет

 

Так вот

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

 

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

 

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites

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
Sign in to follow this  

×
×
  • 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.