Merge branch 'master' into localization
Conflicts (fixed): ServerExt/Classes/UI_MidGameMenu.uc
This commit is contained in:
commit
84abe621c2
@ -1,3 +1,9 @@
|
|||||||
class ExtDT_Ballistic_9mm extends KFDT_Ballistic_9mm
|
class ExtDT_Ballistic_9mm extends KFDT_Ballistic_9mm
|
||||||
abstract
|
abstract
|
||||||
hidedropdown;
|
hidedropdown;
|
||||||
|
|
||||||
|
DefaultProperties
|
||||||
|
{
|
||||||
|
ModifierPerkList(0) = class'KFPerk_Sharpshooter'
|
||||||
|
ModifierPerkList(1) = class'KFPerk_Gunslinger'
|
||||||
|
}
|
@ -1,3 +1,9 @@
|
|||||||
class ExtDT_Ballistic_Pistol_Medic extends KFDT_Ballistic_Pistol_Medic
|
class ExtDT_Ballistic_Pistol_Medic extends KFDT_Ballistic_Pistol_Medic
|
||||||
abstract
|
abstract
|
||||||
hidedropdown;
|
hidedropdown;
|
||||||
|
|
||||||
|
DefaultProperties
|
||||||
|
{
|
||||||
|
ModifierPerkList(0) = class'KFPerk_Sharpshooter'
|
||||||
|
ModifierPerkList(1) = class'KFPerk_Gunslinger'
|
||||||
|
}
|
@ -257,6 +257,7 @@ simulated static final function KFGFxObject_TraderItems CreateNewList()
|
|||||||
simulated static final function SetWeaponInfo( bool bDedicated, int Index, FCustomTraderItem Item, KFGFxObject_TraderItems List )
|
simulated static final function SetWeaponInfo( bool bDedicated, int Index, FCustomTraderItem Item, KFGFxObject_TraderItems List )
|
||||||
{
|
{
|
||||||
local array<STraderItemWeaponStats> S;
|
local array<STraderItemWeaponStats> S;
|
||||||
|
local int i;
|
||||||
|
|
||||||
if( List.SaleItems.Length<=Index )
|
if( List.SaleItems.Length<=Index )
|
||||||
List.SaleItems.Length = Index+1;
|
List.SaleItems.Length = Index+1;
|
||||||
@ -268,16 +269,24 @@ simulated static final function SetWeaponInfo( bool bDedicated, int Index, FCust
|
|||||||
else List.SaleItems[Index].SingleClassName = '';
|
else List.SaleItems[Index].SingleClassName = '';
|
||||||
List.SaleItems[Index].DualClassName = Item.WeaponClass.Default.DualClass!=None ? Item.WeaponClass.Default.DualClass.Name : '';
|
List.SaleItems[Index].DualClassName = Item.WeaponClass.Default.DualClass!=None ? Item.WeaponClass.Default.DualClass.Name : '';
|
||||||
List.SaleItems[Index].AssociatedPerkClasses = Item.WeaponClass.Static.GetAssociatedPerkClasses();
|
List.SaleItems[Index].AssociatedPerkClasses = Item.WeaponClass.Static.GetAssociatedPerkClasses();
|
||||||
|
List.SaleItems[Index].MaxSpareAmmo = Item.WeaponClass.Default.SpareAmmoCapacity[0];
|
||||||
List.SaleItems[Index].MagazineCapacity = Item.WeaponClass.Default.MagazineCapacity[0];
|
List.SaleItems[Index].MagazineCapacity = Item.WeaponClass.Default.MagazineCapacity[0];
|
||||||
List.SaleItems[Index].InitialSpareMags = Item.WeaponClass.Default.InitialSpareMags[0];
|
List.SaleItems[Index].InitialSpareMags = Item.WeaponClass.Default.InitialSpareMags[0];
|
||||||
List.SaleItems[Index].MaxSpareAmmo = Item.WeaponClass.Default.SpareAmmoCapacity[0];
|
|
||||||
List.SaleItems[Index].MaxSecondaryAmmo = Item.WeaponClass.Default.MagazineCapacity[1] * Item.WeaponClass.Default.SpareAmmoCapacity[1];
|
List.SaleItems[Index].MaxSecondaryAmmo = Item.WeaponClass.Default.MagazineCapacity[1] * Item.WeaponClass.Default.SpareAmmoCapacity[1];
|
||||||
List.SaleItems[Index].BlocksRequired = Item.WeaponClass.Default.InventorySize;
|
List.SaleItems[Index].BlocksRequired = Item.WeaponClass.Default.InventorySize;
|
||||||
List.SaleItems[Index].ItemID = Index;
|
List.SaleItems[Index].ItemID = Index;
|
||||||
|
|
||||||
|
List.SaleItems[Index].InitialSecondaryAmmo = Item.WeaponClass.Default.InitialSpareMags[1];
|
||||||
|
List.SaleItems[Index].WeaponUpgradeDmgMultiplier[0] = 1.0;
|
||||||
|
for(i = 0;i<Min(Item.WeaponClass.Default.WeaponUpgrades.Length, 5);i++)
|
||||||
|
{
|
||||||
|
List.SaleItems[Index].WeaponUpgradeWeight[i+1] = Item.WeaponClass.Static.GetUpgradeStatAdd(EWUS_Weight, i+1);
|
||||||
|
List.SaleItems[Index].WeaponUpgradeDmgMultiplier[i+1] = Item.WeaponClass.Static.GetUpgradeStatScale(EWUS_Damage0, i+1);
|
||||||
|
}
|
||||||
|
|
||||||
if( !bDedicated )
|
if( !bDedicated )
|
||||||
{
|
{
|
||||||
List.SaleItems[Index].SecondaryAmmoImagePath = Item.WeaponClass.Default.SecondaryAmmoTexture!=None ? "img://"$PathName(Item.WeaponClass.Default.SecondaryAmmoTexture) : "";
|
List.SaleItems[Index].SecondaryAmmoImagePath = Item.WeaponClass.Default.SecondaryAmmoTexture!=None ? PathName(Item.WeaponClass.Default.SecondaryAmmoTexture) : "UI_SecondaryAmmo_TEX.GasTank";
|
||||||
List.SaleItems[Index].TraderFilter = Item.WeaponClass.Static.GetTraderFilter();
|
List.SaleItems[Index].TraderFilter = Item.WeaponClass.Static.GetTraderFilter();
|
||||||
List.SaleItems[Index].InventoryGroup = Item.WeaponClass.Default.InventoryGroup;
|
List.SaleItems[Index].InventoryGroup = Item.WeaponClass.Default.InventoryGroup;
|
||||||
List.SaleItems[Index].GroupPriority = Item.WeaponClass.Default.GroupPriority;
|
List.SaleItems[Index].GroupPriority = Item.WeaponClass.Default.GroupPriority;
|
||||||
@ -296,8 +305,12 @@ simulated function RecheckGRI()
|
|||||||
{
|
{
|
||||||
KFGameReplicationInfo(WorldInfo.GRI).TraderItems = CustomList;
|
KFGameReplicationInfo(WorldInfo.GRI).TraderItems = CustomList;
|
||||||
foreach LocalPlayerControllers(class'ExtPlayerController',PC)
|
foreach LocalPlayerControllers(class'ExtPlayerController',PC)
|
||||||
|
{
|
||||||
if( PC.PurchaseHelper!=None )
|
if( PC.PurchaseHelper!=None )
|
||||||
|
{
|
||||||
PC.PurchaseHelper.TraderItems = CustomList;
|
PC.PurchaseHelper.TraderItems = CustomList;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,6 +12,11 @@ defaultproperties
|
|||||||
InventorySize=0
|
InventorySize=0
|
||||||
|
|
||||||
InstantHitDamageTypes(DEFAULT_FIREMODE)=class'ExtDT_Ballistic_Pistol_Medic'
|
InstantHitDamageTypes(DEFAULT_FIREMODE)=class'ExtDT_Ballistic_Pistol_Medic'
|
||||||
|
|
||||||
|
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.7f), (Stat=EWUS_HealFullRecharge, Scale=0.9f)))
|
||||||
|
WeaponUpgrades[2]=(Stats=((Stat=EWUS_Damage0, Scale=2.0f), (Stat=EWUS_HealFullRecharge, Scale=0.8f)))
|
||||||
|
WeaponUpgrades[3]=(Stats=((Stat=EWUS_Damage0, Scale=2.55f), (Stat=EWUS_HealFullRecharge, Scale=0.7f)))
|
||||||
|
WeaponUpgrades[4]=(Stats=((Stat=EWUS_Damage0, Scale=3.0f), (Stat=EWUS_HealFullRecharge, Scale=0.6f)))
|
||||||
}
|
}
|
||||||
|
|
||||||
simulated static function bool AllowedForAllPerks()
|
simulated static function bool AllowedForAllPerks()
|
||||||
|
@ -34,7 +34,8 @@ var config int FirstLevelExp, // How much EXP needed for first level.
|
|||||||
StarPointsPerLevel,
|
StarPointsPerLevel,
|
||||||
MinLevelForPrestige, // Minimum level required for perk prestige.
|
MinLevelForPrestige, // Minimum level required for perk prestige.
|
||||||
PrestigeSPIncrease, // Starpoint increase per prestige levelup.
|
PrestigeSPIncrease, // Starpoint increase per prestige levelup.
|
||||||
MaxPrestige; // Maximum prestige level.
|
MaxPrestige,
|
||||||
|
MinimalDataLevel; // Maximum prestige level.
|
||||||
var config float PrestigeXPReduce; // Amount of XP cost is reduced for each prestige.
|
var config float PrestigeXPReduce; // Amount of XP cost is reduced for each prestige.
|
||||||
var config array<string> TraitClasses;
|
var config array<string> TraitClasses;
|
||||||
|
|
||||||
@ -405,6 +406,12 @@ function LoadData( ExtSaveDataBase Data )
|
|||||||
local string S;
|
local string S;
|
||||||
|
|
||||||
CurrentEXP = Data.ReadInt(3);
|
CurrentEXP = Data.ReadInt(3);
|
||||||
|
// if(MinimalDataLevel > 0)
|
||||||
|
// {
|
||||||
|
// i = GetNeededExp(MinimalDataLevel-1)
|
||||||
|
// if(i > CurrentEXP)
|
||||||
|
// CurrentEXP = i
|
||||||
|
// }
|
||||||
|
|
||||||
if( Data.GetArVer()>=1 )
|
if( Data.GetArVer()>=1 )
|
||||||
CurrentPrestige = Data.ReadInt(3);
|
CurrentPrestige = Data.ReadInt(3);
|
||||||
@ -465,6 +472,13 @@ function SetInitialLevel()
|
|||||||
local int i,a,b;
|
local int i,a,b;
|
||||||
local byte MT,j;
|
local byte MT,j;
|
||||||
|
|
||||||
|
if(MinimalDataLevel > 0)
|
||||||
|
{
|
||||||
|
i = GetNeededExp(MinimalDataLevel-1);
|
||||||
|
if(i > CurrentEXP)
|
||||||
|
CurrentEXP = i;
|
||||||
|
}
|
||||||
|
|
||||||
// Set to initial level player is on after configures has loaded.
|
// Set to initial level player is on after configures has loaded.
|
||||||
CurrentLevel = CalcLevelForExp(CurrentEXP);
|
CurrentLevel = CalcLevelForExp(CurrentEXP);
|
||||||
CurrentSP = CurrentLevel*(StarPointsPerLevel+CurrentPrestige*PrestigeSPIncrease);
|
CurrentSP = CurrentLevel*(StarPointsPerLevel+CurrentPrestige*PrestigeSPIncrease);
|
||||||
@ -605,6 +619,7 @@ static function UpdateConfigs( int OldVer )
|
|||||||
Default.MinLevelForPrestige = 140;
|
Default.MinLevelForPrestige = 140;
|
||||||
Default.PrestigeSPIncrease = 1;
|
Default.PrestigeSPIncrease = 1;
|
||||||
Default.MaxPrestige = 20;
|
Default.MaxPrestige = 20;
|
||||||
|
Default.MinimalDataLevel = 0;
|
||||||
Default.PrestigeXPReduce = 0.05;
|
Default.PrestigeXPReduce = 0.05;
|
||||||
|
|
||||||
Default.PerkStats.Length = 0;
|
Default.PerkStats.Length = 0;
|
||||||
@ -635,6 +650,8 @@ static function UpdateConfigs( int OldVer )
|
|||||||
AddStatsCfg(16); // Add sonic/fire damage.
|
AddStatsCfg(16); // Add sonic/fire damage.
|
||||||
else if( OldVer<=12 )
|
else if( OldVer<=12 )
|
||||||
AddStatsCfg(18); // Add all damage.
|
AddStatsCfg(18); // Add all damage.
|
||||||
|
else if( OldVer<=13 )
|
||||||
|
AddStatsCfg(19); // Add HeadDamage and HealRecharge
|
||||||
if( OldVer<=5 )
|
if( OldVer<=5 )
|
||||||
{
|
{
|
||||||
// Add prestige
|
// Add prestige
|
||||||
@ -707,6 +724,8 @@ static function string GetValue( name PropName, int ElementIndex )
|
|||||||
return string(Default.MinLevelForPrestige);
|
return string(Default.MinLevelForPrestige);
|
||||||
case 'PrestigeSPIncrease':
|
case 'PrestigeSPIncrease':
|
||||||
return string(Default.PrestigeSPIncrease);
|
return string(Default.PrestigeSPIncrease);
|
||||||
|
case 'MinimalDataLevel':
|
||||||
|
return string(Default.MinimalDataLevel);
|
||||||
case 'MaxPrestige':
|
case 'MaxPrestige':
|
||||||
return string(Default.MaxPrestige);
|
return string(Default.MaxPrestige);
|
||||||
case 'PrestigeXPReduce':
|
case 'PrestigeXPReduce':
|
||||||
@ -721,6 +740,8 @@ static function ApplyValue( name PropName, int ElementIndex, string Value )
|
|||||||
Default.FirstLevelExp = int(Value); break;
|
Default.FirstLevelExp = int(Value); break;
|
||||||
case 'LevelUpExpCost':
|
case 'LevelUpExpCost':
|
||||||
Default.LevelUpExpCost = int(Value); break;
|
Default.LevelUpExpCost = int(Value); break;
|
||||||
|
case 'MinimalDataLevel':
|
||||||
|
Default.MinimalDataLevel = int(Value); break;
|
||||||
case 'LevelUpIncCost':
|
case 'LevelUpIncCost':
|
||||||
Default.LevelUpIncCost = int(Value); break;
|
Default.LevelUpIncCost = int(Value); break;
|
||||||
case 'MinimumLevel':
|
case 'MinimumLevel':
|
||||||
@ -1143,6 +1164,12 @@ simulated function float ApplyEffect( name Type, float Value, float Progress )
|
|||||||
case 'AllDmg':
|
case 'AllDmg':
|
||||||
Modifiers[18] = 1.f / (1.f+Value*Progress);
|
Modifiers[18] = 1.f / (1.f+Value*Progress);
|
||||||
break;
|
break;
|
||||||
|
case 'HeadDamage':
|
||||||
|
Modifiers[19] = Value*Progress;
|
||||||
|
break;
|
||||||
|
case 'HealRecharge':
|
||||||
|
Modifiers[20] = 1.f / (1.f+Value*Progress);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return (Value*Progress);
|
return (Value*Progress);
|
||||||
}
|
}
|
||||||
@ -1150,7 +1177,12 @@ simulated function float ApplyEffect( name Type, float Value, float Progress )
|
|||||||
simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCauser, optional KFPawn_Monster MyKFPM, optional KFPlayerController DamageInstigator, optional class<KFDamageType> DamageType, optional int HitZoneIdx )
|
simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCauser, optional KFPawn_Monster MyKFPM, optional KFPlayerController DamageInstigator, optional class<KFDamageType> DamageType, optional int HitZoneIdx )
|
||||||
{
|
{
|
||||||
if( BasePerk==None || (DamageType!=None && DamageType.Default.ModifierPerkList.Find(BasePerk)>=0) || (KFWeapon(DamageCauser)!=None && IsWeaponOnPerk(KFWeapon(DamageCauser))) )
|
if( BasePerk==None || (DamageType!=None && DamageType.Default.ModifierPerkList.Find(BasePerk)>=0) || (KFWeapon(DamageCauser)!=None && IsWeaponOnPerk(KFWeapon(DamageCauser))) )
|
||||||
InDamage *= Modifiers[1];
|
{
|
||||||
|
if(HitZoneIdx == 0)
|
||||||
|
InDamage *= (Modifiers[1] + Modifiers[19]);
|
||||||
|
else
|
||||||
|
InDamage *= Modifiers[1];
|
||||||
|
}
|
||||||
else if( DamageType==None || DamageType.Name!='KFDT_SuicideExplosive' )
|
else if( DamageType==None || DamageType.Name!='KFDT_SuicideExplosive' )
|
||||||
InDamage *= Modifiers[12];
|
InDamage *= Modifiers[12];
|
||||||
}
|
}
|
||||||
@ -1265,7 +1297,10 @@ final function UpdateAmmoStatus( InventoryManager Inv )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
simulated function ModifyHealerRechargeTime( out float RechargeRate );
|
simulated function ModifyHealerRechargeTime( out float RechargeRate )
|
||||||
|
{
|
||||||
|
RechargeRate *= Modifiers[20];
|
||||||
|
}
|
||||||
|
|
||||||
simulated function DrawSpecialPerkHUD(Canvas C)
|
simulated function DrawSpecialPerkHUD(Canvas C)
|
||||||
{
|
{
|
||||||
@ -1362,7 +1397,7 @@ simulated function float GetZedTimeExtensions( byte Level )
|
|||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
CurrentConfigVer=13
|
CurrentConfigVer=14
|
||||||
bOnlyRelevantToOwner=true
|
bOnlyRelevantToOwner=true
|
||||||
bCanBeGrabbed=true
|
bCanBeGrabbed=true
|
||||||
NetUpdateFrequency=1
|
NetUpdateFrequency=1
|
||||||
@ -1410,12 +1445,13 @@ defaultproperties
|
|||||||
WebConfigs.Add((PropType=0,PropName="PrestigeSPIncrease",UIName="Prestige SP Increase",UIDesc="Star points increase per level for every prestige"))
|
WebConfigs.Add((PropType=0,PropName="PrestigeSPIncrease",UIName="Prestige SP Increase",UIDesc="Star points increase per level for every prestige"))
|
||||||
WebConfigs.Add((PropType=0,PropName="MaxPrestige",UIName="Max Prestige",UIDesc="Maximum prestige level"))
|
WebConfigs.Add((PropType=0,PropName="MaxPrestige",UIName="Max Prestige",UIDesc="Maximum prestige level"))
|
||||||
WebConfigs.Add((PropType=0,PropName="PrestigeXPReduce",UIName="Prestige XP Reduce",UIDesc="Percent amount of XP cost is reduced for each prestige (1.0 = 1/2, or 50 % of XP)"))
|
WebConfigs.Add((PropType=0,PropName="PrestigeXPReduce",UIName="Prestige XP Reduce",UIDesc="Percent amount of XP cost is reduced for each prestige (1.0 = 1/2, or 50 % of XP)"))
|
||||||
|
// WebConfigs.Add((PropType=0,PropName="MinimalDataLevel",UIName="Minimal Real Level",UIDesc="Minimal level for new players or who loads from saves"))
|
||||||
|
|
||||||
// TODO: localize
|
// TODO: localize
|
||||||
DefPerkStats(0)=(MaxValue=50,CostPerValue=1,StatType="Speed",UIName="Movement Speed (+&%)",Progress=0.4)
|
DefPerkStats(0)=(MaxValue=50,CostPerValue=1,StatType="Speed",UIName="Movement Speed (+&%)",Progress=0.4)
|
||||||
DefPerkStats(1)=(MaxValue=1000,CostPerValue=1,StatType="Damage",UIName="Perk Damage (+&%)",Progress=0.5)
|
DefPerkStats(1)=(MaxValue=1000,CostPerValue=1,StatType="Damage",UIName="Perk Damage (+&%)",Progress=0.5)
|
||||||
DefPerkStats(2)=(MaxValue=90,CostPerValue=1,StatType="Recoil",UIName="Fire Recoil (-&%)",Progress=1)
|
DefPerkStats(2)=(MaxValue=90,CostPerValue=1,StatType="Recoil",UIName="Fire Recoil Reduce (+&%)",Progress=1)
|
||||||
DefPerkStats(3)=(MaxValue=80,CostPerValue=1,StatType="Spread",UIName="Fire Spread (-&%)",Progress=0.75)
|
DefPerkStats(3)=(MaxValue=80,CostPerValue=1,StatType="Spread",UIName="Fire Spread Reduce (+&%)",Progress=0.75)
|
||||||
DefPerkStats(4)=(MaxValue=1000,CostPerValue=1,StatType="Rate",UIName="Perk Rate of Fire (+&%)",Progress=0.5)
|
DefPerkStats(4)=(MaxValue=1000,CostPerValue=1,StatType="Rate",UIName="Perk Rate of Fire (+&%)",Progress=0.5)
|
||||||
DefPerkStats(5)=(MaxValue=1000,CostPerValue=1,StatType="Reload",UIName="Perk Reload Time (-&%)",Progress=0.5)
|
DefPerkStats(5)=(MaxValue=1000,CostPerValue=1,StatType="Reload",UIName="Perk Reload Time (-&%)",Progress=0.5)
|
||||||
DefPerkStats(6)=(MaxValue=150,CostPerValue=1,StatType="Health",UIName="Health (+&HP)",Progress=1)
|
DefPerkStats(6)=(MaxValue=150,CostPerValue=1,StatType="Health",UIName="Health (+&HP)",Progress=1)
|
||||||
@ -1431,6 +1467,8 @@ defaultproperties
|
|||||||
DefPerkStats(16)=(MaxValue=1000,CostPerValue=1,StatType="SonicDmg",UIName="Sonic Resistance (+&%)",Progress=1.5,bHiddenConfig=true)
|
DefPerkStats(16)=(MaxValue=1000,CostPerValue=1,StatType="SonicDmg",UIName="Sonic Resistance (+&%)",Progress=1.5,bHiddenConfig=true)
|
||||||
DefPerkStats(17)=(MaxValue=1000,CostPerValue=1,StatType="FireDmg",UIName="Fire Resistance (+&%)",Progress=1.5,bHiddenConfig=true)
|
DefPerkStats(17)=(MaxValue=1000,CostPerValue=1,StatType="FireDmg",UIName="Fire Resistance (+&%)",Progress=1.5,bHiddenConfig=true)
|
||||||
DefPerkStats(18)=(MaxValue=500,CostPerValue=1,StatType="AllDmg",UIName="Zed Damage Reduction (+&%)",Progress=0.25)
|
DefPerkStats(18)=(MaxValue=500,CostPerValue=1,StatType="AllDmg",UIName="Zed Damage Reduction (+&%)",Progress=0.25)
|
||||||
|
DefPerkStats(19)=(MaxValue=500,CostPerValue=1,StatType="HeadDamage",UIName="Perk Head Damage (+&%)",Progress=1,bHiddenConfig=true)
|
||||||
|
DefPerkStats(20)=(MaxValue=200,CostPerValue=1,StatType="HealRecharge",UIName="Syringe Recharge Rate (+&%)",Progress=0.5,bHiddenConfig=true)
|
||||||
|
|
||||||
Modifiers.Add(1.f)
|
Modifiers.Add(1.f)
|
||||||
Modifiers.Add(1.f)
|
Modifiers.Add(1.f)
|
||||||
@ -1451,6 +1489,8 @@ defaultproperties
|
|||||||
Modifiers.Add(1.f)
|
Modifiers.Add(1.f)
|
||||||
Modifiers.Add(1.f)
|
Modifiers.Add(1.f)
|
||||||
Modifiers.Add(1.f)
|
Modifiers.Add(1.f)
|
||||||
|
Modifiers.Add(0.f)
|
||||||
|
Modifiers.Add(1.f)
|
||||||
|
|
||||||
EnemyDistDraw.Add(500)
|
EnemyDistDraw.Add(500)
|
||||||
EnemyDistDraw.Add(700)
|
EnemyDistDraw.Add(700)
|
||||||
|
@ -52,10 +52,13 @@ function bool ModifyHealAmount( out float HealAmount )
|
|||||||
HealAmount*=Modifiers[9];
|
HealAmount*=Modifiers[9];
|
||||||
return (RepairArmorRate>0);
|
return (RepairArmorRate>0);
|
||||||
}
|
}
|
||||||
simulated function ModifyHealerRechargeTime( out float RechargeRate )
|
|
||||||
{
|
// Di
|
||||||
RechargeRate /= Clamp(Modifiers[9] * 2, 1.f, 3.f);
|
// simulated function ModifyHealerRechargeTime( out float RechargeRate )
|
||||||
}
|
// {
|
||||||
|
// super.ModifyHealerRechargeTime(RechargeRate)
|
||||||
|
// RechargeRate /= Clamp(Modifiers[9] * 2, 1.f, 3.f);
|
||||||
|
// }
|
||||||
|
|
||||||
function CheckForAirborneAgent( KFPawn HealTarget, class<DamageType> DamType, int HealAmount )
|
function CheckForAirborneAgent( KFPawn HealTarget, class<DamageType> DamType, int HealAmount )
|
||||||
{
|
{
|
||||||
@ -73,7 +76,7 @@ function GiveMedicAirborneAgentHealth( KFPawn HealTarget, class<DamageType> DamT
|
|||||||
foreach WorldInfo.Allpawns(class'KFPawn', KFP, HealTarget.Location, 500.f)
|
foreach WorldInfo.Allpawns(class'KFPawn', KFP, HealTarget.Location, 500.f)
|
||||||
{
|
{
|
||||||
if( KFP.IsAliveAndWell() && WorldInfo.GRI.OnSameTeam( HealTarget, KFP ) )
|
if( KFP.IsAliveAndWell() && WorldInfo.GRI.OnSameTeam( HealTarget, KFP ) )
|
||||||
{
|
{
|
||||||
if ( HealTarget == KFP )
|
if ( HealTarget == KFP )
|
||||||
KFP.HealDamage( RoundedExtraHealAmount, PlayerOwner, DamType );
|
KFP.HealDamage( RoundedExtraHealAmount, PlayerOwner, DamType );
|
||||||
else KFP.HealDamage( RoundedExtraHealAmount + HealAmount, PlayerOwner, DamType );
|
else KFP.HealDamage( RoundedExtraHealAmount + HealAmount, PlayerOwner, DamType );
|
||||||
@ -112,6 +115,15 @@ simulated function float GetSnarePower( optional class<DamageType> DamageType, o
|
|||||||
return 0.f;
|
return 0.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function AddDefaultInventory( KFPawn P )
|
||||||
|
{
|
||||||
|
local int i;
|
||||||
|
i = P.DefaultInventory.Find(class'ExtWeap_Pistol_9mm');
|
||||||
|
if(i != -1)
|
||||||
|
P.DefaultInventory[i] = class'ExtWeap_Pistol_MedicS';
|
||||||
|
super.AddDefaultInventory(P);
|
||||||
|
}
|
||||||
|
|
||||||
simulated function bool GetHealingSpeedBoostActive()
|
simulated function bool GetHealingSpeedBoostActive()
|
||||||
{
|
{
|
||||||
return bHealingBoost;
|
return bHealingBoost;
|
||||||
@ -203,15 +215,17 @@ defaultproperties
|
|||||||
DefPerkStats(15)=(bHiddenConfig=false) // Toxic resistance
|
DefPerkStats(15)=(bHiddenConfig=false) // Toxic resistance
|
||||||
DefPerkStats(16)=(bHiddenConfig=false) // Sonic resistance
|
DefPerkStats(16)=(bHiddenConfig=false) // Sonic resistance
|
||||||
DefPerkStats(17)=(bHiddenConfig=false) // Fire resistance
|
DefPerkStats(17)=(bHiddenConfig=false) // Fire resistance
|
||||||
|
DefPerkStats(20)=(bHiddenConfig=false) // Heal recharge
|
||||||
|
|
||||||
PrimaryMelee=class'KFWeap_Knife_FieldMedic'
|
PrimaryMelee=class'KFWeap_Knife_FieldMedic'
|
||||||
PrimaryWeapon=class'KFWeap_Pistol_Medic'
|
PrimaryWeapon=None
|
||||||
PerkGrenade=class'KFProj_MedicGrenade'
|
PerkGrenade=class'KFProj_MedicGrenade'
|
||||||
SuperGrenade=class'ExtProj_SUPERMedGrenade'
|
SuperGrenade=class'ExtProj_SUPERMedGrenade'
|
||||||
|
SecondaryWeaponDef=class'ExtWeapDef_MedicPistol'
|
||||||
|
|
||||||
PrimaryWeaponDef=class'KFWeapDef_MedicPistol'
|
PrimaryWeaponDef=None
|
||||||
KnifeWeaponDef=class'KFWeapDef_Knife_Medic'
|
KnifeWeaponDef=class'KFWeapDef_Knife_Medic'
|
||||||
GrenadeWeaponDef=class'KFWeapDef_Grenade_Medic'
|
GrenadeWeaponDef=class'KFWeapDef_Grenade_Medic'
|
||||||
|
|
||||||
AutoBuyLoadOutPath=(class'KFWeapDef_MedicPistol', class'KFWeapDef_MedicSMG', class'KFWeapDef_MedicShotgun', class'KFWeapDef_MedicRifle')
|
AutoBuyLoadOutPath=(class'KFWeapDef_MedicSMG', class'KFWeapDef_MedicShotgun', class'KFWeapDef_MedicRifle')
|
||||||
}
|
}
|
@ -1,7 +1,8 @@
|
|||||||
Class Ext_PerkRhythmPerkBase extends Ext_PerkBase;
|
Class Ext_PerkRhythmPerkBase extends Ext_PerkBase;
|
||||||
|
|
||||||
var byte HeadShotComboCount,MaxRhythmCombo,MissComboCount;
|
var byte HeadShotComboCount,MaxRhythmCombo;
|
||||||
var float RhythmComboDmg;
|
var float RhythmComboDmg;
|
||||||
|
var private const float HeadShotCountdownIntervall;
|
||||||
|
|
||||||
simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCauser, optional KFPawn_Monster MyKFPM, optional KFPlayerController DamageInstigator, optional class<KFDamageType> DamageType, optional int HitZoneIdx )
|
simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCauser, optional KFPawn_Monster MyKFPM, optional KFPlayerController DamageInstigator, optional class<KFDamageType> DamageType, optional int HitZoneIdx )
|
||||||
{
|
{
|
||||||
@ -19,59 +20,51 @@ final function ResetRhythm()
|
|||||||
MaxRhythmCombo = 0;
|
MaxRhythmCombo = 0;
|
||||||
HeadShotComboCount = 0;
|
HeadShotComboCount = 0;
|
||||||
RhythmComboDmg = 0;
|
RhythmComboDmg = 0;
|
||||||
MissComboCount = 0;
|
|
||||||
HeadShotMessage(0,true,1);
|
HeadShotMessage(0,true,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function SubstractHeadShotCombo()
|
||||||
|
{
|
||||||
|
if( HeadShotComboCount > 0 )
|
||||||
|
UpdateDmgScale(false);
|
||||||
|
else
|
||||||
|
ClearTimer( nameOf( SubstractHeadShotCombo ) );
|
||||||
|
}
|
||||||
|
|
||||||
final function UpdateDmgScale( bool bUp )
|
final function UpdateDmgScale( bool bUp )
|
||||||
{
|
{
|
||||||
if( bUp )
|
if( bUp )
|
||||||
{
|
{
|
||||||
MissComboCount = 0;
|
HeadShotComboCount = Min(HeadShotComboCount+1,MaxRhythmCombo);
|
||||||
HeadShotComboCount = Min(HeadShotComboCount+1,255);
|
|
||||||
HeadShotMessage(HeadShotComboCount,false,MaxRhythmCombo);
|
HeadShotMessage(HeadShotComboCount,false,MaxRhythmCombo);
|
||||||
|
SetTimer( HeadShotCountdownIntervall, true, nameOf( SubstractHeadShotCombo ) );
|
||||||
}
|
}
|
||||||
else if( HeadShotComboCount>0 && ++MissComboCount==3 )
|
else if( HeadShotComboCount>0)
|
||||||
{
|
{
|
||||||
--HeadShotComboCount;
|
--HeadShotComboCount;
|
||||||
HeadShotMessage(HeadShotComboCount,true,MaxRhythmCombo);
|
HeadShotMessage(HeadShotComboCount,true,MaxRhythmCombo);
|
||||||
MissComboCount = 0;
|
|
||||||
}
|
}
|
||||||
else return;
|
else return;
|
||||||
RhythmComboDmg = FMin(HeadShotComboCount,MaxRhythmCombo)*0.075;
|
RhythmComboDmg = HeadShotComboCount*0.075;
|
||||||
}
|
}
|
||||||
|
|
||||||
function UpdatePerkHeadShots( ImpactInfo Impact, class<DamageType> DamageType, int NumHit )
|
function UpdatePerkHeadShots( ImpactInfo Impact, class<DamageType> DamageType, int NumHit )
|
||||||
{
|
{
|
||||||
local int HitZoneIdx;
|
local int HitZoneIdx;
|
||||||
local KFPawn_Monster KFPM;
|
local KFPawn_Monster KFPM;
|
||||||
|
|
||||||
// `log("RACKEMUP" @ GetScriptTrace());
|
|
||||||
|
|
||||||
if( MaxRhythmCombo<=0 )
|
if( MaxRhythmCombo<=0 )
|
||||||
return;
|
return;
|
||||||
KFPM = KFPawn_Monster(Impact.HitActor);
|
KFPM = KFPawn_Monster(Impact.HitActor);
|
||||||
if( KFPM==none || KFPM.GetTeamNum()==0 )
|
if( KFPM==none || KFPM.GetTeamNum()==0 )
|
||||||
{
|
|
||||||
if( NumHit < 1 && HeadShotComboCount>0 )
|
|
||||||
UpdateDmgScale(false);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
HitZoneIdx = KFPM.HitZones.Find('ZoneName', Impact.HitInfo.BoneName);
|
HitZoneIdx = KFPM.HitZones.Find('ZoneName', Impact.HitInfo.BoneName);
|
||||||
if( HitZoneIdx == HZI_Head && KFPM.IsAliveAndWell() )
|
if( HitZoneIdx == HZI_Head && KFPM.IsAliveAndWell() )
|
||||||
{
|
{
|
||||||
if( class<KFDamageType>(DamageType)!=None
|
if( class<KFDamageType>(DamageType)!=None && (class<KFDamageType>(DamageType).Default.ModifierPerkList.Find(BasePerk)>=0))
|
||||||
&& (class<KFDamageType>(DamageType).Default.ModifierPerkList.Find(BasePerk)>=0
|
|
||||||
|| DamageType == class'ExtDT_Ballistic_9mm'
|
|
||||||
|| DamageType == class'ExtDT_Ballistic_Pistol_Medic'
|
|
||||||
|| DamageType == class'KFDT_Ballistic_9mm'
|
|
||||||
|| DamageType == class'KFDT_Ballistic_Pistol_Medic'))
|
|
||||||
UpdateDmgScale(true);
|
UpdateDmgScale(true);
|
||||||
else if( HeadShotComboCount>0 )
|
|
||||||
UpdateDmgScale(false);
|
|
||||||
}
|
}
|
||||||
else if( NumHit < 1 && HeadShotComboCount>0 )
|
|
||||||
UpdateDmgScale(false);
|
|
||||||
}
|
}
|
||||||
reliable client function HeadShotMessage( byte HeadShotNum, bool bMissed, byte MaxHits )
|
reliable client function HeadShotMessage( byte HeadShotNum, bool bMissed, byte MaxHits )
|
||||||
{
|
{
|
||||||
@ -110,4 +103,5 @@ reliable client function HeadShotMessage( byte HeadShotNum, bool bMissed, byte M
|
|||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
HeadShotCountdownIntervall=2.f
|
||||||
}
|
}
|
@ -27,11 +27,12 @@ defaultproperties
|
|||||||
{
|
{
|
||||||
PerkIcon=Texture2D'UI_PerkIcons_TEX.UI_PerkIcon_Sharpshooter'
|
PerkIcon=Texture2D'UI_PerkIcons_TEX.UI_PerkIcon_Sharpshooter'
|
||||||
DefTraitList.Add(class'Ext_TraitWPSharp')
|
DefTraitList.Add(class'Ext_TraitWPSharp')
|
||||||
DefTraitList.Add(class'Ext_TraitRackEmUp')
|
|
||||||
DefTraitList.Add(class'Ext_TraitRanger')
|
DefTraitList.Add(class'Ext_TraitRanger')
|
||||||
DefTraitList.Add(class'Ext_TraitDireReload')
|
DefTraitList.Add(class'Ext_TraitDireReload')
|
||||||
DefTraitList.Add(class'Ext_TraitEliteReload')
|
DefTraitList.Add(class'Ext_TraitEliteReload')
|
||||||
BasePerk=class'KFPerk_Sharpshooter'
|
BasePerk=class'KFPerk_Sharpshooter'
|
||||||
|
DefPerkStats(1)=(Progress=0.25)
|
||||||
|
DefPerkStats(19)=(bHiddenConfig=false)
|
||||||
|
|
||||||
PrimaryMelee=class'KFWeap_Knife_Sharpshooter'
|
PrimaryMelee=class'KFWeap_Knife_Sharpshooter'
|
||||||
PrimaryWeapon=class'KFWeap_Rifle_Winchester1894'
|
PrimaryWeapon=class'KFWeap_Rifle_Winchester1894'
|
||||||
|
@ -2,8 +2,26 @@ Class Ext_TraitMedicPistol extends Ext_TraitBase;
|
|||||||
|
|
||||||
static function AddDefaultInventory( KFPawn Player, Ext_PerkBase Perk, byte Level, optional Ext_TraitDataStore Data )
|
static function AddDefaultInventory( KFPawn Player, Ext_PerkBase Perk, byte Level, optional Ext_TraitDataStore Data )
|
||||||
{
|
{
|
||||||
Player.DefaultInventory.RemoveItem(class'ExtWeap_Pistol_9mm');
|
local int i;
|
||||||
Player.DefaultInventory.AddItem(class'ExtWeap_Pistol_MedicS');
|
i = Player.DefaultInventory.Find(class'ExtWeap_Pistol_9mm');
|
||||||
|
if(i != -1)
|
||||||
|
Player.DefaultInventory[i] = class'ExtWeap_Pistol_MedicS';
|
||||||
|
}
|
||||||
|
|
||||||
|
static function ApplyEffectOn( KFPawn_Human Player, Ext_PerkBase Perk, byte Level, optional Ext_TraitDataStore Data )
|
||||||
|
{
|
||||||
|
local Inventory Inv;
|
||||||
|
|
||||||
|
Inv = Player.FindInventoryType(class'ExtWeap_Pistol_9mm');
|
||||||
|
if( Inv!=None )
|
||||||
|
Inv.Destroy();
|
||||||
|
|
||||||
|
if( Player.FindInventoryType(class'ExtWeap_Pistol_MedicS')==None )
|
||||||
|
{
|
||||||
|
Inv = Player.CreateInventory(class'ExtWeap_Pistol_MedicS',Player.Weapon!=None);
|
||||||
|
if ( KFWeapon(Inv)!=None )
|
||||||
|
KFWeapon(Inv).bGivenAtStart = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
|
@ -5,7 +5,7 @@ var KFGUI_NumericBox StatCountBox;
|
|||||||
var KFGUI_Button AddButton;
|
var KFGUI_Button AddButton;
|
||||||
|
|
||||||
var Ext_PerkBase MyPerk;
|
var Ext_PerkBase MyPerk;
|
||||||
var int StatIndex,OldValue,CurrentCost;
|
var int StatIndex,OldValue,CurrentCost,MaxStatValue;
|
||||||
var string ProgressStr;
|
var string ProgressStr;
|
||||||
var bool bCostDirty;
|
var bool bCostDirty;
|
||||||
|
|
||||||
@ -42,7 +42,10 @@ function Timer()
|
|||||||
{
|
{
|
||||||
bCostDirty = false;
|
bCostDirty = false;
|
||||||
OldValue = MyPerk.PerkStats[StatIndex].CurrentValue;
|
OldValue = MyPerk.PerkStats[StatIndex].CurrentValue;
|
||||||
InfoText.SetText(MyPerk.GetStatUIStr(StatIndex)$" ["$OldValue$", Cost "$CurrentCost$", "$ProgressStr$"%]:");
|
if(CurrentCost != 0)
|
||||||
|
InfoText.SetText(MyPerk.GetStatUIStr(StatIndex)$" ["$OldValue$"/"$MaxStatValue$", Cost "$CurrentCost$", "$ProgressStr$"%]:");
|
||||||
|
else
|
||||||
|
InfoText.SetText(MyPerk.GetStatUIStr(StatIndex)$" ["$OldValue$"/"$MaxStatValue$", "$ProgressStr$"%]:");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function BuyStatPoint( KFGUI_Button Sender )
|
function BuyStatPoint( KFGUI_Button Sender )
|
||||||
@ -51,8 +54,13 @@ function BuyStatPoint( KFGUI_Button Sender )
|
|||||||
}
|
}
|
||||||
function EditBoxChange( KFGUI_EditBox Sender )
|
function EditBoxChange( KFGUI_EditBox Sender )
|
||||||
{
|
{
|
||||||
CurrentCost = StatCountBox.GetValueInt()*MyPerk.PerkStats[StatIndex].CostPerValue;
|
if(MyPerk.PerkStats[StatIndex].CostPerValue > 1)
|
||||||
|
CurrentCost = StatCountBox.GetValueInt()*MyPerk.PerkStats[StatIndex].CostPerValue;
|
||||||
|
else
|
||||||
|
CurrentCost = 0;
|
||||||
|
MaxStatValue = MyPerk.PerkStats[StatIndex].MaxValue;
|
||||||
ProgressStr = ChopExtraDigits(MyPerk.PerkStats[StatIndex].Progress * StatCountBox.GetValueInt());
|
ProgressStr = ChopExtraDigits(MyPerk.PerkStats[StatIndex].Progress * StatCountBox.GetValueInt());
|
||||||
|
MaxStatValue = MyPerk.PerkStats[StatIndex].MaxValue;
|
||||||
bCostDirty = true;
|
bCostDirty = true;
|
||||||
Timer();
|
Timer();
|
||||||
}
|
}
|
||||||
@ -68,8 +76,12 @@ final function CheckBuyLimit()
|
|||||||
|
|
||||||
// Make the value clamped.
|
// Make the value clamped.
|
||||||
StatCountBox.ChangeValue(StatCountBox.Value);
|
StatCountBox.ChangeValue(StatCountBox.Value);
|
||||||
CurrentCost = StatCountBox.GetValueInt()*MyPerk.PerkStats[StatIndex].CostPerValue;
|
if(MyPerk.PerkStats[StatIndex].CostPerValue > 1)
|
||||||
|
CurrentCost = StatCountBox.GetValueInt()*MyPerk.PerkStats[StatIndex].CostPerValue;
|
||||||
|
else
|
||||||
|
CurrentCost = 0;
|
||||||
ProgressStr = ChopExtraDigits(MyPerk.PerkStats[StatIndex].Progress * StatCountBox.GetValueInt());
|
ProgressStr = ChopExtraDigits(MyPerk.PerkStats[StatIndex].Progress * StatCountBox.GetValueInt());
|
||||||
|
MaxStatValue = MyPerk.PerkStats[StatIndex].MaxValue;
|
||||||
|
|
||||||
// Disable button if can not buy anymore.
|
// Disable button if can not buy anymore.
|
||||||
AddButton.SetDisabled(i==0);
|
AddButton.SetDisabled(i==0);
|
||||||
|
@ -3,11 +3,11 @@ Class UI_MidGameMenu extends KFGUI_FloatingWindow;
|
|||||||
var KFGUI_SwitchMenuBar PageSwitcher;
|
var KFGUI_SwitchMenuBar PageSwitcher;
|
||||||
var array< class<KFGUI_Base> > Pages;
|
var array< class<KFGUI_Base> > Pages;
|
||||||
|
|
||||||
var KFGUI_Button AdminButton,SpectateButton;
|
var KFGUI_Button AdminButton,SpectateButton,SkipTraderButton;
|
||||||
|
|
||||||
var transient KFGUI_Button PrevButton;
|
var transient KFGUI_Button PrevButton;
|
||||||
var transient int NumButtons,NumButtonRows;
|
var transient int NumButtons,NumButtonRows;
|
||||||
var transient bool bInitSpectate,bOldSpectate;
|
var transient bool bInitSpectate,bOldSpectate,bInitSkipTrader;
|
||||||
|
|
||||||
function InitMenu()
|
function InitMenu()
|
||||||
{
|
{
|
||||||
@ -20,10 +20,11 @@ function InitMenu()
|
|||||||
// TODO: localize
|
// TODO: localize
|
||||||
AddMenuButton('Mapvote',"Map Vote","Show mapvote menu");
|
AddMenuButton('Mapvote',"Map Vote","Show mapvote menu");
|
||||||
AddMenuButton('Settings',"Settings","Enter the game settings");
|
AddMenuButton('Settings',"Settings","Enter the game settings");
|
||||||
AddMenuButton('Disconnect',"Disconnect","Disconnect from this server");
|
SkipTraderButton = AddMenuButton('SkipTrader',"Skip Trader","start voting for skip trader");
|
||||||
SpectateButton = AddMenuButton('Spectate',"","");
|
SpectateButton = AddMenuButton('Spectate',"","");
|
||||||
AddMenuButton('Close',"Close","Close this menu");
|
AddMenuButton('Close',"Close","Close this menu");
|
||||||
//AddMenuButton('Exit',"Exit","Exit this game");
|
AddMenuButton('Disconnect',"Disconnect","Disconnect from this server");
|
||||||
|
AddMenuButton('Exit',"Exit","Exit this game");
|
||||||
|
|
||||||
for( i=0; i<Pages.Length; ++i )
|
for( i=0; i<Pages.Length; ++i )
|
||||||
{
|
{
|
||||||
@ -41,6 +42,7 @@ function Timer()
|
|||||||
if( PRI==None )
|
if( PRI==None )
|
||||||
return;
|
return;
|
||||||
AdminButton.SetDisabled(!PRI.bAdmin && PRI.WorldInfo.NetMode==NM_Client);
|
AdminButton.SetDisabled(!PRI.bAdmin && PRI.WorldInfo.NetMode==NM_Client);
|
||||||
|
SkipTraderButton.SetDisabled(!SkipTraderIsAviable(PRI));
|
||||||
if( !bInitSpectate || bOldSpectate!=PRI.bOnlySpectator )
|
if( !bInitSpectate || bOldSpectate!=PRI.bOnlySpectator )
|
||||||
{
|
{
|
||||||
bInitSpectate = true;
|
bInitSpectate = true;
|
||||||
@ -50,10 +52,32 @@ function Timer()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function bool SkipTraderIsAviable(PlayerReplicationInfo PRI)
|
||||||
|
{
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
local KFPlayerReplicationInfo KFPRI;
|
||||||
|
|
||||||
|
KFPRI = KFPlayerReplicationInfo(PRI);
|
||||||
|
if (KFPRI == none)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
KFGRI = KFGameReplicationInfo(KFPRI.WorldInfo.GRI);
|
||||||
|
if (KFGRI.bMatchHasBegun && KFGRI.bTraderIsOpen && KFPRI.bHasSpawnedIn)
|
||||||
|
{
|
||||||
|
return !bInitSkipTrader;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bInitSkipTrader=false;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function ShowMenu()
|
function ShowMenu()
|
||||||
{
|
{
|
||||||
Super.ShowMenu();
|
Super.ShowMenu();
|
||||||
AdminButton.SetDisabled(true);
|
AdminButton.SetDisabled(true);
|
||||||
|
SkipTraderButton.SetDisabled(false);
|
||||||
if( GetPlayer().WorldInfo.GRI!=None )
|
if( GetPlayer().WorldInfo.GRI!=None )
|
||||||
WindowTitle = GetPlayer().WorldInfo.GRI.ServerName;
|
WindowTitle = GetPlayer().WorldInfo.GRI.ServerName;
|
||||||
//KFGFxHudWrapper(GetPlayer().MyHUD).SetVisible(false);
|
//KFGFxHudWrapper(GetPlayer().MyHUD).SetVisible(false);
|
||||||
@ -91,6 +115,11 @@ function ButtonClicked( KFGUI_Button Sender )
|
|||||||
ExtPlayerController(GetPlayer()).ChangeSpectateMode(!bOldSpectate);
|
ExtPlayerController(GetPlayer()).ChangeSpectateMode(!bOldSpectate);
|
||||||
DoClose();
|
DoClose();
|
||||||
break;
|
break;
|
||||||
|
case 'SkipTrader':
|
||||||
|
KFPlayerController(GetPlayer()).RequestSkipTrader();
|
||||||
|
bInitSkipTrader=true;
|
||||||
|
SkipTraderButton.SetDisabled(true);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final function OpenUpMapvote()
|
final function OpenUpMapvote()
|
||||||
@ -143,6 +172,7 @@ defaultproperties
|
|||||||
Pages.Add(Class'UIP_AdminMenu')
|
Pages.Add(Class'UIP_AdminMenu')
|
||||||
Pages.Add(Class'UIP_About')
|
Pages.Add(Class'UIP_About')
|
||||||
Pages.Add(Class'UIP_MiniGame')
|
Pages.Add(Class'UIP_MiniGame')
|
||||||
|
bInitSkipTrader=false
|
||||||
|
|
||||||
Begin Object Class=KFGUI_SwitchMenuBar Name=MultiPager
|
Begin Object Class=KFGUI_SwitchMenuBar Name=MultiPager
|
||||||
ID="Pager"
|
ID="Pager"
|
||||||
|
@ -10,6 +10,14 @@ struct FInventory
|
|||||||
var class<Inventory> ItemClass;
|
var class<Inventory> ItemClass;
|
||||||
var int Values[4];
|
var int Values[4];
|
||||||
};
|
};
|
||||||
|
struct CFGCustomZedXP
|
||||||
|
{
|
||||||
|
var string zed; // zed name
|
||||||
|
var float XP1; // normal
|
||||||
|
var float XP2; // hard
|
||||||
|
var float XP3; // suicidal
|
||||||
|
var float XP4; // hoe
|
||||||
|
};
|
||||||
struct FSavedInvEntry
|
struct FSavedInvEntry
|
||||||
{
|
{
|
||||||
var Controller OwnerPlayer;
|
var Controller OwnerPlayer;
|
||||||
@ -19,6 +27,7 @@ struct FSavedInvEntry
|
|||||||
var array<FSavedInvEntry> PlayerInv;
|
var array<FSavedInvEntry> PlayerInv;
|
||||||
|
|
||||||
var config array<string> PerkClasses,CustomChars,AdminCommands,CustomItems,BonusGameSongs,BonusGameFX;
|
var config array<string> PerkClasses,CustomChars,AdminCommands,CustomItems,BonusGameSongs,BonusGameFX;
|
||||||
|
var config array<CFGCustomZedXP> CustomZedXP;
|
||||||
var array< class<Ext_PerkBase> > LoadedPerks;
|
var array< class<Ext_PerkBase> > LoadedPerks;
|
||||||
var array<FCustomCharEntry> CustomCharList;
|
var array<FCustomCharEntry> CustomCharList;
|
||||||
var ExtPlayerStat ServerStatLoader;
|
var ExtPlayerStat ServerStatLoader;
|
||||||
@ -55,6 +64,14 @@ var config bool bDontUseOriginalWeaponry;
|
|||||||
var config bool bAllowStandartPistolUpgrade;
|
var config bool bAllowStandartPistolUpgrade;
|
||||||
var config bool bDisableCustomTrader;
|
var config bool bDisableCustomTrader;
|
||||||
|
|
||||||
|
//Custom XP lightly array
|
||||||
|
struct CustomZedXPStruct
|
||||||
|
{
|
||||||
|
var class<KFPawn_Monster> zedclass;
|
||||||
|
var float XPValues[4];
|
||||||
|
};
|
||||||
|
var array<CustomZedXPStruct> CustomZedXPArray;
|
||||||
|
|
||||||
function PostBeginPlay()
|
function PostBeginPlay()
|
||||||
{
|
{
|
||||||
local xVotingHandler MV;
|
local xVotingHandler MV;
|
||||||
@ -66,7 +83,6 @@ function PostBeginPlay()
|
|||||||
local Object O;
|
local Object O;
|
||||||
local string S;
|
local string S;
|
||||||
local bool bLock;
|
local bool bLock;
|
||||||
local KFPickupFactory_Item ItemFactory;
|
|
||||||
|
|
||||||
Super.PostBeginPlay();
|
Super.PostBeginPlay();
|
||||||
if( WorldInfo.Game.BaseMutator==None )
|
if( WorldInfo.Game.BaseMutator==None )
|
||||||
@ -243,21 +259,53 @@ function PostBeginPlay()
|
|||||||
if( bDumpXMLStats )
|
if( bDumpXMLStats )
|
||||||
FileOutput = Spawn(class'ExtXMLOutput');
|
FileOutput = Spawn(class'ExtXMLOutput');
|
||||||
|
|
||||||
// Disable 9mm and medpistol in all PickupFactories
|
UpdateCustomZedXPArray();
|
||||||
foreach AllActors(class'KFPickupFactory_Item', ItemFactory)
|
// Causes bugs
|
||||||
|
// SetTimer(0.1,'CheckPickupFactories')
|
||||||
|
}
|
||||||
|
|
||||||
|
function UpdateCustomZedXPArray()
|
||||||
|
{
|
||||||
|
local int i;
|
||||||
|
local CustomZedXPStruct zedxp;
|
||||||
|
CustomZedXPArray.Length = 0;
|
||||||
|
// Custom XP for custom zeds
|
||||||
|
for(i=0;i<CustomZedXP.Length;i++)
|
||||||
{
|
{
|
||||||
for(i=0;i<ItemFactory.ItemPickups.Length;i++)
|
zedxp.zedclass = class<KFPawn_Monster>(DynamicLoadObject(CustomZedXP[i].zed,Class'Class'));
|
||||||
|
if(zedxp.zedclass == none)
|
||||||
{
|
{
|
||||||
if(ItemFactory.ItemPickups[i].ItemClass == class'KFGameContent.KFWeap_Pistol_9mm'
|
`log("Error loading"@CustomZedXP[i].zed);
|
||||||
|| ItemFactory.ItemPickups[i].ItemClass == class'KFGameContent.KFWeap_Pistol_Medic')
|
continue;
|
||||||
{
|
|
||||||
ItemFactory.ItemPickups.Remove(i, 1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
zedxp.XPValues[0] = CustomZedXP[i].XP1;
|
||||||
|
zedxp.XPValues[1] = CustomZedXP[i].XP2;
|
||||||
|
zedxp.XPValues[2] = CustomZedXP[i].XP3;
|
||||||
|
zedxp.XPValues[3] = CustomZedXP[i].XP4;
|
||||||
|
CustomZedXPArray.AddItem(zedxp);
|
||||||
|
`log("CustomXP: Loaded"@PathName(zedxp.zedclass));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// function CheckPickupFactories()
|
||||||
|
// {
|
||||||
|
// local KFPickupFactory_Item ItemFactory;
|
||||||
|
|
||||||
|
// // Disable 9mm and medpistol in all PickupFactories
|
||||||
|
// foreach AllActors(class'KFPickupFactory_Item', ItemFactory)
|
||||||
|
// {
|
||||||
|
// for(i=0;i<ItemFactory.ItemPickups.Length;i++)
|
||||||
|
// {
|
||||||
|
// if(ItemFactory.ItemPickups[i].ItemClass == class'KFGameContent.KFWeap_Pistol_9mm'
|
||||||
|
// || ItemFactory.ItemPickups[i].ItemClass == class'KFGameContent.KFWeap_Pistol_Medic')
|
||||||
|
// {
|
||||||
|
// ItemFactory.ItemPickups.Remove(i, 1);
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
function EditTraiderItems()
|
function EditTraiderItems()
|
||||||
{
|
{
|
||||||
local int i;
|
local int i;
|
||||||
@ -266,7 +314,6 @@ function EditTraiderItems()
|
|||||||
// local STraderItem SI;
|
// local STraderItem SI;
|
||||||
// var config bool bDLCWeaponsForFree;
|
// var config bool bDLCWeaponsForFree;
|
||||||
// var config bool bDontUseOriginalWeaponry;
|
// var config bool bDontUseOriginalWeaponry;
|
||||||
|
|
||||||
if(!bDontUseOriginalWeaponry)
|
if(!bDontUseOriginalWeaponry)
|
||||||
{
|
{
|
||||||
Trad = KFGameReplicationInfo(WorldInfo.GRI).TraderItems;
|
Trad = KFGameReplicationInfo(WorldInfo.GRI).TraderItems;
|
||||||
@ -418,6 +465,7 @@ function CheckWave()
|
|||||||
function NotifyWaveChange()
|
function NotifyWaveChange()
|
||||||
{
|
{
|
||||||
local ExtPlayerController ExtPC;
|
local ExtPlayerController ExtPC;
|
||||||
|
local KFProj_RicochetStickBullet KFBolt;
|
||||||
|
|
||||||
if( bRespawnCheck )
|
if( bRespawnCheck )
|
||||||
{
|
{
|
||||||
@ -437,6 +485,13 @@ function NotifyWaveChange()
|
|||||||
foreach WorldInfo.AllControllers(class'ExtPlayerController',ExtPC)
|
foreach WorldInfo.AllControllers(class'ExtPlayerController',ExtPC)
|
||||||
ExtPC.bSetPerk = false;
|
ExtPC.bSetPerk = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach WorldInfo.AllActors(class'KFProj_RicochetStickBullet', KFBolt)
|
||||||
|
{
|
||||||
|
if(KFProj_Bolt_CompoundBowSharp(KFBolt) != none ||
|
||||||
|
KFProj_Bolt_Crossbow(KFBolt) != none)
|
||||||
|
KFBolt.Destroy();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
function SetupWebAdmin()
|
function SetupWebAdmin()
|
||||||
{
|
{
|
||||||
@ -551,14 +606,28 @@ function ScoreKill(Controller Killer, Controller Killed)
|
|||||||
KFPC = KFPlayerController(DamagerKFPRI.Owner);
|
KFPC = KFPlayerController(DamagerKFPRI.Owner);
|
||||||
if( KFPC != none )
|
if( KFPC != none )
|
||||||
{
|
{
|
||||||
|
`log("ScoreKill:"@PathName(KFM));
|
||||||
|
|
||||||
|
XP = 0;
|
||||||
|
for(j=0;j<CustomZedXPArray.Length;j++)
|
||||||
|
{
|
||||||
|
if(KFM.Class == CustomZedXPArray[j].zedclass)
|
||||||
|
{
|
||||||
|
XP = CustomZedXPArray[j].XPValues[MyKFGI.GameDifficulty];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(XP == 0)
|
||||||
|
XP = KFM.static.GetXPValue(MyKFGI.GameDifficulty);
|
||||||
|
|
||||||
InstigatorPerk = KFPC.GetPerk();
|
InstigatorPerk = KFPC.GetPerk();
|
||||||
if( InstigatorPerk.ShouldGetAllTheXP() )
|
if( InstigatorPerk.ShouldGetAllTheXP() )
|
||||||
{
|
{
|
||||||
KFPC.OnPlayerXPAdded(KFM.static.GetXPValue(MyKFGI.GameDifficulty), InstigatorPerk.Class);
|
KFPC.OnPlayerXPAdded(XP, InstigatorPerk.Class);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
XP = KFM.static.GetXPValue(MyKFGI.GameDifficulty) / KFM.DamageHistory[i].DamagePerks.Length;
|
XP /= KFM.DamageHistory[i].DamagePerks.Length;
|
||||||
|
|
||||||
for( j = 0; j < KFM.DamageHistory[i].DamagePerks.Length; j++ )
|
for( j = 0; j < KFM.DamageHistory[i].DamagePerks.Length; j++ )
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user