Пример #1
0
    public RoleRecord randomRoleFor(int level)
    {//level1為種族 level2為基礎職業
        if (level < 2)
        {
            Debug.LogWarning("randomRoleFor 的level為:" + level + "小於2");
            return(null);
        }
        RoleRecord newRole = new RoleRecord();
        int        race    = baseRaceNos[UnityEngine.Random.Range(0, baseRaceNos.Count)];

        level -= 2;
        giveRace(newRole, objects[race]);
        int       index     = UnityEngine.Random.Range(0, baseCareerNos.Count);
        int       no        = baseCareerNos[index];
        careerInf nowCareer = objects[no];

        transferTo(newRole, nowCareer);
        for (int nowlv = 0; nowlv < level; nowlv++)
        {
            int nextNo = nowCareer.nexrCareer[UnityEngine.Random.Range(0, nowCareer.nexrCareer.Count)];
            nowCareer = objects[nextNo];
            transferTo(newRole, nowCareer);
        }
        return(newRole);
    }
Пример #2
0
    public void onPickCareer(careerInf traget)
    {
        string statement            = "";
        Dictionary <byte, int> attr = traget.Attributes;

        foreach (KeyValuePair <byte, int> pair in attr)
        {
            statement += " +";
            statement += unitData.getAttributeString(pair.Key);
            statement += ":";
            statement += pair.Value;
        }
        atribute.text = statement;
        foreach (GameObject sobj in skillList)
        {
            Destroy(sobj);
        }
        foreach (int sno in traget.skillPool)
        {
            GameObject sobj = Instantiate(skillObj, skillsPanel.transform);
            sobj.tag = "Untagged";//要設置tag的原因是在compositePanel的技能面板裏有技能的時候,若角色信息面板是打開狀態,則無論怎麼點擊何處RayCast2D都會cast到技能面板的第四個技能
            sobj.GetComponent <showSkillInf>().initInf(SkillList.main.representation[sno], role.data);
            sobj.GetComponent <showSkillInf>().panel = skillInfPanel;
            sobj.GetComponent <Image>().sprite       = ImageList.main.skillIcons[sno];
            skillList.Add(sobj);
        }
    }
Пример #3
0
    public static void transferTo(RoleRecord role, careerInf traget)
    {
        role.careers.Add(traget.careerNo);
        List <int> skills = new List <int>(); //所有技能池內角色尚未擁有的技能

        foreach (int no in traget.giftSkills) //添加所有必定獲得的技能
        {
            string name = SkillList.main.representation[no];
            if (Type.GetType("subst_skill_representation").IsAssignableFrom(Type.GetType(name)))
            //if (Type.GetType(name).IsSubclassOf(Type.GetType("subst_skill_representation")))
            {//如果技能敘述繼承了subst_skill_representation
                //則改為從subst_skill_representation的替補中選擇一個技能名稱
                object repre = System.Activator.CreateInstance(System.Type.GetType(name));
                role.skillNos.Add(((subst_skill_representation)repre).substitutNo());
            }
            else
            {
                role.skillNos.Add(no);
            }
        }

        foreach (int no in traget.skillPool)
        {
            if (!role.skillNos.Contains(no))
            {
                skills.Add(no);
            }
        }
        if (skills.Count > 0)
        {
            int    index = UnityEngine.Random.Range(0, skills.Count);
            string name  = SkillList.main.representation[skills[index]];
            //Debug.Log("skill representation name:" + name + " issubclass:" + Type.GetType(name).IsSubclassOf(Type.GetType("subst_skill_representation")));
            if (Type.GetType("subst_skill_representation").IsAssignableFrom(Type.GetType(name)))
            //if (Type.GetType(name).IsSubclassOf(Type.GetType("subst_skill_representation")))
            {//如果技能敘述繼承了subst_skill_representation
                //則改為從subst_skill_representation的替補中選擇一個技能名稱
                object repre = System.Activator.CreateInstance(System.Type.GetType(name));
                role.skillNos.Add(((subst_skill_representation)repre).substitutNo());
            }
            else
            {
                role.skillNos.Add(skills[index]);
            }
            //role.skillNos.Add(skills[index]);
        }
        else
        {
            Debug.LogWarning("在轉職成" + traget.name + "的過程中並沒有新增任何人技能");
        }
        role.data.attributeUpdate = traget.Attributes;
    }
Пример #4
0
    public List <int> baseCareerNos; //記錄基礎職業的信息編號
    public static void giveRace(RoleRecord role, careerInf traget)
    {
        role.race = traget.careerNo;
        if (role.skillNos.Count != 0)
        {
            Debug.LogWarning("添加種族" + traget.name + "的時候技能欄不為空");
        }
        foreach (int no in traget.giftSkills)
        {
            role.skillNos.Add(no);
        }

        role.data.attributeUpdate = traget.Attributes;
    }
Пример #5
0
    public void initRoleForCareer(RoleRecord role)
    {
        careerInf race = objects[role.race];

        if (role.skillNos.Count != 0)
        {
            Debug.LogWarning("在初始化角色種族" + race.name + "的時候技能欄不為空");
        }
        foreach (int no in race.skillPool)
        {
            role.skillNos.Add(no);
        }

        role.data.attributeUpdate = race.Attributes;

        foreach (int cno in role.careers)
        {
            careerInf  career = objects[cno];
            List <int> skills = new List <int>();//所有技能池內角色尚未擁有的技能
            foreach (int no in career.skillPool)
            {
                if (!role.skillNos.Contains(no))
                {
                    skills.Add(no);
                }
            }
            if (skills.Count > 0)
            {
                int    index = UnityEngine.Random.Range(0, skills.Count);
                string name  = SkillList.main.representation[skills[index]];
                if (Type.GetType("subst_skill_representation").IsAssignableFrom(Type.GetType(name)))
                //if (Type.GetType(name).IsSubclassOf(Type.GetType("subst_skill_representation")))
                {//如果技能敘述繼承了subst_skill_representation
                    //則改為從subst_skill_representation的替補中選擇一個技能名稱
                    object repre = System.Activator.CreateInstance(System.Type.GetType(name));
                    role.skillNos.Add(((subst_skill_representation)repre).substitutNo());
                }
                else
                {
                    role.skillNos.Add(skills[index]);
                }
            }
            else
            {
                Debug.LogWarning("在初始化職業時" + career.name + "的過程中並沒有新增任何人技能");
            }
            role.data.attributeUpdate = career.Attributes;
        }
    }
Пример #6
0
    public static int totalPriceOf(careerInf career)
    {
        int price = 0;

        while (true)
        {
            price += career.Price;
            if (career.frontCareer < 0)
            {
                break;
            }
            else
            {
                career = main.objects[career.frontCareer];
            }
        }
        return(price);
    }
Пример #7
0
    public void prepareRole(RoleRecord traget)
    {
        role = traget;
        cancer();
        Debug.Log("careers count:" + traget.careers.Count);
        int no = traget.careers[traget.careers.Count - 1];

        roleBox.sprite = ImageList.main.headIcons[traget.race];
        careerInf nowcareer = careerList.main.objects[no];

        foreach (int cno in nowcareer.nexrCareer)
        {
            careerInf  nextcareer = careerList.main.objects[cno];
            GameObject obj        = Instantiate(careerObj, upPanel.transform);
            obj.GetComponent <roleForUpgrade>().init(role, nextcareer, onPickCareer, aftUpgrade);
            objList.Add(obj);
        }
    }
Пример #8
0
 public rolePanel panel;  //初始化時賦予
 public void init(RoleRecord inf, careerInf career, withCareer callback, withNone upgrade_callback)
 {
     roleInf     = inf;
     this.career = career;
     Debug.Log("Icon" + Icon + "race:" + inf.race);
     Icon.sprite = ImageList.main.headIcons[inf.race];
     if (itemName != null)
     {
         string name = career.name;
         itemName.text = name;
     }
     if (itemCost != null)
     {
         itemCost.text = "" + career.Price;
     }
     onClick_callback        = callback;
     onUpgradeFinsh_callback = upgrade_callback;
 }