private void InitializeHotBar(NWPlayer player) { var openRestMenu = _qbs.UseFeat((int)CustomFeatType.OpenRestMenu); var structure = _qbs.UseFeat((int)CustomFeatType.StructureTool); _player.SetQuickBarSlot(player, 0, openRestMenu); _player.SetQuickBarSlot(player, 1, structure); }
private void InitializeHotBar(NWPlayer player) { var openRestMenu = _qbs.UseFeat((int)CustomFeatType.OpenRestMenu); var structure = _qbs.UseFeat((int)CustomFeatType.StructureManagementTool); var renameCraftedItem = _qbs.UseFeat((int)CustomFeatType.RenameCraftedItem); var chatCommandTargeter = _qbs.UseFeat((int)CustomFeatType.ChatCommandTargeter); _player.SetQuickBarSlot(player, 0, openRestMenu); _player.SetQuickBarSlot(player, 1, structure); _player.SetQuickBarSlot(player, 2, renameCraftedItem); _player.SetQuickBarSlot(player, 3, chatCommandTargeter); }
public void DoPerkUpgrade(NWPlayer oPC, int perkID, bool freeUpgrade = false) { var perk = _data.Single <Data.Entity.Perk>(x => x.ID == perkID); var perkLevels = _data.Where <PerkLevel>(x => x.PerkID == perkID); var pcPerk = _data.SingleOrDefault <PCPerk>(x => x.PlayerID == oPC.GlobalID && x.PerkID == perkID); var player = _data.Single <Player>(x => x.ID == oPC.GlobalID); if (freeUpgrade || CanPerkBeUpgraded(oPC, perkID)) { DatabaseActionType action = DatabaseActionType.Update; if (pcPerk == null) { pcPerk = new PCPerk(); DateTime dt = DateTime.UtcNow; pcPerk.AcquiredDate = dt; pcPerk.PerkID = perk.ID; pcPerk.PlayerID = oPC.GlobalID; pcPerk.PerkLevel = 0; action = DatabaseActionType.Insert; } PerkLevel nextPerkLevel = FindPerkLevel(perkLevels, pcPerk.PerkLevel + 1); if (nextPerkLevel == null) { return; } pcPerk.PerkLevel++; _data.SubmitDataChange(pcPerk, action); if (!freeUpgrade) { player.UnallocatedSP -= nextPerkLevel.Price; _data.SubmitDataChange(player, DatabaseActionType.Update); } // If a perk is activatable, create the item on the PC. // Remove any existing cast spell unique power properties and add the correct one based on the DB flag. if (!string.IsNullOrWhiteSpace(perk.ItemResref)) { if (_.GetIsObjectValid(_.GetItemPossessedBy(oPC.Object, perk.ItemResref)) == FALSE) { NWItem spellItem = (_.CreateItemOnObject(perk.ItemResref, oPC.Object)); spellItem.IsCursed = true; spellItem.SetLocalInt("ACTIVATION_PERK_ID", perk.ID); foreach (ItemProperty ipCur in spellItem.ItemProperties) { int ipType = _.GetItemPropertyType(ipCur); int ipSubType = _.GetItemPropertySubType(ipCur); if (ipType == ITEM_PROPERTY_CAST_SPELL && (ipSubType == IP_CONST_CASTSPELL_UNIQUE_POWER || ipSubType == IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY || ipSubType == IP_CONST_CASTSPELL_ACTIVATE_ITEM)) { _.RemoveItemProperty(spellItem.Object, ipCur); } } ItemProperty ip; if (perk.IsTargetSelfOnly) { ip = _.ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY, IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE); } else { ip = _.ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER, IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE); } _biowareXP2.IPSafeAddItemProperty(spellItem, ip, 0.0f, AddItemPropertyPolicy.ReplaceExisting, false, false); } _.SetName(_.GetItemPossessedBy(oPC.Object, perk.ItemResref), perk.Name + " (Lvl. " + pcPerk.PerkLevel + ")"); } // If a feat ID is assigned, add the feat to the player if it doesn't exist yet. else if (perk.FeatID != null && perk.FeatID > 0 && _.GetHasFeat((int)perk.FeatID, oPC.Object) == FALSE) { _nwnxCreature.AddFeatByLevel(oPC, (int)perk.FeatID, 1); var qbs = _nwnxQBS.UseFeat((int)perk.FeatID); // Try to add the new feat to the player's hotbar. if (_nwnxPlayer.GetQuickBarSlot(oPC, 0).ObjectType == QuickBarSlotType.Empty) { _nwnxPlayer.SetQuickBarSlot(oPC, 0, qbs); } else if (_nwnxPlayer.GetQuickBarSlot(oPC, 1).ObjectType == QuickBarSlotType.Empty) { _nwnxPlayer.SetQuickBarSlot(oPC, 1, qbs); } else if (_nwnxPlayer.GetQuickBarSlot(oPC, 2).ObjectType == QuickBarSlotType.Empty) { _nwnxPlayer.SetQuickBarSlot(oPC, 2, qbs); } else if (_nwnxPlayer.GetQuickBarSlot(oPC, 3).ObjectType == QuickBarSlotType.Empty) { _nwnxPlayer.SetQuickBarSlot(oPC, 3, qbs); } else if (_nwnxPlayer.GetQuickBarSlot(oPC, 4).ObjectType == QuickBarSlotType.Empty) { _nwnxPlayer.SetQuickBarSlot(oPC, 4, qbs); } else if (_nwnxPlayer.GetQuickBarSlot(oPC, 5).ObjectType == QuickBarSlotType.Empty) { _nwnxPlayer.SetQuickBarSlot(oPC, 5, qbs); } else if (_nwnxPlayer.GetQuickBarSlot(oPC, 6).ObjectType == QuickBarSlotType.Empty) { _nwnxPlayer.SetQuickBarSlot(oPC, 6, qbs); } else if (_nwnxPlayer.GetQuickBarSlot(oPC, 7).ObjectType == QuickBarSlotType.Empty) { _nwnxPlayer.SetQuickBarSlot(oPC, 7, qbs); } else if (_nwnxPlayer.GetQuickBarSlot(oPC, 8).ObjectType == QuickBarSlotType.Empty) { _nwnxPlayer.SetQuickBarSlot(oPC, 8, qbs); } else if (_nwnxPlayer.GetQuickBarSlot(oPC, 9).ObjectType == QuickBarSlotType.Empty) { _nwnxPlayer.SetQuickBarSlot(oPC, 9, qbs); } else if (_nwnxPlayer.GetQuickBarSlot(oPC, 10).ObjectType == QuickBarSlotType.Empty) { _nwnxPlayer.SetQuickBarSlot(oPC, 10, qbs); } } oPC.SendMessage(_color.Green("Perk Purchased: " + perk.Name + " (Lvl. " + pcPerk.PerkLevel + ")")); App.ResolveByInterface <IPerk>("Perk." + perk.ScriptName, (perkScript) => { if (perkScript == null) { return; } perkScript.OnPurchased(oPC, pcPerk.PerkLevel); }); } else { oPC.FloatingText(_color.Red("You cannot purchase the perk at this time.")); } }
public void OnModuleNWNXChat(NWPlayer sender) { string originalMessage = _nwnxChat.GetMessage().Trim(); if (!CanHandleChat(sender, originalMessage)) { return; } var split = originalMessage.Split(' ').ToList(); // Commands with no arguments won't be split, so if we didn't split anything then add the command to the split list manually. if (split.Count <= 0) { split.Add(originalMessage); } split[0] = split[0].ToLower(); string command = split[0].Substring(1, split[0].Length - 1); split.RemoveAt(0); _nwnxChat.SkipMessage(); if (!App.IsKeyRegistered <IChatCommand>("ChatCommand." + command)) { sender.SendMessage(_color.Red("Invalid chat command. Use '/help' to get a list of available commands.")); return; } App.ResolveByInterface <IChatCommand>("ChatCommand." + command, chatCommand => { string args = string.Join(" ", split); if (!chatCommand.RequiresTarget) { ProcessChatCommand(chatCommand, sender, null, null, args); } else { string error = chatCommand.ValidateArguments(sender, split.ToArray()); if (!string.IsNullOrWhiteSpace(error)) { sender.SendMessage(error); return; } sender.SetLocalString("CHAT_COMMAND", command); sender.SetLocalString("CHAT_COMMAND_ARGS", args); sender.SendMessage("Please use your 'Chat Command Targeter' feat to select the target of this chat command."); if (_.GetHasFeat((int)CustomFeatType.ChatCommandTargeter, sender) == FALSE || sender.IsDM) { _nwnxCreature.AddFeatByLevel(sender, (int)CustomFeatType.ChatCommandTargeter, 1); if (sender.IsDM) { var qbs = _nwnxPlayer.GetQuickBarSlot(sender, 11); if (qbs.ObjectType == QuickBarSlotType.Empty) { _nwnxPlayer.SetQuickBarSlot(sender, 11, _nwnxQBS.UseFeat((int)CustomFeatType.ChatCommandTargeter)); } } } } }); }