Skip to content

Commit

Permalink
implement oracle for alts, add no-oracle flag
Browse files Browse the repository at this point in the history
  • Loading branch information
serprex committed Jan 25, 2024
1 parent 85a4ff0 commit e89aab3
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 65 deletions.
2 changes: 1 addition & 1 deletion config-sample.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"listen": 8080,
"pg": "user=postgres host=localhost port=5432 database=oetg",
"pg": "user=postgres host=localhost port=5432 dbname=oetg",
"certs": null
}
95 changes: 46 additions & 49 deletions src/rs/server/src/handlews.rs
Original file line number Diff line number Diff line change
Expand Up @@ -145,47 +145,10 @@ where
}

async fn login_success(tx: &WsSender, user: &mut UserObject, client: &mut Client) {
if user.id != -1 {
if let Some(userdata) = user.data.get_mut("") {
let today = get_day();
let oracle = userdata.oracle;
if oracle < today {
if userdata.ostreakday != today - 1 {
userdata.ostreak = 0;
}
userdata.ostreakday = 0;
userdata.ostreakday2 = today;
userdata.oracle = today;
let mut rng = rand::thread_rng();
let ocardnymph = rng.gen_range(0..100) < 3;
if let Some(card) = etg::card::OpenSet.random_card(&mut rng, false, |card| {
(card.rarity != 4) ^ ocardnymph && (card.flag & etg::game::Flag::pillar) == 0
}) {
let ccode =
if card.rarity == 4 { etg::card::AsShiny(card.code, true) } else { card.code };
let curpool =
if card.rarity > 2 { &mut userdata.accountbound } else { &mut userdata.pool };
let c = curpool.0.entry(ccode).or_default();
*c = c.saturating_add(1);
userdata.ocard = ccode;
userdata.daily = 0;
userdata.dailymage = rng.gen_range(0..MAGE_COUNT);
userdata.dailydg = rng.gen_range(0..DG_COUNT);
}
}
}
}

if let Ok(userstr) = serde_json::to_string(&WsResponse::login(&*user)) {
tx.send(Message::Text(userstr)).ok();
}

if let Some(userdata) = user.data.get_mut("") {
if userdata.daily == 0 {
userdata.daily = 128;
}
}

if let Ok(trx) = client.transaction().await {
if user.id != -1 {
if let Ok(bids) =
Expand Down Expand Up @@ -1403,6 +1366,48 @@ pub async fn handle_ws(
}
}
}
AuthMessage::oracle => {
let mut user = user.lock().await;
if let Some(userdata) = user.data.get_mut(&uname) {
let today = get_day();
let oracle = userdata.oracle;
if oracle < today {
if userdata.ostreakday != today - 1 {
userdata.ostreak = 0;
}
userdata.ostreakday = 0;
userdata.ostreakday2 = today;
userdata.oracle = today;
let mut rng = rand::thread_rng();
let ocardnymph = rng.gen_range(0..100) < 3;
if let Some(card) = etg::card::OpenSet.random_card(&mut rng, false, |card| {
(card.rarity != 4) ^ ocardnymph && (card.flag & etg::game::Flag::pillar) == 0
}) {
let ccode =
if card.rarity == 4 { etg::card::AsShiny(card.code, true) } else { card.code };
let bound = card.rarity > 2;
let curpool =
if bound { &mut userdata.accountbound } else { &mut userdata.pool };
let c = curpool.0.entry(ccode).or_default();
*c = c.saturating_add(1);
userdata.ocard = ccode;
userdata.daily = 128;
userdata.dailymage = rng.gen_range(0..MAGE_COUNT);
userdata.dailydg = rng.gen_range(0..DG_COUNT);
sendmsg(
&tx,
&WsResponse::oracle {
c: ccode,
bound,
mage: userdata.dailymage,
dg: userdata.dailydg,
day: today,
},
);
}
}
}
}
AuthMessage::passchange { p } => {
let mut user = user.lock().await;
if p.is_empty() {
Expand Down Expand Up @@ -2304,12 +2309,8 @@ pub async fn handle_ws(
{
let mut user = user.lock().await;
user.auth = g.clone();
login_success(
&tx,
&mut user,
&mut client,
)
.await;
login_success(&tx, &mut user, &mut client)
.await;
wusers.set_sockid(&name, sockid.get());
} else {
let mut newuser = UserObject {
Expand All @@ -2321,12 +2322,8 @@ pub async fn handle_ws(
algo: HashAlgo::Sha512,
data: Default::default(),
};
login_success(
&tx,
&mut newuser,
&mut client,
)
.await;
login_success(&tx, &mut newuser, &mut client)
.await;
wusers.insert(
name,
sockid.get(),
Expand Down
8 changes: 8 additions & 0 deletions src/rs/server/src/json.rs
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ pub enum AuthMessage {
cards: String,
g: u16,
},
oracle,
passchange {
p: String,
},
Expand Down Expand Up @@ -407,6 +408,13 @@ pub enum WsResponse<'a> {
originaldata(&'a LegacyUser),
#[serde(rename = "originaldata")]
originaldataempty,
oracle {
c: i16,
bound: bool,
mage: u8,
dg: u8,
day: u32,
},
passchange {
auth: &'a str,
},
Expand Down
5 changes: 1 addition & 4 deletions src/rs/src/aieval.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1162,10 +1162,7 @@ pub fn eval(ctx: &Game) -> i32 {
.into_iter()
.filter(|&pr| (pr != 0 && ctx.hasskill(pr, Event::Attack, Skill::freedom)))
.count();
[0, 15, 27, 36, 43, 48, 52, 55, 57, 59, 60, 61, 62]
.get(sofrs)
.cloned()
.unwrap_or(63u8) as i32
[0, 15, 27, 36, 43, 48, 52, 55, 57, 59, 60, 61, 62].get(sofrs).cloned().unwrap_or(63u8) as i32
} else {
player
.permanents
Expand Down
3 changes: 2 additions & 1 deletion src/views/Alts.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,11 @@ export default function Alts() {
store.doNav(import('../views/MainMenu.jsx'));
}}
/>
&emsp;TODO put safeguards around Delete
{rx.alts[name].flags.join(' ')}
<input
type="button"
value="Delete"
style="float:right"
onClick={() => {
store.rmAlt(name);
userEmit('altdelete', { name });
Expand Down
37 changes: 27 additions & 10 deletions src/views/MainMenu.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,6 @@ function logout() {
store.doNav(store.Login);
}

function noflags(user) {
return !user || !user.flags || !user.flags.length;
}

function hasflag(user, flag) {
return user?.flags?.includes?.(flag);
}
Expand All @@ -82,8 +78,8 @@ export default function MainMenu(props) {
const rx = store.useRx();
const foename = () => (rx.opts.foename ?? '').trim(),
expectedDamageSamples = () => rx.opts.expectedDamageSamples || '4';
const showcard = props.nymph ?? (rx.user?.daily === 0 && rx.user.ocard);

const [ocard, setocard] = createSignal(props.nymph);
const [settings, setSettings] = createSignal(false);
const [changepass, setChangepass] = createSignal(false);
let newpass, newpass2;
Expand All @@ -100,11 +96,32 @@ export default function MainMenu(props) {
};

onMount(() => {
if (rx.user.daily === 0 && rx.user.ocard) {
store.updateUser({ daily: 128 });
if (
!hasflag(rx.user, 'no-oracle') &&
((Date.now() / 86400000) | 0) > rx.user.oracle
) {
sock.userEmit('oracle', {});
}
document.addEventListener('mousemove', resetTip);
sock.setCmds({
oracle: data => {
setocard(data.c);
const update = {
daily: 128,
pool: addcard(rx.user.pool, data.c),
dailymage: data.mage,
dailydg: data.dg,
oracle: data.day,
ostreakday: 0,
ostreakday2: data.day,
};
if (data.bound) {
update.accountbound = addcard(rx.user.accountbound, data.c);
} else {
update.pool = addcard(rx.user.pool, data.c);
}
store.updateUser(update);
},
codecard: data => {
store.doNav(import('./Reward.jsx'), {
type: data.type,
Expand Down Expand Up @@ -307,8 +324,8 @@ export default function MainMenu(props) {
</div>
</div>
</div>
{showcard ?
<Card x={92} y={340} card={Cards.Codes[showcard]} />
{ocard() ?
<Card x={92} y={340} card={Cards.Codes[ocard()]} />
: !rx.opts.hideMainchat && (
<>
<Chat
Expand Down Expand Up @@ -424,7 +441,7 @@ export default function MainMenu(props) {
onMouseOver={[setTip, 'Upgrade or sell cards']}
style="position:absolute;left:102px;top:108px"
/>
{noflags(rx.user) && (
{!rx.uname && (
<input
type="button"
value="Bazaar"
Expand Down

0 comments on commit e89aab3

Please sign in to comment.