예제 #1
0
    private void SQLGetParty(int a_id)
    {
        if (1 > a_id)
        {
            return;
        }
        DatabasePlayer item = new DatabasePlayer(0UL, string.Empty, 0, 0f, 0f, 100, 100, 100, 0, 0, 0, 0, 0);

        using (IDbTransaction dbTransaction = this.m_sqlConnection.BeginTransaction())
        {
            this.m_sqlCommand.CommandText = "SELECT aid, pid, name, partyId, partyRank FROM player WHERE partyId=" + a_id + ";";
            using (IDataReader dataReader = this.m_sqlCommand.ExecuteReader())
            {
                while (dataReader.Read())
                {
                    item.aid       = (ulong)dataReader.GetInt64(0);
                    item.pid       = dataReader.GetInt32(1);
                    item.name      = dataReader.GetString(2);
                    item.partyId   = dataReader.GetInt32(3);
                    item.partyRank = dataReader.GetInt32(4);
                    object threadLock = this.m_threadLock;
                    lock (threadLock)
                    {
                        this.m_partyAnswers.Add(item);
                    }
                }
                dataReader.Close();
            }
            dbTransaction.Commit();
        }
    }
예제 #2
0
    void Start()
    {
        pm_instance = this;
        if (databasePlayer == null)
        {
            databasePlayer = new DatabasePlayer();
        }
        manageLanguageMainScreen = FindObjectOfType <ManageLanguageMainScreen>();
        phaseList           = new Dictionary <string, int>();
        playFabId           = "";
        displayName         = "";
        sizePhase           = 4;
        messageTextLogin    = messageLogin.GetComponent <Text>();
        messageTextRegister = messageRegister.GetComponent <Text>();
        isLogged            = false;
        playButton.GetComponent <Button>().interactable = false;

        playerPrefs = new PlayerPreferences();
        if (playerPrefs.getUsername() != null)
        {
            username = playerPrefs.getUsername();
            messageTextLogin.text = "";
            progressBar.SetActive(true);
            loginButton.GetComponent <Button>().interactable = false;
            databasePlayer.loginWithUsername(username, onSucessLogin, onFailureLogin);
        }
    }
예제 #3
0
    private void CreateFakePlayer(DatabasePlayer a_player)
    {
        string text = string.Concat(new object[]
        {
            "HP:  ",
            a_player.health,
            "\nEP:  ",
            a_player.energy,
            "\nKA:  ",
            a_player.karma,
            "\nXP:  ",
            a_player.xp,
            "\nCO:  ",
            a_player.condition,
            "\nGO:  ",
            a_player.gold
        });
        GameObject gameObject = (GameObject)UnityEngine.Object.Instantiate(this.m_prefab);

        gameObject.transform.position = new Vector3(a_player.x, 0.3f, a_player.y);
        TextMesh componentInChildren = gameObject.GetComponentInChildren <TextMesh>();

        if (null != componentInChildren)
        {
            componentInChildren.text = text;
        }
    }
예제 #4
0
 public void SavePartyPlayer(DatabasePlayer a_player)
 {
     if (a_player.aid != 0L)
     {
         lock (m_threadLock)
         {
             m_partyPlayersToWrite.Add(a_player);
         }
     }
 }
예제 #5
0
        private IEnumerator RequestCreateNPC()
        {
            ErrorText = "Creating NPC...";
            WWWForm form = new WWWForm();

            form.AddField("character_name", character_name);
            form.AddField("character_personality", character_personality.ToString());
            form.AddField("position_x", transform.position.x.ToString());
            form.AddField("position_y", transform.position.y.ToString());
            form.AddField("position_z", transform.position.z.ToString());
            form.AddField("rotation_x", transform.rotation.x.ToString());
            form.AddField("rotation_y", transform.rotation.y.ToString());
            form.AddField("rotation_z", transform.rotation.z.ToString());
            form.AddField("max_health", max_health);
            form.AddField("current_health", current_health);
            form.AddField("max_stamina", max_stamina);
            form.AddField("current_stamina", current_stamina);
            form.AddField("gold", gold);
            form.AddField("weapon_id", weapon_id);
            form.AddField("apparel_id", apparel_id);
            form.AddField("dialogue_id", dialogue_id);
            form.AddField("respawn_time", respawn_time.ToString());
            form.AddField("look_radius", look_radius.ToString());

            WWW w = new WWW(NetworkConstants.Api + EndpointConstants.CreateNPC, form);

            yield return(w);

            if (string.IsNullOrEmpty(w.error))
            {
                DatabasePlayer databasePlayer = JsonUtility.FromJson <DatabasePlayer>(w.text);
                if (databasePlayer.success)
                {
                    if (databasePlayer.error != "")
                    {
                        ErrorText = databasePlayer.error;
                    }
                    else
                    {
                        ErrorText = "NPC created successfully";
                    }
                }
                else
                {
                    ErrorText = databasePlayer.error;
                }
            }
            else
            {
                ErrorText = w.error;
            }

            _isCreating = false;
        }
예제 #6
0
        private IEnumerator RequestRegister()
        {
            string username       = _registerUsernameInput.text;
            string password       = _registerPasswordInput.text;
            string repeatPassword = _registerRepeatPasswordInput.text;

            if (password != repeatPassword)
            {
                _registerErrorText.text       = "Passwords do not match.";
                NetworkSettings.IsRegistering = false;
                yield break;
            }

            WWWForm form = new WWWForm();

            form.AddField("username", username);
            form.AddField("password", password);
            form.AddField("origin_x", 0);
            form.AddField("origin_y", 0);
            form.AddField("origin_z", 0);

            WWW w = new WWW(NetworkConstants.Api + EndpointConstants.Register, form);

            yield return(w);

            if (string.IsNullOrEmpty(w.error))
            {
                DatabasePlayer databasePlayer = JsonUtility.FromJson <DatabasePlayer>(w.text);
                if (databasePlayer.success)
                {
                    if (databasePlayer.error != "")
                    {
                        _registerErrorText.text = databasePlayer.error;
                    }
                    else
                    {
                        _registerErrorText.text       = "Register successful";
                        NetworkSettings.IsRegistering = false;
                    }
                }
                else
                {
                    _registerErrorText.text       = databasePlayer.error;
                    NetworkSettings.IsRegistering = false;
                }
            }
            else
            {
                _registerErrorText.text       = w.error;
                NetworkSettings.IsRegistering = false;
            }
        }
예제 #7
0
    public void SavePartyPlayer(DatabasePlayer a_player)
    {
        if (a_player.aid == 0UL)
        {
            return;
        }
        object threadLock = this.m_threadLock;

        lock (threadLock)
        {
            this.m_partyPlayersToWrite.Add(a_player);
        }
    }
예제 #8
0
    private void CreateFakePlayer(DatabasePlayer a_player)
    {
        string     text       = "HP:  " + a_player.health + "\nEP:  " + a_player.energy + "\nKA:  " + a_player.karma + "\nXP:  " + a_player.xp + "\nCO:  " + a_player.condition + "\nGO:  " + a_player.gold;
        GameObject gameObject = (GameObject)Object.Instantiate(m_prefab);

        gameObject.transform.position = new Vector3(a_player.x, 0.3f, a_player.y);
        TextMesh componentInChildren = gameObject.GetComponentInChildren <TextMesh>();

        if (null != componentInChildren)
        {
            componentInChildren.text = text;
        }
    }
예제 #9
0
 private void SQLUpdatePartyPlayers(DatabasePlayer[] a_players)
 {
     if (a_players != null && a_players.Length > 0)
     {
         string text = string.Empty;
         for (int i = 0; i < a_players.Length; i++)
         {
             DatabasePlayer databasePlayer = a_players[i];
             string         text2          = text;
             text = text2 + "UPDATE player SET partyId=" + databasePlayer.partyId + ", partyRank=" + databasePlayer.partyRank + " WHERE pid=" + databasePlayer.pid + ";";
         }
         SQLExecute(text);
     }
 }
예제 #10
0
 private void SQLUpdatePlayers(DatabasePlayer[] a_players)
 {
     if (a_players != null && a_players.Length > 0)
     {
         string text = string.Empty;
         for (int i = 0; i < a_players.Length; i++)
         {
             DatabasePlayer databasePlayer = a_players[i];
             string         text2          = text;
             text = text2 + "UPDATE player SET name='" + saveStr(databasePlayer.name) + "', x=" + databasePlayer.x + ", y=" + databasePlayer.y + ", health=" + databasePlayer.health + ", energy=" + databasePlayer.energy + ", karma=" + databasePlayer.karma + ", xp=" + databasePlayer.xp + ", condition=" + databasePlayer.condition + ", gold=" + databasePlayer.gold + ", partyId=" + databasePlayer.partyId + ", partyRank=" + databasePlayer.partyRank + " WHERE pid=" + databasePlayer.pid + ";";
         }
         SQLExecute(text);
     }
 }
예제 #11
0
    private void onPartyUpdate(NetIncomingMessage a_msg)
    {
        int num = a_msg.ReadByte();

        DatabasePlayer[] array = null;
        if (0 < num)
        {
            array = new DatabasePlayer[num];
            for (int i = 0; i < num; i++)
            {
                array[i].name      = a_msg.ReadString();
                array[i].aid       = a_msg.ReadUInt64();
                array[i].partyRank = a_msg.ReadByte();
            }
        }
        m_partyGui.SetParty(array);
        DebugLogReadWriteMismatch(a_msg, "onPartyUpdate");
    }
예제 #12
0
        private IEnumerator RequestLogin()
        {
            string username = _loginUsernameInput.text;
            string password = _loginPasswordInput.text;

            WWWForm form = new WWWForm();

            form.AddField("username", username);
            form.AddField("password", password);

            WWW w = new WWW(NetworkConstants.Api + EndpointConstants.Login, form);

            yield return(w);

            if (string.IsNullOrEmpty(w.error))
            {
                DatabasePlayer databasePlayer = JsonUtility.FromJson <DatabasePlayer>(w.text);
                if (databasePlayer.success)
                {
                    if (databasePlayer.error != "")
                    {
                        _loginErrorText.text = databasePlayer.error;
                    }
                    else
                    {
                        _loginErrorText.text = "Login successful";
                        ConnectedCharacters.MyDatabasePlayer = databasePlayer;
                        NetworkSettings.InitializeNetworkTransport();
                        SceneManager.LoadScene("Lerocia");
                    }
                }
                else
                {
                    _loginErrorText.text        = databasePlayer.error;
                    NetworkSettings.IsLoggingIn = false;
                }
            }
            else
            {
                _loginErrorText.text        = w.error;
                NetworkSettings.IsLoggingIn = false;
            }
        }
예제 #13
0
    public void Spawn(GameObject a_prefab, DatabasePlayer a_dbPlayer)
    {
        Vector3 position = Vector3.zero;
        bool    flag     = a_dbPlayer.x == 0f && 0f == a_dbPlayer.y;

        if (flag)
        {
            a_dbPlayer.karma = 200;
            ServerTutorial tutorial = this.m_server.GetTutorial();
            if (null != tutorial)
            {
                position = tutorial.StartTutorial();
            }
        }
        else
        {
            position.x = a_dbPlayer.x;
            position.z = a_dbPlayer.y;
        }
        position.y = 0f;
        this.m_pid = a_dbPlayer.pid;
        GameObject gameObject = (GameObject)UnityEngine.Object.Instantiate(a_prefab, position, Quaternion.identity);

        this.m_char            = gameObject.GetComponent <ControlledChar>();
        this.m_health          = (float)a_dbPlayer.health;
        this.m_energy          = (float)a_dbPlayer.energy;
        this.m_karma           = (float)a_dbPlayer.karma;
        this.m_lastUpdateKarma = (float)a_dbPlayer.karma;
        this.m_xp        = a_dbPlayer.xp;
        this.m_condition = a_dbPlayer.condition;
        this.m_gold      = a_dbPlayer.gold;
        this.m_partyId   = a_dbPlayer.partyId;
        this.m_partyRank = a_dbPlayer.partyRank;
        this.RecalculateRank();
        if (this.m_health == 0f)
        {
            this.m_respawnTime = Time.time;
        }
        this.m_char.Init(this);
        this.m_inventory = new ItemContainer(5, 4, 0, this.m_sql.PidToCid(this.m_pid), this.m_sql, this);
        this.m_buildMan.IgnoreBedCollision(this.m_pid, this.m_char.collider);
    }
예제 #14
0
        private IEnumerator RequestCreateNPCDestination()
        {
            ErrorText = "Creating NPC...";
            WWWForm form = new WWWForm();

            form.AddField("character_id", character_id);
            form.AddField("position_x", transform.position.x.ToString());
            form.AddField("position_y", transform.position.y.ToString());
            form.AddField("position_z", transform.position.z.ToString());
            form.AddField("duration", duration.ToString());

            WWW w = new WWW(NetworkConstants.Api + EndpointConstants.CreateNPCDestination, form);

            yield return(w);

            if (string.IsNullOrEmpty(w.error))
            {
                DatabasePlayer databasePlayer = JsonUtility.FromJson <DatabasePlayer>(w.text);
                if (databasePlayer.success)
                {
                    if (databasePlayer.error != "")
                    {
                        ErrorText = databasePlayer.error;
                    }
                    else
                    {
                        ErrorText = "Destination created successfully";
                    }
                }
                else
                {
                    ErrorText = databasePlayer.error;
                }
            }
            else
            {
                ErrorText = w.error;
            }

            _isCreating = false;
        }
예제 #15
0
 private void SQLGetOrCreatePlayer(ulong[] a_ids)
 {
     foreach (ulong num in a_ids)
     {
         DatabasePlayer item = new DatabasePlayer(num, string.Empty, 0, 0f, 0f, 100, 100, 100, 0, 0, 0, 0, 0);
         using (IDbTransaction dbTransaction = this.m_sqlConnection.BeginTransaction())
         {
             this.m_sqlCommand.CommandText = "SELECT aid, pid, x, y, health, energy, karma, xp, condition, gold, name, partyId, partyRank FROM player WHERE aid='" + num + "' LIMIT 1;";
             using (IDataReader dataReader = this.m_sqlCommand.ExecuteReader())
             {
                 if (dataReader.Read())
                 {
                     item.aid       = (ulong)dataReader.GetInt64(0);
                     item.pid       = dataReader.GetInt32(1);
                     item.x         = dataReader.GetFloat(2);
                     item.y         = dataReader.GetFloat(3);
                     item.health    = dataReader.GetInt32(4);
                     item.energy    = dataReader.GetInt32(5);
                     item.karma     = dataReader.GetInt32(6);
                     item.xp        = dataReader.GetInt32(7);
                     item.condition = dataReader.GetInt32(8);
                     item.gold      = dataReader.GetInt32(9);
                     item.name      = dataReader.GetString(10);
                     item.partyId   = dataReader.GetInt32(11);
                     item.partyRank = dataReader.GetInt32(12);
                 }
                 dataReader.Close();
             }
             dbTransaction.Commit();
         }
         if (item.pid == 0)
         {
             item.pid = this.SQLExecuteAndGetId("INSERT INTO player (aid) VALUES('" + num + "');");
         }
         object threadLock = this.m_threadLock;
         lock (threadLock)
         {
             this.m_playerAnswers.Add(item);
         }
     }
 }
예제 #16
0
    private IEnumerator GetStatsForPlayer(int characterId)
    {
        form = new WWWForm();

        form.AddField("character_id", characterId);

        WWW w = new WWW(NetworkConstants.Api + getStatsForCharacterEndpoint, form);

        yield return(w);

        if (string.IsNullOrEmpty(w.error))
        {
            DatabasePlayer dbp = JsonUtility.FromJson <DatabasePlayer>(w.text);
            ConnectedCharacters.Players[characterId].Avatar.transform.position =
                new Vector3(dbp.position_x, dbp.position_y, dbp.position_z);
            ConnectedCharacters.Players[characterId].Avatar.transform.rotation =
                Quaternion.Euler(new Vector3(dbp.rotation_x, dbp.rotation_y, dbp.rotation_z));
            ConnectedCharacters.Players[characterId].CharacterPersonality = dbp.character_personality;
            ConnectedCharacters.Players[characterId].MaxHealth            = dbp.max_health;
            ConnectedCharacters.Players[characterId].CurrentHealth        = dbp.current_health;
            ConnectedCharacters.Players[characterId].MaxStamina           = dbp.max_stamina;
            ConnectedCharacters.Players[characterId].CurrentStamina       = dbp.current_stamina;
            ConnectedCharacters.Players[characterId].Gold       = dbp.gold;
            ConnectedCharacters.Players[characterId].BaseWeight = dbp.base_weight;
            ConnectedCharacters.Players[characterId].BaseDamage = dbp.base_damage;
            ConnectedCharacters.Players[characterId].BaseArmor  = dbp.base_armor;
            ConnectedCharacters.Players[characterId].WeaponId   = dbp.weapon_id;
            ConnectedCharacters.Players[characterId].ApparelId  = dbp.apparel_id;
            ConnectedCharacters.Players[characterId].DialogueId = dbp.dialogue_id;
            ConnectedCharacters.Players[characterId].Origin     = new Vector3(dbp.origin_x, dbp.origin_y, dbp.origin_z);
            ConnectedCharacters.Players[characterId].Dialogues  = DialogueList.Dialogues[dbp.dialogue_id];

            // Tell everybody that a new player has connected
            Send(
                "CNN|" +
                characterId + '|' +
                dbp.character_name + '|' +
                dbp.character_personality + '|' +
                dbp.position_x + '|' +
                dbp.position_y + '|' +
                dbp.position_z + '|' +
                dbp.rotation_x + '|' +
                dbp.rotation_y + '|' +
                dbp.rotation_z + '|' +
                dbp.max_health + '|' +
                dbp.current_health + '|' +
                dbp.max_stamina + '|' +
                dbp.current_stamina + '|' +
                dbp.gold + '|' +
                dbp.base_weight + '|' +
                dbp.base_damage + '|' +
                dbp.base_armor + '|' +
                dbp.weapon_id + '|' +
                dbp.apparel_id + '|' +
                dbp.dialogue_id + '|' +
                dbp.origin_x + '|' +
                dbp.origin_y + '|' +
                dbp.origin_z + '|' +
                false,
                reliableChannel, ConnectedCharacters.ConnectionIds
                );
            StartCoroutine("GetItemsForPlayer", characterId);
        }
        else
        {
            Debug.Log(w.error);
        }
    }
예제 #17
0
    private void LoadData()
    {
        int   num  = 0;
        int   num2 = 0;
        int   num3 = 0;
        int   num4 = 0;
        int   num5 = 0;
        float num6 = 0f;
        float num7 = 0f;

        using (IDbTransaction dbTransaction = this.m_sqlConnection.BeginTransaction())
        {
            this.m_sqlCommand.CommandText = "SELECT aid, pid, x, y, health, energy, karma, xp, condition, gold FROM player;";
            using (IDataReader dataReader = this.m_sqlCommand.ExecuteReader())
            {
                while (dataReader.Read())
                {
                    DatabasePlayer a_player = default(DatabasePlayer);
                    a_player.aid       = (ulong)dataReader.GetInt64(0);
                    a_player.pid       = dataReader.GetInt32(1);
                    a_player.x         = dataReader.GetFloat(2);
                    a_player.y         = dataReader.GetFloat(3);
                    a_player.health    = dataReader.GetInt32(4);
                    a_player.energy    = dataReader.GetInt32(5);
                    a_player.karma     = dataReader.GetInt32(6);
                    a_player.xp        = dataReader.GetInt32(7);
                    a_player.condition = dataReader.GetInt32(8);
                    a_player.gold      = dataReader.GetInt32(9);
                    num++;
                    if (a_player.xp == 0)
                    {
                        num2++;
                    }
                    else if (1000 < a_player.xp)
                    {
                        num5++;
                    }
                    if (Mathf.Abs(a_player.x - -1114f) < 70f && Mathf.Abs(a_player.y - 720f) < 70f)
                    {
                        num3++;
                    }
                    else if (Mathf.Abs(a_player.x - -1114f) > 1000f || Mathf.Abs(a_player.y - 720f) > 1000f)
                    {
                        num4++;
                    }
                    num6 += (float)a_player.karma;
                    num7 += (float)a_player.gold;
                    if (this.m_createFakePlayers)
                    {
                        this.CreateFakePlayer(a_player);
                    }
                }
                dataReader.Close();
            }
            dbTransaction.Commit();
            num2 = (int)((float)num2 / (float)num * 100f);
            num3 = (int)((float)num3 / (float)num * 100f);
            num4 = (int)((float)num4 / (float)num * 100f);
            num5 = (int)((float)num5 / (float)num * 100f);
            Debug.Log(string.Concat(new object[]
            {
                "players: ",
                num,
                "\nplayersWithNoXP: ",
                num2,
                "%\nplayersOnTutorialIsland: ",
                num3,
                "%\nplayersThatMovedSomewhat: ",
                num4,
                "%\nplayersWithOver1000XP: ",
                num5,
                "%\naverageKarma: ",
                num6 / (float)num,
                "\naverageGold: ",
                num7 / (float)num
            }));
        }
    }