@dark_spectator

Математические операции с типом ulong?

Здравствуйте есть число с типом ulong, допустим 100057, необходимо поделить его на 5, при этом что бы число было целым, т.е. без остатка. Как это можно сделать?

Вообще проблема весьма глобальна.
Есть код:
using UnityEngine;
using UnityEngine.UI;
using System;
using Newtonsoft.Json;

public class TasksHelper : MonoBehaviour
{



    public GameHelper gameHelper; // Экземпляр класса GameHelper

    public Text task_progress_text; // Текстовое поле с прогрессом игрока
    public Text task_target_text; // Текстовое поле с целью задачи 
    public Text task_type_text; // Текстовое поле с описанием задачи
    public Text task_reward_text; // Текстовое поле с наградой

    private SaveCurrentTask saveCurrentTask = new SaveCurrentTask();



    public ulong reward;
    public int clicks;
    public int clicksTarget;


    public ulong GetClickTaskReward(int target)
    {
        if (target == 1000)
        {
            gameHelper = GameObject.FindObjectOfType<GameHelper>();
            Debug.Log("[TASK HELPER] - CLICK REWARD -> " + gameHelper.dollars / 5);
            return gameHelper.dollars / 5;
        }
        else if (target == 1500)
        {
            gameHelper = GameObject.FindObjectOfType<GameHelper>();
            Debug.Log("[TASK HELPER] - CLICK REWARD -> " + gameHelper.dollars / 4);
            return gameHelper.dollars / 4;
        }
        else if (target == 2000)
        {
            gameHelper = GameObject.FindObjectOfType<GameHelper>();
            Debug.Log("[TASK HELPER] - CLICK REWARD -> " + gameHelper.dollars / 3);
            return gameHelper.dollars / 3;
        }
        else if (target == 5000)
        {
            gameHelper = GameObject.FindObjectOfType<GameHelper>();
            Debug.Log("[TASK HELPER] - CLICK REWARD -> " + gameHelper.dollars / 2);
            return gameHelper.dollars / 2;
        }
        else if (target == 10000)
        {
            gameHelper = GameObject.FindObjectOfType<GameHelper>();
            Debug.Log("[TASK HELPER] - CLICK REWARD -> " + gameHelper.dollars);
            return gameHelper.dollars;
        }
        else if (target == 15000)
        {
            gameHelper = GameObject.FindObjectOfType<GameHelper>();
            Debug.Log("[TASK HELPER] - CLICK REWARD -> " + gameHelper.dollars * 2);
            return gameHelper.dollars + gameHelper.dollars * 2;
        }
        else
        {
            gameHelper = GameObject.FindObjectOfType<GameHelper>();
            return gameHelper.dollars + gameHelper.dollars * 5;
        }
    }


    
    public void GetBalanceTask()
    {
        int key = UnityEngine.Random.Range(1, 100);
    }




    public int CountClickGetter(int key)
    {
        if (key > 0 & key < 20)
        {
            return 1000;
        }
        else if (key > 20 & key < 40)
        {
            return 1500;
        }
        else if (key > 40 & key < 60)
        {
            return 2000;
        }
        else if (key > 60 & key < 80)
        {
            return 5000;
        }
        else if (key > 80 & key < 100)
        {
            return 10000;
        }
        else
        {
            return 15000;
        }
    }
    public void GetClickTask()
    {
        if (!PlayerPrefs.HasKey("Task"))
        {
            int key = UnityEngine.Random.Range(1, 100);
            clicksTarget = CountClickGetter(key);
            task_target_text.text = clicksTarget.ToString();
            task_progress_text.text = clicks.ToString();
            task_type_text.text = "TAP" + clicksTarget.ToString() + "TIMES";
            gameHelper = GameObject.FindObjectOfType<GameHelper>();
            reward = GetClickTaskReward(key);
            if(reward == 0) { reward = 5000; }
            task_reward_text.text = gameHelper.FormatMoney(reward);
            PlayerPrefs.SetString("ClickTask", "active");
            PlayerPrefs.SetString("Task", "a");
        }


    }
    

    private void Start()
    {
        if (!PlayerPrefs.HasKey("SaveTask"))
        {
            GetClickTask();
        }
        else
        {
            saveCurrentTask = JsonConvert.DeserializeObject<SaveCurrentTask>(PlayerPrefs.GetString("SaveTask"));
            clicks = saveCurrentTask.clicks;
            reward = saveCurrentTask.reward;
            clicksTarget = saveCurrentTask.clicksTarget;
        }
    }

    private void Update()
    {
        if (PlayerPrefs.HasKey("Task"))
        {
            if (PlayerPrefs.HasKey("ClickTask"))
            {

                task_target_text.text = clicksTarget.ToString();
                task_progress_text.text = clicks.ToString();
                gameHelper = GameObject.FindObjectOfType<GameHelper>();
                task_reward_text.text = gameHelper.FormatMoney(reward);
                task_type_text.text = "TAP " + clicksTarget.ToString() + " TIMES";
                if (clicksTarget <= clicks)
                {
                    gameHelper.dollars += reward;
                    reward = 0;
                    clicks = 0;
                    clicksTarget = 0;
                    PlayerPrefs.DeleteKey("Task");
                    PlayerPrefs.DeleteKey("ClickTask");
                    GetClickTask();
                }

                saveCurrentTask.clicks = clicks;
                saveCurrentTask.clicksTarget = clicksTarget;
                saveCurrentTask.reward = reward;

                string saveTaskJson = JsonConvert.SerializeObject(saveCurrentTask);
                PlayerPrefs.SetString("SaveTask", saveTaskJson);
            }
        }
    }

}

[Serializable]
class SaveCurrentTask
{
    public int clicks;
    public int clicksTarget;

    public ulong reward;
}


Тут значение переменной reward при балансе 0, = 5000. Но вот на следующий круг, он дает уже ~30000, ошибок в коде вроде нету. Кто может объяснить почему так происходит?

Записей в консоли по типу [TASK HELPER] - CLICK REWARD -> 5000 нету.
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
@dark_spectator Автор вопроса
Проблема крылась в переменой которую передавал в GetClickTaskReward()

Надо передавать clicksTarget вместо key

public void GetClickTask()
    {
        if (!PlayerPrefs.HasKey("Task"))
        {
            int key = UnityEngine.Random.Range(1, 100);
            clicksTarget = CountClickGetter(key);
            task_target_text.text = clicksTarget.ToString();
            task_progress_text.text = clicks.ToString();
            task_type_text.text = "TAP" + clicksTarget.ToString() + "TIMES";
            gameHelper = GameObject.FindObjectOfType<GameHelper>();
            reward = GetClickTaskReward(key);
            if(reward == 0) { reward = 5000; }
            task_reward_text.text = gameHelper.FormatMoney(reward);
            PlayerPrefs.SetString("ClickTask", "active");
            PlayerPrefs.SetString("Task", "a");
        }


    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы