// Callback for after server data loads in
    void RetrievedServerMessages(List <int> ints, List <string> strings)
    {
        currentTime    = Epoch.Current();
        secondsToEvent = ints[0] - currentTime;
        secondsToEnd   = ints[1] - currentTime;

        eventTime           = ints[0];
        eventEndTime        = ints[1];
        disclaimerText.text = strings[0];

        if (ScoreKeeper.gameVersion != strings[2])
        {
            disclaimerText.text = "Your game client is out of date!\n\nPlease update your client!";
            ShowDisclaimer();
        }

        if (!PlayerPrefs.HasKey("ClientAddress"))
        {
            PlayerPrefs.SetString("ClientAddress", strings[1]);
            PlayerPrefs.SetInt("ClientPort", ints[2]);
            PlayerPrefs.Save();
        }

        gotServerData = true;

        // Start our countdown timer logic
        InvokeRepeating("Timer", 0, 1f);
    }
示例#2
0
    IEnumerator CompleteAnimationAndLoadLevel()
    {
        yield return(new WaitWhile(() => !BlackFade.instance.isFadeOutComplete()));

        GameStats.StartTime   = Epoch.Current();
        GameStats.TotalDeaths = 0;
        GameStats.LevelDeaths = 0;
        SceneManager.LoadScene("Level 00");
    }
示例#3
0
 public void CmdMail_ReadMessage(int index)
 {
     if (index >= 0 && index < mailMessages.Count)
     {
         MailMessage message = mailMessages[index];
         message.read        = Epoch.Current();
         mailMessages[index] = message;
         Database.singleton.Mail_UpdateMessage(message);
     }
 }
示例#4
0
 public void CmdMail_DeleteMessage(int index)
 {
     if (index >= 0 && index < mailMessages.Count)
     {
         MailMessage message = mailMessages[index];
         message.deleted = Epoch.Current();
         mailMessages.RemoveAt(index);
         Database.singleton.Mail_UpdateMessage(message);
     }
 }
 private void OnPlayerDisconnected(BasePlayer player, string reason)
 {
     if (config.enableHoldQueue)
     {
         if (UserHasAnyPermission(player.UserIDString, config.permsGrantingHoldQueue))
         {
             userDisconnectionTimes.Add(player.userID, Epoch.Current());
         }
     }
 }
示例#6
0
    public void CmdMail_DeleteMessage(int index)
    {
        if (index >= 0 && index < mailMessages.Count)
        {
            MailMessage message = mailMessages[index];
            message.deleted = Epoch.Current();
            mailMessages.RemoveAt(index);
            Database.singleton.Mail_UpdateMessage(message);
        }

        nextRiskyActionTime = NetworkTime.time + mailSettings.mailWaitSeconds;
    }
示例#7
0
    public void CharacterLoad_Mail(Player player)
    {
        var table = connection.Query <mail>(
            "SELECT * FROM mail WHERE messageTo=? AND deleted=0 AND expires > ? ORDER BY sent",
            player.name, Epoch.Current());

        foreach (var row in table)
        {
            MailMessage message = Mail_BuildMessageFromDBRow(row);
            player.mailMessages.Add(message);
        }
    }
        private void CheckDisconnections()
        {
            int current         = Epoch.Current();
            int holdTimeSeconds = config.holdTime * 60;

            foreach (KeyValuePair <ulong, int> pair in userDisconnectionTimes.ToArray())
            {
                if (Epoch.SecondsElapsed(current, pair.Value) >= holdTimeSeconds)
                {
                    userDisconnectionTimes.Remove(pair.Key);
                }
            }
        }
示例#9
0
 public void CmdMail_TakeItem(int index)
 {
     if (index >= 0 && index < mailMessages.Count)
     {
         MailMessage message = mailMessages[index];
         if (InventoryCanAdd(new Item(message.item), 1))
         {
             InventoryAdd(new Item(message.item), 1);
             message.read        = Epoch.Current();
             message.item        = null;
             mailMessages[index] = message;
             Database.singleton.Mail_UpdateMessage(message);
         }
     }
 }
示例#10
0
 // When player reaches exit, load next scene.
 // For now though, just reload the scene
 void OnTriggerEnter2D(Collider2D other)
 {
     if (other is CapsuleCollider2D && other.gameObject.GetComponent <PlayerController>())
     {
         //GameStats.LevelDeaths = 0;
         //SceneManager.LoadScene((SceneManager.GetActiveScene().buildIndex + 1) % SceneManager.sceneCountInBuildSettings);
         //SoundManager.instance.PlayWalkSound();
         GameStats.EndTime = Epoch.Current();
         other.gameObject.transform.position = Vector3.zero;
         other.gameObject.GetComponent <PlayerController>().viewDirection = ViewDirection.Down;
         other.gameObject.GetComponent <PlayerController>().GameComplete  = true;
         BlackFade.instance.AnimateFadeOut(false);
         StartCoroutine(CompleteAnimationAndShowCredits());
     }
 }
示例#11
0
    // -----------------------------------------------------------------------------------
    //
    // -----------------------------------------------------------------------------------
    public void Mail_CreateMessage(string from, string to, string subject, string body, string itemName, long expiration = 0)
    {
        long sent    = Epoch.Current();
        long expires = 0;

        if (expiration > 0)
        {
            expires = sent + expiration;
        }

        if (itemName == null)
        {
            itemName = "";
        }

#if _MYSQL
        ExecuteNonQueryMySql(@"INSERT INTO mail (
							messageFrom, messageTo, subject, body, sent, `expires`, `read`, `deleted`, `item`
						) VALUES (
							@from, @to, @subject, @body, @sent, @expires, 0, 0, @item
						)"                        ,
                             new MySqlParameter("@from", from),
                             new MySqlParameter("@to", to),
                             new MySqlParameter("@subject", subject),
                             new MySqlParameter("@body", body),
                             new MySqlParameter("@sent", sent),
                             new MySqlParameter("@expires", expires),
                             new MySqlParameter("@item", itemName)
                             );
#elif _SQLITE
        ExecuteNonQuery(@"INSERT INTO mail (
							messageFrom, messageTo, subject, body, sent, expires, read, deleted, item
						) VALUES (
							@from, @to, @subject, @body, @sent, @expires, 0, 0, @item
						)"                        ,
                        new SqliteParameter("@from", from),
                        new SqliteParameter("@to", to),
                        new SqliteParameter("@subject", subject),
                        new SqliteParameter("@body", body),
                        new SqliteParameter("@sent", sent),
                        new SqliteParameter("@expires", expires),
                        new SqliteParameter("@item", itemName)
                        );
#endif
    }
示例#12
0
    // -----------------------------------------------------------------------------------
    //
    // -----------------------------------------------------------------------------------
    public void Mail_CreateMessage(string from, string to, string subject, string body, string itemName,
                                   long expiration = 0)
    {
        long sent    = Epoch.Current();
        long expires = 0;

        if (expiration > 0)
        {
            expires = sent + expiration;
        }

        if (itemName == null)
        {
            itemName = "";
        }
        connection.Execute(
            "INSERT INTO mail (messageFrom, messageTo, subject, body, sent, expires, read, deleted, item) VALUES (?, ?, ?, ?, ?, ?, 0, 0, ?)",
            from, to, subject, body, sent, expires, itemName
            );
    }
    // -----------------------------------------------------------------------------------
    //
    // -----------------------------------------------------------------------------------
    public List <MailMessage> Mail_CheckForNewMessages(long maxID)
    {
        List <MailMessage> result = new List <MailMessage>();

#if _SERVER
#if _MYSQL
        var table = ExecuteReaderMySql("SELECT * FROM mail WHERE id > @maxid AND deleted=0 AND expires > @expires ORDER BY sent", new MySqlParameter("@maxid", maxID), new MySqlParameter("@expires", Epoch.Current()));
#elif _SQLITE
        var table = connection.Query <mail>("SELECT * FROM mail WHERE id > " + maxID + " AND deleted=0 AND expires > " + Epoch.Current() + " ORDER BY sent");
#endif
        foreach (var row in table)
        {
            MailMessage message = Mail_BuildMessageFromDBRow(row);
            result.Add(message);
        }
#endif
        return(result);
    }
    private void CharacterLoad_Mail(Player player)
    {
#if _SERVER
#if _MYSQL
        var table = ExecuteReaderMySql("SELECT * FROM mail WHERE messageTo=@character AND deleted=0 AND expires > @expires ORDER BY sent", new MySqlParameter("@character", player.name), new MySqlParameter("@expires", Epoch.Current()));
#elif _SQLITE
        var table = connection.Query <mail>("SELECT * FROM mail WHERE messageTo=? AND deleted=0 AND expires > " + Epoch.Current() + " ORDER BY sent", player.name);
#endif
        foreach (var row in table)
        {
            MailMessage message = Mail_BuildMessageFromDBRow(row);
            player.mailMessages.Add(message);
        }
#endif
    }
    // -----------------------------------------------------------------------------------
    // Update
    // -----------------------------------------------------------------------------------
    private void Update()
    {
        Player player = Player.localPlayer;

        if (player == null)
        {
            return;
        }

        long current = Epoch.Current();

        //-- setup send mail button
        newMailButton.gameObject.SetActive(player.mailSettings.mailSendFromAnywhere);
        newMailButton.onClick.SetListener(() =>
        {
            sendMailPanel.Show();
            readMailPanel.SetActive(false);
        });

        // -- setup delete button

        deleteButton.onClick.SetListener(() =>
        {
            if (NetworkTime.time >= player.nextRiskyActionTime)
            {
                player.nextRiskyActionTime = NetworkTime.time + player.mailSettings.mailWaitSeconds;

                readingIndex = -1;

                for (int i = 0; i < messagesContent.childCount; ++i)
                {
                    int idx = i;
                    UIMailMessageSlot slot = messagesContent.GetChild(idx).GetComponent <UIMailMessageSlot>();
                    if (slot.toggle.isOn)
                    {
                        player.CmdMail_DeleteMessage(slot.mailIndex);
                    }
                }
            }
        });

        //-- setup take item button
        takeItemButton.gameObject.SetActive(readingIndex > -1);

        //count messages that haven't expired yet
        int mailCount = player.mailMessages.Count((m) => current <= m.expires);

        UIUtils.BalancePrefabs(messageSlot, mailCount, messagesContent);

        if (mailCount != cnt)
        {
            cnt = mailCount;
        }

        int slotIndex = -1;

        //loop over messages backwards because we add to the synclist so newer messages appear at end, we want to display newer on top
        for (int mailIndex = player.mailMessages.Count - 1; mailIndex >= 0; mailIndex--)
        {
            MailMessage message = player.mailMessages[mailIndex];

            //if message has expired, skip it
            if (current > message.expires)
            {
                continue;
            }

            int tmpIndex = mailIndex;

            slotIndex++;
            UIMailMessageSlot slot = messagesContent.GetChild(slotIndex).GetComponent <UIMailMessageSlot>();
            slot.textReceived.text = message.sentAt;
            slot.textFrom.text     = message.from;
            slot.textSubject.text  = message.subject;
            slot.mailIndex         = tmpIndex;

            if (message.item != null)
            {
                ItemSlot item = new ItemSlot(new Item(message.item));
                slot.itemSlot.interactable = false;
                slot.itemSlot.GetComponent <Image>().color           = Color.white;
                slot.itemSlot.GetComponent <Image>().sprite          = message.item.image;
                slot.itemSlot.GetComponent <UIShowToolTip>().enabled = true;
                slot.itemSlot.GetComponent <UIShowToolTip>().text    = item.ToolTip();
            }
            else
            {
                slot.itemSlot.interactable = false;
                slot.itemSlot.GetComponent <Image>().color           = Color.clear;
                slot.itemSlot.GetComponent <Image>().sprite          = null;
                slot.itemSlot.GetComponent <UIShowToolTip>().enabled = false;
            }

            //if the message has been read, show normal font, else bold text
            if (message.read > 0)
            {
                slot.textReceived.fontStyle = FontStyle.Normal;
                slot.textFrom.fontStyle     = FontStyle.Normal;
                slot.textSubject.fontStyle  = FontStyle.Normal;
            }
            else
            {
                slot.textReceived.fontStyle = FontStyle.Bold;
                slot.textFrom.fontStyle     = FontStyle.Bold;
                slot.textSubject.fontStyle  = FontStyle.Bold;
            }

            //click on slot, read message
            slot.readButton.onClick.SetListener(() =>
            {
                readingIndex = tmpIndex;
                if (message.read == 0)
                {
                    player.CmdMail_ReadMessage(tmpIndex);
                }
            });
        }

        // currently selected message
        if (readingIndex > -1)
        {
            MailMessage reading = player.mailMessages[readingIndex];

            readContent.gameObject.SetActive(true);
            receivedText.text = reading.sentAt;
            expiresText.text  = reading.expiresAt;
            fromText.text     = reading.from;
            subjectText.text  = reading.subject;
            bodyText.text     = reading.body;

            if (reading.item != null)
            {
                ItemSlot item = new ItemSlot(new Item(reading.item));
                takeItemButton.onClick.SetListener(() =>
                {
                    player.CmdMail_TakeItem(readingIndex);
                    takeItemButton.interactable = false;
                });
                takeItemButton.interactable = true;
                takeItemButton.GetComponent <Image>().color           = Color.white;
                takeItemButton.GetComponent <Image>().sprite          = reading.item.image;
                takeItemButton.GetComponent <UIShowToolTip>().enabled = true;
                takeItemButton.GetComponent <UIShowToolTip>().text    = item.ToolTip();
            }
            else
            {
                takeItemButton.onClick.RemoveAllListeners();
                takeItemButton.interactable = false;
                takeItemButton.GetComponent <Image>().color           = Color.clear;
                takeItemButton.GetComponent <Image>().sprite          = null;
                takeItemButton.GetComponent <UIShowToolTip>().enabled = false;
            }
        }
        else
        {
            readContent.gameObject.SetActive(false);
        }
    }
示例#16
0
    // -----------------------------------------------------------------------------------
    //
    // -----------------------------------------------------------------------------------
    public List <MailMessage> Mail_CheckForNewMessages(long maxID)
    {
        List <MailMessage> result = new List <MailMessage>();
        var table = connection.Query <mail>(
            "SELECT * FROM mail WHERE id > ? AND deleted=0 AND expires > ? ORDER BY sent", maxID, Epoch.Current());

        foreach (var row in table)
        {
            MailMessage message = Mail_BuildMessageFromDBRow(row);
            result.Add(message);
        }

        return(result);
    }