KF2-Server-Extension/ServerExt/Classes/VS_ZedRecentZed.uc
2020-06-26 03:55:53 +03:00

161 lines
4.1 KiB
Ucode

class VS_ZedRecentZed extends VS_ZedClotBase;
var repnotify bool bWasWoken;
var transient float WakeUpAnimTime;
replication
{
if( true )
bWasWoken;
}
simulated function float StartAttackAnim( byte Num ) // Return animation duration.
{
if( FPHandModel!=None )
FPHandModel.PlayHandsAnim('Atk_Combo1_V3',1.5f);
return PlayBodyAnim('Atk_Combo1_V3',EAS_UpperBody,1.5f);
}
simulated event ReplicatedEvent(name VarName)
{
switch( VarName )
{
case 'bWasWoken':
if( bWasWoken )
WakeUp();
break;
default:
Super.ReplicatedEvent(VarName);
}
}
simulated function WakeUp() // Just spawned from transformed into a zombie.
{
bWasWoken = true;
bNoWeaponFiring = true;
WakeUpAnimTime = BodyStanceNodes[EAS_FullBody].PlayCustomAnim('Getup_Fast_F_V1',1.f);
SetTimer(WakeUpAnimTime,false,'GotUp');
GoToState('WakingUp');
}
simulated function GotUp()
{
if( Health<=0 )
return;
ClearTimer('GotUp');
bWasWoken = false;
bNoWeaponFiring = false;
if( WorldInfo.NetMode!=NM_Client )
{
if( ExtPlayerController(Controller)!=None )
ExtPlayerController(Controller).EnterRagdollMode(false);
else if( Controller!=None )
Controller.ReplicatedEvent('EndRagdollMove');
}
GoToState('Auto');
}
state WakingUp
{
Ignores TakeDamage, FaceRotation;
function UnPossessed()
{
Super.UnPossessed();
ClearTimer('GotUp');
KilledBy(None);
LifeSpan = 2.f;
}
}
simulated function NotifyTeamChanged()
{
// Applies Character Info for < ROLE_Authority
if( PlayerReplicationInfo != None )
SetCharacterArch(GetCharacterInfo());
}
simulated function SetCharacterAnimationInfo()
{
local KFCharacterInfo_Monster M;
Super.SetCharacterAnimationInfo();
// Keep monster animations.
M = KFCharacterInfo_Monster'ZED_ARCH.ZED_Clot_UnDev_Archetype';
Mesh.AnimSets = M.AnimSets;
if ( Mesh.AnimTreeTemplate != M.AnimTreeTemplate )
Mesh.SetAnimTreeTemplate(M.AnimTreeTemplate);
if ( M.AnimArchetype != None )
PawnAnimInfo = M.AnimArchetype;
}
simulated function KFCharacterInfoBase GetCharacterInfo()
{
if( ExtPlayerReplicationInfo(PlayerReplicationInfo)!=None )
return ExtPlayerReplicationInfo(PlayerReplicationInfo).GetSelectedArch();
return Super.GetCharacterInfo();
}
simulated function SetCharacterArch(KFCharacterInfoBase Info, optional bool bForce )
{
local KFPlayerReplicationInfo KFPRI;
KFPRI = KFPlayerReplicationInfo( PlayerReplicationInfo );
if (Info != CharacterArch)
{
// Set Family Info
CharacterArch = Info;
CharacterArch.SetCharacterFromArch( self, KFPRI );
class'ExtCharacterInfo'.Static.SetCharacterMeshFromArch( KFCharacterInfo_Human(CharacterArch), self, KFPRI );
class'ExtCharacterInfo'.Static.SetFirstPersonArmsFromArch( KFCharacterInfo_Human(CharacterArch), self, KFPRI );
SetCharacterAnimationInfo();
// Sounds
SoundGroupArch = Info.SoundGroupArch;
if (WorldInfo.NetMode != NM_DedicatedServer)
{
// refresh weapon attachment (attachment bone may have changed)
if (WeaponAttachmentTemplate != None)
{
WeaponAttachmentChanged(true);
}
}
if( CharacterArch != none )
{
if( CharacterArch.VoiceGroupArchName != "" )
VoiceGroupArch = class<KFPawnVoiceGroup>(class'ExtCharacterInfo'.Static.SafeLoadObject(CharacterArch.VoiceGroupArchName, class'Class'));
}
}
}
// Dont gore and gib because human chars don't support it.
simulated function HandlePartialGoreAndGibs(class<KFDamageType> DmgType,vector HitLocation,vector HitDirection,name HitBoneName,bool ObliterateGibs);
simulated function PlayHeadAsplode();
simulated function bool PlayDismemberment(int InHitZoneIndex, class<KFDamageType> InDmgType, optional vector HitDirection)
{
return false;
}
event OnRigidBodyLinearConstraintViolated(name StretchedBoneName);
simulated function ApplyHeadChunkGore(class<KFDamageType> DmgType, vector HitLocation, vector HitDirection);
defaultproperties
{
Health=300
HealthMax=300
FPHandOffset=(X=-35,Z=-60)
HitsPerAttack=1
HPScaler=0.4
MonsterArchPath="ZED_ARCH.ZED_Clot_UnDev_Archetype"
CharacterMonsterArch=KFCharacterInfo_Monster'ZED_ARCH.ZED_Clot_UnDev_Archetype'
GroundSpeed=700
MeleeDamage=35
// Stats
XPValues(0)=11
XPValues(1)=11
XPValues(2)=11
XPValues(3)=11
}