Архив ServerPerks 4 и ниже

Тема в разделе "Мутаторы", создана пользователем Ex⊕rcisT, 10 янв 2011.

Метки:
  1. kok-s

    kok-s Консильери

    Как разошлись ребята))) глядишь завтра опять новая версия появиться)))))))))
     
  2. prototype22

    prototype22 Солдат

    Да чтож такое...
    Тока обновляюсь и тут нате выкусите, сюрприз в виде новой версии :))
     
  3. SpeC00L

    SpeC00L Солдат

    Попробовал верс 4.38 сразу заметил =минус= : Ярлык перка выше 15 лвл не меняется ,а только прибавляет звёзды
    Нужно сделать смену цвета ярлыка с 5 звёздами по достижению ЛВЛ !
     
  4. kok-s

    kok-s Консильери

    ну как бы это всегда было так)) в 4.35 добавили синий цвет, а до этого был зелёный)). Всё остальное уже дело рук пользователей не имеющих отношения к разработки ServerPerks
     
  5. prototype22

    prototype22 Солдат

    Хм, у меня нормально все, после 15 лвла идет синяя иконка

    Morkleb: В ServerPerksV4.ini найди строчку MaxPerksLevel=6 и поменяй 6 на нужный тебе лвл :)
    помоему это уже давно заезженная тема :)
     
  6. Morkleb

    Morkleb Соучастник

    не успел вовремя пост удалить)
    на самом деле я говорил про другое.. я смотрел содержимое разобранного мутатора и по невнимательности глянул в базы перков от мутатора CustomWeaponMod (а там как раз только до 6) потому решил что не то скачал..
     
    ЛОХМАТЫЙ нравится это.
  7. SpeC00L

    SpeC00L Солдат

    ДА,синяя иконка, НО! выше 20 лвл к ней во 2 ряд прибавляются звёзды,вместо смены цвета ярлыка

    и ещё:Оружие в магазе не удобно распределно получается,только по назначению,а куда например пристроить ядовитую иньекцию и флайр из ВТФ? в стандартном списке нет МАС10!
     
  8. kok-s

    kok-s Консильери

    Это настроить легче простого! МАС10 есть. Осталось только руссифицировать.
     
  9. Flack

    Flack Солдат

    Медику конечно!! Он профит имеет от инекции (он сильнее поражает ею и зачисляется как хилинг других игроков).

    P.S. А че за "флайр" ?
     
  10. SpeC00L

    SpeC00L Солдат

    в WTF -осветительные флайеры,удобные на тёмных картах. И какие плюсы у нового СервПерк?

    Так настрой ,если так просто..и выложи здесь ЛВЛов на 50 запас цветных,красивых иконок перков!)очень пригодиться
    так же интересует-как добавить на посл волны больше флэшек?
     
  11. kok-s

    kok-s Консильери

    SpeC00L 1) Я про оружие, а иконки тебе просто так ни кто рисовать не будет. 2) Тебе нужно юзать песочницу.
     
  12. SpeC00L

    SpeC00L Солдат

    На сервПерк 4.1 тут на форуме нашёлся 4ел--котор сумел сделать и выложить вариант с цветн ярлыками!
    а если пишешь проще простого--так и показал бы своё творение для 4.38!Было бы крайне кстати.
     
  13. bashish

    bashish Соучастник

    Подскажите что надо поправить что бы выбор перков у торговца нормально работал и отображался. У меня сейчас вот так: wqe.png
    Версия 4.38. Нашел информацию что что то надо править в KFPCServ.uc и ServerStStats.uc а что именно не знаю. Вот код если нужно:
    KFPCServ.uc
    Код:
    class KFPCServ extends KFPlayerController;
    
    var array<GUIBuyable> AllocatedObjects; // To prevent memory leaks in trader.
    
    function SendSelectedVeterancyToServer(optional bool bForceChange)
    {
    	if( Level.NetMode!=NM_Client && ServerStStats(SteamStatsAndAchievements)!=none )
    		ServerStStats(SteamStatsAndAchievements).WaveEnded();
    }
    function SelectVeterancy(class<KFVeterancyTypes> VetSkill, optional bool bForceChange)
    {
    	if( ServerStStats(SteamStatsAndAchievements)!=none )
    		ServerStStats(SteamStatsAndAchievements).ServerSelectPerk(Class<SRVeterancyTypes>(VetSkill));
    }
    
    // Allow clients fix the behindview bug themself
    exec function BehindView( Bool B )
    {
    	if ( Vehicle(Pawn)==None || Vehicle(Pawn).bAllowViewChange ) // Allow vehicles to limit view changes
    	{
    		ClientSetBehindView(B);
    		bBehindView = B;
    	}
    }
    exec function ToggleBehindView()
    {
    	ServerToggleBehindview();
    }
    function ServerToggleBehindview()
    {
    	local bool B;
    
    	if( Vehicle(Pawn)==None || Vehicle(Pawn).bAllowViewChange )
    	{
    		B = !bBehindView;
    		ClientSetBehindView(B);
    		bBehindView = B;
    	}
    }
    
    function ShowBuyMenu(string wlTag,float maxweight)
    {
    	StopForceFeedback();
    	ClientOpenMenu(string(Class'SRGUIBuyMenu'),,wlTag,string(maxweight));
    }
    
    simulated final function ResetItem( GUIBuyable Item )
    {
    	Item.ItemName = "";
    	Item.ItemDescription = "";
    	Item.ItemCategorie = "";
    	Item.ItemImage = None;
    	Item.ItemWeaponClass = None;
    	Item.ItemAmmoClass = None;
    	Item.ItemPickupClass = None;
    	Item.ItemCost = 0;
    	Item.ItemAmmoCost = 0;
    	Item.ItemFillAmmoCost = 0;
    	Item.ItemWeight = 0;
    	Item.ItemPower = 0;
    	Item.ItemRange = 0;
    	Item.ItemSpeed = 0;
    	Item.ItemAmmoCurrent = 0;
    	Item.ItemAmmoMax = 0;
    	Item.bSaleList = false;
    	Item.bSellable = false;
    	Item.bMelee = false;
    	Item.bIsVest = false;
    	Item.bIsFirstAidKit = false;
    	Item.ItemPerkIndex = 0;
    	Item.ItemSellValue = 0;
    }
    
    defaultproperties
    {
         LobbyMenuClassString="wmod.SRLobbyMenu"
    }
    

    ServerStStats.uc

    Код:
    // Written by .:..: (2009)
    Class ServerStStats extends KFSteamStatsAndAchievements;
    
    var ClientPerkRepLink Rep;
    var StatsObject MyStatsObject;
    var KFPlayerController PlayerOwner;
    var ServerPerksMut MutatorOwner;
    var bool bHasChanged,bStatsChecking,bStHasInit,bHadSwitchedVet,bSwitchIsOKNow,bStatsReadyNow;
    
    var class<SRVeterancyTypes> SelectingPerk;
    
    final function int GetID()
    {
    	return MyStatsObject.ID;
    }
    final function SetID( int ID )
    {
    	MyStatsObject.ID = ID;
    }
    
    function PreBeginPlay()
    {
    	if( Rep==None )
    	{
    		Rep = Spawn(Class'ClientPerkRepLink',Owner);
    		Rep.StatObject = Self;
    	}
    	Super.PreBeginPlay();
    }
    function PostBeginPlay()
    {
    	local Class<SRVeterancyTypes> Vet;
    
    	bStatsReadyNow = !MutatorOwner.bUseRemoteDatabase;
    	PlayerOwner = KFPlayerController(Owner);
    	MyStatsObject = MutatorOwner.GetStatsForPlayer(PlayerOwner);
    	KFPlayerReplicationInfo(PlayerOwner.PlayerReplicationInfo).ClientVeteranSkill = None;
    	if( !bStatsReadyNow )
    	{
    		Timer();
    		SetTimer(1+FRand(),true);
    		return;
    	}
    	bSwitchIsOKNow = true;
    	if( MyStatsObject!=None )
    	{
    		RepCopyStats();
    		bHasChanged = true;
    		CheckPerks(true);
    		if( Len(MyStatsObject.SelectedVeterancy)>0 )
    		{
    			// Don't allow use old ver stat
    			if( Left(MyStatsObject.SelectedVeterancy,12)~="ServerPerksV" )
    				MyStatsObject.SetSelectedPerk(Mid(MyStatsObject.SelectedVeterancy,InStr(MyStatsObject.SelectedVeterancy,".")));
    			Vet = Class<SRVeterancyTypes>(DynamicLoadObject(MyStatsObject.GetSelectedPerk(),Class'Class',true));
    			if( Vet!=None )
    				ServerSelectPerk(Vet);
    		}
    	}
    	else CheckPerks(true);
    	if( MutatorOwner.bForceGivePerk && KFPlayerReplicationInfo(PlayerOwner.PlayerReplicationInfo).ClientVeteranSkill==None )
    		ServerSelectPerk(Rep.PickRandomPerk());
    	bSwitchIsOKNow = false;
    	SetTimer(0.1,false);
    }
    final function GetData( string D )
    {
    	local Class<SRVeterancyTypes> Vet;
    
    	bStatsReadyNow = true;
    	MyStatsObject.SetSaveData(D);
    	RepCopyStats();
    	bHasChanged = true;
    	bSwitchIsOKNow = true;
    
    	CheckPerks(true);
    	if( Len(MyStatsObject.SelectedVeterancy)>0 )
    	{
    		// Don't allow use old ver stat
    		if( Left(MyStatsObject.SelectedVeterancy,12)~="ServerPerksV" )
    			MyStatsObject.SetSelectedPerk(Mid(MyStatsObject.SelectedVeterancy,InStr(MyStatsObject.SelectedVeterancy,".")));
    		Vet = Class<SRVeterancyTypes>(DynamicLoadObject(MyStatsObject.GetSelectedPerk(),Class'Class',true));
    		if( Vet!=None )
    			ServerSelectPerk(Vet);
    	}
    	Rep.SendClientPerks();
    	if( MutatorOwner.bForceGivePerk && KFPlayerReplicationInfo(PlayerOwner.PlayerReplicationInfo).ClientVeteranSkill==None )
    		ServerSelectPerk(Rep.PickRandomPerk());
    	bSwitchIsOKNow = false;
    	SetTimer(0.1,false);
    }
    function Timer()
    {
    	if( !bStatsReadyNow )
    	{
    		MutatorOwner.GetRemoteStatsForPlayer(Self);
    		return;
    	}
    	if( !bStHasInit )
    	{
    		if( PlayerOwner.SteamStatsAndAchievements!=None && PlayerOwner.SteamStatsAndAchievements!=Self )
    			PlayerOwner.SteamStatsAndAchievements.Destroy();
    		PlayerOwner.SteamStatsAndAchievements = Self;
    		PlayerOwner.PlayerReplicationInfo.SteamStatsAndAchievements = Self;
    		bStHasInit = true;
    		Rep.SendClientPerks();
    	}
    	if( bStatsChecking )
    	{
    		bStatsChecking = false;
    		CheckPerks(false);
    	}
    }
    final function RepCopyStats()
    {
    	// Copy all stats from data object for client replication
    	Rep.RDamageHealedStat = MyStatsObject.DamageHealedStat;
    	Rep.RWeldingPointsStat = MyStatsObject.WeldingPointsStat;
    	Rep.RShotgunDamageStat = MyStatsObject.ShotgunDamageStat;
    	Rep.RHeadshotKillsStat = MyStatsObject.HeadshotKillsStat;
    	Rep.RStalkerKillsStat = MyStatsObject.StalkerKillsStat;
    	Rep.RBullpupDamageStat = MyStatsObject.BullpupDamageStat;
    	Rep.RMeleeDamageStat = MyStatsObject.MeleeDamageStat;
    	Rep.RFlameThrowerDamageStat = MyStatsObject.FlameThrowerDamageStat;
    	Rep.RSelfHealsStat = MyStatsObject.SelfHealsStat;
    	Rep.RSoleSurvivorWavesStat = MyStatsObject.SoleSurvivorWavesStat;
    	Rep.RCashDonatedStat = MyStatsObject.CashDonatedStat;
    	Rep.RFeedingKillsStat = MyStatsObject.FeedingKillsStat;
    	Rep.RBurningCrossbowKillsStat = MyStatsObject.BurningCrossbowKillsStat;
    	Rep.RGibbedFleshpoundsStat = MyStatsObject.GibbedFleshpoundsStat;
    	Rep.RStalkersKilledWithExplosivesStat = MyStatsObject.StalkersKilledWithExplosivesStat;
    	Rep.RGibbedEnemiesStat = MyStatsObject.GibbedEnemiesStat;
    	Rep.RBloatKillsStat = MyStatsObject.BloatKillsStat;
    	Rep.RTotalZedTimeStat = MyStatsObject.TotalZedTimeStat;
    	Rep.RSirenKillsStat = MyStatsObject.SirenKillsStat;
    	Rep.RKillsStat = MyStatsObject.KillsStat;
    	Rep.RExplosivesDamageStat = MyStatsObject.ExplosivesDamageStat;
    	Rep.TotalPlayTime = MyStatsObject.TotalPlayTime;
    	Rep.WinsCount = MyStatsObject.WinsCount;
    	Rep.LostsCount = MyStatsObject.LostsCount;
    }
    
    final function ServerSelectPerk( Class<SRVeterancyTypes> VetType )
    {
    	local byte i;
    
    	if( !bStatsReadyNow )
    		return;
    	if( VetType==None || !SelectionOK(VetType) )
    	{
    		if( !bSwitchIsOKNow )
    			PlayerOwner.ClientMessage("Your desired perk is unavailable.");
    		return;
    	}
    	else if( KFPlayerReplicationInfo(PlayerOwner.PlayerReplicationInfo).ClientVeteranSkill==VetType )
    	{
    		if( SelectingPerk!=None )
    		{
    			SelectingPerk = None;
    			PlayerOwner.ClientMessage("You will remain the same perk now.");
    		}
    		return;
    	}
    	if( MyStatsObject!=None )
    		MyStatsObject.SetSelectedPerk(string(VetType));
    	if( !Level.Game.bWaitingToStartMatch && !bSwitchIsOKNow && (KFGameReplicationInfo(Level.GRI).bWaveInProgress || bHadSwitchedVet) && PlayerOwner.Pawn!=None )
    	{
    		PlayerOwner.ClientMessage(Repl(PlayerOwner.YouWillBecomePerkString, "%Perk%", VetType.Default.VeterancyName));
    		SelectingPerk = VetType;
    		PlayerOwner.SelectedVeterancy = VetType; // Force KFGameType update this.
    		return;
    	}
    	if( !bSwitchIsOKNow )
    		bHadSwitchedVet = true;
    	SelectingPerk = None;
    	for( i=0; i<Rep.CachePerks.Length; i++ )
    	{
    		if( Rep.CachePerks[i].PerkClass==VetType )
    		{
    			if( Rep.CachePerks[i].CurrentLevel==0 )
    				return;
    			PlayerOwner.SelectedVeterancy = VetType;
    			KFPlayerReplicationInfo(PlayerOwner.PlayerReplicationInfo).ClientVeteranSkill = VetType;
    			KFPlayerReplicationInfo(PlayerOwner.PlayerReplicationInfo).ClientVeteranSkillLevel = Rep.CachePerks[i].CurrentLevel-1;
    			if( KFHumanPawn(PlayerOwner.Pawn)!=None )
    			{
    				KFHumanPawn(PlayerOwner.Pawn).VeterancyChanged();
    				DropToCarryLimit(KFHumanPawn(PlayerOwner.Pawn));
    			}
    		}
    	}
    }
    final function DropToCarryLimit( KFHumanPawn P )
    {
    	local byte c;
    	local Inventory I;
    
    	while( P.CurrentWeight>P.MaxCarryWeight && ++c<6 )
    	{
    		for ( I = P.Inventory; I != none; I = I.Inventory )
    		{
    			if ( KFWeapon(I) != none && !KFWeapon(I).bKFNeverThrow )
    			{
    				I.Velocity = P.Velocity;
    				I.DropFrom(P.Location + VRand() * 10);
    				break; // Drop weapons until player is capable of carrying them all.
    			}
    		}
    	}
    }
    
    final function bool SelectionOK( Class<SRVeterancyTypes> VetType )
    {
    	local byte i;
    
    	for( i=0; i<Rep.CachePerks.Length; i++ )
    	{
    		if( Rep.CachePerks[i].PerkClass==VetType )
    			return (Rep.CachePerks[i].CurrentLevel>0);
    	}
    	return false;
    }
    final function CheckPerks( bool bInit )
    {
    	local byte i,NewLevel;
    
    	if( !bStatsReadyNow )
    		return;
    	if( bInit )
    	{
    		for( i=0; i<Rep.CachePerks.Length; i++ )
    			Rep.CachePerks[i].CurrentLevel = Rep.CachePerks[i].PerkClass.Static.PerkIsAvailable(Rep);
    		return;
    	}
    	for( i=0; i<Rep.CachePerks.Length; i++ )
    	{
    		if( Rep.CachePerks[i].CurrentLevel<=Rep.MaximumLevel )
    		{
    			NewLevel = Rep.CachePerks[i].PerkClass.Static.PerkIsAvailable(Rep);
    			if( NewLevel>Rep.CachePerks[i].CurrentLevel )
    			{
    				if( KFPlayerReplicationInfo(PlayerOwner.PlayerReplicationInfo).ClientVeteranSkill==Rep.CachePerks[i].PerkClass )
    					KFPlayerReplicationInfo(PlayerOwner.PlayerReplicationInfo).ClientVeteranSkillLevel = NewLevel-1;
    				Rep.CachePerks[i].CurrentLevel = NewLevel;
    				Rep.ClientPerkLevel(i,NewLevel);
    				if( MutatorOwner.bMessageAnyPlayerLevelUp )
    					BroadcastLocalizedMessage(Class'KFVetEarnedMessagePL',(NewLevel-1),PlayerOwner.PlayerReplicationInfo,,Rep.CachePerks[i].PerkClass);
    			}
    		}
    	}
    }
    final function DelayedStatCheck()
    {
    	if( MyStatsObject!=None )
    		MyStatsObject.bStatsChanged = true;
    	if( bStatsChecking || !bStatsReadyNow )
    		return;
    	bStatsChecking = true;
    	SetTimer(1,false);
    }
    
    function MatchEnded()
    {
    }
    function AddDamageHealed(int Amount, optional bool bMP7MHeal)
    {
    	bHasChanged = true;
    	Rep.RDamageHealedStat+=Amount;
    	if( MyStatsObject!=None )
    		MyStatsObject.DamageHealedStat+=Amount;
    	DelayedStatCheck();
    }
    function AddWeldingPoints(int Amount)
    {
    	bHasChanged = true;
    	Rep.RWeldingPointsStat+=Amount;
    	if( MyStatsObject!=None )
    		MyStatsObject.WeldingPointsStat+=Amount;
    	DelayedStatCheck();
    }
    function AddShotgunDamage(int Amount)
    {
    	bHasChanged = true;
    	Rep.RShotgunDamageStat+=Amount;
    	if( MyStatsObject!=None )
    		MyStatsObject.ShotgunDamageStat+=Amount;
    	DelayedStatCheck();
    }
    function AddHeadshotKill(bool bLaserSightedEBRHeadshot)
    {
    	bHasChanged = true;
    	Rep.RHeadshotKillsStat++;
    	if( MyStatsObject!=None )
    		MyStatsObject.HeadshotKillsStat++;
    	DelayedStatCheck();
    }
    function AddStalkerKill()
    {
    	bHasChanged = true;
    	Rep.RStalkerKillsStat++;
    	if( MyStatsObject!=None )
    		MyStatsObject.StalkerKillsStat++;
    	DelayedStatCheck();
    }
    function AddBullpupDamage(int Amount)
    {
    	bHasChanged = true;
    	Rep.RBullpupDamageStat+=Amount;
    	if( MyStatsObject!=None )
    		MyStatsObject.BullpupDamageStat+=Amount;
    	DelayedStatCheck();
    }
    
    function AddMeleeDamage(int Amount)
    {
    	bHasChanged = true;
    	Rep.RMeleeDamageStat+=Amount;
    	if( MyStatsObject!=None )
    		MyStatsObject.MeleeDamageStat+=Amount;
    	DelayedStatCheck();
    }
    
    function AddFlameThrowerDamage(int Amount)
    {
    	bHasChanged = true;
    	Rep.RFlameThrowerDamageStat+=Amount;
    	if( MyStatsObject!=None )
    		MyStatsObject.FlameThrowerDamageStat+=Amount;
    	DelayedStatCheck();
    }
    function WaveEnded()
    {
    	if( SelectingPerk!=None )
    	{
    		bHadSwitchedVet = false;
    		bSwitchIsOKNow = true;
    		ServerSelectPerk(SelectingPerk);
    		bSwitchIsOKNow = false;
    	}
    }
    function AddKill(bool bLaserSightedEBRM14Headshotted)
    {
    	bHasChanged = true;
    	Rep.RKillsStat++;
    	if( MyStatsObject!=None )
    		MyStatsObject.KillsStat++;
    	DelayedStatCheck();
    }
    function AddBloatKill()
    {
    	bHasChanged = true;
    	Rep.RBloatKillsStat++;
    	if( MyStatsObject!=None )
    		MyStatsObject.BloatKillsStat++;
    	DelayedStatCheck();
    }
    
    function AddSirenKill()
    {
    	bHasChanged = true;
    	Rep.RSirenKillsStat++;
    	if( MyStatsObject!=None )
    		MyStatsObject.SirenKillsStat++;
    	DelayedStatCheck();
    }
    
    function AddStalkerKillWithExplosives()
    {
    	bHasChanged = true;
    	Rep.RStalkersKilledWithExplosivesStat++;
    	if( MyStatsObject!=None )
    		MyStatsObject.StalkersKilledWithExplosivesStat++;
    	DelayedStatCheck();
    }
    
    function AddFireAxeKill();
    function AddChainsawScrakeKill();
    
    function AddBurningCrossbowKill()
    {
    	bHasChanged = true;
    	Rep.RBurningCrossbowKillsStat++;
    	if( MyStatsObject!=None )
    		MyStatsObject.BurningCrossbowKillsStat++;
    	DelayedStatCheck();
    }
    
    function AddFeedingKill()
    {
    	bHasChanged = true;
    	Rep.RFeedingKillsStat++;
    	if( MyStatsObject!=None )
    		MyStatsObject.FeedingKillsStat++;
    	DelayedStatCheck();
    }
    
    function OnGrenadeExploded();
    function AddGrenadeKill();
    function OnShotHuntingShotgun();
    function AddHuntingShotgunKill();
    function KilledEnemyWithBloatAcid();
    function KilledFleshpound(bool bWithMeleeAttack, bool bWithAA12);
    function AddMedicKnifeKill();
    
    function AddGibKill(bool bWithM79)
    {
    	bHasChanged = true;
    	Rep.RGibbedEnemiesStat++;
    	if( MyStatsObject!=None )
    		MyStatsObject.GibbedEnemiesStat++;
    	DelayedStatCheck();
    }
    
    function AddFleshpoundGibKill()
    {
    	bHasChanged = true;
    	Rep.RGibbedFleshpoundsStat++;
    	if( MyStatsObject!=None )
    		MyStatsObject.GibbedFleshpoundsStat++;
    	DelayedStatCheck();
    }
    
    function AddSelfHeal()
    {
    	bHasChanged = true;
    	Rep.RSelfHealsStat++;
    	if( MyStatsObject!=None )
    		MyStatsObject.SelfHealsStat++;
    	DelayedStatCheck();
    }
    
    function AddOnlySurvivorOfWave()
    {
    	bHasChanged = true;
    	Rep.RSoleSurvivorWavesStat++;
    	if( MyStatsObject!=None )
    		MyStatsObject.SoleSurvivorWavesStat++;
    	DelayedStatCheck();
    }
    
    function AddDonatedCash(int Amount)
    {
    	bHasChanged = true;
    	Rep.RCashDonatedStat+=Amount;
    	if( MyStatsObject!=None )
    		MyStatsObject.CashDonatedStat+=Amount;
    	DelayedStatCheck();
    }
    
    function AddZedTime(float Amount)
    {
    	bHasChanged = true;
    	Rep.RTotalZedTimeStat+=Amount;
    	if( MyStatsObject!=None )
    		MyStatsObject.TotalZedTimeStat+=Amount;
    }
    
    function AddExplosivesDamage(int Amount)
    {
    	bHasChanged = true;
    	Rep.RExplosivesDamageStat+=Amount;
    	if( MyStatsObject!=None )
    		MyStatsObject.ExplosivesDamageStat+=Amount;
    }
    
    function WonLostGame( bool bDidWin )
    {
    	if( bDidWin )
    	{
    		++Rep.WinsCount;
    		if( MyStatsObject!=None )
    			++MyStatsObject.WinsCount;
    	}
    	else
    	{
    		++Rep.LostsCount;
    		if( MyStatsObject!=None )
    			++MyStatsObject.LostsCount;
    	}
    	bHasChanged = true;
    	DelayedStatCheck();
    	GoToState('');
    }
    
    function KilledPatriarch(bool bPatriarchHealed, bool bKilledWithLAW, bool bSuicidalDifficulty, bool bOnlyUsedCrossbows);
    
    // Allow no default functionality with the stats.
    function OnStatsAndAchievementsReady();
    function PostNetBeginPlay();
    function InitializeSteamStatInt(int Index, int Value);
    function SetSteamAchievementCompleted(int Index);
    event SetLocalAchievementCompleted(int Index);
    function ServerSteamStatsAndAchievementsInitialized();
    function UpdateAchievementProgress();
    function int GetAchievementCompletedCount();
    event OnPerkAvailable();
    function WonLongGame(string MapName, float Difficulty);
    function AddDemolitionsPipebombKill();
    function AddSCARKill();
    function AddCrawlerKilledInMidair();
    function Killed8ZedsWithGrenade();
    function Killed10ZedsWithPipebomb();
    function KilledHusk(bool bDamagedFriendly);
    function AddMac10BurnDamage(int Amount);
    function AddGorefastBackstab();
    function ScrakeKilledByFire();
    function KilledCrawlerWithCrossbow();
    function OnLARReloaded();
    function AddStalkerKillWithLAR();
    function KilledHuskWithPistol();
    function AddDroppedTier3Weapon();
    function Survived10SecondsAfterVomit();
    function CheckChristmasAchievementsCompleted();
    
    function Destroyed()
    {
    	if( Rep!=None )
    	{
    		Rep.Destroy();
    		Rep = None;
    	}
    	if( PlayerOwner!=None && !PlayerOwner.bDeleteMe )
    	{
    		// Was destroyed mid-game for random reason, respawn.
    		MutatorOwner.PendingPlayers[MutatorOwner.PendingPlayers.Length] = PlayerOwner;
    		MutatorOwner.SetTimer(0.1,false);
    	}
    	Super.Destroyed();
    }
    
    Auto state PlaytimeTimer
    {
    Begin:
    	while( true )
    	{
    		Sleep(1.f);
    		if( bStatsReadyNow && !PlayerOwner.PlayerReplicationInfo.bOnlySpectator )
    		{
    			++Rep.TotalPlayTime;
    			if( MyStatsObject!=None )
    				++MyStatsObject.TotalPlayTime;
    		}
    	}
    }
    
    defaultproperties
    {
         bInitialized=True
         bUsedCheats=True
         RemoteRole=ROLE_None
         bNetNotify=False
    }
    
     
  14. H0ff

    H0ff Соучастник

    Скачал русификатор с поста #64-не русифицировалось,с поста #75 аналогично.
    Название файлов совпадают.Файлы ложил к плагину(system\).
    В чем проблема?
     
  15. 3xzet

    3xzet Мододел "Ы"

    в новой версии нету мака в магазе
    срочно добавляем в ServerPerksV4.ini строчку TraderInventory=4:KFMod.MAC10Pickup
    upd
    в режиме наблюдения не видно хп игроков
    я решил проблему так; сделал перевод самого мута и заново перекомпилировал
     
    ЛОХМАТЫЙ и Фрэгл нравится это.
  16. gpcore

    gpcore Соучастник

    Привет всем.
    1. Подскажите что дает прокачка выше 6 лвл? Скидки например так же работают и к 10 лвл они будут вообще копейки?
    2. В настройках мутатора есть настройка для магазина, это зачем???
    3. Поставил русс. версию этого мутатора, теперь все оружие в магазине в кучу, хотя должно быть разбито по категориям в офф. версии. Это можно поправить?
    4. Можно ли реализовать чтобы скидки работали и на новые (дополнительно установленные) оружия в игре? Каким образом это можно сделать?
    5. У меня версия 4.1, а какие отличия в новой 4.38 ?????

    2,3 Сделал
    4. Можно, но долго... новое оружие как новые классы придется описывать.

    1,5 - все еще ищу ответ :)
     
  17. Freddy

    Freddy Капо

    По умолчанию прокачка выше 6 лвл не дает ничего, кроме смены цвета иконки перка =)

    гугл транслейт тебе в помощь
    Код:
     4.38:
     - Fixed the pulsating near death screen overlay to not stay on screen while spectating.
     - Fixed a minor perk progress bar display error.
     - Changed trader weapon category groups to collapse when you select expanded group.
     - Adjusted perk icon positioning a bit on the perk level up message. 
    
    4.36:
     - Fixed a small bug there were in previous release.
     - Added support for trader weapon categories, you specify category number for each weapon in "TraderInventory", while that number is in sync with the order of "WeaponCategories" list. 
    
    4.35:
     - Implemented custom weapons mutator with this mutator (ServerPerksMut.TraderInventory) where there is NONE hardcoded limit to how many weapons.
     - The custom weapons used will also add themselves automatically to ServerPackages so no need for that manually anymore.
     - Implemented custom perk icons support in trader.
     - Fixed a bug where you got wrong weapons upon perk change when new wave started.
     - Added option to use PlayerName instead of ID Hash for stats tracking (this is for those who have trouble of changing ID's: ServerPerksMut.bUsePlayerNameAsID).
     - Added option to message everyone when any player gains a perk level (ServerPerksMut.bMessageAnyPlayerLevelUp).
     - Fixed trader menu bug where if a weapon was there that is using no ammo but was not a melee weapon it would display odd ammo costs.
     - Added option to use lowest perk requirements when using a higher minimum level (i.e: when using a min level of 6, level 7 perk will have level 0 requirements etc; ServerPerksMut.bUseLowestRequirements)
     - Fixed memory issues where Lobby/Trader/Main menus would stay over mapchanges and keep unused stuff in memory (thus causing unneccessary version mismatches upon connecting to other servers).
     - Changed so you are allowed to make unlimited perk changes while dead, or spectating (instead of limited to only 1 like when alive).
     - Added veterancy earned fanfare sound when you earn level up.
     - Made perk level up message also draw perk icon.
     - Made perk selection menu to draw perk at correct size (if icon was smaller or bigger).
     - Made various HUD fixes (removed film grain while spectating, name beacons messed up by portals, misc errors etc).
     - Added option to make screen go black and white during ZED-time (ServerPerksMut.bBWZEDTime, you need to have at least Bloom or Motion blur enabled to see it).
     - Made perks beyond level 15 be blue.
    
     
  18. SpeC00L

    SpeC00L Солдат

    Сделайте пжл ктоНиб сервперк новый со сменой цвета иконки перка выше 15 лвл,например до 30(50). И с бонусными пушками с 7 ЛВЛва для всех перков.Народ качнёт и не будет подобн вопросов.Помогите отВажные!
     
  19. Freddy

    Freddy Капо

    У любого оружия, даже у ножа есть параметр, отвечающий за количество "патронов" в "обойме". инфа 100%
     
    ЛОХМАТЫЙ нравится это.
  20. 3xzet

    3xzet Мододел "Ы"

    кто-нибудь решил проблему с отображением HUD в режиме спектатора?
    а то пришлось брать из старой версии SRHUDKillingFloor.uc и компилить в новую.