class ExtPawn_Customization extends KFPawn_Customization; 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 || bForce) { // 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(class'ExtCharacterInfo'.Static.SafeLoadObject(CharacterArch.VoiceGroupArchName, class'Class')); } } function bool Died(Controller Killer, class DamageType, vector HitLocation) { // Destroy this pawn if player leaves. Destroy(); return true; } simulated function PlayEmoteAnimation(optional bool bNewCharacter) { local name AnimName; local float BlendInTime; AnimName = class'ExtEmoteList'.static.GetUnlockedEmote( class'ExtEmoteList'.static.GetEquippedEmoteId(ExtPlayerController(Controller)), ExtPlayerController(Controller) ); BlendInTime = (bNewCharacter) ? 0.f : 0.4; // Briefly turn off notify so that PlayCustomAnim won't call OnAnimEnd (e.g. character swap) BodyStanceNodes[EAS_FullBody].SetActorAnimEndNotification( FALSE ); BodyStanceNodes[EAS_FullBody].PlayCustomAnim(AnimName, 1.f, BlendInTime, 0.4, false, true); BodyStanceNodes[EAS_FullBody].SetActorAnimEndNotification( TRUE ); } function AttachWeaponByItemDefinition( int ItemDefinition ) { local class WeaponDef; local int ItemINdex; local KFWeaponAttachment WeaponPreview; //find weapon def ItemIndex = class'ExtWeaponSkinList'.default.Skins.Find('Id', ItemDefinition); if(ItemIndex == INDEX_NONE) { `log("Could not find item" @ItemDefinition); return; } WeaponDef = class'ExtWeaponSkinList'.default.Skins[ItemIndex].WeaponDef; if(WeaponDef == none) { `log("Weapon def NONE for : " @ItemDefinition); return; } //load in and add object . WeaponPreview = KFWeaponAttachment ( DynamicLoadObject( WeaponDef.default.AttachmentArchtypePath, class'KFWeaponAttachment' ) ); //attatch it to player WeaponAttachmentTemplate = WeaponPreview; WeaponAttachmentChanged(); //setweapon skin WeaponAttachment.SetWeaponSkin(ItemDefinition); } defaultproperties { bCollideActors=false bBlockActors=false }