Advertisement
Guest User

Untitled

a guest
Mar 16th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class X2EventListener_Babes extends X2EventListener;
  2.  
  3. var localized string Babe1_FirstName;
  4. var localized string Babe1_LastName;
  5. var localized string Babe1_NickName;
  6. var localized string Babe1_Background;
  7.  
  8. var localized string Babe2_FirstName;
  9. var localized string Babe2_LastName;
  10. var localized string Babe2_NickName;
  11. var localized string Babe2_Background;
  12.  
  13. static function array<X2DataTemplate> CreateTemplates()
  14. {
  15.     local array<X2DataTemplate> Templates;
  16.  
  17.     Templates.AddItem(CreateTacticalListeners());
  18.  
  19.     return Templates;
  20. }
  21.  
  22. static function CHEventListenerTemplate CreateTacticalListeners()
  23. {
  24.     local CHEventListenerTemplate Template;
  25.  
  26.     `CREATE_X2TEMPLATE(class'CHEventListenerTemplate', Template, 'DukeBabeAppearanceChanger');
  27.     Template.AddCHEvent('OnTacticalBeginPlay', ChangeBabeAppearance);   //defaults to ELD Submitted
  28.     Template.RegisterInTactical = true;
  29.  
  30.     return Template;
  31. }
  32.  
  33. static protected function EventListenerReturn ChangeBabeAppearance(Object EventData, Object EventSource, XComGameState GameState, Name EventID, Object CallbackData)
  34. {
  35.     local XComTacticalMissionManager    MissionManager;
  36.     local XComGameState_Unit            UnitState;
  37.     local XComGameState_AIGroup         GroupState;
  38.     local XComGameStateHistory          History;
  39.     local XComGameState                 NewGameState;
  40.     local bool ChangedSomething;
  41.     local int i;
  42.  
  43.     MissionManager = `TACTICALMISSIONMGR;
  44.  
  45.     if (MissionManager.ActiveMission.sType == "DukeMission")
  46.     {
  47.         `LOG("Iridar UI Screen listener is triggered!",, 'IRIDAR');
  48.  
  49.         History = `XCOMHISTORY;
  50.         NewGameState = class'XComGameStateContext_ChangeContainer'.static.CreateChangeState("Changing Babes Appearance");
  51.         ChangedSomething = false;
  52.  
  53.         foreach History.IterateByClassType(class'XComGameState_AIGroup', GroupState)
  54.         {
  55.             if (GroupState.EncounterID == 'ResistanceTeamMember_VIP')
  56.             {
  57.                 if(GroupState.PrePlacedEncounterTag == 'ResistanceTeamMember_01')
  58.                 {
  59.                     for (i = 0; i < GroupState.m_arrMembers.Length; ++i)
  60.                     {
  61.                         //UnitState = XComGameState_Unit(History.GetGameStateForObjectID(GroupState.m_arrMembers[i].ObjectID));
  62.                         UnitState = XComGameState_Unit(NewGameState.ModifyStateObject(class'XComGameState_Unit', GroupState.m_arrMembers[i].ObjectID));
  63.                         if (UnitState != none)
  64.                         {
  65.                             `LOG("Found babe #1: " @ UnitState.GetFullName(),, 'IRIDARBABE');
  66.  
  67.                             SetUp_BabeAppearance(UnitState, 1, NewGameState);
  68.                             ChangedSomething = true;
  69.  
  70.                         }
  71.                     }
  72.                 }
  73.                
  74.                 if (GroupState.PrePlacedEncounterTag == 'ResistanceTeamMember_02')
  75.                 {
  76.                     for (i = 0; i < GroupState.m_arrMembers.Length; ++i)
  77.                     {
  78.                         //UnitState = XComGameState_Unit(History.GetGameStateForObjectID(GroupState.m_arrMembers[i].ObjectID));
  79.                         UnitState = XComGameState_Unit(NewGameState.ModifyStateObject(class'XComGameState_Unit', GroupState.m_arrMembers[i].ObjectID));
  80.                         if (UnitState != none)
  81.                         {
  82.                             `LOG("Found babe #1: " @ UnitState.GetFullName(),, 'IRIDARBABE');
  83.                            
  84.                             SetUp_BabeAppearance(UnitState, 2, NewGameState);
  85.                             ChangedSomething = true;
  86.                         }
  87.                     }
  88.                 }
  89.             }
  90.         }
  91.        
  92.         if (ChangedSomething)
  93.         {  
  94.             `LOG("Babe Appearance configured, submitting New Game State",, 'IRIDAR');
  95.  
  96.             //`CONTENT.RequestGameArchetype("FemaleVoice10_English.Voice_FemaleVoice10_English",,, true);
  97.  
  98.             `XCOMGAME.GameRuleset.SubmitGameState(NewGameState);
  99.             History.AddGameStateToHistory(NewGameState);   
  100.             //`PRES.m_kUnitFlagManager.Update();
  101.             //`PRES.m_kUnitFlagManager.ForceRefreshAllUnitFlags();
  102.             //`GAMERULES.SubmitGameState(NewGameState);
  103.         }
  104.     }
  105.     return ELR_NoInterrupt;
  106. }
  107.  
  108. static function SetUp_BabeAppearance(XComGameState_Unit UnitState, int iTwin, optional XComGameState GameState)
  109. {  
  110.     local XComUnitPawn          UnitPawn;
  111.     local XGUnit                Unit;
  112.     local XComGameState_Item    WeaponState;
  113.  
  114.     if (UnitState == none) `LOG("Babe UnitState is none, wtf",, 'IRIDAR');
  115.  
  116.     UnitState.kAppearance.nmPawn = 'XCom_Soldier_F';
  117.     UnitState.kAppearance.iGender = eGender_Female; //2;
  118.     UnitState.kAppearance.iRace = 0;
  119.     UnitState.kAppearance.nmHead = 'CaucFem_E';
  120.     UnitState.kAppearance.iSkinColor = 0;
  121.     UnitState.kAppearance.iEyeColor = 3;    //  blue
  122.     UnitState.kAppearance.iHairColor = 7; // blonde
  123.     UnitState.kAppearance.iAttitude = 4;    //  happy go lucky
  124.     UnitState.kAppearance.nmArms = '';
  125.     UnitState.kAppearance.nmBeard = '';
  126.     UnitState.kAppearance.nmArms_Underlay = 'CnvUnderlay_Std_Arms_A_M';
  127.     UnitState.kAppearance.nmLeftArmDeco = '';
  128.     UnitState.kAppearance.nmRightArmDeco = '';
  129.     UnitState.kAppearance.nmEye = 'DefaultEyes';
  130.     UnitState.kAppearance.nmFacePropUpper = 'Earring_F';
  131.     UnitState.kAppearance.nmPatterns = 'Pat_Nothing';
  132.     UnitState.kAppearance.nmHelmet = '';
  133.     UnitState.kAppearance.nmLeftForearm = '';
  134.     UnitState.kAppearance.nmRightForearm = '';
  135.     UnitState.kAppearance.nmThighs = '';
  136.     UnitState.kAppearance.nmShins = '';
  137.     UnitState.kAppearance.nmTattoo_LeftArm = 'Tattoo_Arms_BLANK';
  138.     UnitState.kAppearance.nmTattoo_RightArm = 'Tattoo_Arms_BLANK';
  139.     UnitState.kAppearance.nmTeeth = 'DefaultTeeth';
  140.     UnitState.kAppearance.iWeaponTint = 5;
  141.     UnitState.kAppearance.nmWeaponPattern = 'Pat_Nothing';
  142.     UnitState.kAppearance.nmVoice = 'FemaleVoice10_English_US';
  143.     UnitState.kAppearance.nmLegs = 'DLC_30_Legs_E_F';   //  "hot pants" - just shorts
  144.     UnitState.kAppearance.nmLegs_Underlay = 'DLC_30_Legs_E_F';
  145.  
  146.     //  eyeliner + soft red chopstick
  147.     if (DLCLoaded('KetarosMakeupsPackage'))
  148.     {
  149.         `LOG("KetarosMakeupsPackage is loaded",, 'IRIDARBABE');
  150.         UnitState.kAppearance.nmFacePaint = 'Makeup02';
  151.     }
  152.     //  Hairstyle
  153.     if (DLCLoaded('WOTC_Hair_Pack'))
  154.     {
  155.         `LOG("'WOTC_Hair_Pack is loaded",, 'IRIDARBABE');
  156.         UnitState.kAppearance.nmHaircut = 'DW_Sun_Bob'; //  Dynasty Warrior Sun
  157.     }
  158.     else
  159.     {
  160.         UnitState.kAppearance.nmHaircut = 'FemHair_M'; // Bob haircut
  161.     }
  162.  
  163.     //  clothes
  164.     if (DLCLoaded('WOTC_Female_Clothing_Pack'))
  165.     {
  166.         `LOG("WOTC_Female_Clothing_Pack is loaded",, 'IRIDARBABE');
  167.         UnitState.kAppearance.nmTorso = 'CNV_knot_F';   //  Torso Knot Shirt
  168.         UnitState.kAppearance.nmTorso_Underlay = 'CNV_knot_F';
  169.         UnitState.kAppearance.nmTorsoDeco = 'Rebel_Vest';
  170.         UnitState.kAppearance.nmFacePropLower = 'Necklace_01';
  171.         UnitState.kAppearance.nmLeftArm = 'CNV_Arm_L_Thin';
  172.         UnitState.kAppearance.nmRightArm = 'CNV_Arm_R_Thin';
  173.  
  174.         if (iTwin == 1)
  175.         {
  176.             UnitState.kAppearance.iArmorTint = 36//  blue
  177.             UnitState.kAppearance.iArmorTintSecondary = 96; //  white
  178.         }
  179.         if (iTwin == 2)
  180.         {
  181.             UnitState.kAppearance.iArmorTint = 7;   //  red
  182.             UnitState.kAppearance.iArmorTintSecondary = 96; //  white
  183.         }
  184.  
  185.         if (!DLCLoaded('DLC_1'))     // if no anarchy children DLC, which means no skimpy shorts
  186.         {
  187.             `LOG("DLC_1 is not loaded",, 'IRIDARBABE');
  188.             UnitState.kAppearance.nmLegs = 'Jeans_Ripped_Cnv'//  skimpy jeans + boots
  189.             UnitState.kAppearance.nmLegs_Underlay = 'Jeans_Ripped_Cnv';
  190.             UnitState.kAppearance.nmShins = 'Low_Boots';
  191.         }
  192.     }
  193.     else
  194.     {
  195.         `LOG("WOTC_Female_Clothing_Pack is not loaded",, 'IRIDARBABE');
  196.         UnitState.kAppearance.nmLeftArm = 'DLC_30_Arms_Left_Bare_F';
  197.         UnitState.kAppearance.nmRightArm = 'DLC_30_Arms_Right_Bare_F';
  198.         UnitState.kAppearance.nmTorso = 'DLC_30_Torso_F';   //  bare torso (bra only)
  199.         UnitState.kAppearance.nmTorso_Underlay = 'DLC_30_Torso_F';
  200.         UnitState.kAppearance.nmTorsoDeco = '';
  201.         UnitState.kAppearance.nmFacePropLower = '';
  202.  
  203.         if (iTwin == 1)
  204.         {
  205.             UnitState.kAppearance.iArmorTint = 69//  white
  206.             UnitState.kAppearance.iArmorTintSecondary = 49; //  blue-grey
  207.         }
  208.         if (iTwin == 2)
  209.         {
  210.             UnitState.kAppearance.iArmorTint = 69//  white
  211.             UnitState.kAppearance.iArmorTintSecondary = 81; //  dark red
  212.         }
  213.     }
  214.    
  215.  
  216.     if (iTwin == 1)
  217.     {
  218.         UnitState.SetCharacterName(default.Babe1_FirstName, default.Babe1_LastName, default.Babe1_NickName);
  219.         UnitState.SetCountry('Country_USA');
  220.         UnitState.SetBackground(default.Babe1_Background);
  221.     }
  222.     if (iTwin == 2)
  223.     {
  224.         UnitState.SetCharacterName(default.Babe2_FirstName, default.Babe2_LastName, default.Babe2_NickName);
  225.         UnitState.SetCountry('Country_USA');
  226.         UnitState.SetBackground(default.Babe2_Background);
  227.     }
  228.    
  229.     //  refreshes the pawn so that new appearance takes effect
  230.     //  thanks to Mr. Nice and robojumper and xymanek for this!
  231.     Unit = XGUnit(`XCOMHISTORY.GetVisualizer(UnitState.ObjectID));
  232.     UnitPawn = Unit.GetPawn();
  233.  
  234.     if (UnitPawn != None && Unit != none && GameState != none)  //  if there's a game state passed, it means we're patching babe appearance right during the mission
  235.     {                                                           //  so we need to re-Init their pawn and weapon.
  236.         //`LOG ("Refreshing unit pawn for: " @ UnitState.GetFullName(),, 'IRIDAR');
  237.  
  238.         Unit.Uninit();
  239.        
  240.         UnitPawn.SetAppearance(UnitState.kAppearance);
  241.        
  242.         Unit.Init(Unit.GetPlayer(), Unit.GetSquad(), UnitState);
  243.  
  244.         WeaponState = UnitState.GetItemInSlot(eInvSlot_PrimaryWeapon);
  245.         XGWeapon(WeaponState.FindOrCreateVisualizer(GameState)).Init(WeaponState);
  246.     }
  247.     UnitState.StoreAppearance();
  248. }
  249.  
  250.  
  251. static function bool DLCLoaded(name DLCName)
  252. {
  253.     local XComOnlineEventMgr    EventManager;
  254.     local int                   Index;
  255.  
  256.     EventManager = `ONLINEEVENTMGR;
  257.  
  258.     for(Index = EventManager.GetNumDLC() - 1; Index >= 0; Index--) 
  259.     {
  260.         if(EventManager.GetDLCNames(Index) == DLCName) 
  261.         {
  262.             return true;
  263.         }
  264.     }
  265.     return false;
  266. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement