3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 7821|回复: 18
打印 上一主题 下一主题

[分享] Thea2:The Shattering 0332 升级点增强方法

[复制链接]

14

主题

797

帖子

1344

积分

游戏狂人

Rank: 6Rank: 6

贡献度
105
金元
9044
积分
1344
精华
2
注册时间
2012-1-8
跳转到指定楼层
主题
发表于 2019-1-28 20:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 psyduck197 于 2019-2-17 16:53 编辑

修改Thea 2 The Shattering Build 0332\Thea2_Data\Managed\Assembly-CSharp.dll
                Thea2.Client:                                  CharacterProgression:








private void ItemUpdate(GameObject item, object source, object data, int index)
                {
                        CharacterProgressionListItem cItem = item.GetComponent<CharacterProgressionListItem>();
                        ClientTurnSummaryData clientTurnSummaryData = source as ClientTurnSummaryData;
                        ClientGroupData @for = ClientGroupData.GetFor(clientTurnSummaryData.groupID);
                        ClientEntityCharacter character = null;
                        if (@for != null)
                        {
                                character = (@for.GetEntity(clientTurnSummaryData.relatedValue) as ClientEntityCharacter);
                        }
                        if (character == null)
                        {
                                foreach (KeyValuePair<int, ClientGroupData> keyValuePair in ClientGroupData.GetAll())
                                {
                                        if (keyValuePair.Value != null && keyValuePair.Value.GetOwnerID() == RootNetworkManager.GetMyPlayerID())
                                        {
                                                ClientEntity entity = keyValuePair.Value.GetEntity(clientTurnSummaryData.relatedValue);
                                                if (entity != null)
                                                {
                                                        character = (entity as ClientEntityCharacter);
                                                }
                                        }
                                }
                        }
                        if (character == null)
                        {
                                return;
                        }
                        int seed = World.gameSeed ^ character.Id ^ character.Level << 3;
                        MHRandom mhrandom = new MHRandom(seed);
                        string instanceName = character.SubraceName;
                        Subrace instanceFromDB = Globals.GetInstanceFromDB<Subrace>(instanceName);
                        DBDef.Tag t1 = null;
                        DBDef.Tag t2 = null;
                        DBDef.Tag t3 = null;
                        List<Multitype<Skill, FInt>> chosenSkills = null;
                        bool flag = character.Level % 2 == 1;
                        if (flag)
                        {
                                List<CountedTag> list = new List<CountedTag>(instanceFromDB.mainSubraceAttributes);
                                list.Sort((CountedTag a, CountedTag b) => -a.amount.CompareTo(b.amount));
                                int index2 = Mathf.Min(new int[]
                                {
                                        mhrandom.GetInt(0, list.Count),
                                        mhrandom.GetInt(0, list.Count),
                                        mhrandom.GetInt(0, list.Count)
                                });
                                t1 = list[index2].tag;
                                list.RemoveAt(index2);
                                index2 = Mathf.Min(mhrandom.GetInt(0, list.Count), mhrandom.GetInt(0, list.Count));
                                t2 = list[index2].tag;
                                list.RemoveAt(index2);
                                index2 = Mathf.Min(mhrandom.GetInt(0, list.Count), mhrandom.GetInt(0, list.Count));
                                t3 = list[index2].tag;
                                list.RemoveAt(index2);
                        }
                        if (!flag)
                        {
                                List<Multitype<Skill, FInt>> list2 = new List<Multitype<Skill, FInt>>();
                                if (!NetType.IsNullOrEmpty(character.LearnedSkills))
                                {
                                        foreach (NetType netType in character.LearnedSkills.value)
                                        {
                                                NetStringFInt2 netStringFInt = (NetStringFInt2)netType;
                                                Skill instanceFromDB2 = Globals.GetInstanceFromDB<Skill>(netStringFInt.name);
                                                FInt value = netStringFInt.value;
                                                if (value < 5 && netStringFInt.value2 == FInt.ZERO)
                                                {
                                                        list2.Add(new Multitype<Skill, FInt>(instanceFromDB2, value));
                                                }
                                        }
                                }
                                if (instanceFromDB.advancementSkills != null && SkillInstance.skillPacks.ContainsKey(instanceFromDB.advancementSkills))
                                {
                                        List<Skill> list3 = SkillInstance.skillPacks[instanceFromDB.advancementSkills];
                                        using (List<Skill>.Enumerator enumerator3 = list3.GetEnumerator())
                                        {
                                                while (enumerator3.MoveNext())
                                                {
                                                        Skill v = enumerator3.Current;
                                                        if (list2.Find((Multitype<Skill, FInt> o) => o.t0 == v) == null)
                                                        {
                                                                list2.Add(new Multitype<Skill, FInt>(v, FInt.ZERO));
                                                        }
                                                }
                                        }
                                }
                                list2 = list2.FindAll((Multitype<Skill, FInt> o) => o.t1 * o.t1 < character.Level);
                                if (list2.Count > 2)
                                {
                                        chosenSkills = new List<Multitype<Skill, FInt>>();
                                        int @int = mhrandom.GetInt(0, list2.Count);
                                        Multitype<Skill, FInt> multitype = list2[@int];
                                        if (multitype.t1 == FInt.ZERO)
                                        {
                                                @int = mhrandom.GetInt(0, list2.Count);
                                        }
                                        chosenSkills.Add(list2[@int]);
                                        list2.RemoveAt(@int);
                                        int int2 = mhrandom.GetInt(0, list2.Count);
                                        multitype = list2[int2];
                                        if (multitype.t1 == FInt.ZERO)
                                        {
                                                int2 = mhrandom.GetInt(0, list2.Count);
                                        }
                                        chosenSkills.Add(list2[int2]);
                                }
                                else
                                {
                                        chosenSkills = list2;
                                }
                        }
                        cItem.characterName.text = character.GetName();
                        cItem.previousLevel.text = character.Level.ToString();
                        cItem.newLevel.text = (character.Level + 1).ToString();
                        cItem.characterIcon.texture = character.GetIcon();
                        cItem.levelUpIndicator.SetActive(!this.IsSet(character));
                        RolloverCharacterTooltip.SetCharacter(cItem.characterInputCatch, character);
                        if (flag)
                        {
                                cItem.tagGroup.SetActive(true);
                                cItem.skillGroup.SetActive(false);
                                cItem.attribute1Icon.texture = AssetManager.GetTexture(t1);
                                cItem.attribute2Icon.texture = AssetManager.GetTexture(t2);
                                cItem.attribute3Icon.texture = AssetManager.GetTexture(t3);
                                cItem.attribute1Value.text = "+2";
                                cItem.attribute2Value.text = "+1";
                                cItem.attribute3Value.text = "+1";
                                cItem.attribute1.onValueChanged.RemoveAllListeners();
                                cItem.attribute2.onValueChanged.RemoveAllListeners();
                                cItem.attribute3.onValueChanged.RemoveAllListeners();
                                cItem.attribute1.isOn = this.IsTag(character, t1);
                                cItem.attribute2.isOn = this.IsTag(character, t2);
                                cItem.attribute3.isOn = this.IsTag(character, t3);
                                cItem.attribute1.onValueChanged.AddListener(delegate(bool b)
                                {
                                        this.SetTag(character, t1, 2);        //升级点
                                        cItem.levelUpIndicator.SetActive(false);
                                });
                                RolloverTooltip.SetTag(cItem.attribute1.gameObject, t1);
                                cItem.attribute2.onValueChanged.AddListener(delegate(bool b)
                                {
                                        this.SetTag(character, t2, 1);      // 升级点
                                        cItem.levelUpIndicator.SetActive(false);
                                });
                                RolloverTooltip.SetTag(cItem.attribute2.gameObject, t2);
                                cItem.attribute3.onValueChanged.AddListener(delegate(bool b)
                                {
                                        this.SetTag(character, t3, 1);      // 升级点
                                        cItem.levelUpIndicator.SetActive(false);
                                });
                                RolloverTooltip.SetTag(cItem.attribute3.gameObject, t3);
                        }
                        else
                        {
                                cItem.tagGroup.SetActive(false);
                                cItem.skillGroup.SetActive(true);
                                cItem.skill1.onValueChanged.RemoveAllListeners();
                                cItem.skill2.onValueChanged.RemoveAllListeners();
                                if (chosenSkills.Count > 0)
                                {
                                        cItem.skill1Group.SetActive(true);
                                        cItem.skill1Icon.texture = AssetManager.GetTexture(chosenSkills[0].t0);
                                        cItem.skill1New.SetActive(chosenSkills[0].t1 == FInt.ZERO);
                                        cItem.skill1.isOn = this.IsSkill(character, chosenSkills[0].t0.dbName);
                                        cItem.skill1.onValueChanged.AddListener(delegate(bool b)
                                        {
                                                if (b)
                                                {
                                                        this.SetSkill(character, chosenSkills[0].t0.dbName);
                                                        cItem.levelUpIndicator.SetActive(false);
                                                }
                                        });
                                        string dbName = chosenSkills[0].t0.dbName;
                                        FInt t = chosenSkills[0].t1;
                                        if (t == FInt.ZERO)
                                        {
                                                RolloverSkillTooltip component = cItem.skill1Icon.gameObject.GetComponent<RolloverSkillTooltip>();
                                                if (component != null)
                                                {
                                                        UnityEngine.Object.Destroy(component);
                                                }
                                        }
                                        else
                                        {
                                                RolloverSkillTooltip.SetSkill(cItem.skill1Icon.gameObject, new NetStringFInt2(dbName, t, FInt.ZERO), character);
                                        }
                                        RolloverSkillTooltip.SetSkill(cItem.skill1.gameObject, new NetStringFInt2(dbName, t + 1, FInt.ZERO), character);
                                }
                                else
                                {
                                        cItem.skill1Group.SetActive(false);
                                }
                                if (chosenSkills.Count > 1)
                                {
                                        cItem.skill2Group.SetActive(true);
                                        cItem.skill2Icon.texture = AssetManager.GetTexture(chosenSkills[1].t0);
                                        cItem.skill2New.SetActive(chosenSkills[1].t1 == FInt.ZERO);
                                        cItem.skill2.isOn = this.IsSkill(character, chosenSkills[1].t0.dbName);
                                        cItem.skill2.onValueChanged.AddListener(delegate(bool b)
                                        {
                                                if (b)
                                                {
                                                        this.SetSkill(character, chosenSkills[1].t0.dbName);
                                                        cItem.levelUpIndicator.SetActive(false);
                                                }
                                        });
                                        string dbName2 = chosenSkills[1].t0.dbName;
                                        FInt t4 = chosenSkills[1].t1;
                                        if (t4 == FInt.ZERO)
                                        {
                                                RolloverSkillTooltip component2 = cItem.skill2Icon.gameObject.GetComponent<RolloverSkillTooltip>();
                                                if (component2 != null)
                                                {
                                                        UnityEngine.Object.Destroy(component2);
                                                }
                                        }
                                        else
                                        {
                                                RolloverSkillTooltip.SetSkill(cItem.skill2Icon.gameObject, new NetStringFInt2(dbName2, t4, FInt.ZERO), character);
                                        }
                                        RolloverSkillTooltip.SetSkill(cItem.skill2.gameObject, new NetStringFInt2(dbName2, t4 + 1, FInt.ZERO), character);
                                }
                                else
                                {
                                        cItem.skill2Group.SetActive(false);
                                }
                        }
                }经验公式
Thea2     GameplayUtils
         public static int RPRequiredForAdvancement(int curentLevel)
        {
            XpCharacterLevel instanceFromDB = Globals.GetInstanceFromDB<XpCharacterLevel>(EXP_LVL.RP);
            if (instanceFromDB == null || instanceFromDB.xpLevel == null || instanceFromDB.xpLevel.Length < curentLevel)
            {
                return 99999;
            }
            int num = Mathf.Max(0, curentLevel - 1);
            if (num == 0)
            {
                return instanceFromDB.xpLevel[0];
            }
            return instanceFromDB.xpLevel[num] - instanceFromDB.xpLevel[num - 1];
        }




等级
Thea2.Common  NOCSLevelUpChars


public override void Activate(NONetworkOrder source)
        {
            if (this.levelupData != null)
            {
                HashSet<int> hashSet = new HashSet<int>();
                foreach (Multitype<int, int, string, string> multitype in this.levelupData)
                {
                    Character character = EntityManager.Get<Character>(multitype.t0, true);
                    if (!string.IsNullOrEmpty(multitype.t2))
                    {
                        DBDef.Tag instanceFromDB = Globals.GetInstanceFromDB<DBDef.Tag>(multitype.t2);
                        character.attributes.AddToBase(instanceFromDB, new FInt(multitype.t1), true, false);
                    }
                    if (!string.IsNullOrEmpty(multitype.t3))
                    {
                        character.LearnSkill(Character.SkillCategory.Personal, (Skill)multitype.t3, FInt.ONE, true, 1);
                    }
                    character.Xp -= GameplayUtils.XPRequiredForNextLevel(character.level);
                    character.level++;
                    hashSet.Add(character.GetGroup().ID);
                }
                foreach (int group in hashSet)
                {
                    new NOCSRequestGroupDetails
                    {
                        group = group,
                        addEntityInfo = true
                    }.Activate(source);
                }
            }
        }


评分

1

查看全部评分

回复

使用道具 举报

3

主题

1289

帖子

1879

积分

游戏狂人

Rank: 6Rank: 6

贡献度
53
金元
16665
积分
1879
精华
0
注册时间
2007-12-21
舒服的沙发
发表于 2021-7-10 23:27 | 只看该作者
学习下~~
回复 支持 反对

使用道具 举报

480

主题

2419

帖子

2524

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
101
金元
21198
积分
2524
精华
0
注册时间
2009-8-12
硬硬的板凳
发表于 2023-2-3 17:32 | 只看该作者
.CS文件修改完采集范围进去UI就崩了
回复 支持 反对

使用道具 举报

14

主题

797

帖子

1344

积分

游戏狂人

Rank: 6Rank: 6

贡献度
105
金元
9044
积分
1344
精华
2
注册时间
2012-1-8
冰凉的地板
 楼主| 发表于 2023-2-14 22:44 | 只看该作者
TINNK 发表于 2023-2-3 17:32
.CS文件修改完采集范围进去UI就崩了

因年代久远我不太记了 印象中变数规格要对 或者版变迁失效

回复 支持 反对

使用道具 举报

480

主题

2419

帖子

2524

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
101
金元
21198
积分
2524
精华
0
注册时间
2009-8-12
5#
发表于 2023-2-15 18:12 | 只看该作者
psyduck197 发表于 2023-2-14 22:44
因年代久远我不太记了 印象中变数规格要对 或者版变迁失效

我用CT搞定了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2026-5-11 03:37 , Processed in 0.035027 second(s), 17 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表