mirror of
https://git.ethanthesleepy.one/ethanaobrien/ew
synced 2026-07-12 08:42:20 +08:00
Use masterdata for card exp cap
This commit is contained in:
@@ -13,6 +13,39 @@ pub fn routes(cfg: &mut web::ServiceConfig) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn exp_cap(master_card_id: i64, evolved: bool) -> i64 {
|
||||||
|
let card = &databases::CARD_LIST[master_card_id.to_string()];
|
||||||
|
let rarity = card["rarity"].to_string();
|
||||||
|
let curve = card["masterCardLevelId"].as_i64().unwrap_or(0);
|
||||||
|
let max_level = if evolved {
|
||||||
|
databases::CARD_EVOLVE[&rarity]["maxLevel"].as_i64().unwrap_or(0)
|
||||||
|
} else {
|
||||||
|
databases::CARD_RARITY[&rarity]["maxLevel"].as_i64().unwrap_or(0)
|
||||||
|
};
|
||||||
|
databases::CARD_LEVEL[format!("{}_{}", curve, max_level)].as_i64().unwrap_or(i64::MAX)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn skill_exp_cap(master_card_id: i64) -> i64 {
|
||||||
|
let card = &databases::CARD_LIST[master_card_id.to_string()];
|
||||||
|
let rarity = card["rarity"].to_string();
|
||||||
|
let skill_curve = databases::CARD_RARITY[&rarity]["masterCardSkillLevelId"].to_string();
|
||||||
|
databases::CARD_SKILL_MAX[skill_curve].as_i64().unwrap_or(i64::MAX)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn material_item_list(user: &JsonValue, body: &JsonValue) -> JsonValue {
|
||||||
|
let mut rv = array![];
|
||||||
|
for mat in body["material_item_list"].members() {
|
||||||
|
let mid = mat["master_item_id"].as_i64();
|
||||||
|
for it in user["item_list"].members() {
|
||||||
|
if it["master_item_id"].as_i64() == mid {
|
||||||
|
rv.push(it.clone()).unwrap();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rv
|
||||||
|
}
|
||||||
|
|
||||||
// Chats will only ever be used when evolving
|
// Chats will only ever be used when evolving
|
||||||
fn do_reinforce(user: &mut JsonValue, body: &JsonValue, exp_id: &str, money_multiplier: i64, evolve: bool, missions: &mut JsonValue, chats: &mut JsonValue, clear_mission_ids: &mut JsonValue) -> JsonValue {
|
fn do_reinforce(user: &mut JsonValue, body: &JsonValue, exp_id: &str, money_multiplier: i64, evolve: bool, missions: &mut JsonValue, chats: &mut JsonValue, clear_mission_ids: &mut JsonValue) -> JsonValue {
|
||||||
for (i, data) in user["card_list"].members().enumerate() {
|
for (i, data) in user["card_list"].members().enumerate() {
|
||||||
@@ -37,6 +70,18 @@ fn do_reinforce(user: &mut JsonValue, body: &JsonValue, exp_id: &str, money_mult
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if exp_id == "exp" {
|
||||||
|
let cap = exp_cap(card["master_card_id"].as_i64().unwrap(), !card["evolve"].is_empty());
|
||||||
|
if card["exp"].as_i64().unwrap() > cap {
|
||||||
|
card["exp"] = cap.into();
|
||||||
|
}
|
||||||
|
} else if exp_id == "skill_exp" {
|
||||||
|
let cap = skill_exp_cap(card["master_card_id"].as_i64().unwrap());
|
||||||
|
if card["skill_exp"].as_i64().unwrap() > cap {
|
||||||
|
card["skill_exp"] = cap.into();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
user["card_list"][i] = card.clone();
|
user["card_list"][i] = card.clone();
|
||||||
|
|
||||||
for data in user["point_list"].members_mut() {
|
for data in user["point_list"].members_mut() {
|
||||||
@@ -73,7 +118,7 @@ async fn reinforce(req: HttpRequest, body: String) -> impl Responder {
|
|||||||
|
|
||||||
global::api(&req, Some(object!{
|
global::api(&req, Some(object!{
|
||||||
card: card,
|
card: card,
|
||||||
item_list: user["item_list"].clone(),
|
item_list: material_item_list(&user, &body),
|
||||||
point_list: user["point_list"].clone(),
|
point_list: user["point_list"].clone(),
|
||||||
clear_mission_ids: clear_mission_ids
|
clear_mission_ids: clear_mission_ids
|
||||||
}))
|
}))
|
||||||
@@ -91,7 +136,7 @@ async fn skill_reinforce(req: HttpRequest, body: String) -> impl Responder {
|
|||||||
|
|
||||||
global::api(&req, Some(object!{
|
global::api(&req, Some(object!{
|
||||||
card: card,
|
card: card,
|
||||||
item_list: user["item_list"].clone(),
|
item_list: material_item_list(&user, &body),
|
||||||
point_list: user["point_list"].clone(),
|
point_list: user["point_list"].clone(),
|
||||||
clear_mission_ids: clear_mission_ids
|
clear_mission_ids: clear_mission_ids
|
||||||
}))
|
}))
|
||||||
@@ -113,8 +158,10 @@ async fn evolve(req: HttpRequest, body: String) -> impl Responder {
|
|||||||
|
|
||||||
global::api(&req, Some(object!{
|
global::api(&req, Some(object!{
|
||||||
card: card,
|
card: card,
|
||||||
item_list: user["item_list"].clone(),
|
item_list: material_item_list(&user, &body),
|
||||||
point_list: user["point_list"].clone(),
|
point_list: user["point_list"].clone(),
|
||||||
clear_mission_ids: clear_mission_ids
|
clear_mission_ids: clear_mission_ids,
|
||||||
|
gift_list: array![],
|
||||||
|
updated_value_list: array![]
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -246,4 +246,28 @@ lazy_static! {
|
|||||||
}
|
}
|
||||||
info
|
info
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub static ref CARD_RARITY: JsonValue = index_by(&t("card_rarity"), "rarity");
|
||||||
|
|
||||||
|
pub static ref CARD_EVOLVE: JsonValue = index_by(&t("card_evolve"), "rarity");
|
||||||
|
|
||||||
|
pub static ref CARD_LEVEL: JsonValue = {
|
||||||
|
let mut info = object! {};
|
||||||
|
for data in t("card_level").members() {
|
||||||
|
info[format!("{}_{}", data["id"], data["level"])] = data["exp"].clone();
|
||||||
|
}
|
||||||
|
info
|
||||||
|
};
|
||||||
|
|
||||||
|
pub static ref CARD_SKILL_MAX: JsonValue = {
|
||||||
|
let mut info = object! {};
|
||||||
|
for data in t("card_skill_level").members() {
|
||||||
|
let id = data["id"].to_string();
|
||||||
|
let exp = data["exp"].as_i64().unwrap_or(0);
|
||||||
|
if exp > info[&id].as_i64().unwrap_or(0) {
|
||||||
|
info[id] = exp.into();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
info
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user