public void SetItem(ItemInst item) { if (this.item == item) { return; } this.item = item; UpdateBackTex(); if (item == null) { vis.SetVisual(string.Empty); vis.Hide(); } else { vis.SetVisual(item.ModelDef.Visual); if (shown) { vis.Show(); } int num = item.Amount; if (num > 1) { amount.Text = num.ToString(); } else { amount.Text = string.Empty; } item.Definition.PositionInVobVisual(vis); } }
public void Open(ItemInst item) { maxAmount = item.Amount; tb.Input = maxAmount.ToString(); Open(); this.item = item; }
void UpdateAmmo(ItemInst rangedWeapon = null) { ItemInst item = rangedWeapon ?? Host.GetEquipmentBySlot(NPCSlots.Ranged); if (item == null) { return; } ItemInst currentAmmo = Host.GetAmmo(); ItemTypes ammoType = item.ItemType == ItemTypes.WepXBow ? ItemTypes.AmmoXBow : ItemTypes.AmmoBow; if (currentAmmo == null || currentAmmo.ItemType != ammoType) // no ammo equipped or wrong type { Host.Inventory.ForEachItemPredicate(i => { if (i.ItemType == ammoType) { if (currentAmmo != null) { Host.UnequipItem(currentAmmo); } Host.EquipItem(NPCSlots.Ammo, i); return(false); } return(true); }); } }
static NPCInst SpawnEnemy(HordeEnemy enemy, Vec3f spawnPoint, float spawnRange = 100) { NPCInst npc = new NPCInst(NPCDef.Get(enemy.NPCDef)); if (enemy.WeaponDef != null) { ItemInst item = new ItemInst(ItemDef.Get(enemy.WeaponDef)); npc.Inventory.AddItem(item); npc.EffectHandler.TryEquipItem(item); } if (enemy.ArmorDef != null) { ItemInst item = new ItemInst(ItemDef.Get(enemy.ArmorDef)); npc.Inventory.AddItem(item); npc.EffectHandler.TryEquipItem(item); } npc.SetHealth(enemy.Health, enemy.Health); Vec3f spawnPos = Randomizer.GetVec3fRad(spawnPoint, spawnRange); Angles spawnAng = Randomizer.GetYaw(); //npc.TeamID = 1; npc.BaseInst.SetNeedsClientGuide(true); npc.Spawn(activeWorld, spawnPos, spawnAng); return(npc); }
static void SpawnPlayer(ArenaClient client) { var charInfo = client.CharInfo; NPCInst npc = new NPCInst(NPCDef.Get(charInfo.BodyMesh == HumBodyMeshs.HUM_BODY_NAKED0 ? "maleplayer" : "femaleplayer")) { UseCustoms = true, CustomBodyTex = charInfo.BodyTex, CustomHeadMesh = charInfo.HeadMesh, CustomHeadTex = charInfo.HeadTex, CustomVoice = charInfo.Voice, CustomFatness = charInfo.Fatness, CustomScale = new Vec3f(charInfo.BodyWidth, 1.0f, charInfo.BodyWidth), CustomName = charInfo.Name }; foreach (string e in client.HordeClass.Equipment) { ItemInst item = new ItemInst(ItemDef.Get(e)); npc.Inventory.AddItem(item); npc.EffectHandler.TryEquipItem(item); } if (client.HordeClass.NeedsBolts) { } npc.Inventory.AddItem(new ItemInst(ItemDef.Get("hptrank"))); Vec3f spawnPos = Randomizer.GetVec3fRad(activeDef.SpawnPos, activeDef.SpawnRange); Angles spawnAng = Randomizer.GetYaw(); //npc.TeamID = 0; npc.Spawn(activeWorld, spawnPos, spawnAng); client.SetControl(npc); }
public BaseVob CreateVob(byte type) { BaseVobInst vob; switch ((VobType)type) { case VobType.Vob: vob = new VobInst(); break; case VobType.Mob: vob = new MobInst(); break; case VobType.Item: vob = new ItemInst(); break; case VobType.NPC: vob = new NPCInst(); break; case VobType.Projectile: vob = new ProjInst(); break; default: throw new Exception("Unsupported VobType: " + (VobType)type); } return(vob.BaseInst); }
void SelectSlot() { slots[cursor.X, cursor.Y].IsSelected = true; ItemInst selItem = GetSelectedItem(); if (selItem == null) { descrBack.Hide(); descrVis.Hide(); } else { List <GUCVisualText> texts = descrBack.Texts; var def = selItem.Definition; //set description name texts[0].Text = def.Name; if (def.Damage != 0) { texts[3].Text = "Schaden"; texts[4].Text = def.Damage.ToString(); } else { texts[3].Text = texts[4].Text = ""; } if (def.Range != 0) { texts[5].Text = "Reichweite"; texts[6].Text = def.Range.ToString(); } else { texts[5].Text = texts[6].Text = ""; } if (def.Protection != 0) { texts[7].Text = "Schutz vor Waffen"; texts[8].Text = def.Protection.ToString(); } else { texts[7].Text = texts[8].Text = ""; } //visual vob descrVis.SetVisual(selItem.ModelDef.Visual); //show description def.PositionInVobVisual(descrVis); descrBack.Show(); descrVis.Show(); } }
public void UseItem(NPCInst npc, ItemInst item) { var stream = npc.BaseInst.GetScriptCommandStream(); stream.Write((byte)RequestMessageIDs.UseItem); stream.Write((ushort)item.ID); NPC.SendScriptCommand(stream, NetPriority.Low); }
public void TryDrawWeapon(ItemInst item) { if (item == null) { return; } if (Host.IsDead || this.Host.ModelInst.IsInAnimation()) { return; } if (Host.GetDrawnWeapon() != null) { Host.DoUndrawWeapon(item); } ItemInst removeItem = Host.GetRightHand(); if (removeItem != null) { if (removeItem.IsWeapon) { Host.DoUndrawWeapon(removeItem); return; } else { this.TryUnequipItem(removeItem); if (removeItem.IsEquipped) // still equipped? { return; // dunno } } } removeItem = Host.GetLeftHand(); if (removeItem != null && (item.ItemType != ItemTypes.Wep1H || Host.GetEquipmentBySlot(NPCSlots.OneHanded2) != null)) { if (removeItem.IsWeapon) { Host.DoUndrawWeapon(removeItem); return; } else { this.TryUnequipItem(removeItem); if (removeItem.IsEquipped) // still equipped? { return; // dunno } } } // Hands should be free now this.Host.DoDrawWeapon(item); }
public void TryUse(ItemInst item) { if (item == null || this.Host.IsObstructed()) { return; } this.Host.UseItem(item); }
public void FMSpawn() { if (GameMode.IsActive) { GameMode.ActiveMode.Leave(this); } KillCharacter(); SetTeamID(TeamIdent.FFAPlayer); NPCDef def = NPCDef.Get(charInfo.BodyMesh == HumBodyMeshs.HUM_BODY_NAKED0 ? "maleplayer" : "femaleplayer"); NPCInst npc = new NPCInst(def) { UseCustoms = true, CustomBodyTex = charInfo.BodyTex, CustomHeadMesh = charInfo.HeadMesh, CustomHeadTex = charInfo.HeadTex, CustomVoice = charInfo.Voice, CustomFatness = charInfo.Fatness, CustomScale = new Vec3f(charInfo.BodyWidth, 1.0f, charInfo.BodyWidth), CustomName = charInfo.Name, DropUnconsciousOnDeath = true, UnconsciousDuration = 15 * TimeSpan.TicksPerSecond, }; ItemDef.ForEach(itemDef => { var item = new ItemInst(itemDef); npc.Inventory.AddItem(item); if (string.Equals(itemDef.CodeName, "ItMw_1h_Bau_Mace", StringComparison.OrdinalIgnoreCase) || string.Equals(itemDef.CodeName, "ITAR_Prisoner", StringComparison.OrdinalIgnoreCase)) { npc.EffectHandler.TryEquipItem(item); } else if (itemDef.ItemType == ItemTypes.AmmoBow || itemDef.ItemType == ItemTypes.AmmoXBow) { item.SetAmount(100); } }); if (npc.ModelDef.TryGetOverlay("1HST1", out ScriptOverlay ov)) { npc.ModelInst.ApplyOverlay(ov); } if (npc.ModelDef.TryGetOverlay("2HST1", out ov)) { npc.ModelInst.ApplyOverlay(ov); } var pair = spawnPositions.GetRandom(); npc.Spawn(WorldInst.List[0], pair.Item1, pair.Item2); this.SetControl(npc); npc.AllowHitAttacker.Add(DuelMode.CheckHitDetection); }
public NewItemPage() { InitializeComponent(); ItemInst = new ItemInst { Text = "ItemInst name", Description = "This is an itemInst description." }; BindingContext = this; }
public void DrawWeapon(NPCInst npc, ItemInst item) { if (npc == null || item == null) { return; } var stream = npc.BaseInst.GetScriptCommandStream(); stream.Write((byte)RequestMessageIDs.DrawWeapon); stream.Write((byte)item.ID); NPC.SendScriptCommand(stream, NetPriority.Medium); }
public ItemDetailPage() { InitializeComponent(); var item = new ItemInst { Text = "ItemInst 1", Description = "This is an itemInst description." }; viewModel = new ItemDetailViewModel(item); BindingContext = viewModel; }
public void TryDropItem(ItemInst item, int amount) { if (item == null || this.Host.IsObstructed()) { return; } var pos = this.Host.GetPosition(); var ang = this.Host.GetAngles(); pos += ang.ToAtVector() * 100f; this.Host.DoDropItem(item, amount, pos, ang); }
protected override void Start(GameScenario scenario) { base.Start(scenario); if (Scenario.SpawnBarriers != null) { foreach (var bar in Scenario.SpawnBarriers) { if (!bar.AddAfterEvent) { spawnBarriers.Add(CreateBarrier(bar)); } } } foreach (var hi in Scenario.Items) { ItemInst item = new ItemInst(ItemDef.Get(hi.ItemDef)); item.Spawn(World, hi.Position, hi.Angles); } for (int i = 0; i < Scenario.Stands.Length; i++) { var stand = Scenario.Stands[i]; StandInst inst = new StandInst() { Index = i, Stand = stand, }; if (stand.Boss != null) { inst.Boss = SpawnNPC(stand.Boss, stand.Position); inst.Boss.AllowHitTarget.Add(BossProtection); } inst.Barriers = new List <VobInst>(stand.Barriers.Length); foreach (var bar in stand.Barriers) { if (!bar.AddAfterEvent) { inst.Barriers.Add(CreateBarrier(bar)); } } Stands.Add(inst); } }
static void SpawnItem(WorldInst world, PosAng posAng) { var item = BRScenario.Items.GetRandom(); ItemDef def = ItemDef.Get(item.Definition); if (def == null) { return; } ItemInst inst = new ItemInst(def); inst.SetAmount(item.Amount); inst.Spawn(world, posAng.Position, posAng.Angles); }
public void TryTakeItem(ItemInst item) { if (item == null || !item.IsSpawned || this.Host.IsObstructed()) { return; } var potion = ItemDef.Get("hptrank"); if (item.Definition == potion && Host.Inventory.Contains(potion)) { Host.ModelInst.StartAniJob(Host.AniCatalog.Gestures.DontKnow); return; } this.Host.DoTakeItem(item); }
public void TryUndrawWeapon(ItemInst item) { if (item == null) { return; } if (Host.IsDead || this.Host.ModelInst.IsInAnimation()) { return; } if (Host.GetRightHand() == item || Host.GetLeftHand() == item) { Host.DoUndrawWeapon(item); } }
public void TryShoot(Vec3f start, Vec3f end) { if (Host.IsDead || !Host.IsAiming()) { return; } if (start.GetDistance(end) > 500000) // just in case { end = start + 500000 * (end - start).Normalise(); } var drawnWeapon = Host.GetDrawnWeapon(); if (drawnWeapon == null || !drawnWeapon.IsWepRanged) { return; } ItemInst ammo = drawnWeapon.ItemType == ItemTypes.WepBow ? Host.GetRightHand() : Host.GetLeftHand(); if (ammo == null || !ammo.IsAmmo) { return; } ProjInst inst = new ProjInst(ProjDef.Get <ProjDef>("arrow")) { Item = new ItemInst(ammo.Definition), Damage = drawnWeapon.Damage, Velocity = 0.0004f, Model = ammo.ModelDef }; end = end - (end - start).Normalise() * (ammo.ItemType == ItemTypes.AmmoBow ? 40 : 10); // so arrows' bodies aren't 90% inside walls Host.DoShoot(start, end, inst); int ammoCount = ammo.Amount - 1; if (ammoCount <= 0) { Host.UnequipItem(ammo); } ammo.SetAmount(ammo.Amount - 1); }
public void TryUnequipItem(ItemInst item) { if (item == null || Host.IsObstructed()) { return; } Host.UnequipItem(item); switch (item.ItemType) { case ItemTypes.Wep1H: Host.UnequipSlot(NPCSlots.OneHanded2); break; case ItemTypes.Torch: if (Host.ModelDef.TryGetOverlay("humans_torch", out Visuals.ScriptOverlay ov)) { this.Host.ModelInst.RemoveOverlay(ov); } break; } }
public static NPCInst CreateDummyInst(NPCDef npcDef, string name, Types.Vec3f spawnPosition, Random random) { random = random ?? new Random(); int guild = random.Next(0, 2); int armorType = random.Next(0, 4); int meleeType = random.Next(0, 4); int rangedType = random.Next(0, 2); NPCInst npcInst = null; npcInst = new NPCInst(npcDef); npcInst.SetObjName(name); npcInst.BaseInst.SetNeedsClientGuide(true); ItemInst armor = null, weapon = null, rangeWeapon = null, ammo = null; int ammoAmount; ScriptOverlay overlay = null; bool overlayExists = false; armor = new ItemInst(ItemDef.Get <ItemDef>(ArmorCodes[random.Next(0, ArmorCodes.Count)])); // melee weapon if (random.Next(0, 2) == 0) { // 1H-weapon weapon = new ItemInst(ItemDef.Get <ItemDef>(WeaponCodes_1H[random.Next(0, WeaponCodes_1H.Count)])); overlayExists = npcInst.ModelDef.TryGetOverlay("1HST2", out overlay); } else { // 2H-weapon weapon = new ItemInst(ItemDef.Get <ItemDef>(WeaponCodes_2H[random.Next(0, WeaponCodes_2H.Count)])); overlayExists = npcInst.ModelDef.TryGetOverlay("2HST1", out overlay); } // ranged weapon if (random.Next(0, 2) == 0) { // bow rangeWeapon = new ItemInst(ItemDef.Get <ItemDef>(WeaponCodes_Bow[random.Next(0, WeaponCodes_Bow.Count)])); ammo = new ItemInst(ItemDef.Get <ItemDef>(AmmoCodes_Bow[random.Next(0, AmmoCodes_Bow.Count)])); } else { // crossbow rangeWeapon = new ItemInst(ItemDef.Get <ItemDef>(WeaponCodes_Crossbow[random.Next(0, WeaponCodes_Crossbow.Count)])); ammo = new ItemInst(ItemDef.Get <ItemDef>(AmmoCodes_Crossbow[random.Next(0, AmmoCodes_Crossbow.Count)])); } ammoAmount = random.Next(10, 500 + 1); ammo.BaseInst.SetAmount(ammoAmount); npcInst.Inventory.AddItem(weapon); npcInst.EffectHandler.TryEquipItem(weapon); // 1 = DrawnWeapon npcInst.Inventory.AddItem(rangeWeapon); npcInst.EffectHandler.TryEquipItem(rangeWeapon); npcInst.Inventory.AddItem(ammo); npcInst.EffectHandler.TryEquipItem(ammo); npcInst.Inventory.AddItem(armor); npcInst.EffectHandler.TryEquipItem(armor); if (overlayExists) { npcInst.ModelInst.ApplyOverlay(overlay); } npcInst.Spawn(WorldSystem.WorldInst.List[0], spawnPosition, Types.Angles.Null); return(npcInst); }
public void RemoveItem(ItemInst item) { BaseInst.Remove(item.BaseInst); item.OnSetAmount -= Item_OnSetAmount; OnRemoveItem?.Invoke(item); }
public void UpdateAmountEventMethod(ItemInst item) { inv.UpdateAmounts(); }
protected override void KeyPress(VirtualKeys key, bool hold) { switch (key) { case VirtualKeys.Escape: case VirtualKeys.Tab: if (!hold) { Close(); } break; case VirtualKeys.Menu: // DROP if (!hold && player != null && !Arena.ArenaClient.GMJoined) { ItemInst selectedItem = inv.GetSelectedItem(); if (selectedItem != null) { if (selectedItem.Amount > 1) { DropItemMenu.Menu.Open(selectedItem); } else if (selectedItem.Amount == 1) { NPCInst.Requests.DropItem(player, selectedItem, 1); } } } break; case VirtualKeys.Control: // USE if (!hold) { ItemInst selItem = inv.GetSelectedItem(); if (selItem == null) { return; } switch (selItem.ItemType) { case ItemTypes.Wep1H: case ItemTypes.Wep2H: case ItemTypes.WepBow: case ItemTypes.WepXBow: case ItemTypes.Armor: case ItemTypes.Torch: if (selItem.ItemType == ItemTypes.Torch || !Arena.ArenaClient.GMJoined) { if (selItem.IsEquipped) { NPCInst.Requests.UnequipItem(player, selItem); } else { NPCInst.Requests.EquipItem(player, selItem); } } break; default: NPCInst.Requests.UseItem(player, selItem); break; } } break; default: inv.KeyPressed(key); break; } }
public void UpdateInventory(ItemInst item) { UpdateContents(); }
protected override void Fight() { foreach (var bar in spawnBarriers) { bar.Despawn(); } spawnBarriers.Clear(); if (Scenario.SpawnBarriers != null) { foreach (var bar in Scenario.SpawnBarriers) { if (bar.AddAfterEvent) { CreateBarrier(bar); } } } foreach (var group in Scenario.Enemies) { var agent = CreateAgent(); foreach (var pair in group.npcs) { int maxCount = (int)Math.Ceiling(pair.CountScale * players.Count); for (int i = 0; i < maxCount; i++) { agent.Add(SpawnNPC(pair.Enemy, group.Position, group.Range)); } } } foreach (var group in Scenario.AmbientNPCs) { foreach (var pair in group.npcs) { for (int i = 0; i < pair.CountScale; i++) { var npc = SpawnNPC(pair.Enemy, group.Position, new Angles(0, group.Yaw, 0), group.Range, 0, false); ItemInst weapon = npc.GetEquipmentBySlot(NPCSlots.TwoHanded); if (weapon == null) { weapon = npc.GetEquipmentBySlot(NPCSlots.OneHanded1); } if (weapon != null) { npc.DoDrawWeapon(weapon); } AmbientNPCs.Add(npc); } } } standTimer.SetInterval(TimeSpan.TicksPerSecond); standTimer.SetCallback(CheckStandDistance); standTimer.Start(); base.Fight(); NPCInst.sOnHit += OnHit; }
private void Player_OnUnequip(ItemInst item) { UpdateEquipment(); }
static void Update() { NPCInst hero = currentPlayer; if (hero == null) { Deactivate(); return; } float maxYaw = Angles.Deg2Rad(60); bool fightMode = hero.IsInFightMode; ItemInst wep = hero.GetDrawnWeapon(); float maxRange = (fightMode && wep != null && wep.IsWepRanged) ? 3000 : 400; Vec3f heroPos = hero.GetPosition(); Angles heroAng = hero.GetAngles(); float bestFit = 2.0f; BaseVobInst bestVob = null; if (hero?.World?.BaseWorld != null) { hero.World.BaseWorld.ForEachVob(v => { BaseVobInst vob = (BaseVobInst)v.ScriptObject; if (vob == hero) { return; } bool hasPriority = false; if (fightMode) { if (!(vob is NPCInst npc)) { return; } if (npc.IsDead) { return; } if (bestVob != null) { NPCInst bestNPC = (NPCInst)bestVob; if (npc.IsUnconscious) { if (!bestNPC.IsUnconscious) { return; // alive targets are more important } } else { if (bestNPC.IsUnconscious) { hasPriority = true; } } if (npc.TeamID == hero.TeamID) { if (bestNPC.TeamID != hero.TeamID) { return; } } else { if (bestNPC.TeamID == hero.TeamID) { hasPriority = true; } } } } Vec3f targetPos; using (zVec3 z = zVec3.Create()) { vob.BaseInst.gVob.BBox3D.GetCenter(z); targetPos = (Vec3f)z; } float distance = heroPos.GetDistance(targetPos); if (distance > maxRange) { return; } float yaw = Angles.GetYawFromAtVector(targetPos - heroPos); yaw = Math.Abs(Angles.Difference(yaw, heroAng.Yaw)); if (yaw > maxYaw) { return; // target is not in front of hero } if (!CanSee(heroPos, targetPos, vob)) { return; } float fit = distance / maxRange + yaw / maxYaw; if (hasPriority || fit < bestFit) { bestVob = vob; bestFit = fit; } }); SetFocus(bestVob); } }
void Player_OnEquip(ItemInst item) { UpdateEquipment(); }