function SmithyRefineProcess() { if (!$_POST["refine"]) { return false; } if (!$_POST["item_no"]) { ShowError("Select Item."); return false; } // 道具が読み込めない場合 if (!($item = LoadItemData($_POST["item_no"]))) { ShowError("Failed to load item data."); return false; } // 道具を所持していない場合 if (!$this->item[$_POST["item_no"]]) { ShowError("Item \"{$item[name]}\" doesn't exists."); return false; } // 回数が指定されていない場合 if ($_POST["timesA"] < $_POST["timesB"]) { $times = $_POST["timesB"]; } else { $times = $_POST["timesA"]; } if (!$times || $times < 1 || REFINE_LIMIT < $times) { ShowError("times?"); return false; } include CLASS_SMITHY; $obj_item = new Item($_POST["item_no"]); // その道具が精錬できない場合 if (!$obj_item->CanRefine()) { ShowError("Cant refine \"{$item[name]}\""); return false; } // ここから精錬を始める処理 $this->DeleteItem($_POST["item_no"]); // 道具は消えるか変化するので消す $Price = round($item["buy"] / 2); // 最大精錬数の調整。 if (REFINE_LIMIT < $item["refine"] + $times) { $times = REFINE_LIMIT - $item["refine"]; } $Trys = 0; for ($i = 0; $i < $times; $i++) { // お金を引く if ($this->TakeMoney($Price)) { $MoneySum += $Price; $Trys++; if (!$obj_item->ItemRefine()) { //精錬する(false=失敗なので終了する) break; } // お金が途中でなくなった場合。 } else { ShowError("Not enough money.<br />\n"); $this->AddItem($obj_item->ReturnItem()); break; } // 指定回数精錬を成功しきった場合。 if ($i == $times - 1) { $this->AddItem($obj_item->ReturnItem()); } } print "Money Used : " . MoneyFormat($Price) . " x " . $Trys . " = " . MoneyFormat($MoneySum) . "<br />\n"; $this->SaveUserItem(); return true; /*// お金が足りてるか計算 $Price = round($item["buy"]/2); $MoneyNeed = $times * $Price; if($this->money < $MoneyNeed) { ShowError("Your request needs ".MoneyFormat($MoneyNeed)); return false; }*/ }