Show Damage

Тема в разделе "Общего назначения", создана пользователем denfil777, 2 ноя 2012.

  1. denfil777

    denfil777 Капо

    Show Damage

    [​IMG]

    Мутатор за авторством команды KF-Pub. Отображает нанесенный мобу урон, так же есть возможность настроить цвет текста. Работает в мультиплеере. Но к сожалению не совместим с Server Perks.​

    Скриншоты:
    [​IMG]

    [​IMG]

    [​IMG]
    Видео

    Код для батника: Mutator=KFpubShowDamage.KFpubShowDmg

    Ссылка на источник Steam WorkShop

    Ссылка на скачивание: Яндекс.Диск

    Версии от Flame

    В строке запуска (или в MutLoader'е) этот мутатор ставить после ServerPerksMut.ServerPerksMut
    (кроме того поправил warning'и некоторые из-за некорректного KFpubShowDmg.GetDescriptionText)

    Во всех случаях мутатор добавлять в виде ShowDamageMut.KFpubShowDmg
    Как то я его частично переименовал, чтобы авторов не забыть, но вообще потом надо бы более удобное название сделать

    Версия (компилировалось для SP 6.1) для SP без SRGameType
    Ссылка 1 или Ссылка 2

    Версия (только исходник - самостоятельная компиляция требуется) для SP с SRGameType
    Ссылка 1 или Ссылка 2

    Кроме того меня раздражает то, что мутатор не корректно учитывает посмертный урон.
    То есть если, например, пристрелить клота в голову, то отобразится много тысяч урона (если пушка мощная). Хотя засчитается совсем другое число. Поэтому поправленная версия:

    Spoiler

    Версия (компилировалось для SP 6.1) для SP без SRGameType
    Ссылка 1 или Ссылка 2

    Версия (только исходник - самостоятельная компиляция требуется) для SP с SRGameType
    Ссылка 1 или Ссылка 2

    могут быть ошибки
    проверял только на своей модифицированной версии (у меня версия с SRGameType)
     
    Flame и ЛОХМАТЫЙ нравится это.
  2. warpel

    warpel Солдат

    Очень интересная штука. И если взялся , укажи откуда новость взята.
     
  3. Atlan

    Atlan Капо

    Следовало указать главное,не совместим с сп.
     
  4. Dr_Killjoy

    Dr_Killjoy Заблокированные

    Этот худ был вырезан из рпг мода, видно сразу же, невооруженным взглядом.
     
  5. denfil777

    denfil777 Капо

    А это ЧТО? Ссылка на источник Steam WorkShop

    Вместе с сп я не проверял. Спасибо за инфу, добавил.

    И о чем это говорит? :turned:
     
  6. Dr_Killjoy

    Dr_Killjoy Заблокированные

    То что он не на 100% за авторством команды кпаб.
     
  7. HekuT

    HekuT Заблокированные

    Ранее мутатор находился на серверах KFManiacs, теперь он свободно может распространиться по простору интернета. Спасибо за вырезку.
     
  8. denfil777

    denfil777 Капо

    Извечный спор, кто же автор.... В исходниках мута автор указан, а уж кто В ДЕЙСТВИТЕЛЬНОСТИ АВТОР, вопрос риторический. И на работу мутатора ну ни как не влияет. Или же предлагаешь выискивать реального автора прежде чем постить тему?

    Вот кусочек исходника с копирайтом.
    //=============================================================================
    // KFpubShowDmg
    //=============================================================================
    // Show Damage Mutator
    // Version 0.4
    // Last-Modified: 04 October 2012
    //=============================================================================
    // Created by r1v3t
    // © 2011, KFpub :: www.kfpub.com
    //=============================================================================
     
  9. warpel

    warpel Солдат

    Ну насколько я помню тема на трипах есть.

    Ссылка
     
  10. denfil777

    denfil777 Капо

    В воркшопе ссылка и на трипы есть и на... куда угодно там есть, если глаза разуть. Я ссылку дал на источник. :ninja:
     
  11. Dr_Killjoy

    Dr_Killjoy Заблокированные

    А в чём собственно проблема?) Заметьте, я вас ни к чему не принуждал и ничего не предлагал. Просто заметил, что выглядит так же как и в рпг моде. Может я вообще ошибаюсь, а вы тут уже тему авторства развили на несколько постов) Лучше бы скрины кто-нить из рпг мода кинул, мож действительно моя память слишком дырявая и там другой худ.
     
  12. denfil777

    denfil777 Капо

    :blush: Я похож погорячился малость, вот и понесло меня :wacko: На вы обращаться не обязательно :wink:
     
  13. warpel

    warpel Солдат

    Не каждый полезет в воркшоп чтобы скачать мутатор , легче зайти к трипам.
     
  14. Dr_Killjoy

    Dr_Killjoy Заблокированные

    Под словом "вы" я имел в виду тебя и других людей которые отписались по этому вопросу :sleep:
     
    xorex нравится это.
  15. sonik82

    sonik82 Соучастник

    Смею заметить... при установке на steam версию сервера, можно выбрать перк,но прокачка не идёт! Мутатор можно отнести в разряд "серых".
     
  16. Flame

    Flame -Заслуженый кодер форума-

    Что в мутаторе хорошо - так это то, что его очень просто приспособить к SP
    (Особенно если у SP уже есть SRGameType свой)
    Хотя лучше бы использовали GameRules (вместо вмешательства в контроллер и геймтайп) - куда более гибкая реализация была бы.
    Ну да и ладно. Потом может свою версию выложу.


    1. Редактируем класс SRGameType:
    добавляем функции
    Код:
    function PlayerDamaged(int Damage, PlayerController PC)
    {
    	if(Damage == 0)
    	{
    		return;
    	}
    	KFPCServ(PC).OnPlayerDamaged(Damage);
    }
    
    function int ReduceDamage(int Damage, Pawn injured, Pawn instigatedBy, Vector HitLocation, out Vector Momentum, class<DamageType> DamageType)
    {
    	Damage = super.ReduceDamage(Damage, injured, instigatedBy, HitLocation, Momentum, DamageType);
    
    	if(PlayerController(instigatedBy.Controller) != none)
    	{
    		PlayerDamaged(Damage, PlayerController(instigatedBy.Controller));
    	}
    	return Damage;
    }
    2. Редактируем KFPCServ:
    добавляем репликацию
    replication
    {
    reliable if(Role == ROLE_Authority)
    OnPlayerDamaged;
    }
    и функцию
    Код:
    simulated function OnPlayerDamaged(int Damage)
    {
    	SRHUDKillingFloor(myHUD).ShowDamage(Damage, Level.TimeSeconds);
    }
    
    
    3. Редактируем SRHUDKillingFloor:
    добавляем переменные
    Код:
    struct SHitInfo
    {
    	var string Text;
    	var float LastHit;
    };
    
    var() int DamageColorR,DamageColorG,DamageColorB;
    struct Damage
    {
    	var int Damage;
    	var float LastHit;
    };
    
    var SHitInfo SHitText[4];
    var byte SHitInt;
    var float RY[20];
    var float RX[20];
    var Damage Dam[20];
    var int Dint;
    var byte secondViewed;
    
    функции
    Код:
    simulated function ShowDamage(int D, float LH)
    {
    	RX[Dint] = 0.40 + 0.20 * FRand();
    	RY[Dint] = 0.10 + 0.20 * FRand();
    	Dam[Dint].damage = D;
    	Dam[Dint].LastHit = LH;
    
    	Dint++;
    
    	if(Dint > 20)
    		Dint=0;
    }
    
    simulated function HandleSHit(Canvas C)
    {
    	local int i;
    	local int RColor, GColor, BColor;
    	local byte FontSize;
    	local float XPos, YPos, fadetimeB, fadetimeG, fadetimeR;
    
    	C.Font = GetConsoleFont(C);
    	for( i=0;i<3;i++)
    	{
    		XPos = 0.70 * C.ClipX;
    		YPos = (0.90 - ((Level.TimeSeconds - SHitText[i].LastHit) / 20)) * C.ClipY;
    		if(YPos <= 0.60)
    			YPos = 0.60;
    
    		if(i < 2 && 0.90 - ((Level.TimeSeconds - SHitText[i + 1].LastHit) / 20) <= 0.60 && SHitText[i + 1].Text != "" || i == 2 && 0.90 - ((Level.TimeSeconds - SHitText[0].LastHit) / 20) <= 0.60 && SHitText[0].Text != "")
    			SHitText[i].Text = "";
    
    		if(5 < Level.TimeSeconds - SHitText[i].LastHit)
    			{
    				SHitText[i].LastHit = 0;
    				SHitText[i].Text = "";
    			}
    			else if(SHitText[i].Text != "")
    			{
    				C.SetPos(Xpos, Ypos);
    				C.DrawText(SHitText[i].Text);
    			}
    	}
    
    	if(C.ClipX <= float(640))
    	{
    		FontSize = 7;
    	}
    	else
    	{
    		if(C.ClipX <= float(800))
    		{
    			FontSize = 6;
    		}
    		else
    		{
    			if(C.ClipX <= float(1024))
    			{
    				FontSize = 5;
    			}
    			else
    			{
    				if(C.ClipX <= float(1280))
    				{
    					FontSize = 4;
    				}
    				else
    				{
    					FontSize = 3;
    				}
    			}
    		}
    	}
    
    	C.Font = LoadFont(FontSize);
    	for(i=0;i<20;i++)
    	{
    
    		if(5 < Level.TimeSeconds - Dam[i].LastHit)
    			continue;
    
    		C.Style = ERenderStyle.STY_Translucent;//STY_Normal
    //		TWI: FF4040
        	RColor = Default.DamageColorR;
        	GColor = Default.DamageColorG;
        	BColor = Default.DamageColorB;
    
    		fadetimeR = (Level.TimeSeconds - Dam[i].LastHit) * (RColor / 5);
    		fadetimeG = (Level.TimeSeconds - Dam[i].LastHit) * (GColor / 5);
    		fadetimeB = (Level.TimeSeconds - Dam[i].LastHit) * (BColor / 5);
    
    		C.SetPos( RX[i]* c.clipx, RY[i]* c.clipy);
    
    		C.DrawColor.R = RColor - fadetimeR;
    		C.DrawColor.G = GColor - fadetimeG;
    		C.DrawColor.B = BColor - fadetimeB;
    
    		C.DrawText(Dam[i].damage);
    	}
    }
    
    simulated event PostRender(Canvas Canvas)
    {
    	super.PostRender(Canvas);
    	HandleSHit(Canvas);
    }
    
    и инициализируем переменные цвета в defaultproperties
    Код:
    defaultproperties
    {
    	DamageColorR=255
    	DamageColorG=215
    	DamageColorB=255
    ...
    }
    Правда переменные цвета я вынес из настроек и зашил внутри SRHUD, но вряд ли их надо часто менять, а настроить нужный цвет можно и используя оригинальный мутатор.

    С другой стороны можно легко переделать мутатор, чтобы он наследовал классы SP.
    Тогда не надо будет править SP и можно будет использовать этот мутатор.
    Но я не сторонник подобного подхода - лучше сделать, как написано выше.
    Но если всёж решились добавлять отдельный мутатор, то ссылки ниже...
    В строке запуска (или в MutLoader'е) этот мутатор ставить после ServerPerksMut.ServerPerksMut

    (кроме того поправил warning'и некоторые из-за некорректного KFpubShowDmg.GetDescriptionText)

    Во всех случаях мутатор добавлять в виде ShowDamageMut.KFpubShowDmg
    Как то я его частично переименовал, чтобы авторов не забыть, но вообще потом надо бы более удобное название сделать

    Версия (компилировалось для SP 6.1) для SP без SRGameType
    Ссылка 1 или Ссылка 2

    Версия (только исходник - самостоятельная компиляция требуется) для SP с SRGameType
    Ссылка 1 или Ссылка 2

    Кроме того меня раздражает то, что мутатор не корректно учитывает посмертный урон.
    То есть если, например, пристрелить клота в голову, то отобразится много тысяч урона (если пушка мощная). Хотя засчитается совсем другое число. Поэтому поправленная версия:
    заменяю функцию ReduceDamage в KFpubShowDmgGT
    Код:
    function int ReduceDamage(int Damage, Pawn injured, Pawn instigatedBy, Vector HitLocation, out Vector Momentum, class<DamageType> DamageType)
    {
    	local int realDamage;
    	Damage = super.ReduceDamage(Damage, injured, instigatedBy, HitLocation, Momentum, DamageType);
    	realDamage=Damage;
    	if(Damage>injured.Health) realDamage=injured.Health;
    	if(PlayerController(instigatedBy.Controller) != none)
    	{
    		PlayerDamaged(realDamage, PlayerController(instigatedBy.Controller));
    	}
    	return Damage;
    }
    
    Версия (компилировалось для SP 6.1) для SP без SRGameType
    Ссылка 1 или Ссылка 2

    Версия (только исходник - самостоятельная компиляция требуется) для SP с SRGameType
    Ссылка 1 или Ссылка 2

    могут быть ошибки
    проверял только на своей модифицированной версии (у меня версия с SRGameType)

    написал им там в темке немножко - может авторы что поправят, если меня премодерация пропустит ))
     
    denfil777, xorex, Папка01 и 2 другим нравится это.
  17. sonik82

    sonik82 Соучастник

    Вторая версия отказывается работать! На первой сервер ещё загружается, но урон не отображается. (последнее обновление сервера)
     
  18. Atlan

    Atlan Капо

    А мне казалось видели все тут темку,ладно,как говорится,вот вам для ленивых
     
    ЛОХМАТЫЙ, Папка01 и Фрэгл нравится это.
  19. Flame

    Flame -Заслуженый кодер форума-

    Не совсем про этот мутатор речь (просьба перенести в нужную тему, если она есть)
    Даже совсем не про этот )
    Но что-то я не нашёл на форуме темки про тот, что нужно
    Только на основной страничке - мутатор "Сообщения при убийстве со звуками"
    Попросили меня его поправить - я поправил
    Так что пусть тут будет

    1. SRHUDKillingFloor при компиляции использовался из пакета GrozaPerk, поправил на пакет ServerPerks
    2. Добавил "хак" (tmpSound), чтобы при добавлении мутатора не надо было добавлять его в ServerPackages
    Ссылка 1 или Ссылка 2

    В архиве сам мутатор, поправленный SRHUDKillingFloor.uc и уже окомпилированный вариант ServerPerks
    В общем инструкция для ленивых: поставить мутатор, заменить ServerPerks.u, для остальных мутатор + авторская инструкция как править класс SRHUDKillingFloor
    Перескажу её своими словами:
    Отредактировать PostBeginPlay():
    Добавить вызов таймера:
    SetTimer(1,true);
    Для SP 6.01 эта функция будет выглядеть так
    Код:
    simulated function PostBeginPlay()
    {
    	local Font MyFont;
    
    	Super(HudBase).PostBeginPlay();
    	SetHUDAlpha();
    
    	foreach DynamicActors(class'KFSPLevelInfo', KFLevelRule)
    		Break;
    
    	Hint_45_Time = 9999999;
    
    	MyFont = LoadWaitingFont(0);
    	MyFont = LoadWaitingFont(1);
    
    	bUseBloom = bool(ConsoleCommand("get ini:Engine.Engine.ViewportManager Bloom"));
    	bUseMotionBlur = Class'KFHumanPawn'.Default.bUseBlurEffect;
    
    	SetTimer(1,true);
    }
    
    Добавить функции
    Код:
    function Timer()
    {
    	local int i, j;
    	super.Timer();
    
    	for( i=0; i<8; ++i )
    	{
    		if(Level.TimeSeconds > LocalMessages[i].EndOfLife && Class<Monster>(LocalMessages[j].OptionalObject) != None)
    		{
    			for(j=i; j<8; ++j)
    			{
    				LocalMessages[j] = LocalMessages[j+1];
    			}
    			LocalMessages[7].StringMessage = " ";
    			LocalMessages[7].Switch = 0;
    			LocalMessages[7].EndOfLife = 0;
    			LocalMessages[7].OptionalObject = none;
    			return;
    		}
    	}
    }
    
    function HudLocalizedMessage GetLocalMessage(int i)
    {
    	return LocalMessages[i];
    }
    
    function SetLocalMessage(HudLocalizedMessage hudmessage, int i)
    {
    	LocalMessages[0] = hudmessage;
    }
    
    Кроме того не забывайте данный факт насчёт декомпиляции-компиляции SP6
     
    Папка01, ЛОХМАТЫЙ, denfil777 и ещё 1-му нравится это.
  20. Nuton

    Nuton Соучастник

    Ну дак GrozaPerk это с проекта kf.groza.ru мде...