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; } } } }
static void makeCrystal(Vector2 pos, World world) { FatherBuilding build = (FatherBuilding)UnitConverter.CreateActor("Crystal", pos, world.Faction); build.OnWorkedOn(build.WorkNeeded); world.AddActor(build); }
void dropWall(Vector2 mPos) { if (building is Wall) { genWalls(wallStart.Value, Vector2.Transform(mPos, activeCam.GetUntransform())).ForEach(wall => Construct(wall)); wallStart = null; building = null; } }
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); } }
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); } }
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; } } }
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; } }
void cancelBuilding(Vector2 mPos) { building = null; wallStart = null; }
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; } } } }
//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(); } }