public void SaveMonster(MonsterModel monsterInstance)
 {
     lock (collisionLock)
     {
         if (monsterInstance.monsterID != 0)
         {
             database.Update(monsterInstance);
             // return monsterInstance.Id;
         }
         else
         {
             database.Insert(monsterInstance);
         }
     }
 }
            return damage *  (rand.Next(4) + 1) + rand.Next(6); // For balance;

		// Prepare for next round
		public void Cycle(List<CreatureModel> list)
		{
			while (!battleObj.State)
			{
				if (list[0] is CharacterModel && battleObj.CharacterCombatants.Count > 1)
				{
					CharacterModel first = battleObj.CharacterCombatants[0];
					battleObj.CharacterCombatants.RemoveAt(0);
					battleObj.CharacterCombatants.Add(first);
				}

				if (list[0] is MonsterModel && battleObj.MonsterCombatants.Count > 1)
				{
					MonsterModel first = battleObj.MonsterCombatants[0];
					battleObj.MonsterCombatants.RemoveAt(0);
					battleObj.MonsterCombatants.Add(first);
				}
			}
		}
Ejemplo n.º 3
0
		public void ProcessBattle()
		{
            if (battleEventLoaded == false)
                return;
			// Have some interval
			battleCount++;
			if (battleCount < 10)
				return;

			GameModel gm = GameModel.Instance;

			// No targets
			if (offense == null)
			{
				// EndCheck
				if (gm.battleModel.party.Count == 0)
				{
					inBattle = false;
					DependencyService.Get<i_audio>().PlayAudioFile("lose.mp3");
					EndBattlePage(false);
					gm.AddCharToParty();
					gm.AddCharToParty(); // Add by 2
					return;
				}
				if (gm.battleModel.monsters.Count == 0)
				{
					inBattle = false;
					DependencyService.Get<i_audio>().PlayAudioFile("bestwin.mp3");
					gm.BattleVictory += 1;
					EndBattlePage(true);
					gm.AddCharToParty();
					gm.AddCharToParty(); // Add by 2
					return;
				}

				// Select objects
				if (charTurn)
				{
					offense = gm.battleModel.party[charOrder % gm.battleModel.party.Count];
					int target = rand.Next(gm.battleModel.monsters.Count);
					defense = gm.battleModel.monsters[target];
					charOrder++;
				}
				else
				{
					offense = gm.battleModel.monsters[monsterOrder % gm.battleModel.monsters.Count];
					int target = rand.Next(gm.battleModel.party.Count);
					defense = gm.battleModel.party[target];
					monsterOrder++;
				}
				charTurn = !charTurn;
				aniCount = 0;
			}
			else
			{
				aniCount++;
				double factor;
				double space = BattlePage.ImgSize * 0.7;
				if (!offense.isCharacter) space *= -1;

				if (aniCount <= 12)
				{
					factor = aniCount / 8.0;
				}
				else
				{
					int newCount = 24 - aniCount;
					factor = newCount / 8.0;
				}

				if (factor < 0.0) factor = 0.0;
				if (factor > 1.0) factor = 1.0;
				double aniX = offense.PositionX * (1 - factor) + (defense.PositionX - space) * factor;
				double aniY = offense.PositionY * (1 - factor) + defense.PositionY * factor;
				offense.SetPos(aniX, aniY);

				if (aniCount == 10)
				{
                    BattleEventStart();
					// Impact
					string msg;
                    int damage = 0;
                    if (offense.Creature.Magic && offense.isCharacter)
                    int damage = bc.GetDamage(offense.Creature, defense.Creature);

                    if (damage == 0)
                        msg = "Miss";
                    else if (damage == 1)
                    {
                        MagicController mc = new MagicController((CharacterModel)offense.Creature);
                        CharacterController cc = new CharacterController((CharacterModel)offense.Creature);
                        cc.buildMagicGrid();
                        List<MagicModel> magiclist = new List<MagicModel>();
                        foreach(string key in cc.magicList.Keys)
                        {
                            magiclist.Add(cc.magicList[key]);
                        }
                        Random rand = new Random();
                        int num = rand.Next(magiclist.Count);
                        MagicModel magic = magiclist[num];

                        // make a list of all the creatures
                        ObservableCollection<MonsterModel> mons = gm.Monsters;
                        List<CreatureModel> creaturelist = new List<CreatureModel>();
                        creaturelist.Add(defense.Creature);
                        foreach(CreatureModel c in mons)
                        {
                            if(!c.Equals(creaturelist[0]))
                            {
                                creaturelist.Add(c);
                                
                            }
                        }

                        Tuple<string, int, List<CreatureModel>> result = mc.UseMagic(magic.Name, creaturelist);
                        damage = result.Item2;
                        msg = result.Item1;
                        mons.Clear();

                        foreach(CreatureModel c in result.Item3)
                        {
                            mons.Add((MonsterModel)c);
                    }
					else
					{
                        if (offense.isCharacter)
                        {
                            CharacterModel character = (CadmusDND.CharacterModel)offense.Creature;
							//FIST FIGHT WITH DAMAGE 2 INFLICTED
							if (character.Inventory.Count == 0)
                                damage = 2;
							if (bc.isCritical())
							{
								msg = string.Format("{0} (CRITICAL)", damage);
							}
							else
							{
                                msg = string.Format("{0} (DAMAGE WITH FIST)", damage);
							}
                        }
                        else
                        {
                            if (bc.isCritical())
                            {
                                msg = string.Format("{0} (CRITICAL)", damage);
                            }
                            else
                            {
                                msg = string.Format("{0}", damage);
                            }
                        }

                        gm.Monsters = mons;

                     }

                    else
                    {
						damage = bc.GetDamage(offense.Creature, defense.Creature);
						if (damage == 0)
							msg = "Miss";
						else if (damage == 1)
						{
							msg = "Critical Miss";
							damage = 0;
							if (offense.isCharacter)
							{
								bool DiDShieldBreak = CriticalMissConsequence((CharacterModel)offense.Creature);
							}
						}
						else
						{
							if (bc.isCritical())
							{
								msg = string.Format("{0} (CRITICAL)", damage);
							}
							else
							{
								msg = string.Format("{0}", damage);
							}
						}
                    }

					DamageMessage(msg, defense.PositionX - space / 2 + 5, defense.PositionY);
					defense.CurHealth -= damage;
					if (defense.CurHealth <= 0)
					{
						CharacterModel cm = offense.Creature as CharacterModel;
						MonsterModel mm = defense.Creature as MonsterModel;
						if (cm != null)
						{
							cm.Experience += rand.Next(8) + 3;
							gm.MonsterKill += 1;
							if (mm != null)
							{
								gm.Gold += mm.Reward;
							}

							if (cm.Experience >= gm.GetExperience(cm.Level + 1))
							{
								leveled = true;
								List<int> lvl = gm.leveling;
								cm.Level = cm.Level + lvl[0];
								cm.Strength = cm.Strength + lvl[1];
								cm.Dexterity = cm.Dexterity + lvl[2];
								cm.Speed = cm.Speed + lvl[3];
								cm.Health = cm.Health + lvl[4];
							}

							cm.UpdateText();
						}
						Dying(defense);
					}
					BattleEventEnd();
				}

				if (aniCount == 24)
				{
					offense.SetPos();
					if (defense.CurHealth <= 0)
					{
						if (defense.isCharacter)
							gm.battleModel.party.Remove(defense);
						else
							gm.battleModel.monsters.Remove(defense);
					}
					offense = null;
					defense = null;
					aniCount = 0;
				}
			}
Ejemplo n.º 4
0
 public void SetMonster(MonsterModel mm)
 {
     isCharacter = false;
     Creature    = mm;
     CurHealth   = mm.Health;
 }