見出し画像

MMORTBS開発記-046 ユニットやアイテムの所持上限を増やせるようにしよう

いつもありがとうございます。

スキマ時間開発のお時間です。よろしくお願いします。

前回までのあらすじ

  イベントやチュートリアルを表示するUIを作成したよ


さて連休も終わりですね。

ちびの面倒を見てたりで、休みの日はあんまり時間が取れなかったり。

オン・オフがあるからこそスキマ時間ができるのだなぁ、とか休みの間あまり進まなかった言い訳をしてみたり。


さて、オーブンベータに向けて、足りていない機能を粛々と作成していきましょう。

今回はよくある、ストレージ拡張です。

ゲーム画面左上の。

この部分です。


まずは、この部分にボタンを仕込みます。

仕込んだら、次は押下時の挙動をC#で作成。


	/// <summary> ユニット数拡張ボタン押下時処理 </summary>
	public void xxxxxxxxxx()
	{
		// Lovの内容を設定する
		Text_Lov_Input_Text_Title.text = "兵舎増築";
		gv_Lov_Input_Text_Mode = 3;

		// メッセージを使用する
		Obj_Text_Lov_Input_Text_Msg.SetActive(true);
		// 必要コストを計算する
		decimal p_cost = (decimal)Math.Pow(2, ((gv_member_max - 100) / 10 + 1)) * 100000;
		Text_Lov_Input_Text_Msg.text = "現在の最大数:" + gv_member_max
			+ Environment.NewLine + "拡張に必要な費用:" + Subgv_parseLargeInt2String(""+p_cost) + "(EN)";

		// 必要コストが足りない場合はOKボタン非表示
		if (gv_money_val < p_cost)
		{
			Button_Lov_Input_Text_OK.SetActive(false);
		}

		// テキスト入力を使用しない
		Obj_InputField_Lov_Input_Text.SetActive(false);

		// Lovを表示する
		Lov_Input_Text.SetActive(true);
	}

次にこの先のOK/Cancel確認でOK時の挙動をC#で作成。

	/// <summary>
	/// テキスト入力LovのOKボタン押下時処理
	/// </summary>
	public void Button_Lov_Input_Text_OK_Event()
	{
		sub_debug("[CALL] GameManager.Button_Lov_Input_Text_OK_Event() Mode:"+ gv_Lov_Input_Text_Mode);

		// テキスト入力モード=3:ユニット拡張の場合
		if (gv_Lov_Input_Text_Mode == 3)
		{
			// Sealする
			Lov_Seal.SetActive(true);

			// サーバー登録成功時処理
			Action action = () =>
			{
				// 基本情報をリロード
				Load_BaseData();

				// 画面ロックを解除する
				Lov_Seal.SetActive(false);
			};

			// サーバーに登録リクエスト
			StartCoroutine(CommunicationManager.ConectServer("xxxxxx.php"
				, "&引数=xxxxxxx"
				, action));
		}

		// テキスト入力Lovを閉じる
		Lov_Input_Text.SetActive(false);

		sub_debug("[END] GameManager.Button_Lov_Input_Text_OK_Event()");
	}

最後に、ストアドを作成しておしまい。

-- 183.兵舎倉庫拡張
-- ユーザID、モード(1:兵舎、2:倉庫)
delimiter //
CREATE OR REPLACE PROCEDURE xxxxxxxxxxxxx(
   IN x_user_id VARCHAR(40)
  ,IN x_mode INT
  ,OUT p_ret VARCHAR(1000)
)
label_root:BEGIN 

 DECLARE p_done INT(1);
 DECLARE p_debug VARCHAR(100);
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET p_done = TRUE;
 DECLARE EXIT HANDLER FOR SQLEXCEPTION
 BEGIN
  GET DIAGNOSTICS CONDITION 1 @sqlstate = RETURNED_SQLSTATE, @errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
  SET p_ret = CONCAT(@sqlstate, ':', @errno, ':[', IFNULL(p_debug, ''), ']', @text);
  INSERT INTO log_err VALUES (NOW(), 'xxxxxxxxxxx', p_debug, p_ret);
  ROLLBACK;
 END;

 BEGIN
  DECLARE p_now_max DECIMAL(64);
  DECLARE p_cost DECIMAL(64);
  DECLARE p_en DECIMAL(64);
  
  
  -- COST計算
  IF x_mode = 1 THEN
   SELECT int_val INTO p_now_max
    FROM [ユーザ情報テーブル]
    WHERE user_id = x_user_id
      AND userdtl_cd = 'max_member';
      
  ELSEIF x_mode = 2 THEN
   SELECT int_val INTO p_now_max
    FROM [ユーザ情報テーブル]
    WHERE user_id = x_user_id
      AND userdtl_cd = 'max_item';
      
  END IF;
  
  SET p_cost = POW(2,((p_now_max - 100) / 10 + 1)) * 100000;
  
  -- COSTチェック
  SELECT int_val INTO p_en
   FROM [ユーザ情報テーブル]
   WHERE user_id = x_user_id
     AND userdtl_cd = 'coin';
  
  IF p_en < p_cost THEN
   SET p_ret = '115';
   leave label_root;
  END IF;
  
  -- COST使用
  UPDATE [ユーザ情報テーブル]
   SET int_val = p_en - p_cost
   WHERE user_id = x_user_id
     AND userdtl_cd = 'coin';
     
  -- 拡張
  IF x_mode = 1 THEN
   UPDATE [ユーザ情報テーブル]
    SET int_val = p_now_max + 10
    WHERE user_id = x_user_id
      AND userdtl_cd = 'max_member';
     
  ELSEIF x_mode = 2 THEN
   UPDATE [ユーザ情報テーブル]
    SET int_val = p_now_max + 10
    WHERE user_id = x_user_id
      AND userdtl_cd = 'max_item';
      
  END IF;
  
  -- 戻りテーブルを設定する
  SELECT *
   FROM [ユーザ情報テーブル]
   WHERE user_id = x_user_id;
   
 END;
END
//
delimiter ;


では動作を確認しましょう。


増築を繰り返すとどんどんコストが増えるのは様式美。



今回は、ゲーム中にざくざく手に入るゲーム内の通貨で拡張する仕様。

ここで課金アイテム使わせなくてもいいかなーと。


さて次はちょっと大物。エリア移動に手を付けようかな。。。


最後まで読んでいただきありがとうございました。

この記事が参加している募集

週末プロジェクト

この記事が気に入ったらサポートをしてみませんか?