private void CharacterMaster_OnInventoryChanged(On.RoR2.CharacterMaster.orig_OnInventoryChanged orig, CharacterMaster self) { orig(self); var InventoryCount = GetCount(self); if (InventoryCount > 0) { var magnetObject = self.GetBody().GetComponentInChildren <MagnetManager>()?.gameObject; if (!magnetObject) { #if DEBUG TurboEdition._logger.LogWarning(ItemName + " " + self + "'s body didn't have a MagnetManager, creating one."); #endif magnetObject = UnityEngine.Object.Instantiate(magnetManager); magnetObject.GetComponent <MagnetManager>().ownerBody = self.GetBody(); magnetObject.GetComponent <MagnetManager>().NetLoS = useLoS; magnetObject.GetComponent <NetworkedBodyAttachment>().AttachToGameObjectAndSpawn(self.GetBody().gameObject); } //we update the radius after creating / finding out is already created #if DEBUG TurboEdition._logger.LogWarning(ItemName + " updating " + self + "'s body MagnetManager, with radius of " + attractInitial + (InventoryCount - 1) * attractStack); #endif magnetObject.GetComponent <MagnetManager>().NetRadius = attractInitial + ((InventoryCount - 1) * attractStack); magnetObject.GetComponent <MagnetManager>().NetDupChance = duplicationInitial + ((InventoryCount - 1) * duplicationStack); } }
private void CharacterMaster_TransformBody1(On.RoR2.CharacterMaster.orig_TransformBody orig, CharacterMaster self, string bodyName) { if (bodyName == "HereticBody" && self.GetComponent <BaseAI>()) { var newSummon = new MasterSummon() { ignoreTeamMemberLimit = true, inventoryToCopy = self.inventory, masterPrefab = Resources.Load <GameObject>("prefabs/charactermasters/hereticmonstermaster"), position = self.GetBody()?.footPosition ?? Vector3.zero, useAmbientLevel = true, teamIndexOverride = self.teamIndex }; var newMaster = newSummon.Perform(); return; } orig(self, bodyName); var body = self.GetBody(); if (body) { TeleportHelper.TeleportBody(body, Vector3.zero); body.healthComponent?.Suicide(); } }
// try and setup our character, if we hit an error we set it to false //TODO: Find a way to stop it from checking whilst in main menu/lobby menu private static void GetCharacter() { try { LocalNetworkUser = null; foreach (NetworkUser readOnlyInstance in NetworkUser.readOnlyInstancesList) { //localplayer == you! if (readOnlyInstance.isLocalPlayer) { LocalNetworkUser = readOnlyInstance; LocalPlayer = LocalNetworkUser.master; LocalPlayerInv = LocalPlayer.GetComponent <Inventory>(); //gets player inventory LocalHealth = LocalPlayer.GetBody().GetComponent <HealthComponent>(); //gets players local health numbers LocalSkills = LocalPlayer.GetBody().GetComponent <SkillLocator>(); //gets current for local character skills Localbody = LocalPlayer.GetBody().GetComponent <CharacterBody>(); //gets all stats for local character LocalMotor = LocalPlayer.GetBody().GetComponent <CharacterMotor>(); if (LocalPlayer.alive) { _CharacterCollected = true; } else { _CharacterCollected = false; } } } } catch (Exception e) { _CharacterCollected = false; } }
public EnemyData(CharacterMaster enemy) { var inventory = enemy.inventory; var healthComponent = enemy.GetBody().healthComponent; var deathRewards = enemy.GetBody().GetComponent <DeathRewards>(); transform = new SerializableTransform(enemy.GetBody().transform); enemyName = enemy.name.Replace("Master(Clone)", ""); teamIndex = (int)enemy.teamIndex; items = new int[(int)ItemIndex.Count]; for (int i = 0; i < (int)ItemIndex.Count; i++) { items[i] = inventory.GetItemCount((ItemIndex)i); } equipmentIndex = (int)inventory.GetEquipmentIndex(); health = (float)healthComponent.health; shields = (float)healthComponent.shield; if (deathRewards != null) { expReward = (int)deathRewards.expReward; goldReward = (int)deathRewards.goldReward; } isBoss = enemy.isBoss; }
private static void CCChangeTeam(ConCommandArgs args) { if (args.Count == 0) { Log.Message(MagicVars.TEAM_ARGS); return; } CharacterMaster master = args.sender.master; if (args.Count > 1) { NetworkUser player = GetNetUserFromString(args[1]); if (player != null) { master = player.master; } } if (Enum.TryParse(Alias.GetEnumFromPartial <TeamIndex>(args[0]).ToString(), true, out TeamIndex teamIndex)) { if ((int)teamIndex >= (int)TeamIndex.None && (int)teamIndex < (int)TeamIndex.Count) { if (master.GetBody()) { master.GetBody().teamComponent.teamIndex = teamIndex; master.teamIndex = teamIndex; Log.Message("Changed to team " + teamIndex); return; } } } //Note the `return` on succesful evaluation. Log.Message("Invalid team. Please use 0,'neutral',1,'player',2, or 'monster'"); }
public void Awake() { Chat.AddMessage("ResurrectOnLevelup Loaded!"); On.RoR2.GlobalEventManager.OnTeamLevelUp += (orig, self) => { orig(self); bool groupRevive = true; int connectedPlayers = PlayerCharacterMasterController.instances.Count; int index = 0; CharacterMaster[] deadPlayers = new CharacterMaster[connectedPlayers]; for (int i = 0; i < connectedPlayers; i++) { CharacterMaster character = PlayerCharacterMasterController.instances[i].master; if (!character.alive && !groupRevive) { deadPlayers[index] = character; index++; } else if (!character.alive && groupRevive) { character.Respawn(character.GetBody().footPosition, character.GetBody().transform.rotation); } } int luckyPlayerIndex = Run.instance.stageRng.RangeInt(0, index); if (!groupRevive) { CharacterMaster luckyPlayer = deadPlayers[luckyPlayerIndex]; luckyPlayer.Respawn(luckyPlayer.GetBody().footPosition, luckyPlayer.GetBody().transform.rotation); } }; }
IEnumerator TriggerInteractorBarrelInteraction(CharacterMaster master, int money) { yield return(new WaitUntil(() => master.GetBody() != null)); yield return(new WaitUntil(() => master.GetBody().gameObject.GetComponentInChildren <Interactor>() != null)); ShareSuiteMoneyFix(master.GetBody().gameObject.GetComponentInChildren <Interactor>(), money - Math.Abs((int)master.money)); }
private static void MMSpawnAs(ConCommandArgs args) { if (args.Count == 0) { return; } string character = GetBodyName(args[0]); if (character == null) { Debug.Log("Please use mmspawnlist to view all bodies"); return; } GameObject newBody = BodyCatalog.FindBodyPrefab(character); if (args.sender == null && args.Count < 2) { Debug.Log("Error"); return; } CharacterMaster master = args.sender?.master; if (args.Count > 1) { NetworkUser player = GetNetUserFromString(args.userArgs, 1); if (player != null) { master = player.master; } else { Debug.Log("User not found"); return; } } if (!master.GetBody()) { Debug.Log("User is dead"); return; } master.bodyPrefab = newBody; Debug.Log(args.sender.userName + " is spawning as " + character); RoR2.ConVar.BoolConVar stage1pod = ((RoR2.ConVar.BoolConVar)(typeof(Stage)).GetFieldCached("stage1PodConVar").GetValue(null)); bool oldVal = stage1pod.value; stage1pod.SetBool(false); master.Respawn(master.GetBody().transform.position, master.GetBody().transform.rotation); stage1pod.SetBool(oldVal); }
private void EnsureNameplateUpdated() { CharacterBody body = master.GetBody(); if (body && !string.IsNullOrWhiteSpace(NameToken) && !body.baseNameToken.Equals(NameToken)) { Debug.LogWarning($"Updating nameplate: {body.baseNameToken} => {NameToken}"); body.baseNameToken = NameToken; } }
private static void CCSpawnAs(ConCommandArgs args) { if (args.Count == 0) { Log.MessageNetworked(Lang.SPAWNAS_ARGS, args, LogLevel.MessageClientOnly); return; } string character = StringFinder.Instance.GetBodyName(args[0]); if (character == null) { Log.MessageNetworked(Lang.SPAWN_ERROR + args[0], args, LogLevel.MessageClientOnly); Log.MessageNetworked("Please use list_body to print CharacterBodies", args, LogLevel.MessageClientOnly); return; } GameObject newBody = BodyCatalog.FindBodyPrefab(character); if (args.sender == null && args.Count < 2) { Log.Message(Lang.DS_REQUIREFULLQUALIFY, LogLevel.Error); return; } CharacterMaster master = args.sender?.master; if (args.Count > 1) { NetworkUser player = Util.GetNetUserFromString(args.userArgs, 1); if (player != null) { master = player.master; } else { Log.MessageNetworked(Lang.PLAYER_NOTFOUND, args, LogLevel.MessageClientOnly); return; } } if (!master.GetBody()) { Log.MessageNetworked(Lang.PLAYER_DEADRESPAWN, args, LogLevel.MessageClientOnly); return; } master.bodyPrefab = newBody; Log.MessageNetworked(args.sender.userName + " is spawning as " + character, args); RoR2.ConVar.BoolConVar stage1pod = ((RoR2.ConVar.BoolConVar)(typeof(Stage)).GetFieldCached("stage1PodConVar").GetValue(null)); bool oldVal = stage1pod.value; stage1pod.SetBool(false); master.Respawn(master.GetBody().transform.position, master.GetBody().transform.rotation); stage1pod.SetBool(oldVal); }
public static void DropItem(CharacterMaster master, ItemIndex itemIndex) { var transform = master.GetBodyObject().transform; var dropVector = UnityEngine.Random.insideUnitCircle; PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(itemIndex), transform.position, new Vector3(dropVector.x, 0, dropVector.y) * 5f); master.inventory.RemoveItem(itemIndex); DropperChat.ItemDropMessage(master.GetBody().GetUserName(), itemIndex); var limits = master.GetComponent <InventoryLimits>(); DropperChat.ItemCountMessage(master.GetBody().GetUserName(), limits.amount, limits.limit); }
private void FindTarget() { this.targetFinder.teamMaskFilter = TeamMask.allButNeutral; this.targetFinder.teamMaskFilter.RemoveTeam(this.teamIndex); this.targetFinder.sortMode = BullseyeSearch.SortMode.Distance; this.targetFinder.filterByLoS = true; Ray ray = CameraRigController.ModifyAimRayIfApplicable(characterMaster.GetBody().inputBank.GetAimRay(), base.gameObject, out float num); this.targetFinder.searchOrigin = ray.origin; this.targetFinder.searchDirection = ray.direction; //this.targetFinder.maxAngleFilter = 10f; this.targetFinder.viewer = characterMaster.GetBody(); this.targetFinder.teamMaskFilter = TeamMask.GetUnprotectedTeams(teamIndex); }
public void PickupItems() { if (!master.inventory) { return; } List <GenericPickupController> pickups = InstanceTracker.GetInstancesList <GenericPickupController>(); for (int i = 0; i < pickups.Count; i++) { GenericPickupController pickup = pickups[i]; // Skip lunar coins if (pickup.pickupIndex.coinValue > 0) { continue; } // Skip these ItemDef def = ItemCatalog.GetItemDef(pickup.pickupIndex.itemIndex); if (def != null && def.tier == ItemTier.Lunar) { continue; } EquipmentIndex equipmentIndex = pickup.pickupIndex.equipmentIndex; if (equipmentIndex != EquipmentIndex.None) { if (EquipmentCatalog.GetEquipmentDef(equipmentIndex).isLunar) { continue; } if (master.inventory.currentEquipmentIndex != EquipmentIndex.None) { continue; } } if (pickup.GetInteractability(this.bodyInteractor) == Interactability.Available) { // Move to pickup item if within 60 meters float dist = PlayerBotUtils.GetFastDist(master.GetBody().transform.position, pickup.gameObject.transform.position); if (dist <= (60f * 60f)) { this.ai.customTarget.gameObject = pickup.gameObject; return; } } } }
private static void SpawnAs(NetworkUser user, string bodyString, string userString) { if (!SpawnAsEnabled.Value) { return; } CharacterMaster sender = user.master; if (HostOnlySpawnAsEnabled.Value) { if (NetworkUser.readOnlyInstancesList[0].netId != user.netId) { return; } } bodyString = bodyString.Replace("Master", ""); bodyString = bodyString.Replace("Body", ""); bodyString = bodyString + "Body"; NetworkUser player = GetNetUserFromString(userString); CharacterMaster master = player != null ? player.master : sender; if (!master.alive) { Debug.Log("Player is dead and cannot respawn."); return; } GameObject bodyPrefab = BodyCatalog.FindBodyPrefab(bodyString); if (bodyPrefab == null) { List <string> array = new List <string>(); foreach (var item in BodyCatalog.allBodyPrefabs) { array.Add(item.name); } string list = string.Join("\n", array); Debug.LogFormat("Could not spawn as {0}, Try: spawn_as GolemBody --- \n{1}", bodyString, list); return; } master.bodyPrefab = bodyPrefab; Debug.Log(master.GetBody().GetUserName() + " is spawning as " + bodyString); master.Respawn(master.GetBody().transform.position, master.GetBody().transform.rotation); }
private static void PPDoppel(ConCommandArgs args) //borrowed code from debugtoolkit { var beetles = UnityEngine.Object.FindObjectsOfType <UmbraBeetle>(); if (beetles.Length == 0) { GameObject masterPrefab = MasterCatalog.FindMasterPrefab("BeetleMaster"); GameObject bodyPrefab = masterPrefab.GetComponent <CharacterMaster>().bodyPrefab; var bodyGameObject = UnityEngine.Object.Instantiate <GameObject>(masterPrefab, args.sender.master.GetBody().transform.position, Quaternion.identity); var component = bodyGameObject.AddComponent <UmbraBeetle>(); CharacterMaster master = bodyGameObject.GetComponent <CharacterMaster>(); master.inventory.GiveItem(ItemIndex.InvadingDoppelganger); component.characterBody = master.GetBody(); NetworkServer.Spawn(bodyGameObject); master.SpawnBody(bodyPrefab, args.sender.master.GetBody().transform.position, Quaternion.identity); Debug.Log("Spawned umbra beetle"); } else { //UnityEngine.Object.DestroyImmediate(beetles[0].gameObject); beetles[0].Suicide(); Debug.Log("Destroyed umbra beetle"); } }
private void CharacterMaster_OnInventoryChanged(On.RoR2.CharacterMaster.orig_OnInventoryChanged orig, CharacterMaster self) { orig(self); if (self.hasBody) { if (self.GetBody().baseNameToken == "PALADIN_NAME") { Misc.PaladinSwordController swordComponent = self.GetBody().GetComponent <Misc.PaladinSwordController>(); if (swordComponent) { swordComponent.CheckInventory(); } } } }
private string GetTeamEntityLabel(CharacterBody teamEntity) { string victimLabel; if (!IsRealPlayer(teamEntity)) { if (MinionTogglesDisabled()) { return(null); } CharacterMaster minionOwner = TryResolveMinionOwnerMaster(teamEntity); if (minionOwner == null) { return(null); } victimLabel = ComposeMinionVictimLabel(teamEntity, minionOwner.GetBody()); } else { victimLabel = ComposePlayerVictimLabel(teamEntity); } return(victimLabel); }
private static void RevivalHook() { On.RoR2.Run.OnServerBossDefeated += (orig, self, bossGroup) => { orig(self, bossGroup); if (NetworkServer.active) { if (Enabled) { if (Run.instance && Run.instance.livingPlayerCount > 0) { foreach (NetworkUser networkUser in NetworkUser.readOnlyInstancesList) { if (networkUser.isActiveAndEnabled) { CharacterMaster master = networkUser.master; if (master.IsDeadAndOutOfLivesServer() || !master.GetBody() || !master.GetBody().healthComponent.alive) { RespawnAtDeathPoint(master); } } } } } } }; }
public void RespawnExtraLife() { Chat.AddMessage("Heros Never Die"); characterMaster.Respawn(this.deathFootPosition, Quaternion.Euler(0f, UnityEngine.Random.Range(0f, 360f), 0f), false); characterMaster.GetBody().AddTimedBuff(BuffIndex.Immune, 3f); GameObject gameObject = Resources.Load <GameObject>("Prefabs/Effects/HippoRezEffect"); BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Default | BindingFlags.DeclaredOnly; var prop_bodyInstanceObject = characterMaster.GetType().GetProperty("bodyInstanceObject", flags); GameObject bodyInstanceObject = prop_bodyInstanceObject.GetValue(characterMaster) as GameObject; if (bodyInstanceObject != null) { foreach (EntityStateMachine entityStateMachine in bodyInstanceObject.GetComponents <EntityStateMachine>()) { entityStateMachine.initialStateType = entityStateMachine.mainStateType; } if (gameObject) { EffectManager.instance.SpawnEffect(gameObject, new EffectData { origin = this.deathFootPosition, rotation = bodyInstanceObject.transform.rotation }, true); } } }
public void Update() { if (gameObject.GetComponent <CharacterMaster>() is CharacterMaster characterMaster) { trackerMaster = characterMaster; if (trackerMaster.GetBody() is CharacterBody characterBody) { trackerBody = characterBody; int tempCurseCount = 0; foreach (AffixTracker tracker in affixTrackers) { //If the buff is StageLock or CurseLock, give it to me if (tracker.isCurseLock || tracker.isStageLock) { //trackerBody.AddBuff(tracker.buffIndex); trackerBody.ApplyBuff(tracker.buffIndex, 1); } //If neither Lock, and also not Held nor Vulture, take it away else if (!tracker.isHeld && !tracker.isVultured) { //trackerBody.RemoveBuff(tracker.buffIndex); trackerBody.ApplyBuff(tracker.buffIndex, 0); } //Check is the buff is currently from Wake of Vultures if (tracker.isVultured) { //Reduce the amount of time and remove flag if no time left tracker.vultureTimeLeft -= Time.deltaTime; if (tracker.vultureTimeLeft <= 0) { tracker.isVultured = false; } } //Calculate the current curse count if (tracker.isCurseLock) { //If its cursed and neither staged nor held nor vultured, add a curse if (!tracker.isHeld && !tracker.isStageLock && !tracker.isVultured) { tempCurseCount++; } } } //Update curse count if its changed if (tempCurseCount != curseCount) { curseCount = tempCurseCount; //Chat.AddMessage("Current Curse Level is: " + curseCount.ToString()); } //Update the visual effect if needed if (trackerBody.GetBuffCount(CurseBuff.index) != curseCount) { trackerBody.ApplyBuff(CurseBuff.index, curseCount); } } } }
public void RespawnExtraLife(CharacterMaster master, float BuffTimer = 3f, CharacterMaster summoner = null) { var RespawnPosition = master.deathFootPosition; if (summoner) { RespawnPosition = summoner.GetBody().footPosition; } else if (master.killedByUnsafeArea) { RespawnPosition = (TeleportHelper.FindSafeTeleportDestination(master.deathFootPosition, master.bodyPrefab.GetComponent <CharacterBody>(), RoR2Application.rng) ?? master.deathFootPosition); } master.Respawn(RespawnPosition, Quaternion.Euler(0f, UnityEngine.Random.Range(0f, 360f), 0f)); master.GetBody().AddTimedBuff(RoR2Content.Buffs.Immune, BuffTimer); GameObject gameObject = Resources.Load <GameObject>("Prefabs/Effects/HippoRezEffect"); if (master.bodyInstanceObject) { foreach (EntityStateMachine entityStateMachine in master.bodyInstanceObject.GetComponents <EntityStateMachine>()) { entityStateMachine.initialStateType = entityStateMachine.mainStateType; } if (gameObject) { EffectManager.SpawnEffect(gameObject, new EffectData { origin = RespawnPosition, rotation = master.bodyInstanceObject.transform.rotation }, true); } } }
private static void CCTestBots(ConCommandArgs args) { if (Stage.instance == null) { return; } NetworkUser user = args.sender; foreach (GameObject gameObject in playerbots) { CharacterMaster master = gameObject.GetComponent <CharacterMaster>(); AIOwnership aiOwnership = gameObject.GetComponent <AIOwnership>(); string name = master.GetBody().GetDisplayName(); if (aiOwnership.ownerMaster) { Debug.Log(name + "'s master: " + aiOwnership.ownerMaster.GetBody().GetUserName()); } else { Debug.Log(name + " has no master"); } Debug.Log(name + "'s money: " + master.money); } }
private void CharacterMaster_RespawnExtraLife(On.RoR2.CharacterMaster.orig_RespawnExtraLife orig, CharacterMaster self) { orig(self); if (playersToRespawn.Contains(self)) { playersToRespawn.Remove(self); var characterBody = self.GetBody(); CharacterBody component = characterBody; if (component) { var count = component.GetBuffCount(InitBuffs.maxHPDownStage); var added_count = (int)Mathf.Ceil(((100f - (float)component.GetBuffCount(InitBuffs.maxHPDownStage)) / 100f) * (float)purchaseInteraction.cost); //Debug.Log(count + added_count); if (count + added_count < 100) { for (var i = 0; i < added_count; i++) { component.AddBuff(InitBuffs.maxHPDownStage); } } } } }
// Token: 0x060025DA RID: 9690 RVA: 0x000AFCF4 File Offset: 0x000ADEF4 private static void OnCharacterDeath(DamageReport damageReport) { if (!damageReport.victim) { return; } CharacterBody component = damageReport.victim.GetComponent <CharacterBody>(); if (!component || !component.isChampion || !component.isElite) { return; } foreach (HardEliteBossKillAchievement.EliteBossKillServerAchievement eliteBossKillServerAchievement in HardEliteBossKillAchievement.EliteBossKillServerAchievement.instancesList) { GameObject masterObject = eliteBossKillServerAchievement.serverAchievementTracker.networkUser.masterObject; if (masterObject) { CharacterMaster component2 = masterObject.GetComponent <CharacterMaster>(); if (component2) { CharacterBody body = component2.GetBody(); if (body && body.healthComponent && body.healthComponent.alive) { eliteBossKillServerAchievement.Grant(); } } } } }
private static void CCTpBots(ConCommandArgs args) { NetworkUser user = args.sender; if (Stage.instance == null || user.master == null || user.master.IsDeadAndOutOfLivesServer()) { return; } foreach (GameObject gameObject in playerbots) { if (gameObject) { CharacterMaster master = gameObject.GetComponent <CharacterMaster>(); if (!master.IsDeadAndOutOfLivesServer()) { TeleportHelper.TeleportGameObject(master.GetBody().gameObject, new Vector3( user.master.GetBody().transform.position.x, user.master.GetBody().transform.position.y, user.master.GetBody().transform.position.z )); } } } }
public static void SendRichCauldronMessage(CharacterMaster player, PickupIndex index) { var body = player.hasBody ? player.GetBody() : null; if (!GeneralHooks.IsMultiplayer() || body == null || !ShareSuite.RichMessagesEnabled.Value) { SendPickupMessage(player, index); return; } var pickupDef = PickupCatalog.GetPickupDef(index); var pickupColor = pickupDef.baseColor; var pickupName = Language.GetString(pickupDef.nameToken); var playerColor = GetPlayerColor(player.playerCharacterMasterController); var pickupMessage = $"<color=#{playerColor}>{body.GetUserName()}</color> <color=#{GrayColor}>traded for</color> " + $"<color=#{ColorUtility.ToHtmlStringRGB(pickupColor)}>" + $"{pickupName ?? "???"}</color><color=#{GrayColor}>.</color>"; Chat.SendBroadcastChat(new Chat.SimpleChatMessage { baseToken = pickupMessage }); }
private void AllySquad_onMemberLost(CharacterMaster master) { string[] standardDeathQuoteTokens = (string[])typeof(GlobalEventManager) .GetField("standardDeathQuoteTokens", BindingFlags.Static | BindingFlags.NonPublic) .GetValue(null); Chat.SendBroadcastChat(new Chat.PlayerDeathChatMessage { subjectAsCharacterBody = master.GetBody(), baseToken = standardDeathQuoteTokens[Random.Range(0, standardDeathQuoteTokens.Length)] }); if (allySquad.memberCount == 0) { foreach (var controller in PlayerCharacterMasterController.instances) { CharacterMaster characterMaster = controller.master; if (!characterMaster.IsDeadAndOutOfLivesServer()) { CharacterBody characterBody = characterMaster.GetBody(); if (characterBody) { EffectManager.SpawnEffect(Resources.Load <GameObject>("Prefabs/Effects/BrittleDeath"), new EffectData { origin = characterBody.corePosition, rotation = Quaternion.identity, scale = characterBody.bestFitRadius * 2f }, true); } characterMaster.TrueKill(null, null, DamageType.VoidDeath); } } TriggerGameOver(); } }
private static void CreateEclipseDoppelganger(CharacterMaster master, Xoroshiro128Plus rng) { var card = DoppelgangerSpawnCard.FromMaster(master); if (card is null) { return; } if (card.prefab is null) { card.prefab = MasterCatalog.GetMasterPrefab(defaultMasterIndex); } Transform spawnOnTarget; DirectorCore.MonsterSpawnDistance input; if (TeleporterInteraction.instance) { spawnOnTarget = TeleporterInteraction.instance.transform; input = DirectorCore.MonsterSpawnDistance.Close; } else { spawnOnTarget = master.GetBody().coreTransform; input = DirectorCore.MonsterSpawnDistance.Far; } DirectorPlacementRule directorPlacementRule = new DirectorPlacementRule { spawnOnTarget = spawnOnTarget, placementMode = DirectorPlacementRule.PlacementMode.NearestNode }; DirectorCore.GetMonsterSpawnDistance(input, out directorPlacementRule.minDistance, out directorPlacementRule.maxDistance); DirectorSpawnRequest directorSpawnRequest = new DirectorSpawnRequest(card, directorPlacementRule, rng); directorSpawnRequest.teamIndexOverride = new TeamIndex?(TeamIndex.Monster); directorSpawnRequest.ignoreTeamMemberLimit = true; CombatSquad squad = null; DirectorSpawnRequest directorSpawnRequest2 = directorSpawnRequest; directorSpawnRequest2.onSpawnedServer = DelegateHelper.Combine(directorSpawnRequest2.onSpawnedServer, (res) => { if (squad is null) { squad = UnityEngine.Object.Instantiate <GameObject>(Resources.Load <GameObject>("Prefabs/NetworkedObjects/Encounters/ShadowCloneEncounter")).GetComponent <CombatSquad>(); } squad.AddMember(res.spawnedInstance.GetComponent <CharacterMaster>()); }); DirectorCore.instance.TrySpawnObject(directorSpawnRequest); if (squad is not null) { NetworkServer.Spawn(squad.gameObject); } UnityEngine.Object.Destroy(card); }
private static void CCSpawnAs(ConCommandArgs args) { if (args.Count == 0) { return; } string bodyString = ArgsHelper.GetValue(args.userArgs, 0); string playerString = ArgsHelper.GetValue(args.userArgs, 1); var character = Character.GetCharacter(bodyString); if (character == null) { Debug.LogFormat("Could not spawn {0}, Try: spawn_ai GolemBody", character.body); return; } NetworkUser player = GetNetUserFromString(playerString); CharacterMaster master = player != null ? player.master : args.sender.master; if (!master.alive) { Debug.Log("Player is dead and cannot respawn."); return; } GameObject newBody = BodyCatalog.FindBodyPrefab(character.body); if (newBody == null) { List <string> array = new List <string>(); foreach (var item in BodyCatalog.allBodyPrefabs) { array.Add(item.name); } string list = string.Join("\n", array); Debug.LogFormat("Could not spawn as {0}, Try: spawn_as GolemBody --- \n{1}", character.body, list); return; } master.bodyPrefab = newBody; Debug.Log(args.sender.userName + " is spawning as " + character.body); master.Respawn(master.GetBody().transform.position, master.GetBody().transform.rotation); }
IEnumerator WaitForStart(CharacterMaster enemy) { yield return(null); var healthComponent = enemy.GetBody().healthComponent; healthComponent.health = health; healthComponent.shield = shields; var deathRewards = enemy.GetBody().GetComponent <DeathRewards>(); if (deathRewards != null) { deathRewards.expReward = (uint)expReward; deathRewards.goldReward = (uint)goldReward; } }