1
0
This commit is contained in:
GenZmeY 2023-10-18 02:03:17 +03:00
parent ce182019df
commit cde088c1f4
Signed by: GenZmeY
GPG Key ID: 424DA4BC3CB2CF39
38 changed files with 231 additions and 113 deletions

View File

@ -163,7 +163,7 @@ function KillOwner()
defaultproperties defaultproperties
{ {
DissipationRate=10 //20 DissipationRate=200 //20
bNeedsTick=true bNeedsTick=true
MaxEffect=10.f; MaxEffect=10.f;
@ -171,7 +171,7 @@ defaultproperties
EffectAppliedByStack=1.0f EffectAppliedByStack=1.0f
ApplyEffectVel=100.0f // % per second ApplyEffectVel=100.0f // % per second
RemoveEffectVel=0.5f // % per second RemoveEffectVel=0.25f // % per second
CurrentEffect=0.0f CurrentEffect=0.0f
CurrentEffectApplied=0.0f CurrentEffectApplied=0.0f

View File

@ -198,14 +198,6 @@ function TickHud(float DeltaTime)
local int bStatusWarning, bStatusNotification; local int bStatusWarning, bStatusNotification;
local string StatusMessage; local string StatusMessage;
local GFxObject DataObject; local GFxObject DataObject;
local KFGameReplicationInfo KFGRI;
KFGRI=KFGameReplicationInfo(KFPC.WorldInfo.GRI);
if (KFGRI.IsContaminationMode())
{
return;
}
if (CurrentObjectiveInterface != none) if (CurrentObjectiveInterface != none)
{ {

View File

@ -518,14 +518,17 @@ function TickHud(float DeltaTime)
{ {
bBountyHuntVisibility = KFPC.CanUseBountyHunt(); bBountyHuntVisibility = KFPC.CanUseBountyHunt();
if (KFGRI.bWaveIsActive == false) if (KFGRI != none)
{ {
bBountyHuntVisibility = false; if (KFGRI.bWaveIsActive == false)
{
bBountyHuntVisibility = false;
}
else if (KFGRI.WaveNum == KFGRI.WaveMax)
{
bBountyHuntVisibility = false;
}
} }
else if (KFGRI.WaveNum == KFGRI.WaveMax)
{
bBountyHuntVisibility = false;
}
if (bBountyHuntVisibility != bLastBountyHuntVisibility) if (bBountyHuntVisibility != bLastBountyHuntVisibility)
{ {

View File

@ -684,8 +684,6 @@ event InitGame( string Options, out string ErrorMessage )
KFGameEngine(class'Engine'.static.GetEngine()).SetWeeklyEventIndex(KFGameEngine(class'Engine'.static.GetEngine()).GetIntendedWeeklyEventIndex()); KFGameEngine(class'Engine'.static.GetEngine()).SetWeeklyEventIndex(KFGameEngine(class'Engine'.static.GetEngine()).GetIntendedWeeklyEventIndex());
} }
`Log("TEST - InitGame : " $WeeklySelectorIndex);
Super.InitGame( Options, ErrorMessage ); Super.InitGame( Options, ErrorMessage );
if (UsesModifiedDifficulty()) if (UsesModifiedDifficulty())
@ -1182,8 +1180,6 @@ function InitGRIVariables()
MyKFGRI.NotifyAllowSeasonalSkins(AllowSeasonalSkinsIndex); MyKFGRI.NotifyAllowSeasonalSkins(AllowSeasonalSkinsIndex);
MyKFGRI.NotifyWeeklySelector(WeeklySelectorIndex); MyKFGRI.NotifyWeeklySelector(WeeklySelectorIndex);
`Log("TEST - InitGRIVariables- NotifyWeeklySelector : " $WeeklySelectorIndex);
SetBossIndex(); SetBossIndex();
} }

View File

@ -2321,8 +2321,6 @@ simulated function NotifyWeeklySelector(int WeeklySelectorIndex_)
WeeklySelectorIndex = WeeklySelectorIndex_; WeeklySelectorIndex = WeeklySelectorIndex_;
bNetDirty = true; bNetDirty = true;
`Log("TEST - NotifyWeeklySelector : " $WeeklySelectorIndex);
} }
/** VIP weekly */ /** VIP weekly */

View File

@ -1945,8 +1945,9 @@ simulated function final BuyAmmo( float AmountPurchased, EItemType ItemType, opt
{ {
local STraderItem WeaponItem; local STraderItem WeaponItem;
local KFWeapon KFW; local KFWeapon KFW;
local byte MagAmmoCount; local int MagAmmoCount;
// Keep 255 because what else?
MagAmmoCount = 255; MagAmmoCount = 255;
if ( ItemType == EIT_Weapon ) if ( ItemType == EIT_Weapon )
@ -1973,7 +1974,7 @@ simulated function final BuyAmmo( float AmountPurchased, EItemType ItemType, opt
} }
/** Receive weapon ammo */ /** Receive weapon ammo */
reliable server final private function ServerBuyAmmo(int AmountPurchased, byte ClientAmmoCount, byte ItemIndex, bool bSecondaryAmmo) reliable server final private function ServerBuyAmmo(int AmountPurchased, int ClientAmmoCount, byte ItemIndex, bool bSecondaryAmmo)
{ {
local STraderItem WeaponItem; local STraderItem WeaponItem;
local KFWeapon KFW; local KFWeapon KFW;

View File

@ -144,8 +144,8 @@ function StartHealRecharge()
if (Role == ROLE_Authority) if (Role == ROLE_Authority)
{ {
InstigatorPerk = KFW.GetPerk(); InstigatorPerk = KFW.GetPerk();
UsedHealRechargeTime = UsedHealRechargeTime = HealFullRechargeSeconds;
HealFullRechargeSeconds * KFW.static.GetUpgradeHealRechargeMod(KFW.CurrentWeaponUpgradeIndex); UsedHealRechargeTime *= KFW.static.GetUpgradeHealRechargeMod(KFW.CurrentWeaponUpgradeIndex);
InstigatorPerk.ModifyHealerRechargeTime(UsedHealRechargeTime); InstigatorPerk.ModifyHealerRechargeTime(UsedHealRechargeTime);
HealRechargePerSecond = KFW.MagazineCapacity[ALTFIRE_FIREMODE] / UsedHealRechargeTime; HealRechargePerSecond = KFW.MagazineCapacity[ALTFIRE_FIREMODE] / UsedHealRechargeTime;

View File

@ -1130,7 +1130,7 @@ private event AddToHitsGiven(class<DamageType> DT)
private event AddToKills( class<KFPawn_Monster> MonsterClass, byte Difficulty, class<DamageType> DT, bool bKiller ) private event AddToKills( class<KFPawn_Monster> MonsterClass, byte Difficulty, class<DamageType> DT, bool bKiller )
{ {
// seasonal event hook // seasonal event hook
SeasonalEventStats_OnZedKilled(MonsterClass, Difficulty, DT); SeasonalEventStats_OnZedKilled(MonsterClass, Difficulty, DT, bKiller);
if (!bKiller) if (!bKiller)
{ {
@ -1878,11 +1878,11 @@ final simulated function SeasonalEventStats_OnHitGiven(class<DamageType> DT)
} }
} }
final simulated function SeasonalEventStats_OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT) final simulated function SeasonalEventStats_OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT, bool bKiller)
{ {
if (SeasonalEventIsValid()) if (SeasonalEventIsValid())
{ {
SeasonalEvent.OnZedKilled(MonsterClass, Difficulty, DT); SeasonalEvent.OnZedKilled(MonsterClass, Difficulty, DT, bKiller);
} }
} }

View File

@ -656,7 +656,7 @@ var WeeklyOverrides ActiveEvent;
/** Stored values of World Info and GRI items incase we need to reset it. */ /** Stored values of World Info and GRI items incase we need to reset it. */
var CachedOutbreakInfo CachedItems; var CachedOutbreakInfo CachedItems;
function int SetActiveEvent(int ActiveEventIdx, KFGameInfo GameInfo) function int SetActiveEvent(int ActiveEventIdx, optional KFGameInfo GameInfoForWeeklyIndex = none)
{ {
`if(`notdefined(ShippingPC)) `if(`notdefined(ShippingPC))
local string LocalURL; local string LocalURL;
@ -667,17 +667,21 @@ function int SetActiveEvent(int ActiveEventIdx, KFGameInfo GameInfo)
LocalURL = WorldInfo.GetLocalURL(); LocalURL = WorldInfo.GetLocalURL();
LocalURL = Split(LocalURL, "?"); //remove map name LocalURL = Split(LocalURL, "?"); //remove map name
if (GameInfo.WeeklySelectorIndex == -1) // WeeklySelectorIndex overrides the ActiveEventIdx if any // WeeklySelectorIndex overrides the ActiveEventIdx if any
if (GameInfoForWeeklyIndex == none || GameInfoForWeeklyIndex.WeeklySelectorIndex == -1)
{ {
ActiveEventIdx = GetIntOption(LocalURL, "ActiveEventIdx", ActiveEventIdx); ActiveEventIdx = GetIntOption(LocalURL, "ActiveEventIdx", ActiveEventIdx);
// Set WeeklySelectorIndex to the value (ActiveEventIdx is not replicated), so all the flow of the game works the same // Set WeeklySelectorIndex to the value (ActiveEventIdx is not replicated), so all the flow of the game works the same
GameInfo.WeeklySelectorIndex = ActiveEventIdx + 1; if (GameInfoForWeeklyIndex != none)
{
GameInfoForWeeklyIndex.WeeklySelectorIndex = ActiveEventIdx + 1;
}
} }
else if (GameInfo.WeeklySelectorIndex > 0) else if (GameInfoForWeeklyIndex != none && GameInfoForWeeklyIndex.WeeklySelectorIndex > 0)
{ {
// 0 is default, we move one index to the left so it matches first Weekly Mode // 0 is default, we move one index to the left so it matches first Weekly Mode
ActiveEventIdx = GameInfo.WeeklySelectorIndex - 1; ActiveEventIdx = GameInfoForWeeklyIndex.WeeklySelectorIndex - 1;
} }
//If our override is out of bounds, see if it's a valid test event //If our override is out of bounds, see if it's a valid test event
@ -694,10 +698,10 @@ function int SetActiveEvent(int ActiveEventIdx, KFGameInfo GameInfo)
ActiveEvent = SetEvents[ActiveEventIdx]; ActiveEvent = SetEvents[ActiveEventIdx];
} }
`else `else
if (GameInfo.WeeklySelectorIndex > 0) if (GameInfoForWeeklyIndex != none && GameInfoForWeeklyIndex.WeeklySelectorIndex > 0)
{ {
// 0 is default, we move one index to the left so it matches first Weekly Mode // 0 is default, we move one index to the left so it matches first Weekly Mode
ActiveEventIdx = GameInfo.WeeklySelectorIndex - 1; ActiveEventIdx = GameInfoForWeeklyIndex.WeeklySelectorIndex - 1;
} }
if(ActiveEventIdx < SetEvents.length) if(ActiveEventIdx < SetEvents.length)
@ -706,9 +710,11 @@ function int SetActiveEvent(int ActiveEventIdx, KFGameInfo GameInfo)
} }
`endif `endif
`Log("TEST - SetActiveEvent : " $ActiveEventIdx); // Override this only if we can force a new index via GameInfo
if (GameInfoForWeeklyIndex != none)
KFGameEngine(class'Engine'.static.GetEngine()).SetWeeklyEventIndex(ActiveEventIdx); {
KFGameEngine(class'Engine'.static.GetEngine()).SetWeeklyEventIndex(ActiveEventIdx);
}
return ActiveEventIdx; return ActiveEventIdx;
} }

View File

@ -1316,7 +1316,6 @@ native function bool CanRepairDoors();
function bool RepairArmor( Pawn HealTarget ); function bool RepairArmor( Pawn HealTarget );
function bool IsToxicDmgActive() { return false; } function bool IsToxicDmgActive() { return false; }
static function class<KFDamageType> GetToxicDmgTypeClass(){ return default.ToxicDmgTypeClass; } static function class<KFDamageType> GetToxicDmgTypeClass(){ return default.ToxicDmgTypeClass; }
static function float GetHealRechargeMod();
static function ModifyToxicDmg( out int ToxicDamage ); static function ModifyToxicDmg( out int ToxicDamage );
simulated function float GetSirenScreamStrength(){ return 1.f; } simulated function float GetSirenScreamStrength(){ return 1.f; }
simulated function bool IsHealingSurgeActive(){ return false; } simulated function bool IsHealingSurgeActive(){ return false; }
@ -1327,7 +1326,7 @@ simulated function bool GetHealingShieldActive(){ return false; }
simulated function bool IsZedativeActive(){ return false; } simulated function bool IsZedativeActive(){ return false; }
function bool CouldBeZedToxicCloud( class<KFDamageType> KFDT ){ return false; } function bool CouldBeZedToxicCloud( class<KFDamageType> KFDT ){ return false; }
function ToxicCloudExplode( Controller Killer, Pawn ZedKilled ); function ToxicCloudExplode( Controller Killer, Pawn ZedKilled );
simulated function float GetDartAmmoCostModifier() { return 1.0f; }
/** Firebug functions */ /** Firebug functions */
simulated function bool IsFlarotovActive(){ return false; } simulated function bool IsFlarotovActive(){ return false; }

View File

@ -47,6 +47,7 @@ var int ZedativeDamage;
var class<KFDamageType> ZedativeDamageType; var class<KFDamageType> ZedativeDamageType;
var class<KFDamageType> ZedativeHealingType; var class<KFDamageType> ZedativeHealingType;
var int ZedativeEffectRadius; var int ZedativeEffectRadius;
var float DartAmmoCostModifier;
enum EMedicPerkSkills enum EMedicPerkSkills
{ {
@ -324,11 +325,6 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
InDamage = Round(TempDamage); InDamage = Round(TempDamage);
} }
static function float GetHealRechargeMod()
{
return GetSkillValue( default.PerkSkills[EMedicAcidicCompound] );
}
/** Takes the weapons primary damage and calculates the poisoning over time value */ /** Takes the weapons primary damage and calculates the poisoning over time value */
/** /**
* @brief Takes the weapons primary damage and calculates the bleeding over time value * @brief Takes the weapons primary damage and calculates the bleeding over time value
@ -339,7 +335,7 @@ static function ModifyToxicDmg( out int ToxicDamage )
{ {
local float TempDamage; local float TempDamage;
TempDamage = float(ToxicDamage) * GetHealRechargeMod(); TempDamage = float(ToxicDamage) * GetSkillValue( default.PerkSkills[EMedicAcidicCompound] );
ToxicDamage = FCeil( TempDamage ); ToxicDamage = FCeil( TempDamage );
} }
@ -588,6 +584,14 @@ static function float GetZedativeEffectRadius()
return default.ZedativeEffectRadius; return default.ZedativeEffectRadius;
} }
simulated function float GetDartAmmoCostModifier()
{
if (IsAcidicCompoundActive())
{
return DartAmmoCostModifier;
}
return Super.GetDartAmmoCostModifier();
}
/********************************************************************************************* /*********************************************************************************************
* @name HUD / UI * @name HUD / UI
********************************************************************************************* */ ********************************************************************************************* */
@ -639,6 +643,7 @@ simulated function LogPerkSkills()
} }
} }
DefaultProperties DefaultProperties
{ {
PerkIcon=Texture2D'UI_PerkIcons_TEX.UI_PerkIcon_Medic' PerkIcon=Texture2D'UI_PerkIcons_TEX.UI_PerkIcon_Medic'
@ -672,6 +677,8 @@ DefaultProperties
ToxicDmgTypeClass=class'KFDT_Toxic_AcidicRounds' ToxicDmgTypeClass=class'KFDT_Toxic_AcidicRounds'
DartAmmoCostModifier=0.8f
// explosion // explosion
Begin Object Class=KFGameExplosion Name=ExploTemplate0 Begin Object Class=KFGameExplosion Name=ExploTemplate0
Damage=50 //50 Damage=50 //50

View File

@ -216,6 +216,8 @@ function ModifyDamageTaken( out int InDamage, optional class<DamageType> DamageT
{ {
TempDamage -= TempDamage * FortitudeDamageResistance; TempDamage -= TempDamage * FortitudeDamageResistance;
`QALog( "Fortitude Damage Resistance =" @ FortitudeDamageResistance, bLogPerk ); `QALog( "Fortitude Damage Resistance =" @ FortitudeDamageResistance, bLogPerk );
InDamage = Round(TempDamage);
} }
} }
@ -928,5 +930,5 @@ DefaultProperties
AdditionalOnPerkDTNames(2)="KFDT_Ballistic_NailShotgun" AdditionalOnPerkDTNames(2)="KFDT_Ballistic_NailShotgun"
FortitudeDamageResistance=0.1f FortitudeDamageResistance=0.1f
APDamageModifier=0.05f APDamageModifier=0.1f
} }

View File

@ -1014,17 +1014,21 @@ reliable server event PushV()
simulated function bool GetAllowSeasonalSkins() simulated function bool GetAllowSeasonalSkins()
{ {
local KFGameReplicationInfo KFGRI; local KFGameReplicationInfo KFGRI;
local bool bIsWWLWeekly, bIsAllowSeasonalSkins; // Situations that shouldn't allow seasonal overrides local bool bIsWWLWeekly, bIsCastleVolter, bIsAllowSeasonalSkins; // Situations that shouldn't allow seasonal overrides
KFGRI = KFGameReplicationInfo(WorldInfo.GRI); KFGRI = KFGameReplicationInfo(WorldInfo.GRI);
bIsWWLWeekly = KFGRI != none && KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 12; bIsWWLWeekly = KFGRI != none && KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 12;
bIsCastleVolter = Caps(WorldInfo.GetMapName(true)) == "KF-CASTLEVOLTER";
bIsAllowSeasonalSkins = KFGRI != none && KFGRI.bAllowSeasonalSkins; bIsAllowSeasonalSkins = KFGRI != none && KFGRI.bAllowSeasonalSkins;
//`Log("GetAllowSeasonalSkins: AllowSeasonalSkins: "$bIsAllowSeasonalSkins$" WWLWeekly "$bIsWWLWeekly);
if(bIsWWLWeekly || bIsAllowSeasonalSkins == false) if(bIsWWLWeekly || bIsCastleVolter || bIsAllowSeasonalSkins == false)
{ {
return false; return false;
} }
return true; return true;
} }
@ -7255,8 +7259,12 @@ simulated event InitializeStats()
local class<KFOnlineStatsRead> StatsReadClass; local class<KFOnlineStatsRead> StatsReadClass;
local class<KFOnlineStatsWrite> StatsWriteClass; local class<KFOnlineStatsWrite> StatsWriteClass;
if ( StatsRead == none && WorldInfo.NetMode != NM_DedicatedServer ) `Log("InitializeStats()");
if ( ( StatsRead == none || StatsWrite == none ) && WorldInfo.NetMode != NM_DedicatedServer )
{ {
`Log("InitializeStats() - Create objects");
// BWJ - 1-4-17 - Different stats read for dingo // BWJ - 1-4-17 - Different stats read for dingo
if( WorldInfo.IsConsoleBuild( CONSOLE_Durango ) ) if( WorldInfo.IsConsoleBuild( CONSOLE_Durango ) )
{ {
@ -7638,7 +7646,23 @@ native reliable client private function ClientNotifyHitGiven(class<DamageType> D
/** Kill stat */ /** Kill stat */
function AddZedKill( class<KFPawn_Monster> MonsterClass, byte Difficulty, class<DamageType> DT, bool bKiller ) function AddZedKill( class<KFPawn_Monster> MonsterClass, byte Difficulty, class<DamageType> DT, bool bKiller )
{ {
local KFPlayerController KFPC;
ClientAddZedKill( MonsterClass, Difficulty, DT, bKiller ); ClientAddZedKill( MonsterClass, Difficulty, DT, bKiller );
if (bKiller)
{
foreach WorldInfo.AllControllers(class'KFPlayerController', KFPC)
{
if (KFPC != none
&& KFPC != self
&& KFPC.IsInState('Spectating') == false
&& KFPC.PlayerReplicationInfo.bOnlySpectator == false)
{
KFPC.AddZedKill(MonsterClass, Difficulty, DT, false);
}
}
}
} }
native reliable client private function ClientAddZedKill( class<KFPawn_Monster> MonsterClass, byte Difficulty, class<DamageType> DT, bool bKiller ); native reliable client private function ClientAddZedKill( class<KFPawn_Monster> MonsterClass, byte Difficulty, class<DamageType> DT, bool bKiller );
@ -7666,9 +7690,25 @@ function AddAfflictionCaused(EAfflictionType Type)
} }
native reliable client private function ClientAddAfflictionCaused(EAfflictionType Type); native reliable client private function ClientAddAfflictionCaused(EAfflictionType Type);
function AddCollectibleFound(int Limit) function AddCollectibleFound(int Limit, optional bool bBroadcast = true)
{ {
local KFPlayerController KFPC;
ClientAddCollectibleFound(Limit); ClientAddCollectibleFound(Limit);
if (bBroadcast)
{
foreach WorldInfo.AllControllers(class'KFPlayerController', KFPC)
{
if (KFPC != none
&& KFPC != self
&& KFPC.IsInState('Spectating') == false
&& KFPC.PlayerReplicationInfo.bOnlySpectator == false)
{
KFPC.AddCollectibleFound(Limit, false);
}
}
}
} }
native reliable client private function ClientAddCollectibleFound(int Limit); native reliable client private function ClientAddCollectibleFound(int Limit);

View File

@ -68,7 +68,7 @@ final protected simulated function FinishedObjective(int EventIndex, int Objecti
} }
simulated function OnMapObjectiveDeactivated(Actor ObjectiveInterfaceActor); simulated function OnMapObjectiveDeactivated(Actor ObjectiveInterfaceActor);
simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT); simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT, bool bKiller);
simulated function OnZedKilledByHeadshot(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT); simulated function OnZedKilledByHeadshot(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT);
simulated function OnMapCollectibleFound(PlayerReplicationInfo FinderPRI, int CollectibleID); simulated function OnMapCollectibleFound(PlayerReplicationInfo FinderPRI, int CollectibleID);
simulated event OnGameWon(class<GameInfo> GameClass, int Difficulty, int GameLength, bool bCoOp); simulated event OnGameWon(class<GameInfo> GameClass, int Difficulty, int GameLength, bool bCoOp);

View File

@ -15,7 +15,7 @@ defaultproperties
{ {
WeaponClassPath="KFGameContent.KFWeap_AssaultRifle_FAMAS" WeaponClassPath="KFGameContent.KFWeap_AssaultRifle_FAMAS"
BuyPrice=1200 BuyPrice=1000
AmmoPricePerMag=25 AmmoPricePerMag=25
SecondaryAmmoMagPrice=15 //13 SecondaryAmmoMagPrice=15 //13

View File

@ -214,6 +214,8 @@ simulated function AltFireMode()
/** @see KFWeapon::ConsumeAmmo */ /** @see KFWeapon::ConsumeAmmo */
simulated function ConsumeAmmo( byte FireModeNum ) simulated function ConsumeAmmo( byte FireModeNum )
{ {
local KFPerk Perk;
local float DartAmmoCostModifier;
// If its not the healing fire mode, return // If its not the healing fire mode, return
if( FireModeNum != ALTFIRE_FIREMODE ) if( FireModeNum != ALTFIRE_FIREMODE )
{ {
@ -231,11 +233,14 @@ simulated function ConsumeAmmo( byte FireModeNum )
// If AmmoCount is being replicated, don't allow the client to modify it here // If AmmoCount is being replicated, don't allow the client to modify it here
if (Role == ROLE_Authority || bAllowClientAmmoTracking) if (Role == ROLE_Authority || bAllowClientAmmoTracking)
{ {
Perk = GetPerk();
DartAmmoCostModifier = Perk != none ? Perk.GetDartAmmoCostModifier() : 1.0f;
// Don't consume ammo if magazine size is 0 (infinite ammo with no reload) // Don't consume ammo if magazine size is 0 (infinite ammo with no reload)
if (MagazineCapacity[1] > 0 && AmmoCount[1] > 0) if (MagazineCapacity[1] > 0 && AmmoCount[1] > 0)
{ {
// Reduce ammo amount by heal ammo cost // Reduce ammo amount by heal ammo cost
AmmoCount[1] = Max(AmmoCount[1] - AmmoCost[1], 0); AmmoCount[1] = Max(AmmoCount[1] - AmmoCost[1] * DartAmmoCostModifier, 0);
} }
} }
} }
@ -411,7 +416,6 @@ function StartHealRecharge()
UsedHealRechargeTime = HealFullRechargeSeconds; UsedHealRechargeTime = HealFullRechargeSeconds;
UsedHealRechargeTime *= static.GetUpgradeHealRechargeMod(CurrentWeaponUpgradeIndex); UsedHealRechargeTime *= static.GetUpgradeHealRechargeMod(CurrentWeaponUpgradeIndex);
UsedHealRechargeTime *= InstigatorPerk.GetHealRechargeMod();
InstigatorPerk.ModifyHealerRechargeTime( UsedHealRechargeTime ); InstigatorPerk.ModifyHealerRechargeTime( UsedHealRechargeTime );
// Set the healing recharge rate whenever we start charging // Set the healing recharge rate whenever we start charging

View File

@ -4663,7 +4663,7 @@ function int AddSecondaryAmmo(int Amount)
* *
* @param bAmmoSync - If performing a sync the lowest value is typically the most correct * @param bAmmoSync - If performing a sync the lowest value is typically the most correct
*/ */
reliable client function ClientForceAmmoUpdate(byte NewAmmoCount, int NewSpareAmmoCount, optional bool bAmmoSync) reliable client function ClientForceAmmoUpdate(int NewAmmoCount, int NewSpareAmmoCount, optional bool bAmmoSync)
{ {
if ( Role < ROLE_Authority ) if ( Role < ROLE_Authority )
{ {
@ -6614,7 +6614,7 @@ simulated state WeaponFiring
} }
} }
unreliable server function SyncCurrentAmmoCount(byte FireMode, byte CurrentAmmoCount) unreliable server function SyncCurrentAmmoCount(byte FireMode, int CurrentAmmoCount)
{ {
if(AmmoCount[FireMode] != CurrentAmmoCount) if(AmmoCount[FireMode] != CurrentAmmoCount)
{ {

View File

@ -506,7 +506,7 @@ function ReduceDamage(out int Damage, Pawn Injured, Controller InstigatedBy, vec
function StartOutbreakRound(int OutbreakIdx) function StartOutbreakRound(int OutbreakIdx)
{ {
OutbreakEvent.SetActiveEvent(OutbreakIdx, self); OutbreakEvent.SetActiveEvent(OutbreakIdx);
OutbreakEvent.UpdateGRI(); OutbreakEvent.UpdateGRI();
OutbreakEvent.SetWorldInfoOverrides(); OutbreakEvent.SetWorldInfoOverrides();

View File

@ -51,7 +51,9 @@ var protected bool bGunGamePlayerOnLastGun;
var transient array<KFBarmwichBonfireVolume> BonfireVolumes; var transient array<KFBarmwichBonfireVolume> BonfireVolumes;
// Trader Time modifier for Castle Volter map in the last round // Trader Time modifier for Castle Volter map in the last round
var float CastleVolterTraderLastWaveModifier;
var float CastleVolterTraderModifier; var float CastleVolterTraderModifier;
var bool bIsCastleVolterMap;
/** Whether this game mode should play music from the get-go (lobby) */ /** Whether this game mode should play music from the get-go (lobby) */
static function bool ShouldPlayMusicAtStart() static function bool ShouldPlayMusicAtStart()
@ -77,6 +79,8 @@ event PostBeginPlay()
{ {
super.PostBeginPlay(); super.PostBeginPlay();
bIsCastleVolterMap = Caps(WorldInfo.GetMapName(true)) == "KF-CASTLEVOLTER";
TimeBetweenWaves = GetTraderTime(); TimeBetweenWaves = GetTraderTime();
bGunGamePlayerOnLastGun = false; bGunGamePlayerOnLastGun = false;
@ -1130,6 +1134,11 @@ function WaveStarted()
UpdateGameSettings(); UpdateGameSettings();
bWaveStarted = true; bWaveStarted = true;
if (bIsCastleVolterMap)
{
TimeBetweenWaves = GetTraderTime();
}
} }
/** Do something when there are no AIs left */ /** Do something when there are no AIs left */
@ -1473,17 +1482,7 @@ function DoTraderTimeCleanup();
/** Handle functionality for opening trader */ /** Handle functionality for opening trader */
function OpenTrader() function OpenTrader()
{ {
local int UpdatedTimeBetweenWaves; MyKFGRI.OpenTrader(TimeBetweenWaves);
UpdatedTimeBetweenWaves = TimeBetweenWaves;
// In castle volter the trader needs to have a special time
if (WorldInfo.GetMapName(true) == "KF-CastleVolter" && WaveNum == (WaveMax - 1) )
{
UpdatedTimeBetweenWaves = UpdatedTimeBetweenWaves * CastleVolterTraderModifier;
}
MyKFGRI.OpenTrader(UpdatedTimeBetweenWaves);
NotifyTraderOpened(); NotifyTraderOpened();
} }
@ -1929,6 +1928,27 @@ function ClearActorFromBonfire(Actor Other)
} }
} }
function float GetTraderTime()
{
local float TraderTime;
TraderTime = Super.GetTraderTime();
// In castle volter the trader needs to have a special time
if (bIsCastleVolterMap)
{
if ( WaveNum == (WaveMax - 1) && !bIsEndlessGame )
{
TraderTime *= CastleVolterTraderLastWaveModifier;
}
else
{
TraderTime *= CastleVolterTraderModifier;
}
}
return TraderTime;
}
DefaultProperties DefaultProperties
{ {
TimeBetweenWaves=60 //This is going to be a difficulty setting later TimeBetweenWaves=60 //This is going to be a difficulty setting later
@ -1938,7 +1958,10 @@ DefaultProperties
MaxGameDifficulty=3 MaxGameDifficulty=3
bWaveStarted=false bWaveStarted=false
bGunGamePlayerOnLastGun=false bGunGamePlayerOnLastGun=false
CastleVolterTraderModifier = 1.0f;
CastleVolterTraderLastWaveModifier = 2.5f
CastleVolterTraderModifier = 1.17f
bIsCastleVolterMap = false;
ObjectiveSpawnDelay=5 ObjectiveSpawnDelay=5

View File

@ -78,8 +78,13 @@ simulated event OnGameWon(class<GameInfo> GameClass, int Difficulty, int GameLen
} }
} }
simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT) simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT, bool bKiller)
{ {
if (bKiller == false)
{
return;
}
// kill 1500 zeds on asylum // kill 1500 zeds on asylum
if (bObjectiveIsValidForMap[3] != 0) if (bObjectiveIsValidForMap[3] != 0)
{ {
@ -107,4 +112,4 @@ defaultproperties
{ {
EndlessWaveRequired=15 EndlessWaveRequired=15
ZedKillsRequired=1500 ZedKillsRequired=1500
} }

View File

@ -44,10 +44,15 @@ private event GrantEventItems()
} }
} }
simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT) simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT, bool bKiller)
{ {
local int ObjIdx; local int ObjIdx;
if (bKiller == false)
{
return;
}
// Kill 2000 zeds on any map // Kill 2000 zeds on any map
ObjIdx = 0; ObjIdx = 0;
if (bObjectiveIsValidForMap[ObjIdx] != 0) if (bObjectiveIsValidForMap[ObjIdx] != 0)
@ -129,4 +134,4 @@ defaultproperties
EndlessWaveRequired=15 EndlessWaveRequired=15
PowerUpsRequired=10 PowerUpsRequired=10
FallEventIndex=SEI_Fall FallEventIndex=SEI_Fall
} }

View File

@ -116,23 +116,20 @@ simulated function OnTryCompleteObjective(int ObjectiveIndex, int EventIndex)
} }
// Kill Hans Volter in 5 different maps // Kill Hans Volter in 5 different maps
simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT) simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT, bool bKiller)
{ {
local int ObjIdx; local int ObjIdx;
local KFProfileSettings Profile; local KFProfileSettings Profile;
ObjIdx = 0; ObjIdx = 0;
if (Outer.IsEventObjectiveComplete(ObjIdx))
{
return;
}
if (bObjectiveIsValidForMap[ObjIdx] != 0) if (bObjectiveIsValidForMap[ObjIdx] != 0)
{ {
if (MonsterClass == class'KFPawn_ZedHansBase' if (MonsterClass == class'KFPawn_ZedHansBase'
|| MonsterClass == class'KFPawn_ZedHans') || MonsterClass == class'KFPawn_ZedHans')
{ {
// This event can be heard no matter is bKiller true | false, we count for every player on the objective
if (Outer.GetSeasonalEventStatValue(ObjIdx) < HansVolterKillsRequired) // If we still didn't reach the limit.. if (Outer.GetSeasonalEventStatValue(ObjIdx) < HansVolterKillsRequired) // If we still didn't reach the limit..
{ {
Profile = KFProfileSettings(Outer.MyKFPC.OnlineSub.PlayerInterface.GetProfileSettings(Outer.MyKFPC.StoredLocalUserNum)); Profile = KFProfileSettings(Outer.MyKFPC.OnlineSub.PlayerInterface.GetProfileSettings(Outer.MyKFPC.StoredLocalUserNum));

View File

@ -44,8 +44,13 @@ private event GrantEventItems()
} }
} }
simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT) simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT, bool bKiller)
{ {
if (bKiller == false)
{
return;
}
if (bObjectiveIsValidForMap[2] != 0) if (bObjectiveIsValidForMap[2] != 0)
{ {
IncrementSeasonalEventStat(2, 1); IncrementSeasonalEventStat(2, 1);
@ -102,4 +107,4 @@ defaultproperties
ZedKillsRequired=1500 ZedKillsRequired=1500
BossDeathsRequired=15 BossDeathsRequired=15
EndlessWaveRequired=15 EndlessWaveRequired=15
} }

View File

@ -69,10 +69,15 @@ simulated event OnGameWon(class<GameInfo> GameClass, int Difficulty, int GameLen
} }
} }
simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT) simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT, bool bKiller)
{ {
local int ObjIdx; local int ObjIdx;
if (bKiller == false)
{
return;
}
ObjIdx = 0; ObjIdx = 0;
if (bObjectiveIsValidForMap[ObjIdx] != 0) if (bObjectiveIsValidForMap[ObjIdx] != 0)
{ {
@ -115,4 +120,4 @@ defaultproperties
ZedKillsRequired=1500 ZedKillsRequired=1500
BloodBlenderKillsRequired=20 BloodBlenderKillsRequired=20
TrapDoorKillsRequired=20 TrapDoorKillsRequired=20
} }

View File

@ -75,10 +75,15 @@ simulated function OnBossDied()
} }
} }
simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT) simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT, bool bKiller)
{ {
local int ObjIdx; local int ObjIdx;
if (bKiller == false)
{
return;
}
// E.D.A.R kills // E.D.A.R kills
ObjIdx = 2; ObjIdx = 2;
if (bObjectiveIsValidForMap[ObjIdx] != 0) if (bObjectiveIsValidForMap[ObjIdx] != 0)

View File

@ -58,12 +58,17 @@ simulated event OnGameWon(class<GameInfo> GameClass, int Difficulty, int GameLen
} }
} }
simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT) simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT, bool bKiller)
{ {
local int ObjIdx; local int ObjIdx;
local KFPlayerController KFPC; local KFPlayerController KFPC;
local KFPawn_Human KFP; local KFPawn_Human KFP;
if (bKiller == false)
{
return;
}
// Laser Kills // Laser Kills
ObjIdx = 2; ObjIdx = 2;
if (bObjectiveIsValidForMap[ObjIdx] != 0) if (bObjectiveIsValidForMap[ObjIdx] != 0)

View File

@ -61,10 +61,15 @@ simulated event OnGameWon(class<GameInfo> GameClass, int Difficulty, int GameLen
} }
} }
simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT) simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT, bool bKiller)
{ {
local int ObjIdx; local int ObjIdx;
if (bKiller == false)
{
return;
}
// Kill 1500 Zeds on any map or mode // Kill 1500 Zeds on any map or mode
ObjIdx = 0; ObjIdx = 0;
if (bObjectiveIsValidForMap[ObjIdx] != 0) if (bObjectiveIsValidForMap[ObjIdx] != 0)
@ -149,4 +154,4 @@ defaultproperties
ZedsThrowSeaRequired=50 ZedsThrowSeaRequired=50
EndlessWaveRequired=15 EndlessWaveRequired=15
LastWaveFinished=-1 LastWaveFinished=-1
} }

View File

@ -137,10 +137,15 @@ simulated function OnAfflictionCaused(EAfflictionType Type)
} }
} }
simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT) simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT, bool bKiller)
{ {
local int ObjIdx; local int ObjIdx;
if (bKiller == false)
{
return;
}
// Kill 1500 Zeds with HRG Bombardier // Kill 1500 Zeds with HRG Bombardier
ObjIdx = 0; ObjIdx = 0;
if (bObjectiveIsValidForMap[ObjIdx] != 0) if (bObjectiveIsValidForMap[ObjIdx] != 0)
@ -167,4 +172,4 @@ defaultproperties
StandYourGroundRequired=25 StandYourGroundRequired=25
EndlessWaveRequired=15 EndlessWaveRequired=15
SummerEventIndex=SEI_Summer SummerEventIndex=SEI_Summer
} }

View File

@ -76,8 +76,13 @@ simulated function OnMapObjectiveDeactivated(Actor ObjectiveInterfaceActor)
} }
} }
simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT) simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT, bool bKiller)
{ {
if (bKiller == false)
{
return;
}
if (bObjectiveIsValidForMap[2] != 0) if (bObjectiveIsValidForMap[2] != 0)
{ {
IncrementSeasonalEventStat(2, 1); IncrementSeasonalEventStat(2, 1);
@ -123,4 +128,4 @@ defaultproperties
PerfectEscortsRequired=3 PerfectEscortsRequired=3
ZedKillsRequired=2500 ZedKillsRequired=2500
BossDeathsRequired=25 BossDeathsRequired=25
} }

View File

@ -68,8 +68,13 @@ simulated event OnGameWon(class<GameInfo> GameClass, int Difficulty, int GameLen
} }
} }
simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT) simulated function OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT, bool bKiller)
{ {
if (bKiller == false)
{
return;
}
if (bObjectiveIsValidForMap[1] != 0) if (bObjectiveIsValidForMap[1] != 0)
{ {
if (DT == class'KFDT_Trap_SanitariumTentacle') if (DT == class'KFDT_Trap_SanitariumTentacle')
@ -110,4 +115,4 @@ defaultproperties
TentacleTrapKillsRequired=20 TentacleTrapKillsRequired=20
SuctionTrapKillsRequired=20 SuctionTrapKillsRequired=20
MatriarchKillsRequired=10 MatriarchKillsRequired=10
} }

View File

@ -972,7 +972,7 @@ defaultproperties
FlameSprayArchetype = SprayActor_Flame'WEP_Laser_Cutter_ARCH.WEP_Laser_Cutter_Flame' FlameSprayArchetype = SprayActor_Flame'WEP_Laser_Cutter_ARCH.WEP_Laser_Cutter_Flame'
ChargeTimePerLevel = 0.7f; ChargeTimePerLevel = 0.7f;
ChargeConsumeTime = 0.082f; //Consumes 25 on full charge ChargeConsumeTime = 0.084f; //Consumes 25 on full charge
OverchargeConsumeTime = 0; //Setting to 0 or below deactivates ammo consumption while holding a charge OverchargeConsumeTime = 0; //Setting to 0 or below deactivates ammo consumption while holding a charge
// Shooting Animations // Shooting Animations

View File

@ -166,7 +166,8 @@ function StartHealRecharge()
if (Role == ROLE_Authority) if (Role == ROLE_Authority)
{ {
InstigatorPerk = GetPerk(); InstigatorPerk = GetPerk();
UsedHealRechargeTime = HealFullRechargeSeconds * static.GetUpgradeHealRechargeMod(CurrentWeaponUpgradeIndex); UsedHealRechargeTime = HealFullRechargeSeconds;
UsedHealRechargeTime *= static.GetUpgradeHealRechargeMod(CurrentWeaponUpgradeIndex);
InstigatorPerk.ModifyHealerRechargeTime(UsedHealRechargeTime); InstigatorPerk.ModifyHealerRechargeTime(UsedHealRechargeTime);
// Set the healing recharge rate whenever we start charging // Set the healing recharge rate whenever we start charging

View File

@ -42,10 +42,10 @@ defaultproperties
bReloadFromMagazine=true bReloadFromMagazine=true
// Recoil // Recoil
maxRecoilPitch=250 maxRecoilPitch=160
minRecoilPitch=200 minRecoilPitch=140
maxRecoilYaw=100 maxRecoilYaw=60
minRecoilYaw=-100 minRecoilYaw=-60
RecoilRate=0.01 RecoilRate=0.01
RecoilMaxYawLimit=500 RecoilMaxYawLimit=500
RecoilMinYawLimit=65035 RecoilMinYawLimit=65035
@ -61,7 +61,7 @@ defaultproperties
WeaponFireTypes(DEFAULT_FIREMODE)=EWFT_InstantHit WeaponFireTypes(DEFAULT_FIREMODE)=EWFT_InstantHit
WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Bullet_Pistol9mm' WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Bullet_Pistol9mm'
FireInterval(DEFAULT_FIREMODE)=+0.08 //0.175 FireInterval(DEFAULT_FIREMODE)=+0.08 //0.175
InstantHitDamage(DEFAULT_FIREMODE)=12.f //15 InstantHitDamage(DEFAULT_FIREMODE)=15.f //15
InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Ballistic_HRG_93R' InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Ballistic_HRG_93R'
Spread(DEFAULT_FIREMODE)=0.015 Spread(DEFAULT_FIREMODE)=0.015
FireOffset=(X=20,Y=4.0,Z=-3) FireOffset=(X=20,Y=4.0,Z=-3)

View File

@ -58,10 +58,10 @@ defaultproperties
bReloadFromMagazine=true bReloadFromMagazine=true
// Recoil // Recoil
maxRecoilPitch=250 maxRecoilPitch=160
minRecoilPitch=200 minRecoilPitch=140
maxRecoilYaw=100 maxRecoilYaw=60
minRecoilYaw=-100 minRecoilYaw=-60
RecoilRate=0.01 RecoilRate=0.01
RecoilMaxYawLimit=500 RecoilMaxYawLimit=500
RecoilMinYawLimit=65035 RecoilMinYawLimit=65035
@ -77,7 +77,7 @@ defaultproperties
WeaponFireTypes(DEFAULT_FIREMODE)=EWFT_InstantHit WeaponFireTypes(DEFAULT_FIREMODE)=EWFT_InstantHit
WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Bullet_Pistol9mm' WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Bullet_Pistol9mm'
FireInterval(DEFAULT_FIREMODE)=+0.08 FireInterval(DEFAULT_FIREMODE)=+0.08
InstantHitDamage(DEFAULT_FIREMODE)=12.0 //15 InstantHitDamage(DEFAULT_FIREMODE)=15.0 //15
InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Ballistic_HRG_93R' InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Ballistic_HRG_93R'
Spread(DEFAULT_FIREMODE)=0.015 Spread(DEFAULT_FIREMODE)=0.015
BurstAmount=3 BurstAmount=3
@ -89,7 +89,7 @@ defaultproperties
WeaponFireTypes(ALTFIRE_FIREMODE)=EWFT_InstantHit WeaponFireTypes(ALTFIRE_FIREMODE)=EWFT_InstantHit
WeaponProjectiles(ALTFIRE_FIREMODE)=class'KFProj_Bullet_Pistol9mm' WeaponProjectiles(ALTFIRE_FIREMODE)=class'KFProj_Bullet_Pistol9mm'
FireInterval(ALTFIRE_FIREMODE)=+0.08 // about twice as fast as single FireInterval(ALTFIRE_FIREMODE)=+0.08 // about twice as fast as single
InstantHitDamage(ALTFIRE_FIREMODE)=12.0 //15 InstantHitDamage(ALTFIRE_FIREMODE)=15.0 //15
InstantHitDamageTypes(ALTFIRE_FIREMODE)=class'KFDT_Ballistic_HRG_93R' InstantHitDamageTypes(ALTFIRE_FIREMODE)=class'KFDT_Ballistic_HRG_93R'
Spread(ALTFIRE_FIREMODE)=0.015 Spread(ALTFIRE_FIREMODE)=0.015

View File

@ -417,7 +417,6 @@ function StartHealRecharge()
UsedHealRechargeTime = HealFullRechargeSeconds; UsedHealRechargeTime = HealFullRechargeSeconds;
UsedHealRechargeTime *= static.GetUpgradeHealRechargeMod(CurrentWeaponUpgradeIndex); UsedHealRechargeTime *= static.GetUpgradeHealRechargeMod(CurrentWeaponUpgradeIndex);
UsedHealRechargeTime *= InstigatorPerk.GetHealRechargeMod();
InstigatorPerk.ModifyHealerRechargeTime(UsedHealRechargeTime); InstigatorPerk.ModifyHealerRechargeTime(UsedHealRechargeTime);
// Set the healing recharge rate whenever we start charging // Set the healing recharge rate whenever we start charging

View File

@ -104,7 +104,7 @@ defaultproperties
FiringStatesArray(DEFAULT_FIREMODE)=WeaponFiring FiringStatesArray(DEFAULT_FIREMODE)=WeaponFiring
WeaponFireTypes(DEFAULT_FIREMODE)=EWFT_Projectile WeaponFireTypes(DEFAULT_FIREMODE)=EWFT_Projectile
WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Bullet_HRG_Stunner' WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Bullet_HRG_Stunner'
InstantHitDamage(DEFAULT_FIREMODE)=60.0 //65.0 InstantHitDamage(DEFAULT_FIREMODE)=80.0 //65.0
InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Ballistic_HRG_Stunner' InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Ballistic_HRG_Stunner'
PenetrationPower(DEFAULT_FIREMODE)=2.0 PenetrationPower(DEFAULT_FIREMODE)=2.0
FireInterval(DEFAULT_FIREMODE)=0.15 FireInterval(DEFAULT_FIREMODE)=0.15

View File

@ -485,7 +485,7 @@ defaultproperties
LastAmmoCount=-1 LastAmmoCount=-1
NumAltBullets=5 NumAltBullets=5
SpreadWidthDegrees=30 SpreadWidthDegrees=20
StartingAltBulletPosition=0.0f StartingAltBulletPosition=0.0f
SpreadMaxOffset=(X=1.2f, Y=1.5f) SpreadMaxOffset=(X=1.2f, Y=1.5f)
} }

View File

@ -376,7 +376,7 @@ defaultproperties
WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Bullet_G18' WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Bullet_G18'
InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Ballistic_G18' InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Ballistic_G18'
FireInterval(DEFAULT_FIREMODE)=+.05455 // 1100 RPM FireInterval(DEFAULT_FIREMODE)=+.05455 // 1100 RPM
Spread(DEFAULT_FIREMODE)=0.06 Spread(DEFAULT_FIREMODE)=0.045
InstantHitDamage(DEFAULT_FIREMODE)=28 InstantHitDamage(DEFAULT_FIREMODE)=28
FireOffset=(X=30,Y=6.5,Z=-4) FireOffset=(X=30,Y=6.5,Z=-4)