diff --git a/src/router/card.rs b/src/router/card.rs index 2e2bebf..87b36ac 100644 --- a/src/router/card.rs +++ b/src/router/card.rs @@ -4,7 +4,8 @@ use actix_web::{HttpRequest}; use crate::router::{userdata, global, items, databases}; use crate::encryption; -fn do_reinforce(user: &mut JsonValue, body: &JsonValue, exp_id: &str, money_multiplier: i64, evolve: bool) -> JsonValue { +// 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 { for (i, data) in user["card_list"].members().enumerate() { if data["id"] == body["id"] { let materials = &body["material_item_list"]; @@ -34,6 +35,19 @@ fn do_reinforce(user: &mut JsonValue, body: &JsonValue, exp_id: &str, money_mult data["amount"] = (data["amount"].as_i64().unwrap() - money).into(); } } + if evolve { + if !databases::CHARACTER_CHATS[card["master_card_id"].to_string()]["50"].is_empty() { + let chat = &databases::CHARACTER_CHATS[card["master_card_id"].to_string()]["50"]; + let mission_id = databases::MISSION_REWARD[chat[0].to_string()]["value"].as_i64().unwrap(); + + if crate::router::chat::add_chat_from_chapter_id(mission_id, chats) { + items::update_mission_status(chat[1].as_i64().unwrap(), 0, true, true, 1, missions); + if !clear_mission_ids.contains(chat[1].as_i64().unwrap()) { + clear_mission_ids.push(chat[1].clone()).unwrap(); + } + } + } + } return card; } } @@ -44,8 +58,9 @@ pub fn reinforce(req: HttpRequest, body: String) -> Option { let key = global::get_login(req.headers(), &body); let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap(); let mut user = userdata::get_acc(&key); + let mut clear_mission_ids = array![]; - let card = do_reinforce(&mut user, &body, "exp", 1, false); + let card = do_reinforce(&mut user, &body, "exp", 1, false, &mut array![], &mut array![], &mut clear_mission_ids); userdata::save_acc(&key, user.clone()); @@ -53,7 +68,7 @@ pub fn reinforce(req: HttpRequest, body: String) -> Option { card: card, item_list: user["item_list"].clone(), point_list: user["point_list"].clone(), - clear_mission_ids: [] + clear_mission_ids: clear_mission_ids }) } @@ -61,8 +76,9 @@ pub fn skill_reinforce(req: HttpRequest, body: String) -> Option { let key = global::get_login(req.headers(), &body); let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap(); let mut user = userdata::get_acc(&key); + let mut clear_mission_ids = array![]; - let card = do_reinforce(&mut user, &body, "skill_exp", 10, false); + let card = do_reinforce(&mut user, &body, "skill_exp", 10, false, &mut array![], &mut array![], &mut clear_mission_ids); userdata::save_acc(&key, user.clone()); @@ -70,7 +86,7 @@ pub fn skill_reinforce(req: HttpRequest, body: String) -> Option { card: card, item_list: user["item_list"].clone(), point_list: user["point_list"].clone(), - clear_mission_ids: [] + clear_mission_ids: clear_mission_ids }) } @@ -78,15 +94,20 @@ pub fn evolve(req: HttpRequest, body: String) -> Option { let key = global::get_login(req.headers(), &body); let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap(); let mut user = userdata::get_acc(&key); + let mut chats = userdata::get_acc_chats(&key); + let mut missions = userdata::get_acc_missions(&key); + let mut clear_mission_ids = array![]; - let card = do_reinforce(&mut user, &body, "", 0, true); + let card = do_reinforce(&mut user, &body, "", 0, true, &mut missions, &mut chats, &mut clear_mission_ids); userdata::save_acc(&key, user.clone()); + userdata::save_acc_chats(&key, chats); + userdata::save_acc_missions(&key, missions); Some(object!{ card: card, item_list: user["item_list"].clone(), point_list: user["point_list"].clone(), - clear_mission_ids: [] + clear_mission_ids: clear_mission_ids }) } diff --git a/src/router/chat.rs b/src/router/chat.rs index 054391c..1eb98d9 100644 --- a/src/router/chat.rs +++ b/src/router/chat.rs @@ -20,6 +20,15 @@ pub fn add_chat(id: i64, num: i64, chats: &mut JsonValue) -> bool { true } +pub fn add_chat_from_chapter_id(chapter_id: i64, chats: &mut JsonValue) -> bool { + let chapter = &databases::CHAPTERS_MASTER[chapter_id.to_string()]; + if chapter.is_empty() { + println!("Attempted to give unknown chapter id {}", chapter_id); + return false; + } + add_chat(chapter["masterChatId"].as_i64().unwrap(), chapter["roomId"].as_i64().unwrap(), chats) +} + pub fn home(req: HttpRequest, body: String) -> Option { let key = global::get_login(req.headers(), &body); let chats = userdata::get_acc_chats(&key); diff --git a/src/router/databases/mod.rs b/src/router/databases/mod.rs index 162b009..416c122 100644 --- a/src/router/databases/mod.rs +++ b/src/router/databases/mod.rs @@ -42,6 +42,14 @@ lazy_static! { } chats }; + pub static ref CHAPTERS_MASTER: JsonValue = { + let mut chats = object!{}; + let items = json::parse(&include_file!("src/router/databases/json/chat_chapter.json")).unwrap(); + for data in items.members() { + chats[data["chapterId"].to_string()] = data.clone(); + } + chats + }; pub static ref EXCHANGE_LIST: JsonValue = { let mut info = object!{}; let items = json::parse(&include_file!("src/router/databases/json/exchange_item.json")).unwrap(); @@ -225,6 +233,20 @@ lazy_static! { } info }; + pub static ref CHARACTER_CHATS: JsonValue = { + let mut info = object!{}; + let items = json::parse(&include_file!("src/router/databases/json/mission.json")).unwrap(); + for data in items.members() { + if data["conditionValues"].len() != 1 || (data["conditionType"] != 50 && data["conditionType"] != 51) { + continue; + } + if info[data["conditionValues"].to_string()].is_null() { + info[data["conditionValues"].to_string()] = object!{}; + } + info[data["conditionValues"][0].to_string()][data["conditionType"].to_string()] = array![data["masterMissionRewardId"].clone(), data["id"].clone()]; + } + info + }; pub static ref MISSION_REWARD: JsonValue = { let mut info = object!{}; let items = json::parse(&include_file!("src/router/databases/json/mission_reward.json")).unwrap(); diff --git a/src/router/exchange.rs b/src/router/exchange.rs index 7c6e9c7..1f5fe4b 100644 --- a/src/router/exchange.rs +++ b/src/router/exchange.rs @@ -13,6 +13,7 @@ pub fn exchange_post(req: HttpRequest, body: String) -> Option { let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap(); let mut user = userdata::get_acc(&key); let mut missions = userdata::get_acc_missions(&key); + let mut chats = userdata::get_acc_chats(&key); let mut cleared_missions = array![]; let item = &databases::EXCHANGE_LIST[body["master_exchange_item_id"].to_string()]; @@ -22,10 +23,11 @@ pub fn exchange_post(req: HttpRequest, body: String) -> Option { let mut gift = databases::EXCHANGE_REWARD[item["masterExchangeItemRewardId"].to_string()].clone(); gift["reward_type"] = gift["type"].clone(); gift["amount"] = (gift["amount"].as_i64().unwrap() * body["count"].as_i64().unwrap()).into(); - items::give_gift(&gift, &mut user, &mut missions, &mut cleared_missions); + items::give_gift(&gift, &mut user, &mut missions, &mut cleared_missions, &mut chats); userdata::save_acc(&key, user.clone()); userdata::save_acc_missions(&key, missions); + userdata::save_acc_chats(&key, chats); Some(object!{ "exchange": body, diff --git a/src/router/items.rs b/src/router/items.rs index 93f74a0..9437687 100644 --- a/src/router/items.rs +++ b/src/router/items.rs @@ -115,7 +115,7 @@ pub fn use_item(item: &JsonValue, multiplier: i64, user: &mut JsonValue) { } } -pub fn give_gift(data: &JsonValue, user: &mut JsonValue, missions: &mut JsonValue, clear_missions: &mut JsonValue) -> bool { +pub fn give_gift(data: &JsonValue, user: &mut JsonValue, missions: &mut JsonValue, clear_missions: &mut JsonValue, chats: &mut JsonValue) -> bool { if data.is_empty() { return false; } @@ -124,7 +124,7 @@ pub fn give_gift(data: &JsonValue, user: &mut JsonValue, missions: &mut JsonValu return !give_primogems(data["amount"].as_i64().unwrap(), user); } else if data["reward_type"] == 2 { //character - give_character(data["value"].as_i64().unwrap(), user, missions, clear_missions); + give_character(data["value"].as_i64().unwrap(), user, missions, clear_missions, chats); return true; } else if data["reward_type"] == 3 { return !give_item(data["value"].as_i64().unwrap(), data["amount"].as_i64().unwrap(), user); @@ -142,12 +142,12 @@ pub fn give_gift(data: &JsonValue, user: &mut JsonValue, missions: &mut JsonValu println!("Redeeming reward not implemented for reward type {}", data["reward_type"]); false } -pub fn give_gift_basic(ty_pe: i32, id: i64, amount: i64, user: &mut JsonValue, missions: &mut JsonValue, clear_missions: &mut JsonValue) -> bool { +pub fn give_gift_basic(ty_pe: i32, id: i64, amount: i64, user: &mut JsonValue, missions: &mut JsonValue, clear_missions: &mut JsonValue, chats: &mut JsonValue) -> bool { give_gift(&object!{ reward_type: ty_pe, amount: amount, value: id - }, user, missions, clear_missions) + }, user, missions, clear_missions, chats) } pub fn give_points(master_item_id: i64, amount: i64, user: &mut JsonValue, missions: &mut JsonValue, clear_missions: &mut JsonValue) -> bool { if master_item_id == 1 { @@ -201,7 +201,6 @@ pub fn give_primogems(amount: i64, user: &mut JsonValue) -> bool { user["gem"]["free"] = new_amount.into(); false } - pub fn gift_item(item: &JsonValue, reason: &str, user: &mut JsonValue) -> JsonValue { let to_push = object!{ id: item["id"].clone(), @@ -274,13 +273,25 @@ pub fn get_rarity(id: i64) -> i32 { // true - added // false - already has -pub fn give_character(id: i64, user: &mut JsonValue, missions: &mut JsonValue, clear_missions: &mut JsonValue) -> bool { +pub fn give_character(id: i64, user: &mut JsonValue, missions: &mut JsonValue, clear_missions: &mut JsonValue, chats: &mut JsonValue) -> bool { let character_rarity = get_rarity(id); if character_rarity == 0 { println!("Attempted to give user undefined card!! Card id: {}", id); return false; } + if !databases::CHARACTER_CHATS[id.to_string()]["51"].is_empty() { + let chat = &databases::CHARACTER_CHATS[id.to_string()]["51"]; + let mission_id = databases::MISSION_REWARD[chat[0].to_string()]["value"].as_i64().unwrap(); + + if crate::router::chat::add_chat_from_chapter_id(mission_id, chats) { + update_mission_status(chat[1].as_i64().unwrap(), 0, true, true, 1, missions); + if !clear_missions.contains(chat[1].as_i64().unwrap()) { + clear_missions.push(chat[1].clone()).unwrap(); + } + } + } + for data in user["card_list"].members() { if data["master_card_id"] == id || data["id"] == id { let amount = if character_rarity == 1 { 20 } else if character_rarity == 2 { 50 } else if character_rarity == 3 { 500 } else { 0 }; diff --git a/src/router/live.rs b/src/router/live.rs index 5558182..73f0edd 100644 --- a/src/router/live.rs +++ b/src/router/live.rs @@ -311,7 +311,7 @@ fn get_live_mission_completed_ids(user: &JsonValue, live_id: i64, score: i64, co Some(out) } -fn give_mission_rewards(user: &mut JsonValue, missions: &JsonValue, user_missions: &mut JsonValue, cleared_missions: &mut JsonValue, multiplier: i64) -> JsonValue { +fn give_mission_rewards(user: &mut JsonValue, missions: &JsonValue, user_missions: &mut JsonValue, cleared_missions: &mut JsonValue, chats: &mut JsonValue, multiplier: i64) -> JsonValue { let mut rv = array![]; for data in databases::MISSION_DATA.members() { if !missions.contains(data["id"].as_i32().unwrap()) { @@ -323,12 +323,12 @@ fn give_mission_rewards(user: &mut JsonValue, missions: &JsonValue, user_mission let mut gift = databases::MISSION_REWARD_DATA[data["masterLiveMissionRewardId"].to_string()].clone(); gift["reward_type"] = gift["type"].clone(); gift["amount"] = (gift["amount"].as_i64().unwrap() * multiplier).into(); - items::give_gift(&gift, user, user_missions, cleared_missions); + items::give_gift(&gift, user, user_missions, cleared_missions, chats); } - if items::give_gift_basic(3, 16005001, 10 * multiplier, user, user_missions, cleared_missions) { + if items::give_gift_basic(3, 16005001, 10 * multiplier, user, user_missions, cleared_missions, chats) { rv.push(object!{"type":3,"value":16005001,"level":0,"amount":10}).unwrap(); } - if items::give_gift_basic(3, 17001001, 2 * multiplier, user, user_missions, cleared_missions) { + if items::give_gift_basic(3, 17001001, 2 * multiplier, user, user_missions, cleared_missions, chats) { rv.push(object!{"type":3,"value":17001001,"level":0,"amount":2}).unwrap(); } rv @@ -531,7 +531,7 @@ fn live_end(req: &HttpRequest, body: &str, skipped: bool) -> JsonValue { clear_master_live_mission_ids: missions.clone() }); - let reward_list = give_mission_rewards(&mut user, &missions, &mut user_missions, &mut cleared_missions, body["live_boost"].as_i64().unwrap_or(1)); + let reward_list = give_mission_rewards(&mut user, &missions, &mut user_missions, &mut cleared_missions, &mut chats, body["live_boost"].as_i64().unwrap_or(1)); let lp_used: i32 = body["use_lp"].as_i32().unwrap_or(10 * body["live_boost"].as_i32().unwrap_or(0)); diff --git a/src/router/lottery.rs b/src/router/lottery.rs index f58246a..af5c386 100644 --- a/src/router/lottery.rs +++ b/src/router/lottery.rs @@ -106,6 +106,7 @@ pub fn lottery_post(req: HttpRequest, body: String) -> Option { let mut user = userdata::get_acc(&key); let user2 = userdata::get_acc(&key); let mut missions = userdata::get_acc_missions(&key); + let mut chats = userdata::get_acc_chats(&key); let mut cleared_missions = array![]; let lottery_id = body["master_lottery_id"].as_i64().unwrap(); @@ -129,7 +130,7 @@ pub fn lottery_post(req: HttpRequest, body: String) -> Option { if lottery_type == 1 { for data in cardstogive.members() { let mut is_new = true; - if !items::give_character(data["master_card_id"].as_i64().unwrap(), &mut user, &mut missions, &mut cleared_missions) { + if !items::give_character(data["master_card_id"].as_i64().unwrap(), &mut user, &mut missions, &mut cleared_missions, &mut chats) { is_new = false; } if is_new { @@ -162,7 +163,7 @@ pub fn lottery_post(req: HttpRequest, body: String) -> Option { } else if lottery_type == 2 { for data in cardstogive.members() { let info = get_card(data["master_lottery_item_id"].to_string(), data["master_lottery_item_number"].to_string()); - items::give_gift_basic(info["type"].as_i32().unwrap(), info["value"].as_i64().unwrap(), info["amount"].as_i64().unwrap(), &mut user, &mut missions, &mut cleared_missions); + items::give_gift_basic(info["type"].as_i32().unwrap(), info["value"].as_i64().unwrap(), info["amount"].as_i64().unwrap(), &mut user, &mut missions, &mut cleared_missions, &mut chats); let to_push = object!{ "master_lottery_item_id": data["master_lottery_item_id"].clone(), "master_lottery_item_number": data["master_lottery_item_number"].clone(), @@ -173,10 +174,11 @@ pub fn lottery_post(req: HttpRequest, body: String) -> Option { } if exchange_id != 0 { - items::give_gift_basic(3, exchange_id, 10, &mut user, &mut missions, &mut cleared_missions); + items::give_gift_basic(3, exchange_id, 10, &mut user, &mut missions, &mut cleared_missions, &mut chats); } userdata::save_acc(&key, user.clone()); + userdata::save_acc_chats(&key, chats); userdata::save_acc_missions(&key, missions); Some(object!{ diff --git a/src/router/mission.rs b/src/router/mission.rs index fd46429..8685a16 100644 --- a/src/router/mission.rs +++ b/src/router/mission.rs @@ -36,6 +36,7 @@ pub fn receive(req: HttpRequest, body: String) -> Option { let mut missions = userdata::get_acc_missions(&key); let mut user = userdata::get_acc(&key); + let mut chats = userdata::get_acc_chats(&key); let mut rewards = array![]; for mission in body["master_mission_ids"].members() { @@ -43,7 +44,7 @@ pub fn receive(req: HttpRequest, body: String) -> Option { let mut gift = databases::MISSION_REWARD[mission_info["masterMissionRewardId"].to_string()].clone(); gift["reward_type"] = gift["type"].clone(); gift["amount"] = gift["amount"].as_i64().unwrap().into(); - items::give_gift(&gift, &mut user, &mut missions, &mut array![]); + items::give_gift(&gift, &mut user, &mut missions, &mut array![], &mut chats); rewards.push(gift).unwrap(); let variable_missions = array![[1153001, 1153019], [1105001, 1105017], [1101001, 1101030], [1121001, 1121019], [1112001, 1112033]]; @@ -67,6 +68,7 @@ pub fn receive(req: HttpRequest, body: String) -> Option { } userdata::save_acc(&key, user.clone()); + userdata::save_acc_chats(&key, chats); userdata::save_acc_missions(&key, missions.clone()); Some(object!{ diff --git a/src/router/serial_code.rs b/src/router/serial_code.rs index 9eddd3a..f385ea9 100644 --- a/src/router/serial_code.rs +++ b/src/router/serial_code.rs @@ -25,7 +25,7 @@ pub fn serial_code(req: HttpRequest, body: String) -> Option { } else if body["input_code"] == "ilikeganyu!!!!!!" { itemz.push(items::gift_item_basic(16005003, 100, 3, "I need more primogems", &mut user)).ok()?; } else if body["input_code"] == "serial_code" { - itemz.push(items::gift_item_basic(17001003, 100, 3, "nyaa~", &mut user)).ok()?; + itemz.push(items::gift_item_basic(17001003, 100, 3, "nyaa~", &mut user)).ok()?; } else if body["input_code"] == "ganuy" { itemz.push(items::gift_item_basic(40010015, 1, 2, "I need more primogem!!!!!!", &mut user)).ok()?; itemz.push(items::gift_item_basic(30010015, 1, 2, "I need more primogem!!!!!!", &mut user)).ok()?; @@ -41,6 +41,7 @@ pub fn serial_code(req: HttpRequest, body: String) -> Option { itemz.push(items::gift_item_basic(10020018, 1, 2, "meow", &mut user)).ok()?; itemz.push(items::gift_item_basic(10010014, 1, 2, "meow", &mut user)).ok()?; itemz.push(items::gift_item_basic(10010015, 1, 2, "meow", &mut user)).ok()?; + itemz.push(items::gift_item_basic(10070015, 1, 2, "assssssssssssddddd", &mut user)).ok()?; } else if body["input_code"] == "meow" { itemz.push(items::gift_item_basic(10010020, 1, 2, "I need more primogem!!!!!!", &mut user)).ok()?; itemz.push(items::gift_item_basic(10040016, 1, 2, "I need more primogem!!!!!!", &mut user)).ok()?; diff --git a/src/router/user.rs b/src/router/user.rs index 3c1bf30..bebfa6a 100644 --- a/src/router/user.rs +++ b/src/router/user.rs @@ -53,6 +53,7 @@ pub fn gift(req: HttpRequest, body: String) -> Option { let mut user = userdata::get_acc_home(&key); let mut userr = userdata::get_acc(&key); + let mut chats = userdata::get_acc_chats(&key); let mut missions = userdata::get_acc_missions(&key); let mut cleared_missions = array![]; @@ -65,7 +66,7 @@ pub fn gift(req: HttpRequest, body: String) -> Option { if data["id"] != *gift_id { continue; } - if !items::give_gift(data, &mut userr, &mut missions, &mut cleared_missions) { + if !items::give_gift(data, &mut userr, &mut missions, &mut cleared_missions, &mut chats) { failed.push(gift_id.clone()).unwrap(); break; } @@ -87,6 +88,7 @@ pub fn gift(req: HttpRequest, body: String) -> Option { userdata::save_acc_missions(&key, missions); userdata::save_acc_home(&key, user); + userdata::save_acc_chats(&key, chats); userdata::save_acc(&key, userr.clone()); let userr = userdata::get_acc(&key); @@ -385,7 +387,7 @@ pub fn initialize(req: HttpRequest, body: String) -> Option { // User is rewarded with all base cards in the team they chose. This makes up their new deck_list for (i, data) in cardstoreward.members().enumerate() { - items::give_character(data.as_i64().unwrap(), &mut user, &mut missions, &mut array![]); + items::give_character(data.as_i64().unwrap(), &mut user, &mut missions, &mut array![], &mut array![]); if i < 10 { user["deck_list"][0]["main_card_ids"][i] = data.clone(); }