added item support and team registration #4
@@ -202,7 +202,7 @@ fn increase_attack_usage(index: i64) {
|
||||
fn search_learnset(index: i64) -> Vec<PokemonDataLearnset> {
|
||||
let connection = sqlite::open("./pokemon.db").unwrap();
|
||||
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
|
||||
.prepare(move_query)
|
||||
.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]),
|
||||
power: row.read::<i64, _>("power"),
|
||||
category: row.read::<i64, _>("category"),
|
||||
priority: row.read::<i64, _>("priority"),
|
||||
usage: row.read::<i64, _>("usage"),
|
||||
};
|
||||
learnset.push(row_result)
|
||||
|
||||
@@ -26,6 +26,7 @@ pub struct PokemonDataLearnset {
|
||||
pub types: Vec<i64>,
|
||||
pub power: i64,
|
||||
pub category: i64,
|
||||
pub priority: i64,
|
||||
pub usage: i64,
|
||||
}
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
|
||||
@@ -54,21 +54,26 @@
|
||||
{ id: 17 },
|
||||
{ id: 18 },
|
||||
];
|
||||
function d_validator(d) {
|
||||
function d_validator(d, prev) {
|
||||
if (typeof d !== "number") {
|
||||
return null;
|
||||
}
|
||||
if (d > 252) {
|
||||
return 252;
|
||||
let result = 0;
|
||||
if (d > prev) {
|
||||
result = Math.ceil(d / 4) * 4;
|
||||
} else {
|
||||
result = Math.floor(d / 4) * 4;
|
||||
}
|
||||
if (d < 0) {
|
||||
return 0;
|
||||
}
|
||||
return d;
|
||||
return Math.min(Math.max(result, 0), 252);
|
||||
}
|
||||
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) {
|
||||
console.log(pokemonData)
|
||||
if (init_flag) {
|
||||
selected_terastype = pokemonData.terastype[0];
|
||||
init_flag = false;
|
||||
@@ -76,7 +81,9 @@
|
||||
if (pokemonData.item !== selected_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
|
||||
level = level_validator(level);
|
||||
pokemonData.hp_v = v_validator(pokemonData.hp_v);
|
||||
@@ -87,14 +94,29 @@
|
||||
pokemonData.special_defense_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);
|
||||
pokemonData.defense_d = d_validator(pokemonData.defense_d);
|
||||
pokemonData.special_attack_d = d_validator(pokemonData.special_attack_d);
|
||||
pokemonData.special_defense_d = d_validator(
|
||||
pokemonData.special_defense_d
|
||||
|
||||
hp_d_prev = pokemonData.hp_d = d_validator(pokemonData.hp_d, hp_d_prev);
|
||||
|
||||
attack_d_prev = pokemonData.attack_d = d_validator(
|
||||
pokemonData.attack_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
|
||||
let atk_p = 1;
|
||||
let def_p = 1;
|
||||
@@ -320,14 +342,14 @@
|
||||
let selected_terastype = 0;
|
||||
let selected_item = 0;
|
||||
let init_flag = true;
|
||||
let filter_move = '';
|
||||
let filter_move = "";
|
||||
function calculate_hp(stat, v, d) {
|
||||
// floor({(種族値+個体値)×2+min(63,floor(floor(1+√努力値)÷4))}×レベル÷100)+レベル+10
|
||||
return Math.floor((stat * 2 + v + d / 4) * (level / 100) + level + 10);
|
||||
}
|
||||
function other_stats(stat, v, d, p) {
|
||||
// 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_description = [];
|
||||
@@ -931,35 +953,44 @@
|
||||
</table>
|
||||
</AccordionItem>
|
||||
<AccordionItem open title="技">
|
||||
<input bind:value={filter_move} type="text"/>
|
||||
<input bind:value={filter_move} type="text" />
|
||||
<table class="learnset">
|
||||
{#each pokemonData.learnset as learnset}
|
||||
{#if filter_move === '' || learnset.name.includes(filter_move)}
|
||||
<tr
|
||||
on:click={async () => {
|
||||
console.log("passing" + learnset.name);
|
||||
attackId = learnset.learnset_id;
|
||||
await invoke("increase_attack_usage", { index: learnset.id });
|
||||
pokemonData.learnset = await invoke("search_learnset", {
|
||||
index: pokemonData.id,
|
||||
});
|
||||
}}
|
||||
>
|
||||
<td>
|
||||
<img
|
||||
src={learnset.category === 1
|
||||
? PhysicalIcon
|
||||
: learnset.category === 2
|
||||
? SpecialIcon
|
||||
: BuffIcon}
|
||||
alt="a"
|
||||
/>
|
||||
</td>
|
||||
<td>{@html generate_type(learnset.types)}</td>
|
||||
<td>{learnset.name}</td>
|
||||
<td>{learnset.power}</td>
|
||||
<td>{total_move_usage === 0 ? 0 : Math.round(learnset.usage/total_move_usage*10000)/100}%</td>
|
||||
</tr>
|
||||
{#if filter_move === "" || learnset.name.includes(filter_move)}
|
||||
<tr
|
||||
on:click={async () => {
|
||||
console.log("passing" + learnset.name);
|
||||
attackId = learnset.learnset_id;
|
||||
await invoke("increase_attack_usage", {
|
||||
index: learnset.id,
|
||||
});
|
||||
pokemonData.learnset = await invoke("search_learnset", {
|
||||
index: pokemonData.id,
|
||||
});
|
||||
}}
|
||||
>
|
||||
<td>
|
||||
<img
|
||||
src={learnset.category === 1
|
||||
? PhysicalIcon
|
||||
: learnset.category === 2
|
||||
? SpecialIcon
|
||||
: BuffIcon}
|
||||
alt="a"
|
||||
/>
|
||||
</td>
|
||||
<td>{@html generate_type(learnset.types)}</td>
|
||||
<td>{learnset.name}</td>
|
||||
<td>{learnset.power}</td>
|
||||
<td>{learnset.priority}</td>
|
||||
<td
|
||||
>{total_move_usage === 0
|
||||
? 0
|
||||
: Math.round(
|
||||
(learnset.usage / total_move_usage) * 10000
|
||||
) / 100}%</td
|
||||
>
|
||||
</tr>
|
||||
{/if}
|
||||
{/each}
|
||||
</table>
|
||||
|
||||
@@ -62,5 +62,6 @@ export interface PokemonLearnsetDBData {
|
||||
types: number[];
|
||||
power: number;
|
||||
category: number;
|
||||
priority: number;
|
||||
usage: number;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user