Exemple #1
0
        public static bool AddToTradingPost(int mo_id, int amount, int camp_id)
        {
            using (var db = new MinionWarsEntities())
            {
                MinionOwnership mo = db.MinionOwnership.Find(mo_id);
                if (mo.available < amount)
                {
                    return(false);
                }
                else
                {
                    Trading trade = new Trading();
                    trade.camp_id   = camp_id;
                    trade.owner_id  = mo.owner_id;
                    trade.amount    = amount;
                    trade.minion_id = mo.minion_id;

                    mo.group_count -= amount;
                    mo.available   -= amount;

                    db.Trading.Add(trade);
                    db.MinionOwnership.Attach(mo);
                    db.Entry(mo).State = System.Data.Entity.EntityState.Modified;

                    db.SaveChanges();
                }
            }

            return(true);
        }
Exemple #2
0
        private void CharacterBody_OnInventoryChanged(On.RoR2.CharacterBody.orig_OnInventoryChanged orig, CharacterBody self)
        {
            // This hook runs on Client and on Server
            orig(self);
            CharacterMaster master = self.master;

            if (!master)
            {
                return;
            }
            MinionOwnership minionOwnership = master.minionOwnership;

            if (!minionOwnership || minionOwnership.ownerMaster || FilterMinions(master))
            {
                return;
            }
            OptionMasterTracker masterTracker = master.GetOrAddComponent <OptionMasterTracker>();
            int newCount = GetCount(self);
            int oldCount = masterTracker.optionItemCount;
            int diff     = newCount - oldCount;

            if (diff != 0)
            {
                masterTracker.optionItemCount = newCount;
                Log.Message($"OnInventoryChanged: Master: {master.name}, OldCount: {oldCount}, NewCount: {newCount}, Difference: {diff}");
                if (diff > 0)
                {
                    LoopAllMinions(master, minion => OptionMasterTracker.SpawnOptions(minion, oldCount, newCount));
                }
                else
                {
                    LoopAllMinions(master, minion => OptionMasterTracker.DestroyOptions(minion, oldCount, newCount));
                }
            }
        }
Exemple #3
0
        public static bool BuildMinions(int ob_id, int user_id, int amount)
        {
            using (var db = new MinionWarsEntities())
            {
                OffensiveBuilding ob = db.OffensiveBuilding.Find(ob_id);

                List <MinionOwnership> mol = db.MinionOwnership.Where(x => x.owner_id == user_id && x.minion_id == ob.minion_id).ToList();
                if (mol.Count > 0)
                {
                    bool check = CostManager.ApplyMinionCosts(user_id, amount);
                    if (check)
                    {
                        MinionOwnership mo = mol.First();
                        mo.group_count += amount;
                        mo.available   += amount;
                    }
                    else
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
        public static bool RemoveMinions(int a_id)
        {
            using (var db = new MinionWarsEntities())
            {
                BattlegroupAssignment ba = db.BattlegroupAssignment.Find(a_id);
                if (ba != null)
                {
                    MinionOwnership mo = null;
                    Battlegroup     bg = db.Battlegroup.Find(ba.battlegroup_id);
                    mo            = db.MinionOwnership.Where(x => x.minion_id == ba.minion_id && x.owner_id == bg.owner_id).First();
                    mo.available += ba.group_count;

                    db.BattlegroupAssignment.Remove(ba);
                    db.MinionOwnership.Attach(mo);
                    db.Entry(mo).State = System.Data.Entity.EntityState.Modified;
                    db.SaveChanges();

                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
Exemple #5
0
        public static void AwardMinions(int user_id, int minion_id, int amount)
        {
            using (var db = new MinionWarsEntities())
            {
                MinionOwnership        mo   = null;
                List <MinionOwnership> list = db.MinionOwnership.Where(x => x.owner_id == user_id && x.minion_id == minion_id).ToList();
                if (list.Count > 0)
                {
                    mo              = list.First();
                    mo.group_count += amount;
                    mo.available   += amount;

                    db.MinionOwnership.Attach(mo);
                    db.Entry(mo).State = System.Data.Entity.EntityState.Modified;
                }
                else
                {
                    mo             = new MinionOwnership();
                    mo.group_count = 10;
                    mo.available   = 10;
                    mo.owner_id    = user_id;
                    mo.minion_id   = minion_id;

                    db.MinionOwnership.Add(mo);
                }

                db.SaveChanges();
            }
        }
Exemple #6
0
        public static string ProcessAddition(int?o_id, int?amount, int?line, int?bg_id, string name)
        {
            if (amount == null)
            {
                return("amount is null");
            }
            else if (line == null)
            {
                return("line is null");
            }
            else if (o_id == null)
            {
                return("ownership is null");
            }
            else if (bg_id == null && (name == null || name == ""))
            {
                return("bg error");
            }
            else
            {
                Battlegroup     bg = null;
                MinionOwnership mo = null;
                using (var db = new MinionWarsEntities())
                {
                    mo = db.MinionOwnership.Find(o_id);
                    if (mo.available < amount)
                    {
                        return("Too much minions");
                    }
                    else
                    {
                        if (name != null && name != "")
                        {
                            bg = BattlegroupManager.ConstructBattlegroup(mo.owner_id, 2, name);
                            db.Battlegroup.Add(bg);
                        }
                        else if (bg_id != null)
                        {
                            bg = db.Battlegroup.Find(bg_id.Value);
                        }

                        mo.available -= amount;
                        db.MinionOwnership.Attach(mo);
                        db.Entry(mo).State = System.Data.Entity.EntityState.Modified;

                        db.SaveChanges();
                    }
                }
                if (bg != null && mo != null)
                {
                    BattlegroupManager.AddMinions(mo.minion_id, amount.Value, line.Value, bg);
                }
            }

            return("ok");
        }
Exemple #7
0
 private void CheckMinions(MinionOwnership minion)
 {
     if (base.isUserAlive && base.meetsBodyRequirement)
     {
         if (minion != null)
         {
             MinionOwnership.MinionGroup group = minion.group;
             if (group != null)
             {
                 CharacterMaster playerMaster = base.localUser.cachedMasterController.master;
                 if (playerMaster != null)
                 {
                     if (group.ownerId == playerMaster.netId)
                     {
                         MinionOwnership[] minionArray = group.members;
                         if (minionArray != null)
                         {
                             int validDrones = 0;
                             foreach (MinionOwnership tempMinion in minionArray)
                             {
                                 if (tempMinion != null)
                                 {
                                     List <string> nameList = new List <string>();
                                     foreach (string tempName in validDroneNames)
                                     {
                                         nameList.Add(tempName + "Master(Clone)");
                                     }
                                     string droneName = tempMinion.name;
                                     if (nameList.Contains(droneName))
                                     {
                                         validDrones += 1;
                                     }
                                 }
                             }
                             if (validDrones >= 8)
                             {
                                 base.Grant();
                             }
                         }
                     }
                 }
             }
         }
     }
 }
        public CharacterMaster SummonDrone(CharacterBody attackerBody)
        {
            var transform = attackerBody.transform;

            // Spawn drone above player position
            Vector3 position = transform.position + Vector3.up * 3f;

            Util.PlaySound("Play_drone_repair", attackerBody.gameObject);

            CharacterMaster characterMaster = SummonMaster(
                Resources.Load <GameObject>("Prefabs/CharacterMasters/DroneBackupMaster"), position, transform.rotation, attackerBody);

            if (characterMaster)
            {
                MinionOwnership ownership       = characterMaster.GetComponent <MinionOwnership>();
                int             stageCount      = SacrificeRemix.GetStageCount();
                int             minStage        = stageCount - 1;
                int             maxStage        = stageCount + 2;
                int             minBaseStats    = stageCount - 1;
                int             maxBaseStats    = stageCount * 2;
                int             randomItemCount = Random.Range(minStage, maxStage);
                int             lifeTimerOffset = Random.Range(minStage, maxStage);

                // Attach to player
                if (ownership)
                {
                    ownership.SetOwner(attackerBody.master);
                }

                // Random items
                if (randomItemCount > 0)
                {
                    characterMaster.inventory.GiveRandomItems(randomItemCount);
                }

                // Base stats
                characterMaster.inventory.GiveItem(ItemIndex.BoostDamage, Random.Range(minBaseStats, maxBaseStats));
                characterMaster.inventory.GiveItem(ItemIndex.BoostHp, Random.Range(minBaseStats, maxBaseStats));

                // Drone lifetime
                characterMaster.gameObject.AddComponent <MasterSuicideOnTimer>().lifeTimer = 30f + lifeTimerOffset;
            }

            return(characterMaster);
        }
        private IEnumerator GetTurretMasterStuff()
        {
            yield return(new WaitForSeconds(3f));

            int i = 0;

            Debug.Log(i++);
            turretBody = transform.parent.GetComponent <CharacterBody>();
            Debug.Log(i++);
            turretMaster = turretBody.master;
            Debug.Log(i++);
            turretOwnership = turretMaster.minionOwnership;
            Debug.Log(i++);
            ownerMaster = turretOwnership.ownerMaster;
            Debug.Log(i++);
            prepared = true;
            Debug.Log(i++);
        }
Exemple #10
0
        public static void GenerateNewUserOwnership(int id)
        {
            for (int i = 0; i < 3; i++)
            {
                using (var db = new MinionWarsEntities())
                {
                    Minion minion = MinionGenotype.generateRandomMinion();

                    MinionOwnership mo = new MinionOwnership();
                    mo.owner_id    = id;
                    mo.group_count = 10;
                    mo.minion_id   = minion.id;
                    mo.available   = 10;

                    db.MinionOwnership.Add(mo);
                    db.SaveChanges();
                }
            }
        }
        // Token: 0x0600292F RID: 10543 RVA: 0x000AD948 File Offset: 0x000ABB48
        private void OnMinionGroupChangedGlobal(MinionOwnership minion)
        {
            int num = EngiArmyAchievement.requirement;

            MinionOwnership.MinionGroup group = minion.group;
            if (num <= ((group != null) ? group.memberCount : 0))
            {
                CharacterMaster master = base.localUser.cachedMasterController.master;
                if (!master)
                {
                    return;
                }
                NetworkInstanceId netId = master.netId;
                if (minion.group.ownerId == netId)
                {
                    base.Grant();
                }
            }
        }
Exemple #12
0
        private static void SetMemberTarget(MinionOwnership member, GameObject targetGameObject)
        {
            if (!member)
            {
                return;
            }
            BaseAI component = member.GetComponent <BaseAI>();

            if (!component)
            {
                return;
            }
            if (component.currentEnemy == null)
            {
                return;
            }

            if (targetGameObject)
            {
                component.currentEnemy.gameObject = targetGameObject;
            }
        }
Exemple #13
0
        /// <summary>
        /// Loops through the minions and fellow minions, then applies processing for each through an action.
        /// </summary>
        /// <param name="ownerOrMinion">Master of the minions or a fellow minion</param>
        /// <param name="logic">Code to apply for each minion</param>
        public static void LoopMinions(this CharacterMaster ownerOrMinion, Action <CharacterMaster> logic)
        {
            MinionOwnership thisMinionOwnership = ownerOrMinion.minionOwnership;

            if (!thisMinionOwnership)
            {
                return;
            }
            MinionOwnership[] minionOwnerships = Object.FindObjectsOfType <MinionOwnership>();
            foreach (MinionOwnership minionOwnership in minionOwnerships)
            {
                if (minionOwnership && minionOwnership.ownerMaster)
                {
                    bool ownerCondition  = !thisMinionOwnership.ownerMaster && minionOwnership.ownerMaster == ownerOrMinion;
                    bool minionCondition = thisMinionOwnership.ownerMaster && minionOwnership.ownerMaster == thisMinionOwnership.ownerMaster;
                    if (ownerCondition || minionCondition)
                    {
                        CharacterMaster minion = minionOwnership.GetComponent <CharacterMaster>();
                        logic(minion);
                    }
                }
            }
        }
Exemple #14
0
        private void CharacterBody_onBodyStartGlobal(CharacterBody obj)
        {
            CharacterMaster botMaster = obj.master;

            if (!botMaster)
            {
                return;
            }
            MinionOwnership minionOwnership = botMaster.minionOwnership;

            if (!minionOwnership)
            {
                return;
            }
            if (IsDroneSupported(botMaster))
            {
                CharacterMaster ownerMaster = botMaster.minionOwnership.ownerMaster;
                if (ownerMaster)
                {
                    BotStatTracker tracker = BotStatTracker.GetOrAddComponent(botMaster, ownerMaster, obj, ownerMaster.GetBody());
                    tracker.UpdateTrackerBoosts();
                }
            }
        }
        public void Awake()
        {
            ReadConfig();
            SetupArtifact();

            On.RoR2.CharacterMaster.OnBodyDeath += (orig, master, body) =>
            {
                bool couldrespawn = false;
                if (master.inventory.GetItemCount(RoR2Content.Items.ExtraLife) > 0)
                {
                    couldrespawn = true;
                }
                orig(master, body);
                if (!couldrespawn)
                {
                    DropStolenInventory(body);
                }
            };
            On.RoR2.CharacterBody.Start += (orig, body) =>
            {
                UpdateThiefBuff(body);
                orig(body);
            };
            //Enemy Item Pickup Related Hooks
            On.RoR2.GenericPickupController.BodyHasPickupPermission += (orig, body) =>
            {
                if (body.masterObject)
                {
                    if (body.inventory)
                    {
                        if (RunArtifactManager.instance.IsArtifactEnabled(Grief.artifactIndex) && EnemyCanPickup.Value)
                        {
                            MinionOwnership minionowner = body.master.minionOwnership;
                            if (!minionowner || !minionowner.ownerMaster)
                            {
                                return(true);
                            }
                        }
                        else if (body.masterObject.GetComponent <PlayerCharacterMasterController>())
                        {
                            TeamComponent component = body.GetComponent <TeamComponent>();
                            if (component && component.teamIndex == TeamIndex.Player)
                            {
                                return(true);
                            }
                        }
                    }
                }
                return(false);
            };
            On.RoR2.GenericPickupController.AttemptGrant += (orig, gpc, body) =>
            {
                orig(gpc, body);
                if (RunArtifactManager.instance.IsArtifactEnabled(Grief.artifactIndex) && EnemyCanPickup.Value)
                {
                    TeamComponent component = body.GetComponent <TeamComponent>();
                    if (component && component.teamIndex != TeamIndex.Player)
                    {
                        Inventory inventory = body.inventory;
                        if (inventory)
                        {
                            PickupDef pickupDef = PickupCatalog.GetPickupDef(gpc.pickupIndex);
                            if (pickupDef.itemIndex != ItemIndex.None)
                            {
                                gpc.gameObject.SetActive(false);
                                inventory.GiveItem(pickupDef.itemIndex, 1);
                                Chat.AddPickupMessage(body, ((pickupDef != null) ? pickupDef.nameToken : null) ?? PickupCatalog.invalidPickupToken, (pickupDef != null) ? pickupDef.baseColor : Color.black, 1);
                                if (body)
                                {
                                    Util.PlaySound("Play_UI_item_pickup", body.gameObject);
                                }
                                AddToStolenInventory(body, body.master.gameObject, pickupDef.itemIndex, 1);
                                UnityEngine.Object.Destroy(gpc.gameObject);
                            }
                        }
                    }
                }
            };
            //Setup Grief from Damage Report
            On.RoR2.CharacterBody.OnTakeDamageServer += (orig, charbody, damageReport) =>
            {
                orig(charbody, damageReport);
                if (RunArtifactManager.instance.IsArtifactEnabled(Grief.artifactIndex))
                {
                    if (charbody.master)
                    {
                        CharacterMaster master = charbody.master;
                        if (master.playerCharacterMasterController)
                        {
                            SetupGriefFromDamageReport(master, damageReport);
                        }
                    }
                }
            };
        }