Merge pull request 'Menus overhaul' (#14) from NikC-/NicePack:somechanges into master
Reviewed-on: https://insultplayers.ru/git/dkanus/NicePack/pulls/14
This commit is contained in:
commit
140a70513d
@ -6,6 +6,44 @@ All notable changes to this project will be documented in this file.
|
|||||||
List of changes for version 0.2.0 may be incomplete.
|
List of changes for version 0.2.0 may be incomplete.
|
||||||
Weapon and perk changes are described relative to ScrN versions.
|
Weapon and perk changes are described relative to ScrN versions.
|
||||||
|
|
||||||
|
## [Update 404] - 00.00.2022
|
||||||
|
|
||||||
|
### General
|
||||||
|
|
||||||
|
- NicePakc bundle is now in 7z.
|
||||||
|
- Code break: `meanreplicationinfo` disabled.
|
||||||
|
- Less scrnbalance hardcode.
|
||||||
|
- TSC and all it's classes removed.
|
||||||
|
- README, changelog, file directory updates.
|
||||||
|
- HUGE amount of accessed none fixes.
|
||||||
|
- Tabs -> x4 spaces.
|
||||||
|
- All hardcoded classes / subobjects removed. Now Kaio can compile his fpp 😂
|
||||||
|
|
||||||
|
#### Zeds
|
||||||
|
|
||||||
|
- Disable all zed collisions on death. Now jumping crawlers, running gorefasts won't interupt your movement.
|
||||||
|
- Siren has faster iterator.
|
||||||
|
- Siren won't spawn emitter on death.
|
||||||
|
- Siren won't scream at low hp zeds, will try to melee instead.
|
||||||
|
- Husk doesn't shoot if headless, dying, falling, being moved by other husks.
|
||||||
|
- Husk ignores zeds that the he can't actually see.
|
||||||
|
- Husk's projectile won't detonate multiple times during slomo.
|
||||||
|
|
||||||
|
### GUI
|
||||||
|
|
||||||
|
- New lobby footer from base class. New fancy buttons!
|
||||||
|
- New lobby menu! Much cleaner and doesn't have ad square.
|
||||||
|
- Skill menu has new backgrounds.
|
||||||
|
- NiceGUISettings: New dropdown list to control Commando's zed health bars:
|
||||||
|
- All zeds.
|
||||||
|
- Only big zeds (>1000hp).
|
||||||
|
- Disabled.
|
||||||
|
|
||||||
|
### Weapons
|
||||||
|
|
||||||
|
- Fix for nade throwing if you hold non nice weapon.
|
||||||
|
- Machete pickup removed, axe spawns instead.
|
||||||
|
|
||||||
## [Update 008] - 14.01.2022
|
## [Update 008] - 14.01.2022
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
@ -4,7 +4,7 @@ This repo contains sources for the last public NicePack release.
|
|||||||
|
|
||||||
It is a haphazard bunch of changes that were made to customize ScrN for ourselves. It is unfinished, but due to some reasons I don't want to release it publicly anymore.
|
It is a haphazard bunch of changes that were made to customize ScrN for ourselves. It is unfinished, but due to some reasons I don't want to release it publicly anymore.
|
||||||
|
|
||||||
The link to the compiled NicePack, along with all necessary files, is here: <http://www.insultplayers.ru/killingfloor/downloads/nicepack/NiceBundle.zip>
|
The link to the compiled NicePack, along with all necessary files, is here: <http://www.insultplayers.ru/killingfloor/downloads/nicepack/NiceBundle.7z>
|
||||||
|
|
||||||
## Config Files
|
## Config Files
|
||||||
|
|
||||||
|
13
sources/GUI/NiceGUICheckBoxButton.uc
Normal file
13
sources/GUI/NiceGUICheckBoxButton.uc
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
class NiceGUICheckBoxButton extends GUICheckBoxButton;
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
CheckedOverlay(0)=Texture'KF_InterfaceArt_tex.Menu.Checkbox' // checked
|
||||||
|
CheckedOverlay(1)=Texture'KF_InterfaceArt_tex.Menu.checkbox_highlight' // checked, mouse over
|
||||||
|
CheckedOverlay(2)=Texture'KF_InterfaceArt_tex.Menu.checkbox_highlight' // checked, focused
|
||||||
|
CheckedOverlay(3)=Texture'KF_InterfaceArt_tex.Menu.checkbox_dark' // checked, clicked
|
||||||
|
CheckedOverlay(4)=Texture'KF_InterfaceArt_tex.Menu.checkbox_dark' // checked, disabled
|
||||||
|
ImageIndex=0
|
||||||
|
bAllOverlay=False
|
||||||
|
StyleName="CheckBox"
|
||||||
|
}
|
@ -1,27 +1,61 @@
|
|||||||
class NiceGUISettings extends Settings_Tabs;
|
class NiceGUISettings extends UT2K4TabPanel;
|
||||||
//var automated GUIButton skillButtonA;
|
|
||||||
var array<string> ForceProjItems;
|
// GENERAL WEAPON SETTINGS
|
||||||
|
var automated GUISectionBackground bg_WEAP;
|
||||||
var automated moCheckBox ch_WeapManagement;
|
var automated moCheckBox ch_WeapManagement;
|
||||||
var automated moCheckBox ch_AltSwitches;
|
var automated moCheckBox ch_AltSwitches;
|
||||||
var automated moCheckBox ch_DispCounters;
|
var automated moCheckBox ch_DispCounters;
|
||||||
var automated moCheckBox ch_DisWeapProgress;
|
var automated moCheckBox ch_DisWeapProgress;
|
||||||
var automated moCheckBox ch_ShowHLMessages;
|
var automated moCheckBox ch_ShowHLMessages;
|
||||||
|
|
||||||
|
// WEAPON RELOAD SETTINGS
|
||||||
|
var automated GUISectionBackground bg_RELOAD;
|
||||||
var automated moCheckBox ch_CancelFire;
|
var automated moCheckBox ch_CancelFire;
|
||||||
var automated moCheckBox ch_CancelSwitching;
|
var automated moCheckBox ch_CancelSwitching;
|
||||||
var automated moCheckBox ch_CancelNades;
|
var automated moCheckBox ch_CancelNades;
|
||||||
var automated moCheckBox ch_CancelAiming;
|
var automated moCheckBox ch_CancelAiming;
|
||||||
var automated moCheckBox ch_ReloadWontWork;
|
var automated moCheckBox ch_ReloadWontWork;
|
||||||
var automated GUISectionBackground bg_WEAP;
|
|
||||||
var automated GUISectionBackground bg_RELOAD;
|
// RANDOM SETTINGS
|
||||||
function InitComponent(GUIController MyController, GUIComponent MyOwner){
|
var automated GUISectionBackground bg_RANDOM;
|
||||||
|
var automated MoComboBox mo_ZedHPBars;
|
||||||
|
|
||||||
|
function InitComponent(GUIController MyController, GUIComponent MyOwner)
|
||||||
|
{
|
||||||
super.InitComponent(MyController, MyOwner);
|
super.InitComponent(MyController, MyOwner);
|
||||||
|
|
||||||
|
mo_ZedHPBars.AddItem("Big Zeds");
|
||||||
|
mo_ZedHPBars.AddItem("All Zeds");
|
||||||
|
mo_ZedHPBars.AddItem("Disable");
|
||||||
|
|
||||||
|
// GENERAL WEAPON SETTINGS
|
||||||
|
bg_WEAP.ManageComponent(ch_WeapManagement);
|
||||||
|
bg_WEAP.ManageComponent(ch_AltSwitches);
|
||||||
|
bg_WEAP.ManageComponent(ch_DispCounters);
|
||||||
|
bg_WEAP.ManageComponent(ch_DisWeapProgress);
|
||||||
|
bg_WEAP.ManageComponent(ch_ShowHLMessages);
|
||||||
|
|
||||||
|
// WEAPON RELOAD SETTINGS
|
||||||
|
bg_RELOAD.ManageComponent(ch_CancelFire);
|
||||||
|
bg_RELOAD.ManageComponent(ch_CancelSwitching);
|
||||||
|
bg_RELOAD.ManageComponent(ch_CancelNades);
|
||||||
|
bg_RELOAD.ManageComponent(ch_CancelAiming);
|
||||||
|
bg_RELOAD.ManageComponent(ch_ReloadWontWork);
|
||||||
|
|
||||||
|
// RANDOM SETTINGS
|
||||||
|
bg_RANDOM.ManageComponent(mo_ZedHPBars);
|
||||||
}
|
}
|
||||||
function InternalOnLoadINI(GUIComponent sender, string s){
|
|
||||||
|
function InternalOnLoadINI(GUIComponent sender, string s)
|
||||||
|
{
|
||||||
local NicePlayerController nicePlayer;
|
local NicePlayerController nicePlayer;
|
||||||
|
|
||||||
nicePlayer = NicePlayerController(PlayerOwner());
|
nicePlayer = NicePlayerController(PlayerOwner());
|
||||||
if (nicePlayer == none)
|
if (nicePlayer == none)
|
||||||
return;
|
return;
|
||||||
switch(sender){
|
|
||||||
|
switch(sender)
|
||||||
|
{
|
||||||
case ch_WeapManagement:
|
case ch_WeapManagement:
|
||||||
ch_WeapManagement.Checked(nicePlayer.bNiceWeaponManagement);
|
ch_WeapManagement.Checked(nicePlayer.bNiceWeaponManagement);
|
||||||
break;
|
break;
|
||||||
@ -52,15 +86,22 @@ function InternalOnLoadINI(GUIComponent sender, string s){
|
|||||||
case ch_ReloadWontWork:
|
case ch_ReloadWontWork:
|
||||||
ch_ReloadWontWork.Checked(nicePlayer.bFlagUseServerReload);
|
ch_ReloadWontWork.Checked(nicePlayer.bFlagUseServerReload);
|
||||||
break;
|
break;
|
||||||
|
case mo_ZedHPBars:
|
||||||
|
mo_ZedHPBars.SetIndex(nicePlayer.ZedHPBarStyle);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function InternalOnChange(GUIComponent Sender){
|
|
||||||
|
function InternalOnChange(GUIComponent Sender)
|
||||||
|
{
|
||||||
local NicePlayerController nicePlayer;
|
local NicePlayerController nicePlayer;
|
||||||
super.InternalOnChange(Sender);
|
|
||||||
nicePlayer = NicePlayerController(PlayerOwner());
|
nicePlayer = NicePlayerController(PlayerOwner());
|
||||||
if (nicePlayer == none)
|
if (nicePlayer == none)
|
||||||
return;
|
return;
|
||||||
switch(sender){
|
|
||||||
|
switch(sender)
|
||||||
|
{
|
||||||
case ch_WeapManagement:
|
case ch_WeapManagement:
|
||||||
nicePlayer.bNiceWeaponManagement = ch_WeapManagement.IsChecked();
|
nicePlayer.bNiceWeaponManagement = ch_WeapManagement.IsChecked();
|
||||||
break;
|
break;
|
||||||
@ -91,183 +132,85 @@ function InternalOnChange(GUIComponent Sender){
|
|||||||
case ch_ReloadWontWork:
|
case ch_ReloadWontWork:
|
||||||
nicePlayer.ServerSetUseServerReload(ch_ReloadWontWork.IsChecked());
|
nicePlayer.ServerSetUseServerReload(ch_ReloadWontWork.IsChecked());
|
||||||
break;
|
break;
|
||||||
|
case mo_ZedHPBars:
|
||||||
|
nicePlayer.ZedHPBarStyle = mo_ZedHPBars.GetIndex();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
nicePlayer.ClientSaveConfig();
|
nicePlayer.ClientSaveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
// size = (x=0.0125, y=0.0) ; (w=1.0, h=0.865)
|
// size = (x=0.0125, y=0.0) ; (w=1.0, h=0.865)
|
||||||
// tab order
|
// tab order
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
Begin Object Class=moCheckBox Name=WeaponManagement
|
// GENERAL WEAPON SETTINGS
|
||||||
CaptionWidth=0.955000
|
|
||||||
Caption="Nice weapon management"
|
|
||||||
ComponentClassName="ScrnBalanceSrv.ScrnGUICheckBoxButton"
|
|
||||||
OnCreateComponent=WeaponManagement.InternalOnCreateComponent
|
|
||||||
IniOption="@Internal"
|
|
||||||
Hint="If checked, NicePack will use it's own system to manage weapon switching"
|
|
||||||
WinTop=0.050000
|
|
||||||
WinLeft=0.012500
|
|
||||||
WinWidth=0.278000
|
|
||||||
TabOrder=4
|
|
||||||
OnChange=NiceGUISettings.InternalOnChange
|
|
||||||
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
|
||||||
End Object
|
|
||||||
ch_WeapManagement=WeaponManagement
|
|
||||||
|
|
||||||
Begin Object Class=moCheckBox Name=AltSwitches
|
|
||||||
CaptionWidth=0.955000
|
|
||||||
Caption="Alt fire switches modes"
|
|
||||||
ComponentClassName="ScrnBalanceSrv.ScrnGUICheckBoxButton"
|
|
||||||
OnCreateComponent=AltSwitches.InternalOnCreateComponent
|
|
||||||
IniOption="@Internal"
|
|
||||||
Hint="Assault-rifle only; if enabled - alt fire button switches between fire modes, otherwise - acts as an alt fire"
|
|
||||||
WinTop=0.100000
|
|
||||||
WinLeft=0.012500
|
|
||||||
WinWidth=0.278000
|
|
||||||
TabOrder=6
|
|
||||||
OnChange=NiceGUISettings.InternalOnChange
|
|
||||||
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
|
||||||
End Object
|
|
||||||
ch_AltSwitches=AltSwitches
|
|
||||||
|
|
||||||
Begin Object Class=moCheckBox Name=DispCounters
|
|
||||||
CaptionWidth=0.955000
|
|
||||||
Caption="Display counters"
|
|
||||||
ComponentClassName="ScrnBalanceSrv.ScrnGUICheckBoxButton"
|
|
||||||
OnCreateComponent=DispCounters.InternalOnCreateComponent
|
|
||||||
IniOption="@Internal"
|
|
||||||
Hint="Toggles display of the various counters used by skills"
|
|
||||||
WinTop=0.150000
|
|
||||||
WinLeft=0.012500
|
|
||||||
WinWidth=0.278000
|
|
||||||
TabOrder=7
|
|
||||||
OnChange=NiceGUISettings.InternalOnChange
|
|
||||||
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
|
||||||
End Object
|
|
||||||
ch_DispCounters=DispCounters
|
|
||||||
|
|
||||||
Begin Object Class=moCheckBox Name=DispWeapProgress
|
|
||||||
CaptionWidth=0.955000
|
|
||||||
Caption="Display weapon progress"
|
|
||||||
ComponentClassName="ScrnBalanceSrv.ScrnGUICheckBoxButton"
|
|
||||||
OnCreateComponent=DispWeapProgress.InternalOnCreateComponent
|
|
||||||
IniOption="@Internal"
|
|
||||||
Hint="Displays weapon progress rate, however it's defined by a skill that's using this functionality"
|
|
||||||
WinTop=0.200000
|
|
||||||
WinLeft=0.012500
|
|
||||||
WinWidth=0.278000
|
|
||||||
TabOrder=8
|
|
||||||
OnChange=NiceGUISettings.InternalOnChange
|
|
||||||
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
|
||||||
End Object
|
|
||||||
ch_DisWeapProgress=DispWeapProgress
|
|
||||||
|
|
||||||
Begin Object Class=moCheckBox Name=ShowHLMessages
|
|
||||||
CaptionWidth=0.955000
|
|
||||||
Caption="Show Hardcore Level messages"
|
|
||||||
ComponentClassName="ScrnBalanceSrv.ScrnGUICheckBoxButton"
|
|
||||||
OnCreateComponent=ShowHLMessages.InternalOnCreateComponent
|
|
||||||
IniOption="@Internal"
|
|
||||||
Hint="Enable to be notified each time Hardcore Level is changed"
|
|
||||||
WinTop=0.300000
|
|
||||||
WinLeft=0.012500
|
|
||||||
WinWidth=0.278000
|
|
||||||
TabOrder=9
|
|
||||||
OnChange=NiceGUISettings.InternalOnChange
|
|
||||||
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
|
||||||
End Object
|
|
||||||
ch_ShowHLMessages=ShowHLMessages
|
|
||||||
|
|
||||||
Begin Object Class=moCheckBox Name=CancelFire
|
|
||||||
CaptionWidth=0.955000
|
|
||||||
Caption="Cancel reload by shooting"
|
|
||||||
ComponentClassName="ScrnBalanceSrv.ScrnGUICheckBoxButton"
|
|
||||||
OnCreateComponent=CancelFire.InternalOnCreateComponent
|
|
||||||
IniOption="@Internal"
|
|
||||||
Hint="If checked, you'll be able to cancel reload of converted weapons by shooting (when you have ammo)"
|
|
||||||
WinTop=0.050000
|
|
||||||
WinLeft=0.517500
|
|
||||||
WinWidth=0.287000
|
|
||||||
TabOrder=11
|
|
||||||
OnChange=NiceGUISettings.InternalOnChange
|
|
||||||
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
|
||||||
End Object
|
|
||||||
ch_CancelFire=CancelFire
|
|
||||||
|
|
||||||
Begin Object Class=moCheckBox Name=CancelSwitching
|
|
||||||
CaptionWidth=0.955000
|
|
||||||
Caption="Cancel reload by switching weapons"
|
|
||||||
ComponentClassName="ScrnBalanceSrv.ScrnGUICheckBoxButton"
|
|
||||||
OnCreateComponent=CancelSwitching.InternalOnCreateComponent
|
|
||||||
IniOption="@Internal"
|
|
||||||
Hint="If checked, you'll be able to cancel reload of converted weapons by switching to different weapon"
|
|
||||||
WinTop=0.100000
|
|
||||||
WinLeft=0.517500
|
|
||||||
WinWidth=0.287000
|
|
||||||
TabOrder=12
|
|
||||||
OnChange=NiceGUISettings.InternalOnChange
|
|
||||||
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
|
||||||
End Object
|
|
||||||
ch_CancelSwitching=CancelSwitching
|
|
||||||
|
|
||||||
Begin Object Class=moCheckBox Name=CancelNades
|
|
||||||
CaptionWidth=0.955000
|
|
||||||
Caption="Cancel reload by throwing grenades"
|
|
||||||
ComponentClassName="ScrnBalanceSrv.ScrnGUICheckBoxButton"
|
|
||||||
OnCreateComponent=CancelNades.InternalOnCreateComponent
|
|
||||||
IniOption="@Internal"
|
|
||||||
Hint="If checked, you'll be able to cancel reload of converted weapons by throwing a grenade"
|
|
||||||
WinTop=0.150000
|
|
||||||
WinLeft=0.517500
|
|
||||||
WinWidth=0.287000
|
|
||||||
TabOrder=13
|
|
||||||
OnChange=NiceGUISettings.InternalOnChange
|
|
||||||
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
|
||||||
End Object
|
|
||||||
ch_CancelNades=CancelNades
|
|
||||||
|
|
||||||
Begin Object Class=moCheckBox Name=CancelAiming
|
|
||||||
CaptionWidth=0.955000
|
|
||||||
Caption="Cancel reload by aiming"
|
|
||||||
ComponentClassName="ScrnBalanceSrv.ScrnGUICheckBoxButton"
|
|
||||||
OnCreateComponent=CancelAiming.InternalOnCreateComponent
|
|
||||||
IniOption="@Internal"
|
|
||||||
Hint="If checked, you'll be able to cancel reload of converted weapons by going into iron sights (when you have ammo)"
|
|
||||||
WinTop=0.200000
|
|
||||||
WinLeft=0.517500
|
|
||||||
WinWidth=0.287000
|
|
||||||
TabOrder=14
|
|
||||||
OnChange=NiceGUISettings.InternalOnChange
|
|
||||||
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
|
||||||
End Object
|
|
||||||
ch_CancelAiming=CancelAiming
|
|
||||||
|
|
||||||
Begin Object Class=moCheckBox Name=ServerReload
|
|
||||||
CaptionWidth=0.955000
|
|
||||||
Caption="My reload doesn't work"
|
|
||||||
ComponentClassName="ScrnBalanceSrv.ScrnGUICheckBoxButton"
|
|
||||||
OnCreateComponent=ServerReload.InternalOnCreateComponent
|
|
||||||
IniOption="@Internal"
|
|
||||||
Hint="Check this option ONLY in case converted weapons don't reload at all for you; this option should fix the problem, but then latency will affect both reload and active reload"
|
|
||||||
WinTop=0.250000
|
|
||||||
WinLeft=0.517500
|
|
||||||
WinWidth=0.287000
|
|
||||||
TabOrder=15
|
|
||||||
OnChange=NiceGUISettings.InternalOnChange
|
|
||||||
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
|
||||||
End Object
|
|
||||||
ch_ReloadWontWork=ServerReload
|
|
||||||
|
|
||||||
Begin Object Class=GUISectionBackground Name=WEAPBG
|
Begin Object Class=GUISectionBackground Name=WEAPBG
|
||||||
Caption="General weapon settings"
|
Caption="General weapon settings"
|
||||||
WinTop=0.012500
|
WinTop=0.012500
|
||||||
WinWidth=0.495000
|
WinWidth=0.495000
|
||||||
WinHeight=0.287500
|
WinHeight=0.287500
|
||||||
RenderWeight=0.100100
|
RenderWeight=0.100100
|
||||||
OnPreDraw=WeaponsBG.InternalPreDraw
|
// OnPreDraw=WeaponsBG.InternalPreDraw
|
||||||
|
OnPreDraw=WEAPBG.InternalPreDraw
|
||||||
End Object
|
End Object
|
||||||
bg_WEAP=WEAPBG
|
bg_WEAP=WEAPBG
|
||||||
|
|
||||||
|
Begin Object Class=moCheckBox Name=WeaponManagement
|
||||||
|
Caption="Nice weapon management"
|
||||||
|
ComponentClassName="NicePack.NiceGUICheckBoxButton"
|
||||||
|
OnCreateComponent=WeaponManagement.InternalOnCreateComponent
|
||||||
|
IniOption="@Internal"
|
||||||
|
Hint="If checked, NicePack will use it's own system to manage weapon switching"
|
||||||
|
OnChange=NiceGUISettings.InternalOnChange
|
||||||
|
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
||||||
|
End Object
|
||||||
|
ch_WeapManagement=WeaponManagement
|
||||||
|
|
||||||
|
Begin Object Class=moCheckBox Name=AltSwitches
|
||||||
|
Caption="Alt fire switches modes"
|
||||||
|
ComponentClassName="NicePack.NiceGUICheckBoxButton"
|
||||||
|
OnCreateComponent=AltSwitches.InternalOnCreateComponent
|
||||||
|
IniOption="@Internal"
|
||||||
|
Hint="Assault-rifle only; if enabled - alt fire button switches between fire modes, otherwise - acts as an alt fire"
|
||||||
|
OnChange=NiceGUISettings.InternalOnChange
|
||||||
|
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
||||||
|
End Object
|
||||||
|
ch_AltSwitches=AltSwitches
|
||||||
|
|
||||||
|
Begin Object Class=moCheckBox Name=DispCounters
|
||||||
|
Caption="Display counters"
|
||||||
|
ComponentClassName="NicePack.NiceGUICheckBoxButton"
|
||||||
|
OnCreateComponent=DispCounters.InternalOnCreateComponent
|
||||||
|
IniOption="@Internal"
|
||||||
|
Hint="Toggles display of the various counters used by skills"
|
||||||
|
OnChange=NiceGUISettings.InternalOnChange
|
||||||
|
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
||||||
|
End Object
|
||||||
|
ch_DispCounters=DispCounters
|
||||||
|
|
||||||
|
Begin Object Class=moCheckBox Name=DispWeapProgress
|
||||||
|
Caption="Display weapon progress"
|
||||||
|
ComponentClassName="NicePack.NiceGUICheckBoxButton"
|
||||||
|
OnCreateComponent=DispWeapProgress.InternalOnCreateComponent
|
||||||
|
IniOption="@Internal"
|
||||||
|
Hint="Displays weapon progress rate, however it's defined by a skill that's using this functionality"
|
||||||
|
OnChange=NiceGUISettings.InternalOnChange
|
||||||
|
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
||||||
|
End Object
|
||||||
|
ch_DisWeapProgress=DispWeapProgress
|
||||||
|
|
||||||
|
Begin Object Class=moCheckBox Name=ShowHLMessages
|
||||||
|
Caption="Show Hardcore Level messages"
|
||||||
|
ComponentClassName="NicePack.NiceGUICheckBoxButton"
|
||||||
|
OnCreateComponent=ShowHLMessages.InternalOnCreateComponent
|
||||||
|
IniOption="@Internal"
|
||||||
|
Hint="Enable to be notified each time Hardcore Level is changed"
|
||||||
|
OnChange=NiceGUISettings.InternalOnChange
|
||||||
|
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
||||||
|
End Object
|
||||||
|
ch_ShowHLMessages=ShowHLMessages
|
||||||
|
|
||||||
|
// WEAPON RELOAD SETTINGS
|
||||||
Begin Object Class=GUISectionBackground Name=RELOADBG
|
Begin Object Class=GUISectionBackground Name=RELOADBG
|
||||||
Caption="Weapon reload settings"
|
Caption="Weapon reload settings"
|
||||||
WinTop=0.012500
|
WinTop=0.012500
|
||||||
@ -275,7 +218,87 @@ defaultproperties
|
|||||||
WinWidth=0.495000
|
WinWidth=0.495000
|
||||||
WinHeight=0.287500
|
WinHeight=0.287500
|
||||||
RenderWeight=0.100100
|
RenderWeight=0.100100
|
||||||
OnPreDraw=WeaponsBG.InternalPreDraw
|
// OnPreDraw=WeaponsBG.InternalPreDraw
|
||||||
|
OnPreDraw=RELOADBG.InternalPreDraw
|
||||||
End Object
|
End Object
|
||||||
bg_RELOAD=RELOADBG
|
bg_RELOAD=RELOADBG
|
||||||
|
|
||||||
|
Begin Object Class=moCheckBox Name=CancelFire
|
||||||
|
Caption="Cancel reload by shooting"
|
||||||
|
ComponentClassName="NicePack.NiceGUICheckBoxButton"
|
||||||
|
OnCreateComponent=CancelFire.InternalOnCreateComponent
|
||||||
|
IniOption="@Internal"
|
||||||
|
Hint="If checked, you'll be able to cancel reload of converted weapons by shooting (when you have ammo)"
|
||||||
|
OnChange=NiceGUISettings.InternalOnChange
|
||||||
|
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
||||||
|
End Object
|
||||||
|
ch_CancelFire=CancelFire
|
||||||
|
|
||||||
|
Begin Object Class=moCheckBox Name=CancelSwitching
|
||||||
|
Caption="Cancel reload by switching weapons"
|
||||||
|
ComponentClassName="NicePack.NiceGUICheckBoxButton"
|
||||||
|
OnCreateComponent=CancelSwitching.InternalOnCreateComponent
|
||||||
|
IniOption="@Internal"
|
||||||
|
Hint="If checked, you'll be able to cancel reload of converted weapons by switching to different weapon"
|
||||||
|
OnChange=NiceGUISettings.InternalOnChange
|
||||||
|
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
||||||
|
End Object
|
||||||
|
ch_CancelSwitching=CancelSwitching
|
||||||
|
|
||||||
|
Begin Object Class=moCheckBox Name=CancelNades
|
||||||
|
Caption="Cancel reload by throwing grenades"
|
||||||
|
ComponentClassName="NicePack.NiceGUICheckBoxButton"
|
||||||
|
OnCreateComponent=CancelNades.InternalOnCreateComponent
|
||||||
|
IniOption="@Internal"
|
||||||
|
Hint="If checked, you'll be able to cancel reload of converted weapons by throwing a grenade"
|
||||||
|
OnChange=NiceGUISettings.InternalOnChange
|
||||||
|
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
||||||
|
End Object
|
||||||
|
ch_CancelNades=CancelNades
|
||||||
|
|
||||||
|
Begin Object Class=moCheckBox Name=CancelAiming
|
||||||
|
Caption="Cancel reload by aiming"
|
||||||
|
ComponentClassName="NicePack.NiceGUICheckBoxButton"
|
||||||
|
OnCreateComponent=CancelAiming.InternalOnCreateComponent
|
||||||
|
IniOption="@Internal"
|
||||||
|
Hint="If checked, you'll be able to cancel reload of converted weapons by going into iron sights (when you have ammo)"
|
||||||
|
OnChange=NiceGUISettings.InternalOnChange
|
||||||
|
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
||||||
|
End Object
|
||||||
|
ch_CancelAiming=CancelAiming
|
||||||
|
|
||||||
|
Begin Object Class=moCheckBox Name=ServerReload
|
||||||
|
Caption="My reload doesn't work"
|
||||||
|
ComponentClassName="NicePack.NiceGUICheckBoxButton"
|
||||||
|
OnCreateComponent=ServerReload.InternalOnCreateComponent
|
||||||
|
IniOption="@Internal"
|
||||||
|
Hint="Check this option ONLY in case converted weapons don't reload at all for you; this option should fix the problem, but then latency will affect both reload and active reload"
|
||||||
|
OnChange=NiceGUISettings.InternalOnChange
|
||||||
|
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
||||||
|
End Object
|
||||||
|
ch_ReloadWontWork=ServerReload
|
||||||
|
|
||||||
|
// RANDOM SETTINGS
|
||||||
|
Begin Object Class=GUISectionBackground Name=randbg
|
||||||
|
Caption="Random settings"
|
||||||
|
WinTop=0.300000
|
||||||
|
WinWidth=0.495000
|
||||||
|
WinHeight=0.287500
|
||||||
|
WinLeft=0.505000
|
||||||
|
RenderWeight=0.100100
|
||||||
|
// OnPreDraw=WeaponsBG.InternalPreDraw
|
||||||
|
OnPreDraw=randbg.InternalPreDraw
|
||||||
|
End Object
|
||||||
|
bg_RANDOM=randbg
|
||||||
|
|
||||||
|
Begin Object class=moComboBox Name=zedhbarpmethod
|
||||||
|
bReadOnly=true
|
||||||
|
CaptionWidth=0.000000
|
||||||
|
Caption="Zed health bars"
|
||||||
|
Hint="Choose what health bars you want to see"
|
||||||
|
OnCreateComponent=zedhbarpmethod.InternalOnCreateComponent
|
||||||
|
OnChange=NiceGUISettings.InternalOnChange
|
||||||
|
OnLoadINI=NiceGUISettings.InternalOnLoadINI
|
||||||
|
End Object
|
||||||
|
mo_ZedHPBars=zedhbarpmethod
|
||||||
}
|
}
|
@ -12,33 +12,66 @@ var float size;
|
|||||||
var float InventoryBoxWidth;
|
var float InventoryBoxWidth;
|
||||||
var float InventoryBoxHeight;
|
var float InventoryBoxHeight;
|
||||||
var float BorderSize;
|
var float BorderSize;
|
||||||
event NotifyLevelChange(){
|
|
||||||
|
event NotifyLevelChange()
|
||||||
|
{
|
||||||
Master.RemoveInteraction(self);
|
Master.RemoveInteraction(self);
|
||||||
}
|
}
|
||||||
function RegisterMutator(NicePack activePack){
|
|
||||||
|
function RegisterMutator(NicePack activePack)
|
||||||
|
{
|
||||||
NicePackMutator = activePack;
|
NicePackMutator = activePack;
|
||||||
}
|
}
|
||||||
function bool isPoisoned(ScrnHumanPawn pwn){
|
|
||||||
|
final private function bool bIsPoisoned(ScrnHumanPawn pwn)
|
||||||
|
{
|
||||||
local Inventory I;
|
local Inventory I;
|
||||||
|
|
||||||
if (pwn.Inventory != none)
|
if (pwn.Inventory != none)
|
||||||
|
{
|
||||||
for (I = pwn.Inventory; I != none; I = I.Inventory)
|
for (I = pwn.Inventory; I != none; I = I.Inventory)
|
||||||
if(I != none && MeanPoisonInventory(I) != none)
|
{
|
||||||
|
if (MeanPoisonInventory(I) != none)
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
function PostRender(Canvas C){
|
|
||||||
|
final private function bool bIsBleeding(ScrnHumanPawn pwn)
|
||||||
|
{
|
||||||
|
local Inventory I;
|
||||||
|
|
||||||
|
if (pwn.Inventory != none)
|
||||||
|
{
|
||||||
|
for (I = pwn.Inventory; I != none; I = I.Inventory)
|
||||||
|
{
|
||||||
|
if (MeanBleedInventory(I) != none)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function PostRender(Canvas C)
|
||||||
|
{
|
||||||
local int i;
|
local int i;
|
||||||
local NicePack niceMutator;
|
local NicePack niceMutator;
|
||||||
local NiceHumanPawn nicePawn;
|
local NiceHumanPawn nicePawn;
|
||||||
local class<NiceVeterancyTypes> niceVet;
|
local class<NiceVeterancyTypes> niceVet;
|
||||||
local MeanReplicationInfo szRI;
|
|
||||||
local NiceWeapon niceWeap;
|
local NiceWeapon niceWeap;
|
||||||
local NicePlayerController nicePlayer;
|
local NicePlayerController nicePlayer;
|
||||||
local ScrnHUD scrnHUDInstance;
|
local ScrnHUD scrnHUDInstance;
|
||||||
|
// TODO maybe use scrnhud?
|
||||||
|
local HUDKillingFloor kfHud;
|
||||||
local Texture barTexture;
|
local Texture barTexture;
|
||||||
local int x, y, center, barWidth, offset;
|
local int x, y, center, barWidth, offset;
|
||||||
local int missesWidth, missesHeight, missesSpace;
|
local int missesWidth, missesHeight, missesSpace;
|
||||||
local int missesX, missesY;
|
local int missesX, missesY;
|
||||||
|
local Vector CamPos, ViewDir;
|
||||||
|
local Rotator CamRot;
|
||||||
|
local float OffsetX, BarLength, BarHeight, XL, YL, posY;
|
||||||
|
|
||||||
if(C == none) return;
|
if(C == none) return;
|
||||||
if(C.ViewPort == none) return;
|
if(C.ViewPort == none) return;
|
||||||
if(C.ViewPort.Actor == none) return;
|
if(C.ViewPort.Actor == none) return;
|
||||||
@ -48,25 +81,70 @@ function PostRender(Canvas C){
|
|||||||
if(nicePlayer == none)
|
if(nicePlayer == none)
|
||||||
return;
|
return;
|
||||||
scrnHUDInstance = ScrnHUD(nicePlayer.myHUD);
|
scrnHUDInstance = ScrnHUD(nicePlayer.myHUD);
|
||||||
//// Draw bleed and poison icons
|
|
||||||
szRI = class'MeanReplicationInfo'.static.findSZri(ViewportOwner.Actor.PlayerReplicationInfo);
|
//// Draw bleed and poison icons for OWNER
|
||||||
offset = 4;
|
offset = 4;
|
||||||
if(szRI != none){
|
// BLEED!!!
|
||||||
if(szRI.isBleeding){
|
if (bIsBleeding(ScrnHumanPawn(C.ViewPort.Actor.Pawn)))
|
||||||
|
{
|
||||||
x = C.ClipX * 0.007;
|
x = C.ClipX * 0.007;
|
||||||
y = C.ClipY * 0.93 - size * offset;
|
y = C.ClipY * 0.93 - size * offset;
|
||||||
C.SetPos(x, y);
|
C.SetPos(x, y);
|
||||||
C.DrawTile(bleedIcon, size, size, 0, 0, bleedIcon.MaterialUSize(), bleedIcon.MaterialVSize());
|
C.DrawTile(bleedIcon, size, size, 0, 0, bleedIcon.MaterialUSize(), bleedIcon.MaterialVSize());
|
||||||
}
|
}
|
||||||
offset++;
|
offset++;
|
||||||
if(isPoisoned(ScrnHumanPawn(C.ViewPort.Actor.Pawn))){
|
// POISON!!!
|
||||||
|
if (bIsPoisoned(ScrnHumanPawn(C.ViewPort.Actor.Pawn)))
|
||||||
|
{
|
||||||
x = C.ClipX * 0.007;
|
x = C.ClipX * 0.007;
|
||||||
y = C.ClipY * 0.93 - size * offset;
|
y = C.ClipY * 0.93 - size * offset;
|
||||||
C.SetPos(x, y);
|
C.SetPos(x, y);
|
||||||
C.DrawTile(poisonIcon, size, size, 0, 0, poisonIcon.MaterialUSize(), poisonIcon.MaterialVSize());
|
C.DrawTile(poisonIcon, size, size, 0, 0, poisonIcon.MaterialUSize(), poisonIcon.MaterialVSize());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if(niceWeap != none && niceWeap.bShowSecondaryCharge && scrnHUDInstance != none){
|
// draw bleed and poison icons for TEAMMATES
|
||||||
|
// C.GetCAmeraLocation(CamPos, CamRot);
|
||||||
|
// ViewDir = vector(CamRot);
|
||||||
|
// kfHud = HUDKillingFloor(ViewportOwner.Actor.myHUD);
|
||||||
|
// OffsetX = (36.f * kfHud.default.VeterancyMatScaleFactor * 0.6) - (kfHud.default.HealthIconSize + 2.0);
|
||||||
|
// BarLength = FMin(kfHud.default.BarLength * (float(C.SizeX) / 1024.f), kfHud.default.BarLength);
|
||||||
|
// BarHeight = FMin(kfHud.default.BarHeight * (float(C.SizeX) / 1024.f), kfHud.default.BarHeight);
|
||||||
|
// for (i = 0; i < kfHUD.PlayerInfoPawns.Length; i++)
|
||||||
|
// {
|
||||||
|
// if (kfHUD.PlayerInfoPawns[i].Pawn != none && kfHUD.PlayerInfoPawns[i].Pawn.Health > 0 &&
|
||||||
|
// (kfHUD.PlayerInfoPawns[i].Pawn.Location - kfHUD.PawnOwner.Location) dot ViewDir > 0.8 &&
|
||||||
|
// kfHUD.PlayerInfoPawns[i].RendTime > ViewportOwner.Actor.Level.TimeSeconds)
|
||||||
|
// {
|
||||||
|
// C.StrLen(Left(kfHUD.PlayerInfoPawns[i].Pawn.PlayerReplicationInfo.PlayerName, 16), XL, YL);
|
||||||
|
// if (kfHUD.PlayerInfoPawns[i].Pawn.ShieldStrength <= 0)
|
||||||
|
// {
|
||||||
|
// posY = (kfHUD.PlayerInfoPawns[i].PlayerInfoScreenPosY - YL) - 2.75 * BarHeight -
|
||||||
|
// kfHUD.default.ArmorIconSize * 0.5;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// posY = (kfHUD.PlayerInfoPawns[i].PlayerInfoScreenPosY - YL) - 3.8 * BarHeight -
|
||||||
|
// kfHUD.default.ArmorIconSize * 0.5;
|
||||||
|
// }
|
||||||
|
// offset = 0;
|
||||||
|
|
||||||
|
// if (bIsBleeding(ScrnHumanPawn(kfHUD.PlayerInfoPawns[i].Pawn)))
|
||||||
|
// {
|
||||||
|
// C.SetPos(kfHUD.PlayerInfoPawns[i].PlayerInfoScreenPosX - OffsetX - 0.15 * BarLength -
|
||||||
|
// kfHUD.default.ArmorIconSize - 2.0, posY);
|
||||||
|
// C.DrawTileScaled(bleedIcon, 0.1875, 0.1875);
|
||||||
|
// }
|
||||||
|
// if (bIsPoisoned(ScrnHumanPawn(kfHUD.PlayerInfoPawns[i].Pawn)))
|
||||||
|
// {
|
||||||
|
// C.SetPos(kfHUD.PlayerInfoPawns[i].PlayerInfoScreenPosX - OffsetX + 0.15 * BarLength -
|
||||||
|
// kfHUD.default.ArmorIconSize - 2.0, posY);
|
||||||
|
// C.DrawTileScaled(poisonIcon, 0.1875, 0.1875);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
if (niceWeap != none && niceWeap.bShowSecondaryCharge && scrnHUDInstance != none)
|
||||||
|
{
|
||||||
C.ColorModulate.X = 1;
|
C.ColorModulate.X = 1;
|
||||||
C.ColorModulate.Y = 1;
|
C.ColorModulate.Y = 1;
|
||||||
C.ColorModulate.Z = 1;
|
C.ColorModulate.Z = 1;
|
||||||
@ -77,11 +155,13 @@ function PostRender(Canvas C){
|
|||||||
scrnHUDInstance.SecondaryClipsDigits.value = niceWeap.secondaryCharge;
|
scrnHUDInstance.SecondaryClipsDigits.value = niceWeap.secondaryCharge;
|
||||||
scrnHUDInstance.DrawNumericWidget(C, scrnHUDInstance.SecondaryClipsDigits, scrnHUDInstance.DigitsSmall);
|
scrnHUDInstance.DrawNumericWidget(C, scrnHUDInstance.SecondaryClipsDigits, scrnHUDInstance.DigitsSmall);
|
||||||
}
|
}
|
||||||
|
|
||||||
niceMutator = class'NicePack'.static.Myself(C.ViewPort.Actor.Pawn.Level);
|
niceMutator = class'NicePack'.static.Myself(C.ViewPort.Actor.Pawn.Level);
|
||||||
if (niceMutator == none)
|
if (niceMutator == none)
|
||||||
return;
|
return;
|
||||||
//// Draw counters
|
//// Draw counters
|
||||||
if(nicePlayer != none && nicePlayer.bFlagDisplayCounters){
|
if(nicePlayer != none && nicePlayer.bFlagDisplayCounters)
|
||||||
|
{
|
||||||
x = C.ClipX * 0.5 - (64 + 2) * niceMutator.GetVisibleCountersAmount();
|
x = C.ClipX * 0.5 - (64 + 2) * niceMutator.GetVisibleCountersAmount();
|
||||||
y = C.ClipY * 0.01;
|
y = C.ClipY * 0.01;
|
||||||
for(i = 0;i < niceMutator.niceCounterSet.Length;i ++)
|
for(i = 0;i < niceMutator.niceCounterSet.Length;i ++)
|
||||||
@ -91,7 +171,8 @@ function PostRender(Canvas C){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//// Draw weapons progress bars
|
//// Draw weapons progress bars
|
||||||
if(nicePlayer != none && nicePlayer.bFlagDisplayWeaponProgress){
|
if(nicePlayer != none && nicePlayer.bFlagDisplayWeaponProgress)
|
||||||
|
{
|
||||||
x = C.ClipX - InventoryBoxWidth * C.ClipX - 5;
|
x = C.ClipX - InventoryBoxWidth * C.ClipX - 5;
|
||||||
y = C.ClipY * 0.5 - 0.5 * (InventoryBoxHeight * C.ClipX + 4) * niceMutator.niceWeapProgressSet.Length;
|
y = C.ClipY * 0.5 - 0.5 * (InventoryBoxHeight * C.ClipX + 4) * niceMutator.niceWeapProgressSet.Length;
|
||||||
for(i = 0;i < niceMutator.niceWeapProgressSet.Length;i ++){
|
for(i = 0;i < niceMutator.niceWeapProgressSet.Length;i ++){
|
||||||
@ -102,7 +183,8 @@ function PostRender(Canvas C){
|
|||||||
}
|
}
|
||||||
//// Draw invincibility bar
|
//// Draw invincibility bar
|
||||||
nicePawn = NiceHumanPawn(nicePlayer.pawn);
|
nicePawn = NiceHumanPawn(nicePlayer.pawn);
|
||||||
if(nicePawn != none && nicePawn.invincibilityTimer != 0.0){
|
if(nicePawn != none && nicePawn.invincibilityTimer != 0.0)
|
||||||
|
{
|
||||||
C.SetDrawColor(255, 255, 255);
|
C.SetDrawColor(255, 255, 255);
|
||||||
if(nicePawn.invincibilityTimer > 0)
|
if(nicePawn.invincibilityTimer > 0)
|
||||||
barTexture = greenBar;
|
barTexture = greenBar;
|
||||||
@ -147,6 +229,7 @@ function PostRender(Canvas C){
|
|||||||
for(i = 0;i < nicePlayer.abilityManager.currentAbilitiesAmount;i ++)
|
for(i = 0;i < nicePlayer.abilityManager.currentAbilitiesAmount;i ++)
|
||||||
DrawAbilityCooldown(C, i);
|
DrawAbilityCooldown(C, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
function DrawCounter(Canvas C, NicePack.CounterDisplay counter, int x, int y, TeamInfo team){
|
function DrawCounter(Canvas C, NicePack.CounterDisplay counter, int x, int y, TeamInfo team){
|
||||||
local float borderSpace;
|
local float borderSpace;
|
||||||
local Texture textureToDraw;
|
local Texture textureToDraw;
|
||||||
|
@ -8,16 +8,16 @@ function InitComponent(GUIController MyController, GUIComponent MyOwner){
|
|||||||
local SRMenuAddition M;
|
local SRMenuAddition M;
|
||||||
local int indexAfterScrn;
|
local int indexAfterScrn;
|
||||||
// Setup panel classes.
|
// Setup panel classes.
|
||||||
Panels[0].ClassName = string(Class'ScrnBalanceSrv.ScrnTab_MidGamePerks');
|
Panels[0].ClassName = string(class'ScrnTab_MidGamePerks');
|
||||||
Panels[1].ClassName = string(class'NicePanelSkills');
|
Panels[1].ClassName = string(class'NicePanelSkills');
|
||||||
Panels[2].ClassName = string(Class'SRTab_MidGameVoiceChat');
|
Panels[2].ClassName = string(class'SRTab_MidGameVoiceChat');
|
||||||
Panels[3].ClassName = string(Class'SRTab_MidGameStats');
|
Panels[3].ClassName = string(class'SRTab_MidGameStats');
|
||||||
Panels[0].Caption = Class'KFInvasionLoginMenu'.Default.Panels[1].Caption;
|
Panels[0].Caption = class'KFInvasionLoginMenu'.Default.Panels[1].Caption;
|
||||||
Panels[1].Caption = "Skills";
|
Panels[1].Caption = "Skills";
|
||||||
Panels[2].Caption = Class'KFInvasionLoginMenu'.Default.Panels[2].Caption;
|
Panels[2].Caption = class'KFInvasionLoginMenu'.Default.Panels[2].Caption;
|
||||||
Panels[0].Hint = Class'KFInvasionLoginMenu'.Default.Panels[1].Hint;
|
Panels[0].Hint = class'KFInvasionLoginMenu'.Default.Panels[1].Hint;
|
||||||
Panels[1].Hint = "Customize your perk";
|
Panels[1].Hint = "Customize your perk";
|
||||||
Panels[2].Hint = Class'KFInvasionLoginMenu'.Default.Panels[2].Hint;
|
Panels[2].Hint = class'KFInvasionLoginMenu'.Default.Panels[2].Hint;
|
||||||
b_Spec.Caption=class'KFTab_MidGamePerks'.default.b_Spec.Caption;
|
b_Spec.Caption=class'KFTab_MidGamePerks'.default.b_Spec.Caption;
|
||||||
b_MatchSetup.Caption=class'KFTab_MidGamePerks'.default.b_MatchSetup.Caption;
|
b_MatchSetup.Caption=class'KFTab_MidGamePerks'.default.b_MatchSetup.Caption;
|
||||||
b_KickVote.Caption=class'KFTab_MidGamePerks'.default.b_KickVote.Caption;
|
b_KickVote.Caption=class'KFTab_MidGamePerks'.default.b_KickVote.Caption;
|
||||||
@ -28,11 +28,12 @@ function InitComponent(GUIController MyController, GUIComponent MyOwner){
|
|||||||
b_Settings.Caption=class'KFTab_MidGamePerks'.default.b_Settings.Caption;
|
b_Settings.Caption=class'KFTab_MidGamePerks'.default.b_Settings.Caption;
|
||||||
b_Browser.Caption=class'KFTab_MidGamePerks'.default.b_Browser.Caption;
|
b_Browser.Caption=class'KFTab_MidGamePerks'.default.b_Browser.Caption;
|
||||||
// Other panels
|
// Other panels
|
||||||
Panels[4].ClassName = "ScrnBalanceSrv.ScrnTab_Achievements";
|
Panels[4].ClassName = string(class'ScrnTab_Achievements');
|
||||||
Panels[4].Caption = "Achievements";
|
Panels[4].Caption = "Achievements";
|
||||||
Panels[4].Hint = "ScrN server-side achievements";
|
Panels[4].Hint = "ScrN server-side achievements";
|
||||||
if(default.bShowScrnMenu){
|
if (default.bShowScrnMenu)
|
||||||
Panels[5].ClassName = "ScrnBalanceSrv.ScrnTab_UserSettings";
|
{
|
||||||
|
Panels[5].ClassName = string(class'ScrnTab_UserSettings');
|
||||||
Panels[5].Caption = "ScrN Features";
|
Panels[5].Caption = "ScrN Features";
|
||||||
Panels[5].Hint = "ScrN Balance features, settings and info";
|
Panels[5].Hint = "ScrN Balance features, settings and info";
|
||||||
indexAfterScrn = 6;
|
indexAfterScrn = 6;
|
||||||
|
@ -78,13 +78,29 @@ function InitComponent(GUIController MyC, GUIComponent MyO)
|
|||||||
{
|
{
|
||||||
super(UT2k4MainPage).InitComponent(MyC, MyO);
|
super(UT2k4MainPage).InitComponent(MyC, MyO);
|
||||||
|
|
||||||
i_Portrait.WinTop = PlayerPortraitBG.ActualTop() + 30;
|
FixPortrait();
|
||||||
i_Portrait.WinHeight = PlayerPortraitBG.ActualHeight() - 36;
|
|
||||||
|
|
||||||
t_ChatBox.FocusInstead = PerkClickLabel;
|
t_ChatBox.FocusInstead = PerkClickLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
event ResolutionChanged(int ResX, int ResY)
|
||||||
|
{
|
||||||
|
super.ResolutionChanged(ResX, ResY);
|
||||||
|
FixPortrait();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// FUCKING TWI, YOUR FUCKING BUGS
|
||||||
|
final private function bool FixPortrait()
|
||||||
|
{
|
||||||
|
i_Portrait.WinTop = PlayerPortraitBG.RelativeTop(i_Portrait.WinTop); // ActualTop() + 30;
|
||||||
|
i_Portrait.WinHeight = PlayerPortraitBG.RelativeHeight(i_Portrait.WinHeight); // ActualHeight() - 36;
|
||||||
|
// log(">>> HideLobbyMenu: FixPortrait() called!!!");
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Called when the Menu Owner is opened
|
// Called when the Menu Owner is opened
|
||||||
event Opened(GUIComponent Sender)
|
event Opened(GUIComponent Sender)
|
||||||
{
|
{
|
||||||
|
@ -1,15 +1,36 @@
|
|||||||
class NicePanelSkills extends Settings_Tabs;
|
class NicePanelSkills extends UT2K4TabPanel;
|
||||||
|
|
||||||
var automated NiceGUIPerkButton skillButtonA[5], skillButtonB[5];
|
var automated NiceGUIPerkButton skillButtonA[5], skillButtonB[5];
|
||||||
function ShowPanel(bool bShow){
|
var automated GUISectionBackground sb_big_left, sb_big_right;
|
||||||
|
|
||||||
|
function ShowPanel(bool bShow)
|
||||||
|
{
|
||||||
local int i;
|
local int i;
|
||||||
local class<NiceVeterancyTypes> niceVet;
|
local class<NiceVeterancyTypes> niceVet;
|
||||||
local NicePlayerController nicePlayer;
|
local NicePlayerController nicePlayer;
|
||||||
Super.ShowPanel(bShow);
|
|
||||||
|
super.ShowPanel(bShow);
|
||||||
|
|
||||||
|
// loops are for puss
|
||||||
|
sb_big_left.ManageComponent(skillButtonA[0]);
|
||||||
|
sb_big_left.ManageComponent(skillButtonA[1]);
|
||||||
|
sb_big_left.ManageComponent(skillButtonA[2]);
|
||||||
|
sb_big_left.ManageComponent(skillButtonA[3]);
|
||||||
|
sb_big_left.ManageComponent(skillButtonA[4]);
|
||||||
|
|
||||||
|
sb_big_right.ManageComponent(skillButtonB[0]);
|
||||||
|
sb_big_right.ManageComponent(skillButtonB[1]);
|
||||||
|
sb_big_right.ManageComponent(skillButtonB[2]);
|
||||||
|
sb_big_right.ManageComponent(skillButtonB[3]);
|
||||||
|
sb_big_right.ManageComponent(skillButtonB[4]);
|
||||||
|
|
||||||
nicePlayer = NicePlayerController(PlayerOwner());
|
nicePlayer = NicePlayerController(PlayerOwner());
|
||||||
if (nicePlayer != none)
|
if (nicePlayer != none)
|
||||||
niceVet = class'NiceVeterancyTypes'.static.GetVeterancy(nicePlayer.PlayerReplicationInfo);
|
niceVet = class'NiceVeterancyTypes'.static.GetVeterancy(nicePlayer.PlayerReplicationInfo);
|
||||||
if(niceVet != none){
|
if (niceVet != none)
|
||||||
for(i = 0;i < 5;i ++){
|
{
|
||||||
|
for (i = 0;i < 5;i ++)
|
||||||
|
{
|
||||||
skillButtonA[i].skillIndex = i;
|
skillButtonA[i].skillIndex = i;
|
||||||
skillButtonB[i].skillIndex = i;
|
skillButtonB[i].skillIndex = i;
|
||||||
skillButtonA[i].skillPerkIndex = niceVet.default.PerkIndex;
|
skillButtonA[i].skillPerkIndex = niceVet.default.PerkIndex;
|
||||||
@ -21,16 +42,53 @@ function ShowPanel(bool bShow){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// size = (x=0.0125, y=0.0) ; (w=1.0, h=0.865)
|
// size = (x=0.0125, y=0.0) ; (w=1.0, h=0.865)
|
||||||
// setup caption
|
// setup caption
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
// BACKGROUNDS
|
||||||
|
Begin Object Class=AltSectionBackground Name=skillbckgrndl
|
||||||
|
Caption="LEFT SKILLS"
|
||||||
|
// bNoCaption=true
|
||||||
|
LeftPadding=0.000000
|
||||||
|
RightPadding=0.030000
|
||||||
|
TopPadding=0.000000
|
||||||
|
BottomPadding=0.000000
|
||||||
|
WinTop=0.000000
|
||||||
|
WinLeft=0.000000
|
||||||
|
WinWidth=0.500000
|
||||||
|
WinHeight=0.87
|
||||||
|
bBoundToParent=True
|
||||||
|
bScaleToParent=True
|
||||||
|
OnPreDraw=skillbckgrndl.InternalPreDraw
|
||||||
|
End Object
|
||||||
|
sb_big_left=skillbckgrndl
|
||||||
|
|
||||||
|
Begin Object Class=AltSectionBackground Name=skillbckgrndr
|
||||||
|
Caption="OBVIOUSLY RIGHT SKILLS"
|
||||||
|
// bNoCaption=true
|
||||||
|
LeftPadding=0.000000
|
||||||
|
RightPadding=0.030000
|
||||||
|
TopPadding=0.000000
|
||||||
|
BottomPadding=0.000000
|
||||||
|
WinTop=0.000000
|
||||||
|
WinLeft=0.500000
|
||||||
|
WinWidth=0.500000
|
||||||
|
WinHeight=0.87
|
||||||
|
bBoundToParent=True
|
||||||
|
bScaleToParent=True
|
||||||
|
OnPreDraw=skillbckgrndr.InternalPreDraw
|
||||||
|
End Object
|
||||||
|
sb_big_right=skillbckgrndr
|
||||||
|
|
||||||
|
// buttons
|
||||||
Begin Object Class=NiceGUIPerkButton Name=btn1A
|
Begin Object Class=NiceGUIPerkButton Name=btn1A
|
||||||
WinTop=0.012500
|
// WinTop=0.012500
|
||||||
WinWidth=0.495000
|
WinWidth=0.495000
|
||||||
WinHeight=0.160000
|
WinHeight=0.160000
|
||||||
RenderWeight=2.000000
|
// RenderWeight=2.000000
|
||||||
TabOrder=1
|
// TabOrder=1
|
||||||
bBoundToParent=True
|
bBoundToParent=True
|
||||||
bScaleToParent=True
|
bScaleToParent=True
|
||||||
bMouseOverSound=False
|
bMouseOverSound=False
|
||||||
@ -40,11 +98,11 @@ defaultproperties
|
|||||||
skillButtonA(0)=btn1A
|
skillButtonA(0)=btn1A
|
||||||
|
|
||||||
Begin Object Class=NiceGUIPerkButton Name=btn2A
|
Begin Object Class=NiceGUIPerkButton Name=btn2A
|
||||||
WinTop=0.188500
|
// WinTop=0.188500
|
||||||
WinWidth=0.495000
|
WinWidth=0.495000
|
||||||
WinHeight=0.160000
|
WinHeight=0.160000
|
||||||
RenderWeight=2.000000
|
// RenderWeight=2.000000
|
||||||
TabOrder=3
|
// TabOrder=3
|
||||||
bBoundToParent=True
|
bBoundToParent=True
|
||||||
bScaleToParent=True
|
bScaleToParent=True
|
||||||
bMouseOverSound=False
|
bMouseOverSound=False
|
||||||
@ -54,11 +112,11 @@ defaultproperties
|
|||||||
skillButtonA(1)=btn2A
|
skillButtonA(1)=btn2A
|
||||||
|
|
||||||
Begin Object Class=NiceGUIPerkButton Name=btn3A
|
Begin Object Class=NiceGUIPerkButton Name=btn3A
|
||||||
WinTop=0.364500
|
// WinTop=0.364500
|
||||||
WinWidth=0.495000
|
WinWidth=0.495000
|
||||||
WinHeight=0.160000
|
WinHeight=0.160000
|
||||||
RenderWeight=2.000000
|
// RenderWeight=2.000000
|
||||||
TabOrder=5
|
// TabOrder=5
|
||||||
bBoundToParent=True
|
bBoundToParent=True
|
||||||
bScaleToParent=True
|
bScaleToParent=True
|
||||||
bMouseOverSound=False
|
bMouseOverSound=False
|
||||||
@ -68,11 +126,11 @@ defaultproperties
|
|||||||
skillButtonA(2)=btn3A
|
skillButtonA(2)=btn3A
|
||||||
|
|
||||||
Begin Object Class=NiceGUIPerkButton Name=btn4A
|
Begin Object Class=NiceGUIPerkButton Name=btn4A
|
||||||
WinTop=0.540500
|
// WinTop=0.540500
|
||||||
WinWidth=0.495000
|
WinWidth=0.495000
|
||||||
WinHeight=0.160000
|
WinHeight=0.160000
|
||||||
RenderWeight=2.000000
|
// RenderWeight=2.000000
|
||||||
TabOrder=7
|
// TabOrder=7
|
||||||
bBoundToParent=True
|
bBoundToParent=True
|
||||||
bScaleToParent=True
|
bScaleToParent=True
|
||||||
bMouseOverSound=False
|
bMouseOverSound=False
|
||||||
@ -82,11 +140,11 @@ defaultproperties
|
|||||||
skillButtonA(3)=btn4A
|
skillButtonA(3)=btn4A
|
||||||
|
|
||||||
Begin Object Class=NiceGUIPerkButton Name=btn5A
|
Begin Object Class=NiceGUIPerkButton Name=btn5A
|
||||||
WinTop=0.716500
|
// WinTop=0.716500
|
||||||
WinWidth=0.495000
|
WinWidth=0.495000
|
||||||
WinHeight=0.160000
|
WinHeight=0.160000
|
||||||
RenderWeight=2.000000
|
// RenderWeight=2.000000
|
||||||
TabOrder=9
|
// TabOrder=9
|
||||||
bBoundToParent=True
|
bBoundToParent=True
|
||||||
bScaleToParent=True
|
bScaleToParent=True
|
||||||
bMouseOverSound=False
|
bMouseOverSound=False
|
||||||
|
@ -67,8 +67,8 @@ function ReplaceRequiredEquipment(){
|
|||||||
Super.ReplaceRequiredEquipment();
|
Super.ReplaceRequiredEquipment();
|
||||||
RequiredEquipment[0] = String(class'NiceMachete');
|
RequiredEquipment[0] = String(class'NiceMachete');
|
||||||
RequiredEquipment[1] = String(class'Nice9mmPlus');
|
RequiredEquipment[1] = String(class'Nice9mmPlus');
|
||||||
RequiredEquipment[2] = String(class'ScrnBalanceSrv.ScrnFrag');
|
RequiredEquipment[2] = String(class'ScrnFrag');
|
||||||
RequiredEquipment[3] = String(class'ScrnBalanceSrv.ScrnSyringe');
|
RequiredEquipment[3] = String(class'ScrnSyringe');
|
||||||
RequiredEquipment[4] = String(class'KFMod.Welder');
|
RequiredEquipment[4] = String(class'KFMod.Welder');
|
||||||
}
|
}
|
||||||
simulated function int CalculateCalibrationScore(){
|
simulated function int CalculateCalibrationScore(){
|
||||||
@ -510,7 +510,7 @@ function bool AddInventory(inventory NewItem){
|
|||||||
if((DualDeagle(weap) != none || Dual44Magnum(weap) != none || DualMK23Pistol(weap) != none)
|
if((DualDeagle(weap) != none || Dual44Magnum(weap) != none || DualMK23Pistol(weap) != none)
|
||||||
&& weap.InventoryGroup != 4 ) {
|
&& weap.InventoryGroup != 4 ) {
|
||||||
if(KFPRI != none &&
|
if(KFPRI != none &&
|
||||||
ClassIsChildOf(KFPRI.ClientVeteranSkill, class'ScrnBalanceSrv.ScrnVetGunslinger'))
|
ClassIsChildOf(KFPRI.ClientVeteranSkill, class'ScrnVetGunslinger'))
|
||||||
weap.InventoryGroup = 3;
|
weap.InventoryGroup = 3;
|
||||||
else
|
else
|
||||||
weap.InventoryGroup = 2;
|
weap.InventoryGroup = 2;
|
||||||
@ -555,16 +555,21 @@ simulated function CookGrenade(){
|
|||||||
niceWeap.ClientGrenadeState = GN_TempDown;
|
niceWeap.ClientGrenadeState = GN_TempDown;
|
||||||
niceWeap.PutDown();
|
niceWeap.PutDown();
|
||||||
}
|
}
|
||||||
simulated function ThrowGrenade(){
|
simulated function ThrowGrenade()
|
||||||
|
{
|
||||||
local NiceWeapon niceWeap;
|
local NiceWeapon niceWeap;
|
||||||
niceWeap = NiceWeapon(Weapon);
|
niceWeap = NiceWeapon(Weapon);
|
||||||
if(niceWeap != none)
|
if(niceWeap != none)
|
||||||
niceWeap.ClientForceInterruptReload(CANCEL_NADE);
|
niceWeap.ClientForceInterruptReload(CANCEL_NADE);
|
||||||
if(bThrowingNade || SecondaryItem != none)
|
if(bThrowingNade || SecondaryItem != none)
|
||||||
return;
|
return;
|
||||||
if( niceWeap == none
|
|
||||||
|| (niceWeap.bIsReloading && !niceWeap.InterruptReload()))
|
if(niceWeap == none || (niceWeap.bIsReloading && !niceWeap.InterruptReload()))
|
||||||
|
{
|
||||||
|
super.ThrowGrenade();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(playerGrenade == none)
|
if(playerGrenade == none)
|
||||||
playerGrenade = FindPlayerGrenade();
|
playerGrenade = FindPlayerGrenade();
|
||||||
if(playerGrenade != none && playerGrenade.HasAmmo()){
|
if(playerGrenade != none && playerGrenade.HasAmmo()){
|
||||||
@ -863,6 +868,40 @@ simulated function AltFire(optional float F){
|
|||||||
super.AltFire(F);
|
super.AltFire(F);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// added copy-cated function to disable some log
|
||||||
|
simulated function Setup(xUtil.PlayerRecord rec, optional bool bLoadNow)
|
||||||
|
{
|
||||||
|
local ScrnPlayerController PC;
|
||||||
|
local string CN;
|
||||||
|
|
||||||
|
PC = ScrnPlayerController(Controller);
|
||||||
|
if ( PC != none && IsLocallyControlled() )
|
||||||
|
{
|
||||||
|
// check this only on player side, because it stores
|
||||||
|
// RedCharacter & BlueCharacter in the config
|
||||||
|
CN = rec.DefaultName;
|
||||||
|
if ( !PC.ValidateCharacter(CN) ) {
|
||||||
|
// character invalid, change it valid one, which was set up in ValidateCharacter()
|
||||||
|
rec = class'xUtil'.static.FindPlayerRecord(CN);
|
||||||
|
PC.ChangeCharacter(CN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
super(KFPawn).Setup(rec, bLoadNow);
|
||||||
|
|
||||||
|
if( class<SoldierSpeciesRobot>(Species) != none )
|
||||||
|
{
|
||||||
|
BreathingSound = class'KFDARSoundGroup'.default.BreathingSound;
|
||||||
|
}
|
||||||
|
else if( class<AshHardingSpecies>(Species) != none )
|
||||||
|
{
|
||||||
|
BreathingSound = class'KFFemaleSoundGroup'.default.BreathingSound;
|
||||||
|
}
|
||||||
|
// disable the log!!!
|
||||||
|
// log(BreathingSound);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
defaultInvincibilityDuration=2.000000
|
defaultInvincibilityDuration=2.000000
|
||||||
|
@ -176,14 +176,14 @@ simulated function PostBeginPlay(){
|
|||||||
class'ScrnHorzineVestPickup'.default.cost = 750;
|
class'ScrnHorzineVestPickup'.default.cost = 750;
|
||||||
class'NicePack'.default.Mut = self;
|
class'NicePack'.default.Mut = self;
|
||||||
// Gun skins
|
// Gun skins
|
||||||
class'NiceMaulerPickup'.default.VariantClasses[class'NiceMaulerPickup'.default.VariantClasses.length] = class'ScrnBalanceSrv.ScrnSPSniperPickup';
|
class'NiceMaulerPickup'.default.VariantClasses[class'NiceMaulerPickup'.default.VariantClasses.length] = class'ScrnSPSniperPickup';
|
||||||
class'NiceDeaglePickup'.default.VariantClasses[class'NiceDeaglePickup'.default.VariantClasses.length] = class'SkinExecutionerPickup';
|
class'NiceDeaglePickup'.default.VariantClasses[class'NiceDeaglePickup'.default.VariantClasses.length] = class'SkinExecutionerPickup';
|
||||||
class'NiceDualDeaglePickup'.default.VariantClasses[class'NiceDualDeaglePickup'.default.VariantClasses.length] = class'SkinDualExecutionerPickup';
|
class'NiceDualDeaglePickup'.default.VariantClasses[class'NiceDualDeaglePickup'.default.VariantClasses.length] = class'SkinDualExecutionerPickup';
|
||||||
class'NiceMagnumPickup'.default.VariantClasses[class'NiceMagnumPickup'.default.VariantClasses.length] = class'SkinCowboyMagnumPickup';
|
class'NiceMagnumPickup'.default.VariantClasses[class'NiceMagnumPickup'.default.VariantClasses.length] = class'SkinCowboyMagnumPickup';
|
||||||
class'NiceDualMagnumPickup'.default.VariantClasses[class'NiceDualMagnumPickup'.default.VariantClasses.length] = class'SkinDualCowboyMagnumPickup';
|
class'NiceDualMagnumPickup'.default.VariantClasses[class'NiceDualMagnumPickup'.default.VariantClasses.length] = class'SkinDualCowboyMagnumPickup';
|
||||||
class'NiceWinchesterPickup'.default.VariantClasses[class'NiceWinchesterPickup'.default.VariantClasses.length] = class'SkinRetroLARPickup';
|
class'NiceWinchesterPickup'.default.VariantClasses[class'NiceWinchesterPickup'.default.VariantClasses.length] = class'SkinRetroLARPickup';
|
||||||
class'NiceM14EBRPickup'.default.VariantClasses[class'NiceM14EBRPickup'.default.VariantClasses.length] = class'SkinM14EBR2ProPickup';
|
class'NiceM14EBRPickup'.default.VariantClasses[class'NiceM14EBRPickup'.default.VariantClasses.length] = class'SkinM14EBR2ProPickup';
|
||||||
class'ScrnBalanceSrv.ScrnKrissMPickup'.default.VariantClasses[class'ScrnBalanceSrv.ScrnKrissMPickup'.default.VariantClasses.length] = class'SkinGoldenKrissPickup';
|
class'ScrnKrissMPickup'.default.VariantClasses[class'ScrnKrissMPickup'.default.VariantClasses.length] = class'SkinGoldenKrissPickup';
|
||||||
class'NiceSCARMK17Pickup'.default.VariantClasses[class'NiceSCARMK17Pickup'.default.VariantClasses.length] = class'SkinCamoSCARMK17Pickup';
|
class'NiceSCARMK17Pickup'.default.VariantClasses[class'NiceSCARMK17Pickup'.default.VariantClasses.length] = class'SkinCamoSCARMK17Pickup';
|
||||||
// Abilities
|
// Abilities
|
||||||
class'NiceAbilityManager'.default.events.static.AddAdapter(class'NiceSharpshooterAbilitiesAdapter', level);
|
class'NiceAbilityManager'.default.events.static.AddAdapter(class'NiceSharpshooterAbilitiesAdapter', level);
|
||||||
@ -468,14 +468,13 @@ simulated function bool CheckReplacement(Actor Other, out byte bSuperRelevant){
|
|||||||
local NicePlayerController playerContr;
|
local NicePlayerController playerContr;
|
||||||
local NiceRepInfoRemoteData remoteRI;
|
local NiceRepInfoRemoteData remoteRI;
|
||||||
local NiceReplicationInfo niceRI;
|
local NiceReplicationInfo niceRI;
|
||||||
local MeanReplicationInfo meanRI;
|
|
||||||
local PlayerReplicationInfo pri;
|
local PlayerReplicationInfo pri;
|
||||||
// Replace loot on levels
|
// Replace loot on levels
|
||||||
if(Other.class == class'KFRandomItemSpawn' || Other.class == class'ScrnBalanceSrv.ScrnRandomItemSpawn'){
|
if(Other.class == class'KFRandomItemSpawn' || Other.class == class'ScrnRandomItemSpawn'){
|
||||||
ReplaceWith(Other, string(class'NiceRandomItemSpawn'));
|
ReplaceWith(Other, string(class'NiceRandomItemSpawn'));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if(Other.class == class'KFAmmoPickup' || Other.class == class'ScrnBalanceSrv.ScrnAmmoPickup') {
|
else if(Other.class == class'KFAmmoPickup' || Other.class == class'ScrnAmmoPickup') {
|
||||||
ReplaceWith(Other, string(class'NiceAmmoPickup'));
|
ReplaceWith(Other, string(class'NiceAmmoPickup'));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -493,8 +492,6 @@ simulated function bool CheckReplacement(Actor Other, out byte bSuperRelevant){
|
|||||||
niceRI = spawn(class'NiceReplicationInfo', pri.Owner);
|
niceRI = spawn(class'NiceReplicationInfo', pri.Owner);
|
||||||
niceRI.Mut = self;
|
niceRI.Mut = self;
|
||||||
remoteRI = spawn(class'NiceRepInfoRemoteData', pri.Owner);
|
remoteRI = spawn(class'NiceRepInfoRemoteData', pri.Owner);
|
||||||
meanRI = spawn(class'MeanReplicationInfo', pri.Owner);
|
|
||||||
meanRI.ownerPRI = pri;
|
|
||||||
playerContr = NicePlayerController(PlayerReplicationInfo(Other).Owner);
|
playerContr = NicePlayerController(PlayerReplicationInfo(Other).Owner);
|
||||||
playerContr.niceRI = niceRI;
|
playerContr.niceRI = niceRI;
|
||||||
playerContr.remoteRI = remoteRI;
|
playerContr.remoteRI = remoteRI;
|
||||||
@ -1067,18 +1064,20 @@ defaultproperties
|
|||||||
bNoLateFFIncrease=True
|
bNoLateFFIncrease=True
|
||||||
junkieNextGoal=1
|
junkieNextGoal=1
|
||||||
bIsPreGame=True
|
bIsPreGame=True
|
||||||
pickupReplaceArray(0)=(vanillaClass=Class'KFMod.MAC10Pickup',scrnClass=Class'ScrnBalanceSrv.ScrnMAC10Pickup',NewClass=class'NiceMAC10Pickup')
|
pickupReplaceArray(0)=(vanillaClass=Class'KFMod.MAC10Pickup',scrnClass=Class'ScrnMAC10Pickup',NewClass=class'NiceMAC10Pickup')
|
||||||
pickupReplaceArray(1)=(vanillaClass=Class'KFMod.WinchesterPickup',scrnClass=Class'ScrnBalanceSrv.ScrnWinchesterPickup',NewClass=class'NiceWinchesterPickup')
|
pickupReplaceArray(1)=(vanillaClass=Class'KFMod.WinchesterPickup',scrnClass=Class'ScrnWinchesterPickup',NewClass=class'NiceWinchesterPickup')
|
||||||
pickupReplaceArray(2)=(vanillaClass=Class'KFMod.CrossbowPickup',scrnClass=Class'ScrnBalanceSrv.ScrnCrossbowPickup',NewClass=class'NiceCrossbowPickup')
|
pickupReplaceArray(2)=(vanillaClass=Class'KFMod.CrossbowPickup',scrnClass=Class'ScrnCrossbowPickup',NewClass=class'NiceCrossbowPickup')
|
||||||
pickupReplaceArray(3)=(vanillaClass=Class'KFMod.SPSniperPickup',scrnClass=Class'ScrnBalanceSrv.ScrnSPSniperPickup',NewClass=class'NiceMaulerPickup')
|
pickupReplaceArray(3)=(vanillaClass=Class'KFMod.SPSniperPickup',scrnClass=Class'ScrnSPSniperPickup',NewClass=class'NiceMaulerPickup')
|
||||||
pickupReplaceArray(4)=(vanillaClass=Class'KFMod.M14EBRPickup',scrnClass=Class'ScrnBalanceSrv.ScrnM14EBRPickup',NewClass=class'NiceM14EBRPickup')
|
pickupReplaceArray(4)=(vanillaClass=Class'KFMod.M14EBRPickup',scrnClass=Class'ScrnM14EBRPickup',NewClass=class'NiceM14EBRPickup')
|
||||||
pickupReplaceArray(5)=(vanillaClass=Class'KFMod.M99Pickup',scrnClass=Class'ScrnBalanceSrv.ScrnM99Pickup',NewClass=class'NiceM99Pickup')
|
pickupReplaceArray(5)=(vanillaClass=Class'KFMod.M99Pickup',scrnClass=Class'ScrnM99Pickup',NewClass=class'NiceM99Pickup')
|
||||||
pickupReplaceArray(6)=(vanillaClass=Class'KFMod.ShotgunPickup',scrnClass=Class'ScrnBalanceSrv.ScrnShotgunPickup',NewClass=class'NiceShotgunPickup')
|
pickupReplaceArray(6)=(vanillaClass=Class'KFMod.ShotgunPickup',scrnClass=Class'ScrnShotgunPickup',NewClass=class'NiceShotgunPickup')
|
||||||
pickupReplaceArray(7)=(vanillaClass=Class'KFMod.BoomStickPickup',scrnClass=Class'ScrnBalanceSrv.ScrnBoomStickPickup',NewClass=class'NiceBoomStickPickup')
|
pickupReplaceArray(7)=(vanillaClass=Class'KFMod.BoomStickPickup',scrnClass=Class'ScrnBoomStickPickup',NewClass=class'NiceBoomStickPickup')
|
||||||
pickupReplaceArray(8)=(vanillaClass=Class'KFMod.NailGunPickup',scrnClass=Class'ScrnBalanceSrv.ScrnNailGunPickup',NewClass=class'NiceNailGunPickup')
|
pickupReplaceArray(8)=(vanillaClass=Class'KFMod.NailGunPickup',scrnClass=Class'ScrnNailGunPickup',NewClass=class'NiceNailGunPickup')
|
||||||
pickupReplaceArray(9)=(vanillaClass=Class'KFMod.KSGPickup',scrnClass=Class'ScrnBalanceSrv.ScrnKSGPickup',NewClass=class'NiceKSGPickup')
|
pickupReplaceArray(9)=(vanillaClass=Class'KFMod.KSGPickup',scrnClass=Class'ScrnKSGPickup',NewClass=class'NiceKSGPickup')
|
||||||
pickupReplaceArray(10)=(vanillaClass=Class'KFMod.BenelliPickup',scrnClass=Class'ScrnBalanceSrv.ScrnBenelliPickup',NewClass=class'NiceBenelliPickup')
|
pickupReplaceArray(10)=(vanillaClass=Class'KFMod.BenelliPickup',scrnClass=Class'ScrnBenelliPickup',NewClass=class'NiceBenelliPickup')
|
||||||
pickupReplaceArray(11)=(vanillaClass=Class'KFMod.AA12Pickup',scrnClass=Class'ScrnBalanceSrv.ScrnAA12Pickup',NewClass=class'NiceAA12Pickup')
|
pickupReplaceArray(11)=(vanillaClass=Class'KFMod.AA12Pickup',scrnClass=Class'ScrnAA12Pickup',NewClass=class'NiceAA12Pickup')
|
||||||
|
pickupReplaceArray(12)=(vanillaClass=Class'KFMod.MachetePickup',scrnClass=Class'ScrnMachetePickup',NewClass=class'NiceMachetePickup')
|
||||||
|
|
||||||
NiceUniversalDescriptions(0)="Survive on %m in ScrN Balance mode"
|
NiceUniversalDescriptions(0)="Survive on %m in ScrN Balance mode"
|
||||||
NiceUniversalDescriptions(1)="Survive on %m in ScrN Balance mode with Hardcore Level 5+"
|
NiceUniversalDescriptions(1)="Survive on %m in ScrN Balance mode with Hardcore Level 5+"
|
||||||
NiceUniversalDescriptions(2)="Survive on %m in ScrN Balance mode with Hardcore Level 10+"
|
NiceUniversalDescriptions(2)="Survive on %m in ScrN Balance mode with Hardcore Level 10+"
|
||||||
|
@ -2,6 +2,8 @@ class NicePlayerController extends ScrnPlayerController
|
|||||||
config(NiceUser)
|
config(NiceUser)
|
||||||
dependson(NicePack)
|
dependson(NicePack)
|
||||||
dependson(NiceFire);
|
dependson(NiceFire);
|
||||||
|
|
||||||
|
var globalconfig int ZedHPBarStyle; // 0 - big zeds, 1 - all, 2 - disabled
|
||||||
var globalconfig int nicePlayerInfoVersionNumber;
|
var globalconfig int nicePlayerInfoVersionNumber;
|
||||||
// These are values stored in a settings file
|
// These are values stored in a settings file
|
||||||
var globalconfig bool bDebug;
|
var globalconfig bool bDebug;
|
||||||
@ -403,12 +405,12 @@ simulated event Destroyed(){
|
|||||||
// Screw that
|
// Screw that
|
||||||
simulated function ClientWeaponDestroyed(class<Weapon> WClass){}
|
simulated function ClientWeaponDestroyed(class<Weapon> WClass){}
|
||||||
// This event is generated when new pawn spawns
|
// This event is generated when new pawn spawns
|
||||||
function PawnSpawned(){
|
function PawnSpawned()
|
||||||
|
{
|
||||||
local bool bFoundExp;
|
local bool bFoundExp;
|
||||||
local float convertedExp;
|
local float convertedExp;
|
||||||
local ClientPerkRepLink R;
|
local ClientPerkRepLink R;
|
||||||
local SRCustomProgress exp;
|
local SRCustomProgress exp;
|
||||||
local MeanReplicationInfo meanRI;
|
|
||||||
local NicePack.PlayerRecord record;
|
local NicePack.PlayerRecord record;
|
||||||
//local NiceHumanPawn nicePawn;
|
//local NiceHumanPawn nicePawn;
|
||||||
// Make sure our health is at it's top
|
// Make sure our health is at it's top
|
||||||
@ -496,10 +498,6 @@ function PawnSpawned(){
|
|||||||
exp.IncrementProgress(convertedExp);
|
exp.IncrementProgress(convertedExp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Stop after-death bleeding
|
|
||||||
meanRI = class'MeanReplicationInfo'.static.findSZri(PlayerReplicationInfo);
|
|
||||||
if(meanRI != none)
|
|
||||||
meanRI.stopBleeding();
|
|
||||||
// Give necessary dosh to the player
|
// Give necessary dosh to the player
|
||||||
if(NicePackMutator != none)
|
if(NicePackMutator != none)
|
||||||
NicePackMutator.GiveProgressiveDosh(self);
|
NicePackMutator.GiveProgressiveDosh(self);
|
||||||
@ -1442,6 +1440,101 @@ exec simulated function Siren(float value)
|
|||||||
sirenScreamMod = value;
|
sirenScreamMod = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// copy-cat to fix MyTrader accessed none log spam
|
||||||
|
function ClientLocationalVoiceMessage(PlayerReplicationInfo Sender,
|
||||||
|
PlayerReplicationInfo Recipient,
|
||||||
|
name MessageType, byte MessageID,
|
||||||
|
optional Pawn SenderPawn, optional vector SenderLocation)
|
||||||
|
{
|
||||||
|
local VoicePack Voice;
|
||||||
|
local ShopVolume Shop;
|
||||||
|
|
||||||
|
if (Sender == none || Sender.VoiceType == none || Player.Console == none || Level.NetMode == NM_DedicatedServer)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Voice = Spawn(Sender.VoiceType, self);
|
||||||
|
if (KFVoicePack(Voice) != none)
|
||||||
|
{
|
||||||
|
if (MessageType == 'TRADER')
|
||||||
|
{
|
||||||
|
if (Pawn != none && MessageID >= 4)
|
||||||
|
{
|
||||||
|
foreach Pawn.TouchingActors(class'ShopVolume', Shop)
|
||||||
|
{
|
||||||
|
// fix this
|
||||||
|
if (Shop.MyTrader != none)
|
||||||
|
SenderLocation = Shop.MyTrader.Location;
|
||||||
|
else
|
||||||
|
SenderLocation = Shop.Location;
|
||||||
|
|
||||||
|
// Only play the 30 Seconds remaining messages come across as Locational Speech if we're in the Shop
|
||||||
|
if (MessageID == 4)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (MessageID == 5)
|
||||||
|
{
|
||||||
|
MessageID = 999;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only play the 10 Seconds remaining message if we are in the Shop
|
||||||
|
// and only play the 30 seconds remaning message if we haven't been to the Shop
|
||||||
|
if (MessageID == 5 || (MessageID == 4 && bHasHeardTraderWelcomeMessage))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (MessageID == 999)
|
||||||
|
{
|
||||||
|
MessageID = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store the fact that we've heard the Trader's Welcome message on the client
|
||||||
|
if (MessageID == 7)
|
||||||
|
{
|
||||||
|
bHasHeardTraderWelcomeMessage = true;
|
||||||
|
}
|
||||||
|
// If we're hearing the Shop's Closed Message, reset the Trader's Welcome message flag
|
||||||
|
else if (MessageID == 6)
|
||||||
|
{
|
||||||
|
bHasHeardTraderWelcomeMessage = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
KFVoicePack(Voice).ClientInitializeLocational(Sender, Recipient, MessageType, MessageID, SenderPawn, SenderLocation);
|
||||||
|
|
||||||
|
if (MessageID > 6 /*&& bBuyMenuIsOpen*/)
|
||||||
|
{
|
||||||
|
// TODO: Show KFVoicePack(Voice).GetClientParsedMessage() in the Buy Menu
|
||||||
|
}
|
||||||
|
else if (KFVoicePack(Voice).GetClientParsedMessage() != "")
|
||||||
|
{
|
||||||
|
// Radio commands print to Text
|
||||||
|
TeamMessage(Sender, KFVoicePack(Voice).GetClientParsedMessage(), 'Trader');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
KFVoicePack(Voice).ClientInitializeLocational(Sender, Recipient, MessageType, MessageID, SenderPawn, SenderLocation);
|
||||||
|
|
||||||
|
if (KFVoicePack(Voice).GetClientParsedMessage() != "")
|
||||||
|
{
|
||||||
|
TeamMessage(Sender, KFVoicePack(Voice).GetClientParsedMessage(), 'Voice');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Voice != none)
|
||||||
|
{
|
||||||
|
Voice.ClientInitialize(Sender, Recipient, MessageType, MessageID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
nicePlayerInfoVersionNumber=1
|
nicePlayerInfoVersionNumber=1
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
class NiceRandomItemSpawn extends ScrnRandomItemSpawn;
|
class NiceRandomItemSpawn extends ScrnRandomItemSpawn;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
PickupClasses(0)=class'NiceWinchesterPickup'
|
PickupClasses(0)=Class'NiceWinchesterPickup'
|
||||||
PickupClasses(1)=class'NiceShotgunPickup'
|
PickupClasses(1)=Class'NiceShotgunPickup'
|
||||||
PickupClasses(2)=class'NiceBullpupPickup'
|
PickupClasses(2)=Class'NiceBullpupPickup'
|
||||||
PickupClasses(3)=class'NiceMagnumPickup'
|
PickupClasses(3)=Class'NiceMagnumPickup'
|
||||||
PickupClasses(4)=class'NiceWinchesterPickup'
|
PickupClasses(4)=Class'NiceWinchesterPickup'
|
||||||
PickupClasses(5)=class'NiceM79Pickup'
|
PickupClasses(5)=Class'NiceM79Pickup'
|
||||||
|
PickupClasses(6)=Class'NiceAxePickup'
|
||||||
|
PickupClasses(7)=Class'ScrnVestPickup'
|
||||||
PickupClasses(8)=class'NiceMAC10Pickup'
|
PickupClasses(8)=class'NiceMAC10Pickup'
|
||||||
}
|
}
|
@ -186,24 +186,18 @@ simulated function HandleNiceHealingMechanicsAndSkills
|
|||||||
simulated function RemovePoisonAndBleed(NiceHumanPawn healed)
|
simulated function RemovePoisonAndBleed(NiceHumanPawn healed)
|
||||||
{
|
{
|
||||||
local Inventory I;
|
local Inventory I;
|
||||||
local MeanReplicationInfo MRI;
|
|
||||||
|
|
||||||
// log spam fix
|
// log spam fix
|
||||||
if (healed == none)
|
if (healed == none)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// No bleeding
|
// No poison and bleed
|
||||||
MRI = class'MeanReplicationInfo'.static.
|
|
||||||
findSZri(healed.PlayerReplicationInfo);
|
|
||||||
if (MRI != none)
|
|
||||||
MRI.stopBleeding();
|
|
||||||
// No poison
|
|
||||||
if (healed.inventory == none)
|
if (healed.inventory == none)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (I = healed.inventory; I != none; I = I.inventory)
|
for (I = healed.inventory; I != none; I = I.inventory)
|
||||||
{
|
{
|
||||||
if (MeanPoisonInventory(I) != none)
|
if (MeanPoisonInventory(I) != none || MeanBleedInventory(I) != none)
|
||||||
I.Destroy();
|
I.Destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ static function class<Grenade> GetNadeType(KFPlayerReplicationInfo KFPRI)
|
|||||||
//can't cook fire nades
|
//can't cook fire nades
|
||||||
static function bool CanCookNade(KFPlayerReplicationInfo KFPRI, Weapon Weap)
|
static function bool CanCookNade(KFPlayerReplicationInfo KFPRI, Weapon Weap)
|
||||||
{
|
{
|
||||||
return GetNadeType(KFPRI) != class'ScrnBalanceSrv.ScrnFlameNade';
|
return GetNadeType(KFPRI) != class'ScrnFlameNade';
|
||||||
}
|
}
|
||||||
//v2.60: +60% faster charge with Husk Gun
|
//v2.60: +60% faster charge with Husk Gun
|
||||||
static function float GetReloadSpeedModifierStatic(KFPlayerReplicationInfo KFPRI, class<KFWeapon> Other)
|
static function float GetReloadSpeedModifierStatic(KFPlayerReplicationInfo KFPRI, class<KFWeapon> Other)
|
||||||
|
@ -285,20 +285,39 @@ static function int GetInvincibilityDuration(KFPlayerReplicationInfo KFPRI){
|
|||||||
static function int GetInvincibilitySafeMisses(KFPlayerReplicationInfo KFPRI){
|
static function int GetInvincibilitySafeMisses(KFPlayerReplicationInfo KFPRI){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static function SpecialHUDInfo(KFPlayerReplicationInfo KFPRI, Canvas C){
|
|
||||||
|
static function SpecialHUDInfo(KFPlayerReplicationInfo KFPRI, Canvas C)
|
||||||
|
{
|
||||||
local KFMonster KFEnemy;
|
local KFMonster KFEnemy;
|
||||||
local HUDKillingFloor HKF;
|
local HUDKillingFloor HKF;
|
||||||
|
local int i, hp;
|
||||||
local float MaxDistanceSquared;
|
local float MaxDistanceSquared;
|
||||||
|
|
||||||
MaxDistanceSquared = 640000;
|
MaxDistanceSquared = 640000;
|
||||||
MaxDistanceSquared *= GetHealthBarsDistanceMulti(KFPRI)**2;
|
MaxDistanceSquared *= GetHealthBarsDistanceMulti(KFPRI)**2;
|
||||||
HKF = HUDKillingFloor(C.ViewPort.Actor.myHUD);
|
HKF = HUDKillingFloor(C.ViewPort.Actor.myHUD);
|
||||||
if (HKF == none || C.ViewPort.Actor.Pawn == none || MaxDistanceSquared <= 0)
|
if (HKF == none || C.ViewPort.Actor.Pawn == none || MaxDistanceSquared <= 0)
|
||||||
return;
|
return;
|
||||||
foreach C.ViewPort.Actor.DynamicActors(class'KFMonster', KFEnemy){
|
|
||||||
if(KFEnemy.Health > 0 && (!KFEnemy.Cloaked() || KFEnemy.bZapped || KFEnemy.bSpotted) && VSizeSquared(KFEnemy.Location - C.ViewPort.Actor.Pawn.Location) < MaxDistanceSquared)
|
// read and use player settings
|
||||||
|
// 0 - big zeds, 1 - all, 2 - disabled
|
||||||
|
i = NicePlayerController(C.ViewPort.actor).ZedHPBarStyle;
|
||||||
|
|
||||||
|
if (i == 2)
|
||||||
|
return;
|
||||||
|
else if (i == 1)
|
||||||
|
hp = 0;
|
||||||
|
else
|
||||||
|
hp = 1000;
|
||||||
|
|
||||||
|
foreach C.ViewPort.Actor.DynamicActors(class'KFMonster', KFEnemy)
|
||||||
|
{
|
||||||
|
// check with stopwatch
|
||||||
|
if (KFEnemy.Health > hp && (!KFEnemy.Cloaked() || KFEnemy.bZapped || KFEnemy.bSpotted) && VSizeSquared(KFEnemy.Location - C.ViewPort.Actor.Pawn.Location) < MaxDistanceSquared)
|
||||||
HKF.DrawHealthBar(C, KFEnemy, KFEnemy.Health, KFEnemy.HealthMax , 50.0);
|
HKF.DrawHealthBar(C, KFEnemy, KFEnemy.Health, KFEnemy.HealthMax , 50.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is player standing still?
|
// Is player standing still?
|
||||||
static function bool IsStandingStill(KFPlayerReplicationInfo KFPRI){
|
static function bool IsStandingStill(KFPlayerReplicationInfo KFPRI){
|
||||||
if(KFPRI != none && PlayerController(KFPRI.Owner) != none && PlayerController(KFPRI.Owner).Pawn != none && VSize(PlayerController(KFPRI.Owner).Pawn.Velocity) > 0.0)
|
if(KFPRI != none && PlayerController(KFPRI.Owner) != none && PlayerController(KFPRI.Owner).Pawn != none && VSize(PlayerController(KFPRI.Owner).Pawn.Velocity) > 0.0)
|
||||||
|
@ -1626,8 +1626,8 @@ defaultproperties
|
|||||||
{
|
{
|
||||||
recordedZoomTime=-1.000000
|
recordedZoomTime=-1.000000
|
||||||
SecondaryCharge=1
|
SecondaryCharge=1
|
||||||
LaserAttachmentClass=Class'ScrnBalanceSrv.ScrnLaserAttachmentFirstPerson'
|
LaserAttachmentClass=Class'ScrnLaserAttachmentFirstPerson'
|
||||||
LaserDotClass=Class'ScrnBalanceSrv.ScrnLocalLaserDot'
|
LaserDotClass=Class'ScrnLocalLaserDot'
|
||||||
LaserAttachmentBone="LightBone"
|
LaserAttachmentBone="LightBone"
|
||||||
MagazineBone="Magazine"
|
MagazineBone="Magazine"
|
||||||
bHasChargePhase=True
|
bHasChargePhase=True
|
||||||
|
@ -135,7 +135,7 @@ simulated function HurtRadius( float DamageAmount, float DamageRadius, class<Dam
|
|||||||
if( Role == ROLE_Authority )
|
if( Role == ROLE_Authority )
|
||||||
{
|
{
|
||||||
if ( bBlewInHands && NumKilled >= 5 && Stats != none )
|
if ( bBlewInHands && NumKilled >= 5 && Stats != none )
|
||||||
class'ScrnBalanceSrv.ScrnAchievements'.static.ProgressAchievementByID(Stats.Rep, 'SuicideBomber', 1);
|
class'ScrnAchievements'.static.ProgressAchievementByID(Stats.Rep, 'SuicideBomber', 1);
|
||||||
|
|
||||||
if ( NumKilled >= 4 )
|
if ( NumKilled >= 4 )
|
||||||
{
|
{
|
||||||
|
@ -11,7 +11,7 @@ function Timer()
|
|||||||
// if (AmmoInCharge == MaxChargeAmmo) {
|
// if (AmmoInCharge == MaxChargeAmmo) {
|
||||||
// Player = Level.GetLocalPlayerController();
|
// Player = Level.GetLocalPlayerController();
|
||||||
// if (Player != none)
|
// if (Player != none)
|
||||||
// Player.ReceiveLocalizedMessage(class'ScrnBalanceSrv.ScrnPlayerMessage',0);
|
// Player.ReceiveLocalizedMessage(class'ScrnPlayerMessage',0);
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
super.Timer();
|
super.Timer();
|
||||||
|
67
sources/Zeds/Mean/MeanBleedInventory.uc
Normal file
67
sources/Zeds/Mean/MeanBleedInventory.uc
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
class MeanBleedInventory extends Inventory;
|
||||||
|
|
||||||
|
|
||||||
|
const dmtype_bleed=class'NiceDamTypeStalkerBleed';
|
||||||
|
var int maxBleedCount;
|
||||||
|
var private float fBleedPeriod;
|
||||||
|
|
||||||
|
var int bleedLevel;
|
||||||
|
var MeanZombieCrawler stalker;
|
||||||
|
|
||||||
|
|
||||||
|
event PostBeginPlay()
|
||||||
|
{
|
||||||
|
super.PostBeginPlay();
|
||||||
|
// start the timer
|
||||||
|
SetTimer(fBleedPeriod, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
event Timer()
|
||||||
|
{
|
||||||
|
local pawn locpawn;
|
||||||
|
local bool amAlive;
|
||||||
|
local int bleedDamage;
|
||||||
|
|
||||||
|
locpawn = Pawn(Owner);
|
||||||
|
amAlive = locpawn != none && locpawn.Health > 0;
|
||||||
|
|
||||||
|
bleedDamage = bleedLevel * 7;
|
||||||
|
// if pawn owner is dead or bleed count is done - destroy
|
||||||
|
if (!amAlive || maxBleedCount < 0 || bleedDamage < 1.0)
|
||||||
|
{
|
||||||
|
Destroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
maxBleedCount--;
|
||||||
|
|
||||||
|
if (stalker != none)
|
||||||
|
locpawn.TakeDamage(bleedDamage, stalker, locpawn.Location,
|
||||||
|
vect(0, 0, 0), dmtype_bleed);
|
||||||
|
else
|
||||||
|
locpawn.TakeDamage(bleedDamage, locpawn, locpawn.Location,
|
||||||
|
vect(0, 0, 0), dmtype_bleed);
|
||||||
|
|
||||||
|
if (locpawn.isA('KFPawn'))
|
||||||
|
{
|
||||||
|
KFPawn(locpawn).HealthToGive -= 2 * bleedLevel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// cleanup
|
||||||
|
function Destroyed()
|
||||||
|
{
|
||||||
|
if (stalker != none)
|
||||||
|
stalker = none;
|
||||||
|
|
||||||
|
super.Destroyed();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
maxBleedCount=7
|
||||||
|
fBleedPeriod=1.500000
|
||||||
|
}
|
@ -192,18 +192,47 @@ function bool MeleeDamageTarget(int hitdamage, vector pushdir)
|
|||||||
{
|
{
|
||||||
if (targetPawn.ShieldStrength > 100)
|
if (targetPawn.ShieldStrength > 100)
|
||||||
return result;
|
return result;
|
||||||
else if (targetPawn.ShieldStrength < 0)
|
else if (targetPawn.ShieldStrength <= 0)
|
||||||
effectStrenght = 1.0;
|
effectStrenght = 1.0;
|
||||||
else
|
else
|
||||||
effectStrenght = (100 - targetPawn.ShieldStrength) * 0.01;
|
effectStrenght = (100 - targetPawn.ShieldStrength) * 0.01;
|
||||||
|
|
||||||
class'MeanReplicationInfo'.static
|
MakeBleed(targetPawn, effectStrenght);
|
||||||
.findSZri(targetPawn.PlayerReplicationInfo)
|
|
||||||
.setBleeding(Self, effectStrenght);
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final private function MakeBleed(NiceHumanPawn poorpawn, coerce int effectStrenght)
|
||||||
|
{
|
||||||
|
local Inventory I;
|
||||||
|
local MeanBleedInventory bleedinv;
|
||||||
|
local bool bFoundPoison;
|
||||||
|
|
||||||
|
if (poorpawn.Inventory != none)
|
||||||
|
{
|
||||||
|
for (I = poorpawn.Inventory; I != none; I = I.Inventory)
|
||||||
|
{
|
||||||
|
if (MeanBleedInventory(I) != none)
|
||||||
|
{
|
||||||
|
bleedinv = MeanBleedInventory(I);
|
||||||
|
bFoundPoison = true;
|
||||||
|
bleedinv.stalker = self;
|
||||||
|
bleedinv.bleedLevel = effectStrenght;
|
||||||
|
// reset bleed count
|
||||||
|
bleedinv.maxBleedCount = bleedinv.default.maxBleedCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!bFoundPoison)
|
||||||
|
{
|
||||||
|
I = Controller.Spawn(class<Inventory>(DynamicLoadObject(string(class'MeanBleedInventory'), class'Class')));
|
||||||
|
bleedinv = MeanBleedInventory(I);
|
||||||
|
bleedinv.stalker = self;
|
||||||
|
bleedinv.bleedLevel = effectStrenght;
|
||||||
|
bleedinv.GiveTo(poorpawn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function RemoveHead()
|
function RemoveHead()
|
||||||
{
|
{
|
||||||
Super(NiceMonster).RemoveHead();
|
Super(NiceMonster).RemoveHead();
|
||||||
|
@ -1,82 +1,4 @@
|
|||||||
// Copy pasted from super zombies mutator with small alterations
|
// no use atm
|
||||||
class MeanReplicationInfo extends ReplicationInfo;
|
class MeanReplicationInfo extends ReplicationInfo;
|
||||||
struct BleedingState {
|
|
||||||
var float nextBleedTime;
|
|
||||||
var Pawn instigator;
|
|
||||||
var int count;
|
|
||||||
};
|
|
||||||
var PlayerReplicationInfo ownerPRI;
|
|
||||||
var bool isBleeding;
|
|
||||||
var int maxBleedCount;
|
|
||||||
var BleedingState bleedState;
|
|
||||||
var float bleedPeriod;
|
|
||||||
var float bleedLevel;
|
|
||||||
replication {
|
|
||||||
reliable if (bNetDirty && Role == ROLE_Authority)
|
|
||||||
isBleeding, ownerPRI;
|
|
||||||
}
|
|
||||||
// Returns bleed damage, corresponding to given bleed level and damage scale.
|
|
||||||
// Rand(7) should be used as a scale.
|
|
||||||
// Separate function created to allow for lowest/highest damage value computing.
|
|
||||||
function int calcBleedDamage(float level, int scale){
|
|
||||||
return level * (3 + scale);
|
|
||||||
}
|
|
||||||
function Tick(float DeltaTime) {
|
|
||||||
local PlayerController ownerCtrllr;
|
|
||||||
local bool amAlive;
|
|
||||||
local float bleedDamage;
|
|
||||||
ownerCtrllr = PlayerController(Owner);
|
|
||||||
amAlive = ownerCtrllr != none && ownerCtrllr.Pawn != none && ownerCtrllr.Pawn.Health > 0;
|
|
||||||
if(amAlive && bleedState.count > 0) {
|
|
||||||
if(bleedState.nextBleedTime < Level.TimeSeconds) {
|
|
||||||
bleedState.count--;
|
|
||||||
bleedState.nextBleedTime+= bleedPeriod;
|
|
||||||
// Fix bleeding when stalker dies
|
|
||||||
bleedDamage = calcBleedDamage(bleedLevel, rand(7));
|
|
||||||
if(bleedDamage < 1.0)
|
|
||||||
stopBleeding();
|
|
||||||
if(bleedState.instigator != none)
|
|
||||||
ownerCtrllr.Pawn.TakeDamage(bleedDamage, bleedState.instigator, ownerCtrllr.Pawn.Location,
|
|
||||||
vect(0, 0, 0), class'NiceDamTypeStalkerBleed');
|
|
||||||
else
|
|
||||||
ownerCtrllr.Pawn.TakeDamage(bleedDamage, ownerCtrllr.Pawn, ownerCtrllr.Pawn.Location,
|
|
||||||
vect(0, 0, 0), class'NiceDamTypeStalkerBleed');
|
|
||||||
if (ownerCtrllr.Pawn.isA('KFPawn')) {
|
|
||||||
KFPawn(ownerCtrllr.Pawn).HealthToGive -= 2 * bleedLevel;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
isBleeding= false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function stopBleeding(){
|
|
||||||
isBleeding = false;
|
|
||||||
bleedState.count = 0;
|
|
||||||
}
|
|
||||||
function setBleeding(Pawn instigator, float effectStrenght) {
|
|
||||||
// Can max possible damage do anything? If no, then don't even bother.
|
|
||||||
if(calcBleedDamage(effectStrenght, 7) < 1.0)
|
|
||||||
return;
|
|
||||||
bleedState.instigator = instigator;
|
|
||||||
bleedState.count = maxBleedCount;
|
|
||||||
bleedLevel = effectStrenght;
|
|
||||||
if(!isBleeding){
|
|
||||||
bleedState.nextBleedTime = Level.TimeSeconds;
|
|
||||||
isBleeding = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
static function MeanReplicationInfo findSZri(PlayerReplicationInfo pri) {
|
|
||||||
local MeanReplicationInfo repInfo;
|
|
||||||
if(pri == none)
|
|
||||||
return none;
|
|
||||||
foreach pri.DynamicActors(Class'MeanReplicationInfo', repInfo)
|
|
||||||
if(repInfo.ownerPRI == pri)
|
|
||||||
return repInfo;
|
|
||||||
|
|
||||||
return none;
|
defaultproperties{}
|
||||||
}
|
|
||||||
defaultproperties
|
|
||||||
{
|
|
||||||
maxBleedCount=7
|
|
||||||
bleedPeriod=1.500000
|
|
||||||
}
|
|
@ -158,7 +158,12 @@ function SpawnTwoShots()
|
|||||||
{
|
{
|
||||||
local vector X,Y,Z, FireStart;
|
local vector X,Y,Z, FireStart;
|
||||||
local rotator FireRotation;
|
local rotator FireRotation;
|
||||||
if( Controller!=none && KFDoorMover(Controller.Target)!=none )
|
|
||||||
|
// check this from the very start to prevent any log spam
|
||||||
|
if (Controller == none || IsInState('ZombieDying'))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (KFDoorMover(Controller.Target)!=none )
|
||||||
{
|
{
|
||||||
Controller.Target.TakeDamage(22,Self,Location,vect(0,0,0),Class'DamTypeVomit');
|
Controller.Target.TakeDamage(22,Self,Location,vect(0,0,0),Class'DamTypeVomit');
|
||||||
return;
|
return;
|
||||||
@ -195,7 +200,10 @@ simulated function Tick(float deltatime)
|
|||||||
{
|
{
|
||||||
local vector BileExplosionLoc;
|
local vector BileExplosionLoc;
|
||||||
local FleshHitEmitter GibBileExplosion;
|
local FleshHitEmitter GibBileExplosion;
|
||||||
|
|
||||||
Super.tick(deltatime);
|
Super.tick(deltatime);
|
||||||
|
|
||||||
|
|
||||||
if( Role == ROLE_Authority && bMovingPukeAttack )
|
if( Role == ROLE_Authority && bMovingPukeAttack )
|
||||||
{
|
{
|
||||||
// Keep moving toward the target until the timer runs out (anim finishes)
|
// Keep moving toward the target until the timer runs out (anim finishes)
|
||||||
@ -238,7 +246,8 @@ simulated function Tick(float deltatime)
|
|||||||
{
|
{
|
||||||
if ( !class'GameInfo'.static.UseLowGore() )
|
if ( !class'GameInfo'.static.UseLowGore() )
|
||||||
{
|
{
|
||||||
BileExplosionLoc = self.Location;
|
// remove self.
|
||||||
|
BileExplosionLoc = Location;
|
||||||
BileExplosionLoc.z += (CollisionHeight - (CollisionHeight * 0.5));
|
BileExplosionLoc.z += (CollisionHeight - (CollisionHeight * 0.5));
|
||||||
|
|
||||||
if (bDecapitated)
|
if (bDecapitated)
|
||||||
@ -253,7 +262,7 @@ simulated function Tick(float deltatime)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BileExplosionLoc = self.Location;
|
BileExplosionLoc = Location;
|
||||||
BileExplosionLoc.z += (CollisionHeight - (CollisionHeight * 0.5));
|
BileExplosionLoc.z += (CollisionHeight - (CollisionHeight * 0.5));
|
||||||
|
|
||||||
GibBileExplosion = Spawn(class'LowGoreBileExplosion',self,, BileExplosionLoc );
|
GibBileExplosion = Spawn(class'LowGoreBileExplosion',self,, BileExplosionLoc );
|
||||||
|
@ -1,14 +1,17 @@
|
|||||||
// Zombie Monster for KF Invasion gametype
|
// Zombie Monster for KF Invasion gametype
|
||||||
class NiceZombieClot extends NiceZombieClotBase;
|
class NiceZombieClot extends NiceZombieClotBase;
|
||||||
|
|
||||||
#exec OBJ LOAD FILE=KF_Freaks_Trip.ukx
|
#exec OBJ LOAD FILE=KF_Freaks_Trip.ukx
|
||||||
#exec OBJ LOAD FILE=KF_Specimens_Trip_T.utx
|
#exec OBJ LOAD FILE=KF_Specimens_Trip_T.utx
|
||||||
#exec OBJ LOAD FILE=MeanZedSkins.utx
|
#exec OBJ LOAD FILE=MeanZedSkins.utx
|
||||||
|
|
||||||
function ClawDamageTarget()
|
function ClawDamageTarget()
|
||||||
{
|
{
|
||||||
local vector PushDir;
|
local vector PushDir;
|
||||||
local KFPawn KFP;
|
local KFPawn KFP;
|
||||||
local float UsedMeleeDamage;
|
local float UsedMeleeDamage;
|
||||||
|
|
||||||
|
// TODO Controller fix
|
||||||
if( MeleeDamage > 1 )
|
if( MeleeDamage > 1 )
|
||||||
{
|
{
|
||||||
UsedMeleeDamage = (MeleeDamage - (MeleeDamage * 0.05)) + (MeleeDamage * (FRand() * 0.1));
|
UsedMeleeDamage = (MeleeDamage - (MeleeDamage * 0.05)) + (MeleeDamage * (FRand() * 0.1));
|
||||||
@ -40,6 +43,7 @@ function ClawDamageTarget()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function RangedAttack(Actor A)
|
function RangedAttack(Actor A)
|
||||||
{
|
{
|
||||||
if ( bShotAnim || Physics == PHYS_Swimming)
|
if ( bShotAnim || Physics == PHYS_Swimming)
|
||||||
|
@ -69,6 +69,7 @@ simulated function int DoAnimAction( name AnimName )
|
|||||||
}
|
}
|
||||||
return Super.DoAnimAction(AnimName);
|
return Super.DoAnimAction(AnimName);
|
||||||
}
|
}
|
||||||
|
|
||||||
simulated event SetAnimAction(name NewAction)
|
simulated event SetAnimAction(name NewAction)
|
||||||
{
|
{
|
||||||
local int meleeAnimIndex;
|
local int meleeAnimIndex;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Zombie Monster for KF Invasion gametype
|
// Zombie Monster for KF Invasion gametype
|
||||||
class NiceZombieCrawlerBase extends NiceMonster
|
class NiceZombieCrawlerBase extends NiceMonster
|
||||||
abstract;
|
abstract;
|
||||||
#exec OBJ LOAD FILE=
|
// #exec OBJ LOAD FILE=
|
||||||
var() float PounceSpeed;
|
var() float PounceSpeed;
|
||||||
var bool bPouncing;
|
var bool bPouncing;
|
||||||
var(Anims) name MeleeAirAnims[3]; // Attack anims for when flying through the air
|
var(Anims) name MeleeAirAnims[3]; // Attack anims for when flying through the air
|
||||||
@ -9,101 +9,7 @@ var(Anims) name MeleeAirAnims[3]; // Attack anims for when flying through th
|
|||||||
// NOTE: All Code resides in the child class(this class was only created to
|
// NOTE: All Code resides in the child class(this class was only created to
|
||||||
// eliminate hitching caused by loading default properties during play)
|
// eliminate hitching caused by loading default properties during play)
|
||||||
//-------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------
|
||||||
function bool DoPounce()
|
|
||||||
{
|
|
||||||
if ( bZapped || bIsCrouched || bWantsToCrouch || (Physics != PHYS_Walking) || VSize(Location - Controller.Target.Location) > (MeleeRange * 5) )
|
|
||||||
return false;
|
|
||||||
Velocity = Normal(Controller.Target.Location-Location)*PounceSpeed;
|
|
||||||
Velocity.Z = JumpZ;
|
|
||||||
SetPhysics(PHYS_Falling);
|
|
||||||
ZombieSpringAnim();
|
|
||||||
bPouncing=true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
simulated function ZombieSpringAnim()
|
|
||||||
{
|
|
||||||
SetAnimAction('ZombieSpring');
|
|
||||||
}
|
|
||||||
event Landed(vector HitNormal)
|
|
||||||
{
|
|
||||||
bPouncing=false;
|
|
||||||
super.Landed(HitNormal);
|
|
||||||
}
|
|
||||||
event Bump(actor Other)
|
|
||||||
{
|
|
||||||
// TODO: is there a better way
|
|
||||||
if(bPouncing && KFHumanPawn(Other)!=none )
|
|
||||||
{
|
|
||||||
KFHumanPawn(Other).TakeDamage(((MeleeDamage - (MeleeDamage * 0.05)) + (MeleeDamage * (FRand() * 0.1))), self ,self.Location,self.velocity, class'NiceZedMeleeDamageType');
|
|
||||||
if (KFHumanPawn(Other).Health <=0)
|
|
||||||
{
|
|
||||||
//TODO - move this to humanpawn.takedamage? Also see KFMonster.MeleeDamageTarget
|
|
||||||
KFHumanPawn(Other).SpawnGibs(self.rotation, 1);
|
|
||||||
}
|
|
||||||
//After impact, there'll be no momentum for further bumps
|
|
||||||
bPouncing=false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Blend his attacks so he can hit you in mid air.
|
|
||||||
simulated function int DoAnimAction( name AnimName )
|
|
||||||
{
|
|
||||||
if( AnimName=='InAir_Attack1' || AnimName=='InAir_Attack2' )
|
|
||||||
{
|
|
||||||
AnimBlendParams(1, 1.0, 0.0,, FireRootBone);
|
|
||||||
PlayAnim(AnimName,, 0.0, 1);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if( AnimName=='HitF' )
|
|
||||||
{
|
|
||||||
AnimBlendParams(1, 1.0, 0.0,, NeckBone);
|
|
||||||
PlayAnim(AnimName,, 0.0, 1);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if( AnimName=='ZombieSpring' )
|
|
||||||
{
|
|
||||||
PlayAnim(AnimName,,0.02);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return Super.DoAnimAction(AnimName);
|
|
||||||
}
|
|
||||||
simulated event SetAnimAction(name NewAction)
|
|
||||||
{
|
|
||||||
local int meleeAnimIndex;
|
|
||||||
if( NewAction=='' )
|
|
||||||
Return;
|
|
||||||
if(NewAction == 'Claw')
|
|
||||||
{
|
|
||||||
meleeAnimIndex = Rand(2);
|
|
||||||
if( Physics == PHYS_Falling )
|
|
||||||
{
|
|
||||||
NewAction = MeleeAirAnims[meleeAnimIndex];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
NewAction = meleeAnims[meleeAnimIndex];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ExpectingChannel = DoAnimAction(NewAction);
|
|
||||||
if( AnimNeedsWait(NewAction) )
|
|
||||||
{
|
|
||||||
bWaitForAnim = true;
|
|
||||||
}
|
|
||||||
if( Level.NetMode!=NM_Client )
|
|
||||||
{
|
|
||||||
AnimAction = NewAction;
|
|
||||||
bResetAnimAct = True;
|
|
||||||
ResetAnimActTime = Level.TimeSeconds+0.3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// The animation is full body and should set the bWaitForAnim flag
|
|
||||||
simulated function bool AnimNeedsWait(name TestAnim)
|
|
||||||
{
|
|
||||||
if( TestAnim == 'ZombieSpring' || TestAnim == 'DoorBash' )
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
PounceSpeed=330.000000
|
PounceSpeed=330.000000
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
// He's not quite as speedy as the other Zombies, But his attacks are TRULY damaging.
|
// He's not quite as speedy as the other Zombies, But his attacks are TRULY damaging.
|
||||||
class NiceZombieScrakeBase extends NiceMonster
|
class NiceZombieScrakeBase extends NiceMonster
|
||||||
abstract;
|
abstract;
|
||||||
#exec OBJ LOAD FILE=
|
// #exec OBJ LOAD FILE=
|
||||||
var(Sounds) sound SawAttackLoopSound; // THe sound for the saw revved up, looping
|
var(Sounds) sound SawAttackLoopSound; // THe sound for the saw revved up, looping
|
||||||
var(Sounds) sound ChainSawOffSound; //The sound of this zombie dieing without a head
|
var(Sounds) sound ChainSawOffSound; //The sound of this zombie dieing without a head
|
||||||
var bool bCharging; // Scrake charges when his health gets low
|
var bool bCharging; // Scrake charges when his health gets low
|
||||||
|
@ -77,13 +77,16 @@ function DiscardCurrentScreamBall(){
|
|||||||
currScreamTiming = -1;
|
currScreamTiming = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function RangedAttack(Actor A)
|
function RangedAttack(Actor A)
|
||||||
{
|
{
|
||||||
local int LastFireTime;
|
local int LastFireTime;
|
||||||
local float Dist;
|
local float Dist;
|
||||||
|
|
||||||
if (bShotAnim)
|
if (bShotAnim)
|
||||||
return;
|
return;
|
||||||
Dist = VSize(A.Location - Location);
|
Dist = VSize(A.Location - Location);
|
||||||
|
|
||||||
if (Physics == PHYS_Swimming)
|
if (Physics == PHYS_Swimming)
|
||||||
{
|
{
|
||||||
SetAnimAction('Claw');
|
SetAnimAction('Claw');
|
||||||
@ -98,7 +101,8 @@ function RangedAttack(Actor A)
|
|||||||
Controller.bPreparingMove = true;
|
Controller.bPreparingMove = true;
|
||||||
Acceleration = vect(0,0,0);
|
Acceleration = vect(0,0,0);
|
||||||
}
|
}
|
||||||
else if( Dist <= ScreamRadius && !bDecapitated && !bZapped )
|
// ok se we DO NOT want to scream at other nice zeds
|
||||||
|
else if (!bNotAHuman() && Dist <= ScreamRadius && !bDecapitated && !bZapped)
|
||||||
{
|
{
|
||||||
bShotAnim = true;
|
bShotAnim = true;
|
||||||
SetAnimAction('Siren_Scream');
|
SetAnimAction('Siren_Scream');
|
||||||
@ -119,6 +123,16 @@ function RangedAttack(Actor A)
|
|||||||
Acceleration.Z = FMin(Acceleration.Z, 0.0f);
|
Acceleration.Z = FMin(Acceleration.Z, 0.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final private function bool bNotAHuman()
|
||||||
|
{
|
||||||
|
if (Controller == none || Controller.Enemy == none)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// log("Zed enemy classname was " $ Controller.Enemy.class);
|
||||||
|
return ClassIsChildOf(Controller.Enemy.class, class'NiceMonster');
|
||||||
|
}
|
||||||
|
|
||||||
simulated function int DoAnimAction( name AnimName )
|
simulated function int DoAnimAction( name AnimName )
|
||||||
{
|
{
|
||||||
if( AnimName=='Siren_Scream' || AnimName=='Siren_Bite' || AnimName=='Siren_Bite2' )
|
if( AnimName=='Siren_Scream' || AnimName=='Siren_Bite' || AnimName=='Siren_Bite2' )
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Zombie Monster for KF Invasion gametype
|
// Zombie Monster for KF Invasion gametype
|
||||||
class NiceZombieStalkerBase extends NiceMonster
|
class NiceZombieStalkerBase extends NiceMonster
|
||||||
abstract;
|
abstract;
|
||||||
#exec OBJ LOAD FILE=
|
// #exec OBJ LOAD FILE=
|
||||||
#exec OBJ LOAD FILE=KFX.utx
|
#exec OBJ LOAD FILE=KFX.utx
|
||||||
#exec OBJ LOAD FILE=KF_BaseStalker.uax
|
#exec OBJ LOAD FILE=KF_BaseStalker.uax
|
||||||
var float NextCheckTime;
|
var float NextCheckTime;
|
||||||
|
@ -899,18 +899,24 @@ function BileDamageEffect( int damage,
|
|||||||
NextBileTime = Level.TimeSeconds + BileFrequency;
|
NextBileTime = Level.TimeSeconds + BileFrequency;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function float GetDecapDamageModifier( class<NiceWeaponDamageType> damageType,
|
function float GetDecapDamageModifier( class<NiceWeaponDamageType> damageType,
|
||||||
NicePlayerController nicePlayer,
|
NicePlayerController nicePlayer,
|
||||||
KFPlayerReplicationInfo KFPRI){
|
KFPlayerReplicationInfo KFPRI)
|
||||||
|
{
|
||||||
local float damageMod;
|
local float damageMod;
|
||||||
local bool shouldDoGoodDecap;
|
local bool shouldDoGoodDecap;
|
||||||
local bool hasTrashCleaner;
|
local bool hasTrashCleaner;
|
||||||
local bool isPerkedPickup;
|
local bool isPerkedPickup;
|
||||||
local class<NiceWeaponPickup> pickupClass;
|
local class<NiceWeaponPickup> pickupClass;
|
||||||
local class<NiceVeterancyTypes> niceVet;
|
local class<NiceVeterancyTypes> niceVet;
|
||||||
|
|
||||||
|
// KFPRI accessed none fix
|
||||||
|
if (KFPRI != none)
|
||||||
niceVet = class<NiceVeterancyTypes>(KFPRI.ClientVeteranSkill);
|
niceVet = class<NiceVeterancyTypes>(KFPRI.ClientVeteranSkill);
|
||||||
isPerkedPickup = false;
|
isPerkedPickup = false;
|
||||||
if(niceVet != none){
|
if (niceVet != none)
|
||||||
|
{
|
||||||
pickupClass = niceVet.static.GetPickupFromDamageType(damageType);
|
pickupClass = niceVet.static.GetPickupFromDamageType(damageType);
|
||||||
if (pickupClass != none)
|
if (pickupClass != none)
|
||||||
isPerkedPickup = niceVet.static.IsPerkedPickup(pickupClass);
|
isPerkedPickup = niceVet.static.IsPerkedPickup(pickupClass);
|
||||||
@ -926,15 +932,13 @@ function float GetDecapDamageModifier( class<NiceWeaponDamageType> damageType,
|
|||||||
if (nicePlayer != none)
|
if (nicePlayer != none)
|
||||||
hasTrashCleaner = class'NiceVeterancyTypes'.static.
|
hasTrashCleaner = class'NiceVeterancyTypes'.static.
|
||||||
hasSkill(nicePlayer, class'NiceSkillCommandoTrashCleaner');
|
hasSkill(nicePlayer, class'NiceSkillCommandoTrashCleaner');
|
||||||
if(hasTrashCleaner){
|
if (hasTrashCleaner)
|
||||||
damageMod = FMin(
|
{
|
||||||
damageMod,
|
damageMod = FMin(damageMod, class'NiceSkillCommandoTrashCleaner'.default.decapitationMultiLimit);
|
||||||
class'NiceSkillCommandoTrashCleaner'.default.
|
|
||||||
decapitationMultiLimit
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return damageMod;
|
return damageMod;
|
||||||
}
|
}
|
||||||
|
|
||||||
function DealDecapDamage( int damage,
|
function DealDecapDamage( int damage,
|
||||||
Pawn instigatedBy,
|
Pawn instigatedBy,
|
||||||
Vector hitLocation,
|
Vector hitLocation,
|
||||||
|
@ -414,36 +414,47 @@ Begin:
|
|||||||
}
|
}
|
||||||
WhatToDoNext(99);
|
WhatToDoNext(99);
|
||||||
}
|
}
|
||||||
|
|
||||||
function bool SetEnemy( pawn newEnemy,
|
function bool SetEnemy( pawn newEnemy,
|
||||||
optional bool bHateMonster,
|
optional bool bHateMonster,
|
||||||
optional float MonsterHateChanceOverride){
|
optional float MonsterHateChanceOverride)
|
||||||
|
{
|
||||||
local NiceMonster niceZed;
|
local NiceMonster niceZed;
|
||||||
local NiceZombieFleshpound niceFP;
|
local NiceZombieFleshpound niceFP;
|
||||||
local bool bCanForceFight;
|
local bool bCanForceFight;
|
||||||
|
|
||||||
// Can we fight anything?
|
// Can we fight anything?
|
||||||
niceZed = NiceMonster(pawn);
|
niceZed = NiceMonster(pawn);
|
||||||
niceFP = NiceZombieFleshpound(niceZed);
|
niceFP = NiceZombieFleshpound(niceZed);
|
||||||
|
|
||||||
if (niceZed != none)
|
if (niceZed != none)
|
||||||
|
{
|
||||||
bCanForceFight =
|
bCanForceFight =
|
||||||
KFMonster(pawn).HeadHealth <= 0
|
KFMonster(pawn).HeadHealth <= 0
|
||||||
|| KFMonster(pawn).bDecapitated
|
|| KFMonster(pawn).bDecapitated
|
||||||
|| newEnemy.Health <= 15;
|
|| (newEnemy != none && newEnemy.Health <= 15);
|
||||||
|
}
|
||||||
|
|
||||||
if (niceFP != none && niceFP.IsInState('RageCharging'))
|
if (niceFP != none && niceFP.IsInState('RageCharging'))
|
||||||
bCanForceFight = false;
|
bCanForceFight = false;
|
||||||
|
|
||||||
if (newEnemy != none)
|
if (newEnemy != none)
|
||||||
bCanForceFight = bCanForceFight
|
bCanForceFight = bCanForceFight && newEnemy.Health > 0 && newEnemy != enemy;
|
||||||
&& newEnemy.Health > 0 && newEnemy != enemy;
|
|
||||||
else
|
else
|
||||||
bCanForceFight = false;
|
bCanForceFight = false;
|
||||||
|
|
||||||
// Do fight if we can
|
// Do fight if we can
|
||||||
if(bCanForceFight){
|
if(bCanForceFight)
|
||||||
|
{
|
||||||
ChangeEnemy(newEnemy, true);
|
ChangeEnemy(newEnemy, true);
|
||||||
FightEnemy(false);
|
FightEnemy(false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise - do the usual stupid stuff
|
// Otherwise - do the usual stupid stuff
|
||||||
return super.SetEnemy(newEnemy, bHateMonster, monsterHateChanceOverride);
|
return super.SetEnemy(newEnemy, bHateMonster, monsterHateChanceOverride);
|
||||||
}
|
}
|
||||||
|
|
||||||
simulated function AddKillAssistant(Controller PC, float damage){
|
simulated function AddKillAssistant(Controller PC, float damage){
|
||||||
local bool bIsalreadyAssistant;
|
local bool bIsalreadyAssistant;
|
||||||
local int i;
|
local int i;
|
||||||
|
Loading…
Reference in New Issue
Block a user