added item support and team registration #4

Open
hansoo wants to merge 14 commits from add-item-support into master
4 changed files with 80 additions and 46 deletions
Showing only changes of commit 568798860a - Show all commits

View File

@@ -202,7 +202,7 @@ fn increase_attack_usage(index: i64) {
fn search_learnset(index: i64) -> Vec<PokemonDataLearnset> { fn search_learnset(index: i64) -> Vec<PokemonDataLearnset> {
let connection = sqlite::open("./pokemon.db").unwrap(); let connection = sqlite::open("./pokemon.db").unwrap();
let mut learnset: Vec<PokemonDataLearnset> = vec![]; let mut learnset: Vec<PokemonDataLearnset> = vec![];
let move_query = "SELECT pl.id, pl.learnset_id, l.name, l.types, l.power, l.category, pl.usage FROM pokemon__learnset pl JOIN learnset l on pl.learnset_id = l.id WHERE pl.pokemon_id = ? ORDER BY usage DESC"; let move_query = "SELECT pl.id, pl.learnset_id, l.name, l.types, l.power, l.category, l.priority, pl.usage FROM pokemon__learnset pl JOIN learnset l on pl.learnset_id = l.id WHERE pl.pokemon_id = ? ORDER BY usage DESC";
for row in connection for row in connection
.prepare(move_query) .prepare(move_query)
.unwrap() .unwrap()
@@ -218,6 +218,7 @@ fn search_learnset(index: i64) -> Vec<PokemonDataLearnset> {
types: serde_json::from_str(row.read::<&str, _>("types")).unwrap_or(vec![0]), types: serde_json::from_str(row.read::<&str, _>("types")).unwrap_or(vec![0]),
power: row.read::<i64, _>("power"), power: row.read::<i64, _>("power"),
category: row.read::<i64, _>("category"), category: row.read::<i64, _>("category"),
priority: row.read::<i64, _>("priority"),
usage: row.read::<i64, _>("usage"), usage: row.read::<i64, _>("usage"),
}; };
learnset.push(row_result) learnset.push(row_result)

View File

@@ -26,6 +26,7 @@ pub struct PokemonDataLearnset {
pub types: Vec<i64>, pub types: Vec<i64>,
pub power: i64, pub power: i64,
pub category: i64, pub category: i64,
pub priority: i64,
pub usage: i64, pub usage: i64,
} }
#[derive(Serialize, Deserialize, Debug, Clone)] #[derive(Serialize, Deserialize, Debug, Clone)]

View File

@@ -54,21 +54,26 @@
{ id: 17 }, { id: 17 },
{ id: 18 }, { id: 18 },
]; ];
function d_validator(d) { function d_validator(d, prev) {
if (typeof d !== "number") { if (typeof d !== "number") {
return null; return null;
} }
if (d > 252) { let result = 0;
return 252; if (d > prev) {
result = Math.ceil(d / 4) * 4;
} else {
result = Math.floor(d / 4) * 4;
} }
if (d < 0) { return Math.min(Math.max(result, 0), 252);
return 0;
}
return d;
} }
let hp_d_prev = 0;
let attack_d_prev = 0;
let defense_d_prev = 0;
let special_attack_d_prev = 0;
let special_defense_d_prev = 0;
let speed_d_prev = 0;
$: { $: {
if (pokemonData) { if (pokemonData) {
console.log(pokemonData)
if (init_flag) { if (init_flag) {
selected_terastype = pokemonData.terastype[0]; selected_terastype = pokemonData.terastype[0];
init_flag = false; init_flag = false;
@@ -76,7 +81,9 @@
if (pokemonData.item !== selected_item) { if (pokemonData.item !== selected_item) {
selected_item = pokemonData.item; selected_item = pokemonData.item;
} }
total_move_usage = pokemonData.learnset.map((v) => v.usage).reduce((partialSum, a) => partialSum + a, 0); total_move_usage = pokemonData.learnset
.map((v) => v.usage)
.reduce((partialSum, a) => partialSum + a, 0);
// validator // validator
level = level_validator(level); level = level_validator(level);
pokemonData.hp_v = v_validator(pokemonData.hp_v); pokemonData.hp_v = v_validator(pokemonData.hp_v);
@@ -87,14 +94,29 @@
pokemonData.special_defense_v pokemonData.special_defense_v
); );
pokemonData.speed_v = v_validator(pokemonData.speed_v); pokemonData.speed_v = v_validator(pokemonData.speed_v);
pokemonData.hp_d = d_validator(pokemonData.hp_d);
pokemonData.attack_d = d_validator(pokemonData.attack_d); hp_d_prev = pokemonData.hp_d = d_validator(pokemonData.hp_d, hp_d_prev);
pokemonData.defense_d = d_validator(pokemonData.defense_d);
pokemonData.special_attack_d = d_validator(pokemonData.special_attack_d); attack_d_prev = pokemonData.attack_d = d_validator(
pokemonData.special_defense_d = d_validator( pokemonData.attack_d,
pokemonData.special_defense_d attack_d_prev
);
defense_d_prev = pokemonData.defense_d = d_validator(
pokemonData.defense_d,
defense_d_prev
);
special_attack_d_prev = pokemonData.special_attack_d = d_validator(
pokemonData.special_attack_d,
special_attack_d_prev
);
special_defense_d_prev = pokemonData.special_defense_d = d_validator(
pokemonData.special_defense_d,
special_defense_d_prev
);
speed_d_prev = pokemonData.speed_d = d_validator(
pokemonData.speed_d,
speed_d_prev
); );
pokemonData.speed_d = d_validator(pokemonData.speed_d);
// 性格補正 0.9/1/1.1 // 性格補正 0.9/1/1.1
let atk_p = 1; let atk_p = 1;
let def_p = 1; let def_p = 1;
@@ -320,14 +342,14 @@
let selected_terastype = 0; let selected_terastype = 0;
let selected_item = 0; let selected_item = 0;
let init_flag = true; let init_flag = true;
let filter_move = ''; let filter_move = "";
function calculate_hp(stat, v, d) { function calculate_hp(stat, v, d) {
// floor({(種族値+個体値)×2+min(63,floor(floor(1+√努力値)÷4))}×レベル÷100)+レベル+10 // floor({(種族値+個体値)×2+min(63,floor(floor(1+√努力値)÷4))}×レベル÷100)+レベル+10
return Math.floor((stat * 2 + v + d / 4) * (level / 100) + level + 10); return Math.floor((stat * 2 + v + d / 4) * (level / 100) + level + 10);
} }
function other_stats(stat, v, d, p) { function other_stats(stat, v, d, p) {
// floor({(種族値+個体値)×2+min(63,floor(floor(1+√努力値)÷4))}×レベル÷100)+5 // floor({(種族値+個体値)×2+min(63,floor(floor(1+√努力値)÷4))}×レベル÷100)+5
return Math.floor(((stat * 2 + v + d / 4) * (level / 100) + 5) * p); return Math.floor(((stat * 2 + v + d / 4 - 1) * (level / 100) + 5) * p);
} }
let abilities = []; let abilities = [];
let abilities_description = []; let abilities_description = [];
@@ -931,15 +953,17 @@
</table> </table>
</AccordionItem> </AccordionItem>
<AccordionItem open title="技"> <AccordionItem open title="技">
<input bind:value={filter_move} type="text"/> <input bind:value={filter_move} type="text" />
<table class="learnset"> <table class="learnset">
{#each pokemonData.learnset as learnset} {#each pokemonData.learnset as learnset}
{#if filter_move === '' || learnset.name.includes(filter_move)} {#if filter_move === "" || learnset.name.includes(filter_move)}
<tr <tr
on:click={async () => { on:click={async () => {
console.log("passing" + learnset.name); console.log("passing" + learnset.name);
attackId = learnset.learnset_id; attackId = learnset.learnset_id;
await invoke("increase_attack_usage", { index: learnset.id }); await invoke("increase_attack_usage", {
index: learnset.id,
});
pokemonData.learnset = await invoke("search_learnset", { pokemonData.learnset = await invoke("search_learnset", {
index: pokemonData.id, index: pokemonData.id,
}); });
@@ -958,7 +982,14 @@
<td>{@html generate_type(learnset.types)}</td> <td>{@html generate_type(learnset.types)}</td>
<td>{learnset.name}</td> <td>{learnset.name}</td>
<td>{learnset.power}</td> <td>{learnset.power}</td>
<td>{total_move_usage === 0 ? 0 : Math.round(learnset.usage/total_move_usage*10000)/100}%</td> <td>{learnset.priority}</td>
<td
>{total_move_usage === 0
? 0
: Math.round(
(learnset.usage / total_move_usage) * 10000
) / 100}%</td
>
</tr> </tr>
{/if} {/if}
{/each} {/each}

View File

@@ -62,5 +62,6 @@ export interface PokemonLearnsetDBData {
types: number[]; types: number[];
power: number; power: number;
category: number; category: number;
priority: number;
usage: number; usage: number;
} }