private GameKeepComponent CreateKeepWall() { var dbKeep = new DBKeep(); var keep = new GameKeep(); keep.DBKeep = dbKeep; var keepComponent = new GameKeepComponent(); keepComponent.Skin = GuardPositionAtKeepWallTemplate.ComponentSkin; keepComponent.ComponentHeading = GuardPositionAtKeepWallTemplate.ComponentRotation; return(keepComponent); }
public override void SendWarmapUpdate(ICollection <IGameKeep> list) { if (m_gameClient.Player == null) { return; } using (GSTCPPacketOut pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.WarMapClaimedKeeps))) { int KeepCount = 0; int TowerCount = 0; foreach (AbstractGameKeep keep in list) { // New Agramon tower are counted as keep if (keep is GameKeep || (keep.KeepID & 0xFF) > 150) { KeepCount++; } else { TowerCount++; } } pak.WriteShort(0x0F00); pak.WriteByte((byte)KeepCount); pak.WriteByte((byte)TowerCount); byte albStr = 0; byte hibStr = 0; byte midStr = 0; byte albMagic = 0; byte hibMagic = 0; byte midMagic = 0; foreach (GameRelic relic in RelicMgr.getNFRelics()) { switch (relic.OriginalRealm) { case eRealm.Albion: if (relic.RelicType == eRelicType.Strength) { albStr = (byte)relic.Realm; } if (relic.RelicType == eRelicType.Magic) { albMagic = (byte)relic.Realm; } break; case eRealm.Hibernia: if (relic.RelicType == eRelicType.Strength) { hibStr = (byte)relic.Realm; } if (relic.RelicType == eRelicType.Magic) { hibMagic = (byte)relic.Realm; } break; case eRealm.Midgard: if (relic.RelicType == eRelicType.Strength) { midStr = (byte)relic.Realm; } if (relic.RelicType == eRelicType.Magic) { midMagic = (byte)relic.Realm; } break; } } pak.WriteByte(albStr); pak.WriteByte(midStr); pak.WriteByte(hibStr); pak.WriteByte(albMagic); pak.WriteByte(midMagic); pak.WriteByte(hibMagic); foreach (AbstractGameKeep keep in list) { int keepId = keep.KeepID; if (ServerProperties.Properties.USE_NEW_KEEPS == 1 || ServerProperties.Properties.USE_NEW_KEEPS == 2) { keepId -= 12; if ((keep.KeepID > 74 && keep.KeepID < 114) || (keep.KeepID > 330 && keep.KeepID < 370) || (keep.KeepID > 586 && keep.KeepID < 626) || (keep.KeepID > 842 && keep.KeepID < 882) || (keep.KeepID > 1098 && keep.KeepID < 1138)) { keepId += 5; } } int id = keepId & 0xFF; int tower = keep.KeepID >> 8; int map = (id / 25) - 1; int index = id - (map * 25 + 25); // Special Agramon zone if ((keep.KeepID & 0xFF) > 150) { index = keep.KeepID - 151; } int flag = (byte)keep.Realm; // 3 bits Guild guild = keep.Guild; string name = ""; // map is now 0 indexed pak.WriteByte((byte)(((map - 1) << 6) | (index << 3) | tower)); if (guild != null) { flag |= (byte)eRealmWarmapKeepFlags.Claimed; name = guild.Name; } //Teleport if (m_gameClient.Account.PrivLevel > (int)ePrivLevel.Player) { flag |= (byte)eRealmWarmapKeepFlags.Teleportable; } else { if (GameServer.KeepManager.FrontierRegionsList.Contains(m_gameClient.Player.CurrentRegionID) && m_gameClient.Player.Realm == keep.Realm) { GameKeep theKeep = keep as GameKeep; if (theKeep != null) { if (theKeep.OwnsAllTowers && !theKeep.InCombat) { flag |= (byte)eRealmWarmapKeepFlags.Teleportable; } } } } if (keep.InCombat) { flag |= (byte)eRealmWarmapKeepFlags.UnderSiege; } pak.WriteByte((byte)flag); pak.WritePascalString(name); } SendTCP(pak); } }