上个贴我们实现了为一项城池事务指定多个武将记忆安排
这次我们研究为一个武将记忆安排多个事务
把五边形战士充分利用起来了
先上图看看效果
:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=a7d1890cf8096b6381195e583c328733/76a2761273f08202f738df1c0dfbfbedaa641b52.jpg?tbpicau=2025-02-21-05_7e62dc92c7cbce122a734ec3ff649b9d)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=0f40c72df73533faf5b6932698d2fdca/d8d2fcb4c9ea15ce204bae2af0003af33b87b253.jpg?tbpicau=2025-02-21-05_aff3be0754ea7417d964fc2cf3b7d544)
原理:
npcData.Reserve1属性是用来存储武将记忆事务的,我们用"|"将多个事务拼接起来,用的时候再拆分,对每个事务进行原来的操作![](http://tb2.bdstatic.com/tb/editor/images/face/i_f03.png?t=20140803)
流程:
【武将列表界面的显示】
1、搜索 SpecialInfo方法,找到两个方法,都需要替换
![](http://tiebapic.baidu.com/forum/w%3D580/sign=d464aa13fca1cd1105b672288913c8b0/4c340645ad3459829e0fabb14af431adcaef8473.jpg?tbpicau=2025-02-21-05_230327b93740e2d4e71a0ae265be1f01)
找到如图位置,
if (propName == "Reserve1")
{
}
【替换】
-----------
if (propName == "Reserve1")
{
string npcRecordAffair = GameManager.Instance.m_NpcBehaviorTrig_Affair.GetNpcRecordAffair(data);
if (npcRecordAffair != "0")
{
string[] array = npcRecordAffair.Split(new char[]
{
'|'
});
string str = "";
for (int i = 0; i < array.Length; i++)
{
str = str + GameManager.Instance.m_NpcBehaviorModel.GetBehaviorDes(array[i]) + "|";
}
if (str.EndsWith("|"))
{
text = str.Remove(str.LastIndexOf("|"));
}
text = Tools.ChangeTextColor(text, ColorEnum.DarkVoilet);
}
else
{
text = text2;
}
}
-----------
![](http://tiebapic.baidu.com/forum/w%3D580/sign=d9d47720c144ebf86d716437e9f8d736/7fe6ecfafbedab64b1fb03e3b136afc378311e77.jpg?tbpicau=2025-02-21-05_cf46b8956afaed6d0fdb7b23555e814f)
【月初武将根据记忆选择事务】
2、搜索NpcChooseCityCommonAffair方法,找到如图两个位置,先【替换】1
----------------------
if (this.m_SettingModel.IsRecordAffair)
{
for (int j = 0; j < list2.Count; j++)
{
PlayerNpcData playerNpcData2 = list2[j];
string npcRecordAffair = this.GetNpcRecordAffair(playerNpcData2);
if (npcRecordAffair != "0" && playerNpcData2.Reserve2 == "0")
{
string[] array = npcRecordAffair.Split(new char[]
{
'|'
});
for (int num9 = 0; num9 < array.Length; num9++)
{
string trimmedRecord = array[num9].Trim();
if (!string.IsNullOrEmpty(trimmedRecord))
{
List<PlayerNpcData> list3;
if (dictionary.ContainsKey(trimmedRecord))
{
list3 = dictionary[trimmedRecord];
}
else
{
list3 = new List<PlayerNpcData>();
}
list3.Add(playerNpcData2);
dictionary[trimmedRecord] = list3;
}
}
}
}
}
![](http://tiebapic.baidu.com/forum/w%3D580/sign=364cc902d513b07ebdbd50003cd69113/5df1917bdab44aede3cdf0c7f51c8701a08bfb7a.jpg?tbpicau=2025-02-21-05_7e6d688a1ebb38f7e93447755a4bffa3)
再【替换】2
----------------------
PlayerNpcData playerNpcData3 = list2[l];
string text = "1";
bool flag = false;
string npcRecordAffair2 = this.GetNpcRecordAffair(playerNpcData3);
if (this.m_SettingModel.IsRecordAffair && npcRecordAffair2 != "0")
{
foreach (string affairType in npcRecordAffair2.Split(new char[]
{
'|'
}))
{
text = DataModel.CityAffairStaticDict[affairType].AffairStrategy;
if (!cityHaveAffairStrategyList.Contains(text))
{
flag = true;
playerNpcData3.Reserve2 = "1";
break;
}
}
}
![](http://tiebapic.baidu.com/forum/w%3D580/sign=e4234212673fb80e0cd161df06d02ffb/d138c5d8f2d3572cf415d2ffcc13632763d0c30e.jpg?tbpicau=2025-02-21-05_c1fe3fd06c037fa42bb68da45e29d53e)
【安排管理界面】
3、搜索 CreatClearAffairRecordList方法,右键编辑类,【替换】两个函数
----------------------
private void ClickClearRecordBtn(PlayerCityData cityData, PlayerNpcData npcData, string affair1)
{
SoundManager.Instance.PlayerClickSound();
string[] array = npcData.Reserve1.Split(new char[]
{
'|'
});
List<string> remainingAffairs = new List<string>();
foreach (string affair2 in array)
{
if (affair2 != affair1)
{
remainingAffairs.Add(affair2);
}
}
string[] remainingAffairsArray = remainingAffairs.ToArray();
this.curChooseNpcData.Reserve1 = string.Join("|", remainingAffairsArray);
if (string.IsNullOrEmpty(this.curChooseNpcData.Reserve1))
{
this.curChooseNpcData.Reserve1 = "0";
}
this.CreatClearAffairRecordList(cityData);
this.SetAffairTipsInfo();
}
----------------------
private void CreatClearAffairRecordList(PlayerCityData cityData)
{
Pools.Instance.GiveBackGOToPool(this.clearAffairRecordGridTrans);
List<Button> list = new List<Button>();
List<PlayerNpcData> list2 = new List<PlayerNpcData>();
List<string> name = new List<string>();
foreach (KeyValuePair<PlayerNpcData, string> entry in this.GetAffairRecordNpcList(cityData))
{
PlayerNpcData playerNpcData = entry.Key;
string npcRecordAffairs = entry.Value;
if (npcRecordAffairs != "0")
{
foreach (string affair in npcRecordAffairs.Split(new char[]
{
'|'
}))
{
if (!string.IsNullOrEmpty(affair))
{
list2.Add(playerNpcData);
Transform transform = Pools.Instance.GetGOFromPool(PrefabTabEnum.AffairRecordTab, this.clearAffairRecordGridTrans).transform;
transform.Find("City").GetComponent<Text>().text = this.m_DataModel.CityDataDict[playerNpcData.BelongCityID].CityName;
transform.Find("Name").GetComponent<Text>().text = GameManager.Instance.m_NpcModel.GetNpcName(playerNpcData, false);
Text component6 = transform.Find("Affair").GetComponent<Text>();
string behaviorDes = GameManager.Instance.m_NpcBehaviorModel.GetBehaviorDes(affair);
name.Add(affair);
component6.text = Tools.ChangeTextColor(behaviorDes, ColorEnum.DarkVoilet);
Text component7 = transform.Find("Attr").GetComponent<Text>();
CityAffairData cityAffairData = DataModel.CityAffairStaticDict[affair];
string npcAttrName = GameManager.Instance.m_NpcModel.GetNpcAttrName(cityAffairData.AffairAttr);
string attrValue = GameManager.Instance.m_NpcAttrModel.GetAttrValue(playerNpcData, npcAttrName);
component7.text = Tools.ChangeTextColor(cityAffairData.AffairAttr, ColorEnum.DarkGray) + " " + attrValue;
Button component5 = transform.Find("ClearBtn").GetComponent<Button>();
list.Add(component5);
}
}
}
}
for (int i = 0; i < list2.Count; i++)
{
PlayerNpcData npcData = list2[i];
Button button = list[i];
string text = name[i];
button.onClick.RemoveAllListeners();
button.onClick.AddListener(delegate()
{
this.ClickClearRecordBtn(cityData, npcData, text);
});
}
}
这次我们研究为一个武将记忆安排多个事务
把五边形战士充分利用起来了
先上图看看效果
![](http://tb2.bdstatic.com/tb/editor/images/face/i_f03.png?t=20140803)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=a7d1890cf8096b6381195e583c328733/76a2761273f08202f738df1c0dfbfbedaa641b52.jpg?tbpicau=2025-02-21-05_7e62dc92c7cbce122a734ec3ff649b9d)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=0f40c72df73533faf5b6932698d2fdca/d8d2fcb4c9ea15ce204bae2af0003af33b87b253.jpg?tbpicau=2025-02-21-05_aff3be0754ea7417d964fc2cf3b7d544)
原理:
npcData.Reserve1属性是用来存储武将记忆事务的,我们用"|"将多个事务拼接起来,用的时候再拆分,对每个事务进行原来的操作
![](http://tb2.bdstatic.com/tb/editor/images/face/i_f03.png?t=20140803)
流程:
【武将列表界面的显示】
1、搜索 SpecialInfo方法,找到两个方法,都需要替换
![](http://tiebapic.baidu.com/forum/w%3D580/sign=d464aa13fca1cd1105b672288913c8b0/4c340645ad3459829e0fabb14af431adcaef8473.jpg?tbpicau=2025-02-21-05_230327b93740e2d4e71a0ae265be1f01)
找到如图位置,
if (propName == "Reserve1")
{
}
【替换】
-----------
if (propName == "Reserve1")
{
string npcRecordAffair = GameManager.Instance.m_NpcBehaviorTrig_Affair.GetNpcRecordAffair(data);
if (npcRecordAffair != "0")
{
string[] array = npcRecordAffair.Split(new char[]
{
'|'
});
string str = "";
for (int i = 0; i < array.Length; i++)
{
str = str + GameManager.Instance.m_NpcBehaviorModel.GetBehaviorDes(array[i]) + "|";
}
if (str.EndsWith("|"))
{
text = str.Remove(str.LastIndexOf("|"));
}
text = Tools.ChangeTextColor(text, ColorEnum.DarkVoilet);
}
else
{
text = text2;
}
}
-----------
![](http://tiebapic.baidu.com/forum/w%3D580/sign=d9d47720c144ebf86d716437e9f8d736/7fe6ecfafbedab64b1fb03e3b136afc378311e77.jpg?tbpicau=2025-02-21-05_cf46b8956afaed6d0fdb7b23555e814f)
【月初武将根据记忆选择事务】
2、搜索NpcChooseCityCommonAffair方法,找到如图两个位置,先【替换】1
----------------------
if (this.m_SettingModel.IsRecordAffair)
{
for (int j = 0; j < list2.Count; j++)
{
PlayerNpcData playerNpcData2 = list2[j];
string npcRecordAffair = this.GetNpcRecordAffair(playerNpcData2);
if (npcRecordAffair != "0" && playerNpcData2.Reserve2 == "0")
{
string[] array = npcRecordAffair.Split(new char[]
{
'|'
});
for (int num9 = 0; num9 < array.Length; num9++)
{
string trimmedRecord = array[num9].Trim();
if (!string.IsNullOrEmpty(trimmedRecord))
{
List<PlayerNpcData> list3;
if (dictionary.ContainsKey(trimmedRecord))
{
list3 = dictionary[trimmedRecord];
}
else
{
list3 = new List<PlayerNpcData>();
}
list3.Add(playerNpcData2);
dictionary[trimmedRecord] = list3;
}
}
}
}
}
![](http://tiebapic.baidu.com/forum/w%3D580/sign=364cc902d513b07ebdbd50003cd69113/5df1917bdab44aede3cdf0c7f51c8701a08bfb7a.jpg?tbpicau=2025-02-21-05_7e6d688a1ebb38f7e93447755a4bffa3)
再【替换】2
----------------------
PlayerNpcData playerNpcData3 = list2[l];
string text = "1";
bool flag = false;
string npcRecordAffair2 = this.GetNpcRecordAffair(playerNpcData3);
if (this.m_SettingModel.IsRecordAffair && npcRecordAffair2 != "0")
{
foreach (string affairType in npcRecordAffair2.Split(new char[]
{
'|'
}))
{
text = DataModel.CityAffairStaticDict[affairType].AffairStrategy;
if (!cityHaveAffairStrategyList.Contains(text))
{
flag = true;
playerNpcData3.Reserve2 = "1";
break;
}
}
}
![](http://tiebapic.baidu.com/forum/w%3D580/sign=e4234212673fb80e0cd161df06d02ffb/d138c5d8f2d3572cf415d2ffcc13632763d0c30e.jpg?tbpicau=2025-02-21-05_c1fe3fd06c037fa42bb68da45e29d53e)
【安排管理界面】
3、搜索 CreatClearAffairRecordList方法,右键编辑类,【替换】两个函数
----------------------
private void ClickClearRecordBtn(PlayerCityData cityData, PlayerNpcData npcData, string affair1)
{
SoundManager.Instance.PlayerClickSound();
string[] array = npcData.Reserve1.Split(new char[]
{
'|'
});
List<string> remainingAffairs = new List<string>();
foreach (string affair2 in array)
{
if (affair2 != affair1)
{
remainingAffairs.Add(affair2);
}
}
string[] remainingAffairsArray = remainingAffairs.ToArray();
this.curChooseNpcData.Reserve1 = string.Join("|", remainingAffairsArray);
if (string.IsNullOrEmpty(this.curChooseNpcData.Reserve1))
{
this.curChooseNpcData.Reserve1 = "0";
}
this.CreatClearAffairRecordList(cityData);
this.SetAffairTipsInfo();
}
----------------------
private void CreatClearAffairRecordList(PlayerCityData cityData)
{
Pools.Instance.GiveBackGOToPool(this.clearAffairRecordGridTrans);
List<Button> list = new List<Button>();
List<PlayerNpcData> list2 = new List<PlayerNpcData>();
List<string> name = new List<string>();
foreach (KeyValuePair<PlayerNpcData, string> entry in this.GetAffairRecordNpcList(cityData))
{
PlayerNpcData playerNpcData = entry.Key;
string npcRecordAffairs = entry.Value;
if (npcRecordAffairs != "0")
{
foreach (string affair in npcRecordAffairs.Split(new char[]
{
'|'
}))
{
if (!string.IsNullOrEmpty(affair))
{
list2.Add(playerNpcData);
Transform transform = Pools.Instance.GetGOFromPool(PrefabTabEnum.AffairRecordTab, this.clearAffairRecordGridTrans).transform;
transform.Find("City").GetComponent<Text>().text = this.m_DataModel.CityDataDict[playerNpcData.BelongCityID].CityName;
transform.Find("Name").GetComponent<Text>().text = GameManager.Instance.m_NpcModel.GetNpcName(playerNpcData, false);
Text component6 = transform.Find("Affair").GetComponent<Text>();
string behaviorDes = GameManager.Instance.m_NpcBehaviorModel.GetBehaviorDes(affair);
name.Add(affair);
component6.text = Tools.ChangeTextColor(behaviorDes, ColorEnum.DarkVoilet);
Text component7 = transform.Find("Attr").GetComponent<Text>();
CityAffairData cityAffairData = DataModel.CityAffairStaticDict[affair];
string npcAttrName = GameManager.Instance.m_NpcModel.GetNpcAttrName(cityAffairData.AffairAttr);
string attrValue = GameManager.Instance.m_NpcAttrModel.GetAttrValue(playerNpcData, npcAttrName);
component7.text = Tools.ChangeTextColor(cityAffairData.AffairAttr, ColorEnum.DarkGray) + " " + attrValue;
Button component5 = transform.Find("ClearBtn").GetComponent<Button>();
list.Add(component5);
}
}
}
}
for (int i = 0; i < list2.Count; i++)
{
PlayerNpcData npcData = list2[i];
Button button = list[i];
string text = name[i];
button.onClick.RemoveAllListeners();
button.onClick.AddListener(delegate()
{
this.ClickClearRecordBtn(cityData, npcData, text);
});
}
}