예제 #1
0
    public void Load(string name)
    {
        if (isLoad)
        {
            return;
        }
        isLoad = true;

        byte[] bin     = DynamicFileControl.QueryFileContent(name);
        string content = StringHelper.ReadFromBytes(bin);

        LitJson.JSONNode json = LitJson.JSON.Parse(content);

        dataBuildings = new Dictionary <int, Dictionary <int, DataBuilding> > ();

        foreach (LitJson.JSONNode subNode in json.Childs)
        {
            DataBuilding data = new DataBuilding();
            data.Load(subNode);

            Dictionary <int, DataBuilding> bulidings;
            dataBuildings.TryGetValue(data.id, out bulidings);
            if (bulidings == null)
            {
                bulidings = new Dictionary <int, DataBuilding> ();
                dataBuildings.Add(data.id, bulidings);
            }

            bulidings.Add(data.level, data);
        }
    }
예제 #2
0
    public void UpdateUI()
    {
        _data_Building = DataManager.instance.dataBuildingGroup.GetBuilding(_model_Building.id, _model_Building.level);

        //当前等级
        _currentLevel.text = "" + _model_Building.level;
        // 当前建筑名称
        _buildingName_left_Label.text = _data_Building.name;
        _descriptionInfo_Label.text   = _data_Building.description;

        DataProduct dataProduct = new DataProduct();

        if (_model_Building.buildingType == Model_Building.Building_Type.FoodFactory)
        {
            dataProduct = DataManager.instance.dataProductFoodGroup.GetProduct(_model_Building.level);
            ShowSpeedNum(dataProduct);
        }
        else if (_model_Building.buildingType == Model_Building.Building_Type.OilFactory)
        {
            dataProduct = DataManager.instance.dataProductOilGroup.GetProduct(_model_Building.level);
            ShowSpeedNum(dataProduct);
        }
        else if (_model_Building.buildingType == Model_Building.Building_Type.MetalFactory)
        {
            dataProduct = DataManager.instance.dataProductMetalGroup.GetProduct(_model_Building.level);
            ShowSpeedNum(dataProduct);
        }
        else if (_model_Building.buildingType == Model_Building.Building_Type.RareFactory)
        {
            dataProduct = DataManager.instance.dataProductRareGroup.GetProduct(_model_Building.level);
            ShowSpeedNum(dataProduct);
        }
    }
예제 #3
0
 void InitData()
 {
     _model_Building = InstancePlayer.instance.model_User.buildings[_model_Building.buildingType];
     _data_Building  = DataManager.instance.dataBuildingGroup.GetBuilding(_model_Building.id, _model_Building.level);
     InitProductUI();
     UnlockBuildingUIData();
 }
예제 #4
0
        public override void Load(BuildingUnitData data)
        {
            baseData = dataBuilding = L.b.buildings[data.type];
            base.Load(data);

            FinishInit();
        }
예제 #5
0
    public void BuilingData()
    {
        if (_data_Building != null)
        {
            int budingIdCount    = _data_Building.buildingID.Length;
            int budinglevelCount = _data_Building.buildingLevel.Length;

            for (int i = 0; i < budingIdCount; i++)
            {
                int id = _data_Building.buildingID[i];
                if (id == 0)
                {
                    return;
                }
                Model_Building currenBuiling     = InstancePlayer.instance.model_User.buildings[(Model_Building.Building_Type)id];
                DataBuilding   currenBuilingData = DataManager.instance.dataBuildingGroup.GetBuilding(currenBuiling.id, currenBuiling.level);
                int            currenLevel       = currenBuiling.level;
                int            requireLevel      = _data_Building.buildingLevel[i];
                string         builingName       = currenBuilingData.name;
                if (i == 0)
                {
                    _buildingName_1_right.gameObject.SetActive(true);
                    _buildingName_1_right.text = builingName;                           // 升级所需建筑名字
                    if (currenLevel >= requireLevel)
                    {
                        _isBuilding1 = true;
                        _buildingName_1_value.text  = requireLevel + "级";                               // 升级所需建筑等级
                        _builingSprite_1.spriteName = "correctSymbol";
                    }
                    else
                    {
                        _isBuilding1 = false;
                        _buildingName_1_value.text = UIHelper.SetStringColor(requireLevel + "级");                               // 升级所需建筑等级
                        _Btn_goto_building_1.gameObject.SetActive(true);
                        _builingSprite_1.spriteName = "errorSymbol";
                    }
                }
                else if (i == 1)
                {
                    _buildingName_2_right.gameObject.SetActive(true);
                    _buildingName_2_right.text = builingName;                           // 升级所需建筑名字
                    if (currenLevel >= requireLevel)
                    {
                        _isBuilding2 = true;
                        _buildingName_2_value.text  = requireLevel + "级";                               // 升级所需建筑等级
                        _builingSprite_2.spriteName = "correctSymbol";
                    }
                    else
                    {
                        _isBuilding2 = false;
                        _buildingName_2_value.text = UIHelper.SetStringColor(requireLevel + "级");                               // 升级所需建筑等级
                        _Btn_goto_building_2.gameObject.SetActive(true);
                        _builingSprite_2.spriteName = "errorSymbol";
                    }
                }
            }
        }
    }
예제 #6
0
        public static Quest Build(DataBuilding b)
        {
            Quest q = new Quest(b.id, "Build a " + b.Name(), b.Icon);

            q.desc = TextHelper.IconLabel(b.Icon, "Build a " + b.Name());
            q.main = true;
            q.AddReq("building", ">1:" + b.id);
            return(q);
        }
예제 #7
0
    public Building(DataBuilding data)
    {
        planetNr = data.planetNr;
        added    = data.added;
        //disturbing = data.disturbing;

        gameObject.transform.position = data.position;
        gameObject.transform.rotation = data.rotation;
    }
예제 #8
0
        public void BuildingInit(MapElementInfo mei, string type, int town, CalculatedData calc)
        {
            this.type = type;
            DataBuilding b = L.b.buildings[type];

            BaseInit(mei, b, calc);
            townId = town;
            BuildingUpdate();
        }
예제 #9
0
    public override void Open(params object[] parameters)
    {
        base.Open(parameters);
        _model_Building = parameters [0] as Model_Building;
        _data_Building  = DataManager.instance.dataBuildingGroup.GetBuilding(_model_Building.id, _model_Building.level);

        InitUI();
        UpdateUI();
    }
예제 #10
0
 public ActionResult CreateDATABuilding(DataBuilding data)
 {
     using (FxtAPIClient client = new FxtAPIClient())
     {
         JObject _obj = new JObject();
         _obj.Add("dataBuilding", Utils.Serialize(data));
         result = client.Entrance(Utils.CommonKey, Utils.GetWcfCode(Utils.CommonKey), "C", _DATABuildingAdd, Utils.Serialize(_obj));
         return(Json(ResultServerJson(result.ToString())));
     }
 }
예제 #11
0
 void Update()
 {
     _model_Building = InstancePlayer.instance.model_User.buildings[_model_Building.buildingType];
     _data_Building  = DataManager.instance.dataBuildingGroup.GetBuilding(_model_Building.id, _model_Building.level);
     BuilingData();
     ResData();
     QueueData();
     UpdateUI();
     UpdateButtonStatus();
 }
예제 #12
0
    bool BuildingCollides(DataBuilding b)
    {
        foreach (DataBuilding b2 in buildings)
        {
            if (b.CollidesWith(b2))
            {
                return(true);
            }
        }

        return(false);
    }
예제 #13
0
    /* 获取建筑临时队列价格
     *  公式:
     *      临时队列价格=ceil((当前建筑所需升级时间*金钱换算比*比例系数)+((当前临时队列个数-1)*区间钻石系数))
     *      比例系数:0.1
     *      区间钻石系数:150
     */
    public int GetTempBuildingQueueCash(int buildingId, int buildingLevel)
    {
        if (_buildingQueueUsedNum < _buildingQueueMaxNum)
        {
            return(-1);             // 没有用临时队列
        }

        DataBuilding building           = DataManager.instance.dataBuildingGroup.GetBuilding(buildingId, buildingLevel);
        float        buildingCashFactor = DataManager.instance.dataInitialConfigGroup.GetDataInitialConfig().buildingCashFactor;
        int          tempBuildingCount  = _buildingQueueUsedNum - _buildingQueueMaxNum + 1;

        return(Mathf.CeilToInt((building.cost.costTime * buildingCashFactor * 0.1f) + ((tempBuildingCount - 1) * 150.0f)));
    }
예제 #14
0
    public DataBuilding GetBuilding(int id, int level)
    {
        Dictionary <int, DataBuilding> buildings;

        dataBuildings.TryGetValue(id, out buildings);
        if (buildings != null)
        {
            DataBuilding building = null;
            buildings.TryGetValue(level, out building);
            if (building != null)
            {
                return(building);
            }
        }
        return(null);
    }
예제 #15
0
 void MakeBuilding(DataBuilding b)
 {
     for (int x = 0; x < b.width; x++)
     {
         for (int y = 0; y < b.height; y++)
         {
             if (x == 0 || x == b.width - 1 || y == 0 || y == b.height - 1)
             {
                 map_data[b.left + x, b.top + y] = 1;
             }
             else
             {
                 map_data[b.left + x, b.top + y] = 0;
             }
         }
     }
 }
예제 #16
0
        public void Init(int town, string configType, NVector pos, Dictionary <string, int> cost)
        {
            Debug.Log($"Create building {configType} at {pos} for town {town}");
            baseData = dataBuilding = L.b.buildings[configType];
            var calc = CalculatedData.Calc(dataBuilding, cost);

            data = new BuildingUnitData();
            data.BuildingInit(this, configType, town, calc);
            data.pos = pos.Clone();

            int buildtime = L.b.modifiers[C.BuildRes].CalcModi(calc.buildTime, S.Towns().Get(town).Player(), pos);

            gameObject.AddComponent <Construction>().Init(data, cost, this, buildtime);

            S.Player(Town().playerId).fog.Clear(pos);

            FinishInit();
        }
예제 #17
0
    public DataBuilding[] GetAllBuildings(int id)
    {
        Dictionary <int, DataBuilding> bulidings;

        dataBuildings.TryGetValue(id, out bulidings);
        if (bulidings != null)
        {
            DataBuilding[] allBuildings = new DataBuilding[bulidings.Count];

            int i = 0;
            foreach (KeyValuePair <int, DataBuilding> pair in bulidings)
            {
                allBuildings[i++] = pair.Value;
            }

            return(allBuildings);
        }

        return(null);
    }
예제 #18
0
 void CreateUnlockBuildingItem(List <Model_Building.Building_Type> unLockedBuildingsType)
 {
     _Unlocking_Grid.DestoryAllChildren();
     if (unLockedBuildingsType.Count <= 5)
     {
         _Unlocking_ScrollView.enabled = false;
     }
     else
     {
         _Unlocking_ScrollView.enabled = true;
     }
     foreach (Model_Building.Building_Type type in unLockedBuildingsType)
     {
         GameObject   prefab        = (GameObject)Resources.Load(AppConfig.FOLDER_PROFAB_UI + "building/UnlockingBuilingItem");
         GameObject   item          = NGUITools.AddChild(_Unlocking_Grid.gameObject, prefab);
         UILabel      label         = item.transform.Find("BuilingName_Label").GetComponent <UILabel>();
         UISprite     building      = item.transform.Find("BuilingIcon_Sprite/builingIcon").GetComponent <UISprite>();
         DataBuilding data_Building = DataManager.instance.dataBuildingGroup.GetBuilding((int)type, 1);
         label.text = data_Building.name.ToString();
     }
     _Unlocking_Grid.Reposition();
 }
예제 #19
0
    void MakePath(DataBuilding b1, DataBuilding b2)
    {
        int x = b1.center_x;
        int y = b1.center_y;

        //connects buildings with a path in the x direction
        while (x != b2.center_x)
        {
            map_data[x, y] = 0;
            x += x < b2.center_x ? 1 : -1;
        }

        //connects buildings with a path in the y direction
        while (y != b2.center_y)
        {
            map_data[x, y] = 0;
            y += y < b2.center_y ? 1 : -1;
        }

        b1.isConnected = true;
        b2.isConnected = true;
    }
예제 #20
0
파일: DataPlanet.cs 프로젝트: Neofine/Game
    public DataPlanet(Planet planet)
    {
        radiusAroudSun = planet.getRadSun();
        planetRadius   = planet.getRadPln();
        speed          = planet.getSpeed();
        angle          = planet.getAngle();
        number         = planet.getNumber();
        blocking       = planet.amountBlocking();
        cratersAdded   = planet.CratersAdded;

        if (planet.getBuildings() != null)
        {
            buildings = new DataBuilding[planet.getBuildings().Count];
            int it = 0;
            foreach (Building building in planet.getBuildings())
            {
                buildings[it++] = new DataBuilding(building);
            }
        }

        position = planet.gameObject.transform.position;
        rotation = planet.gameObject.transform.rotation;
    }
    // 是否拥有足够金币使建筑立即升级
    public static int IsEnoughCashImmediateUpgradeBuinding(Model_User model_user, int buildingId)
    {
        int result = -1;

        Model_Building model_Building;

        Model_Building.Building_Type buildType = (Model_Building.Building_Type)buildingId;
        model_user.buildings.TryGetValue(buildType, out model_Building);
        if (model_Building != null)
        {
            DataBuilding dataBuilding = DataManager.instance.dataBuildingGroup.GetBuilding(model_Building.id, model_Building.level);

            float needCash = dataBuilding.upgradeCash;
            float userCash = model_user.model_Resource.cash;

            if (userCash >= needCash)
            {
                result = 0;
            }
        }

        return(result);
    }
예제 #22
0
        public bool CollidesWith(DataBuilding other)
        {
            if (left > other.right)
            {
                return(false);
            }

            if (top > other.bottom)
            {
                return(false);
            }

            if (right < other.left)
            {
                return(false);
            }

            if (bottom < other.top)
            {
                return(false);
            }

            return(true);
        }
예제 #23
0
    public void UpdateUI()
    {
        if (_model_Building.level >= 1)
        {
            _data_Next_Building = DataManager.instance.dataBuildingGroup.GetBuilding(_model_Building.id, _model_Building.level + 1);
        }

        _data_Building = DataManager.instance.dataBuildingGroup.GetBuilding(_model_Building.id, _model_Building.level);

        //当前等级
        _currentLevel.text = "" + _model_Building.level;
        // 当前建筑名称
        _buildingName_left_Label.text = _data_Building.name;
        // 下一等级
        _netxLevelvalue.text = _data_Next_Building.level + "";

        _payCoinValue.text            = ((int)_data_Building.upgradeCash) + "";
        _pay_bug_queue_CoinValue.text = InstancePlayer.instance.model_User.model_Queue.GetTempBuildingQueueCash(_model_Building.id, _model_Building.level) + "";
        //当前等级升级所需要的时间
        if (_model_Building != null)
        {
            _payTimeValue.text = UIHelper.setTimeDHMS((int)_data_Building.cost.costTime);
        }
    }
예제 #24
0
    void UpdateUI()
    {
        if (_model_Building != null)
        {
            if (_model_Building.id == 0)
            {
                _data_Building = DataManager.instance.dataBuildingGroup.GetBuilding((int)_model_Building.buildingType, 1);
            }
            else
            {
                _data_Building = DataManager.instance.dataBuildingGroup.GetBuilding(_model_Building.id, _model_Building.level);
            }
            if (_model_Building.buildingLevelUpTime == 0)
            {
                timerSlider.SetActive(false);
            }
            else
            {
                timerSlider.SetActive(true);
                _sliderLabel.text = UIHelper.setTimeDHMS(_model_Building.buildingLevelUpTime);
                _slider.value     = (float)_model_Building.buildingLevelUpTime / _data_Building.cost.costTime;
                if (_model_Building.buildingLevelUpTime == 1)
                {
                    timerSlider.SetActive(false);
                    _canplay = true;
                    if (_canplay && _playNum < 1)
                    {
                        PlayFarmAni();
                    }
                }
            }
        }

        if (_model_Building != null && _model_Building.model_Production != null)
        {
            if (_model_Building.model_Production.num >= 100)
            {
                productIcon.SetActive(true);
            }
            else
            {
                productIcon.SetActive(false);
            }
        }

        if (_buingName != null && _data_Building != null)
        {
            if (_model_Building.id == 0)
            {
                _buingName.text = _data_Building.name + "(1)";
            }
            else
            {
                _buingName.text = _data_Building.name + "(" + _model_Building.level + ")";
            }
        }

        if (_model_Building != null && _model_Building.isUnlocked)
        {
            button.isEnabled = true;
        }
        else
        {
            button.isEnabled = false;
            return;
        }
    }
예제 #25
0
        public void Run()
        {
            L.b.gameOptions["usageTown"].SetValue("false");
            L.b.gameOptions["inhabitantGrow"].SetValue("false");

            DataTerrain water  = L.b.terrains["water"];
            DataTerrain forest = L.b.terrains["forest"];
            DataTerrain hill   = L.b.terrains["hill"];

            //rebuild map
            //TODO GameMgmt.Get().map.SetTile(0,15,9,Data.nTerrain.hill.id);
            //GameMgmt.Get().newMap.levels[1].SetTile(new Vector3Int(15,9,1), grass);
            GameMgmt.Get().newMap.levels[1].SetTile(new Vector3Int(17, 9, 1), forest);
            GameMgmt.Get().newMap.levels[1].SetTile(new Vector3Int(17, 10, 1), forest);

            //add player
            int    pid = S.Players().CreatePlayer(System.Environment.UserName, "north");
            Player p   = S.Player(pid);

            p.elements.elements.Add("light");

            //and unit
            S.Unit().Create(pid, "light", new NVector(16, 10, 1));

            string round = TextHelper.IconLabel("round", "End the round (space)");

            //win
            Quest q = QuestHelper.Win();

            q.desc = TextHelper.RichText("To win this tutorial, you need to follow the other quests.", QuestHelper.Version("0.24"), "You can find more tutorials from the main game.");
            q.AddReq("building", ">1:lhall2");
            p.quests.Add(q);

            //show quest menu
            q      = new Quest("menu", "Show the quest menu", "quest");
            q.desc = TextHelper.RichText(
                "Welcome to 9 Nations, 9 Nations is a turn-based strategy game. In this tutorial you will learn the basics.", "All tasks are displayed in the quest menu. Go to the quest menu (F3), which you see in the upper right corner, and see your first quest.",
                TextHelper.Header("Task"), TextHelper.IconLabel("quest", "Open the quest menu and find your first task"));
            q.main = true;
            p.quests.Add(q);

            //move map
            q      = new Quest("moveCamera", "Move the camera", "map");
            q.desc = TextHelper.RichText(LSys.tem.helps["moveCamera"].Desc(),
                                         TextHelper.Header("Task"), TextHelper.IconLabel("quest", "Move the map"));
            p.quests.Add(q);

            //move
            DataUnit light = L.b.units["light"];

            q      = new Quest("moveLight", $"Move the {light.Name()}", "move");
            q.desc = TextHelper.RichText(
                $"You see your first unit: the element {light.Name()}. Click on it. Then you see on the bottom left the actions, click on the walk icon and move 2 fields down or press two times arrow down. ",
                "After that you consume all your action points (AP) for this turn. Finish your round. Press the hourglass icon in the bottom middle or press space. ",
                TextHelper.Header("Tasks"), TextHelper.IconLabel(light.Icon, $"Select your {light.Name()}."), TextHelper.IconLabel("move", "Move the light 2 field down (Arrow down) or with move action."), round);
            q.AddReq("fogField", "1;16;7");
            p.quests.Add(q);

            //found town
            q      = new Quest("found", "Found your first town", "foundTown");
            q.desc = TextHelper.RichText(
                "Your Kingdom is based on different towns. Every town has his own building and resources.", "This is a perfect spot for a new town. Click on the icon and found it. Finish then your round.", "The goal of this scenario will be to build the temple in your city.",
                TextHelper.Header("Tasks"), TextHelper.IconLabel("foundTown", "Found your town."), round);
            q.AddReq("townCount", ">1");
            q.AddReq("questFinish", "moveLight");
            q.main = true;
            p.quests.Add(q);

            //first unit
            DataBuilding lhall   = L.b.buildings["lhall1"];
            DataUnit     lworker = L.b.units["lworker"];

            q      = new Quest(lworker.id, "Train your first unit", lworker.Icon);
            q.desc = TextHelper.RichText(
                "At the same time the town hall was built, which manages all resources of your settlement.", $"The life task of the element {light.Name()} has been fulfilled and it will die in 5 rounds.",
                "To build your empire you need units to perform the basic actions. The main task of workers is to construct buildings and collect resources.",
                $"Move the {light.Name()} away from the town hall and train a {lworker.Name()}.",
                TextHelper.Header("Tasks"), TextHelper.IconLabel(light.Icon, $"Move the {light.Name()} away"), TextHelper.IconLabel("train", $"Call in the {lhall.Name()} lower right the train action"), TextHelper.IconLabel(lworker.Icon, $"Train a {lworker.Name()}"));
            q.AddReq("unit", $">1:{lworker.id}");
            q.AddReq("questFinish", "found");
            q.main = true;
            p.quests.Add(q);

            //build food
            var samp = L.b.buildings["samplingpoint"];

            q      = QuestHelper.Build(samp);
            q.desc = TextHelper.RichText($"You can only grow with enough resources. The basics are water, food (meat, fish) and construction material (wood, cobble stones). Move your {light.Name()} or your {lworker.Name()} near the water, finish the round and then click the build action and build the {samp.Name()}. It will produce water and a litte fish (food).",
                                         TextHelper.Header("Tasks"), TextHelper.IconLabel(water.Icon, $"Move near the {water.Name()}"), q.desc);
            q.AddReq("questFinish", lworker.id);
            p.quests.Add(q);

            //build wood
            q      = QuestHelper.Build(L.b.buildings["logger"]);
            q.desc = TextHelper.RichText("Great, you start produce food, now you need construction material, e.g. wood. Move your unit in the forest and build the logger.",
                                         TextHelper.Header("Tasks"), TextHelper.IconLabel(forest.Icon, $"Move to the {forest.Name()}"), q.desc);
            q.AddReq("questFinish", samp.id);
            p.quests.Add(q);

            //build stone
            var cob = L.b.buildings["cobblestoneC"];

            q      = QuestHelper.Build(cob);
            q.desc = TextHelper.RichText($"After that you need some cobblestone for some buildings. Move your unit on the hill and build the ${cob.Name()}.",
                                         TextHelper.Header("Tasks"), TextHelper.IconLabel(hill.Icon, $"Move in the {hill.Name()}"), q.desc);
            q.AddReq("questFinish", "logger");
            p.quests.Add(q);

            var tent = L.b.buildings["tent"];

            q      = QuestHelper.Build(tent);
            q.desc = TextHelper.RichText($"We also need some place for the inhabitants of this town. Move your unit on a free field and build the ${tent.Name()}.",
                                         TextHelper.Header("Tasks"), q.desc);
            q.AddReq("questFinish", "cobblestoneC");
            p.quests.Add(q);

            //build research
            DataBuilding library = L.b.buildings["library"];

            q      = QuestHelper.Build(library);
            q.desc = TextHelper.RichText($"So the basics are set. To build a temple, we need to evolve the town.", $"But we need to research it before in the {library.Name()}. Move near your village hall and build the {library.Name()}.",
                                         "You have now 2 construction material: wood and cobblestone. You can choose which one to use or a mix of them. If you build with wood, the building is finished faster, but has less HP. Stone is very robust, but takes a long time to build.",
                                         TextHelper.Header("Tasks"), q.desc);
            q.AddReq("questFinish", "tent");
            p.quests.Add(q);

            //research something
            DataBuilding lhall2 = L.b.buildings["lhall2"];

            q      = new Quest("lhall2", "Research the " + lhall2.Name(), "research");
            q.desc = TextHelper.RichText(
                "In 9 nations, research is carried out in elements in which we want to develop further. The bigger village hall is in the area of 2x the light element. Then upgrade the village hall and win the game.",
                TextHelper.Header("Tasks"), TextHelper.IconLabel(library.Icon, $"Wait until the {library.Name()} is finish build"), TextHelper.IconLabel("research", "Open research menu"), TextHelper.IconLabel(L.b.elements["light"].Icon, "Select 2x light as area"),
                TextHelper.IconLabel("research", "Finish the research"), TextHelper.IconLabel(lhall2.Icon, "Upgrade the townhall to " + lhall2.Name()));
            q.AddReq("questFinish", "library");
            q.AddReq("building", ">1:" + lhall2.id);
            q.main = true;
            p.quests.Add(q);
        }
예제 #26
0
    private string GetDescription(string descript)
    {
        switch (command)
        {
        case "CommanderLv":         //指挥官提升到N级
        {
            descript = StringHelper.GenerateCompleteDescription(descript, source);
        }
        break;

        case "PassMission":            //完成系统指定的关卡
        {
            int         magicId     = (int)source;
            DataMission dataMission = DataManager.instance.dataMissionGroup.GetMission(magicId);
            descript = StringHelper.GenerateCompleteDescription(descript, dataMission.name, destination);
        }
        break;

        case "SpecifiedUnitPartLv":            //指定unitpart强化到N级
        {
            int      unitId   = (int)source;
            DataUnit dataUnit = DataManager.instance.dataUnitsGroup.GetUnit(unitId);

            int          partId       = (int)destination;
            DataUnitPart dataUnitPart = DataManager.instance.dataUnitPartGroup.GetPart(partId, 1);

            descript = StringHelper.GenerateCompleteDescription(descript, dataUnit.name, dataUnitPart.name, additional);
        }
        break;

        case "SpecifiedHeroLv":            //指定hero升级到N级
        {
            int      heroId   = (int)source;
            DataHero dataHero = DataManager.instance.dataHeroGroup.GetHeroPrimitive(heroId);

            descript = StringHelper.GenerateCompleteDescription(descript, dataHero.name, destination);
        }
        break;

        case "SpecifiedHeroStage":            //指定hero升衔到N阶
        {
            int      heroId   = (int)source;
            DataHero dataHero = DataManager.instance.dataHeroGroup.GetHeroPrimitive(heroId);

            descript = StringHelper.GenerateCompleteDescription(descript, dataHero.name, destination);
        }
        break;

        case "ConsumeStar":         //获得N颗星星
        {
            descript = StringHelper.GenerateCompleteDescription(descript, source);
        }

        break;

        case "GainUnit":         //获得指定unit
        {
            int      unitId   = (int)source;
            DataUnit dataUnit = DataManager.instance.dataUnitsGroup.GetUnit(unitId);

            descript = StringHelper.GenerateCompleteDescription(descript, dataUnit.name, destination);
        }
        break;

        case "GainHero":         //获得指定hero
        {
            int      heroId   = (int)source;
            DataHero dataHero = DataManager.instance.dataHeroGroup.GetHeroPrimitive(heroId);

            descript = StringHelper.GenerateCompleteDescription(descript, dataHero.name);
        }
        break;

        case "ArenaRankings":         //在竞技场达到指定排名
        {
            descript = StringHelper.GenerateCompleteDescription(descript, source);
        }
        break;

        case "BuildingLv":         //相应建筑提升到N级
        {
            int          buildingId   = (int)source;
            DataBuilding dataBuilding = DataManager.instance.dataBuildingGroup.GetBuilding(buildingId, 1);

            descript = StringHelper.GenerateCompleteDescription(descript, dataBuilding.name, destination);
        }
        break;
        }

        return(descript);
    }
예제 #27
0
        public void Run()
        {
            //L.b.gameOptions["fog"].SetValue("false");
            //add player
            int    pid = S.Players().CreatePlayer(System.Environment.UserName, "forger");
            Player p   = S.Player(pid);

            p.elements.elements.Add("shadow");

            //and unit
            S.Unit().Create(pid, "shadow", new NVector(14, 10, 0));

            //win
            Quest q = QuestHelper.Win();

            q.desc = TextHelper.RichText("To win this tutorial, you need to develop the earth element. Follow the other quests.", QuestHelper.Version("0.24"));
            q.AddReq("element", "earth");
            p.quests.Add(q);

            q      = new Quest("foundTown", "Found your town", "foundTown");
            q.desc = TextHelper.RichText(
                "Welcome to the underground.", "As the element says, you now begin under the shadow. But the shadow element can easily switch between levels and even float through deep walls. Find a suitable place for your first city and found it.",
                "If a place is blocked by a deep wall, you can use terraform to transform it.",
                TextHelper.Header("Task"), TextHelper.IconLabel("foundTown", "Find a good place and found your town."));
            q.AddReq("building", ">1:shall1");
            q.main = true;
            p.quests.Add(q);

            var worker   = L.b.units["sworker"];
            var explorer = L.b.units["sexplorer"];

            q      = new Quest("unit", $"{worker.Name()} & {explorer.Name()}", "train");
            q.desc = TextHelper.RichText(
                "First you'll need units again.", "The Explorer can go through walls, explore the area and claim unknown fields.", "The worker can construct buildings, remove the wall and collect resources, so train both of them now.",
                TextHelper.Header("Tasks"), TextHelper.IconLabel(worker.Icon, $"Train a {worker.Name()}"), TextHelper.IconLabel(explorer.Icon, $"Train a {explorer.Name()}"));
            q.AddReq("unit", ">1:" + worker.id);
            q.AddReq("unit", ">1:" + explorer.id);
            q.AddReq("questFinish", "foundTown");
            q.main = true;
            p.quests.Add(q);

            //build buildings
            var sfarm  = L.b.buildings["sfarm"];
            var sdirt  = L.b.buildings["sdirt"];
            var quarry = L.b.buildings["quarry"];
            var fisher = L.b.buildings["fisher"];
            var sandG  = L.b.buildings["sandG"];
            var tent   = L.b.buildings["tent"];

            q      = new Quest("building", "Build the town", "build");
            q.desc = TextHelper.RichText(
                "As with the element of light, you first need construction material and food.", $"Sand from {sandG.Name()} and stone from {quarry.Name()} are used for construction materials.",
                $"Food is available from the {fisher.Name()} or the {sfarm.Name()}. But the {sfarm.Name()} needs dirt from {sdirt.Name()}.", $"The workers live in {tent.Name()} again.", $"If the fields are too far away from the town hall, they must be taken into occupation first. The {explorer.Name()} can do this via claim.",
                TextHelper.Header("Tasks"), TextHelper.IconLabel(quarry.Icon, $"Build a {quarry.Name()}"), TextHelper.IconLabel(sdirt.Icon, $"Build a {sdirt.Name()}"),
                TextHelper.IconLabel(sfarm.Icon, $"Build a {sfarm.Name()}"), TextHelper.IconLabel(tent.Icon, $"Build a {tent.Name()}"));
            q.AddReq("building", ">1:" + quarry.id);
            q.AddReq("building", ">1:" + sdirt.id);
            q.AddReq("building", ">1:" + sfarm.id);
            q.AddReq("building", ">1:" + tent.id);
            q.AddReq("questFinish", "unit");
            q.main = true;
            p.quests.Add(q);

            // level 2
            DataBuilding shall2 = L.b.buildings["shall2"];

            q      = new Quest("shall2", "Upgrade to " + shall2.Name(), shall2.Icon);
            q.desc = TextHelper.RichText(
                "Unlike light, shadow knows no research. That's why you can upgrade the town hall right now.",
                TextHelper.Header("Tasks"), TextHelper.IconLabel(shall2.Icon, "Upgrade the town hall to " + shall2.Name()));
            q.AddReq("questFinish", "building");
            q.AddReq("building", ">1:" + shall2.id + ":true");
            q.main = true;
            p.quests.Add(q);

            // usage Town
            DataBuilding sshrine = L.b.buildings["sshrine"];

            q      = new Quest("need", "Find the needs", p.Coat().flag);
            q.desc = TextHelper.RichText(
                "A city can only grow if its inhabitants have fulfilled necessary usages. Depending on the level of the city, the inhabitants have different requirements. Since the city has now increased one level, there are new requirements.",
                "Open the menu and check the usages. Build the appropriate building.",
                TextHelper.Header("Tasks"), TextHelper.IconLabel(p.Coat().flag, "Open Kingdom overview"), TextHelper.IconLabel("foundTown", "Open your town"), TextHelper.IconLabel("usage", "Find the usages"), TextHelper.IconLabel("build", "Build appropriate the building"));
            q.AddReq("questFinish", "shall2");
            q.AddReq("building", ">1:" + sshrine.id);
            q.main = true;
            p.quests.Add(q);

            // development
            var earth = L.b.elements["earth"];

            q      = new Quest("earth", "Evolve to a new element", "religion");
            q.desc = TextHelper.RichText(
                "Once the shrine is built, the gods can be worshipped and the nation can develop.",
                TextHelper.Header("Tasks"), TextHelper.IconLabel("religion", "Evolve to a new element"));
            q.AddReq("questFinish", "need");
            q.AddReq("element", "earth");
            q.main = true;
            p.quests.Add(q);
        }