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 ;
では動作を確認しましょう。
今回は、ゲーム中にざくざく手に入るゲーム内の通貨で拡張する仕様。
ここで課金アイテム使わせなくてもいいかなーと。
さて次はちょっと大物。エリア移動に手を付けようかな。。。
最後まで読んでいただきありがとうございました。