BuildingPrivlidge GetCupboard(BaseCombatEntity ent) { var position = ent.GetNetworkPosition(); List <SphereCollider> colliders = new List <SphereCollider>(); Vis.Colliders(position, cupboardRadius, colliders, -1, QueryTriggerInteraction.Collide); var privlidges = colliders.Where(p => p.transform.parent?.name == "assets/prefabs/deployable/tool cupboard/cupboard.tool.deployed.prefab").ToList(); if (privlidges.Count > 0) { return(privlidges[0].transform.parent.GetComponent <BuildingPrivlidge>()); } return(null); }
void OnEntityDeath(BaseCombatEntity entity, HitInfo info) { if (!(entity is BuildingBlock) && !(entity is Door) && !entity.ShortPrefabName.Contains("external.high.")) { return; } var player = info?.InitiatorPlayer; if (player == null) { return; } if (PermissionService.HasPermission(player.userID, PERM_IGNORE)) { return; } if (player.userID == entity.OwnerID) { return; } var block = entity as BuildingBlock; if (block && block.grade <= 0) { return; } if (clansSupport && Clans.Call <bool>("HasFriend", player.userID, entity.OwnerID)) { return; } GetAroundPlayers(entity.GetNetworkPosition()).ForEach(p => BlockPlayer(p)); var raidteam = (List <BasePlayer>)Clans.Call("ApiGetOnlineTeam", player); raidteam.ForEach(p => BlockPlayer(p)); bool justCreated; var raid = GetRaid(entity.GetNetworkPosition(), out justCreated); raid.raiders.Add(player.userID); if (Clans.Call("GetClanOf", entity.OwnerID) != null) { bool sendRemoveOwnerMessage = false; var team = (List <ulong>)Clans.Call("ApiGetMembers", entity.OwnerID); foreach (var uid in team.ToList()) { if (!raid.owners.Contains(uid)) { var p = BasePlayer.FindByID(uid); if (p) { GUIAnnouncements?.Call("CreateMsgGUI", Messages["yourbuildingdestroy"], "0.1 0.1 0.1 0.7", "1 1 1", p); } raid.owners.Add(uid); if (useDamageScale) { if (justCreated && p && !sendRemoveOwnerMessage) { sendRemoveOwnerMessage = true; damageTimers.Add(new DamageTimer(raid.owners.ToList(), 3600)); SendReply(player, Messages["DamageOnlineOwner"]); } else if ((justCreated && !p && !sendRemoveOwnerMessage) || (!sendRemoveOwnerMessage && team.Last() == uid)) { sendRemoveOwnerMessage = true; SendReply(player, Messages["DamageNotOnlineOwner"]); } } } } } else { if (!raid.owners.Contains(entity.OwnerID)) { var p = BasePlayer.FindByID(entity.OwnerID); if (p != null) { GUIAnnouncements?.Call("CreateMsgGUI", Messages["yourbuildingdestroy"], "0.1 0.1 0.1 0.7", "1 1 1", p); } raid.owners.Add(entity.OwnerID); if (useDamageScale) { if (justCreated && p) { damageTimers.Add(new DamageTimer(raid.owners.ToList(), 3600)); SendReply(player, Messages["removeowner"]); } } } } SendVKNotification(raid, player); foreach (var owner in GetOwnersByOwner(entity.OwnerID, entity.GetNetworkPosition())) { raid.owners.Add(owner); } }