/// <summary> /// 领悟秘籍诀要 /// </summary> /// <param name="secret">Secret.</param> public void StudySecret(BookData book, SecretData secret) { List <SecretData> secrets = null; db = OpenDb(); SqliteDataReader sqReader = db.ExecuteQuery("select Id, ExpData, SecretsData from BookExpsTable where BookId = " + book.Id + " and BelongToRoleId = '" + currentRoleId + "'"); if (sqReader.Read()) { ExpData exp = JsonManager.GetInstance().DeserializeObject <ExpData>(DESStatics.StringDecder(sqReader.GetString(sqReader.GetOrdinal("ExpData")))); secrets = JsonManager.GetInstance().DeserializeObject <List <SecretData> >(DESStatics.StringDecder(sqReader.GetString(sqReader.GetOrdinal("SecretsData")))); int bookLv = Statics.GetBookLV(exp.Cur); if (secrets.Count >= bookLv) { AlertCtrl.Show(string.Format("<color=\"{0}\">{1}</color>目前只能领悟最多{2}张诀要", Statics.GetQualityColorString(book.Quality), book.Name, bookLv)); db.CloseSqlConnection(); return; } else { if (secrets.FindIndex(item => item.Type == secret.Type) < 0) { secrets.Add(secret); db.ExecuteQuery("update BookExpsTable set SecretsData = '" + DESStatics.StringEncoder(JsonManager.GetInstance().SerializeObject(secrets)) + "' where Id = " + sqReader.GetInt32(sqReader.GetOrdinal("Id"))); db.ExecuteQuery("update BookSecretsTable set BelongToBookId = '" + book.Id + "' where Id = '" + secret.PrimaryKeyId + "'"); } else { AlertCtrl.Show("该类型诀要不能重复领悟!"); db.CloseSqlConnection(); return; } } } else { secrets = new List <SecretData>() { secret }; //处理空数据初始化 db.ExecuteQuery("insert into BookExpsTable (BookId, ExpData, SecretsData, BelongToRoleId) values('" + book.Id + "', '" + DESStatics.StringEncoder(JsonManager.GetInstance().SerializeObject(new ExpData(0, Statics.GetBookMaxExp(book.Quality)))) + "', '" + DESStatics.StringEncoder(JsonManager.GetInstance().SerializeObject(secrets)) + "', '" + currentRoleId + "')"); db.ExecuteQuery("update BookSecretsTable set BelongToBookId = '" + book.Id + "' where Id = '" + secret.PrimaryKeyId + "'"); } db.CloseSqlConnection(); if (secrets != null) { Messenger.Broadcast <BookData, List <SecretData> >(NotifyTypes.DealSecretEcho, book, secrets); Statics.CreatePopMsg(Vector3.zero, string.Format("领悟<color=\"{0}\">{1}</color>后<color=\"{2}\">{3}</color>更为精进!!", Statics.GetQualityColorString(secret.Quality), secret.Name, Statics.GetQualityColorString(book.Quality), book.Name), Color.white, 30); SoundManager.GetInstance().PushSound("ui0010"); } }
public void UpdateData(BookData book, RoleData host) { bookData = book; hostRoleData = host; costStr = ""; CostData cost; for (int i = 0; i < bookData.Needs.Count; i++) { cost = bookData.Needs[i]; costStr += string.Format("{0}张{1} ", cost.Num, JsonManager.GetInstance().GetMapping <ItemData>("ItemDatas", cost.Id).Name); } }
void sendUnUseBook(int index) { BookData book = booksData[index]; Messenger.Broadcast <int>(NotifyTypes.UnuseBook, book.PrimaryKeyId); if (!book.IsMindBook && !book.IsLostKnowledge) { //卸下秘籍的同时要清除掉心法 List <BookData> equipedBooks = booksData.FindAll(item => item.IsMindBook && item.BeUsingByRoleId != ""); for (int i = equipedBooks.Count - 1; i >= 0; i--) { Messenger.Broadcast <int>(NotifyTypes.UnuseBook, equipedBooks[i].PrimaryKeyId); } } }
public void UpdateData(List <SecretData> secrets, BookData book, List <SecretData> hasSecrets) { secretsData = secrets; bookData = book; hasSecretsData = hasSecrets; if (hasSecretsData != null) { secretsData.Sort((a, b) => b.Quality.CompareTo(a.Quality)); secretsData.InsertRange(0, hasSecretsData); } else { //排序,能融合的排前面,之后按品质倒序排列 secretsData.Sort((a, b) => { List <SecretData> sameSecretsA = secretsData.FindAll(sec => sec.Type == a.Type && sec.Quality == a.Quality); List <SecretData> sameSecretsB = secretsData.FindAll(sec => sec.Type == b.Type && sec.Quality == b.Quality); if (sameSecretsA.Count >= 2) { if (sameSecretsB.Count >= 2) { return(b.Quality.CompareTo(a.Quality)); } else { return(-1); } } else { if (sameSecretsB.Count >= 2) { return(1); } else { return(b.Quality.CompareTo(a.Quality)); } } }); } }
void sendUseBook(int index) { BookData book = booksData[index]; BookData findBook; if (!book.IsMindBook) { if (!book.IsLostKnowledge) { findBook = booksData.Find(item => item.BeUsingByRoleId != "" && item.IsMindBook == false && item.IsLostKnowledge == false); if (findBook != null) { AlertCtrl.Show("只能随身携带一本秘籍!"); return; } } else { findBook = booksData.Find(item => item.BeUsingByRoleId != "" && item.IsMindBook == false && item.IsLostKnowledge == true); if (findBook != null) { AlertCtrl.Show("只能随身携带一本绝学!"); return; } } Messenger.Broadcast <int>(NotifyTypes.UseBook, book.PrimaryKeyId); } else { findBook = booksData.Find(item => item.BeUsingByRoleId != "" && item.IsMindBook == false && item.IsLostKnowledge == false); if (findBook == null) { AlertCtrl.Show("没有秘籍在身不能使用心法!"); return; } Messenger.Broadcast <int>(NotifyTypes.UseBook, book.PrimaryKeyId); } }
public void UpdateData(BookData book) { bookData = book; bookData.MakeJsonToModel(); }
/// <summary> /// 使用物品 /// </summary> /// <param name="Id">Identifier.</param> public void UseItem(int id) { db = OpenDb(); string itemId = ""; ItemType type = ItemType.None; int num = 0; SqliteDataReader sqReader = db.ExecuteQuery("select ItemId, Type, Num from BagTable where Id = " + id); if (sqReader.Read()) { itemId = sqReader.GetString(sqReader.GetOrdinal("ItemId")); type = (ItemType)sqReader.GetInt32(sqReader.GetOrdinal("Type")); num = sqReader.GetInt32(sqReader.GetOrdinal("Num")); } db.CloseSqlConnection(); if (type != ItemType.None && num > 0) { ItemData item; switch (type) { case ItemType.Food: Eat(id, num); break; case ItemType.Weapon: item = JsonManager.GetInstance().GetMapping <ItemData>("ItemDatas", itemId); if (AddNewWeapon(item.StringValue, "")) { WeaponData weapon = JsonManager.GetInstance().GetMapping <WeaponData>("Weapons", item.StringValue); Statics.CreatePopMsg(Vector3.zero, string.Format("<color=\"{0}\">{1}</color>+1", Statics.GetQualityColorString(weapon.Quality), weapon.Name), Color.white, 30); //删除兵器盒 db = OpenDb(); db.ExecuteQuery("delete from BagTable where Id = " + id); db.CloseSqlConnection(); //重新加载背包数据 GetBagPanelData(); } else { AlertCtrl.Show("兵器匣已满,请先整理兵器匣"); } break; case ItemType.Book: item = JsonManager.GetInstance().GetMapping <ItemData>("ItemDatas", itemId); BookData book = JsonManager.GetInstance().GetMapping <BookData>("Books", item.StringValue); if (AddNewBook(item.StringValue, "")) { Statics.CreatePopMsg(Vector3.zero, string.Format("<color=\"{0}\">{1}</color>+1", Statics.GetQualityColorString(book.Quality), book.Name), Color.white, 30); //删除秘籍盒 db = OpenDb(); db.ExecuteQuery("delete from BagTable where Id = " + id); db.CloseSqlConnection(); //重新加载背包数据 GetBagPanelData(); } else { AlertCtrl.Show(string.Format("你已经习得<color=\"{0}\">{1}</color>, 无需再研读", Statics.GetQualityColorString(book.Quality), book.Name)); } break; default: AlertCtrl.Show("该物品不可使用!"); break; } } }
public void UpdateData(BookData book) { bookData = book; info = ""; if (bookData.MaxHPPlus != 0) { info += string.Format("最大气血:{0}", (bookData.MaxHPPlus > 0 ? "+" : "") + bookData.MaxHPPlus.ToString()); } if (bookData.PhysicsDefensePlus != 0) { info += info == "" ? "" : "\n"; info += string.Format("外防:{0}", (bookData.PhysicsDefensePlus > 0 ? "+" : "") + bookData.PhysicsDefensePlus.ToString()); } if (bookData.MagicAttackPlus != 0) { info += info == "" ? "" : "\n"; info += string.Format("内功:{0}", (bookData.MagicAttackPlus > 0 ? "+" : "") + bookData.MagicAttackPlus.ToString()); } if (bookData.MagicDefensePlus != 0) { info += info == "" ? "" : "\n"; info += string.Format("内防:{0}", (bookData.MagicDefensePlus > 0 ? "+" : "") + bookData.MagicDefensePlus.ToString()); } if (bookData.DodgePlus != 0) { info += info == "" ? "" : "\n"; info += string.Format("轻功:{0}", (bookData.DodgePlus > 0 ? "+" : "") + bookData.DodgePlus.ToString()); } if (bookData.HurtCutRatePlus != 0) { info += info == "" ? "" : "\n"; info += string.Format("减伤:{0}%", (bookData.HurtCutRatePlus > 0 ? "+" : "") + (bookData.HurtCutRatePlus * 100).ToString()); } if (bookData.DrugResistance > 0) { info += info == "" ? "" : "\n"; info += string.Format("中毒抵抗:持续{0}招", bookData.DrugResistance); } if (bookData.DisarmResistance > 0) { info += info == "" ? "" : "\n"; info += string.Format("缴械抵抗:持续{0}招", bookData.DisarmResistance); } if (bookData.CanNotMoveResistance > 0) { info += info == "" ? "" : "\n"; info += string.Format("定身抵抗:持续{0}招", bookData.CanNotMoveResistance); } if (bookData.VertigoResistance > 0) { info += info == "" ? "" : "\n"; info += string.Format("眩晕抵抗:持续{0}招", bookData.VertigoResistance); } if (bookData.SlowResistance > 0) { info += info == "" ? "" : "\n"; info += string.Format("迟缓抵抗:持续{0}招", bookData.SlowResistance); } if (bookData.ChaosResistance > 0) { info += info == "" ? "" : "\n"; info += string.Format("混乱抵抗:持续{0}招", bookData.ChaosResistance); } }
/// <summary> /// 使用物品 /// </summary> /// <param name="Id">Identifier.</param> public void UseItem(int id) { db = OpenDb(); string itemId = ""; ItemType type = ItemType.None; int num = 0; SqliteDataReader sqReader = db.ExecuteQuery("select ItemId, Type, Num from BagTable where Id = " + id); if (sqReader.Read()) { itemId = sqReader.GetString(sqReader.GetOrdinal("ItemId")); type = (ItemType)sqReader.GetInt32(sqReader.GetOrdinal("Type")); num = sqReader.GetInt32(sqReader.GetOrdinal("Num")); } db.CloseSqlConnection(); if (type != ItemType.None && num > 0) { ItemData item; switch (type) { case ItemType.Food: if (UserModel.CurrentUserData.PositionStatu == UserPositionStatusType.InArea) { Eat(id, num); SoundManager.GetInstance().PushSound("ui0004"); } else { AlertCtrl.Show("野外闯荡江湖时才能吃干粮"); } break; case ItemType.Weapon: item = JsonManager.GetInstance().GetMapping <ItemData>("ItemDatas", itemId); if (AddNewWeapon(item.StringValue, "")) { WeaponData weapon = JsonManager.GetInstance().GetMapping <WeaponData>("Weapons", item.StringValue); Statics.CreatePopMsg(Vector3.zero, string.Format("<color=\"{0}\">{1}</color>+1", Statics.GetQualityColorString(weapon.Quality), weapon.Name), Color.white, 30); //删除兵器盒 db = OpenDb(); db.ExecuteQuery("delete from BagTable where Id = " + id); db.CloseSqlConnection(); //重新加载背包数据 GetBagPanelData(); SoundManager.GetInstance().PushSound("ui0004"); } else { AlertCtrl.Show("兵器匣已满,请先整理兵器匣"); } break; case ItemType.Book: item = JsonManager.GetInstance().GetMapping <ItemData>("ItemDatas", itemId); BookData book = JsonManager.GetInstance().GetMapping <BookData>("Books", item.StringValue); if (AddNewBook(item.StringValue, "")) { Statics.CreatePopMsg(Vector3.zero, string.Format("<color=\"{0}\">{1}</color>+1", Statics.GetQualityColorString(book.Quality), book.Name), Color.white, 30); //删除秘籍盒 db = OpenDb(); db.ExecuteQuery("delete from BagTable where Id = " + id); db.CloseSqlConnection(); //重新加载背包数据 GetBagPanelData(); SoundManager.GetInstance().PushSound("ui0004"); } else { AlertCtrl.Show(string.Format("你已经习得<color=\"{0}\">{1}</color>, 无需再研读", Statics.GetQualityColorString(book.Quality), book.Name)); } break; case ItemType.RandomSecre: //打开随机诀要锦囊 item = JsonManager.GetInstance().GetMapping <ItemData>("ItemDatas", itemId); db = OpenDb(); sqReader = db.ExecuteQuery("select count(*) as num from BookSecretsTable where BelongToRoleId = '" + currentRoleId + "'"); bool isSecretsFull = false; if (sqReader.Read()) { isSecretsFull = sqReader.GetInt32(sqReader.GetOrdinal("num")) >= MaxSecretNumOfBag; } if (!isSecretsFull) { //添加新的诀要 SecretData secret = Statics.CreateNewSecret(Statics.GetRandomSecretType(item.StringValue), QualityType.White); db.ExecuteQuery("insert into BookSecretsTable (SecretData, T, Q, BelongToBookId, BelongToRoleId) values('" + DESStatics.StringEncoder(JsonManager.GetInstance().SerializeObjectDealVector(secret)) + "', " + ((short)secret.Type) + ", " + ((short)secret.Quality) + ", '', '" + currentRoleId + "')"); PlayerPrefs.SetString("AddedNewBookFlag", "true"); PlayerPrefs.SetString("AddedNewSecretFlag", "true"); Messenger.Broadcast(NotifyTypes.MakeRoleInfoPanelRedPointRefresh); Statics.CreatePopMsg(Vector3.zero, string.Format("<color=\"{0}\">{1}</color>+1", Statics.GetQualityColorString(secret.Quality), secret.Name), Color.white, 30); db.ExecuteQuery("delete from BagTable where Id = " + id); db.CloseSqlConnection(); //重新加载背包数据 GetBagPanelData(); SoundManager.GetInstance().PushSound("ui0004"); } else { AlertCtrl.Show(string.Format("诀要背包上限为{0},请先清理背包", MaxSecretNumOfBag)); } break; default: AlertCtrl.Show("该物品不可使用!"); break; } } }
/// <summary> /// 研读秘籍 /// </summary> /// <param name="id">Identifier.</param> public void ReadBook(int id) { bool read = false; BookData book = null; db = OpenDb(); SqliteDataReader sqReader = db.ExecuteQuery("select BookId from BooksTable where Id = " + id); if (sqReader.Read()) { book = JsonManager.GetInstance().GetMapping <BookData>("Books", sqReader.GetString(sqReader.GetOrdinal("BookId"))); if (book.Occupation == OccupationType.None || book.Occupation == HostData.Occupation) { bool enough = true; string msg = ""; CostData cost; ItemData item; //计算需要的物品是否足够 for (int i = 0; i < book.Needs.Count; i++) { cost = book.Needs[i]; item = JsonManager.GetInstance().GetMapping <ItemData>("ItemDatas", cost.Id); sqReader = db.ExecuteQuery("select Num from BagTable where ItemId = '" + cost.Id + "' and BelongToRoleId = '" + currentRoleId + "'"); if (sqReader.Read()) { if (sqReader.GetInt32(sqReader.GetOrdinal("Num")) < cost.Num) { enough = false; msg = string.Format("行囊里的{0}不够", item.Name); break; } } else { enough = false; msg = string.Format("行囊里并不曾见过有{0}", item.Name); break; } } if (enough) { int num; //扣除物品 for (int i = 0; i < book.Needs.Count; i++) { cost = book.Needs[i]; sqReader = db.ExecuteQuery("select Id, Num from BagTable where ItemId = '" + cost.Id + "' and BelongToRoleId = '" + currentRoleId + "'"); if (sqReader.Read()) { num = sqReader.GetInt32(sqReader.GetOrdinal("Num")) - cost.Num; num = num < 0 ? 0 : num; if (num > 0) { db.ExecuteQuery("update BagTable set Num = " + num + " where Id = " + sqReader.GetInt32(sqReader.GetOrdinal("Id"))); } else { db.ExecuteQuery("delete from BagTable where Id = " + sqReader.GetInt32(sqReader.GetOrdinal("Id"))); } } } //研读秘籍 db.ExecuteQuery("update BooksTable set State = " + ((int)BookStateType.Read) + ", SeatNo = 888 where Id = " + id); read = true; } else { AlertCtrl.Show(msg, null); } } else { AlertCtrl.Show(string.Format("非{0}弟子不得研习<color=\"{1}\">{2}</color>!", Statics.GetOccupationName(book.Occupation), Statics.GetQualityColorString(book.Quality), book.Name)); } } db.CloseSqlConnection(); if (read && book != null) { Statics.CreatePopMsg(Vector3.zero, string.Format("研读<color=\"{0}\">{1}</color>后使你武功精进!", Statics.GetQualityColorString(book.Quality), book.Name), Color.white, 30); GetBooksOfForbiddenAreaPanelData(book.BelongToCityId); } }
/// <summary> /// 装备秘籍 /// </summary> /// <param name="id">Identifier.</param> public void UseBook(int id) { //查询主角当前的兵器类型 WeaponType hostWeaponType = GetHostWeaponType(); db = OpenDb(); //查询角色信息 SqliteDataReader sqReader = db.ExecuteQuery("select RoleId, RoleData from RolesTable where RoleId = '" + currentRoleId + "' and BelongToRoleId = '" + currentRoleId + "'"); int addIndex = -1; if (sqReader.Read()) { string roleId = sqReader.GetString(sqReader.GetOrdinal("RoleId")); //获取角色数据 RoleData role = JsonManager.GetInstance().DeserializeObject <RoleData>(sqReader.GetString(sqReader.GetOrdinal("RoleData"))); sqReader = db.ExecuteQuery("select BookId, SeatNo from BooksTable where SeatNo >= 0 and State = " + ((int)BookStateType.Read) + " and BelongToRoleId = '" + currentRoleId + "'"); List <string> resourceBookDataIds = new List <string>(); List <int> seatNos = new List <int>() { -1, -1, -1 }; int seatNo; while (sqReader.Read()) { seatNo = sqReader.GetInt32(sqReader.GetOrdinal("SeatNo")); if (seatNos.Count > seatNo) { seatNos[seatNo] = seatNo; resourceBookDataIds.Add(sqReader.GetString(sqReader.GetOrdinal("BookId"))); } } addIndex = seatNos.FindIndex(item => item == -1); if (addIndex >= 0) { sqReader = db.ExecuteQuery("select BookId from BooksTable where Id = " + id); if (sqReader.Read()) { string bookId = sqReader.GetString(sqReader.GetOrdinal("BookId")); BookData bookData = JsonManager.GetInstance().GetMapping <BookData>("Books", bookId); if (bookData.LimitWeaponType == WeaponType.None || hostWeaponType == WeaponType.None || bookData.LimitWeaponType == hostWeaponType) { resourceBookDataIds.Add(bookId); db.ExecuteQuery("update BooksTable set SeatNo = " + addIndex + ", BeUsingByRoleId = '" + currentRoleId + "' where Id = " + id); //更新角色的秘籍信息 role.ResourceBookDataIds = resourceBookDataIds; db.ExecuteQuery("update RolesTable set RoleData = '" + JsonManager.GetInstance().SerializeObjectDealVector(role) + "' where RoleId = '" + roleId + "'"); } else { AlertCtrl.Show(string.Format("装备上[{0}]才能习练<color=\"{1}\">{2}</color>\n{3}", Statics.GetEnmuDesc <WeaponType>(bookData.LimitWeaponType), Statics.GetQualityColorString(bookData.Quality), bookData.Name, hostWeaponType != WeaponType.None ? ("你现在拿的是[" + Statics.GetEnmuDesc <WeaponType>(hostWeaponType) + "]") : "你现在手里没有任何兵器"), null); } } } } db.CloseSqlConnection(); if (addIndex >= 0) { GetBooksListPanelData(); CallRoleInfoPanelData(false); //刷新队伍数据 } else { AlertCtrl.Show("最多只能同时习练3本秘籍!", null); } }
public void UpdateData(BookData book, ExpAndSecretData expAndSecret) { bookData = book; bookData.MakeJsonToModel(); expAndSecretData = expAndSecret; info = ""; if (bookData.MaxHPPlus != 0) { info += string.Format("最大气血:{0}", (bookData.MaxHPPlus > 0 ? "+" : "") + bookData.MaxHPPlus.ToString()); } if (bookData.PhysicsDefensePlus != 0) { info += info == "" ? "" : ", "; info += string.Format("外防:{0}", (bookData.PhysicsDefensePlus > 0 ? "+" : "") + bookData.PhysicsDefensePlus.ToString()); } if (bookData.MagicAttackPlus != 0) { info += info == "" ? "" : ", "; info += string.Format("内功:{0}", (bookData.MagicAttackPlus > 0 ? "+" : "") + bookData.MagicAttackPlus.ToString()); } if (bookData.MagicDefensePlus != 0) { info += info == "" ? "" : ", "; info += string.Format("内防:{0}", (bookData.MagicDefensePlus > 0 ? "+" : "") + bookData.MagicDefensePlus.ToString()); } if (bookData.DodgePlus != 0) { info += info == "" ? "" : ", "; info += string.Format("轻功:{0}", (bookData.DodgePlus > 0 ? "+" : "") + bookData.DodgePlus.ToString()); } if (bookData.HurtCutRatePlus != 0) { info += info == "" ? "" : ", "; info += string.Format("减伤:{0}%", (bookData.HurtCutRatePlus > 0 ? "+" : "") + (bookData.HurtCutRatePlus * 100).ToString()); } if (bookData.DrugResistance > 0) { info += info == "" ? "" : ", "; info += string.Format("抗中毒:抵消{0}秒", bookData.DrugResistance); } if (bookData.DisarmResistance > 0) { info += info == "" ? "" : ", "; info += string.Format("抗缴械:抵消{0}秒", bookData.DisarmResistance); } if (bookData.CanNotMoveResistance > 0) { info += info == "" ? "" : ", "; info += string.Format("抗定身:抵消{0}秒", bookData.CanNotMoveResistance); } if (bookData.VertigoResistance > 0) { info += info == "" ? "" : ", "; info += string.Format("抗眩晕:抵消{0}秒", bookData.VertigoResistance); } if (bookData.SlowResistance > 0) { info += info == "" ? "" : ", "; info += string.Format("抗迟缓:抵消{0}秒", bookData.SlowResistance); } if (bookData.ChaosResistance > 0) { info += info == "" ? "" : ", "; info += string.Format("抗混乱:抵消{0}秒", bookData.ChaosResistance); } secretInfo = ""; if (expAndSecretData.Secrets.Count > 0) { for (int i = 0, len = expAndSecretData.Secrets.Count; i < len; i++) { secretInfo += expAndSecretData.Secrets[i].GetDesc(); if (i < len - 1) { secretInfo += ", "; } } } }