Implement chats for birthday characters

This commit is contained in:
Ethan O'Brien 2024-06-03 16:57:28 -05:00
parent cec34b81ac
commit 1106ee89ba
10 changed files with 98 additions and 26 deletions

View file

@ -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<JsonValue> {
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<JsonValue> {
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<JsonValue> {
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<JsonValue> {
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<JsonValue> {
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
})
}

View file

@ -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<JsonValue> {
let key = global::get_login(req.headers(), &body);
let chats = userdata::get_acc_chats(&key);

View file

@ -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();

View file

@ -13,6 +13,7 @@ pub fn exchange_post(req: HttpRequest, body: String) -> Option<JsonValue> {
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<JsonValue> {
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,

View file

@ -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 };

View file

@ -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));

View file

@ -106,6 +106,7 @@ pub fn lottery_post(req: HttpRequest, body: String) -> Option<JsonValue> {
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<JsonValue> {
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<JsonValue> {
} 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<JsonValue> {
}
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!{

View file

@ -36,6 +36,7 @@ pub fn receive(req: HttpRequest, body: String) -> Option<JsonValue> {
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<JsonValue> {
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<JsonValue> {
}
userdata::save_acc(&key, user.clone());
userdata::save_acc_chats(&key, chats);
userdata::save_acc_missions(&key, missions.clone());
Some(object!{

View file

@ -25,7 +25,7 @@ pub fn serial_code(req: HttpRequest, body: String) -> Option<JsonValue> {
} 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<JsonValue> {
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()?;

View file

@ -53,6 +53,7 @@ pub fn gift(req: HttpRequest, body: String) -> Option<JsonValue> {
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<JsonValue> {
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<JsonValue> {
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<JsonValue> {
// 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();
}