public static bool Prefix(ItemStand __instance) { if (!__instance.HaveAttachment()) { return(false); } GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(__instance.m_nview.GetZDO().GetString("item")); if (itemPrefab != null) { GameObject gameObject = Object.Instantiate(itemPrefab, __instance.m_dropSpawnPoint.position, __instance.m_dropSpawnPoint.rotation); ItemDrop itemDrop = gameObject.GetComponent <ItemDrop>(); ItemDrop.LoadFromZDO(itemDrop.m_itemData, __instance.m_nview.GetZDO()); itemDrop.m_itemData = new ExtendedItemData( itemDrop.m_itemData, itemDrop.m_itemData.m_stack, itemDrop.m_itemData.m_durability, new Vector2i(), false, itemDrop.m_itemData.m_quality, itemDrop.m_itemData.m_variant, itemDrop.m_itemData.m_crafterID, itemDrop.m_itemData.m_crafterName); gameObject.GetComponent <Rigidbody>().velocity = Vector3.up * 4f; __instance.m_effects.Create(__instance.m_dropSpawnPoint.position, Quaternion.identity); } __instance.m_nview.GetZDO().Set("item", ""); __instance.m_nview.InvokeRPC(ZNetView.Everybody, "SetVisualItem", "", 0); return(false); }
public override void Paint(Level level) { var w = GetWidth(); var h = GetHeight(); var s = Math.Min(w, h); s = Math.Max(5, Rnd.Int(5, s - 5)); var center = GetTileCenter(); var stand = new ItemStand(); level.Area.Add(stand); stand.Center = center * 16 + new Vector2(8, 8); stand.SetItem(Items.CreateAndAdd(Items.Generate(ItemPool.Treasure), level.Area), null); var c = (int)Math.Floor(s / 2f); var t = Rnd.Chance() ? Tile.Rock : Tile.MetalBlock; for (var x = center.X - c; x <= center.X + c; x++) { for (var y = center.Y - c; y <= center.Y + c; y++) { if (Math.Abs(x - center.X) + Math.Abs(y - center.Y) <= c && (center.X != x || center.Y != y)) { Painter.Set(level, new Dot(x, y), t); } } } Painter.Rect(level, this, 1, Tiles.RandomFloor()); }
static void Prefix(Humanoid __0, ItemStand __instance, ref bool __result, ref bool __runOriginal) { if (PreventAccidentalInteraction.ShouldBlockInteraction(__instance)) { __result = false; __runOriginal = false; } }
public override void Use(Entity entity, Item item) { base.Use(entity, item); var room = entity.GetComponent <RoomComponent>().Room; if (room == null) { return; } // Copy to array, because we are going to change the list in the loop var items = room.Tagged[Tags.Item].ToArray(); foreach (var it in items) { if (it is ItemStand ist) { if (ist.Item == null) { continue; } var st = new ItemStand(); entity.Area.Add(st); ist.X -= ist.Width / 2f + 1; st.X = ist.X + ist.Width + 2; st.Y = ist.Y; st.SetItem(Items.CreateAndAdd(ist.Item.Id, entity.Area), item); } else if (it is Item i) { var st = Items.CreateAndAdd(i.Id, entity.Area); i.X -= i.Width / 2f + 1; st.X = i.X + i.Width + 2; st.Y = i.Y; } } var chests = room.Tagged[Tags.Chest].ToArray(); foreach (var i in chests) { try { var st = (Entity)Activator.CreateInstance(i.GetType()); i.X -= i.Width / 2f + 1; st.X = i.X + i.Width + 2; st.Y = i.Y; } catch (Exception e) { Log.Error(e); } } }
static void Prefix(ItemStand __instance, ref string __result, ref bool __runOriginal) { // UnityEngine.Debug.Log("ShouldBlock: " + PreventAccidentalInteraction.ShouldBlockInteraction().ToString()); if (PreventAccidentalInteraction.ShouldBlockInteraction(__instance)) { __result = String.Empty; __runOriginal = false; } }
public override void Paint(Level level) { var c = GetTileCenter(); var stand = new ItemStand(); level.Area.Add(stand); stand.Center = c * 16 + new Vector2(8); stand.SetItem(Items.CreateAndAdd("bk:treasure_key", level.Area), null); }
public override void Paint(Level level) { base.Paint(level); Painter.Rect(level, this, 2, Tile.FloorD); var stand = new ItemStand(); level.Area.Add(stand); stand.BottomCenter = GetCenterVector(); stand.SetItem(Items.CreateAndAdd("bk:idol", level.Area), null); }
public override void Update(float dt) { if (Hidden) { if (!hided) { hided = true; foreach (var item in Area.Tagged[Tags.Item]) { if (item is ItemStand stand && OwnsStand(stand)) { stand.Done = true; } } } return; } if (saved && Remove && !OnScreen) { Done = true; Hidden = true; var stand = new ItemStand(); Area.Add(stand); stand.Center = Center; stand.SetItem(Items.CreateAndAdd("bk:emerald", Area), null); return; } base.Update(dt); if (!Flips) { return; } delay -= dt; if (delay <= 0) { delay = Rnd.Float(1, 10); GraphicsComponent.Flipped = !GraphicsComponent.Flipped; } }
public override void Paint(Level level) { var c = GetTileCenter(); var stand = new ItemStand(); level.Area.Add(stand); stand.Center = c * 16 + new Vector2(8, 16); stand.SetItem(Items.CreateAndAdd(Items.Generate(ItemPool.Secret), level.Area), null); var npc = new OldMan { RickRoll = Rnd.Chance(5) }; level.Area.Add(npc); npc.BottomCenter = c * 16 + new Vector2(8, -8); }
public static bool ShouldBlockInteraction(ItemStand instance = null) { bool result = false; //UnityEngine.Debug.Log("Instance: " + (instance == null)); //UnityEngine.Debug.Log("GuardianStone: " + BlockGuardianStoneInteractions.Value); //UnityEngine.Debug.Log("GuardianPowerName: " + !instance.m_guardianPower.m_name.IsNullOrWhiteSpace()); try { if (BlockGuardianStoneInteractions.Value == false && instance.m_guardianPower != null) { return(false); } } catch (NullReferenceException) { // This probably means instance is null and so we don't have to do anything } // UnityEngine.Debug.Log("keymethod: " + BlockInteractionMethod.Value); if (BlockInteractionMethod.Value == "keyheld") { foreach (string s in BlockInteractionKeys) { // UnityEngine.Debug.Log("keyheld " + s + ": " + Input.GetKey(s).ToString()); result = !Input.GetKey(s) || result; } } else if (BlockInteractionMethod.Value == "crouch") { // UnityEngine.Debug.Log("crouching: " + Player.m_localPlayer.IsCrouching().ToString()); result = !Player.m_localPlayer.IsCrouching(); } // UnityEngine.Debug.Log("result: " + result.ToString()); return(result); }
public override void Use(Entity entity, Item item) { var id = Random ? Items.Generate(i => i.Type == ItemType.Active || i.Type == ItemType.Weapon || i.Type == ItemType.Artifact) : Item; if (OnStand) { var i = Items.CreateAndAdd(id, entity.Area); if (i == null) { Log.Error($"Invalid item {id}"); return; } var stand = new ItemStand(); entity.Area.Add(stand); stand.Center = entity.Center - new Vector2(0, 8); stand.SetItem(i, null); return; } for (var j = 0; j < Amount; j++) { var i = Items.CreateAndAdd(id, entity.Area); if (i == null) { Log.Error($"Invalid item {id}"); return; } // i.Hide = Hide; entity.GetComponent <InventoryComponent>().Pickup(i, Animate); } }
protected override bool OwnsStand(ItemStand stand) { return(stand is TrashGoblinStand); }
protected override bool OwnsStand(ItemStand stand) { return(stand is ArtifactStand); }
public override void Paint(Level level) { if (LevelSave.BiomeGenerated is IceBiome) { var clip = Painter.Clip; Painter.Clip = null; Painter.Rect(level, this, 0, Tile.WallB); Painter.Clip = clip; } var t = Tiles.Pick(Tile.Chasm, Tile.WallA, Tile.WallB, Tile.Planks); if (Rnd.Chance()) { Painter.Set(level, new Dot(Left + 1, Top + 1), t); Painter.Set(level, new Dot(Right - 1, Bottom - 1), t); } if (Rnd.Chance()) { Painter.Set(level, new Dot(Right - 1, Top + 1), t); Painter.Set(level, new Dot(Left + 1, Bottom - 1), t); } if (Rnd.Chance(10 + Run.Scourge * 5)) { var cn = GetCenter() * 16; var c = Rnd.Int(2, 4); for (var i = 0; i < c; i++) { var stand = new ScourgedStand(); level.Area.Add(stand); stand.Center = cn + new Vector2(16 + (i - c / 2f) * 32, 8); stand.SetItem(Items.CreateAndAdd(Scourge.GenerateItemId(), level.Area), stand); } return; } var center = GetCenter() * 16 + new Vector2(8); if (Rnd.Chance(5)) { var chest = new ProtoChest(); level.Area.Add(chest); chest.BottomCenter = center; return; } switch (Rnd.Int(GlobalSave.IsTrue(ShopNpc.Gobetta) ? 6 : 5)) { case 0: { for (var i = 0; i < Rnd.Int(1, 3); i++) { Items.CreateAndAdd("bk:heart", level.Area).Center = center; } break; } case 1: { for (var i = 0; i < Rnd.Int(1, 4); i++) { Items.CreateAndAdd("bk:shield", level.Area).Center = center; } break; } case 2: { var stand = new ItemStand(); level.Area.Add(stand); stand.BottomCenter = center; stand.SetItem(Items.CreateAndAdd(Items.Generate(ItemPool.Treasure), level.Area), null); break; } case 3: { var a = Rnd.Chance(); var c = Rnd.Int(1, a ? 3 : 4); for (var i = 0; i < c; i++) { var chest = a ? (Chest) new StoneChest() : new RedChest(); level.Area.Add(chest); chest.BottomCenter = center - new Vector2((c / 2f - i) * 20, 0); } break; } case 4: { for (var i = 0; i < Rnd.Int(6, 12); i++) { Items.CreateAndAdd("bk:coin", level.Area).Center = center; } break; } case 5: { Gobetta.Place(GetTileCenter() * 16 + new Vector2(8, 8), level.Area); break; } } }
protected override bool OwnsStand(ItemStand stand) { return(stand is WeaponStand); }
protected virtual bool OwnsStand(ItemStand stand) { return(false); }
private void Start() { sr = GetComponent <SpriteRenderer>(); col = GetComponent <CircleCollider2D>(); stand = transform.parent.GetComponent <ItemStand>(); }
protected override bool OwnsStand(ItemStand stand) { return(stand is RogerStand); }
private static void RenderWindow() { if (Selected == null) { return; } var show = true; var player = LocalPlayer.Locate(Engine.Instance.State.Area); if (!ImGui.Begin("Item editor", ref show, ImGuiWindowFlags.AlwaysAutoResize)) { ImGui.End(); return; } if (!show) { Selected = null; return; } var name = Locale.Get(Selected.Id); var animated = Selected.Animation != null; var region = animated ? null : CommonAse.Items.GetSlice(Selected.Id); if (!animated && region != null) { DrawItem(region); } ImGui.Text(Selected.Id); if (ImGui.Button("Give")) { LocalPlayer.Locate(Engine.Instance.State.Area) ?.GetComponent <InventoryComponent>() .Pickup(Items.CreateAndAdd( Selected.Id, Engine.Instance.State.Area )); } if (player != null) { ImGui.SameLine(); if (ImGui.Button("Spawn")) { var item = Items.CreateAndAdd( Selected.Id, Engine.Instance.State.Area, false ); item.Center = player.Center; } ImGui.SameLine(); if (ImGui.Button("Spawn on stand")) { var stand = new ItemStand(); Engine.Instance.State.Area.Add(stand); var item = Items.CreateAndAdd( Selected.Id, Engine.Instance.State.Area, false ); stand.Center = player.Center; stand.SetItem(item, null); } } ImGui.SameLine(); if (ImGui.Button("Rename")) { ImGui.OpenPopup("Rename"); itemName = Selected.Id; } if (ImGui.BeginPopupModal("Rename")) { ImGui.PushItemWidth(300); ImGui.InputText("Id", ref itemName, 64); ImGui.PopItemWidth(); if (ImGui.Button("Rename") || Input.Keyboard.WasPressed(Keys.Enter, true)) { var iname = Locale.Get(Selected.Id); var idesc = $"{Selected.Id}_desc"; var description = Locale.Get(idesc); Locale.Map.Remove(Selected.Id); Locale.Map.Remove(idesc); Items.Datas.Remove(Selected.Id); Selected.Id = itemName; itemName = ""; Locale.Map[Selected.Id] = iname; Locale.Map[$"{Selected.Id}_desc"] = description; Items.Datas[Selected.Id] = Selected; ImGui.CloseCurrentPopup(); } ImGui.SameLine(); if (ImGui.Button("Cancel") || Input.Keyboard.WasPressed(Keys.Escape, true)) { itemName = ""; ImGui.CloseCurrentPopup(); } ImGui.EndPopup(); } if (ImGui.InputText("Name", ref name, 64)) { Locale.Map[Selected.Id] = name; } var key = $"{Selected.Id}_desc"; var desc = Locale.Get(key); if (ImGui.InputText("Description", ref desc, 128)) { Locale.Map[key] = desc; } var type = (int)Selected.Type; if (ImGui.Combo("Type", ref type, Types, Types.Length)) { Selected.Type = (ItemType)type; } type = (int)Selected.Quality; if (ImGui.Combo("Quality", ref type, Quality, Quality.Length)) { Selected.Quality = (ItemQuality)type; } if (Selected.Type == ItemType.Weapon) { type = (int)Selected.WeaponType; if (ImGui.Combo("Weapon Type", ref type, WeaponTypes, WeaponTypes.Length)) { Selected.WeaponType = (WeaponType)type; } } var t = Selected.Type; if (t != ItemType.Coin && t != ItemType.Heart && t != ItemType.Bomb && t != ItemType.Key) { if (t == ItemType.Active) { var o = 0; // Room charged if (Selected.SingleUse) { o = 2; } else if (Selected.UseTime < -0.01f) { o = 1; // Auto charged } else if (Selected.UseTime < 0.01f) { o = 3; // Infinite } if (ImGui.Combo("RC", ref o, types, types.Length)) { Selected.SingleUse = false; if (o == 0) { Selected.UseTime = Math.Max(0.01f, Math.Abs(Selected.UseTime)); } else if (o == 1) { Selected.UseTime = Math.Min(-0.1f, -Math.Abs(Selected.UseTime)); } else if (o == 3) { Selected.UseTime = 0; } else { Selected.SingleUse = true; } } if (o == 0) { var v = (int)Selected.UseTime; if (ImGui.InputInt("Charges", ref v)) { Selected.UseTime = v; } } else if (o == 1) { var v = -Selected.UseTime; if (ImGui.InputFloat("Charge time", ref v)) { Selected.UseTime = -v; } } } else if (t == ItemType.Weapon) { ImGui.InputFloat("Use time", ref Selected.UseTime); ImGui.Checkbox("Automatic", ref Selected.Automatic); } ImGui.Checkbox("Auto pickup", ref Selected.AutoPickup); ImGui.Checkbox("Scourge", ref Selected.Scourged); ImGui.SameLine(); } else { Selected.AutoPickup = true; } if (ImGui.Checkbox("Animated", ref animated)) { Selected.Animation = animated ? "" : null; } if (animated) { ImGui.InputText("Animation", ref Selected.Animation, 128); } ImGui.Separator(); ImGui.Checkbox("Lockable", ref Selected.Lockable); if (Selected.Lockable) { ImGui.SameLine(); var unlocked = GlobalSave.IsTrue(Selected.Id); if (ImGui.Checkbox("Unlocked", ref unlocked)) { if (unlocked) { Items.Unlock(Selected.Id); } else { GlobalSave.Put(Selected.Id, false); } } var sells = Selected.UnlockPrice > 0; if (ImGui.Checkbox("Sells", ref sells)) { Selected.UnlockPrice = sells ? 1 : 0; } if (sells) { ImGui.SameLine(); ImGui.InputInt("Price", ref Selected.UnlockPrice); } } ImGui.Separator(); if (ImGui.CollapsingHeader("Uses")) { DisplayUse(Selected.Root, Selected.Uses); } if (ImGui.CollapsingHeader("Renderer")) { DisplayRenderer(Selected.Root, Selected.Renderer); } if (ImGui.CollapsingHeader("Pools")) { ImGui.Checkbox("Single spawn", ref Selected.Single); var i = 0; ImGui.Text($"{Selected.Pools}"); foreach (var p in ItemPool.ById) { var val = p.Contains(Selected.Pools); if (ImGui.Checkbox(p.Name, ref val)) { Selected.Pools = p.Apply(Selected.Pools, val); } i++; if (i == ItemPool.Count) { break; } } } if (ImGui.CollapsingHeader("Spawn chance")) { Selected.Chance.RenderDebug(); } ImGui.Separator(); if (ImGui.Button("Delete")) { Items.Datas.Remove(Selected.Id); Selected = null; } if (Selected != null && player != null) { var id = Selected.Id; if (player.GetComponent <InventoryComponent>().Has(id)) { ImGui.BulletText("Present in inventory"); } if (player.GetComponent <ActiveWeaponComponent>().Has(id)) { ImGui.BulletText("Present in active weapon slot"); } if (player.GetComponent <WeaponComponent>().Has(id)) { ImGui.BulletText("Present in weapon slot"); } if (player.GetComponent <ActiveItemComponent>().Has(id)) { ImGui.BulletText("Present in active item slot"); } } ImGui.End(); }
public override void Paint(Level level) { if (LevelSave.BiomeGenerated is IceBiome) { var clip = Painter.Clip; Painter.Clip = null; Painter.Rect(level, this, 0, Tile.WallB); Painter.Clip = clip; } var center = GetCenter() * 16 + new Vector2(8); if (Rnd.Chance(20)) { var stand = new ItemStand(); level.Area.Add(stand); stand.Center = center; stand.SetItem(Items.CreateAndAdd(Items.Generate(ItemPool.Treasure), level.Area), null); } else { var chests = new List <Chest>(); var i = Rnd.Int(4); switch (i) { case 0: { for (var k = 0; k < 2; k++) { chests.Add(new RedChest()); } break; } case 1: { for (var k = 0; k < 4; k++) { chests.Add(new GoldChest()); } break; } case 2: { for (var k = 0; k < 3; k++) { chests.Add(new WoodenChest()); } break; } default: { chests.Add(new GoldChest()); chests.Add(new WoodenChest()); chests.Add(new RedChest()); break; } } chests.Shuffle(Rnd.Generator); var j = 0; var cn = chests.Count; foreach (var c in chests) { level.Area.Add(c); c.Center = center + new Vector2((j - cn / 2f) * 16, 0); j++; } } }
protected override bool OwnsStand(ItemStand stand) { return(stand is GobettaStand); }
public Model3DCommand(string type, ItemStand parameters) : base(type, parameters) { }
public UpdateModel3DCommand(ItemStand parameters) : base("update", parameters) { }
protected override bool OwnsStand(ItemStand stand) { return(stand is ActiveStand); }
private static string GetPrefabFriendlyName(GameObject prefab) { HoverText hover = prefab.GetComponent <HoverText>(); if (hover) { return(hover.m_text); } ItemDrop item = prefab.GetComponent <ItemDrop>(); if (item) { return(item.m_itemData.m_shared.m_name); } Character chara = prefab.GetComponent <Character>(); if (chara) { return(chara.m_name); } RuneStone runestone = prefab.GetComponent <RuneStone>(); if (runestone) { return(runestone.m_name); } ItemStand itemStand = prefab.GetComponent <ItemStand>(); if (itemStand) { return(itemStand.m_name); } MineRock mineRock = prefab.GetComponent <MineRock>(); if (mineRock) { return(mineRock.m_name); } Pickable pickable = prefab.GetComponent <Pickable>(); if (pickable) { return(GetPrefabFriendlyName(pickable.m_itemPrefab)); } CreatureSpawner creatureSpawner = prefab.GetComponent <CreatureSpawner>(); if (creatureSpawner) { return(GetPrefabFriendlyName(creatureSpawner.m_creaturePrefab)); } SpawnArea spawnArea = prefab.GetComponent <SpawnArea>(); if (spawnArea && spawnArea.m_prefabs.Count > 0) { return(GetPrefabFriendlyName(spawnArea.m_prefabs[0].m_prefab)); } Piece piece = prefab.GetComponent <Piece>(); if (piece && !string.IsNullOrEmpty(piece.m_name)) { return(piece.m_name); } return(prefab.name); }
public override void Paint(Level level) { if (LevelSave.BiomeGenerated is IceBiome) { var clip = Painter.Clip; Painter.Clip = null; Painter.Rect(level, this, 0, Tile.WallB); Painter.Clip = clip; } Painter.Fill(level, this, 1, Tile.EvilWall); Painter.Fill(level, this, 2, Tile.EvilFloor); PaintTunnel(level, Tile.EvilFloor); var center = GetCenter() * 16 + new Vector2(8); switch (Rnd.Int(4)) { case 0: { for (var i = 0; i < Rnd.Int(1, 3); i++) { Items.CreateAndAdd("bk:heart", level.Area).Center = center; } break; } case 1: { for (var i = 0; i < Rnd.Int(1, 4); i++) { Items.CreateAndAdd("bk:shield", level.Area).Center = center; } break; } case 2: { var stand = new ItemStand(); level.Area.Add(stand); stand.BottomCenter = center; stand.SetItem(Items.CreateAndAdd(Items.Generate(ItemPool.SpikedRoom), level.Area), null); break; } case 3: { var a = Rnd.Chance(); var c = Rnd.Int(1, a ? 3 : 4); for (var i = 0; i < c; i++) { var chest = a ? (Chest) new StoneChest() : new RedChest(); level.Area.Add(chest); chest.BottomCenter = center - new Vector2((c / 2f - i) * 20, 0); } break; } } }