mirror of
https://git.ethanthesleepy.one/ethanaobrien/ew
synced 2026-08-26 15:02:18 +08:00
Add an everything banner
This commit is contained in:
@@ -70,27 +70,34 @@ fn get_random_card(item: &JsonValue, rv: &mut JsonValue, rng: &mut rand::rngs::T
|
||||
}
|
||||
|
||||
fn get_random_cards(id: i64, mut count: usize) -> JsonValue {
|
||||
let total_ratio: i64 = databases::RARITY[id.to_string()].members().map(|item| if item["ensured"].as_i32().unwrap() == 1 { 0 } else { item["ratio"].as_i64().unwrap() }).sum();
|
||||
let rarity = &databases::RARITY[id.to_string()];
|
||||
let total_ratio: i64 = rarity.members().map(|item| if item["ensured"].as_i32().unwrap() == 1 { 0 } else { item["ratio"].as_i64().unwrap() }).sum();
|
||||
let ensured_ratio: i64 = rarity.members().map(|item| if item["ensured"].as_i32().unwrap() == 1 { item["ratio"].as_i64().unwrap() } else { 0 }).sum();
|
||||
let mut rng = rand::rng();
|
||||
let mut rv = array![];
|
||||
let mut promised = false;
|
||||
|
||||
if count > 1 {
|
||||
for item in databases::RARITY[id.to_string()].members() {
|
||||
if item["ensured"].as_i32().unwrap() == 1 {
|
||||
|
||||
if count > 1 && ensured_ratio > 0 {
|
||||
let random_number: i64 = rng.random_range(1..ensured_ratio + 1);
|
||||
let mut cumulative_ratio = 0;
|
||||
for item in rarity.members() {
|
||||
if item["ensured"].as_i32().unwrap() != 1 {
|
||||
continue;
|
||||
}
|
||||
cumulative_ratio += item["ratio"].as_i64().unwrap();
|
||||
if random_number <= cumulative_ratio {
|
||||
get_random_card(item, &mut rv, &mut rng);
|
||||
promised = true;
|
||||
count -= 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if promised {
|
||||
count -= 1;
|
||||
}
|
||||
for _i in 0..count {
|
||||
let random_number: i64 = rng.random_range(1..total_ratio + 1);
|
||||
let mut cumulative_ratio = 0;
|
||||
for item in databases::RARITY[id.to_string()].members() {
|
||||
for item in rarity.members() {
|
||||
if item["ensured"].as_i32().unwrap() == 1 {
|
||||
continue;
|
||||
}
|
||||
cumulative_ratio += item["ratio"].as_i64().unwrap();
|
||||
if random_number <= cumulative_ratio {
|
||||
get_random_card(item, &mut rv, &mut rng);
|
||||
@@ -101,9 +108,92 @@ fn get_random_cards(id: i64, mut count: usize) -> JsonValue {
|
||||
rv
|
||||
}
|
||||
|
||||
fn lottery_day() -> i64 {
|
||||
(global::timestamp() as i64 + 32400) / 86400
|
||||
}
|
||||
|
||||
fn get_draw_count(user: &JsonValue, lottery_id: i64, price_number: i64) -> i64 {
|
||||
for data in user["lottery_list"].members() {
|
||||
if data["master_lottery_id"].as_i64() == Some(lottery_id) && data["master_lottery_price_number"].as_i64() == Some(price_number) {
|
||||
return data["count"].as_i64().unwrap_or(0);
|
||||
}
|
||||
}
|
||||
0
|
||||
}
|
||||
|
||||
fn add_draw_count(user: &mut JsonValue, lottery_id: i64, price_number: i64) {
|
||||
let today = lottery_day();
|
||||
if !user["lottery_list"].is_array() {
|
||||
user["lottery_list"] = array![];
|
||||
}
|
||||
for data in user["lottery_list"].members_mut() {
|
||||
if data["master_lottery_id"].as_i64() == Some(lottery_id) && data["master_lottery_price_number"].as_i64() == Some(price_number) {
|
||||
let daily = if data["last_count_date"].as_i64() == Some(today) { data["daily_count"].as_i64().unwrap_or(0) } else { 0 };
|
||||
data["count"] = (data["count"].as_i64().unwrap_or(0) + 1).into();
|
||||
data["daily_count"] = (daily + 1).into();
|
||||
data["last_count_date"] = today.into();
|
||||
return;
|
||||
}
|
||||
}
|
||||
user["lottery_list"].push(object!{
|
||||
"master_lottery_id": lottery_id,
|
||||
"master_lottery_price_number": price_number,
|
||||
"count": 1,
|
||||
"daily_count": 1,
|
||||
"last_count_date": today
|
||||
}).unwrap();
|
||||
}
|
||||
|
||||
fn is_stepup(lottery_id: i64) -> bool {
|
||||
databases::LOTTERY[lottery_id.to_string()]["type"].as_i64() == Some(2)
|
||||
}
|
||||
|
||||
fn stepup_step(lottery_id: i64, draws: i64) -> JsonValue {
|
||||
let steps = &databases::STEPUP[lottery_id.to_string()];
|
||||
let step = draws % steps.len() as i64 + 1;
|
||||
steps.members().find(|n| n["count"].as_i64() == Some(step)).unwrap().clone()
|
||||
}
|
||||
|
||||
fn get_lottery_list(user: &JsonValue) -> JsonValue {
|
||||
let today = lottery_day();
|
||||
let mut rv = array![];
|
||||
for data in user["lottery_list"].members() {
|
||||
let lottery_id = data["master_lottery_id"].as_i64().unwrap_or(0);
|
||||
let price_number = data["master_lottery_price_number"].as_i64().unwrap_or(0);
|
||||
let mut count = data["count"].as_i64().unwrap_or(0);
|
||||
if price_number == 1 && is_stepup(lottery_id) {
|
||||
count += 1;
|
||||
}
|
||||
let daily = if data["last_count_date"].as_i64() == Some(today) { data["daily_count"].as_i64().unwrap_or(0) } else { 0 };
|
||||
rv.push(object!{
|
||||
"master_lottery_id": lottery_id,
|
||||
"master_lottery_price_number": price_number,
|
||||
"count": count,
|
||||
"daily_count": daily,
|
||||
"last_count_date": ""
|
||||
}).unwrap();
|
||||
}
|
||||
for entry in databases::STEPUP.entries() {
|
||||
let lottery_id = entry.0.parse::<i64>().unwrap();
|
||||
if rv.members().any(|data| data["master_lottery_id"].as_i64() == Some(lottery_id) && data["master_lottery_price_number"].as_i64() == Some(1)) {
|
||||
continue;
|
||||
}
|
||||
rv.push(object!{
|
||||
"master_lottery_id": lottery_id,
|
||||
"master_lottery_price_number": 1,
|
||||
"count": 1,
|
||||
"daily_count": 0,
|
||||
"last_count_date": ""
|
||||
}).unwrap();
|
||||
}
|
||||
rv
|
||||
}
|
||||
|
||||
async fn lottery(req: HttpRequest) -> impl Responder {
|
||||
let key = global::get_login(req.headers(), "");
|
||||
let user = userdata::get_acc(&key);
|
||||
global::api(&req, Some(object!{
|
||||
"lottery_list": []
|
||||
"lottery_list": get_lottery_list(&user)
|
||||
}))
|
||||
}
|
||||
|
||||
@@ -118,8 +208,20 @@ async fn lottery_post(req: HttpRequest, body: String) -> impl Responder {
|
||||
let mut cleared_missions = array![];
|
||||
|
||||
let lottery_id = body["master_lottery_id"].as_i64().unwrap();
|
||||
let price = databases::PRICE[lottery_id.to_string()][body["master_lottery_price_number"].to_string()].clone();
|
||||
|
||||
let price_number = body["master_lottery_price_number"].as_i64().unwrap();
|
||||
|
||||
let lottery = &databases::LOTTERY[lottery_id.to_string()];
|
||||
let lottery_type = lottery["category"].as_i32().unwrap();
|
||||
let exchange_id = lottery["exchangeMasterItemId"].as_i64().unwrap_or(0);
|
||||
|
||||
let (price_id, rarity_id) = if is_stepup(lottery_id) && price_number == 1 {
|
||||
let step = stepup_step(lottery_id, get_draw_count(&user, lottery_id, 1));
|
||||
(step["masterLotteryPriceId"].as_i64().unwrap(), step["masterLotteryRarityId"].as_i64().unwrap())
|
||||
} else {
|
||||
(lottery["masterLotteryPriceId"].as_i64().unwrap_or(lottery_id), lottery["masterLotteryRarityId"].as_i64().unwrap_or(lottery_id))
|
||||
};
|
||||
let price = databases::PRICE[price_id.to_string()][price_number.to_string()].clone();
|
||||
|
||||
items::use_item(&object!{
|
||||
value: price["masterItemId"].clone(),
|
||||
amount: price["price"].clone(),
|
||||
@@ -127,12 +229,8 @@ async fn lottery_post(req: HttpRequest, body: String) -> impl Responder {
|
||||
}, 1, &mut user);
|
||||
|
||||
let count = price["count"].as_usize().unwrap();
|
||||
|
||||
let cardstogive = get_random_cards(lottery_id, count);
|
||||
|
||||
let lottery = &databases::LOTTERY[lottery_id.to_string()];
|
||||
let lottery_type = lottery["category"].as_i32().unwrap();
|
||||
let exchange_id = lottery["exchangeMasterItemId"].as_i64().unwrap_or(0);
|
||||
|
||||
let cardstogive = get_random_cards(rarity_id, count);
|
||||
|
||||
let mut new_cards = array![];
|
||||
let mut lottery_list = array![];
|
||||
@@ -186,7 +284,13 @@ async fn lottery_post(req: HttpRequest, body: String) -> impl Responder {
|
||||
if exchange_id != 0 {
|
||||
items::give_gift_basic(3, exchange_id, 10, &mut user, &mut missions, &mut cleared_missions, &mut chats);
|
||||
}
|
||||
|
||||
|
||||
add_draw_count(&mut user, lottery_id, price_number);
|
||||
let mut new_count = get_draw_count(&user, lottery_id, price_number);
|
||||
if is_stepup(lottery_id) && price_number == 1 {
|
||||
new_count += 1;
|
||||
}
|
||||
|
||||
userdata::save_acc(&key, user.clone());
|
||||
userdata::save_acc_chats(&key, chats);
|
||||
userdata::save_acc_missions(&key, missions);
|
||||
@@ -199,6 +303,14 @@ async fn lottery_post(req: HttpRequest, body: String) -> impl Responder {
|
||||
},
|
||||
"gift_list": user2["home"]["gift_list"].clone(),
|
||||
"clear_mission_ids": cleared_missions,
|
||||
"draw_count_list": []
|
||||
"draw_count_list": [
|
||||
{
|
||||
"number": price_number,
|
||||
"count": new_count
|
||||
}
|
||||
]
|
||||
}))
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user