Exemplo n.º 1
0
    private IEnumerator StartServerCoroutine()
    {
        Topan.Network.AddNetworkEventListener(this);
        TopanData init = new TopanData();

        init.Add("dat", NetworkingGeneral.ConvertToCombatant(AccountManager.profileData));

        int port = 7100; //As default.

        if (portForwardCheckbox.value)
        {
            port = int.Parse(hostPortInput.value);
        }

        PlayerPrefs.SetInt("SavedMaxPlayers", (int)maxPlayerSlider.currentValue);
        PlayerPrefs.SetInt("PortForward", (portForwardCheckbox.value) ? 1 : 0);
        PlayerPrefs.SetInt("LocalServer", (hostLocalCheckbox.value) ? 1 : 0);
        PlayerPrefs.SetString("SavedPingLimit", pingLimitInput.value);
        PlayerPrefs.SetInt("SavedMapIndex", selectedMap);
        PlayerPrefs.SetInt("SavedGameMode", mSettingControl.gameModePopup.selectionIndex);

        Topan.Network.InitializeServer((int)(maxPlayerSlider.currentValue), port, !portForwardCheckbox.value, init);
        Topan.Network.GameName = gameNameInput.value;
        NetworkingGeneral.CreateInstance(cachedNetworking);

        if (!hostLocalCheckbox.value && !portForwardCheckbox.value)
        {
            int mapIndx = selectedMap;
            Topan.MasterServer.RegisterMasterServer(gameNameInput.value, true, AccountManager.profileData.username, mapIndx, gameTypeIndexes[mSettingControl.gameTypeName]);
        }

        GeneralVariables.server.InstantiateServer();

        yield return(null);

        yield return(null);

        UICamera.selectedObject = null;
        Topan.Network.SetServerInfo("s", UnityEngine.Random.seed);
        Topan.Network.SetServerInfo("dur", (byte)gameDurationSlider.currentDuration);
        Topan.Network.SetServerInfo("rc", (byte)roundCountSlider.currentRoundAmount);
        StartCoroutine(SelectMapRoutine(selectedMap));
        GeneralVariables.server.amountOfRounds = roundCountSlider.currentRoundAmount;
        GeneralVariables.lobbyManager.ResetButtons();
        moveCam.TargetPos(new Vector3(3840f, -800f, -700f));

        Topan.Network.SetServerInfo("sm", false);
        Topan.Network.SetServerInfo("rTK", (UInt16)0);
        Topan.Network.SetServerInfo("bTK", (UInt16)0);
        Topan.Network.SetServerInfo("rTD", (UInt16)0);
        Topan.Network.SetServerInfo("bTD", (UInt16)0);
        Topan.Network.SetServerInfo("rVic", (byte)0);
        Topan.Network.SetServerInfo("bVic", (byte)0);

        Topan.Network.SetServerInfo("gm", NetworkingGeneral.currentGameType.typeName);
        foreach (GM_SettingsControl.SettingInfo sInfo in mSettingControl.settingsList)
        {
            Topan.Network.SetServerInfo(sInfo.settingName, NetworkingGeneral.currentGameType.customSettings[sInfo.settingName].currentValue);
        }

        int setPingLimit = Mathf.Clamp(int.Parse(pingLimitInput.value), 100, 9999);

        GeneralVariables.server.pingLimit = setPingLimit;
        Topan.Network.SetServerInfo("plim", setPingLimit);
        Topan.Network.SetServerInfo("it", (byte)(idleTimeSlider.currentIdleTime / 5));

        yield return(null);

        Topan.Network.SetServerInfo("bC", (byte)bsMenu.amountSlider.currentValue);

        BotPlayer[]   newBots   = new BotPlayer[16]; //16 = maximum limit of players in a server
        List <string> prevNames = new List <string>();

        for (int i = 0; i < newBots.Length; i++)
        {
            CombatantInfo newInfo = new CombatantInfo();

            string randomName = DarkRef.RandomBotName();
            int    trials     = 0;
            while (prevNames.Contains(randomName) && trials < 10)
            {
                randomName = DarkRef.RandomBotName();
                trials++;
            }

            newInfo.username = randomName;
            prevNames.Add(randomName);

            newInfo.clan = "BOT";
            newInfo.rank = UnityEngine.Random.Range(1, 11);

            newBots[i]         = new BotPlayer();
            newBots[i].botInfo = newInfo;

            newBots[i].botStats           = new BotStats();
            newBots[i].team               = (byte)(i % 2);
            newBots[i].botStats.kills     = 0;
            newBots[i].botStats.deaths    = 0;
            newBots[i].botStats.headshots = 0;
            newBots[i].botStats.score     = 0;
            Topan.Network.SetServerInfo("bS" + i.ToString(), BotManager.ParseToBotFormat(newBots[i].botStats));
        }

        prevNames         = null;
        BotManager._sBots = newBots;
        Topan.Network.SetServerInfo("bots", newBots);
    }