public void removeMonsterToBuilding()
    {
        if (FatherBuilding != null)
        {
            switch (reraty)
            {
            case "common":
            {
                FatherBuilding.GetComponent <MonstersDen>().CurrentCommons--;
                break;
            }

            case "rare":
            {
                FatherBuilding.GetComponent <MonstersDen>().CurrentRares--;
                break;
            }

            case "elite":
            {
                FatherBuilding.GetComponent <MonstersDen>().CurrentElits--;
                break;
            }

            case "boss":
            {
                FatherBuilding.GetComponent <MonstersDen>().CurrentBosses--;
                break;
            }
            }
        }
    }
Beispiel #2
0
        static void makeCrystal(Vector2 pos, World world)
        {
            FatherBuilding build = (FatherBuilding)UnitConverter.CreateActor("Crystal", pos, world.Faction);

            build.OnWorkedOn(build.WorkNeeded);
            world.AddActor(build);
        }
Beispiel #3
0
 void dropWall(Vector2 mPos)
 {
     if (building is Wall)
     {
         genWalls(wallStart.Value, Vector2.Transform(mPos, activeCam.GetUntransform())).ForEach(wall => Construct(wall));
         wallStart = null;
         building  = null;
     }
 }
Beispiel #4
0
        public void Build(FatherBuilding building)
        {
            ClearEngagement();

            engagement  = building;
            state       = UnitAIState.Building;
            forceEngage = true;
            aggressive  = false;
        }
    public void AddMonsterToBuilding(string Reraty)
    {
        if (FatherBuilding != null)
        {
            Gold      = 0;
            TotalGold = 0;
            int GoldWorth = 0;
            switch (Reraty)
            {
            case "common":
            {
                GoldWorth = Lvl * (Random.Range(1, 5) * 2);
                FatherBuilding.GetComponent <MonstersDen>().CurrentCommons++;
                Gold = GoldWorth;
                RecieveGold(GoldWorth);
                break;
            }

            case "rare":
            {
                GoldWorth = Lvl * (Random.Range(3, 7) * 2);
                FatherBuilding.GetComponent <MonstersDen>().CurrentRares++;
                Gold = GoldWorth;
                RecieveGold(GoldWorth);
                break;
            }

            case "elite":
            {
                GoldWorth = Lvl * (Random.Range(4, 10) * 2);
                FatherBuilding.GetComponent <MonstersDen>().CurrentElits++;
                Gold = GoldWorth;
                RecieveGold(GoldWorth);
                break;
            }

            case "boss":
            {
                GoldWorth = Lvl * (Random.Range(10, 15) * 2);
                FatherBuilding.GetComponent <MonstersDen>().CurrentBosses++;
                Gold = GoldWorth;
                RecieveGold(GoldWorth);
                break;
            }
            }
        }
        else
        {
            Destroy(this.gameObject);
        }
    }
Beispiel #6
0
        public TowerAI(FatherBuilding tower)
        {
            this.tower = tower;
            state      = BuildingAIState.Idleing;

            if (tower.RangedAttack != null)
            {
                rangeTimer            = new Timer(tower.RangedAttack.Period, true);
                rangeTimer.Triggered += new TimerEventHandler(rangeTimer_Triggered);
            }
            if (tower.MeleeAttack != null)
            {
                meleeTimer            = new Timer(tower.MeleeAttack.Period, true);
                meleeTimer.Triggered += new TimerEventHandler(meleeTimer_Triggered);
            }
        }
Beispiel #7
0
 void buildBuilding(Vector2 mPos)
 {
     if (building != null)
     {
         if (building is Wall)
         {
             //build walls
             wallStart = Vector2.Transform(mPos, activeCam.GetUntransform());
         }
         else
         {
             if (!buildingCollides)
             {
                 Construct(building);
             }
             building = null;
         }
     }
 }
Beispiel #8
0
        void keyUp(Microsoft.Xna.Framework.Input.Keys key)
        {
            switch (key)
            {
            case Keys.OemTilde:
                playerF.RevealAll = true;
                playerF.FOW.ActivateAll();
                break;

            case Keys.Escape:
                if (building != null || wallStart != null)
                {
                    building  = null;
                    wallStart = null;
                }
                else
                {
                    gameState.GameEngine.PopState();
                }
                break;

            case Keys.OemPlus:
                activeCam.Zoom *= 2f;
                break;

            case Keys.OemMinus:
                activeCam.Zoom /= 2f;
                break;

            case Keys.OemPipe: if (UIMan.AltDown && UIMan.CtrlDown)
                {
                    playerF.Resources.Metal += 1000; playerF.Resources.Crystal += 1000;
                }
                break;

            case Keys.A:
                foreach (Actor actor in activeUnits)
                {
                    if (actor is FatherUnit)
                    {
                        (actor as FatherUnit).IssueRangedAttack(Vector2.Transform(UIMan.GetMousePos(), activeCam.GetUntransform()));
                    }
                }
                break;

            case Keys.W:
                var gPos  = Vector2.Transform(UIMan.GetMousePos(), activeCam.GetUntransform());
                var uvPos = world.TileGrid.ScreenToUV(gPos);

                var centPos = world.TileGrid.UVToScreen(uvPos);
                var wall    = (FatherBuilding)UnitConverter.CreateActor("Wall", centPos, world.Faction);
                wall.OnWorkedOn(wall.WorkNeeded);
                world.AddActor(wall);

                break;

            case Keys.Home:
                ResourceManager.GraphicsDeviceManager.ToggleFullScreen();
                ResourceManager.GraphicsDeviceManager.ApplyChanges();
                break;

            case Keys.Y:
                vCom.Enabled = false;
                break;

            default:
                break;
            }
        }
Beispiel #9
0
 void cancelBuilding(Vector2 mPos)
 {
     building  = null;
     wallStart = null;
 }
Beispiel #10
0
 public void Build(FatherBuilding building)
 {
     throw new Exception("loool, bullets can't build!");
 }
    public override void TrueTakeDmg(float Dmg)
    {
        int num = Random.Range(0, 3);

        if (num >= 2 && takeingDmgSound.Length < 0)
        {
            int ran = Random.Range(0, takeingDmgSound.Length);
            Instantiate(takeingDmgSound[ran], this.gameObject.transform.position, transform.rotation);
        }

        float DmgDealt = Dmg;

        if (FloatingtextPrefab)
        {
            ShowFloatingtext();
        }
        if (DmgDealt <= 0)
        {
            DmgDealt = 0;
        }

        CurrentHP -= DmgDealt;
        if ((Monster == false && isSummon == false && Guard == false && Worker == false && Merchent == false))
        {
            if (isMyPanelOpen())
            {
                charData.updateText();
            }
        }
        LastDmgTaken = (int)DmgDealt;
        MyDmgDealt  += (int)DmgDealt;


        if (isSummon == false && !Monster)
        {
            analytics.OnDataChanged(this.gameObject, "Damage Dealt");//analytics
        }

        if (IWasHitBy != null)
        {
            float MyDmgDealt = IWasHitBy.GetComponent <NPC>().MyDmgDealt + DmgDealt;
        }

        if (CurrentHP <= 0)
        {
            IsDead = true;
            if (Worker || Guard || Merchent)
            {
                FatherBuilding.GetComponent <TownHall>().RemoveFromWork(this.gameObject);
            }

            if (Monster == true)
            {
                StartCoroutine(Die());
            }
            removeMonsterToBuilding();
            if (dieSound != null)
            {
                Instantiate(dieSound, this.gameObject.transform.position, transform.rotation);
            }
        }
        else if ((CurrentHP < HP) && (IsDead == false) && (RegenOn == false))
        {
            RegenOn = true;
            Regen   = StartCoroutine(Regeneration());
        }
    }
    private void Start()
    {
        HP        = Lvl * 20;
        CurrentHP = HP;
        Defence   = 1;
        //if (Monster == true || isSummon == true)
        //{
        //    Defence = Lvl * 7;
        //}

        if (isSummon)
        {
            STR = 0;
            DEX = 0;
            INT = 0;
        }
        UpdateAllStats(BaseSTR, BaseDEX, BaseINT);

        CurrentCritMulti  = BaseCritMulti;
        CurrentCritChance = BaseCritChance;
        CurrentMana       = MaxMana;



        if ((isSummon || Monster || Worker || Guard || Merchent) && FatherBuilding == null && MyKingdom == null)
        {
            TakeDmg(CurrentHP * 100);
            Die();
        }
        if (!isSummon)
        {
            UpdateEXP();
        }
        if (Monster)
        {
            AddMonsterToBuilding(this.reraty);
        }


        if (Monster == true && FatherBuilding == null)
        {
            Destroy(this.gameObject);
        }
        if (isSummon && FatherBuilding != null)
        {
            FatherBuilding.GetComponent <SummonCount>().summonsList.Add(this.gameObject);
        }
        ;

        if (!isSummon && !Monster && !Worker && !Guard && !Merchent)
        {
            AmIPL = false;
            Guild = "Not a Guild Memeber";
            CloseDisplay();
            PrevLvlXP     = 0;
            XpNeededToLvl = 10;
            Looted        = false;
            if (Lvl != 1)
            {
                UpdateEXP();
            }
            //analytics total
            MyDmgDealt      = 0;
            Kills           = 0;
            TotalGold       = 0;
            TotalObjectives = 0;
            TotalHealing    = 0;
        }
        if (isSummon)
        {
            FatherBuilding = SummonStats.TheCaster.gameObject;
            SummonStats.SkillAbility(this.gameObject);
            CharName = SummonType.ToString();

            if (FatherBuilding.tag != this.gameObject.tag)
            {
                SummonCounReduction();
                Destroy(this.gameObject);
            }

            if (FatherBuilding == null)
            {
                SummonCounReduction();
                Destroy(this.gameObject);
            }



            foreach (GameObject skill in skills)
            {
                skill.GetComponent <Skills>().npc = this;
            }

            //auto skill reset incase skills saves theyre cds
            for (int i = 0; i < skills.Length; i++)
            {
                if (skills[i].GetComponent <Skills>().Current_CoolDown > 0)
                {
                    skills[i].GetComponent <Skills>().Current_CoolDown = 0;
                }
                if (skills[i].GetComponent <Skills>().currentAmmo <= 0)
                {
                    skills[i].GetComponent <Skills>().currentAmmo = skills[i].GetComponent <Skills>().ammo;
                }
            }
        }
    }
Beispiel #13
0
        //time to wait between game finalized and game start
        void serverT_Update(GameTime obj)
        {
            //handle messages client->server
            NetIncomingMessage msg;

            //try
            //{
            while ((msg = server.ReadMessage()) != null)
            {
                switch (msg.MessageType)
                {
                case NetIncomingMessageType.ConnectionApproval:
                    if (serverState == ServerState.Lobby)
                    {
                        msg.SenderConnection.Approve();
                    }
                    else
                    {
                        msg.SenderConnection.Deny("sorry, this server has finalized");
                    }
                    break;

                case NetIncomingMessageType.DiscoveryRequest:
                    //
                    // Server received a discovery request from a client; send a discovery response (with no extra data attached)
                    //
                    if (serverState == ServerState.Lobby)
                    {
                        server.SendDiscoveryResponse(null, msg.SenderEndpoint);
                    }
                    break;

                case NetIncomingMessageType.VerboseDebugMessage:
                case NetIncomingMessageType.DebugMessage:
                case NetIncomingMessageType.WarningMessage:
                case NetIncomingMessageType.ErrorMessage:
                    //
                    // Just print diagnostic messages to console
                    //
                    Console.WriteLine(msg.ReadString());
                    break;

                case NetIncomingMessageType.StatusChanged:
                    NetConnectionStatus status = (NetConnectionStatus)msg.ReadByte();
                    if (status == NetConnectionStatus.Connected)
                    {
                        //
                        // A new player just connected!
                        //
                        Console.WriteLine(NetUtility.ToHexString(msg.SenderConnection.RemoteUniqueIdentifier) + " connected!");
                    }

                    break;

                case NetIncomingMessageType.Data:
                    //
                    // The client sent input to the server
                    //

                    NetOutgoingMessage om;
                    ushort             num;
                    ushort             id;
                    Vector2            targ;

                    switch ((MessageDataType)msg.ReadByte())
                    {
                    case MessageDataType.RequestFaction:
                        PlayerType pType = (PlayerType)msg.ReadByte();

                        byte factionID = (byte)MathHelper.GetUniqueID();

                        Faction newFaction = new Faction(factionID, world);
                        newFaction.Resources.Metal   = 0;
                        newFaction.Resources.Crystal = 0;
                        newFaction.SetVictory(ResourceManager.Resources["Conquest"]);
                        foreach (var fact in playerFactions)
                        {
                            fact.Register(newFaction, FactionRelationship.Hostile);
                        }
                        playerFactions.Add(newFaction);

                        newFaction.NotifyBuildingUnlocked += new BuildingUnlocked(newFaction_NotifyBuildingUnlocked);
                        newFaction.NotifyResearchUnlocked += new ResearchUnlocked(newFaction_NotifyResearchUnlocked);

                        msg.SenderConnection.Tag = factionID;         //store the factionID in the connection

                        var centUV = new Point(world.TileGrid.U_length / 2, world.TileGrid.V_length / 2);
                        //int rad = 10;
                        //var dispUV = new Point(MathHelper.Rand.Next(-rad, rad + 1), MathHelper.Rand.Next(-rad, rad + 1));
                        //var posUV = new Point(centUV.X + dispUV.X, centUV.Y + dispUV.Y);

                        var basePos = world.TileGrid.UVToScreen(new Point(world.TileGrid.U_length / 4 + MathHelper.Rand.Next(world.TileGrid.U_length / 2), world.TileGrid.V_length / 4 + MathHelper.Rand.Next(world.TileGrid.V_length / 2)));         //try to position closer to center than edges
                        //var basePos = world.TileGrid.UVToScreen(posUV);
                        //var basePos = world.TileGrid.UVToScreen(new Point(MathHelper.Rand.Next(world.TileGrid.U_length), MathHelper.Rand.Next(world.TileGrid.V_length)));
                        setupBase(basePos, pType, newFaction);         //set up a base

                        NetOutgoingMessage resp = server.CreateMessage();
                        resp.Write((byte)MessageDataType.FactionRegistered);
                        resp.Write((byte)pType);
                        resp.Write(factionID);
                        resp.Write(basePos);

                        server.SendMessage(resp, msg.SenderConnection, NetDeliveryMethod.ReliableUnordered);         //send factionID
                        break;

                    case MessageDataType.RequestFinalize:

                        if (serverState == ServerState.Lobby)
                        {
                            //do any last-minute things (maybe something with the map?)

                            serverState       = ServerState.Finalized;
                            gameFinalizedTime = DateTime.Now;

                            foreach (var player in server.Connections)
                            {
                                om = server.CreateMessage();
                                om.Write((byte)MessageDataType.GameFinalized);

                                //send final world infos
                                om.Write((byte)world.TileGrid.U_length);
                                om.Write((byte)world.TileGrid.V_length);
                                om.Write(world.TileGrid.HexSideLen);

                                om.Write(world.Faction.ID);

                                Faction pfact    = getFactionByID((byte)player.Tag);
                                var     hostiles = pfact.GetAllFactions(FactionRelationship.Hostile);
                                var     allies   = pfact.GetAllFactions(FactionRelationship.Allied);

                                //send all hostile factionIDs
                                om.Write((byte)hostiles.Count());
                                foreach (var f in hostiles)
                                {
                                    om.Write(f.ID);
                                }

                                //send all allied factionIDs
                                om.Write((byte)allies.Count());
                                foreach (var f in allies)
                                {
                                    om.Write(f.ID);
                                }

                                server.SendMessage(om, player, NetDeliveryMethod.ReliableUnordered);
                            }

                            world.NotifyActorRemoved += new ActorRemoved(world_NotifyActorRemoved);         //only subscribe to actorremove handler once game has been finalized (all bases and map has been set up)
                            world.NotifyActorAdded   += new ActorRemoved(world_NotifyActorAdded);


                            Console.WriteLine("GAME FINALIZED!");
                            Console.WriteLine("will start in " + startDelay.TotalSeconds + " seconds");
                        }
                        break;


                    case MessageDataType.SendClientPregameData:

                        //send entire world to sender
                        sendEntireWorld(msg.SenderConnection);

                        break;

                    case MessageDataType.SendActors:
                        targ = msg.ReadVector2();
                        num  = msg.ReadUInt16();

                        for (ushort i = 0; i < num; i++)
                        {
                            id = msg.ReadUInt16();
                            Actor actor = world.GetActorByID(id);
                            if (actor != null)
                            {
                                (actor as FatherUnit).Track(targ);
                            }
                        }

                        break;

                    case MessageDataType.SendActorsAggressive:
                        targ = msg.ReadVector2();
                        num  = msg.ReadUInt16();

                        for (ushort i = 0; i < num; i++)
                        {
                            id = msg.ReadUInt16();
                            Actor actor = world.GetActorByID(id);
                            if (actor != null)
                            {
                                (actor as FatherUnit).MayhamTrack(targ);
                            }
                        }

                        break;

                    case MessageDataType.SendActorsToBuild:
                        FatherBuilding targActor = world.GetActorByID(msg.ReadUInt16()) as FatherBuilding;
                        num = msg.ReadUInt16();

                        for (ushort i = 0; i < num; i++)
                        {
                            id = msg.ReadUInt16();
                            Actor actor = world.GetActorByID(id);
                            if (actor != null)
                            {
                                (actor as FatherUnit).AI.Build(targActor);
                            }
                        }

                        break;

                    case MessageDataType.EngageActor:
                        ushort engageID   = msg.ReadUInt16();
                        Actor  engagement = world.GetActorByID(engageID);

                        if (engagement != null)
                        {
                            num = msg.ReadUInt16();
                            for (ushort i = 0; i < num; i++)
                            {
                                id = msg.ReadUInt16();
                                Actor actor = world.GetActorByID(id);
                                if (actor != null)
                                {
                                    (actor as FatherUnit).AI.Engage(engagement);
                                }
                            }
                        }
                        break;

                    case MessageDataType.ActorMenuCommand:
                        id = msg.ReadUInt16();
                        int item = (int)msg.ReadByte();

                        world.GetActorByID(id).Menu.OnCommandInvoked(item);

                        break;

                    case MessageDataType.RequestBuildingConstruct:
                        string  type = msg.ReadString();
                        Vector2 pos  = msg.ReadVector2();
                        float   rot  = msg.ReadFloat();

                        Faction faction  = getFactionByID((byte)msg.SenderConnection.Tag);
                        Actor   newactor = UnitConverter.CreateActor(type, pos, faction);
                        newactor.Rotation = rot;
                        world.AddActor(newactor);
                        faction.Resources -= UnitConverter.CreateResourceData(ResourceManager.Resources[newactor.Type].Cost);

                        break;
                    }

                    break;
                }
                server.Recycle(msg);
            }
            //}
            //catch (Exception ex)
            //{
            //    Console.WriteLine("ERROR!! " + ex);
            //}


            if (serverState == ServerState.Finalized && (DateTime.Now - gameFinalizedTime) > startDelay)
            {
                serverState = ServerState.Started; //start the game after a delay
                Console.WriteLine("STARTING GAME!");

                NetOutgoingMessage om = server.CreateMessage();
                om.Write((byte)MessageDataType.GameStarting);
                server.SendToAll(om, NetDeliveryMethod.ReliableUnordered);
            }

            //broadcast updates, etc from server->client

            if (serverState == ServerState.Started)
            {
                foreach (var player in server.Connections)
                {
                    sendResourcesMsg(getFactionByID((byte)player.Tag), player);
                }

                foreach (var actor in world.GetActors())
                {
                    if ((actor is IChangeUpdate && (actor as IChangeUpdate).IsInvalid))
                    {
                        NetOutgoingMessage om = server.CreateMessage();
                        om.Write((byte)MessageDataType.ActorChangeUpdate);

                        writeUpdateActor(actor, om);

                        server.SendToAll(om, NetDeliveryMethod.ReliableUnordered);
                        (actor as IChangeUpdate).IsInvalid = false;
                    }
                    if (actor is IFullSynchronize)
                    {
                        NetOutgoingMessage om = server.CreateMessage();
                        om.Write((byte)MessageDataType.ActorUpdate);

                        writeUpdateActor(actor, om);

                        server.SendToAll(om, NetDeliveryMethod.Unreliable);
                    }
                }
            }
            if (serverState == ServerState.Ended)
            {
                Console.WriteLine("GAME OVER!");
                foreach (var player in server.Connections)
                {
                    sendGameOverMsg(getFactionByID((byte)player.Tag), player);
                }
                server.Shutdown("bye!");
                this.serverT.Stop();
            }
        }