예제 #1
0
    public static bool check_random_encounter(RandomEncounterQuery setup, RandomEncounter encounter)
    {
        if ((RandomRange(1, 20) == 1))
        {
            var r = RandomRange(1, 3);

            if ((r == 1))
            {
                encounter.Location = new locXY(470, 480);
            }
            else if ((r == 2))
            {
                encounter.Location = new locXY(503, 478);
            }
            else
            {
                encounter.Location = new locXY(485, 485);
            }

            if ((check_predetermined_encounter(setup, encounter)))
            {
                return(true);
            }
            else if ((check_unrepeatable_encounter(setup, encounter)))
            {
                return(true);
            }
            else
            {
                return(check_repeatable_encounter(setup, encounter));
            }
        }

        return(false);
    }
예제 #2
0
        public static RandomEncounter LoadRandomEncounter(BinaryReader reader)
        {
            RandomEncounter enc = new RandomEncounter();

            enc.PokemonID = reader.ReadInt32();
            enc.Chance    = reader.ReadSingle();
            enc.Group     = reader.ReadString();

            return(enc);
        }
예제 #3
0
 public static bool encounter_exists(RandomEncounterQuery setup, RandomEncounter encounter)
 {
     Logger.Info("Testing encounter_exists");
     if (((setup.Type == RandomEncounterType.Resting)))
     {
         return(check_sleep_encounter(setup, encounter));
     }
     else
     {
         return(check_random_encounter(setup, encounter));
     }
 }
예제 #4
0
        public override void OnWalkEnter(TileMetadata metadata, WorldState world, Point mapPos)
        {
            _latestMap    = world.Map;
            _walkedOn     = mapPos;
            _walkedOnTick = world.Game.TotalFixedUpdates;

            // if this map is a combat area we should just encounter enemies on every single tile
            if (!world.Map.Info.CombatArea)
            {
                RandomEncounter.TryRandomEncounter(world);
            }
        }
예제 #5
0
    void LoadEncounters()
    {
        XmlNode RootXml = MainController.Global.LoadXmlFile("RandomEncounters");

        foreach (XmlElement encounterelement in RootXml.ChildNodes)
        {
            RandomEncounter tempencounter = new RandomEncounter {
                name            = (encounterelement["name"] != null) ? encounterelement["name"].InnerText : null,
                func            = (encounterelement["function"] != null) ? encounterelement["function"].InnerText : null,
                scene           = (encounterelement["scene"] != null) ? encounterelement["scene"].InnerText : null,
                turnstillrepeat = (encounterelement["turnstillrepeat"] != null) ? int.Parse(encounterelement["turnstillrepeat"].InnerText) : 0
            };
        }
    }
예제 #6
0
        protected override void SetStringValue(string value)
        {
            var entries = value.Split(':');

            if (!this.Validate(entries, $"Malformed battle event \"{value}\".", e => (e.Length == 37 || e.Length == 19) && e[0] == "battle"))
            {
                return;
            }

            var newEncounter = new RandomEncounter {
                StringValue = value
            };

            this.Encounter = newEncounter;
        }
예제 #7
0
    public static bool check_sleep_encounter(RandomEncounterQuery setup, RandomEncounter encounter)
    {
        if ((RandomRange(1, 10) == 1))
        {
            encounter.Id = 4000;

            if ((SelectedPartyLeader.GetArea() == 1))
            {
                return(false);
            }
            else if ((SelectedPartyLeader.GetArea() == 2))
            {
                if ((SelectedPartyLeader.GetMap() == 5002))
                {
                    var enemy_list = new[] { (14057, 1, 3, 1), (14089, 2, 4, 1), (14291, 1, 4, 6), (14050, 2, 3, 1), (14094, 1, 2, 3), (14090, 2, 4, 1), (14056, 4, 9, 1), (14088, 1, 3, 1), (14047, 2, 4, 1), (14070, 2, 5, 1) };
예제 #8
0
 //for the temp object will copy all stats in prefab of that goblin pre set
 public void AddMember(Entity ent)
 {
     this.name            = ent.name;
     this.image           = ent.image;
     this.chanceEncounter = ent.chanceEncounter;
     this.role            = ent.role;
     this.weakness        = ent.weakness;
     this.invulnerable    = ent.invulnerable;
     this.weakness        = ent.weakness;
     this.level           = ent.level;
     this.hitPoints       = ent.hitPoints;
     this.maxHitPoints    = ent.maxHitPoints;
     this.damage          = ent.damage;
     this.magicDamage     = ent.magicDamage;
     this.specialDamage   = ent.specialDamage;
 }
예제 #9
0
        protected virtual void RollScene()
        {
            Encounter currentScene;

            //check trigger scenes, add them if not already in queue.
            foreach (var scene in triggerScenes)
            {
                if (scene.isActive && scene.isTriggered())
                {
                    triggered.Enqueue(scene);
                }
            }

            if (triggered.Count > 0)
            {
                currentScene = triggered.Dequeue();
            }
            //if we have no triggers, check for bad luck prevention.
            else
            {
                //set up the picker as a fallback.
                Lottery <Encounter> picker = new Lottery <Encounter>();

                //loop through the semi-randoms.
                foreach (var entry in semiRandomScenes)
                {
                    //ignore inactives.
                    if (!entry.Key.isActive)
                    {
                        continue;
                    }
                    //add any new items that are still active and proc our bad luck preventer.
                    else if (entry.Value >= entry.Key.numEncountersBeforeRequiringThis && !badLuckPreventerScene.Contains(entry.Key))
                    {
                        badLuckPreventerScene.Enqueue(entry.Key);
                    }
                    //only add them to the RNG lottery if we're actually going to use the RNG lottery - that is, we don't have any bad luck preventers taking priority.
                    else if (badLuckPreventerScene.Count == 0)
                    {
                        picker.AddItem(entry.Key, entry.Key.chances);
                    }
                }
                //do the first bad luck preventer if any exist.
                if (badLuckPreventerScene.Count > 0)
                {
                    currentScene = badLuckPreventerScene.Dequeue();
                }
                //if none exist
                else
                {
                    //finish adding the entries to the RNG lottery.
                    foreach (var scene in randomScenes)
                    {
                        if (scene.isActive)
                        {
                            picker.AddItem(scene, scene.chances);
                        }
                    }
                    //select an entry from the lottery.
                    currentScene = picker.Select();
                }
            }

            //run the scene.
            currentScene.RunEncounter();

            //if the scene is now complete, remove it from the hashset/dictionary that contains it.
            if (currentScene.isCompleted)
            {
                if (currentScene is TriggeredEncounter trigger)
                {
                    triggerScenes.Remove(trigger);
                }
                else if (currentScene is SemiRandomEncounter semiRandom)
                {
                    semiRandomScenes.Remove(semiRandom);
                    semiRandomContainer.Remove(semiRandom);
                }
                else
                {
                    RandomEncounter random = (RandomEncounter)currentScene;
                    randomScenes.Remove(random);
                }
            }

            //if the current scene was semi-random, reset its bad luck preventer count. otherwise,
            //increment the bad luck preventer for each scene.
            foreach (var entry in semiRandomScenes.Keys)
            {
                if (entry == currentScene)
                {
                    semiRandomScenes[entry] = 0;
                }
                else if (entry.isActive)
                {
                    semiRandomScenes[entry]++;
                }
            }
        }
예제 #10
0
 void Awake()
 {
     encounter = GetComponent <RandomEncounter>();
 }
예제 #11
0
 public static void SaveRandomEncounter(RandomEncounter enc, BinaryWriter writer)
 {
     writer.Write(enc.PokemonID);
     writer.Write(enc.Chance);
     writer.Write(enc.Group);
 }
예제 #12
0
    public static void encounter_create(RandomEncounter encounter)
    {
        Logger.Info("Testing encounter_create with id={0}", encounter.Id);
        var is_sleep_encounter = false;

        LocAndOffsets location;

        if ((encounter.Id >= 4000))
        {
            location           = SelectedPartyLeader.GetLocationFull();
            is_sleep_encounter = true;
        }
        else
        {
            location = new LocAndOffsets(encounter.Location);
        }

        var i = 0;

        var total = encounter.Enemies.Count;

        while ((i < total))
        {
            var j = 0;

            while ((j < encounter.Enemies[i].Count))
            {
                if (is_sleep_encounter)
                {
                    var party = new List <GameObject>();

                    foreach (var pc in GameSystems.Party.PartyMembers)
                    {
                        if (!pc.IsUnconscious())
                        {
                            party.Add(pc);
                        }
                    }

                    if (party.Count > 0)
                    {
                        location = party[i % party.Count].GetLocationFull();
                    }
                }

                var npc = GameSystems.MapObject.CreateObject(encounter.Enemies[i].ProtoId, location);

                if ((npc != null))
                {
                    npc.TurnTowards(SelectedPartyLeader);
                    if (((encounter.Id < 2000) || (encounter.Id >= 4000)))
                    {
                        npc.Attack(SelectedPartyLeader);
                        npc.SetNpcFlag(NpcFlag.KOS);
                    }
                }

                j = j + 1;
            }

            i = i + 1;
        }

        return;
    }
예제 #13
0
    public void BattleStart(RandomEncounter rEncounter)
    {
        //isBoss = GameObject.FindGameObjectWithTag("Boss").GetComponent<EncounterInstance>().BossStage;
        numberOfEnemies = Random.Range(0, 3); //roles a random number between 0-2 on how many enemies you will encounter where 0 = 1

        exploreCamera.SetActive(false);       //sets exploration player camera off
        battleCamera.SetActive(true);         //turns the battle camera on for a battle
        //encounteredEnemies = GetRandomEnemy(EnemiesInLocation(rEncounter)); //gets the enemy you will encounter

        //Debug.Log(encounteredEnemies.name);

        player.GetComponent <PlayerMove>().inCombat = true;        //makes it so player cant move in combat
        if (player.GetComponent <PlayerMove>().inCombat)
        {
            gameObject.GetComponent <BattleStateManager>().enabled = true;
            audio.clip = otherClip;
            audio.Play();
        }

        for (int i = 0; i < 3; i++)
        {
            //plPos = Instantiate(player.GetComponent<PlayerInfo>().allParty[i], playerBPosition[i].transform.position, Quaternion.identity) as GameObject; //places enemy in position 2
            player.GetComponent <PlayerInfo>().allParty[i].transform.position = playerBPosition[i].transform.position;
            //gets the player and player name
            battleCamera.GetComponent <BattleUI>().partyName[2 - i].text = player.GetComponent <PlayerInfo>().allParty[i].GetComponent <Entity>().Name;

            if (GameObject.FindGameObjectWithTag("Boss").GetComponent <EncounterInstance>().BossStage == true)
            {
                enPos = Instantiate(allEnemies[i], enemyBPosition[i].transform.position, Quaternion.identity) as GameObject; //places random enemy in enemy position
                encounteredEnemies.Add(enPos);                                                                               //adds Boss to list

                //gets the enemy targets name
                battleCamera.GetComponent <BattleUI>().targetName[i].text = i + 1 + ": " + enPos.GetComponent <Entity>().Name;
                StartCoroutine(DelaySpawn());
            }

            /*else if (i <= numberOfEnemies && isBoss == false)
             * {
             *      whichEnemy = Random.Range(0, 5); //roles a random number of which random enemy in list
             *      //Debug.Log(encounteredEnemies[whichEnemy].name);
             *      //enPos = Instantiate(encounteredEnemies[whichEnemy], enemyBPosition[i].transform.position, Quaternion.identity) as GameObject;
             *      Debug.Log(allEnemies[whichEnemy].name); //states what random enemy it is
             *      //encounteredEnemies.Add(allEnemies[whichEnemy]);
             *      //encounteredEnemies[i] = allEnemies[whichEnemy];
             *      enPos = Instantiate(allEnemies[whichEnemy], enemyBPosition[i].transform.position, Quaternion.identity) as GameObject; //places random enemy in enemy position
             *      encounteredEnemies.Add(enPos);	//adds random range of enemies to list
             *      //gets the enemy targets name
             *      battleCamera.GetComponent<BattleUI>().targetName[i].text = enPos.GetComponent<Entity>().Name;
             * }*/
        }


        /*
         * //rEncounter is based off of the tile and how it is set to uncommon, common, or epic and then the gameobjects themselves have encounter rates
         * encounteredEnemies = GetRandomEnemy(EnemiesInLocation(rEncounter)); //make this enemy random as well
         *
         * enPos = Instantiate(emptyPos2, enemyBPosition[0].transform.position, Quaternion.identity) as GameObject; //places enemy in position 2
         *
         * enPos.transform.parent = enemyBPosition[0]; //places the sprite where the enemy position 2 is
         * tempEnt = enPos.AddComponent<Entity>() as Entity; //temp entity in which it will switch between different goblins based off of encounter rate
         * tempEnt.AddMember(GetRandomEnemy(EnemiesInLocation(rEncounter)));
         * enPos.GetComponent<SpriteRenderer>().sprite = encounteredEnemies.image;
         */
    }
예제 #14
0
 private static bool test(RandomEncounter encounter)
 {
     return(encounter.isActive && !encounter.isCompleted);
 }
예제 #15
0
 public static bool AddRandomEncounter(RandomEncounter encounter)
 {
     return(randomEncounters.Add(encounter));
 }