public void InitSetting() { Client.IGameOption option = Client.ClientGlobal.Instance().gameOption; if (option == null) { return; } for (int i = (int)AutoRecoverGrid.MedicalType.Hp; i < (int)AutoRecoverGrid.MedicalType.Max; ++i) { AutoRecoverGrid.MedicalType mtype = (AutoRecoverGrid.MedicalType)i; bool select = option.GetInt("MedicalSetting", mtype.ToString(), 1) == 1; float value = option.GetInt("MedicalSetting", mtype.ToString() + "value", 50) * 0.01f; uint itemid = (uint)option.GetInt("MedicalSetting", mtype.ToString() + "itemid", 0); if (!m_dicMedical.ContainsKey(mtype)) { m_dicMedical.Add(mtype, new UseMedicalInfo()); } m_dicMedical[mtype].select = select; m_dicMedical[mtype].Type = mtype; m_dicMedical[mtype].triggerValue = value; m_dicMedical[mtype].itemid = itemid; } }
/// <summary> /// 使用瞬药 /// </summary> public void UseAtOnceMedicine() { bool canRunning = Engine.Utility.EventEngine.Instance().DispatchVote((int)GameVoteEventID.AUTORECOVER, null); if (!canRunning) { Engine.Utility.Log.LogGroup("ZCX", "canRunning false"); return; } //是否可以使用瞬药 bool canUseAtOnce = Engine.Utility.EventEngine.Instance().DispatchVote((int)GameVoteEventID.AUTOAtOnceRECOVER, null); if (!canUseAtOnce) { Engine.Utility.Log.LogGroup("ZCX", "canUseAtOnce false"); return; } Client.IPlayer mainPlayer = Client.ClientGlobal.Instance().MainPlayer; if (mainPlayer == null || mainPlayer.IsDead()) { Engine.Utility.Log.LogGroup("ZCX", "player dead"); return; } Dictionary <AutoRecoverGrid.MedicalType, UseMedicalInfo> .Enumerator iter = m_dicMedical.GetEnumerator(); while (iter.MoveNext()) { UseMedicalInfo medical = iter.Current.Value; if (medical != null && medical.select) { AutoRecoverGrid.MedicalType mtype = medical.Type; float rate = 1f; if (AutoRecoverGrid.MedicalType.HpAtOnce == mtype) {//瞬药 单独处理 rate = mainPlayer.GetProp((int)CreatureProp.Hp) * 1f / mainPlayer.GetProp((int)CreatureProp.MaxHp); if (rate < medical.triggerValue) { uint itemid = medical.itemid; if (itemid != 0 && CanUse(itemid)) { List <BaseItem> itemdataList = DataManager.Manager <ItemManager>().GetItemByBaseId(itemid); if (itemdataList.Count > 0) { DataManager.Instance.Sender.UseItem( mainPlayer.GetID(), (uint)GameCmd.SceneEntryType.SceneEntry_Player, itemdataList[0].QWThisID, 1); } } } } } } }
protected override void OnShow(object data) { base.OnShow(data); if (data == null) { return; } m_MedicineSettingParam = (MedicineSettingParam)data; AutoRecoverGrid.MedicalType type = (AutoRecoverGrid.MedicalType)m_MedicineSettingParam.type; OnShowItems(type); }
void OnShowItems(AutoRecoverGrid.MedicalType type) { m_trans_root.DestroyChildren(); m_lstMedicalReplace.Clear(); ItemManager itemMgr = DataManager.Manager <ItemManager>(); List <table.ItemDataBase> items = null; switch (type) { case AutoRecoverGrid.MedicalType.Hp: items = GetItemListByType(GameCmd.ItemBaseType.ItemBaseType_Consumption, 1); break; case AutoRecoverGrid.MedicalType.Mp: items = GetItemListByType(GameCmd.ItemBaseType.ItemBaseType_Consumption, 2); break; case AutoRecoverGrid.MedicalType.HpAtOnce: items = GetItemListByType(GameCmd.ItemBaseType.ItemBaseType_Consumption, 3); break; case AutoRecoverGrid.MedicalType.PetHp: items = GetItemListByType(GameCmd.ItemBaseType.ItemBaseType_Consumption, 4); break; default: break; } if (items != null) { for (int i = 0; i < items.Count; i++) { GameObject go = NGUITools.AddChild(m_trans_root.gameObject, m_widget_itemprefab.gameObject); go.transform.localPosition = new Vector3(0, -i * 100, 0); MedicalReplace mr = go.AddComponent <MedicalReplace>(); go.SetActive(true); mr.Init(this, items[i], type); m_lstMedicalReplace.Add(mr); } } m_trans_root.parent.GetComponent <UIScrollView>().ResetPosition(); }
public void Init(MedicineSettingPanel parent, table.ItemDataBase itemdatabase, AutoRecoverGrid.MedicalType type) { m_parent = parent; if (itemdatabase == null) { return; } int num = DataManager.Manager <ItemManager>().GetItemNumByBaseId(itemdatabase.itemID); mtype = type; m_itemid = itemdatabase.itemID; if (uiitem != null) { uiitem.Release(); uiitem = null; } bool showGetWay = mtype != AutoRecoverGrid.MedicalType.HpAtOnce; if (num > 0) { uiitem = DataManager.Manager <UIManager>().GetUICommonItem(itemdatabase.itemID, (uint)num, 0, null, null, showGetWay); } else { uiitem = DataManager.Manager <UIManager>().GetUICommonItem(itemdatabase.itemID, (uint)num, 0, (grid) => { m_parent.OnClickItem(grid.Data.DwObjectId); }, null, showGetWay); } if (uiitem != null && iconTrans != null) { uiitem.Attach(iconTrans); //uiitem.SetPosition(true, new Vector3(0, -iconTrans.GetComponent<UIWidget>().height * 0.5f, 0)); } if (lableDes != null) { lableDes.text = itemdatabase.description; } if (lableName != null) { lableName.text = itemdatabase.itemName; } }
uint GetUseItemId(AutoRecoverGrid.MedicalType type) { Dictionary <uint, uint> dicMedicineItem = null; List <uint> lstKeys = null; if (type == AutoRecoverGrid.MedicalType.Hp) { lstKeys = m_lstHpKey; dicMedicineItem = m_dicHpMedicineItem; } else if (type == AutoRecoverGrid.MedicalType.Mp) { lstKeys = m_lstMpKey; dicMedicineItem = m_dicMpMedicineItem; } if (dicMedicineItem != null && lstKeys != null) { int playerLevel = MainPlayerHelper.GetPlayerLevel(); for (int i = lstKeys.Count - 1; i >= 0; i--) { if (playerLevel >= lstKeys[i])//可以使用 { if (dicMedicineItem.ContainsKey(lstKeys[i])) { uint id = dicMedicineItem[lstKeys[i]]; int num = DataManager.Manager <ItemManager>().GetItemNumByBaseId(id); if (num > 0) { return(id); } } } } } return(0); }
private void UseMedicine() { bool canRunning = Engine.Utility.EventEngine.Instance().DispatchVote((int)GameVoteEventID.AUTORECOVER, null); if (!canRunning) { Engine.Utility.Log.LogGroup("ZCX", "canRunning false"); return; } Client.IPlayer mainPlayer = Client.ClientGlobal.Instance().MainPlayer; if (mainPlayer == null || mainPlayer.IsDead()) { Engine.Utility.Log.LogGroup("ZCX", "player dead"); return; } Dictionary <AutoRecoverGrid.MedicalType, UseMedicalInfo> .Enumerator iter = m_dicMedical.GetEnumerator(); while (iter.MoveNext()) { UseMedicalInfo medical = iter.Current.Value; if (medical != null && medical.select) { AutoRecoverGrid.MedicalType mtype = medical.Type; float rate = 1f; if (AutoRecoverGrid.MedicalType.HpAtOnce == mtype) {//瞬药 单独处理 continue; } if (AutoRecoverGrid.MedicalType.Hp == mtype || (AutoRecoverGrid.MedicalType.HpAtOnce == mtype)) { rate = mainPlayer.GetProp((int)CreatureProp.Hp) * 1f / mainPlayer.GetProp((int)CreatureProp.MaxHp); } else if (AutoRecoverGrid.MedicalType.Mp == mtype) { rate = mainPlayer.GetProp((int)CreatureProp.Mp) * 1f / mainPlayer.GetProp((int)CreatureProp.MaxMp); // string log = string.Format("rate = {0} trigger = {1} mp = {2} max= {3}", rate, medical.triggerValue, mainPlayer.GetProp((int)CreatureProp.Mp), mainPlayer.GetProp((int)CreatureProp.MaxMp)); //UnityEngine.Debug.LogError(log); } else if (AutoRecoverGrid.MedicalType.PetHp == mtype) { if (DataManager.Manager <PetDataManager>().CurFightingPet == 0) { continue; } Client.INPC pet = DataManager.Manager <PetDataManager>().GetNpcByPetID(DataManager.Manager <PetDataManager>().CurFightingPet); if (pet != null) { int a = pet.GetProp((int)CreatureProp.Hp); rate = pet.GetProp((int)CreatureProp.Hp) * 1f / pet.GetProp((int)CreatureProp.MaxHp); } } if (rate < medical.triggerValue) { uint itemid = medical.itemid; if (AutoRecoverGrid.MedicalType.Hp == mtype) { if (UnityEngine.Time.realtimeSinceStartup - m_nhpsendTime < 5f) { continue; } itemid = GetUseItemId(mtype); } else if (AutoRecoverGrid.MedicalType.Mp == mtype) { if (UnityEngine.Time.realtimeSinceStartup - m_nmpsendTime < 5f) { continue; } itemid = GetUseItemId(mtype); } if (itemid != 0 && CanUse(itemid)) { List <BaseItem> itemdataList = DataManager.Manager <ItemManager>().GetItemByBaseId(itemid); if (itemdataList.Count > 0) { if (AutoRecoverGrid.MedicalType.PetHp == mtype) { uint petID = DataManager.Manager <PetDataManager>().GetNpcIDByPetID(DataManager.Manager <PetDataManager>().CurFightingPet); DataManager.Instance.Sender.UseItem( petID, (uint)GameCmd.SceneEntryType.SceneEntry_NPC, itemdataList[0].QWThisID, 1); } else { DataManager.Instance.Sender.UseItem( mainPlayer.GetID(), (uint)GameCmd.SceneEntryType.SceneEntry_Player, itemdataList[0].QWThisID, 1); if (AutoRecoverGrid.MedicalType.Hp == mtype) { m_nhpsendTime = UnityEngine.Time.realtimeSinceStartup; } else if (AutoRecoverGrid.MedicalType.Mp == mtype) { m_nmpsendTime = UnityEngine.Time.realtimeSinceStartup; } } // if (UnityEngine.Application.isEditor) // { // UnityEngine.Debug.Log(string.Format("使用物品 {0}" , itemid)); // } } } } } } }