Exemple #1
0
        static public object Rit_CurseRemoval(Thea2.Server.Group target, RitualsTask sourceTask)
        {
            if (target != null && target.characters != null)
            {
                SkillPack spp = (SkillPack)"SKILL_PACK-CURSE_P";
                SkillPack spm = (SkillPack)"SKILL_PACK-CURSE_M";
                SkillPack sps = (SkillPack)"SKILL_PACK-CURSE_S";

                foreach (var v in target.characters)
                {
                    var si = v.Get().GetSkillEffectOnCharacterMatchingSkillpack(spp);
                    if (si == null)
                    {
                        si = v.Get().GetSkillEffectOnCharacterMatchingSkillpack(spm);
                        if (si == null)
                        {
                            si = v.Get().GetSkillEffectOnCharacterMatchingSkillpack(sps);
                        }
                    }
                    if (si == null)
                    {
                        continue;
                    }

                    v.Get().LearnSkill(Character.SkillCategory.Effect, si.source, FInt.ONE, true, -1);
                }
            }
            return(null);
        }
Exemple #2
0
 static public object Rit_CreateTrollRock(Thea2.Server.Group target, RitualsTask sourceTask)
 {
     if (target != null && target.characters != null)
     {
         string sb = "SUBRACE-CRATE_TROLL_ROCK";
         Util_AddCharacter(target, sb);
     }
     return(null);
 }
Exemple #3
0
 static public object Rit_CreateBogBies(Thea2.Server.Group target, RitualsTask sourceTask)
 {
     if (target != null && target.characters != null)
     {
         string sb = "SUBRACE-CRATE_BOG_BIES";
         Util_AddCharacter(target, sb);
     }
     return(null);
 }
Exemple #4
0
 static public object Rit_CreateAlkonost(Thea2.Server.Group target, RitualsTask sourceTask)
 {
     if (target != null && target.characters != null)
     {
         string sb = "SUBRACE-CRATE_ALKONOST";
         Util_AddCharacter(target, sb);
     }
     return(null);
 }
Exemple #5
0
 static public object Rit_KnowledgeArmor(Thea2.Server.Group target, RitualsTask sourceTask)
 {
     if (target != null && target.characters != null)
     {
         Skill skill = (Skill)SKILL.KNOWLEDGE_ARMOR;
         Util_LearnSkillEffect(target, skill);
     }
     return(null);
 }
Exemple #6
0
 static public object Rit_EarthVision(Thea2.Server.Group target, RitualsTask sourceTask)
 {
     if (target != null && target.characters != null)
     {
         Skill skill = (Skill)SKILL.EARTH_VISION;
         Util_LearnSkillEffect(target, skill);
     }
     return(null);
 }
Exemple #7
0
 static public object Rit_ShouldersPower(Thea2.Server.Group target, RitualsTask sourceTask)
 {
     if (target != null && target.characters != null)
     {
         Skill skill = (Skill)SKILL.SHOULDERS_POWER;
         Util_LearnSkillEffect(target, skill);
     }
     return(null);
 }
Exemple #8
0
 static public object Rit_FireGift(Thea2.Server.Group target, RitualsTask sourceTask)
 {
     if (target != null && target.characters != null)
     {
         Skill skill = (Skill)SKILL.FIRE_GIFT;
         Util_LearnSkillEffect(target, skill);
     }
     return(null);
 }
Exemple #9
0
 static public object Rit_BlessSpiritual(Thea2.Server.Group target, RitualsTask sourceTask)
 {
     if (target != null && target.characters != null)
     {
         Skill skill = (Skill)SKILL.BLESS_S_RIT;
         Util_LearnSkillEffect(target, skill);
     }
     return(null);
 }
Exemple #10
0
        static public object Rit_HigherEducation(Thea2.Server.Group target, RitualsTask sourceTask)
        {
            if (target != null && target.characters != null)
            {
                FInt extraXp            = (FInt)3;
                FInt charactersInGroups = (FInt)target.characters.Count;
                FInt bonus = extraXp / charactersInGroups;

                foreach (var c in target.characters)
                {
                    c.Get().Xp = c.Get().Xp + bonus;
                }
            }
            return(null);
        }
Exemple #11
0
 static public object Rit_Celebration(Thea2.Server.Group target, RitualsTask sourceTask)
 {
     if (target != null && target.characters != null)
     {
         FInt newMorale = (FInt)40;
         foreach (Character c in target.characters)
         {
             if (c.attributes.GetFinal(TAG.MORALE) < newMorale)
             {
                 c.attributes.SetBaseTo(TAG.MORALE, newMorale);
             }
         }
     }
     return(null);
 }
Exemple #12
0
        static public object Rit_SummonPet(Thea2.Server.Group target, RitualsTask sourceTask)
        {
            if (target != null && target.characters != null)
            {
                DBClass t = Globals.GetInstanceFromDB("ITEM_CARGO-WEAK_ONE_RANDOM_DOMESTIC_PET");
                if (t != null)
                {
                    Type tp = t.GetType();

                    if (tp == typeof(ItemCargo))
                    {
                        CountEntityBase ceb = ItemBase.InstantaiteFrom(t as ItemCargo);
                        target.AddItem(ceb);
                    }
                }
            }
            return(null);
        }
Exemple #13
0
        static public object Rit_HealSHP(Thea2.Server.Group target, RitualsTask sourceTask)
        {
            if (target != null && target.characters != null)
            {
                Tag shp = (Tag)TAG.HEALTH_SPIRIT;
                foreach (var v in target.characters)
                {
                    FInt f   = v.Get().attributes.GetBase(shp);
                    FInt max = v.Get().maxSHP;
                    if (max.ToInt() == f.ToInt())
                    {
                        continue;
                    }

                    int heal  = Mathf.Max(1, max.ToInt() / 2);
                    int newHP = Mathf.Min(max.ToInt(), (f + heal).ToInt());

                    v.Get().attributes.SetBaseTo(shp, FInt.ONE * newHP);
                }
            }
            return(null);
        }
Exemple #14
0
        static public object Rit_RefreshUpgradeIdol(Thea2.Server.Group target, RitualsTask sourceTask)
        {
            if (target != null && target.items != null)
            {
                BuildingRecipe br = (BuildingRecipe)BUILD_REC.IDOL;

                var oldIdol = target.items.Find(o => o.GetItem().GetSource() == br);
                if (oldIdol == null)
                {
                    return(null);
                }

                var oldDemon = oldIdol.GetItem().superConnection;

                #region Create new idol
                List <ItemBase> ibs = ItemBase.items.Where(o =>
                                                           o.GetSource() == br &&
                                                           (o as ItemCrafted).recipeIngredientCount[0] == sourceTask.GetMaterial1Count() &&
                                                           (o as ItemCrafted).recipeIngreadients[0].Get() == sourceTask.GetMaterial1()).ToList();

                if (ibs.Count != 1)
                {
                    Debug.LogError("[ERROR]Number of options in upgrade idol is different than 1: " + ibs.Count);
                    return(null);
                }

                ItemCrafted ib    = ibs[0] as ItemCrafted;
                ItemBase    inst  = ib.Clone <ItemBase>(true);
                Skill       skill = null;
                if (br.skills != null)
                {
                    if (!SkillInstance.skillPacks.ContainsKey(br.skills))
                    {
                        Debug.LogError("[ERROR]Missing skillpack " + br.skills);
                        return(null);
                    }

                    List <Skill>           si            = SkillInstance.skillPacks[br.skills];
                    HashSet <Tag>          essences      = new HashSet <Tag>();
                    Dictionary <Tag, FInt> essenceCounts = new Dictionary <Tag, FInt>();
                    List <Skill>           valid         = new List <Skill>();

                    CountedResource material1 = null;
                    CountedResource material2 = null;
                    if (ib.recipeIngreadients.Length > 0)
                    {
                        material1 = new CountedResource();
                        material1.resourceName  = ib.recipeIngreadients[0].Get();
                        material1.resourceCount = ib.recipeIngredientCount[0];
                    }
                    if (ib.recipeIngreadients.Length > 1)
                    {
                        material2 = new CountedResource();
                        material2.resourceName  = ib.recipeIngreadients[1].Get();
                        material2.resourceCount = ib.recipeIngredientCount[1];
                    }

                    if (material1 != null)
                    {
                        foreach (var v in material1.resourceName.essences)
                        {
                            FInt count = new FInt(v.amount) * material1.resourceCount;
                            if (count <= 0)
                            {
                                continue;
                            }

                            essences.Add(v.tag);
                            essenceCounts[v.tag] = count;
                        }
                    }
                    if (material2 != null)
                    {
                        foreach (var v in material2.resourceName.essences)
                        {
                            FInt count = new FInt(v.amount) * material2.resourceCount;
                            if (count <= 0)
                            {
                                continue;
                            }

                            if (!essences.Contains(v.tag))
                            {
                                essences.Add(v.tag);
                            }

                            if (!essenceCounts.ContainsKey(v.tag))
                            {
                                essenceCounts[v.tag] = count;
                            }
                            else
                            {
                                essenceCounts[v.tag] += count;
                            }
                        }

                        if (essences.Count > 0)
                        {
                            Tag g = (Tag)TAG.ESSENCE_GRAY;
                            essences.Add(g);
                        }
                    }

                    foreach (var v in si)
                    {
                        bool b = true;
                        foreach (var e in v.baseEssence)
                        {
                            if (!essences.Contains(e.tag))
                            {
                                b = false;
                                break;
                            }
                        }

                        if (!b)
                        {
                            continue;
                        }

                        valid.Add(v);
                    }

                    if (valid.Count < 1)
                    {
                        Debug.LogError("[ERROR]No valid skill during upgrade of the idol in skillpack " + br.skills);
                        return(null);
                    }
                    skill = valid[0];
                }

                if (skill != null)
                {
                    inst.skill = SkillInstance.Instantiate(skill, inst);
                }
                #endregion
                #region Destroy old idol
                //destroy old idol
                var ceb = target.TakeItem(oldIdol.GetItem(), 1);
                ceb.GetItem().Destroy();
                #endregion

                //Add new idol
                var cebNewIdol = target.AddItem(inst, 1);

                //super connect with old demon to keep it alive if one was still there, otherwise it will create new one.
                if (oldDemon != null && oldDemon.Valid())
                {
                    cebNewIdol.GetItem().SuperConnectWith(oldDemon);
                }
            }

            return(null);
        }
Exemple #15
0
        static public object Rit_MoonBridge(Thea2.Server.Group target, RitualsTask sourceTask)
        {
            if (target.settlement)
            {
                return(null);
            }

            List <Thea2.Server.Group> groups        = GameInstance.Get().GetValidPlayerGroups();
            List <Thea2.Server.Group> visibleGroups = new List <Thea2.Server.Group>(groups);

            //visibleGroups.AddRange(groups);
            visibleGroups.AddRange(GameInstance.Get().GetEnemyGroups());

            List <Vector3i> groupsPos = new List <Vector3i>();
            List <Vector3i> range     = new List <Vector3i>();

            foreach (var g in groups)
            {
                //check if testing group is different than target group and if group owner is equal to target owner
                if (g != target && g.ownerID == target.ownerID)
                {
                    groupsPos.Add(g.Position);
                }
            }

            //sort groups positions from nearest to farthest position
            groupsPos.Sort(delegate(Vector3i a, Vector3i b)
            {
                int distA = HexCoordinates.HexDistance(target.Position, a);
                int distB = HexCoordinates.HexDistance(target.Position, b);
                return(distA.CompareTo(distB));
            });

            //find proper group to teleport to
            foreach (Vector3i v in groupsPos)
            {
                //teleport is possible in range up to 5 hexes from available group, check from nearest to farthest hexes
                //find hexes in range
                //can't teleport on water
                //check if hex is occupied by enemy group, settlement or camping
                for (int i = 0; i <= 5; i++)
                {
                    range = HexNeighbors.GetRange(v, i);
                    foreach (var hex in range)
                    {
                        if (World.IsLand(hex) && !GameInstance.Get().GetGroupsToTeleport().ContainsValue(hex))
                        {
                            List <Thea2.Server.Group> obstacles = visibleGroups.FindAll(o => o.Position == hex && (o.ownerID < 0 || o.settlement || o.camping));
                            if (obstacles.Count > 0)
                            {
                                continue;
                            }
                            GameInstance.Get().AddToTeleport(target.ID, hex);
                            return(null);
                        }
                    }
                }
            }

            return(null);
        }