Compare commits

55 Commits

Author SHA1 Message Date
Ethan O'Brien
1d12a9415c Oops 2026-08-23 16:09:49 -05:00
Ethan O'Brien
4dcf73e5d4 New asset version I guess 2026-08-23 15:25:14 -05:00
Ethan O'Brien
06c9273151 New asset hashes I guess I hope nothing breaks 2026-08-17 15:22:51 -05:00
Ethan O'Brien
d975b87799 Oh 2026-08-15 22:20:14 -05:00
Ethan O'Brien
cb40d74c2c Announcements working 2026-08-12 17:21:52 -05:00
Ethan O'Brien
8f7346d09e New asset hashes 2026-08-11 21:47:28 -05:00
Ethan O'Brien
0df2741251 Change log 2026-08-11 18:17:53 -05:00
Ethan O'Brien
cf05ffe8fb New asset hashes 2026-08-11 15:36:03 -05:00
Ethan O'Brien
27d7b8de82 Multi live 2026-08-11 14:41:28 -05:00
Ethan O'Brien
75613dafb0 Add some more checks 2026-08-05 20:34:17 -05:00
Ethan O'Brien
239a47b8ce New asset hashes 2026-08-02 16:41:31 -05:00
Ethan O'Brien
214ff68335 New asset hashes 2026-08-02 09:08:32 -05:00
Ethan O'Brien
582d56c301 Forgot to push module 2026-08-01 21:49:57 -05:00
Ethan O'Brien
0b0bef7bfb Fix some injection stuff 2026-08-01 21:35:26 -05:00
Ethan O'Brien
29ed7a1b46 Fix some custom song stuff 2026-08-01 20:37:03 -05:00
Ethan O'Brien
b4cd6968d8 Show public custom song titles on the clear rate page 2026-08-01 12:09:49 -05:00
Ethan O'Brien
ee1a3d827e Clamp custom skill values to official ranges, migrate pre-fix chart groupings 2026-08-01 10:24:03 -05:00
Ethan O'Brien
f75891dea0 Add custom character voicelines 2026-07-31 21:16:23 -05:00
Ethan O'Brien
26926e1a28 Add custom card handling probably 2026-07-31 20:32:02 -05:00
Ethan O'Brien
d077210efe Fix a thing 2026-07-31 19:46:29 -05:00
Ethan O'Brien
5d31cbad29 More tests I guess 2026-07-30 09:11:28 -05:00
Ethan O'Brien
f5bb3a5c7d More note changes I guess 2026-07-29 23:13:01 -05:00
Ethan O'Brien
7a4da25358 Fix some notes stuff 2026-07-29 23:04:00 -05:00
Ethan O'Brien
6609a1ae77 Sync character/group masterdata 2026-07-27 19:30:40 -05:00
Ethan O'Brien
ebfc15d2b9 fix bond 2026-07-27 16:32:18 -05:00
Ethan O'Brien
d8f3c75236 Fix outdated asset version flag 2026-07-27 09:49:59 -05:00
Ethan O'Brien
6523ad4d4a Remove old asset lists / masterdata endpoints 2026-07-26 23:28:05 -05:00
Ethan O'Brien
2056511bd1 Add missing gree endpoints 2026-07-26 23:22:23 -05:00
Ethan O'Brien
352ff2dbc5 Cleanly handle unverified gree devices 2026-07-26 23:15:02 -05:00
Ethan O'Brien
b5bd8ad4fb Sync new_skill.csv 2026-07-26 23:06:55 -05:00
Ethan O'Brien
3ca5dcf1ea Better support for custom card account flagging 2026-07-26 22:02:01 -05:00
Ethan O'Brien
d06aaae9ac Add more editor mappings apparently 2026-07-26 17:23:04 -05:00
Ethan O'Brien
54bd50d721 Add editor platform flag 2026-07-26 17:07:53 -05:00
Ethan O'Brien
a2089f12bd Update lottery images for custom banners 2026-07-26 14:22:17 -05:00
Ethan O'Brien
04e40d38e5 Add support for custom cards 2026-07-26 11:35:42 -05:00
Ethan O'Brien
14e02090b8 Fix event lives 2026-07-26 09:54:43 -05:00
Ethan O'Brien
c745e6e785 New asset hashes 2026-07-25 17:07:46 -05:00
Ethan O'Brien
042e92cb24 Update android asset hash 2026-07-25 00:54:43 -05:00
Ethan O'Brien
e7d865ebb8 Switch asset version flag to a public override 2026-07-25 00:53:10 -05:00
Ethan O'Brien
3a29fde575 Add server rank rewards 2026-07-24 21:40:41 -05:00
Ethan O'Brien
4ebcc06d56 mission stuff idk 2026-07-24 21:20:19 -05:00
Ethan O'Brien
59ac1f55c3 Remove mod flag 2026-07-24 21:16:21 -05:00
Ethan O'Brien
6eec06e164 Move response encryption handler to a response handler 2026-07-24 14:40:12 -05:00
Ethan O'Brien
0b0b50de36 Move all encryption to a session handler 2026-07-24 14:20:26 -05:00
Ethan O'Brien
2cd11c8467 Render clearrates for private songs for that user 2026-07-22 00:41:05 -05:00
Ethan O'Brien
b6cbfd0713 Hide hidden live ids on the clear rate page 2026-07-21 22:21:57 -05:00
Ethan O'Brien
50ccecd821 New asset hashes again 2026-07-19 22:50:03 -05:00
Ethan O'Brien
e41d4e61b9 add ios asset hash 2026-07-19 20:57:00 -05:00
Ethan O'Brien
fcaecc7b41 Push new asset hashes for windows/android 2026-07-19 18:49:33 -05:00
Ethan O'Brien
0bf1262b5b fix clear rate deletion bug 2026-07-19 15:49:08 -05:00
Ethan O'Brien
ed195abb3b Replace editor asset hash with something real 2026-07-18 23:20:02 -05:00
Ethan O'Brien
11cd0b72c1 Update windows asset hash / add editor asset hash for new asset version 2026-07-18 21:39:58 -05:00
Ethan O'Brien
e0bee026dd Arguments should append to asset version list 2026-07-18 21:36:06 -05:00
Ethan O'Brien
c838228322 Add new asset version / hash 2026-07-18 17:07:25 -05:00
Ethan O'Brien
b7e63ab0e5 Add support for storing multiple asset hashes 2026-07-18 14:13:38 -05:00
97 changed files with 30023 additions and 103200 deletions

7
.gitignore vendored
View File

@@ -11,3 +11,10 @@ docker/data/
ndk/
.DS_Store
custom_songs/
custom_cards/
/custom_3dmv/
# local-only trees — never commit (35GB between them)
/android/
/assets.bak/
/assets.old/

19
Cargo.lock generated
View File

@@ -223,6 +223,22 @@ dependencies = [
"syn",
]
[[package]]
name = "actix-ws"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "decf53c3cdd63dd6f289980b430238f9a2f6d19f8bce8e418272e08d3da43f0f"
dependencies = [
"actix-codec",
"actix-http",
"actix-web",
"bytestring",
"futures-core",
"futures-sink",
"tokio",
"tokio-util",
]
[[package]]
name = "adler2"
version = "2.0.1"
@@ -1073,6 +1089,7 @@ version = "1.1.0"
dependencies = [
"actix-multipart",
"actix-web",
"actix-ws",
"aes",
"argon2",
"base64",
@@ -1103,6 +1120,7 @@ dependencies = [
"sha1",
"sha2",
"symphonia",
"tokio",
"ureq",
"urlencoding",
"uuid",
@@ -3209,6 +3227,7 @@ dependencies = [
"bytes",
"futures-core",
"futures-sink",
"futures-util",
"pin-project-lite",
"tokio",
]

View File

@@ -32,6 +32,10 @@ include_dir = "0.7.4"
jzon = "0.12.5"
csv = "1.3"
actix-multipart = "0.8"
# Multi-live relay: WebSockets over actix-web 4 without the actor runtime
actix-ws = "0.4"
# tokio is already in the tree under actix-rt; only the mpsc channels are used
tokio = { version = "1", features = ["sync"] }
futures-util = "0.3"
image = "0.25"
zip = { version = "8.6", default-features = false, features = ["deflate"] }

View File

@@ -14,19 +14,23 @@ services:
DISABLE_IMPORTS: false # Will disable account imports
DISABLE_EXPORTS: false # Will disable account exports
#ENABLE_CUSTOM_SONGS: true # Custom songs are DISABLED by default; uncomment to enable upload/browse/download (webui + endpoints)
#ENABLE_CUSTOM_CARDS: true # Custom cards are DISABLED by default; uncomment to enable runtime card/character uploads (webui + endpoints)
#ENABLE_CUSTOM_3DMV: true # Custom 3D MVs are DISABLED by default; uncomment to enable MMD model+motion MV uploads for custom songs (webui + endpoints)
#OWNER: "123456789012345" # 15-digit game user id(s) (comma-separated) that hold every permission scope; without an owner nobody can grant scopes or upload cards
#PURGE: false # Purge dead user accounts on startup
#IMAGE_ASSET_PATH: /images/ # Images for cards in webui (will default to the public server)
#MASTERDATA: /masterdata/ # Override bundled asset lists / CSVs / new_user.json at runtime (missing files fall back to the internal copies)
#MASTERDATA: /masterdata/ # Override bundled CSVs / new_user.json at runtime (missing files fall back to the internal copies)
# Asset hash / version overrides. Leave unset to use the values bundled in
# the binary; set one to make the server report a different hash/version
# to that client (e.g. to track a newer client build).
# the binary. ASSET_VERSION is the one version every override below is
# served for; each hash replaces what that client is told to expect
# (e.g. to track a newer client build).
#ASSET_VERSION: ""
#JP_ANDROID_ASSET_HASH: ""
#JP_IOS_ASSET_HASH: ""
#EN_ANDROID_ASSET_HASH: ""
#EN_IOS_ASSET_HASH: ""
#WINDOWS_ASSET_VERSION: "" # Windows asset version (JP only; GL Windows is unused)
#WINDOWS_ASSET_HASH: "" # Windows asset hash (JP only)
#WINDOWS_ASSET_HASH: "" # Windows asset hash (JP only; GL Windows is unused)
# Everything below is for the "Help" page
#ANDROID_GLOBAL: "link.to/patched/android/global.apk"
@@ -41,6 +45,6 @@ services:
# You can download from https://git.ethanthesleepy.one/ethanaobrien/ew-webui/releases/download/images/card-thumbnails.zip
# No, you should not have a nested folder EXAMPLE: `images/FILENAME.webp`
#- ./images:/images
# Mirrors the bundled layout: asset_lists/{Bundle,Movie,Sound}.json, csv/<table>.csv, csv-en/<table>.csv, userdata/new_user.json
# Mirrors the bundled layout: csv/<table>.csv, csv-en/<table>.csv, userdata/new_user.json
#- ./masterdata:/masterdata
restart: unless-stopped

View File

@@ -14,6 +14,8 @@ args=(
[ "${DISABLE_IMPORTS:-}" = "true" ] && args+=(--disable-imports)
[ "${DISABLE_EXPORTS:-}" = "true" ] && args+=(--disable-exports)
[ "${ENABLE_CUSTOM_SONGS:-}" = "true" ] && args+=(--enable-custom-songs)
[ "${ENABLE_CUSTOM_CARDS:-}" = "true" ] && args+=(--enable-custom-cards)
[ "${ENABLE_CUSTOM_3DMV:-}" = "true" ] && args+=(--enable-custom-3dmv)
add_opt() {
local value="$1" flag="$2"
@@ -23,13 +25,16 @@ add_opt() {
}
# Asset hash / version overrides
add_opt "${ASSET_VERSION:-}" --asset-version
add_opt "${JP_ANDROID_ASSET_HASH:-}" --jp-android-asset-hash
add_opt "${JP_IOS_ASSET_HASH:-}" --jp-ios-asset-hash
add_opt "${EN_ANDROID_ASSET_HASH:-}" --en-android-asset-hash
add_opt "${EN_IOS_ASSET_HASH:-}" --en-ios-asset-hash
add_opt "${WINDOWS_ASSET_VERSION:-}" --windows-asset-version
add_opt "${WINDOWS_ASSET_HASH:-}" --windows-asset-hash
# Server owner uid(s) for the permission system (comma-separated)
add_opt "${OWNER:-}" --owner
# Asset / image paths.
add_opt "${IMAGE_ASSET_PATH:-}" --image-asset-path
add_opt "${MASTERDATA:-}" --masterdata

View File

@@ -1,2 +1,6 @@
pub mod gree;
pub mod custom_song;
pub mod custom_card;
pub mod custom_3dmv;
pub mod permissions;
pub mod announcements;

View File

@@ -0,0 +1,267 @@
use lazy_static::lazy_static;
use rusqlite::params;
use jzon::{array, object, JsonValue};
use crate::router::global;
use crate::sql::SQLite;
lazy_static! {
static ref DATABASE: SQLite = SQLite::new("announcements.db", setup_tables);
}
// 1 = notice, 2 = update, 3 = bug
pub const CATEGORIES: &[i64] = &[1, 2, 3];
pub const TYPES: &[&str] = &["news", "event", "gacha", "maintenance", "shop", "others"];
pub fn is_valid_category(category: i64) -> bool {
CATEGORIES.contains(&category)
}
pub fn is_valid_type(kind: &str) -> bool {
TYPES.contains(&kind)
}
fn setup_tables(conn: &rusqlite::Connection) {
conn.execute_batch("
CREATE TABLE IF NOT EXISTS announcements (
id INTEGER PRIMARY KEY AUTOINCREMENT,
category INTEGER NOT NULL,
type TEXT NOT NULL,
title TEXT NOT NULL,
body TEXT NOT NULL,
banner BLOB,
updated INTEGER NOT NULL DEFAULT 0,
visible INTEGER NOT NULL DEFAULT 1,
published_at BIGINT NOT NULL,
created_by BIGINT NOT NULL,
created_at BIGINT NOT NULL
);
").unwrap();
}
pub enum Banner {
Keep,
Clear,
Set(Vec<u8>)
}
fn row_to_json(row: &rusqlite::Row) -> rusqlite::Result<JsonValue> {
Ok(object!{
id: row.get::<usize, i64>(0)?,
category: row.get::<usize, i64>(1)?,
type: row.get::<usize, String>(2)?,
title: row.get::<usize, String>(3)?,
body: row.get::<usize, String>(4)?,
has_banner: row.get::<usize, i64>(5)? != 0,
updated: row.get::<usize, i64>(6)? != 0,
visible: row.get::<usize, i64>(7)? != 0,
published_at: row.get::<usize, i64>(8)?,
created_by: row.get::<usize, i64>(9)?,
created_at: row.get::<usize, i64>(10)?
})
}
const COLUMNS: &str = "id, category, type, title, body, banner IS NOT NULL, updated, visible, published_at, created_by, created_at";
fn query(where_clause: &str, args: &[&dyn rusqlite::ToSql]) -> JsonValue {
let conn = rusqlite::Connection::open(DATABASE.get_path()).unwrap();
let sql = format!("SELECT {COLUMNS} FROM announcements {where_clause} ORDER BY published_at DESC, id DESC");
let Ok(mut stmt) = conn.prepare(&sql) else {
return array![];
};
let Ok(mapped) = stmt.query_map(args, |row| row_to_json(row)) else {
return array![];
};
let mut rv = array![];
for row in mapped.flatten() {
rv.push(row).unwrap();
}
rv
}
pub fn list_category(category: i64) -> JsonValue {
query("WHERE visible=1 AND category=?1", params!(category))
}
pub fn get_all() -> JsonValue {
query("", params!())
}
pub fn get(id: i64) -> Option<JsonValue> {
let conn = rusqlite::Connection::open(DATABASE.get_path()).unwrap();
let sql = format!("SELECT {COLUMNS} FROM announcements WHERE id=?1");
conn.query_row(&sql, params!(id), |row| row_to_json(row)).ok()
}
pub fn get_banner(id: i64) -> Option<Vec<u8>> {
let conn = rusqlite::Connection::open(DATABASE.get_path()).unwrap();
conn.query_row("SELECT banner FROM announcements WHERE id=?1 AND banner IS NOT NULL", params!(id), |row| row.get::<usize, Vec<u8>>(0)).ok()
}
pub fn get_public_banner(id: i64) -> Option<Vec<u8>> {
let conn = rusqlite::Connection::open(DATABASE.get_path()).unwrap();
conn.query_row("SELECT banner FROM announcements WHERE id=?1 AND visible=1 AND banner IS NOT NULL", params!(id), |row| row.get::<usize, Vec<u8>>(0)).ok()
}
pub fn visible_ids(category: Option<i64>) -> Vec<i64> {
let conn = rusqlite::Connection::open(DATABASE.get_path()).unwrap();
let (sql, args): (&str, Vec<&dyn rusqlite::ToSql>) = match &category {
Some(c) => ("SELECT id FROM announcements WHERE visible=1 AND category=?1", vec![c]),
None => ("SELECT id FROM announcements WHERE visible=1", vec![])
};
let Ok(mut stmt) = conn.prepare(sql) else {
return Vec::new();
};
let Ok(mapped) = stmt.query_map(args.as_slice(), |row| row.get::<usize, i64>(0)) else {
return Vec::new();
};
mapped.flatten().collect()
}
pub fn latest_published_at() -> i64 {
let conn = rusqlite::Connection::open(DATABASE.get_path()).unwrap();
conn.query_row("SELECT MAX(published_at) FROM announcements WHERE visible=1", params!(), |row| row.get::<usize, i64>(0)).unwrap_or(0)
}
pub fn create(category: i64, kind: &str, title: &str, body: &str, banner: Option<Vec<u8>>, updated: bool, visible: bool, published_at: i64, created_by: i64) -> i64 {
let conn = rusqlite::Connection::open(DATABASE.get_path()).unwrap();
conn.execute(
"INSERT INTO announcements (category, type, title, body, banner, updated, visible, published_at, created_by, created_at) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10)",
params!(category, kind, title, body, banner, updated as i64, visible as i64, published_at, created_by, global::timestamp() as i64)
).unwrap();
conn.last_insert_rowid()
}
pub fn update(id: i64, category: i64, kind: &str, title: &str, body: &str, banner: Banner, updated: bool, visible: bool, published_at: i64) {
let conn = rusqlite::Connection::open(DATABASE.get_path()).unwrap();
conn.execute(
"UPDATE announcements SET category=?2, type=?3, title=?4, body=?5, updated=?6, visible=?7, published_at=?8 WHERE id=?1",
params!(id, category, kind, title, body, updated as i64, visible as i64, published_at)
).unwrap();
match banner {
Banner::Keep => {},
Banner::Clear => { conn.execute("UPDATE announcements SET banner=NULL WHERE id=?1", params!(id)).unwrap(); },
Banner::Set(bytes) => { conn.execute("UPDATE announcements SET banner=?2 WHERE id=?1", params!(id, bytes)).unwrap(); }
}
}
pub fn delete(id: i64) {
DATABASE.lock_and_exec("DELETE FROM announcements WHERE id=?1", params!(id));
}
/// more tests??? This is probably a good thing but man haha
#[cfg(test)]
mod tests {
use super::*;
fn wipe() {
DATABASE.lock_and_exec("DELETE FROM announcements", params!());
}
#[test]
fn create_list_and_category_filter() {
let _lock = crate::runtime::lock_test_data_path();
wipe();
let a = create(1, "news", "First", "<p>body</p>", None, false, true, 1000, 42);
let b = create(1, "event", "Second", "body", Some(vec![1, 2, 3]), true, true, 2000, 42);
let c = create(2, "gacha", "Other tab", "body", None, false, true, 1500, 42);
let hidden = create(1, "news", "Draft", "body", None, false, false, 3000, 42);
// One tab, visible only, newest first
let cat1 = list_category(1);
assert_eq!(cat1.len(), 2);
assert_eq!(cat1[0]["id"].as_i64(), Some(b));
assert_eq!(cat1[1]["id"].as_i64(), Some(a));
assert!(cat1.members().all(|row| row["id"].as_i64() != Some(hidden)));
// has_banner reflects the blob without carrying it
assert_eq!(cat1[0]["has_banner"].as_bool(), Some(true));
assert_eq!(cat1[1]["has_banner"].as_bool(), Some(false));
assert_eq!(get_banner(b), Some(vec![1, 2, 3]));
assert_eq!(get_banner(a), None);
// The other tab is untouched, the admin view sees the draft too
assert_eq!(list_category(2).len(), 1);
assert_eq!(list_category(2)[0]["id"].as_i64(), Some(c));
assert_eq!(get_all().len(), 4);
assert_eq!(latest_published_at(), 2000);
let mut visible = visible_ids(None);
visible.sort();
assert_eq!(visible, vec![a, b, c]);
let mut cat1_ids = visible_ids(Some(1));
cat1_ids.sort();
assert_eq!(cat1_ids, vec![a, b]);
wipe();
}
#[test]
fn update_rewrites_and_banner_transitions() {
let _lock = crate::runtime::lock_test_data_path();
wipe();
let id = create(1, "news", "Title", "body", Some(vec![9]), false, true, 1000, 7);
update(id, 3, "maintenance", "New title", "new body", Banner::Keep, true, true, 5000);
let row = get(id).unwrap();
assert_eq!(row["category"].as_i64(), Some(3));
assert_eq!(row["type"].as_str(), Some("maintenance"));
assert_eq!(row["title"].as_str(), Some("New title"));
assert_eq!(row["updated"].as_bool(), Some(true));
assert_eq!(row["published_at"].as_i64(), Some(5000));
// Keep left the blob in place
assert_eq!(get_banner(id), Some(vec![9]));
update(id, 3, "maintenance", "New title", "new body", Banner::Set(vec![4, 5]), true, true, 5000);
assert_eq!(get_banner(id), Some(vec![4, 5]));
update(id, 3, "maintenance", "New title", "new body", Banner::Clear, true, false, 5000);
assert_eq!(get_banner(id), None);
assert_eq!(get(id).unwrap()["visible"].as_bool(), Some(false));
delete(id);
assert!(get(id).is_none());
wipe();
}
// Ids are sequential, so the player-facing banner route is pollable: a
// draft's banner must be reachable by the admin lookup and by nothing else
#[test]
fn a_drafts_banner_is_admin_only() {
let _lock = crate::runtime::lock_test_data_path();
wipe();
let published = create(1, "news", "Live", "body", Some(vec![1, 2]), false, true, 1000, 42);
let draft = create(1, "news", "Unannounced", "body", Some(vec![7, 7]), false, false, 2000, 42);
assert_eq!(get_banner(draft), Some(vec![7, 7]));
assert_eq!(get_public_banner(draft), None);
assert_eq!(get_public_banner(published), Some(vec![1, 2]));
// Publishing it makes the banner reachable, hiding it again takes it back
update(draft, 1, "news", "Unannounced", "body", Banner::Keep, false, true, 2000);
assert_eq!(get_public_banner(draft), Some(vec![7, 7]));
update(draft, 1, "news", "Unannounced", "body", Banner::Keep, false, false, 2000);
assert_eq!(get_public_banner(draft), None);
wipe();
}
#[test]
fn vocabulary_is_wellformed() {
for category in CATEGORIES {
assert!(is_valid_category(*category));
}
assert!(!is_valid_category(0));
assert!(!is_valid_category(4));
for kind in TYPES {
assert!(is_valid_type(kind));
}
assert!(!is_valid_type("explosion"));
}
}

217
src/database/custom_3dmv.rs Normal file
View File

@@ -0,0 +1,217 @@
use lazy_static::lazy_static;
use rusqlite::params;
use jzon::{array, JsonValue};
use crate::sql::SQLite;
lazy_static! {
static ref DATABASE: SQLite = SQLite::new("custom_3dmv.db", setup_tables);
}
// mv_id is its own namespace: it never appears where a music_id or a card id
// could, so the band only has to avoid colliding with itself. Ids are never
// reused after a delete (high-water mark below), so a client's cached copy of
// a dead id can't get confused with a later upload
pub const FIRST_MV_ID: i64 = 20001;
pub const LAST_MV_ID: i64 = 99_999;
// One JSON blob per MV, in the exact shape /api/custom_3dmv/list serves -
// except `published`, which lives in its own column (the catalog filter
// queries it) and is only injected for the webui manage view
fn setup_tables(conn: &rusqlite::Connection) {
conn.execute_batch("
CREATE TABLE IF NOT EXISTS mvs (
mv_id BIGINT NOT NULL PRIMARY KEY,
music_id BIGINT NOT NULL,
owner_id BIGINT NOT NULL,
mv TEXT NOT NULL,
published INT NOT NULL DEFAULT 0
);
CREATE TABLE IF NOT EXISTS revision (
id INT NOT NULL PRIMARY KEY,
revision BIGINT NOT NULL,
last_mv_id BIGINT NOT NULL
);
").unwrap();
}
pub fn get_revision() -> i64 {
DATABASE.lock_and_select("SELECT revision FROM revision WHERE id=1", params!()).unwrap_or_default().parse::<i64>().unwrap_or(0)
}
// Bumped on every upload/update/delete/publish change so the client can tell
// its cached catalog is stale
pub fn bump_revision() {
DATABASE.lock_and_exec("INSERT INTO revision (id, revision, last_mv_id) VALUES (1, 1, 0) ON CONFLICT(id) DO UPDATE SET revision=revision+1", params!());
}
// last_mv_id is the high-water mark and only ever rises, so MAX() over the
// live rows is a floor, not the answer
pub fn next_mv_id() -> i64 {
let issued = DATABASE.lock_and_select("SELECT last_mv_id FROM revision WHERE id=1", params!()).unwrap_or_default().parse::<i64>().unwrap_or(0);
let max = DATABASE.lock_and_select("SELECT MAX(mv_id) FROM mvs", params!()).unwrap_or_default().parse::<i64>().unwrap_or(0);
std::cmp::max(std::cmp::max(issued, max), FIRST_MV_ID - 1) + 1
}
pub fn insert_mv(mv_id: i64, music_id: i64, owner_id: i64, mv: &JsonValue, published: bool) {
DATABASE.lock_and_exec(
"INSERT INTO mvs (mv_id, music_id, owner_id, mv, published) VALUES (?1, ?2, ?3, ?4, ?5)",
params!(mv_id, music_id, owner_id, jzon::stringify(mv.clone()), published as i64)
);
DATABASE.lock_and_exec("INSERT INTO revision (id, revision, last_mv_id) VALUES (1, 0, ?1) ON CONFLICT(id) DO UPDATE SET last_mv_id=?1", params!(mv_id));
}
// The catalog blob only. The owner and the published flag live in their own
// columns and are untouched here; music_id is fixed for the life of the MV
pub fn update_mv(mv_id: i64, mv: &JsonValue) {
DATABASE.lock_and_exec("UPDATE mvs SET mv=?1 WHERE mv_id=?2", params!(jzon::stringify(mv.clone()), mv_id));
}
pub fn delete_mv(mv_id: i64) {
DATABASE.lock_and_exec("DELETE FROM mvs WHERE mv_id=?1", params!(mv_id));
}
pub fn get_mv(mv_id: i64) -> Option<JsonValue> {
let mv = DATABASE.lock_and_select("SELECT mv FROM mvs WHERE mv_id=?1", params!(mv_id)).ok()?;
jzon::parse(&mv).ok()
}
pub fn get_mv_owner(mv_id: i64) -> Option<i64> {
DATABASE.lock_and_select("SELECT owner_id FROM mvs WHERE mv_id=?1", params!(mv_id)).ok()?.parse::<i64>().ok()
}
pub fn get_mv_music_id(mv_id: i64) -> Option<i64> {
DATABASE.lock_and_select("SELECT music_id FROM mvs WHERE mv_id=?1", params!(mv_id)).ok()?.parse::<i64>().ok()
}
pub fn is_published(mv_id: i64) -> bool {
DATABASE.lock_and_select("SELECT published FROM mvs WHERE mv_id=?1", params!(mv_id)).unwrap_or_default() == "1"
}
pub fn set_published(mv_id: i64, published: bool) {
DATABASE.lock_and_exec("UPDATE mvs SET published=?1 WHERE mv_id=?2", params!(published as i64, mv_id));
}
pub fn mv_count_for_owner(owner_id: i64) -> i64 {
DATABASE.lock_and_select_type::<i64>("SELECT COUNT(*) FROM mvs WHERE owner_id=?1", params!(owner_id)).unwrap_or(0)
}
fn parse_blobs(rows: JsonValue) -> JsonValue {
let mut rv = array![];
for data in rows.members() {
if let Ok(parsed) = jzon::parse(&data.to_string()) {
rv.push(parsed).unwrap();
}
}
rv
}
// The MV catalog this user is served: every published MV plus their own
// drafts, filtered against `music_ids` - the music ids the SAME user's
// custom-song catalog delivers. The closure is what keeps the response
// referentially sound: a served MV must never name a music_id the song
// catalog failed to deliver (a published MV for someone else's private song
// stays invisible)
pub fn get_mvs_for_user(user_id: i64, music_ids: &[i64]) -> JsonValue {
let rows = parse_blobs(DATABASE.lock_and_select_all(
"SELECT mv FROM mvs WHERE published=1 OR owner_id=?1 ORDER BY mv_id",
params!(user_id)
).unwrap_or(array![]));
let mut rv = array![];
for mv in rows.members() {
if music_ids.contains(&mv["music_id"].as_i64().unwrap_or(0)) {
rv.push(mv.clone()).unwrap();
}
}
rv
}
// MV blobs plus the flag column, for the webui manage view
pub fn get_mvs_by_owner(owner_id: i64) -> JsonValue {
let rows = parse_blobs(DATABASE.lock_and_select_all("SELECT mv FROM mvs WHERE owner_id=?1 ORDER BY mv_id", params!(owner_id)).unwrap_or(array![]));
let mut rv = array![];
for mv in rows.members() {
let mut mv = mv.clone();
mv["published"] = is_published(mv["mv_id"].as_i64().unwrap_or(0)).into();
rv.push(mv).unwrap();
}
rv
}
// The webui MV browser: published MVs whose song the viewer can see, plus the
// owner id so the page can label the uploader
pub fn get_browse_mvs(viewer_music_ids: &[i64]) -> JsonValue {
let rows = parse_blobs(DATABASE.lock_and_select_all("SELECT mv FROM mvs WHERE published=1 ORDER BY mv_id", params!()).unwrap_or(array![]));
let mut rv = array![];
for mv in rows.members() {
if !viewer_music_ids.contains(&mv["music_id"].as_i64().unwrap_or(0)) {
continue;
}
let mut mv = mv.clone();
mv["owner_id"] = get_mv_owner(mv["mv_id"].as_i64().unwrap_or(0)).unwrap_or(0).into();
rv.push(mv).unwrap();
}
rv
}
// Every MV attached to a song, for the delete cascade
pub fn mv_ids_for_music(music_id: i64) -> Vec<i64> {
let rows = DATABASE.lock_and_select_all("SELECT mv_id FROM mvs WHERE music_id=?1 ORDER BY mv_id", params!(music_id)).unwrap_or(array![]);
rows.members().filter_map(|id| id.as_i64()).collect()
}
// Which of these candidate ids no longer exist. Only the MV band is ever
// considered and ids are never reused, so a wipe is final. An MV that's
// merely unpublished still has its row - only genuinely deleted ids return
pub fn dead_mv_ids(candidates: &JsonValue) -> JsonValue {
let mut ids: Vec<i64> = Vec::new();
for id in candidates.members() {
let Some(id) = id.as_i64() else { continue; };
if (FIRST_MV_ID..=LAST_MV_ID).contains(&id) && !ids.contains(&id) {
ids.push(id);
}
}
if ids.is_empty() {
return array![];
}
let list = ids.iter().map(|id| id.to_string()).collect::<Vec<_>>().join(",");
let alive = DATABASE.lock_and_select_all(&format!("SELECT mv_id FROM mvs WHERE mv_id IN ({})", list), params!()).unwrap_or(array![]);
let mut rv = array![];
for id in ids {
if !alive.contains(id) {
rv.push(id).unwrap();
}
}
rv
}
// Every stored catalog blob, unparsed and unfiltered. Only the startup blob
// sweep needs the whole table, and a read failure must never look like an
// empty catalog (the sweep would then delete every blob), so this returns
// None rather than an empty array on error
pub fn all_mv_blobs() -> Option<JsonValue> {
DATABASE.lock_and_select_all("SELECT mv FROM mvs ORDER BY mv_id", params!()).ok()
}
// Blobs are content-addressed and may be shared between MVs (or roles), so
// every candidate row is checked - a single-row scan could land on a
// coincidental substring match and miss the real reference
pub fn blob_in_use(md5: &str) -> bool {
let rows = DATABASE.lock_and_select_all("SELECT mv FROM mvs WHERE mv LIKE ?1", params!(format!("%{}%", md5))).unwrap_or(array![]);
for blob in rows.members() {
if let Ok(mv) = jzon::parse(&blob.to_string()) {
if mv["files"].members().any(|file| file["md5"].as_str() == Some(md5)) {
return true;
}
}
}
false
}
// Two-step content-addressed lookup for the data route: the LIKE scan finds a
// candidate row cheaply, then the files array confirms the md5 is really a
// stored file of a live MV (and not a substring coincidence elsewhere in the
// blob). The blob path itself derives from the md5
pub fn find_blob_by_md5(md5: &str) -> bool {
blob_in_use(md5)
}

555
src/database/custom_card.rs Normal file
View File

@@ -0,0 +1,555 @@
use lazy_static::lazy_static;
use rusqlite::params;
use jzon::{array, JsonValue};
use crate::sql::SQLite;
lazy_static! {
static ref DATABASE: SQLite = SQLite::new("custom_cards.db", setup_tables);
}
// master_card_id == illust_prefix * 10000 + seq, and illust_id is derived from
// the same pair as {prefix:05}_{seq:04}_{00|01}. Official cards are 8-digit
// (prefix 1001-4014), the baked SIF1 import owns prefixes 10000-14999 (rows in
// client masterdata), so runtime uploads start at prefix 15000. seq 0 never
// exists - official illust ids start at 0001 - so an id landing on a prefix
// boundary is skipped, not issued
pub const FIRST_ILLUST_PREFIX: i64 = 15000;
pub const FIRST_CARD_ID: i64 = FIRST_ILLUST_PREFIX * 10000 + 1;
pub const LAST_CARD_ID: i64 = 999_999_999;
// Official characters are 1001-4014, the SIF1 import took 5001-5172 and
// 6001-6009 - client masterdata tops out at 6009, so runtime characters start
// at 7001. The ceiling keeps the id 5-digit (sign_{0:D5} asset naming) and
// below the 99999 sentinel SDCharacter substitutes for OTHER-category
// characters
pub const FIRST_CHARACTER_ID: i64 = 7001;
pub const LAST_CHARACTER_ID: i64 = 99_998;
// Cards and characters are one JSON blob each, in the exact shape
// /api/custom_card/list serves - except `published`/`obtainable`/`rarity`,
// which live in their own columns (the draw pool and the catalog filter query
// them) and are injected into the served object where the wire wants them
fn setup_tables(conn: &rusqlite::Connection) {
conn.execute_batch("
CREATE TABLE IF NOT EXISTS cards (
master_card_id BIGINT NOT NULL PRIMARY KEY,
master_character_id BIGINT NOT NULL,
owner_id BIGINT NOT NULL,
card TEXT NOT NULL,
rarity INT NOT NULL DEFAULT 1,
published INT NOT NULL DEFAULT 0,
obtainable INT NOT NULL DEFAULT 0
);
CREATE TABLE IF NOT EXISTS characters (
master_character_id BIGINT NOT NULL PRIMARY KEY,
owner_id BIGINT NOT NULL,
character TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS revision (
id INT NOT NULL PRIMARY KEY,
revision BIGINT NOT NULL,
last_card_id BIGINT NOT NULL,
last_character_id BIGINT NOT NULL
);
").unwrap();
}
pub fn get_revision() -> i64 {
DATABASE.lock_and_select("SELECT revision FROM revision WHERE id=1", params!()).unwrap_or_default().parse::<i64>().unwrap_or(0)
}
// Bumped on every create/update/delete/publish/obtainable change so the client
// can tell its cached catalog is stale
pub fn bump_revision() {
DATABASE.lock_and_exec("INSERT INTO revision (id, revision, last_card_id, last_character_id) VALUES (1, 1, 0, 0) ON CONFLICT(id) DO UPDATE SET revision=revision+1", params!());
}
// Ids are never reused after a delete: a client that cached a dead id can't
// confuse it with a later upload, and a player's stored card row for a deleted
// card can't silently become a different card. last_card_id is the high-water
// mark and only ever rises, so MAX() over the live rows is a floor, not the
// answer
pub fn next_card_id() -> i64 {
let issued = DATABASE.lock_and_select("SELECT last_card_id FROM revision WHERE id=1", params!()).unwrap_or_default().parse::<i64>().unwrap_or(0);
let max = DATABASE.lock_and_select("SELECT MAX(master_card_id) FROM cards", params!()).unwrap_or_default().parse::<i64>().unwrap_or(0);
let mut rv = std::cmp::max(std::cmp::max(issued, max), FIRST_CARD_ID - 1) + 1;
// seq 0 doesn't exist in the illust naming scheme
if rv % 10000 == 0 {
rv += 1;
}
rv
}
pub fn next_character_id() -> i64 {
let issued = DATABASE.lock_and_select("SELECT last_character_id FROM revision WHERE id=1", params!()).unwrap_or_default().parse::<i64>().unwrap_or(0);
let max = DATABASE.lock_and_select("SELECT MAX(master_character_id) FROM characters", params!()).unwrap_or_default().parse::<i64>().unwrap_or(0);
std::cmp::max(std::cmp::max(issued, max), FIRST_CHARACTER_ID - 1) + 1
}
pub fn insert_card(master_card_id: i64, master_character_id: i64, owner_id: i64, card: &JsonValue, published: bool, obtainable: bool) {
DATABASE.lock_and_exec(
"INSERT INTO cards (master_card_id, master_character_id, owner_id, card, rarity, published, obtainable) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7)",
params!(master_card_id, master_character_id, owner_id, jzon::stringify(card.clone()), card["rarity"].as_i64().unwrap_or(1), published as i64, obtainable as i64)
);
DATABASE.lock_and_exec("INSERT INTO revision (id, revision, last_card_id, last_character_id) VALUES (1, 0, ?1, 0) ON CONFLICT(id) DO UPDATE SET last_card_id=?1", params!(master_card_id));
}
pub fn insert_character(master_character_id: i64, owner_id: i64, character: &JsonValue) {
DATABASE.lock_and_exec(
"INSERT INTO characters (master_character_id, owner_id, character) VALUES (?1, ?2, ?3)",
params!(master_character_id, owner_id, jzon::stringify(character.clone()))
);
DATABASE.lock_and_exec("INSERT INTO revision (id, revision, last_card_id, last_character_id) VALUES (1, 0, 0, ?1) ON CONFLICT(id) DO UPDATE SET last_character_id=?1", params!(master_character_id));
}
// The catalog blob only. The owner and the published/obtainable flags live in
// their own columns and are untouched here; rarity tracks the blob
pub fn update_card(master_card_id: i64, card: &JsonValue) {
DATABASE.lock_and_exec("UPDATE cards SET card=?1, rarity=?2 WHERE master_card_id=?3", params!(jzon::stringify(card.clone()), card["rarity"].as_i64().unwrap_or(1), master_card_id));
}
pub fn update_character(master_character_id: i64, character: &JsonValue) {
DATABASE.lock_and_exec("UPDATE characters SET character=?1 WHERE master_character_id=?2", params!(jzon::stringify(character.clone()), master_character_id));
}
pub fn delete_card(master_card_id: i64) {
DATABASE.lock_and_exec("DELETE FROM cards WHERE master_card_id=?1", params!(master_card_id));
}
pub fn delete_character(master_character_id: i64) {
DATABASE.lock_and_exec("DELETE FROM characters WHERE master_character_id=?1", params!(master_character_id));
}
// The stored blob with the column-backed wire field injected
fn card_with_flags(mut card: JsonValue) -> JsonValue {
let id = card["master_card_id"].as_i64().unwrap_or(0);
card["obtainable"] = is_obtainable(id).into();
card
}
pub fn get_card(master_card_id: i64) -> Option<JsonValue> {
let card = DATABASE.lock_and_select("SELECT card FROM cards WHERE master_card_id=?1", params!(master_card_id)).ok()?;
Some(card_with_flags(jzon::parse(&card).ok()?))
}
pub fn get_character(master_character_id: i64) -> Option<JsonValue> {
let character = DATABASE.lock_and_select("SELECT character FROM characters WHERE master_character_id=?1", params!(master_character_id)).ok()?;
jzon::parse(&character).ok()
}
pub fn get_card_owner(master_card_id: i64) -> Option<i64> {
DATABASE.lock_and_select("SELECT owner_id FROM cards WHERE master_card_id=?1", params!(master_card_id)).ok()?.parse::<i64>().ok()
}
pub fn get_character_owner(master_character_id: i64) -> Option<i64> {
DATABASE.lock_and_select("SELECT owner_id FROM characters WHERE master_character_id=?1", params!(master_character_id)).ok()?.parse::<i64>().ok()
}
// The character a runtime card belongs to, straight out of its own column.
// guest::proxy_card_id resolves an unviewable card through this, so it stays a
// plain lookup and never a decode of the blob
pub fn character_of(master_card_id: i64) -> Option<i64> {
DATABASE.lock_and_select("SELECT master_character_id FROM cards WHERE master_card_id=?1", params!(master_card_id)).ok()?.parse::<i64>().ok()
}
pub fn is_published(master_card_id: i64) -> bool {
DATABASE.lock_and_select("SELECT published FROM cards WHERE master_card_id=?1", params!(master_card_id)).unwrap_or_default() == "1"
}
pub fn set_published(master_card_id: i64, published: bool) {
DATABASE.lock_and_exec("UPDATE cards SET published=?1 WHERE master_card_id=?2", params!(published as i64, master_card_id));
}
pub fn is_obtainable(master_card_id: i64) -> bool {
DATABASE.lock_and_select("SELECT obtainable FROM cards WHERE master_card_id=?1", params!(master_card_id)).unwrap_or_default() == "1"
}
pub fn set_obtainable(master_card_id: i64, obtainable: bool) {
DATABASE.lock_and_exec("UPDATE cards SET obtainable=?1 WHERE master_card_id=?2", params!(obtainable as i64, master_card_id));
}
pub fn has_character(master_character_id: i64) -> bool {
DATABASE.lock_and_select("SELECT master_character_id FROM characters WHERE master_character_id=?1", params!(master_character_id)).is_ok()
}
pub fn card_count_for_owner(owner_id: i64) -> i64 {
DATABASE.lock_and_select_type::<i64>("SELECT COUNT(*) FROM cards WHERE owner_id=?1", params!(owner_id)).unwrap_or(0)
}
// How many cards still point at this character. A referenced character can't
// be deleted
pub fn cards_using_character(master_character_id: i64) -> i64 {
DATABASE.lock_and_select_type::<i64>("SELECT COUNT(*) FROM cards WHERE master_character_id=?1", params!(master_character_id)).unwrap_or(0)
}
// A custom character is publicly visible when a published card references it -
// that's also what lets another uploader build a card on it
pub fn character_publicly_visible(master_character_id: i64) -> bool {
DATABASE.lock_and_select_type::<i64>(
"SELECT COUNT(*) FROM cards WHERE master_character_id=?1 AND published=1",
params!(master_character_id)
).unwrap_or(0) > 0
}
fn parse_blobs(rows: JsonValue) -> JsonValue {
let mut rv = array![];
for data in rows.members() {
if let Ok(parsed) = jzon::parse(&data.to_string()) {
rv.push(parsed).unwrap();
}
}
rv
}
// The card catalog this user is served: every published card, their own
// drafts, and any card their game account already owns (`owned` - so an
// unpublish never leaves a player holding an id their client can't resolve)
pub fn get_cards_for_user(user_id: i64, owned: &[i64]) -> JsonValue {
let rows = parse_blobs(DATABASE.lock_and_select_all(
"SELECT card FROM cards WHERE published=1 OR owner_id=?1 ORDER BY master_card_id",
params!(user_id)
).unwrap_or(array![]));
let mut rv = array![];
let mut ids: Vec<i64> = Vec::new();
for card in rows.members() {
ids.push(card["master_card_id"].as_i64().unwrap_or(0));
rv.push(card_with_flags(card.clone())).unwrap();
}
for id in owned {
if ids.contains(id) {
continue;
}
if let Some(card) = get_card(*id) {
rv.push(card).unwrap();
}
}
rv
}
// The character catalog rides along with the cards: a custom character is
// included exactly when a served card references it, or the requester owns it
// (so a draft character never leaks, and the catalog is referentially closed -
// a served card can never name a master_character_id the same response failed
// to deliver)
pub fn get_characters_for_cards(user_id: i64, cards: &JsonValue) -> JsonValue {
let mut ids: Vec<i64> = Vec::new();
for card in cards.members() {
let id = card["master_character_id"].as_i64().unwrap_or(0);
if (FIRST_CHARACTER_ID..=LAST_CHARACTER_ID).contains(&id) && !ids.contains(&id) {
ids.push(id);
}
}
let own = DATABASE.lock_and_select_all("SELECT master_character_id FROM characters WHERE owner_id=?1 ORDER BY master_character_id", params!(user_id)).unwrap_or(array![]);
for id in own.members() {
let id = id.as_i64().unwrap_or(0);
if !ids.contains(&id) {
ids.push(id);
}
}
ids.sort();
let mut rv = array![];
for id in ids {
if let Some(character) = get_character(id) {
rv.push(character).unwrap();
}
}
rv
}
// The custom characters this user may build a card on (mirrors
// validate_character_ref): their own, plus any that is publicly visible
// through a published card. Feeds the webui's character picker
pub fn get_selectable_characters(user_id: i64) -> JsonValue {
parse_blobs(DATABASE.lock_and_select_all("
SELECT character FROM characters
WHERE owner_id=?1 OR master_character_id IN (SELECT master_character_id FROM cards WHERE published=1)
ORDER BY master_character_id", params!(user_id)).unwrap_or(array![]))
}
// Card blobs plus the flag columns, for the webui manage view
pub fn get_cards_by_owner(owner_id: i64) -> JsonValue {
let rows = parse_blobs(DATABASE.lock_and_select_all("SELECT card FROM cards WHERE owner_id=?1 ORDER BY master_card_id", params!(owner_id)).unwrap_or(array![]));
let mut rv = array![];
for card in rows.members() {
let mut card = card_with_flags(card.clone());
card["published"] = is_published(card["master_card_id"].as_i64().unwrap_or(0)).into();
rv.push(card).unwrap();
}
rv
}
pub fn get_characters_by_owner(owner_id: i64) -> JsonValue {
parse_blobs(DATABASE.lock_and_select_all("SELECT character FROM characters WHERE owner_id=?1 ORDER BY master_character_id", params!(owner_id)).unwrap_or(array![]))
}
// The webui card browser: every published card, plus the owner id so the page
// can label the uploader
pub fn get_browse_cards() -> JsonValue {
let rows = parse_blobs(DATABASE.lock_and_select_all("SELECT card FROM cards WHERE published=1 ORDER BY master_card_id", params!()).unwrap_or(array![]));
let mut rv = array![];
for card in rows.members() {
let mut card = card_with_flags(card.clone());
card["owner_id"] = get_card_owner(card["master_card_id"].as_i64().unwrap_or(0)).unwrap_or(0).into();
rv.push(card).unwrap();
}
rv
}
// Which of these candidate ids no longer exist. Only the runtime band is ever
// considered, and ids are never reused, so official (or imported) cards can't
// come back from this and a wipe is final. A card that's merely unpublished
// still has its row - only genuinely deleted ids are returned
pub fn dead_card_ids(candidates: &JsonValue) -> JsonValue {
let mut ids: Vec<i64> = Vec::new();
for id in candidates.members() {
let Some(id) = id.as_i64() else { continue; };
if (FIRST_CARD_ID..=LAST_CARD_ID).contains(&id) && !ids.contains(&id) {
ids.push(id);
}
}
if ids.is_empty() {
return array![];
}
let list = ids.iter().map(|id| id.to_string()).collect::<Vec<_>>().join(",");
let alive = DATABASE.lock_and_select_all(&format!("SELECT master_card_id FROM cards WHERE master_card_id IN ({})", list), params!()).unwrap_or(array![]);
let mut rv = array![];
for id in ids {
if !alive.contains(id) {
rv.push(id).unwrap();
}
}
rv
}
// The published + obtainable pool the custom gacha banner draws from, per
// rarity
pub fn obtainable_card_ids(rarity: i64) -> Vec<i64> {
let rows = DATABASE.lock_and_select_all(
"SELECT master_card_id FROM cards WHERE published=1 AND obtainable=1 AND rarity=?1 ORDER BY master_card_id",
params!(rarity)
).unwrap_or(array![]);
rows.members().filter_map(|id| id.as_i64()).collect()
}
// Resolve a content-addressed art md5 to the file under custom_cards/ that
// currently holds those bytes: card art lives at {card_id}/{kind}_{variant}.png,
// character art at characters/{character_id}/{kind}.png. Art is stored per
// entity (not a shared md5 store) and the catalog md5 always tracks the
// on-disk bytes - so this is the index the /custom_card/data/{md5} route
// serves from, and it self-heals: a replaced file gets a new md5 and the old
// one simply stops resolving
// Resolve a voiceline md5 to its ogg under custom_cards/. Voicelines live in
// the character blob's `voice` array and on disk under the character's own
// voice/ subdirectory, so they share the art routes' self-healing property
pub fn find_voice_by_md5(md5: &str) -> Option<String> {
let blob = DATABASE.lock_and_select("SELECT character FROM characters WHERE character LIKE ?1", params!(format!("%{}%", md5))).ok()?;
let character = jzon::parse(&blob).ok()?;
let id = character["master_character_id"].as_i64()?;
for line in character["voice"].members() {
if line["md5"].as_str() == Some(md5) {
return Some(format!("characters/{}/voice/{}.ogg", id, md5));
}
}
None
}
pub fn find_asset_by_md5(md5: &str) -> Option<String> {
let like = format!("%{}%", md5);
if let Ok(blob) = DATABASE.lock_and_select("SELECT card FROM cards WHERE card LIKE ?1", params!(like.clone())) {
if let Ok(card) = jzon::parse(&blob) {
let master_card_id = card["master_card_id"].as_i64()?;
for art in card["art"].members() {
if art["md5"].as_str() == Some(md5) {
return Some(format!("{}/{}_{}.png", master_card_id, art["kind"], art["variant"]));
}
}
}
}
let blob = DATABASE.lock_and_select("SELECT character FROM characters WHERE character LIKE ?1", params!(like)).ok()?;
let character = jzon::parse(&blob).ok()?;
let id = character["master_character_id"].as_i64()?;
for art in character["art"].members() {
if art["md5"].as_str() == Some(md5) {
return Some(format!("characters/{}/{}.png", id, art["kind"]));
}
}
None
}
#[cfg(test)]
mod tests {
use super::*;
use jzon::object;
fn card_blob(id: i64, rarity: i64) -> JsonValue {
object!{
"master_card_id": id,
"master_character_id": 1001,
"rarity": rarity,
"art": [{ "kind": "c", "variant": "00", "md5": format!("{:032x}", id), "size": 1 }]
}
}
fn wipe(owner: i64) {
for card in get_cards_by_owner(owner).members() {
delete_card(card["master_card_id"].as_i64().unwrap());
}
for character in get_characters_by_owner(owner).members() {
delete_character(character["master_character_id"].as_i64().unwrap());
}
}
// Ids are sequential from FIRST_CARD_ID, never reused after a delete, and
// never land on a seq-0 prefix boundary
#[test]
fn ids_are_sequential_and_never_reused() {
let _lock = crate::runtime::lock_test_data_path();
wipe(3001);
let first = next_card_id();
assert!(first >= FIRST_CARD_ID);
assert_ne!(first % 10000, 0);
insert_card(first, 1001, 3001, &card_blob(first, 1), false, false);
let second = next_card_id();
assert_eq!(second, first + 1);
insert_card(second, 1001, 3001, &card_blob(second, 1), false, false);
delete_card(second);
assert_eq!(get_card(second), None);
// The high-water mark survives the delete, so the id is retired
assert_eq!(next_card_id(), second + 1);
let character = next_character_id();
assert!(character >= FIRST_CHARACTER_ID);
insert_character(character, 3001, &object!{ "master_character_id": character });
assert_eq!(next_character_id(), character + 1);
delete_character(character);
assert_eq!(next_character_id(), character + 1);
wipe(3001);
assert!(next_card_id() > second);
}
// Published cards go to everyone, drafts only to their owner, a game
// account that owns a card keeps seeing it even unpublished, and a
// character rides along with any card the viewer is served
#[test]
fn catalog_filters_per_user() {
let _lock = crate::runtime::lock_test_data_path();
wipe(3003);
wipe(3004);
let character = next_character_id();
insert_character(character, 3003, &object!{ "master_character_id": character });
let published = next_card_id();
let mut blob = card_blob(published, 3);
blob["master_character_id"] = character.into();
insert_card(published, character, 3003, &blob, true, true);
let draft = next_card_id();
insert_card(draft, character, 3003, &card_blob(draft, 1), false, false);
let owner_view = get_cards_for_user(3003, &[]);
assert_eq!(owner_view.len(), 2);
let other_view = get_cards_for_user(3004, &[]);
assert_eq!(other_view.len(), 1);
assert_eq!(other_view[0]["master_card_id"].as_i64(), Some(published));
// The wire `obtainable` field comes from the column
assert_eq!(other_view[0]["obtainable"].as_bool(), Some(true));
// A player who owns the draft in game still resolves it
let holder_view = get_cards_for_user(3004, &[draft]);
assert_eq!(holder_view.len(), 2);
// Unpublishing removes it from strangers, not from holders
set_published(published, false);
assert!(get_cards_for_user(3004, &[]).is_empty());
assert_eq!(get_cards_for_user(3004, &[published]).len(), 1);
set_published(published, true);
// Characters follow the served cards; a stranger with no visible card
// on the character doesn't get it
let characters = get_characters_for_cards(3004, &get_cards_for_user(3004, &[]));
assert_eq!(characters.len(), 1);
assert_eq!(characters[0]["master_character_id"].as_i64(), Some(character));
set_published(published, false);
assert!(get_characters_for_cards(3004, &get_cards_for_user(3004, &[])).is_empty());
// The owner always sees their own character
assert_eq!(get_characters_for_cards(3003, &get_cards_for_user(3003, &[])).len(), 1);
set_published(published, true);
assert_eq!(character_of(published), Some(character));
assert_eq!(cards_using_character(character), 2);
assert!(character_publicly_visible(character));
assert_eq!(card_count_for_owner(3003), 2);
wipe(3003);
wipe(3004);
}
// The draw pool is exactly the published + obtainable cards of the rarity
#[test]
fn obtainable_pool_by_rarity() {
let _lock = crate::runtime::lock_test_data_path();
wipe(3005);
let r1 = next_card_id();
insert_card(r1, 1001, 3005, &card_blob(r1, 1), true, true);
let r3 = next_card_id();
insert_card(r3, 1001, 3005, &card_blob(r3, 3), true, true);
let unpublished = next_card_id();
insert_card(unpublished, 1001, 3005, &card_blob(unpublished, 1), false, true);
let unobtainable = next_card_id();
insert_card(unobtainable, 1001, 3005, &card_blob(unobtainable, 1), true, false);
assert_eq!(obtainable_card_ids(1), vec![r1]);
assert_eq!(obtainable_card_ids(3), vec![r3]);
assert!(obtainable_card_ids(2).is_empty());
set_obtainable(unobtainable, true);
assert_eq!(obtainable_card_ids(1), vec![r1, unobtainable]);
wipe(3005);
}
#[test]
fn md5_resolves_to_the_file_holding_the_bytes() {
let _lock = crate::runtime::lock_test_data_path();
wipe(3007);
let id = next_card_id();
insert_card(id, 1001, 3007, &card_blob(id, 1), true, false);
assert_eq!(find_asset_by_md5(&format!("{:032x}", id)), Some(format!("{}/c_00.png", id)));
assert_eq!(find_asset_by_md5("00000000000000000000000000000000"), None);
let character = next_character_id();
insert_character(character, 3007, &object!{
"master_character_id": character,
"art": [{ "kind": "icon", "md5": "aabbccddeeff00112233445566778899", "size": 1 }]
});
assert_eq!(
find_asset_by_md5("aabbccddeeff00112233445566778899"),
Some(format!("characters/{}/icon.png", character))
);
wipe(3007);
}
// Deleted ids come back from dead_card_ids; unpublished, imported and
// official ids never do
#[test]
fn dead_ids_are_deleted_ids_only() {
let _lock = crate::runtime::lock_test_data_path();
wipe(3008);
let alive = next_card_id();
insert_card(alive, 1001, 3008, &card_blob(alive, 1), false, false);
let dead = next_card_id();
insert_card(dead, 1001, 3008, &card_blob(dead, 1), true, false);
delete_card(dead);
let dead_ids = dead_card_ids(&array![alive, dead, 10010001, 100010001, dead]);
assert_eq!(dead_ids.len(), 1);
assert_eq!(dead_ids[0].as_i64(), Some(dead));
wipe(3008);
}
}

View File

@@ -95,8 +95,11 @@ pub fn bump_revision() {
// + 異次元フェス) along with bgm 310090xx/320090xx, so the custom range gets
// the 5-digit space to itself (10000 -> bgm 31010000/32010000). Ids are never
// reused after a delete, so a client's cached copy of a dead id can't get
// confused with a new upload
// confused with a new upload. Stock live ids (master_live_id) are 7-digit
// (>= 1_000_000), so the custom range stops below them - a stock clear must
// never be mistaken for a deleted custom song
pub const FIRST_MUSIC_ID: i64 = 10000;
pub const LAST_MUSIC_ID: i64 = 999_999;
pub fn next_music_id() -> i64 {
let issued = DATABASE.lock_and_select("SELECT last_music_id FROM revision WHERE id=1", params!()).unwrap_or_default().parse::<i64>().unwrap_or(0);
@@ -236,6 +239,32 @@ pub fn export_allowed(music_id: i64, viewer: Option<i64>) -> Result<(), &'static
Ok(())
}
// The display title for a PUBLIC custom song, for the clear-rate page.
// Private/shared songs return None - their names (and existence) must not
// leak beyond the visibility rules, so this never falls back past the
// explicit visibility check (an absent row is None, not "public")
pub fn public_song_title(music_id: i64, english: bool) -> Option<String> {
if !(FIRST_MUSIC_ID..=LAST_MUSIC_ID).contains(&music_id) {
return None;
}
let visibility = DATABASE.lock_and_select("SELECT visibility FROM songs WHERE music_id=?1", params!(music_id)).ok()?;
if visibility != "public" {
return None;
}
let song = get_song(music_id)?;
let name = song["name"].as_str().unwrap_or("").to_string();
let name_en = song["name_en"].as_str().unwrap_or("").to_string();
Some(if english && !name_en.is_empty() { name_en } else { name })
}
// Whether the song exists and is publicly visible - what lets another
// uploader attach cross-feature content (a custom 3D MV) to it. The
// existence check comes first: get_visibility defaults to "public" for an
// absent row
pub fn song_publicly_visible(music_id: i64) -> bool {
get_song_owner(music_id).is_some() && get_visibility(music_id) == "public"
}
pub fn get_music_ids_for_user(user_id: i64) -> JsonValue {
DATABASE.lock_and_select_all("
SELECT music_id FROM songs
@@ -244,6 +273,18 @@ pub fn get_music_ids_for_user(user_id: i64) -> JsonValue {
ORDER BY music_id", params!(user_id)).unwrap_or(array![])
}
pub fn non_public_music_ids() -> JsonValue {
DATABASE.lock_and_select_all("SELECT music_id FROM songs WHERE visibility!='public' ORDER BY music_id", params!()).unwrap_or(array![])
}
pub fn non_public_music_ids_for(user_id: i64) -> JsonValue {
DATABASE.lock_and_select_all("
SELECT music_id FROM songs
WHERE visibility!='public' AND owner_id!=?1
AND music_id NOT IN (SELECT music_id FROM shared_users WHERE user_id=?1)
ORDER BY music_id", params!(user_id)).unwrap_or(array![])
}
// Which of these candidate ids no longer exist in the catalog. Only the custom
// range is ever considered, so official songs can't come back from this. A song
// that's merely private/shared still has its row - only genuinely deleted ids
@@ -252,7 +293,7 @@ pub fn dead_music_ids(candidates: &JsonValue) -> JsonValue {
let mut ids: Vec<i64> = Vec::new();
for id in candidates.members() {
let Some(id) = id.as_i64() else { continue; };
if id >= FIRST_MUSIC_ID && !ids.contains(&id) {
if id >= FIRST_MUSIC_ID && id <= LAST_MUSIC_ID && !ids.contains(&id) {
ids.push(id);
}
}
@@ -270,6 +311,14 @@ pub fn dead_music_ids(candidates: &JsonValue) -> JsonValue {
rv
}
// Every stored catalog blob, unparsed and unfiltered by visibility. Only the
// startup audio sweep needs the whole table, and it needs to tell "no songs"
// apart from "could not read the songs" - a read failure must never look like
// an empty catalog, so this returns None rather than an empty array on error
pub fn all_song_blobs() -> Option<JsonValue> {
DATABASE.lock_and_select_all("SELECT song FROM songs ORDER BY music_id", params!()).ok()
}
// Audio files are content-addressed and may be shared between songs
pub fn audio_in_use(md5: &str, ignored_music_id: i64) -> bool {
DATABASE.lock_and_select("SELECT music_id FROM songs WHERE music_id!=?1 AND song LIKE ?2", params!(ignored_music_id, format!("%{}%", md5))).is_ok()

View File

@@ -7,7 +7,6 @@ use sha1::Sha1;
use sha1::Digest;
use rsa::pkcs8::DecodePublicKey;
use crate::encryption;
use crate::router::{global, userdata};
use crate::sql::SQLite;
@@ -61,9 +60,35 @@ fn vacuum_database() {
DATABASE.lock_and_exec("VACUUM", params!());
}
pub fn get_user_cert(uuid: &str) -> Option<(i64, String)> {
let user_id = DATABASE.lock_and_select("SELECT user_id FROM users WHERE uuid=?1;", params!(uuid)).ok()?.parse::<i64>().ok()?;
let cert = DATABASE.lock_and_select("SELECT cert FROM users WHERE uuid=?1;", params!(uuid)).ok()?;
Some((user_id, cert))
}
pub fn is_registered(uuid: &str) -> bool {
match get_user_cert(uuid) {
Some((_, cert)) => pem::parse(&cert).is_ok(),
None => false
}
}
pub fn verify_fingerprint(uuid: &str, fingerprint: &str, cert: &str) -> bool {
let Ok(signature) = general_purpose::STANDARD.decode(fingerprint) else {
return false;
};
verify_signature(&signature, uuid.as_bytes(), cert)
}
fn verify_signature(signature: &[u8], message: &[u8], public_key: &str) -> bool {
let pem = pem::parse(public_key).unwrap();
let public_key = RsaPublicKey::from_public_key_der(&pem.contents()).unwrap();
let Ok(pem) = pem::parse(public_key) else {
return false;
};
let Ok(public_key) = RsaPublicKey::from_public_key_der(&pem.contents()) else {
return false;
};
let digest = Sha1::digest(message);
public_key
@@ -72,7 +97,6 @@ fn verify_signature(signature: &[u8], message: &[u8], public_key: &str) -> bool
}
pub fn get_uuid(headers: &HeaderMap, body: &str) -> String {
let body = encryption::decrypt_packet(body).unwrap();
let blank_header = HeaderValue::from_static("");
let login = headers.get("a6573cbe").unwrap_or(&blank_header).to_str().unwrap_or("");
let uid = headers.get("aoharu-user-id").unwrap_or(&blank_header).to_str().unwrap_or("");
@@ -82,7 +106,9 @@ pub fn get_uuid(headers: &HeaderMap, body: &str) -> String {
return String::new();
}
let cert = DATABASE.lock_and_select("SELECT cert FROM users WHERE user_id=?1;", params!(uid)).unwrap();
let Ok(cert) = DATABASE.lock_and_select("SELECT cert FROM users WHERE user_id=?1;", params!(uid)) else {
return String::new();
};
let data = format!("{}{}{}{}{}", uid, "sk1bdzb310n0s9tl", version, timestamp, body);
let encoded = general_purpose::STANDARD.encode(data.as_bytes());

332
src/database/permissions.rs Normal file
View File

@@ -0,0 +1,332 @@
use lazy_static::lazy_static;
use rusqlite::params;
use jzon::{array, object, JsonValue};
use crate::router::global;
use crate::sql::SQLite;
lazy_static! {
static ref DATABASE: SQLite = SQLite::new("permissions.db", setup_tables);
}
pub const ALL: &str = "*";
pub const CARD: &str = "card";
pub const CARD_UPLOAD: &str = "card.upload";
pub const CARD_PUBLISH: &str = "card.publish";
pub const CARD_EDIT: &str = "card.edit";
pub const PERMISSION: &str = "permission";
pub const PERMISSION_GRANT: &str = "permission.grant";
pub const PERMISSION_REVOKE: &str = "permission.revoke";
pub const ANNOUNCEMENT: &str = "announcement";
pub const ANNOUNCEMENT_MANAGE: &str = "announcement.manage";
// Uploading/publishing your own MVs needs no scope (like custom songs);
// 3dmv.edit is moderation over anybody's
pub const MV: &str = "3dmv";
pub const MV_EDIT: &str = "3dmv.edit";
pub const SCOPES: &[&str] = &[
ALL,
CARD, CARD_UPLOAD, CARD_PUBLISH, CARD_EDIT,
PERMISSION, PERMISSION_GRANT, PERMISSION_REVOKE,
ANNOUNCEMENT, ANNOUNCEMENT_MANAGE,
MV, MV_EDIT
];
fn setup_tables(conn: &rusqlite::Connection) {
conn.execute_batch("
CREATE TABLE IF NOT EXISTS grants (
user_id BIGINT NOT NULL,
scope TEXT NOT NULL,
granted_by BIGINT NOT NULL,
granted_at BIGINT NOT NULL,
PRIMARY KEY (user_id, scope)
);
").unwrap();
}
fn is_owner(user_id: i64) -> bool {
user_id > 0 && crate::runtime::get_owners().contains(&user_id)
}
fn has_permission(scope: &str) -> Vec<String> {
if scope == ALL {
return vec![String::from(ALL)];
}
let mut rv = vec![String::from(ALL)];
let mut prefix = String::new();
for part in scope.split('.') {
if !prefix.is_empty() {
prefix.push('.');
}
prefix.push_str(part);
rv.push(prefix.clone());
}
rv
}
fn get_permissions(user_id: i64) -> Vec<String> {
let rows = DATABASE.lock_and_select_all("SELECT scope FROM grants WHERE user_id=?1 ORDER BY scope", params!(user_id)).unwrap_or(array![]);
rows.members().map(|scope| scope.to_string()).collect()
}
fn insert(user_id: i64, scope: &str, granted_by: i64) {
DATABASE.lock_and_exec(
"INSERT OR IGNORE INTO grants (user_id, scope, granted_by, granted_at) VALUES (?1, ?2, ?3, ?4)",
params!(user_id, scope, granted_by, global::timestamp() as i64)
);
}
// A user with no row holds nothing at all
pub fn has(user_id: i64, scope: &str) -> bool {
if user_id <= 0 {
return false;
}
if is_owner(user_id) {
return true;
}
let held = get_permissions(user_id);
has_permission(scope).iter().any(|candidate| held.contains(candidate))
}
pub fn get_user_permissions(user_id: i64) -> JsonValue {
if user_id <= 0 {
return array![];
}
let mut scopes: Vec<String> = Vec::new();
if is_owner(user_id) {
scopes.push(String::from(ALL));
}
for scope in get_permissions(user_id) {
if !scopes.contains(&scope) {
scopes.push(scope);
}
}
let mut rv = array![];
for scope in scopes {
rv.push(scope).unwrap();
}
rv
}
pub fn grants() -> JsonValue {
let conn = rusqlite::Connection::open(DATABASE.get_path()).unwrap();
let Ok(mut stmt) = conn.prepare("SELECT user_id, scope, granted_by, granted_at FROM grants ORDER BY user_id, scope") else {
return array![];
};
let Ok(mapped) = stmt.query_map(params!(), |row| {
Ok(object!{
user_id: row.get::<usize, i64>(0)?,
scope: row.get::<usize, String>(1)?,
granted_by: row.get::<usize, i64>(2)?,
granted_at: row.get::<usize, i64>(3)?
})
}) else {
return array![];
};
let mut rv = array![];
for row in mapped.flatten() {
rv.push(row).unwrap();
}
rv
}
pub fn grant(user_id: i64, scope: &str, granted_by: i64) -> Result<(), String> {
if user_id <= 0 {
return Err(String::from("Invalid user id"));
}
if !SCOPES.contains(&scope) {
return Err(format!("Unknown scope '{}'", scope));
}
if !has(granted_by, PERMISSION_GRANT) {
return Err(String::from("You do not have permission to grant scopes"));
}
if !has(granted_by, scope) {
return Err(format!("You cannot grant '{}' because you do not hold it yourself", scope));
}
insert(user_id, scope, granted_by);
Ok(())
}
pub fn revoke(user_id: i64, scope: &str, revoked_by: i64) -> Result<(), String> {
if user_id <= 0 {
return Err(String::from("Invalid user id"));
}
if !SCOPES.contains(&scope) {
return Err(format!("Unknown scope '{}'", scope));
}
if !has(revoked_by, PERMISSION_REVOKE) {
return Err(String::from("You do not have permission to revoke scopes"));
}
if !has(revoked_by, scope) {
return Err(format!("You cannot revoke '{}' because you do not hold it yourself", scope));
}
if is_owner(user_id) {
return Err(String::from("A server owner's scopes cannot be revoked"));
}
DATABASE.lock_and_exec("DELETE FROM grants WHERE user_id=?1 AND scope=?2", params!(user_id, scope));
Ok(())
}
// rest of file is tests that ai wrote
// I didn't read through them because I don't super care about tests but they probably do something
#[cfg(test)]
mod tests {
use super::*;
// Every test holds the shared test data path lock, so uids are hand-picked
// to not collide between tests rather than cleaned up between them
fn wipe(user_id: i64) {
DATABASE.lock_and_exec("DELETE FROM grants WHERE user_id=?1", params!(user_id));
}
#[test]
fn subtree_implies_leaf_but_not_the_reverse() {
let _lock = crate::runtime::lock_test_data_path();
wipe(101);
assert!(!has(101, CARD_UPLOAD));
insert(101, CARD, 0);
assert!(has(101, CARD_UPLOAD));
assert!(has(101, CARD_EDIT));
assert!(has(101, CARD));
assert!(!has(101, PERMISSION_GRANT));
assert!(!has(101, ALL));
wipe(101);
insert(101, CARD_UPLOAD, 0);
assert!(has(101, CARD_UPLOAD));
assert!(!has(101, CARD));
assert!(!has(101, CARD_PUBLISH));
wipe(101);
}
#[test]
fn star_implies_everything() {
let _lock = crate::runtime::lock_test_data_path();
wipe(103);
insert(103, ALL, 0);
for scope in SCOPES {
assert!(has(103, scope), "scope {}", scope);
}
wipe(103);
}
#[test]
fn partial_segment_is_not_a_prefix() {
let _lock = crate::runtime::lock_test_data_path();
wipe(104);
insert(104, "car", 0);
assert!(!has(104, CARD_UPLOAD));
assert!(!has(104, CARD));
insert(104, "card.uplo", 0);
assert!(!has(104, CARD_UPLOAD));
wipe(104);
}
#[test]
fn absent_user_holds_nothing() {
let _lock = crate::runtime::lock_test_data_path();
wipe(105);
for scope in SCOPES {
assert!(!has(105, scope), "scope {}", scope);
}
assert!(get_user_permissions(105).is_empty());
assert!(!has(0, ALL));
assert!(!has(-1, ALL));
wipe(105);
}
#[test]
fn grant_and_revoke_need_the_scope_and_the_ability() {
let _lock = crate::runtime::lock_test_data_path();
for uid in [110, 111, 112, 113] {
wipe(uid);
}
// A grantor with permission.grant and card.upload can hand out
// card.upload and nothing else - escalation is impossible
insert(110, PERMISSION_GRANT, 0);
insert(110, CARD_UPLOAD, 0);
grant(111, CARD_UPLOAD, 110).unwrap();
grant(111, CARD_UPLOAD, 110).unwrap(); // idempotent
assert_eq!(get_permissions(111), vec![String::from(CARD_UPLOAD)]);
assert!(grant(111, CARD_EDIT, 110).is_err());
assert!(grant(111, CARD, 110).is_err());
assert!(grant(110, ALL, 110).is_err());
assert!(!has(111, CARD_EDIT));
// No permission.grant / permission.revoke - no managing at all
insert(112, ALL, 0);
insert(113, CARD_UPLOAD, 0);
assert!(grant(113, CARD_UPLOAD, 113).is_err());
assert!(revoke(112, ALL, 113).is_err());
// Revoking needs the revoked scope held too
insert(110, PERMISSION_REVOKE, 0);
assert!(revoke(112, ALL, 110).is_err());
assert!(has(112, ALL));
revoke(111, CARD_UPLOAD, 110).unwrap();
assert!(!has(111, CARD_UPLOAD));
for uid in [110, 111, 112, 113] {
wipe(uid);
}
}
#[test]
fn unknown_scopes_are_rejected() {
let _lock = crate::runtime::lock_test_data_path();
wipe(116);
wipe(117);
insert(116, ALL, 0);
assert!(grant(117, "card.explode", 116).is_err());
assert!(revoke(117, "card.explode", 116).is_err());
assert!(grant(117, "song.upload", 116).is_err());
assert!(grant(0, CARD_UPLOAD, 116).is_err());
wipe(116);
wipe(117);
}
#[test]
fn owners_hold_everything_without_a_row() {
let _lock = crate::runtime::lock_test_data_path();
wipe(118);
wipe(119);
crate::runtime::update_owners(&[118, 120]);
for scope in SCOPES {
assert!(has(118, scope), "scope {}", scope);
assert!(has(120, scope), "scope {}", scope);
}
assert_eq!(get_user_permissions(118).len(), 1);
assert_eq!(get_user_permissions(118)[0].to_string(), String::from(ALL));
assert!(get_permissions(118).is_empty());
// An owner can bootstrap-grant, and can't be revoked
grant(119, ALL, 118).unwrap();
assert!(has(119, ALL));
insert(118, CARD_UPLOAD, 0);
assert!(revoke(118, CARD_UPLOAD, 119).is_err());
assert!(has(118, CARD_UPLOAD));
// Dropping owner status drops the implicit "*"
crate::runtime::update_owners(&[]);
assert!(!has(118, CARD_EDIT));
wipe(118);
wipe(119);
}
#[test]
fn the_vocabulary_is_wellformed() {
for scope in SCOPES {
assert!(!scope.is_empty());
assert!(!scope.ends_with('.'));
}
for scope in [CARD_UPLOAD, CARD_PUBLISH, CARD_EDIT, PERMISSION_GRANT, PERMISSION_REVOKE, ANNOUNCEMENT_MANAGE, MV_EDIT] {
assert!(SCOPES.contains(&scope), "scope {}", scope);
}
}
}

View File

@@ -27,12 +27,22 @@ pub async fn run_server(in_thread: bool) -> std::io::Result<()> {
let args = get_args();
let port = args.port;
runtime::update_owners(&args.owner);
if args.purge {
println!("Purging accounts...");
let ct = crate::router::userdata::purge_accounts();
println!("Purged {} accounts", ct);
}
router::custom_song::migrate::run();
router::custom_song::sweep_audio();
router::custom_3dmv::sweep_blobs();
// The multi-live relay's expiry timers, on the system arbiter rather than on whichever
// HTTP worker happened to serve the first WebSocket upgrade — a worker panic must not
// be able to strand every room's seats for the life of the process.
router::multi_live::start_sweeper();
let rv = HttpServer::new(|| App::new()
//.wrap(Cors::permissive())
.wrap_fn(|req, srv| {

View File

@@ -4,7 +4,6 @@ fn main() -> std::io::Result<()> {
let args = ew::get_args();
ew::runtime::update_data_path(&args.path);
ew::runtime::update_masterdata_path(&args.masterdata);
ew::runtime::update_mod_paths(&args.mods);
ew::run_server(false)
}

View File

@@ -41,6 +41,15 @@ pub struct Args {
#[arg(long, default_value_t = false, help = "Enable the custom songs feature (upload/browse/download). Disabled by default; every custom-songs endpoint and webui element is hidden unless this is set")]
pub enable_custom_songs: bool,
#[arg(long, default_value_t = false, help = "Enable the custom cards feature (upload/manage runtime cards and characters). Disabled by default; every custom-cards endpoint and webui element is hidden unless this is set")]
pub enable_custom_cards: bool,
#[arg(long, default_value_t = false, help = "Enable the custom 3D MV feature (upload/manage MMD model+motion MVs for custom songs). Disabled by default; every custom-3dmv endpoint and webui element is hidden unless this is set")]
pub enable_custom_3dmv: bool,
#[arg(long, value_delimiter = ',', help = "User id(s) of the server owner(s), repeatable or comma separated. Owner accounts implicitly hold every permission scope and are the only ones able to grant scopes on a fresh install")]
pub owner: Vec<i64>,
#[arg(long, default_value_t = false, help = "Purge dead user accounts on startup")]
pub purge: bool,
@@ -62,8 +71,8 @@ pub struct Args {
#[arg(long, default_value = "", help = "Asset hash for JP Android client.")]
pub jp_android_asset_hash: String,
#[arg(long, default_value = "", help = "Asset version for windows client.")]
pub windows_asset_version: String,
#[arg(long, default_value = "", help = "Asset version for overridden asset hashes.")]
pub asset_version: String,
#[arg(long, default_value = "", help = "Asset hash for windows client.")]
pub windows_asset_hash: String,
@@ -71,11 +80,8 @@ pub struct Args {
#[arg(long, default_value = "", help = "Path to image assets.")]
pub image_asset_path: String,
#[arg(long, default_value = "", help = "Optional directory to load asset lists and master data CSVs from at runtime. Layout mirrors the bundled assets (asset_lists/, csv/, csv-en/). Missing files fall back to the internal copies.")]
pub masterdata: String,
#[arg(long = "mod", value_name = "DIR", action = clap::ArgAction::Append, help = "Path to a mod directory layered on top of --masterdata + the bundled defaults. May be passed multiple times. Each mod dir mirrors the masterdata layout (asset_lists/, csv/, csv-en/, userdata/) but only needs to include the files it adds rows to. CSV rows merge by primary key (first column), asset_lists entries merge by m_identifier, new_user.json top-level arrays union. Later --mod wins on collisions.")]
pub mods: Vec<String>
#[arg(long, default_value = "", help = "Optional directory to load master data CSVs from at runtime. Layout mirrors the bundled assets (csv/, csv-en/). Missing files fall back to the internal copies.")]
pub masterdata: String
}
pub fn get_args() -> Args {

View File

@@ -10,6 +10,7 @@ pub mod home;
pub mod lottery;
pub mod friend;
pub mod live;
pub mod multi_live;
pub mod event;
pub mod chat;
pub mod story;
@@ -21,6 +22,9 @@ pub mod web;
pub mod card;
pub mod shop;
pub mod custom_song;
pub mod custom_card;
pub mod custom_3dmv;
pub mod rich_text;
pub mod webui;
pub mod clear_rate;
pub mod exchange;
@@ -28,28 +32,128 @@ pub mod items;
pub mod databases;
pub mod location;
pub mod event_ranking;
pub mod asset_lists;
mod master_data;
mod tools;
use actix_web::{
HttpResponse,
HttpRequest,
FromRequest,
Responder,
body::{BoxBody, MessageBody},
dev::{ServiceRequest, ServiceResponse},
dev::{Payload, ServiceRequest, ServiceResponse},
middleware::{from_fn, Next},
http::header::HeaderMap
};
use futures_util::future::LocalBoxFuture;
use futures_util::FutureExt;
use jzon::{JsonValue, object};
use crate::encryption;
pub struct Body(pub JsonValue);
pub struct Login(pub String);
struct SessionError(HttpRequest);
impl std::fmt::Debug for SessionError {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "invalid session for uid {}", global::get_uid(self.0.headers()))
}
}
impl std::fmt::Display for SessionError {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{:?}", self)
}
}
impl actix_web::ResponseError for SessionError {
fn error_response(&self) -> HttpResponse {
println!("Rejecting request from uid {}: bad session", global::get_uid(self.0.headers()));
global::api_error(&self.0, global::RESULT_SESSION)
}
}
pub struct Session {
pub key: String,
pub body: JsonValue,
}
pub trait ApiBody {
fn into_json(self) -> JsonValue;
}
impl ApiBody for JsonValue {
fn into_json(self) -> JsonValue {
self
}
}
pub struct Api<T = JsonValue>(pub Option<T>);
impl<T: ApiBody> Responder for Api<T> {
type Body = BoxBody;
fn respond_to(self, req: &HttpRequest) -> HttpResponse {
global::api(req, self.0.map(ApiBody::into_json))
}
}
impl FromRequest for Body {
type Error = actix_web::Error;
type Future = LocalBoxFuture<'static, Result<Self, Self::Error>>;
fn from_request(req: &HttpRequest, payload: &mut Payload) -> Self::Future {
let fut = String::from_request(req, payload);
async move {
Ok(Body(jzon::parse(&encryption::decrypt_packet(&fut.await?).unwrap()).unwrap()))
}.boxed_local()
}
}
impl FromRequest for Login {
type Error = actix_web::Error;
type Future = LocalBoxFuture<'static, Result<Self, Self::Error>>;
fn from_request(req: &HttpRequest, payload: &mut Payload) -> Self::Future {
let headers = req.headers().clone();
let req = req.clone();
let fut = String::from_request(&req, payload);
async move {
let key = global::get_login(&headers, &encryption::decrypt_packet(&fut.await?).unwrap());
if key.is_empty() {
return Err(SessionError(req).into());
}
Ok(Login(key))
}.boxed_local()
}
}
impl FromRequest for Session {
type Error = actix_web::Error;
type Future = LocalBoxFuture<'static, Result<Self, Self::Error>>;
fn from_request(req: &HttpRequest, payload: &mut Payload) -> Self::Future {
let headers = req.headers().clone();
let req = req.clone();
let fut = String::from_request(&req, payload);
async move {
let body = encryption::decrypt_packet(&fut.await?).unwrap();
let key = global::get_login(&headers, &body);
if key.is_empty() {
return Err(SessionError(req).into());
}
Ok(Session { key, body: jzon::parse(&body).unwrap() })
}.boxed_local()
}
}
// Requests without client headers (a browser) get the webui
async fn webui_fallback(req: ServiceRequest, next: Next<impl MessageBody + 'static>) -> Result<ServiceResponse<BoxBody>, actix_web::Error> {
let is_from_game = req.headers().get("aoharu-asset-version").is_some() || req.path().starts_with("/api/webui");
if !is_from_game {
let req = req.into_parts().0;
let resp = if crate::get_args().hidden {
not_found(req.headers())
not_found(&req)
} else {
webui::main(req.clone())
};
@@ -58,6 +162,16 @@ async fn webui_fallback(req: ServiceRequest, next: Next<impl MessageBody + 'stat
Ok(next.call(req).await?.map_into_boxed_body())
}
async fn asset_gate(req: ServiceRequest, next: Next<impl MessageBody + 'static>) -> Result<ServiceResponse<BoxBody>, actix_web::Error> {
let check_hash = !matches!(req.path(), "/api/start" | "/api/start/assetHash");
if let Some(code) = global::check_asset_headers(req.headers(), check_hash) {
let req = req.into_parts().0;
let resp = global::api_error(&req, code);
return Ok(ServiceResponse::new(req, resp));
}
Ok(next.call(req).await?.map_into_boxed_body())
}
fn unhandled(req: &HttpRequest, body: String) -> Option<JsonValue> {
if body != String::new() {
println!("{}", encryption::decrypt_packet(&body).unwrap_or(body));
@@ -66,20 +180,20 @@ fn unhandled(req: &HttpRequest, body: String) -> Option<JsonValue> {
None
}
fn not_found(headers: &HeaderMap) -> HttpResponse {
fn not_found(req: &HttpRequest) -> HttpResponse {
let rv = object!{
"code": 4,
"server_time": global::timestamp(),
"message": ""
};
global::send(rv, 0, headers)
global::send(rv, 0, req)
}
// Fallback for paths no actix route matched. Game endpoints live in each module's routes()
async fn api_req(req: HttpRequest, body: String) -> HttpResponse {
let args = crate::get_args();
if args.hidden && (req.path().starts_with("/api/webui/") || !(req.path().starts_with("/api") || req.path().starts_with("/v1.0"))) {
return not_found(req.headers());
return not_found(&req);
} else if !req.path().starts_with("/api") && !req.path().starts_with("/v1.0") {
return webui::main(req);
}
@@ -91,11 +205,11 @@ pub async fn request(req: HttpRequest, body: String) -> HttpResponse {
let args = crate::get_args();
let headers = req.headers();
if args.hidden && (req.path().starts_with("/api/webui/") || req.path().starts_with("/live_clear_rate.html")) {
return not_found(headers);
return not_found(&req);
}
if headers.get("aoharu-asset-version").is_none() && req.path().starts_with("/api") && !req.path().starts_with("/api/webui") {
if args.hidden {
return not_found(headers);
return not_found(&req);
} else {
return webui::main(req);
}
@@ -107,11 +221,12 @@ pub async fn request(req: HttpRequest, body: String) -> HttpResponse {
"/api/webui/import" => webui::import(req, body),
"/api/webui/set_time" => webui::set_time(req, body),
"/api/webui/cheat" => webui::cheat(req, body),
"/api/webui/grantPermission" => webui::grant_permission(req, body),
"/api/webui/revokePermission" => webui::revoke_permission(req, body),
_ => api_req(req, body).await
}
} else {
match req.path() {
"/web/announcement" => web::announcement(req),
"/api/webui/userInfo" => webui::user(req),
"/live_clear_rate.html" => clear_rate::clearrate_html(req).await,
"/webui/logout" => webui::logout(req),
@@ -121,6 +236,12 @@ pub async fn request(req: HttpRequest, body: String) -> HttpResponse {
"/api/webui/listMusic" => webui::get_music_info(req),
"/api/webui/listLoginBonus" => webui::list_login_bonus(req),
"/api/webui/listItems" => webui::list_items(req),
"/api/webui/listPermissions" => webui::list_permissions(req),
"/api/webui/listCharacters" => webui::list_characters(req),
"/api/webui/listSkillCenters" => webui::list_skill_centers(req),
"/api/webui/customCardLimits" => webui::custom_card_limits(req),
"/api/webui/custom3dmvLimits" => webui::custom_3dmv_limits(req),
"/api/webui/myScopes" => webui::my_scopes(req),
_ => api_req(req, body).await
}
}
@@ -130,11 +251,10 @@ pub fn configure(cfg: &mut actix_web::web::ServiceConfig) {
cfg.configure(crate::static_handlers::routes);
cfg.service(
actix_web::web::scope("/api")
.configure(asset_lists::routes)
.configure(master_data::routes)
.service(
actix_web::web::scope("")
.wrap(from_fn(webui_fallback))
.wrap(from_fn(asset_gate))
// Split between user (claiming) and home (listing)
.service(
actix_web::web::resource("/gift")
@@ -144,6 +264,8 @@ pub fn configure(cfg: &mut actix_web::web::ServiceConfig) {
.configure(card::routes)
.configure(chat::routes)
.configure(custom_song::routes)
.configure(custom_card::routes)
.configure(custom_3dmv::routes)
.configure(debug::routes)
.configure(event::routes)
.configure(exchange::routes)
@@ -155,6 +277,7 @@ pub fn configure(cfg: &mut actix_web::web::ServiceConfig) {
.configure(login::routes)
.configure(lottery::routes)
.configure(mission::routes)
.configure(multi_live::routes)
.configure(notice::routes)
.configure(purchase::routes)
.configure(serial_code::routes)
@@ -170,4 +293,7 @@ pub fn configure(cfg: &mut actix_web::web::ServiceConfig) {
.configure(gree::routes)
);
cfg.configure(custom_song::web_routes);
cfg.configure(custom_card::web_routes);
cfg.configure(custom_3dmv::web_routes);
cfg.configure(web::routes);
}

View File

@@ -1,108 +0,0 @@
use actix_web::{HttpRequest, web, Responder, HttpResponse};
use actix_web::http::header::ContentType;
use jzon::object;
use lazy_static::lazy_static;
use std::collections::HashMap;
use std::sync::Mutex;
use crate::include_file;
lazy_static! {
static ref MERGED_CACHE: Mutex<HashMap<String, String>> = Mutex::new(HashMap::new());
}
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.service(
web::scope("/assetLists")
.route("/supported", web::get().to(supported))
.route("{platform}/{LANG}", web::get().to(get))
);
}
async fn get(_req: HttpRequest) -> impl Responder {
let mut response = object!{};
response["Bundle"] = load_list("Bundle").into();
response["Movie"] = load_list("Movie").into();
response["Sound"] = load_list("Sound").into();
let body = jzon::stringify(response);
HttpResponse::Ok()
.insert_header(("content-type", ContentType::json()))
.insert_header(("content-length", body.len()))
.body(body)
}
fn load_list(name: &str) -> String {
if let Some(cached) = MERGED_CACHE.lock().unwrap().get(name) {
return cached.clone();
}
let rel = format!("asset_lists/{}.json", name);
let base = crate::runtime::read_masterdata_file(&rel)
.and_then(|b| String::from_utf8(b).ok())
.unwrap_or_else(|| match name {
"Bundle" => include_file!("src/router/asset_lists/Bundle.json"),
"Movie" => include_file!("src/router/asset_lists/Movie.json"),
"Sound" => include_file!("src/router/asset_lists/Sound.json"),
_ => unreachable!(),
});
let mod_files = crate::runtime::read_mod_files(&rel);
let merged = if mod_files.is_empty() {
base
} else {
merge_asset_list(name, base, mod_files)
};
MERGED_CACHE.lock().unwrap().insert(name.to_string(), merged.clone());
merged
}
fn merge_asset_list(name: &str, base: String, mod_files: Vec<(String, Vec<u8>)>) -> String {
let mut root = match jzon::parse(&base) {
Ok(v) => v,
Err(_) => return base,
};
let mut by_ident: HashMap<String, usize> = HashMap::new();
if let jzon::JsonValue::Array(ref arr) = root["m_manifestCollection"] {
for (i, e) in arr.iter().enumerate() {
let id = e["m_identifier"].to_string();
by_ident.insert(id.to_string(), i);
}
}
for (mod_dir, bytes) in mod_files {
let Ok(s) = String::from_utf8(bytes) else { continue };
let Ok(mod_root) = jzon::parse(&s) else { continue };
let mod_entries = match mod_root["m_manifestCollection"] {
jzon::JsonValue::Array(ref arr) => arr.clone(),
_ => continue,
};
let mut added = 0usize;
let mut replaced = 0usize;
for entry in mod_entries {
let ident = entry["m_identifier"].as_str().unwrap_or("").to_string();
if ident.is_empty() {
continue;
}
if let Some(&idx) = by_ident.get(&ident) {
root["m_manifestCollection"][idx] = entry;
replaced += 1;
} else {
let idx = root["m_manifestCollection"].len();
let _ = root["m_manifestCollection"].push(entry);
by_ident.insert(ident, idx);
added += 1;
}
}
if added > 0 || replaced > 0 {
println!(
"[mod {}] {}.json: +{} new entries, {} replaced",
mod_dir, name, added, replaced
);
}
}
jzon::stringify(root)
}
async fn supported() -> impl Responder {
"SUPPORTED"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,7 @@
use jzon::{object, array, JsonValue};
use actix_web::{web, HttpRequest, Responder};
use crate::router::{userdata, global, items, databases};
use crate::encryption;
use crate::router::{global, userdata, items, databases, Session, Api};
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.service(
@@ -13,8 +12,32 @@ pub fn routes(cfg: &mut web::ServiceConfig) {
);
}
// Custom cards live at id prefix 10000+ (imported 10000-14999, new 15000+).
// Like custom songs they need a protocol version (global::PROTOCOL_HEADER):
// clients below it can't resolve the ids
pub const PROTOCOL_VERSION: u32 = 2;
pub fn is_custom(master_card_id: i64) -> bool {
master_card_id >= 100_000_000
}
pub fn client_supports_custom_cards(req: &HttpRequest) -> bool {
global::client_protocol_version(req) >= PROTOCOL_VERSION
}
pub fn account_supports_custom_cards(auth_key: &str) -> bool {
userdata::get_protocol_version(auth_key) >= PROTOCOL_VERSION
}
pub fn account_has_custom_cards(user: &JsonValue) -> bool {
user["card_list"].members().any(|card| is_custom(card["master_card_id"].as_i64().unwrap_or(0)))
}
// Card rows come through custom_card::card_info: the baked CARD_LIST for
// official/imported ids, the custom-card db for the runtime band - a runtime
// card has no CARD_LIST row and would otherwise cap at 0 here
fn exp_cap(master_card_id: i64, evolved: bool) -> i64 {
let card = &databases::CARD_LIST[master_card_id.to_string()];
let card = crate::router::custom_card::card_info(master_card_id);
let rarity = card["rarity"].to_string();
let curve = card["masterCardLevelId"].as_i64().unwrap_or(0);
let max_level = if evolved {
@@ -26,7 +49,7 @@ fn exp_cap(master_card_id: i64, evolved: bool) -> i64 {
}
fn skill_exp_cap(master_card_id: i64) -> i64 {
let card = &databases::CARD_LIST[master_card_id.to_string()];
let card = crate::router::custom_card::card_info(master_card_id);
let rarity = card["rarity"].to_string();
let skill_curve = databases::CARD_RARITY[&rarity]["masterCardSkillLevelId"].to_string();
databases::CARD_SKILL_MAX[skill_curve].as_i64().unwrap_or(i64::MAX)
@@ -106,9 +129,7 @@ fn do_reinforce(user: &mut JsonValue, body: &JsonValue, exp_id: &str, money_mult
object!{}
}
async fn reinforce(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn reinforce(Session { key, body }: Session) -> impl Responder {
let mut user = userdata::get_acc(&key);
let mut clear_mission_ids = array![];
@@ -116,7 +137,7 @@ async fn reinforce(req: HttpRequest, body: String) -> impl Responder {
userdata::save_acc(&key, user.clone());
global::api(&req, Some(object!{
Api(Some(object!{
card: card,
item_list: material_item_list(&user, &body),
point_list: user["point_list"].clone(),
@@ -124,9 +145,7 @@ async fn reinforce(req: HttpRequest, body: String) -> impl Responder {
}))
}
async fn skill_reinforce(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn skill_reinforce(Session { key, body }: Session) -> impl Responder {
let mut user = userdata::get_acc(&key);
let mut clear_mission_ids = array![];
@@ -134,7 +153,7 @@ async fn skill_reinforce(req: HttpRequest, body: String) -> impl Responder {
userdata::save_acc(&key, user.clone());
global::api(&req, Some(object!{
Api(Some(object!{
card: card,
item_list: material_item_list(&user, &body),
point_list: user["point_list"].clone(),
@@ -142,9 +161,7 @@ async fn skill_reinforce(req: HttpRequest, body: String) -> impl Responder {
}))
}
async fn evolve(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn evolve(Session { key, body }: Session) -> impl Responder {
let mut user = userdata::get_acc(&key);
let mut chats = userdata::get_acc_chats(&key);
let mut missions = userdata::get_acc_missions(&key);
@@ -156,7 +173,7 @@ async fn evolve(req: HttpRequest, body: String) -> impl Responder {
userdata::save_acc_chats(&key, chats);
userdata::save_acc_missions(&key, missions);
global::api(&req, Some(object!{
Api(Some(object!{
card: card,
item_list: material_item_list(&user, &body),
point_list: user["point_list"].clone(),

View File

@@ -1,18 +1,39 @@
use jzon::{object, array, JsonValue};
use actix_web::{web, HttpRequest, Responder};
use actix_web::{web, Responder};
use crate::router::{global, items, userdata, databases};
use crate::encryption;
use crate::router::{global, items, userdata, databases, Login, Session, Api};
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.service(
web::scope("/chat")
.route("/home", web::post().to(home))
.route("/talk/get_stamp", web::get().to(get_stamp))
.route("/talk/start", web::post().to(start))
.route("/talk/end", web::post().to(end))
);
}
// The stamps this account owns. ew does not track stamp unlocks, so everyone has the
// masterdata initial set — the same list /chat/home reports, deliberately from one
// source so the two endpoints can never disagree.
fn owned_stamp_ids() -> JsonValue {
databases::INITIAL_CHAT_STAMPS.clone()
}
// GET /api/chat/talk/get_stamp (Protocol.send_get_stamp, FuncId.GET_STAMP).
// RecvGetStampRData carries a single `master_chat_stamp_ids` array, which its Notify()
// feeds to CallOnUpdateChatStampListNotify — the same sink RecvChatHomeRData uses, so
// the stamp picker ends up with whatever this returns. The client sends no parameters.
//
// This endpoint appears in neither official capture (0 hits across the 288MB JP and
// 1.4GB EN logs), so the shape is taken from the client class and the contents from the
// /chat/home captures that do exist and carry the same field.
async fn get_stamp(Login(_key): Login) -> impl Responder {
Api(Some(object!{
"master_chat_stamp_ids": owned_stamp_ids()
}))
}
pub fn add_chat(id: i64, num: i64, chats: &mut JsonValue) -> bool {
for data in chats.members() {
if data["chat_id"] == id && data["room_id"] == num {
@@ -38,8 +59,7 @@ pub fn add_chat_from_chapter_id(chapter_id: i64, chats: &mut JsonValue) -> bool
add_chat(chapter["masterChatId"].as_i64().unwrap(), chapter["roomId"].as_i64().unwrap(), chats)
}
async fn home(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
async fn home(Login(key): Login) -> impl Responder {
let chats = userdata::get_acc_chats(&key);
let mut rooms = array![];
@@ -47,21 +67,19 @@ async fn home(req: HttpRequest, body: String) -> impl Responder {
rooms.push(databases::CHATS[data["chat_id"].to_string()][data["room_id"].to_string()]["id"].clone()).unwrap();
}
global::api(&req, Some(object!{
Api(Some(object!{
"progress_list": chats,
"master_chat_room_ids": rooms,
"master_chat_stamp_ids": [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,44,45,46,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,11001003,22001001,33001001,44001002],
"master_chat_stamp_ids": owned_stamp_ids(),
"master_chat_attachment_ids": []
}))
}
async fn start(req: HttpRequest, _body: String) -> impl Responder {
global::api(&req, Some(object!{"select_talk_id_list":[],"get_item_list":[],"is_read":0}))
async fn start() -> impl Responder {
Api(Some(object!{"select_talk_id_list":[],"get_item_list":[],"is_read":0}))
}
async fn end(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn end(Session { key, body }: Session) -> impl Responder {
let mut missions = userdata::get_acc_missions(&key);
let mut chats = userdata::get_acc_chats(&key);
@@ -77,5 +95,43 @@ async fn end(req: HttpRequest, body: String) -> impl Responder {
}
}
global::api(&req, Some(array![]))
Api(Some(array![]))
}
#[cfg(test)]
mod tests {
use super::*;
// Verbatim from an official /api/chat/home capture (JP log, the 65-occurrence
// baseline seen on accounts that had earned no extra stamps yet). Both the JP and EN
// chat_stamp tables reproduce it exactly from _initialStamp, which is what lets
// get_stamp serve masterdata instead of a hardcoded literal.
const OFFICIAL_INITIAL_STAMPS: [i64; 97] = [
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,
31,32,33,34,35,36,37,38,39,40,41,43,44,45,46,48,49,50,51,52,53,54,55,56,57,58,
59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,
85,86,87,88,89,90,91,92,93,94,95,96,11001003,22001001,33001001,44001002
];
#[test]
fn the_initial_stamp_set_matches_official() {
let ids: Vec<i64> = owned_stamp_ids().members().map(|s| s.as_i64().unwrap()).collect();
assert_eq!(ids, OFFICIAL_INITIAL_STAMPS.to_vec());
// Order matters: the official list is masterdata order, not sorted (the 11xxxxxx
// band trails the small ids).
assert_eq!(ids.first(), Some(&1));
assert_eq!(ids.last(), Some(&44001002));
// The gaps are real - 18, 42 and 47 are not initial stamps.
for missing in [18, 42, 47] {
assert!(!ids.contains(&missing), "{missing} should not be an initial stamp");
}
}
#[test]
fn get_stamp_and_chat_home_cannot_disagree() {
// Both endpoints read the one source; this is what stops /chat/home's list and
// the stamp picker's list from drifting apart.
assert_eq!(owned_stamp_ids(), *databases::INITIAL_CHAT_STAMPS);
assert!(!owned_stamp_ids().is_empty());
}
}

View File

@@ -4,9 +4,8 @@ use rusqlite::params;
use std::sync::Mutex;
use lazy_static::lazy_static;
use crate::encryption;
use crate::sql::SQLite;
use crate::router::{databases, global, userdata};
use crate::router::{databases, global, userdata, Session, Api};
use crate::include_file;
use crate::router::tools::guest;
@@ -69,14 +68,14 @@ fn setup_tables(conn: &rusqlite::Connection) {
);").unwrap();
}
fn update_live_score(id: i64, uid: i64, score: i64) {
if uid == 0 || score == 0 {
return;
}
let info = DATABASE.lock_and_select("SELECT score_data FROM scores WHERE live_id=?1", params!(id)).unwrap_or(String::from("[]"));
let scores = jzon::parse(&info).unwrap();
// Merges this play into the song's top-10 board. Pure so the whole read-modify-write can
// sit inside one transaction, and so the keep-best rule is testable on its own.
//
// The board is per-song, not per-account: `scores` is keyed by live_id alone and the user
// lives inside the JSON blob. A user already on the board keeps whichever of their two
// scores is higher — a replay that does not beat the stored one is dropped (`None`), which
// is what makes a repeated or duplicated end idempotent rather than additive.
fn merge_live_score(scores: &JsonValue, uid: i64, score: i64) -> Option<JsonValue> {
let mut result = array![];
let mut current = 0;
let mut added = false;
@@ -100,7 +99,8 @@ fn update_live_score(id: i64, uid: i64, score: i64) {
}
}
if scores[i]["user"].as_i64().unwrap() == uid && !added {
return;
// Already on the board with a better score — keep it, drop this play.
return None;
}
if scores[i]["user"].as_i64().unwrap() == uid {
continue;
@@ -108,13 +108,41 @@ fn update_live_score(id: i64, uid: i64, score: i64) {
result.push(scores[i].clone()).unwrap();
current += 1;
}
if added {
if DATABASE.lock_and_select("SELECT live_id FROM scores WHERE live_id=?1", params!(id)).is_ok() {
DATABASE.lock_and_exec("UPDATE scores SET score_data=?1 WHERE live_id=?2", params!(jzon::stringify(result), id));
} else {
DATABASE.lock_and_exec("INSERT INTO scores (score_data, live_id) VALUES (?1, ?2)", params!(jzon::stringify(result), id));
}
if added { Some(result) } else { None }
}
fn update_live_score(id: i64, uid: i64, score: i64) {
if uid == 0 || score == 0 {
return;
}
// One transaction for read + merge + write. Previously this SELECTed to choose between
// UPDATE and INSERT on separate connections, so two ends landing together for a song
// with no row yet both took the INSERT branch and the loser panicked the worker on
// `UNIQUE constraint failed: scores.live_id`. Two clients finishing the same multi
// live make that the normal case, not a rare race.
let write = DATABASE.lock_and_transact(|conn| {
let stored: String = conn
.query_row("SELECT score_data FROM scores WHERE live_id=?1", params!(id), |row| row.get(0))
.unwrap_or_else(|_| String::from("[]"));
let scores = jzon::parse(&stored).unwrap_or_else(|_| array![]);
let Some(result) = merge_live_score(&scores, uid, score) else {
return Ok(());
};
// Atomic upsert: no branch left for a concurrent writer to slip between.
conn.execute(
"INSERT INTO scores (live_id, score_data) VALUES (?1, ?2)
ON CONFLICT(live_id) DO UPDATE SET score_data=excluded.score_data",
params!(id, jzon::stringify(result))
)?;
Ok(())
});
if let Err(e) = write {
println!("Failed to record score for live {id}: {e}");
}
}
@@ -122,31 +150,52 @@ fn update_live_score(id: i64, uid: i64, score: i64) {
pub fn purge_live(live_id: i64) {
DATABASE.lock_and_exec("DELETE FROM lives WHERE live_id=?1", params!(live_id));
DATABASE.lock_and_exec("DELETE FROM scores WHERE live_id=?1", params!(live_id));
invalidate_cache();
}
pub fn invalidate_cache() {
crate::lock_onto_mutex!(CACHED_DATA).take();
crate::lock_onto_mutex!(CACHED_HTML_DATA).take();
}
// The clear-rate counter column this play lands in, or None for a level outside 1-4.
// Names come from this closed set, never from request data, so it is safe to interpolate.
fn clear_rate_column(level: i32, failed: bool) -> Option<&'static str> {
let tier = match level {
1 => "normal",
2 => "hard",
3 => "expert",
4 => "master",
_ => return None
};
Some(match (tier, failed) {
("normal", true) => "normal_failed", ("normal", false) => "normal_pass",
("hard", true) => "hard_failed", ("hard", false) => "hard_pass",
("expert", true) => "expert_failed", ("expert", false) => "expert_pass",
(_, true) => "master_failed", (_, false) => "master_pass"
})
}
pub fn live_completed(id: i64, level: i32, failed: bool, score: i64, uid: i64) {
update_live_score(id, uid, score);
match DATABASE.get_live_data(id) {
Ok(info) => {
let value = format!("{}_{}",
if 1 == level { "normal" } else if 2 == level { "hard" } else if 3 == level { "expert" } else { "master" },
if failed { "failed" } else { "pass" }
);
let new_info = if 1 == level && failed { info.normal_failed }
else if 1 == level && !failed { info.normal_pass }
else if 2 == level && failed { info.hard_failed }
else if 2 == level && !failed { info.hard_pass }
else if 3 == level && failed { info.expert_failed }
else if 3 == level && !failed { info.expert_pass }
else if 4 == level && failed { info.master_failed }
else if 4 == level && !failed { info.master_pass } else { return; };
DATABASE.lock_and_exec(&format!("UPDATE lives SET {}=?1 WHERE live_id=?2", value), params!(new_info + 1, info.live_id));
},
Err(_) => {
DATABASE.lock_and_exec("INSERT INTO lives (live_id, normal_failed, normal_pass, hard_failed, hard_pass, expert_failed, expert_pass, master_failed, master_pass) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9)", params!(
let Some(column) = clear_rate_column(level, failed) else {
return;
};
// `lives` is keyed by live_id alone and had the same select-then-INSERT-or-UPDATE
// split as `scores`, so it could panic the same way on a first-ever concurrent play
// (and lost counts whenever two plays overlapped). One upsert does both branches
// atomically and increments in SQL rather than read-modify-write in Rust.
let write = DATABASE.lock_and_transact(|conn| {
conn.execute(
&format!(
"INSERT INTO lives (live_id, normal_failed, normal_pass, hard_failed, hard_pass,
expert_failed, expert_pass, master_failed, master_pass)
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9)
ON CONFLICT(live_id) DO UPDATE SET {column} = {column} + 1"
),
params!(
id,
if 1 == level && failed { 1 } else { 0 },
if 1 == level && !failed { 1 } else { 0 },
@@ -156,9 +205,14 @@ pub fn live_completed(id: i64, level: i32, failed: bool, score: i64, uid: i64) {
if 3 == level && !failed { 1 } else { 0 },
if 4 == level && failed { 1 } else { 0 },
if 4 == level && !failed { 1 } else { 0 }
));
},
};
)
)?;
Ok(())
});
if let Err(e) = write {
println!("Failed to record clear rate for live {id}: {e}");
}
}
fn get_song_title(live_id: i32, english: bool) -> String {
@@ -170,9 +224,22 @@ fn get_song_title(live_id: i32, english: bool) -> String {
if !details.is_null() {
return details["name"].to_string();
}
// Custom songs aren't in the official music mst (their live_id ==
// music_id). PUBLIC ones show their real title; private/shared ones are
// already filtered out of the page and would stay "Unknown Song" even if
// one slipped through - the lookup only ever answers for public songs
if let Some(title) = crate::router::custom_song::public_song_title(live_id as i64, english) {
return title;
}
String::from("Unknown Song")
}
// Titles land inside HTML text and attributes; custom song names are user
// input, so escape them (official names contain nothing that needs it)
fn html_escape(text: &str) -> String {
text.replace('&', "&amp;").replace('<', "&lt;").replace('>', "&gt;").replace('"', "&quot;")
}
fn get_pass_percent(failed: i64, pass: i64) -> String {
let total = (failed + pass) as f64;
if failed + pass == 0 {
@@ -231,12 +298,28 @@ async fn get_clearrate_json() -> JsonValue {
}
pub async fn clearrate(req: HttpRequest) -> impl Responder {
global::api(&req, Some(get_clearrate_json().await))
let mut data = get_clearrate_json().await;
let hidden = crate::router::custom_song::hidden_live_ids_for_user(global::get_uid(req.headers()));
if !hidden.is_empty() {
let rates = data["all_user_clear_rate"].clone();
let ids = data["master_music_ids"].clone();
let mut new_rates = array![];
let mut new_ids = array![];
for (i, rate) in rates.members().enumerate() {
if hidden.contains(rate["master_live_id"].as_i64().unwrap()) {
continue;
}
new_rates.push(rate.clone()).unwrap();
new_ids.push(ids[i].clone()).unwrap();
}
data["all_user_clear_rate"] = new_rates;
data["master_music_ids"] = new_ids;
}
Api(Some(data))
}
pub async fn ranking(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
pub async fn ranking(req: HttpRequest, Session { key, body }: Session) -> impl Responder {
let protocol = crate::router::global::client_protocol_version(&req);
let self_id = userdata::get_acc(&key)["user"]["id"].as_i64().unwrap();
let live = body["master_live_id"].as_i64().unwrap();
@@ -247,9 +330,14 @@ pub async fn ranking(req: HttpRequest, body: String) -> impl Responder {
for (i, data) in scores.members().enumerate() {
let uid = data["user"].as_i64().unwrap();
let user = guest::get_user(uid, &object![], guest::UserView::Ranking);
let user = guest::get_user(uid, &object![], guest::UserView::Ranking, protocol);
let user_obj = if uid == self_id {
userdata::get_acc_from_uid(uid)["user"].clone()
// The client wants the fields get_user hides from other players
let mut self_user = object!{
user: userdata::get_acc_from_uid(uid)["user"].clone()
};
guest::proxy_user_cards(&mut self_user, protocol);
self_user["user"].clone()
} else {
user["user"].clone()
};
@@ -264,18 +352,22 @@ pub async fn ranking(req: HttpRequest, body: String) -> impl Responder {
}).unwrap();
}
global::api(&req, Some(object!{
Api(Some(object!{
"ranking_list": rank
}))
}
fn get_html() -> JsonValue {
let lives = DATABASE.lock_and_select_all("SELECT live_id FROM lives", params!()).unwrap();
let hidden = crate::router::custom_song::hidden_live_ids();
let mut table = String::new();
for id in lives.members() {
let live_id = id.as_i64().unwrap();
if hidden.contains(live_id) {
continue;
}
let info = match DATABASE.get_live_data(live_id) {
Ok(i) => i,
@@ -287,8 +379,8 @@ fn get_html() -> JsonValue {
if total == 0 { 0.0 } else { pass as f64 / total as f64 }
};
let title_jp = get_song_title(info.live_id, false);
let title_en = get_song_title(info.live_id, true);
let title_jp = html_escape(&get_song_title(info.live_id, false));
let title_en = html_escape(&get_song_title(info.live_id, true));
let normal_txt = get_pass_percent(info.normal_failed, info.normal_pass);
let hard_txt = get_pass_percent(info.hard_failed, info.hard_pass);
@@ -366,3 +458,107 @@ pub async fn clearrate_html(_req: HttpRequest) -> HttpResponse {
.content_type(ContentType::html())
.body(html)
}
#[cfg(test)]
mod tests {
use super::*;
fn board(live_id: i64) -> JsonValue {
let stored = DATABASE
.lock_and_select("SELECT score_data FROM scores WHERE live_id=?1", params!(live_id))
.unwrap_or_else(|_| String::from("[]"));
jzon::parse(&stored).unwrap()
}
fn passes(live_id: i64) -> i64 {
DATABASE.get_live_data(live_id).map(|l| l.master_pass).unwrap_or(0)
}
#[test]
fn merge_keeps_the_users_best_score() {
let existing = array![object!{user: 7, score: 900}];
// A better score replaces the stored one rather than adding a second entry.
let better = merge_live_score(&existing, 7, 1000).expect("a better score is recorded");
assert_eq!(better.len(), 1);
assert_eq!(better[0]["score"].as_i64(), Some(1000));
// A worse or equal replay is dropped entirely — this is what makes a repeated
// end idempotent instead of appending the same user twice.
assert!(merge_live_score(&existing, 7, 800).is_none());
assert!(merge_live_score(&existing, 7, 900).is_none());
// A different user is ranked against the board, best first.
let other = merge_live_score(&existing, 8, 950).expect("a new user is recorded");
assert_eq!(other.len(), 2);
assert_eq!(other[0]["user"].as_i64(), Some(8));
assert_eq!(other[1]["user"].as_i64(), Some(7));
}
#[test]
fn a_duplicate_end_does_not_double_the_board_entry() {
let _lock = crate::runtime::lock_test_data_path();
let live_id = 990001;
live_completed(live_id, 4, false, 500000, 4242);
assert_eq!(board(live_id).len(), 1);
assert_eq!(passes(live_id), 1);
// The second end for the same session: same user, same score. The board must not
// grow, and this must not raise UNIQUE constraint failed: scores.live_id.
live_completed(live_id, 4, false, 500000, 4242);
assert_eq!(board(live_id).len(), 1, "the same user must not appear twice");
assert_eq!(board(live_id)[0]["score"].as_i64(), Some(500000));
}
// The actual regression: two ends for a song with no row yet, landing together. Both
// used to take the INSERT branch and the loser unwrapped a ConstraintViolation into a
// worker panic. Two clients finishing one multi live makes this the normal case.
#[test]
fn concurrent_first_plays_of_one_song_do_not_collide() {
let _lock = crate::runtime::lock_test_data_path();
let live_id = 990002;
std::thread::scope(|s| {
for uid in [101i64, 102, 103, 104, 105, 106, 107, 108] {
s.spawn(move || live_completed(live_id, 4, false, 400000 + uid, uid));
}
});
// Every writer landed: no row lost to a race, none lost to a swallowed error.
assert_eq!(board(live_id).len(), 8);
assert_eq!(passes(live_id), 8, "clear-rate counts must not be lost either");
}
// The other half of /multi_live/end's score-board branch (the account's own high score
// is pinned in live.rs): a public multi live reaches live_completed with uid 0, so the
// play is counted and the board is left alone. /live/retire has always used the same
// signal for a failed live.
#[test]
fn a_play_with_no_user_counts_the_clear_but_not_the_board() {
let _lock = crate::runtime::lock_test_data_path();
let live_id = 990003;
live_completed(live_id, 4, false, 500000, 0);
assert_eq!(board(live_id).len(), 0, "an unranked play must not reach the board");
assert_eq!(passes(live_id), 1, "but it is still a play of the song");
// The same score from a real account does land, which is the private-room path.
live_completed(live_id, 4, false, 500000, 4243);
assert_eq!(board(live_id).len(), 1);
assert_eq!(passes(live_id), 2);
}
#[test]
fn clear_rate_columns_cover_every_level() {
assert_eq!(clear_rate_column(1, false), Some("normal_pass"));
assert_eq!(clear_rate_column(1, true), Some("normal_failed"));
assert_eq!(clear_rate_column(2, false), Some("hard_pass"));
assert_eq!(clear_rate_column(3, true), Some("expert_failed"));
assert_eq!(clear_rate_column(4, false), Some("master_pass"));
assert_eq!(clear_rate_column(4, true), Some("master_failed"));
// Level 0 (a skip ticket's "any level") writes no counter, as before.
assert_eq!(clear_rate_column(0, false), None);
assert_eq!(clear_rate_column(5, false), None);
}
}

1504
src/router/custom_3dmv.rs Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,88 @@
use std::collections::HashMap;
use std::fs;
use std::io::{Cursor, Read, Seek, Write};
use zip::write::SimpleFileOptions;
use super::{blob_path, field_key};
use crate::database::custom_3dmv as database;
// Export packages carry the stored blobs byte-for-byte (they ARE the original
// uploads - nothing is transcoded) plus the upload metadata, so an MV can be
// re-uploaded on any ew server. Layout of the zip:
// manifest.json {format, name, name_en, music_id, member_count}
// model_{slot} / motion_{slot} / facial_{slot} / camera / config / stage
// published is a per-server setting and deliberately not part of the package.
pub fn build(mv_id: i64) -> Result<Vec<u8>, String> {
let mv = database::get_mv(mv_id).ok_or(String::from("MV not found"))?;
let manifest = jzon::object!{
"format": 1,
"name": mv["name"].clone(),
"name_en": mv["name_en"].clone(),
"music_id": mv["music_id"].clone(),
"member_count": mv["member_count"].clone()
};
let mut zip = zip::ZipWriter::new(Cursor::new(Vec::new()));
let options = SimpleFileOptions::default();
let mut add = |name: &str, bytes: &[u8]| -> Result<(), String> {
zip.start_file(name, options).map_err(|e| e.to_string())?;
zip.write_all(bytes).map_err(|e| e.to_string())
};
add("manifest.json", jzon::stringify(manifest).as_bytes())?;
for file in mv["files"].members() {
let Some(name) = field_key(file) else { continue; };
let md5 = file["md5"].as_str().unwrap_or("");
let bytes = fs::read(blob_path(md5)).map_err(|e| e.to_string())?;
add(&name, &bytes)?;
}
Ok(zip.finish().map_err(|e| e.to_string())?.into_inner())
}
fn read_entry<R: Read + Seek>(archive: &mut zip::ZipArchive<R>, name: &str) -> Option<Vec<u8>> {
let mut file = archive.by_name(name).ok()?;
let mut bytes = Vec::new();
file.read_to_end(&mut bytes).ok()?;
Some(bytes)
}
// Expands a package into the same field map the upload form produces. The
// package's metadata wins over form fields - except music_id, which is a
// server-local id: a form-supplied song wins, and the manifest's only fills
// in when the form left it blank (same-server re-upload)
pub fn expand(package: &[u8], fields: &mut HashMap<String, Vec<u8>>) -> Result<(), String> {
let mut archive = zip::ZipArchive::new(Cursor::new(package)).map_err(|_| String::from("Package is not a valid zip file"))?;
let manifest = read_entry(&mut archive, "manifest.json").ok_or(String::from("Package has no manifest.json"))?;
let manifest = jzon::parse(&String::from_utf8_lossy(&manifest)).map_err(|_| String::from("Package manifest is not valid JSON"))?;
if manifest["format"].as_i64() != Some(1) {
return Err(String::from("Unsupported package format"));
}
for key in ["name", "name_en", "member_count"] {
if !manifest[key].is_null() {
fields.insert(key.to_string(), manifest[key].to_string().into_bytes());
}
}
if !fields.get("music_id").is_some_and(|v| !v.is_empty()) && !manifest["music_id"].is_null() {
fields.insert(String::from("music_id"), manifest["music_id"].to_string().into_bytes());
}
let member_count = manifest["member_count"].as_i64().unwrap_or(0);
for slot in 1..=member_count.clamp(0, super::MAX_MEMBER_COUNT) {
for role in ["model", "motion", "facial"] {
if let Some(bytes) = read_entry(&mut archive, &format!("{}_{}", role, slot)) {
fields.insert(format!("{}_{}", role, slot), bytes);
}
}
}
for name in ["camera", "config", "stage"] {
if let Some(bytes) = read_entry(&mut archive, name) {
fields.insert(String::from(name), bytes);
}
}
Ok(())
}

View File

@@ -0,0 +1,121 @@
// Structural validation of a VMD (Vocaloid Motion Data) upload: the header
// magic plus a full section walk with bounds checks, so a truncated or
// corrupt file is rejected cheaply at upload time instead of crashing a
// client mid-live. Nothing here decodes the animation - the stored bytes are
// served verbatim and the client owns the semantics.
//
// Layout (little-endian): 30-byte magic "Vocaloid Motion Data 0002"
// (NUL-padded), 20-byte model name, then up to 6 sections, each a uint32
// count followed by fixed-size records - bone (111), morph (23), camera (61),
// light (28), self-shadow (9) - and the property/IK section whose records are
// variable-sized (9 bytes + 21 per IK entry). Camera-only and motion-only
// files legitimately end early: EOF on a section boundary reads as count 0.
const MAGIC_V2: &[u8] = b"Vocaloid Motion Data 0002";
const MAGIC_V1: &[u8] = b"Vocaloid Motion Data file";
const HEADER_LEN: usize = 30 + 20;
// (record size, section name) for the fixed-size sections, in file order
const FIXED_SECTIONS: &[(usize, &str)] = &[
(111, "bone"),
(23, "morph"),
(61, "camera"),
(28, "light"),
(9, "self-shadow")
];
fn read_count(bytes: &[u8], offset: usize) -> Option<u32> {
let end = offset.checked_add(4)?;
Some(u32::from_le_bytes(bytes.get(offset..end)?.try_into().unwrap()))
}
pub fn validate(label: &str, bytes: &[u8]) -> Result<(), String> {
if bytes.len() < HEADER_LEN {
return Err(format!("'{}' is too short to be a VMD file", label));
}
if bytes.starts_with(MAGIC_V1) {
return Err(format!("'{}' is a version 1 VMD (\"Vocaloid Motion Data file\") - re-save it as version 2 in MMD", label));
}
if !bytes.starts_with(MAGIC_V2) {
return Err(format!("'{}' is not a VMD file (missing the \"Vocaloid Motion Data 0002\" header)", label));
}
let mut offset = HEADER_LEN;
for (record_size, section) in FIXED_SECTIONS {
// EOF exactly on a section boundary: the remaining sections are absent
if offset == bytes.len() {
return Ok(());
}
let Some(count) = read_count(bytes, offset) else {
return Err(format!("'{}' is truncated in the {} section header", label, section));
};
offset += 4;
let section_len = (count as usize).checked_mul(*record_size)
.filter(|len| offset.checked_add(*len).is_some_and(|end| end <= bytes.len()))
.ok_or(format!("'{}' is truncated: the {} section claims {} records past the end of the file", label, section, count))?;
offset += section_len;
}
// Property/IK section: uint32 frame, byte visible, uint32 ikCount, then
// ikCount x (20-byte bone name + 1-byte enabled)
if offset == bytes.len() {
return Ok(());
}
let Some(count) = read_count(bytes, offset) else {
return Err(format!("'{}' is truncated in the property section header", label));
};
offset += 4;
for _ in 0..count {
let Some(ik_count) = read_count(bytes, offset + 5) else {
return Err(format!("'{}' is truncated in the property section", label));
};
let record_len = (ik_count as usize).checked_mul(21)
.and_then(|len| len.checked_add(9))
.filter(|len| offset.checked_add(*len).is_some_and(|end| end <= bytes.len()))
.ok_or(format!("'{}' is truncated in the property section", label))?;
offset += record_len;
}
// Trailing bytes after the last section are tolerated, like MMD does
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn structure_walk_accepts_real_shapes_and_rejects_corruption() {
let vmd = crate::router::custom_3dmv::tests::test_vmd(1);
assert!(validate("motion_1", &vmd).is_ok());
// Camera-only file: sections end after camera
let cam = crate::router::custom_3dmv::tests::test_camera_vmd(2);
assert!(validate("camera", &cam).is_ok());
// A bare header with every section absent is structurally fine
let mut bare = Vec::new();
bare.extend(MAGIC_V2);
bare.resize(HEADER_LEN, 0);
assert!(validate("motion_1", &bare).is_ok());
// Truncations and lies
assert!(validate("motion_1", &vmd[..vmd.len() - 1]).unwrap_err().contains("truncated"));
assert!(validate("motion_1", &vmd[..HEADER_LEN + 2]).unwrap_err().contains("truncated"));
let mut liar = vmd.clone();
liar[HEADER_LEN] = 200; // bone count far past EOF
assert!(validate("motion_1", &liar).unwrap_err().contains("claims 200 records"));
// A count that would overflow the length math
let mut overflow = bare.clone();
overflow.extend(u32::MAX.to_le_bytes());
assert!(validate("motion_1", &overflow).unwrap_err().contains("truncated"));
// Wrong or old magic
assert!(validate("motion_1", b"garbage").unwrap_err().contains("too short"));
let mut wrong = vmd.clone();
wrong[0] = b'X';
assert!(validate("motion_1", &wrong).unwrap_err().contains("not a VMD"));
let mut v1 = vmd.clone();
v1[..MAGIC_V1.len()].copy_from_slice(MAGIC_V1);
assert!(validate("motion_1", &v1).unwrap_err().contains("version 1"));
}
}

2277
src/router/custom_card.rs Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,321 @@
// Art derivation for custom cards: every in-game kind is generated from one
// source artwork per variant, replicating the SIF1-import pipeline that built
// the 7 kinds for all 4,002 imported cards
// (sif1-cards/pipeline/07_prototype.py + 08_convert_all.py + 15_memoria_art.py
// + 17_skillcutin_art.py + 18_blank_art_fallback.py). Uploads are never
// rejected for dimensions: sources and per-kind overrides alike are
// center-crop-covered and Lanczos3-resampled to the exact target sizes, and
// the stored/hashed bytes are always the processed PNG output.
//
// Two source treatments, matching the pipeline's two art classes:
// * a TRANSPARENT cutout (SIF1 "navi" standee art): the figure (alpha bbox)
// is placed on the official c_/h_ canvas geometry (fit 1700x1180, centred
// on 2048x1260) over a blurred+darkened backdrop made from the art itself;
// m_/sc_/p_/r_ are the pipeline's figure-proportional crops.
// * OPAQUE artwork: landscape art covers the c_ canvas directly; portrait art
// gets the blurred-backdrop presentation with the whole image centred.
// h_ falls back to the c_ content and m_ to its top square, exactly the
// fallback semantics 18_blank_art_fallback.py shipped for the 74 SIF1
// cards with no transparent standee.
use image::{imageops, DynamicImage, Rgba, RgbaImage};
// Permissive sanity floor: upscaling small-ish sources is allowed, only
// absurd inputs are refused
pub const MIN_SOURCE_DIM: u32 = 100;
// c_/h_ canvas and the navi fit box (make_full_illust / place_navi)
const CANVAS_W: u32 = 2048;
const CANVAS_H: u32 = 1260;
const FIT_W: f64 = 1700.0;
const FIT_H: f64 = 1180.0;
const BRIGHTNESS: f64 = 0.88;
// GaussianBlur(24) @ 2048x1260 == GaussianBlur(6) @ 512x315 upscaled (the
// pipeline used the same half-res trick for speed)
const BLUR_W: u32 = 512;
const BLUR_H: u32 = 315;
const BLUR_SIGMA: f32 = 6.0;
// m_: head-anchored square of the placed figure (15_memoria_art.py, fitted
// against official pairs at alpha-IoU 0.89-0.94)
const M_SIDE: f64 = 0.78; // of figure height
const M_TOP: f64 = 0.03; // top edge this far ABOVE the figure top
// sc_: bust crop (17_skillcutin_art.py, fitted at alpha-IoU 0.84-0.92)
const SC_CROP_H: f64 = 0.68; // of figure height
const SC_CROP_TOP: f64 = -0.055; // of figure height, relative to figure top
pub fn decode_source(name: &str, bytes: &[u8]) -> Result<DynamicImage, String> {
let img = image::load_from_memory(bytes)
.map_err(|_| format!("'{}' is not a decodable image (png, jpg and webp work)", name))?;
if img.width() < MIN_SOURCE_DIM || img.height() < MIN_SOURCE_DIM {
return Err(format!("'{}' is only {}x{} - at least {}x{} is required", name, img.width(), img.height(), MIN_SOURCE_DIM, MIN_SOURCE_DIM));
}
Ok(img)
}
pub fn encode_png(img: &RgbaImage) -> Result<Vec<u8>, String> {
let mut rv = Vec::new();
DynamicImage::ImageRgba8(img.clone())
.write_to(&mut std::io::Cursor::new(&mut rv), image::ImageFormat::Png)
.map_err(|e| e.to_string())?;
Ok(rv)
}
fn resize(img: &RgbaImage, w: u32, h: u32) -> RgbaImage {
imageops::resize(img, w.max(1), h.max(1), imageops::FilterType::Lanczos3)
}
// Scale-to-cover + centre-crop: the aspect-mismatch treatment for every
// override and for opaque landscape sources (the pipeline's cover())
pub fn cover(img: &RgbaImage, tw: u32, th: u32) -> RgbaImage {
let scale = f64::max(tw as f64 / img.width() as f64, th as f64 / img.height() as f64);
let scaled = resize(img, (img.width() as f64 * scale).round() as u32, (img.height() as f64 * scale).round() as u32);
let x = (scaled.width() - tw.min(scaled.width())) / 2;
let y = (scaled.height() - th.min(scaled.height())) / 2;
imageops::crop_imm(&scaled, x, y, tw, th).to_image()
}
// The bounding box of the non-transparent pixels
fn alpha_bbox(img: &RgbaImage) -> Option<(u32, u32, u32, u32)> {
let (mut x0, mut y0, mut x1, mut y1) = (u32::MAX, u32::MAX, 0u32, 0u32);
for (x, y, px) in img.enumerate_pixels() {
if px[3] > 0 {
x0 = x0.min(x);
y0 = y0.min(y);
x1 = x1.max(x);
y1 = y1.max(y);
}
}
if x0 == u32::MAX {
None
} else {
Some((x0, y0, x1 + 1, y1 + 1))
}
}
// A source counts as a transparent cutout (SIF1 navi-style standee) when a
// meaningful share of it is fully transparent background
fn is_cutout(img: &RgbaImage) -> bool {
let total = (img.width() as u64) * (img.height() as u64);
let transparent = img.pixels().filter(|px| px[3] < 16).count() as u64;
transparent * 100 / total.max(1) >= 5
}
// Multiplicative darken (PIL ImageEnhance.Brightness)
fn darken(img: &mut RgbaImage, factor: f64) {
for px in img.pixels_mut() {
for c in 0..3 {
px[c] = (px[c] as f64 * factor).round().min(255.0) as u8;
}
}
}
// Crop that pads with transparency outside the source (PIL crop() semantics),
// so figure-proportional crops can reach past the figure
fn crop_pad(src: &RgbaImage, x0: i64, y0: i64, w: u32, h: u32) -> RgbaImage {
let mut canvas = RgbaImage::from_pixel(w, h, Rgba([0, 0, 0, 0]));
let sx = x0.max(0) as u32;
let sy = y0.max(0) as u32;
if sx < src.width() && sy < src.height() {
let cw = (src.width() - sx).min((x0 + w as i64 - sx as i64).max(0) as u32);
let ch = (src.height() - sy).min((y0 + h as i64 - sy as i64).max(0) as u32);
if cw > 0 && ch > 0 {
let piece = imageops::crop_imm(src, sx, sy, cw, ch).to_image();
imageops::overlay(&mut canvas, &piece, (sx as i64 - x0).max(0), (sy as i64 - y0).max(0));
}
}
canvas
}
// The blurred + darkened backdrop the c_ presentation puts behind portrait /
// cutout art, made from the art itself (the import used the SIF1 card
// background here; a runtime upload has no separate background, and the
// art-as-its-own-backdrop is the same trick the custom-song jacket blur uses)
fn blurred_backdrop(source: &RgbaImage) -> RgbaImage {
let mut flat = flatten(source);
flat = cover(&flat, BLUR_W, BLUR_H);
flat = imageops::blur(&flat, BLUR_SIGMA);
darken(&mut flat, BRIGHTNESS);
resize(&flat, CANVAS_W, CANVAS_H)
}
// Flatten transparency onto the mean colour of the opaque pixels (the
// pipeline flattened onto the tile's centre colour; a cutout's centre may be
// transparent, so the figure's own average is the stable equivalent)
fn flatten(img: &RgbaImage) -> RgbaImage {
let (mut r, mut g, mut b, mut n) = (0u64, 0u64, 0u64, 0u64);
for px in img.pixels() {
if px[3] >= 128 {
r += px[0] as u64;
g += px[1] as u64;
b += px[2] as u64;
n += 1;
}
}
let base = if n > 0 {
Rgba([(r / n) as u8, (g / n) as u8, (b / n) as u8, 255])
} else {
Rgba([240, 240, 240, 255])
};
let mut canvas = RgbaImage::from_pixel(img.width(), img.height(), base);
imageops::overlay(&mut canvas, img, 0, 0);
canvas
}
// place_navi: the figure scaled into the 1700x1180 fit box, and its placement
// on the 2048x1260 canvas
fn place_figure(figure: &RgbaImage) -> (RgbaImage, i64, i64) {
let scale = f64::min(FIT_H / figure.height() as f64, FIT_W / figure.width() as f64);
let placed = resize(figure, (figure.width() as f64 * scale).round() as u32, (figure.height() as f64 * scale).round() as u32);
let x = (CANVAS_W as i64 - placed.width() as i64) / 2;
let y = (CANVAS_H as i64 - placed.height() as i64) / 2;
(placed, x, y)
}
// p_: the 136x508 vertical strip through the figure's centre column
fn portrait_strip(figure: &RgbaImage) -> RgbaImage {
let scaled = resize(figure, ((figure.width() as f64 * 508.0 / figure.height() as f64).round() as u32).max(1), 508);
let cx = scaled.width() as i64 / 2;
crop_pad(&scaled, cx - 68, 0, 136, 508)
}
// m_/r_: head-anchored square of the figure (side 0.78 * height, top edge
// 0.03 * height above the figure)
fn head_square(figure: &RgbaImage) -> RgbaImage {
let h = figure.height() as f64;
let side = (h * M_SIDE).round().max(1.0) as u32;
let ox = (figure.width() as i64 - side as i64) / 2;
let oy = -(h * M_TOP).round() as i64;
crop_pad(figure, ox, oy, side, side)
}
// sc_: the 2:1 bust crop, bottom edge running off the figure
fn bust_crop(figure: &RgbaImage) -> RgbaImage {
let fh = figure.height() as f64;
let ch = (fh * SC_CROP_H).round().max(1.0) as u32;
let cw = ch * 2;
let x0 = figure.width() as i64 / 2 - cw as i64 / 2;
let y0 = (fh * SC_CROP_TOP).round() as i64;
resize(&crop_pad(figure, x0, y0, cw, ch), 1024, 512)
}
// All 7 card kinds from one source artwork. Every output is at the exact
// official size; the caller overlays any explicit per-kind overrides
pub fn derive_card_art(source: &DynamicImage) -> Vec<(&'static str, RgbaImage)> {
let rgba = source.to_rgba8();
let cutout = is_cutout(&rgba).then(|| alpha_bbox(&rgba)).flatten();
let (c, h, figure) = if let Some((x0, y0, x1, y1)) = cutout {
// Transparent standee: the official composition
let figure = imageops::crop_imm(&rgba, x0, y0, x1 - x0, y1 - y0).to_image();
let (placed, px, py) = place_figure(&figure);
let mut c = blurred_backdrop(&rgba);
imageops::overlay(&mut c, &placed, px, py);
let mut h = RgbaImage::from_pixel(CANVAS_W, CANVAS_H, Rgba([0, 0, 0, 0]));
imageops::overlay(&mut h, &placed, px, py);
(c, h, figure)
} else {
// Opaque artwork: landscape covers the canvas, portrait gets the
// blurred-backdrop presentation; h_ falls back to the c_ content
let c = if rgba.height() > rgba.width() {
let (placed, px, py) = place_figure(&rgba);
let mut c = blurred_backdrop(&rgba);
imageops::overlay(&mut c, &placed, px, py);
c
} else {
cover(&rgba, CANVAS_W, CANVAS_H)
};
(c.clone(), c, rgba)
};
let t = resize(&c, 512, 315);
let m = resize(&head_square(&figure), 380, 380);
let r = resize(&head_square(&figure), 256, 256);
let sc = bust_crop(&figure);
let p = portrait_strip(&figure);
vec![("c", c), ("h", h), ("t", t), ("p", p), ("r", r), ("m", m), ("sc", sc)]
}
// Character icon derived from the portrait when no explicit icon is supplied:
// a top-anchored square for portrait sources (the face is up there), centred
// for landscape ones
pub fn derive_character_icon(portrait: &DynamicImage) -> RgbaImage {
let rgba = portrait.to_rgba8();
let side = rgba.width().min(rgba.height());
let x0 = (rgba.width() - side) / 2;
let y0 = if rgba.height() > rgba.width() { 0 } else { (rgba.height() - side) / 2 };
resize(&imageops::crop_imm(&rgba, x0, y0, side, side).to_image(), 230, 230)
}
#[cfg(test)]
mod tests {
use super::*;
fn cutout_source(w: u32, h: u32) -> DynamicImage {
// A transparent canvas with an opaque figure occupying the middle band
let mut img = RgbaImage::from_pixel(w, h, Rgba([0, 0, 0, 0]));
for y in h / 8..h * 7 / 8 {
for x in w / 3..w * 2 / 3 {
img.put_pixel(x, y, Rgba([200, 60, 120, 255]));
}
}
DynamicImage::ImageRgba8(img)
}
fn opaque_source(w: u32, h: u32) -> DynamicImage {
DynamicImage::ImageRgba8(RgbaImage::from_fn(w, h, |x, y| {
Rgba([(x % 256) as u8, (y % 256) as u8, 99, 255])
}))
}
const TARGETS: &[(&str, u32, u32)] = &[
("c", 2048, 1260), ("h", 2048, 1260), ("t", 512, 315), ("p", 136, 508),
("r", 256, 256), ("m", 380, 380), ("sc", 1024, 512)
];
// Odd-sized sources in -> every kind at its exact official size out,
// through both the cutout and the opaque path, portrait and landscape
#[test]
fn derivation_hits_exact_target_dims() {
for source in [cutout_source(437, 1013), opaque_source(437, 1013), opaque_source(1900, 700), opaque_source(300, 300)] {
let derived = derive_card_art(&source);
assert_eq!(derived.len(), 7);
for (kind, img) in derived {
let target = TARGETS.iter().find(|(k, _, _)| *k == kind).unwrap();
assert_eq!((img.width(), img.height()), (target.1, target.2), "kind {}", kind);
}
}
let icon = derive_character_icon(&opaque_source(431, 617));
assert_eq!((icon.width(), icon.height()), (230, 230));
}
// A transparent standee gets a transparent h_ aligned with c_; an opaque
// source falls back to h_ == c_ (18_blank_art_fallback semantics)
#[test]
fn cutouts_and_opaque_sources_take_their_own_lanes() {
let derived = derive_card_art(&cutout_source(800, 1000));
let h = &derived.iter().find(|(k, _)| *k == "h").unwrap().1;
assert!(h.pixels().any(|px| px[3] == 0), "cutout h_ keeps transparency");
let c = &derived.iter().find(|(k, _)| *k == "c").unwrap().1;
assert!(c.pixels().all(|px| px[3] == 255), "c_ backdrop is opaque");
let derived = derive_card_art(&opaque_source(800, 1000));
let h = &derived.iter().find(|(k, _)| *k == "h").unwrap().1;
let c = &derived.iter().find(|(k, _)| *k == "c").unwrap().1;
assert_eq!(h.as_raw(), c.as_raw(), "opaque h_ falls back to c_");
}
#[test]
fn cover_crops_to_aspect_and_floor_rejects_tiny_sources() {
let img = opaque_source(1000, 400).to_rgba8();
let out = cover(&img, 512, 315);
assert_eq!((out.width(), out.height()), (512, 315));
let mut tiny = Vec::new();
opaque_source(32, 32).write_to(&mut std::io::Cursor::new(&mut tiny), image::ImageFormat::Png).unwrap();
assert!(decode_source("art_00", &tiny).unwrap_err().contains("at least"));
assert!(decode_source("art_00", b"garbage").unwrap_err().contains("not a decodable image"));
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -137,6 +137,25 @@ fn cue(bytes: Vec<u8>, duration_sec: f64) -> Cue {
}
}
// A one-shot line (custom-character voicelines): decode anything symphonia
// reads, keep it as-is when it's already ogg-vorbis, otherwise transcode. No
// cuts, fades, loop points or preview split - mono or stereo as-sourced
pub fn process_one_shot(bytes: &[u8], max_duration_sec: f64) -> Result<Cue, String> {
let audio = decode(bytes)?;
let duration = audio.duration();
if duration < 0.2 {
return Err(String::from("Audio clip is shorter than 0.2 seconds"));
}
if duration > max_duration_sec {
return Err(format!("Audio clip is {:.1} seconds long - the maximum is {:.0} seconds", duration, max_duration_sec));
}
if is_ogg_vorbis(bytes) {
return Ok(cue(bytes.to_vec(), duration));
}
let planar: Vec<&[f32]> = audio.channels.iter().map(|samples| samples.as_slice()).collect();
Ok(cue(encode(&planar, audio.sample_rate)?, duration))
}
// The play cue is the full track, the select cue is a preview cut with short
// fades. Both are stored content-addressed by the md5 of the final ogg bytes -
// the client validates md5(file) against the value served in the catalog

View File

@@ -3,36 +3,170 @@ use jzon::{object, JsonValue};
// Transcodes a SIF1/NPPS4 beatmap (array of {timing_sec, effect, effect_value, position})
// into the SIF2 chart JSON the client deserializes into NoteData.
//
// SIF1 note effects, from the game's own LiveModel.NoteEffect
// (m_live/model/note_effect.lua): note_normal 1, note_event 2, note_hold 3, note_bomb_1 4,
// note_bomb_3 5, note_bomb_5 6, note_bomb_9 7, note_slide 11, note_slide_event 12,
// note_slide_hold 13, with isHold(e) = e == 3 and isSlide(e) = e >= 11.
//
// SIF2 side: `type` only distinguishes an ordinary note (1) from a star/bomb note (3).
// LiveTimeController.ToMarkerType accepts 1..3 and maps anything else to None; type 2 exists in
// the enum but appears in ZERO of the 2146 shipped charts, so nothing emits it here.
//
// A SLIDE is structural, not a type. MarkerData derives it from the parent/child chain:
// IsSliderMarker chained and the child is on a DIFFERENT line -> a slide segment
// IsSliderLongMarker chained, child SAME line, parent different -> a slide ending in a hold
// IsDistanceMarker has both a parent and a child -> a middle segment
// So a hold is a chain that stays in its lane and a slide is a chain that moves across lanes;
// both are type 1. This is also how the client counts combo (NoteData.CalcMaxCombo: a note whose
// child shares its line does not count, its tail does).
//
// Mapping rules:
// - line = position - 1 (both are right-to-left)
// - effect 1 (and 2, the "parallel" marker) -> type 1 (tap)
// - effect 1 (note_normal) and 2 (note_event) -> type 1 (tap). note_event is an ordinary
// note that also fed SIF1's event scoring; it plays identically and SIF2 has no
// equivalent, so the distinction is dropped. Simultaneous hits are expressed by sharing
// a spawn num, not by the effect.
// - effect 3 (hold) -> head note (type 1) at timing_sec plus a SYNTHESIZED tail note
// (type 1, same line) at timing_sec + effect_value, linked through parent/child ids
// - effect 4 (star/token) -> type 3
// - effect 11/12/13 (swing) and anything unknown -> plain type 1 tap for v1.
// Slider chains are a later feature.
// - notes_attribute / notes_level are dropped (SIF2 has no per-note attribute)
// - effect 4/5/6/7 (bomb_1/3/5/9, SIF1's star notes) -> type 3, SIF2's bomb note. SIF1
// varies the blast width per effect; SIF2 has one bomb with one damage value, so the
// four collapse into type 3 and only the radius is lost. Previously only bomb_1 mapped
// here and the three wider ones arrived as ordinary taps.
// - effect 11/12/13 (slide) -> CHAINED across lanes, all type 1. Slides sharing a notes_level
// form one run: sorted by time and linked parent -> child, so each link crosses lanes and
// the client sees a slider. A run ends on effect 13 (slide hold), whose synthesized
// same-line tail then makes it IsSliderLongMarker — the slide settling into a hold the
// player releases. Verified against a real upload: every notes_level shared by more than
// one note held exactly the slide-effect notes, each a monotonic sweep like
// pos 9->8->7->6 with effects 11,11,11,13.
// A lone slide with no chain partner stays a plain tap: a slider needs a cross-lane child.
// - effect 0 (random) and anything else unknown -> plain type 1. Every effect the game
// actually defines is covered above, so this is only a floor for hand-authored charts.
// - notes_attribute is dropped (SIF2 has no per-note attribute). notes_level is consumed as
// the chain id above and not emitted.
// - ids are sequential from 1 in time order. num is the spawn group: the dummy
// header occupies 100, real groups count up from 101, and notes that hit
// simultaneously (equal timing_sec, which covers SIF1 effect 2 pairs) share one num.
// header occupies 100 and real groups count up from 101. The client spawns markers one
// num-group at a time, and LiveMarkerControl.CreateMarkerUI (list overload) plain-RETURNS
// when the group holds more than 2 markers — so a num may be shared by AT MOST two notes,
// or the whole group's head markers never render (hold bands are created by the separate,
// unguarded CreateLongMarkerBandUI call, which is why 4 simultaneous holds showed trails
// with no heads). Simultaneous notes (equal final time, which covers SIF1 effect 2 pairs
// AND synthesized hold tails) are therefore sorted by lane and chunked into pairs: each
// chunk gets its own num, and every chunk after the first carries the PREVIOUS chunk's num
// in force_sync_group_id. That is exactly the official encoding — all 4292 shipped NoteData
// assets have num groups of only 1 or 2, and the 15 charts with 3-4 simultaneous notes
// (SIFAC ports, e.g. 1132_5_Sn, 1136_5_An) pair the lowest lanes under the first num and
// point the later chunk's m_ForceSyncGroupID at it. The client turns that into the extra
// connector line (LiveTimeController.CreateMarkerTimeData force-group pass matches
// ForceGroupId against the other chunk's GroupId and links the lane-closest pair).
// - notes[0] is ALWAYS the dummy header (id 0, num 100, type 0) - the client
// deserializes it verbatim.
// - max_combo_count = all real notes EXCEPT hold heads whose tail is on the same
// line (the game counts a same-lane hold as one combo for the chain)
// Two notes are SIMULTANEOUS (one spawn cluster) when their times agree to within this.
// Uploaded timings are decimal literals, so notes an author meant to be simultaneous parse to
// bit-identical f64 - but a hold's SYNTHESIZED tail is computed (timing + effect_value), and
// e.g. 1.4 + 0.7 is 2.0999999999999996, which exact equality splits from a note literally at
// 2.1. That cost the two the shared spawn num, and with it the client's sync connector line
// (LiveTimeController.CreateMarkerTimeData pairs GroupSyncMarkerData by GroupId). The client
// itself never compares two note times - simultaneity is entirely decided here by `num`, and
// it stores time as f32 anyway - so this tolerance only has to sit above f64 accumulation
// noise (~1e-15) and below any real spacing: the tightest a chart ever uses is a 1/64 note at
// 250 BPM, ~15 ms, four orders of magnitude above this.
pub const SIMULTANEOUS_EPSILON_SEC: f64 = 1e-6;
fn simultaneous(a: f64, b: f64) -> bool {
(a - b).abs() <= SIMULTANEOUS_EPSILON_SEC
}
// MISS window, from the live_input_result masterdata BAD row (_offsetTimeSec 0.15,
// _offsetTimeSecSlider 0.34). LiveTimeController.UpdateMarkerTime destroys and force-MISSes a
// marker once the chart clock passes time + this (LiveUtils.GetMissOffsetTime), so a note is
// only judgeable while the live is still running that far past it.
const MISS_OFFSET_SEC: f64 = 0.15;
const MISS_OFFSET_SLIDER_SEC: f64 = 0.34;
// MarkerData.IsSliderMarker: a chained note with a cross-lane parent or child.
fn is_slider(data: &JsonValue, line_of: &dyn Fn(i64) -> Option<i64>) -> bool {
let parent_id = data["parent_id"].as_i64().unwrap_or(0);
let child_id = data["child_id"].as_i64().unwrap_or(0);
if parent_id == 0 && child_id == 0 {
return false;
}
let line = data["line"].as_i64().unwrap_or(0);
if child_id != 0 && data["child_line"].as_i64().unwrap_or(0) != line {
return true;
}
parent_id != 0 && line_of(parent_id) != Some(line)
}
// The chart clock time at which the LAST note stops being judgeable - i.e. the moment the live
// must still be running to. The live ends when the audio does (LiveTimeController's
// m_MusicDuration is LiveMst._endWait + the music length, and _endWait is 0 in every one of the
// 637 official live rows and in ours), so this is what has to fit inside the audio.
pub fn end_time(chart: &JsonValue) -> f64 {
let lines: Vec<(i64, i64)> = chart["notes"].members().skip(1)
.map(|n| (n["id"].as_i64().unwrap_or(0), n["line"].as_i64().unwrap_or(0)))
.collect();
let line_of = |id: i64| lines.iter().find(|(i, _)| *i == id).map(|(_, line)| *line);
let mut end: f64 = 0.0;
for data in chart["notes"].members().skip(1) {
let offset = if is_slider(data, &line_of) { MISS_OFFSET_SLIDER_SEC } else { MISS_OFFSET_SEC };
end = end.max(data["time"].as_f64().unwrap_or(0.0) + offset);
}
end
}
// The earliest note in the chart, or None for an empty chart
pub fn first_note_time(chart: &JsonValue) -> Option<f64> {
chart["notes"].members().skip(1)
.filter_map(|n| n["time"].as_f64())
.fold(None, |first: Option<f64>, time| Some(match first {
Some(first) => first.min(time),
None => time
}))
}
struct WorkNote {
time: f64,
line: i64,
kind: i64,
// Index into the work list of the hold head this tail belongs to
head: Option<usize>
// Chain links, as indices into the work list. A hold is parent -> child on the SAME line;
// a slide is parent -> child across DIFFERENT lines (see MarkerData.IsSliderMarker).
parent: Option<usize>,
child: Option<usize>
}
fn parse_sif_note(data: &JsonValue, index: usize) -> Result<(f64, i64, f64, i64), String> {
// LiveModel.NoteEffect.isHold, widened to note_slide_hold: both carry a duration in
// effect_value (notes.lua isTimeOver adds effect_value for note_hold and note_slide_hold alike).
fn is_hold(effect: i64) -> bool {
effect == 3 || effect == 13
}
// LiveModel.NoteEffect.isSlide
fn is_slide(effect: i64) -> bool {
effect >= 11
}
// SIF1's star notes: note_bomb_1/3/5/9. The suffix is the blast width — star_icon.lua maps
// them to 0/1/2/4 extra lanes either side, damaging that spread when the note is missed.
// SIF2 has a single bomb note with one damage value (LiveInputResultMst._bombLifeDamage,
// applied by LiveLifeControl.CheckLife for type 3, and drawn with the star mark by
// MarkerUI), so all four map to type 3 and only the radius is lost.
fn is_bomb(effect: i64) -> bool {
(4..=7).contains(&effect)
}
fn parse_sif_note(data: &JsonValue, index: usize) -> Result<(f64, i64, f64, i64, i64), String> {
let timing = data["timing_sec"].as_f64().ok_or(format!("Note {}: missing timing_sec", index))?;
let effect = data["effect"].as_i64().ok_or(format!("Note {}: missing effect", index))?;
let effect_value = data["effect_value"].as_f64().unwrap_or(0.0);
let position = data["position"].as_i64().ok_or(format!("Note {}: missing position", index))?;
// Slide chain id. SIF1 keeps it at 1 for unchained notes; editors emit an arbitrary
// per-chain number, so it is only meaningful as "these slides belong together".
let group = data["notes_level"].as_i64().unwrap_or(1);
if !(1..=9).contains(&position) {
return Err(format!("Note {}: position {} is outside 1-9", index, position));
@@ -40,11 +174,11 @@ fn parse_sif_note(data: &JsonValue, index: usize) -> Result<(f64, i64, f64, i64)
if timing < 0.0 {
return Err(format!("Note {}: negative timing_sec {}", index, timing));
}
if effect == 3 && effect_value <= 0.0 {
if is_hold(effect) && effect_value <= 0.0 {
return Err(format!("Note {}: hold with effect_value {} (must be > 0)", index, effect_value));
}
Ok((timing, effect, effect_value, position))
Ok((timing, effect, effect_value, position, group))
}
// Returns the chart JSON and its max_combo_count (== the difficulty's full_combo)
@@ -54,8 +188,10 @@ pub fn transcode(beatmap: &JsonValue) -> Result<(JsonValue, i64), String> {
}
let mut work: Vec<WorkNote> = Vec::new();
// Slide chain id -> the work indices in that chain, in input order
let mut chains: Vec<(i64, Vec<usize>)> = Vec::new();
for (i, data) in beatmap.members().enumerate() {
let (timing, effect, effect_value, position) = parse_sif_note(data, i)?;
let (timing, effect, effect_value, position, group) = parse_sif_note(data, i)?;
for other in beatmap.members().take(i) {
if other["timing_sec"].as_f64() == Some(timing) && other["position"].as_i64() == Some(position) && other["effect"].as_i64() != Some(effect) {
@@ -67,16 +203,54 @@ pub fn transcode(beatmap: &JsonValue) -> Result<(JsonValue, i64), String> {
work.push(WorkNote {
time: timing,
line: position - 1,
kind: if effect == 4 { 3 } else { 1 },
head: None
kind: if is_bomb(effect) { 3 } else { 1 },
parent: None,
child: None
});
if effect == 3 {
// notes_level > 1 identifies the chain; 1 is SIF1's "not chained" default and must NOT be
// treated as a group, or every unchained slide in the song would link into one run
// (notes.lua guards its own grouping the same way: `if 1 < notes_level`).
if is_slide(effect) && group > 1 {
match chains.iter_mut().find(|(id, _)| *id == group) {
Some((_, members)) => members.push(head),
None => chains.push((group, vec![head]))
}
}
if is_hold(effect) {
let tail = work.len();
work.push(WorkNote {
time: timing + effect_value,
line: position - 1,
kind: 1,
head: Some(head)
parent: Some(head),
child: None
});
work[head].child = Some(tail);
}
}
// Link each slide chain in time order. Consecutive members sit on different lines, which is
// exactly what makes SIF2 treat the run as a slider rather than a hold. A member that already
// has a child is a slide-hold, i.e. the end of the run, so the chain stops there — its tail
// stays its child and the cross-lane parent link makes it IsSliderLongMarker.
for (_, members) in chains.iter() {
if members.len() < 2 {
// A lone slide cannot be a slider: SIF2 needs a cross-lane child. Leave it a tap.
continue;
}
let mut ordered = members.clone();
ordered.sort_by(|a, b| work[*a].time.partial_cmp(&work[*b].time).unwrap());
for pair in ordered.windows(2) {
let (a, b) = (pair[0], pair[1]);
if work[a].child.is_some() || work[b].parent.is_some() {
break;
}
if work[a].line == work[b].line {
// Same lane would read as a hold, not a slide; skip the link rather than lie
continue;
}
work[a].child = Some(b);
work[b].parent = Some(a);
}
}
@@ -86,23 +260,33 @@ pub fn transcode(beatmap: &JsonValue) -> Result<(JsonValue, i64), String> {
let mut ids = vec![0i64; work.len()];
let mut nums = vec![0i64; work.len()];
let mut force_sync = vec![0i64; work.len()];
let mut num = 100;
let mut last_time = f64::NEG_INFINITY;
for (i, index) in order.iter().enumerate() {
ids[*index] = (i + 1) as i64;
// Simultaneous notes share a spawn group
if work[*index].time != last_time {
num += 1;
last_time = work[*index].time;
}
nums[*index] = num;
}
let mut tail_of = vec![0usize; work.len()];
for (i, note) in work.iter().enumerate() {
if let Some(head) = note.head {
tail_of[head] = i;
// Spawn groups: at most TWO notes per num (see the header comment — a bigger group's head
// markers never render). A cluster of simultaneous notes is sorted by lane and chunked into
// pairs; the leftmost pair takes the first num, and each later chunk points its
// force_sync_group_id at the previous chunk's num, matching the official SIFAC-port encoding.
let mut start = 0;
while start < order.len() {
let mut end = start + 1;
while end < order.len() && simultaneous(work[order[end]].time, work[order[start]].time) {
end += 1;
}
let mut cluster: Vec<usize> = order[start..end].to_vec();
cluster.sort_by_key(|index| work[*index].line);
let mut prev_num = 0;
for chunk in cluster.chunks(2) {
num += 1;
for index in chunk {
nums[*index] = num;
force_sync[*index] = prev_num;
}
prev_num = num;
}
start = end;
}
let mut notes = jzon::array![{
@@ -113,12 +297,12 @@ pub fn transcode(beatmap: &JsonValue) -> Result<(JsonValue, i64), String> {
let mut max_combo_count = 0;
for index in order.iter() {
let note = &work[*index];
let tail = tail_of[*index];
let is_head = tail != 0;
// Same-lane hold heads don't count toward the combo, their tail does
if !(is_head && work[tail].line == note.line) {
max_combo_count += 1;
// NoteData.CalcMaxCombo: a note whose child is on the SAME line (a hold) does not count,
// its tail does. A cross-lane child (a slide segment) counts normally.
match note.child {
Some(child) if work[child].line == note.line => {},
_ => max_combo_count += 1
}
notes.push(object!{
@@ -127,11 +311,11 @@ pub fn transcode(beatmap: &JsonValue) -> Result<(JsonValue, i64), String> {
"line": note.line,
"time": note.time,
"type": note.kind,
"parent_id": if let Some(head) = note.head { ids[head] } else { 0 },
"child_id": if is_head { ids[tail] } else { 0 },
"child_num": if is_head { nums[tail] } else { 0 },
"child_line": if is_head { work[tail].line } else { 0 },
"force_sync_group_id": 0
"parent_id": if let Some(parent) = note.parent { ids[parent] } else { 0 },
"child_id": if let Some(child) = note.child { ids[child] } else { 0 },
"child_num": if let Some(child) = note.child { nums[child] } else { 0 },
"child_line": if let Some(child) = note.child { work[child].line } else { 0 },
"force_sync_group_id": force_sync[*index]
}).unwrap();
}
@@ -143,6 +327,113 @@ pub fn transcode(beatmap: &JsonValue) -> Result<(JsonValue, i64), String> {
}, max_combo_count))
}
// Regroups a STORED transcoded chart whose spawn groups predate the pairing rule above: the
// old transcoder gave every note of an equal-time cluster one shared num (force_sync_group_id
// always 0), and the client renders no head markers for a group of 3+ (see the header
// comment). This rebuilds num / force_sync_group_id in place with the same clustering the
// transcoder now uses — equal final time, lane-sorted, chunks of two, chained
// force_sync_group_id — and re-points child_num at each child's renumbered spawn group.
// Everything else (ids, times, lines, types, parent/child links, max_combo_count — combo
// counting never depended on grouping) is untouched, so on a chart the current transcoder
// produced this reproduces the stored bytes exactly.
//
// Returns false (chart untouched) unless some num is shared by MORE than two notes. That
// makes it a safe no-op on current uploads AND on official-style encodings (whose num values
// differ from ours — e.g. gaps of 3 — but whose groups never exceed two).
pub fn regroup(chart: &mut JsonValue) -> bool {
// (id, time, line) per real note; the dummy header at [0] stays untouched
let notes: Vec<(i64, f64, i64)> = chart["notes"].members().skip(1).map(|n| (
n["id"].as_i64().unwrap_or(0),
n["time"].as_f64().unwrap_or(0.0),
n["line"].as_i64().unwrap_or(0)
)).collect();
// Only a pre-pairing chart (some num shared 3+ ways) is rewritten
let mut group_sizes: Vec<(i64, i64)> = Vec::new();
for data in chart["notes"].members().skip(1) {
let num = data["num"].as_i64().unwrap_or(0);
match group_sizes.iter_mut().find(|(n, _)| *n == num) {
Some((_, count)) => *count += 1,
None => group_sizes.push((num, 1))
}
}
if group_sizes.iter().all(|(_, count)| *count <= 2) {
return false;
}
// Time order; ids break ties (transcode issues them in time order, so this reproduces
// the emission order the grouping pass originally saw)
let mut order: Vec<usize> = (0..notes.len()).collect();
order.sort_by(|a, b| notes[*a].1.total_cmp(&notes[*b].1).then(notes[*a].0.cmp(&notes[*b].0)));
// id -> (new num, new force_sync_group_id)
let mut assigned: Vec<(i64, i64, i64)> = Vec::with_capacity(notes.len());
let mut num = 100;
let mut start = 0;
while start < order.len() {
let mut end = start + 1;
while end < order.len() && simultaneous(notes[order[end]].1, notes[order[start]].1) {
end += 1;
}
let mut cluster: Vec<usize> = order[start..end].to_vec();
cluster.sort_by_key(|index| notes[*index].2);
let mut prev_num = 0;
for chunk in cluster.chunks(2) {
num += 1;
for index in chunk {
assigned.push((notes[*index].0, num, prev_num));
}
prev_num = num;
}
start = end;
}
let lookup = |id: i64| assigned.iter().find(|(i, _, _)| *i == id).map(|(_, n, f)| (*n, *f));
for data in chart["notes"].members_mut().skip(1) {
let Some((new_num, force)) = lookup(data["id"].as_i64().unwrap_or(0)) else { continue; };
data["num"] = new_num.into();
data["force_sync_group_id"] = force.into();
let child = data["child_id"].as_i64().unwrap_or(0);
if child != 0 {
// child_num names the child's spawn group and must follow its new num
data["child_num"] = lookup(child).map(|(n, _)| n).unwrap_or(0).into();
}
}
true
}
// Test helper: fabricates what pre-pairing servers stored, by squashing a current chart back
// to the OLD encoding — one shared num per equal-time cluster, force_sync_group_id 0, and
// child_num following. Lives outside the tests module so the migration tests in
// router/custom_song.rs can build realistic pre-fix fixtures from transcode output.
#[cfg(test)]
pub fn squash_to_pre_fix(chart: &mut JsonValue) {
let notes: Vec<(i64, f64)> = chart["notes"].members().skip(1)
.map(|n| (n["id"].as_i64().unwrap(), n["time"].as_f64().unwrap()))
.collect();
let mut order: Vec<usize> = (0..notes.len()).collect();
order.sort_by(|a, b| notes[*a].1.total_cmp(&notes[*b].1).then(notes[*a].0.cmp(&notes[*b].0)));
let mut nums: Vec<(i64, i64)> = Vec::new();
let mut num = 100;
let mut last_time = f64::NEG_INFINITY;
for index in order {
if notes[index].1 != last_time {
num += 1;
last_time = notes[index].1;
}
nums.push((notes[index].0, num));
}
let lookup = |id: i64| nums.iter().find(|(i, _)| *i == id).map(|(_, n)| *n).unwrap_or(0);
for data in chart["notes"].members_mut().skip(1) {
data["num"] = lookup(data["id"].as_i64().unwrap()).into();
data["force_sync_group_id"] = 0.into();
let child = data["child_id"].as_i64().unwrap_or(0);
if child != 0 {
data["child_num"] = lookup(child).into();
}
}
}
#[cfg(test)]
mod tests {
use super::*;
@@ -158,6 +449,29 @@ mod tests {
}
}
// A slide carrying its chain id; slides sharing one belong to the same run
fn sif_slide(timing_sec: f64, position: i64, effect: i64, effect_value: f64, group: i64) -> JsonValue {
object!{
"timing_sec": timing_sec,
"notes_attribute": 1,
"notes_level": group,
"effect": effect,
"effect_value": effect_value,
"position": position
}
}
// (line, type, parent_id, child_id, child_line) for each note after the dummy header
fn shape(chart: &JsonValue) -> Vec<(i64, i64, i64, i64, i64)> {
chart["notes"].members().skip(1).map(|d| (
d["line"].as_i64().unwrap(),
d["type"].as_i64().unwrap(),
d["parent_id"].as_i64().unwrap(),
d["child_id"].as_i64().unwrap(),
d["child_line"].as_i64().unwrap()
)).collect()
}
#[test]
fn plain_taps() {
let beatmap = jzon::array![
@@ -211,6 +525,73 @@ mod tests {
assert_eq!(tail["time"].as_f64().unwrap(), 3.5);
}
// A hold tail's time is COMPUTED (timing + effect_value), so it can land a few f64 ulps off
// a note written at the same beat - 1.4 + 0.7 is 2.0999999999999996, not 2.1. Exact equality
// split those two into separate spawn groups and the client lost the sync connector line
// between them; the epsilon keeps them together. The tail must still be emitted at its own
// computed time (the client stores time as f32, which lands both on 2.1 anyway)
#[test]
fn a_computed_hold_tail_shares_the_beats_spawn_group() {
assert_ne!(1.4f64 + 0.7f64, 2.1f64);
let beatmap = jzon::array![
sif_note(1.4, 3, 3, 0.7), // hold, tail computed at 2.0999999999999996
sif_note(2.1, 7, 1, 0.0) // tap written at 2.1
];
let (chart, _) = transcode(&beatmap).unwrap();
let tail = chart["notes"].members().find(|n| n["parent_id"] != 0).unwrap();
let tap = chart["notes"].members().find(|n| n["line"] == 6).unwrap();
assert_eq!(tail["num"], tap["num"].clone());
assert!((tail["time"].as_f64().unwrap() - 2.1).abs() < 1e-9);
assert_spawn_groups_hold_at_most_two(&chart);
// Genuinely distinct beats stay distinct: the epsilon is orders of magnitude below the
// tightest spacing a chart ever uses (a 1/64 note at 250 BPM is ~15 ms)
let beatmap = jzon::array![
sif_note(2.1, 3, 1, 0.0),
sif_note(2.115, 7, 1, 0.0)
];
let (chart, _) = transcode(&beatmap).unwrap();
assert_ne!(chart["notes"][1]["num"], chart["notes"][2]["num"].clone());
}
// end_time is what validate_chart_fits_audio compares against the track length: the last
// moment a note is still judgeable, using the BAD-row MISS window (0.15 tap / 0.34 slider)
#[test]
fn end_time_uses_the_miss_window_of_the_last_note() {
let (chart, _) = transcode(&jzon::array![sif_note(10.0, 3, 1, 0.0)]).unwrap();
assert!((end_time(&chart) - 10.15).abs() < 1e-9);
assert_eq!(first_note_time(&chart), Some(10.0));
// A hold: the synthesized tail is the last note, and it is same-lane so not a slider
let (chart, _) = transcode(&jzon::array![sif_note(10.0, 3, 3, 2.0)]).unwrap();
assert!((end_time(&chart) - 12.15).abs() < 1e-9);
assert_eq!(first_note_time(&chart), Some(10.0));
// A cross-lane slide run: every segment is a slider, so the wider window applies
let (chart, _) = transcode(&jzon::array![
sif_slide(10.0, 9, 11, 0.0, 5),
sif_slide(10.5, 8, 11, 0.0, 5)
]).unwrap();
assert!((end_time(&chart) - 10.84).abs() < 1e-9);
}
// The client spawns markers one num-group at a time and CreateMarkerUI refuses lists of
// more than 2, so no num may ever be shared by 3+ notes (official charts never do)
fn assert_spawn_groups_hold_at_most_two(chart: &JsonValue) {
let mut counts: Vec<(i64, i64)> = Vec::new();
for data in chart["notes"].members().skip(1) {
let num = data["num"].as_i64().unwrap();
match counts.iter_mut().find(|(n, _)| *n == num) {
Some((_, c)) => *c += 1,
None => counts.push((num, 1))
}
}
for (num, count) in counts {
assert!(count <= 2, "num {} is shared by {} notes; the client renders no heads for such a group", num, count);
}
}
#[test]
fn parallel_pair() {
let beatmap = jzon::array![
@@ -224,6 +605,83 @@ mod tests {
assert_eq!(chart["notes"][1]["num"], chart["notes"][2]["num"].clone());
assert_eq!(chart["notes"][1]["type"], 1);
assert_eq!(chart["notes"][2]["type"], 1);
// A plain pair is the GroupSync path; the force-group field stays clear
assert_eq!(chart["notes"][1]["force_sync_group_id"], 0);
assert_eq!(chart["notes"][2]["force_sync_group_id"], 0);
}
#[test]
fn three_simultaneous_notes_split_into_pair_plus_force_synced_single() {
// Official encoding (e.g. 1132_5_Sn, 1136_5_An: the only shipped charts with 3-4
// simultaneous notes): the cluster is sorted by lane, the lowest two lanes share the
// first num, and the leftover note takes the NEXT num with force_sync_group_id pointing
// back at the pair's num. Input arrives lane-scrambled to prove the chunking sorts.
let beatmap = jzon::array![
sif_note(1.0, 8, 1, 0.0),
sif_note(1.0, 2, 1, 0.0),
sif_note(1.0, 5, 1, 0.0)
];
let (chart, combo) = transcode(&beatmap).unwrap();
assert_eq!(combo, 3);
assert_eq!(chart["notes"].len(), 4);
assert_spawn_groups_hold_at_most_two(&chart);
// Emission keeps input order on time ties; grouping is by lane
let (right, left, mid) = (&chart["notes"][1], &chart["notes"][2], &chart["notes"][3]);
assert_eq!(left["line"], 1);
assert_eq!(mid["line"], 4);
assert_eq!(right["line"], 7);
// Lanes 1 and 4 pair under the first num, force-clear
assert_eq!(left["num"], 101);
assert_eq!(mid["num"], 101);
assert_eq!(left["force_sync_group_id"], 0);
assert_eq!(mid["force_sync_group_id"], 0);
// Lane 7 rides the next num and force-syncs against the pair's num
assert_eq!(right["num"], 102);
assert_eq!(right["force_sync_group_id"], 101);
}
#[test]
fn four_simultaneous_holds_pair_heads_and_tails() {
// Second field report: 4 holds hitting together rendered their bands but no head
// markers — all four heads shared one num, and the client's CreateMarkerUI refuses
// groups over 2 while CreateLongMarkerBandUI (a separate, unguarded call) still drew
// the bands. Officially both the head cluster AND the tail cluster split 2+2 with the
// second chunk force-synced to the first (1132_5_Sn time 12.208 does this to tails).
let beatmap = jzon::array![
sif_note(1.0, 3, 3, 2.0),
sif_note(1.0, 4, 3, 2.0),
sif_note(1.0, 6, 3, 2.0),
sif_note(1.0, 7, 3, 2.0)
];
let (chart, combo) = transcode(&beatmap).unwrap();
// Same-lane hold heads don't count; the four tails do
assert_eq!(combo, 4);
assert_eq!(chart["notes"].len(), 9);
assert_spawn_groups_hold_at_most_two(&chart);
// Heads at 1.0: lanes 2,3 share num 101; lanes 5,6 share num 102 force-synced to 101
for (index, line, num, fs) in [(1, 2, 101, 0), (2, 3, 101, 0), (3, 5, 102, 101), (4, 6, 102, 101)] {
let head = &chart["notes"][index];
assert_eq!(head["line"], line, "head {}", index);
assert_eq!(head["num"], num, "head {}", index);
assert_eq!(head["force_sync_group_id"], fs, "head {}", index);
assert_eq!(head["parent_id"], 0, "head {}", index);
}
// Tails at 3.0: the SAME pairing applies to the synthesized cluster
for (index, line, num, fs) in [(5, 2, 103, 0), (6, 3, 103, 0), (7, 5, 104, 103), (8, 6, 104, 103)] {
let tail = &chart["notes"][index];
assert_eq!(tail["line"], line, "tail {}", index);
assert_eq!(tail["num"], num, "tail {}", index);
assert_eq!(tail["force_sync_group_id"], fs, "tail {}", index);
assert_eq!(tail["child_id"], 0, "tail {}", index);
}
// The chains still line up: each head's child_num names the tail's spawn group
assert_eq!(chart["notes"][1]["child_id"], 5);
assert_eq!(chart["notes"][1]["child_num"], 103);
assert_eq!(chart["notes"][3]["child_id"], 7);
assert_eq!(chart["notes"][3]["child_num"], 104);
}
#[test]
@@ -233,7 +691,7 @@ mod tests {
sif_note(2.0, 3, 3, 1.5), // hold: head at 2.0, tail at 3.5
sif_note(2.5, 7, 4, 0.0), // star
sif_note(3.5, 1, 2, 2.0), // parallel with the hold tail
sif_note(4.0, 9, 11, 0.0) // swing -> plain tap for v1
sif_note(4.0, 9, 11, 0.0) // lone slide, no chain partner -> stays a tap
];
let (chart, combo) = transcode(&beatmap).unwrap();
@@ -253,6 +711,263 @@ mod tests {
}
}
#[test]
fn slide_chain_links_across_lanes() {
// A three-note sweep right to left, one chain. Every link must cross lanes, which is
// what MarkerData.IsSliderMarker keys on.
let beatmap = jzon::array![
sif_slide(1.0, 9, 11, 0.0, 500),
sif_slide(1.2, 8, 11, 0.0, 500),
sif_slide(1.4, 7, 12, 0.0, 500)
];
let (chart, combo) = transcode(&beatmap).unwrap();
// No tails: nothing here is a hold
assert_eq!(chart["notes"].len(), 4);
// Slides are ordinary notes; the chain carries the meaning
assert_eq!(shape(&chart), vec![
(8, 1, 0, 2, 7), // root, child on line 7
(7, 1, 1, 3, 6), // middle: has parent AND child -> IsDistanceMarker
(6, 1, 2, 0, 0) // last of the run
]);
// Every link crosses lanes, so all three count for combo
assert_eq!(combo, 3);
}
#[test]
fn separate_chains_do_not_link() {
let beatmap = jzon::array![
sif_slide(1.0, 9, 11, 0.0, 500),
sif_slide(1.2, 8, 11, 0.0, 500),
sif_slide(2.0, 4, 11, 0.0, 501),
sif_slide(2.2, 3, 11, 0.0, 501)
];
let (chart, _) = transcode(&beatmap).unwrap();
assert_eq!(shape(&chart), vec![
(8, 1, 0, 2, 7),
(7, 1, 1, 0, 0), // chain 500 ends here, does not reach chain 501
(3, 1, 0, 4, 2),
(2, 1, 3, 0, 0)
]);
}
#[test]
fn default_notes_level_does_not_chain() {
// notes_level 1 is SIF1's "unchained" default. Treating it as a group id would link every
// slide in the song into one run spanning the whole track.
let beatmap = jzon::array![
sif_note(1.0, 9, 11, 0.0),
sif_note(1.2, 8, 11, 0.0),
sif_note(40.0, 2, 11, 0.0)
];
let (chart, combo) = transcode(&beatmap).unwrap();
assert_eq!(shape(&chart), vec![
(8, 1, 0, 0, 0),
(7, 1, 0, 0, 0),
(1, 1, 0, 0, 0)
]);
assert_eq!(combo, 3);
}
#[test]
fn lone_slide_stays_a_tap() {
// Nothing to chain to, and a slider needs a cross-lane child
let (chart, combo) = transcode(&jzon::array![sif_slide(1.0, 5, 11, 0.0, 500)]).unwrap();
assert_eq!(chart["notes"].len(), 2);
assert_eq!(shape(&chart), vec![(4, 1, 0, 0, 0)]);
assert_eq!(combo, 1);
}
#[test]
fn slide_chain_ends_in_a_hold() {
// A sweep terminating on effect 13: the run settles into a hold on the last lane.
// Regression: effect 13 used to lose its hold entirely and arrive as a lone note.
let beatmap = jzon::array![
sif_slide(1.0, 9, 11, 0.0, 500),
sif_slide(1.2, 8, 11, 0.0, 500),
sif_slide(1.4, 7, 13, 0.5, 500)
];
let (chart, combo) = transcode(&beatmap).unwrap();
assert_eq!(chart["notes"].len(), 5);
assert_eq!(shape(&chart), vec![
(8, 1, 0, 2, 7), // root of the slide
(7, 1, 1, 3, 6), // middle
(6, 1, 2, 4, 6), // parent on line 7, child on line 6 -> IsSliderLongMarker
(6, 1, 3, 0, 0) // the hold tail, released normally
]);
// The tail sits at the slide-hold's time plus its duration
assert_eq!(chart["notes"][4]["time"].as_f64().unwrap(), 1.9);
// The same-lane hold head does not count; its tail does
assert_eq!(combo, 3);
}
#[test]
fn slide_hold_needs_a_duration() {
// The effect 3 duration check has to cover note_slide_hold too
assert!(transcode(&jzon::array![sif_note(1.0, 5, 13, 0.0)]).is_err());
assert!(transcode(&jzon::array![sif_note(1.0, 5, 13, -1.0)]).is_err());
}
#[test]
fn every_bomb_width_is_a_star_note() {
// note_bomb_1/3/5/9. SIF2 has one bomb note, so all four land on type 3; before,
// only bomb_1 did and the wider three arrived as ordinary taps.
for effect in [4, 5, 6, 7] {
let (chart, combo) = transcode(&jzon::array![sif_note(1.0, 5, effect, 0.0)]).unwrap();
assert_eq!(chart["notes"][1]["type"], 3, "effect {}", effect);
// Bombs are instantaneous — no tail, and they count for combo
assert_eq!(chart["notes"].len(), 2, "effect {}", effect);
assert_eq!(chart["notes"][1]["child_id"], 0, "effect {}", effect);
assert_eq!(combo, 1, "effect {}", effect);
}
}
#[test]
fn every_defined_effect_maps_to_a_real_note_type() {
// The whole LiveModel.NoteEffect vocabulary, and what each must become
for (effect, kind) in [(1, 1), (2, 1), (3, 1), (4, 3), (5, 3), (6, 3), (7, 3), (11, 1), (12, 1), (13, 1)] {
let (chart, _) = transcode(&jzon::array![sif_note(1.0, 5, effect, 1.0)]).unwrap();
assert_eq!(chart["notes"][1]["type"], kind, "effect {}", effect);
// Whatever it is, the client must be able to resolve it
for data in chart["notes"].members().skip(1) {
let t = data["type"].as_i64().unwrap();
assert!((1..=3).contains(&t), "effect {} produced unresolvable type {}", effect, t);
}
}
}
#[test]
fn undefined_effects_fall_back_to_taps() {
// Not part of NoteEffect; a hand-authored chart must still transcode to something valid
for effect in [0, 8, 9, 10] {
let (chart, _) = transcode(&jzon::array![sif_note(1.0, 5, effect, 0.0)]).unwrap();
assert_eq!(chart["notes"][1]["type"], 1, "effect {}", effect);
}
}
// Lifted verbatim from a chart uploaded to the live server (custom song 10008, "Edelied",
// exported via /custom_song/download/10008) — a swipe run of note_slide into note_slide_hold,
// which is the shape that used to arrive as undifferentiated taps. Note the editor writes a
// large arbitrary notes_level (38615 here) rather than SIF1's small group index, which is why
// notes_level is not used as a sync group.
#[test]
fn real_uploaded_swipe_run() {
let beatmap = jzon::array![
object!{ "timing_sec": 22.0, "effect": 11, "effect_value": 2.0, "notes_attribute": 2, "notes_level": 38615, "position": 9 },
object!{ "timing_sec": 22.166666666666668, "effect": 11, "effect_value": 2.0, "notes_attribute": 2, "notes_level": 38615, "position": 8 },
object!{ "timing_sec": 22.333333333333332, "effect": 11, "effect_value": 2.0, "notes_attribute": 2, "notes_level": 38615, "position": 7 },
object!{ "timing_sec": 22.5, "effect": 13, "effect_value": 0.33333333333333215, "notes_attribute": 2, "notes_level": 38615, "position": 6 }
];
let (chart, combo) = transcode(&beatmap).unwrap();
// 4 source notes + the slide-hold's tail, plus the dummy header
assert_eq!(chart["notes"].len(), 6);
// One slider running 9 -> 8 -> 7 -> 6 (lines 8..5), the last settling into a hold
assert_eq!(shape(&chart), vec![
(8, 1, 0, 2, 7),
(7, 1, 1, 3, 6),
(6, 1, 2, 4, 5),
(5, 1, 3, 5, 5), // slide into hold
(5, 1, 4, 0, 0) // tail
]);
// The same-lane hold head is the only note that does not count
assert_eq!(combo, 4);
// Every type must be one ToMarkerType resolves; 0 would silently become MarkerType.None
for data in chart["notes"].members().skip(1) {
let kind = data["type"].as_i64().unwrap();
assert!((1..=3).contains(&kind), "unresolvable type {}", kind);
}
}
// The 10011 field shape: 4 parallel holds into a full 9-lane wall into a triple. Squashing
// transcode output reproduces the old encoding exactly (one num per cluster, no force
// links); regroup must restore the current encoding BYTE-IDENTICALLY, child_num included.
#[test]
fn regroup_restores_pre_fix_wall_and_parallel_holds() {
let beatmap = jzon::array![
sif_note(1.0, 2, 3, 1.0), sif_note(1.0, 4, 3, 1.0),
sif_note(1.0, 6, 3, 1.0), sif_note(1.0, 8, 3, 1.0),
sif_note(2.75, 1, 1, 0.0), sif_note(2.75, 2, 1, 0.0), sif_note(2.75, 3, 1, 0.0),
sif_note(2.75, 4, 1, 0.0), sif_note(2.75, 5, 1, 0.0), sif_note(2.75, 6, 1, 0.0),
sif_note(2.75, 7, 1, 0.0), sif_note(2.75, 8, 1, 0.0), sif_note(2.75, 9, 1, 0.0),
sif_note(3.625, 3, 1, 0.0), sif_note(3.625, 5, 1, 0.0), sif_note(3.625, 7, 1, 0.0)
];
let (expected, _) = transcode(&beatmap).unwrap();
let mut chart = expected.clone();
squash_to_pre_fix(&mut chart);
// Sanity: the squash really is the old encoding — whole clusters share one num
assert_eq!(chart["notes"][1]["num"], 101);
assert_eq!(chart["notes"][4]["num"], 101); // all 4 hold heads
assert_eq!(chart["notes"][9]["num"], 103);
assert_eq!(chart["notes"][17]["num"], 103); // all 9 wall notes
assert_eq!(chart["notes"][1]["child_num"], 102, "squashed child_num must follow");
for data in chart["notes"].members() {
assert_eq!(data["force_sync_group_id"], 0);
}
assert!(regroup(&mut chart), "a squashed chart must be rewritten");
assert_eq!(jzon::stringify(chart.clone()), jzon::stringify(expected.clone()),
"regroup must reproduce the current transcoder's output exactly");
// Spell the wall out: adjacent-lane pairs, each later chunk force-synced to the
// previous one (heads 101/102, tails 103/104, wall 105..109, triple 110/111)
assert_spawn_groups_hold_at_most_two(&chart);
let wall: Vec<(i64, i64, i64)> = chart["notes"].members()
.filter(|d| d["time"].as_f64() == Some(2.75))
.map(|d| (d["line"].as_i64().unwrap(), d["num"].as_i64().unwrap(), d["force_sync_group_id"].as_i64().unwrap()))
.collect();
let mut wall_sorted = wall.clone();
wall_sorted.sort();
assert_eq!(wall_sorted, vec![
(0, 105, 0), (1, 105, 0),
(2, 106, 105), (3, 106, 105),
(4, 107, 106), (5, 107, 106),
(6, 108, 107), (7, 108, 107),
(8, 109, 108)
]);
// child_num follows the child's NEW num: each head's child_num names a tail group
for head in chart["notes"].members().filter(|d| d["time"].as_f64() == Some(1.0)) {
let child_id = head["child_id"].as_i64().unwrap();
let tail = chart["notes"].members().find(|d| d["id"].as_i64() == Some(child_id)).unwrap();
assert_eq!(head["child_num"], tail["num"].clone());
assert!([103, 104].contains(&tail["num"].as_i64().unwrap()));
}
}
#[test]
fn regroup_is_a_no_op_on_current_encoding() {
let beatmap = jzon::array![
sif_note(1.0, 2, 1, 0.0), sif_note(1.0, 5, 1, 0.0), sif_note(1.0, 8, 1, 0.0),
sif_note(2.0, 4, 3, 1.5)
];
let (chart, _) = transcode(&beatmap).unwrap();
let before = jzon::stringify(chart.clone());
let mut chart = chart;
assert!(!regroup(&mut chart));
assert_eq!(jzon::stringify(chart), before);
}
// Official-shaped encodings (1132_5_Sn t=9.781: num gaps of 3, force_sync naming the other
// pair) have groups of at most two and must never be "normalized" to our num sequence
#[test]
fn regroup_is_a_no_op_on_official_shaped_charts() {
let mut chart = object!{
"max_lane": 9, "sound_name": "", "max_combo_count": 4,
"notes": [
{"id": 0, "num": 100, "line": 0, "time": 0.0, "type": 0, "parent_id": 0, "child_id": 0, "child_num": 0, "child_line": 0, "force_sync_group_id": 0},
{"id": 45, "num": 145, "line": 0, "time": 9.781, "type": 1, "parent_id": 0, "child_id": 0, "child_num": 0, "child_line": 0, "force_sync_group_id": 0},
{"id": 46, "num": 145, "line": 1, "time": 9.781, "type": 1, "parent_id": 0, "child_id": 0, "child_num": 0, "child_line": 0, "force_sync_group_id": 0},
{"id": 47, "num": 148, "line": 7, "time": 9.781, "type": 1, "parent_id": 0, "child_id": 0, "child_num": 0, "child_line": 0, "force_sync_group_id": 145},
{"id": 48, "num": 148, "line": 8, "time": 9.781, "type": 1, "parent_id": 0, "child_id": 0, "child_num": 0, "child_line": 0, "force_sync_group_id": 145}
]
};
let before = jzon::stringify(chart.clone());
assert!(!regroup(&mut chart));
assert_eq!(jzon::stringify(chart), before);
}
#[test]
fn rejects_bad_charts() {
assert!(transcode(&jzon::array![sif_note(1.0, 0, 1, 2.0)]).is_err());

View File

@@ -0,0 +1,121 @@
use std::fs;
use super::{chart, database, song_path, asset_meta, LEVEL_COUNT};
use crate::runtime::get_data_path;
// One-time, idempotent startup migration for charts transcoded before the spawn-group pairing
// rule (chart.rs header): the old transcoder gave every note of an equal-time cluster ONE
// shared num, and the client creates no head markers for a group of 3+ notes
// (LiveMarkerControl.CreateMarkerUI plain-returns on count > 2), so 3+ simultaneous notes
// were judged but never rendered. Stored transcoded charts are derived data with everything
// the regroup needs (time + line per note), so they are rewritten in place — no original
// upload required, which also covers songs from before export support.
//
// The same pass also corrects the stored catalog values that were fabricated rather than
// derived from official masterdata (see below): the looping PLAY cue, the per-song score-rank
// thresholds and the combo-mission targets.
//
// For each song directory with a catalog row, every chart with an over-shared num is
// regrouped (chart::regroup), rewritten to disk, and its level's md5/size in the catalog
// blob updated — the changed md5 re-keys the client's content-addressed cache, so clients
// re-download the fixed chart on their next catalog sync. The revision is bumped ONCE if
// anything changed. Charts the current transcoder produced (and official-shaped encodings)
// are left byte-identical, so re-running every boot is free.
pub fn run() {
if super::disabled() {
return;
}
let Ok(entries) = fs::read_dir(get_data_path("custom_songs")) else {
// No custom_songs directory yet - nothing was ever uploaded
return;
};
let mut music_ids: Vec<i64> = entries.flatten()
.filter_map(|entry| entry.file_name().to_string_lossy().parse::<i64>().ok())
.collect();
music_ids.sort();
let mut songs_changed = 0;
let mut charts_changed = 0;
for music_id in music_ids {
// A song directory without a catalog row is never served; leave it alone
let Some(mut song) = database::get_song(music_id) else { continue; };
let mut changed = false;
// Catalogs written before cue_json took an is_loop argument marked BOTH cues as loop
// cues. A looping PLAY cue never reports playback-end to the client, and the live's end
// trigger (LiveTimeController: isMusicEnded -> InLiveDelay -> EndWait) hangs off exactly
// that, so those lives never finish. Only the metadata changes - the ogg bytes and their
// md5 are untouched, so no re-download is needed, just a catalog resync.
if song["sound"]["play"]["is_loop"] == true {
song["sound"]["play"]["is_loop"] = false.into();
song["sound"]["play"]["loop_end_sec"] = 0.0.into();
changed = true;
println!("Custom song {}: play cue un-looped (pre-fix catalog)", music_id);
}
// Score-rank thresholds and combo-mission targets used to be invented per song. Both are
// objective masterdata: the official live rows all carry ONE score tuple, and every
// live_mission_combo row is round(hardest full combo * 0.2/0.4/0.6/0.8) (see
// default_scores / mission_combo). Recompute them the way an edit would, so songs
// uploaded before the fix stop handing out rank S for free and stop asking for a literal
// full combo on the fourth combo mission.
let (score, multi_score) = super::default_scores();
if song["score"] != score || song["multi_score"] != multi_score {
song["score"] = score;
song["multi_score"] = multi_score;
changed = true;
println!("Custom song {}: score rank thresholds reset to the official values", music_id);
}
// Same "hardest difficulty" rule as upload/edit: the last level entry, which both write
// in ascending level order
if let Some(hardest) = song["levels"].members().last().and_then(|l| l["full_combo"].as_i64()) {
let missions = super::mission_combo(hardest);
if song["mission_combo"] != missions {
song["mission_combo"] = missions;
changed = true;
println!("Custom song {}: combo missions rescaled to the official 20/40/60/80%", music_id);
}
}
for level in 1..=LEVEL_COUNT {
let path = song_path(music_id, &format!("chart_{}.json", level));
let Ok(bytes) = fs::read(&path) else { continue; };
let Ok(mut chart_data) = jzon::parse(&String::from_utf8_lossy(&bytes)) else {
println!("Custom song {} chart {}: not valid JSON, migration skipped", music_id, level);
continue;
};
if !chart::regroup(&mut chart_data) {
continue;
}
let new_bytes = jzon::stringify(chart_data);
if let Err(e) = fs::write(&path, &new_bytes) {
println!("Custom song {} chart {}: rewrite failed ({}), migration skipped", music_id, level, e);
continue;
}
// The catalog md5/size must follow the served bytes or the client's
// download-and-verify loop would never accept the asset
let (md5, size) = asset_meta(new_bytes.as_bytes());
for entry in song["levels"].members_mut() {
if entry["level"] == level {
entry["md5"] = md5.clone().into();
entry["size"] = size.into();
}
}
changed = true;
charts_changed += 1;
println!("Custom song {}: regrouped chart level {} (pre-pairing spawn groups)", music_id, level);
}
if changed {
database::update_song(music_id, &song);
songs_changed += 1;
}
}
if songs_changed > 0 {
database::bump_revision();
println!("Custom song spawn-group migration: rewrote {} chart(s) in {} song(s), catalog revision bumped", charts_changed, songs_changed);
}
}

View File

@@ -40,27 +40,6 @@ fn region_subdir(region: Region) -> &'static str {
}
}
pub fn get_all(region: Region) -> JsonValue {
let mut rv = object!{};
for file in dir_for(region).files() {
let table_name = file.path()
.file_stem()
.and_then(|s| s.to_str())
.unwrap_or_default();
if table_name.is_empty() {
continue;
}
if let Some(bytes) = csv_bytes(region, table_name) {
rv[table_name] = String::from_utf8(bytes).unwrap_or_default().into();
}
}
rv
}
pub fn csv_bytes(region: Region, name: &str) -> Option<Vec<u8>> {
let rel = format!("{}/{}.csv", region_subdir(region), name);
if let Some(bytes) = crate::runtime::read_masterdata_file(&rel) {

File diff suppressed because it is too large Load Diff

View File

@@ -1,51 +1,223 @@
_id,_name,_nameRuby,_detailText,_category,_schoolGrade,_charaCategory,_masterGroupId,_spriteName,_displayOrder,_height,_bloodType,_birsday,_voiceActor,_imageColor,_imageColorDark,_nameRichtextGacha,_masterReleaseLabelId
1001,高坂穂乃果,こうさかほのか,μ'sの発起人。いつも笑顔でとにかく元気が取り柄。多少の困難があっても持ち前の超ポジティブシンキングで次々と突破していく。,1,2,1,101,1001,1001,157cm,O型,8月3日,新田恵海,FF9210,FF9210,<size=100>高<size=80>坂 <size=100>穂<size=80>乃果,1
1002,絢瀬絵里,あやせえり,ロシア人のクォーター。頭脳明晰、運動神経抜群、何をやらせてもそつなくこなす。学校でも人気抜群で、責任感が強く、生徒会長を務めている。,1,3,1,103,1002,1002,162cm,B型,10月21日,南條愛乃,47C3FB,47C3FB,<size=100>絢<size=80>瀬 <size=100>絵<size=80>里,1
1003,南 ことり,みなみことり,おっとりと柔らかい性格で、勉強もそつなくこなす優等生。おっとりとはしているが芯は強く、物おじしない。穂乃果の一番の友人。,1,2,1,101,1003,1003,159cm,O型,9月12日,内田 彩,BAB3B3,BAB3B3,<size=100>南<size=80> <size=100>こ<size=80>とり,1
1004,園田海未,そのだうみ,凛とした雰囲気を漂わせる大和なでしこ。子供の頃から弓道で鍛えられ、礼儀作法も完璧な女の子。悪事や怠けるといったことが大嫌い。穂乃果、ことりとは幼馴染。,1,2,1,102,1004,1004,159cm,A型,3月15日,三森すずこ,226BF1,226BF1,<size=100>園<size=80>田 <size=100>海<size=80>未,1
1005,星空 凛,ほしぞらりん,体育会系でいつも明るく、くよくよ悩むより身体を動かすタイプ。体育会系だけあって面倒見はよく、いつも幼馴染の花陽の面倒を見ている。,1,1,1,102,1005,1005,155cm,A型,11月1日,飯田里穂,FCD500,CEAE00,<size=100>星<size=80>空 <size=100>凛<size=80>,1
1006,西木野真姫,にしきのまき,高飛車でプライドが高く、本心を見せるのが苦手。持ち前の度胸で上級生にも強気で渡り合う。実はさみしがりな一面も。,1,1,1,103,1006,1006,161cm,AB型,4月19日,Pile,F14747,F14747,<size=100>西<size=80>木野 <size=100>真<size=80>姫,1
1007,東條 希,とうじょうのぞみ,マイペースな性格で、関西弁まじりの独特の口調で話す。おおらかさがあり全メンバー中、実は精神年齢は一番上と思わせる所も。,1,3,1,102,1007,1007,159cm,O型,6月9日,楠田亜衣奈,C355E8,C355E8,<size=100>東<size=80>條 <size=100>希<size=80>,1
1008,小泉花陽,こいずみはなよ,クラスでもあまり目立たない、おとなしい女の子。自信がなく、何をやろうとしても諦めてしまいがち。白いご飯が大好物。,1,1,1,101,1008,1008,156cm,B型,1月17日,久保ユリカ,44CF72,44CF72,<size=100>小<size=80>泉 <size=100>花<size=80>陽,1
1009,矢澤にこ,やざわにこ,アイドルを目指して日夜励んでいる、正真正銘のアイドルオタク。「にっこにっこにー」が合言葉。,1,3,1,103,1009,1009,154cm,A型,7月22日,徳井青空,FF548F,FF548F,<size=100>矢<size=80>澤 <size=100>に<size=80>こ,1
2001,高海千歌,たかみちか,Aqoursの発起人。人懐っこく負けず嫌い。持ち前の明るさと強引さで周囲を次々に巻き込んでいく。,2,2,1,201,2001,2001,157cm,B型,8月1日,伊波杏樹,FF700F,FF700F,<size=100>高<size=80>海 <size=100>千<size=80>歌,1
2002,桜内梨子,さくらうちりこ,大人っぽく落ち着いて見えるが実は慌て者で早とちりや勘違いをしてしまうことも。,2,2,1,203,2002,2002,160cm,A型,9月19日,逢田梨香子,FB697E,FB697E,<size=100>桜<size=80>内 <size=100>梨<size=80>子,1
2003,松浦果南,まつうらかなん,大人っぽくサバサバした性格で、あまり物事にこだわりがない。落ち着いていて、どこかクールな雰囲気を纏っている。,2,3,1,202,2003,2003,162cm,O型,2月10日,諏訪ななか,02D09D,02D09D,<size=100>松<size=80>浦 <size=100>果<size=80>南,1
2004,黒澤ダイヤ,くろさわだいや,旧網元で地元でも有名な名家の子女で、学院の生徒会長を務める。プライドが高い完璧主義者で、中途半端や曲がったことは絶対に許さない。,2,3,1,202,2004,2004,162cm,A型,1月1日,小宮有紗,E0083B,E0083B,<size=100>黒<size=80>澤 <size=100>ダ<size=80>イヤ,1
2005,渡辺 曜,わたなべよう,考えるよりも先に身体が動くタイプ。フェリーの船長を父に持ち、自身も将来は船長になりたいと思っている。,2,2,1,201,2005,2005,157cm,AB型,4月17日,斉藤朱夏,07B0E8,07B0E8,<size=100>渡<size=80>辺 <size=100>曜<size=80>,1
2006,津島善子,つしまよしこ,"小悪魔風のファッションに身を包み、自らを""堕天使ヨハネ""と称する。都会の沼津出身。明るく物おじせず、気が利いて頭も良いが、ものすごく運が悪く、行く先々で想定外のトラブルに見舞われてしまう。",2,1,1,203,2006,2006,156cm,O型,7月13日,小林愛香,A9ACB2,A9ACB2,<size=100>津<size=80>島 <size=100>善<size=80>子,1
2007,国木田花丸,くにきだはなまる,読書好きで、特に日本文学をこよなく愛する文学少女。歌が得意で聖歌隊に所属している。周囲の人々に気を配る優しい性格。,2,1,1,202,2007,2007,152cm,O型,3月4日,高槻かなこ,FFC000,FFC000,<size=100>国<size=80>木田 <size=100>花<size=80>丸,1
2008,小原鞠莉,おはらまり,ホテルチェーンを経営するイタリア系アメリカ人の父を持つハーフ。明るい性格で、個人行動が多い。どんなことがあっても絶対にめげない性格で、恐れを知らないチャレンジャー。,2,3,1,203,2008,2008,163cm,AB型,6月13日,鈴木愛奈,A132D9,A132D9,<size=100>小<size=80>原 <size=100>鞠<size=80>莉,1
2009,黒澤ルビィ,くろさわるびぃ,泣き虫で臆病だけれど、名家のお嬢様だけあって芯は持っている。ずっとアイドルにあこがれていた。唯一の得意は裁縫。,2,1,1,201,2009,2009,154cm,A型,9月21日,降幡 愛,F143B4,F143B4,<size=100>黒<size=80>澤 <size=100>ル<size=80>ビィ,1
3001,上原歩夢,うえはらあゆむ,何事にもコツコツ取り組む努力家。あることをきっかけにスクールアイドルをはじめる。,3,2,1,302,3001,3001,159cm,A型,3月1日,大西亜玖璃,F48099,F48099,<size=100>上<size=80>原 <size=100>歩<size=80>夢,1
3002,中須かすみ,なかすかすみ,かわいいものが大好きで、スクールアイドルに対する憧れは人一倍強い。負けず嫌いな性格で、「かすかす」というあだ名で呼ばれると怒る。,3,1,1,303,3002,3002,155cm,B型,1月23日,相良茉優,EDDC00,D5C500,<size=100>中<size=80>須 <size=100>か<size=80>すみ,1
3003,桜坂しずく,おうさかしずく,しっかり者の優等生で、演劇部とスクールアイドル同好会を兼部している。,3,1,1,302,3003,3003,157cm,A型,4月3日,前田佳織里,2CAED5,2CAED5,<size=90>桜<size=80>坂 <size=90>し<size=80>ずく,1
3004,朝香果林,あさかかりん,高校生離れしたルックスとプロポーションを持ち、読者モデルをしている。大人っぽい見た目とは裏腹に意外とピュアな一面も。,3,3,1,301,3004,3004,167cm,AB型,6月29日,久保田未夢,4A62D2,4A62D2,<size=100>朝<size=80>香 <size=100>果<size=80>林,1
3005,宮下 愛,みやしたあい,運動神経が抜群で、様々な部の助っ人として活躍している。ノリの良い性格で面倒見がいいので友達が多い。,3,2,1,301,3005,3005,163cm,A型,5月30日,村上奈津実,F6663E,F6663E,<size=100>宮<size=80>下 <size=100>愛<size=80>,1
3006,近江彼方,このえかなた,いつも眠そうにしているが、料理をすることと妹をかわいがることに関しては情熱を燃やす。,3,3,1,303,3006,3006,158cm,O型,12月16日,鬼頭明里,A96398,A96398,<size=100>近<size=80>江 <size=100>彼<size=80>方,1
3007,優木せつ菜,ゆうきせつな,元気いっぱいの笑顔と力強いパフォーマンスが持ち味のスクールアイドル。スクールアイドル活動で忙しいためか、「校内でその姿を見た人はいない」という噂がある。,3,2,1,302,3007,3007,154cm,O型,8月8日,林 鼓子,DC2235,DC2235,<size=100>優<size=80>木 <size=100>せ<size=80>つ菜,1
3008,エマ・ヴェルデ,エマ・ヴェルデ,スクールアイドルに憧れて、スイスからやってきた留学生。おっとりマイペースで、故郷の山や自然を愛する心優しい女の子。,3,3,1,303,3008,3008,166cm,O型,2月5日,指出毬亜,7EC36E,7EC36E,<size=100>エ<size=80>マ・<size=100>ヴ<size=80>ェルデ,1
3009,天王寺璃奈,てんのうじりな,感情を顔に出すことが苦手なため不愛想に思われがちだが、本当は心豊かな女の子で人懐っこい。,3,1,1,303,3009,3009,149cm,B型,11月13日,田中ちえ美,A0A3BC,A0A3BC,<size=100>天<size=80>王寺 <size=100>璃<size=80>奈,1
3010,三船栞子,みふねしおりこ,真面目な性格で「みんなのために」行動できる。ランジュとは幼馴染。,3,1,1,304,3010,3010,160cm,AB型,10月5日,小泉萌香,37C4A1,37C4A1,<size=100>三<size=80>船 <size=100>栞<size=80>子,1
3011,ミア・テイラー,ミア・テイラー,NYCからやってきた留学生。世界的に有名な音楽一家テイラー家の娘で、14歳でありながら、飛び級で3年生に編入してきた。,3,3,1,304,3011,3011,156cm,AB型,12月6日,内田 秀,D7D6C9,B3B098,<size=100>ミ<size=80>ア・<size=100>テ<size=80>イラー,1
3012,鐘 嵐珠,ショウ・ランジュ,香港からやってきた留学生。かなりのお嬢様で、やることすべてパーフェクトな結果を出す。好きな食べ物は肉。,3,2,1,304,3012,3012,165cm,B型,2月15日,法元明菜,F7CBC7,E2B0AC,<size=100>鐘<size=80> <size=100>嵐<size=80>珠,1
4001,澁谷かのん,しぶやかのん,シャイだが、純粋に歌を愛する心と、人の気持ちになって考えることが出来る優しさを持ち、Liella!を引っ張っていく存在。,4,2,1,403,4001,4001,159cm,A型,5月1日,伊達さゆり,F57924,F57924,<size=100>澁<size=80>谷 <size=100>か<size=80>のん,1
4002,唐 可可,たんくぅくぅ,上海から結ヶ丘女子高等学校に入学した女の子。よく笑いよく泣く情熱的な女の子で、好きなものには一直線。可愛いものも大好きなLiella!の太陽のような存在。,4,2,1,404,4002,4002,159cm,O型,7月17日,Liyuu,85EDEC,29E2E0,<size=100>唐<size=80> <size=100>可<size=80>可,1
4003,嵐 千砂都,あらしちさと,かのんの幼なじみで大親友。努力家で献身的な性格は誰からも好かれており、ダンス担当として、Liella!のレベルアップに貢献していく。丸いものが大好き。,4,2,1,405,4003,4003,155cm,B型,2月25日,岬 なこ,FF6E97,FF6E97,<size=100>嵐<size=80> <size=100>千<size=80>砂都,1
4004,平安名すみれ,へあんなすみれ,高飛車で勝ち気な所もあるが、根は人の悲しみが分かる優しい子でもある。いざという時に意外な能力を発揮するLiella!のジョーカー的存在。実家は学校近くの神社。,4,2,1,403,4004,4004,161cm,AB型,9月28日,ペイトン尚未,70ED62,60E251,<size=100>平<size=80>安名 <size=100>す<size=80>みれ,1
4005,葉月 恋,はづきれん,結ヶ丘女子高等学校の設立者の娘であり、幼い頃からピアやフィギュアスケートなども得意なLiella!のエース。生徒会長も務め、落ち着いた物腰は生徒からも人気だが、世間知らずな一面も。,4,2,1,404,4005,4005,163cm,A型,11月24日,青山なぎさ,2020AB,2020AB,<size=100>葉<size=80>月 <size=100>恋<size=80>,1
4006,桜小路きな子,さくらこうじきなこ,大らかで明るく人当たりも柔らかな、おっとりした、という表現がよく合う女の子。一人東京の高校に出てくると決心し、結ヶ丘女子に入学してきた。,4,1,1,405,4006,4006,159cm,O型,4月10日,鈴原希実,F6EB41,C9BF29,<size=100>桜<size=80>小路 <size=100>き<size=80>な子,1
4007,米女メイ,よねめめい,斜に構えた、一見とっつきにくい不良っぽい女の子。正義感が強く、間違ったことがあると毅然とした態度で立ち向かう一面も。,4,1,1,403,4007,4007,155cm,A型,10月29日,薮島朱音,F93535,F93535,<size=100>米<size=80>女 <size=100>メ<size=80>イ,1
4008,若菜四季,わかなしき,子供の頃から無口であまり人と接することがなく、一人遊びが大好き。性格は冷静沈着。ミステリアスな雰囲気で感情を口にすることは少ないが、メンバーへの想いは人一倍強い。,4,1,1,405,4008,4008,161cm,B型,6月17日,大熊和奏,B4F6D8,75AD88,<size=100>若<size=80>菜 <size=100>四<size=80>季,1
4009,鬼塚夏美,おにつかなつみ,明るくて前向き、流行に敏感で、行動力がありなんでも挑戦してみるタイプの女の子。目的のためには手段を選ばない所もあり、裏から手を回す作戦を考えることもしばしば。,4,1,1,405,4009,4009,152cm,AB型,8月7日,絵森 彩,FC3ABA,FC3ABA,<size=100>鬼<size=80>塚 <size=100>夏<size=80>美,1
4010,ウィーン・マルガレーテ,ウィーン・マルガレーテ,オーストリアから日本に留学してきた女の子。ラブライブ!出場をきっかけに結ヶ丘女子高等学校に編入。音楽センスに優れ素晴らしい歌声を持つが、負けん気が強すぎる所があり、周りと衝突することも。,4,1,1,404,4010,4010,161cm,A型,1月20日,結那,E09FF7,E09FF7,<size=100>ウ<size=80>ィーン・ <size=100>マ<size=80>ルガレーテ,223121502
4011,鬼塚冬毬,おにつかとまり,常に効率的な行動を心がけていて、無駄なことが大嫌い。物事をシビアに分析しがちで実現が難しいものに対して冷淡な目で見てしまう所も。姉である夏美のことが大好き。,4,1,1,405,4011,4011,163cm,B型,12月28日,坂倉 花,4CD2E2,4CD2E2,<size=100>鬼<size=80>塚 <size=100>冬<size=80>毬,223121502
6001,ヨハネ,ヨハネ,ヌマヅで占い屋を営む少女。こだわり屋で少々クセのある気質だが根は優しく、頼まれごとは断れない。,6,0,1,9901,6001,6001,156cm,,7月13日,小林愛香,A9ACB2,A9ACB2,<size=100>ヨ<size=80>ハネ,223121403
6002,ハナマル,ハナマル,ヨハネの幼馴染。美味しいものが大好きで、屋台で手作りのお菓子などを売って暮らしている。,6,0,1,9901,6002,6002,152cm,,3月4日,高槻かなこ,FFC000,FFC000,<size=100>ハ<size=80>ナマル,223121403
6003,ダイヤ,ダイヤ,ヌマヅ行政局の執務長官。才色兼備で曲がったことは許さない完璧主義者。,6,0,1,9901,6003,6003,162cm,,1月1日,小宮有紗,E0083B,E0083B,<size=100>ダ<size=80>イヤ,223121403
6004,ルビィ,ルビィ,妖精族の末裔。引っ込み思案な性格で、普段は人に見つからないように暮らしている。,6,0,1,9901,6004,6004,みかん5個分,,9月21日,降幡 愛,F143B4,F143B4,<size=100>ル<size=80>ビィ,223121403
6005,チカ,チカ,ウチーラ地区にある老舗旅館の看板娘で3人姉妹の末っ子。人見知りせず、負けず嫌い。,6,0,1,9901,6005,6005,157cm,,8月1日,伊波杏樹,FF700F,FF700F,<size=100>チ<size=80>カ,223121403
6006,ヨウ,ヨウ,ヌマヅでメッセンジャーとして働く少女。いつも明るく元気印で、運動神経抜群。,6,0,1,9901,6006,6006,157cm,,4月17日,斉藤朱夏,07B0E8,07B0E8,<size=100>ヨ<size=80>ウ,223121403
6007,カナン,カナン,ウチーラ地区にある工房を営むメカニック。海から拾ったガラクタを使って、修理や工作をして暮らしている。,6,0,1,9901,6007,6007,162cm,,2月10日,諏訪ななか,02D09D,02D09D,<size=100>カ<size=80>ナン,223121403
6008,リコ,リコ,ヌマヅの外からやってきた動物学者。落ち着いた性格だが、探究心旺盛でなりふり構わないことも。,6,0,1,9901,6008,6008,160cm,,9月19日,逢田梨香子,FB697E,FB697E,<size=100>リ<size=80>コ,223121403
6009,マリ,マリ,ワーシマー島にある城に住む魔王家系の末裔。あまり人前には姿を現さない。,6,0,1,9901,6009,6009,163cm,,6月13日,鈴木愛奈,A132D9,A132D9,<size=100>マ<size=80>リ,223121403
_id,_name,_nameRuby,_detailText,_category,_schoolGrade,_charaCategory,_masterGroupId,_spriteName,_displayOrder,_height,_bloodType,_birsday,_voiceActor,_imageColor,_imageColorDark,_nameRichtextGacha,_nameEn,_nameRubyEn,_detailTextEn,_bloodTypeEn,_birsdayEn,_voiceActorEn,_nameRichtextGachaEn,_masterReleaseLabelId
1001,高坂穂乃果,こうさかほのか,μ'sの発起人。いつも笑顔でとにかく元気が取り柄。多少の困難があっても持ち前の超ポジティブシンキングで次々と突破していく。,1,2,1,101,1001,1001,157cm,O型,8月3日,新田恵海,FF9210,FF9210,<size=100>高<size=80>坂 <size=100>穂<size=80>乃果,Honoka Kosaka,Honoka Kosaka,The founder of μ's. Honoka is always smiling and full of energy. She powers through any difficulty with her trademark super-positive thinking.,O,Aug 3,Emi Nitta,<size=100>H<size=80>onoka<size=100>K<size=80>osaka,1
1002,絢瀬絵里,あやせえり,ロシア人のクォーター。頭脳明晰、運動神経抜群、何をやらせてもそつなくこなす。学校でも人気抜群で、責任感が強く、生徒会長を務めている。,1,3,1,103,1002,1002,162cm,B型,10月21日,南條愛乃,47C3FB,47C3FB,<size=100>絢<size=80>瀬 <size=100>絵<size=80>里,Eli Ayase,Eli Ayase,"Eli is one-quarter Russian. She's sharp, athletic, and handles whatever she's given with ease. Popular and responsible, she serves as student council president.",B,Oct 21,Yoshino Nanjo,<size=100>E<size=80>li<size=100>A<size=80>yase,1
1003,南 ことり,みなみことり,おっとりと柔らかい性格で、勉強もそつなくこなす優等生。おっとりとはしているが芯は強く、物おじしない。穂乃果の一番の友人。,1,2,1,101,1003,1003,159cm,O型,9月12日,内田 彩,BAB3B3,BAB3B3,<size=100>南<size=80> <size=100>こ<size=80>とり,Kotori Minami,Kotori Minami,"Kotori is a gentle, soft-spoken honor student who excels at everything she does. Calm yet strong-willed, she's never shy about speaking her mind. She's Honoka's closest friend.",O,Sep 12,Aya Uchida,<size=100>K<size=80>otori<size=100>M<size=80>inami,1
1004,園田海未,そのだうみ,凛とした雰囲気を漂わせる大和なでしこ。子供の頃から弓道で鍛えられ、礼儀作法も完璧な女の子。悪事や怠けるといったことが大嫌い。穂乃果、ことりとは幼馴染。,1,2,1,102,1004,1004,159cm,A型,3月15日,三森すずこ,226BF1,226BF1,<size=100>園<size=80>田 <size=100>海<size=80>未,Umi Sonoda,Umi Sonoda,"An elegant young woman who embodies traditional Japanese beauty. Trained in kyudo (archery) since childhood, she has perfect manners and despises wrongdoing and laziness. Umi, Honoka, and Kotori are childhood friends.",A,Mar 15,Suzuko Mimori,<size=100>U<size=80>mi<size=100>S<size=80>onoda,1
1005,星空 凛,ほしぞらりん,体育会系でいつも明るく、くよくよ悩むより身体を動かすタイプ。体育会系だけあって面倒見はよく、いつも幼馴染の花陽の面倒を見ている。,1,1,1,102,1005,1005,155cm,A型,11月1日,飯田里穂,FCD500,CEAE00,<size=100>星<size=80>空 <size=100>凛<size=80>,Rin Hoshizora,Rin Hoshizora,"Rin is a bright, athletic girl who'd rather move than mope. True to her sporty nature, she's caring and always looks after her childhood friend Hanayo.",A,Nov 1,Riho Iida,<size=100>R<size=80>in<size=100>H<size=80>oshizora,1
1006,西木野真姫,にしきのまき,高飛車でプライドが高く、本心を見せるのが苦手。持ち前の度胸で上級生にも強気で渡り合う。実はさみしがりな一面も。,1,1,1,103,1006,1006,161cm,AB型,4月19日,Pile,F14747,F14747,<size=100>西<size=80>木野 <size=100>真<size=80>姫,Maki Nishikino,Maki Nishikino,"Maki is proud, assertive, and bad at showing her true feelings. Her natural nerve lets her stand up to her seniors—but underneath it all, she's surprisingly lonely.",AB,Apr 19,Pile,<size=100>M<size=80>aki<size=100>N<size=80>ishikino,1
1007,東條 希,とうじょうのぞみ,マイペースな性格で、関西弁まじりの独特の口調で話す。おおらかさがあり全メンバー中、実は精神年齢は一番上と思わせる所も。,1,3,1,102,1007,1007,159cm,O型,6月9日,楠田亜衣奈,C355E8,C355E8,<size=100>東<size=80>條 <size=100>希<size=80>,Nozomi Tojo,Nozomi Tojo,"A free spirit with a unique speech style flecked with Kansai dialect. Nozomi is easygoing and, despite her age, often comes across as the most mature member of μ's.",O,Jun 9,Aina Kusuda,<size=100>N<size=80>ozomi<size=100>T<size=80>ojo,1
1008,小泉花陽,こいずみはなよ,クラスでもあまり目立たない、おとなしい女の子。自信がなく、何をやろうとしても諦めてしまいがち。白いご飯が大好物。,1,1,1,101,1008,1008,156cm,B型,1月17日,久保ユリカ,44CF72,44CF72,<size=100>小<size=80>泉 <size=100>花<size=80>陽,Hanayo Koizumi,Hanayo Koizumi,Hanayo is a shy girl who doesn't stand out much in class. She lacks confidence and tends to give up easily. Her favorite food is plain white rice.,B,Jan 17,Yurika Kubo,<size=100>H<size=80>anayo<size=100>K<size=80>oizumi,1
1009,矢澤にこ,やざわにこ,アイドルを目指して日夜励んでいる、正真正銘のアイドルオタク。「にっこにっこにー」が合言葉。,1,3,1,103,1009,1009,154cm,A型,7月22日,徳井青空,FF548F,FF548F,<size=100>矢<size=80>澤 <size=100>に<size=80>こ,Nico Yazawa,Nico Yazawa,"Nico is a true-blue idol otaku striving day and night to become an idol herself. Her catchphrase is ""Nico-Nico-Nii!""",A,Jul 22,Sora Tokui,<size=100>N<size=80>ico<size=100>Y<size=80>azawa,1
2001,高海千歌,たかみちか,Aqoursの発起人。人懐っこく負けず嫌い。持ち前の明るさと強引さで周囲を次々に巻き込んでいく。,2,2,1,201,2001,2001,157cm,B型,8月1日,伊波杏樹,FF700F,FF700F,<size=100>高<size=80>海 <size=100>千<size=80>歌,Chika Takami,Chika Takami,"The founder of Aqours. Chika is friendly and fiercely competitive, and her trademark cheer and pushiness keep sweeping everyone around her into the fun.",B,Aug 1,Anju Inami,<size=100>C<size=80>hika<size=100>T<size=80>akami,1
2002,桜内梨子,さくらうちりこ,大人っぽく落ち着いて見えるが実は慌て者で早とちりや勘違いをしてしまうことも。,2,2,1,203,2002,2002,160cm,A型,9月19日,逢田梨香子,FB697E,FB697E,<size=100>桜<size=80>内 <size=100>梨<size=80>子,Riko Sakurauchi,Riko Sakurauchi,"At first glance Riko seems mature and composed, but she's actually quite the worrier who jumps to conclusions and gets the wrong idea.",A,Sep 19,Rikako Aida,<size=100>R<size=80>iko<size=100>S<size=80>akurauchi,1
2003,松浦果南,まつうらかなん,大人っぽくサバサバした性格で、あまり物事にこだわりがない。落ち着いていて、どこかクールな雰囲気を纏っている。,2,3,1,202,2003,2003,162cm,O型,2月10日,諏訪ななか,02D09D,02D09D,<size=100>松<size=80>浦 <size=100>果<size=80>南,Kanan Matsuura,Kanan Matsuura,"Kanan is mature and laid-back, not one to fuss over things. She's calm and carries herself with a cool air.",O,Feb 10,Nanaka Suwa,<size=100>K<size=80>anan<size=100>M<size=80>atsuura,1
2004,黒澤ダイヤ,くろさわだいや,旧網元で地元でも有名な名家の子女で、学院の生徒会長を務める。プライドが高い完璧主義者で、中途半端や曲がったことは絶対に許さない。,2,3,1,202,2004,2004,162cm,A型,1月1日,小宮有紗,E0083B,E0083B,<size=100>黒<size=80>澤 <size=100>ダ<size=80>イヤ,Dia Kurosawa,Dia Kurosawa,"Dia comes from a renowned old family of former net masters and serves as the student council president. A proud perfectionist, she won't tolerate anything half-baked or dishonest.",A,Jan 1,Arisa Komiya,<size=100>D<size=80>ia<size=100>K<size=80>urosawa,1
2005,渡辺 曜,わたなべよう,考えるよりも先に身体が動くタイプ。フェリーの船長を父に持ち、自身も将来は船長になりたいと思っている。,2,2,1,201,2005,2005,157cm,AB型,4月17日,斉藤朱夏,07B0E8,07B0E8,<size=100>渡<size=80>辺 <size=100>曜<size=80>,You Watanabe,You Watanabe,"You acts before she thinks. Her father is a ferry captain, and she dreams of becoming one herself someday.",AB,Apr 17,Shuka Saito,<size=100>Y<size=80>ou<size=100>W<size=80>atanabe,1
2006,津島善子,つしまよしこ,"小悪魔風のファッションに身を包み、自らを""堕天使ヨハネ""と称する。都会の沼津出身。明るく物おじせず、気が利いて頭も良いが、ものすごく運が悪く、行く先々で想定外のトラブルに見舞われてしまう。",2,1,1,203,2006,2006,156cm,O型,7月13日,小林愛香,A9ACB2,A9ACB2,<size=100>津<size=80>島 <size=100>善<size=80>子,Yoshiko Tsushima,Yoshiko Tsushima,"Always dressed in a mischievous style, Yoshiko calls herself ""Yohane, the Fallen Angel."" She hails from the big city of Numazu. Bright, outgoing, witty, and clever—but incredibly unlucky, forever running into unexpected trouble wherever she goes.",O,Jul 13,Aika Kobayashi,<size=100>Y<size=80>oshiko<size=100>T<size=80>sushima,1
2007,国木田花丸,くにきだはなまる,読書好きで、特に日本文学をこよなく愛する文学少女。歌が得意で聖歌隊に所属している。周囲の人々に気を配る優しい性格。,2,1,1,202,2007,2007,152cm,O型,3月4日,高槻かなこ,FFC000,FFC000,<size=100>国<size=80>木田 <size=100>花<size=80>丸,Hanamaru Kunikida,Hanamaru Kunikida,"A bookworm with a special love for Japanese literature. Hanamaru is a gifted singer and member of the choir, and a kind girl who looks out for everyone around her.",O,Mar 4,Kanako Takatsuki,<size=100>H<size=80>anamaru<size=100>K<size=80>unikida,1
2008,小原鞠莉,おはらまり,ホテルチェーンを経営するイタリア系アメリカ人の父を持つハーフ。明るい性格で、個人行動が多い。どんなことがあっても絶対にめげない性格で、恐れを知らないチャレンジャー。,2,3,1,203,2008,2008,163cm,AB型,6月13日,鈴木愛奈,A132D9,A132D9,<size=100>小<size=80>原 <size=100>鞠<size=80>莉,Mari Ohara,Mari Ohara,"Mari is an upbeat, independent half-Italian American with a fearless spirit—she never backs down from a challenge! Her father runs a hotel chain.",AB,Jun 13,Aina Suzuki,<size=100>M<size=80>ari<size=100>O<size=80>hara,1
2009,黒澤ルビィ,くろさわるびぃ,泣き虫で臆病だけれど、名家のお嬢様だけあって芯は持っている。ずっとアイドルにあこがれていた。唯一の得意は裁縫。,2,1,1,201,2009,2009,154cm,A型,9月21日,降幡 愛,F143B4,F143B4,<size=100>黒<size=80>澤 <size=100>ル<size=80>ビィ,Ruby Kurosawa,Ruby Kurosawa,"Though shy and quick to cry, Ruby comes from a distinguished family and has a hidden core of strength. She's always dreamed of being an idol. Her one talent is sewing.",A,Sep 21,Ai Furihata,<size=100>R<size=80>uby<size=100>K<size=80>urosawa,1
3001,上原歩夢,うえはらあゆむ,何事にもコツコツ取り組む努力家。あることをきっかけにスクールアイドルをはじめる。,3,2,1,302,3001,3001,159cm,A型,3月1日,大西亜玖璃,F48099,F48099,<size=100>上<size=80>原 <size=100>歩<size=80>夢,Ayumu Uehara,Ayumu Uehara,Ayumu is a diligent hard worker who tackles everything step by step. A certain incident inspired her to become a school idol.,A,Mar 1,Aguri Onishi,<size=100>A<size=80>yumu<size=100>U<size=80>ehara,1
3002,中須かすみ,なかすかすみ,かわいいものが大好きで、スクールアイドルに対する憧れは人一倍強い。負けず嫌いな性格で、「かすかす」というあだ名で呼ばれると怒る。,3,1,1,303,3002,3002,155cm,B型,1月23日,相良茉優,EDDC00,D5C500,<size=100>中<size=80>須 <size=100>か<size=80>すみ,Kasumi Nakasu,Kasumi Nakasu,"A lover of all things cute, Kasumi has a passion for school idols like no other. Fiercely competitive, she gets upset if anyone calls her ""Kasukasu.""",B,Jan 23,Mayu Sagara,<size=100>K<size=80>asumi<size=100>N<size=80>akasu,1
3003,桜坂しずく,おうさかしずく,しっかり者の優等生で、演劇部とスクールアイドル同好会を兼部している。,3,1,1,302,3003,3003,157cm,A型,4月3日,前田佳織里,2CAED5,2CAED5,<size=90>桜<size=80>坂 <size=90>し<size=80>ずく,Shizuku Osaka,Shizuku Osaka,Shizuku is a dependable honor student who juggles both the Drama Club and the School Idol Club.,A,Apr 3,Kaori Maeda,<size=90>S<size=80>hizuku<size=90>O<size=80>saka,1
3004,朝香果林,あさかかりん,高校生離れしたルックスとプロポーションを持ち、読者モデルをしている。大人っぽい見た目とは裏腹に意外とピュアな一面も。,3,3,1,301,3004,3004,167cm,AB型,6月29日,久保田未夢,4A62D2,4A62D2,<size=100>朝<size=80>香 <size=100>果<size=80>林,Karin Asaka,Karin Asaka,"With looks and a figure well beyond her years, Karin works as a magazine model. Despite her grown-up appearance, she has a surprisingly innocent side.",AB,Jun 29,Miyu Kubota,<size=100>K<size=80>arin<size=100>A<size=80>saka,1
3005,宮下 愛,みやしたあい,運動神経が抜群で、様々な部の助っ人として活躍している。ノリの良い性格で面倒見がいいので友達が多い。,3,2,1,301,3005,3005,163cm,A型,5月30日,村上奈津実,F6663E,F6663E,<size=100>宮<size=80>下 <size=100>愛<size=80>,Ai Miyashita,Ai Miyashita,"Ai is a natural athlete who pitches in as a ringer for all kinds of clubs. Her easygoing, caring nature means she has loads of friends.",A,May 30,Natsumi Murakami,<size=100>A<size=80>i<size=100>M<size=80>iyashita,1
3006,近江彼方,このえかなた,いつも眠そうにしているが、料理をすることと妹をかわいがることに関しては情熱を燃やす。,3,3,1,303,3006,3006,158cm,O型,12月16日,鬼頭明里,A96398,A96398,<size=100>近<size=80>江 <size=100>彼<size=80>方,Kanata Konoe,Kanata Konoe,"Kanata always looks sleepy, but she's truly passionate about two things: cooking and doting on her little sister.",O,Dec 16,Akari Kito,<size=100>K<size=80>anata<size=100>K<size=80>onoe,1
3007,優木せつ菜,ゆうきせつな,元気いっぱいの笑顔と力強いパフォーマンスが持ち味のスクールアイドル。スクールアイドル活動で忙しいためか、「校内でその姿を見た人はいない」という噂がある。,3,2,1,302,3007,3007,154cm,O型,8月8日,林 鼓子,DC2235,DC2235,<size=100>優<size=80>木 <size=100>せ<size=80>つ菜,Setsuna Yuki,Setsuna Yuki,A school idol known for her beaming smile and powerful performances. Rumor has it she's so busy with idol activities that no one has ever spotted her on campus.,O,Aug 8,Coco Hayashi,<size=100>S<size=80>etsuna<size=100>Y<size=80>uki,1
3008,エマ・ヴェルデ,エマ・ヴェルデ,スクールアイドルに憧れて、スイスからやってきた留学生。おっとりマイペースで、故郷の山や自然を愛する心優しい女の子。,3,3,1,303,3008,3008,166cm,O型,2月5日,指出毬亜,7EC36E,7EC36E,<size=100>エ<size=80>マ・<size=100>ヴ<size=80>ェルデ,Emma Verde,Emma Verde,"Emma is an exchange student from Switzerland with a passion for school idols. A gentle, laid-back girl who loves the mountains and nature of her homeland.",O,Feb 5,Maria Sashide,<size=100>E<size=80>mma<size=100>V<size=80>erde,1
3009,天王寺璃奈,てんのうじりな,感情を顔に出すことが苦手なため不愛想に思われがちだが、本当は心豊かな女の子で人懐っこい。,3,1,1,303,3009,3009,149cm,B型,11月13日,田中ちえ美,A0A3BC,A0A3BC,<size=100>天<size=80>王寺 <size=100>璃<size=80>奈,Rina Tennoji,Rina Tennoji,"Rina struggles to show emotion on her face, so she can seem standoffish—but she's really a warm-hearted, friendly girl.",B,Nov 13,Chiemi Tanaka,<size=100>R<size=80>ina<size=100>T<size=80>ennoji,1
3010,三船栞子,みふねしおりこ,真面目な性格で「みんなのために」行動できる。ランジュとは幼馴染。,3,1,1,304,3010,3010,160cm,AB型,10月5日,小泉萌香,37C4A1,37C4A1,<size=100>三<size=80>船 <size=100>栞<size=80>子,Shioriko Mifune,Shioriko Mifune,"Serious and earnest, Shioriko always acts ""for everyone's sake."" She and Lanzhu have been friends since childhood.",AB,Oct 5,Moeka Koizumi,<size=100>S<size=80>hioriko<size=100>M<size=80>ifune,1
3011,ミア・テイラー,ミア・テイラー,NYCからやってきた留学生。世界的に有名な音楽一家テイラー家の娘で、14歳でありながら、飛び級で3年生に編入してきた。,3,3,1,304,3011,3011,156cm,AB型,12月6日,内田 秀,D7D6C9,B3B098,<size=100>ミ<size=80>ア・<size=100>テ<size=80>イラー,Mia Taylor,Mia Taylor,"Mia is an exchange student from NYC. The daughter of the world-famous Taylor music family, she skipped grades to enroll as a third-year despite being just 14.",AB,Dec 6,Shu Uchida,<size=100>M<size=80>ia<size=100>T<size=80>aylor,1
3012,鐘 嵐珠,ショウ・ランジュ,香港からやってきた留学生。かなりのお嬢様で、やることすべてパーフェクトな結果を出す。好きな食べ物は肉。,3,2,1,304,3012,3012,165cm,B型,2月15日,法元明菜,F7CBC7,E2B0AC,<size=100>鐘<size=80> <size=100>嵐<size=80>珠,Lanzhu Zhong,Lanzhu Zhong,"An exchange student from Hong Kong, Lanzhu is quite the young lady and delivers perfect results in everything she does. Her favorite food is meat.",B,Feb 15,Akina Homoto,<size=100>L<size=80>anzhu<size=100>Z<size=80>hong,1
4001,澁谷かのん,しぶやかのん,シャイだが、純粋に歌を愛する心と、人の気持ちになって考えることが出来る優しさを持ち、Liella!を引っ張っていく存在。,4,2,1,403,4001,4001,159cm,A型,5月1日,伊達さゆり,F57924,F57924,<size=100>澁<size=80>谷 <size=100>か<size=80>のん,Kanon Shibuya,Kanon Shibuya,"Though shy, Kanon truly loves singing from the bottom of her heart and has the empathy to understand others' feelings—often the one driving Liella! forward.",A,May 1,Sayuri Date,<size=100>K<size=80>anon<size=100>S<size=80>hibuya,1
4002,唐 可可,たんくぅくぅ,上海から結ヶ丘女子高等学校に入学した女の子。よく笑いよく泣く情熱的な女の子で、好きなものには一直線。可愛いものも大好きなLiella!の太陽のような存在。,4,2,1,404,4002,4002,159cm,O型,7月17日,Liyuu,85EDEC,29E2E0,<size=100>唐<size=80> <size=100>可<size=80>可,Keke Tang,Kuku-tan!,"A girl who moved from Shanghai to attend Yuigaoka Girls' High School. Keke laughs and cries easily, throws herself into whatever she loves, and adores cute things—the sunshine of Liella!",O,Jul 17,Liyuu,<size=100>K<size=80>eke<size=100>T<size=80>ang,1
4003,嵐 千砂都,あらしちさと,かのんの幼なじみで大親友。努力家で献身的な性格は誰からも好かれており、ダンス担当として、Liella!のレベルアップに貢献していく。丸いものが大好き。,4,2,1,405,4003,4003,155cm,B型,2月25日,岬 なこ,FF6E97,FF6E97,<size=100>嵐<size=80> <size=100>千<size=80>砂都,Chisato Arashi,Chisato Arashi,"Kanon's childhood friend and best friend. Her hardworking, devoted nature makes her beloved by all. As Liella!'s choreographer, she helps level up their dancing. Chisato loves all things round.",B,Feb 25,Nako Misaki,<size=100>C<size=80>hisato<size=100>A<size=80>rashi,1
4004,平安名すみれ,へあんなすみれ,高飛車で勝ち気な所もあるが、根は人の悲しみが分かる優しい子でもある。いざという時に意外な能力を発揮するLiella!のジョーカー的存在。実家は学校近くの神社。,4,2,1,403,4004,4004,161cm,AB型,9月28日,ペイトン尚未,70ED62,60E251,<size=100>平<size=80>安名 <size=100>す<size=80>みれ,Sumire Heanna,Sumire Heanna,"Sumire can be proud and headstrong, but at heart she's a kind girl who understands others' sadness. She's Liella!'s wildcard, showing surprising talent when it counts. Her family runs a shrine near the school.",AB,Sep 28,Naomi Payton,<size=100>S<size=80>umire<size=100>H<size=80>eanna,1
4005,葉月 恋,はづきれん,結ヶ丘女子高等学校の設立者の娘であり、幼い頃からピアやフィギュアスケートなども得意なLiella!のエース。生徒会長も務め、落ち着いた物腰は生徒からも人気だが、世間知らずな一面も。,4,2,1,404,4005,4005,163cm,A型,11月24日,青山なぎさ,2020AB,2020AB,<size=100>葉<size=80>月 <size=100>恋<size=80>,Ren Hazuki,Ren Hazuki,"Daughter of Yuigaoka Girls' High School's founder, Ren is Liella!'s ace—skilled at piano, figure skating, and more since childhood. As student council president her calm manner makes her popular, though she can be a bit naive about the world.",A,Nov 24,Nagisa Aoyama,<size=100>R<size=80>en<size=100>H<size=80>azuki,1
4006,桜小路きな子,さくらこうじきなこ,大らかで明るく人当たりも柔らかな、おっとりした、という表現がよく合う女の子。一人東京の高校に出てくると決心し、結ヶ丘女子に入学してきた。,4,1,1,405,4006,4006,159cm,O型,4月10日,鈴原希実,F6EB41,C9BF29,<size=100>桜<size=80>小路 <size=100>き<size=80>な子,Kinako Sakurakoji,Kinako Sakurakoji,"Warm, cheerful, and gentle—""easygoing"" describes her perfectly. She resolved to attend high school in Tokyo on her own and enrolled at Yuigaoka Girls' High School.",O,Apr 10,Nozomi Suzuhara,<size=100>K<size=80>inako<size=100>S<size=80>akurakoji,1
4007,米女メイ,よねめめい,斜に構えた、一見とっつきにくい不良っぽい女の子。正義感が強く、間違ったことがあると毅然とした態度で立ち向かう一面も。,4,1,1,403,4007,4007,155cm,A型,10月29日,薮島朱音,F93535,F93535,<size=100>米<size=80>女 <size=100>メ<size=80>イ,Mei Yoneme,Mei Yoneme,"Mei comes off as aloof and a bit of a delinquent, seeming hard to approach at first—but she has a strong sense of justice and stands firm against anything wrong.",A,Oct 29,Akane Yabushima,<size=100>M<size=80>ei<size=100>Y<size=80>oneme,1
4008,若菜四季,わかなしき,子供の頃から無口であまり人と接することがなく、一人遊びが大好き。性格は冷静沈着。ミステリアスな雰囲気で感情を口にすることは少ないが、メンバーへの想いは人一倍強い。,4,1,1,405,4008,4008,161cm,B型,6月17日,大熊和奏,B4F6D8,75AD88,<size=100>若<size=80>菜 <size=100>四<size=80>季,Shiki Wakana,Shiki Wakana,"Quiet since childhood and keeping mostly to herself, Shiki loves playing alone. Calm and composed, she's mysterious and rarely voices her feelings—but her devotion to her bandmates is second to none.",B,Jun 17,Wakana Ookuma,<size=100>S<size=80>hiki<size=100>W<size=80>akana,1
4009,鬼塚夏美,おにつかなつみ,明るくて前向き、流行に敏感で、行動力がありなんでも挑戦してみるタイプの女の子。目的のためには手段を選ばない所もあり、裏から手を回す作戦を考えることもしばしば。,4,1,1,405,4009,4009,152cm,AB型,8月7日,絵森 彩,FC3ABA,FC3ABA,<size=100>鬼<size=80>塚 <size=100>夏<size=80>美,Natsumi Onitsuka,Natsumi Onitsuka,"Natsumi is bright, positive, trend-savvy, and a go-getter who'll try anything. She'll stop at nothing to reach her goals and often cooks up behind-the-scenes schemes.",AB,Aug 7,Aya Emori,<size=100>N<size=80>atsumi<size=100>O<size=80>nitsuka,1
4010,ウィーン・マルガレーテ,ウィーン・マルガレーテ,オーストリアから日本に留学してきた女の子。ラブライブ!出場をきっかけに結ヶ丘女子高等学校に編入。音楽センスに優れ素晴らしい歌声を持つが、負けん気が強すぎる所があり、周りと衝突することも。,4,1,1,404,4010,4010,161cm,A型,1月20日,結那,E09FF7,E09FF7,<size=100>ウ<size=80>ィーン・ <size=100>マ<size=80>ルガレーテ,Margarete Wien,Wien Margarete,"A girl who came from Austria to study in Japan. She transferred to Yuigaoka Girls' High School after Love Live! caught her eye. Margarete has superb musical sense and a wonderful voice, but her overly competitive streak can lead to clashes with others.",A,Jan 20,Yuina,<size=100>W<size=80>ien <size=100>M<size=80>argarete,223121502
4011,鬼塚冬毬,おにつかとまり,常に効率的な行動を心がけていて、無駄なことが大嫌い。物事をシビアに分析しがちで実現が難しいものに対して冷淡な目で見てしまう所も。姉である夏美のことが大好き。,4,1,1,405,4011,4011,163cm,B型,12月28日,坂倉 花,4CD2E2,4CD2E2,<size=100>鬼<size=80>塚 <size=100>冬<size=80>毬,Tomari Onitsuka,Tomari Onitsuka,"Tomari always aims to act efficiently and can't stand wasted effort. She tends to analyze things harshly and views hard-to-achieve goals with a cold eye. She adores her older sister, Natsumi.",B,Dec 28,Sakura Sakakura,<size=100>T<size=80>omari <size=100>O<size=80>nitsuka,223121502
6001,ヨハネ,ヨハネ,ヌマヅで占い屋を営む少女。こだわり屋で少々クセのある気質だが根は優しく、頼まれごとは断れない。,6,0,1,9901,6001,6001,156cm,,7月13日,小林愛香,A9ACB2,A9ACB2,<size=100>ヨ<size=80>ハネ,Yohane,Yohane,"A girl who runs a fortune-telling shop in Numazu. She's particular and a little quirky, but kind at heart and unable to turn down a request.",,Jul 13,Aika Kobayashi,<size=100>Y<size=80>ohane,223121403
6002,ハナマル,ハナマル,ヨハネの幼馴染。美味しいものが大好きで、屋台で手作りのお菓子などを売って暮らしている。,6,0,1,9901,6002,6002,152cm,,3月4日,高槻かなこ,FFC000,FFC000,<size=100>ハ<size=80>ナマル,Hanamaru,Hanamaru,Yohane's childhood friend. She loves good food and makes a living selling handmade treats from a stall.,,Mar 4,Kanako Takatsuki,<size=100>H<size=80>anamaru,223121403
6003,ダイヤ,ダイヤ,ヌマヅ行政局の執務長官。才色兼備で曲がったことは許さない完璧主義者。,6,0,1,9901,6003,6003,162cm,,1月1日,小宮有紗,E0083B,E0083B,<size=100>ダ<size=80>イヤ,Dia,Dia,"The chief administrator of the Numazu Administrative Bureau. A brilliant, beautiful perfectionist with zero tolerance for wrongdoing.",,Jan 1,Arisa Komiya,<size=100>D<size=80>ia,223121403
6004,ルビィ,ルビィ,妖精族の末裔。引っ込み思案な性格で、普段は人に見つからないように暮らしている。,6,0,1,9901,6004,6004,みかん5個分,,9月21日,降幡 愛,F143B4,F143B4,<size=100>ル<size=80>ビィ,Ruby,Ruby,"A descendant of the fairy folk. Shy by nature, she usually lives out of sight.",,Sep 21,Ai Furihata,<size=100>R<size=80>ubi,223121403
6005,チカ,チカ,ウチーラ地区にある老舗旅館の看板娘で3人姉妹の末っ子。人見知りせず、負けず嫌い。,6,0,1,9901,6005,6005,157cm,,8月1日,伊波杏樹,FF700F,FF700F,<size=100>チ<size=80>カ,Chika,Chika,The poster girl of a long-established inn in the Uchira district and youngest of three sisters. Outgoing and fiercely competitive.,,Aug 1,Anju Inami,<size=100>C<size=80>hika,223121403
6006,ヨウ,ヨウ,ヌマヅでメッセンジャーとして働く少女。いつも明るく元気印で、運動神経抜群。,6,0,1,9901,6006,6006,157cm,,4月17日,斉藤朱夏,07B0E8,07B0E8,<size=100>ヨ<size=80>ウ,You,You,"A girl who works as a messenger in Numazu. Always bright and energetic, with amazing athletic ability.",,Apr 17,Shuka Saito,<size=100>Y<size=80>ou,223121403
6007,カナン,カナン,ウチーラ地区にある工房を営むメカニック。海から拾ったガラクタを使って、修理や工作をして暮らしている。,6,0,1,9901,6007,6007,162cm,,2月10日,諏訪ななか,02D09D,02D09D,<size=100>カ<size=80>ナン,Kanan,Kanon,A mechanic who runs a workshop in the Uchira district. She gets by repairing and crafting things from junk salvaged from the sea.,,Feb 10,Nanaka Suwa,<size=100>K<size=80>anan,223121403
6008,リコ,リコ,ヌマヅの外からやってきた動物学者。落ち着いた性格だが、探究心旺盛でなりふり構わないことも。,6,0,1,9901,6008,6008,160cm,,9月19日,逢田梨香子,FB697E,FB697E,<size=100>リ<size=80>コ,Riko,Riko,"A zoologist who came from outside Numazu. Calm by nature, but so driven by curiosity that she'll throw caution to the wind.",,Sep 19,Rikako Aida,<size=100>R<size=80>iko,223121403
6009,マリ,マリ,ワーシマー島にある城に住む魔王家系の末裔。あまり人前には姿を現さない。,6,0,1,9901,6009,6009,163cm,,6月13日,鈴木愛奈,A132D9,A132D9,<size=100>マ<size=80>リ,Mari,Mari,A descendant of the Demon Lord's line who lives in a castle on Wassimer Island. She rarely shows herself in public.,,Jun 13,Aina Suzuki,<size=100>M<size=80>ari,223121403
5001,μ's,μ's,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5001,5001,,,?月?日,,888888,888888,μ's,μ's,μ's,Imported from School Idol Festival (2013).,,?月?日,,μ's,1
5002,宮下ココ,ココ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5002,5002,,,6月2日,,888888,888888,宮下ココ,Coco Miyashita,Coco Miyashita,Imported from School Idol Festival (2013).,,Jun 2,,Coco Miyashita,1
5003,逢沢遊宇,遊宇,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5003,5003,,,7月7日,,888888,888888,逢沢遊宇,Yuu Aizawa,Yuu Aizawa,Imported from School Idol Festival (2013).,,Jul 7,,Yuu Aizawa,1
5004,一之瀬マリカ,マリカ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5004,5004,,,4月20日,,888888,888888,一之瀬マリカ,Marika Ichinose,Marika Ichinose,Imported from School Idol Festival (2013).,,Apr 20,,Marika Ichinose,1
5005,結城紗菜,紗菜,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5005,5005,,,8月20日,,888888,888888,結城紗菜,Sana Yuki,Sana Yuki,Imported from School Idol Festival (2013).,,Aug 20,,Sana Yuki,1
5006,西村文絵,文絵,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5006,5006,,,9月20日,,888888,888888,西村文絵,Fumie Nishimura,Fumie Nishimura,Imported from School Idol Festival (2013).,,Sep 20,,Fumie Nishimura,1
5007,永山みなみ,みなみ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5007,5007,,,8月30日,,888888,888888,永山みなみ,Minami Nagayama,Minami Nagayama,Imported from School Idol Festival (2013).,,Aug 30,,Minami Nagayama,1
5008,クリスティーナ,クリスティーナ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5008,5008,,,1月21日,,888888,888888,クリスティーナ,Christina,Christina,Imported from School Idol Festival (2013).,,Jan 21,,Christina,1
5009,菊池朱美,朱美,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5009,5009,,,10月30日,,888888,888888,菊池朱美,Akemi Kikuchi,Akemi Kikuchi,Imported from School Idol Festival (2013).,,Oct 30,,Akemi Kikuchi,1
5010,須田いるか,いるか,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5010,5010,,,2月18日,,888888,888888,須田いるか,Iruka Suda,Iruka Suda,Imported from School Idol Festival (2013).,,Feb 18,,Iruka Suda,1
5011,杉崎亜矢,亜矢,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5011,5011,,,9月30日,,888888,888888,杉崎亜矢,Aya Sugisaki,Aya Sugisaki,Imported from School Idol Festival (2013).,,Sep 30,,Aya Sugisaki,1
5012,御堂優理,優理,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5012,5012,,,12月24日,,888888,888888,御堂優理,Yuri Mido,Yuri Mido,Imported from School Idol Festival (2013).,,Dec 24,,Yuri Mido,1
5013,佐伯麗音,麗音,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5013,5013,,,6月16日,,888888,888888,佐伯麗音,Reine Saeki,Reine Saeki,Imported from School Idol Festival (2013).,,Jun 16,,Reine Saeki,1
5014,鳥居歩美,歩美,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5014,5014,,,3月8日,,888888,888888,鳥居歩美,Ayumi Torii,Ayumi Torii,Imported from School Idol Festival (2013).,,Mar 8,,Ayumi Torii,1
5015,神谷理華,理華,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5015,5015,,,1月7日,,888888,888888,神谷理華,Rika Kamiya,Rika Kamiya,Imported from School Idol Festival (2013).,,Jan 7,,Rika Kamiya,1
5016,森嶋ななか,ななか,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5016,5016,,,3月7日,,888888,888888,森嶋ななか,Nanaka Morishima,Nanaka Morishima,Imported from School Idol Festival (2013).,,Mar 7,,Nanaka Morishima,1
5017,九条聖来,聖来,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5017,5017,,,11月15日,,888888,888888,九条聖来,Seira Kujo,Seira Kujo,Imported from School Idol Festival (2013).,,Nov 15,,Seira Kujo,1
5018,近江遥,,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5018,5018,,,11月11日,,888888,888888,近江遥,Haruka Konoe,Haruka Konoe,Imported from School Idol Festival (2013).,,Nov 11,,Haruka Konoe,1
5019,下園咲,,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5019,5019,,,5月5日,,888888,888888,下園咲,Saki Shimozono,Saki Shimozono,Imported from School Idol Festival (2013).,,May 5,,Saki Shimozono,1
5020,田中さち子,さち子,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5020,5020,,,9月3日,,888888,888888,田中さち子,Sachiko Tanaka,Sachiko Tanaka,Imported from School Idol Festival (2013).,,Sep 3,,Sachiko Tanaka,1
5021,支倉かさね,かさね,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5021,5021,,,12月12日,,888888,888888,支倉かさね,Kasane Hasekura,Kasane Hasekura,Imported from School Idol Festival (2013).,,Dec 12,,Kasane Hasekura,1
5022,多々良るう,るう,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5022,5022,,,3月25日,,888888,888888,多々良るう,Ru Tatara,Ru Tatara,Imported from School Idol Festival (2013).,,Mar 25,,Ru Tatara,1
5023,篠宮あきる,あきる,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5023,5023,,,7月20日,,888888,888888,篠宮あきる,Akiru Shinomiya,Akiru Shinomiya,Imported from School Idol Festival (2013).,,Jul 20,,Akiru Shinomiya,1
5024,吉川瑞希,瑞希,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5024,5024,,,10月20日,,888888,888888,吉川瑞希,Mizuki Kikkawa,Mizuki Kikkawa,Imported from School Idol Festival (2013).,,Oct 20,,Mizuki Kikkawa,1
5025,白木凪,,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5025,5025,,,2月9日,,888888,888888,白木凪,Nagi Shiraki,Nagi Shiraki,Imported from School Idol Festival (2013).,,Feb 9,,Nagi Shiraki,1
5026,藤城悠弓,悠弓,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5026,5026,,,5月15日,,888888,888888,藤城悠弓,Yumi Fujishiro,Yumi Fujishiro,Imported from School Idol Festival (2013).,,May 15,,Yumi Fujishiro,1
5027,深山聡子,聡子,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5027,5027,,,6月8日,,888888,888888,深山聡子,Satoko Miyama,Satoko Miyama,Imported from School Idol Festival (2013).,,Jun 8,,Satoko Miyama,1
5028,山内奈々子,奈々子,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5028,5028,,,12月8日,,888888,888888,山内奈々子,Nanako Yamauchi,Nanako Yamauchi,Imported from School Idol Festival (2013).,,Dec 8,,Nanako Yamauchi,1
5029,笹原京子,京子,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5029,5029,,,9月8日,,888888,888888,笹原京子,Kyoko Sasahara,Kyoko Sasahara,Imported from School Idol Festival (2013).,,Sep 8,,Kyoko Sasahara,1
5030,黒崎隼,,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5030,5030,,,6月15日,,888888,888888,黒崎隼,Shun Kurosaki,Shun Kurosaki,Imported from School Idol Festival (2013).,,Jun 15,,Shun Kurosaki,1
5031,設楽ふみ,ふみ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5031,5031,,,3月20日,,888888,888888,設楽ふみ,Fumi Shitara,Fumi Shitara,Imported from School Idol Festival (2013).,,Mar 20,,Fumi Shitara,1
5032,門田剣,,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5032,5032,,,7月10日,,888888,888888,門田剣,Tsurugi Kadota,Tsurugi Kadota,Imported from School Idol Festival (2013).,,Jul 10,,Tsurugi Kadota,1
5033,アルパカ[白],アルパカ[白],School Idol Festival(2013)のキャラクター。,6,0,1,9000,5033,5033,,,?月?日,,888888,888888,アルパカ[白],Alpaca [White],Alpaca [White],Imported from School Idol Festival (2013).,,?月?日,,Alpaca [White],1
5034,桐原優香,優香,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5034,5034,,,4月2日,,888888,888888,桐原優香,Yuuka Kirihara,Yuuka Kirihara,Imported from School Idol Festival (2013).,,Apr 2,,Yuuka Kirihara,1
5035,斉木風,,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5035,5035,,,8月12日,,888888,888888,斉木風,Fuu Saiki,Fuu Saiki,Imported from School Idol Festival (2013).,,Aug 12,,Fuu Saiki,1
5036,福原命,,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5036,5036,,,11月5日,,888888,888888,福原命,Mikoto Fukuhara,Mikoto Fukuhara,Imported from School Idol Festival (2013).,,Nov 5,,Mikoto Fukuhara,1
5037,坂巻千鶴子,千鶴子,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5037,5037,,,7月14日,,888888,888888,坂巻千鶴子,Chiduko Sakamaki,Chiduko Sakamaki,Imported from School Idol Festival (2013).,,Jul 14,,Chiduko Sakamaki,1
5038,志賀仁美,仁美,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5038,5038,,,6月6日,,888888,888888,志賀仁美,Hitomi Shiga,Hitomi Shiga,Imported from School Idol Festival (2013).,,Jun 6,,Hitomi Shiga,1
5039,鬼崎アキラ,アキラ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5039,5039,,,8月10日,,888888,888888,鬼崎アキラ,Akira Kizaki,Akira Kizaki,Imported from School Idol Festival (2013).,,Aug 10,,Akira Kizaki,1
5040,紫藤美咲,美咲,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5040,5040,,,4月7日,,888888,888888,紫藤美咲,Misaki Shido,Misaki Shido,Imported from School Idol Festival (2013).,,Apr 7,,Misaki Shido,1
5041,月島結架,結架,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5041,5041,,,7月21日,,888888,888888,月島結架,Yuka Tsukishima,Yuka Tsukishima,Imported from School Idol Festival (2013).,,Jul 21,,Yuka Tsukishima,1
5042,兵藤さゆり,さゆり,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5042,5042,,,4月22日,,888888,888888,兵藤さゆり,Sayuri Hyodo,Sayuri Hyodo,Imported from School Idol Festival (2013).,,Apr 22,,Sayuri Hyodo,1
5043,蘭花,蘭花,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5043,5043,,,2月8日,,888888,888888,蘭花,Ranpha,Ranpha,Imported from School Idol Festival (2013).,,Feb 8,,Ranpha,1
5044,ラクシャータ,ラクシャータ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5044,5044,,,6月18日,,888888,888888,ラクシャータ,Rakshata,Rakshata,Imported from School Idol Festival (2013).,,Jun 18,,Rakshata,1
5045,レベッカ,レベッカ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5045,5045,,,11月14日,,888888,888888,レベッカ,Rebecca,Rebecca,Imported from School Idol Festival (2013).,,Nov 14,,Rebecca,1
5046,綾小路姫乃,姫乃,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5046,5046,,,4月17日,,888888,888888,綾小路姫乃,Himeno Ayanokoji,Himeno Ayanokoji,Imported from School Idol Festival (2013).,,Apr 17,,Himeno Ayanokoji,1
5047,黒羽咲良,咲良,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5047,5047,,,4月4日,,888888,888888,黒羽咲良,Sakura Kurobane,Sakura Kurobane,Imported from School Idol Festival (2013).,,Apr 4,,Sakura Kurobane,1
5048,黒羽咲夜,咲夜,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5048,5048,,,9月9日,,888888,888888,黒羽咲夜,Sakuya Kurobane,Sakuya Kurobane,Imported from School Idol Festival (2013).,,Sep 9,,Sakuya Kurobane,1
5049,白瀬小雪,小雪,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5049,5049,,,2月23日,,888888,888888,白瀬小雪,Koyuki Shirase,Koyuki Shirase,Imported from School Idol Festival (2013).,,Feb 23,,Koyuki Shirase,1
5050,相川涼,,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5050,5050,,,5月6日,,888888,888888,相川涼,Ryo Aikawa,Ryo Aikawa,Imported from School Idol Festival (2013).,,May 6,,Ryo Aikawa,1
5051,イザベラ,イザベラ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5051,5051,,,11月16日,,888888,888888,イザベラ,Isabella,Isabella,Imported from School Idol Festival (2013).,,Nov 16,,Isabella,1
5052,高天原睦月,睦月,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5052,5052,,,1月25日,,888888,888888,高天原睦月,Mutsuki Takamagahara,Mutsuki Takamagahara,Imported from School Idol Festival (2013).,,Jan 25,,Mutsuki Takamagahara,1
5053,ジェニファー,ジェニファー,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5053,5053,,,5月12日,,888888,888888,ジェニファー,Jennifer,Jennifer,Imported from School Idol Festival (2013).,,May 12,,Jennifer,1
5054,マリア,マリア,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5054,5054,,,8月6日,,888888,888888,マリア,Maria,Maria,Imported from School Idol Festival (2013).,,Aug 6,,Maria,1
5055,レオ,レオ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5055,5055,,,8月16日,,888888,888888,レオ,Leo,Leo,Imported from School Idol Festival (2013).,,Aug 16,,Leo,1
5056,早乙女紫,,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5056,5056,,,3月3日,,888888,888888,早乙女紫,Yukari Saotome,Yukari Saotome,Imported from School Idol Festival (2013).,,Mar 3,,Yukari Saotome,1
5057,矢澤ここあ,ここあ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5057,5057,,,?月?日,,888888,888888,矢澤ここあ,Cocoa Yazawa,Cocoa Yazawa,Imported from School Idol Festival (2013).,,?月?日,,Cocoa Yazawa,1
5058,矢澤虎太郎,虎太郎,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5058,5058,,,?月?日,,888888,888888,矢澤虎太郎,Cotaro Yazawa,Cotaro Yazawa,Imported from School Idol Festival (2013).,,?月?日,,Cotaro Yazawa,1
5059,矢澤こころ,こころ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5059,5059,,,?月?日,,888888,888888,矢澤こころ,Cocoro Yazawa,Cocoro Yazawa,Imported from School Idol Festival (2013).,,?月?日,,Cocoro Yazawa,1
5060,ミカ,ミカ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5060,5060,,,?月?日,,888888,888888,ミカ,Mika,Mika,Imported from School Idol Festival (2013).,,?月?日,,Mika,1
5061,フミコ,フミコ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5061,5061,,,?月?日,,888888,888888,フミコ,Fumiko,Fumiko,Imported from School Idol Festival (2013).,,?月?日,,Fumiko,1
5062,ヒデコ,ヒデコ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5062,5062,,,?月?日,,888888,888888,ヒデコ,Hideko,Hideko,Imported from School Idol Festival (2013).,,?月?日,,Hideko,1
5063,山田博子,博子,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5063,5063,,,?月?日,,888888,888888,山田博子,Hiroko Yamada,Hiroko Yamada,Imported from School Idol Festival (2013).,,?月?日,,Hiroko Yamada,1
5064,にこの母,にこの母,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5064,5064,,,?月?日,,888888,888888,にこの母,Nico's mother,Nico's mother,Imported from School Idol Festival (2013).,,?月?日,,Nico's mother,1
5065,ことりの母,ことりの母,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5065,5065,,,?月?日,,888888,888888,ことりの母,Kotori's mother,Kotori's mother,Imported from School Idol Festival (2013).,,?月?日,,Kotori's mother,1
5066,真姫の母,真姫の母,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5066,5066,,,?月?日,,888888,888888,真姫の母,Maki's mother,Maki's mother,Imported from School Idol Festival (2013).,,?月?日,,Maki's mother,1
5067,穂乃果の母,穂乃果の母,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5067,5067,,,?月?日,,888888,888888,穂乃果の母,Honoka's mother,Honoka's mother,Imported from School Idol Festival (2013).,,?月?日,,Honoka's mother,1
5068,綺羅ツバサ,ツバサ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5068,5068,,,?月?日,,888888,888888,綺羅ツバサ,Tsubasa Kira,Tsubasa Kira,Imported from School Idol Festival (2013).,,?月?日,,Tsubasa Kira,1
5069,優木あんじゅ,あんじゅ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5069,5069,,,?月?日,,888888,888888,優木あんじゅ,Anju Yuki,Anju Yuki,Imported from School Idol Festival (2013).,,?月?日,,Anju Yuki,1
5070,統堂英玲奈,英玲奈,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5070,5070,,,?月?日,,888888,888888,統堂英玲奈,Erena Todo,Erena Todo,Imported from School Idol Festival (2013).,,?月?日,,Erena Todo,1
5071,アルパカ[茶],アルパカ[茶],School Idol Festival(2013)のキャラクター。,6,0,1,9000,5071,5071,,,?月?日,,888888,888888,アルパカ[茶],Alpaca [Brown],Alpaca [Brown],Imported from School Idol Festival (2013).,,?月?日,,Alpaca [Brown],1
5072,μ's,μ's,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5072,5072,,,?月?日,,888888,888888,μ's,μ's,μ's,Imported from School Idol Festival (2013).,,?月?日,,μ's,1
5073,アルパカの子ども,アルパカの子ども,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5073,5073,,,?月?日,,888888,888888,アルパカの子ども,Alpaca's Child,Alpaca's Child,Imported from School Idol Festival (2013).,,?月?日,,Alpaca's Child,1
5074,絢瀬亜里沙,亜里沙,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5074,5074,,,?月?日,,888888,888888,絢瀬亜里沙,Alisa Ayase,Alisa Ayase,Imported from School Idol Festival (2013).,,?月?日,,Alisa Ayase,1
5075,Aqours,Aqours,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5075,5075,,,?月?日,,888888,888888,Aqours,Aqours,Aqours,Imported from School Idol Festival (2013).,,?月?日,,Aqours,1
5076,しいたけ,しいたけ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5076,5076,,,?月?日,,888888,888888,しいたけ,Shiitake,Shiitake,Imported from School Idol Festival (2013).,,?月?日,,Shiitake,1
5077,鹿角理亞,理亞,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5077,5077,,,12月12日,,888888,888888,鹿角理亞,Leah Kazuno,Leah Kazuno,Imported from School Idol Festival (2013).,,Dec 12,,Leah Kazuno,1
5078,鹿角聖良,聖良,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5078,5078,,,5月4日,,888888,888888,鹿角聖良,Sarah Kazuno,Sarah Kazuno,Imported from School Idol Festival (2013).,,May 4,,Sarah Kazuno,1
5079,うちっちー,うちっちー,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5079,5079,,,?月?日,,888888,888888,うちっちー,Uchicchi,Uchicchi,Imported from School Idol Festival (2013).,,?月?日,,Uchicchi,1
5080,千歌の母,千歌の母,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5080,5080,,,?月?日,,888888,888888,千歌の母,Chika's mother,Chika's mother,Imported from School Idol Festival (2013).,,?月?日,,Chika's mother,1
5081,佐藤洋子,洋子,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5081,5081,,,?月?日,,888888,888888,佐藤洋子,Yoko Sato,Yoko Sato,Imported from School Idol Festival (2013).,,?月?日,,Yoko Sato,1
5082,わたあめ,わたあめ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5082,5082,,,?月?日,,888888,888888,わたあめ,Wataame,Wataame,Imported from School Idol Festival (2013).,,?月?日,,Wataame,1
5083,よしみ,よしみ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5083,5083,,,?月?日,,888888,888888,よしみ,Yoshimi,Yoshimi,Imported from School Idol Festival (2013).,,?月?日,,Yoshimi,1
5084,いつき,いつき,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5084,5084,,,?月?日,,888888,888888,いつき,Itsuki,Itsuki,Imported from School Idol Festival (2013).,,?月?日,,Itsuki,1
5085,むつ,むつ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5085,5085,,,?月?日,,888888,888888,むつ,Mutsu,Mutsu,Imported from School Idol Festival (2013).,,?月?日,,Mutsu,1
5086,高海美渡,美渡,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5086,5086,,,?月?日,,888888,888888,高海美渡,Mito Takami,Mito Takami,Imported from School Idol Festival (2013).,,?月?日,,Mito Takami,1
5087,高海志満,志満,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5087,5087,,,?月?日,,888888,888888,高海志満,Shima Takami,Shima Takami,Imported from School Idol Festival (2013).,,?月?日,,Shima Takami,1
5088,梨子の母,梨子の母,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5088,5088,,,?月?日,,888888,888888,梨子の母,Riko's mother,Riko's mother,Imported from School Idol Festival (2013).,,?月?日,,Riko's mother,1
5089,Aqours,Aqours,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5089,5089,,,?月?日,,888888,888888,Aqours,Aqours,Aqours,Imported from School Idol Festival (2013).,,?月?日,,Aqours,1
5090,しいたけの子ども,しいたけの子ども,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5090,5090,,,?月?日,,888888,888888,しいたけの子ども,Shiitake's Children,Shiitake's Children,Imported from School Idol Festival (2013).,,?月?日,,Shiitake's Children,1
5091,あんこ,あんこ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5091,5091,,,?月?日,,888888,888888,あんこ,Anko,Anko,Imported from School Idol Festival (2013).,,?月?日,,Anko,1
5092,ブロッサム,ブロッサム,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5092,5092,,,?月?日,,888888,888888,ブロッサム,Blossom,Blossom,Imported from School Idol Festival (2013).,,?月?日,,Blossom,1
5093,バブルス,バブルス,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5093,5093,,,?月?日,,888888,888888,バブルス,Bubbles,Bubbles,Imported from School Idol Festival (2013).,,?月?日,,Bubbles,1
5094,バターカップ,バターカップ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5094,5094,,,?月?日,,888888,888888,バターカップ,Buttercup,Buttercup,Imported from School Idol Festival (2013).,,?月?日,,Buttercup,1
5095,渡辺月,,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5095,5095,,,?月?日,,888888,888888,渡辺月,Tsuki Watanabe,Tsuki Watanabe,Imported from School Idol Festival (2013).,,?月?日,,Tsuki Watanabe,1
5096,しんのすけ,しんのすけ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5096,5096,,,?月?日,,888888,888888,しんのすけ,Shinnosuke,Shinnosuke,Imported from School Idol Festival (2013).,,?月?日,,Shinnosuke,1
5097,ひまわり,ひまわり,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5097,5097,,,?月?日,,888888,888888,ひまわり,Himawari,Himawari,Imported from School Idol Festival (2013).,,?月?日,,Himawari,1
5098,シロ,シロ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5098,5098,,,?月?日,,888888,888888,シロ,Shiro,Shiro,Imported from School Idol Festival (2013).,,?月?日,,Shiro,1
5099,しんちゃん,しんちゃん,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5099,5099,,,?月?日,,888888,888888,しんちゃん,Shinchan,Shinchan,Imported from School Idol Festival (2013).,,?月?日,,Shinchan,1
5100,ボーちゃん,ボーちゃん,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5100,5100,,,?月?日,,888888,888888,ボーちゃん,Bo-chan,Bo-chan,Imported from School Idol Festival (2013).,,?月?日,,Bo-chan,1
5101,風間くん,風間くん,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5101,5101,,,?月?日,,888888,888888,風間くん,Kazama-kun,Kazama-kun,Imported from School Idol Festival (2013).,,?月?日,,Kazama-kun,1
5102,ネネちゃん,ネネちゃん,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5102,5102,,,?月?日,,888888,888888,ネネちゃん,Nene-chan,Nene-chan,Imported from School Idol Festival (2013).,,?月?日,,Nene-chan,1
5103,マサオくん,マサオくん,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5103,5103,,,?月?日,,888888,888888,マサオくん,Masao-kun,Masao-kun,Imported from School Idol Festival (2013).,,?月?日,,Masao-kun,1
5104,,,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5104,5104,,,?月?日,,888888,888888,,Lei,Lei,Imported from School Idol Festival (2013).,,?月?日,,Lei,1
5105,エリザベス,エリザベス,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5105,5105,,,?月?日,,888888,888888,エリザベス,Elizabeth,Elizabeth,Imported from School Idol Festival (2013).,,?月?日,,Elizabeth,1
5106,マリー,マリー,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5106,5106,,,?月?日,,888888,888888,マリー,Marie,Marie,Imported from School Idol Festival (2013).,,?月?日,,Marie,1
5107,マーガレット,マーガレット,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5107,5107,,,?月?日,,888888,888888,マーガレット,Margaret,Margaret,Imported from School Idol Festival (2013).,,?月?日,,Margaret,1
5108,ひかり,ひかり,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5108,5108,,,?月?日,,888888,888888,ひかり,Hikari,Hikari,Imported from School Idol Festival (2013).,,?月?日,,Hikari,1
5109,ナギ,ナギ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5109,5109,,,?月?日,,888888,888888,ナギ,Nagi,Nagi,Imported from School Idol Festival (2013).,,?月?日,,Nagi,1
5110,エリザベス,エリザベス,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5110,5110,,,?月?日,,888888,888888,エリザベス,Elizabeth,Elizabeth,Imported from School Idol Festival (2013).,,?月?日,,Elizabeth,1
5111,マーガレット,マーガレット,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5111,5111,,,?月?日,,888888,888888,マーガレット,Margaret,Margaret,Imported from School Idol Festival (2013).,,?月?日,,Margaret,1
5112,ジュスティーヌ&カロリーヌ,ジュスティーヌ&カロリーヌ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5112,5112,,,?月?日,,888888,888888,ジュスティーヌ&カロリーヌ,Justine & Caroline,Justine & Caroline,Imported from School Idol Festival (2013).,,?月?日,,Justine & Caroline,1
5113,岳羽ゆかり,ゆかり,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5113,5113,,,?月?日,,888888,888888,岳羽ゆかり,Yukari Takeba,Yukari Takeba,Imported from School Idol Festival (2013).,,?月?日,,Yukari Takeba,1
5114,桐条美鶴,美鶴,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5114,5114,,,?月?日,,888888,888888,桐条美鶴,Mitsuru Kirijo,Mitsuru Kirijo,Imported from School Idol Festival (2013).,,?月?日,,Mitsuru Kirijo,1
5115,山岸風花,風花,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5115,5115,,,?月?日,,888888,888888,山岸風花,Fuuka Yamagishi,Fuuka Yamagishi,Imported from School Idol Festival (2013).,,?月?日,,Fuuka Yamagishi,1
5116,アイギス,アイギス,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5116,5116,,,?月?日,,888888,888888,アイギス,Aegis,Aegis,Imported from School Idol Festival (2013).,,?月?日,,Aegis,1
5117,汐見琴音,琴音,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5117,5117,,,?月?日,,888888,888888,汐見琴音,Kotone Shiomi,Kotone Shiomi,Imported from School Idol Festival (2013).,,?月?日,,Kotone Shiomi,1
5118,里中千枝,千枝,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5118,5118,,,?月?日,,888888,888888,里中千枝,Chie Satonaka,Chie Satonaka,Imported from School Idol Festival (2013).,,?月?日,,Chie Satonaka,1
5119,天城雪子,雪子,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5119,5119,,,?月?日,,888888,888888,天城雪子,Yukiko Amagi,Yukiko Amagi,Imported from School Idol Festival (2013).,,?月?日,,Yukiko Amagi,1
5120,久慈川りせ,りせ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5120,5120,,,?月?日,,888888,888888,久慈川りせ,Rise Kujikawa,Rise Kujikawa,Imported from School Idol Festival (2013).,,?月?日,,Rise Kujikawa,1
5121,白鐘直斗,直斗,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5121,5121,,,?月?日,,888888,888888,白鐘直斗,Naoto Shirogane,Naoto Shirogane,Imported from School Idol Festival (2013).,,?月?日,,Naoto Shirogane,1
5122,マリー,マリー,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5122,5122,,,?月?日,,888888,888888,マリー,Marie,Marie,Imported from School Idol Festival (2013).,,?月?日,,Marie,1
5123,パンサー,パンサー,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5123,5123,,,?月?日,,888888,888888,パンサー,Panther,Panther,Imported from School Idol Festival (2013).,,?月?日,,Panther,1
5124,クイーン,クイーン,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5124,5124,,,?月?日,,888888,888888,クイーン,Queen,Queen,Imported from School Idol Festival (2013).,,?月?日,,Queen,1
5125,ナビ,ナビ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5125,5125,,,?月?日,,888888,888888,ナビ,Oracle,Oracle,Imported from School Idol Festival (2013).,,?月?日,,Oracle,1
5126,ノワール,ノワール,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5126,5126,,,?月?日,,888888,888888,ノワール,Noir,Noir,Imported from School Idol Festival (2013).,,?月?日,,Noir,1
5127,ヴァイオレット,ヴァイオレット,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5127,5127,,,?月?日,,888888,888888,ヴァイオレット,Violet,Violet,Imported from School Idol Festival (2013).,,?月?日,,Violet,1
5128,エリザベス,エリザベス,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5128,5128,,,?月?日,,888888,888888,エリザベス,Elizabeth,Elizabeth,Imported from School Idol Festival (2013).,,?月?日,,Elizabeth,1
5129,カレン,カレン,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5129,5129,,,?月?日,,888888,888888,カレン,Kallen,Kallen,Imported from School Idol Festival (2013).,,?月?日,,Kallen,1
5130,シャーリー,シャーリー,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5130,5130,,,?月?日,,888888,888888,シャーリー,Shirley,Shirley,Imported from School Idol Festival (2013).,,?月?日,,Shirley,1
5131,C.C.,C.C.,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5131,5131,,,?月?日,,888888,888888,C.C.,C.C.,C.C.,Imported from School Idol Festival (2013).,,?月?日,,C.C.,1
5132,コーネリア,コーネリア,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5132,5132,,,?月?日,,888888,888888,コーネリア,Cornelia,Cornelia,Imported from School Idol Festival (2013).,,?月?日,,Cornelia,1
5133,ユーフェミア,ユーフェミア,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5133,5133,,,?月?日,,888888,888888,ユーフェミア,Euphemia,Euphemia,Imported from School Idol Festival (2013).,,?月?日,,Euphemia,1
5134,ナナリー,ナナリー,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5134,5134,,,?月?日,,888888,888888,ナナリー,Nunnally,Nunnally,Imported from School Idol Festival (2013).,,?月?日,,Nunnally,1
5135,ヴィレッタ,ヴィレッタ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5135,5135,,,?月?日,,888888,888888,ヴィレッタ,Villetta,Villetta,Imported from School Idol Festival (2013).,,?月?日,,Villetta,1
5136,咲世子,咲世子,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5136,5136,,,?月?日,,888888,888888,咲世子,Sayoko,Sayoko,Imported from School Idol Festival (2013).,,?月?日,,Sayoko,1
5137,アーニャ,アーニャ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5137,5137,,,?月?日,,888888,888888,アーニャ,Anya,Anya,Imported from School Idol Festival (2013).,,?月?日,,Anya,1
5138,川本美里,美里,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5138,5138,,,?月?日,,888888,888888,川本美里,Misato Kawamoto,Misato Kawamoto,Imported from School Idol Festival (2013).,,?月?日,,Misato Kawamoto,1
5139,夏川マイ,マイ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5139,5139,,,?月?日,,888888,888888,夏川マイ,Mai Natsukawa,Mai Natsukawa,Imported from School Idol Festival (2013).,,?月?日,,Mai Natsukawa,1
5140,聖澤悠奈,悠奈,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5140,5140,,,?月?日,,888888,888888,聖澤悠奈,Yuuna Hijirisawa,Yuuna Hijirisawa,Imported from School Idol Festival (2013).,,?月?日,,Yuuna Hijirisawa,1
5141,柊摩央,摩央,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5141,5141,,,?月?日,,888888,888888,柊摩央,Mao Hiiragi,Mao Hiiragi,Imported from School Idol Festival (2013).,,?月?日,,Mao Hiiragi,1
5142,さや,さや,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5142,5142,,,?月?日,,888888,888888,さや,Saya,Saya,Imported from School Idol Festival (2013).,,?月?日,,Saya,1
5143,ナナミ,ナナミ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5143,5143,,,?月?日,,888888,888888,ナナミ,Nanami,Nanami,Imported from School Idol Festival (2013).,,?月?日,,Nanami,1
5144,ヤエ,ヤエ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5144,5144,,,?月?日,,888888,888888,ヤエ,Yae,Yae,Imported from School Idol Festival (2013).,,?月?日,,Yae,1
5145,ココノ,ココノ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5145,5145,,,?月?日,,888888,888888,ココノ,Kokono,Kokono,Imported from School Idol Festival (2013).,,?月?日,,Kokono,1
5146,理事長,理事長,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5146,5146,,,?月?日,,888888,888888,理事長,Director,Director,Imported from School Idol Festival (2013).,,?月?日,,Director,1
5147,澁谷ありあ,ありあ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5147,5147,,,?月?日,,888888,888888,澁谷ありあ,Aria Shibuya,Aria Shibuya,Imported from School Idol Festival (2013).,,?月?日,,Aria Shibuya,1
5148,かのんの母,かのんの母,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5148,5148,,,?月?日,,888888,888888,かのんの母,Kanon's mother,Kanon's mother,Imported from School Idol Festival (2013).,,?月?日,,Kanon's mother,1
5149,マンマル,マンマル,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5149,5149,,,?月?日,,888888,888888,マンマル,Manmaru,Manmaru,Imported from School Idol Festival (2013).,,?月?日,,Manmaru,1
5150,チビ,チビ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5150,5150,,,?月?日,,888888,888888,チビ,Chibi,Chibi,Imported from School Idol Festival (2013).,,?月?日,,Chibi,1
5151,C.C.,C.C.,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5151,5151,,,?月?日,,888888,888888,C.C.,C.C.,C.C.,Imported from School Idol Festival (2013).,,?月?日,,C.C.,1
5152,アーニャ,アーニャ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5152,5152,,,?月?日,,888888,888888,アーニャ,Anya,Anya,Imported from School Idol Festival (2013).,,?月?日,,Anya,1
5153,ヴィレッタ,ヴィレッタ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5153,5153,,,?月?日,,888888,888888,ヴィレッタ,Villetta,Villetta,Imported from School Idol Festival (2013).,,?月?日,,Villetta,1
5154,カレン,カレン,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5154,5154,,,?月?日,,888888,888888,カレン,Kallen,Kallen,Imported from School Idol Festival (2013).,,?月?日,,Kallen,1
5155,コーネリア,コーネリア,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5155,5155,,,?月?日,,888888,888888,コーネリア,Cornelia,Cornelia,Imported from School Idol Festival (2013).,,?月?日,,Cornelia,1
5156,シャーリー,シャーリー,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5156,5156,,,?月?日,,888888,888888,シャーリー,Shirley,Shirley,Imported from School Idol Festival (2013).,,?月?日,,Shirley,1
5157,セシル,セシル,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5157,5157,,,?月?日,,888888,888888,セシル,Cecile,Cecile,Imported from School Idol Festival (2013).,,?月?日,,Cecile,1
5158,ナナリー,ナナリー,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5158,5158,,,?月?日,,888888,888888,ナナリー,Nunnally,Nunnally,Imported from School Idol Festival (2013).,,?月?日,,Nunnally,1
5159,ニーナ,ニーナ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5159,5159,,,?月?日,,888888,888888,ニーナ,Nina,Nina,Imported from School Idol Festival (2013).,,?月?日,,Nina,1
5160,ノネット,ノネット,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5160,5160,,,?月?日,,888888,888888,ノネット,Nonette,Nonette,Imported from School Idol Festival (2013).,,?月?日,,Nonette,1
5161,マリアンヌ,マリアンヌ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5161,5161,,,?月?日,,888888,888888,マリアンヌ,Marianne,Marianne,Imported from School Idol Festival (2013).,,?月?日,,Marianne,1
5162,ミレイ,ミレイ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5162,5162,,,?月?日,,888888,888888,ミレイ,Milly,Milly,Imported from School Idol Festival (2013).,,?月?日,,Milly,1
5163,モニカ,モニカ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5163,5163,,,?月?日,,888888,888888,モニカ,Monica,Monica,Imported from School Idol Festival (2013).,,?月?日,,Monica,1
5164,ユーフェミア,ユーフェミア,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5164,5164,,,?月?日,,888888,888888,ユーフェミア,Euphemia,Euphemia,Imported from School Idol Festival (2013).,,?月?日,,Euphemia,1
5165,ラクシャータ,ラクシャータ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5165,5165,,,?月?日,,888888,888888,ラクシャータ,Rakshata,Rakshata,Imported from School Idol Festival (2013).,,?月?日,,Rakshata,1
5166,ローマイヤ,ローマイヤ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5166,5166,,,?月?日,,888888,888888,ローマイヤ,Lohmeyer,Lohmeyer,Imported from School Idol Festival (2013).,,?月?日,,Lohmeyer,1
5167,咲世子,咲世子,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5167,5167,,,?月?日,,888888,888888,咲世子,Sayoko,Sayoko,Imported from School Idol Festival (2013).,,?月?日,,Sayoko,1
5168,周香凛,香凛,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5168,5168,,,?月?日,,888888,888888,周香凛,Zhou Xianglin,Zhou Xianglin,Imported from School Idol Festival (2013).,,?月?日,,Zhou Xianglin,1
5169,神楽那,神楽那,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5169,5169,,,?月?日,,888888,888888,神楽那,Kaguya,Kaguya,Imported from School Idol Festival (2013).,,?月?日,,Kaguya,1
5170,千葉凪沙,凪沙,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5170,5170,,,?月?日,,888888,888888,千葉凪沙,Nagisa Chiba,Nagisa Chiba,Imported from School Idol Festival (2013).,,?月?日,,Nagisa Chiba,1
5171,天子,天子,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5171,5171,,,?月?日,,888888,888888,天子,Emperor,Emperor,Imported from School Idol Festival (2013).,,?月?日,,Emperor,1
5172,シャムナ,シャムナ,School Idol Festival(2013)のキャラクター。,6,0,1,9000,5172,5172,,,?月?日,,888888,888888,シャムナ,Shamuna,Shamuna,Imported from School Idol Festival (2013).,,?月?日,,Shamuna,1
1 _id _name _nameRuby _detailText _category _schoolGrade _charaCategory _masterGroupId _spriteName _displayOrder _height _bloodType _birsday _voiceActor _imageColor _imageColorDark _nameRichtextGacha _nameEn _nameRubyEn _detailTextEn _bloodTypeEn _birsdayEn _voiceActorEn _nameRichtextGachaEn _masterReleaseLabelId
2 1001 高坂穂乃果 こうさかほのか μ'sの発起人。いつも笑顔でとにかく元気が取り柄。多少の困難があっても持ち前の超ポジティブシンキングで次々と突破していく。 1 2 1 101 1001 1001 157cm O型 8月3日 新田恵海 FF9210 FF9210 <size=100>高<size=80>坂 <size=100>穂<size=80>乃果 Honoka Kosaka Honoka Kosaka The founder of μ's. Honoka is always smiling and full of energy. She powers through any difficulty with her trademark super-positive thinking. O Aug 3 Emi Nitta <size=100>H<size=80>onoka<size=100>K<size=80>osaka 1
3 1002 絢瀬絵里 あやせえり ロシア人のクォーター。頭脳明晰、運動神経抜群、何をやらせてもそつなくこなす。学校でも人気抜群で、責任感が強く、生徒会長を務めている。 1 3 1 103 1002 1002 162cm B型 10月21日 南條愛乃 47C3FB 47C3FB <size=100>絢<size=80>瀬 <size=100>絵<size=80>里 Eli Ayase Eli Ayase Eli is one-quarter Russian. She's sharp, athletic, and handles whatever she's given with ease. Popular and responsible, she serves as student council president. B Oct 21 Yoshino Nanjo <size=100>E<size=80>li<size=100>A<size=80>yase 1
4 1003 南 ことり みなみことり おっとりと柔らかい性格で、勉強もそつなくこなす優等生。おっとりとはしているが芯は強く、物おじしない。穂乃果の一番の友人。 1 2 1 101 1003 1003 159cm O型 9月12日 内田 彩 BAB3B3 BAB3B3 <size=100>南<size=80> <size=100>こ<size=80>とり Kotori Minami Kotori Minami Kotori is a gentle, soft-spoken honor student who excels at everything she does. Calm yet strong-willed, she's never shy about speaking her mind. She's Honoka's closest friend. O Sep 12 Aya Uchida <size=100>K<size=80>otori<size=100>M<size=80>inami 1
5 1004 園田海未 そのだうみ 凛とした雰囲気を漂わせる大和なでしこ。子供の頃から弓道で鍛えられ、礼儀作法も完璧な女の子。悪事や怠けるといったことが大嫌い。穂乃果、ことりとは幼馴染。 1 2 1 102 1004 1004 159cm A型 3月15日 三森すずこ 226BF1 226BF1 <size=100>園<size=80>田 <size=100>海<size=80>未 Umi Sonoda Umi Sonoda An elegant young woman who embodies traditional Japanese beauty. Trained in kyudo (archery) since childhood, she has perfect manners and despises wrongdoing and laziness. Umi, Honoka, and Kotori are childhood friends. A Mar 15 Suzuko Mimori <size=100>U<size=80>mi<size=100>S<size=80>onoda 1
6 1005 星空 凛 ほしぞらりん 体育会系でいつも明るく、くよくよ悩むより身体を動かすタイプ。体育会系だけあって面倒見はよく、いつも幼馴染の花陽の面倒を見ている。 1 1 1 102 1005 1005 155cm A型 11月1日 飯田里穂 FCD500 CEAE00 <size=100>星<size=80>空 <size=100>凛<size=80> Rin Hoshizora Rin Hoshizora Rin is a bright, athletic girl who'd rather move than mope. True to her sporty nature, she's caring and always looks after her childhood friend Hanayo. A Nov 1 Riho Iida <size=100>R<size=80>in<size=100>H<size=80>oshizora 1
7 1006 西木野真姫 にしきのまき 高飛車でプライドが高く、本心を見せるのが苦手。持ち前の度胸で上級生にも強気で渡り合う。実はさみしがりな一面も。 1 1 1 103 1006 1006 161cm AB型 4月19日 Pile F14747 F14747 <size=100>西<size=80>木野 <size=100>真<size=80>姫 Maki Nishikino Maki Nishikino Maki is proud, assertive, and bad at showing her true feelings. Her natural nerve lets her stand up to her seniors—but underneath it all, she's surprisingly lonely. AB Apr 19 Pile <size=100>M<size=80>aki<size=100>N<size=80>ishikino 1
8 1007 東條 希 とうじょうのぞみ マイペースな性格で、関西弁まじりの独特の口調で話す。おおらかさがあり全メンバー中、実は精神年齢は一番上と思わせる所も。 1 3 1 102 1007 1007 159cm O型 6月9日 楠田亜衣奈 C355E8 C355E8 <size=100>東<size=80>條 <size=100>希<size=80> Nozomi Tojo Nozomi Tojo A free spirit with a unique speech style flecked with Kansai dialect. Nozomi is easygoing and, despite her age, often comes across as the most mature member of μ's. O Jun 9 Aina Kusuda <size=100>N<size=80>ozomi<size=100>T<size=80>ojo 1
9 1008 小泉花陽 こいずみはなよ クラスでもあまり目立たない、おとなしい女の子。自信がなく、何をやろうとしても諦めてしまいがち。白いご飯が大好物。 1 1 1 101 1008 1008 156cm B型 1月17日 久保ユリカ 44CF72 44CF72 <size=100>小<size=80>泉 <size=100>花<size=80>陽 Hanayo Koizumi Hanayo Koizumi Hanayo is a shy girl who doesn't stand out much in class. She lacks confidence and tends to give up easily. Her favorite food is plain white rice. B Jan 17 Yurika Kubo <size=100>H<size=80>anayo<size=100>K<size=80>oizumi 1
10 1009 矢澤にこ やざわにこ アイドルを目指して日夜励んでいる、正真正銘のアイドルオタク。「にっこにっこにー」が合言葉。 1 3 1 103 1009 1009 154cm A型 7月22日 徳井青空 FF548F FF548F <size=100>矢<size=80>澤 <size=100>に<size=80>こ Nico Yazawa Nico Yazawa Nico is a true-blue idol otaku striving day and night to become an idol herself. Her catchphrase is "Nico-Nico-Nii!" A Jul 22 Sora Tokui <size=100>N<size=80>ico<size=100>Y<size=80>azawa 1
11 2001 高海千歌 たかみちか Aqoursの発起人。人懐っこく負けず嫌い。持ち前の明るさと強引さで周囲を次々に巻き込んでいく。 2 2 1 201 2001 2001 157cm B型 8月1日 伊波杏樹 FF700F FF700F <size=100>高<size=80>海 <size=100>千<size=80>歌 Chika Takami Chika Takami The founder of Aqours. Chika is friendly and fiercely competitive, and her trademark cheer and pushiness keep sweeping everyone around her into the fun. B Aug 1 Anju Inami <size=100>C<size=80>hika<size=100>T<size=80>akami 1
12 2002 桜内梨子 さくらうちりこ 大人っぽく落ち着いて見えるが実は慌て者で早とちりや勘違いをしてしまうことも。 2 2 1 203 2002 2002 160cm A型 9月19日 逢田梨香子 FB697E FB697E <size=100>桜<size=80>内 <size=100>梨<size=80>子 Riko Sakurauchi Riko Sakurauchi At first glance Riko seems mature and composed, but she's actually quite the worrier who jumps to conclusions and gets the wrong idea. A Sep 19 Rikako Aida <size=100>R<size=80>iko<size=100>S<size=80>akurauchi 1
13 2003 松浦果南 まつうらかなん 大人っぽくサバサバした性格で、あまり物事にこだわりがない。落ち着いていて、どこかクールな雰囲気を纏っている。 2 3 1 202 2003 2003 162cm O型 2月10日 諏訪ななか 02D09D 02D09D <size=100>松<size=80>浦 <size=100>果<size=80>南 Kanan Matsuura Kanan Matsuura Kanan is mature and laid-back, not one to fuss over things. She's calm and carries herself with a cool air. O Feb 10 Nanaka Suwa <size=100>K<size=80>anan<size=100>M<size=80>atsuura 1
14 2004 黒澤ダイヤ くろさわだいや 旧網元で地元でも有名な名家の子女で、学院の生徒会長を務める。プライドが高い完璧主義者で、中途半端や曲がったことは絶対に許さない。 2 3 1 202 2004 2004 162cm A型 1月1日 小宮有紗 E0083B E0083B <size=100>黒<size=80>澤 <size=100>ダ<size=80>イヤ Dia Kurosawa Dia Kurosawa Dia comes from a renowned old family of former net masters and serves as the student council president. A proud perfectionist, she won't tolerate anything half-baked or dishonest. A Jan 1 Arisa Komiya <size=100>D<size=80>ia<size=100>K<size=80>urosawa 1
15 2005 渡辺 曜 わたなべよう 考えるよりも先に身体が動くタイプ。フェリーの船長を父に持ち、自身も将来は船長になりたいと思っている。 2 2 1 201 2005 2005 157cm AB型 4月17日 斉藤朱夏 07B0E8 07B0E8 <size=100>渡<size=80>辺 <size=100>曜<size=80> You Watanabe You Watanabe You acts before she thinks. Her father is a ferry captain, and she dreams of becoming one herself someday. AB Apr 17 Shuka Saito <size=100>Y<size=80>ou<size=100>W<size=80>atanabe 1
16 2006 津島善子 つしまよしこ 小悪魔風のファッションに身を包み、自らを"堕天使ヨハネ"と称する。都会の沼津出身。明るく物おじせず、気が利いて頭も良いが、ものすごく運が悪く、行く先々で想定外のトラブルに見舞われてしまう。 2 1 1 203 2006 2006 156cm O型 7月13日 小林愛香 A9ACB2 A9ACB2 <size=100>津<size=80>島 <size=100>善<size=80>子 Yoshiko Tsushima Yoshiko Tsushima Always dressed in a mischievous style, Yoshiko calls herself "Yohane, the Fallen Angel." She hails from the big city of Numazu. Bright, outgoing, witty, and clever—but incredibly unlucky, forever running into unexpected trouble wherever she goes. O Jul 13 Aika Kobayashi <size=100>Y<size=80>oshiko<size=100>T<size=80>sushima 1
17 2007 国木田花丸 くにきだはなまる 読書好きで、特に日本文学をこよなく愛する文学少女。歌が得意で聖歌隊に所属している。周囲の人々に気を配る優しい性格。 2 1 1 202 2007 2007 152cm O型 3月4日 高槻かなこ FFC000 FFC000 <size=100>国<size=80>木田 <size=100>花<size=80>丸 Hanamaru Kunikida Hanamaru Kunikida A bookworm with a special love for Japanese literature. Hanamaru is a gifted singer and member of the choir, and a kind girl who looks out for everyone around her. O Mar 4 Kanako Takatsuki <size=100>H<size=80>anamaru<size=100>K<size=80>unikida 1
18 2008 小原鞠莉 おはらまり ホテルチェーンを経営するイタリア系アメリカ人の父を持つハーフ。明るい性格で、個人行動が多い。どんなことがあっても絶対にめげない性格で、恐れを知らないチャレンジャー。 2 3 1 203 2008 2008 163cm AB型 6月13日 鈴木愛奈 A132D9 A132D9 <size=100>小<size=80>原 <size=100>鞠<size=80>莉 Mari Ohara Mari Ohara Mari is an upbeat, independent half-Italian American with a fearless spirit—she never backs down from a challenge! Her father runs a hotel chain. AB Jun 13 Aina Suzuki <size=100>M<size=80>ari<size=100>O<size=80>hara 1
19 2009 黒澤ルビィ くろさわるびぃ 泣き虫で臆病だけれど、名家のお嬢様だけあって芯は持っている。ずっとアイドルにあこがれていた。唯一の得意は裁縫。 2 1 1 201 2009 2009 154cm A型 9月21日 降幡 愛 F143B4 F143B4 <size=100>黒<size=80>澤 <size=100>ル<size=80>ビィ Ruby Kurosawa Ruby Kurosawa Though shy and quick to cry, Ruby comes from a distinguished family and has a hidden core of strength. She's always dreamed of being an idol. Her one talent is sewing. A Sep 21 Ai Furihata <size=100>R<size=80>uby<size=100>K<size=80>urosawa 1
20 3001 上原歩夢 うえはらあゆむ 何事にもコツコツ取り組む努力家。あることをきっかけにスクールアイドルをはじめる。 3 2 1 302 3001 3001 159cm A型 3月1日 大西亜玖璃 F48099 F48099 <size=100>上<size=80>原 <size=100>歩<size=80>夢 Ayumu Uehara Ayumu Uehara Ayumu is a diligent hard worker who tackles everything step by step. A certain incident inspired her to become a school idol. A Mar 1 Aguri Onishi <size=100>A<size=80>yumu<size=100>U<size=80>ehara 1
21 3002 中須かすみ なかすかすみ かわいいものが大好きで、スクールアイドルに対する憧れは人一倍強い。負けず嫌いな性格で、「かすかす」というあだ名で呼ばれると怒る。 3 1 1 303 3002 3002 155cm B型 1月23日 相良茉優 EDDC00 D5C500 <size=100>中<size=80>須 <size=100>か<size=80>すみ Kasumi Nakasu Kasumi Nakasu A lover of all things cute, Kasumi has a passion for school idols like no other. Fiercely competitive, she gets upset if anyone calls her "Kasukasu." B Jan 23 Mayu Sagara <size=100>K<size=80>asumi<size=100>N<size=80>akasu 1
22 3003 桜坂しずく おうさかしずく しっかり者の優等生で、演劇部とスクールアイドル同好会を兼部している。 3 1 1 302 3003 3003 157cm A型 4月3日 前田佳織里 2CAED5 2CAED5 <size=90>桜<size=80>坂 <size=90>し<size=80>ずく Shizuku Osaka Shizuku Osaka Shizuku is a dependable honor student who juggles both the Drama Club and the School Idol Club. A Apr 3 Kaori Maeda <size=90>S<size=80>hizuku<size=90>O<size=80>saka 1
23 3004 朝香果林 あさかかりん 高校生離れしたルックスとプロポーションを持ち、読者モデルをしている。大人っぽい見た目とは裏腹に意外とピュアな一面も。 3 3 1 301 3004 3004 167cm AB型 6月29日 久保田未夢 4A62D2 4A62D2 <size=100>朝<size=80>香 <size=100>果<size=80>林 Karin Asaka Karin Asaka With looks and a figure well beyond her years, Karin works as a magazine model. Despite her grown-up appearance, she has a surprisingly innocent side. AB Jun 29 Miyu Kubota <size=100>K<size=80>arin<size=100>A<size=80>saka 1
24 3005 宮下 愛 みやしたあい 運動神経が抜群で、様々な部の助っ人として活躍している。ノリの良い性格で面倒見がいいので友達が多い。 3 2 1 301 3005 3005 163cm A型 5月30日 村上奈津実 F6663E F6663E <size=100>宮<size=80>下 <size=100>愛<size=80> Ai Miyashita Ai Miyashita Ai is a natural athlete who pitches in as a ringer for all kinds of clubs. Her easygoing, caring nature means she has loads of friends. A May 30 Natsumi Murakami <size=100>A<size=80>i<size=100>M<size=80>iyashita 1
25 3006 近江彼方 このえかなた いつも眠そうにしているが、料理をすることと妹をかわいがることに関しては情熱を燃やす。 3 3 1 303 3006 3006 158cm O型 12月16日 鬼頭明里 A96398 A96398 <size=100>近<size=80>江 <size=100>彼<size=80>方 Kanata Konoe Kanata Konoe Kanata always looks sleepy, but she's truly passionate about two things: cooking and doting on her little sister. O Dec 16 Akari Kito <size=100>K<size=80>anata<size=100>K<size=80>onoe 1
26 3007 優木せつ菜 ゆうきせつな 元気いっぱいの笑顔と力強いパフォーマンスが持ち味のスクールアイドル。スクールアイドル活動で忙しいためか、「校内でその姿を見た人はいない」という噂がある。 3 2 1 302 3007 3007 154cm O型 8月8日 林 鼓子 DC2235 DC2235 <size=100>優<size=80>木 <size=100>せ<size=80>つ菜 Setsuna Yuki Setsuna Yuki A school idol known for her beaming smile and powerful performances. Rumor has it she's so busy with idol activities that no one has ever spotted her on campus. O Aug 8 Coco Hayashi <size=100>S<size=80>etsuna<size=100>Y<size=80>uki 1
27 3008 エマ・ヴェルデ エマ・ヴェルデ スクールアイドルに憧れて、スイスからやってきた留学生。おっとりマイペースで、故郷の山や自然を愛する心優しい女の子。 3 3 1 303 3008 3008 166cm O型 2月5日 指出毬亜 7EC36E 7EC36E <size=100>エ<size=80>マ・<size=100>ヴ<size=80>ェルデ Emma Verde Emma Verde Emma is an exchange student from Switzerland with a passion for school idols. A gentle, laid-back girl who loves the mountains and nature of her homeland. O Feb 5 Maria Sashide <size=100>E<size=80>mma<size=100>V<size=80>erde 1
28 3009 天王寺璃奈 てんのうじりな 感情を顔に出すことが苦手なため不愛想に思われがちだが、本当は心豊かな女の子で人懐っこい。 3 1 1 303 3009 3009 149cm B型 11月13日 田中ちえ美 A0A3BC A0A3BC <size=100>天<size=80>王寺 <size=100>璃<size=80>奈 Rina Tennoji Rina Tennoji Rina struggles to show emotion on her face, so she can seem standoffish—but she's really a warm-hearted, friendly girl. B Nov 13 Chiemi Tanaka <size=100>R<size=80>ina<size=100>T<size=80>ennoji 1
29 3010 三船栞子 みふねしおりこ 真面目な性格で「みんなのために」行動できる。ランジュとは幼馴染。 3 1 1 304 3010 3010 160cm AB型 10月5日 小泉萌香 37C4A1 37C4A1 <size=100>三<size=80>船 <size=100>栞<size=80>子 Shioriko Mifune Shioriko Mifune Serious and earnest, Shioriko always acts "for everyone's sake." She and Lanzhu have been friends since childhood. AB Oct 5 Moeka Koizumi <size=100>S<size=80>hioriko<size=100>M<size=80>ifune 1
30 3011 ミア・テイラー ミア・テイラー NYCからやってきた留学生。世界的に有名な音楽一家テイラー家の娘で、14歳でありながら、飛び級で3年生に編入してきた。 3 3 1 304 3011 3011 156cm AB型 12月6日 内田 秀 D7D6C9 B3B098 <size=100>ミ<size=80>ア・<size=100>テ<size=80>イラー Mia Taylor Mia Taylor Mia is an exchange student from NYC. The daughter of the world-famous Taylor music family, she skipped grades to enroll as a third-year despite being just 14. AB Dec 6 Shu Uchida <size=100>M<size=80>ia<size=100>T<size=80>aylor 1
31 3012 鐘 嵐珠 ショウ・ランジュ 香港からやってきた留学生。かなりのお嬢様で、やることすべてパーフェクトな結果を出す。好きな食べ物は肉。 3 2 1 304 3012 3012 165cm B型 2月15日 法元明菜 F7CBC7 E2B0AC <size=100>鐘<size=80> <size=100>嵐<size=80>珠 Lanzhu Zhong Lanzhu Zhong An exchange student from Hong Kong, Lanzhu is quite the young lady and delivers perfect results in everything she does. Her favorite food is meat. B Feb 15 Akina Homoto <size=100>L<size=80>anzhu<size=100>Z<size=80>hong 1
32 4001 澁谷かのん しぶやかのん シャイだが、純粋に歌を愛する心と、人の気持ちになって考えることが出来る優しさを持ち、Liella!を引っ張っていく存在。 4 2 1 403 4001 4001 159cm A型 5月1日 伊達さゆり F57924 F57924 <size=100>澁<size=80>谷 <size=100>か<size=80>のん Kanon Shibuya Kanon Shibuya Though shy, Kanon truly loves singing from the bottom of her heart and has the empathy to understand others' feelings—often the one driving Liella! forward. A May 1 Sayuri Date <size=100>K<size=80>anon<size=100>S<size=80>hibuya 1
33 4002 唐 可可 たんくぅくぅ 上海から結ヶ丘女子高等学校に入学した女の子。よく笑いよく泣く情熱的な女の子で、好きなものには一直線。可愛いものも大好きなLiella!の太陽のような存在。 4 2 1 404 4002 4002 159cm O型 7月17日 Liyuu 85EDEC 29E2E0 <size=100>唐<size=80> <size=100>可<size=80>可 Keke Tang Kuku-tan! A girl who moved from Shanghai to attend Yuigaoka Girls' High School. Keke laughs and cries easily, throws herself into whatever she loves, and adores cute things—the sunshine of Liella! O Jul 17 Liyuu <size=100>K<size=80>eke<size=100>T<size=80>ang 1
34 4003 嵐 千砂都 あらしちさと かのんの幼なじみで大親友。努力家で献身的な性格は誰からも好かれており、ダンス担当として、Liella!のレベルアップに貢献していく。丸いものが大好き。 4 2 1 405 4003 4003 155cm B型 2月25日 岬 なこ FF6E97 FF6E97 <size=100>嵐<size=80> <size=100>千<size=80>砂都 Chisato Arashi Chisato Arashi Kanon's childhood friend and best friend. Her hardworking, devoted nature makes her beloved by all. As Liella!'s choreographer, she helps level up their dancing. Chisato loves all things round. B Feb 25 Nako Misaki <size=100>C<size=80>hisato<size=100>A<size=80>rashi 1
35 4004 平安名すみれ へあんなすみれ 高飛車で勝ち気な所もあるが、根は人の悲しみが分かる優しい子でもある。いざという時に意外な能力を発揮するLiella!のジョーカー的存在。実家は学校近くの神社。 4 2 1 403 4004 4004 161cm AB型 9月28日 ペイトン尚未 70ED62 60E251 <size=100>平<size=80>安名 <size=100>す<size=80>みれ Sumire Heanna Sumire Heanna Sumire can be proud and headstrong, but at heart she's a kind girl who understands others' sadness. She's Liella!'s wildcard, showing surprising talent when it counts. Her family runs a shrine near the school. AB Sep 28 Naomi Payton <size=100>S<size=80>umire<size=100>H<size=80>eanna 1
36 4005 葉月 恋 はづきれん 結ヶ丘女子高等学校の設立者の娘であり、幼い頃からピアノやフィギュアスケートなども得意なLiella!のエース。生徒会長も務め、落ち着いた物腰は生徒からも人気だが、世間知らずな一面も。 4 2 1 404 4005 4005 163cm A型 11月24日 青山なぎさ 2020AB 2020AB <size=100>葉<size=80>月 <size=100>恋<size=80> Ren Hazuki Ren Hazuki Daughter of Yuigaoka Girls' High School's founder, Ren is Liella!'s ace—skilled at piano, figure skating, and more since childhood. As student council president her calm manner makes her popular, though she can be a bit naive about the world. A Nov 24 Nagisa Aoyama <size=100>R<size=80>en<size=100>H<size=80>azuki 1
37 4006 桜小路きな子 さくらこうじきなこ 大らかで明るく人当たりも柔らかな、おっとりした、という表現がよく合う女の子。一人東京の高校に出てくると決心し、結ヶ丘女子に入学してきた。 4 1 1 405 4006 4006 159cm O型 4月10日 鈴原希実 F6EB41 C9BF29 <size=100>桜<size=80>小路 <size=100>き<size=80>な子 Kinako Sakurakoji Kinako Sakurakoji Warm, cheerful, and gentle—"easygoing" describes her perfectly. She resolved to attend high school in Tokyo on her own and enrolled at Yuigaoka Girls' High School. O Apr 10 Nozomi Suzuhara <size=100>K<size=80>inako<size=100>S<size=80>akurakoji 1
38 4007 米女メイ よねめめい 斜に構えた、一見とっつきにくい不良っぽい女の子。正義感が強く、間違ったことがあると毅然とした態度で立ち向かう一面も。 4 1 1 403 4007 4007 155cm A型 10月29日 薮島朱音 F93535 F93535 <size=100>米<size=80>女 <size=100>メ<size=80>イ Mei Yoneme Mei Yoneme Mei comes off as aloof and a bit of a delinquent, seeming hard to approach at first—but she has a strong sense of justice and stands firm against anything wrong. A Oct 29 Akane Yabushima <size=100>M<size=80>ei<size=100>Y<size=80>oneme 1
39 4008 若菜四季 わかなしき 子供の頃から無口であまり人と接することがなく、一人遊びが大好き。性格は冷静沈着。ミステリアスな雰囲気で感情を口にすることは少ないが、メンバーへの想いは人一倍強い。 4 1 1 405 4008 4008 161cm B型 6月17日 大熊和奏 B4F6D8 75AD88 <size=100>若<size=80>菜 <size=100>四<size=80>季 Shiki Wakana Shiki Wakana Quiet since childhood and keeping mostly to herself, Shiki loves playing alone. Calm and composed, she's mysterious and rarely voices her feelings—but her devotion to her bandmates is second to none. B Jun 17 Wakana Ookuma <size=100>S<size=80>hiki<size=100>W<size=80>akana 1
40 4009 鬼塚夏美 おにつかなつみ 明るくて前向き、流行に敏感で、行動力がありなんでも挑戦してみるタイプの女の子。目的のためには手段を選ばない所もあり、裏から手を回す作戦を考えることもしばしば。 4 1 1 405 4009 4009 152cm AB型 8月7日 絵森 彩 FC3ABA FC3ABA <size=100>鬼<size=80>塚 <size=100>夏<size=80>美 Natsumi Onitsuka Natsumi Onitsuka Natsumi is bright, positive, trend-savvy, and a go-getter who'll try anything. She'll stop at nothing to reach her goals and often cooks up behind-the-scenes schemes. AB Aug 7 Aya Emori <size=100>N<size=80>atsumi<size=100>O<size=80>nitsuka 1
41 4010 ウィーン・マルガレーテ ウィーン・マルガレーテ オーストリアから日本に留学してきた女の子。ラブライブ!出場をきっかけに結ヶ丘女子高等学校に編入。音楽センスに優れ素晴らしい歌声を持つが、負けん気が強すぎる所があり、周りと衝突することも。 4 1 1 404 4010 4010 161cm A型 1月20日 結那 E09FF7 E09FF7 <size=100>ウ<size=80>ィーン・ <size=100>マ<size=80>ルガレーテ Margarete Wien Wien Margarete A girl who came from Austria to study in Japan. She transferred to Yuigaoka Girls' High School after Love Live! caught her eye. Margarete has superb musical sense and a wonderful voice, but her overly competitive streak can lead to clashes with others. A Jan 20 Yuina <size=100>W<size=80>ien <size=100>M<size=80>argarete 223121502
42 4011 鬼塚冬毬 おにつかとまり 常に効率的な行動を心がけていて、無駄なことが大嫌い。物事をシビアに分析しがちで実現が難しいものに対して冷淡な目で見てしまう所も。姉である夏美のことが大好き。 4 1 1 405 4011 4011 163cm B型 12月28日 坂倉 花 4CD2E2 4CD2E2 <size=100>鬼<size=80>塚 <size=100>冬<size=80>毬 Tomari Onitsuka Tomari Onitsuka Tomari always aims to act efficiently and can't stand wasted effort. She tends to analyze things harshly and views hard-to-achieve goals with a cold eye. She adores her older sister, Natsumi. B Dec 28 Sakura Sakakura <size=100>T<size=80>omari <size=100>O<size=80>nitsuka 223121502
43 6001 ヨハネ ヨハネ ヌマヅで占い屋を営む少女。こだわり屋で少々クセのある気質だが根は優しく、頼まれごとは断れない。 6 0 1 9901 6001 6001 156cm 7月13日 小林愛香 A9ACB2 A9ACB2 <size=100>ヨ<size=80>ハネ Yohane Yohane A girl who runs a fortune-telling shop in Numazu. She's particular and a little quirky, but kind at heart and unable to turn down a request. Jul 13 Aika Kobayashi <size=100>Y<size=80>ohane 223121403
44 6002 ハナマル ハナマル ヨハネの幼馴染。美味しいものが大好きで、屋台で手作りのお菓子などを売って暮らしている。 6 0 1 9901 6002 6002 152cm 3月4日 高槻かなこ FFC000 FFC000 <size=100>ハ<size=80>ナマル Hanamaru Hanamaru Yohane's childhood friend. She loves good food and makes a living selling handmade treats from a stall. Mar 4 Kanako Takatsuki <size=100>H<size=80>anamaru 223121403
45 6003 ダイヤ ダイヤ ヌマヅ行政局の執務長官。才色兼備で曲がったことは許さない完璧主義者。 6 0 1 9901 6003 6003 162cm 1月1日 小宮有紗 E0083B E0083B <size=100>ダ<size=80>イヤ Dia Dia The chief administrator of the Numazu Administrative Bureau. A brilliant, beautiful perfectionist with zero tolerance for wrongdoing. Jan 1 Arisa Komiya <size=100>D<size=80>ia 223121403
46 6004 ルビィ ルビィ 妖精族の末裔。引っ込み思案な性格で、普段は人に見つからないように暮らしている。 6 0 1 9901 6004 6004 みかん5個分 9月21日 降幡 愛 F143B4 F143B4 <size=100>ル<size=80>ビィ Ruby Ruby A descendant of the fairy folk. Shy by nature, she usually lives out of sight. Sep 21 Ai Furihata <size=100>R<size=80>ubi 223121403
47 6005 チカ チカ ウチーラ地区にある老舗旅館の看板娘で3人姉妹の末っ子。人見知りせず、負けず嫌い。 6 0 1 9901 6005 6005 157cm 8月1日 伊波杏樹 FF700F FF700F <size=100>チ<size=80>カ Chika Chika The poster girl of a long-established inn in the Uchira district and youngest of three sisters. Outgoing and fiercely competitive. Aug 1 Anju Inami <size=100>C<size=80>hika 223121403
48 6006 ヨウ ヨウ ヌマヅでメッセンジャーとして働く少女。いつも明るく元気印で、運動神経抜群。 6 0 1 9901 6006 6006 157cm 4月17日 斉藤朱夏 07B0E8 07B0E8 <size=100>ヨ<size=80>ウ You You A girl who works as a messenger in Numazu. Always bright and energetic, with amazing athletic ability. Apr 17 Shuka Saito <size=100>Y<size=80>ou 223121403
49 6007 カナン カナン ウチーラ地区にある工房を営むメカニック。海から拾ったガラクタを使って、修理や工作をして暮らしている。 6 0 1 9901 6007 6007 162cm 2月10日 諏訪ななか 02D09D 02D09D <size=100>カ<size=80>ナン Kanan Kanon A mechanic who runs a workshop in the Uchira district. She gets by repairing and crafting things from junk salvaged from the sea. Feb 10 Nanaka Suwa <size=100>K<size=80>anan 223121403
50 6008 リコ リコ ヌマヅの外からやってきた動物学者。落ち着いた性格だが、探究心旺盛でなりふり構わないことも。 6 0 1 9901 6008 6008 160cm 9月19日 逢田梨香子 FB697E FB697E <size=100>リ<size=80>コ Riko Riko A zoologist who came from outside Numazu. Calm by nature, but so driven by curiosity that she'll throw caution to the wind. Sep 19 Rikako Aida <size=100>R<size=80>iko 223121403
51 6009 マリ マリ ワーシマー島にある城に住む魔王家系の末裔。あまり人前には姿を現さない。 6 0 1 9901 6009 6009 163cm 6月13日 鈴木愛奈 A132D9 A132D9 <size=100>マ<size=80>リ Mari Mari A descendant of the Demon Lord's line who lives in a castle on Wassimer Island. She rarely shows herself in public. Jun 13 Aina Suzuki <size=100>M<size=80>ari 223121403
52 5001 μ's μ's School Idol Festival(2013)のキャラクター。 6 0 1 9000 5001 5001 ?月?日 888888 888888 μ's μ's μ's Imported from School Idol Festival (2013). ?月?日 μ's 1
53 5002 宮下ココ ココ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5002 5002 6月2日 888888 888888 宮下ココ Coco Miyashita Coco Miyashita Imported from School Idol Festival (2013). Jun 2 Coco Miyashita 1
54 5003 逢沢遊宇 遊宇 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5003 5003 7月7日 888888 888888 逢沢遊宇 Yuu Aizawa Yuu Aizawa Imported from School Idol Festival (2013). Jul 7 Yuu Aizawa 1
55 5004 一之瀬マリカ マリカ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5004 5004 4月20日 888888 888888 一之瀬マリカ Marika Ichinose Marika Ichinose Imported from School Idol Festival (2013). Apr 20 Marika Ichinose 1
56 5005 結城紗菜 紗菜 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5005 5005 8月20日 888888 888888 結城紗菜 Sana Yuki Sana Yuki Imported from School Idol Festival (2013). Aug 20 Sana Yuki 1
57 5006 西村文絵 文絵 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5006 5006 9月20日 888888 888888 西村文絵 Fumie Nishimura Fumie Nishimura Imported from School Idol Festival (2013). Sep 20 Fumie Nishimura 1
58 5007 永山みなみ みなみ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5007 5007 8月30日 888888 888888 永山みなみ Minami Nagayama Minami Nagayama Imported from School Idol Festival (2013). Aug 30 Minami Nagayama 1
59 5008 クリスティーナ クリスティーナ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5008 5008 1月21日 888888 888888 クリスティーナ Christina Christina Imported from School Idol Festival (2013). Jan 21 Christina 1
60 5009 菊池朱美 朱美 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5009 5009 10月30日 888888 888888 菊池朱美 Akemi Kikuchi Akemi Kikuchi Imported from School Idol Festival (2013). Oct 30 Akemi Kikuchi 1
61 5010 須田いるか いるか School Idol Festival(2013)のキャラクター。 6 0 1 9000 5010 5010 2月18日 888888 888888 須田いるか Iruka Suda Iruka Suda Imported from School Idol Festival (2013). Feb 18 Iruka Suda 1
62 5011 杉崎亜矢 亜矢 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5011 5011 9月30日 888888 888888 杉崎亜矢 Aya Sugisaki Aya Sugisaki Imported from School Idol Festival (2013). Sep 30 Aya Sugisaki 1
63 5012 御堂優理 優理 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5012 5012 12月24日 888888 888888 御堂優理 Yuri Mido Yuri Mido Imported from School Idol Festival (2013). Dec 24 Yuri Mido 1
64 5013 佐伯麗音 麗音 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5013 5013 6月16日 888888 888888 佐伯麗音 Reine Saeki Reine Saeki Imported from School Idol Festival (2013). Jun 16 Reine Saeki 1
65 5014 鳥居歩美 歩美 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5014 5014 3月8日 888888 888888 鳥居歩美 Ayumi Torii Ayumi Torii Imported from School Idol Festival (2013). Mar 8 Ayumi Torii 1
66 5015 神谷理華 理華 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5015 5015 1月7日 888888 888888 神谷理華 Rika Kamiya Rika Kamiya Imported from School Idol Festival (2013). Jan 7 Rika Kamiya 1
67 5016 森嶋ななか ななか School Idol Festival(2013)のキャラクター。 6 0 1 9000 5016 5016 3月7日 888888 888888 森嶋ななか Nanaka Morishima Nanaka Morishima Imported from School Idol Festival (2013). Mar 7 Nanaka Morishima 1
68 5017 九条聖来 聖来 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5017 5017 11月15日 888888 888888 九条聖来 Seira Kujo Seira Kujo Imported from School Idol Festival (2013). Nov 15 Seira Kujo 1
69 5018 近江遥 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5018 5018 11月11日 888888 888888 近江遥 Haruka Konoe Haruka Konoe Imported from School Idol Festival (2013). Nov 11 Haruka Konoe 1
70 5019 下園咲 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5019 5019 5月5日 888888 888888 下園咲 Saki Shimozono Saki Shimozono Imported from School Idol Festival (2013). May 5 Saki Shimozono 1
71 5020 田中さち子 さち子 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5020 5020 9月3日 888888 888888 田中さち子 Sachiko Tanaka Sachiko Tanaka Imported from School Idol Festival (2013). Sep 3 Sachiko Tanaka 1
72 5021 支倉かさね かさね School Idol Festival(2013)のキャラクター。 6 0 1 9000 5021 5021 12月12日 888888 888888 支倉かさね Kasane Hasekura Kasane Hasekura Imported from School Idol Festival (2013). Dec 12 Kasane Hasekura 1
73 5022 多々良るう るう School Idol Festival(2013)のキャラクター。 6 0 1 9000 5022 5022 3月25日 888888 888888 多々良るう Ru Tatara Ru Tatara Imported from School Idol Festival (2013). Mar 25 Ru Tatara 1
74 5023 篠宮あきる あきる School Idol Festival(2013)のキャラクター。 6 0 1 9000 5023 5023 7月20日 888888 888888 篠宮あきる Akiru Shinomiya Akiru Shinomiya Imported from School Idol Festival (2013). Jul 20 Akiru Shinomiya 1
75 5024 吉川瑞希 瑞希 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5024 5024 10月20日 888888 888888 吉川瑞希 Mizuki Kikkawa Mizuki Kikkawa Imported from School Idol Festival (2013). Oct 20 Mizuki Kikkawa 1
76 5025 白木凪 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5025 5025 2月9日 888888 888888 白木凪 Nagi Shiraki Nagi Shiraki Imported from School Idol Festival (2013). Feb 9 Nagi Shiraki 1
77 5026 藤城悠弓 悠弓 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5026 5026 5月15日 888888 888888 藤城悠弓 Yumi Fujishiro Yumi Fujishiro Imported from School Idol Festival (2013). May 15 Yumi Fujishiro 1
78 5027 深山聡子 聡子 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5027 5027 6月8日 888888 888888 深山聡子 Satoko Miyama Satoko Miyama Imported from School Idol Festival (2013). Jun 8 Satoko Miyama 1
79 5028 山内奈々子 奈々子 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5028 5028 12月8日 888888 888888 山内奈々子 Nanako Yamauchi Nanako Yamauchi Imported from School Idol Festival (2013). Dec 8 Nanako Yamauchi 1
80 5029 笹原京子 京子 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5029 5029 9月8日 888888 888888 笹原京子 Kyoko Sasahara Kyoko Sasahara Imported from School Idol Festival (2013). Sep 8 Kyoko Sasahara 1
81 5030 黒崎隼 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5030 5030 6月15日 888888 888888 黒崎隼 Shun Kurosaki Shun Kurosaki Imported from School Idol Festival (2013). Jun 15 Shun Kurosaki 1
82 5031 設楽ふみ ふみ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5031 5031 3月20日 888888 888888 設楽ふみ Fumi Shitara Fumi Shitara Imported from School Idol Festival (2013). Mar 20 Fumi Shitara 1
83 5032 門田剣 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5032 5032 7月10日 888888 888888 門田剣 Tsurugi Kadota Tsurugi Kadota Imported from School Idol Festival (2013). Jul 10 Tsurugi Kadota 1
84 5033 アルパカ[白] アルパカ[白] School Idol Festival(2013)のキャラクター。 6 0 1 9000 5033 5033 ?月?日 888888 888888 アルパカ[白] Alpaca [White] Alpaca [White] Imported from School Idol Festival (2013). ?月?日 Alpaca [White] 1
85 5034 桐原優香 優香 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5034 5034 4月2日 888888 888888 桐原優香 Yuuka Kirihara Yuuka Kirihara Imported from School Idol Festival (2013). Apr 2 Yuuka Kirihara 1
86 5035 斉木風 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5035 5035 8月12日 888888 888888 斉木風 Fuu Saiki Fuu Saiki Imported from School Idol Festival (2013). Aug 12 Fuu Saiki 1
87 5036 福原命 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5036 5036 11月5日 888888 888888 福原命 Mikoto Fukuhara Mikoto Fukuhara Imported from School Idol Festival (2013). Nov 5 Mikoto Fukuhara 1
88 5037 坂巻千鶴子 千鶴子 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5037 5037 7月14日 888888 888888 坂巻千鶴子 Chiduko Sakamaki Chiduko Sakamaki Imported from School Idol Festival (2013). Jul 14 Chiduko Sakamaki 1
89 5038 志賀仁美 仁美 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5038 5038 6月6日 888888 888888 志賀仁美 Hitomi Shiga Hitomi Shiga Imported from School Idol Festival (2013). Jun 6 Hitomi Shiga 1
90 5039 鬼崎アキラ アキラ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5039 5039 8月10日 888888 888888 鬼崎アキラ Akira Kizaki Akira Kizaki Imported from School Idol Festival (2013). Aug 10 Akira Kizaki 1
91 5040 紫藤美咲 美咲 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5040 5040 4月7日 888888 888888 紫藤美咲 Misaki Shido Misaki Shido Imported from School Idol Festival (2013). Apr 7 Misaki Shido 1
92 5041 月島結架 結架 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5041 5041 7月21日 888888 888888 月島結架 Yuka Tsukishima Yuka Tsukishima Imported from School Idol Festival (2013). Jul 21 Yuka Tsukishima 1
93 5042 兵藤さゆり さゆり School Idol Festival(2013)のキャラクター。 6 0 1 9000 5042 5042 4月22日 888888 888888 兵藤さゆり Sayuri Hyodo Sayuri Hyodo Imported from School Idol Festival (2013). Apr 22 Sayuri Hyodo 1
94 5043 蘭花 蘭花 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5043 5043 2月8日 888888 888888 蘭花 Ranpha Ranpha Imported from School Idol Festival (2013). Feb 8 Ranpha 1
95 5044 ラクシャータ ラクシャータ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5044 5044 6月18日 888888 888888 ラクシャータ Rakshata Rakshata Imported from School Idol Festival (2013). Jun 18 Rakshata 1
96 5045 レベッカ レベッカ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5045 5045 11月14日 888888 888888 レベッカ Rebecca Rebecca Imported from School Idol Festival (2013). Nov 14 Rebecca 1
97 5046 綾小路姫乃 姫乃 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5046 5046 4月17日 888888 888888 綾小路姫乃 Himeno Ayanokoji Himeno Ayanokoji Imported from School Idol Festival (2013). Apr 17 Himeno Ayanokoji 1
98 5047 黒羽咲良 咲良 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5047 5047 4月4日 888888 888888 黒羽咲良 Sakura Kurobane Sakura Kurobane Imported from School Idol Festival (2013). Apr 4 Sakura Kurobane 1
99 5048 黒羽咲夜 咲夜 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5048 5048 9月9日 888888 888888 黒羽咲夜 Sakuya Kurobane Sakuya Kurobane Imported from School Idol Festival (2013). Sep 9 Sakuya Kurobane 1
100 5049 白瀬小雪 小雪 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5049 5049 2月23日 888888 888888 白瀬小雪 Koyuki Shirase Koyuki Shirase Imported from School Idol Festival (2013). Feb 23 Koyuki Shirase 1
101 5050 相川涼 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5050 5050 5月6日 888888 888888 相川涼 Ryo Aikawa Ryo Aikawa Imported from School Idol Festival (2013). May 6 Ryo Aikawa 1
102 5051 イザベラ イザベラ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5051 5051 11月16日 888888 888888 イザベラ Isabella Isabella Imported from School Idol Festival (2013). Nov 16 Isabella 1
103 5052 高天原睦月 睦月 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5052 5052 1月25日 888888 888888 高天原睦月 Mutsuki Takamagahara Mutsuki Takamagahara Imported from School Idol Festival (2013). Jan 25 Mutsuki Takamagahara 1
104 5053 ジェニファー ジェニファー School Idol Festival(2013)のキャラクター。 6 0 1 9000 5053 5053 5月12日 888888 888888 ジェニファー Jennifer Jennifer Imported from School Idol Festival (2013). May 12 Jennifer 1
105 5054 マリア マリア School Idol Festival(2013)のキャラクター。 6 0 1 9000 5054 5054 8月6日 888888 888888 マリア Maria Maria Imported from School Idol Festival (2013). Aug 6 Maria 1
106 5055 レオ レオ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5055 5055 8月16日 888888 888888 レオ Leo Leo Imported from School Idol Festival (2013). Aug 16 Leo 1
107 5056 早乙女紫 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5056 5056 3月3日 888888 888888 早乙女紫 Yukari Saotome Yukari Saotome Imported from School Idol Festival (2013). Mar 3 Yukari Saotome 1
108 5057 矢澤ここあ ここあ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5057 5057 ?月?日 888888 888888 矢澤ここあ Cocoa Yazawa Cocoa Yazawa Imported from School Idol Festival (2013). ?月?日 Cocoa Yazawa 1
109 5058 矢澤虎太郎 虎太郎 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5058 5058 ?月?日 888888 888888 矢澤虎太郎 Cotaro Yazawa Cotaro Yazawa Imported from School Idol Festival (2013). ?月?日 Cotaro Yazawa 1
110 5059 矢澤こころ こころ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5059 5059 ?月?日 888888 888888 矢澤こころ Cocoro Yazawa Cocoro Yazawa Imported from School Idol Festival (2013). ?月?日 Cocoro Yazawa 1
111 5060 ミカ ミカ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5060 5060 ?月?日 888888 888888 ミカ Mika Mika Imported from School Idol Festival (2013). ?月?日 Mika 1
112 5061 フミコ フミコ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5061 5061 ?月?日 888888 888888 フミコ Fumiko Fumiko Imported from School Idol Festival (2013). ?月?日 Fumiko 1
113 5062 ヒデコ ヒデコ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5062 5062 ?月?日 888888 888888 ヒデコ Hideko Hideko Imported from School Idol Festival (2013). ?月?日 Hideko 1
114 5063 山田博子 博子 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5063 5063 ?月?日 888888 888888 山田博子 Hiroko Yamada Hiroko Yamada Imported from School Idol Festival (2013). ?月?日 Hiroko Yamada 1
115 5064 にこの母 にこの母 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5064 5064 ?月?日 888888 888888 にこの母 Nico's mother Nico's mother Imported from School Idol Festival (2013). ?月?日 Nico's mother 1
116 5065 ことりの母 ことりの母 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5065 5065 ?月?日 888888 888888 ことりの母 Kotori's mother Kotori's mother Imported from School Idol Festival (2013). ?月?日 Kotori's mother 1
117 5066 真姫の母 真姫の母 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5066 5066 ?月?日 888888 888888 真姫の母 Maki's mother Maki's mother Imported from School Idol Festival (2013). ?月?日 Maki's mother 1
118 5067 穂乃果の母 穂乃果の母 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5067 5067 ?月?日 888888 888888 穂乃果の母 Honoka's mother Honoka's mother Imported from School Idol Festival (2013). ?月?日 Honoka's mother 1
119 5068 綺羅ツバサ ツバサ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5068 5068 ?月?日 888888 888888 綺羅ツバサ Tsubasa Kira Tsubasa Kira Imported from School Idol Festival (2013). ?月?日 Tsubasa Kira 1
120 5069 優木あんじゅ あんじゅ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5069 5069 ?月?日 888888 888888 優木あんじゅ Anju Yuki Anju Yuki Imported from School Idol Festival (2013). ?月?日 Anju Yuki 1
121 5070 統堂英玲奈 英玲奈 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5070 5070 ?月?日 888888 888888 統堂英玲奈 Erena Todo Erena Todo Imported from School Idol Festival (2013). ?月?日 Erena Todo 1
122 5071 アルパカ[茶] アルパカ[茶] School Idol Festival(2013)のキャラクター。 6 0 1 9000 5071 5071 ?月?日 888888 888888 アルパカ[茶] Alpaca [Brown] Alpaca [Brown] Imported from School Idol Festival (2013). ?月?日 Alpaca [Brown] 1
123 5072 μ's μ's School Idol Festival(2013)のキャラクター。 6 0 1 9000 5072 5072 ?月?日 888888 888888 μ's μ's μ's Imported from School Idol Festival (2013). ?月?日 μ's 1
124 5073 アルパカの子ども アルパカの子ども School Idol Festival(2013)のキャラクター。 6 0 1 9000 5073 5073 ?月?日 888888 888888 アルパカの子ども Alpaca's Child Alpaca's Child Imported from School Idol Festival (2013). ?月?日 Alpaca's Child 1
125 5074 絢瀬亜里沙 亜里沙 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5074 5074 ?月?日 888888 888888 絢瀬亜里沙 Alisa Ayase Alisa Ayase Imported from School Idol Festival (2013). ?月?日 Alisa Ayase 1
126 5075 Aqours Aqours School Idol Festival(2013)のキャラクター。 6 0 1 9000 5075 5075 ?月?日 888888 888888 Aqours Aqours Aqours Imported from School Idol Festival (2013). ?月?日 Aqours 1
127 5076 しいたけ しいたけ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5076 5076 ?月?日 888888 888888 しいたけ Shiitake Shiitake Imported from School Idol Festival (2013). ?月?日 Shiitake 1
128 5077 鹿角理亞 理亞 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5077 5077 12月12日 888888 888888 鹿角理亞 Leah Kazuno Leah Kazuno Imported from School Idol Festival (2013). Dec 12 Leah Kazuno 1
129 5078 鹿角聖良 聖良 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5078 5078 5月4日 888888 888888 鹿角聖良 Sarah Kazuno Sarah Kazuno Imported from School Idol Festival (2013). May 4 Sarah Kazuno 1
130 5079 うちっちー うちっちー School Idol Festival(2013)のキャラクター。 6 0 1 9000 5079 5079 ?月?日 888888 888888 うちっちー Uchicchi Uchicchi Imported from School Idol Festival (2013). ?月?日 Uchicchi 1
131 5080 千歌の母 千歌の母 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5080 5080 ?月?日 888888 888888 千歌の母 Chika's mother Chika's mother Imported from School Idol Festival (2013). ?月?日 Chika's mother 1
132 5081 佐藤洋子 洋子 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5081 5081 ?月?日 888888 888888 佐藤洋子 Yoko Sato Yoko Sato Imported from School Idol Festival (2013). ?月?日 Yoko Sato 1
133 5082 わたあめ わたあめ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5082 5082 ?月?日 888888 888888 わたあめ Wataame Wataame Imported from School Idol Festival (2013). ?月?日 Wataame 1
134 5083 よしみ よしみ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5083 5083 ?月?日 888888 888888 よしみ Yoshimi Yoshimi Imported from School Idol Festival (2013). ?月?日 Yoshimi 1
135 5084 いつき いつき School Idol Festival(2013)のキャラクター。 6 0 1 9000 5084 5084 ?月?日 888888 888888 いつき Itsuki Itsuki Imported from School Idol Festival (2013). ?月?日 Itsuki 1
136 5085 むつ むつ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5085 5085 ?月?日 888888 888888 むつ Mutsu Mutsu Imported from School Idol Festival (2013). ?月?日 Mutsu 1
137 5086 高海美渡 美渡 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5086 5086 ?月?日 888888 888888 高海美渡 Mito Takami Mito Takami Imported from School Idol Festival (2013). ?月?日 Mito Takami 1
138 5087 高海志満 志満 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5087 5087 ?月?日 888888 888888 高海志満 Shima Takami Shima Takami Imported from School Idol Festival (2013). ?月?日 Shima Takami 1
139 5088 梨子の母 梨子の母 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5088 5088 ?月?日 888888 888888 梨子の母 Riko's mother Riko's mother Imported from School Idol Festival (2013). ?月?日 Riko's mother 1
140 5089 Aqours Aqours School Idol Festival(2013)のキャラクター。 6 0 1 9000 5089 5089 ?月?日 888888 888888 Aqours Aqours Aqours Imported from School Idol Festival (2013). ?月?日 Aqours 1
141 5090 しいたけの子ども しいたけの子ども School Idol Festival(2013)のキャラクター。 6 0 1 9000 5090 5090 ?月?日 888888 888888 しいたけの子ども Shiitake's Children Shiitake's Children Imported from School Idol Festival (2013). ?月?日 Shiitake's Children 1
142 5091 あんこ あんこ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5091 5091 ?月?日 888888 888888 あんこ Anko Anko Imported from School Idol Festival (2013). ?月?日 Anko 1
143 5092 ブロッサム ブロッサム School Idol Festival(2013)のキャラクター。 6 0 1 9000 5092 5092 ?月?日 888888 888888 ブロッサム Blossom Blossom Imported from School Idol Festival (2013). ?月?日 Blossom 1
144 5093 バブルス バブルス School Idol Festival(2013)のキャラクター。 6 0 1 9000 5093 5093 ?月?日 888888 888888 バブルス Bubbles Bubbles Imported from School Idol Festival (2013). ?月?日 Bubbles 1
145 5094 バターカップ バターカップ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5094 5094 ?月?日 888888 888888 バターカップ Buttercup Buttercup Imported from School Idol Festival (2013). ?月?日 Buttercup 1
146 5095 渡辺月 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5095 5095 ?月?日 888888 888888 渡辺月 Tsuki Watanabe Tsuki Watanabe Imported from School Idol Festival (2013). ?月?日 Tsuki Watanabe 1
147 5096 しんのすけ しんのすけ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5096 5096 ?月?日 888888 888888 しんのすけ Shinnosuke Shinnosuke Imported from School Idol Festival (2013). ?月?日 Shinnosuke 1
148 5097 ひまわり ひまわり School Idol Festival(2013)のキャラクター。 6 0 1 9000 5097 5097 ?月?日 888888 888888 ひまわり Himawari Himawari Imported from School Idol Festival (2013). ?月?日 Himawari 1
149 5098 シロ シロ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5098 5098 ?月?日 888888 888888 シロ Shiro Shiro Imported from School Idol Festival (2013). ?月?日 Shiro 1
150 5099 しんちゃん しんちゃん School Idol Festival(2013)のキャラクター。 6 0 1 9000 5099 5099 ?月?日 888888 888888 しんちゃん Shinchan Shinchan Imported from School Idol Festival (2013). ?月?日 Shinchan 1
151 5100 ボーちゃん ボーちゃん School Idol Festival(2013)のキャラクター。 6 0 1 9000 5100 5100 ?月?日 888888 888888 ボーちゃん Bo-chan Bo-chan Imported from School Idol Festival (2013). ?月?日 Bo-chan 1
152 5101 風間くん 風間くん School Idol Festival(2013)のキャラクター。 6 0 1 9000 5101 5101 ?月?日 888888 888888 風間くん Kazama-kun Kazama-kun Imported from School Idol Festival (2013). ?月?日 Kazama-kun 1
153 5102 ネネちゃん ネネちゃん School Idol Festival(2013)のキャラクター。 6 0 1 9000 5102 5102 ?月?日 888888 888888 ネネちゃん Nene-chan Nene-chan Imported from School Idol Festival (2013). ?月?日 Nene-chan 1
154 5103 マサオくん マサオくん School Idol Festival(2013)のキャラクター。 6 0 1 9000 5103 5103 ?月?日 888888 888888 マサオくん Masao-kun Masao-kun Imported from School Idol Festival (2013). ?月?日 Masao-kun 1
155 5104 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5104 5104 ?月?日 888888 888888 Lei Lei Imported from School Idol Festival (2013). ?月?日 Lei 1
156 5105 エリザベス エリザベス School Idol Festival(2013)のキャラクター。 6 0 1 9000 5105 5105 ?月?日 888888 888888 エリザベス Elizabeth Elizabeth Imported from School Idol Festival (2013). ?月?日 Elizabeth 1
157 5106 マリー マリー School Idol Festival(2013)のキャラクター。 6 0 1 9000 5106 5106 ?月?日 888888 888888 マリー Marie Marie Imported from School Idol Festival (2013). ?月?日 Marie 1
158 5107 マーガレット マーガレット School Idol Festival(2013)のキャラクター。 6 0 1 9000 5107 5107 ?月?日 888888 888888 マーガレット Margaret Margaret Imported from School Idol Festival (2013). ?月?日 Margaret 1
159 5108 ひかり ひかり School Idol Festival(2013)のキャラクター。 6 0 1 9000 5108 5108 ?月?日 888888 888888 ひかり Hikari Hikari Imported from School Idol Festival (2013). ?月?日 Hikari 1
160 5109 ナギ ナギ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5109 5109 ?月?日 888888 888888 ナギ Nagi Nagi Imported from School Idol Festival (2013). ?月?日 Nagi 1
161 5110 エリザベス エリザベス School Idol Festival(2013)のキャラクター。 6 0 1 9000 5110 5110 ?月?日 888888 888888 エリザベス Elizabeth Elizabeth Imported from School Idol Festival (2013). ?月?日 Elizabeth 1
162 5111 マーガレット マーガレット School Idol Festival(2013)のキャラクター。 6 0 1 9000 5111 5111 ?月?日 888888 888888 マーガレット Margaret Margaret Imported from School Idol Festival (2013). ?月?日 Margaret 1
163 5112 ジュスティーヌ&カロリーヌ ジュスティーヌ&カロリーヌ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5112 5112 ?月?日 888888 888888 ジュスティーヌ&カロリーヌ Justine & Caroline Justine & Caroline Imported from School Idol Festival (2013). ?月?日 Justine & Caroline 1
164 5113 岳羽ゆかり ゆかり School Idol Festival(2013)のキャラクター。 6 0 1 9000 5113 5113 ?月?日 888888 888888 岳羽ゆかり Yukari Takeba Yukari Takeba Imported from School Idol Festival (2013). ?月?日 Yukari Takeba 1
165 5114 桐条美鶴 美鶴 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5114 5114 ?月?日 888888 888888 桐条美鶴 Mitsuru Kirijo Mitsuru Kirijo Imported from School Idol Festival (2013). ?月?日 Mitsuru Kirijo 1
166 5115 山岸風花 風花 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5115 5115 ?月?日 888888 888888 山岸風花 Fuuka Yamagishi Fuuka Yamagishi Imported from School Idol Festival (2013). ?月?日 Fuuka Yamagishi 1
167 5116 アイギス アイギス School Idol Festival(2013)のキャラクター。 6 0 1 9000 5116 5116 ?月?日 888888 888888 アイギス Aegis Aegis Imported from School Idol Festival (2013). ?月?日 Aegis 1
168 5117 汐見琴音 琴音 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5117 5117 ?月?日 888888 888888 汐見琴音 Kotone Shiomi Kotone Shiomi Imported from School Idol Festival (2013). ?月?日 Kotone Shiomi 1
169 5118 里中千枝 千枝 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5118 5118 ?月?日 888888 888888 里中千枝 Chie Satonaka Chie Satonaka Imported from School Idol Festival (2013). ?月?日 Chie Satonaka 1
170 5119 天城雪子 雪子 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5119 5119 ?月?日 888888 888888 天城雪子 Yukiko Amagi Yukiko Amagi Imported from School Idol Festival (2013). ?月?日 Yukiko Amagi 1
171 5120 久慈川りせ りせ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5120 5120 ?月?日 888888 888888 久慈川りせ Rise Kujikawa Rise Kujikawa Imported from School Idol Festival (2013). ?月?日 Rise Kujikawa 1
172 5121 白鐘直斗 直斗 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5121 5121 ?月?日 888888 888888 白鐘直斗 Naoto Shirogane Naoto Shirogane Imported from School Idol Festival (2013). ?月?日 Naoto Shirogane 1
173 5122 マリー マリー School Idol Festival(2013)のキャラクター。 6 0 1 9000 5122 5122 ?月?日 888888 888888 マリー Marie Marie Imported from School Idol Festival (2013). ?月?日 Marie 1
174 5123 パンサー パンサー School Idol Festival(2013)のキャラクター。 6 0 1 9000 5123 5123 ?月?日 888888 888888 パンサー Panther Panther Imported from School Idol Festival (2013). ?月?日 Panther 1
175 5124 クイーン クイーン School Idol Festival(2013)のキャラクター。 6 0 1 9000 5124 5124 ?月?日 888888 888888 クイーン Queen Queen Imported from School Idol Festival (2013). ?月?日 Queen 1
176 5125 ナビ ナビ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5125 5125 ?月?日 888888 888888 ナビ Oracle Oracle Imported from School Idol Festival (2013). ?月?日 Oracle 1
177 5126 ノワール ノワール School Idol Festival(2013)のキャラクター。 6 0 1 9000 5126 5126 ?月?日 888888 888888 ノワール Noir Noir Imported from School Idol Festival (2013). ?月?日 Noir 1
178 5127 ヴァイオレット ヴァイオレット School Idol Festival(2013)のキャラクター。 6 0 1 9000 5127 5127 ?月?日 888888 888888 ヴァイオレット Violet Violet Imported from School Idol Festival (2013). ?月?日 Violet 1
179 5128 エリザベス エリザベス School Idol Festival(2013)のキャラクター。 6 0 1 9000 5128 5128 ?月?日 888888 888888 エリザベス Elizabeth Elizabeth Imported from School Idol Festival (2013). ?月?日 Elizabeth 1
180 5129 カレン カレン School Idol Festival(2013)のキャラクター。 6 0 1 9000 5129 5129 ?月?日 888888 888888 カレン Kallen Kallen Imported from School Idol Festival (2013). ?月?日 Kallen 1
181 5130 シャーリー シャーリー School Idol Festival(2013)のキャラクター。 6 0 1 9000 5130 5130 ?月?日 888888 888888 シャーリー Shirley Shirley Imported from School Idol Festival (2013). ?月?日 Shirley 1
182 5131 C.C. C.C. School Idol Festival(2013)のキャラクター。 6 0 1 9000 5131 5131 ?月?日 888888 888888 C.C. C.C. C.C. Imported from School Idol Festival (2013). ?月?日 C.C. 1
183 5132 コーネリア コーネリア School Idol Festival(2013)のキャラクター。 6 0 1 9000 5132 5132 ?月?日 888888 888888 コーネリア Cornelia Cornelia Imported from School Idol Festival (2013). ?月?日 Cornelia 1
184 5133 ユーフェミア ユーフェミア School Idol Festival(2013)のキャラクター。 6 0 1 9000 5133 5133 ?月?日 888888 888888 ユーフェミア Euphemia Euphemia Imported from School Idol Festival (2013). ?月?日 Euphemia 1
185 5134 ナナリー ナナリー School Idol Festival(2013)のキャラクター。 6 0 1 9000 5134 5134 ?月?日 888888 888888 ナナリー Nunnally Nunnally Imported from School Idol Festival (2013). ?月?日 Nunnally 1
186 5135 ヴィレッタ ヴィレッタ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5135 5135 ?月?日 888888 888888 ヴィレッタ Villetta Villetta Imported from School Idol Festival (2013). ?月?日 Villetta 1
187 5136 咲世子 咲世子 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5136 5136 ?月?日 888888 888888 咲世子 Sayoko Sayoko Imported from School Idol Festival (2013). ?月?日 Sayoko 1
188 5137 アーニャ アーニャ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5137 5137 ?月?日 888888 888888 アーニャ Anya Anya Imported from School Idol Festival (2013). ?月?日 Anya 1
189 5138 川本美里 美里 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5138 5138 ?月?日 888888 888888 川本美里 Misato Kawamoto Misato Kawamoto Imported from School Idol Festival (2013). ?月?日 Misato Kawamoto 1
190 5139 夏川マイ マイ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5139 5139 ?月?日 888888 888888 夏川マイ Mai Natsukawa Mai Natsukawa Imported from School Idol Festival (2013). ?月?日 Mai Natsukawa 1
191 5140 聖澤悠奈 悠奈 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5140 5140 ?月?日 888888 888888 聖澤悠奈 Yuuna Hijirisawa Yuuna Hijirisawa Imported from School Idol Festival (2013). ?月?日 Yuuna Hijirisawa 1
192 5141 柊摩央 摩央 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5141 5141 ?月?日 888888 888888 柊摩央 Mao Hiiragi Mao Hiiragi Imported from School Idol Festival (2013). ?月?日 Mao Hiiragi 1
193 5142 さや さや School Idol Festival(2013)のキャラクター。 6 0 1 9000 5142 5142 ?月?日 888888 888888 さや Saya Saya Imported from School Idol Festival (2013). ?月?日 Saya 1
194 5143 ナナミ ナナミ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5143 5143 ?月?日 888888 888888 ナナミ Nanami Nanami Imported from School Idol Festival (2013). ?月?日 Nanami 1
195 5144 ヤエ ヤエ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5144 5144 ?月?日 888888 888888 ヤエ Yae Yae Imported from School Idol Festival (2013). ?月?日 Yae 1
196 5145 ココノ ココノ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5145 5145 ?月?日 888888 888888 ココノ Kokono Kokono Imported from School Idol Festival (2013). ?月?日 Kokono 1
197 5146 理事長 理事長 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5146 5146 ?月?日 888888 888888 理事長 Director Director Imported from School Idol Festival (2013). ?月?日 Director 1
198 5147 澁谷ありあ ありあ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5147 5147 ?月?日 888888 888888 澁谷ありあ Aria Shibuya Aria Shibuya Imported from School Idol Festival (2013). ?月?日 Aria Shibuya 1
199 5148 かのんの母 かのんの母 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5148 5148 ?月?日 888888 888888 かのんの母 Kanon's mother Kanon's mother Imported from School Idol Festival (2013). ?月?日 Kanon's mother 1
200 5149 マンマル マンマル School Idol Festival(2013)のキャラクター。 6 0 1 9000 5149 5149 ?月?日 888888 888888 マンマル Manmaru Manmaru Imported from School Idol Festival (2013). ?月?日 Manmaru 1
201 5150 チビ チビ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5150 5150 ?月?日 888888 888888 チビ Chibi Chibi Imported from School Idol Festival (2013). ?月?日 Chibi 1
202 5151 C.C. C.C. School Idol Festival(2013)のキャラクター。 6 0 1 9000 5151 5151 ?月?日 888888 888888 C.C. C.C. C.C. Imported from School Idol Festival (2013). ?月?日 C.C. 1
203 5152 アーニャ アーニャ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5152 5152 ?月?日 888888 888888 アーニャ Anya Anya Imported from School Idol Festival (2013). ?月?日 Anya 1
204 5153 ヴィレッタ ヴィレッタ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5153 5153 ?月?日 888888 888888 ヴィレッタ Villetta Villetta Imported from School Idol Festival (2013). ?月?日 Villetta 1
205 5154 カレン カレン School Idol Festival(2013)のキャラクター。 6 0 1 9000 5154 5154 ?月?日 888888 888888 カレン Kallen Kallen Imported from School Idol Festival (2013). ?月?日 Kallen 1
206 5155 コーネリア コーネリア School Idol Festival(2013)のキャラクター。 6 0 1 9000 5155 5155 ?月?日 888888 888888 コーネリア Cornelia Cornelia Imported from School Idol Festival (2013). ?月?日 Cornelia 1
207 5156 シャーリー シャーリー School Idol Festival(2013)のキャラクター。 6 0 1 9000 5156 5156 ?月?日 888888 888888 シャーリー Shirley Shirley Imported from School Idol Festival (2013). ?月?日 Shirley 1
208 5157 セシル セシル School Idol Festival(2013)のキャラクター。 6 0 1 9000 5157 5157 ?月?日 888888 888888 セシル Cecile Cecile Imported from School Idol Festival (2013). ?月?日 Cecile 1
209 5158 ナナリー ナナリー School Idol Festival(2013)のキャラクター。 6 0 1 9000 5158 5158 ?月?日 888888 888888 ナナリー Nunnally Nunnally Imported from School Idol Festival (2013). ?月?日 Nunnally 1
210 5159 ニーナ ニーナ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5159 5159 ?月?日 888888 888888 ニーナ Nina Nina Imported from School Idol Festival (2013). ?月?日 Nina 1
211 5160 ノネット ノネット School Idol Festival(2013)のキャラクター。 6 0 1 9000 5160 5160 ?月?日 888888 888888 ノネット Nonette Nonette Imported from School Idol Festival (2013). ?月?日 Nonette 1
212 5161 マリアンヌ マリアンヌ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5161 5161 ?月?日 888888 888888 マリアンヌ Marianne Marianne Imported from School Idol Festival (2013). ?月?日 Marianne 1
213 5162 ミレイ ミレイ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5162 5162 ?月?日 888888 888888 ミレイ Milly Milly Imported from School Idol Festival (2013). ?月?日 Milly 1
214 5163 モニカ モニカ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5163 5163 ?月?日 888888 888888 モニカ Monica Monica Imported from School Idol Festival (2013). ?月?日 Monica 1
215 5164 ユーフェミア ユーフェミア School Idol Festival(2013)のキャラクター。 6 0 1 9000 5164 5164 ?月?日 888888 888888 ユーフェミア Euphemia Euphemia Imported from School Idol Festival (2013). ?月?日 Euphemia 1
216 5165 ラクシャータ ラクシャータ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5165 5165 ?月?日 888888 888888 ラクシャータ Rakshata Rakshata Imported from School Idol Festival (2013). ?月?日 Rakshata 1
217 5166 ローマイヤ ローマイヤ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5166 5166 ?月?日 888888 888888 ローマイヤ Lohmeyer Lohmeyer Imported from School Idol Festival (2013). ?月?日 Lohmeyer 1
218 5167 咲世子 咲世子 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5167 5167 ?月?日 888888 888888 咲世子 Sayoko Sayoko Imported from School Idol Festival (2013). ?月?日 Sayoko 1
219 5168 周香凛 香凛 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5168 5168 ?月?日 888888 888888 周香凛 Zhou Xianglin Zhou Xianglin Imported from School Idol Festival (2013). ?月?日 Zhou Xianglin 1
220 5169 神楽那 神楽那 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5169 5169 ?月?日 888888 888888 神楽那 Kaguya Kaguya Imported from School Idol Festival (2013). ?月?日 Kaguya 1
221 5170 千葉凪沙 凪沙 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5170 5170 ?月?日 888888 888888 千葉凪沙 Nagisa Chiba Nagisa Chiba Imported from School Idol Festival (2013). ?月?日 Nagisa Chiba 1
222 5171 天子 天子 School Idol Festival(2013)のキャラクター。 6 0 1 9000 5171 5171 ?月?日 888888 888888 天子 Emperor Emperor Imported from School Idol Festival (2013). ?月?日 Emperor 1
223 5172 シャムナ シャムナ School Idol Festival(2013)のキャラクター。 6 0 1 9000 5172 5172 ?月?日 888888 888888 シャムナ Shamuna Shamuna Imported from School Idol Festival (2013). ?月?日 Shamuna 1

View File

@@ -99,3 +99,347 @@
6008,9999,223121403
6009,9901,223121403
6009,9999,223121403
5001,9000,1
5001,9999,1
5002,9000,1
5002,9999,1
5003,9000,1
5003,9999,1
5004,9000,1
5004,9999,1
5005,9000,1
5005,9999,1
5006,9000,1
5006,9999,1
5007,9000,1
5007,9999,1
5008,9000,1
5008,9999,1
5009,9000,1
5009,9999,1
5010,9000,1
5010,9999,1
5011,9000,1
5011,9999,1
5012,9000,1
5012,9999,1
5013,9000,1
5013,9999,1
5014,9000,1
5014,9999,1
5015,9000,1
5015,9999,1
5016,9000,1
5016,9999,1
5017,9000,1
5017,9999,1
5018,9000,1
5018,9999,1
5019,9000,1
5019,9999,1
5020,9000,1
5020,9999,1
5021,9000,1
5021,9999,1
5022,9000,1
5022,9999,1
5023,9000,1
5023,9999,1
5024,9000,1
5024,9999,1
5025,9000,1
5025,9999,1
5026,9000,1
5026,9999,1
5027,9000,1
5027,9999,1
5028,9000,1
5028,9999,1
5029,9000,1
5029,9999,1
5030,9000,1
5030,9999,1
5031,9000,1
5031,9999,1
5032,9000,1
5032,9999,1
5033,9000,1
5033,9999,1
5034,9000,1
5034,9999,1
5035,9000,1
5035,9999,1
5036,9000,1
5036,9999,1
5037,9000,1
5037,9999,1
5038,9000,1
5038,9999,1
5039,9000,1
5039,9999,1
5040,9000,1
5040,9999,1
5041,9000,1
5041,9999,1
5042,9000,1
5042,9999,1
5043,9000,1
5043,9999,1
5044,9000,1
5044,9999,1
5045,9000,1
5045,9999,1
5046,9000,1
5046,9999,1
5047,9000,1
5047,9999,1
5048,9000,1
5048,9999,1
5049,9000,1
5049,9999,1
5050,9000,1
5050,9999,1
5051,9000,1
5051,9999,1
5052,9000,1
5052,9999,1
5053,9000,1
5053,9999,1
5054,9000,1
5054,9999,1
5055,9000,1
5055,9999,1
5056,9000,1
5056,9999,1
5057,9000,1
5057,9999,1
5058,9000,1
5058,9999,1
5059,9000,1
5059,9999,1
5060,9000,1
5060,9999,1
5061,9000,1
5061,9999,1
5062,9000,1
5062,9999,1
5063,9000,1
5063,9999,1
5064,9000,1
5064,9999,1
5065,9000,1
5065,9999,1
5066,9000,1
5066,9999,1
5067,9000,1
5067,9999,1
5068,9000,1
5068,9999,1
5069,9000,1
5069,9999,1
5070,9000,1
5070,9999,1
5071,9000,1
5071,9999,1
5072,9000,1
5072,9999,1
5073,9000,1
5073,9999,1
5074,9000,1
5074,9999,1
5075,9000,1
5075,9999,1
5076,9000,1
5076,9999,1
5077,9000,1
5077,9999,1
5078,9000,1
5078,9999,1
5079,9000,1
5079,9999,1
5080,9000,1
5080,9999,1
5081,9000,1
5081,9999,1
5082,9000,1
5082,9999,1
5083,9000,1
5083,9999,1
5084,9000,1
5084,9999,1
5085,9000,1
5085,9999,1
5086,9000,1
5086,9999,1
5087,9000,1
5087,9999,1
5088,9000,1
5088,9999,1
5089,9000,1
5089,9999,1
5090,9000,1
5090,9999,1
5091,9000,1
5091,9999,1
5092,9000,1
5092,9999,1
5093,9000,1
5093,9999,1
5094,9000,1
5094,9999,1
5095,9000,1
5095,9999,1
5096,9000,1
5096,9999,1
5097,9000,1
5097,9999,1
5098,9000,1
5098,9999,1
5099,9000,1
5099,9999,1
5100,9000,1
5100,9999,1
5101,9000,1
5101,9999,1
5102,9000,1
5102,9999,1
5103,9000,1
5103,9999,1
5104,9000,1
5104,9999,1
5105,9000,1
5105,9999,1
5106,9000,1
5106,9999,1
5107,9000,1
5107,9999,1
5108,9000,1
5108,9999,1
5109,9000,1
5109,9999,1
5110,9000,1
5110,9999,1
5111,9000,1
5111,9999,1
5112,9000,1
5112,9999,1
5113,9000,1
5113,9999,1
5114,9000,1
5114,9999,1
5115,9000,1
5115,9999,1
5116,9000,1
5116,9999,1
5117,9000,1
5117,9999,1
5118,9000,1
5118,9999,1
5119,9000,1
5119,9999,1
5120,9000,1
5120,9999,1
5121,9000,1
5121,9999,1
5122,9000,1
5122,9999,1
5123,9000,1
5123,9999,1
5124,9000,1
5124,9999,1
5125,9000,1
5125,9999,1
5126,9000,1
5126,9999,1
5127,9000,1
5127,9999,1
5128,9000,1
5128,9999,1
5129,9000,1
5129,9999,1
5130,9000,1
5130,9999,1
5131,9000,1
5131,9999,1
5132,9000,1
5132,9999,1
5133,9000,1
5133,9999,1
5134,9000,1
5134,9999,1
5135,9000,1
5135,9999,1
5136,9000,1
5136,9999,1
5137,9000,1
5137,9999,1
5138,9000,1
5138,9999,1
5139,9000,1
5139,9999,1
5140,9000,1
5140,9999,1
5141,9000,1
5141,9999,1
5142,9000,1
5142,9999,1
5143,9000,1
5143,9999,1
5144,9000,1
5144,9999,1
5145,9000,1
5145,9999,1
5146,9000,1
5146,9999,1
5147,9000,1
5147,9999,1
5148,9000,1
5148,9999,1
5149,9000,1
5149,9999,1
5150,9000,1
5150,9999,1
5151,9000,1
5151,9999,1
5152,9000,1
5152,9999,1
5153,9000,1
5153,9999,1
5154,9000,1
5154,9999,1
5155,9000,1
5155,9999,1
5156,9000,1
5156,9999,1
5157,9000,1
5157,9999,1
5158,9000,1
5158,9999,1
5159,9000,1
5159,9999,1
5160,9000,1
5160,9999,1
5161,9000,1
5161,9999,1
5162,9000,1
5162,9999,1
5163,9000,1
5163,9999,1
5164,9000,1
5164,9999,1
5165,9000,1
5165,9999,1
5166,9000,1
5166,9999,1
5167,9000,1
5167,9999,1
5168,9000,1
5168,9999,1
5169,9000,1
5169,9999,1
5170,9000,1
5170,9999,1
5171,9000,1
5171,9999,1
5172,9000,1
5172,9999,1
1 _characterId _groupId _masterReleaseLabelId
99 6008 9999 223121403
100 6009 9901 223121403
101 6009 9999 223121403
102 5001 9000 1
103 5001 9999 1
104 5002 9000 1
105 5002 9999 1
106 5003 9000 1
107 5003 9999 1
108 5004 9000 1
109 5004 9999 1
110 5005 9000 1
111 5005 9999 1
112 5006 9000 1
113 5006 9999 1
114 5007 9000 1
115 5007 9999 1
116 5008 9000 1
117 5008 9999 1
118 5009 9000 1
119 5009 9999 1
120 5010 9000 1
121 5010 9999 1
122 5011 9000 1
123 5011 9999 1
124 5012 9000 1
125 5012 9999 1
126 5013 9000 1
127 5013 9999 1
128 5014 9000 1
129 5014 9999 1
130 5015 9000 1
131 5015 9999 1
132 5016 9000 1
133 5016 9999 1
134 5017 9000 1
135 5017 9999 1
136 5018 9000 1
137 5018 9999 1
138 5019 9000 1
139 5019 9999 1
140 5020 9000 1
141 5020 9999 1
142 5021 9000 1
143 5021 9999 1
144 5022 9000 1
145 5022 9999 1
146 5023 9000 1
147 5023 9999 1
148 5024 9000 1
149 5024 9999 1
150 5025 9000 1
151 5025 9999 1
152 5026 9000 1
153 5026 9999 1
154 5027 9000 1
155 5027 9999 1
156 5028 9000 1
157 5028 9999 1
158 5029 9000 1
159 5029 9999 1
160 5030 9000 1
161 5030 9999 1
162 5031 9000 1
163 5031 9999 1
164 5032 9000 1
165 5032 9999 1
166 5033 9000 1
167 5033 9999 1
168 5034 9000 1
169 5034 9999 1
170 5035 9000 1
171 5035 9999 1
172 5036 9000 1
173 5036 9999 1
174 5037 9000 1
175 5037 9999 1
176 5038 9000 1
177 5038 9999 1
178 5039 9000 1
179 5039 9999 1
180 5040 9000 1
181 5040 9999 1
182 5041 9000 1
183 5041 9999 1
184 5042 9000 1
185 5042 9999 1
186 5043 9000 1
187 5043 9999 1
188 5044 9000 1
189 5044 9999 1
190 5045 9000 1
191 5045 9999 1
192 5046 9000 1
193 5046 9999 1
194 5047 9000 1
195 5047 9999 1
196 5048 9000 1
197 5048 9999 1
198 5049 9000 1
199 5049 9999 1
200 5050 9000 1
201 5050 9999 1
202 5051 9000 1
203 5051 9999 1
204 5052 9000 1
205 5052 9999 1
206 5053 9000 1
207 5053 9999 1
208 5054 9000 1
209 5054 9999 1
210 5055 9000 1
211 5055 9999 1
212 5056 9000 1
213 5056 9999 1
214 5057 9000 1
215 5057 9999 1
216 5058 9000 1
217 5058 9999 1
218 5059 9000 1
219 5059 9999 1
220 5060 9000 1
221 5060 9999 1
222 5061 9000 1
223 5061 9999 1
224 5062 9000 1
225 5062 9999 1
226 5063 9000 1
227 5063 9999 1
228 5064 9000 1
229 5064 9999 1
230 5065 9000 1
231 5065 9999 1
232 5066 9000 1
233 5066 9999 1
234 5067 9000 1
235 5067 9999 1
236 5068 9000 1
237 5068 9999 1
238 5069 9000 1
239 5069 9999 1
240 5070 9000 1
241 5070 9999 1
242 5071 9000 1
243 5071 9999 1
244 5072 9000 1
245 5072 9999 1
246 5073 9000 1
247 5073 9999 1
248 5074 9000 1
249 5074 9999 1
250 5075 9000 1
251 5075 9999 1
252 5076 9000 1
253 5076 9999 1
254 5077 9000 1
255 5077 9999 1
256 5078 9000 1
257 5078 9999 1
258 5079 9000 1
259 5079 9999 1
260 5080 9000 1
261 5080 9999 1
262 5081 9000 1
263 5081 9999 1
264 5082 9000 1
265 5082 9999 1
266 5083 9000 1
267 5083 9999 1
268 5084 9000 1
269 5084 9999 1
270 5085 9000 1
271 5085 9999 1
272 5086 9000 1
273 5086 9999 1
274 5087 9000 1
275 5087 9999 1
276 5088 9000 1
277 5088 9999 1
278 5089 9000 1
279 5089 9999 1
280 5090 9000 1
281 5090 9999 1
282 5091 9000 1
283 5091 9999 1
284 5092 9000 1
285 5092 9999 1
286 5093 9000 1
287 5093 9999 1
288 5094 9000 1
289 5094 9999 1
290 5095 9000 1
291 5095 9999 1
292 5096 9000 1
293 5096 9999 1
294 5097 9000 1
295 5097 9999 1
296 5098 9000 1
297 5098 9999 1
298 5099 9000 1
299 5099 9999 1
300 5100 9000 1
301 5100 9999 1
302 5101 9000 1
303 5101 9999 1
304 5102 9000 1
305 5102 9999 1
306 5103 9000 1
307 5103 9999 1
308 5104 9000 1
309 5104 9999 1
310 5105 9000 1
311 5105 9999 1
312 5106 9000 1
313 5106 9999 1
314 5107 9000 1
315 5107 9999 1
316 5108 9000 1
317 5108 9999 1
318 5109 9000 1
319 5109 9999 1
320 5110 9000 1
321 5110 9999 1
322 5111 9000 1
323 5111 9999 1
324 5112 9000 1
325 5112 9999 1
326 5113 9000 1
327 5113 9999 1
328 5114 9000 1
329 5114 9999 1
330 5115 9000 1
331 5115 9999 1
332 5116 9000 1
333 5116 9999 1
334 5117 9000 1
335 5117 9999 1
336 5118 9000 1
337 5118 9999 1
338 5119 9000 1
339 5119 9999 1
340 5120 9000 1
341 5120 9999 1
342 5121 9000 1
343 5121 9999 1
344 5122 9000 1
345 5122 9999 1
346 5123 9000 1
347 5123 9999 1
348 5124 9000 1
349 5124 9999 1
350 5125 9000 1
351 5125 9999 1
352 5126 9000 1
353 5126 9999 1
354 5127 9000 1
355 5127 9999 1
356 5128 9000 1
357 5128 9999 1
358 5129 9000 1
359 5129 9999 1
360 5130 9000 1
361 5130 9999 1
362 5131 9000 1
363 5131 9999 1
364 5132 9000 1
365 5132 9999 1
366 5133 9000 1
367 5133 9999 1
368 5134 9000 1
369 5134 9999 1
370 5135 9000 1
371 5135 9999 1
372 5136 9000 1
373 5136 9999 1
374 5137 9000 1
375 5137 9999 1
376 5138 9000 1
377 5138 9999 1
378 5139 9000 1
379 5139 9999 1
380 5140 9000 1
381 5140 9999 1
382 5141 9000 1
383 5141 9999 1
384 5142 9000 1
385 5142 9999 1
386 5143 9000 1
387 5143 9999 1
388 5144 9000 1
389 5144 9999 1
390 5145 9000 1
391 5145 9999 1
392 5146 9000 1
393 5146 9999 1
394 5147 9000 1
395 5147 9999 1
396 5148 9000 1
397 5148 9999 1
398 5149 9000 1
399 5149 9999 1
400 5150 9000 1
401 5150 9999 1
402 5151 9000 1
403 5151 9999 1
404 5152 9000 1
405 5152 9999 1
406 5153 9000 1
407 5153 9999 1
408 5154 9000 1
409 5154 9999 1
410 5155 9000 1
411 5155 9999 1
412 5156 9000 1
413 5156 9999 1
414 5157 9000 1
415 5157 9999 1
416 5158 9000 1
417 5158 9999 1
418 5159 9000 1
419 5159 9999 1
420 5160 9000 1
421 5160 9999 1
422 5161 9000 1
423 5161 9999 1
424 5162 9000 1
425 5162 9999 1
426 5163 9000 1
427 5163 9999 1
428 5164 9000 1
429 5164 9999 1
430 5165 9000 1
431 5165 9999 1
432 5166 9000 1
433 5166 9999 1
434 5167 9000 1
435 5167 9999 1
436 5168 9000 1
437 5168 9999 1
438 5169 9000 1
439 5169 9999 1
440 5170 9000 1
441 5170 9999 1
442 5171 9000 1
443 5171 9999 1
444 5172 9000 1
445 5172 9999 1

View File

@@ -1,40 +1,41 @@
_id,_name,_category,_imageColor,_recommendListTextColor,_sortPriority,_recommendedDeckView,_isCategoryJudge,_musicSelectSortView,_homeBgmSoundKey,_masterReleaseLabelId
100,μs,1,f1399f,f93981,1001,1,0,1,HomeScene_Bgm_Muse,1
101,Printemps,1,#000000,f93981,1101,1,0,1,,1
102,lily white,1,#000000,f93981,1102,1,0,1,,1
103,BiBi,1,#000000,f93981,1103,1,0,1,,1
104,A-RISE,1,#000000,f93981,1104,0,0,1,,1
190,ソロ,1,#000000,f93981,1190,0,1,1,,1
199,その他,1,#000000,f93981,1199,0,1,1,,1
200,Aqours,2,009de5,4587ff,2001,1,0,1,HomeScene_Bgm_Aqors,1
201,CYaRon!,2,#000000,4587ff,2101,1,0,1,,1
202,AZALEA,2,#000000,4587ff,2102,1,0,1,,1
203,Guilty Kiss,2,#000000,4587ff,2103,1,0,1,,1
204,Saint Snow,2,#000000,4587ff,2104,0,0,1,,1
205,Saint Aqours Snow,2,#000000,4587ff,2105,0,1,1,,1
290,ソロ,2,#000000,4587ff,2190,0,1,1,,1
299,その他,2,#000000,4587ff,2199,0,1,1,,1
300,虹ヶ咲学園スクールアイドル同好会,3,fdab0d,ffb745,3002,1,0,1,HomeScene_Bgm_Nijigaku,1
301,DiverDiva,3,#000000,ffb745,3101,1,0,1,,1
302,A・ZU・NA,3,#000000,ffb745,3102,1,0,1,,1
303,QU4RTZ,3,#000000,ffb745,3103,1,0,1,,1
304,R3BIRTH,3,#000000,ffb745,3104,1,0,1,,1
390,ソロ,3,#000000,ffb745,3001,0,1,1,,1
399,その他,3,#000000,ffb745,3199,0,1,1,,1
400,Liella!,4,c04abe,aa45ff,4001,1,0,1,HomeScene_Bgm_Liella,1
401,Sunny Passion,4,#000000,aa45ff,4102,0,0,1,,1
402,ウィーン・マルガレーテ,4,#000000,aa45ff,4103,0,0,1,,1
403,CatChu!,4,#000000,aa45ff,4004,1,0,1,,223101004
404,KALEIDOSCORE,4,#000000,aa45ff,4005,1,0,1,,223101004
405,5yncri5e!,4,#000000,aa45ff,4006,1,0,1,,223101004
490,ソロ,4,#000000,aa45ff,4190,0,1,1,,1
499,その他,4,#000000,aa45ff,4199,0,1,1,,1
500,蓮ノ空,5,#000000,494949,5001,0,0,1,,1
501,スリーズブーケ,5,#000000,494949,5002,0,0,1,,1
502,DOLLCHESTRA,5,#000000,494949,5003,0,0,1,,1
503,みらくらぱーく!,5,#000000,494949,5004,0,0,1,,1
590,ソロ,5,#000000,494949,5190,0,1,1,,1
599,その他,5,#000000,494949,5199,0,1,1,,1
600,ヨハネ,7,#000000,494949,6001,0,0,1,,223062001
9999,その他,6,b8826d,b8826d,90000,1,0,1,,1
9901,幻日のヨハネ,6,b8826d,494949,99001,0,0,0,,223121403
_id,_name,_category,_imageColor,_recommendListTextColor,_sortPriority,_recommendedDeckView,_isCategoryJudge,_musicSelectSortView,_homeBgmSoundKey,_nameEn,_masterReleaseLabelId
100,μs,1,f1399f,f93981,1001,1,0,1,HomeScene_Bgm_Muse,μ's,1
101,Printemps,1,#000000,f93981,1101,1,0,1,,Printemps,1
102,lily white,1,#000000,f93981,1102,1,0,1,,lily white,1
103,BiBi,1,#000000,f93981,1103,1,0,1,,BiBi,1
104,A-RISE,1,#000000,f93981,1104,0,0,1,,A-RISE,1
190,ソロ,1,#000000,f93981,1190,0,1,1,,Solo,1
199,その他,1,#000000,f93981,1199,0,1,1,,Other,1
200,Aqours,2,009de5,4587ff,2001,1,0,1,HomeScene_Bgm_Aqors,Aqours,1
201,CYaRon!,2,#000000,4587ff,2101,1,0,1,,CYaRon!,1
202,AZALEA,2,#000000,4587ff,2102,1,0,1,,AZALEA,1
203,Guilty Kiss,2,#000000,4587ff,2103,1,0,1,,Guilty Kiss,1
204,Saint Snow,2,#000000,4587ff,2104,0,0,1,,Saint Snow,1
205,Saint Aqours Snow,2,#000000,4587ff,2105,0,1,1,,Saint Aqours Snow,1
290,ソロ,2,#000000,4587ff,2190,0,1,1,,Solo,1
299,その他,2,#000000,4587ff,2199,0,1,1,,Other,1
300,虹ヶ咲学園スクールアイドル同好会,3,fdab0d,ffb745,3002,1,0,1,HomeScene_Bgm_Nijigaku,Nijigasaki High School Idol Club,1
301,DiverDiva,3,#000000,ffb745,3101,1,0,1,,DiverDiva,1
302,A・ZU・NA,3,#000000,ffb745,3102,1,0,1,,A・ZU・NA,1
303,QU4RTZ,3,#000000,ffb745,3103,1,0,1,,QU4RTZ,1
304,R3BIRTH,3,#000000,ffb745,3104,1,0,1,,R3BIRTH,1
390,ソロ,3,#000000,ffb745,3001,0,1,1,,Solo,1
399,その他,3,#000000,ffb745,3199,0,1,1,,Other,1
400,Liella!,4,c04abe,aa45ff,4001,1,0,1,HomeScene_Bgm_Liella,Liella!,1
401,Sunny Passion,4,#000000,aa45ff,4102,0,0,1,,Sunny Passion,1
402,ウィーン・マルガレーテ,4,#000000,aa45ff,4103,0,0,1,,Wien Margarete,1
403,CatChu!,4,#000000,aa45ff,4004,1,0,1,,CatChu!,223101004
404,KALEIDOSCORE,4,#000000,aa45ff,4005,1,0,1,,KALEIDOSCORE,223101004
405,5yncri5e!,4,#000000,aa45ff,4006,1,0,1,,5yncri5e!,223101004
490,ソロ,4,#000000,aa45ff,4190,0,1,1,,Solo,1
499,その他,4,#000000,aa45ff,4199,0,1,1,,Other,1
500,蓮ノ空,5,#000000,494949,5001,0,0,1,,Hasunosora,1
501,スリーズブーケ,5,#000000,494949,5002,0,0,1,,Cerise Bouquet,1
502,DOLLCHESTRA,5,#000000,494949,5003,0,0,1,,DOLLCHESTRA,1
503,みらくらぱーく!,5,#000000,494949,5004,0,0,1,,Mira-Cra Park!,1
590,ソロ,5,#000000,494949,5190,0,1,1,,Solo,1
599,その他,5,#000000,494949,5199,0,1,1,,Other,1
600,ヨハネ,7,#000000,494949,6001,0,0,1,,Yohane,223062001
9999,その他,6,b8826d,b8826d,90000,1,0,1,,Other,1
9901,幻日のヨハネ,6,b8826d,494949,99001,0,0,0,,Yohane the Parhelion,223121403
9000,スクフェス,6,e4007f,e4007f,89999,0,0,0,,SIF,1
1 _id _name _category _imageColor _recommendListTextColor _sortPriority _recommendedDeckView _isCategoryJudge _musicSelectSortView _homeBgmSoundKey _nameEn _masterReleaseLabelId
2 100 μ’s 1 f1399f f93981 1001 1 0 1 HomeScene_Bgm_Muse μ's 1
3 101 Printemps 1 #000000 f93981 1101 1 0 1 Printemps 1
4 102 lily white 1 #000000 f93981 1102 1 0 1 lily white 1
5 103 BiBi 1 #000000 f93981 1103 1 0 1 BiBi 1
6 104 A-RISE 1 #000000 f93981 1104 0 0 1 A-RISE 1
7 190 ソロ 1 #000000 f93981 1190 0 1 1 Solo 1
8 199 その他 1 #000000 f93981 1199 0 1 1 Other 1
9 200 Aqours 2 009de5 4587ff 2001 1 0 1 HomeScene_Bgm_Aqors Aqours 1
10 201 CYaRon! 2 #000000 4587ff 2101 1 0 1 CYaRon! 1
11 202 AZALEA 2 #000000 4587ff 2102 1 0 1 AZALEA 1
12 203 Guilty Kiss 2 #000000 4587ff 2103 1 0 1 Guilty Kiss 1
13 204 Saint Snow 2 #000000 4587ff 2104 0 0 1 Saint Snow 1
14 205 Saint Aqours Snow 2 #000000 4587ff 2105 0 1 1 Saint Aqours Snow 1
15 290 ソロ 2 #000000 4587ff 2190 0 1 1 Solo 1
16 299 その他 2 #000000 4587ff 2199 0 1 1 Other 1
17 300 虹ヶ咲学園スクールアイドル同好会 3 fdab0d ffb745 3002 1 0 1 HomeScene_Bgm_Nijigaku Nijigasaki High School Idol Club 1
18 301 DiverDiva 3 #000000 ffb745 3101 1 0 1 DiverDiva 1
19 302 A・ZU・NA 3 #000000 ffb745 3102 1 0 1 A・ZU・NA 1
20 303 QU4RTZ 3 #000000 ffb745 3103 1 0 1 QU4RTZ 1
21 304 R3BIRTH 3 #000000 ffb745 3104 1 0 1 R3BIRTH 1
22 390 ソロ 3 #000000 ffb745 3001 0 1 1 Solo 1
23 399 その他 3 #000000 ffb745 3199 0 1 1 Other 1
24 400 Liella! 4 c04abe aa45ff 4001 1 0 1 HomeScene_Bgm_Liella Liella! 1
25 401 Sunny Passion 4 #000000 aa45ff 4102 0 0 1 Sunny Passion 1
26 402 ウィーン・マルガレーテ 4 #000000 aa45ff 4103 0 0 1 Wien Margarete 1
27 403 CatChu! 4 #000000 aa45ff 4004 1 0 1 CatChu! 223101004
28 404 KALEIDOSCORE 4 #000000 aa45ff 4005 1 0 1 KALEIDOSCORE 223101004
29 405 5yncri5e! 4 #000000 aa45ff 4006 1 0 1 5yncri5e! 223101004
30 490 ソロ 4 #000000 aa45ff 4190 0 1 1 Solo 1
31 499 その他 4 #000000 aa45ff 4199 0 1 1 Other 1
32 500 蓮ノ空 5 #000000 494949 5001 0 0 1 Hasunosora 1
33 501 スリーズブーケ 5 #000000 494949 5002 0 0 1 Cerise Bouquet 1
34 502 DOLLCHESTRA 5 #000000 494949 5003 0 0 1 DOLLCHESTRA 1
35 503 みらくらぱーく! 5 #000000 494949 5004 0 0 1 Mira-Cra Park! 1
36 590 ソロ 5 #000000 494949 5190 0 1 1 Solo 1
37 599 その他 5 #000000 494949 5199 0 1 1 Other 1
38 600 ヨハネ 7 #000000 494949 6001 0 0 1 Yohane 223062001
39 9999 その他 6 b8826d b8826d 90000 1 0 1 Other 1
40 9901 幻日のヨハネ 6 b8826d 494949 99001 0 0 0 Yohane the Parhelion 223121403
41 9000 スクフェス 6 e4007f e4007f 89999 0 0 0 SIF 1

View File

@@ -1,191 +1,195 @@
_id,_name,_masterLotteryInfoId,_masterCautionId,_category,_type,_priority,_masterLotteryPriceId,_masterLotteryRarityId,_masterLotteryImageId,_balloonSpriteName,_startdashTime,_startdashExpireTime,_checkDisplayableLottery,_repeat,_exchangeMasterItemId,_masterLotteryEffMovieId,_masterLotteryEffMovieRatioId,_storeReviewFlag,_masterReleaseLabelId
1110001,リリース記念勧誘,1110001,1110001,1,1,20,1110001,1110001,1110001,,0,0,0,0,15500001,1,1,0,223041501
1110002,UR確定 リリース記念勧誘,1110002,1110002,1,1,20,1110002,1110002,1110002,,0,0,0,0,15500001,1,2,0,223041501
1110003,ピックアップ勧誘放課後の原宿Liella!♡~,1110003,1110003,1,1,20,1110003,1110003,1110003,,0,0,0,0,15500002,1,1,0,223041901
1110004,通常勧誘,1110004,1110004,1,1,20,1110004,1110004,1110004,,0,0,0,0,15510004,1,1,0,223043001
1110005,通常勧誘,1110005,1110005,1,1,20,1110005,1110005,1110005,,0,0,0,0,15510005,1,1,0,223051501
1110006,通常勧誘,1110006,1110006,1,1,20,1110006,1110006,1110006,,0,0,0,0,15510006,1,1,0,223053101
1110007,通常勧誘,1110007,1110007,1,1,20,1110007,1110007,1110007,,0,0,0,0,15510007,1,1,0,223061501
1110008,通常勧誘,1110008,1110008,1,1,20,1110008,1110008,1110008,,0,0,0,0,15510008,1,1,0,223063001
1110009,通常勧誘,1110009,1110009,1,1,20,1110009,1110009,1110009,,0,0,0,0,15510009,1,1,0,223071502
1110010,通常勧誘,1110010,1110010,1,1,20,1110010,1110010,1110010,,0,0,0,0,15510010,1,1,0,223073101
1110011,通常勧誘,1110011,1110011,1,1,20,1110011,1110011,1110011,,0,0,0,0,15510011,1,1,0,223081501
1110012,通常勧誘,1110012,1110012,1,1,20,1110012,1110012,1110012,,0,0,0,0,15510012,1,1,0,223083107
1110013,通常勧誘,1110013,1110013,1,1,20,1110013,1110013,1110013,,0,0,0,0,15510013,1,1,0,223091501
1110014,通常勧誘,1110014,1110014,1,1,20,1110014,1110014,1110014,,0,0,0,0,15510014,1,1,0,223093001
1110015,通常勧誘,1110015,1110015,1,1,20,1110015,1110015,1110015,,0,0,0,0,15510015,1,1,0,223101505
1110016,通常勧誘,1110016,1110016,1,1,20,1110016,1110016,1110016,,0,0,0,0,15510016,1,1,0,223103107
1110017,通常勧誘,1110017,1110017,1,1,20,1110017,1110017,1110017,,0,0,0,0,15510017,1,1,0,223111501
1110018,通常勧誘,1110018,1110018,1,1,20,1110018,1110018,1110018,,0,0,0,0,15510018,1,1,0,223113008
1110019,通常勧誘,1110019,1110019,1,1,20,1110019,1110019,1110019,,0,0,0,0,15510019,1,1,0,223121513
1110020,通常勧誘,1110020,1110020,1,1,20,1110020,1110020,1110020,,0,0,0,0,15510020,1,1,0,223123107
1110021,通常勧誘,1110021,1110021,1,1,20,1110021,1110021,1110021,,0,0,0,0,15510021,1,1,0,224011508
1110022,通常勧誘,1110022,1110022,1,1,20,1110022,1110022,1110022,,0,0,0,0,15510022,1,1,0,224013108
1110023,通常勧誘,1110023,1110023,1,1,20,1110023,1110023,1110023,,0,0,0,0,15510023,1,1,0,224021409
1110024,通常勧誘,1110024,1110024,1,1,20,1110024,1110024,1110024,,0,0,0,0,15510024,1,1,0,224030120
2110001,ピックアップ勧誘~わたしたちとこの街~,2110001,2110001,1,1,2304307,2110001,2110001,2110001,,0,0,0,0,15520001,1,1,0,223043002
2110002,ピックアップ勧誘~商店街をアピールだ!~,2110002,2110002,1,1,2305157,2110002,2110002,2110002,,0,0,0,0,15520002,1,1,0,223051502
2110003,ピックアップ勧誘Live in Nature,2110003,2110003,1,1,2305317,2110003,2110003,2110003,,0,0,0,0,15520003,1,1,0,223053102
2110004,ピックアップ勧誘~煌めく踊り子~,2110004,2110004,1,1,2306197,2110004,2110004,2110004,,0,0,0,0,15520004,1,1,0,223061502
2110005,ピックアップ勧誘~煌めく踊り子~,2110005,2110005,1,1,2306196,2110005,2110005,2110005,,0,0,0,0,15520004,1,1,0,223061502
2110006,ピックアップ勧誘~太陽降り注ぐ夏合宿~,2110006,2110006,1,1,2306307,2110006,2110006,2110006,,0,0,0,0,15520005,1,1,0,223063002
2110007,ピックアップ勧誘~太陽降り注ぐ夏合宿~,2110007,2110007,1,1,2306306,2110007,2110007,2110007,,0,0,0,0,15520005,1,1,0,223063002
2110008,ピックアップ勧誘~真夏の人魚姫~,2110008,2110008,1,1,2307157,2110008,2110008,2110008,,0,0,0,0,15520006,1,1,0,223071503
2110009,ピックアップ勧誘~真夏の人魚姫~,2110009,2110009,1,1,2307156,2110009,2110009,2110009,,0,0,0,0,15520006,1,1,0,223071503
2110010,ピックアップ勧誘~砂浜駆ける夏の海~,2110010,2110010,1,1,2307317,2110010,2110010,2110010,,0,0,0,0,15520007,1,1,0,223073102
2110011,ピックアップ勧誘~砂浜駆ける夏の海~,2110011,2110011,1,1,2307316,2110011,2110011,2110011,,0,0,0,0,15520007,1,1,0,223073102
2110012,ピックアップ勧誘~夏夜に咲き誇る花~,2110012,2110012,1,1,2308157,2110012,2110012,2110012,,0,0,0,0,15520008,1,1,0,223081502
2110013,ピックアップ勧誘~夏夜に咲き誇る花~,2110013,2110013,1,1,2308156,2110013,2110013,2110013,,0,0,0,0,15520008,1,1,0,223081502
2110014,ピックアップ勧誘~月夜に輝く尾花~,2110014,2110014,1,1,2308317,2110014,2110014,2110014,,0,0,0,0,15520009,1,1,0,223083102
2110015,ピックアップ勧誘~月夜に輝く尾花~,2110015,2110015,1,1,2308316,2110015,2110015,2110015,,0,0,0,0,15520009,1,1,0,223083102
2110016,ピックアップ勧誘~浴衣で涼む街めぐり~,2110016,2110016,1,1,2309157,2110016,2110016,2110016,,0,0,0,0,15520010,1,1,0,223091502
2110017,ピックアップ勧誘~浴衣で涼む街めぐり~,2110017,2110017,1,1,2309156,2110017,2110017,2110017,,0,0,0,0,15520010,1,1,0,223091502
2110018,ピックアップ勧誘Trick or Treat!,2110018,2110018,1,1,2309307,2110018,2110018,2110018,,0,0,0,0,15520011,1,1,0,223093002
2110019,ピックアップ勧誘Trick or Treat!,2110019,2110019,1,1,2309308,2110019,2110019,2110019,,0,0,0,0,15520011,1,1,0,223093002
2110020,ピックアップ勧誘Boo! Boo! ハロウィンランド~,2110020,2110020,1,1,2310160,2110020,2110020,2110020,,0,0,0,0,15540017,1,1,0,223101506
2110021,ピックアップ勧誘Boo! Boo! ハロウィンランド~,2110021,2110021,1,1,2310161,2110021,2110021,2110021,,0,0,0,0,15540017,1,1,0,223101506
2110022,ピックアップ勧誘~ひだまりのマーチングバンド~,2110022,2110022,1,1,2310319,2110022,2110022,2110022,,0,0,0,0,15520012,1,1,0,223103108
2110023,ピックアップ勧誘~ひだまりのマーチングバンド~,2110023,2110023,1,1,2310318,2110023,2110023,2110023,,0,0,0,0,15520012,1,1,0,223103108
2110024,ピックアップ勧誘~にゃんにゃん🐾メイドさん~,2110024,2110024,1,1,2311157,2110024,2110024,2110024,,0,0,0,0,15520013,1,1,0,223111502
2110025,ピックアップ勧誘~にゃんにゃん🐾メイドさん~,2110025,2110025,1,1,2311156,2110025,2110025,2110025,,0,0,0,0,15520013,1,1,0,223111502
2110026,ピックアップ勧誘みんなでMerryChristmas,2110026,2110026,1,1,2311307,2110026,2110026,2110026,,0,0,0,0,15520014,1,1,0,223113009
2110027,ピックアップ勧誘みんなでMerryChristmas,2110027,2110027,1,1,2311306,2110027,2110027,2110027,,0,0,0,0,15520014,1,1,0,223113009
2110028,ピックアップ勧誘~雪まつりのサンタクロース~,2110028,2110028,1,1,2312157,2110028,2110028,2110028,,0,0,0,0,15520015,1,1,0,223121505
2110029,ピックアップ勧誘~雪まつりのサンタクロース~,2110029,2110029,1,1,2312156,2110029,2110029,2110029,,0,0,0,0,15520015,1,1,0,223121505
2110030,ピックアップ勧誘~みんなへのあけましておめでとう~,2110030,2110030,1,1,2312317,2110030,2110030,2110030,,0,0,0,0,15520016,1,1,0,223123102
2110031,ピックアップ勧誘~みんなへのあけましておめでとう~,2110031,2110031,1,1,2312316,2110031,2110031,2110031,,0,0,0,0,15520016,1,1,0,223123102
2110032,ピックアップ勧誘~氷上のフェアリー~,2110032,2110032,1,1,2401157,2110032,2110032,2110032,,0,0,0,0,15520017,1,1,0,224011502
2110033,ピックアップ勧誘~氷上のフェアリー~,2110033,2110033,1,1,2401156,2110033,2110033,2110033,,0,0,0,0,15520017,1,1,0,224011502
2110034,ピックアップ勧誘~恋に囚われし乙女~,2110034,2110034,1,1,2401317,2110034,2110034,2110034,,0,0,0,0,15520018,1,1,0,224013102
2110035,ピックアップ勧誘~恋に囚われし乙女~,2110035,2110035,1,1,2401316,2110035,2110035,2110035,,0,0,0,0,15520018,1,1,0,224013102
2110036,ピックアップ勧誘~百鬼夜行の夜~,2110036,2110036,1,1,2402147,2110036,2110036,2110036,,0,0,0,0,15520019,1,1,0,224021402
2110037,ピックアップ勧誘~百鬼夜行の夜~,2110037,2110037,1,1,2402146,2110037,2110037,2110037,,0,0,0,0,15520019,1,1,0,224021402
2110038,ピックアップ勧誘Y2K♡GALS,2110038,2110038,1,1,2403017,2110038,2110038,2110038,,0,0,0,0,15520020,1,1,0,224030102
2110039,ピックアップ勧誘Y2K♡GALS,2110039,2110039,1,1,2403016,2110039,2110039,2110039,,0,0,0,0,15520020,1,1,0,224030102
3110001,かのんちゃんお誕生日記念勧誘~ハーモニースター~,3110001,3110001,1,1,2305010,3110001,3110001,3110001,,0,0,0,0,15530001,1,1,0,223050101
3110002,愛ちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110002,3110002,1,1,2305300,3110002,3110002,3110002,,0,0,0,0,15530002,1,1,0,223053001
3110003,希ちゃんお誕生日記念勧誘~フラワーシャワー~,3110003,3110003,1,1,2306090,3110003,3110003,3110003,,0,0,0,0,15530003,1,1,0,223060901
3110004,鞠莉ちゃんお誕生日記念勧誘~フェアリーウイング~,3110004,3110004,1,1,2306130,3110004,3110004,3110004,,0,0,0,0,15530004,1,1,0,223061301
3110005,四季ちゃんお誕生日記念勧誘~ハーモニースター~,3110005,3110005,1,1,2306170,3110005,3110005,3110005,,0,0,0,0,15530005,1,1,0,223061701
3110006,果林ちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110006,3110006,1,1,2306290,3110006,3110006,3110006,,0,0,0,0,15530006,1,1,0,223062901
3110007,善子ちゃんお誕生日記念勧誘~フェアリーウイング~,3110007,3110007,1,1,2307130,3110007,3110007,3110007,,0,0,0,0,15530007,1,1,0,223071301
3110008,可可ちゃんお誕生日記念勧誘~ハーモニースター~,3110008,3110008,1,1,2307170,3110008,3110008,3110008,,0,0,0,0,15530008,1,1,0,223071702
3110009,にこちゃんお誕生日記念勧誘~フラワーシャワー~,3110009,3110009,1,1,2307220,3110009,3110009,3110009,,0,0,0,0,15530009,1,1,0,223072201
3110010,千歌ちゃんお誕生日記念勧誘~フェアリーウイング~,3110010,3110010,1,1,2308010,3110010,3110010,3110010,,0,0,0,0,15530010,1,1,0,223080102
3110011,穂乃果ちゃんお誕生日記念勧誘~フラワーシャワー~,3110011,3110011,1,1,2308030,3110011,3110011,3110011,,0,0,0,0,15530011,1,1,0,223080303
3110012,夏美ちゃんお誕生日記念勧誘~ハーモニースター~,3110012,3110012,1,1,2308070,3110012,3110012,3110012,,0,0,0,0,15530012,1,1,0,223080701
3110013,せつ菜ちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110013,3110013,1,1,2308080,3110013,3110013,3110013,,0,0,0,0,15530013,1,1,0,223080801
3110014,ことりちゃんお誕生日記念勧誘~フラワーシャワー~,3110014,3110014,1,1,2309120,3110014,3110014,3110014,,0,0,0,0,15530014,1,1,0,223091201
3110015,梨子ちゃんお誕生日記念勧誘~フェアリーウイング~,3110015,3110015,1,1,2309190,3110015,3110015,3110015,,0,0,0,0,15530015,1,1,0,223091901
3110016,ルビィちゃんお誕生日記念勧誘~フェアリーウイング~,3110016,3110016,1,1,2309210,3110016,3110016,3110016,,0,0,0,0,15530016,1,1,0,223092101
3110017,すみれちゃんお誕生日記念勧誘~ハーモニースター~,3110017,3110017,1,1,2309280,3110017,3110017,3110017,,0,0,0,0,15530017,1,1,0,223092801
3110018,栞子ちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110018,3110018,1,1,2310050,3110018,3110018,3110018,,0,0,0,0,15530018,1,1,0,223100502
3110019,絵里ちゃんお誕生日記念勧誘~フラワーシャワー~,3110019,3110019,1,1,2310210,3110019,3110019,3110019,,0,0,0,0,15530019,1,1,0,223102101
3110020,メイちゃんお誕生日記念勧誘~ハーモニースター~,3110020,3110020,1,1,2310290,3110020,3110020,3110020,,0,0,0,0,15530020,1,1,0,223102901
3110021,凛ちゃんお誕生日記念勧誘~フラワーシャワー~,3110021,3110021,1,1,2311010,3110021,3110021,3110021,,0,0,0,0,15530021,1,1,0,223110101
3110022,璃奈ちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110022,3110022,1,1,2311130,3110022,3110022,3110022,,0,0,0,0,15530022,1,1,0,223111301
3110023,恋ちゃんお誕生日記念勧誘~ハーモニースター~,3110023,3110023,1,1,2311240,3110023,3110023,3110023,,0,0,0,0,15530023,1,1,0,223112401
3110024,ミアちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110024,3110024,1,1,2312060,3110024,3110024,3110024,,0,0,0,0,15530024,1,1,0,223120601
3110025,彼方ちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110025,3110025,1,1,2312160,3110025,3110025,3110025,,0,0,0,0,15530025,1,1,0,223121601
3110026,冬毬ちゃんお誕生日記念勧誘~ハーモニースター~,3110026,3110026,1,1,2312280,3110026,3110026,3110026,,0,0,0,0,15530026,1,1,0,223122801
3110027,ダイヤちゃんお誕生日記念勧誘~フェアリーウイング~,3110027,3110027,1,1,2401010,3110027,3110027,3110027,,0,0,0,0,15530027,1,1,0,224010103
3110028,花陽ちゃんお誕生日記念勧誘~フラワーシャワー~,3110028,3110028,1,1,2401170,3110028,3110028,3110028,,0,0,0,0,15530028,1,1,0,224011702
3110029,マルガレーテちゃんお誕生日記念勧誘~ハーモニースター~,3110029,3110029,1,1,2401200,3110029,3110029,3110029,,0,0,0,0,15530029,1,1,0,224012002
3110030,かすみちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110030,3110030,1,1,2401230,3110030,3110030,3110030,,0,0,0,0,15530030,1,1,0,224012302
3110031,エマちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110031,3110031,1,1,2402050,3110031,3110031,3110031,,0,0,0,0,15530031,1,1,0,224020502
3110032,果南ちゃんお誕生日記念勧誘~フェアリーウイング~,3110032,3110032,1,1,2402100,3110032,3110032,3110032,,0,0,0,0,15530032,1,1,0,224021004
3110033,嵐珠ちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110033,3110033,1,1,2402150,3110033,3110033,3110033,,0,0,0,0,15530033,1,1,0,224021502
3110034,千砂都ちゃんお誕生日記念勧誘~ハーモニースター~,3110034,3110034,1,1,2402250,3110034,3110034,3110034,,0,0,0,0,15530034,1,1,0,224022502
3110035,歩夢ちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110035,3110035,1,1,2403019,3110035,3110035,3110035,,0,0,0,0,15530035,1,1,0,224030107
3110036,花丸ちゃんお誕生日記念勧誘~フェアリーウイング~,3110036,3110036,1,1,2403040,3110036,3110036,3110036,,0,0,0,0,15530036,1,1,0,224030402
3110037,海未ちゃんお誕生日記念勧誘~フラワーシャワー~,3110037,3110037,1,1,2403150,3110037,3110037,3110037,,0,0,0,0,15530037,1,1,0,224031502
4110001,スマイル限定!ピックアップ勧誘,4110001,4110001,1,1,2306119,4110001,4110001,4110001,,0,0,0,0,15540002,1,1,0,223061103
4110002,ピュア限定!ピックアップ勧誘,4110002,4110002,1,1,2306118,4110002,4110002,4110002,,0,0,0,0,15540002,1,1,0,223061103
4110003,クール限定!ピックアップ勧誘,4110003,4110003,1,1,2306117,4110003,4110003,4110003,,0,0,0,0,15540002,1,1,0,223061103
4110004,スクフェスシリーズ感謝祭2023記念 UR確定勧誘,4110004,4110004,1,1,2306237,4110004,4110004,4110004,,0,0,0,0,0,1,2,0,223062301
4110005,ラブソングカーニバル記念勧誘~歩夢編~,4110005,4110005,1,1,2310037,4110005,4110005,4110005,,0,0,0,0,15540005,1,1,0,223100301
4110006,ラブソングカーニバル記念勧誘~かすみ編~,4110006,4110006,1,1,2310107,4110006,4110006,4110006,,0,0,0,0,15540006,1,1,0,223101001
4110007,ラブソングカーニバル記念勧誘~しずく編~,4110007,4110007,1,1,2310177,4110007,4110007,4110007,,0,0,0,0,15540007,1,1,0,223101701
4110008,ラブソングカーニバル記念勧誘~果林編~,4110008,4110008,1,1,2310247,4110008,4110008,4110008,,0,0,0,0,15540008,1,1,0,223102401
4110009,ラブソングカーニバル記念勧誘~愛編~,4110009,4110009,1,1,2310316,4110009,4110009,4110009,,0,0,0,0,15540009,1,1,0,223103101
4110010,ラブソングカーニバル記念勧誘~彼方編~,4110010,4110010,1,1,2311077,4110010,4110010,4110010,,0,0,0,0,15540010,1,1,0,223110701
4110011,ラブソングカーニバル記念勧誘~せつ菜編~,4110011,4110011,1,1,2311147,4110011,4110011,4110011,,0,0,0,0,15540011,1,1,0,223111401
4110012,ラブソングカーニバル記念勧誘~エマ編~,4110012,4110012,1,1,2311217,4110012,4110012,4110012,,0,0,0,0,15540012,1,1,0,223112101
4110013,ラブソングカーニバル記念勧誘~璃奈編~,4110013,4110013,1,1,2311287,4110013,4110013,4110013,,0,0,0,0,15540013,1,1,0,223112801
4110014,ラブソングカーニバル記念勧誘~栞子編~,4110014,4110014,1,1,2312057,4110014,4110014,4110014,,0,0,0,0,15540014,1,1,0,223120501
4110015,ラブソングカーニバル記念勧誘~ミア編~,4110015,4110015,1,1,2312127,4110015,4110015,4110015,,0,0,0,0,15540015,1,1,0,223121201
4110016,ラブソングカーニバル記念勧誘~嵐珠編~,4110016,4110016,1,1,2312197,4110016,4110016,4110016,,0,0,0,0,15540016,1,1,0,223121901
4110017,最大100回無料Half Anniversary記念勧誘,4110017,4110017,1,1,3310157,4110017,4110017,4110017,,0,0,0,0,15540017,1,1,0,223101501
4110019,UR確定 Half Anniversary記念勧誘μ's編,4110019,4110019,1,1,2310156,4110019,4110019,4110019,,0,0,0,0,15540017,1,1,0,223101502
4110020,UR確定 Half Anniversary記念勧誘Aqours編,4110020,4110020,1,1,2310155,4110020,4110020,4110020,,0,0,0,0,15540017,1,1,0,223101502
4110021,UR確定 Half Anniversary記念勧誘虹ヶ咲編,4110021,4110021,1,1,2310154,4110021,4110021,4110021,,0,0,0,0,15540017,1,1,0,223101502
4110022,UR確定 Half Anniversary記念勧誘Liella!編~,4110022,4110022,1,1,2310153,4110022,4110022,4110022,,0,0,0,0,15540017,1,1,0,223101502
4110023,私のラブソング編 開幕記念勧誘,4110023,4110023,1,1,2309067,4110023,4110023,4110023,,0,0,0,0,15540023,1,1,0,223090603
4110024,μ's限定ピックアップ勧誘,4110024,4110024,1,1,2310312,4110024,4110024,4110024,,0,0,0,0,15540024,1,1,0,223103111
4110025,Aqours限定ピックアップ勧誘,4110025,4110025,1,1,2311152,4110025,4110025,4110025,,0,0,0,0,15540025,1,1,0,223111508
4110026,UR確定 Half Anniversary記念勧誘後夜祭,4110026,4110026,1,1,2310317,4110026,4110026,4110026,,0,0,0,0,15520012,1,1,0,223103112
4110027,幻日のヨハネ -The Story of the Sound of Heart- 開催記念勧誘,4110027,4110027,1,1,2312147,4110027,4110027,4110027,,0,0,0,0,15540027,1,1,0,223121402
4110028,1年生限定ピックアップ勧誘,4110028,4110028,1,1,2311177,4110028,4110028,4110028,,0,0,0,0,15540028,1,1,0,223111702
4110029,2年生限定ピックアップ勧誘,4110029,4110029,1,1,2311247,4110029,4110029,4110029,,0,0,0,0,15540029,1,1,0,223112404
4110030,3年生限定ピックアップ勧誘,4110030,4110030,1,1,2312017,4110030,4110030,4110030,,0,0,0,0,15540030,1,1,0,223120103
4110031,異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘Aqours編,4110031,4110031,1,1,2312095,4110031,4110031,4110031,,0,0,0,0,0,1,1,0,223120907
4110032,異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘~ニジガク編~,4110032,4110032,1,1,2312094,4110032,4110032,4110032,,0,0,0,0,0,1,1,0,223120908
4110033,異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘Liella!編~,4110033,4110033,1,1,2312093,4110033,4110033,4110033,,0,0,0,0,0,1,1,0,223120909
4110034,最大240回無料年末年始記念勧誘,4110034,4110034,1,1,3312267,4110034,4110034,4110034,,0,0,0,0,15540031,1,1,0,223122604
4110035,UR確定年末年始記念勧誘,4110035,4110035,1,1,2312267,4110035,4110035,4110035,,0,0,0,0,15540031,1,1,0,223122604
4110036,新春初夢記念勧誘,4110036,4110036,1,1,2401017,4110036,4110036,4110036,,0,0,0,0,15540032,1,1,0,224010105
4110037,UR確定新春初夢記念勧誘,4110037,4110037,1,1,2401016,4110037,4110037,4110037,,0,0,0,0,15540032,1,1,0,224010105
4110038,ラブソングカーニバル記念勧誘,4110038,4110038,1,1,2401137,4110038,4110038,4110038,,0,0,0,0,15540033,1,1,0,224011304
4110039,スクフェス2 大感謝勧誘~μ's編,4110039,4110039,1,1,3403020,4110039,4110039,4110039,,0,0,0,0,15540034,1,1,0,224030109
4110040,スクフェス2 大感謝勧誘Aqours編,4110040,4110040,1,1,3403019,4110040,4110040,4110040,,0,0,0,0,15540034,1,1,0,224030109
4110041,スクフェス2 大感謝勧誘~ニジガク編~,4110041,4110041,1,1,3403018,4110041,4110041,4110041,,0,0,0,0,15540034,1,1,0,224030109
4110042,スクフェス2 大感謝勧誘Liella!編~,4110042,4110042,1,1,3403017,4110042,4110042,4110042,,0,0,0,0,15540034,1,1,0,224030109
4110043,スペシャル勧誘,4110043,4110043,1,1,2403167,4110043,4110043,4110043,,0,0,0,0,15540035,1,1,0,224031602
4110044,スクールアイドル感謝祭 全員集合勧誘,4110044,4110044,1,1,2403207,4110044,4110044,4110044,,0,0,0,0,0,1,1,0,224032003
5110001,全部員大集合!ステップアップ勧誘,5110001,5110001,1,2,2404010,511000101,511000101,5110001,,0,0,0,1,0,1,1,0,1
7110002,スクフェスデータ連携特典 チケット勧誘,7110002,7110002,1,1,15,7110002,7110002,7110002,,0,0,1,0,15540001,1,1,0,223043003
7110003,スクスタデータ連携特典 チケット勧誘,7110003,7110003,1,1,15,7110003,7110003,7110003,,0,0,1,0,15540001,1,1,0,223071202
8110001,アイテム勧誘,8110001,8110001,2,1,10,8110001,8110001,8110001,,0,0,0,0,0,1,1,0,1
8110002,アイテム勧誘,8110002,8110002,2,1,10,8110002,8110002,8110002,,0,0,0,0,0,1,1,0,223101604
8110004,アイテム勧誘,8110004,8110004,2,1,10,8110004,8110004,8110004,,0,0,0,0,0,1,1,0,224010108
8110005,アイテム勧誘,8110005,8110005,2,1,10,8110005,8110005,8110005,,0,0,0,0,0,1,1,0,224020106
8110006,アイテム勧誘,8110006,8110006,2,1,10,8110006,8110006,8110006,,0,0,0,0,0,1,1,0,224030121
9110001,チュートリアル勧誘【高坂 穂乃果】,9110001,9110001,1,1,999,9110001,9110001,9110001,,0,0,1,0,0,100,2,0,1
9110002,チュートリアル勧誘【絢瀬 絵里】,9110002,9110002,1,1,999,9110002,9110002,9110002,,0,0,1,0,0,100,2,0,1
9110003,チュートリアル勧誘【南 ことり】,9110003,9110003,1,1,999,9110003,9110003,9110003,,0,0,1,0,0,100,2,0,1
9110004,チュートリアル勧誘【園田 海未】,9110004,9110004,1,1,999,9110004,9110004,9110004,,0,0,1,0,0,100,2,0,1
9110005,チュートリアル勧誘【星空 凛】,9110005,9110005,1,1,999,9110005,9110005,9110005,,0,0,1,0,0,100,2,0,1
9110006,チュートリアル勧誘【西木野 真姫】,9110006,9110006,1,1,999,9110006,9110006,9110006,,0,0,1,0,0,100,2,0,1
9110007,チュートリアル勧誘【東條 希】,9110007,9110007,1,1,999,9110007,9110007,9110007,,0,0,1,0,0,100,2,0,1
9110008,チュートリアル勧誘【小泉 花陽】,9110008,9110008,1,1,999,9110008,9110008,9110008,,0,0,1,0,0,100,2,0,1
9110009,チュートリアル勧誘【矢澤 にこ】,9110009,9110009,1,1,999,9110009,9110009,9110009,,0,0,1,0,0,100,2,0,1
9110010,チュートリアル勧誘【高海 千歌】,9110010,9110010,1,1,999,9110010,9110010,9110010,,0,0,1,0,0,200,2,0,1
9110011,チュートリアル勧誘【桜内 梨子】,9110011,9110011,1,1,999,9110011,9110011,9110011,,0,0,1,0,0,200,2,0,1
9110012,チュートリアル勧誘【松浦 果南】,9110012,9110012,1,1,999,9110012,9110012,9110012,,0,0,1,0,0,200,2,0,1
9110013,チュートリアル勧誘【黒澤 ダイヤ】,9110013,9110013,1,1,999,9110013,9110013,9110013,,0,0,1,0,0,200,2,0,1
9110014,チュートリアル勧誘【渡辺 曜】,9110014,9110014,1,1,999,9110014,9110014,9110014,,0,0,1,0,0,200,2,0,1
9110015,チュートリアル勧誘【津島 善子】,9110015,9110015,1,1,999,9110015,9110015,9110015,,0,0,1,0,0,200,2,0,1
9110016,チュートリアル勧誘【国木田 花丸】,9110016,9110016,1,1,999,9110016,9110016,9110016,,0,0,1,0,0,200,2,0,1
9110017,チュートリアル勧誘【小原 鞠莉】,9110017,9110017,1,1,999,9110017,9110017,9110017,,0,0,1,0,0,200,2,0,1
9110018,チュートリアル勧誘【黒澤 ルビィ】,9110018,9110018,1,1,999,9110018,9110018,9110018,,0,0,1,0,0,200,2,0,1
9110019,チュートリアル勧誘【上原 歩夢】,9110019,9110019,1,1,999,9110019,9110019,9110019,,0,0,1,0,0,300,2,0,1
9110020,チュートリアル勧誘【中須 かすみ】,9110020,9110020,1,1,999,9110020,9110020,9110020,,0,0,1,0,0,300,2,0,1
9110021,チュートリアル勧誘【桜坂 しずく】,9110021,9110021,1,1,999,9110021,9110021,9110021,,0,0,1,0,0,300,2,0,1
9110022,チュートリアル勧誘【朝香 果林】,9110022,9110022,1,1,999,9110022,9110022,9110022,,0,0,1,0,0,300,2,0,1
9110023,チュートリアル勧誘【宮下 愛】,9110023,9110023,1,1,999,9110023,9110023,9110023,,0,0,1,0,0,300,2,0,1
9110024,チュートリアル勧誘【近江 彼方】,9110024,9110024,1,1,999,9110024,9110024,9110024,,0,0,1,0,0,300,2,0,1
9110025,チュートリアル勧誘【優木 せつ菜】,9110025,9110025,1,1,999,9110025,9110025,9110025,,0,0,1,0,0,300,2,0,1
9110026,チュートリアル勧誘【エマ・ヴェルデ】,9110026,9110026,1,1,999,9110026,9110026,9110026,,0,0,1,0,0,300,2,0,1
9110027,チュートリアル勧誘【天王寺 璃奈】,9110027,9110027,1,1,999,9110027,9110027,9110027,,0,0,1,0,0,300,2,0,1
9110028,チュートリアル勧誘【三船 栞子】,9110028,9110028,1,1,999,9110028,9110028,9110028,,0,0,1,0,0,300,2,0,1
9110029,チュートリアル勧誘【ミア・テイラー】,9110029,9110029,1,1,999,9110029,9110029,9110029,,0,0,1,0,0,300,2,0,1
9110030,チュートリアル勧誘【鐘 嵐珠】,9110030,9110030,1,1,999,9110030,9110030,9110030,,0,0,1,0,0,300,2,0,1
9110031,チュートリアル勧誘【澁谷 かのん】,9110031,9110031,1,1,999,9110031,9110031,9110031,,0,0,1,0,0,400,2,0,1
9110032,チュートリアル勧誘【唐 可可】,9110032,9110032,1,1,999,9110032,9110032,9110032,,0,0,1,0,0,400,2,0,1
9110033,チュートリアル勧誘【嵐 千砂都】,9110033,9110033,1,1,999,9110033,9110033,9110033,,0,0,1,0,0,400,2,0,1
9110034,チュートリアル勧誘【平安名 すみれ】,9110034,9110034,1,1,999,9110034,9110034,9110034,,0,0,1,0,0,400,2,0,1
9110035,チュートリアル勧誘【葉月 恋】,9110035,9110035,1,1,999,9110035,9110035,9110035,,0,0,1,0,0,400,2,0,1
9110036,チュートリアル勧誘【桜小路 きな子】,9110036,9110036,1,1,999,9110036,9110036,9110036,,0,0,1,0,0,400,2,0,1
9110037,チュートリアル勧誘【米女 メイ】,9110037,9110037,1,1,999,9110037,9110037,9110037,,0,0,1,0,0,400,2,0,1
9110038,チュートリアル勧誘【若菜 四季】,9110038,9110038,1,1,999,9110038,9110038,9110038,,0,0,1,0,0,400,2,0,1
9110039,チュートリアル勧誘【鬼塚 夏美】,9110039,9110039,1,1,999,9110039,9110039,9110039,,0,0,1,0,0,400,2,0,1
_id,_name,_masterLotteryInfoId,_masterCautionId,_category,_type,_priority,_masterLotteryPriceId,_masterLotteryRarityId,_masterLotteryImageId,_balloonSpriteName,_startdashTime,_startdashExpireTime,_checkDisplayableLottery,_repeat,_exchangeMasterItemId,_masterLotteryEffMovieId,_masterLotteryEffMovieRatioId,_storeReviewFlag,_nameEn,_masterReleaseLabelId
1110001,リリース記念勧誘,1110001,1110001,1,1,20,1110001,1110001,1110001,,0,0,0,0,15500001,1,1,0,Release Celebration Scout,223041501
1110002,UR確定 リリース記念勧誘,1110002,1110002,1,1,20,1110002,1110002,1110002,,0,0,0,0,15500001,1,2,0,Guaranteed UR Release Celebration Scout,223041501
1110003,ピックアップ勧誘放課後の原宿Liella!♡~,1110003,1110003,1,1,20,1110003,1110003,1110003,,0,0,0,0,15500002,1,1,0,Spotlight Scout: After-School Harajuku Liella! ♡,223041901
1110004,通常勧誘,1110004,1110004,1,1,20,1110004,1110004,1110004,,0,0,0,0,15510004,1,1,0,Normal Scout,223043001
1110005,通常勧誘,1110005,1110005,1,1,20,1110005,1110005,1110005,,0,0,0,0,15510005,1,1,0,Normal Scout,223051501
1110006,通常勧誘,1110006,1110006,1,1,20,1110006,1110006,1110006,,0,0,0,0,15510006,1,1,0,Normal Scout,223053101
1110007,通常勧誘,1110007,1110007,1,1,20,1110007,1110007,1110007,,0,0,0,0,15510007,1,1,0,Normal Scout,223061501
1110008,通常勧誘,1110008,1110008,1,1,20,1110008,1110008,1110008,,0,0,0,0,15510008,1,1,0,Normal Scout,223063001
1110009,通常勧誘,1110009,1110009,1,1,20,1110009,1110009,1110009,,0,0,0,0,15510009,1,1,0,Normal Scout,223071502
1110010,通常勧誘,1110010,1110010,1,1,20,1110010,1110010,1110010,,0,0,0,0,15510010,1,1,0,Normal Scout,223073101
1110011,通常勧誘,1110011,1110011,1,1,20,1110011,1110011,1110011,,0,0,0,0,15510011,1,1,0,Normal Scout,223081501
1110012,通常勧誘,1110012,1110012,1,1,20,1110012,1110012,1110012,,0,0,0,0,15510012,1,1,0,Normal Scout,223083107
1110013,通常勧誘,1110013,1110013,1,1,20,1110013,1110013,1110013,,0,0,0,0,15510013,1,1,0,Normal Scout,223091501
1110014,通常勧誘,1110014,1110014,1,1,20,1110014,1110014,1110014,,0,0,0,0,15510014,1,1,0,Normal Scout,223093001
1110015,通常勧誘,1110015,1110015,1,1,20,1110015,1110015,1110015,,0,0,0,0,15510015,1,1,0,Normal Scout,223101505
1110016,通常勧誘,1110016,1110016,1,1,20,1110016,1110016,1110016,,0,0,0,0,15510016,1,1,0,Normal Scout,223103107
1110017,通常勧誘,1110017,1110017,1,1,20,1110017,1110017,1110017,,0,0,0,0,15510017,1,1,0,Normal Scout,223111501
1110018,通常勧誘,1110018,1110018,1,1,20,1110018,1110018,1110018,,0,0,0,0,15510018,1,1,0,Normal Scout,223113008
1110019,通常勧誘,1110019,1110019,1,1,20,1110019,1110019,1110019,,0,0,0,0,15510019,1,1,0,Normal Scout,223121513
1110020,通常勧誘,1110020,1110020,1,1,20,1110020,1110020,1110020,,0,0,0,0,15510020,1,1,0,Normal Scout,223123107
1110021,通常勧誘,1110021,1110021,1,1,20,1110021,1110021,1110021,,0,0,0,0,15510021,1,1,0,Normal Scout,224011508
1110022,通常勧誘,1110022,1110022,1,1,20,1110022,1110022,1110022,,0,0,0,0,15510022,1,1,0,Normal Scout,224013108
1110023,通常勧誘,1110023,1110023,1,1,20,1110023,1110023,1110023,,0,0,0,0,15510023,1,1,0,Normal Scout,224021409
1110024,通常勧誘,1110024,1110024,1,1,20,1110024,1110024,1110024,,0,0,0,0,15510024,1,1,0,Normal Scout,224030120
2110001,ピックアップ勧誘~わたしたちとこの街~,2110001,2110001,1,1,2304307,2110001,2110001,2110001,,0,0,0,0,15520001,1,1,0,Spotlight Scout: With Us in This Town,223043002
2110002,ピックアップ勧誘~商店街をアピールだ!~,2110002,2110002,1,1,2305157,2110002,2110002,2110002,,0,0,0,0,15520002,1,1,0,Spotlight Scout: Let's Promote the Shopping District!,223051502
2110003,ピックアップ勧誘Live in Nature,2110003,2110003,1,1,2305317,2110003,2110003,2110003,,0,0,0,0,15520003,1,1,0,Spotlight Scout: Live in Nature,223053102
2110004,ピックアップ勧誘~煌めく踊り子~,2110004,2110004,1,1,2306197,2110004,2110004,2110004,,0,0,0,0,15520004,1,1,0,Spotlight Scout: Glittering Dancers,223061502
2110005,ピックアップ勧誘~煌めく踊り子~,2110005,2110005,1,1,2306196,2110005,2110005,2110005,,0,0,0,0,15520004,1,1,0,Spotlight Scout: Glittering Dancers,223061502
2110006,ピックアップ勧誘~太陽降り注ぐ夏合宿~,2110006,2110006,1,1,2306307,2110006,2110006,2110006,,0,0,0,0,15520005,1,1,0,Spotlight Scout: Sun-Drenched Summer Camp,223063002
2110007,ピックアップ勧誘~太陽降り注ぐ夏合宿~,2110007,2110007,1,1,2306306,2110007,2110007,2110007,,0,0,0,0,15520005,1,1,0,Spotlight Scout: Sun-Drenched Summer Camp,223063002
2110008,ピックアップ勧誘~真夏の人魚姫~,2110008,2110008,1,1,2307157,2110008,2110008,2110008,,0,0,0,0,15520006,1,1,0,Spotlight Scout: Midsummer Mermaid,223071503
2110009,ピックアップ勧誘~真夏の人魚姫~,2110009,2110009,1,1,2307156,2110009,2110009,2110009,,0,0,0,0,15520006,1,1,0,Spotlight Scout: Midsummer Mermaid,223071503
2110010,ピックアップ勧誘~砂浜駆ける夏の海~,2110010,2110010,1,1,2307317,2110010,2110010,2110010,,0,0,0,0,15520007,1,1,0,Spotlight Scout: Summer Seaside Run,223073102
2110011,ピックアップ勧誘~砂浜駆ける夏の海~,2110011,2110011,1,1,2307316,2110011,2110011,2110011,,0,0,0,0,15520007,1,1,0,Spotlight Scout: Summer Seaside Run,223073102
2110012,ピックアップ勧誘~夏夜に咲き誇る花~,2110012,2110012,1,1,2308157,2110012,2110012,2110012,,0,0,0,0,15520008,1,1,0,Spotlight Scout: Flowers Blooming on a Summer Night,223081502
2110013,ピックアップ勧誘~夏夜に咲き誇る花~,2110013,2110013,1,1,2308156,2110013,2110013,2110013,,0,0,0,0,15520008,1,1,0,Spotlight Scout: Flowers Blooming on a Summer Night,223081502
2110014,ピックアップ勧誘~月夜に輝く尾花~,2110014,2110014,1,1,2308317,2110014,2110014,2110014,,0,0,0,0,15520009,1,1,0,Spotlight Scout: Moonlit Silvergrass,223083102
2110015,ピックアップ勧誘~月夜に輝く尾花~,2110015,2110015,1,1,2308316,2110015,2110015,2110015,,0,0,0,0,15520009,1,1,0,Spotlight Scout: Moonlit Silvergrass,223083102
2110016,ピックアップ勧誘~浴衣で涼む街めぐり~,2110016,2110016,1,1,2309157,2110016,2110016,2110016,,0,0,0,0,15520010,1,1,0,Spotlight Scout: Yukata Town Stroll,223091502
2110017,ピックアップ勧誘~浴衣で涼む街めぐり~,2110017,2110017,1,1,2309156,2110017,2110017,2110017,,0,0,0,0,15520010,1,1,0,Spotlight Scout: Yukata Town Stroll,223091502
2110018,ピックアップ勧誘Trick or Treat!,2110018,2110018,1,1,2309307,2110018,2110018,2110018,,0,0,0,0,15520011,1,1,0,Spotlight Scout: Trick or Treat!,223093002
2110019,ピックアップ勧誘Trick or Treat!,2110019,2110019,1,1,2309308,2110019,2110019,2110019,,0,0,0,0,15520011,1,1,0,Spotlight Scout: Trick or Treat!,223093002
2110020,ピックアップ勧誘Boo! Boo! ハロウィンランド~,2110020,2110020,1,1,2310160,2110020,2110020,2110020,,0,0,0,0,15540017,1,1,0,Spotlight Scout: Boo! Boo! Halloween Land,223101506
2110021,ピックアップ勧誘Boo! Boo! ハロウィンランド~,2110021,2110021,1,1,2310161,2110021,2110021,2110021,,0,0,0,0,15540017,1,1,0,Spotlight Scout: Boo! Boo! Halloween Land,223101506
2110022,ピックアップ勧誘~ひだまりのマーチングバンド~,2110022,2110022,1,1,2310319,2110022,2110022,2110022,,0,0,0,0,15520012,1,1,0,Spotlight Scout: Sunlit Marching Band,223103108
2110023,ピックアップ勧誘~ひだまりのマーチングバンド~,2110023,2110023,1,1,2310318,2110023,2110023,2110023,,0,0,0,0,15520012,1,1,0,Spotlight Scout: Sunlit Marching Band,223103108
2110024,ピックアップ勧誘~にゃんにゃん🐾メイドさん~,2110024,2110024,1,1,2311157,2110024,2110024,2110024,,0,0,0,0,15520013,1,1,0,Spotlight Scout: Nya-Nya 🐾 Maids,223111502
2110025,ピックアップ勧誘~にゃんにゃん🐾メイドさん~,2110025,2110025,1,1,2311156,2110025,2110025,2110025,,0,0,0,0,15520013,1,1,0,Spotlight Scout: Nya-Nya 🐾 Maids,223111502
2110026,ピックアップ勧誘みんなでMerryChristmas,2110026,2110026,1,1,2311307,2110026,2110026,2110026,,0,0,0,0,15520014,1,1,0,"Spotlight Scout: Merry Christmas, Everyone!",223113009
2110027,ピックアップ勧誘みんなでMerryChristmas,2110027,2110027,1,1,2311306,2110027,2110027,2110027,,0,0,0,0,15520014,1,1,0,"Spotlight Scout: Merry Christmas, Everyone!",223113009
2110028,ピックアップ勧誘~雪まつりのサンタクロース~,2110028,2110028,1,1,2312157,2110028,2110028,2110028,,0,0,0,0,15520015,1,1,0,Spotlight Scout: Snow Festival Santa,223121505
2110029,ピックアップ勧誘~雪まつりのサンタクロース~,2110029,2110029,1,1,2312156,2110029,2110029,2110029,,0,0,0,0,15520015,1,1,0,Spotlight Scout: Snow Festival Santa,223121505
2110030,ピックアップ勧誘~みんなへのあけましておめでとう~,2110030,2110030,1,1,2312317,2110030,2110030,2110030,,0,0,0,0,15520016,1,1,0,Spotlight Scout: A Happy New Year to All,223123102
2110031,ピックアップ勧誘~みんなへのあけましておめでとう~,2110031,2110031,1,1,2312316,2110031,2110031,2110031,,0,0,0,0,15520016,1,1,0,Spotlight Scout: A Happy New Year to All,223123102
2110032,ピックアップ勧誘~氷上のフェアリー~,2110032,2110032,1,1,2401157,2110032,2110032,2110032,,0,0,0,0,15520017,1,1,0,Spotlight Scout: Fairy on Ice,224011502
2110033,ピックアップ勧誘~氷上のフェアリー~,2110033,2110033,1,1,2401156,2110033,2110033,2110033,,0,0,0,0,15520017,1,1,0,Spotlight Scout: Fairy on Ice,224011502
2110034,ピックアップ勧誘~恋に囚われし乙女~,2110034,2110034,1,1,2401317,2110034,2110034,2110034,,0,0,0,0,15520018,1,1,0,Spotlight Scout: Maidens Captive to Love,224013102
2110035,ピックアップ勧誘~恋に囚われし乙女~,2110035,2110035,1,1,2401316,2110035,2110035,2110035,,0,0,0,0,15520018,1,1,0,Spotlight Scout: Maidens Captive to Love,224013102
2110036,ピックアップ勧誘~百鬼夜行の夜~,2110036,2110036,1,1,2402147,2110036,2110036,2110036,,0,0,0,0,15520019,1,1,0,Spotlight Scout: Night of a Hundred Demons,224021402
2110037,ピックアップ勧誘~百鬼夜行の夜~,2110037,2110037,1,1,2402146,2110037,2110037,2110037,,0,0,0,0,15520019,1,1,0,Spotlight Scout: Night of a Hundred Demons,224021402
2110038,ピックアップ勧誘Y2K♡GALS,2110038,2110038,1,1,2403017,2110038,2110038,2110038,,0,0,0,0,15520020,1,1,0,Spotlight Scout: Y2K♡GALS,224030102
2110039,ピックアップ勧誘Y2K♡GALS,2110039,2110039,1,1,2403016,2110039,2110039,2110039,,0,0,0,0,15520020,1,1,0,Spotlight Scout: Y2K♡GALS,224030102
3110001,かのんちゃんお誕生日記念勧誘~ハーモニースター~,3110001,3110001,1,1,2305010,3110001,3110001,3110001,,0,0,0,0,15530001,1,1,0,Kanon's Birthday Scout: Harmony Star,223050101
3110002,愛ちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110002,3110002,1,1,2305300,3110002,3110002,3110002,,0,0,0,0,15530002,1,1,0,Ai's Birthday Scout: Colorful Heroines,223053001
3110003,希ちゃんお誕生日記念勧誘~フラワーシャワー~,3110003,3110003,1,1,2306090,3110003,3110003,3110003,,0,0,0,0,15530003,1,1,0,Nozomi's Birthday Scout: Flower Shower,223060901
3110004,鞠莉ちゃんお誕生日記念勧誘~フェアリーウイング~,3110004,3110004,1,1,2306130,3110004,3110004,3110004,,0,0,0,0,15530004,1,1,0,Mari's Birthday Scout: Fairy Wings,223061301
3110005,四季ちゃんお誕生日記念勧誘~ハーモニースター~,3110005,3110005,1,1,2306170,3110005,3110005,3110005,,0,0,0,0,15530005,1,1,0,Shiki's Birthday Scout: Harmony Star,223061701
3110006,果林ちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110006,3110006,1,1,2306290,3110006,3110006,3110006,,0,0,0,0,15530006,1,1,0,Karin's Birthday Scout: Colorful Heroines,223062901
3110007,善子ちゃんお誕生日記念勧誘~フェアリーウイング~,3110007,3110007,1,1,2307130,3110007,3110007,3110007,,0,0,0,0,15530007,1,1,0,Yoshiko's Birthday Scout: Fairy Wings,223071301
3110008,可可ちゃんお誕生日記念勧誘~ハーモニースター~,3110008,3110008,1,1,2307170,3110008,3110008,3110008,,0,0,0,0,15530008,1,1,0,Keke's Birthday Scout: Harmony Star,223071702
3110009,にこちゃんお誕生日記念勧誘~フラワーシャワー~,3110009,3110009,1,1,2307220,3110009,3110009,3110009,,0,0,0,0,15530009,1,1,0,Nico's Birthday Scout: Flower Shower,223072201
3110010,千歌ちゃんお誕生日記念勧誘~フェアリーウイング~,3110010,3110010,1,1,2308010,3110010,3110010,3110010,,0,0,0,0,15530010,1,1,0,Chika's Birthday Scout: Fairy Wings,223080102
3110011,穂乃果ちゃんお誕生日記念勧誘~フラワーシャワー~,3110011,3110011,1,1,2308030,3110011,3110011,3110011,,0,0,0,0,15530011,1,1,0,Honoka's Birthday Scout: Flower Shower,223080303
3110012,夏美ちゃんお誕生日記念勧誘~ハーモニースター~,3110012,3110012,1,1,2308070,3110012,3110012,3110012,,0,0,0,0,15530012,1,1,0,Natsumi's Birthday Scout: Harmony Star,223080701
3110013,せつ菜ちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110013,3110013,1,1,2308080,3110013,3110013,3110013,,0,0,0,0,15530013,1,1,0,Setsuna's Birthday Scout: Colorful Heroines,223080801
3110014,ことりちゃんお誕生日記念勧誘~フラワーシャワー~,3110014,3110014,1,1,2309120,3110014,3110014,3110014,,0,0,0,0,15530014,1,1,0,Kotori's Birthday Scout: Flower Shower,223091201
3110015,梨子ちゃんお誕生日記念勧誘~フェアリーウイング~,3110015,3110015,1,1,2309190,3110015,3110015,3110015,,0,0,0,0,15530015,1,1,0,Riko's Birthday Scout: Fairy Wings,223091901
3110016,ルビィちゃんお誕生日記念勧誘~フェアリーウイング~,3110016,3110016,1,1,2309210,3110016,3110016,3110016,,0,0,0,0,15530016,1,1,0,Ruby's Birthday Scout: Fairy Wings,223092101
3110017,すみれちゃんお誕生日記念勧誘~ハーモニースター~,3110017,3110017,1,1,2309280,3110017,3110017,3110017,,0,0,0,0,15530017,1,1,0,Sumire's Birthday Scout: Harmony Star,223092801
3110018,栞子ちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110018,3110018,1,1,2310050,3110018,3110018,3110018,,0,0,0,0,15530018,1,1,0,Shioriko's Birthday Scout: Colorful Heroines,223100502
3110019,絵里ちゃんお誕生日記念勧誘~フラワーシャワー~,3110019,3110019,1,1,2310210,3110019,3110019,3110019,,0,0,0,0,15530019,1,1,0,Eli's Birthday Scout: Flower Shower,223102101
3110020,メイちゃんお誕生日記念勧誘~ハーモニースター~,3110020,3110020,1,1,2310290,3110020,3110020,3110020,,0,0,0,0,15530020,1,1,0,Mei's Birthday Scout: Harmony Star,223102901
3110021,凛ちゃんお誕生日記念勧誘~フラワーシャワー~,3110021,3110021,1,1,2311010,3110021,3110021,3110021,,0,0,0,0,15530021,1,1,0,Rin's Birthday Scout: Flower Shower,223110101
3110022,璃奈ちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110022,3110022,1,1,2311130,3110022,3110022,3110022,,0,0,0,0,15530022,1,1,0,Rina's Birthday Scout: Colorful Heroines,223111301
3110023,恋ちゃんお誕生日記念勧誘~ハーモニースター~,3110023,3110023,1,1,2311240,3110023,3110023,3110023,,0,0,0,0,15530023,1,1,0,Ren's Birthday Scout: Harmony Star,223112401
3110024,ミアちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110024,3110024,1,1,2312060,3110024,3110024,3110024,,0,0,0,0,15530024,1,1,0,Mia's Birthday Scout: Colorful Heroines,223120601
3110025,彼方ちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110025,3110025,1,1,2312160,3110025,3110025,3110025,,0,0,0,0,15530025,1,1,0,Kanata's Birthday Scout: Colorful Heroines,223121601
3110026,冬毬ちゃんお誕生日記念勧誘~ハーモニースター~,3110026,3110026,1,1,2312280,3110026,3110026,3110026,,0,0,0,0,15530026,1,1,0,Tomari's Birthday Scout: Harmony Star,223122801
3110027,ダイヤちゃんお誕生日記念勧誘~フェアリーウイング~,3110027,3110027,1,1,2401010,3110027,3110027,3110027,,0,0,0,0,15530027,1,1,0,Dia's Birthday Scout: Fairy Wings,224010103
3110028,花陽ちゃんお誕生日記念勧誘~フラワーシャワー~,3110028,3110028,1,1,2401170,3110028,3110028,3110028,,0,0,0,0,15530028,1,1,0,Hanayo's Birthday Scout: Flower Shower,224011702
3110029,マルガレーテちゃんお誕生日記念勧誘~ハーモニースター~,3110029,3110029,1,1,2401200,3110029,3110029,3110029,,0,0,0,0,15530029,1,1,0,Margarete's Birthday Scout: Harmony Star,224012002
3110030,かすみちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110030,3110030,1,1,2401230,3110030,3110030,3110030,,0,0,0,0,15530030,1,1,0,Kasumi's Birthday Scout: Colorful Heroines,224012302
3110031,エマちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110031,3110031,1,1,2402050,3110031,3110031,3110031,,0,0,0,0,15530031,1,1,0,Emma's Birthday Scout: Colorful Heroines,224020502
3110032,果南ちゃんお誕生日記念勧誘~フェアリーウイング~,3110032,3110032,1,1,2402100,3110032,3110032,3110032,,0,0,0,0,15530032,1,1,0,Kanan's Birthday Scout: Fairy Wings,224021004
3110033,嵐珠ちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110033,3110033,1,1,2402150,3110033,3110033,3110033,,0,0,0,0,15530033,1,1,0,Lanzhu's Birthday Scout: Colorful Heroines,224021502
3110034,千砂都ちゃんお誕生日記念勧誘~ハーモニースター~,3110034,3110034,1,1,2402250,3110034,3110034,3110034,,0,0,0,0,15530034,1,1,0,Chisato's Birthday Scout: Harmony Star,224022502
3110035,歩夢ちゃんお誕生日記念勧誘~カラフルヒロインズ~,3110035,3110035,1,1,2403019,3110035,3110035,3110035,,0,0,0,0,15530035,1,1,0,Ayumu's Birthday Scout: Colorful Heroines,224030107
3110036,花丸ちゃんお誕生日記念勧誘~フェアリーウイング~,3110036,3110036,1,1,2403040,3110036,3110036,3110036,,0,0,0,0,15530036,1,1,0,Hanamaru's Birthday Scout: Fairy Wings,224030402
3110037,海未ちゃんお誕生日記念勧誘~フラワーシャワー~,3110037,3110037,1,1,2403150,3110037,3110037,3110037,,0,0,0,0,15530037,1,1,0,Umi's Birthday Scout: Flower Shower,224031502
4110001,スマイル限定!ピックアップ勧誘,4110001,4110001,1,1,2306119,4110001,4110001,4110001,,0,0,0,0,15540002,1,1,0,Smile Only! Spotlight Scout,223061103
4110002,ピュア限定!ピックアップ勧誘,4110002,4110002,1,1,2306118,4110002,4110002,4110002,,0,0,0,0,15540002,1,1,0,Pure Only! Spotlight Scout,223061103
4110003,クール限定!ピックアップ勧誘,4110003,4110003,1,1,2306117,4110003,4110003,4110003,,0,0,0,0,15540002,1,1,0,Cool Only! Spotlight Scout,223061103
4110004,スクフェスシリーズ感謝祭2023記念 UR確定勧誘,4110004,4110004,1,1,2306237,4110004,4110004,4110004,,0,0,0,0,0,1,2,0,SIF Series Thanksgiving 2023 Guaranteed UR Scout,223062301
4110005,ラブソングカーニバル記念勧誘~歩夢編~,4110005,4110005,1,1,2310037,4110005,4110005,4110005,,0,0,0,0,15540005,1,1,0,Love Song Carnival Scout: Ayumu,223100301
4110006,ラブソングカーニバル記念勧誘~かすみ編~,4110006,4110006,1,1,2310107,4110006,4110006,4110006,,0,0,0,0,15540006,1,1,0,Love Song Carnival Scout: Kasumi,223101001
4110007,ラブソングカーニバル記念勧誘~しずく編~,4110007,4110007,1,1,2310177,4110007,4110007,4110007,,0,0,0,0,15540007,1,1,0,Love Song Carnival Scout: Shizuku,223101701
4110008,ラブソングカーニバル記念勧誘~果林編~,4110008,4110008,1,1,2310247,4110008,4110008,4110008,,0,0,0,0,15540008,1,1,0,Love Song Carnival Scout: Karin,223102401
4110009,ラブソングカーニバル記念勧誘~愛編~,4110009,4110009,1,1,2310316,4110009,4110009,4110009,,0,0,0,0,15540009,1,1,0,Love Song Carnival Scout: Ai,223103101
4110010,ラブソングカーニバル記念勧誘~彼方編~,4110010,4110010,1,1,2311077,4110010,4110010,4110010,,0,0,0,0,15540010,1,1,0,Love Song Carnival Scout: Kanata,223110701
4110011,ラブソングカーニバル記念勧誘~せつ菜編~,4110011,4110011,1,1,2311147,4110011,4110011,4110011,,0,0,0,0,15540011,1,1,0,Love Song Carnival Scout: Setsuna,223111401
4110012,ラブソングカーニバル記念勧誘~エマ編~,4110012,4110012,1,1,2311217,4110012,4110012,4110012,,0,0,0,0,15540012,1,1,0,Love Song Carnival Scout: Emma,223112101
4110013,ラブソングカーニバル記念勧誘~璃奈編~,4110013,4110013,1,1,2311287,4110013,4110013,4110013,,0,0,0,0,15540013,1,1,0,Love Song Carnival Scout: Rina,223112801
4110014,ラブソングカーニバル記念勧誘~栞子編~,4110014,4110014,1,1,2312057,4110014,4110014,4110014,,0,0,0,0,15540014,1,1,0,Love Song Carnival Scout: Shioriko,223120501
4110015,ラブソングカーニバル記念勧誘~ミア編~,4110015,4110015,1,1,2312127,4110015,4110015,4110015,,0,0,0,0,15540015,1,1,0,Love Song Carnival Scout: Mia,223121201
4110016,ラブソングカーニバル記念勧誘~嵐珠編~,4110016,4110016,1,1,2312197,4110016,4110016,4110016,,0,0,0,0,15540016,1,1,0,Love Song Carnival Scout: Lanzhu,223121901
4110017,最大100回無料Half Anniversary記念勧誘,4110017,4110017,1,1,3310157,4110017,4110017,4110017,,0,0,0,0,15540017,1,1,0,Up to 100 Free Pulls! Half Anniversary Scout,223101501
4110019,UR確定 Half Anniversary記念勧誘μ's編,4110019,4110019,1,1,2310156,4110019,4110019,4110019,,0,0,0,0,15540017,1,1,0,Guaranteed UR Half Anniversary Scout: μ's,223101502
4110020,UR確定 Half Anniversary記念勧誘Aqours編,4110020,4110020,1,1,2310155,4110020,4110020,4110020,,0,0,0,0,15540017,1,1,0,Guaranteed UR Half Anniversary Scout: Aqours,223101502
4110021,UR確定 Half Anniversary記念勧誘虹ヶ咲編,4110021,4110021,1,1,2310154,4110021,4110021,4110021,,0,0,0,0,15540017,1,1,0,Guaranteed UR Half Anniversary Scout: Nijigasaki,223101502
4110022,UR確定 Half Anniversary記念勧誘Liella!編~,4110022,4110022,1,1,2310153,4110022,4110022,4110022,,0,0,0,0,15540017,1,1,0,Guaranteed UR Half Anniversary Scout: Liella!,223101502
4110023,私のラブソング編 開幕記念勧誘,4110023,4110023,1,1,2309067,4110023,4110023,4110023,,0,0,0,0,15540023,1,1,0,My Love Song Chapter Launch Scout,223090603
4110024,μ's限定ピックアップ勧誘,4110024,4110024,1,1,2310312,4110024,4110024,4110024,,0,0,0,0,15540024,1,1,0,μ's Only! Spotlight Scout,223103111
4110025,Aqours限定ピックアップ勧誘,4110025,4110025,1,1,2311152,4110025,4110025,4110025,,0,0,0,0,15540025,1,1,0,Aqours Only! Spotlight Scout,223111508
4110026,UR確定 Half Anniversary記念勧誘後夜祭,4110026,4110026,1,1,2310317,4110026,4110026,4110026,,0,0,0,0,15520012,1,1,0,Guaranteed UR Half Anniversary Scout: Afterparty,223103112
4110027,幻日のヨハネ -The Story of the Sound of Heart- 開催記念勧誘,4110027,4110027,1,1,2312147,4110027,4110027,4110027,,0,0,0,0,15540027,1,1,0,Yohane the Parhelion -The Story of the Sound of Heart- Launch Scout,223121402
4110028,1年生限定ピックアップ勧誘,4110028,4110028,1,1,2311177,4110028,4110028,4110028,,0,0,0,0,15540028,1,1,0,1st-Years Only! Spotlight Scout,223111702
4110029,2年生限定ピックアップ勧誘,4110029,4110029,1,1,2311247,4110029,4110029,4110029,,0,0,0,0,15540029,1,1,0,2nd Years Only! Featured Scout,223112404
4110030,3年生限定ピックアップ勧誘,4110030,4110030,1,1,2312017,4110030,4110030,4110030,,0,0,0,0,15540030,1,1,0,3rd Years Only! Featured Scout,223120103
4110031,異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘Aqours編,4110031,4110031,1,1,2312095,4110031,4110031,4110031,,0,0,0,0,0,1,1,0,IJIGEN FESTIVAL THE IDOLM@STER LOVE LIVE! Song Battle Celebration Scout: Aqours,223120907
4110032,異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘~ニジガク編~,4110032,4110032,1,1,2312094,4110032,4110032,4110032,,0,0,0,0,0,1,1,0,IJIGEN FESTIVAL THE IDOLM@STER LOVE LIVE! Song Battle Celebration Scout: Nijigasaki,223120908
4110033,異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘Liella!編~,4110033,4110033,1,1,2312093,4110033,4110033,4110033,,0,0,0,0,0,1,1,0,IJIGEN FESTIVAL THE IDOLM@STER LOVE LIVE! Song Battle Celebration Scout: Liella!,223120909
4110034,最大240回無料年末年始記念勧誘,4110034,4110034,1,1,3312267,4110034,4110034,4110034,,0,0,0,0,15540031,1,1,0,Up to 240 Free Pulls! New Year Scout,223122604
4110035,UR確定年末年始記念勧誘,4110035,4110035,1,1,2312267,4110035,4110035,4110035,,0,0,0,0,15540031,1,1,0,Guaranteed UR! New Year Scout,223122604
4110036,新春初夢記念勧誘,4110036,4110036,1,1,2401017,4110036,4110036,4110036,,0,0,0,0,15540032,1,1,0,New Year's First Dream Scout,224010105
4110037,UR確定新春初夢記念勧誘,4110037,4110037,1,1,2401016,4110037,4110037,4110037,,0,0,0,0,15540032,1,1,0,Guaranteed UR! New Year's First Dream Scout,224010105
4110038,ラブソングカーニバル記念勧誘,4110038,4110038,1,1,2401137,4110038,4110038,4110038,,0,0,0,0,15540033,1,1,0,Love Song Carnival Scout,224011304
4110039,スクフェス2 大感謝勧誘~μ's編,4110039,4110039,1,1,3403020,4110039,4110039,4110039,,0,0,0,0,15540034,1,1,0,SIF2 Big Thanks Scout: μ's,224030109
4110040,スクフェス2 大感謝勧誘Aqours編,4110040,4110040,1,1,3403019,4110040,4110040,4110040,,0,0,0,0,15540034,1,1,0,SIF2 Big Thanks Scout: Aqours,224030109
4110041,スクフェス2 大感謝勧誘~ニジガク編~,4110041,4110041,1,1,3403018,4110041,4110041,4110041,,0,0,0,0,15540034,1,1,0,SIF2 Big Thanks Scout: Nijigasaki,224030109
4110042,スクフェス2 大感謝勧誘Liella!編~,4110042,4110042,1,1,3403017,4110042,4110042,4110042,,0,0,0,0,15540034,1,1,0,SIF2 Big Thanks Scout: Liella!,224030109
4110043,スペシャル勧誘,4110043,4110043,1,1,2403167,4110043,4110043,4110043,,0,0,0,0,15540035,1,1,0,Special Scout,224031602
4110044,スクールアイドル感謝祭 全員集合勧誘,4110044,4110044,1,1,2403207,4110044,4110044,4110044,,0,0,0,0,0,1,1,0,School Idol Thanksgiving Festival All-Members Scout,224032003
5110001,全部員大集合!ステップアップ勧誘,5110001,5110001,1,2,2404010,511000101,511000101,5110001,,0,0,0,1,0,1,1,0,All Members Step-Up Scout,1
7110002,スクフェスデータ連携特典 チケット勧誘,7110002,7110002,1,1,15,7110002,7110002,7110002,,0,0,1,0,15540001,1,1,0,SIF Data Link Bonus Ticket Scout,223043003
7110003,スクスタデータ連携特典 チケット勧誘,7110003,7110003,1,1,15,7110003,7110003,7110003,,0,0,1,0,15540001,1,1,0,SIFAS Data Link Bonus Ticket Scout,223071202
8110001,アイテム勧誘,8110001,8110001,2,1,10,8110001,8110001,8110001,,0,0,0,0,0,1,1,0,Item Scout,1
8110002,アイテム勧誘,8110002,8110002,2,1,10,8110002,8110002,8110002,,0,0,0,0,0,1,1,0,Item Scout,223101604
8110004,アイテム勧誘,8110004,8110004,2,1,10,8110004,8110004,8110004,,0,0,0,0,0,1,1,0,Item Scout,224010108
8110005,アイテム勧誘,8110005,8110005,2,1,10,8110005,8110005,8110005,,0,0,0,0,0,1,1,0,Item Scout,224020106
8110006,アイテム勧誘,8110006,8110006,2,1,10,8110006,8110006,8110006,,0,0,0,0,0,1,1,0,Item Scout,224030121
9110001,チュートリアル勧誘【高坂 穂乃果】,9110001,9110001,1,1,999,9110001,9110001,9110001,,0,0,1,0,0,100,2,0,Tutorial Scout: Honoka Kosaka,1
9110002,チュートリアル勧誘【絢瀬 絵里】,9110002,9110002,1,1,999,9110002,9110002,9110002,,0,0,1,0,0,100,2,0,Tutorial Scout: Eli Ayase,1
9110003,チュートリアル勧誘【南 ことり】,9110003,9110003,1,1,999,9110003,9110003,9110003,,0,0,1,0,0,100,2,0,Tutorial Scout: Kotori Minami,1
9110004,チュートリアル勧誘【園田 海未】,9110004,9110004,1,1,999,9110004,9110004,9110004,,0,0,1,0,0,100,2,0,Tutorial Scout: Umi Sonoda,1
9110005,チュートリアル勧誘【星空 凛】,9110005,9110005,1,1,999,9110005,9110005,9110005,,0,0,1,0,0,100,2,0,Tutorial Scout: Rin Hoshizora,1
9110006,チュートリアル勧誘【西木野 真姫】,9110006,9110006,1,1,999,9110006,9110006,9110006,,0,0,1,0,0,100,2,0,Tutorial Scout: Maki Nishikino,1
9110007,チュートリアル勧誘【東條 希】,9110007,9110007,1,1,999,9110007,9110007,9110007,,0,0,1,0,0,100,2,0,Tutorial Scout: Nozomi Tojo,1
9110008,チュートリアル勧誘【小泉 花陽】,9110008,9110008,1,1,999,9110008,9110008,9110008,,0,0,1,0,0,100,2,0,Tutorial Scout: Hanayo Koizumi,1
9110009,チュートリアル勧誘【矢澤 にこ】,9110009,9110009,1,1,999,9110009,9110009,9110009,,0,0,1,0,0,100,2,0,Tutorial Scout: Nico Yazawa,1
9110010,チュートリアル勧誘【高海 千歌】,9110010,9110010,1,1,999,9110010,9110010,9110010,,0,0,1,0,0,200,2,0,Tutorial Scout: Chika Takami,1
9110011,チュートリアル勧誘【桜内 梨子】,9110011,9110011,1,1,999,9110011,9110011,9110011,,0,0,1,0,0,200,2,0,Tutorial Scout: Riko Sakurauchi,1
9110012,チュートリアル勧誘【松浦 果南】,9110012,9110012,1,1,999,9110012,9110012,9110012,,0,0,1,0,0,200,2,0,Tutorial Scout: Kanan Matsuura,1
9110013,チュートリアル勧誘【黒澤 ダイヤ】,9110013,9110013,1,1,999,9110013,9110013,9110013,,0,0,1,0,0,200,2,0,Tutorial Scout: Dia Kurosawa,1
9110014,チュートリアル勧誘【渡辺 曜】,9110014,9110014,1,1,999,9110014,9110014,9110014,,0,0,1,0,0,200,2,0,Tutorial Scout: You Watanabe,1
9110015,チュートリアル勧誘【津島 善子】,9110015,9110015,1,1,999,9110015,9110015,9110015,,0,0,1,0,0,200,2,0,Tutorial Scout: Yoshiko Tsushima,1
9110016,チュートリアル勧誘【国木田 花丸】,9110016,9110016,1,1,999,9110016,9110016,9110016,,0,0,1,0,0,200,2,0,Tutorial Scout: Hanamaru Kunikida,1
9110017,チュートリアル勧誘【小原 鞠莉】,9110017,9110017,1,1,999,9110017,9110017,9110017,,0,0,1,0,0,200,2,0,Tutorial Scout: Mari Ohara,1
9110018,チュートリアル勧誘【黒澤 ルビィ】,9110018,9110018,1,1,999,9110018,9110018,9110018,,0,0,1,0,0,200,2,0,Tutorial Scout: Ruby Kurosawa,1
9110019,チュートリアル勧誘【上原 歩夢】,9110019,9110019,1,1,999,9110019,9110019,9110019,,0,0,1,0,0,300,2,0,Tutorial Scout: Ayumu Uehara,1
9110020,チュートリアル勧誘【中須 かすみ】,9110020,9110020,1,1,999,9110020,9110020,9110020,,0,0,1,0,0,300,2,0,Tutorial Scout: Kasumi Nakasu,1
9110021,チュートリアル勧誘【桜坂 しずく】,9110021,9110021,1,1,999,9110021,9110021,9110021,,0,0,1,0,0,300,2,0,Tutorial Scout: Shizuku Osaka,1
9110022,チュートリアル勧誘【朝香 果林】,9110022,9110022,1,1,999,9110022,9110022,9110022,,0,0,1,0,0,300,2,0,Tutorial Scout: Karin Asaka,1
9110023,チュートリアル勧誘【宮下 愛】,9110023,9110023,1,1,999,9110023,9110023,9110023,,0,0,1,0,0,300,2,0,Tutorial Scout: Ai Miyashita,1
9110024,チュートリアル勧誘【近江 彼方】,9110024,9110024,1,1,999,9110024,9110024,9110024,,0,0,1,0,0,300,2,0,Tutorial Scout: Kanata Konoe,1
9110025,チュートリアル勧誘【優木 せつ菜】,9110025,9110025,1,1,999,9110025,9110025,9110025,,0,0,1,0,0,300,2,0,Tutorial Scout: Setsuna Yuki,1
9110026,チュートリアル勧誘【エマ・ヴェルデ】,9110026,9110026,1,1,999,9110026,9110026,9110026,,0,0,1,0,0,300,2,0,Tutorial Scout: Emma Verde,1
9110027,チュートリアル勧誘【天王寺 璃奈】,9110027,9110027,1,1,999,9110027,9110027,9110027,,0,0,1,0,0,300,2,0,Tutorial Scout: Rina Tennoji,1
9110028,チュートリアル勧誘【三船 栞子】,9110028,9110028,1,1,999,9110028,9110028,9110028,,0,0,1,0,0,300,2,0,Tutorial Scout: Shioriko Mifune,1
9110029,チュートリアル勧誘【ミア・テイラー】,9110029,9110029,1,1,999,9110029,9110029,9110029,,0,0,1,0,0,300,2,0,Tutorial Scout: Mia Taylor,1
9110030,チュートリアル勧誘【鐘 嵐珠】,9110030,9110030,1,1,999,9110030,9110030,9110030,,0,0,1,0,0,300,2,0,Tutorial Scout: Lanzhu Zhong,1
9110031,チュートリアル勧誘【澁谷 かのん】,9110031,9110031,1,1,999,9110031,9110031,9110031,,0,0,1,0,0,400,2,0,Tutorial Scout: Kanon Shibuya,1
9110032,チュートリアル勧誘【唐 可可】,9110032,9110032,1,1,999,9110032,9110032,9110032,,0,0,1,0,0,400,2,0,Tutorial Scout: Keke Tang,1
9110033,チュートリアル勧誘【嵐 千砂都】,9110033,9110033,1,1,999,9110033,9110033,9110033,,0,0,1,0,0,400,2,0,Tutorial Scout: Chisato Arashi,1
9110034,チュートリアル勧誘【平安名 すみれ】,9110034,9110034,1,1,999,9110034,9110034,9110034,,0,0,1,0,0,400,2,0,Tutorial Scout: Sumire Heanna,1
9110035,チュートリアル勧誘【葉月 恋】,9110035,9110035,1,1,999,9110035,9110035,9110035,,0,0,1,0,0,400,2,0,Tutorial Scout: Ren Hazuki,1
9110036,チュートリアル勧誘【桜小路 きな子】,9110036,9110036,1,1,999,9110036,9110036,9110036,,0,0,1,0,0,400,2,0,Tutorial Scout: Kinako Sakurakoji,1
9110037,チュートリアル勧誘【米女 メイ】,9110037,9110037,1,1,999,9110037,9110037,9110037,,0,0,1,0,0,400,2,0,Tutorial Scout: Mei Yoneme,1
9110038,チュートリアル勧誘【若菜 四季】,9110038,9110038,1,1,999,9110038,9110038,9110038,,0,0,1,0,0,400,2,0,Tutorial Scout: Shiki Wakana,1
9110039,チュートリアル勧誘【鬼塚 夏美】,9110039,9110039,1,1,999,9110039,9110039,9110039,,0,0,1,0,0,400,2,0,Tutorial Scout: Natsumi Onitsuka,1
6110001,μ's特待生勧誘,6110001,1110001,1,1,16,6110001,6110001,6110001,,0,0,0,0,0,1,1,0,μ's Honor Student Scouting,1
6110002,Aqours特待生勧誘,6110002,1110001,1,1,15,6110002,6110002,6110002,,0,0,0,0,0,1,1,0,Aqours Honor Student Scouting,1
6110003,虹ヶ咲特待生勧誘,6110003,1110001,1,1,14,6110003,6110003,6110003,,0,0,0,0,0,1,1,0,Nijigasaki Honor Student Scouting,1
6110004,Liella!特待生勧誘,6110004,1110001,1,1,13,6110004,6110004,6110004,,0,0,0,0,0,1,1,0,Liella! Honor Student Scouting,1
1 _id _name _masterLotteryInfoId _masterCautionId _category _type _priority _masterLotteryPriceId _masterLotteryRarityId _masterLotteryImageId _balloonSpriteName _startdashTime _startdashExpireTime _checkDisplayableLottery _repeat _exchangeMasterItemId _masterLotteryEffMovieId _masterLotteryEffMovieRatioId _storeReviewFlag _nameEn _masterReleaseLabelId
2 1110001 リリース記念勧誘 1110001 1110001 1 1 20 1110001 1110001 1110001 0 0 0 0 15500001 1 1 0 Release Celebration Scout 223041501
3 1110002 UR確定 リリース記念勧誘 1110002 1110002 1 1 20 1110002 1110002 1110002 0 0 0 0 15500001 1 2 0 Guaranteed UR Release Celebration Scout 223041501
4 1110003 ピックアップ勧誘~放課後の原宿Liella!♡~ 1110003 1110003 1 1 20 1110003 1110003 1110003 0 0 0 0 15500002 1 1 0 Spotlight Scout: After-School Harajuku Liella! ♡ 223041901
5 1110004 通常勧誘 1110004 1110004 1 1 20 1110004 1110004 1110004 0 0 0 0 15510004 1 1 0 Normal Scout 223043001
6 1110005 通常勧誘 1110005 1110005 1 1 20 1110005 1110005 1110005 0 0 0 0 15510005 1 1 0 Normal Scout 223051501
7 1110006 通常勧誘 1110006 1110006 1 1 20 1110006 1110006 1110006 0 0 0 0 15510006 1 1 0 Normal Scout 223053101
8 1110007 通常勧誘 1110007 1110007 1 1 20 1110007 1110007 1110007 0 0 0 0 15510007 1 1 0 Normal Scout 223061501
9 1110008 通常勧誘 1110008 1110008 1 1 20 1110008 1110008 1110008 0 0 0 0 15510008 1 1 0 Normal Scout 223063001
10 1110009 通常勧誘 1110009 1110009 1 1 20 1110009 1110009 1110009 0 0 0 0 15510009 1 1 0 Normal Scout 223071502
11 1110010 通常勧誘 1110010 1110010 1 1 20 1110010 1110010 1110010 0 0 0 0 15510010 1 1 0 Normal Scout 223073101
12 1110011 通常勧誘 1110011 1110011 1 1 20 1110011 1110011 1110011 0 0 0 0 15510011 1 1 0 Normal Scout 223081501
13 1110012 通常勧誘 1110012 1110012 1 1 20 1110012 1110012 1110012 0 0 0 0 15510012 1 1 0 Normal Scout 223083107
14 1110013 通常勧誘 1110013 1110013 1 1 20 1110013 1110013 1110013 0 0 0 0 15510013 1 1 0 Normal Scout 223091501
15 1110014 通常勧誘 1110014 1110014 1 1 20 1110014 1110014 1110014 0 0 0 0 15510014 1 1 0 Normal Scout 223093001
16 1110015 通常勧誘 1110015 1110015 1 1 20 1110015 1110015 1110015 0 0 0 0 15510015 1 1 0 Normal Scout 223101505
17 1110016 通常勧誘 1110016 1110016 1 1 20 1110016 1110016 1110016 0 0 0 0 15510016 1 1 0 Normal Scout 223103107
18 1110017 通常勧誘 1110017 1110017 1 1 20 1110017 1110017 1110017 0 0 0 0 15510017 1 1 0 Normal Scout 223111501
19 1110018 通常勧誘 1110018 1110018 1 1 20 1110018 1110018 1110018 0 0 0 0 15510018 1 1 0 Normal Scout 223113008
20 1110019 通常勧誘 1110019 1110019 1 1 20 1110019 1110019 1110019 0 0 0 0 15510019 1 1 0 Normal Scout 223121513
21 1110020 通常勧誘 1110020 1110020 1 1 20 1110020 1110020 1110020 0 0 0 0 15510020 1 1 0 Normal Scout 223123107
22 1110021 通常勧誘 1110021 1110021 1 1 20 1110021 1110021 1110021 0 0 0 0 15510021 1 1 0 Normal Scout 224011508
23 1110022 通常勧誘 1110022 1110022 1 1 20 1110022 1110022 1110022 0 0 0 0 15510022 1 1 0 Normal Scout 224013108
24 1110023 通常勧誘 1110023 1110023 1 1 20 1110023 1110023 1110023 0 0 0 0 15510023 1 1 0 Normal Scout 224021409
25 1110024 通常勧誘 1110024 1110024 1 1 20 1110024 1110024 1110024 0 0 0 0 15510024 1 1 0 Normal Scout 224030120
26 2110001 ピックアップ勧誘~わたしたちとこの街~ 2110001 2110001 1 1 2304307 2110001 2110001 2110001 0 0 0 0 15520001 1 1 0 Spotlight Scout: With Us in This Town 223043002
27 2110002 ピックアップ勧誘~商店街をアピールだ!~ 2110002 2110002 1 1 2305157 2110002 2110002 2110002 0 0 0 0 15520002 1 1 0 Spotlight Scout: Let's Promote the Shopping District! 223051502
28 2110003 ピックアップ勧誘~Live in Nature~ 2110003 2110003 1 1 2305317 2110003 2110003 2110003 0 0 0 0 15520003 1 1 0 Spotlight Scout: Live in Nature 223053102
29 2110004 ピックアップ勧誘~煌めく踊り子~ 2110004 2110004 1 1 2306197 2110004 2110004 2110004 0 0 0 0 15520004 1 1 0 Spotlight Scout: Glittering Dancers 223061502
30 2110005 ピックアップ勧誘~煌めく踊り子~ 2110005 2110005 1 1 2306196 2110005 2110005 2110005 0 0 0 0 15520004 1 1 0 Spotlight Scout: Glittering Dancers 223061502
31 2110006 ピックアップ勧誘~太陽降り注ぐ夏合宿~ 2110006 2110006 1 1 2306307 2110006 2110006 2110006 0 0 0 0 15520005 1 1 0 Spotlight Scout: Sun-Drenched Summer Camp 223063002
32 2110007 ピックアップ勧誘~太陽降り注ぐ夏合宿~ 2110007 2110007 1 1 2306306 2110007 2110007 2110007 0 0 0 0 15520005 1 1 0 Spotlight Scout: Sun-Drenched Summer Camp 223063002
33 2110008 ピックアップ勧誘~真夏の人魚姫~ 2110008 2110008 1 1 2307157 2110008 2110008 2110008 0 0 0 0 15520006 1 1 0 Spotlight Scout: Midsummer Mermaid 223071503
34 2110009 ピックアップ勧誘~真夏の人魚姫~ 2110009 2110009 1 1 2307156 2110009 2110009 2110009 0 0 0 0 15520006 1 1 0 Spotlight Scout: Midsummer Mermaid 223071503
35 2110010 ピックアップ勧誘~砂浜駆ける夏の海~ 2110010 2110010 1 1 2307317 2110010 2110010 2110010 0 0 0 0 15520007 1 1 0 Spotlight Scout: Summer Seaside Run 223073102
36 2110011 ピックアップ勧誘~砂浜駆ける夏の海~ 2110011 2110011 1 1 2307316 2110011 2110011 2110011 0 0 0 0 15520007 1 1 0 Spotlight Scout: Summer Seaside Run 223073102
37 2110012 ピックアップ勧誘~夏夜に咲き誇る花~ 2110012 2110012 1 1 2308157 2110012 2110012 2110012 0 0 0 0 15520008 1 1 0 Spotlight Scout: Flowers Blooming on a Summer Night 223081502
38 2110013 ピックアップ勧誘~夏夜に咲き誇る花~ 2110013 2110013 1 1 2308156 2110013 2110013 2110013 0 0 0 0 15520008 1 1 0 Spotlight Scout: Flowers Blooming on a Summer Night 223081502
39 2110014 ピックアップ勧誘~月夜に輝く尾花~ 2110014 2110014 1 1 2308317 2110014 2110014 2110014 0 0 0 0 15520009 1 1 0 Spotlight Scout: Moonlit Silvergrass 223083102
40 2110015 ピックアップ勧誘~月夜に輝く尾花~ 2110015 2110015 1 1 2308316 2110015 2110015 2110015 0 0 0 0 15520009 1 1 0 Spotlight Scout: Moonlit Silvergrass 223083102
41 2110016 ピックアップ勧誘~浴衣で涼む街めぐり~ 2110016 2110016 1 1 2309157 2110016 2110016 2110016 0 0 0 0 15520010 1 1 0 Spotlight Scout: Yukata Town Stroll 223091502
42 2110017 ピックアップ勧誘~浴衣で涼む街めぐり~ 2110017 2110017 1 1 2309156 2110017 2110017 2110017 0 0 0 0 15520010 1 1 0 Spotlight Scout: Yukata Town Stroll 223091502
43 2110018 ピックアップ勧誘~Trick or Treat!~ 2110018 2110018 1 1 2309307 2110018 2110018 2110018 0 0 0 0 15520011 1 1 0 Spotlight Scout: Trick or Treat! 223093002
44 2110019 ピックアップ勧誘~Trick or Treat!~ 2110019 2110019 1 1 2309308 2110019 2110019 2110019 0 0 0 0 15520011 1 1 0 Spotlight Scout: Trick or Treat! 223093002
45 2110020 ピックアップ勧誘~Boo! Boo! ハロウィンランド~ 2110020 2110020 1 1 2310160 2110020 2110020 2110020 0 0 0 0 15540017 1 1 0 Spotlight Scout: Boo! Boo! Halloween Land 223101506
46 2110021 ピックアップ勧誘~Boo! Boo! ハロウィンランド~ 2110021 2110021 1 1 2310161 2110021 2110021 2110021 0 0 0 0 15540017 1 1 0 Spotlight Scout: Boo! Boo! Halloween Land 223101506
47 2110022 ピックアップ勧誘~ひだまりのマーチングバンド~ 2110022 2110022 1 1 2310319 2110022 2110022 2110022 0 0 0 0 15520012 1 1 0 Spotlight Scout: Sunlit Marching Band 223103108
48 2110023 ピックアップ勧誘~ひだまりのマーチングバンド~ 2110023 2110023 1 1 2310318 2110023 2110023 2110023 0 0 0 0 15520012 1 1 0 Spotlight Scout: Sunlit Marching Band 223103108
49 2110024 ピックアップ勧誘~にゃんにゃん🐾メイドさん~ 2110024 2110024 1 1 2311157 2110024 2110024 2110024 0 0 0 0 15520013 1 1 0 Spotlight Scout: Nya-Nya 🐾 Maids 223111502
50 2110025 ピックアップ勧誘~にゃんにゃん🐾メイドさん~ 2110025 2110025 1 1 2311156 2110025 2110025 2110025 0 0 0 0 15520013 1 1 0 Spotlight Scout: Nya-Nya 🐾 Maids 223111502
51 2110026 ピックアップ勧誘~みんなでMerryChristmas!~ 2110026 2110026 1 1 2311307 2110026 2110026 2110026 0 0 0 0 15520014 1 1 0 Spotlight Scout: Merry Christmas, Everyone! 223113009
52 2110027 ピックアップ勧誘~みんなでMerryChristmas!~ 2110027 2110027 1 1 2311306 2110027 2110027 2110027 0 0 0 0 15520014 1 1 0 Spotlight Scout: Merry Christmas, Everyone! 223113009
53 2110028 ピックアップ勧誘~雪まつりのサンタクロース~ 2110028 2110028 1 1 2312157 2110028 2110028 2110028 0 0 0 0 15520015 1 1 0 Spotlight Scout: Snow Festival Santa 223121505
54 2110029 ピックアップ勧誘~雪まつりのサンタクロース~ 2110029 2110029 1 1 2312156 2110029 2110029 2110029 0 0 0 0 15520015 1 1 0 Spotlight Scout: Snow Festival Santa 223121505
55 2110030 ピックアップ勧誘~みんなへのあけましておめでとう~ 2110030 2110030 1 1 2312317 2110030 2110030 2110030 0 0 0 0 15520016 1 1 0 Spotlight Scout: A Happy New Year to All 223123102
56 2110031 ピックアップ勧誘~みんなへのあけましておめでとう~ 2110031 2110031 1 1 2312316 2110031 2110031 2110031 0 0 0 0 15520016 1 1 0 Spotlight Scout: A Happy New Year to All 223123102
57 2110032 ピックアップ勧誘~氷上のフェアリー~ 2110032 2110032 1 1 2401157 2110032 2110032 2110032 0 0 0 0 15520017 1 1 0 Spotlight Scout: Fairy on Ice 224011502
58 2110033 ピックアップ勧誘~氷上のフェアリー~ 2110033 2110033 1 1 2401156 2110033 2110033 2110033 0 0 0 0 15520017 1 1 0 Spotlight Scout: Fairy on Ice 224011502
59 2110034 ピックアップ勧誘~恋に囚われし乙女~ 2110034 2110034 1 1 2401317 2110034 2110034 2110034 0 0 0 0 15520018 1 1 0 Spotlight Scout: Maidens Captive to Love 224013102
60 2110035 ピックアップ勧誘~恋に囚われし乙女~ 2110035 2110035 1 1 2401316 2110035 2110035 2110035 0 0 0 0 15520018 1 1 0 Spotlight Scout: Maidens Captive to Love 224013102
61 2110036 ピックアップ勧誘~百鬼夜行の夜~ 2110036 2110036 1 1 2402147 2110036 2110036 2110036 0 0 0 0 15520019 1 1 0 Spotlight Scout: Night of a Hundred Demons 224021402
62 2110037 ピックアップ勧誘~百鬼夜行の夜~ 2110037 2110037 1 1 2402146 2110037 2110037 2110037 0 0 0 0 15520019 1 1 0 Spotlight Scout: Night of a Hundred Demons 224021402
63 2110038 ピックアップ勧誘~Y2K♡GALS~ 2110038 2110038 1 1 2403017 2110038 2110038 2110038 0 0 0 0 15520020 1 1 0 Spotlight Scout: Y2K♡GALS 224030102
64 2110039 ピックアップ勧誘~Y2K♡GALS~ 2110039 2110039 1 1 2403016 2110039 2110039 2110039 0 0 0 0 15520020 1 1 0 Spotlight Scout: Y2K♡GALS 224030102
65 3110001 かのんちゃんお誕生日記念勧誘~ハーモニースター~ 3110001 3110001 1 1 2305010 3110001 3110001 3110001 0 0 0 0 15530001 1 1 0 Kanon's Birthday Scout: Harmony Star 223050101
66 3110002 愛ちゃんお誕生日記念勧誘~カラフルヒロインズ~ 3110002 3110002 1 1 2305300 3110002 3110002 3110002 0 0 0 0 15530002 1 1 0 Ai's Birthday Scout: Colorful Heroines 223053001
67 3110003 希ちゃんお誕生日記念勧誘~フラワーシャワー~ 3110003 3110003 1 1 2306090 3110003 3110003 3110003 0 0 0 0 15530003 1 1 0 Nozomi's Birthday Scout: Flower Shower 223060901
68 3110004 鞠莉ちゃんお誕生日記念勧誘~フェアリーウイング~ 3110004 3110004 1 1 2306130 3110004 3110004 3110004 0 0 0 0 15530004 1 1 0 Mari's Birthday Scout: Fairy Wings 223061301
69 3110005 四季ちゃんお誕生日記念勧誘~ハーモニースター~ 3110005 3110005 1 1 2306170 3110005 3110005 3110005 0 0 0 0 15530005 1 1 0 Shiki's Birthday Scout: Harmony Star 223061701
70 3110006 果林ちゃんお誕生日記念勧誘~カラフルヒロインズ~ 3110006 3110006 1 1 2306290 3110006 3110006 3110006 0 0 0 0 15530006 1 1 0 Karin's Birthday Scout: Colorful Heroines 223062901
71 3110007 善子ちゃんお誕生日記念勧誘~フェアリーウイング~ 3110007 3110007 1 1 2307130 3110007 3110007 3110007 0 0 0 0 15530007 1 1 0 Yoshiko's Birthday Scout: Fairy Wings 223071301
72 3110008 可可ちゃんお誕生日記念勧誘~ハーモニースター~ 3110008 3110008 1 1 2307170 3110008 3110008 3110008 0 0 0 0 15530008 1 1 0 Keke's Birthday Scout: Harmony Star 223071702
73 3110009 にこちゃんお誕生日記念勧誘~フラワーシャワー~ 3110009 3110009 1 1 2307220 3110009 3110009 3110009 0 0 0 0 15530009 1 1 0 Nico's Birthday Scout: Flower Shower 223072201
74 3110010 千歌ちゃんお誕生日記念勧誘~フェアリーウイング~ 3110010 3110010 1 1 2308010 3110010 3110010 3110010 0 0 0 0 15530010 1 1 0 Chika's Birthday Scout: Fairy Wings 223080102
75 3110011 穂乃果ちゃんお誕生日記念勧誘~フラワーシャワー~ 3110011 3110011 1 1 2308030 3110011 3110011 3110011 0 0 0 0 15530011 1 1 0 Honoka's Birthday Scout: Flower Shower 223080303
76 3110012 夏美ちゃんお誕生日記念勧誘~ハーモニースター~ 3110012 3110012 1 1 2308070 3110012 3110012 3110012 0 0 0 0 15530012 1 1 0 Natsumi's Birthday Scout: Harmony Star 223080701
77 3110013 せつ菜ちゃんお誕生日記念勧誘~カラフルヒロインズ~ 3110013 3110013 1 1 2308080 3110013 3110013 3110013 0 0 0 0 15530013 1 1 0 Setsuna's Birthday Scout: Colorful Heroines 223080801
78 3110014 ことりちゃんお誕生日記念勧誘~フラワーシャワー~ 3110014 3110014 1 1 2309120 3110014 3110014 3110014 0 0 0 0 15530014 1 1 0 Kotori's Birthday Scout: Flower Shower 223091201
79 3110015 梨子ちゃんお誕生日記念勧誘~フェアリーウイング~ 3110015 3110015 1 1 2309190 3110015 3110015 3110015 0 0 0 0 15530015 1 1 0 Riko's Birthday Scout: Fairy Wings 223091901
80 3110016 ルビィちゃんお誕生日記念勧誘~フェアリーウイング~ 3110016 3110016 1 1 2309210 3110016 3110016 3110016 0 0 0 0 15530016 1 1 0 Ruby's Birthday Scout: Fairy Wings 223092101
81 3110017 すみれちゃんお誕生日記念勧誘~ハーモニースター~ 3110017 3110017 1 1 2309280 3110017 3110017 3110017 0 0 0 0 15530017 1 1 0 Sumire's Birthday Scout: Harmony Star 223092801
82 3110018 栞子ちゃんお誕生日記念勧誘~カラフルヒロインズ~ 3110018 3110018 1 1 2310050 3110018 3110018 3110018 0 0 0 0 15530018 1 1 0 Shioriko's Birthday Scout: Colorful Heroines 223100502
83 3110019 絵里ちゃんお誕生日記念勧誘~フラワーシャワー~ 3110019 3110019 1 1 2310210 3110019 3110019 3110019 0 0 0 0 15530019 1 1 0 Eli's Birthday Scout: Flower Shower 223102101
84 3110020 メイちゃんお誕生日記念勧誘~ハーモニースター~ 3110020 3110020 1 1 2310290 3110020 3110020 3110020 0 0 0 0 15530020 1 1 0 Mei's Birthday Scout: Harmony Star 223102901
85 3110021 凛ちゃんお誕生日記念勧誘~フラワーシャワー~ 3110021 3110021 1 1 2311010 3110021 3110021 3110021 0 0 0 0 15530021 1 1 0 Rin's Birthday Scout: Flower Shower 223110101
86 3110022 璃奈ちゃんお誕生日記念勧誘~カラフルヒロインズ~ 3110022 3110022 1 1 2311130 3110022 3110022 3110022 0 0 0 0 15530022 1 1 0 Rina's Birthday Scout: Colorful Heroines 223111301
87 3110023 恋ちゃんお誕生日記念勧誘~ハーモニースター~ 3110023 3110023 1 1 2311240 3110023 3110023 3110023 0 0 0 0 15530023 1 1 0 Ren's Birthday Scout: Harmony Star 223112401
88 3110024 ミアちゃんお誕生日記念勧誘~カラフルヒロインズ~ 3110024 3110024 1 1 2312060 3110024 3110024 3110024 0 0 0 0 15530024 1 1 0 Mia's Birthday Scout: Colorful Heroines 223120601
89 3110025 彼方ちゃんお誕生日記念勧誘~カラフルヒロインズ~ 3110025 3110025 1 1 2312160 3110025 3110025 3110025 0 0 0 0 15530025 1 1 0 Kanata's Birthday Scout: Colorful Heroines 223121601
90 3110026 冬毬ちゃんお誕生日記念勧誘~ハーモニースター~ 3110026 3110026 1 1 2312280 3110026 3110026 3110026 0 0 0 0 15530026 1 1 0 Tomari's Birthday Scout: Harmony Star 223122801
91 3110027 ダイヤちゃんお誕生日記念勧誘~フェアリーウイング~ 3110027 3110027 1 1 2401010 3110027 3110027 3110027 0 0 0 0 15530027 1 1 0 Dia's Birthday Scout: Fairy Wings 224010103
92 3110028 花陽ちゃんお誕生日記念勧誘~フラワーシャワー~ 3110028 3110028 1 1 2401170 3110028 3110028 3110028 0 0 0 0 15530028 1 1 0 Hanayo's Birthday Scout: Flower Shower 224011702
93 3110029 マルガレーテちゃんお誕生日記念勧誘~ハーモニースター~ 3110029 3110029 1 1 2401200 3110029 3110029 3110029 0 0 0 0 15530029 1 1 0 Margarete's Birthday Scout: Harmony Star 224012002
94 3110030 かすみちゃんお誕生日記念勧誘~カラフルヒロインズ~ 3110030 3110030 1 1 2401230 3110030 3110030 3110030 0 0 0 0 15530030 1 1 0 Kasumi's Birthday Scout: Colorful Heroines 224012302
95 3110031 エマちゃんお誕生日記念勧誘~カラフルヒロインズ~ 3110031 3110031 1 1 2402050 3110031 3110031 3110031 0 0 0 0 15530031 1 1 0 Emma's Birthday Scout: Colorful Heroines 224020502
96 3110032 果南ちゃんお誕生日記念勧誘~フェアリーウイング~ 3110032 3110032 1 1 2402100 3110032 3110032 3110032 0 0 0 0 15530032 1 1 0 Kanan's Birthday Scout: Fairy Wings 224021004
97 3110033 嵐珠ちゃんお誕生日記念勧誘~カラフルヒロインズ~ 3110033 3110033 1 1 2402150 3110033 3110033 3110033 0 0 0 0 15530033 1 1 0 Lanzhu's Birthday Scout: Colorful Heroines 224021502
98 3110034 千砂都ちゃんお誕生日記念勧誘~ハーモニースター~ 3110034 3110034 1 1 2402250 3110034 3110034 3110034 0 0 0 0 15530034 1 1 0 Chisato's Birthday Scout: Harmony Star 224022502
99 3110035 歩夢ちゃんお誕生日記念勧誘~カラフルヒロインズ~ 3110035 3110035 1 1 2403019 3110035 3110035 3110035 0 0 0 0 15530035 1 1 0 Ayumu's Birthday Scout: Colorful Heroines 224030107
100 3110036 花丸ちゃんお誕生日記念勧誘~フェアリーウイング~ 3110036 3110036 1 1 2403040 3110036 3110036 3110036 0 0 0 0 15530036 1 1 0 Hanamaru's Birthday Scout: Fairy Wings 224030402
101 3110037 海未ちゃんお誕生日記念勧誘~フラワーシャワー~ 3110037 3110037 1 1 2403150 3110037 3110037 3110037 0 0 0 0 15530037 1 1 0 Umi's Birthday Scout: Flower Shower 224031502
102 4110001 スマイル限定!ピックアップ勧誘 4110001 4110001 1 1 2306119 4110001 4110001 4110001 0 0 0 0 15540002 1 1 0 Smile Only! Spotlight Scout 223061103
103 4110002 ピュア限定!ピックアップ勧誘 4110002 4110002 1 1 2306118 4110002 4110002 4110002 0 0 0 0 15540002 1 1 0 Pure Only! Spotlight Scout 223061103
104 4110003 クール限定!ピックアップ勧誘 4110003 4110003 1 1 2306117 4110003 4110003 4110003 0 0 0 0 15540002 1 1 0 Cool Only! Spotlight Scout 223061103
105 4110004 スクフェスシリーズ感謝祭2023記念 UR確定勧誘 4110004 4110004 1 1 2306237 4110004 4110004 4110004 0 0 0 0 0 1 2 0 SIF Series Thanksgiving 2023 Guaranteed UR Scout 223062301
106 4110005 ラブソングカーニバル記念勧誘~歩夢編~ 4110005 4110005 1 1 2310037 4110005 4110005 4110005 0 0 0 0 15540005 1 1 0 Love Song Carnival Scout: Ayumu 223100301
107 4110006 ラブソングカーニバル記念勧誘~かすみ編~ 4110006 4110006 1 1 2310107 4110006 4110006 4110006 0 0 0 0 15540006 1 1 0 Love Song Carnival Scout: Kasumi 223101001
108 4110007 ラブソングカーニバル記念勧誘~しずく編~ 4110007 4110007 1 1 2310177 4110007 4110007 4110007 0 0 0 0 15540007 1 1 0 Love Song Carnival Scout: Shizuku 223101701
109 4110008 ラブソングカーニバル記念勧誘~果林編~ 4110008 4110008 1 1 2310247 4110008 4110008 4110008 0 0 0 0 15540008 1 1 0 Love Song Carnival Scout: Karin 223102401
110 4110009 ラブソングカーニバル記念勧誘~愛編~ 4110009 4110009 1 1 2310316 4110009 4110009 4110009 0 0 0 0 15540009 1 1 0 Love Song Carnival Scout: Ai 223103101
111 4110010 ラブソングカーニバル記念勧誘~彼方編~ 4110010 4110010 1 1 2311077 4110010 4110010 4110010 0 0 0 0 15540010 1 1 0 Love Song Carnival Scout: Kanata 223110701
112 4110011 ラブソングカーニバル記念勧誘~せつ菜編~ 4110011 4110011 1 1 2311147 4110011 4110011 4110011 0 0 0 0 15540011 1 1 0 Love Song Carnival Scout: Setsuna 223111401
113 4110012 ラブソングカーニバル記念勧誘~エマ編~ 4110012 4110012 1 1 2311217 4110012 4110012 4110012 0 0 0 0 15540012 1 1 0 Love Song Carnival Scout: Emma 223112101
114 4110013 ラブソングカーニバル記念勧誘~璃奈編~ 4110013 4110013 1 1 2311287 4110013 4110013 4110013 0 0 0 0 15540013 1 1 0 Love Song Carnival Scout: Rina 223112801
115 4110014 ラブソングカーニバル記念勧誘~栞子編~ 4110014 4110014 1 1 2312057 4110014 4110014 4110014 0 0 0 0 15540014 1 1 0 Love Song Carnival Scout: Shioriko 223120501
116 4110015 ラブソングカーニバル記念勧誘~ミア編~ 4110015 4110015 1 1 2312127 4110015 4110015 4110015 0 0 0 0 15540015 1 1 0 Love Song Carnival Scout: Mia 223121201
117 4110016 ラブソングカーニバル記念勧誘~嵐珠編~ 4110016 4110016 1 1 2312197 4110016 4110016 4110016 0 0 0 0 15540016 1 1 0 Love Song Carnival Scout: Lanzhu 223121901
118 4110017 最大100回無料!Half Anniversary記念勧誘 4110017 4110017 1 1 3310157 4110017 4110017 4110017 0 0 0 0 15540017 1 1 0 Up to 100 Free Pulls! Half Anniversary Scout 223101501
119 4110019 UR確定 Half Anniversary記念勧誘~μ's編~ 4110019 4110019 1 1 2310156 4110019 4110019 4110019 0 0 0 0 15540017 1 1 0 Guaranteed UR Half Anniversary Scout: μ's 223101502
120 4110020 UR確定 Half Anniversary記念勧誘~Aqours編~ 4110020 4110020 1 1 2310155 4110020 4110020 4110020 0 0 0 0 15540017 1 1 0 Guaranteed UR Half Anniversary Scout: Aqours 223101502
121 4110021 UR確定 Half Anniversary記念勧誘~虹ヶ咲編~ 4110021 4110021 1 1 2310154 4110021 4110021 4110021 0 0 0 0 15540017 1 1 0 Guaranteed UR Half Anniversary Scout: Nijigasaki 223101502
122 4110022 UR確定 Half Anniversary記念勧誘~Liella!編~ 4110022 4110022 1 1 2310153 4110022 4110022 4110022 0 0 0 0 15540017 1 1 0 Guaranteed UR Half Anniversary Scout: Liella! 223101502
123 4110023 私のラブソング編 開幕記念勧誘 4110023 4110023 1 1 2309067 4110023 4110023 4110023 0 0 0 0 15540023 1 1 0 My Love Song Chapter Launch Scout 223090603
124 4110024 μ's限定!ピックアップ勧誘 4110024 4110024 1 1 2310312 4110024 4110024 4110024 0 0 0 0 15540024 1 1 0 μ's Only! Spotlight Scout 223103111
125 4110025 Aqours限定!ピックアップ勧誘 4110025 4110025 1 1 2311152 4110025 4110025 4110025 0 0 0 0 15540025 1 1 0 Aqours Only! Spotlight Scout 223111508
126 4110026 UR確定 Half Anniversary記念勧誘~後夜祭~ 4110026 4110026 1 1 2310317 4110026 4110026 4110026 0 0 0 0 15520012 1 1 0 Guaranteed UR Half Anniversary Scout: Afterparty 223103112
127 4110027 幻日のヨハネ -The Story of the Sound of Heart- 開催記念勧誘 4110027 4110027 1 1 2312147 4110027 4110027 4110027 0 0 0 0 15540027 1 1 0 Yohane the Parhelion -The Story of the Sound of Heart- Launch Scout 223121402
128 4110028 1年生限定!ピックアップ勧誘 4110028 4110028 1 1 2311177 4110028 4110028 4110028 0 0 0 0 15540028 1 1 0 1st-Years Only! Spotlight Scout 223111702
129 4110029 2年生限定!ピックアップ勧誘 4110029 4110029 1 1 2311247 4110029 4110029 4110029 0 0 0 0 15540029 1 1 0 2nd Years Only! Featured Scout 223112404
130 4110030 3年生限定!ピックアップ勧誘 4110030 4110030 1 1 2312017 4110030 4110030 4110030 0 0 0 0 15540030 1 1 0 3rd Years Only! Featured Scout 223120103
131 4110031 異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘~Aqours編~ 4110031 4110031 1 1 2312095 4110031 4110031 4110031 0 0 0 0 0 1 1 0 IJIGEN FESTIVAL THE IDOLM@STER LOVE LIVE! Song Battle Celebration Scout: Aqours 223120907
132 4110032 異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘~ニジガク編~ 4110032 4110032 1 1 2312094 4110032 4110032 4110032 0 0 0 0 0 1 1 0 IJIGEN FESTIVAL THE IDOLM@STER LOVE LIVE! Song Battle Celebration Scout: Nijigasaki 223120908
133 4110033 異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘~Liella!編~ 4110033 4110033 1 1 2312093 4110033 4110033 4110033 0 0 0 0 0 1 1 0 IJIGEN FESTIVAL THE IDOLM@STER LOVE LIVE! Song Battle Celebration Scout: Liella! 223120909
134 4110034 最大240回無料!年末年始記念勧誘 4110034 4110034 1 1 3312267 4110034 4110034 4110034 0 0 0 0 15540031 1 1 0 Up to 240 Free Pulls! New Year Scout 223122604
135 4110035 UR確定!年末年始記念勧誘 4110035 4110035 1 1 2312267 4110035 4110035 4110035 0 0 0 0 15540031 1 1 0 Guaranteed UR! New Year Scout 223122604
136 4110036 新春初夢記念勧誘 4110036 4110036 1 1 2401017 4110036 4110036 4110036 0 0 0 0 15540032 1 1 0 New Year's First Dream Scout 224010105
137 4110037 UR確定!新春初夢記念勧誘 4110037 4110037 1 1 2401016 4110037 4110037 4110037 0 0 0 0 15540032 1 1 0 Guaranteed UR! New Year's First Dream Scout 224010105
138 4110038 ラブソングカーニバル記念勧誘 4110038 4110038 1 1 2401137 4110038 4110038 4110038 0 0 0 0 15540033 1 1 0 Love Song Carnival Scout 224011304
139 4110039 スクフェス2 大感謝勧誘~μ's編~ 4110039 4110039 1 1 3403020 4110039 4110039 4110039 0 0 0 0 15540034 1 1 0 SIF2 Big Thanks Scout: μ's 224030109
140 4110040 スクフェス2 大感謝勧誘~Aqours編~ 4110040 4110040 1 1 3403019 4110040 4110040 4110040 0 0 0 0 15540034 1 1 0 SIF2 Big Thanks Scout: Aqours 224030109
141 4110041 スクフェス2 大感謝勧誘~ニジガク編~ 4110041 4110041 1 1 3403018 4110041 4110041 4110041 0 0 0 0 15540034 1 1 0 SIF2 Big Thanks Scout: Nijigasaki 224030109
142 4110042 スクフェス2 大感謝勧誘~Liella!編~ 4110042 4110042 1 1 3403017 4110042 4110042 4110042 0 0 0 0 15540034 1 1 0 SIF2 Big Thanks Scout: Liella! 224030109
143 4110043 スペシャル勧誘 4110043 4110043 1 1 2403167 4110043 4110043 4110043 0 0 0 0 15540035 1 1 0 Special Scout 224031602
144 4110044 スクールアイドル感謝祭 全員集合勧誘 4110044 4110044 1 1 2403207 4110044 4110044 4110044 0 0 0 0 0 1 1 0 School Idol Thanksgiving Festival All-Members Scout 224032003
145 5110001 全部員大集合!ステップアップ勧誘 5110001 5110001 1 2 2404010 511000101 511000101 5110001 0 0 0 1 0 1 1 0 All Members Step-Up Scout 1
146 7110002 スクフェスデータ連携特典 チケット勧誘 7110002 7110002 1 1 15 7110002 7110002 7110002 0 0 1 0 15540001 1 1 0 SIF Data Link Bonus Ticket Scout 223043003
147 7110003 スクスタデータ連携特典 チケット勧誘 7110003 7110003 1 1 15 7110003 7110003 7110003 0 0 1 0 15540001 1 1 0 SIFAS Data Link Bonus Ticket Scout 223071202
148 8110001 アイテム勧誘 8110001 8110001 2 1 10 8110001 8110001 8110001 0 0 0 0 0 1 1 0 Item Scout 1
149 8110002 アイテム勧誘 8110002 8110002 2 1 10 8110002 8110002 8110002 0 0 0 0 0 1 1 0 Item Scout 223101604
150 8110004 アイテム勧誘 8110004 8110004 2 1 10 8110004 8110004 8110004 0 0 0 0 0 1 1 0 Item Scout 224010108
151 8110005 アイテム勧誘 8110005 8110005 2 1 10 8110005 8110005 8110005 0 0 0 0 0 1 1 0 Item Scout 224020106
152 8110006 アイテム勧誘 8110006 8110006 2 1 10 8110006 8110006 8110006 0 0 0 0 0 1 1 0 Item Scout 224030121
153 9110001 チュートリアル勧誘【高坂 穂乃果】 9110001 9110001 1 1 999 9110001 9110001 9110001 0 0 1 0 0 100 2 0 Tutorial Scout: Honoka Kosaka 1
154 9110002 チュートリアル勧誘【絢瀬 絵里】 9110002 9110002 1 1 999 9110002 9110002 9110002 0 0 1 0 0 100 2 0 Tutorial Scout: Eli Ayase 1
155 9110003 チュートリアル勧誘【南 ことり】 9110003 9110003 1 1 999 9110003 9110003 9110003 0 0 1 0 0 100 2 0 Tutorial Scout: Kotori Minami 1
156 9110004 チュートリアル勧誘【園田 海未】 9110004 9110004 1 1 999 9110004 9110004 9110004 0 0 1 0 0 100 2 0 Tutorial Scout: Umi Sonoda 1
157 9110005 チュートリアル勧誘【星空 凛】 9110005 9110005 1 1 999 9110005 9110005 9110005 0 0 1 0 0 100 2 0 Tutorial Scout: Rin Hoshizora 1
158 9110006 チュートリアル勧誘【西木野 真姫】 9110006 9110006 1 1 999 9110006 9110006 9110006 0 0 1 0 0 100 2 0 Tutorial Scout: Maki Nishikino 1
159 9110007 チュートリアル勧誘【東條 希】 9110007 9110007 1 1 999 9110007 9110007 9110007 0 0 1 0 0 100 2 0 Tutorial Scout: Nozomi Tojo 1
160 9110008 チュートリアル勧誘【小泉 花陽】 9110008 9110008 1 1 999 9110008 9110008 9110008 0 0 1 0 0 100 2 0 Tutorial Scout: Hanayo Koizumi 1
161 9110009 チュートリアル勧誘【矢澤 にこ】 9110009 9110009 1 1 999 9110009 9110009 9110009 0 0 1 0 0 100 2 0 Tutorial Scout: Nico Yazawa 1
162 9110010 チュートリアル勧誘【高海 千歌】 9110010 9110010 1 1 999 9110010 9110010 9110010 0 0 1 0 0 200 2 0 Tutorial Scout: Chika Takami 1
163 9110011 チュートリアル勧誘【桜内 梨子】 9110011 9110011 1 1 999 9110011 9110011 9110011 0 0 1 0 0 200 2 0 Tutorial Scout: Riko Sakurauchi 1
164 9110012 チュートリアル勧誘【松浦 果南】 9110012 9110012 1 1 999 9110012 9110012 9110012 0 0 1 0 0 200 2 0 Tutorial Scout: Kanan Matsuura 1
165 9110013 チュートリアル勧誘【黒澤 ダイヤ】 9110013 9110013 1 1 999 9110013 9110013 9110013 0 0 1 0 0 200 2 0 Tutorial Scout: Dia Kurosawa 1
166 9110014 チュートリアル勧誘【渡辺 曜】 9110014 9110014 1 1 999 9110014 9110014 9110014 0 0 1 0 0 200 2 0 Tutorial Scout: You Watanabe 1
167 9110015 チュートリアル勧誘【津島 善子】 9110015 9110015 1 1 999 9110015 9110015 9110015 0 0 1 0 0 200 2 0 Tutorial Scout: Yoshiko Tsushima 1
168 9110016 チュートリアル勧誘【国木田 花丸】 9110016 9110016 1 1 999 9110016 9110016 9110016 0 0 1 0 0 200 2 0 Tutorial Scout: Hanamaru Kunikida 1
169 9110017 チュートリアル勧誘【小原 鞠莉】 9110017 9110017 1 1 999 9110017 9110017 9110017 0 0 1 0 0 200 2 0 Tutorial Scout: Mari Ohara 1
170 9110018 チュートリアル勧誘【黒澤 ルビィ】 9110018 9110018 1 1 999 9110018 9110018 9110018 0 0 1 0 0 200 2 0 Tutorial Scout: Ruby Kurosawa 1
171 9110019 チュートリアル勧誘【上原 歩夢】 9110019 9110019 1 1 999 9110019 9110019 9110019 0 0 1 0 0 300 2 0 Tutorial Scout: Ayumu Uehara 1
172 9110020 チュートリアル勧誘【中須 かすみ】 9110020 9110020 1 1 999 9110020 9110020 9110020 0 0 1 0 0 300 2 0 Tutorial Scout: Kasumi Nakasu 1
173 9110021 チュートリアル勧誘【桜坂 しずく】 9110021 9110021 1 1 999 9110021 9110021 9110021 0 0 1 0 0 300 2 0 Tutorial Scout: Shizuku Osaka 1
174 9110022 チュートリアル勧誘【朝香 果林】 9110022 9110022 1 1 999 9110022 9110022 9110022 0 0 1 0 0 300 2 0 Tutorial Scout: Karin Asaka 1
175 9110023 チュートリアル勧誘【宮下 愛】 9110023 9110023 1 1 999 9110023 9110023 9110023 0 0 1 0 0 300 2 0 Tutorial Scout: Ai Miyashita 1
176 9110024 チュートリアル勧誘【近江 彼方】 9110024 9110024 1 1 999 9110024 9110024 9110024 0 0 1 0 0 300 2 0 Tutorial Scout: Kanata Konoe 1
177 9110025 チュートリアル勧誘【優木 せつ菜】 9110025 9110025 1 1 999 9110025 9110025 9110025 0 0 1 0 0 300 2 0 Tutorial Scout: Setsuna Yuki 1
178 9110026 チュートリアル勧誘【エマ・ヴェルデ】 9110026 9110026 1 1 999 9110026 9110026 9110026 0 0 1 0 0 300 2 0 Tutorial Scout: Emma Verde 1
179 9110027 チュートリアル勧誘【天王寺 璃奈】 9110027 9110027 1 1 999 9110027 9110027 9110027 0 0 1 0 0 300 2 0 Tutorial Scout: Rina Tennoji 1
180 9110028 チュートリアル勧誘【三船 栞子】 9110028 9110028 1 1 999 9110028 9110028 9110028 0 0 1 0 0 300 2 0 Tutorial Scout: Shioriko Mifune 1
181 9110029 チュートリアル勧誘【ミア・テイラー】 9110029 9110029 1 1 999 9110029 9110029 9110029 0 0 1 0 0 300 2 0 Tutorial Scout: Mia Taylor 1
182 9110030 チュートリアル勧誘【鐘 嵐珠】 9110030 9110030 1 1 999 9110030 9110030 9110030 0 0 1 0 0 300 2 0 Tutorial Scout: Lanzhu Zhong 1
183 9110031 チュートリアル勧誘【澁谷 かのん】 9110031 9110031 1 1 999 9110031 9110031 9110031 0 0 1 0 0 400 2 0 Tutorial Scout: Kanon Shibuya 1
184 9110032 チュートリアル勧誘【唐 可可】 9110032 9110032 1 1 999 9110032 9110032 9110032 0 0 1 0 0 400 2 0 Tutorial Scout: Keke Tang 1
185 9110033 チュートリアル勧誘【嵐 千砂都】 9110033 9110033 1 1 999 9110033 9110033 9110033 0 0 1 0 0 400 2 0 Tutorial Scout: Chisato Arashi 1
186 9110034 チュートリアル勧誘【平安名 すみれ】 9110034 9110034 1 1 999 9110034 9110034 9110034 0 0 1 0 0 400 2 0 Tutorial Scout: Sumire Heanna 1
187 9110035 チュートリアル勧誘【葉月 恋】 9110035 9110035 1 1 999 9110035 9110035 9110035 0 0 1 0 0 400 2 0 Tutorial Scout: Ren Hazuki 1
188 9110036 チュートリアル勧誘【桜小路 きな子】 9110036 9110036 1 1 999 9110036 9110036 9110036 0 0 1 0 0 400 2 0 Tutorial Scout: Kinako Sakurakoji 1
189 9110037 チュートリアル勧誘【米女 メイ】 9110037 9110037 1 1 999 9110037 9110037 9110037 0 0 1 0 0 400 2 0 Tutorial Scout: Mei Yoneme 1
190 9110038 チュートリアル勧誘【若菜 四季】 9110038 9110038 1 1 999 9110038 9110038 9110038 0 0 1 0 0 400 2 0 Tutorial Scout: Shiki Wakana 1
191 9110039 チュートリアル勧誘【鬼塚 夏美】 9110039 9110039 1 1 999 9110039 9110039 9110039 0 0 1 0 0 400 2 0 Tutorial Scout: Natsumi Onitsuka 1
192 6110001 μ's特待生勧誘 6110001 1110001 1 1 16 6110001 6110001 6110001 0 0 0 0 0 1 1 0 μ's Honor Student Scouting 1
193 6110002 Aqours特待生勧誘 6110002 1110001 1 1 15 6110002 6110002 6110002 0 0 0 0 0 1 1 0 Aqours Honor Student Scouting 1
194 6110003 虹ヶ咲特待生勧誘 6110003 1110001 1 1 14 6110003 6110003 6110003 0 0 0 0 0 1 1 0 Nijigasaki Honor Student Scouting 1
195 6110004 Liella!特待生勧誘 6110004 1110001 1 1 13 6110004 6110004 6110004 0 0 0 0 0 1 1 0 Liella! Honor Student Scouting 1

View File

@@ -1,31 +1,31 @@
_id,_number,_logoFileName,_infoFileName,_stepupInfoFileName,_bgFileName,_masterReleaseLabelId
1110001,1110001,thumbnail_1110001,gacha_title_1110001,,"10010013,20010011,30010007,40010007",223041501
1110002,1110002,thumbnail_1110002,gacha_title_1110002,,"10010013,20010011,30010007,40010007",223041501
1110003,1110003,thumbnail_1110003,gacha_title_1110003,,"40020009,40090009",223041901
1110004,1110004,thumbnail_common_1,gacha_title_common_1,,"40020009,40090009,10010013,20010011,30010007,40010007",223043001
1110005,1110005,thumbnail_common_1,gacha_title_common_1,,"10010016,10020015,40020009,40090009",223051501
1110006,1110006,thumbnail_common_1,gacha_title_common_1,,"20010014,20020013,10010016,10020015",223053101
1110007,1110007,thumbnail_common_1,gacha_title_common_1,,"30060009,30080009,20010014,20020013",223061501
1110008,1110008,thumbnail_common_1,gacha_title_common_1,,"20030013,20040013,30060009,30080009",223063001
1110009,1110009,thumbnail_common_1,gacha_title_common_1,,"40040009,40050009,20030013,20040013",223071502
1110010,1110010,thumbnail_common_1,gacha_title_common_1,,"30010010,30100009,40040009,40050009",223073101
1110011,1110011,thumbnail_common_1,gacha_title_common_1,,"10030016,10050015,30010010,30100009",223081501
1110012,1110012,thumbnail_common_1,gacha_title_common_1,,"40070010,40080010,10030016,10050015",223083107
1110013,1110013,thumbnail_common_1,gacha_title_common_1,,"20060015,20080014,40070010,40080010",223091501
1110014,1110014,thumbnail_common_1,gacha_title_common_1,,"10060015,10070017,20060015,20080014",223093001
1110015,1110015,thumbnail_common_1,gacha_title_common_1,,"30120010,30110010,10060015,10070017",223101505
1110016,1110016,thumbnail_common_1,gacha_title_common_1,,"20040015,20070015,30110010,30120010",223103107
1110017,1110017,thumbnail_common_1,gacha_title_common_1,,"40030012,40060011,20040015,20070015",223111501
1110018,1110018,thumbnail_common_1,gacha_title_common_1,,"30050013,30070013,40030012,40060011",223113008
1110019,1110019,thumbnail_common_1,gacha_title_common_1,,"10040019,10090018,30050013,30070013",223121513
1110020,1110020,thumbnail_common_1,gacha_title_common_1,,"40010014,40020012,10040019,10090018",223123107
1110021,1110021,thumbnail_common_1,gacha_title_common_1,,"20050017,20090016,40010014,40020012",224011508
1110022,1110022,thumbnail_common_1,gacha_title_common_1,,"10030018,10060017,20050017,20090016",224013108
1110023,1110023,thumbnail_common_1,gacha_title_common_1,,"30030014,30040014,10030018,10060017",224021409
1110024,1110024,thumbnail_common_1,gacha_title_common_1,,"20020016,20060016,30030014,30040014",224030120
2110001,2110001,thumbnail_2110001,gacha_title_2110001,,"10010016,10020015",223043002
2110002,2110002,thumbnail_2110002,gacha_title_2110002,,"20010014,20020013",223051502
2110003,2110003,thumbnail_2110003,gacha_title_2110003,,"30060009,30080009",223053102
1110001,1110001,thumbnail_1110001,gacha_title_1110001,,10010013/20010011/30010007/40010007,223041501
1110002,1110002,thumbnail_1110002,gacha_title_1110002,,10010013/20010011/30010007/40010007,223041501
1110003,1110003,thumbnail_1110003,gacha_title_1110003,,40020009/40090009,223041901
1110004,1110004,thumbnail_common_1,gacha_title_common_1,,40020009/40090009/10010013/20010011/30010007/40010007,223043001
1110005,1110005,thumbnail_common_1,gacha_title_common_1,,10010016/10020015/40020009/40090009,223051501
1110006,1110006,thumbnail_common_1,gacha_title_common_1,,20010014/20020013/10010016/10020015,223053101
1110007,1110007,thumbnail_common_1,gacha_title_common_1,,30060009/30080009/20010014/20020013,223061501
1110008,1110008,thumbnail_common_1,gacha_title_common_1,,20030013/20040013/30060009/30080009,223063001
1110009,1110009,thumbnail_common_1,gacha_title_common_1,,40040009/40050009/20030013/20040013,223071502
1110010,1110010,thumbnail_common_1,gacha_title_common_1,,30010010/30100009/40040009/40050009,223073101
1110011,1110011,thumbnail_common_1,gacha_title_common_1,,10030016/10050015/30010010/30100009,223081501
1110012,1110012,thumbnail_common_1,gacha_title_common_1,,40070010/40080010/10030016/10050015,223083107
1110013,1110013,thumbnail_common_1,gacha_title_common_1,,20060015/20080014/40070010/40080010,223091501
1110014,1110014,thumbnail_common_1,gacha_title_common_1,,10060015/10070017/20060015/20080014,223093001
1110015,1110015,thumbnail_common_1,gacha_title_common_1,,30120010/30110010/10060015/10070017,223101505
1110016,1110016,thumbnail_common_1,gacha_title_common_1,,20040015/20070015/30110010/30120010,223103107
1110017,1110017,thumbnail_common_1,gacha_title_common_1,,40030012/40060011/20040015/20070015,223111501
1110018,1110018,thumbnail_common_1,gacha_title_common_1,,30050013/30070013/40030012/40060011,223113008
1110019,1110019,thumbnail_common_1,gacha_title_common_1,,10040019/10090018/30050013/30070013,223121513
1110020,1110020,thumbnail_common_1,gacha_title_common_1,,40010014/40020012/10040019/10090018,223123107
1110021,1110021,thumbnail_common_1,gacha_title_common_1,,20050017/20090016/40010014/40020012,224011508
1110022,1110022,thumbnail_common_1,gacha_title_common_1,,10030018/10060017/20050017/20090016,224013108
1110023,1110023,thumbnail_common_1,gacha_title_common_1,,30030014/30040014/10030018/10060017,224021409
1110024,1110024,thumbnail_common_1,gacha_title_common_1,,20020016/20060016/30030014/30040014,224030120
2110001,2110001,thumbnail_2110001,gacha_title_2110001,,10010016/10020015,223043002
2110002,2110002,thumbnail_2110002,gacha_title_2110002,,20010014/20020013,223051502
2110003,2110003,thumbnail_2110003,gacha_title_2110003,,30060009/30080009,223053102
2110004,2110004,thumbnail_2110004,gacha_title_2110004,,20030013,223061502
2110005,2110005,thumbnail_2110005,gacha_title_2110005,,20040013,223061502
2110006,2110006,thumbnail_2110006,gacha_title_2110006,,40040009,223063002
@@ -99,10 +99,10 @@
3110035,3110035,thumbnail_3110035,gacha_title_3110035,,30010018,224030107
3110036,3110036,thumbnail_3110036,gacha_title_3110036,,20070016,224030402
3110037,3110037,thumbnail_3110037,gacha_title_3110037,,10040020,224031502
4110001,4110001,thumbnail_4110001,gacha_title_4110001,,"40020009,40090009",223061103
4110002,4110002,thumbnail_4110002,gacha_title_4110002,,"20010014,20020013",223061103
4110003,4110003,thumbnail_4110003,gacha_title_4110003,,"10010016,10020015",223061103
4110004,4110004,thumbnail_4110004,gacha_title_4110004,,"10010016,20010014,30010007,40010007",223062301
4110001,4110001,thumbnail_4110001,gacha_title_4110001,,40020009/40090009,223061103
4110002,4110002,thumbnail_4110002,gacha_title_4110002,,20010014/20020013,223061103
4110003,4110003,thumbnail_4110003,gacha_title_4110003,,10010016/10020015,223061103
4110004,4110004,thumbnail_4110004,gacha_title_4110004,,10010016/20010014/30010007/40010007,223062301
4110005,4110005,thumbnail_4110005,gacha_title_4110005,,30010012,223100301
4110006,4110006,thumbnail_4110006,gacha_title_4110006,,30020011,223101001
4110007,4110007,thumbnail_4110007,gacha_title_4110007,,30030012,223101701
@@ -116,35 +116,35 @@
4110015,4110015,thumbnail_4110015,gacha_title_4110015,,30110014,223121201
4110016,4110016,thumbnail_4110016,gacha_title_4110016,,30120013,223121901
4110017,4110017,thumbnail_4110017,gacha_title_4110017,,HalfAnniversary,223101501
4110019,4110019,thumbnail_4110019,gacha_title_4110019,,"10060015,10070017,10030016,10050015",223101502
4110020,4110020,thumbnail_4110020,gacha_title_4110020,,"20060015,20080014,20030013,20040013",223101502
4110021,4110021,thumbnail_4110021,gacha_title_4110021,,"30120010,30110010,30010010,30100009",223101502
4110022,4110022,thumbnail_4110022,gacha_title_4110022,,"40070010,40080010,40040009,40050009",223101502
4110023,4110023,thumbnail_4110023,gacha_title_4110023,,"30060009,30080009,30010007",223090603
4110024,4110024,thumbnail_muse_1,gacha_title_muse_1,,"10060015,10070017,10030016,10050015",223103111
4110025,4110025,thumbnail_aqours_1,gacha_title_aqours_1,,"20040015,20070015,20060015,20080014",223111508
4110026,4110026,thumbnail_4110026,gacha_title_4110026,,"10060015,10030016,20060015,20040013,30110010,30100009,40070010,40040009",223103112
4110019,4110019,thumbnail_4110019,gacha_title_4110019,,10060015/10070017/10030016/10050015,223101502
4110020,4110020,thumbnail_4110020,gacha_title_4110020,,20060015/20080014/20030013/20040013,223101502
4110021,4110021,thumbnail_4110021,gacha_title_4110021,,30120010/30110010/30010010/30100009,223101502
4110022,4110022,thumbnail_4110022,gacha_title_4110022,,40070010/40080010/40040009/40050009,223101502
4110023,4110023,thumbnail_4110023,gacha_title_4110023,,30060009/30080009/30010007,223090603
4110024,4110024,thumbnail_muse_1,gacha_title_muse_1,,10060015/10070017/10030016/10050015,223103111
4110025,4110025,thumbnail_aqours_1,gacha_title_aqours_1,,20040015/20070015/20060015/20080014,223111508
4110026,4110026,thumbnail_4110026,gacha_title_4110026,,10060015/10030016/20060015/20040013/30110010/30100009/40070010/40040009,223103112
4110027,4110027,thumbnail_4110027,gacha_title_4110027,,yohane_1,223121402
4110028,4110028,thumbnail_4110028,gacha_title_4110028,,"40060011,20070015,10060015,30100009",223111702
4110029,4110029,thumbnail_4110029,gacha_title_4110029,,"40030012,30120010,10030016,20020013",223112404
4110030,4110030,thumbnail_4110030,gacha_title_4110030,,"20040015,30110010,10070017",223120103
4110031,4110031,thumbnail_aqours_1,gacha_title_aqours_2,,"20040015,20070015,20060015,20080014",223120907
4110032,4110032,thumbnail_nijigaku_1,gacha_title_nijigaku_2,,"30050013,30070013,30110010,30120010",223120908
4110033,4110033,thumbnail_liella_1,gacha_title_liella_2,,"40030012,40060011,40070010,40080010",223120909
4110034,4110034,thumbnail_4110034,gacha_title_4110034,,"10040019,20070015,30070013,40030012",223122604
4110035,4110035,thumbnail_4110035,gacha_title_4110035,,"10040019,20070015,30070013,40030012",223122604
4110036,4110036,thumbnail_4110036,gacha_title_4110036,,"10050016,20090014,30090012,40050011",224010105
4110037,4110037,thumbnail_4110037,gacha_title_4110037,,"10050016,20090014,30090012,40050011",224010105
4110038,4110038,thumbnail_4110038,gacha_title_4110038,,"30010012,30020011,30030012,30040011,30050012,30060011",224011304
4110039,4110039,thumbnail_4110039,gacha_title_4110039,,"10010016,10030018,10060017,10040019,10090018",224030109
4110040,4110040,thumbnail_4110040,gacha_title_4110040,,"20010014,20020016,20060016,20050017,20090016",224030109
4110041,4110041,thumbnail_4110041,gacha_title_4110041,,"30010010,30030014,30040014,30050013,30070013",224030109
4110042,4110042,thumbnail_4110042,gacha_title_4110042,,"40010014,40020012,40030012,40060011,40080010",224030109
4110043,4110043,thumbnail_4110043,gacha_title_4110043,,"30030015,40060013,20050019,10060018",224031602
4110044,4110044,thumbnail_4110044,gacha_title_4110044,,"10040020,10030018,20070016,20060016,30010018,30040014,40030014,40050013",224032003
5110001,5110001,thumbnail_common_1,gacha_title_common_1,,"40020009,40090009,10010013,20010011,30010007,40010007",1
7110002,7110002,thumbnail_1110001,gacha_title_1110001,,"10010013,20010011,30010007,40010007",223043003
7110003,7110003,thumbnail_1110001,gacha_title_1110001,,"10010013,20010011,30010007,40010007",223071202
4110028,4110028,thumbnail_4110028,gacha_title_4110028,,40060011/20070015/10060015/30100009,223111702
4110029,4110029,thumbnail_4110029,gacha_title_4110029,,40030012/30120010/10030016/20020013,223112404
4110030,4110030,thumbnail_4110030,gacha_title_4110030,,20040015/30110010/10070017,223120103
4110031,4110031,thumbnail_aqours_1,gacha_title_aqours_2,,20040015/20070015/20060015/20080014,223120907
4110032,4110032,thumbnail_nijigaku_1,gacha_title_nijigaku_2,,30050013/30070013/30110010/30120010,223120908
4110033,4110033,thumbnail_liella_1,gacha_title_liella_2,,40030012/40060011/40070010/40080010,223120909
4110034,4110034,thumbnail_4110034,gacha_title_4110034,,10040019/20070015/30070013/40030012,223122604
4110035,4110035,thumbnail_4110035,gacha_title_4110035,,10040019/20070015/30070013/40030012,223122604
4110036,4110036,thumbnail_4110036,gacha_title_4110036,,10050016/20090014/30090012/40050011,224010105
4110037,4110037,thumbnail_4110037,gacha_title_4110037,,10050016/20090014/30090012/40050011,224010105
4110038,4110038,thumbnail_4110038,gacha_title_4110038,,30010012/30020011/30030012/30040011/30050012/30060011,224011304
4110039,4110039,thumbnail_4110039,gacha_title_4110039,,10010016/10030018/10060017/10040019/10090018,224030109
4110040,4110040,thumbnail_4110040,gacha_title_4110040,,20010014/20020016/20060016/20050017/20090016,224030109
4110041,4110041,thumbnail_4110041,gacha_title_4110041,,30010010/30030014/30040014/30050013/30070013,224030109
4110042,4110042,thumbnail_4110042,gacha_title_4110042,,40010014/40020012/40030012/40060011/40080010,224030109
4110043,4110043,thumbnail_4110043,gacha_title_4110043,,30030015/40060013/20050019/10060018,224031602
4110044,4110044,thumbnail_4110044,gacha_title_4110044,,10040020/10030018/20070016/20060016/30010018/30040014/40030014/40050013,224032003
5110001,5110001,thumbnail_common_1,gacha_title_common_1,,40020009/40090009/10010013/20010011/30010007/40010007,1
7110002,7110002,thumbnail_1110001,gacha_title_1110001,,10010013/20010011/30010007/40010007,223043003
7110003,7110003,thumbnail_1110001,gacha_title_1110001,,10010013/20010011/30010007/40010007,223071202
8110001,8110001,thumbnail_10003,gacha_title_10003,,ItemGachaBg,1
8110002,8110002,thumbnail_8110002,gacha_title_10004,,ItemGachaBg,223101604
8110004,8110004,thumbnail_10003,gacha_title_10003,,ItemGachaBg,224010108
@@ -189,3 +189,7 @@
9110037,9110037,thumbnail_tutorial_liella,gacha_title_tutorial_liella,,Tutorial_liella,1
9110038,9110038,thumbnail_tutorial_liella,gacha_title_tutorial_liella,,Tutorial_liella,1
9110039,9110039,thumbnail_tutorial_liella,gacha_title_tutorial_liella,,Tutorial_liella,1
6110001,6110001,thumbnail_6110001,gacha_title_6110001,,sif1_6110001,1
6110002,6110002,thumbnail_6110002,gacha_title_6110002,,sif1_6110002,1
6110003,6110003,thumbnail_6110003,gacha_title_6110003,,sif1_6110003,1
6110004,6110004,thumbnail_6110004,gacha_title_6110004,,sif1_6110004,1
1 _id _number _logoFileName _infoFileName _stepupInfoFileName _bgFileName _masterReleaseLabelId
2 1110001 1110001 thumbnail_1110001 gacha_title_1110001 10010013,20010011,30010007,40010007 10010013/20010011/30010007/40010007 223041501
3 1110002 1110002 thumbnail_1110002 gacha_title_1110002 10010013,20010011,30010007,40010007 10010013/20010011/30010007/40010007 223041501
4 1110003 1110003 thumbnail_1110003 gacha_title_1110003 40020009,40090009 40020009/40090009 223041901
5 1110004 1110004 thumbnail_common_1 gacha_title_common_1 40020009,40090009,10010013,20010011,30010007,40010007 40020009/40090009/10010013/20010011/30010007/40010007 223043001
6 1110005 1110005 thumbnail_common_1 gacha_title_common_1 10010016,10020015,40020009,40090009 10010016/10020015/40020009/40090009 223051501
7 1110006 1110006 thumbnail_common_1 gacha_title_common_1 20010014,20020013,10010016,10020015 20010014/20020013/10010016/10020015 223053101
8 1110007 1110007 thumbnail_common_1 gacha_title_common_1 30060009,30080009,20010014,20020013 30060009/30080009/20010014/20020013 223061501
9 1110008 1110008 thumbnail_common_1 gacha_title_common_1 20030013,20040013,30060009,30080009 20030013/20040013/30060009/30080009 223063001
10 1110009 1110009 thumbnail_common_1 gacha_title_common_1 40040009,40050009,20030013,20040013 40040009/40050009/20030013/20040013 223071502
11 1110010 1110010 thumbnail_common_1 gacha_title_common_1 30010010,30100009,40040009,40050009 30010010/30100009/40040009/40050009 223073101
12 1110011 1110011 thumbnail_common_1 gacha_title_common_1 10030016,10050015,30010010,30100009 10030016/10050015/30010010/30100009 223081501
13 1110012 1110012 thumbnail_common_1 gacha_title_common_1 40070010,40080010,10030016,10050015 40070010/40080010/10030016/10050015 223083107
14 1110013 1110013 thumbnail_common_1 gacha_title_common_1 20060015,20080014,40070010,40080010 20060015/20080014/40070010/40080010 223091501
15 1110014 1110014 thumbnail_common_1 gacha_title_common_1 10060015,10070017,20060015,20080014 10060015/10070017/20060015/20080014 223093001
16 1110015 1110015 thumbnail_common_1 gacha_title_common_1 30120010,30110010,10060015,10070017 30120010/30110010/10060015/10070017 223101505
17 1110016 1110016 thumbnail_common_1 gacha_title_common_1 20040015,20070015,30110010,30120010 20040015/20070015/30110010/30120010 223103107
18 1110017 1110017 thumbnail_common_1 gacha_title_common_1 40030012,40060011,20040015,20070015 40030012/40060011/20040015/20070015 223111501
19 1110018 1110018 thumbnail_common_1 gacha_title_common_1 30050013,30070013,40030012,40060011 30050013/30070013/40030012/40060011 223113008
20 1110019 1110019 thumbnail_common_1 gacha_title_common_1 10040019,10090018,30050013,30070013 10040019/10090018/30050013/30070013 223121513
21 1110020 1110020 thumbnail_common_1 gacha_title_common_1 40010014,40020012,10040019,10090018 40010014/40020012/10040019/10090018 223123107
22 1110021 1110021 thumbnail_common_1 gacha_title_common_1 20050017,20090016,40010014,40020012 20050017/20090016/40010014/40020012 224011508
23 1110022 1110022 thumbnail_common_1 gacha_title_common_1 10030018,10060017,20050017,20090016 10030018/10060017/20050017/20090016 224013108
24 1110023 1110023 thumbnail_common_1 gacha_title_common_1 30030014,30040014,10030018,10060017 30030014/30040014/10030018/10060017 224021409
25 1110024 1110024 thumbnail_common_1 gacha_title_common_1 20020016,20060016,30030014,30040014 20020016/20060016/30030014/30040014 224030120
26 2110001 2110001 thumbnail_2110001 gacha_title_2110001 10010016,10020015 10010016/10020015 223043002
27 2110002 2110002 thumbnail_2110002 gacha_title_2110002 20010014,20020013 20010014/20020013 223051502
28 2110003 2110003 thumbnail_2110003 gacha_title_2110003 30060009,30080009 30060009/30080009 223053102
29 2110004 2110004 thumbnail_2110004 gacha_title_2110004 20030013 223061502
30 2110005 2110005 thumbnail_2110005 gacha_title_2110005 20040013 223061502
31 2110006 2110006 thumbnail_2110006 gacha_title_2110006 40040009 223063002
99 3110035 3110035 thumbnail_3110035 gacha_title_3110035 30010018 224030107
100 3110036 3110036 thumbnail_3110036 gacha_title_3110036 20070016 224030402
101 3110037 3110037 thumbnail_3110037 gacha_title_3110037 10040020 224031502
102 4110001 4110001 thumbnail_4110001 gacha_title_4110001 40020009,40090009 40020009/40090009 223061103
103 4110002 4110002 thumbnail_4110002 gacha_title_4110002 20010014,20020013 20010014/20020013 223061103
104 4110003 4110003 thumbnail_4110003 gacha_title_4110003 10010016,10020015 10010016/10020015 223061103
105 4110004 4110004 thumbnail_4110004 gacha_title_4110004 10010016,20010014,30010007,40010007 10010016/20010014/30010007/40010007 223062301
106 4110005 4110005 thumbnail_4110005 gacha_title_4110005 30010012 223100301
107 4110006 4110006 thumbnail_4110006 gacha_title_4110006 30020011 223101001
108 4110007 4110007 thumbnail_4110007 gacha_title_4110007 30030012 223101701
116 4110015 4110015 thumbnail_4110015 gacha_title_4110015 30110014 223121201
117 4110016 4110016 thumbnail_4110016 gacha_title_4110016 30120013 223121901
118 4110017 4110017 thumbnail_4110017 gacha_title_4110017 HalfAnniversary 223101501
119 4110019 4110019 thumbnail_4110019 gacha_title_4110019 10060015,10070017,10030016,10050015 10060015/10070017/10030016/10050015 223101502
120 4110020 4110020 thumbnail_4110020 gacha_title_4110020 20060015,20080014,20030013,20040013 20060015/20080014/20030013/20040013 223101502
121 4110021 4110021 thumbnail_4110021 gacha_title_4110021 30120010,30110010,30010010,30100009 30120010/30110010/30010010/30100009 223101502
122 4110022 4110022 thumbnail_4110022 gacha_title_4110022 40070010,40080010,40040009,40050009 40070010/40080010/40040009/40050009 223101502
123 4110023 4110023 thumbnail_4110023 gacha_title_4110023 30060009,30080009,30010007 30060009/30080009/30010007 223090603
124 4110024 4110024 thumbnail_muse_1 gacha_title_muse_1 10060015,10070017,10030016,10050015 10060015/10070017/10030016/10050015 223103111
125 4110025 4110025 thumbnail_aqours_1 gacha_title_aqours_1 20040015,20070015,20060015,20080014 20040015/20070015/20060015/20080014 223111508
126 4110026 4110026 thumbnail_4110026 gacha_title_4110026 10060015,10030016,20060015,20040013,30110010,30100009,40070010,40040009 10060015/10030016/20060015/20040013/30110010/30100009/40070010/40040009 223103112
127 4110027 4110027 thumbnail_4110027 gacha_title_4110027 yohane_1 223121402
128 4110028 4110028 thumbnail_4110028 gacha_title_4110028 40060011,20070015,10060015,30100009 40060011/20070015/10060015/30100009 223111702
129 4110029 4110029 thumbnail_4110029 gacha_title_4110029 40030012,30120010,10030016,20020013 40030012/30120010/10030016/20020013 223112404
130 4110030 4110030 thumbnail_4110030 gacha_title_4110030 20040015,30110010,10070017 20040015/30110010/10070017 223120103
131 4110031 4110031 thumbnail_aqours_1 gacha_title_aqours_2 20040015,20070015,20060015,20080014 20040015/20070015/20060015/20080014 223120907
132 4110032 4110032 thumbnail_nijigaku_1 gacha_title_nijigaku_2 30050013,30070013,30110010,30120010 30050013/30070013/30110010/30120010 223120908
133 4110033 4110033 thumbnail_liella_1 gacha_title_liella_2 40030012,40060011,40070010,40080010 40030012/40060011/40070010/40080010 223120909
134 4110034 4110034 thumbnail_4110034 gacha_title_4110034 10040019,20070015,30070013,40030012 10040019/20070015/30070013/40030012 223122604
135 4110035 4110035 thumbnail_4110035 gacha_title_4110035 10040019,20070015,30070013,40030012 10040019/20070015/30070013/40030012 223122604
136 4110036 4110036 thumbnail_4110036 gacha_title_4110036 10050016,20090014,30090012,40050011 10050016/20090014/30090012/40050011 224010105
137 4110037 4110037 thumbnail_4110037 gacha_title_4110037 10050016,20090014,30090012,40050011 10050016/20090014/30090012/40050011 224010105
138 4110038 4110038 thumbnail_4110038 gacha_title_4110038 30010012,30020011,30030012,30040011,30050012,30060011 30010012/30020011/30030012/30040011/30050012/30060011 224011304
139 4110039 4110039 thumbnail_4110039 gacha_title_4110039 10010016,10030018,10060017,10040019,10090018 10010016/10030018/10060017/10040019/10090018 224030109
140 4110040 4110040 thumbnail_4110040 gacha_title_4110040 20010014,20020016,20060016,20050017,20090016 20010014/20020016/20060016/20050017/20090016 224030109
141 4110041 4110041 thumbnail_4110041 gacha_title_4110041 30010010,30030014,30040014,30050013,30070013 30010010/30030014/30040014/30050013/30070013 224030109
142 4110042 4110042 thumbnail_4110042 gacha_title_4110042 40010014,40020012,40030012,40060011,40080010 40010014/40020012/40030012/40060011/40080010 224030109
143 4110043 4110043 thumbnail_4110043 gacha_title_4110043 30030015,40060013,20050019,10060018 30030015/40060013/20050019/10060018 224031602
144 4110044 4110044 thumbnail_4110044 gacha_title_4110044 10040020,10030018,20070016,20060016,30010018,30040014,40030014,40050013 10040020/10030018/20070016/20060016/30010018/30040014/40030014/40050013 224032003
145 5110001 5110001 thumbnail_common_1 gacha_title_common_1 40020009,40090009,10010013,20010011,30010007,40010007 40020009/40090009/10010013/20010011/30010007/40010007 1
146 7110002 7110002 thumbnail_1110001 gacha_title_1110001 10010013,20010011,30010007,40010007 10010013/20010011/30010007/40010007 223043003
147 7110003 7110003 thumbnail_1110001 gacha_title_1110001 10010013,20010011,30010007,40010007 10010013/20010011/30010007/40010007 223071202
148 8110001 8110001 thumbnail_10003 gacha_title_10003 ItemGachaBg 1
149 8110002 8110002 thumbnail_8110002 gacha_title_10004 ItemGachaBg 223101604
150 8110004 8110004 thumbnail_10003 gacha_title_10003 ItemGachaBg 224010108
189 9110037 9110037 thumbnail_tutorial_liella gacha_title_tutorial_liella Tutorial_liella 1
190 9110038 9110038 thumbnail_tutorial_liella gacha_title_tutorial_liella Tutorial_liella 1
191 9110039 9110039 thumbnail_tutorial_liella gacha_title_tutorial_liella Tutorial_liella 1
192 6110001 6110001 thumbnail_6110001 gacha_title_6110001 sif1_6110001 1
193 6110002 6110002 thumbnail_6110002 gacha_title_6110002 sif1_6110002 1
194 6110003 6110003 thumbnail_6110003 gacha_title_6110003 sif1_6110003 1
195 6110004 6110004 thumbnail_6110004 gacha_title_6110004 sif1_6110004 1

View File

@@ -1,191 +1,195 @@
_id,_infoText,_detailText,_masterReleaseLabelId
1110001,リリース記念勧誘,「リリース記念勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [リリース記念] 」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br>リリース記念勧誘で入手できる「勧誘ポイント」は、以下の勧誘でも入手できます。<br>・UR確定 リリース記念勧誘<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223041501
1110002,UR確定 リリース記念勧誘,「UR確定 リリース記念勧誘」は、有償ラブカ3000個で実施でき、UR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [リリース記念] 」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br>UR確定 リリース記念勧誘で入手できる「勧誘ポイント」は、以下の勧誘でも入手できます。<br>・リリース記念勧誘<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223041501
1110003,ピックアップ勧誘放課後の原宿Liella!♡~,「ピックアップ勧誘放課後の原宿Liella!♡」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [放課後の原宿Liella!♡] 」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223041901
1110004,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223043001
1110005,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223051501
1110006,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223053101
1110007,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223061501
1110008,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223063001
1110009,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223071502
1110010,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223073101
1110011,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223081501
1110012,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223083107
1110013,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223091501
1110014,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223093001
1110015,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223101505
1110016,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223103107
1110017,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223111501
1110018,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223113008
1110019,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223121513
1110020,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223123107
1110021,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224011508
1110022,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224013108
1110023,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224021409
1110024,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224030120
2110001,ピックアップ勧誘~わたしたちとこの街~,「ピックアップ勧誘わたしたちとこの街」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [わたしたちとこの街]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223043002
2110002,ピックアップ勧誘~商店街をアピールだ!~,「ピックアップ勧誘商店街をアピールだ」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [商店街をアピールだ!]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223051502
2110003,ピックアップ勧誘Live in Nature,「ピックアップ勧誘Live in Nature」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Live in Nature]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223053102
2110004,ピックアップ勧誘~煌めく踊り子~,「ピックアップ勧誘煌めく踊り子」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [煌めく踊り子]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223061502
2110005,ピックアップ勧誘~煌めく踊り子~,「ピックアップ勧誘煌めく踊り子」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [煌めく踊り子]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223061502
2110006,ピックアップ勧誘~太陽降り注ぐ夏合宿~,「ピックアップ勧誘太陽降り注ぐ夏合宿」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [太陽降り注ぐ夏合宿]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223063002
2110007,ピックアップ勧誘~太陽降り注ぐ夏合宿~,「ピックアップ勧誘太陽降り注ぐ夏合宿」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [太陽降り注ぐ夏合宿]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223063002
2110008,ピックアップ勧誘~真夏の人魚姫~,「ピックアップ勧誘真夏の人魚姫」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [真夏の人魚姫]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223071503
2110009,ピックアップ勧誘~真夏の人魚姫~,「ピックアップ勧誘真夏の人魚姫」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [真夏の人魚姫]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223071503
2110010,ピックアップ勧誘~砂浜駆ける夏の海~,「ピックアップ勧誘砂浜駆ける夏の海」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [砂浜駆ける夏の海]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223073102
2110011,ピックアップ勧誘~砂浜駆ける夏の海~,「ピックアップ勧誘砂浜駆ける夏の海」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [砂浜駆ける夏の海]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223073102
2110012,ピックアップ勧誘~夏夜に咲き誇る花~,「ピックアップ勧誘夏夜に咲き誇る花」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [夏夜に咲き誇る花]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223081502
2110013,ピックアップ勧誘~夏夜に咲き誇る花~,「ピックアップ勧誘夏夜に咲き誇る花」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [夏夜に咲き誇る花]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223081502
2110014,ピックアップ勧誘~月夜に輝く尾花~,「ピックアップ勧誘月夜に輝く尾花」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [月夜に輝く尾花]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223083102
2110015,ピックアップ勧誘~月夜に輝く尾花~,「ピックアップ勧誘月夜に輝く尾花」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [月夜に輝く尾花]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223083102
2110016,ピックアップ勧誘~浴衣で涼む街めぐり~,「ピックアップ勧誘浴衣で涼む街めぐり」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [浴衣で涼む街めぐり]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223091502
2110017,ピックアップ勧誘~浴衣で涼む街めぐり~,「ピックアップ勧誘浴衣で涼む街めぐり」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [浴衣で涼む街めぐり]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223091502
2110018,ピックアップ勧誘Trick or Treat!,「ピックアップ勧誘Trick or Treat!」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Trick or Treat!]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223093002
2110019,ピックアップ勧誘Trick or Treat!,「ピックアップ勧誘Trick or Treat!」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Trick or Treat!]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223093002
2110020,ピックアップ勧誘Boo! Boo! ハロウィンランド~,「ピックアップ勧誘Boo! Boo! ハロウィンランド」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223101506
2110021,ピックアップ勧誘Boo! Boo! ハロウィンランド~,「ピックアップ勧誘Boo! Boo! ハロウィンランド」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223101506
2110022,ピックアップ勧誘~ひだまりのマーチングバンド~,「ピックアップ勧誘ひだまりのマーチングバンド」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ひだまりのマーチングバンド]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223103108
2110023,ピックアップ勧誘~ひだまりのマーチングバンド~,「ピックアップ勧誘ひだまりのマーチングバンド」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ひだまりのマーチングバンド]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223103108
2110024,ピックアップ勧誘~にゃんにゃん🐾メイドさん~,「ピックアップ勧誘にゃんにゃん🐾メイドさん」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [にゃんにゃん🐾メイドさん]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223111502
2110025,ピックアップ勧誘~にゃんにゃん🐾メイドさん~,「ピックアップ勧誘にゃんにゃん🐾メイドさん」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [にゃんにゃん🐾メイドさん]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223111502
2110026,ピックアップ勧誘みんなでMerryChristmas,「ピックアップ勧誘みんなでMerryChristmas」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [みんなでMerryChristmas]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223113009
2110027,ピックアップ勧誘みんなでMerryChristmas,「ピックアップ勧誘みんなでMerryChristmas」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [みんなでMerryChristmas]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223113009
2110028,ピックアップ勧誘~雪まつりのサンタクロース~,「ピックアップ勧誘雪まつりのサンタクロース」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [雪まつりのサンタクロース]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223121505
2110029,ピックアップ勧誘~雪まつりのサンタクロース~,「ピックアップ勧誘雪まつりのサンタクロース」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [雪まつりのサンタクロース]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223121505
2110030,ピックアップ勧誘~みんなへのあけましておめでとう~,「ピックアップ勧誘みんなへのあけましておめでとう」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [みんなへのあけましておめでとう]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223123102
2110031,ピックアップ勧誘~みんなへのあけましておめでとう~,「ピックアップ勧誘みんなへのあけましておめでとう」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [みんなへのあけましておめでとう]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223123102
2110032,ピックアップ勧誘~氷上のフェアリー~,「ピックアップ勧誘氷上のフェアリー」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [氷上のフェアリー]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224011502
2110033,ピックアップ勧誘~氷上のフェアリー~,「ピックアップ勧誘氷上のフェアリー」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [氷上のフェアリー]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224011502
2110034,ピックアップ勧誘~恋に囚われし乙女~,「ピックアップ勧誘恋に囚われし乙女」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [恋に囚われし乙女]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224013102
2110035,ピックアップ勧誘~恋に囚われし乙女~,「ピックアップ勧誘恋に囚われし乙女」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [恋に囚われし乙女]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224013102
2110036,ピックアップ勧誘~百鬼夜行の夜~,「ピックアップ勧誘百鬼夜行の夜」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [百鬼夜行の夜]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224021402
2110037,ピックアップ勧誘~百鬼夜行の夜~,「ピックアップ勧誘百鬼夜行の夜」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [百鬼夜行の夜]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224021402
2110038,ピックアップ勧誘Y2K♡GALS,「ピックアップ勧誘Y2K♡GALS」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Y2K♡GALS]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224030102
2110039,ピックアップ勧誘Y2K♡GALS,「ピックアップ勧誘Y2K♡GALS」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Y2K♡GALS]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224030102
3110001,かのんちゃんお誕生日記念勧誘~ハーモニースター~,「かのんちゃんお誕生日記念勧誘ハーモニースター」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [かのんちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223050101
3110002,愛ちゃんお誕生日記念勧誘~カラフルヒロインズ~,「愛ちゃんお誕生日記念勧誘カラフルヒロインズ」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [愛ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223053001
3110003,希ちゃんお誕生日記念勧誘~フラワーシャワー~,「希ちゃんお誕生日記念勧誘フラワーシャワー」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [希ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223060901
3110004,鞠莉ちゃんお誕生日記念勧誘~フェアリーウイング~,「鞠莉ちゃんお誕生日記念勧誘フェアリーウイング」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [鞠莉ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223061301
3110005,四季ちゃんお誕生日記念勧誘~ハーモニースター~,「四季ちゃんお誕生日記念勧誘ハーモニースター」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [四季ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223061701
3110006,果林ちゃんお誕生日記念勧誘~カラフルヒロインズ~,「果林ちゃんお誕生日記念勧誘カラフルヒロインズ」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [果林ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223062901
3110007,善子ちゃんお誕生日記念勧誘~フェアリーウイング~,「善子ちゃんお誕生日記念勧誘フェアリーウイング」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [善子ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223071301
3110008,可可ちゃんお誕生日記念勧誘~ハーモニースター~,「可可ちゃんお誕生日記念勧誘ハーモニースター」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [可可ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223071702
3110009,にこちゃんお誕生日記念勧誘~フラワーシャワー~,「にこちゃんお誕生日記念勧誘フラワーシャワー」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [にこちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223072201
3110010,千歌ちゃんお誕生日記念勧誘~フェアリーウイング~,「千歌ちゃんお誕生日記念勧誘フェアリーウイング」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [千歌ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223080102
3110011,穂乃果ちゃんお誕生日記念勧誘~フラワーシャワー~,「穂乃果ちゃんお誕生日記念勧誘フラワーシャワー」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [穂乃果ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223080303
3110012,夏美ちゃんお誕生日記念勧誘~ハーモニースター~,「夏美ちゃんお誕生日記念勧誘ハーモニースター」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [夏美ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223080701
3110013,せつ菜ちゃんお誕生日記念勧誘~カラフルヒロインズ~,「せつ菜ちゃんお誕生日記念勧誘カラフルヒロインズ」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [せつ菜ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223080801
3110014,ことりちゃんお誕生日記念勧誘~フラワーシャワー~,「ことりちゃんお誕生日記念勧誘フラワーシャワー」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ことりちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223091201
3110015,梨子ちゃんお誕生日記念勧誘~フェアリーウイング~,「梨子ちゃんお誕生日記念勧誘フェアリーウイング」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [梨子ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223091901
3110016,ルビィちゃんお誕生日記念勧誘~フェアリーウイング~,「ルビィちゃんお誕生日記念勧誘フェアリーウイング」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ルビィちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223092101
3110017,すみれちゃんお誕生日記念勧誘~ハーモニースター~,「すみれちゃんお誕生日記念勧誘ハーモニースター」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [すみれちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223092801
3110018,栞子ちゃんお誕生日記念勧誘~カラフルヒロインズ~,「栞子ちゃんお誕生日記念勧誘カラフルヒロインズ」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [栞子ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223100502
3110019,絵里ちゃんお誕生日記念勧誘~フラワーシャワー~,「絵里ちゃんお誕生日記念勧誘~フラワーシャワー~」は、μ'所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [絵里ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223102101
3110020,メイちゃんお誕生日記念勧誘~ハーモニースター~,「メイちゃんお誕生日記念勧誘ハーモニースター」は、Liella!所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [メイちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223102901
3110021,凛ちゃんお誕生日記念勧誘~フラワーシャワー~,「凛ちゃんお誕生日記念勧誘~フラワーシャワー~」は、μ'所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [凛ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223110101
3110022,璃奈ちゃんお誕生日記念勧誘~カラフルヒロインズ~,「璃奈ちゃんお誕生日記念勧誘カラフルヒロインズ」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [璃奈ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223111301
3110023,恋ちゃんお誕生日記念勧誘~ハーモニースター~,「恋ちゃんお誕生日記念勧誘ハーモニースター」は、Liella!所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [恋ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223112401
3110024,ミアちゃんお誕生日記念勧誘~カラフルヒロインズ~,「ミアちゃんお誕生日記念勧誘カラフルヒロインズ」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ミアちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223120601
3110025,彼方ちゃんお誕生日記念勧誘~カラフルヒロインズ~,「彼方ちゃんお誕生日記念勧誘カラフルヒロインズ」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [彼方ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223121601
3110026,冬毬ちゃんお誕生日記念勧誘~ハーモニースター~,「冬毬ちゃんお誕生日記念勧誘ハーモニースター」は、Liella!所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [冬毬ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223122801
3110027,ダイヤちゃんお誕生日記念勧誘~フェアリーウイング~,「ダイヤちゃんお誕生日記念勧誘フェアリーウイング」は、Aqours所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ダイヤちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224010103
3110028,花陽ちゃんお誕生日記念勧誘~フラワーシャワー~,「花陽ちゃんお誕生日記念勧誘~フラワーシャワー~」は、μ'所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [花陽ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224011702
3110029,マルガレーテちゃんお誕生日記念勧誘~ハーモニースター~,「マルガレーテちゃんお誕生日記念勧誘ハーモニースター」は、Liella!所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [マルガレーテちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224012002
3110030,かすみちゃんお誕生日記念勧誘~カラフルヒロインズ~,「かすみちゃんお誕生日記念勧誘カラフルヒロインズ」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [かすみちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224012302
3110031,エマちゃんお誕生日記念勧誘~カラフルヒロインズ~,「エマちゃんお誕生日記念勧誘カラフルヒロインズ」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [エマちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224020502
3110032,果南ちゃんお誕生日記念勧誘~フェアリーウイング~,「果南ちゃんお誕生日記念勧誘フェアリーウイング」は、Aqours所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [果南ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224021004
3110033,嵐珠ちゃんお誕生日記念勧誘~カラフルヒロインズ~,「嵐珠ちゃんお誕生日記念勧誘カラフルヒロインズ」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [嵐珠ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224021502
3110034,千砂都ちゃんお誕生日記念勧誘~ハーモニースター~,「千砂都ちゃんお誕生日記念勧誘ハーモニースター」は、Liella!所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [千砂都ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224022502
3110035,歩夢ちゃんお誕生日記念勧誘~カラフルヒロインズ~,「歩夢ちゃんお誕生日記念勧誘カラフルヒロインズ」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント[歩夢ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224030107
3110036,花丸ちゃんお誕生日記念勧誘~フェアリーウイング~,「花丸ちゃんお誕生日記念勧誘フェアリーウイング」は、Aqours所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント[花丸ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224030402
3110037,海未ちゃんお誕生日記念勧誘~フラワーシャワー~,「海未ちゃんお誕生日記念勧誘~フラワーシャワー~」は、μ'所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [海未ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224031502
4110001,スマイル限定!ピックアップ勧誘,「スマイル限定ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [属性ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223061103
4110002,ピュア限定!ピックアップ勧誘,「ピュア限定ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [属性ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223061103
4110003,クール限定!ピックアップ勧誘,「クール限定ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [属性ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223061103
4110004,スクフェスシリーズ感謝祭2023記念 UR確定勧誘,「スクフェスシリーズ感謝祭2023記念 UR確定勧誘」は、有償ラブカ3000個で実施でき、UR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個,223062301
4110005,ラブソングカーニバル記念勧誘~歩夢編~,「ラブソングカーニバル記念勧誘歩夢編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 歩夢編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223100301
4110006,ラブソングカーニバル記念勧誘~かすみ編~,「ラブソングカーニバル記念勧誘かすみ編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル かすみ編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223101001
4110007,ラブソングカーニバル記念勧誘~しずく編~,「ラブソングカーニバル記念勧誘しずく編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル しずく編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223101701
4110008,ラブソングカーニバル記念勧誘~果林編~,「ラブソングカーニバル記念勧誘果林編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 果林編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223102401
4110009,ラブソングカーニバル記念勧誘~愛編~,「ラブソングカーニバル記念勧誘愛編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 愛編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223103101
4110010,ラブソングカーニバル記念勧誘~彼方編~,「ラブソングカーニバル記念勧誘彼方編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 彼方編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223110701
4110011,ラブソングカーニバル記念勧誘~せつ菜編~,「ラブソングカーニバル記念勧誘せつ菜編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル せつ菜編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223111401
4110012,ラブソングカーニバル記念勧誘~エマ編~,「ラブソングカーニバル記念勧誘エマ編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル エマ編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223112101
4110013,ラブソングカーニバル記念勧誘~璃奈編~,「ラブソングカーニバル記念勧誘璃奈編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 璃奈編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223112801
4110014,ラブソングカーニバル記念勧誘~栞子編~,「ラブソングカーニバル記念勧誘栞子編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 栞子編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223120501
4110015,ラブソングカーニバル記念勧誘~ミア編~,「ラブソングカーニバル記念勧誘ミア編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル ミア編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223121201
4110016,ラブソングカーニバル記念勧誘~嵐珠編~,「ラブソングカーニバル記念勧誘嵐珠編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 嵐珠編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223121901
4110017,最大100回無料Half Anniversary記念勧誘,「最大100回無料Half Anniversary記念勧誘」は1日1回のみ、期間中最大10回まで実施できます。<br>また、R以上の部員が加入します。<br><br>「10回勧誘」は無償で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223101501
4110019,UR確定 Half Anniversary記念勧誘μ's編,「UR確定 Half Anniversary記念勧誘μ's編」は、有償ラブカ3000個で実施でき、μ's所属のUR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223101502
4110020,UR確定 Half Anniversary記念勧誘Aqours編,「UR確定 Half Anniversary記念勧誘Aqours編」は、有償ラブカ3000個で実施でき、Aqours所属のUR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223101502
4110021,UR確定 Half Anniversary記念勧誘虹ヶ咲編,「UR確定 Half Anniversary記念勧誘虹ヶ咲編」は、有償ラブカ3000個で実施でき、虹ヶ咲学園スクールアイドル同好会所属のUR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223101502
4110022,UR確定 Half Anniversary記念勧誘Liella!編~,「UR確定 Half Anniversary記念勧誘Liella!編」は、有償ラブカ3000個で実施でき、Liella!所属のUR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223101502
4110023,私のラブソング編 開幕記念勧誘,「私のラブソング編 開幕記念勧誘」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [私のラブソング編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223090603
4110024,μ's限定ピックアップ勧誘,「μ's限定ピックアップ勧誘」は、μ'所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [μ's ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223103111
4110025,Aqours限定ピックアップ勧誘,「Aqours限定ピックアップ勧誘」は、Aqours所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Aqours ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223111508
4110026,UR確定 Half Anniversary記念勧誘後夜祭,「UR確定 Half Anniversary記念勧誘後夜祭」は、有償ラブカ3000個で実施でき、UR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ひだまりのマーチングバンド]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223103112
4110027,幻日のヨハネ -The Story of the Sound of Heart- 開催記念勧誘,「幻日のヨハネ -The Story of the Sound of Heart- 開催記念勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [幻日のヨハネ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223121402
4110028,1年生限定ピックアップ勧誘,「1年生限定ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [1年生ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223111702
4110029,2年生限定ピックアップ勧誘,「2年生限定ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [2年生ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223112404
4110030,3年生限定ピックアップ勧誘,「3年生限定ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [3年生ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223120103
4110031,異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘Aqours編,「異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘Aqours編」は、Aqours所属のR以上の部員が必ず登場します。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個,223120907
4110032,異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘~ニジガク編~,「異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘ニジガク編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個,223120908
4110033,異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘Liella!編~,「異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘Liella!編」は、Liella!所属のR以上の部員が必ず登場します。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個,223120909
4110034,最大240回無料年末年始記念勧誘,「最大240回無料年末年始記念勧誘」は1日3回まで、期間中最大24回まで実施できます。<br>また、R以上の部員が加入します。<br><br>「10回勧誘」は無償で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [年末年始記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223122604
4110035,UR確定年末年始記念勧誘,「UR確定年末年始記念勧誘」は、有償ラブカ3000個で実施でき、UR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [年末年始記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,223122604
4110036,新春初夢記念勧誘,「新春初夢記念勧誘」は、R以上の部員が必ず登場します。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [新春記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224010105
4110037,UR確定新春初夢記念勧誘,「UR確定新春初夢記念勧誘」は、有償ラブカ3000個で実施でき、UR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [新春記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224010105
4110038,ラブソングカーニバル記念勧誘,「ラブソングカーニバル記念勧誘」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224011304
4110039,スクフェス2 大感謝勧誘~μ's編,「スクフェス2 大感謝勧誘~μ's編」は、μ'所属のR以上の部員が必ず登場します。<br>「スクフェス2 大感謝勧誘~μ's編」は、「10回勧誘チケットスクフェス2 大感謝勧誘)」で実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [大感謝勧誘]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224030109
4110040,スクフェス2 大感謝勧誘Aqours編,「スクフェス2 大感謝勧誘Aqours編」は、Aqours所属のR以上の部員が必ず登場します。<br>「スクフェス2 大感謝勧誘Aqours編」は、「10回勧誘チケットスクフェス2 大感謝勧誘)」で実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [大感謝勧誘]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224030109
4110041,スクフェス2 大感謝勧誘~ニジガク編~,「スクフェス2 大感謝勧誘ニジガク編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「スクフェス2 大感謝勧誘ニジガク編」は、「10回勧誘チケットスクフェス2 大感謝勧誘)」で実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [大感謝勧誘]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224030109
4110042,スクフェス2 大感謝勧誘Liella!編~,「スクフェス2 大感謝勧誘Liella!編」は、Liella!所属のR以上の部員が必ず登場します。<br>「スクフェス2 大感謝勧誘Liella!編」は、「10回勧誘チケットスクフェス2 大感謝勧誘)」で実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [大感謝勧誘]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224030109
4110043,スペシャル勧誘,「スペシャル勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [スペシャル勧誘]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,224031602
4110044,スクールアイドル感謝祭 全員集合勧誘,「スクールアイドル感謝祭 全員集合勧誘」は、R以上の部員が必ず登場します。<br>「10回勧誘」は、ラブカ3000個で毎日1回まで実施できます。<br>「有償10回勧誘」は、有償ラブカ3000個で実施できます。<br>「有償1回勧誘」は、有償ラブカ50個で毎日3回まで実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個,224032003
5110001,全部員大集合!ステップアップ勧誘,「全部員大集合ステップアップ勧誘」は、STEPが進むごとに内容が変化するお得な勧誘です。<br>勧誘で入手可能な全部員R・SR・URが登場します。<br>各STEPは10回勧誘で、STEPごとに必要なラブカの個数と確定枠が変化します。<br>・STEP 1ラブカ500個SR以上1人確定<br>・STEP 2ラブカ1000個SR以上1人確定・UR確率アップ<br>・STEP 3ラブカ1500個SR以上1人確定・UR確率アップ<br>・STEP 4ラブカ2000個SR以上1人確定・UR確率大アップ<br>・STEP 5ラブカ2500個UR部員1人確定<br><br>STEP 5の実施後は、再びSTEP 1から繰り返し実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個,1
7110002,スクフェスデータ連携特典 チケット勧誘,「スクフェスデータ連携特典 チケット勧誘」は、R以上の部員が必ず登場します。<br>「10回勧誘」は、「10回勧誘チケットスクフェスデータ連携特典」で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [リリース記念] 」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。,223043003
7110003,スクスタデータ連携特典 チケット勧誘,「スクスタデータ連携特典 チケット勧誘」は、R以上の部員が必ず登場します。<br>「10回勧誘」は、「10回勧誘チケットスクフェスデータ連携特典」で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [リリース記念] 」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。,223071202
8110001,アイテム勧誘,毎日1回、「アイテム勧誘」を実施できます。<br>「アイテム勧誘」は毎日0時にリセットされます。<br><br>「アイテム勧誘」では、以下のアイテムからランダムで10個登場します。<br>・ペンライト×10個<br>・LPキャンディ[小]×1個<br>・レッスンート×20個<br>・レッスンート×8個<br>・レッスンート×1個<br>・スキルブック×18個<br>・スキルブック×3個<br>・35000ゴールド,1
8110002,アイテム勧誘,毎日1回、「アイテム勧誘」を実施できます。<br>「アイテム勧誘」は毎日0時にリセットされます。<br><br>「アイテム勧誘」では、以下のアイテムからランダムで10個登場します。<br>・ペンライト×10個<br>・LPキャンディ[小]×1個<br>・レッスンート×20個<br>・レッスンート×8個<br>・レッスンート×1個<br>・スキルブック×18個<br>・スキルブック×3個<br>・35000ゴールド,223101604
8110004,アイテム勧誘,毎日1回、「アイテム勧誘」を実施できます。<br>「アイテム勧誘」は毎日0時にリセットされます。<br><br>「アイテム勧誘」では、以下のアイテムからランダムで10個登場します。<br>・ペンライト×10個<br>・LPキャンディ[小]×1個<br>・レッスンート×20個<br>・レッスンート×8個<br>・レッスンート×1個<br>・スキルブック×18個<br>・スキルブック×3個<br>・35000ゴールド,224010108
8110005,アイテム勧誘,毎日1回、「アイテム勧誘」を実施できます。<br>「アイテム勧誘」は毎日0時にリセットされます。<br><br>「アイテム勧誘」では、以下のアイテムからランダムで10個登場します。<br>・ペンライト×10個<br>・LPキャンディ[小]×1個<br>・レッスンート×20個<br>・レッスンート×8個<br>・レッスンート×1個<br>・スキルブック×18個<br>・スキルブック×3個<br>・35000ゴールド,224020106
8110006,アイテム勧誘,毎日1回、「アイテム勧誘」を実施できます。<br>「アイテム勧誘」は毎日0時にリセットされます。<br><br>「アイテム勧誘」では、以下のアイテムからランダムで10個登場します。<br>・ペンライト×10個<br>・LPキャンディ[小]×1個<br>・レッスンート×20個<br>・レッスンート×8個<br>・レッスンート×1個<br>・スキルブック×18個<br>・スキルブック×3個<br>・35000ゴールド,224030121
9110001,チュートリアル勧誘【高坂 穂乃果】,「チュートリアル勧誘【高坂 穂乃果】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「高坂穂乃果【満開の桜】 」が必ず加入します。,1
9110002,チュートリアル勧誘【絢瀬 絵里】,「チュートリアル勧誘【絢瀬 絵里】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「絢瀬絵里【夕暮れの生徒会室】 」が必ず加入します。,1
9110003,チュートリアル勧誘【南 ことり】,「チュートリアル勧誘【南 ことり】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「南 ことり【いらっしゃいませ♪】 」が必ず加入します。,1
9110004,チュートリアル勧誘【園田 海未】,「チュートリアル勧誘【園田 海未】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「園田海未【無心へと】 」が必ず加入します。,1
9110005,チュートリアル勧誘【星空 凛】,「チュートリアル勧誘【星空 凛】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「星空 凛【きらめく屋上】 」が必ず加入します。,1
9110006,チュートリアル勧誘【西木野 真姫】,「チュートリアル勧誘【西木野 真姫】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「西木野真姫【スマホ越しのはにかみ】 」が必ず加入します。,1
9110007,チュートリアル勧誘【東條 希】,「チュートリアル勧誘【東條 希】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「東條 希【降り注ぐ光】 」が必ず加入します。,1
9110008,チュートリアル勧誘【小泉 花陽】,「チュートリアル勧誘【小泉 花陽】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「小泉花陽【µ'sへの想い】 」が必ず加入します。,1
9110009,チュートリアル勧誘【矢澤 にこ】,「チュートリアル勧誘【矢澤 にこ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「矢澤にこ【ありがたい講義】 」が必ず加入します。,1
9110010,チュートリアル勧誘【高海 千歌】,「チュートリアル勧誘【高海 千歌】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「高海千歌【練習帰りの談笑】 」が必ず加入します。,1
9110011,チュートリアル勧誘【桜内 梨子】,「チュートリアル勧誘【桜内 梨子】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「桜内梨子【トリオの旋律】 」が必ず加入します。,1
9110012,チュートリアル勧誘【松浦 果南】,「チュートリアル勧誘【松浦 果南】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「松浦果南【頬を撫でる潮風】 」が必ず加入します。,1
9110013,チュートリアル勧誘【黒澤 ダイヤ】,「チュートリアル勧誘【黒澤 ダイヤ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「黒澤ダイヤ【姉の日課】 」が必ず加入します。,1
9110014,チュートリアル勧誘【渡辺 曜】,「チュートリアル勧誘【渡辺 曜】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「渡辺 曜【耀う水面】 」が必ず加入します。,1
9110015,チュートリアル勧誘【津島 善子】,「チュートリアル勧誘【津島 善子】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「津島善子【堕天使じゃんけん】 」が必ず加入します。,1
9110016,チュートリアル勧誘【国木田 花丸】,「チュートリアル勧誘【国木田 花丸】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「国木田花丸【アフターランチ】 」が必ず加入します。,1
9110017,チュートリアル勧誘【小原 鞠莉】,「チュートリアル勧誘【小原 鞠莉】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「小原鞠莉【風光明媚】 」が必ず加入します。,1
9110018,チュートリアル勧誘【黒澤 ルビィ】,「チュートリアル勧誘【黒澤 ルビィ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「黒澤ルビィ【おねぼうさん】 」が必ず加入します。,1
9110019,チュートリアル勧誘【上原 歩夢】,「チュートリアル勧誘【上原 歩夢】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「上原歩夢【隣にいるよ】 」が必ず加入します。,1
9110020,チュートリアル勧誘【中須 かすみ】,「チュートリアル勧誘【中須 かすみ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「中須かすみ【レインボーコッペパン】 」が必ず加入します。,1
9110021,チュートリアル勧誘【桜坂 しずく】,「チュートリアル勧誘【桜坂 しずく】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「桜坂しずく【素の自分で】 」が必ず加入します。,1
9110022,チュートリアル勧誘【朝香 果林】,「チュートリアル勧誘【朝香 果林】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「朝香果林【クオリティの追求】 」が必ず加入します。,1
9110023,チュートリアル勧誘【宮下 愛】,「チュートリアル勧誘【宮下 愛】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「宮下 愛【チェンジオブペース】 」が必ず加入します。,1
9110024,チュートリアル勧誘【近江 彼方】,「チュートリアル勧誘【近江 彼方】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「近江彼方【姉妹の食卓】 」が必ず加入します。,1
9110025,チュートリアル勧誘【優木 せつ菜】,「チュートリアル勧誘【優木 せつ菜】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「優木せつ菜【大好きを伝えたい】 」が必ず加入します。,1
9110026,チュートリアル勧誘【エマ・ヴェルデ】,「チュートリアル勧誘【エマ・ヴェルデ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「エマ・ヴェルデ【爽やかな木漏れ日】 」が必ず加入します。,1
9110027,チュートリアル勧誘【天王寺 璃奈】,「チュートリアル勧誘【天王寺 璃奈】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「天王寺璃奈【お散歩役員のお世話】 」が必ず加入します。,1
9110028,チュートリアル勧誘【三船 栞子】,「チュートリアル勧誘【三船 栞子】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「三船栞子【精進あるのみ】 」が必ず加入します。,1
9110029,チュートリアル勧誘【ミア・テイラー】,「チュートリアル勧誘【ミア・テイラー】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「ミア・テイラー【渾身の作曲】 」が必ず加入します。,1
9110030,チュートリアル勧誘【鐘 嵐珠】,「チュートリアル勧誘【鐘 嵐珠】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「鐘 嵐珠【ライバルで仲間】 」が必ず加入します。,1
9110031,チュートリアル勧誘【澁谷 かのん】,「チュートリアル勧誘【澁谷 かのん】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「澁谷かのん【想いを胸に】 」が必ず加入します。,1
9110032,チュートリアル勧誘【唐 可可】,「チュートリアル勧誘【唐 可可】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「唐 可可【衣装スタイリスト】 」が必ず加入します。,1
9110033,チュートリアル勧誘【嵐 千砂都】,「チュートリアル勧誘【嵐 千砂都】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「嵐 千砂都【先輩のステップ】 」が必ず加入します。,1
9110034,チュートリアル勧誘【平安名 すみれ】,「チュートリアル勧誘【平安名 すみれ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「平安名すみれ【両腕いっぱい】 」が必ず加入します。,1
9110035,チュートリアル勧誘【葉月 恋】,「チュートリアル勧誘【葉月 恋】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「葉月 恋【母の残した結ヶ丘】 」が必ず加入します。,1
9110036,チュートリアル勧誘【桜小路 きな子】,「チュートリアル勧誘【桜小路 きな子】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「桜小路きな子【地上メートル】 」が必ず加入します。,1
9110037,チュートリアル勧誘【米女 メイ】,「チュートリアル勧誘【米女 メイ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「米女メイ【コンプリート目前】 」が必ず加入します。,1
9110038,チュートリアル勧誘【若菜 四季】,「チュートリアル勧誘【若菜 四季】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「若菜四季【放課後の科学室】 」が必ず加入します。,1
9110039,チュートリアル勧誘【鬼塚 夏美】,「チュートリアル勧誘【鬼塚 夏美】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「鬼塚夏美【オニナッツ生配信中】 」が必ず加入します。,1
_id,_infoText,_detailText,_infoTextEn,_detailTextEn,_masterReleaseLabelId
1110001,リリース記念勧誘,「リリース記念勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [リリース記念] 」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br>リリース記念勧誘で入手できる「勧誘ポイント」は、以下の勧誘でも入手できます。<br>・UR確定 リリース記念勧誘<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Release Celebration Scout,"Release Celebration Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Release Celebration] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br>Scout Points obtainable in the Release Celebration Scout can also be earned in the following Scout:<br>- Guaranteed UR! Release Celebration Scout<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223041501
1110002,UR確定 リリース記念勧誘,「UR確定 リリース記念勧誘」は、有償ラブカ3000個で実施でき、UR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [リリース記念] 」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br>UR確定 リリース記念勧誘で入手できる「勧誘ポイント」は、以下の勧誘でも入手できます。<br>・リリース記念勧誘<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Guaranteed UR Release Celebration Scout,"The Guaranteed UR! Release Celebration Scout costs 3,000 Paid Loveca and guarantees one UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Release Celebration] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br>Scout Points obtainable in the Guaranteed UR! Release Celebration Scout can also be earned in the following Scout:<br>- Release Celebration Scout<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223041501
1110003,ピックアップ勧誘放課後の原宿Liella!♡~,「ピックアップ勧誘放課後の原宿Liella!♡」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [放課後の原宿Liella!♡] 」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: After-School Harajuku Liella! ♡,"Spotlight Scout: After-School Harajuku Liella!♡ always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [After-School Harajuku Liella!♡] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223041901
1110004,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223043001
1110005,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223051501
1110006,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223053101
1110007,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223061501
1110008,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223063001
1110009,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223071502
1110010,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223073101
1110011,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223081501
1110012,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223083107
1110013,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223091501
1110014,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223093001
1110015,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223101505
1110016,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223103107
1110017,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223111501
1110018,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223113008
1110019,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223121513
1110020,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223123107
1110021,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224011508
1110022,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224013108
1110023,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224021409
1110024,通常勧誘,「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Normal Scout,"Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224030120
2110001,ピックアップ勧誘~わたしたちとこの街~,「ピックアップ勧誘わたしたちとこの街」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [わたしたちとこの街]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Us and This City,"Spotlight Scout: Us and This Town always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Us and This Town] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223043002
2110002,ピックアップ勧誘~商店街をアピールだ!~,「ピックアップ勧誘商店街をアピールだ」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [商店街をアピールだ!]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Let's Promote the Shopping District!,"Spotlight Scout: Show Off the Shopping District! always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Show Off the Shopping District!] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223051502
2110003,ピックアップ勧誘Live in Nature,「ピックアップ勧誘Live in Nature」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Live in Nature]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Live in Nature,"Spotlight Scout: Live in Nature always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Live in Nature] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223053102
2110004,ピックアップ勧誘~煌めく踊り子~,「ピックアップ勧誘煌めく踊り子」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [煌めく踊り子]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Glittering Dancers,"Spotlight Scout: Glittering Dancer always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Glittering Dancer] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223061502
2110005,ピックアップ勧誘~煌めく踊り子~,「ピックアップ勧誘煌めく踊り子」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [煌めく踊り子]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Glittering Dancers,"Spotlight Scout: Glittering Dancer always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Glittering Dancer] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223061502
2110006,ピックアップ勧誘~太陽降り注ぐ夏合宿~,「ピックアップ勧誘太陽降り注ぐ夏合宿」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [太陽降り注ぐ夏合宿]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Sun-Soaked Summer Camp,"Spotlight Scout: Sun-Drenched Summer Camp always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Sun-Drenched Summer Camp] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223063002
2110007,ピックアップ勧誘~太陽降り注ぐ夏合宿~,「ピックアップ勧誘太陽降り注ぐ夏合宿」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [太陽降り注ぐ夏合宿]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Sun-Soaked Summer Camp,"Spotlight Scout: Sun-Drenched Summer Camp always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Sun-Drenched Summer Camp] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223063002
2110008,ピックアップ勧誘~真夏の人魚姫~,「ピックアップ勧誘真夏の人魚姫」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [真夏の人魚姫]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Midsummer Mermaid Princess,"Spotlight Scout: Midsummer Mermaid Princess always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Midsummer Mermaid Princess] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223071503
2110009,ピックアップ勧誘~真夏の人魚姫~,「ピックアップ勧誘真夏の人魚姫」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [真夏の人魚姫]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Midsummer Mermaid Princess,"Spotlight Scout: Midsummer Mermaid Princess always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Midsummer Mermaid Princess] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223071503
2110010,ピックアップ勧誘~砂浜駆ける夏の海~,「ピックアップ勧誘砂浜駆ける夏の海」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [砂浜駆ける夏の海]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Racing Across the Summer Shore,"Spotlight Scout: Running Along the Summer Shore always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Running Along the Summer Shore] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223073102
2110011,ピックアップ勧誘~砂浜駆ける夏の海~,「ピックアップ勧誘砂浜駆ける夏の海」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [砂浜駆ける夏の海]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Racing Across the Summer Shore,"Spotlight Scout: Running Along the Summer Shore always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Running Along the Summer Shore] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223073102
2110012,ピックアップ勧誘~夏夜に咲き誇る花~,「ピックアップ勧誘夏夜に咲き誇る花」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [夏夜に咲き誇る花]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Flowers Blooming in the Summer Night,"Spotlight Scout: Flowers Blooming on a Summer Night always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Flowers Blooming on a Summer Night] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223081502
2110013,ピックアップ勧誘~夏夜に咲き誇る花~,「ピックアップ勧誘夏夜に咲き誇る花」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [夏夜に咲き誇る花]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Flowers Blooming in the Summer Night,"Spotlight Scout: Flowers Blooming on a Summer Night always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Flowers Blooming on a Summer Night] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223081502
2110014,ピックアップ勧誘~月夜に輝く尾花~,「ピックアップ勧誘月夜に輝く尾花」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [月夜に輝く尾花]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Silvergrass in the Moonlight,"Spotlight Scout: Silver Grass Glowing in the Moonlight always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Silver Grass Glowing in the Moonlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223083102
2110015,ピックアップ勧誘~月夜に輝く尾花~,「ピックアップ勧誘月夜に輝く尾花」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [月夜に輝く尾花]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Silvergrass in the Moonlight,"Spotlight Scout: Silver Grass Glowing in the Moonlight always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Silver Grass Glowing in the Moonlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223083102
2110016,ピックアップ勧誘~浴衣で涼む街めぐり~,「ピックアップ勧誘浴衣で涼む街めぐり」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [浴衣で涼む街めぐり]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Summer Stroll in Yukata,"Spotlight Scout: Strolling the Town in a Yukata always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Strolling the Town in a Yukata] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223091502
2110017,ピックアップ勧誘~浴衣で涼む街めぐり~,「ピックアップ勧誘浴衣で涼む街めぐり」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [浴衣で涼む街めぐり]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Summer Stroll in Yukata,"Spotlight Scout: Strolling the Town in a Yukata always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Strolling the Town in a Yukata] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223091502
2110018,ピックアップ勧誘Trick or Treat!,「ピックアップ勧誘Trick or Treat!」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Trick or Treat!]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Trick or Treat!,"Spotlight Scout: Trick or Treat! always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Trick or Treat!] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223093002
2110019,ピックアップ勧誘Trick or Treat!,「ピックアップ勧誘Trick or Treat!」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Trick or Treat!]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Trick or Treat!,"Spotlight Scout: Trick or Treat! always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Trick or Treat!] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223093002
2110020,ピックアップ勧誘Boo! Boo! ハロウィンランド~,「ピックアップ勧誘Boo! Boo! ハロウィンランド」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Boo! Boo! Halloween Land,"Spotlight Scout: Boo! Boo! Halloween Land always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Half Anniversary] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223101506
2110021,ピックアップ勧誘Boo! Boo! ハロウィンランド~,「ピックアップ勧誘Boo! Boo! ハロウィンランド」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Boo! Boo! Halloween Land,"Spotlight Scout: Boo! Boo! Halloween Land always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Half Anniversary] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223101506
2110022,ピックアップ勧誘~ひだまりのマーチングバンド~,「ピックアップ勧誘ひだまりのマーチングバンド」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ひだまりのマーチングバンド]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Sunny Marching Band,"Spotlight Scout: Sunlit Marching Band always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Sunlit Marching Band] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223103108
2110023,ピックアップ勧誘~ひだまりのマーチングバンド~,「ピックアップ勧誘ひだまりのマーチングバンド」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ひだまりのマーチングバンド]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Sunny Marching Band,"Spotlight Scout: Sunlit Marching Band always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Sunlit Marching Band] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223103108
2110024,ピックアップ勧誘~にゃんにゃん🐾メイドさん~,「ピックアップ勧誘にゃんにゃん🐾メイドさん」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [にゃんにゃん🐾メイドさん]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Nya-Nya 🐾 Maids,"Spotlight Scout: Nyan-Nyan🐾 Maids always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Nyan-Nyan🐾 Maids] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223111502
2110025,ピックアップ勧誘~にゃんにゃん🐾メイドさん~,「ピックアップ勧誘にゃんにゃん🐾メイドさん」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [にゃんにゃん🐾メイドさん]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Nya-Nya 🐾 Maids,"Spotlight Scout: Nyan-Nyan🐾 Maids always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Nyan-Nyan🐾 Maids] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223111502
2110026,ピックアップ勧誘みんなでMerryChristmas,「ピックアップ勧誘みんなでMerryChristmas」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [みんなでMerryChristmas]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,"Spotlight Scout: Merry Christmas, Everyone!","Spotlight Scout: Merry Christmas Together! always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Merry Christmas Together!] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223113009
2110027,ピックアップ勧誘みんなでMerryChristmas,「ピックアップ勧誘みんなでMerryChristmas」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [みんなでMerryChristmas]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,"Spotlight Scout: Merry Christmas, Everyone!","Spotlight Scout: Merry Christmas Together! always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Merry Christmas Together!] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223113009
2110028,ピックアップ勧誘~雪まつりのサンタクロース~,「ピックアップ勧誘雪まつりのサンタクロース」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [雪まつりのサンタクロース]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Santa Claus at the Snow Festival,"Spotlight Scout: Santa Claus at the Snow Festival always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Santa Claus at the Snow Festival] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223121505
2110029,ピックアップ勧誘~雪まつりのサンタクロース~,「ピックアップ勧誘雪まつりのサンタクロース」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [雪まつりのサンタクロース]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Santa Claus at the Snow Festival,"Spotlight Scout: Santa Claus at the Snow Festival always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Santa Claus at the Snow Festival] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223121505
2110030,ピックアップ勧誘~みんなへのあけましておめでとう~,「ピックアップ勧誘みんなへのあけましておめでとう」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [みんなへのあけましておめでとう]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Happy New Year to Everyone!,"Spotlight Scout: Happy New Year to Everyone always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Happy New Year to Everyone] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223123102
2110031,ピックアップ勧誘~みんなへのあけましておめでとう~,「ピックアップ勧誘みんなへのあけましておめでとう」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [みんなへのあけましておめでとう]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Happy New Year to Everyone!,"Spotlight Scout: Happy New Year to Everyone always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Happy New Year to Everyone] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223123102
2110032,ピックアップ勧誘~氷上のフェアリー~,「ピックアップ勧誘氷上のフェアリー」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [氷上のフェアリー]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Fairy on Ice,"Spotlight Scout: Fairy on the Ice always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Fairy on the Ice] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224011502
2110033,ピックアップ勧誘~氷上のフェアリー~,「ピックアップ勧誘氷上のフェアリー」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [氷上のフェアリー]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Fairy on Ice,"Spotlight Scout: Fairy on the Ice always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Fairy on the Ice] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224011502
2110034,ピックアップ勧誘~恋に囚われし乙女~,「ピックアップ勧誘恋に囚われし乙女」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [恋に囚われし乙女]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Maidens Captivated by Love,"Spotlight Scout: Maiden Captivated by Love always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Maiden Captivated by Love] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224013102
2110035,ピックアップ勧誘~恋に囚われし乙女~,「ピックアップ勧誘恋に囚われし乙女」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [恋に囚われし乙女]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Maidens Captivated by Love,"Spotlight Scout: Maiden Captivated by Love always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Maiden Captivated by Love] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224013102
2110036,ピックアップ勧誘~百鬼夜行の夜~,「ピックアップ勧誘百鬼夜行の夜」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [百鬼夜行の夜]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Night of the Hundred Demons,"Spotlight Scout: Night of the Hundred Demons always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Night of the Hundred Demons] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224021402
2110037,ピックアップ勧誘~百鬼夜行の夜~,「ピックアップ勧誘百鬼夜行の夜」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [百鬼夜行の夜]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Night of the Hundred Demons,"Spotlight Scout: Night of the Hundred Demons always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Night of the Hundred Demons] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224021402
2110038,ピックアップ勧誘Y2K♡GALS,「ピックアップ勧誘Y2K♡GALS」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Y2K♡GALS]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Y2K♡GALS,"Spotlight Scout: Y2K♡GALS always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Y2K♡GALS] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224030102
2110039,ピックアップ勧誘Y2K♡GALS,「ピックアップ勧誘Y2K♡GALS」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Y2K♡GALS]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Spotlight Scout: Y2K♡GALS,"Spotlight Scout: Y2K♡GALS always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Y2K♡GALS] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224030102
3110001,かのんちゃんお誕生日記念勧誘~ハーモニースター~,「かのんちゃんお誕生日記念勧誘ハーモニースター」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [かのんちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Kanon's Birthday Scout: Harmony Star,"Kanon's Birthday Celebration Scout: Harmony Star always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Kanon's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223050101
3110002,愛ちゃんお誕生日記念勧誘~カラフルヒロインズ~,「愛ちゃんお誕生日記念勧誘カラフルヒロインズ」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [愛ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Ai's Birthday Scout: Colorful Heroines,"Ai's Birthday Celebration Scout: Colorful Heroines always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Ai's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223053001
3110003,希ちゃんお誕生日記念勧誘~フラワーシャワー~,「希ちゃんお誕生日記念勧誘フラワーシャワー」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [希ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Nozomi's Birthday Scout: Flower Shower,"Nozomi's Birthday Celebration Scout: Flower Shower always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Nozomi's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223060901
3110004,鞠莉ちゃんお誕生日記念勧誘~フェアリーウイング~,「鞠莉ちゃんお誕生日記念勧誘フェアリーウイング」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [鞠莉ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Mari's Birthday Scout: Fairy Wing,"Mari's Birthday Celebration Scout: Fairy Wing always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Mari's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223061301
3110005,四季ちゃんお誕生日記念勧誘~ハーモニースター~,「四季ちゃんお誕生日記念勧誘ハーモニースター」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [四季ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Shiki's Birthday Scout: Harmony Star,"Shiki's Birthday Celebration Scout: Harmony Star always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Shiki's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223061701
3110006,果林ちゃんお誕生日記念勧誘~カラフルヒロインズ~,「果林ちゃんお誕生日記念勧誘カラフルヒロインズ」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [果林ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Karin's Birthday Scout: Colorful Heroines,"Karin's Birthday Celebration Scout: Colorful Heroines always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Karin's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223062901
3110007,善子ちゃんお誕生日記念勧誘~フェアリーウイング~,「善子ちゃんお誕生日記念勧誘フェアリーウイング」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [善子ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Yoshiko's Birthday Scout: Fairy Wing,"Yoshiko's Birthday Celebration Scout: Fairy Wing always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Yoshiko's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223071301
3110008,可可ちゃんお誕生日記念勧誘~ハーモニースター~,「可可ちゃんお誕生日記念勧誘ハーモニースター」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [可可ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Keke's Birthday Scout: Harmony Star,"Keke's Birthday Celebration Scout: Harmony Star always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Keke's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223071702
3110009,にこちゃんお誕生日記念勧誘~フラワーシャワー~,「にこちゃんお誕生日記念勧誘フラワーシャワー」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [にこちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Nico's Birthday Scout: Flower Shower,"Nico's Birthday Celebration Scout: Flower Shower always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Nico's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223072201
3110010,千歌ちゃんお誕生日記念勧誘~フェアリーウイング~,「千歌ちゃんお誕生日記念勧誘フェアリーウイング」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [千歌ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Chika's Birthday Scout: Fairy Wing,"Chika's Birthday Celebration Scout: Fairy Wing always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Chika's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223080102
3110011,穂乃果ちゃんお誕生日記念勧誘~フラワーシャワー~,「穂乃果ちゃんお誕生日記念勧誘フラワーシャワー」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [穂乃果ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Honoka's Birthday Scout: Flower Shower,"Honoka's Birthday Celebration Scout: Flower Shower always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Honoka's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223080303
3110012,夏美ちゃんお誕生日記念勧誘~ハーモニースター~,「夏美ちゃんお誕生日記念勧誘ハーモニースター」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [夏美ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Natsumi's Birthday Scout: Harmony Star,"Natsumi's Birthday Celebration Scout: Harmony Star always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Natsumi's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223080701
3110013,せつ菜ちゃんお誕生日記念勧誘~カラフルヒロインズ~,「せつ菜ちゃんお誕生日記念勧誘カラフルヒロインズ」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [せつ菜ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Setsuna's Birthday Scout: Colorful Heroines,"Setsuna's Birthday Celebration Scout: Colorful Heroines always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Setsuna's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223080801
3110014,ことりちゃんお誕生日記念勧誘~フラワーシャワー~,「ことりちゃんお誕生日記念勧誘フラワーシャワー」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ことりちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Kotori's Birthday Scout: Flower Shower,"Kotori's Birthday Celebration Scout: Flower Shower always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Kotori's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223091201
3110015,梨子ちゃんお誕生日記念勧誘~フェアリーウイング~,「梨子ちゃんお誕生日記念勧誘フェアリーウイング」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [梨子ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Riko's Birthday Scout: Fairy Wing,"Riko's Birthday Celebration Scout: Fairy Wing always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Riko's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223091901
3110016,ルビィちゃんお誕生日記念勧誘~フェアリーウイング~,「ルビィちゃんお誕生日記念勧誘フェアリーウイング」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ルビィちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Ruby's Birthday Scout: Fairy Wing,"Ruby's Birthday Celebration Scout: Fairy Wing always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Ruby's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223092101
3110017,すみれちゃんお誕生日記念勧誘~ハーモニースター~,「すみれちゃんお誕生日記念勧誘ハーモニースター」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [すみれちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Sumire's Birthday Scout: Harmony Star,"Sumire's Birthday Celebration Scout: Harmony Star always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Sumire's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223092801
3110018,栞子ちゃんお誕生日記念勧誘~カラフルヒロインズ~,「栞子ちゃんお誕生日記念勧誘カラフルヒロインズ」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [栞子ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Shioriko's Birthday Scout: Colorful Heroines,"Shioriko's Birthday Celebration Scout: Colorful Heroines always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Shioriko's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223100502
3110019,絵里ちゃんお誕生日記念勧誘~フラワーシャワー~,「絵里ちゃんお誕生日記念勧誘~フラワーシャワー~」は、μ'所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [絵里ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Eli's Birthday Scout: Flower Shower,"Eli's Birthday Celebration Scout: Flower Shower always features μ's Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Eli's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223102101
3110020,メイちゃんお誕生日記念勧誘~ハーモニースター~,「メイちゃんお誕生日記念勧誘ハーモニースター」は、Liella!所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [メイちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Mei's Birthday Scout: Harmony Star,"Mei's Birthday Celebration Scout: Harmony Star always features Liella! Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Mei's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223102901
3110021,凛ちゃんお誕生日記念勧誘~フラワーシャワー~,「凛ちゃんお誕生日記念勧誘~フラワーシャワー~」は、μ'所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [凛ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Rin's Birthday Scout: Flower Shower,"Rin's Birthday Celebration Scout: Flower Shower always features μ's Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Rin's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223110101
3110022,璃奈ちゃんお誕生日記念勧誘~カラフルヒロインズ~,「璃奈ちゃんお誕生日記念勧誘カラフルヒロインズ」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [璃奈ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Rina's Birthday Scout: Colorful Heroines,"Rina's Birthday Celebration Scout: Colorful Heroines always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Rina's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223111301
3110023,恋ちゃんお誕生日記念勧誘~ハーモニースター~,「恋ちゃんお誕生日記念勧誘ハーモニースター」は、Liella!所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [恋ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Ren's Birthday Scout: Harmony Star,"Ren's Birthday Celebration Scout: Harmony Star always features Liella! Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Ren's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223112401
3110024,ミアちゃんお誕生日記念勧誘~カラフルヒロインズ~,「ミアちゃんお誕生日記念勧誘カラフルヒロインズ」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ミアちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Mia's Birthday Scout: Colorful Heroines,"Mia's Birthday Celebration Scout: Colorful Heroines always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Mia's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223120601
3110025,彼方ちゃんお誕生日記念勧誘~カラフルヒロインズ~,「彼方ちゃんお誕生日記念勧誘カラフルヒロインズ」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [彼方ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Kanata's Birthday Scout: Colorful Heroines,"Kanata's Birthday Celebration Scout: Colorful Heroines always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Kanata's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223121601
3110026,冬毬ちゃんお誕生日記念勧誘~ハーモニースター~,「冬毬ちゃんお誕生日記念勧誘ハーモニースター」は、Liella!所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [冬毬ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Tomari's Birthday Scout: Harmony Star,"Tomari's Birthday Celebration Scout: Harmony Star always features Liella! Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Tomari's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223122801
3110027,ダイヤちゃんお誕生日記念勧誘~フェアリーウイング~,「ダイヤちゃんお誕生日記念勧誘フェアリーウイング」は、Aqours所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ダイヤちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Dia's Birthday Scout: Fairy Wing,"Dia's Birthday Celebration Scout: Fairy Wing always features Aqours Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Dia's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224010103
3110028,花陽ちゃんお誕生日記念勧誘~フラワーシャワー~,「花陽ちゃんお誕生日記念勧誘~フラワーシャワー~」は、μ'所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [花陽ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Hanayo's Birthday Scout: Flower Shower,"Hanayo's Birthday Celebration Scout: Flower Shower always features μ's Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Hanayo's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224011702
3110029,マルガレーテちゃんお誕生日記念勧誘~ハーモニースター~,「マルガレーテちゃんお誕生日記念勧誘ハーモニースター」は、Liella!所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [マルガレーテちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Margarete's Birthday Scout: Harmony Star,"Margarete's Birthday Celebration Scout: Harmony Star always features Liella! Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Margarete's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224012002
3110030,かすみちゃんお誕生日記念勧誘~カラフルヒロインズ~,「かすみちゃんお誕生日記念勧誘カラフルヒロインズ」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [かすみちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Kasumi's Birthday Scout: Colorful Heroines,"Kasumi's Birthday Celebration Scout: Colorful Heroines always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Kasumi's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224012302
3110031,エマちゃんお誕生日記念勧誘~カラフルヒロインズ~,「エマちゃんお誕生日記念勧誘カラフルヒロインズ」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [エマちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Emma's Birthday Scout: Colorful Heroines,"Emma's Birthday Celebration Scout: Colorful Heroines always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Emma's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224020502
3110032,果南ちゃんお誕生日記念勧誘~フェアリーウイング~,「果南ちゃんお誕生日記念勧誘フェアリーウイング」は、Aqours所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [果南ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Kanan's Birthday Scout: Fairy Wing,"Kanan's Birthday Celebration Scout: Fairy Wing always features Aqours Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Kanan's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224021004
3110033,嵐珠ちゃんお誕生日記念勧誘~カラフルヒロインズ~,「嵐珠ちゃんお誕生日記念勧誘カラフルヒロインズ」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [嵐珠ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Lanzhu's Birthday Scout: Colorful Heroines,"Lanzhu's Birthday Celebration Scout: Colorful Heroines always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Lanzhu's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224021502
3110034,千砂都ちゃんお誕生日記念勧誘~ハーモニースター~,「千砂都ちゃんお誕生日記念勧誘ハーモニースター」は、Liella!所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [千砂都ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Chisato's Birthday Scout: Harmony Star,"Chisato's Birthday Celebration Scout: Harmony Star always features Liella! Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Chisato's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224022502
3110035,歩夢ちゃんお誕生日記念勧誘~カラフルヒロインズ~,「歩夢ちゃんお誕生日記念勧誘カラフルヒロインズ」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント[歩夢ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Ayumu's Birthday Scout: Colorful Heroines,"Ayumu's Birthday Celebration Scout: Colorful Heroines always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Ayumu's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224030107
3110036,花丸ちゃんお誕生日記念勧誘~フェアリーウイング~,「花丸ちゃんお誕生日記念勧誘フェアリーウイング」は、Aqours所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント[花丸ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Hanamaru's Birthday Scout: Fairy Wing,"Hanamaru's Birthday Celebration Scout: Fairy Wing always features Aqours Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Hanamaru's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224030402
3110037,海未ちゃんお誕生日記念勧誘~フラワーシャワー~,「海未ちゃんお誕生日記念勧誘~フラワーシャワー~」は、μ'所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [海未ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Umi's Birthday Scout: Flower Shower,"Umi's Birthday Celebration Scout: Flower Shower always features μ's Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Umi's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224031502
4110001,スマイル限定!ピックアップ勧誘,「スマイル限定ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [属性ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Smile Only! Spotlight Scout,"Smile-Only Spotlight Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Type Spotlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223061103
4110002,ピュア限定!ピックアップ勧誘,「ピュア限定ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [属性ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Pure Only! Spotlight Scout,"Pure-Only Spotlight Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Type Spotlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223061103
4110003,クール限定!ピックアップ勧誘,「クール限定ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [属性ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Cool Only! Spotlight Scout,"Cool-Only Spotlight Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Type Spotlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223061103
4110004,スクフェスシリーズ感謝祭2023記念 UR確定勧誘,「スクフェスシリーズ感謝祭2023記念 UR確定勧誘」は、有償ラブカ3000個で実施でき、UR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個,SIF Series Thanksgiving Festival 2023 Guaranteed UR Scout,"SIF Series Thanksgiving 2023 Guaranteed UR Scout costs 3,000 Paid Loveca and guarantees one UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20",223062301
4110005,ラブソングカーニバル記念勧誘~歩夢編~,「ラブソングカーニバル記念勧誘歩夢編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 歩夢編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Love Song Carnival Scout: Ayumu,"Love Song Carnival Celebration Scout: Ayumu Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Ayumu Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223100301
4110006,ラブソングカーニバル記念勧誘~かすみ編~,「ラブソングカーニバル記念勧誘かすみ編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル かすみ編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Love Song Carnival Scout: Kasumi,"Love Song Carnival Celebration Scout: Kasumi Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Kasumi Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223101001
4110007,ラブソングカーニバル記念勧誘~しずく編~,「ラブソングカーニバル記念勧誘しずく編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル しずく編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Love Song Carnival Scout: Shizuku,"Love Song Carnival Celebration Scout: Shizuku Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Shizuku Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223101701
4110008,ラブソングカーニバル記念勧誘~果林編~,「ラブソングカーニバル記念勧誘果林編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 果林編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Love Song Carnival Scout: Karin,"Love Song Carnival Celebration Scout: Karin Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Karin Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223102401
4110009,ラブソングカーニバル記念勧誘~愛編~,「ラブソングカーニバル記念勧誘愛編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 愛編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Love Song Carnival Scout: Ai,"Love Song Carnival Celebration Scout: Ai Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Ai Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223103101
4110010,ラブソングカーニバル記念勧誘~彼方編~,「ラブソングカーニバル記念勧誘彼方編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 彼方編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Love Song Carnival Scout: Kanata,"Love Song Carnival Celebration Scout: Kanata Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Kanata Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223110701
4110011,ラブソングカーニバル記念勧誘~せつ菜編~,「ラブソングカーニバル記念勧誘せつ菜編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル せつ菜編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Love Song Carnival Scout: Setsuna,"Love Song Carnival Celebration Scout: Setsuna Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Setsuna Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223111401
4110012,ラブソングカーニバル記念勧誘~エマ編~,「ラブソングカーニバル記念勧誘エマ編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル エマ編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Love Song Carnival Scout: Emma,"Love Song Carnival Celebration Scout: Emma Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Emma Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223112101
4110013,ラブソングカーニバル記念勧誘~璃奈編~,「ラブソングカーニバル記念勧誘璃奈編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 璃奈編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Love Song Carnival Scout: Rina,"Love Song Carnival Celebration Scout: Rina Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Rina Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223112801
4110014,ラブソングカーニバル記念勧誘~栞子編~,「ラブソングカーニバル記念勧誘栞子編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 栞子編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Love Song Carnival Scout: Shioriko,"Love Song Carnival Celebration Scout: Shioriko Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Shioriko Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223120501
4110015,ラブソングカーニバル記念勧誘~ミア編~,「ラブソングカーニバル記念勧誘ミア編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル ミア編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Love Song Carnival Scout: Mia,"Love Song Carnival Celebration Scout: Mia Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Mia Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223121201
4110016,ラブソングカーニバル記念勧誘~嵐珠編~,「ラブソングカーニバル記念勧誘嵐珠編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 嵐珠編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Love Song Carnival Scout: Lanzhu,"Love Song Carnival Celebration Scout: Lanzhu Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Lanzhu Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223121901
4110017,最大100回無料Half Anniversary記念勧誘,「最大100回無料Half Anniversary記念勧誘」は1日1回のみ、期間中最大10回まで実施できます。<br>また、R以上の部員が加入します。<br><br>「10回勧誘」は無償で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Up to 100 Free Pulls! Half Anniversary Celebration Scout,"The Up to 100 Free Pulls! Half Anniversary Celebration Scout can be performed once per day, up to 10 times during the event period.<br>Members of rarity R or higher will also join.<br><br>A 10x Scout can be performed for free and guarantees at least one Member of rarity SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Half Anniversary] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223101501
4110019,UR確定 Half Anniversary記念勧誘μ's編,「UR確定 Half Anniversary記念勧誘μ's編」は、有償ラブカ3000個で実施でき、μ's所属のUR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Guaranteed UR Half Anniversary Celebration Scout: μ's,"Guaranteed UR! Half Anniversary Celebration Scout: μ's Arc costs 3,000 Paid Loveca and guarantees one μ's UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Half Anniversary] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223101502
4110020,UR確定 Half Anniversary記念勧誘Aqours編,「UR確定 Half Anniversary記念勧誘Aqours編」は、有償ラブカ3000個で実施でき、Aqours所属のUR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Guaranteed UR Half Anniversary Celebration Scout: Aqours,"Guaranteed UR! Half Anniversary Celebration Scout: Aqours Arc costs 3,000 Paid Loveca and guarantees one Aqours UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Half Anniversary] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223101502
4110021,UR確定 Half Anniversary記念勧誘虹ヶ咲編,「UR確定 Half Anniversary記念勧誘虹ヶ咲編」は、有償ラブカ3000個で実施でき、虹ヶ咲学園スクールアイドル同好会所属のUR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Guaranteed UR Half Anniversary Celebration Scout: Nijigasaki,"Guaranteed UR! Half Anniversary Celebration Scout: Nijigasaki Arc costs 3,000 Paid Loveca and guarantees one Nijigasaki UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Half Anniversary] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223101502
4110022,UR確定 Half Anniversary記念勧誘Liella!編~,「UR確定 Half Anniversary記念勧誘Liella!編」は、有償ラブカ3000個で実施でき、Liella!所属のUR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Guaranteed UR Half Anniversary Celebration Scout: Liella!,"Guaranteed UR! Half Anniversary Celebration Scout: Liella! Arc costs 3,000 Paid Loveca and guarantees one Liella! UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Half Anniversary] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223101502
4110023,私のラブソング編 開幕記念勧誘,「私のラブソング編 開幕記念勧誘」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [私のラブソング編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,"""My Love Song"" Arc Launch Celebration Scout","""My Love Song"" Arc Premiere Celebration Scout always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [My Love Song Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223090603
4110024,μ's限定ピックアップ勧誘,「μ's限定ピックアップ勧誘」は、μ'所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [μ's ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,μ's Only! Spotlight Scout,"μ's-Only Spotlight Scout always features μ's Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [μ's Spotlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223103111
4110025,Aqours限定ピックアップ勧誘,「Aqours限定ピックアップ勧誘」は、Aqours所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Aqours ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Aqours Only! Spotlight Scout,"Aqours-Only Spotlight Scout always features Aqours Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Aqours Spotlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223111508
4110026,UR確定 Half Anniversary記念勧誘後夜祭,「UR確定 Half Anniversary記念勧誘後夜祭」は、有償ラブカ3000個で実施でき、UR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ひだまりのマーチングバンド]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Guaranteed UR Half Anniversary Celebration Scout: After-Party,"Guaranteed UR! Half Anniversary Celebration Scout: Afterparty costs 3,000 Paid Loveca and guarantees one UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Sunlit Marching Band] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223103112
4110027,幻日のヨハネ -The Story of the Sound of Heart- 開催記念勧誘,「幻日のヨハネ -The Story of the Sound of Heart- 開催記念勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [幻日のヨハネ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Yohane the Parhelion -The Story of the Sound of Heart- Celebration Scout,"""Yohane the Parhelion -The Story of the Sound of Heart-"" Celebration Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Yohane the Parhelion] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223121402
4110028,1年生限定ピックアップ勧誘,「1年生限定ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [1年生ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,1st-Years Only! Spotlight Scout,"1st-Years-Only Spotlight Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [1st-Year Spotlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223111702
4110029,2年生限定ピックアップ勧誘,「2年生限定ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [2年生ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,2nd-Years Only! Spotlight Scout,"2nd-Years-Only Spotlight Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [2nd-Year Spotlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223112404
4110030,3年生限定ピックアップ勧誘,「3年生限定ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [3年生ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,3rd-Years Only! Spotlight Scout,"3rd-Years-Only Spotlight Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [3rd-Year Spotlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223120103
4110031,異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘Aqours編,「異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘Aqours編」は、Aqours所属のR以上の部員が必ず登場します。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個,Ijigen Fes THE IDOLM@STER LOVE LIVE! Song Battle Celebration Scout: Aqours,"Dimension Fes: THE IDOLM@STER × Love Live! Singing Battle Celebration Scout: Aqours Arc always features Aqours Members of rarity R or higher.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20",223120907
4110032,異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘~ニジガク編~,「異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘ニジガク編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個,Ijigen Fes THE IDOLM@STER LOVE LIVE! Song Battle Celebration Scout: Nijigasaki,"Dimension Fes: THE IDOLM@STER × Love Live! Singing Battle Celebration Scout: Nijigasaki Arc always features Nijigasaki Members of rarity R or higher.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20",223120908
4110033,異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘Liella!編~,「異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘Liella!編」は、Liella!所属のR以上の部員が必ず登場します。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個,Ijigen Fes THE IDOLM@STER LOVE LIVE! Song Battle Celebration Scout: Liella!,"Dimension Fes: THE IDOLM@STER × Love Live! Singing Battle Celebration Scout: Liella! Arc always features Liella! Members of rarity R or higher.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20",223120909
4110034,最大240回無料年末年始記念勧誘,「最大240回無料年末年始記念勧誘」は1日3回まで、期間中最大24回まで実施できます。<br>また、R以上の部員が加入します。<br><br>「10回勧誘」は無償で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [年末年始記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Up to 240 Free Pulls! New Year's Celebration Scout,"The Up to 240 Free Pulls! New Year Celebration Scout can be performed up to 3 times per day, up to 24 times during the event period.<br>Members of rarity R or higher will also join.<br><br>A 10x Scout can be performed for free and guarantees at least one Member of rarity SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [New Year Celebration] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223122604
4110035,UR確定年末年始記念勧誘,「UR確定年末年始記念勧誘」は、有償ラブカ3000個で実施でき、UR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [年末年始記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Guaranteed UR! New Year's Celebration Scout,"Guaranteed UR! New Year Celebration Scout costs 3,000 Paid Loveca and guarantees one UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [New Year Celebration] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",223122604
4110036,新春初夢記念勧誘,「新春初夢記念勧誘」は、R以上の部員が必ず登場します。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [新春記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,New Year's First Dream Celebration Scout,"New Year's First Dream Celebration Scout always features Members of rarity R or higher.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [New Year] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224010105
4110037,UR確定新春初夢記念勧誘,「UR確定新春初夢記念勧誘」は、有償ラブカ3000個で実施でき、UR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [新春記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Guaranteed UR! New Year's First Dream Celebration Scout,"Guaranteed UR! New Year's First Dream Celebration Scout costs 3,000 Paid Loveca and guarantees one UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [New Year] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224010105
4110038,ラブソングカーニバル記念勧誘,「ラブソングカーニバル記念勧誘」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Love Song Carnival Celebration Scout,"Love Song Carnival Celebration Scout always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224011304
4110039,スクフェス2 大感謝勧誘~μ's編,「スクフェス2 大感謝勧誘~μ's編」は、μ'所属のR以上の部員が必ず登場します。<br>「スクフェス2 大感謝勧誘~μ's編」は、「10回勧誘チケットスクフェス2 大感謝勧誘)」で実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [大感謝勧誘]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,School Idol Festival 2 Super Thanks Scout: μ's,"SIF2 Grand Thanksgiving Scout: μ's Arc always features μ's Members of rarity R or higher.<br>SIF2 Grand Thanksgiving Scout: μ's Arc can be performed using a 10x Scout Ticket (SIF2 Grand Thanksgiving Scout).<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Grand Thanksgiving] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224030109
4110040,スクフェス2 大感謝勧誘Aqours編,「スクフェス2 大感謝勧誘Aqours編」は、Aqours所属のR以上の部員が必ず登場します。<br>「スクフェス2 大感謝勧誘Aqours編」は、「10回勧誘チケットスクフェス2 大感謝勧誘)」で実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [大感謝勧誘]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,School Idol Festival 2 Super Thanks Scout: Aqours,"SIF2 Grand Thanksgiving Scout: Aqours Arc always features Aqours Members of rarity R or higher.<br>SIF2 Grand Thanksgiving Scout: Aqours Arc can be performed using a 10x Scout Ticket (SIF2 Grand Thanksgiving Scout).<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Grand Thanksgiving] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224030109
4110041,スクフェス2 大感謝勧誘~ニジガク編~,「スクフェス2 大感謝勧誘ニジガク編」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「スクフェス2 大感謝勧誘ニジガク編」は、「10回勧誘チケットスクフェス2 大感謝勧誘)」で実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [大感謝勧誘]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,School Idol Festival 2 Super Thanks Scout: Nijigasaki,"SIF2 Grand Thanksgiving Scout: Nijigasaki Arc always features Nijigasaki Members of rarity R or higher.<br>SIF2 Grand Thanksgiving Scout: Nijigasaki Arc can be performed using a 10x Scout Ticket (SIF2 Grand Thanksgiving Scout).<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Grand Thanksgiving] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224030109
4110042,スクフェス2 大感謝勧誘Liella!編~,「スクフェス2 大感謝勧誘Liella!編」は、Liella!所属のR以上の部員が必ず登場します。<br>「スクフェス2 大感謝勧誘Liella!編」は、「10回勧誘チケットスクフェス2 大感謝勧誘)」で実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [大感謝勧誘]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,School Idol Festival 2 Super Thanks Scout: Liella!,"SIF2 Grand Thanksgiving Scout: Liella! Arc always features Liella! Members of rarity R or higher.<br>SIF2 Grand Thanksgiving Scout: Liella! Arc can be performed using a 10x Scout Ticket (SIF2 Grand Thanksgiving Scout).<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Grand Thanksgiving] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224030109
4110043,スペシャル勧誘,「スペシャル勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [スペシャル勧誘]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます,Special Scout,"Special Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Special Scout] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box.",224031602
4110044,スクールアイドル感謝祭 全員集合勧誘,「スクールアイドル感謝祭 全員集合勧誘」は、R以上の部員が必ず登場します。<br>「10回勧誘」は、ラブカ3000個で毎日1回まで実施できます。<br>「有償10回勧誘」は、有償ラブカ3000個で実施できます。<br>「有償1回勧誘」は、有償ラブカ50個で毎日3回まで実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個,School Idol Thanksgiving Festival All-Star Gathering Scout,"School Idol Thanksgiving Full Roster Scout always features Members of rarity R or higher.<br>A 10x Scout costs 3,000 Loveca and can be performed up to once per day.<br>A 10x Paid Scout costs 3,000 Paid Loveca.<br>A 1x Paid Scout costs 50 Paid Loveca and can be performed up to 3 times per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20",224032003
5110001,全部員大集合!ステップアップ勧誘,「全部員大集合ステップアップ勧誘」は、STEPが進むごとに内容が変化するお得な勧誘です。<br>勧誘で入手可能な全部員R・SR・URが登場します。<br>各STEPは10回勧誘で、STEPごとに必要なラブカの個数と確定枠が変化します。<br>・STEP 1ラブカ500個SR以上1人確定<br>・STEP 2ラブカ1000個SR以上1人確定・UR確率アップ<br>・STEP 3ラブカ1500個SR以上1人確定・UR確率アップ<br>・STEP 4ラブカ2000個SR以上1人確定・UR確率大アップ<br>・STEP 5ラブカ2500個UR部員1人確定<br><br>STEP 5の実施後は、再びSTEP 1から繰り返し実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個,All Members Step-Up Scout,"The All Members Step-Up Scout gets better with every STEP.<br>Every Scoutable member of each rarity (R, SR, and UR) can appear.<br>Each STEP is a 10x Scout; the Loveca cost and the guaranteed slot change per STEP.<br>- STEP 1: 500 Loveca (1 SR or higher guaranteed)<br>- STEP 2: 1,000 Loveca (1 SR or higher guaranteed, UR rate up)<br>- STEP 3: 1,500 Loveca (1 SR or higher guaranteed, UR rate up)<br>- STEP 4: 2,000 Loveca (1 SR or higher guaranteed, UR rate way up)<br>- STEP 5: 2,500 Loveca (1 UR Member guaranteed!)<br><br>After STEP 5, the ladder returns to STEP 1 and can be repeated.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20",1
7110002,スクフェスデータ連携特典 チケット勧誘,「スクフェスデータ連携特典 チケット勧誘」は、R以上の部員が必ず登場します。<br>「10回勧誘」は、「10回勧誘チケットスクフェスデータ連携特典」で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [リリース記念] 」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。,SIF Data Link Bonus Ticket Scout,"SIF Data Linkage Bonus Ticket Scout always features Members of rarity R or higher.<br>A 10x Scout can be performed using a 10x Scout Ticket (SIF Data Linkage Bonus) and guarantees at least one Member of rarity SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Release Celebration] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.",223043003
7110003,スクスタデータ連携特典 チケット勧誘,「スクスタデータ連携特典 チケット勧誘」は、R以上の部員が必ず登場します。<br>「10回勧誘」は、「10回勧誘チケットスクフェスデータ連携特典」で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [リリース記念] 」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。,SIFAS Data Link Bonus Ticket Scout,"SIFAS Data Linkage Bonus Ticket Scout always features Members of rarity R or higher.<br>A 10x Scout can be performed using a 10x Scout Ticket (SIF Data Linkage Bonus) and guarantees at least one Member of rarity SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Release Celebration] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.",223071202
8110001,アイテム勧誘,毎日1回、「アイテム勧誘」を実施できます。<br>「アイテム勧誘」は毎日0時にリセットされます。<br><br>「アイテム勧誘」では、以下のアイテムからランダムで10個登場します。<br>・ペンライト×10個<br>・LPキャンディ[小]×1個<br>・レッスンート×20個<br>・レッスンート×8個<br>・レッスンート×1個<br>・スキルブック×18個<br>・スキルブック×3個<br>・35000ゴールド,Item Scout,"You can perform the Item Scout once per day.<br>The Item Scout resets daily at 0:00.<br><br>The Item Scout randomly draws 10 of the following items:<br>- Penlight ×10<br>- LP Candy (S) ×1<br>- Lesson Note (S) ×20<br>- Lesson Note (M) ×8<br>- Lesson Note (L) ×1<br>- Skill Book (S) ×18<br>- Skill Book (M) ×3<br>- 35,000 Gold",1
8110002,アイテム勧誘,毎日1回、「アイテム勧誘」を実施できます。<br>「アイテム勧誘」は毎日0時にリセットされます。<br><br>「アイテム勧誘」では、以下のアイテムからランダムで10個登場します。<br>・ペンライト×10個<br>・LPキャンディ[小]×1個<br>・レッスンート×20個<br>・レッスンート×8個<br>・レッスンート×1個<br>・スキルブック×18個<br>・スキルブック×3個<br>・35000ゴールド,Item Scout,"You can perform the Item Scout once per day.<br>The Item Scout resets daily at 0:00.<br><br>The Item Scout randomly draws 10 of the following items:<br>- Penlight ×10<br>- LP Candy (S) ×1<br>- Lesson Note (S) ×20<br>- Lesson Note (M) ×8<br>- Lesson Note (L) ×1<br>- Skill Book (S) ×18<br>- Skill Book (M) ×3<br>- 35,000 Gold",223101604
8110004,アイテム勧誘,毎日1回、「アイテム勧誘」を実施できます。<br>「アイテム勧誘」は毎日0時にリセットされます。<br><br>「アイテム勧誘」では、以下のアイテムからランダムで10個登場します。<br>・ペンライト×10個<br>・LPキャンディ[小]×1個<br>・レッスンート×20個<br>・レッスンート×8個<br>・レッスンート×1個<br>・スキルブック×18個<br>・スキルブック×3個<br>・35000ゴールド,Item Scout,"You can perform the Item Scout once per day.<br>The Item Scout resets daily at 0:00.<br><br>The Item Scout randomly draws 10 of the following items:<br>- Penlight ×10<br>- LP Candy (S) ×1<br>- Lesson Note (S) ×20<br>- Lesson Note (M) ×8<br>- Lesson Note (L) ×1<br>- Skill Book (S) ×18<br>- Skill Book (M) ×3<br>- 35,000 Gold",224010108
8110005,アイテム勧誘,毎日1回、「アイテム勧誘」を実施できます。<br>「アイテム勧誘」は毎日0時にリセットされます。<br><br>「アイテム勧誘」では、以下のアイテムからランダムで10個登場します。<br>・ペンライト×10個<br>・LPキャンディ[小]×1個<br>・レッスンート×20個<br>・レッスンート×8個<br>・レッスンート×1個<br>・スキルブック×18個<br>・スキルブック×3個<br>・35000ゴールド,Item Scout,"You can perform the Item Scout once per day.<br>The Item Scout resets daily at 0:00.<br><br>The Item Scout randomly draws 10 of the following items:<br>- Penlight ×10<br>- LP Candy (S) ×1<br>- Lesson Note (S) ×20<br>- Lesson Note (M) ×8<br>- Lesson Note (L) ×1<br>- Skill Book (S) ×18<br>- Skill Book (M) ×3<br>- 35,000 Gold",224020106
8110006,アイテム勧誘,毎日1回、「アイテム勧誘」を実施できます。<br>「アイテム勧誘」は毎日0時にリセットされます。<br><br>「アイテム勧誘」では、以下のアイテムからランダムで10個登場します。<br>・ペンライト×10個<br>・LPキャンディ[小]×1個<br>・レッスンート×20個<br>・レッスンート×8個<br>・レッスンート×1個<br>・スキルブック×18個<br>・スキルブック×3個<br>・35000ゴールド,Item Scout,"You can perform the Item Scout once per day.<br>The Item Scout resets daily at 0:00.<br><br>The Item Scout randomly draws 10 of the following items:<br>- Penlight ×10<br>- LP Candy (S) ×1<br>- Lesson Note (S) ×20<br>- Lesson Note (M) ×8<br>- Lesson Note (L) ×1<br>- Skill Book (S) ×18<br>- Skill Book (M) ×3<br>- 35,000 Gold",224030121
9110001,チュートリアル勧誘【高坂 穂乃果】,「チュートリアル勧誘【高坂 穂乃果】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「高坂穂乃果【満開の桜】 」が必ず加入します。,Tutorial Scout: Honoka Kosaka,Tutorial Scout: Honoka Kosaka always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Honoka Kosaka [Cherry Blossoms in Full Bloom].,1
9110002,チュートリアル勧誘【絢瀬 絵里】,「チュートリアル勧誘【絢瀬 絵里】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「絢瀬絵里【夕暮れの生徒会室】 」が必ず加入します。,Tutorial Scout: Eli Ayase,Tutorial Scout: Eli Ayase always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Eli Ayase [Student Council Room at Dusk].,1
9110003,チュートリアル勧誘【南 ことり】,「チュートリアル勧誘【南 ことり】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「南 ことり【いらっしゃいませ♪】 」が必ず加入します。,Tutorial Scout: Kotori Minami,Tutorial Scout: Kotori Minami always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Kotori Minami [Welcome♪].,1
9110004,チュートリアル勧誘【園田 海未】,「チュートリアル勧誘【園田 海未】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「園田海未【無心へと】 」が必ず加入します。,Tutorial Scout: Umi Sonoda,Tutorial Scout: Umi Sonoda always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Umi Sonoda [Into Selflessness].,1
9110005,チュートリアル勧誘【星空 凛】,「チュートリアル勧誘【星空 凛】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「星空 凛【きらめく屋上】 」が必ず加入します。,Tutorial Scout: Rin Hoshizora,Tutorial Scout: Rin Hoshizora always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Rin Hoshizora [Sparkling Rooftop].,1
9110006,チュートリアル勧誘【西木野 真姫】,「チュートリアル勧誘【西木野 真姫】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「西木野真姫【スマホ越しのはにかみ】 」が必ず加入します。,Tutorial Scout: Maki Nishikino,Tutorial Scout: Maki Nishikino always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Maki Nishikino [Bashful Through the Screen].,1
9110007,チュートリアル勧誘【東條 希】,「チュートリアル勧誘【東條 希】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「東條 希【降り注ぐ光】 」が必ず加入します。,Tutorial Scout: Nozomi Tojo,Tutorial Scout: Nozomi Tojo always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Nozomi Tojo [Pouring Light].,1
9110008,チュートリアル勧誘【小泉 花陽】,「チュートリアル勧誘【小泉 花陽】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「小泉花陽【µ'sへの想い】 」が必ず加入します。,Tutorial Scout: Hanayo Koizumi,Tutorial Scout: Hanayo Koizumi always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Hanayo Koizumi [Feelings for µ's].,1
9110009,チュートリアル勧誘【矢澤 にこ】,「チュートリアル勧誘【矢澤 にこ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「矢澤にこ【ありがたい講義】 」が必ず加入します。,Tutorial Scout: Nico Yazawa,Tutorial Scout: Nico Yazawa always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Nico Yazawa [A Most Gracious Lecture].,1
9110010,チュートリアル勧誘【高海 千歌】,「チュートリアル勧誘【高海 千歌】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「高海千歌【練習帰りの談笑】 」が必ず加入します。,Tutorial Scout: Chika Takami,Tutorial Scout: Chika Takami always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Chika Takami [Chatting After Practice].,1
9110011,チュートリアル勧誘【桜内 梨子】,「チュートリアル勧誘【桜内 梨子】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「桜内梨子【トリオの旋律】 」が必ず加入します。,Tutorial Scout: Riko Sakurauchi,"The Tutorial Scout [Riko Sakurauchi] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Riko Sakurauchi [Trio's Melody] is guaranteed to join.",1
9110012,チュートリアル勧誘【松浦 果南】,「チュートリアル勧誘【松浦 果南】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「松浦果南【頬を撫でる潮風】 」が必ず加入します。,Tutorial Scout: Kanan Matsuura,"The Tutorial Scout [Kanan Matsuura] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Kanan Matsuura [Cheek-Caressing Sea Breeze] is guaranteed to join.",1
9110013,チュートリアル勧誘【黒澤 ダイヤ】,「チュートリアル勧誘【黒澤 ダイヤ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「黒澤ダイヤ【姉の日課】 」が必ず加入します。,Tutorial Scout: Dia Kurosawa,"The Tutorial Scout [Dia Kurosawa] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Dia Kurosawa [A Sister's Routine] is guaranteed to join.",1
9110014,チュートリアル勧誘【渡辺 曜】,「チュートリアル勧誘【渡辺 曜】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「渡辺 曜【耀う水面】 」が必ず加入します。,Tutorial Scout: You Watanabe,"The Tutorial Scout [You Watanabe] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member You Watanabe [Shimmering Water] is guaranteed to join.",1
9110015,チュートリアル勧誘【津島 善子】,「チュートリアル勧誘【津島 善子】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「津島善子【堕天使じゃんけん】 」が必ず加入します。,Tutorial Scout: Yoshiko Tsushima,"The Tutorial Scout [Yoshiko Tsushima] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Yoshiko Tsushima [Fallen Angel Rock-Paper-Scissors] is guaranteed to join.",1
9110016,チュートリアル勧誘【国木田 花丸】,「チュートリアル勧誘【国木田 花丸】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「国木田花丸【アフターランチ】 」が必ず加入します。,Tutorial Scout: Hanamaru Kunikida,"The Tutorial Scout [Hanamaru Kunikida] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Hanamaru Kunikida [After Lunch] is guaranteed to join.",1
9110017,チュートリアル勧誘【小原 鞠莉】,「チュートリアル勧誘【小原 鞠莉】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「小原鞠莉【風光明媚】 」が必ず加入します。,Tutorial Scout: Mari Ohara,"The Tutorial Scout [Mari Ohara] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Mari Ohara [Scenic Beauty] is guaranteed to join.",1
9110018,チュートリアル勧誘【黒澤 ルビィ】,「チュートリアル勧誘【黒澤 ルビィ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「黒澤ルビィ【おねぼうさん】 」が必ず加入します。,Tutorial Scout: Ruby Kurosawa,"The Tutorial Scout [Ruby Kurosawa] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Ruby Kurosawa [Sleepyhead] is guaranteed to join.",1
9110019,チュートリアル勧誘【上原 歩夢】,「チュートリアル勧誘【上原 歩夢】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「上原歩夢【隣にいるよ】 」が必ず加入します。,Tutorial Scout: Ayumu Uehara,"The Tutorial Scout [Ayumu Uehara] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Ayumu Uehara [Right Beside You] is guaranteed to join.",1
9110020,チュートリアル勧誘【中須 かすみ】,「チュートリアル勧誘【中須 かすみ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「中須かすみ【レインボーコッペパン】 」が必ず加入します。,Tutorial Scout: Kasumi Nakasu,"The Tutorial Scout [Kasumi Nakasu] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Kasumi Nakasu [Rainbow Koppepan] is guaranteed to join.",1
9110021,チュートリアル勧誘【桜坂 しずく】,「チュートリアル勧誘【桜坂 しずく】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「桜坂しずく【素の自分で】 」が必ず加入します。,Tutorial Scout: Shizuku Osaka,"The Tutorial Scout [Shizuku Osaka] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Shizuku Osaka [My True Self] is guaranteed to join.",1
9110022,チュートリアル勧誘【朝香 果林】,「チュートリアル勧誘【朝香 果林】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「朝香果林【クオリティの追求】 」が必ず加入します。,Tutorial Scout: Karin Asaka,"The Tutorial Scout [Karin Asaka] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Karin Asaka [In Pursuit of Quality] is guaranteed to join.",1
9110023,チュートリアル勧誘【宮下 愛】,「チュートリアル勧誘【宮下 愛】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「宮下 愛【チェンジオブペース】 」が必ず加入します。,Tutorial Scout: Ai Miyashita,"The Tutorial Scout [Ai Miyashita] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Ai Miyashita [Change of Pace] is guaranteed to join.",1
9110024,チュートリアル勧誘【近江 彼方】,「チュートリアル勧誘【近江 彼方】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「近江彼方【姉妹の食卓】 」が必ず加入します。,Tutorial Scout: Kanata Konoe,"The Tutorial Scout [Kanata Konoe] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Kanata Konoe [Sisters' Dinner Table] is guaranteed to join.",1
9110025,チュートリアル勧誘【優木 せつ菜】,「チュートリアル勧誘【優木 せつ菜】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「優木せつ菜【大好きを伝えたい】 」が必ず加入します。,Tutorial Scout: Setsuna Yuki,"The Tutorial Scout [Setsuna Yuki] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Setsuna Yuki [I Want to Share My Love!] is guaranteed to join.",1
9110026,チュートリアル勧誘【エマ・ヴェルデ】,「チュートリアル勧誘【エマ・ヴェルデ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「エマ・ヴェルデ【爽やかな木漏れ日】 」が必ず加入します。,Tutorial Scout: Emma Verde,"The Tutorial Scout [Emma Verde] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Emma Verde [Sunlight Through the Trees] is guaranteed to join.",1
9110027,チュートリアル勧誘【天王寺 璃奈】,「チュートリアル勧誘【天王寺 璃奈】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「天王寺璃奈【お散歩役員のお世話】 」が必ず加入します。,Tutorial Scout: Rina Tennoji,"The Tutorial Scout [Rina Tennoji] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Rina Tennoji [Pet-Walking Duty] is guaranteed to join.",1
9110028,チュートリアル勧誘【三船 栞子】,「チュートリアル勧誘【三船 栞子】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「三船栞子【精進あるのみ】 」が必ず加入します。,Tutorial Scout: Shioriko Mifune,"The Tutorial Scout [Shioriko Mifune] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Shioriko Mifune [Striving for Improvement] is guaranteed to join.",1
9110029,チュートリアル勧誘【ミア・テイラー】,「チュートリアル勧誘【ミア・テイラー】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「ミア・テイラー【渾身の作曲】 」が必ず加入します。,Tutorial Scout: Mia Taylor,"The Tutorial Scout [Mia Taylor] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Mia Taylor [All-Out Composition] is guaranteed to join.",1
9110030,チュートリアル勧誘【鐘 嵐珠】,「チュートリアル勧誘【鐘 嵐珠】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「鐘 嵐珠【ライバルで仲間】 」が必ず加入します。,Tutorial Scout: Lanzhu Zhong,"The Tutorial Scout [Lanzhu Zhong] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Lanzhu Zhong [Rivals and Friends] is guaranteed to join.",1
9110031,チュートリアル勧誘【澁谷 かのん】,「チュートリアル勧誘【澁谷 かのん】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「澁谷かのん【想いを胸に】 」が必ず加入します。,Tutorial Scout: Kanon Shibuya,"The Tutorial Scout [Kanon Shibuya] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Kanon Shibuya [Feelings in My Heart] is guaranteed to join.",1
9110032,チュートリアル勧誘【唐 可可】,「チュートリアル勧誘【唐 可可】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「唐 可可【衣装スタイリスト】 」が必ず加入します。,Tutorial Scout: Keke Tang,"The Tutorial Scout [Keke Tang] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Keke Tang [Costume Stylist] is guaranteed to join.",1
9110033,チュートリアル勧誘【嵐 千砂都】,「チュートリアル勧誘【嵐 千砂都】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「嵐 千砂都【先輩のステップ】 」が必ず加入します。,Tutorial Scout: Chisato Arashi,"The Tutorial Scout [Chisato Arashi] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Chisato Arashi [A Senior's Steps] is guaranteed to join.",1
9110034,チュートリアル勧誘【平安名 すみれ】,「チュートリアル勧誘【平安名 すみれ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「平安名すみれ【両腕いっぱい】 」が必ず加入します。,Tutorial Scout: Sumire Heanna,"The Tutorial Scout [Sumire Heanna] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Sumire Heanna [Two Armfuls] is guaranteed to join.",1
9110035,チュートリアル勧誘【葉月 恋】,「チュートリアル勧誘【葉月 恋】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「葉月 恋【母の残した結ヶ丘】 」が必ず加入します。,Tutorial Scout: Ren Hazuki,"The Tutorial Scout [Ren Hazuki] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Ren Hazuki [The Yuigaoka Mother Left Behind] is guaranteed to join.",1
9110036,チュートリアル勧誘【桜小路 きな子】,「チュートリアル勧誘【桜小路 きな子】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「桜小路きな子【地上メートル】 」が必ず加入します。,Tutorial Scout: Kinako Sakurakoji,"The Tutorial Scout [Kinako Sakurakoji] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Kinako Sakurakoji [230 Meters Above Ground] is guaranteed to join.",1
9110037,チュートリアル勧誘【米女 メイ】,「チュートリアル勧誘【米女 メイ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「米女メイ【コンプリート目前】 」が必ず加入します。,Tutorial Scout: Mei Yoneme,"The Tutorial Scout [Mei Yoneme] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Mei Yoneme [Almost Complete] is guaranteed to join.",1
9110038,チュートリアル勧誘【若菜 四季】,「チュートリアル勧誘【若菜 四季】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「若菜四季【放課後の科学室】 」が必ず加入します。,Tutorial Scout: Shiki Wakana,"The Tutorial Scout [Shiki Wakana] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Shiki Wakana [After-School Science Room] is guaranteed to join.",1
9110039,チュートリアル勧誘【鬼塚 夏美】,「チュートリアル勧誘【鬼塚 夏美】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「鬼塚夏美【オニナッツ生配信中】 」が必ず加入します。,Tutorial Scout: Natsumi Onitsuka,"The Tutorial Scout [Natsumi Onitsuka] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Natsumi Onitsuka [OniNuts Live Stream!] is guaranteed to join.",1
6110001,μ's特待生勧誘,「μ's特待生勧誘」は、スクフェスに登場したμ'sの部員を勧誘できる特別な勧誘です。<br>提供割合R 68 / SR 26 / UR 6<br>11回勧誘では、SR以上の部員が1人確定で登場します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個,μ's Honor Student Scouting,"μ's Honor Student Scouting is a special Scout featuring the μ's members of School Idol Festival.<br>Rates: R 68% / SR 26% / UR 6%<br>An 11x Scout guarantees at least one SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20",1
6110002,Aqours特待生勧誘,「Aqours特待生勧誘」は、スクフェスに登場したAqoursの部員を勧誘できる特別な勧誘です。<br>提供割合R 68 / SR 26 / UR 6<br>11回勧誘では、SR以上の部員が1人確定で登場します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個,Aqours Honor Student Scouting,"Aqours Honor Student Scouting is a special Scout featuring the Aqours members of School Idol Festival.<br>Rates: R 68% / SR 26% / UR 6%<br>An 11x Scout guarantees at least one SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20",1
6110003,虹ヶ咲特待生勧誘,「虹ヶ咲特待生勧誘」は、スクフェスに登場した虹ヶ咲の部員を勧誘できる特別な勧誘です。<br>提供割合R 68 / SR 26 / UR 6<br>11回勧誘では、SR以上の部員が1人確定で登場します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個,Nijigasaki Honor Student Scouting,"Nijigasaki Honor Student Scouting is a special Scout featuring the Nijigasaki members of School Idol Festival.<br>Rates: R 68% / SR 26% / UR 6%<br>An 11x Scout guarantees at least one SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20",1
6110004,Liella!特待生勧誘,「Liella!特待生勧誘」は、スクフェスに登場したLiella!の部員を勧誘できる特別な勧誘です。<br>提供割合R 68 / SR 26 / UR 6<br>11回勧誘では、SR以上の部員が1人確定で登場します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR500個<br>・SR50個<br>・R 20個,Liella! Honor Student Scouting,"Liella! Honor Student Scouting is a special Scout featuring the Liella! members of School Idol Festival.<br>Rates: R 68% / SR 26% / UR 6%<br>An 11x Scout guarantees at least one SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20",1
1 _id _infoText _detailText _infoTextEn _detailTextEn _masterReleaseLabelId
2 1110001 リリース記念勧誘 「リリース記念勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [リリース記念] 」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br>リリース記念勧誘で入手できる「勧誘ポイント」は、以下の勧誘でも入手できます。<br>・UR確定 リリース記念勧誘<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Release Celebration Scout Release Celebration Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Release Celebration] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br>Scout Points obtainable in the Release Celebration Scout can also be earned in the following Scout:<br>- Guaranteed UR! Release Celebration Scout<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223041501
3 1110002 UR確定 リリース記念勧誘 「UR確定 リリース記念勧誘」は、有償ラブカ3000個で実施でき、UR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [リリース記念] 」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br>UR確定 リリース記念勧誘で入手できる「勧誘ポイント」は、以下の勧誘でも入手できます。<br>・リリース記念勧誘<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Guaranteed UR Release Celebration Scout The Guaranteed UR! Release Celebration Scout costs 3,000 Paid Loveca and guarantees one UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Release Celebration] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br>Scout Points obtainable in the Guaranteed UR! Release Celebration Scout can also be earned in the following Scout:<br>- Release Celebration Scout<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223041501
4 1110003 ピックアップ勧誘~放課後の原宿Liella!♡~ 「ピックアップ勧誘~放課後の原宿Liella!♡~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [放課後の原宿Liella!♡] 」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: After-School Harajuku Liella! ♡ Spotlight Scout: After-School Harajuku Liella!♡ always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [After-School Harajuku Liella!♡] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223041901
5 1110004 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223043001
6 1110005 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223051501
7 1110006 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223053101
8 1110007 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223061501
9 1110008 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223063001
10 1110009 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223071502
11 1110010 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223073101
12 1110011 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223081501
13 1110012 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223083107
14 1110013 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223091501
15 1110014 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223093001
16 1110015 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223101505
17 1110016 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223103107
18 1110017 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223111501
19 1110018 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223113008
20 1110019 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223121513
21 1110020 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223123107
22 1110021 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224011508
23 1110022 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224013108
24 1110023 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224021409
25 1110024 通常勧誘 「通常勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [通常]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Normal Scout Normal Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Normal] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224030120
26 2110001 ピックアップ勧誘~わたしたちとこの街~ 「ピックアップ勧誘~わたしたちとこの街~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [わたしたちとこの街]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Us and This City Spotlight Scout: Us and This Town always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Us and This Town] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223043002
27 2110002 ピックアップ勧誘~商店街をアピールだ!~ 「ピックアップ勧誘~商店街をアピールだ!~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [商店街をアピールだ!]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Let's Promote the Shopping District! Spotlight Scout: Show Off the Shopping District! always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Show Off the Shopping District!] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223051502
28 2110003 ピックアップ勧誘~Live in Nature~ 「ピックアップ勧誘~Live in Nature~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Live in Nature]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Live in Nature Spotlight Scout: Live in Nature always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Live in Nature] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223053102
29 2110004 ピックアップ勧誘~煌めく踊り子~ 「ピックアップ勧誘~煌めく踊り子~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [煌めく踊り子]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Glittering Dancers Spotlight Scout: Glittering Dancer always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Glittering Dancer] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223061502
30 2110005 ピックアップ勧誘~煌めく踊り子~ 「ピックアップ勧誘~煌めく踊り子~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [煌めく踊り子]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Glittering Dancers Spotlight Scout: Glittering Dancer always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Glittering Dancer] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223061502
31 2110006 ピックアップ勧誘~太陽降り注ぐ夏合宿~ 「ピックアップ勧誘~太陽降り注ぐ夏合宿~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [太陽降り注ぐ夏合宿]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Sun-Soaked Summer Camp Spotlight Scout: Sun-Drenched Summer Camp always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Sun-Drenched Summer Camp] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223063002
32 2110007 ピックアップ勧誘~太陽降り注ぐ夏合宿~ 「ピックアップ勧誘~太陽降り注ぐ夏合宿~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [太陽降り注ぐ夏合宿]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Sun-Soaked Summer Camp Spotlight Scout: Sun-Drenched Summer Camp always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Sun-Drenched Summer Camp] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223063002
33 2110008 ピックアップ勧誘~真夏の人魚姫~ 「ピックアップ勧誘~真夏の人魚姫~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [真夏の人魚姫]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Midsummer Mermaid Princess Spotlight Scout: Midsummer Mermaid Princess always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Midsummer Mermaid Princess] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223071503
34 2110009 ピックアップ勧誘~真夏の人魚姫~ 「ピックアップ勧誘~真夏の人魚姫~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [真夏の人魚姫]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Midsummer Mermaid Princess Spotlight Scout: Midsummer Mermaid Princess always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Midsummer Mermaid Princess] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223071503
35 2110010 ピックアップ勧誘~砂浜駆ける夏の海~ 「ピックアップ勧誘~砂浜駆ける夏の海~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [砂浜駆ける夏の海]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Racing Across the Summer Shore Spotlight Scout: Running Along the Summer Shore always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Running Along the Summer Shore] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223073102
36 2110011 ピックアップ勧誘~砂浜駆ける夏の海~ 「ピックアップ勧誘~砂浜駆ける夏の海~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [砂浜駆ける夏の海]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Racing Across the Summer Shore Spotlight Scout: Running Along the Summer Shore always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Running Along the Summer Shore] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223073102
37 2110012 ピックアップ勧誘~夏夜に咲き誇る花~ 「ピックアップ勧誘~夏夜に咲き誇る花~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [夏夜に咲き誇る花]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Flowers Blooming in the Summer Night Spotlight Scout: Flowers Blooming on a Summer Night always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Flowers Blooming on a Summer Night] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223081502
38 2110013 ピックアップ勧誘~夏夜に咲き誇る花~ 「ピックアップ勧誘~夏夜に咲き誇る花~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [夏夜に咲き誇る花]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Flowers Blooming in the Summer Night Spotlight Scout: Flowers Blooming on a Summer Night always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Flowers Blooming on a Summer Night] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223081502
39 2110014 ピックアップ勧誘~月夜に輝く尾花~ 「ピックアップ勧誘~月夜に輝く尾花~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [月夜に輝く尾花]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Silvergrass in the Moonlight Spotlight Scout: Silver Grass Glowing in the Moonlight always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Silver Grass Glowing in the Moonlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223083102
40 2110015 ピックアップ勧誘~月夜に輝く尾花~ 「ピックアップ勧誘~月夜に輝く尾花~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [月夜に輝く尾花]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Silvergrass in the Moonlight Spotlight Scout: Silver Grass Glowing in the Moonlight always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Silver Grass Glowing in the Moonlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223083102
41 2110016 ピックアップ勧誘~浴衣で涼む街めぐり~ 「ピックアップ勧誘~浴衣で涼む街めぐり~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [浴衣で涼む街めぐり]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Summer Stroll in Yukata Spotlight Scout: Strolling the Town in a Yukata always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Strolling the Town in a Yukata] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223091502
42 2110017 ピックアップ勧誘~浴衣で涼む街めぐり~ 「ピックアップ勧誘~浴衣で涼む街めぐり~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [浴衣で涼む街めぐり]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Summer Stroll in Yukata Spotlight Scout: Strolling the Town in a Yukata always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Strolling the Town in a Yukata] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223091502
43 2110018 ピックアップ勧誘~Trick or Treat!~ 「ピックアップ勧誘~Trick or Treat!~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Trick or Treat!]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Trick or Treat! Spotlight Scout: Trick or Treat! always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Trick or Treat!] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223093002
44 2110019 ピックアップ勧誘~Trick or Treat!~ 「ピックアップ勧誘~Trick or Treat!~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Trick or Treat!]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Trick or Treat! Spotlight Scout: Trick or Treat! always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Trick or Treat!] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223093002
45 2110020 ピックアップ勧誘~Boo! Boo! ハロウィンランド~ 「ピックアップ勧誘~Boo! Boo! ハロウィンランド~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Boo! Boo! Halloween Land Spotlight Scout: Boo! Boo! Halloween Land always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Half Anniversary] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223101506
46 2110021 ピックアップ勧誘~Boo! Boo! ハロウィンランド~ 「ピックアップ勧誘~Boo! Boo! ハロウィンランド~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Boo! Boo! Halloween Land Spotlight Scout: Boo! Boo! Halloween Land always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Half Anniversary] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223101506
47 2110022 ピックアップ勧誘~ひだまりのマーチングバンド~ 「ピックアップ勧誘~ひだまりのマーチングバンド~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ひだまりのマーチングバンド]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Sunny Marching Band Spotlight Scout: Sunlit Marching Band always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Sunlit Marching Band] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223103108
48 2110023 ピックアップ勧誘~ひだまりのマーチングバンド~ 「ピックアップ勧誘~ひだまりのマーチングバンド~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ひだまりのマーチングバンド]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Sunny Marching Band Spotlight Scout: Sunlit Marching Band always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Sunlit Marching Band] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223103108
49 2110024 ピックアップ勧誘~にゃんにゃん🐾メイドさん~ 「ピックアップ勧誘~にゃんにゃん🐾メイドさん~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [にゃんにゃん🐾メイドさん]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Nya-Nya 🐾 Maids Spotlight Scout: Nyan-Nyan🐾 Maids always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Nyan-Nyan🐾 Maids] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223111502
50 2110025 ピックアップ勧誘~にゃんにゃん🐾メイドさん~ 「ピックアップ勧誘~にゃんにゃん🐾メイドさん~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [にゃんにゃん🐾メイドさん]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Nya-Nya 🐾 Maids Spotlight Scout: Nyan-Nyan🐾 Maids always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Nyan-Nyan🐾 Maids] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223111502
51 2110026 ピックアップ勧誘~みんなでMerryChristmas!~ 「ピックアップ勧誘~みんなでMerryChristmas!~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [みんなでMerryChristmas!]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Merry Christmas, Everyone! Spotlight Scout: Merry Christmas Together! always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Merry Christmas Together!] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223113009
52 2110027 ピックアップ勧誘~みんなでMerryChristmas!~ 「ピックアップ勧誘~みんなでMerryChristmas!~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [みんなでMerryChristmas!]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Merry Christmas, Everyone! Spotlight Scout: Merry Christmas Together! always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Merry Christmas Together!] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223113009
53 2110028 ピックアップ勧誘~雪まつりのサンタクロース~ 「ピックアップ勧誘~雪まつりのサンタクロース~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [雪まつりのサンタクロース]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Santa Claus at the Snow Festival Spotlight Scout: Santa Claus at the Snow Festival always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Santa Claus at the Snow Festival] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223121505
54 2110029 ピックアップ勧誘~雪まつりのサンタクロース~ 「ピックアップ勧誘~雪まつりのサンタクロース~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [雪まつりのサンタクロース]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Santa Claus at the Snow Festival Spotlight Scout: Santa Claus at the Snow Festival always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Santa Claus at the Snow Festival] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223121505
55 2110030 ピックアップ勧誘~みんなへのあけましておめでとう~ 「ピックアップ勧誘~みんなへのあけましておめでとう~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [みんなへのあけましておめでとう]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Happy New Year to Everyone! Spotlight Scout: Happy New Year to Everyone always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Happy New Year to Everyone] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223123102
56 2110031 ピックアップ勧誘~みんなへのあけましておめでとう~ 「ピックアップ勧誘~みんなへのあけましておめでとう~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [みんなへのあけましておめでとう]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Happy New Year to Everyone! Spotlight Scout: Happy New Year to Everyone always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Happy New Year to Everyone] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223123102
57 2110032 ピックアップ勧誘~氷上のフェアリー~ 「ピックアップ勧誘~氷上のフェアリー~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [氷上のフェアリー]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Fairy on Ice Spotlight Scout: Fairy on the Ice always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Fairy on the Ice] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224011502
58 2110033 ピックアップ勧誘~氷上のフェアリー~ 「ピックアップ勧誘~氷上のフェアリー~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [氷上のフェアリー]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Fairy on Ice Spotlight Scout: Fairy on the Ice always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Fairy on the Ice] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224011502
59 2110034 ピックアップ勧誘~恋に囚われし乙女~ 「ピックアップ勧誘~恋に囚われし乙女~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [恋に囚われし乙女]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Maidens Captivated by Love Spotlight Scout: Maiden Captivated by Love always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Maiden Captivated by Love] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224013102
60 2110035 ピックアップ勧誘~恋に囚われし乙女~ 「ピックアップ勧誘~恋に囚われし乙女~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [恋に囚われし乙女]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Maidens Captivated by Love Spotlight Scout: Maiden Captivated by Love always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Maiden Captivated by Love] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224013102
61 2110036 ピックアップ勧誘~百鬼夜行の夜~ 「ピックアップ勧誘~百鬼夜行の夜~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [百鬼夜行の夜]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Night of the Hundred Demons Spotlight Scout: Night of the Hundred Demons always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Night of the Hundred Demons] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224021402
62 2110037 ピックアップ勧誘~百鬼夜行の夜~ 「ピックアップ勧誘~百鬼夜行の夜~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [百鬼夜行の夜]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Night of the Hundred Demons Spotlight Scout: Night of the Hundred Demons always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Night of the Hundred Demons] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224021402
63 2110038 ピックアップ勧誘~Y2K♡GALS~ 「ピックアップ勧誘~Y2K♡GALS~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Y2K♡GALS]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Y2K♡GALS Spotlight Scout: Y2K♡GALS always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Y2K♡GALS] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224030102
64 2110039 ピックアップ勧誘~Y2K♡GALS~ 「ピックアップ勧誘~Y2K♡GALS~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Y2K♡GALS]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Spotlight Scout: Y2K♡GALS Spotlight Scout: Y2K♡GALS always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Y2K♡GALS] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224030102
65 3110001 かのんちゃんお誕生日記念勧誘~ハーモニースター~ 「かのんちゃんお誕生日記念勧誘~ハーモニースター~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [かのんちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Kanon's Birthday Scout: Harmony Star Kanon's Birthday Celebration Scout: Harmony Star always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Kanon's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223050101
66 3110002 愛ちゃんお誕生日記念勧誘~カラフルヒロインズ~ 「愛ちゃんお誕生日記念勧誘~カラフルヒロインズ~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [愛ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Ai's Birthday Scout: Colorful Heroines Ai's Birthday Celebration Scout: Colorful Heroines always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Ai's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223053001
67 3110003 希ちゃんお誕生日記念勧誘~フラワーシャワー~ 「希ちゃんお誕生日記念勧誘~フラワーシャワー~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [希ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Nozomi's Birthday Scout: Flower Shower Nozomi's Birthday Celebration Scout: Flower Shower always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Nozomi's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223060901
68 3110004 鞠莉ちゃんお誕生日記念勧誘~フェアリーウイング~ 「鞠莉ちゃんお誕生日記念勧誘~フェアリーウイング~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [鞠莉ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Mari's Birthday Scout: Fairy Wing Mari's Birthday Celebration Scout: Fairy Wing always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Mari's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223061301
69 3110005 四季ちゃんお誕生日記念勧誘~ハーモニースター~ 「四季ちゃんお誕生日記念勧誘~ハーモニースター~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [四季ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Shiki's Birthday Scout: Harmony Star Shiki's Birthday Celebration Scout: Harmony Star always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Shiki's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223061701
70 3110006 果林ちゃんお誕生日記念勧誘~カラフルヒロインズ~ 「果林ちゃんお誕生日記念勧誘~カラフルヒロインズ~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [果林ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Karin's Birthday Scout: Colorful Heroines Karin's Birthday Celebration Scout: Colorful Heroines always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Karin's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223062901
71 3110007 善子ちゃんお誕生日記念勧誘~フェアリーウイング~ 「善子ちゃんお誕生日記念勧誘~フェアリーウイング~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [善子ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Yoshiko's Birthday Scout: Fairy Wing Yoshiko's Birthday Celebration Scout: Fairy Wing always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Yoshiko's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223071301
72 3110008 可可ちゃんお誕生日記念勧誘~ハーモニースター~ 「可可ちゃんお誕生日記念勧誘~ハーモニースター~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [可可ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Keke's Birthday Scout: Harmony Star Keke's Birthday Celebration Scout: Harmony Star always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Keke's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223071702
73 3110009 にこちゃんお誕生日記念勧誘~フラワーシャワー~ 「にこちゃんお誕生日記念勧誘~フラワーシャワー~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [にこちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Nico's Birthday Scout: Flower Shower Nico's Birthday Celebration Scout: Flower Shower always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Nico's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223072201
74 3110010 千歌ちゃんお誕生日記念勧誘~フェアリーウイング~ 「千歌ちゃんお誕生日記念勧誘~フェアリーウイング~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [千歌ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Chika's Birthday Scout: Fairy Wing Chika's Birthday Celebration Scout: Fairy Wing always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Chika's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223080102
75 3110011 穂乃果ちゃんお誕生日記念勧誘~フラワーシャワー~ 「穂乃果ちゃんお誕生日記念勧誘~フラワーシャワー~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [穂乃果ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Honoka's Birthday Scout: Flower Shower Honoka's Birthday Celebration Scout: Flower Shower always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Honoka's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223080303
76 3110012 夏美ちゃんお誕生日記念勧誘~ハーモニースター~ 「夏美ちゃんお誕生日記念勧誘~ハーモニースター~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [夏美ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Natsumi's Birthday Scout: Harmony Star Natsumi's Birthday Celebration Scout: Harmony Star always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Natsumi's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223080701
77 3110013 せつ菜ちゃんお誕生日記念勧誘~カラフルヒロインズ~ 「せつ菜ちゃんお誕生日記念勧誘~カラフルヒロインズ~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [せつ菜ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Setsuna's Birthday Scout: Colorful Heroines Setsuna's Birthday Celebration Scout: Colorful Heroines always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Setsuna's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223080801
78 3110014 ことりちゃんお誕生日記念勧誘~フラワーシャワー~ 「ことりちゃんお誕生日記念勧誘~フラワーシャワー~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ことりちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Kotori's Birthday Scout: Flower Shower Kotori's Birthday Celebration Scout: Flower Shower always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Kotori's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223091201
79 3110015 梨子ちゃんお誕生日記念勧誘~フェアリーウイング~ 「梨子ちゃんお誕生日記念勧誘~フェアリーウイング~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [梨子ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Riko's Birthday Scout: Fairy Wing Riko's Birthday Celebration Scout: Fairy Wing always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Riko's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223091901
80 3110016 ルビィちゃんお誕生日記念勧誘~フェアリーウイング~ 「ルビィちゃんお誕生日記念勧誘~フェアリーウイング~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ルビィちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Ruby's Birthday Scout: Fairy Wing Ruby's Birthday Celebration Scout: Fairy Wing always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Ruby's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223092101
81 3110017 すみれちゃんお誕生日記念勧誘~ハーモニースター~ 「すみれちゃんお誕生日記念勧誘~ハーモニースター~」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [すみれちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Sumire's Birthday Scout: Harmony Star Sumire's Birthday Celebration Scout: Harmony Star always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Sumire's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223092801
82 3110018 栞子ちゃんお誕生日記念勧誘~カラフルヒロインズ~ 「栞子ちゃんお誕生日記念勧誘~カラフルヒロインズ~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [栞子ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Shioriko's Birthday Scout: Colorful Heroines Shioriko's Birthday Celebration Scout: Colorful Heroines always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Shioriko's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223100502
83 3110019 絵里ちゃんお誕生日記念勧誘~フラワーシャワー~ 「絵里ちゃんお誕生日記念勧誘~フラワーシャワー~」は、μ's所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [絵里ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Eli's Birthday Scout: Flower Shower Eli's Birthday Celebration Scout: Flower Shower always features μ's Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Eli's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223102101
84 3110020 メイちゃんお誕生日記念勧誘~ハーモニースター~ 「メイちゃんお誕生日記念勧誘~ハーモニースター~」は、Liella!所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [メイちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Mei's Birthday Scout: Harmony Star Mei's Birthday Celebration Scout: Harmony Star always features Liella! Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Mei's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223102901
85 3110021 凛ちゃんお誕生日記念勧誘~フラワーシャワー~ 「凛ちゃんお誕生日記念勧誘~フラワーシャワー~」は、μ's所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [凛ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Rin's Birthday Scout: Flower Shower Rin's Birthday Celebration Scout: Flower Shower always features μ's Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Rin's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223110101
86 3110022 璃奈ちゃんお誕生日記念勧誘~カラフルヒロインズ~ 「璃奈ちゃんお誕生日記念勧誘~カラフルヒロインズ~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [璃奈ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Rina's Birthday Scout: Colorful Heroines Rina's Birthday Celebration Scout: Colorful Heroines always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Rina's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223111301
87 3110023 恋ちゃんお誕生日記念勧誘~ハーモニースター~ 「恋ちゃんお誕生日記念勧誘~ハーモニースター~」は、Liella!所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [恋ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Ren's Birthday Scout: Harmony Star Ren's Birthday Celebration Scout: Harmony Star always features Liella! Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Ren's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223112401
88 3110024 ミアちゃんお誕生日記念勧誘~カラフルヒロインズ~ 「ミアちゃんお誕生日記念勧誘~カラフルヒロインズ~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ミアちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Mia's Birthday Scout: Colorful Heroines Mia's Birthday Celebration Scout: Colorful Heroines always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Mia's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223120601
89 3110025 彼方ちゃんお誕生日記念勧誘~カラフルヒロインズ~ 「彼方ちゃんお誕生日記念勧誘~カラフルヒロインズ~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [彼方ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Kanata's Birthday Scout: Colorful Heroines Kanata's Birthday Celebration Scout: Colorful Heroines always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Kanata's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223121601
90 3110026 冬毬ちゃんお誕生日記念勧誘~ハーモニースター~ 「冬毬ちゃんお誕生日記念勧誘~ハーモニースター~」は、Liella!所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [冬毬ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Tomari's Birthday Scout: Harmony Star Tomari's Birthday Celebration Scout: Harmony Star always features Liella! Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Tomari's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223122801
91 3110027 ダイヤちゃんお誕生日記念勧誘~フェアリーウイング~ 「ダイヤちゃんお誕生日記念勧誘~フェアリーウイング~」は、Aqours所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ダイヤちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Dia's Birthday Scout: Fairy Wing Dia's Birthday Celebration Scout: Fairy Wing always features Aqours Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Dia's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224010103
92 3110028 花陽ちゃんお誕生日記念勧誘~フラワーシャワー~ 「花陽ちゃんお誕生日記念勧誘~フラワーシャワー~」は、μ's所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [花陽ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Hanayo's Birthday Scout: Flower Shower Hanayo's Birthday Celebration Scout: Flower Shower always features μ's Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Hanayo's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224011702
93 3110029 マルガレーテちゃんお誕生日記念勧誘~ハーモニースター~ 「マルガレーテちゃんお誕生日記念勧誘~ハーモニースター~」は、Liella!所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [マルガレーテちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Margarete's Birthday Scout: Harmony Star Margarete's Birthday Celebration Scout: Harmony Star always features Liella! Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Margarete's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224012002
94 3110030 かすみちゃんお誕生日記念勧誘~カラフルヒロインズ~ 「かすみちゃんお誕生日記念勧誘~カラフルヒロインズ~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [かすみちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Kasumi's Birthday Scout: Colorful Heroines Kasumi's Birthday Celebration Scout: Colorful Heroines always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Kasumi's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224012302
95 3110031 エマちゃんお誕生日記念勧誘~カラフルヒロインズ~ 「エマちゃんお誕生日記念勧誘~カラフルヒロインズ~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [エマちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Emma's Birthday Scout: Colorful Heroines Emma's Birthday Celebration Scout: Colorful Heroines always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Emma's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224020502
96 3110032 果南ちゃんお誕生日記念勧誘~フェアリーウイング~ 「果南ちゃんお誕生日記念勧誘~フェアリーウイング~」は、Aqours所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [果南ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Kanan's Birthday Scout: Fairy Wing Kanan's Birthday Celebration Scout: Fairy Wing always features Aqours Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Kanan's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224021004
97 3110033 嵐珠ちゃんお誕生日記念勧誘~カラフルヒロインズ~ 「嵐珠ちゃんお誕生日記念勧誘~カラフルヒロインズ~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [嵐珠ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Lanzhu's Birthday Scout: Colorful Heroines Lanzhu's Birthday Celebration Scout: Colorful Heroines always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Lanzhu's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224021502
98 3110034 千砂都ちゃんお誕生日記念勧誘~ハーモニースター~ 「千砂都ちゃんお誕生日記念勧誘~ハーモニースター~」は、Liella!所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [千砂都ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Chisato's Birthday Scout: Harmony Star Chisato's Birthday Celebration Scout: Harmony Star always features Liella! Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Chisato's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224022502
99 3110035 歩夢ちゃんお誕生日記念勧誘~カラフルヒロインズ~ 「歩夢ちゃんお誕生日記念勧誘~カラフルヒロインズ~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント[歩夢ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Ayumu's Birthday Scout: Colorful Heroines Ayumu's Birthday Celebration Scout: Colorful Heroines always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Ayumu's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224030107
100 3110036 花丸ちゃんお誕生日記念勧誘~フェアリーウイング~ 「花丸ちゃんお誕生日記念勧誘~フェアリーウイング~」は、Aqours所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント[花丸ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Hanamaru's Birthday Scout: Fairy Wing Hanamaru's Birthday Celebration Scout: Fairy Wing always features Aqours Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Hanamaru's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224030402
101 3110037 海未ちゃんお誕生日記念勧誘~フラワーシャワー~ 「海未ちゃんお誕生日記念勧誘~フラワーシャワー~」は、μ's所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [海未ちゃんお誕生記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Umi's Birthday Scout: Flower Shower Umi's Birthday Celebration Scout: Flower Shower always features μ's Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Umi's Birthday] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224031502
102 4110001 スマイル限定!ピックアップ勧誘 「スマイル限定!ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [属性ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Smile Only! Spotlight Scout Smile-Only Spotlight Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Type Spotlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223061103
103 4110002 ピュア限定!ピックアップ勧誘 「ピュア限定!ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [属性ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Pure Only! Spotlight Scout Pure-Only Spotlight Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Type Spotlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223061103
104 4110003 クール限定!ピックアップ勧誘 「クール限定!ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [属性ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Cool Only! Spotlight Scout Cool-Only Spotlight Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Type Spotlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223061103
105 4110004 スクフェスシリーズ感謝祭2023記念 UR確定勧誘 「スクフェスシリーズ感謝祭2023記念 UR確定勧誘」は、有償ラブカ3000個で実施でき、UR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個 SIF Series Thanksgiving Festival 2023 Guaranteed UR Scout SIF Series Thanksgiving 2023 Guaranteed UR Scout costs 3,000 Paid Loveca and guarantees one UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20 223062301
106 4110005 ラブソングカーニバル記念勧誘~歩夢編~ 「ラブソングカーニバル記念勧誘~歩夢編~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 歩夢編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Love Song Carnival Scout: Ayumu Love Song Carnival Celebration Scout: Ayumu Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Ayumu Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223100301
107 4110006 ラブソングカーニバル記念勧誘~かすみ編~ 「ラブソングカーニバル記念勧誘~かすみ編~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル かすみ編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Love Song Carnival Scout: Kasumi Love Song Carnival Celebration Scout: Kasumi Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Kasumi Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223101001
108 4110007 ラブソングカーニバル記念勧誘~しずく編~ 「ラブソングカーニバル記念勧誘~しずく編~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル しずく編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Love Song Carnival Scout: Shizuku Love Song Carnival Celebration Scout: Shizuku Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Shizuku Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223101701
109 4110008 ラブソングカーニバル記念勧誘~果林編~ 「ラブソングカーニバル記念勧誘~果林編~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 果林編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Love Song Carnival Scout: Karin Love Song Carnival Celebration Scout: Karin Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Karin Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223102401
110 4110009 ラブソングカーニバル記念勧誘~愛編~ 「ラブソングカーニバル記念勧誘~愛編~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 愛編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Love Song Carnival Scout: Ai Love Song Carnival Celebration Scout: Ai Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Ai Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223103101
111 4110010 ラブソングカーニバル記念勧誘~彼方編~ 「ラブソングカーニバル記念勧誘~彼方編~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 彼方編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Love Song Carnival Scout: Kanata Love Song Carnival Celebration Scout: Kanata Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Kanata Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223110701
112 4110011 ラブソングカーニバル記念勧誘~せつ菜編~ 「ラブソングカーニバル記念勧誘~せつ菜編~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル せつ菜編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Love Song Carnival Scout: Setsuna Love Song Carnival Celebration Scout: Setsuna Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Setsuna Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223111401
113 4110012 ラブソングカーニバル記念勧誘~エマ編~ 「ラブソングカーニバル記念勧誘~エマ編~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル エマ編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Love Song Carnival Scout: Emma Love Song Carnival Celebration Scout: Emma Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Emma Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223112101
114 4110013 ラブソングカーニバル記念勧誘~璃奈編~ 「ラブソングカーニバル記念勧誘~璃奈編~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 璃奈編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Love Song Carnival Scout: Rina Love Song Carnival Celebration Scout: Rina Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Rina Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223112801
115 4110014 ラブソングカーニバル記念勧誘~栞子編~ 「ラブソングカーニバル記念勧誘~栞子編~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 栞子編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Love Song Carnival Scout: Shioriko Love Song Carnival Celebration Scout: Shioriko Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Shioriko Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223120501
116 4110015 ラブソングカーニバル記念勧誘~ミア編~ 「ラブソングカーニバル記念勧誘~ミア編~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル ミア編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Love Song Carnival Scout: Mia Love Song Carnival Celebration Scout: Mia Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Mia Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223121201
117 4110016 ラブソングカーニバル記念勧誘~嵐珠編~ 「ラブソングカーニバル記念勧誘~嵐珠編~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル 嵐珠編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Love Song Carnival Scout: Lanzhu Love Song Carnival Celebration Scout: Lanzhu Arc always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival: Lanzhu Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223121901
118 4110017 最大100回無料!Half Anniversary記念勧誘 「最大100回無料!Half Anniversary記念勧誘」は1日1回のみ、期間中最大10回まで実施できます。<br>また、R以上の部員が加入します。<br><br>「10回勧誘」は無償で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Up to 100 Free Pulls! Half Anniversary Celebration Scout The Up to 100 Free Pulls! Half Anniversary Celebration Scout can be performed once per day, up to 10 times during the event period.<br>Members of rarity R or higher will also join.<br><br>A 10x Scout can be performed for free and guarantees at least one Member of rarity SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Half Anniversary] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223101501
119 4110019 UR確定 Half Anniversary記念勧誘~μ's編~ 「UR確定 Half Anniversary記念勧誘~μ's編~」は、有償ラブカ3000個で実施でき、μ's所属のUR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Guaranteed UR Half Anniversary Celebration Scout: μ's Guaranteed UR! Half Anniversary Celebration Scout: μ's Arc costs 3,000 Paid Loveca and guarantees one μ's UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Half Anniversary] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223101502
120 4110020 UR確定 Half Anniversary記念勧誘~Aqours編~ 「UR確定 Half Anniversary記念勧誘~Aqours編~」は、有償ラブカ3000個で実施でき、Aqours所属のUR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Guaranteed UR Half Anniversary Celebration Scout: Aqours Guaranteed UR! Half Anniversary Celebration Scout: Aqours Arc costs 3,000 Paid Loveca and guarantees one Aqours UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Half Anniversary] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223101502
121 4110021 UR確定 Half Anniversary記念勧誘~虹ヶ咲編~ 「UR確定 Half Anniversary記念勧誘~虹ヶ咲編~」は、有償ラブカ3000個で実施でき、虹ヶ咲学園スクールアイドル同好会所属のUR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Guaranteed UR Half Anniversary Celebration Scout: Nijigasaki Guaranteed UR! Half Anniversary Celebration Scout: Nijigasaki Arc costs 3,000 Paid Loveca and guarantees one Nijigasaki UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Half Anniversary] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223101502
122 4110022 UR確定 Half Anniversary記念勧誘~Liella!編~ 「UR確定 Half Anniversary記念勧誘~Liella!編~」は、有償ラブカ3000個で実施でき、Liella!所属のUR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Half Anniversary]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Guaranteed UR Half Anniversary Celebration Scout: Liella! Guaranteed UR! Half Anniversary Celebration Scout: Liella! Arc costs 3,000 Paid Loveca and guarantees one Liella! UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Half Anniversary] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223101502
123 4110023 私のラブソング編 開幕記念勧誘 「私のラブソング編 開幕記念勧誘」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [私のラブソング編]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます "My Love Song" Arc Launch Celebration Scout "My Love Song" Arc Premiere Celebration Scout always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [My Love Song Arc] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223090603
124 4110024 μ's限定!ピックアップ勧誘 「μ's限定!ピックアップ勧誘」は、μ's所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [μ's ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます μ's Only! Spotlight Scout μ's-Only Spotlight Scout always features μ's Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [μ's Spotlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223103111
125 4110025 Aqours限定!ピックアップ勧誘 「Aqours限定!ピックアップ勧誘」は、Aqours所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [Aqours ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Aqours Only! Spotlight Scout Aqours-Only Spotlight Scout always features Aqours Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Aqours Spotlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223111508
126 4110026 UR確定 Half Anniversary記念勧誘~後夜祭~ 「UR確定 Half Anniversary記念勧誘~後夜祭~」は、有償ラブカ3000個で実施でき、UR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ひだまりのマーチングバンド]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Guaranteed UR Half Anniversary Celebration Scout: After-Party Guaranteed UR! Half Anniversary Celebration Scout: Afterparty costs 3,000 Paid Loveca and guarantees one UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Sunlit Marching Band] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223103112
127 4110027 幻日のヨハネ -The Story of the Sound of Heart- 開催記念勧誘 「幻日のヨハネ -The Story of the Sound of Heart- 開催記念勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [幻日のヨハネ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Yohane the Parhelion -The Story of the Sound of Heart- Celebration Scout "Yohane the Parhelion -The Story of the Sound of Heart-" Celebration Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Yohane the Parhelion] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223121402
128 4110028 1年生限定!ピックアップ勧誘 「1年生限定!ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [1年生ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます 1st-Years Only! Spotlight Scout 1st-Years-Only Spotlight Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [1st-Year Spotlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223111702
129 4110029 2年生限定!ピックアップ勧誘 「2年生限定!ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [2年生ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます 2nd-Years Only! Spotlight Scout 2nd-Years-Only Spotlight Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [2nd-Year Spotlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223112404
130 4110030 3年生限定!ピックアップ勧誘 「3年生限定!ピックアップ勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [3年生ピックアップ]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます 3rd-Years Only! Spotlight Scout 3rd-Years-Only Spotlight Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [3rd-Year Spotlight] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223120103
131 4110031 異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘~Aqours編~ 「異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘~Aqours編~」は、Aqours所属のR以上の部員が必ず登場します。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個 Ijigen Fes THE IDOLM@STER LOVE LIVE! Song Battle Celebration Scout: Aqours Dimension Fes: THE IDOLM@STER × Love Live! Singing Battle Celebration Scout: Aqours Arc always features Aqours Members of rarity R or higher.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20 223120907
132 4110032 異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘~ニジガク編~ 「異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘~ニジガク編~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個 Ijigen Fes THE IDOLM@STER LOVE LIVE! Song Battle Celebration Scout: Nijigasaki Dimension Fes: THE IDOLM@STER × Love Live! Singing Battle Celebration Scout: Nijigasaki Arc always features Nijigasaki Members of rarity R or higher.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20 223120908
133 4110033 異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘~Liella!編~ 「異次元フェス アイドルマスター ラブライブ!歌合戦 開催記念勧誘~Liella!編~」は、Liella!所属のR以上の部員が必ず登場します。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個 Ijigen Fes THE IDOLM@STER LOVE LIVE! Song Battle Celebration Scout: Liella! Dimension Fes: THE IDOLM@STER × Love Live! Singing Battle Celebration Scout: Liella! Arc always features Liella! Members of rarity R or higher.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20 223120909
134 4110034 最大240回無料!年末年始記念勧誘 「最大240回無料!年末年始記念勧誘」は1日3回まで、期間中最大24回まで実施できます。<br>また、R以上の部員が加入します。<br><br>「10回勧誘」は無償で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [年末年始記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Up to 240 Free Pulls! New Year's Celebration Scout The Up to 240 Free Pulls! New Year Celebration Scout can be performed up to 3 times per day, up to 24 times during the event period.<br>Members of rarity R or higher will also join.<br><br>A 10x Scout can be performed for free and guarantees at least one Member of rarity SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [New Year Celebration] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223122604
135 4110035 UR確定!年末年始記念勧誘 「UR確定!年末年始記念勧誘」は、有償ラブカ3000個で実施でき、UR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [年末年始記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Guaranteed UR! New Year's Celebration Scout Guaranteed UR! New Year Celebration Scout costs 3,000 Paid Loveca and guarantees one UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [New Year Celebration] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 223122604
136 4110036 新春初夢記念勧誘 「新春初夢記念勧誘」は、R以上の部員が必ず登場します。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [新春記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます New Year's First Dream Celebration Scout New Year's First Dream Celebration Scout always features Members of rarity R or higher.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [New Year] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224010105
137 4110037 UR確定!新春初夢記念勧誘 「UR確定!新春初夢記念勧誘」は、有償ラブカ3000個で実施でき、UR部員が1人必ず加入します。<br><br>すでに加入している部員が登場した場合、自動的に「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [新春記念]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Guaranteed UR! New Year's First Dream Celebration Scout Guaranteed UR! New Year's First Dream Celebration Scout costs 3,000 Paid Loveca and guarantees one UR Member.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [New Year] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224010105
138 4110038 ラブソングカーニバル記念勧誘 「ラブソングカーニバル記念勧誘」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [ラブソングカーニバル]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Love Song Carnival Celebration Scout Love Song Carnival Celebration Scout always features Nijigasaki Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Love Song Carnival] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224011304
139 4110039 スクフェス2 大感謝勧誘~μ's編~ 「スクフェス2 大感謝勧誘~μ's編~」は、μ's所属のR以上の部員が必ず登場します。<br>「スクフェス2 大感謝勧誘~μ's編~」は、「10回勧誘チケット(スクフェス2 大感謝勧誘)」で実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [大感謝勧誘]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます School Idol Festival 2 Super Thanks Scout: μ's SIF2 Grand Thanksgiving Scout: μ's Arc always features μ's Members of rarity R or higher.<br>SIF2 Grand Thanksgiving Scout: μ's Arc can be performed using a 10x Scout Ticket (SIF2 Grand Thanksgiving Scout).<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Grand Thanksgiving] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224030109
140 4110040 スクフェス2 大感謝勧誘~Aqours編~ 「スクフェス2 大感謝勧誘~Aqours編~」は、Aqours所属のR以上の部員が必ず登場します。<br>「スクフェス2 大感謝勧誘~Aqours編~」は、「10回勧誘チケット(スクフェス2 大感謝勧誘)」で実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [大感謝勧誘]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます School Idol Festival 2 Super Thanks Scout: Aqours SIF2 Grand Thanksgiving Scout: Aqours Arc always features Aqours Members of rarity R or higher.<br>SIF2 Grand Thanksgiving Scout: Aqours Arc can be performed using a 10x Scout Ticket (SIF2 Grand Thanksgiving Scout).<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Grand Thanksgiving] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224030109
141 4110041 スクフェス2 大感謝勧誘~ニジガク編~ 「スクフェス2 大感謝勧誘~ニジガク編~」は、虹ヶ咲学園スクールアイドル同好会所属のR以上の部員が必ず登場します。<br>「スクフェス2 大感謝勧誘~ニジガク編~」は、「10回勧誘チケット(スクフェス2 大感謝勧誘)」で実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [大感謝勧誘]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます School Idol Festival 2 Super Thanks Scout: Nijigasaki SIF2 Grand Thanksgiving Scout: Nijigasaki Arc always features Nijigasaki Members of rarity R or higher.<br>SIF2 Grand Thanksgiving Scout: Nijigasaki Arc can be performed using a 10x Scout Ticket (SIF2 Grand Thanksgiving Scout).<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Grand Thanksgiving] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224030109
142 4110042 スクフェス2 大感謝勧誘~Liella!編~ 「スクフェス2 大感謝勧誘~Liella!編~」は、Liella!所属のR以上の部員が必ず登場します。<br>「スクフェス2 大感謝勧誘~Liella!編~」は、「10回勧誘チケット(スクフェス2 大感謝勧誘)」で実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [大感謝勧誘]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます School Idol Festival 2 Super Thanks Scout: Liella! SIF2 Grand Thanksgiving Scout: Liella! Arc always features Liella! Members of rarity R or higher.<br>SIF2 Grand Thanksgiving Scout: Liella! Arc can be performed using a 10x Scout Ticket (SIF2 Grand Thanksgiving Scout).<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Grand Thanksgiving] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224030109
143 4110043 スペシャル勧誘 「スペシャル勧誘」は、R以上の部員が必ず登場します。<br>「1回勧誘」は、ラブカ300個で実施できます。<br>「10回勧誘」は、ラブカ3000個で実施でき、SR以上の部員が1人以上必ず加入します。<br>「有償1回勧誘」は、有償ラブカ150個で毎日1回だけ実施できます。<br>「有償10回勧誘」は、有償ラブカ2000個で期間中1回だけ実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [スペシャル勧誘]」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。<br><br>交換されなかった「勧誘ポイント」は、本勧誘の終了時に自動的に「スキルブック(中)」に変換されます。<br>※変換されたスキルブック(中)は、プレゼントを経由せず直接加算されます<br>※スキルブック(中)の所持上限に達している場合は、プレゼントに贈られます Special Scout Special Scout always features Members of rarity R or higher.<br>A 1x Scout costs 300 Loveca.<br>A 10x Scout costs 3,000 Loveca and guarantees at least one Member of rarity SR or higher.<br>A 1x Paid Scout costs 150 Paid Loveca and can be performed once per day.<br>A 10x Paid Scout costs 2,000 Paid Loveca and can be performed once during the event period.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Special Scout] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange.<br><br>Any unused Scout Points will automatically be converted into Skill Books (M) when this Scout ends.<br>*Converted Skill Books (M) are added directly to your inventory, bypassing the present box.<br>*If your Skill Book (M) inventory is full, they will be sent to the present box. 224031602
144 4110044 スクールアイドル感謝祭 全員集合勧誘 「スクールアイドル感謝祭 全員集合勧誘」は、R以上の部員が必ず登場します。<br>「10回勧誘」は、ラブカ3000個で毎日1回まで実施できます。<br>「有償10回勧誘」は、有償ラブカ3000個で実施できます。<br>「有償1回勧誘」は、有償ラブカ50個で毎日3回まで実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個 School Idol Thanksgiving Festival All-Star Gathering Scout School Idol Thanksgiving Full Roster Scout always features Members of rarity R or higher.<br>A 10x Scout costs 3,000 Loveca and can be performed up to once per day.<br>A 10x Paid Scout costs 3,000 Paid Loveca.<br>A 1x Paid Scout costs 50 Paid Loveca and can be performed up to 3 times per day.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20 224032003
145 5110001 全部員大集合!ステップアップ勧誘 「全部員大集合!ステップアップ勧誘」は、STEPが進むごとに内容が変化するお得な勧誘です。<br>勧誘で入手可能な全部員(R・SR・UR)が登場します。<br>各STEPは10回勧誘で、STEPごとに必要なラブカの個数と確定枠が変化します。<br>・STEP 1:ラブカ500個(SR以上1人確定)<br>・STEP 2:ラブカ1000個(SR以上1人確定・UR確率アップ)<br>・STEP 3:ラブカ1500個(SR以上1人確定・UR確率アップ)<br>・STEP 4:ラブカ2000個(SR以上1人確定・UR確率大アップ)<br>・STEP 5:ラブカ2500個(UR部員1人確定!)<br><br>STEP 5の実施後は、再びSTEP 1から繰り返し実施できます。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個 All Members Step-Up Scout The All Members Step-Up Scout gets better with every STEP.<br>Every Scoutable member of each rarity (R, SR, and UR) can appear.<br>Each STEP is a 10x Scout; the Loveca cost and the guaranteed slot change per STEP.<br>- STEP 1: 500 Loveca (1 SR or higher guaranteed)<br>- STEP 2: 1,000 Loveca (1 SR or higher guaranteed, UR rate up)<br>- STEP 3: 1,500 Loveca (1 SR or higher guaranteed, UR rate up)<br>- STEP 4: 2,000 Loveca (1 SR or higher guaranteed, UR rate way up)<br>- STEP 5: 2,500 Loveca (1 UR Member guaranteed!)<br><br>After STEP 5, the ladder returns to STEP 1 and can be repeated.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20 1
146 7110002 スクフェスデータ連携特典 チケット勧誘 「スクフェスデータ連携特典 チケット勧誘」は、R以上の部員が必ず登場します。<br>「10回勧誘」は、「10回勧誘チケット(スクフェスデータ連携特典)」で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [リリース記念] 」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。 SIF Data Link Bonus Ticket Scout SIF Data Linkage Bonus Ticket Scout always features Members of rarity R or higher.<br>A 10x Scout can be performed using a 10x Scout Ticket (SIF Data Linkage Bonus) and guarantees at least one Member of rarity SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Release Celebration] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange. 223043003
147 7110003 スクスタデータ連携特典 チケット勧誘 「スクスタデータ連携特典 チケット勧誘」は、R以上の部員が必ず登場します。<br>「10回勧誘」は、「10回勧誘チケット(スクフェスデータ連携特典)」で実施でき、SR以上の部員が1人以上必ず加入します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※変換されたペンライトは、プレゼントを経由せず直接加算されます<br>※ペンライトの所持上限に達している場合は、プレゼントに贈られます<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個<br><br>また、登場した部員の人数に応じて「勧誘ポイント [リリース記念] 」を入手します。<br>獲得した「勧誘ポイント」は交換所にて部員やアイテム等と交換できます。 SIFAS Data Link Bonus Ticket Scout SIFAS Data Linkage Bonus Ticket Scout always features Members of rarity R or higher.<br>A 10x Scout can be performed using a 10x Scout Ticket (SIF Data Linkage Bonus) and guarantees at least one Member of rarity SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*Converted Penlights are added directly to your inventory, bypassing the present box.<br>*If your Penlight inventory is full, they will be sent to the present box.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20<br><br>You'll also earn Scout Points [Release Celebration] based on the number of Members you Scout.<br>Earned Scout Points can be exchanged for Members, items, and more at the Exchange. 223071202
148 8110001 アイテム勧誘 毎日1回、「アイテム勧誘」を実施できます。<br>「アイテム勧誘」は毎日0時にリセットされます。<br><br>「アイテム勧誘」では、以下のアイテムからランダムで10個登場します。<br>・ペンライト:×10個<br>・LPキャンディ[小]:×1個<br>・レッスンノート(小):×20個<br>・レッスンノート(中):×8個<br>・レッスンノート(大):×1個<br>・スキルブック(小):×18個<br>・スキルブック(中):×3個<br>・35000ゴールド Item Scout You can perform the Item Scout once per day.<br>The Item Scout resets daily at 0:00.<br><br>The Item Scout randomly draws 10 of the following items:<br>- Penlight ×10<br>- LP Candy (S) ×1<br>- Lesson Note (S) ×20<br>- Lesson Note (M) ×8<br>- Lesson Note (L) ×1<br>- Skill Book (S) ×18<br>- Skill Book (M) ×3<br>- 35,000 Gold 1
149 8110002 アイテム勧誘 毎日1回、「アイテム勧誘」を実施できます。<br>「アイテム勧誘」は毎日0時にリセットされます。<br><br>「アイテム勧誘」では、以下のアイテムからランダムで10個登場します。<br>・ペンライト:×10個<br>・LPキャンディ[小]:×1個<br>・レッスンノート(小):×20個<br>・レッスンノート(中):×8個<br>・レッスンノート(大):×1個<br>・スキルブック(小):×18個<br>・スキルブック(中):×3個<br>・35000ゴールド Item Scout You can perform the Item Scout once per day.<br>The Item Scout resets daily at 0:00.<br><br>The Item Scout randomly draws 10 of the following items:<br>- Penlight ×10<br>- LP Candy (S) ×1<br>- Lesson Note (S) ×20<br>- Lesson Note (M) ×8<br>- Lesson Note (L) ×1<br>- Skill Book (S) ×18<br>- Skill Book (M) ×3<br>- 35,000 Gold 223101604
150 8110004 アイテム勧誘 毎日1回、「アイテム勧誘」を実施できます。<br>「アイテム勧誘」は毎日0時にリセットされます。<br><br>「アイテム勧誘」では、以下のアイテムからランダムで10個登場します。<br>・ペンライト:×10個<br>・LPキャンディ[小]:×1個<br>・レッスンノート(小):×20個<br>・レッスンノート(中):×8個<br>・レッスンノート(大):×1個<br>・スキルブック(小):×18個<br>・スキルブック(中):×3個<br>・35000ゴールド Item Scout You can perform the Item Scout once per day.<br>The Item Scout resets daily at 0:00.<br><br>The Item Scout randomly draws 10 of the following items:<br>- Penlight ×10<br>- LP Candy (S) ×1<br>- Lesson Note (S) ×20<br>- Lesson Note (M) ×8<br>- Lesson Note (L) ×1<br>- Skill Book (S) ×18<br>- Skill Book (M) ×3<br>- 35,000 Gold 224010108
151 8110005 アイテム勧誘 毎日1回、「アイテム勧誘」を実施できます。<br>「アイテム勧誘」は毎日0時にリセットされます。<br><br>「アイテム勧誘」では、以下のアイテムからランダムで10個登場します。<br>・ペンライト:×10個<br>・LPキャンディ[小]:×1個<br>・レッスンノート(小):×20個<br>・レッスンノート(中):×8個<br>・レッスンノート(大):×1個<br>・スキルブック(小):×18個<br>・スキルブック(中):×3個<br>・35000ゴールド Item Scout You can perform the Item Scout once per day.<br>The Item Scout resets daily at 0:00.<br><br>The Item Scout randomly draws 10 of the following items:<br>- Penlight ×10<br>- LP Candy (S) ×1<br>- Lesson Note (S) ×20<br>- Lesson Note (M) ×8<br>- Lesson Note (L) ×1<br>- Skill Book (S) ×18<br>- Skill Book (M) ×3<br>- 35,000 Gold 224020106
152 8110006 アイテム勧誘 毎日1回、「アイテム勧誘」を実施できます。<br>「アイテム勧誘」は毎日0時にリセットされます。<br><br>「アイテム勧誘」では、以下のアイテムからランダムで10個登場します。<br>・ペンライト:×10個<br>・LPキャンディ[小]:×1個<br>・レッスンノート(小):×20個<br>・レッスンノート(中):×8個<br>・レッスンノート(大):×1個<br>・スキルブック(小):×18個<br>・スキルブック(中):×3個<br>・35000ゴールド Item Scout You can perform the Item Scout once per day.<br>The Item Scout resets daily at 0:00.<br><br>The Item Scout randomly draws 10 of the following items:<br>- Penlight ×10<br>- LP Candy (S) ×1<br>- Lesson Note (S) ×20<br>- Lesson Note (M) ×8<br>- Lesson Note (L) ×1<br>- Skill Book (S) ×18<br>- Skill Book (M) ×3<br>- 35,000 Gold 224030121
153 9110001 チュートリアル勧誘【高坂 穂乃果】 「チュートリアル勧誘【高坂 穂乃果】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「高坂穂乃果【満開の桜】 」が必ず加入します。 Tutorial Scout: Honoka Kosaka Tutorial Scout: Honoka Kosaka always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Honoka Kosaka [Cherry Blossoms in Full Bloom]. 1
154 9110002 チュートリアル勧誘【絢瀬 絵里】 「チュートリアル勧誘【絢瀬 絵里】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「絢瀬絵里【夕暮れの生徒会室】 」が必ず加入します。 Tutorial Scout: Eli Ayase Tutorial Scout: Eli Ayase always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Eli Ayase [Student Council Room at Dusk]. 1
155 9110003 チュートリアル勧誘【南 ことり】 「チュートリアル勧誘【南 ことり】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「南 ことり【いらっしゃいませ♪】 」が必ず加入します。 Tutorial Scout: Kotori Minami Tutorial Scout: Kotori Minami always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Kotori Minami [Welcome♪]. 1
156 9110004 チュートリアル勧誘【園田 海未】 「チュートリアル勧誘【園田 海未】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「園田海未【無心へと】 」が必ず加入します。 Tutorial Scout: Umi Sonoda Tutorial Scout: Umi Sonoda always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Umi Sonoda [Into Selflessness]. 1
157 9110005 チュートリアル勧誘【星空 凛】 「チュートリアル勧誘【星空 凛】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「星空 凛【きらめく屋上】 」が必ず加入します。 Tutorial Scout: Rin Hoshizora Tutorial Scout: Rin Hoshizora always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Rin Hoshizora [Sparkling Rooftop]. 1
158 9110006 チュートリアル勧誘【西木野 真姫】 「チュートリアル勧誘【西木野 真姫】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「西木野真姫【スマホ越しのはにかみ】 」が必ず加入します。 Tutorial Scout: Maki Nishikino Tutorial Scout: Maki Nishikino always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Maki Nishikino [Bashful Through the Screen]. 1
159 9110007 チュートリアル勧誘【東條 希】 「チュートリアル勧誘【東條 希】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「東條 希【降り注ぐ光】 」が必ず加入します。 Tutorial Scout: Nozomi Tojo Tutorial Scout: Nozomi Tojo always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Nozomi Tojo [Pouring Light]. 1
160 9110008 チュートリアル勧誘【小泉 花陽】 「チュートリアル勧誘【小泉 花陽】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「小泉花陽【µ'sへの想い】 」が必ず加入します。 Tutorial Scout: Hanayo Koizumi Tutorial Scout: Hanayo Koizumi always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Hanayo Koizumi [Feelings for µ's]. 1
161 9110009 チュートリアル勧誘【矢澤 にこ】 「チュートリアル勧誘【矢澤 にこ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「矢澤にこ【ありがた~い講義】 」が必ず加入します。 Tutorial Scout: Nico Yazawa Tutorial Scout: Nico Yazawa always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Nico Yazawa [A Most Gracious Lecture]. 1
162 9110010 チュートリアル勧誘【高海 千歌】 「チュートリアル勧誘【高海 千歌】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「高海千歌【練習帰りの談笑】 」が必ず加入します。 Tutorial Scout: Chika Takami Tutorial Scout: Chika Takami always features Members of rarity R or higher.<br>A 10x Scout can be performed for free and guarantees the UR Member Chika Takami [Chatting After Practice]. 1
163 9110011 チュートリアル勧誘【桜内 梨子】 「チュートリアル勧誘【桜内 梨子】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「桜内梨子【トリオの旋律】 」が必ず加入します。 Tutorial Scout: Riko Sakurauchi The Tutorial Scout [Riko Sakurauchi] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Riko Sakurauchi [Trio's Melody] is guaranteed to join. 1
164 9110012 チュートリアル勧誘【松浦 果南】 「チュートリアル勧誘【松浦 果南】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「松浦果南【頬を撫でる潮風】 」が必ず加入します。 Tutorial Scout: Kanan Matsuura The Tutorial Scout [Kanan Matsuura] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Kanan Matsuura [Cheek-Caressing Sea Breeze] is guaranteed to join. 1
165 9110013 チュートリアル勧誘【黒澤 ダイヤ】 「チュートリアル勧誘【黒澤 ダイヤ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「黒澤ダイヤ【姉の日課】 」が必ず加入します。 Tutorial Scout: Dia Kurosawa The Tutorial Scout [Dia Kurosawa] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Dia Kurosawa [A Sister's Routine] is guaranteed to join. 1
166 9110014 チュートリアル勧誘【渡辺 曜】 「チュートリアル勧誘【渡辺 曜】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「渡辺 曜【耀う水面】 」が必ず加入します。 Tutorial Scout: You Watanabe The Tutorial Scout [You Watanabe] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member You Watanabe [Shimmering Water] is guaranteed to join. 1
167 9110015 チュートリアル勧誘【津島 善子】 「チュートリアル勧誘【津島 善子】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「津島善子【堕天使じゃんけん】 」が必ず加入します。 Tutorial Scout: Yoshiko Tsushima The Tutorial Scout [Yoshiko Tsushima] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Yoshiko Tsushima [Fallen Angel Rock-Paper-Scissors] is guaranteed to join. 1
168 9110016 チュートリアル勧誘【国木田 花丸】 「チュートリアル勧誘【国木田 花丸】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「国木田花丸【アフターランチ】 」が必ず加入します。 Tutorial Scout: Hanamaru Kunikida The Tutorial Scout [Hanamaru Kunikida] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Hanamaru Kunikida [After Lunch] is guaranteed to join. 1
169 9110017 チュートリアル勧誘【小原 鞠莉】 「チュートリアル勧誘【小原 鞠莉】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「小原鞠莉【風光明媚】 」が必ず加入します。 Tutorial Scout: Mari Ohara The Tutorial Scout [Mari Ohara] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Mari Ohara [Scenic Beauty] is guaranteed to join. 1
170 9110018 チュートリアル勧誘【黒澤 ルビィ】 「チュートリアル勧誘【黒澤 ルビィ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「黒澤ルビィ【おねぼうさん】 」が必ず加入します。 Tutorial Scout: Ruby Kurosawa The Tutorial Scout [Ruby Kurosawa] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Ruby Kurosawa [Sleepyhead] is guaranteed to join. 1
171 9110019 チュートリアル勧誘【上原 歩夢】 「チュートリアル勧誘【上原 歩夢】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「上原歩夢【隣にいるよ】 」が必ず加入します。 Tutorial Scout: Ayumu Uehara The Tutorial Scout [Ayumu Uehara] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Ayumu Uehara [Right Beside You] is guaranteed to join. 1
172 9110020 チュートリアル勧誘【中須 かすみ】 「チュートリアル勧誘【中須 かすみ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「中須かすみ【レインボーコッペパン】 」が必ず加入します。 Tutorial Scout: Kasumi Nakasu The Tutorial Scout [Kasumi Nakasu] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Kasumi Nakasu [Rainbow Koppepan] is guaranteed to join. 1
173 9110021 チュートリアル勧誘【桜坂 しずく】 「チュートリアル勧誘【桜坂 しずく】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「桜坂しずく【素の自分で】 」が必ず加入します。 Tutorial Scout: Shizuku Osaka The Tutorial Scout [Shizuku Osaka] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Shizuku Osaka [My True Self] is guaranteed to join. 1
174 9110022 チュートリアル勧誘【朝香 果林】 「チュートリアル勧誘【朝香 果林】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「朝香果林【クオリティの追求】 」が必ず加入します。 Tutorial Scout: Karin Asaka The Tutorial Scout [Karin Asaka] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Karin Asaka [In Pursuit of Quality] is guaranteed to join. 1
175 9110023 チュートリアル勧誘【宮下 愛】 「チュートリアル勧誘【宮下 愛】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「宮下 愛【チェンジオブペース】 」が必ず加入します。 Tutorial Scout: Ai Miyashita The Tutorial Scout [Ai Miyashita] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Ai Miyashita [Change of Pace] is guaranteed to join. 1
176 9110024 チュートリアル勧誘【近江 彼方】 「チュートリアル勧誘【近江 彼方】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「近江彼方【姉妹の食卓】 」が必ず加入します。 Tutorial Scout: Kanata Konoe The Tutorial Scout [Kanata Konoe] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Kanata Konoe [Sisters' Dinner Table] is guaranteed to join. 1
177 9110025 チュートリアル勧誘【優木 せつ菜】 「チュートリアル勧誘【優木 せつ菜】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「優木せつ菜【大好きを伝えたい!】 」が必ず加入します。 Tutorial Scout: Setsuna Yuki The Tutorial Scout [Setsuna Yuki] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Setsuna Yuki [I Want to Share My Love!] is guaranteed to join. 1
178 9110026 チュートリアル勧誘【エマ・ヴェルデ】 「チュートリアル勧誘【エマ・ヴェルデ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「エマ・ヴェルデ【爽やかな木漏れ日】 」が必ず加入します。 Tutorial Scout: Emma Verde The Tutorial Scout [Emma Verde] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Emma Verde [Sunlight Through the Trees] is guaranteed to join. 1
179 9110027 チュートリアル勧誘【天王寺 璃奈】 「チュートリアル勧誘【天王寺 璃奈】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「天王寺璃奈【お散歩役員のお世話】 」が必ず加入します。 Tutorial Scout: Rina Tennoji The Tutorial Scout [Rina Tennoji] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Rina Tennoji [Pet-Walking Duty] is guaranteed to join. 1
180 9110028 チュートリアル勧誘【三船 栞子】 「チュートリアル勧誘【三船 栞子】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「三船栞子【精進あるのみ】 」が必ず加入します。 Tutorial Scout: Shioriko Mifune The Tutorial Scout [Shioriko Mifune] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Shioriko Mifune [Striving for Improvement] is guaranteed to join. 1
181 9110029 チュートリアル勧誘【ミア・テイラー】 「チュートリアル勧誘【ミア・テイラー】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「ミア・テイラー【渾身の作曲】 」が必ず加入します。 Tutorial Scout: Mia Taylor The Tutorial Scout [Mia Taylor] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Mia Taylor [All-Out Composition] is guaranteed to join. 1
182 9110030 チュートリアル勧誘【鐘 嵐珠】 「チュートリアル勧誘【鐘 嵐珠】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「鐘 嵐珠【ライバルで仲間】 」が必ず加入します。 Tutorial Scout: Lanzhu Zhong The Tutorial Scout [Lanzhu Zhong] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Lanzhu Zhong [Rivals and Friends] is guaranteed to join. 1
183 9110031 チュートリアル勧誘【澁谷 かのん】 「チュートリアル勧誘【澁谷 かのん】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「澁谷かのん【想いを胸に】 」が必ず加入します。 Tutorial Scout: Kanon Shibuya The Tutorial Scout [Kanon Shibuya] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Kanon Shibuya [Feelings in My Heart] is guaranteed to join. 1
184 9110032 チュートリアル勧誘【唐 可可】 「チュートリアル勧誘【唐 可可】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「唐 可可【衣装スタイリスト】 」が必ず加入します。 Tutorial Scout: Keke Tang The Tutorial Scout [Keke Tang] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Keke Tang [Costume Stylist] is guaranteed to join. 1
185 9110033 チュートリアル勧誘【嵐 千砂都】 「チュートリアル勧誘【嵐 千砂都】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「嵐 千砂都【先輩のステップ】 」が必ず加入します。 Tutorial Scout: Chisato Arashi The Tutorial Scout [Chisato Arashi] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Chisato Arashi [A Senior's Steps] is guaranteed to join. 1
186 9110034 チュートリアル勧誘【平安名 すみれ】 「チュートリアル勧誘【平安名 すみれ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「平安名すみれ【両腕いっぱい】 」が必ず加入します。 Tutorial Scout: Sumire Heanna The Tutorial Scout [Sumire Heanna] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Sumire Heanna [Two Armfuls] is guaranteed to join. 1
187 9110035 チュートリアル勧誘【葉月 恋】 「チュートリアル勧誘【葉月 恋】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「葉月 恋【母の残した結ヶ丘】 」が必ず加入します。 Tutorial Scout: Ren Hazuki The Tutorial Scout [Ren Hazuki] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Ren Hazuki [The Yuigaoka Mother Left Behind] is guaranteed to join. 1
188 9110036 チュートリアル勧誘【桜小路 きな子】 「チュートリアル勧誘【桜小路 きな子】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「桜小路きな子【地上230メートル】 」が必ず加入します。 Tutorial Scout: Kinako Sakurakoji The Tutorial Scout [Kinako Sakurakoji] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Kinako Sakurakoji [230 Meters Above Ground] is guaranteed to join. 1
189 9110037 チュートリアル勧誘【米女 メイ】 「チュートリアル勧誘【米女 メイ】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「米女メイ【コンプリート目前】 」が必ず加入します。 Tutorial Scout: Mei Yoneme The Tutorial Scout [Mei Yoneme] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Mei Yoneme [Almost Complete] is guaranteed to join. 1
190 9110038 チュートリアル勧誘【若菜 四季】 「チュートリアル勧誘【若菜 四季】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「若菜四季【放課後の科学室】 」が必ず加入します。 Tutorial Scout: Shiki Wakana The Tutorial Scout [Shiki Wakana] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Shiki Wakana [After-School Science Room] is guaranteed to join. 1
191 9110039 チュートリアル勧誘【鬼塚 夏美】 「チュートリアル勧誘【鬼塚 夏美】 」では、R以上の部員が必ず登場します。<br>「10回勧誘」は無料で実施でき、UR部員「鬼塚夏美【オニナッツ生配信中!】 」が必ず加入します。 Tutorial Scout: Natsumi Onitsuka The Tutorial Scout [Natsumi Onitsuka] guarantees members of R rarity or higher.<br>You can perform a 10x Scout for free, and the UR member Natsumi Onitsuka [OniNuts Live Stream!] is guaranteed to join. 1
192 6110001 μ's特待生勧誘 「μ's特待生勧誘」は、スクフェスに登場したμ'sの部員を勧誘できる特別な勧誘です。<br>提供割合:R 68% / SR 26% / UR 6%<br>11回勧誘では、SR以上の部員が1人確定で登場します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個 μ's Honor Student Scouting μ's Honor Student Scouting is a special Scout featuring the μ's members of School Idol Festival.<br>Rates: R 68% / SR 26% / UR 6%<br>An 11x Scout guarantees at least one SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20 1
193 6110002 Aqours特待生勧誘 「Aqours特待生勧誘」は、スクフェスに登場したAqoursの部員を勧誘できる特別な勧誘です。<br>提供割合:R 68% / SR 26% / UR 6%<br>11回勧誘では、SR以上の部員が1人確定で登場します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個 Aqours Honor Student Scouting Aqours Honor Student Scouting is a special Scout featuring the Aqours members of School Idol Festival.<br>Rates: R 68% / SR 26% / UR 6%<br>An 11x Scout guarantees at least one SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20 1
194 6110003 虹ヶ咲特待生勧誘 「虹ヶ咲特待生勧誘」は、スクフェスに登場した虹ヶ咲の部員を勧誘できる特別な勧誘です。<br>提供割合:R 68% / SR 26% / UR 6%<br>11回勧誘では、SR以上の部員が1人確定で登場します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個 Nijigasaki Honor Student Scouting Nijigasaki Honor Student Scouting is a special Scout featuring the Nijigasaki members of School Idol Festival.<br>Rates: R 68% / SR 26% / UR 6%<br>An 11x Scout guarantees at least one SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20 1
195 6110004 Liella!特待生勧誘 「Liella!特待生勧誘」は、スクフェスに登場したLiella!の部員を勧誘できる特別な勧誘です。<br>提供割合:R 68% / SR 26% / UR 6%<br>11回勧誘では、SR以上の部員が1人確定で登場します。<br><br>すでに加入している部員が登場した場合、自動で「ペンライト」に変換されます。<br>※ペンライトの獲得量は、部員のレアリティに応じて異なります<br>・UR:500個<br>・SR:50個<br>・R :20個 Liella! Honor Student Scouting Liella! Honor Student Scouting is a special Scout featuring the Liella! members of School Idol Festival.<br>Rates: R 68% / SR 26% / UR 6%<br>An 11x Scout guarantees at least one SR or higher.<br><br>If you Scout a Member you already have, they will automatically be converted into Penlights.<br>*The number of Penlights received depends on the Member's rarity:<br>- UR: 500<br>- SR: 50<br>- R: 20 1

File diff suppressed because it is too large Load Diff

View File

@@ -899,3 +899,11 @@
511000103,1,1,10,1500,0,0,0,0,1
511000104,1,1,10,2000,0,0,0,0,1
511000105,1,1,10,2500,0,0,0,0,1
6110001,1,1,11,3000,0,0,0,0,1
6110001,2,1,1,300,0,0,0,0,1
6110002,1,1,11,3000,0,0,0,0,1
6110002,2,1,1,300,0,0,0,0,1
6110003,1,1,11,3000,0,0,0,0,1
6110003,2,1,1,300,0,0,0,0,1
6110004,1,1,11,3000,0,0,0,0,1
6110004,2,1,1,300,0,0,0,0,1
1 _id _number _consumeType _count _price _limitCount _dailyLimitCount _masterItemId _masterLotteryRewardId _masterReleaseLabelId
899 511000103 1 1 10 1500 0 0 0 0 1
900 511000104 1 1 10 2000 0 0 0 0 1
901 511000105 1 1 10 2500 0 0 0 0 1
902 6110001 1 1 11 3000 0 0 0 0 1
903 6110001 2 1 1 300 0 0 0 0 1
904 6110002 1 1 11 3000 0 0 0 0 1
905 6110002 2 1 1 300 0 0 0 0 1
906 6110003 1 1 11 3000 0 0 0 0 1
907 6110003 2 1 1 300 0 0 0 0 1
908 6110004 1 1 11 3000 0 0 0 0 1
909 6110004 2 1 1 300 0 0 0 0 1

View File

@@ -1119,3 +1119,31 @@
511000105,2,511000112,2,2700,0,0,1
511000105,3,511000113,3,800,0,0,1
511000105,4,511000113,3,10000,0,1,1
6110001,1,611000101,1,6800,0,0,1
6110001,2,611000102,2,1500,0,0,1
6110001,3,611000103,2,1100,0,0,1
6110001,4,611000104,3,600,0,0,1
6110001,5,611000102,2,4688,0,1,1
6110001,6,611000103,2,3437,0,1,1
6110001,7,611000104,3,1875,0,1,1
6110002,1,611000201,1,6800,0,0,1
6110002,2,611000202,2,1500,0,0,1
6110002,3,611000203,2,1100,0,0,1
6110002,4,611000204,3,600,0,0,1
6110002,5,611000202,2,4688,0,1,1
6110002,6,611000203,2,3437,0,1,1
6110002,7,611000204,3,1875,0,1,1
6110003,1,611000301,1,6800,0,0,1
6110003,2,611000302,2,1500,0,0,1
6110003,3,611000303,2,1100,0,0,1
6110003,4,611000304,3,600,0,0,1
6110003,5,611000302,2,4688,0,1,1
6110003,6,611000303,2,3437,0,1,1
6110003,7,611000304,3,1875,0,1,1
6110004,1,611000401,1,6800,0,0,1
6110004,2,611000402,2,1500,0,0,1
6110004,3,611000403,2,1100,0,0,1
6110004,4,611000404,3,600,0,0,1
6110004,5,611000402,2,4688,0,1,1
6110004,6,611000403,2,3437,0,1,1
6110004,7,611000404,3,1875,0,1,1
1 _id _number _masterLotteryItemId _rarity _ratio _pickupRatio _ensured _masterReleaseLabelId
1119 511000105 2 511000112 2 2700 0 0 1
1120 511000105 3 511000113 3 800 0 0 1
1121 511000105 4 511000113 3 10000 0 1 1
1122 6110001 1 611000101 1 6800 0 0 1
1123 6110001 2 611000102 2 1500 0 0 1
1124 6110001 3 611000103 2 1100 0 0 1
1125 6110001 4 611000104 3 600 0 0 1
1126 6110001 5 611000102 2 4688 0 1 1
1127 6110001 6 611000103 2 3437 0 1 1
1128 6110001 7 611000104 3 1875 0 1 1
1129 6110002 1 611000201 1 6800 0 0 1
1130 6110002 2 611000202 2 1500 0 0 1
1131 6110002 3 611000203 2 1100 0 0 1
1132 6110002 4 611000204 3 600 0 0 1
1133 6110002 5 611000202 2 4688 0 1 1
1134 6110002 6 611000203 2 3437 0 1 1
1135 6110002 7 611000204 3 1875 0 1 1
1136 6110003 1 611000301 1 6800 0 0 1
1137 6110003 2 611000302 2 1500 0 0 1
1138 6110003 3 611000303 2 1100 0 0 1
1139 6110003 4 611000304 3 600 0 0 1
1140 6110003 5 611000302 2 4688 0 1 1
1141 6110003 6 611000303 2 3437 0 1 1
1142 6110003 7 611000304 3 1875 0 1 1
1143 6110004 1 611000401 1 6800 0 0 1
1144 6110004 2 611000402 2 1500 0 0 1
1145 6110004 3 611000403 2 1100 0 0 1
1146 6110004 4 611000404 3 600 0 0 1
1147 6110004 5 611000402 2 4688 0 1 1
1148 6110004 6 611000403 2 3437 0 1 1
1149 6110004 7 611000404 3 1875 0 1 1

File diff suppressed because it is too large Load Diff

View File

@@ -16,6 +16,34 @@ fn index_by(items: &JsonValue, key: &str) -> JsonValue {
info
}
// Missions in an id band grouped by the character they target, as
// [requiredBond, missionId] ordered by required bond. Read from masterdata
// rather than derived from the character id: the ids do not follow character
// order (4010/4011 sit at 1158079/1158080, after the 15000 tier), and
// characters added by a card import have none at all.
fn missions_by_character(lo: i64, hi: i64) -> JsonValue {
let mut acc: std::collections::HashMap<String, Vec<(i64, i64)>> = std::collections::HashMap::new();
for data in t("mission").members() {
let id = data["id"].as_i64().unwrap_or(0);
if id < lo || id >= hi || data["conditionValues"].len() != 1 {
continue;
}
acc.entry(data["conditionValues"][0].to_string())
.or_default()
.push((data["conditionNumber"].as_i64().unwrap_or(0), id));
}
let mut info = object! {};
for (character, mut list) in acc {
list.sort();
let mut entries = array![];
for (required, id) in list {
entries.push(array![required, id]).unwrap();
}
info[&character] = entries;
}
info
}
lazy_static! {
pub static ref STORY: JsonValue = index_by(&t("story_part"), "id");
@@ -203,6 +231,11 @@ lazy_static! {
pub static ref MISSION_LIST: JsonValue = index_by(&t("mission"), "id");
pub static ref CHARACTER_BOND_MISSIONS: JsonValue = missions_by_character(1158000, 1159000);
// 15 per character, aligned with live::CHATS.
pub static ref CHARACTER_CHAT_MISSIONS: JsonValue = missions_by_character(1958000, 1960000);
pub static ref CHARACTER_CHATS: JsonValue = {
let mut info = object! {};
for data in t("mission").members() {
@@ -223,6 +256,18 @@ lazy_static! {
pub static ref MISSION_REWARD: JsonValue = index_by(&t("mission_reward"), "id");
pub static ref MISSION_REWARDS: JsonValue = {
let mut info = object! {};
for data in t("mission_reward").members() {
let id = data["id"].to_string();
if info[&id].is_null() {
info[&id] = array![];
}
info[&id].push(data.clone()).unwrap();
}
info
};
pub static ref ITEM_INFO: JsonValue = index_by(&t("item"), "id");
pub static ref MUSIC: JsonValue = {
@@ -257,8 +302,71 @@ lazy_static! {
info
};
// const.csv keyed by _id. Values are strings in masterdata, exactly as the
// client reads them (ConstMst._value + StringExtensions.ToIntOrDefault).
pub static ref CONST: JsonValue = index_by(&t("const"), "id");
pub static ref LIVE_BOOST: JsonValue = index_by(&t("live_boost"), "value");
// The stamps every account starts with (chat_stamp._initialStamp), in masterdata
// order. Officially this is the whole of a fresh account's master_chat_stamp_ids —
// captured /api/chat/home responses open with exactly this list before an account's
// earned stamps are appended (see chat::tests::the_initial_stamp_set_matches_official).
pub static ref INITIAL_CHAT_STAMPS: JsonValue = {
let mut ids = array![];
for data in t("chat_stamp").members() {
if data["initialStamp"].as_i64().unwrap_or(0) == 1 {
ids.push(data["id"].clone()).unwrap();
}
}
ids
};
pub static ref EVENTS: JsonValue = index_by(&t("event"), "id");
// release_label.csv keyed by _id — the open/close window masterdata rows are gated
// on. _openedAt / _closedAt are blank for the evergreen label (id 1).
pub static ref RELEASE_LABEL: JsonValue = index_by(&t("release_label"), "id");
// event_score.csv keyed by _masterEventId (Shock.EventScoreMst) — the per-event
// event-point yield of one live. Ratios are 1/10000, like every other ratio the
// client divides by COMMON_CONST.RATIO_DIVISOR.
pub static ref EVENT_SCORE: JsonValue = index_by(&t("event_score"), "masterEventId");
// music_level rows keyed "{masterMusicId}_{level}" — _fullCombo is the note
// count the multi-live miss/great-perfect ratios are measured against.
pub static ref MUSIC_LEVEL: JsonValue = {
let mut info = object! {};
for data in t("music_level").members() {
info[format!("{}_{}", data["masterMusicId"], data["level"])] = data.clone();
}
info
};
// multievent_rankbonus keyed "{playerCount}_{liveRank}" — _eventPtBonus is a
// ratio in 1/10000 (the client renders these as `sum / 100` percent).
pub static ref MULTIEVENT_RANK_BONUS: JsonValue = {
let mut info = object! {};
for data in t("multievent_rankbonus").members() {
info[format!("{}_{}", data["playerCount"], data["liveRank"])] = data.clone();
}
info
};
pub static ref RANKS: JsonValue = t("user_rank");
pub static ref USER_RANK_REWARD: JsonValue = {
let mut info = object! {};
for data in t("user_rank_reward").members() {
let id = data["id"].to_string();
if info[&id].is_null() {
info[&id] = array![];
}
info[&id].push(data.clone()).unwrap();
}
info
};
pub static ref EVOLVE_COST: JsonValue = {
let mut info = object! {};
for data in t("card_evolve").members() {

View File

@@ -1,17 +1,15 @@
use jzon::object;
use actix_web::{web, HttpRequest, Responder};
use actix_web::{web, Responder};
use crate::encryption;
use crate::router::global;
use crate::router::{Body, Api};
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.route("/debug/error", web::post().to(error));
}
async fn error(req: HttpRequest, body: String) -> impl Responder {
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn error(Body(body): Body) -> impl Responder {
println!("client error: {}", body["code"]);
global::api(&req, Some(object!{}))
Api(Some(object!{}))
}

View File

@@ -2,9 +2,8 @@ use jzon::{JsonValue, object, array};
use actix_web::{web, HttpRequest, Responder};
use rand::RngExt;
use crate::encryption;
use crate::include_file;
use crate::router::{userdata, global, databases};
use crate::router::{userdata, global, databases, Body, Session, Api};
// I believe(?) this is all?
const STAR_EVENT_IDS: [u32; 3] = [127, 135, 139];
@@ -26,7 +25,39 @@ pub fn routes(cfg: &mut web::ServiceConfig) {
);
}
fn get_event_data(key: &str, event_id: u32) -> JsonValue {
// Whether a release_label window is open at `now`. A blank _openedAt has always been
// open and a blank _closedAt never closes, which is how the evergreen label (id 1) is
// expressed. _releaseStatus other than 1 is never released at all.
pub fn release_label_is_open(label_id: i64, now: u64) -> bool {
let label = &databases::RELEASE_LABEL[label_id.to_string()];
if label.is_empty() || label["releaseStatus"].as_i64().unwrap_or(0) != 1 {
return false;
}
if let Some(opened) = global::parse_datetime(&label["openedAt"].to_string()) {
if now < opened {
return false;
}
}
if let Some(closed) = global::parse_datetime(&label["closedAt"].to_string()) {
if now > closed {
return false;
}
}
true
}
// Whether an event is currently running, by its own release label window. ew had no
// in-session test before this — nothing else evaluates release_label — so this is the
// one place to extend if the event listing ever needs the same question answered.
pub fn is_in_session(event_id: u32, now: u64) -> bool {
let event = &databases::EVENTS[event_id.to_string()];
if event.is_empty() {
return false;
}
release_label_is_open(event["masterReleaseLabelId"].as_i64().unwrap_or(0), now)
}
pub fn get_event_data(key: &str, event_id: u32) -> JsonValue {
let mut event = userdata::get_acc_event(key);
let is_star_event = STAR_EVENT_IDS.contains(&event_id);
//println!("is_star_event: {}, {}", is_star_event, event_id);
@@ -51,10 +82,61 @@ fn get_event_data(key: &str, event_id: u32) -> JsonValue {
event[event_id.to_string()]["star_event"]["star_event_bonus_daily_count"] = 0.into();
}
normalise_event_shape(&mut event[event_id.to_string()]);
event[event_id.to_string()].clone()
}
fn save_event_data(key: &str, event_id: u32, data: JsonValue) {
// The client's /api/event response types are [Serializable] C# classes, and Unity's
// JsonUtility maps them structurally: `score_ranking`, `member_ranking` and `lottery_box`
// are OBJECTS (Shock.ProtocolData.ScoreRanking / MemberRanking / LotteryBox), not arrays.
// new_user_event.json used to seed them as `[]`, which the client cannot bind - and
// MngEventData.SendGetEvent's success callback dereferences `r.data.score_ranking` and
// friends unguarded, so a mis-shaped payload takes out the whole recv and its `onComplete`
// is never called. That callback is the completion of a GATING TaskFlow.Step in
// LiveRestartSelectScene.ReloadScene, so the scene hangs on its loading screen forever.
//
// The template is fixed, but accounts created before that keep their stored blob, so the
// shapes are normalised on the way out as well. Coercion only ever replaces a value the
// client could not have parsed anyway; a well-formed object is left exactly as it is.
// `set_member` already writes member_ranking as an object, which is the shape this agrees
// with.
fn normalise_event_shape(event: &mut JsonValue) {
fn ensure_object(slot: &mut JsonValue, template: JsonValue) {
if !slot.is_object() {
*slot = template;
} else {
for (key, value) in template.entries() {
if slot[key].is_null() {
slot[key] = value.clone();
}
}
}
}
ensure_object(&mut event["point_ranking"], object! { rank: 0, point: 0 });
ensure_object(&mut event["score_ranking"], object! { all_rank: 0, group_rank: 0, score: 0 });
ensure_object(
&mut event["member_ranking"],
object! { master_character_id: 0, rank: 0, point: 0 },
);
ensure_object(
&mut event["lottery_box"],
object! { master_lottery_id: 0, reset_count: 0, draw_count_list: array![] },
);
// Read by EventData.SetMultiParameter (help count, penalty window, disconnect flag);
// absent keys bind as 0/false, but sending them keeps the payload self-describing.
for key in ["is_disconnected", "help_count", "penalty_remaining_time"] {
if event[key].is_null() {
event[key] = 0.into();
}
}
if !event["mission_list"].is_array() {
event["mission_list"] = array![];
}
}
pub fn save_event_data(key: &str, event_id: u32, data: JsonValue) {
let mut event = userdata::get_acc_event(key);
// Check for old version of event data
@@ -114,12 +196,7 @@ fn init_star_event(event: &mut JsonValue) {
switch_music(event, 5);
}
async fn event(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = &encryption::decrypt_packet(&body).unwrap();
let body = jzon::parse(&body).unwrap();
async fn event(Session { key, body }: Session) -> impl Responder {
let master_event_id = body["master_event_id"].as_u32().unwrap();
let mut event = get_event_data(&key, master_event_id);
@@ -159,15 +236,11 @@ async fn event(req: HttpRequest, body: String) -> impl Responder {
}
}
global::api(&req, Some(event))
Api(Some(event))
}
async fn star_event(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
async fn star_event(Session { key, body }: Session) -> impl Responder {
let user = userdata::get_acc(&key);
let body = &encryption::decrypt_packet(&body).unwrap();
let body = jzon::parse(&body).unwrap();
let master_event_id = body["master_event_id"].as_u32().unwrap();
let mut event = get_event_data(&key, master_event_id);
@@ -180,18 +253,14 @@ async fn star_event(req: HttpRequest, body: String) -> impl Responder {
save_event_data(&key, master_event_id, event.clone());
global::api(&req, Some(object!{
Api(Some(object!{
star_event: star_event,
gift_list: [],
reward_list: []
}))
}
async fn change_target_music(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = &encryption::decrypt_packet(&body).unwrap();
let body = jzon::parse(&body).unwrap();
async fn change_target_music(Session { key, body }: Session) -> impl Responder {
let master_event_id = body["master_event_id"].as_u32().unwrap();
let mut event = get_event_data(&key, master_event_id);
@@ -202,14 +271,10 @@ async fn change_target_music(req: HttpRequest, body: String) -> impl Responder {
save_event_data(&key, master_event_id, event.clone());
global::api(&req, Some(event["star_event"].clone()))
Api(Some(event["star_event"].clone()))
}
async fn set_member(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = &encryption::decrypt_packet(&body).unwrap();
let body = jzon::parse(&body).unwrap();
async fn set_member(Session { key, body }: Session) -> impl Responder {
let master_event_id = body["master_event_id"].as_u32().unwrap();
let mut event = get_event_data(&key, master_event_id);
@@ -222,12 +287,12 @@ async fn set_member(req: HttpRequest, body: String) -> impl Responder {
save_event_data(&key, master_event_id, event.clone());
global::api(&req, Some(object!{
Api(Some(object!{
event_member: event["member_ranking"].clone()
}))
}
fn get_rank(event: u32, user_id: u64) -> u32 {
pub fn get_rank(event: u32, user_id: u64) -> u32 {
let scores = crate::router::event_ranking::get_raw_info(event);
let mut i=1;
@@ -240,9 +305,8 @@ fn get_rank(event: u32, user_id: u64) -> u32 {
0
}
async fn ranking(req: HttpRequest, body: String) -> impl Responder {
let body = &encryption::decrypt_packet(&body).unwrap();
let body = jzon::parse(&body).unwrap();
async fn ranking(req: HttpRequest, Body(body): Body) -> impl Responder {
let protocol = crate::router::global::client_protocol_version(&req);
let master_event_id = body["master_event_id"].as_u32().unwrap();
let scores = crate::router::event_ranking::get_scores_json().await[master_event_id as usize].clone();
let mut rv = array![];
@@ -250,7 +314,9 @@ async fn ranking(req: HttpRequest, body: String) -> impl Responder {
let start = if body["user_id"] == 0 { body["start_rank"].as_u32().unwrap() } else { get_rank(master_event_id, body["user_id"].as_u64().unwrap()) };
for score in scores.members() {
if i >= start && start + body["count"].as_u32().unwrap() >= i {
rv.push(score.clone()).unwrap();
let mut entry = score.clone();
crate::router::tools::guest::proxy_user_cards(&mut entry["user_detail"], protocol);
rv.push(entry).unwrap();
i += 1;
}
if start + body["count"].as_u32().unwrap() >= i {
@@ -258,7 +324,7 @@ async fn ranking(req: HttpRequest, body: String) -> impl Responder {
}
}
global::api(&req, Some(object!{
Api(Some(object!{
ranking_detail_list: rv
}))
}
@@ -271,10 +337,14 @@ fn get_star_rank(points: i64) -> i64 {
const LIMIT_COINS: i64 = 2000000000;
fn give_event_points(event_id: u32, amount: i64, user: &mut JsonValue) -> bool {
// The row is keyed by BOTH the event and the point type, exactly as get_points reads it
// back. Matching on the type alone credited whichever event's row happened to come first
// in the list — an account that had ever played a different event got its points there,
// and get_points (which does check the id) then reported 0 for the event just played.
pub fn give_event_points(event_id: u32, amount: i64, user: &mut JsonValue) -> bool {
let mut has = false;
for data in user["event_point_list"].members_mut() {
if data["type"] == 1 {
if data["type"] == 1 && data["master_event_id"] == event_id {
has = true;
let new_amount = data["amount"].as_i64().unwrap() + amount;
if new_amount > LIMIT_COINS {
@@ -295,7 +365,7 @@ fn give_event_points(event_id: u32, amount: i64, user: &mut JsonValue) -> bool {
false
}
fn get_points(event_id: u32, user: &JsonValue) -> i64 {
pub fn get_points(event_id: u32, user: &JsonValue) -> i64 {
for data in user["event_point_list"].members() {
if data["type"] == 1 && data["master_event_id"] == event_id {
return data["amount"].as_i64().unwrap()
@@ -304,23 +374,19 @@ fn get_points(event_id: u32, user: &JsonValue) -> i64 {
0
}
fn event_live(req: &HttpRequest, body: String, skipped: bool) -> Option<JsonValue> {
let key = global::get_login(req.headers(), &body);
let body_temp = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
fn event_live(req: &HttpRequest, key: &str, body: &JsonValue, skipped: bool) -> Option<JsonValue> {
let event_id = if skipped {
body_temp["master_event_id"].as_u32().unwrap()
body["master_event_id"].as_u32().unwrap()
} else {
crate::router::live::get_end_live_event_id(&key, &body_temp)?
crate::router::live::get_end_live_event_id(key, body)?
};
let mut resp = crate::router::live::live_end(req, &body, skipped);
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
let mut resp = crate::router::live::live_end(req, key, body, skipped);
let mut event = get_event_data(&key, event_id);
let mut user = userdata::get_acc(&key);
let live_id = databases::LIVE_LIST[body["master_live_id"].to_string()]["masterMusicId"].as_i64().unwrap();
let raw_score = body["live_score"]["score"].as_u64().unwrap_or(resp["high_score"].as_u64().unwrap());
let raw_score = body["live_score"]["score"].as_u64().or_else(|| resp["high_score"].as_u64()).unwrap_or(0);
let bonus_event = event["star_event"]["star_event_bonus_daily_count"].as_u64().unwrap();
let bonus_play_times = event["star_event"]["star_event_play_times_bonus_count"].as_u64().unwrap();
@@ -380,10 +446,103 @@ fn event_live(req: &HttpRequest, body: String, skipped: bool) -> Option<JsonValu
Some(resp)
}
async fn event_end(req: HttpRequest, body: String) -> impl Responder {
global::api(&req, event_live(&req, body, false))
async fn event_end(req: HttpRequest, Session { key, body }: Session) -> impl Responder {
Api(event_live(&req, &key, &body, false))
}
async fn event_skip(req: HttpRequest, body: String) -> impl Responder {
global::api(&req, event_live(&req, body, true))
async fn event_skip(req: HttpRequest, Session { key, body }: Session) -> impl Responder {
Api(event_live(&req, &key, &body, true))
}
#[cfg(test)]
mod tests {
use super::*;
// The client binds these with Unity's JsonUtility against [Serializable] classes:
// ScoreRanking { all_rank, group_rank, score }, MemberRanking { master_character_id,
// rank, point }, PointRanking { rank, point }, LotteryBox { master_lottery_id,
// reset_count, draw_count_list }. An array where an object is expected cannot bind, and
// MngEventData.SendGetEvent's callback dereferences them unguarded.
#[test]
fn the_new_user_template_already_has_the_client_shapes() {
let template: JsonValue =
jzon::parse(&include_file!("src/router/userdata/new_user_event.json")).unwrap();
for key in ["point_ranking", "score_ranking", "member_ranking", "lottery_box"] {
assert!(template[key].is_object(), "{} must be an object", key);
}
assert!(template["mission_list"].is_array());
assert_eq!(template["score_ranking"]["all_rank"], 0);
assert_eq!(template["member_ranking"]["master_character_id"], 0);
assert_eq!(template["lottery_box"]["draw_count_list"], array![]);
}
#[test]
fn stored_blobs_with_the_old_array_shapes_are_coerced() {
// Exactly what accounts created before the template fix have on disk.
let mut stored = object! {
point_ranking: object! { point: 12 },
score_ranking: array![],
member_ranking: array![],
lottery_box: array![],
mission_list: array![],
};
normalise_event_shape(&mut stored);
assert!(stored["score_ranking"].is_object());
assert_eq!(stored["score_ranking"]["all_rank"], 0);
assert!(stored["member_ranking"].is_object());
assert!(stored["lottery_box"].is_object());
assert_eq!(stored["lottery_box"]["draw_count_list"], array![]);
// A key that was already there survives; the missing sibling is filled in.
assert_eq!(stored["point_ranking"]["point"], 12);
assert_eq!(stored["point_ranking"]["rank"], 0);
// The multi trio EventData.SetMultiParameter reads.
assert_eq!(stored["is_disconnected"], 0);
assert_eq!(stored["help_count"], 0);
assert_eq!(stored["penalty_remaining_time"], 0);
}
#[test]
fn well_formed_data_is_left_alone() {
let mut live = object! {
point_ranking: object! { rank: 3, point: 900 },
score_ranking: object! { all_rank: 7, group_rank: 2, score: 4242 },
member_ranking: object! { master_character_id: 5, rank: 1, point: 10 },
lottery_box: object! { master_lottery_id: 8, reset_count: 1, draw_count_list: array![] },
mission_list: array![],
is_disconnected: 1,
help_count: 4,
penalty_remaining_time: 600,
};
let before = live.clone();
normalise_event_shape(&mut live);
assert_eq!(live, before);
}
// give_event_points and get_points must agree on what identifies a row. They did not:
// the write matched on the point type alone, so an account that had ever earned points
// in ANY event credited every later event to that first row — and get_points, which
// does compare the event id, then reported 0 for the event actually played.
#[test]
fn event_points_land_in_the_row_for_that_event() {
let mut user = object!{ event_point_list: array![] };
give_event_points(108, 35, &mut user);
assert_eq!(get_points(108, &user), 35);
// A second event opens a row of its own and leaves the first one alone.
give_event_points(111, 70, &mut user);
assert_eq!(get_points(111, &user), 70);
assert_eq!(get_points(108, &user), 35);
assert_eq!(user["event_point_list"].len(), 2);
// And a second live in the first event still adds to the first row.
give_event_points(108, 35, &mut user);
assert_eq!(get_points(108, &user), 70);
assert_eq!(get_points(111, &user), 70);
assert_eq!(user["event_point_list"].len(), 2);
// An event never played is worth nothing, not somebody else's total.
assert_eq!(get_points(115, &user), 0);
}
}

View File

@@ -82,7 +82,9 @@ fn get_json() -> JsonValue {
let mut i = 1;
for score in scores.members() {
let user = guest::get_user(score["user"].as_i64().unwrap(), &object![], guest::UserView::Ranking);
// The cached ranking json keeps every card unproxied; event.rs
// re-proxies per requesting client's protocol version
let user = guest::get_user(score["user"].as_i64().unwrap(), &object![], guest::UserView::Ranking, u32::MAX);
rv[event.to_string()].push(object!{
"rank": i,
"user_detail": user,

View File

@@ -1,17 +1,15 @@
use jzon::{object, array, JsonValue};
use actix_web::{web, HttpRequest, Responder};
use actix_web::{web, Responder};
use crate::router::{global, userdata, items, databases};
use crate::encryption;
use crate::router::{userdata, items, databases, Login, Session, Api};
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.service(web::resource("/exchange").route(web::get().to(exchange)).route(web::post().to(exchange_post)));
}
async fn exchange(req: HttpRequest) -> impl Responder {
let key = global::get_login(req.headers(), "");
async fn exchange(Login(key): Login) -> impl Responder {
let exchange = userdata::get_acc_exchange(&key);
global::api(&req, Some(object!{
Api(Some(object!{
"exchange_list": exchange
}))
}
@@ -34,9 +32,7 @@ fn exchange_updated_value_list(is_card: bool, granted_id: i64, consumed_id: i64,
rv
}
async fn exchange_post(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn exchange_post(Session { key, body }: Session) -> impl Responder {
let mut user = userdata::get_acc(&key);
let mut missions = userdata::get_acc_missions(&key);
let mut chats = userdata::get_acc_chats(&key);
@@ -81,7 +77,7 @@ async fn exchange_post(req: HttpRequest, body: String) -> impl Responder {
userdata::save_acc_chats(&key, chats);
userdata::save_acc_exchange(&key, exchanges);
global::api(&req, Some(object!{
Api(Some(object!{
"clear_mission_ids": cleared_missions,
"exchange": {
master_exchange_item_id: exchange_id,

View File

@@ -1,8 +1,7 @@
use jzon::{array, object};
use actix_web::{web, HttpRequest, Responder};
use crate::router::{global, userdata};
use crate::encryption;
use crate::router::{global, userdata, Login, Session, Api};
use crate::router::tools::guest;
pub const FRIEND_LIMIT: usize = 40;
@@ -21,9 +20,8 @@ pub fn routes(cfg: &mut web::ServiceConfig) {
);
}
async fn friend(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn friend(req: HttpRequest, Session { key, body }: Session) -> impl Responder {
let protocol = crate::router::global::client_protocol_version(&req);
let user_id = userdata::get_acc(&key)["user"]["id"].as_i64().unwrap();
let friends = userdata::get_acc_friends(&key);
@@ -40,25 +38,24 @@ async fn friend(req: HttpRequest, body: String) -> impl Responder {
};
for uid in rv_data.members() {
let mut user = guest::get_user(uid.as_i64().unwrap(), &friends, guest::UserView::Card);
let mut user = guest::get_user(uid.as_i64().unwrap(), &friends, guest::UserView::Card, protocol);
user["user"]["last_login_time"] = global::set_time(user["user"]["last_login_time"].as_u64().unwrap_or(0), user_id, false).into();
rv.push(user).unwrap();
}
global::api(&req, Some(object!{
Api(Some(object!{
"friend_list": rv
}))
}
async fn ids(req: HttpRequest) -> impl Responder {
let key = global::get_login(req.headers(), "");
async fn ids(Login(key): Login) -> impl Responder {
let friends = userdata::get_acc_friends(&key);
global::api(&req, Some(friends))
Api(Some(friends))
}
async fn recommend(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
async fn recommend(req: HttpRequest, Login(key): Login) -> impl Responder {
let protocol = crate::router::global::client_protocol_version(&req);
let user_id = userdata::get_acc(&key)["user"]["id"].as_i64().unwrap();
let friends = userdata::get_acc_friends(&key);
@@ -70,7 +67,7 @@ async fn recommend(req: HttpRequest, body: String) -> impl Responder {
let mut rv = array![];
for uid in random.members() {
let mut user = guest::get_user(uid.as_i64().unwrap(), &friends, guest::UserView::Card);
let mut user = guest::get_user(uid.as_i64().unwrap(), &friends, guest::UserView::Card, protocol);
if user["user"]["friend_request_disabled"] == 1 || user.is_empty() {
continue;
}
@@ -78,29 +75,25 @@ async fn recommend(req: HttpRequest, body: String) -> impl Responder {
rv.push(user).unwrap();
}
global::api(&req, Some(object!{
Api(Some(object!{
friend_list: rv
}))
}
async fn search(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn search(req: HttpRequest, Session { key, body }: Session) -> impl Responder {
let friends = userdata::get_acc_friends(&key);
let uid = body["user_id"].as_i64().unwrap();
let user = guest::get_user(uid, &friends, guest::UserView::Detail);
let user = guest::get_user(uid, &friends, guest::UserView::Detail, crate::router::global::client_protocol_version(&req));
global::api(&req, Some(if user.is_empty() {
Api(Some(if user.is_empty() {
array![]
} else {
user
}))
}
async fn request(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn request(Session { key, body }: Session) -> impl Responder {
let user_id = userdata::get_acc(&key)["user"]["id"].as_i64().unwrap();
let mut friends = userdata::get_acc_friends(&key);
@@ -113,12 +106,10 @@ async fn request(req: HttpRequest, body: String) -> impl Responder {
userdata::friend_request(uid, user_id);
}
global::api(&req, Some(array![]))
Api(Some(array![]))
}
async fn approve(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn approve(Session { key, body }: Session) -> impl Responder {
let user_id = userdata::get_acc(&key)["user"]["id"].as_i64().unwrap();
let mut friends = userdata::get_acc_friends(&key);
@@ -134,12 +125,10 @@ async fn approve(req: HttpRequest, body: String) -> impl Responder {
userdata::save_acc_friends(&key, friends);
}
global::api(&req, Some(array![]))
Api(Some(array![]))
}
async fn cancel(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn cancel(Session { key, body }: Session) -> impl Responder {
let user_id = userdata::get_acc(&key)["user"]["id"].as_i64().unwrap();
let mut friends = userdata::get_acc_friends(&key);
@@ -151,12 +140,10 @@ async fn cancel(req: HttpRequest, body: String) -> impl Responder {
userdata::friend_request_approve(uid, user_id, false, "pending_user_id_list");
userdata::save_acc_friends(&key, friends);
global::api(&req, Some(array![]))
Api(Some(array![]))
}
async fn delete(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn delete(Session { key, body }: Session) -> impl Responder {
let user_id = userdata::get_acc(&key)["user"]["id"].as_i64().unwrap();
let mut friends = userdata::get_acc_friends(&key);
@@ -168,5 +155,5 @@ async fn delete(req: HttpRequest, body: String) -> impl Responder {
userdata::friend_remove(uid, user_id);
userdata::save_acc_friends(&key, friends);
global::api(&req, Some(array![]))
Api(Some(array![]))
}

View File

@@ -13,98 +13,151 @@ use crate::router::{items, userdata};
use crate::database::gree;
use crate::runtime::get_easter_mode;
struct AssetHashes {
version_android: &'static str,
version_ios: &'static str,
version_windows: &'static str,
version_webgl: &'static str,
android: &'static str,
ios: &'static str,
windows: &'static str,
webgl: &'static str,
struct AssetVersion {
region: &'static str,
platform: &'static str,
version: &'static str,
hash: &'static str,
latest: bool,
}
static ASSET_TABLE: &[(&str, AssetHashes)] = &[
("JP", AssetHashes {
version_android: "4c921d2443335e574a82e04ec9ea243c",
version_ios: "4c921d2443335e574a82e04ec9ea243c",
version_windows: "4c921d2443335e574a82e04ec9ea243c",
version_webgl: "4c921d2443335e574a82e04ec9ea243c",
android: "67f8f261c16b3cca63e520a25aad6c1c",
ios: "b8975be8300013a168d061d3fdcd4a16",
windows: "fcc15c3dc02250d49c4c492c3b9d58fc",
webgl: "e1ff7c74b20c8d216507972b6f24b9df",
}),
("GL", AssetHashes {
version_android: "5260ff15dff8ba0c00ad91400f515f55",
version_ios: "5260ff15dff8ba0c00ad91400f515f55",
version_windows: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
version_webgl: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
android: "d210b28037885f3ef56b8f8aa45ac95b",
ios: "dd7175e4bcdab476f38c33c7f34b5e4d",
windows: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
webgl: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
}),
static ASSET_VERSIONS: &[AssetVersion] = &[
// Default / stock
AssetVersion { region: "JP", platform: "Android", version: "4c921d2443335e574a82e04ec9ea243c", hash: "67f8f261c16b3cca63e520a25aad6c1c", latest: false },
AssetVersion { region: "JP", platform: "iOS", version: "4c921d2443335e574a82e04ec9ea243c", hash: "b8975be8300013a168d061d3fdcd4a16", latest: false },
AssetVersion { region: "GL", platform: "Android", version: "5260ff15dff8ba0c00ad91400f515f55", hash: "d210b28037885f3ef56b8f8aa45ac95b", latest: false },
AssetVersion { region: "GL", platform: "iOS", version: "5260ff15dff8ba0c00ad91400f515f55", hash: "dd7175e4bcdab476f38c33c7f34b5e4d", latest: false },
// Re-written client versions 2.0.0 - 2.1.2 (windows only)
AssetVersion { region: "JP", platform: "Windows", version: "4c921d2443335e574a82e04ec9ea243c", hash: "4ed1d077df2d1b29e17d25d64fb37242", latest: false },
// Re-written client versions 2.2.0 - 2.2.2
AssetVersion { region: "JP", platform: "Windows", version: "ced44f266b4e4c8eb05fe417fd5f3d1b", hash: "ec508163f04e0f9e0435b4302011d123", latest: false },
AssetVersion { region: "JP", platform: "Android", version: "ced44f266b4e4c8eb05fe417fd5f3d1b", hash: "27eabc1af04fa6e4a727516d2bbdadff", latest: false },
// Re-written client versions 2.3.0 - 2.3.2
AssetVersion { region: "JP", platform: "Windows", version: "1b2fe99a639b4ca491afe1a841f19d56", hash: "fd37b607ca271a6ffe17b1e2046c45ad", latest: false },
AssetVersion { region: "JP", platform: "Android", version: "1b2fe99a639b4ca491afe1a841f19d56", hash: "ed8f4b8df9d3935d689e1236a6816b2b", latest: false },
AssetVersion { region: "JP", platform: "iOS", version: "1b2fe99a639b4ca491afe1a841f19d56", hash: "407a8fd81cc5f525ad12c957dbefccb2", latest: false },
// Re-written client versions 2.4.0 - 2.4.2
AssetVersion { region: "JP", platform: "Windows", version: "7d9c2e5efa794a048c11bcaf781ace79", hash: "d1b4db937c1af8364d38f08296cbcfae", latest: false },
AssetVersion { region: "JP", platform: "Android", version: "7d9c2e5efa794a048c11bcaf781ace79", hash: "8fcb61a08e69d854438c4f318d38cabd", latest: false },
AssetVersion { region: "JP", platform: "iOS", version: "7d9c2e5efa794a048c11bcaf781ace79", hash: "65bb39a0030620d9720edb5e65d31ac3", latest: false },
// Re-written client versions 2.5.0 -
AssetVersion { region: "JP", platform: "Windows", version: "01a71b00f63e4dba92117ac7e60070a6", hash: "b8d0e7edcb63f5bdd28817a597772ca6", latest: true },
AssetVersion { region: "JP", platform: "Android", version: "01a71b00f63e4dba92117ac7e60070a6", hash: "d12cecc5695da7f81f8873a3ff93752e", latest: true },
AssetVersion { region: "JP", platform: "iOS", version: "01a71b00f63e4dba92117ac7e60070a6", hash: "7c1f61ee68ac84c82dd397a162629142", latest: true },
//AssetVersion { region: "JP", platform: "WebGL", version: "4c921d2443335e574a82e04ec9ea243c", hash: "e1ff7c74b20c8d216507972b6f24b9df", latest: true },
];
impl AssetHashes {
fn resolve(&self, platform: &str, region: &str, easter_hash: Option<&str>) -> Option<String> {
let args = crate::get_args();
let (base, override_hash) = match (region, platform) {
("JP", "Android") => (self.android, args.jp_android_asset_hash.as_str()),
("JP", "iOS") => (self.ios, args.jp_ios_asset_hash.as_str()),
("JP", "Windows") => (self.windows, args.windows_asset_hash.as_str()),
("JP", "WebGL") => (self.webgl, ""),
("GL", "Android") => (self.android, args.en_android_asset_hash.as_str()),
("GL", "iOS") => (self.ios, args.en_ios_asset_hash.as_str()),
_ => return None,
};
Some(if !override_hash.is_empty() {
override_hash
} else if let Some(easter) = easter_hash {
easter
} else {
base
}.to_string())
impl AssetVersion {
fn stock_hash(&self) -> String {
if self.latest && self.platform == "Android" && get_easter_mode() {
if let Some((_, easter)) = EASTER_HASHES.iter().find(|(r, _)| *r == self.region) {
return easter.to_string();
}
}
self.hash.to_string()
}
fn version_for(&self, platform: &str, region: &str) -> Option<String> {
fn override_pair(&self) -> Option<(String, String)> {
let args = crate::get_args();
let (base, override_version) = match (region, platform) {
("JP", "Android") => (self.version_android, ""),
("JP", "iOS") => (self.version_ios, ""),
("JP", "Windows") => (self.version_windows, args.windows_asset_version.as_str()),
("JP", "WebGL") => (self.version_webgl, ""),
("GL", "Android") => (self.version_android, ""),
("GL", "iOS") => (self.version_ios, ""),
("GL", "Windows") => (self.version_windows, ""),
_ => return None,
let ov = args.asset_version.as_str();
let oh = match (self.region, self.platform) {
("JP", "Windows") => args.windows_asset_hash.as_str(),
("JP", "Android") => args.jp_android_asset_hash.as_str(),
("JP", "iOS") => args.jp_ios_asset_hash.as_str(),
("GL", "Android") => args.en_android_asset_hash.as_str(),
("GL", "iOS") => args.en_ios_asset_hash.as_str(),
_ => "",
};
Some(if !override_version.is_empty() {
override_version
} else {
base
}.to_string())
if ov.is_empty() && oh.is_empty() {
return None;
}
let version = if ov.is_empty() { self.version } else { ov };
let hash = if oh.is_empty() { self.hash } else { oh };
Some((version.to_string(), hash.to_string()))
}
}
fn valid_hashes(asset_version: &str, platform: &str) -> Vec<String> {
let mut out = Vec::new();
for entry in ASSET_VERSIONS {
if entry.platform != platform {
continue;
}
if entry.version == asset_version {
out.push(entry.stock_hash());
}
if entry.latest {
if let Some((ov, oh)) = entry.override_pair() {
if ov == asset_version {
out.push(oh);
}
}
}
}
out
}
fn preferred_hash(asset_version: &str, platform: &str) -> Option<String> {
let mut stock = None;
for entry in ASSET_VERSIONS {
if entry.platform != platform {
continue;
}
if entry.latest {
if let Some((ov, oh)) = entry.override_pair() {
if ov == asset_version {
return Some(oh);
}
}
}
if entry.version == asset_version && stock.is_none() {
stock = Some(entry.stock_hash());
}
}
stock
}
static EASTER_HASHES: &[(&str, &str)] = &[
("JP", "eac0cad61c82bf2e31fc596555747d11"),
("GL", "da7ae831381c3f29337caa9891db7e6a"),
];
pub const RESULT_GAME_VERSION_UPDATED: i32 = 12;
pub const RESULT_RESOURCE_UPDATED: i32 = 13;
pub const RESULT_SESSION: i32 = 14;
pub const PROTOCOL_HEADER: &str = "X-Protocol-Version";
pub fn client_protocol_version(req: &HttpRequest) -> u32 {
req.headers()
.get(PROTOCOL_HEADER)
.and_then(|v| v.to_str().ok())
.and_then(|v| v.trim().parse().ok())
.unwrap_or(0)
}
pub fn get_player_region(asset_version: &str) -> Option<String> {
ASSET_TABLE
.iter()
.find(|(_, h)| {
h.version_android == asset_version ||
h.version_ios == asset_version ||
h.version_windows == asset_version
})
.map(|(region, _)| region.to_string())
for entry in ASSET_VERSIONS {
if entry.version == asset_version {
return Some(entry.region.to_string());
}
if entry.latest {
if let Some((ov, _)) = entry.override_pair() {
if ov == asset_version {
return Some(entry.region.to_string());
}
}
}
}
None
}
pub fn parse_platform(header: &str) -> &str {
@@ -117,24 +170,51 @@ pub fn parse_platform(header: &str) -> &str {
"windows" => "Windows",
"windowsplayer" => "Windows",
"webglplayer" => "WebGL",
"editor" => "Editor",
"windowseditor" => "Editor",
"osxeditor" => "Editor",
"linuxeditor" => "Editor",
_ => panic!("Unknown platform: {header}"),
}
}
pub fn get_asset_hash(asset_version: &str, platform: &str) -> Option<String> {
let easter = get_easter_mode();
if platform == "Editor" {
return Some("a".repeat(32));
}
let rv = preferred_hash(asset_version, platform);
rv
}
let (region, hashes) = ASSET_TABLE
.iter()
.find(|(region, h)| h.version_for(platform, region).as_deref() == Some(asset_version))?;
pub fn check_asset_headers(headers: &HeaderMap, check_hash: bool) -> Option<i32> {
let blank_header = HeaderValue::from_static("");
let asset_version = headers.get("aoharu-asset-version").unwrap_or(&blank_header).to_str().unwrap_or("");
if asset_version.is_empty() {
return None;
}
let easter_hash = (easter && platform == "Android")
.then(|| EASTER_HASHES.iter().find(|(r, _)| r == region).map(|(_, h)| *h))
.flatten();
let platform = match headers.get("aoharu-platform").and_then(|v| v.to_str().ok()) {
Some(header) => parse_platform(header),
None => return None,
};
if platform == "Editor" {
return None;
}
let rv = hashes.resolve(platform, region, easter_hash);
println!("Get asset hash: {platform}. {rv:?}");
return rv;
let valid = valid_hashes(asset_version, platform);
if valid.is_empty() {
return Some(RESULT_GAME_VERSION_UPDATED);
}
if !check_hash {
return None;
}
let asset_hash = headers.get("aoharu-asset-hash").unwrap_or(&blank_header).to_str().unwrap_or("");
if asset_hash.is_empty() || valid.iter().any(|h| h == asset_hash) {
None
} else {
Some(RESULT_RESOURCE_UPDATED)
}
}
pub fn create_token() -> String {
@@ -166,11 +246,7 @@ pub fn get_login(headers: &HeaderMap, body: &str) -> String {
Some(token) => {
token
},
None => {
let rv = gree::get_uuid(headers, body);
assert!(rv != String::new());
rv
},
None => gree::get_uuid(headers, body),
}
}
@@ -223,6 +299,48 @@ pub fn format_datetime(time: u64) -> String {
format!("{:04}-{:02}-{:02} {:02}:{:02}:{:02}", y, m, d, secs / 3600, (secs % 3600) / 60, secs % 60)
}
// Inverse of civil_from_days (Howard Hinnant's days_from_civil).
fn days_from_civil(y: i64, m: i64, d: i64) -> i64 {
let y = if m <= 2 { y - 1 } else { y };
let era = if y >= 0 { y } else { y - 399 } / 400;
let yoe = y - era * 400;
let mp = if m > 2 { m - 3 } else { m + 9 };
let doy = (153 * mp + 2) / 5 + d - 1;
let doe = yoe * 365 + yoe / 4 - yoe / 100 + doy;
era * 146097 + doe - 719468
}
// Parses the datetime shape masterdata uses ("2023/06/19 5:00:00", also tolerating
// '-' separators and a missing time part) into the same naive seconds-since-epoch
// scale format_datetime prints. Naive on purpose: every consumer compares a
// masterdata timestamp against a server timestamp, so both sides share the offset.
pub fn parse_datetime(text: &str) -> Option<u64> {
let text = text.trim();
if text.is_empty() {
return None;
}
let (date, time) = match text.split_once(' ') {
Some((date, time)) => (date, time),
None => (text, "0:0:0")
};
let mut date_parts = date.split(['/', '-']);
let y = date_parts.next()?.trim().parse::<i64>().ok()?;
let m = date_parts.next()?.trim().parse::<i64>().ok()?;
let d = date_parts.next()?.trim().parse::<i64>().ok()?;
if !(1..=12).contains(&m) || !(1..=31).contains(&d) {
return None;
}
let mut time_parts = time.split(':');
let hh = time_parts.next().unwrap_or("0").trim().parse::<i64>().ok()?;
let mm = time_parts.next().unwrap_or("0").trim().parse::<i64>().ok()?;
let ss = time_parts.next().unwrap_or("0").trim().parse::<i64>().ok()?;
let secs = days_from_civil(y, m, d) * 86400 + hh * 3600 + mm * 60 + ss;
if secs < 0 { None } else { Some(secs as u64) }
}
fn init_time(current_time: u64, server_data: &mut JsonValue, token: &str, max_time: u64, max: bool) {
let mut edited = false;
let default_time = 1709272800;
@@ -270,14 +388,14 @@ pub fn set_time(current_time: u64, uid: i64, max: bool) -> u64 {
return server_time + time_since_set;
}
pub fn send(mut data: JsonValue, uid: i64, headers: &HeaderMap) -> HttpResponse {
pub fn send(mut data: JsonValue, uid: i64, req: &HttpRequest) -> HttpResponse {
//println!("{}", jzon::stringify(data.clone()));
data["server_time"] = set_time(data["server_time"].as_u64().unwrap_or(0), uid, true).into();
if !data["data"]["item_list"].is_empty() || !data["data"]["updated_value_list"]["item_list"].is_empty() {
items::check_for_region(&mut data, headers);
items::check_for_region(&mut data, req.headers());
}
let encrypted = encryption::encrypt_packet(&jzon::stringify(data)).unwrap();
let resp = encrypted.into_bytes();
@@ -300,7 +418,16 @@ pub fn api(req: &HttpRequest, data: Option<JsonValue>) -> HttpResponse {
"message": ""
}
};
send(rv, uid, req.headers())
send(rv, uid, req)
}
pub fn api_error(req: &HttpRequest, code: i32) -> HttpResponse {
let uid = get_uid(req.headers());
send(object!{
"code": code,
"server_time": timestamp(),
"message": ""
}, uid, req)
}
pub fn start_login_bonus(id: i64, bonus: &mut JsonValue) -> bool {

View File

@@ -16,6 +16,8 @@ use crate::database::gree::*;
const APP_ID: &str = "232610769078541";
const SRC_APP_ID: &str = "100900301";
const HMAC_SECRET_HEX: &str = "6438663638653238346566646636306262616563326432323563306366643432";
const ERROR_INVALID_SIGNATURE: i32 = 4;
const ERROR_MIGRATED_DEVICE: i32 = 20;
struct RequireGreeAuth;
@@ -51,6 +53,8 @@ pub fn routes(cfg: &mut web::ServiceConfig) {
.service(
web::scope("/migration")
.route("", web::post().to(migration))
.route("/auth/initialize", web::post().to(initialize))
.route("/user/token", web::post().to(migration_user_token))
.route("/code", web::get().to(migration_code))
.route("/code/verify", web::post().to(migration_verify))
.route("/password/register", web::post().to(migration_password_register))
@@ -84,7 +88,7 @@ fn get_uid(req: &HttpRequest) -> String {
req.headers()
.get("Authorization")
.and_then(|h| h.to_str().ok())
.and_then(|auth| auth.split(",xoauth_requestor_id=\"").nth(1))
.and_then(|auth| auth.split("xoauth_requestor_id=\"").nth(1))
.and_then(|s| s.split('"').next())
.unwrap_or("")
.to_string()
@@ -95,13 +99,13 @@ fn send(req: HttpRequest, resp: JsonValue) -> impl Responder {
jzon::stringify(resp)
}
async fn not_found() -> impl Responder {
async fn not_found(req: HttpRequest) -> impl Responder {
let resp = object!{
code: 10001,
message: "Not Found",
result: "NG"
};
jzon::stringify(resp)
send(req, resp)
}
async fn initialize(req: HttpRequest, body: String) -> impl Responder {
@@ -119,8 +123,17 @@ async fn initialize(req: HttpRequest, body: String) -> impl Responder {
}
async fn authorize(req: HttpRequest, _body: String) -> impl Responder {
let resp = object!{
result: "OK"
let resp = if is_registered(&get_uid(&req)) {
object!{
result: "OK"
}
} else {
println!("Unregistered device authorizing: {}", get_uid(&req));
object!{
result: "NG",
code: ERROR_MIGRATED_DEVICE,
message: "Device is not registered"
}
};
send(req, resp)
@@ -181,14 +194,34 @@ async fn payment_ticket(req: HttpRequest) -> impl Responder {
async fn migration_verify(req: HttpRequest, body: String) -> impl Responder {
let body = jzon::parse(&body).unwrap();
let migration_code = body["migration_code"].to_string();
let password = decrypt_transfer_password(&body["migration_password"].to_string());
let user = userdata::user::migration::get_acc_transfer(&body["migration_code"].to_string(), &password);
let user = userdata::user::migration::get_acc_transfer(&migration_code, &password);
let resp = if !user["success"].as_bool().unwrap() || user["user_id"] == 0 {
// The gree error envelope REQUIRES `code` and `message` on a failure. The old
// {result:"ERR", messsage:"User Not Found"} shape had neither (and misspelt the key),
// which breaks both native gamelibs:
// * iOS: +[GGLError errorWithJson:] builds
// @{NSLocalizedDescriptionKey: message} with message == nil ->
// NSInvalidArgumentException "attempt to insert nil object from objects[0]" -> the app
// hard-crashes the moment a wrong password / unknown code is entered on the new device.
// (It also reads `code` as [nil integerValue] == 0 == SUCCESS, so a non-crashing build
// would have run the success path on an empty payload.)
// * managed: Shock.GGL.Payment.GGLVerifyMigrationCode.CanRetry(code) tests
// code == 7004 (kGGLPErrorVerifyMigrationIncorrectPassword) to show the
// "re-enter your password" dialog instead of the fatal error dialog.
// 7002 = kGGLPErrorVerifyMigrationCodeNotExist, 7004 = incorrect password.
let (code, message) = if userdata::user::migration::transfer_code_exists(&migration_code) {
(7004, "Migration password is incorrect")
} else {
(7002, "Migration code does not exist")
};
object!{
result: "ERR",
messsage: "User Not Found"
result: "NG",
code: code,
message: message
}
} else {
let data_user = userdata::get_acc(&user["login_token"].to_string());
@@ -224,6 +257,36 @@ async fn migration(req: HttpRequest, body: String) -> impl Responder {
send(req, resp)
}
async fn migration_user_token(req: HttpRequest, body: String) -> impl Responder {
let body = jzon::parse(&body).unwrap_or(object!{});
let uuid = body["uuid"].to_string();
let resp = if let Some((user_id, cert)) = get_user_cert(&uuid) {
if verify_fingerprint(&uuid, &body["fingerprint"].to_string(), &cert) {
update_cert(user_id, &body["token"].to_string());
object!{
result: "OK"
}
} else {
println!("Rejecting device token update for {}: bad fingerprint", uuid);
object!{
result: "NG",
code: ERROR_INVALID_SIGNATURE,
message: "Invalid fingerprint"
}
}
} else {
println!("Rejecting device token update for unregistered device {}", uuid);
object!{
result: "NG",
code: ERROR_MIGRATED_DEVICE,
message: "Device is not registered"
}
};
send(req, resp)
}
async fn balance(req: HttpRequest) -> impl Responder {
let uid = get_uid(&req);

View File

@@ -1,9 +1,8 @@
use jzon::{object, array, JsonValue};
use actix_web::{web, HttpRequest, Responder};
use actix_web::{web, Responder};
use lazy_static::lazy_static;
use crate::router::{global, userdata, items};
use crate::encryption;
use crate::router::{global, userdata, items, Login, Session, Api};
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.service(
@@ -14,9 +13,7 @@ pub fn routes(cfg: &mut web::ServiceConfig) {
);
}
async fn preset(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn preset(Session { key, body }: Session) -> impl Responder {
let mut user = userdata::get_acc_home(&key);
for data in user["home"]["preset_setting"].members_mut() {
@@ -26,7 +23,7 @@ async fn preset(req: HttpRequest, body: String) -> impl Responder {
}
userdata::save_acc_home(&key, user);
global::api(&req, Some(array![]))
Api(Some(array![]))
}
fn check_gifts(user: &mut JsonValue) {
@@ -41,21 +38,19 @@ fn check_gifts(user: &mut JsonValue) {
}
}
pub async fn gift_get(req: HttpRequest) -> impl Responder {
let key = global::get_login(req.headers(), "");
pub async fn gift_get(Login(key): Login) -> impl Responder {
let mut user = userdata::get_acc_home(&key);
check_gifts(&mut user);
global::api(&req, Some(object!{
Api(Some(object!{
"gift_list": user["home"]["gift_list"].clone()
}))
}
async fn preset_get(req: HttpRequest) -> impl Responder {
let key = global::get_login(req.headers(), "");
async fn preset_get(Login(key): Login) -> impl Responder {
let user = userdata::get_acc(&key);
global::api(&req, Some(object!{
Api(Some(object!{
"master_preset_background_ids": [1,2,3,4,5],
"master_preset_foreground_ids": [1,2,3],
"card_list": user["card_list"].clone()
@@ -88,8 +83,7 @@ lazy_static! {
};
}
async fn home(req: HttpRequest) -> impl Responder {
let key = global::get_login(req.headers(), "");
async fn home(Login(key): Login) -> impl Responder {
let mut user = userdata::get_acc_home(&key);
check_gifts(&mut user);
@@ -130,8 +124,12 @@ async fn home(req: HttpRequest) -> impl Responder {
}
user["home"]["unread_chat_count"] = chat_count.into();
let seen_at = user["home"]["announcement_seen_at"].as_i64().unwrap_or(0);
let new_announcement = crate::database::announcements::latest_published_at() > seen_at;
user["home"]["new_announcement_flag"] = (new_announcement as i32).into();
//todo
user["home"]["beginner_mission_complete"] = 1.into();
global::api(&req, Some(user))
Api(Some(user))
}

View File

@@ -1,9 +1,8 @@
use jzon::{array, object, JsonValue};
use rand::RngExt;
use actix_web::{web, HttpRequest, Responder, http::header::{HeaderMap, HeaderValue}};
use crate::encryption;
use actix_web::{web, Responder, http::header::{HeaderMap, HeaderValue}};
use crate::router::{userdata, global, databases};
use crate::router::{userdata, global, databases, Session, Api};
pub fn remove_gems(user: &mut JsonValue, amount: i64) {
let mut amount = amount;
@@ -301,8 +300,10 @@ pub fn lp_modification(user: &mut JsonValue, change_amount: u64, remove: bool) -
stamina != orig_stamina || anchor != orig_anchor
}
// Falls through to the custom-card db for the runtime band (card_info), so
// duplicate conversion / evolve costs / give_character work on those too
pub fn get_rarity(id: i64) -> i32 {
databases::CARD_LIST[id.to_string()]["rarity"].as_i32().unwrap_or(0)
crate::router::custom_card::card_info(id)["rarity"].as_i32().unwrap_or(0)
}
// true - added
@@ -368,6 +369,22 @@ pub fn give_exp(amount: i32, user: &mut JsonValue, mission: &mut JsonValue, rv:
if current_rank["rank"] != new_rank["rank"] {
user["stamina"]["stamina"] = (user["stamina"]["stamina"].as_i64().unwrap() + new_rank["maxLp"].as_i64().unwrap()).into();
let from = current_rank["rank"].as_i64().unwrap();
let to = new_rank["rank"].as_i64().unwrap();
for rank in databases::RANKS.members() {
let num = rank["rank"].as_i64().unwrap();
if num <= from || num > to {
continue;
}
for reward in databases::USER_RANK_REWARD[rank["masterUserRankRewardId"].to_string()].members() {
give_gift(&object!{
reward_type: reward["type"].clone(),
value: reward["value"].clone(),
amount: reward["amount"].clone()
}, user, mission, &mut array![], &mut array![]);
}
}
let status = get_mission_status(get_variable_mission_num(1101001, 1101030, mission), mission);
if status.is_empty() {
return;
@@ -557,9 +574,7 @@ pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.route("/item/use", web::post().to(use_item_req));
}
async fn use_item_req(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn use_item_req(Session { key, body }: Session) -> impl Responder {
let mut user = userdata::get_acc(&key);
let item = &databases::ITEM_INFO[body["id"].to_string()];
@@ -586,7 +601,7 @@ async fn use_item_req(req: HttpRequest, body: String) -> impl Responder {
}
}
global::api(&req, Some(object!{
Api(Some(object!{
item_list: [used],
stamina: user["stamina"].clone()
}))

View File

@@ -3,8 +3,7 @@ use actix_web::{web, HttpRequest, Responder};
use rand::RngExt;
use lazy_static::lazy_static;
use crate::router::{databases, global, items, userdata};
use crate::encryption;
use crate::router::{databases, global, items, userdata, Login, Session, Api};
use crate::router::clear_rate::live_completed;
use crate::router::tools::guest;
@@ -25,23 +24,21 @@ pub fn routes(cfg: &mut web::ServiceConfig) {
}
async fn retire(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn retire(Session { key, body }: Session) -> impl Responder {
live_retire(&key, &body);
if body["live_score"]["play_time"].as_i64().unwrap_or(0) > 5 {
live_completed(body["master_live_id"].as_i64().unwrap(), body["level"].as_i32().unwrap(), true, 0, 0);
// Body-derived, so defaulted rather than unwrapped: a retire is not worth a
// panicked worker either (live_completed ignores an unknown id/level).
live_completed(body["master_live_id"].as_i64().unwrap_or(0), body["level"].as_i32().unwrap_or(0), true, 0, 0);
}
global::api(&req, Some(object!{
Api(Some(object!{
"stamina": {},
"item_list": [],
"event_point_list": []
}))
}
async fn reward(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn reward(Session { key, body }: Session) -> impl Responder {
let user = userdata::get_acc(&key);
let live_id = body["master_live_id"].as_i64().unwrap();
let cleared = get_clear_count(live_id, &user) > 0;
@@ -70,7 +67,7 @@ async fn reward(req: HttpRequest, body: String) -> impl Responder {
}
}
global::api(&req, Some(object!{
Api(Some(object!{
"ensured_list": ensured_list,
"random_list": random_list
}))
@@ -85,8 +82,8 @@ fn random_number(lowest: usize, highest: usize) -> usize {
rand::rng().random_range(lowest..highest + 1)
}
async fn guest(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
async fn guest(req: HttpRequest, Login(key): Login) -> impl Responder {
let protocol = crate::router::global::client_protocol_version(&req);
let user_id = userdata::get_acc(&key)["user"]["id"].as_i64().unwrap();
let friends = userdata::get_acc_friends(&key);
let user = userdata::get_acc(&key);
@@ -141,7 +138,7 @@ async fn guest(req: HttpRequest, body: String) -> impl Responder {
}).unwrap();
} else {
if !friends["friend_user_id_list"].is_empty() {
guest_list.push(guest::get_user(friends["friend_user_id_list"][random_number(0, friends["friend_user_id_list"].len() - 1)].as_i64().unwrap(), &friends, guest::UserView::Card)).unwrap();
guest_list.push(guest::get_user(friends["friend_user_id_list"][random_number(0, friends["friend_user_id_list"].len() - 1)].as_i64().unwrap(), &friends, guest::UserView::Card, protocol)).unwrap();
}
let expected: usize = 5;
if guest_list.len() < expected {
@@ -152,7 +149,7 @@ async fn guest(req: HttpRequest, body: String) -> impl Responder {
}
for uid in random.members() {
let guest = guest::get_user(uid.as_i64().unwrap(), &friends, guest::UserView::Card);
let guest = guest::get_user(uid.as_i64().unwrap(), &friends, guest::UserView::Card, protocol);
if guest["user"]["friend_request_disabled"] == 1 || guest.is_empty() {
continue;
}
@@ -209,14 +206,14 @@ async fn guest(req: HttpRequest, body: String) -> impl Responder {
}
}
global::api(&req, Some(object!{
Api(Some(object!{
"guest_list": guest_list
}))
}
async fn mission(req: HttpRequest, _body: String) -> impl Responder {
async fn mission() -> impl Responder {
//todo
global::api(&req, Some(object!{
Api(Some(object!{
"score_ranking": "",
"combo_ranking": "",
"clear_count_ranking": ""
@@ -227,12 +224,15 @@ fn check_for_stale_data(server_data: &mut JsonValue, live_id: i64) {
let mut expired = array![];
let curr_time = global::timestamp();
for (i, live) in server_data["last_live_started"].members().enumerate() {
if live["expire_date_time"].as_u64().unwrap() < curr_time || live["master_live_id"] == live_id {
// A record with no readable expiry is treated as expired rather than panicking:
// start_live always writes one, so this is a corrupt/hand-edited row.
let stale = live["expire_date_time"].as_u64().unwrap_or(0) < curr_time;
if stale || live["master_live_id"] == live_id {
expired.push(i).unwrap();
}
if live["expire_date_time"].as_u64().unwrap() < curr_time {
if stale {
// User closed game after losing. Count this as a fail.
live_completed(live["master_live_id"].as_i64().unwrap(), live["level"].as_i32().unwrap(), true, 0, 0);
live_completed(live["master_live_id"].as_i64().unwrap_or(0), live["level"].as_i32().unwrap_or(0), true, 0, 0);
}
}
for i in expired.members() {
@@ -248,34 +248,94 @@ fn get_end_live_deck_id(login_token: &str, body: &JsonValue) -> Option<i32> {
let index = server_data["last_live_started"].members().position(|r| r["master_live_id"] == body["master_live_id"])?;
let rv = server_data["last_live_started"][index]["deck_slot"].as_i32()?;
check_for_stale_data(&mut server_data, body["master_live_id"].as_i64().unwrap());
check_for_stale_data(&mut server_data, body["master_live_id"].as_i64().unwrap_or(0));
userdata::save_server_data(login_token, server_data);
Some(rv)
}
pub fn get_end_live_event_id(login_token: &str, body: &JsonValue) -> Option<u32> {
// The whole payload the client POSTed to */start for this live, as recorded by
// start_live. /multi_live/end needs the boost and deck slot out of it, and its
// own request body carries neither.
pub fn get_started_live(login_token: &str, body: &JsonValue) -> Option<JsonValue> {
let server_data = userdata::get_server_data(login_token);
if server_data["last_live_started"].is_null() {
return None;
}
let index = server_data["last_live_started"].members().position(|r| r["master_live_id"] == body["master_live_id"])?;
let rv = server_data["last_live_started"][index]["master_event_id"].as_u32()?;
Some(rv)
Some(server_data["last_live_started"][index].clone())
}
fn live_retire(login_token: &str, body: &JsonValue) {
// Claims the record start_live left behind: it is returned AND removed in one atomic
// step, so of N ends arriving together for one live exactly one gets Some and every other
// gets None. /multi_live/end awards off that Some and answers a None from current state,
// which is what makes its duplicate protection deliberate rather than a side effect of
// get_end_live_deck_id's shape (that one only consumed when the record carried a numeric
// deck_slot, and only long after the awarding decision had been taken).
//
// The stale sweep check_for_stale_data does is folded in unchanged: records past their
// hour count as a fail and go, so live_end_ex's own later sweep finds nothing left to
// count twice. live_completed is called after the transaction commits - it writes to a
// different database and has no business running inside this one's write lock.
//
// Solo /live/end is deliberately NOT routed through here: it still consumes its record
// inside live_end_ex exactly as it always did.
pub fn take_started_live(login_token: &str, body: &JsonValue) -> Option<JsonValue> {
let live_id = body["master_live_id"].clone();
let curr_time = global::timestamp();
let mut failed: Vec<(i64, i32)> = Vec::new();
let taken = userdata::modify_server_data(login_token, |server_data| {
if server_data["last_live_started"].is_null() {
server_data["last_live_started"] = array![];
}
let mut taken: Option<JsonValue> = None;
let mut kept = array![];
for live in server_data["last_live_started"].members() {
let stale = live["expire_date_time"].as_u64().unwrap_or(0) < curr_time;
let mine = live["master_live_id"] == live_id;
if stale {
// User closed game after losing. Count this as a fail.
failed.push((
live["master_live_id"].as_i64().unwrap_or(0),
live["level"].as_i32().unwrap_or(0)
));
}
if mine && taken.is_none() {
taken = Some(live.clone());
} else if !stale && !mine {
kept.push(live.clone()).unwrap();
}
}
server_data["last_live_started"] = kept;
taken
});
for (id, level) in failed {
live_completed(id, level, true, 0, 0);
}
taken
}
pub fn get_end_live_event_id(login_token: &str, body: &JsonValue) -> Option<u32> {
get_started_live(login_token, body)?["master_event_id"].as_u32()
}
pub fn live_retire(login_token: &str, body: &JsonValue) {
let mut server_data = userdata::get_server_data(login_token);
check_for_stale_data(&mut server_data, body["master_live_id"].as_i64().unwrap());
// A body with no master_live_id matches nothing (0 is not a live id); the stale sweep
// still runs, which is all a retire with a malformed body can honestly do.
check_for_stale_data(&mut server_data, body["master_live_id"].as_i64().unwrap_or(0));
userdata::save_server_data(login_token, server_data);
}
fn start_live(login_token: &str, body: &JsonValue) {
pub fn start_live(login_token: &str, body: &JsonValue) {
let mut server_data = userdata::get_server_data(login_token);
if server_data["last_live_started"].is_null() {
server_data["last_live_started"] = array![];
}
check_for_stale_data(&mut server_data, body["master_live_id"].as_i64().unwrap());
// Body-derived: /multi_live/start forwards a body this server never validated, and a
// start with no live id must record a useless record rather than panic a worker.
check_for_stale_data(&mut server_data, body["master_live_id"].as_i64().unwrap_or(0));
let mut to_save = body.clone();
// The user has 1 hour to complete a live
to_save["expire_date_time"] = (global::timestamp() + (1 * 60 * 60)).into();
@@ -284,29 +344,24 @@ fn start_live(login_token: &str, body: &JsonValue) {
userdata::save_server_data(login_token, server_data);
}
async fn start(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn start(Session { key, body }: Session) -> impl Responder {
start_live(&key, &body);
global::api(&req, Some(array![]))
Api(Some(array![]))
}
pub async fn event_start(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
pub async fn event_start(Session { key, body }: Session) -> impl Responder {
start_live(&key, &body);
global::api(&req, Some(array![]))
Api(Some(array![]))
}
async fn continuee(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
async fn continuee(Login(key): Login) -> impl Responder {
let mut user = userdata::get_acc(&key);
items::remove_gems(&mut user, 100);
userdata::save_acc(&key, user.clone());
global::api(&req, Some(object!{
Api(Some(object!{
gem: user["gem"].clone()
}))
}
@@ -321,24 +376,32 @@ fn get_clear_count(id: i64, user: &JsonValue) -> i64 {
rv
}
pub fn update_live_data(user: &mut JsonValue, data: &JsonValue, add: bool) -> JsonValue {
// `record_high_score=false` plays this live for the clear count and the max combo but
// leaves the stored high score alone: it enters the keep-best comparison below as 0, so
// the existing record always wins and is what gets reported back. That is the official
// treatment of a public multi live ("本イベントでは HIGH SCOREは更新されません"), which
// /multi_live/end asks for — see the score-board note in live_end_ex.
pub fn update_live_data(user: &mut JsonValue, data: &JsonValue, add: bool, record_high_score: bool) -> JsonValue {
if user["tutorial_step"].as_i32().unwrap() < 130 {
return JsonValue::Null;
}
// Every field here comes off the request body, so a malformed end must not panic a
// worker: a missing id/level/score reads as 0, which is what an empty live record
// would have held anyway.
let mut rv = object!{
"master_live_id": data["master_live_id"].as_i64().unwrap(),
"level": data["level"].as_i64().unwrap(),
"master_live_id": data["master_live_id"].as_i64().unwrap_or(0),
"level": data["level"].as_i64().unwrap_or(0),
"clear_count": 1,
"high_score": data["live_score"]["score"].as_i64().unwrap(),
"max_combo": data["live_score"]["max_combo"].as_i64().unwrap(),
"high_score": if record_high_score { data["live_score"]["score"].as_i64().unwrap_or(0) } else { 0 },
"max_combo": data["live_score"]["max_combo"].as_i64().unwrap_or(0),
"auto_enable": 1, //whats this?
"updated_time": global::timestamp()
};
let mut has = false;
for current in user["live_list"].members_mut() {
if current["master_live_id"] == rv["master_live_id"] && (current["level"] == rv["level"] || data["level"].as_i32().unwrap() == 0) {
if current["master_live_id"] == rv["master_live_id"] && (current["level"] == rv["level"] || data["level"].as_i32().unwrap_or(0) == 0) {
has = true;
if add {
rv["clear_count"] = (current["clear_count"].as_i64().unwrap() + 1).into();
@@ -358,7 +421,7 @@ pub fn update_live_data(user: &mut JsonValue, data: &JsonValue, add: bool) -> Js
}
current["updated_time"] = rv["updated_time"].clone();
rv["level"] = current["level"].clone();
if data["level"].as_i32().unwrap() != 0 {
if data["level"].as_i32().unwrap_or(0) != 0 {
break;
}
}
@@ -470,21 +533,9 @@ fn give_mission_rewards(user: &mut JsonValue, home: &mut JsonValue, missions: &J
}
rv
}
pub fn get_master_num(id: i64) -> i64 {
let id = id.to_string();
let mut masterid = 0;
if id.starts_with('2') {
masterid += 9;
} else if id.starts_with('3') {
masterid += 9 + 9;
} else if id.starts_with('4') {
masterid += 9 + 9 + 12;
}
masterid
}
pub fn get_master_id(id: i64) -> i64 {
get_master_num(id) + id.to_string().char_indices().last().unwrap().1.to_string().parse::<i64>().unwrap()
// [requiredBond, missionId] pairs for a character's bond missions, lowest first.
pub fn bond_missions(character: i64) -> &'static JsonValue {
&databases::CHARACTER_BOND_MISSIONS[character.to_string()]
}
const MAX_BOND: i64 = 500000;
@@ -536,7 +587,9 @@ fn get_live_character_list(lp_used: i32, deck_id: i32, user: &mut JsonValue, mis
Some(x) => x,
None => continue
};
let character = match databases::CARD_LIST[mcid.to_string()]["masterCharacterId"].as_i64() {
// card_info falls through to the custom-card db, so a runtime card in
// the deck still earns its character's bond
let character = match crate::router::custom_card::card_info(mcid)["masterCharacterId"].as_i64() {
Some(c) => c,
None => continue
};
@@ -560,18 +613,17 @@ fn get_live_character_list(lp_used: i32, deck_id: i32, user: &mut JsonValue, mis
let after = (before + gains[idx]).min(MAX_BOND);
set_character_bond(&mut character_list, character, after);
if gains[idx] > 0 {
let mut mission_id = 1158000 + get_master_id(character);
let mut limit = 1500;
let mut status = items::get_mission_status(mission_id, missions);
if status.is_empty() {
mission_id += 39;
limit *= 10;
status = items::get_mission_status(mission_id, missions);
let tiers = bond_missions(character);
if gains[idx] > 0 && !tiers.is_empty() {
let mut tier = 0;
let mut status = items::get_mission_status(tiers[0][1].as_i64().unwrap(), missions);
if status.is_empty() && tiers.len() > 1 {
tier = 1;
status = items::get_mission_status(tiers[1][1].as_i64().unwrap(), missions);
}
if status["status"].as_i32().unwrap_or(0) <= 1 {
let completed = after >= limit;
if let Some(m) = items::update_mission_status(mission_id, 0, completed, false, gains[idx], missions) {
let completed = after >= tiers[tier][0].as_i64().unwrap();
if let Some(m) = items::update_mission_status(tiers[tier][1].as_i64().unwrap(), 0, completed, false, gains[idx], missions) {
completed_missions.push(m).unwrap();
}
}
@@ -586,14 +638,17 @@ fn get_live_character_list(lp_used: i32, deck_id: i32, user: &mut JsonValue, mis
if tutorial_step >= 130 {
for data in rv.members() {
for chat in CHATS.members() {
let character = data["master_character_id"].as_i64().unwrap();
let chat_missions = &databases::CHARACTER_CHAT_MISSIONS[character.to_string()];
for (step, chat) in CHATS.members().enumerate() {
if chat.as_i64().unwrap() > data["exp"].as_i64().unwrap() {
break;
}
if crate::router::chat::add_chat(data["master_character_id"].as_i64().unwrap(), 1, chats) {
let mission_id = 1958000 + (get_master_id(data["master_character_id"].as_i64().unwrap()) * CHATS.len() as i64);
items::update_mission_status(mission_id, 0, true, true, 1, missions);
completed_missions.push(mission_id).unwrap();
if crate::router::chat::add_chat(character, 1, chats) {
if let Some(mission_id) = chat_missions[step][1].as_i64() {
items::update_mission_status(mission_id, 0, true, true, 1, missions);
completed_missions.push(mission_id).unwrap();
}
}
}
}
@@ -603,25 +658,47 @@ fn get_live_character_list(lp_used: i32, deck_id: i32, user: &mut JsonValue, mis
rv
}
pub fn live_end(req: &HttpRequest, body: &str, skipped: bool) -> JsonValue {
let key = global::get_login(req.headers(), body);
let body = jzon::parse(&encryption::decrypt_packet(body).unwrap()).unwrap();
pub fn live_end(req: &HttpRequest, key: &str, body: &JsonValue, skipped: bool) -> JsonValue {
live_end_ex(req, key, body, skipped, true, true)
}
// consume_lp=false is for lives whose stamina was already taken up front
// (/multi_live/start does that, because its response reports consumed_stamina).
// Everything else still scales off lp_used, so the caller injects use_lp.
//
// update_score_board=false plays the live without recording a score anywhere: neither the
// account's own high score for the song nor the per-song board /live/ranking serves. Only
// /multi_live/end passes false, and only for a PUBLIC (random matchmaking) room — see the
// privacy note there. Everything else about the live is untouched: the clear count, the
// max combo, the clear-rate counters, missions and every reward are computed off this
// play's own score exactly as they always were.
pub fn live_end_ex(req: &HttpRequest, key: &str, body: &JsonValue, skipped: bool, consume_lp: bool, update_score_board: bool) -> JsonValue {
let mut user2 = userdata::get_acc_home(&key);
let mut user = userdata::get_acc(&key);
let mut user_missions = userdata::get_acc_missions(&key);
let mut chats = userdata::get_acc_chats(&key);
// Read once, off the request, with a default each: a client (or a replayed/forged
// POST) that omits a field must get a wrong-but-harmless result, not a panicked
// worker. /multi_live/end is the reachable path — it forwards a body this handler
// never validated — but the solo path gets the same treatment, and for a well-formed
// body every one of these is exactly what the old unwrap produced.
let live_id = body["master_live_id"].as_i64().unwrap_or(0);
let level = body["level"].as_i64().unwrap_or(0);
let score = body["live_score"]["score"].as_i64().unwrap_or(0);
let max_combo = body["live_score"]["max_combo"].as_i64().unwrap_or(0);
let jp = items::get_region(req.headers());
let first_clear = !skipped
&& user["tutorial_step"].as_i32().unwrap() >= 130
&& get_clear_count(body["master_live_id"].as_i64().unwrap(), &user) == 0;
&& get_clear_count(live_id, &user) == 0;
let live = if skipped {
items::use_item(&object!{
value: 21000001,
amount: 1,
consumeType: 4
}, body["live_boost"].as_i64().unwrap(), &mut user);
}, body["live_boost"].as_i64().unwrap_or(0), &mut user);
update_live_data(&mut user, &object!{
master_live_id: body["master_live_id"].clone(),
level: 0,
@@ -629,9 +706,9 @@ pub fn live_end(req: &HttpRequest, body: &str, skipped: bool) -> JsonValue {
score: 1,
max_combo: 1
}
}, false)
}, false, update_score_board)
} else {
update_live_data(&mut user, &body, true)
update_live_data(&mut user, &body, true, update_score_board)
};
//1273009, 1273010, 1273011, 1273012
@@ -646,21 +723,27 @@ pub fn live_end(req: &HttpRequest, body: &str, skipped: bool) -> JsonValue {
}
}
// The account the per-song board is keyed by, or 0 to leave the board alone —
// clear_rate::update_live_score's own "no user, no board entry" guard, which is how
// /live/retire already counts a play it must not rank. The clear-rate counters still
// get the play either way: a public multi live really was played.
let board_uid = if update_score_board { user["user"]["id"].as_i64().unwrap() } else { 0 };
let missions;
if skipped {
live_completed(body["master_live_id"].as_i64().unwrap(), live["level"].as_i32().unwrap(), false, live["high_score"].as_i64().unwrap(), user["user"]["id"].as_i64().unwrap());
let clear_count = get_clear_count(body["master_live_id"].as_i64().unwrap(), &user);
live_completed(live_id, live["level"].as_i32().unwrap_or(0), false, live["high_score"].as_i64().unwrap_or(0), board_uid);
let clear_count = get_clear_count(live_id, &user);
missions = get_live_mission_completed_ids(&user, body["master_live_id"].as_i64().unwrap(), live["high_score"].as_i64().unwrap(), live["max_combo"].as_i64().unwrap(), clear_count, live["level"].as_i64().unwrap(), false, false).unwrap_or(array![]);
missions = get_live_mission_completed_ids(&user, live_id, live["high_score"].as_i64().unwrap_or(0), live["max_combo"].as_i64().unwrap_or(0), clear_count, live["level"].as_i64().unwrap_or(0), false, false).unwrap_or(array![]);
} else {
live_completed(body["master_live_id"].as_i64().unwrap(), body["level"].as_i32().unwrap(), false, body["live_score"]["score"].as_i64().unwrap(), user["user"]["id"].as_i64().unwrap());
let clear_count = get_clear_count(body["master_live_id"].as_i64().unwrap(), &user);
live_completed(live_id, level as i32, false, score, board_uid);
let clear_count = get_clear_count(live_id, &user);
let is_full_combo = (body["live_score"]["good"].as_i32().unwrap_or(1) + body["live_score"]["bad"].as_i32().unwrap_or(1) + body["live_score"]["miss"].as_i32().unwrap_or(1)) == 0;
let is_perfect = is_full_combo && body["live_score"]["great"].as_i32().unwrap_or(1) == 0;
missions = get_live_mission_completed_ids(&user, body["master_live_id"].as_i64().unwrap(), body["live_score"]["score"].as_i64().unwrap(), body["live_score"]["max_combo"].as_i64().unwrap(), clear_count, body["level"].as_i64().unwrap(), is_full_combo, is_perfect).unwrap_or(array![]);
missions = get_live_mission_completed_ids(&user, live_id, score, max_combo, clear_count, level, is_full_combo, is_perfect).unwrap_or(array![]);
if is_full_combo {
if items::advance_mission(1176001, 1, 1, &mut user_missions).is_some() {
@@ -685,13 +768,13 @@ pub fn live_end(req: &HttpRequest, body: &str, skipped: bool) -> JsonValue {
if is_perfect && items::advance_mission(1177001, 1, 1, &mut user_missions).is_some() {
cleared_missions.push(1177001).unwrap();
}
if is_perfect && body["level"].as_i32().unwrap() == 4 && items::advance_mission(1177002, 1, 1, &mut user_missions).is_some() {
if is_perfect && level == 4 && items::advance_mission(1177002, 1, 1, &mut user_missions).is_some() {
cleared_missions.push(1177002).unwrap();
}
}
update_live_mission_data(&mut user, &object!{
master_live_id: body["master_live_id"].as_i64().unwrap(),
master_live_id: live_id,
clear_master_live_mission_ids: missions.clone()
});
@@ -699,7 +782,9 @@ pub fn live_end(req: &HttpRequest, body: &str, skipped: bool) -> JsonValue {
let mut reward_list = give_mission_rewards(&mut user, &mut user2, &missions, &mut user_missions, &mut cleared_missions, &mut chats, (lp_used / 10) as i64, jp);
items::lp_modification(&mut user, lp_used as u64, true);
if consume_lp {
items::lp_modification(&mut user, lp_used as u64, true);
}
items::give_exp(lp_used, &mut user, &mut user_missions, &mut cleared_missions);
@@ -754,10 +839,256 @@ pub fn live_end(req: &HttpRequest, body: &str, skipped: bool) -> JsonValue {
rv
}
async fn end(req: HttpRequest, body: String) -> impl Responder {
global::api(&req, Some(live_end(&req, &body, false)))
async fn end(req: HttpRequest, Session { key, body }: Session) -> impl Responder {
Api(Some(live_end(&req, &key, &body, false)))
}
async fn skip(req: HttpRequest, body: String) -> impl Responder {
global::api(&req, Some(live_end(&req, &body, true)))
async fn skip(req: HttpRequest, Session { key, body }: Session) -> impl Responder {
Api(Some(live_end(&req, &key, &body, true)))
}
#[cfg(test)]
mod tests {
use super::*;
use actix_web::test::TestRequest;
const STOCK_LIVE_ID: i64 = 1100101;
fn register_account(token: &str) {
let mut user = userdata::get_acc(token);
user["tutorial_step"] = 130.into();
userdata::save_acc(token, user);
}
fn record_clear(token: &str, live_id: i64, level: i64, score: i64, combo: i64) {
let mut user = userdata::get_acc(token);
update_live_data(&mut user, &object!{
master_live_id: live_id,
level: level,
live_score: { score: score, max_combo: combo }
}, true, true);
userdata::save_acc(token, user);
}
fn pulled_clear_count(token: &str, live_id: i64) -> i64 {
get_clear_count(live_id, &userdata::get_acc(token))
}
// The same clear with the score board switched off, which is what live_end_ex does for
// a multi live played in a PUBLIC room. Returns the `live` record the client is
// answered with.
fn record_unscored_clear(token: &str, live_id: i64, level: i64, score: i64, combo: i64) -> JsonValue {
let mut user = userdata::get_acc(token);
let live = update_live_data(&mut user, &object!{
master_live_id: live_id,
level: level,
live_score: { score: score, max_combo: combo }
}, true, false);
userdata::save_acc(token, user);
live
}
fn stored_live(token: &str, live_id: i64) -> JsonValue {
userdata::get_acc(token)["live_list"]
.members()
.find(|l| l["master_live_id"] == live_id)
.cloned()
.unwrap_or(JsonValue::Null)
}
// /multi_live/end's score-board branch, at the write it actually gates. live_end_ex
// itself cannot be driven from a test (items::get_region reaches the clap parser, which
// rejects the harness's own arguments), so the two halves of the gate are pinned where
// they live: the account's own high score here, and the per-song board next door in
// clear_rate.
//
// A PRIVATE room is the unchanged path: it records exactly like a solo live, keep-best.
#[test]
fn a_private_multi_live_records_its_score_keep_best() {
let _lock = crate::runtime::lock_test_data_path();
let token = "sb_private_room";
register_account(token);
record_clear(token, STOCK_LIVE_ID, 4, 500000, 320);
assert_eq!(stored_live(token, STOCK_LIVE_ID)["high_score"], 500000);
// A better score wins...
record_clear(token, STOCK_LIVE_ID, 4, 600000, 340);
assert_eq!(stored_live(token, STOCK_LIVE_ID)["high_score"], 600000);
// ...and a worse one never overwrites it.
record_clear(token, STOCK_LIVE_ID, 4, 100000, 20);
assert_eq!(stored_live(token, STOCK_LIVE_ID)["high_score"], 600000);
assert_eq!(pulled_clear_count(token, STOCK_LIVE_ID), 3);
}
// A PUBLIC room is the official behaviour: the play counts, the score does not.
#[test]
fn a_public_multi_live_leaves_the_high_score_alone() {
let _lock = crate::runtime::lock_test_data_path();
let token = "sb_public_room";
register_account(token);
record_clear(token, STOCK_LIVE_ID, 4, 500000, 320);
// A score that would beat the stored one is not recorded, and the answer the client
// gets back reports the record that still stands rather than this play's score.
let live = record_unscored_clear(token, STOCK_LIVE_ID, 4, 900000, 400);
assert_eq!(live["high_score"], 500000);
assert_eq!(stored_live(token, STOCK_LIVE_ID)["high_score"], 500000);
// Everything else about the live still lands: the clear counts and the combo is a
// real one (the client only ever said HIGH SCORE was not updated).
assert_eq!(pulled_clear_count(token, STOCK_LIVE_ID), 2);
assert_eq!(stored_live(token, STOCK_LIVE_ID)["max_combo"], 400);
}
// The solo path is untouched by the multi branch: live_end — the only entry /live/end
// and /live/skip have — calls live_end_ex with update_score_board hardcoded true, so a
// solo live writes exactly what it always did.
#[test]
fn the_solo_live_path_still_records_its_score() {
let _lock = crate::runtime::lock_test_data_path();
let token = "sb_solo_path";
register_account(token);
record_clear(token, STOCK_LIVE_ID, 4, 450000, 300);
assert_eq!(stored_live(token, STOCK_LIVE_ID)["high_score"], 450000);
// /live/skip's shape: level 0 matches whatever level is stored, its stand-in score
// of 1 can never beat the record, and the record is what it answers with.
let mut user = userdata::get_acc(token);
let live = update_live_data(&mut user, &object!{
master_live_id: STOCK_LIVE_ID,
level: 0,
live_score: { score: 1, max_combo: 1 }
}, false, true);
userdata::save_acc(token, user);
assert_eq!(live["high_score"], 450000);
assert_eq!(stored_live(token, STOCK_LIVE_ID)["high_score"], 450000);
}
#[test]
fn a_public_multi_live_on_a_new_song_records_no_score_at_all() {
let _lock = crate::runtime::lock_test_data_path();
let token = "sb_public_first_play";
register_account(token);
// The first ever play of the song is a public multi: the song gets a live record
// so the clear counts, but there is no high score to show for it.
let live = record_unscored_clear(token, STOCK_LIVE_ID, 4, 900000, 400);
assert_eq!(live["high_score"], 0);
assert_eq!(stored_live(token, STOCK_LIVE_ID)["high_score"], 0);
assert_eq!(pulled_clear_count(token, STOCK_LIVE_ID), 1);
// A later solo play sets it for real.
record_clear(token, STOCK_LIVE_ID, 4, 300000, 100);
assert_eq!(stored_live(token, STOCK_LIVE_ID)["high_score"], 300000);
}
#[test]
fn clear_count_persists_with_custom_songs_disabled() {
let _lock = crate::runtime::lock_test_data_path();
crate::runtime::set_enable_custom_songs(false);
let token = "cc_control_disabled";
register_account(token);
record_clear(token, STOCK_LIVE_ID, 4, 500000, 320);
assert_eq!(pulled_clear_count(token, STOCK_LIVE_ID), 1);
record_clear(token, STOCK_LIVE_ID, 4, 480000, 300);
assert_eq!(pulled_clear_count(token, STOCK_LIVE_ID), 2);
let user = userdata::get_acc(token);
let live = user["live_list"].members().find(|l| l["master_live_id"] == STOCK_LIVE_ID).unwrap();
assert_eq!(live["clear_count"], 2);
assert_eq!(live["high_score"], 500000);
}
#[test]
fn clear_count_survives_custom_songs_enabled() {
let _lock = crate::runtime::lock_test_data_path();
crate::runtime::set_enable_custom_songs(true);
let token = "cc_custom_enabled";
register_account(token);
record_clear(token, STOCK_LIVE_ID, 4, 500000, 320);
assert_eq!(pulled_clear_count(token, STOCK_LIVE_ID), 1);
}
#[test]
fn custom_song_cleanup_keeps_stock_lives() {
let _lock = crate::runtime::lock_test_data_path();
crate::runtime::set_enable_custom_songs(true);
let token = "cc_mixed_ids";
register_account(token);
record_clear(token, STOCK_LIVE_ID, 4, 500000, 320);
record_clear(token, crate::database::custom_song::FIRST_MUSIC_ID, 1, 100, 10);
let user = userdata::get_acc(token);
assert_eq!(get_clear_count(STOCK_LIVE_ID, &user), 1);
}
fn asset_gate(version: &str, platform: &str, hash: &str) -> Option<i32> {
let mut rb = TestRequest::default()
.insert_header(("aoharu-asset-version", version.to_string()))
.insert_header(("aoharu-platform", platform.to_string()));
if !hash.is_empty() {
rb = rb.insert_header(("aoharu-asset-hash", hash.to_string()));
}
let req = rb.to_http_request();
global::check_asset_headers(req.headers(), true)
}
#[test]
fn asset_gate_is_platform_conditional() {
let _lock = crate::runtime::lock_test_data_path();
let current = "ced44f266b4e4c8eb05fe417fd5f3d1b";
let stock = "4c921d2443335e574a82e04ec9ea243c";
assert_eq!(asset_gate(current, "Windows", ""), None);
assert_eq!(asset_gate(current, "android", ""), None);
assert_eq!(asset_gate(current, "ios", ""), None);
assert_eq!(asset_gate(stock, "android", ""), None);
assert_eq!(asset_gate(stock, "ios", ""), None);
assert_eq!(asset_gate(stock, "Windows", ""), None);
}
fn bond_ids(character: i64) -> Vec<i64> {
bond_missions(character).members().map(|m| m[1].as_i64().unwrap()).collect()
}
#[test]
fn bond_missions_match_masterdata() {
assert_eq!(bond_ids(1001), vec![1158001, 1158040]);
// Not contiguous with character order, and previously derived from the
// id's last digit: 3010/3011/3012 and 4010/4011 all resolved to another
// character's mission.
assert_eq!(bond_ids(3010), vec![1158028, 1158067]);
assert_eq!(bond_ids(3012), vec![1158030, 1158069]);
assert_eq!(bond_ids(4010), vec![1158079, 1158081]);
assert_eq!(bond_ids(4011), vec![1158080, 1158082]);
// Bands with no bond missions must map to nothing rather than collide
// with a mu's character: 6xxx is official, 5xxx is the SIF1 card import.
assert!(bond_missions(6001).is_empty());
assert!(bond_missions(5001).is_empty());
assert!(bond_missions(5172).is_empty());
}
#[test]
fn chat_missions_align_with_bond_steps() {
let chats = &databases::CHARACTER_CHAT_MISSIONS["1001"];
assert_eq!(chats.len(), CHATS.len());
for (step, threshold) in CHATS.members().enumerate() {
assert_eq!(chats[step][0].as_i64(), threshold.as_i64());
assert_eq!(chats[step][1].as_i64(), Some(1958001 + step as i64));
}
assert!(databases::CHARACTER_CHAT_MISSIONS["5001"].is_empty());
}
}

View File

@@ -1,14 +1,14 @@
use jzon::object;
use actix_web::{web, HttpRequest, Responder};
use actix_web::{web, Responder};
use crate::router::global;
use crate::router::Api;
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.route("/location", web::get().to(location));
}
async fn location(req: HttpRequest) -> impl Responder {
global::api(&req, Some(object!{
async fn location() -> impl Responder {
Api(Some(object!{
"master_location_ids": []
}))
}

View File

@@ -1,7 +1,7 @@
use jzon::{object, array, JsonValue};
use actix_web::{web, HttpRequest, Responder};
use actix_web::{web, Responder};
use crate::router::{global, userdata, items, databases};
use crate::router::{global, userdata, items, databases, Login, Api};
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.route("/dummy/login", web::post().to(dummy));
@@ -9,11 +9,10 @@ pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.route("/login_bonus/event", web::post().to(bonus_event));
}
async fn dummy(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
async fn dummy(Login(key): Login) -> impl Responder {
let user = userdata::get_acc(&key);
global::api(&req, Some(object!{
Api(Some(object!{
"user_id": user["user"]["id"].clone()
}))
}
@@ -53,8 +52,7 @@ fn do_bonus(user_home: &mut JsonValue, bonuses: &mut JsonValue) -> JsonValue {
to_send
}
async fn bonus(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
async fn bonus(Login(key): Login) -> impl Responder {
let mut user_home = userdata::get_acc_home(&key);
let mut user_missions = userdata::get_acc_missions(&key);
@@ -73,15 +71,14 @@ async fn bonus(req: HttpRequest, body: String) -> impl Responder {
userdata::save_acc_loginbonus(&key, bonuses.clone());
userdata::save_acc_home(&key, user_home.clone());
global::api(&req, Some(object!{
Api(Some(object!{
"login_bonus_list": to_send,
"start_time": bonuses["start_time"].clone(),
"clear_mission_ids": cleared_missions
}))
}
async fn bonus_event(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
async fn bonus_event(Login(key): Login) -> impl Responder {
let mut user_home = userdata::get_acc_home(&key);
let mut bonuses = userdata::get_acc_eventlogin(&key);
@@ -93,7 +90,7 @@ async fn bonus_event(req: HttpRequest, body: String) -> impl Responder {
userdata::save_acc_eventlogin(&key, bonuses.clone());
userdata::save_acc_home(&key, user_home.clone());
global::api(&req, Some(object!{
Api(Some(object!{
"login_bonus_list": to_send,
"start_time": bonuses["start_time"].clone(),
"clear_mission_ids": []

View File

@@ -2,8 +2,8 @@ use jzon::{array, object, JsonValue};
use actix_web::{web, HttpRequest, Responder};
use rand::RngExt;
use crate::router::{global, userdata, items, databases};
use crate::encryption;
use crate::router::{global, userdata, items, databases, custom_card, Body, Login, Session, Api};
use crate::database::custom_card as custom_card_db;
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.service(
@@ -13,8 +13,7 @@ pub fn routes(cfg: &mut web::ServiceConfig) {
);
}
async fn tutorial(req: HttpRequest, body: String) -> impl Responder {
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn tutorial(Body(body): Body) -> impl Responder {
let id = body["master_character_id"].to_string();
let user = &id[id.len() - 2..].parse::<i32>().unwrap();
@@ -28,7 +27,7 @@ async fn tutorial(req: HttpRequest, body: String) -> impl Responder {
}
lotteryid += user;
global::api(&req, Some(object!{
Api(Some(object!{
"lottery_list": [
{
"master_lottery_id": lotteryid,
@@ -108,6 +107,85 @@ fn get_random_cards(id: i64, mut count: usize) -> JsonValue {
rv
}
// The runtime custom-card banner (lottery id 6900001). The CLIENT synthesizes
// its lottery/price/rarity/item masterdata from the catalog; the server only
// handles the draw. Cost and rarity structure mirror the baked SIF1-import
// banners 6110001-6110004 (lottery_price.csv / lottery_rarity.csv):
// price 1 = 11 draws / 3000 free gems, price 2 = 1 draw / 300 free gems
// normal roll r1 6800 / r2 2600 / r3 600; multi draws replace one roll with
// an ensured r2-or-better at 8125 / 1875
// Wire contract for the drawn items (the client synthesizes matching
// LotteryItemMst rows): master_lottery_item_id = 690000100 + rarity,
// master_lottery_item_number = master_card_id - 150000000
const CUSTOM_BANNER_RATIO: &[(i64, i64)] = &[(1, 6800), (2, 2600), (3, 600)];
const CUSTOM_BANNER_ENSURED: &[(i64, i64)] = &[(2, 8125), (3, 1875)];
fn custom_banner_price(price_number: i64) -> JsonValue {
match price_number {
1 => object!{"masterItemId": 0, "consumeType": 1, "count": 11, "price": 3000},
2 => object!{"masterItemId": 0, "consumeType": 1, "count": 1, "price": 300},
_ => JsonValue::Null
}
}
// One roll: weighted rarity over the rarities that actually have published +
// obtainable cards, then a uniform card within the rarity. None when every
// pool is empty
fn custom_banner_roll(table: &[(i64, i64)], pools: &[Vec<i64>; 3], rng: &mut rand::rngs::ThreadRng) -> Option<(i64, i64)> {
let available: Vec<&(i64, i64)> = table.iter().filter(|(rarity, _)| !pools[(*rarity - 1) as usize].is_empty()).collect();
let total: i64 = available.iter().map(|(_, ratio)| ratio).sum();
if total <= 0 {
return None;
}
let roll = rng.random_range(1..=total);
let mut cumulative = 0;
for (rarity, ratio) in available {
cumulative += ratio;
if roll <= cumulative {
let pool = &pools[(*rarity - 1) as usize];
return Some((*rarity, pool[rng.random_range(0..pool.len())]));
}
}
None
}
// The draw, in the same result shape get_random_cards produces so the stock
// grant loop consumes it unchanged. Empty when there is nothing obtainable -
// the caller bails before charging
fn custom_banner_cards(count: usize) -> JsonValue {
let pools: [Vec<i64>; 3] = [
custom_card_db::obtainable_card_ids(1),
custom_card_db::obtainable_card_ids(2),
custom_card_db::obtainable_card_ids(3)
];
let mut rng = rand::rng();
let mut rv = array![];
let mut remaining = count;
if count > 1 {
// The ensured slot falls back to a normal roll when no r2/r3 exists
if let Some((rarity, card)) = custom_banner_roll(CUSTOM_BANNER_ENSURED, &pools, &mut rng)
.or_else(|| custom_banner_roll(CUSTOM_BANNER_RATIO, &pools, &mut rng)) {
rv.push(object!{
"id": card,
"master_card_id": card,
"master_lottery_item_id": 690_000_100 + rarity,
"master_lottery_item_number": card - 150_000_000
}).unwrap();
remaining -= 1;
}
}
for _ in 0..remaining {
let Some((rarity, card)) = custom_banner_roll(CUSTOM_BANNER_RATIO, &pools, &mut rng) else { break; };
rv.push(object!{
"id": card,
"master_card_id": card,
"master_lottery_item_id": 690_000_100 + rarity,
"master_lottery_item_number": card - 150_000_000
}).unwrap();
}
rv
}
fn lottery_day() -> i64 {
(global::timestamp() as i64 + 32400) / 86400
}
@@ -189,17 +267,14 @@ fn get_lottery_list(user: &JsonValue) -> JsonValue {
rv
}
async fn lottery(req: HttpRequest) -> impl Responder {
let key = global::get_login(req.headers(), "");
async fn lottery(Login(key): Login) -> impl Responder {
let user = userdata::get_acc(&key);
global::api(&req, Some(object!{
Api(Some(object!{
"lottery_list": get_lottery_list(&user)
}))
}
async fn lottery_post(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn lottery_post(req: HttpRequest, Session { key, body }: Session) -> impl Responder {
//println!("lottery: {}", body);
let mut user = userdata::get_acc(&key);
let user2 = userdata::get_acc(&key);
@@ -210,17 +285,50 @@ async fn lottery_post(req: HttpRequest, body: String) -> impl Responder {
let lottery_id = body["master_lottery_id"].as_i64().unwrap();
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);
// Custom lotteries live in the 6M band (below TUTORIAL_MIN_LOTTERY_ID; 1-5M/7M/8M official)
if (6_000_000..7_000_000).contains(&lottery_id) && !crate::router::card::client_supports_custom_cards(&req) {
return global::api_error(&req, global::RESULT_GAME_VERSION_UPDATED);
}
// The runtime custom-card banner additionally needs the catalog protocol
let is_custom_banner = lottery_id == custom_card::CUSTOM_LOTTERY_ID;
if is_custom_banner && (custom_card::disabled() || !custom_card::client_supports(&req)) {
return global::api_error(&req, global::RESULT_GAME_VERSION_UPDATED);
}
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())
let (price, cardstogive, lottery_type, exchange_id) = if is_custom_banner {
let price = custom_banner_price(price_number);
if price.is_null() {
return global::api_error(&req, global::RESULT_GAME_VERSION_UPDATED);
}
let drawn = custom_banner_cards(price["count"].as_usize().unwrap());
if drawn.is_empty() {
// Nothing published + obtainable: nothing charged, nothing drawn.
// The client only synthesizes the banner when the pool is
// non-empty, so this is a stale-catalog race, not a normal path
return global::api(&req, Some(object!{
"lottery_item_list": [],
"updated_value_list": {},
"gift_list": user2["home"]["gift_list"].clone(),
"clear_mission_ids": [],
"draw_count_list": []
}));
}
(price, drawn, 1, 0)
} else {
(lottery["masterLotteryPriceId"].as_i64().unwrap_or(lottery_id), lottery["masterLotteryRarityId"].as_i64().unwrap_or(lottery_id))
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();
let count = price["count"].as_usize().unwrap();
(price, get_random_cards(rarity_id, count), lottery_type, exchange_id)
};
let price = databases::PRICE[price_id.to_string()][price_number.to_string()].clone();
items::use_item(&object!{
value: price["masterItemId"].clone(),
@@ -228,10 +336,6 @@ async fn lottery_post(req: HttpRequest, body: String) -> impl Responder {
consumeType: price["consumeType"].clone()
}, 1, &mut user);
let count = price["count"].as_usize().unwrap();
let cardstogive = get_random_cards(rarity_id, count);
let mut new_cards = array![];
let mut lottery_list = array![];
@@ -295,9 +399,19 @@ async fn lottery_post(req: HttpRequest, body: String) -> impl Responder {
userdata::save_acc_chats(&key, chats);
userdata::save_acc_missions(&key, missions);
// An account holding a runtime custom card needs a catalog-fetching
// client from now on; start.rs enforces it (monotonic, like the level-2
// flag for the baked band)
if cardstogive.members().any(|card| custom_card::is_custom_runtime(card["master_card_id"].as_i64().unwrap_or(0))) {
userdata::save_protocol_version(&key, custom_card::PROTOCOL_VERSION);
}
global::api(&req, Some(object!{
"lottery_item_list": lottery_list,
"updated_value_list": {
// The draw can charge gems (the custom banners do); without this
// the client's balance drifts until the next /api/user pull
"gem": user["gem"].clone(),
"card_list": new_cards,
"item_list": user["item_list"].clone()
},
@@ -314,3 +428,77 @@ async fn lottery_post(req: HttpRequest, body: String) -> impl Responder {
#[cfg(test)]
mod tests {
use super::*;
// The runtime banner draws only published + obtainable cards, honors the
// ensured slot, and speaks the agreed lottery_item id/number convention
#[test]
fn runtime_custom_banner_draw() {
let _lock = crate::runtime::lock_test_data_path();
crate::router::custom_card::tests::wipe(6001);
// Nothing obtainable: the draw comes back empty (the route then bails
// before charging)
assert!(custom_banner_cards(11).is_empty());
let mut r1_ids = Vec::new();
for seed in 0..3 {
let id = custom_card_db::next_card_id();
custom_card_db::insert_card(id, 1001, 6001, &object!{ "master_card_id": id, "rarity": 1, "seed": seed }, true, true);
r1_ids.push(id);
}
let r2 = custom_card_db::next_card_id();
custom_card_db::insert_card(r2, 1001, 6001, &object!{ "master_card_id": r2, "rarity": 2 }, true, true);
let r3 = custom_card_db::next_card_id();
custom_card_db::insert_card(r3, 1001, 6001, &object!{ "master_card_id": r3, "rarity": 3 }, true, true);
// Draft / unobtainable cards must never come out of the pool
let draft = custom_card_db::next_card_id();
custom_card_db::insert_card(draft, 1001, 6001, &object!{ "master_card_id": draft, "rarity": 1 }, false, true);
let unobtainable = custom_card_db::next_card_id();
custom_card_db::insert_card(unobtainable, 1001, 6001, &object!{ "master_card_id": unobtainable, "rarity": 1 }, true, false);
let drawn = custom_banner_cards(11);
assert_eq!(drawn.len(), 11);
// The ensured slot is drawn first: rarity 2 or 3
let first = drawn[0]["master_card_id"].as_i64().unwrap();
assert!(first == r2 || first == r3, "ensured slot drew {}", first);
for card in drawn.members() {
let id = card["master_card_id"].as_i64().unwrap();
assert!(r1_ids.contains(&id) || id == r2 || id == r3, "drew {}", id);
let rarity = custom_card_db::get_card(id).unwrap()["rarity"].as_i64().unwrap();
// The contract the client synthesizes its LotteryItemMst rows to
assert_eq!(card["master_lottery_item_id"].as_i64(), Some(690_000_100 + rarity));
assert_eq!(card["master_lottery_item_number"].as_i64(), Some(id - 150_000_000));
assert_eq!(card["id"], card["master_card_id"]);
}
// Single draws have no ensured slot but still only draw the pool
let single = custom_banner_cards(1);
assert_eq!(single.len(), 1);
// Price rows mirror the baked banners; unknown numbers are refused
assert_eq!(custom_banner_price(1)["price"].as_i64(), Some(3000));
assert_eq!(custom_banner_price(1)["count"].as_i64(), Some(11));
assert_eq!(custom_banner_price(2)["price"].as_i64(), Some(300));
assert_eq!(custom_banner_price(2)["count"].as_i64(), Some(1));
assert!(custom_banner_price(3).is_null());
crate::router::custom_card::tests::wipe(6001);
}
#[test]
fn custom_banner_draw() {
for lid in [6110001i64, 6110002, 6110003, 6110004] {
let cards = super::get_random_cards(lid, 11);
assert_eq!(cards.len(), 11, "banner {lid}");
for c in cards.members() {
let id = c["master_card_id"].as_i64().unwrap();
let rarity = crate::router::items::get_rarity(id);
assert!((1..=3).contains(&rarity), "card {id} rarity {rarity}");
}
}
}
}

View File

@@ -1,31 +0,0 @@
use actix_web::{web, HttpRequest, HttpResponse, Responder};
use actix_web::http::header::ContentType;
use crate::router::databases::csv::{get_all, Region};
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.service(
web::scope("/masterdata")
.route("/supported", web::get().to(supported))
.route("/{platform}/{LANG}", web::get().to(mst))
);
}
async fn mst(req: HttpRequest) -> impl Responder {
let lang = req.match_info().get("LANG").unwrap_or("JP");
let region = match lang.to_ascii_uppercase().as_str() {
"JP" => Region::Jp,
_ => Region::En, // idk
};
let body = get_all(region);
let body = jzon::stringify(body);
HttpResponse::Ok()
.insert_header(("content-type", ContentType::json()))
.insert_header(("content-length", body.len()))
.body(body)
}
async fn supported() -> impl Responder {
"SUPPORTED"
}

View File

@@ -1,8 +1,7 @@
use jzon::{array, object, JsonValue};
use actix_web::{web, HttpRequest, Responder};
use crate::router::{global, userdata, items, databases};
use crate::encryption;
use crate::router::{global, userdata, items, databases, Login, Session, Api};
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.service(
@@ -15,13 +14,12 @@ pub fn routes(cfg: &mut web::ServiceConfig) {
const VARIABLE_MISSIONS: [[i64; 2]; 5] = [[1153001, 1153019], [1105001, 1105017], [1101001, 1101030], [1121001, 1121019], [1112001, 1112033]];
async fn mission(req: HttpRequest) -> impl Responder {
let key = global::get_login(req.headers(), "");
async fn mission(Login(key): Login) -> impl Responder {
let user = userdata::get_acc(&key);
let step = user["tutorial_step"].as_i64().unwrap_or(0);
if (1..130).contains(&step) {
return global::api(&req, Some(object!{
return Api(Some(object!{
"mission_list": array![]
}));
}
@@ -31,16 +29,13 @@ async fn mission(req: HttpRequest) -> impl Responder {
userdata::save_acc_missions(&key, missions.clone());
}
global::api(&req, Some(object!{
Api(Some(object!{
"mission_list": missions
}))
}
async fn clear(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
async fn clear(Session { key, body }: Session) -> impl Responder {
let mut missions = userdata::get_acc_missions(&key);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
let mut cleared = array![];
for id in body["master_mission_ids"].members() {
@@ -54,14 +49,12 @@ async fn clear(req: HttpRequest, body: String) -> impl Responder {
userdata::save_acc_missions(&key, missions);
global::api(&req, Some(object!{
Api(Some(object!{
"clear_mission_ids": cleared
}))
}
async fn receive(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn receive(req: HttpRequest, Session { key, body }: Session) -> impl Responder {
let uid = global::get_uid(req.headers());
let now = global::timestamp();
@@ -77,27 +70,28 @@ async fn receive(req: HttpRequest, body: String) -> impl Responder {
for mission in body["master_mission_ids"].members() {
let mid = mission.as_i64().unwrap();
let mission_info = databases::MISSION_LIST[mid.to_string()].clone();
let master = databases::MISSION_REWARD[mission_info["masterMissionRewardId"].to_string()].clone();
let reward_type = master["type"].as_i64().unwrap();
for master in databases::MISSION_REWARDS[mission_info["masterMissionRewardId"].to_string()].members() {
let reward_type = master["type"].as_i64().unwrap();
rewards.push(object!{
give_type: master["giveType"].clone(),
type: master["type"].clone(),
value: master["value"].clone(),
level: master["level"].clone(),
amount: master["amount"].clone()
}).unwrap();
rewards.push(object!{
give_type: master["giveType"].clone(),
type: master["type"].clone(),
value: master["value"].clone(),
level: master["level"].clone(),
amount: master["amount"].clone()
}).unwrap();
items::give_gift(&object!{
reward_type: reward_type,
value: master["value"].clone(),
amount: master["amount"].clone()
}, &mut user, &mut missions, &mut array![], &mut chats);
items::give_gift(&object!{
reward_type: reward_type,
value: master["value"].clone(),
amount: master["amount"].clone()
}, &mut user, &mut missions, &mut array![], &mut chats);
match reward_type {
1 => touched_gem = true,
4 => touched_coin = true,
_ => { touched_items.push(master["value"].clone()).unwrap(); }
match reward_type {
1 => touched_gem = true,
4 => touched_coin = true,
_ => { touched_items.push(master["value"].clone()).unwrap(); }
}
}
let mut variable = false;
@@ -182,7 +176,7 @@ async fn receive(req: HttpRequest, body: String) -> impl Responder {
updated_value_list["point_list"] = point_list;
}
global::api(&req, Some(object!{
Api(Some(object!{
"reward_list": rewards,
"gift_list": array![],
"updated_value_list": updated_value_list,

797
src/router/multi_live.rs Normal file
View File

@@ -0,0 +1,797 @@
// Wire format shared with the C# client rewrite; see docs/multi-live-ws-protocol.md.
mod proto;
// Lobby/room state machine, WebSocket-free so it can be tested without a socket.
mod rooms;
// The /multi_live/ws endpoint itself.
mod ws;
use jzon::{object, JsonValue};
use actix_web::{web, HttpRequest, Responder};
use crate::router::{databases, event, event_ranking, global, items, live, userdata, Session, Api};
// The relay's expiry timers (held slots, empty rooms, dead connections). Started once from
// run_server; see ws::start_sweeper for why it is not lazily started by the first upgrade.
pub use ws::start_sweeper;
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.service(
web::scope("/multi_live")
.route("/start", web::post().to(start))
.route("/end", web::post().to(end))
// The Photon replacement. Note this sits inside the /api scope, so the
// handshake goes through webui_fallback and must carry the usual
// aoharu-asset-version header like every other game request.
.route("/ws", web::get().to(ws::ws))
);
}
// Shock.MULTI_LIVE_END_STATUS, the enum RecvMultiLiveEndRData.is_penalty_miss_ratio
// is cast to (MngLiveData.SendMultiLiveEnd).
// NONE(0) - normal result, client processes every reward list.
// MISS_RATIO_PENALTY_STATUS(1) - MngLiveData bails out right after user/stamina,
// LiveScene.OnMultiLiveEnd leaves the room and
// returns to the multi-event top. Nothing is awarded.
// GREAT_PERFECT_LOW_RATIO_STATUS(2) - rewards still apply, the client only raises
// MultiEventLiveResult.IsOpenCautionDialog.
const STATUS_NONE: u8 = 0;
const STATUS_MISS_RATIO_PENALTY: u8 = 1;
const STATUS_GREAT_PERFECT_LOW_RATIO: u8 = 2;
// Shock.COMMON_CONST.RATIO_DIVISOR. Every ratio in masterdata (event_score._eventPointRatio
// / ._eventBoostRatio, live_boost._eventPointRatio, multievent_rankbonus._eventPtBonus,
// multievent_card_bonus._pointBonusRatioList) is stored in 1/10000 and divided by this.
const RATIO_ONE: i64 = 10000;
// Extended-protocol revision this feature requires (X-Protocol-Version, the same ladder
// card.rs=2 / custom_card.rs=3 use). Older client builds carry incompatible multi
// implementations — pre-relay wire framing and pre-rework flows — so every multi_live
// surface (start, end, and the WS upgrade in ws.rs) refuses anything below it.
// 4 = multi-live over the self-hosted WS relay (permanent co-op).
pub const PROTOCOL_VERSION: u32 = 4;
fn protocol_too_old(req: &HttpRequest) -> bool {
global::client_protocol_version(req) < PROTOCOL_VERSION
}
fn const_value(id: &str, default: i64) -> i64 {
let raw = &databases::CONST[id]["value"];
raw.as_str()
.and_then(|v| v.parse::<i64>().ok())
.or_else(|| raw.as_i64())
.unwrap_or(default)
}
fn boost_lp(live_boost: i64) -> i64 {
databases::LIVE_BOOST[live_boost.to_string()]["lp"]
.as_i64()
.unwrap_or(10 * live_boost)
}
fn boost_event_point_ratio(live_boost: i64) -> i64 {
databases::LIVE_BOOST[live_boost.to_string()]["eventPointRatio"]
.as_i64()
.unwrap_or(RATIO_ONE * live_boost.max(1))
}
// MusicLevelMst._fullCombo — the note count both client ratio checks divide by.
fn note_count(master_live_id: i64, level: i64) -> Option<i64> {
let music_id = databases::LIVE_LIST[master_live_id.to_string()]["masterMusicId"].as_i64()?;
let row = &databases::MUSIC_LEVEL[format!("{}_{}", music_id, level)];
if row.is_empty() {
return None;
}
let notes = row["fullCombo"].as_i64()?;
if notes <= 0 { None } else { Some(notes) }
}
// Aoharu.MultiUtil.IsPenalty / IsHalved, evaluated server-side because
// is_penalty_miss_ratio is what the client actually obeys (both MultiUtil helpers
// are unreferenced in the client — they were only ever a local preview).
//
// IsPenalty: (MULTI_PENALTY_MISS_RATIO / 100) * fullCombo <= miss
// IsHalved: perfect + great < (MULTI_EVENT_LIVE_GREAT_PERFECT_NOTES_MIN_RATIO / 100) * fullCombo
// (skipped for LIVE_LEVEL 1, per `if ((int)level == 1) return false;`)
//
// MultiUtil.IsHalved reads Perfect + Good, but only because the client-side
// MultiLiveResultProtocolData(userId, LiveScore, bool) ctor never assigns Great
// (IL2CPP @4769631) — it has no great count to use. The const is named
// ..._GREAT_PERFECT_NOTES_MIN_RATIO and the server does receive the full LiveScore,
// so perfect + great is used here.
//
// MULTI_PENALTY_NO_PLAY_MISS_RATIO (5000) is unreachable as a real miss ratio and is
// the value the ratio takes when nothing was judged at all: a client that never played
// reports 0 misses, which the 70% rule would wave through.
//
// Both checks mirror MultiUtil's "missing MusicLevelMst row => false" shape.
fn multi_live_end_status(body: &JsonValue) -> u8 {
let score = &body["live_score"];
let notes = match note_count(
body["master_live_id"].as_i64().unwrap_or(0),
body["level"].as_i64().unwrap_or(0)
) {
Some(n) => n,
None => return STATUS_NONE
};
let perfect = score["perfect"].as_i64().unwrap_or(0);
let great = score["great"].as_i64().unwrap_or(0);
let good = score["good"].as_i64().unwrap_or(0);
let bad = score["bad"].as_i64().unwrap_or(0);
let miss = score["miss"].as_i64().unwrap_or(0);
let penalty_ratio = const_value("MULTI_PENALTY_MISS_RATIO", 70);
let no_play_ratio = const_value("MULTI_PENALTY_NO_PLAY_MISS_RATIO", 5000);
let judged = perfect + great + good + bad + miss;
let penalised = if judged == 0 {
no_play_ratio >= penalty_ratio
} else {
miss * 100 >= penalty_ratio * notes
};
if penalised {
return STATUS_MISS_RATIO_PENALTY;
}
if body["level"].as_i64().unwrap_or(0) != 1 {
let min_ratio = const_value("MULTI_EVENT_LIVE_GREAT_PERFECT_NOTES_MIN_RATIO", 50);
if (perfect + great) * 100 < min_ratio * notes {
return STATUS_GREAT_PERFECT_LOW_RATIO;
}
}
STATUS_NONE
}
// The event-point yield of one multi live, from event_score.csv (Shock.EventScoreMst).
//
// Neither ew nor the reconstructed client had an existing consumer to copy: EventData
// exposes _eventLivePointBase / _eventPointRatio / _eventBoostRatio as EventLiveBasePoint
// / EventPointRatio / EventBoostRatio (EventData.cs:134-156) but nothing in the client
// ever reads those three properties — the award has always been computed server-side.
// The interpretation used here is the one the field names and the client's own ratio
// convention dictate, and the one this port is specified against:
//
// points = _eventLivePointBase
// * _eventPointRatio / RATIO_DIVISOR (per-event scaling)
// * _eventBoostRatio / RATIO_DIVISOR (per-event boost worth)
// * live_boost._eventPointRatio / RATIO_DIVISOR (the boost actually spent)
//
// The last factor mirrors LiveBoostMst.GetEventPointRatio (LiveBoostMst.cs:131-137),
// which is `_eventPointRatio / RATIO_DIVISOR` — the boost level itself for the stock
// table (boost 3 -> 30000/10000 -> 3).
//
// All four multi events (108/111/115/119) carry base 10, pointRatio 10000, boostRatio
// 35000, so one boost-1 multi live is worth 35 points.
//
// Division is deferred to the end so the x3.5 boost ratio does not truncate to x3 the
// way the client's integer GetEventPointRatio would.
fn event_live_points(event_id: u32, live_boost: i64) -> i64 {
let row = &databases::EVENT_SCORE[event_id.to_string()];
if row.is_empty() {
// Should be unreachable: event_score.csv has a row for every event, including
// all four multi events. An event with no row is worth nothing rather than
// silently falling back to an invented constant.
println!("multi_live: no event_score row for event {event_id}, awarding 0 event points");
return 0;
}
let base = row["eventLivePointBase"].as_i64().unwrap_or(0);
let point_ratio = row["eventPointRatio"].as_i64().unwrap_or(0);
let boost_ratio = row["eventBoostRatio"].as_i64().unwrap_or(0);
base * point_ratio * boost_ratio * boost_event_point_ratio(live_boost)
/ (RATIO_ONE * RATIO_ONE * RATIO_ONE)
}
// The stamina this live actually cost, as recorded by /multi_live/start. This is what
// live_end_ex scales every reward off, and it is deliberately read without reference to
// the backing event: a closed event suppresses scoring, never rewards.
fn recorded_lp(started: Option<&JsonValue>) -> i64 {
let live_boost = started.and_then(|s| s["live_boost"].as_i64()).unwrap_or(0);
started
.and_then(|s| s["use_lp"].as_i64())
.unwrap_or_else(|| boost_lp(live_boost))
.max(0)
}
// The event a multi live should actually score against, or None when it should score
// against nothing.
//
// Multi is a permanent feature here, entered from a client-side button rather than from
// a live event, so the client faithfully sends the backing event id (108) even though
// that event is closed and stays closed by choice. Awarding against a closed event would
// write event points and ranking rows for a season that is not running, so the whole
// event-point path stays dormant — and lights up on its own, with no further change
// here, if an event is ever actually opened.
//
// Nothing else about the live is affected: rewards, EXP, bond, missions and the response
// shape all come out of live_end_ex exactly as they do for an in-session event.
fn scoring_event(started: Option<&JsonValue>, now: u64) -> Option<u32> {
started
.and_then(|s| s["master_event_id"].as_u32())
.filter(|id| *id != 0)
.filter(|id| event::is_in_session(*id, now))
}
// The whole award for one multi live: the event_score yield, the finishing-position
// bonus from multievent_rankbonus, and the GREAT_PERFECT_LOW_RATIO halving.
fn multi_event_points(event_id: u32, live_boost: i64, players: i64, live_rank: i64, status: u8) -> i64 {
let mut points = event_live_points(event_id, live_boost);
points = points * (RATIO_ONE + rank_bonus(players, live_rank)) / RATIO_ONE;
if status == STATUS_GREAT_PERFECT_LOW_RATIO {
// MultiUtil calls this state "halved" — the caution dialog goes with a
// reduced yield, not a forfeited one.
points /= 2;
}
points
}
// multievent_rankbonus._eventPtBonus for this party size / finishing position.
// The table only covers 2-4 players with liveRank <= playerCount; anything outside
// it (a solo room, a rank the table has no row for) simply earns no bonus.
fn rank_bonus(player_count: i64, live_rank: i64) -> i64 {
databases::MULTIEVENT_RANK_BONUS[format!("{}_{}", player_count, live_rank)]["eventPtBonus"]
.as_i64()
.unwrap_or(0)
}
// LiveScene.MultiTask4 builds other_live_score_list from MultiPlayManager.AllPlayers,
// so the poster is already one of its entries. Fall back to len + 1 if a caller ever
// sends a list that genuinely excludes itself.
fn player_count(body: &JsonValue, user_id: i64) -> i64 {
let list = &body["other_live_score_list"];
let contains_self = list
.members()
.any(|s| s["user_id"].as_i64() == Some(user_id));
let len = list.len() as i64;
if contains_self { len } else { len + 1 }
}
// Every field of Shock.RecvMultiLiveEndRData, so the penalty path still deserialises
// cleanly. The client reads user/stamina and then returns on status 1, but Notify()
// runs over the whole payload first.
fn barren_response(user: &JsonValue, status: u8) -> JsonValue {
object!{
"is_penalty_miss_ratio": status,
"gem": user["gem"].clone(),
"clear_master_live_mission_ids": [],
"user": user["user"].clone(),
"stamina": user["stamina"].clone(),
"character_list": [],
"card_list": [],
"card_sub_list": [],
"item_list": [],
"point_list": [],
"group_list": [],
"reward_list": [],
"gift_list": [],
"clear_mission_ids": [],
"event_point_list": user["event_point_list"].clone(),
"event_point_reward_list": [],
"ranking_change": [],
"music_mission_reward_list": [],
"event_ranking_data": {
"event_point_rank": 0,
"next_reward_rank_point": 0,
"event_score_rank": 0,
"next_reward_rank_score": 0
}
}
}
// Unlike /live/start, a multi live pays its stamina up front: the response reports
// consumed_stamina and the client never sends a boost with /multi_live/end. The
// amount actually taken is stashed on the recorded start payload so /multi_live/end
// can scale rewards off it without charging for it twice.
async fn start(req: HttpRequest, Session { key, mut body }: Session) -> impl Responder {
// Older clients speak an incompatible multi — refuse before touching any state.
if protocol_too_old(&req) {
return Api(None);
}
// `token` is the room-party correlation key ("{userId}.{guid}") that all up to four
// party members post. It is recorded verbatim on the start record and nothing reads
// anything else out of it. Reconciling the party itself — checking the four results
// against each other — is still deferred.
// master_event_id is recorded verbatim and never validated here: multi is a permanent
// feature entered against a closed event (see scoring_event), so a closed — or absent
// — event must start a live exactly like an open one. Stamina comes off live_boost
// alone, so nothing on this path depends on the event being in session.
let live_boost = body["live_boost"].as_i64().unwrap_or(0);
let lp = boost_lp(live_boost).max(0);
let mut user = userdata::get_acc(&key);
// Settle regen first so the balance clamped against below is current.
items::lp_modification(&mut user, 0, true);
let available = user["stamina"]["stamina"].as_u64().unwrap_or(0);
// Clamped, not refused, and that IS the intended answer.
//
// The client gates on stamina at the entry to matching, never at the POST:
// MultiSelectionView.RoomCreation / OpenRoomSearchDialog and MultiRestart.RestartLive
// all run StaminaUtils.UseStaminaValue and divert to StaminaChargeScene when it says
// the balance is short, while MultiEventMatchingScene.ChangeScene — which is what
// actually calls SendMultiLiveStart, and does so off the host's _MoveScene RPC —
// computes the cost and drops the "insufficient" flag on the floor. Stamina only ever
// goes up between the gate and the POST (regen; the boost selector lives on the gated
// panels), so an honest client cannot arrive here short, and the official server was
// never asked what to do about it.
//
// So this is the unreachable-in-practice branch, and taking what is there is the
// benign resolution: the live still starts (a party of four must not be broken up by
// one member's balance), consumed_stamina reports what was really taken, and because
// every reward scales off that same recorded use_lp — see recorded_lp and live_end_ex —
// a short live pays out in proportion. Refusing would have to fail a live the other
// three players are already committed to; charging the full cost would mean inventing
// negative stamina.
let consumed = (lp as u64).min(available);
items::lp_modification(&mut user, consumed, true);
userdata::save_acc(&key, user);
body["use_lp"] = consumed.into();
live::start_live(&key, &body);
Api(Some(object!{
"consumed_stamina": consumed
}))
}
async fn end(req: HttpRequest, Session { key, body }: Session) -> impl Responder {
// Older clients speak an incompatible multi — refuse before touching any state
// (in particular before the start record can be consumed).
if protocol_too_old(&req) {
return Api(None);
}
// Loaded once and reused by every path that answers without playing the live; the
// live itself re-reads it, because live_end_ex saves the account.
let account = userdata::get_acc(&key);
// The user's own clock, so a time-travelling account sees the same event window the
// rest of the game shows it.
let uid = account["user"]["id"].as_i64().unwrap_or(0);
// A body with no live id is answered like a duplicate: it cannot name a start record
// (matching one on a null id would let it claim a record started with the same
// malformed body) and nothing downstream can score it.
if body["master_live_id"].as_i64().is_none() {
println!("multi_live/end: uid {} posted no master_live_id — nothing to end", uid);
return Api(Some(barren_response(&account, STATUS_NONE)));
}
// The started-live record is what makes an end legitimate, and it is CLAIMED here:
// take_started_live returns it and removes it in one transaction, before anything is
// awarded, so of N ends arriving together exactly one can proceed. The consumption
// used to be a side effect of get_end_live_deck_id deep inside live_end_ex — which
// only fired when the record carried a numeric deck_slot, and fired long after the
// award had been decided, so a re-POST could be paid twice over.
//
// Failing the take means this live was already ended: two clients signed in to the
// SAME account both POST /multi_live/end for the one shared record, or the client
// retried a request whose response it never saw. Granting again would double-count the
// clear, the clear-rate counter, the play-count mission and the flat 17001001 drop.
// So the duplicate is answered from current state: a well-formed result the client can
// display, awarding nothing.
let started = live::take_started_live(&key, &body);
let started = started.as_ref();
if started.is_none() {
println!("multi_live/end: uid {} has no start record to spend — answering barren", uid);
return Api(Some(barren_response(&account, STATUS_NONE)));
}
let live_boost = started.and_then(|s| s["live_boost"].as_i64()).unwrap_or(0);
let lp_used = recorded_lp(started);
let event_id = scoring_event(started, global::set_time(global::timestamp(), uid, false));
let status = multi_live_end_status(&body);
println!(
"multi_live/end: uid {} score {} miss-ratio status {} ({})",
uid,
body["live_score"]["score"].as_i64().unwrap_or(-1),
status,
match status {
STATUS_MISS_RATIO_PENALTY => "PENALTY — results voided",
2 => "great/perfect low — points halved",
_ => "ok",
}
);
if status == STATUS_MISS_RATIO_PENALTY {
// The client discards the result and leaves the room, so nothing is granted. The
// record is already gone (claimed above), so the live is not left hanging until it
// expires either — and a re-POST of the same penalised result lands on the
// no-record branch rather than back here.
return Api(Some(barren_response(&account, status)));
}
// /multi_live/end carries neither live_boost nor deck_slot; use_lp is what
// live_end scales exp / gold / bond / mission rewards off.
let mut end_body = body.clone();
end_body["use_lp"] = lp_used.into();
if end_body["deck_slot"].is_null() {
if let Some(slot) = started.and_then(|s| s["deck_slot"].as_i32()) {
end_body["deck_slot"] = slot.into();
}
}
// A multi live scores like the official server did: no high score, no score board —
// the client's own result screen says so. Private (join-by-code) parties are no
// exception (Ethan 2026-08-12; an earlier build recorded private-party scores, and
// the room-privacy plumbing that told the two apart left with that behaviour). The
// clear count and max combo still record either way — the live really was played.
let mut rv = live::live_end_ex(&req, &key, &end_body, false, false, false);
rv["is_penalty_miss_ratio"] = status.into();
// Fields RecvMultiLiveEndRData declares that live_end does not emit.
rv["card_list"] = jzon::array![];
rv["card_sub_list"] = jzon::array![];
rv["group_list"] = jzon::array![];
rv["music_mission_reward_list"] = jzon::array![];
// MngLiveData.SendMultiLiveEnd dereferences event_ranking_data unconditionally,
// so it must be an object even when this live belongs to no event.
rv["event_ranking_data"] = object!{
"event_point_rank": 0,
"next_reward_rank_point": 0,
"event_score_rank": 0,
"next_reward_rank_score": 0
};
if let Some(event_id) = event_id {
// live_end already saved the account; re-read it before touching event points.
let mut user = userdata::get_acc(&key);
let user_id = user["user"]["id"].as_i64().unwrap_or(0);
let players = player_count(&body, user_id);
let live_rank = body["multi_live_rank"].as_i64().unwrap_or(0);
let points = multi_event_points(event_id, live_boost, players, live_rank, status);
event::give_event_points(event_id, points, &mut user);
userdata::save_acc(&key, user.clone());
let total = event::get_points(event_id, &user);
event_ranking::live_completed(event_id, user_id, total, 0);
let rank = event::get_rank(event_id, user_id as u64);
let mut event = event::get_event_data(&key, event_id);
event["point_ranking"]["point"] = total.into();
event["point_ranking"]["rank"] = rank.into();
event::save_event_data(&key, event_id, event);
rv["event_point_list"] = user["event_point_list"].clone();
rv["event_ranking_data"] = object!{
"event_point_rank": rank,
"next_reward_rank_point": 0,
"event_score_rank": rank,
"next_reward_rank_score": 0
};
}
Api(Some(rv))
}
#[cfg(test)]
mod tests {
use super::*;
use super::proto::{ClientMsg, Map, Value};
use jzon::array;
use std::time::Instant;
const STOCK_LIVE_ID: i64 = 1100101;
#[test]
fn multi_consts_resolve_from_masterdata() {
assert_eq!(const_value("MULTI_PENALTY_MISS_RATIO", -1), 70);
assert_eq!(const_value("MULTI_PENALTY_NO_PLAY_MISS_RATIO", -1), 5000);
assert_eq!(const_value("MULTI_EVENT_LIVE_GREAT_PERFECT_NOTES_MIN_RATIO", -1), 50);
assert_eq!(const_value("NOT_A_CONST", -1), -1);
}
#[test]
fn boost_costs_come_from_live_boost() {
assert_eq!(boost_lp(1), 10);
assert_eq!(boost_lp(10), 100);
assert_eq!(boost_event_point_ratio(1), RATIO_ONE);
assert_eq!(boost_event_point_ratio(3), 3 * RATIO_ONE);
}
// The four multi events from multievent_setting.csv, all sharing one event_score row
// shape: _eventLivePointBase 10, _eventPointRatio 10000, _eventBoostRatio 35000.
const MULTI_EVENTS: [u32; 4] = [108, 111, 115, 119];
#[test]
fn event_score_rows_back_every_multi_event() {
for event_id in MULTI_EVENTS {
let row = &databases::EVENT_SCORE[event_id.to_string()];
assert!(!row.is_empty(), "event_score row missing for event {event_id}");
assert_eq!(row["eventLivePointBase"].as_i64(), Some(10));
assert_eq!(row["eventPointRatio"].as_i64(), Some(RATIO_ONE));
assert_eq!(row["eventBoostRatio"].as_i64(), Some(35000));
}
}
#[test]
fn event_live_points_derive_from_event_score() {
// 10 * (10000/10000) * (35000/10000) * boost — and the x3.5 must not truncate
// to x3 on the way through.
assert_eq!(event_live_points(108, 1), 35);
assert_eq!(event_live_points(108, 2), 70);
assert_eq!(event_live_points(108, 10), 350);
for event_id in MULTI_EVENTS {
assert_eq!(event_live_points(event_id, 1), 35);
}
}
#[test]
fn event_live_points_fall_back_to_zero_without_a_row() {
assert!(databases::EVENT_SCORE["99999"].is_empty());
assert_eq!(event_live_points(99999, 1), 0);
assert_eq!(multi_event_points(99999, 1, 4, 1, STATUS_NONE), 0);
}
#[test]
fn multi_event_points_layer_rank_bonus_and_halving() {
// 1st of 4 is +30% (multievent_rankbonus 4/1 = 3000).
assert_eq!(multi_event_points(108, 1, 4, 1, STATUS_NONE), 45);
// Last place earns the flat yield.
assert_eq!(multi_event_points(108, 1, 4, 4, STATUS_NONE), 35);
// The caution state halves whatever the bonus produced.
assert_eq!(multi_event_points(108, 1, 4, 1, STATUS_GREAT_PERFECT_LOW_RATIO), 22);
assert_eq!(multi_event_points(108, 1, 4, 4, STATUS_GREAT_PERFECT_LOW_RATIO), 17);
}
// release_label 223061504, event 108's window: 2023/06/19 05:00:00 - 2023/06/28 04:59:59.
fn during_multi_event_108() -> u64 {
global::parse_datetime("2023/06/20 12:00:00").unwrap()
}
#[test]
fn masterdata_datetimes_round_trip() {
let t = global::parse_datetime("2023/06/19 5:00:00").unwrap();
assert_eq!(global::format_datetime(t), "2023-06-19 05:00:00");
// A bare date is midnight, and the blank cells the evergreen label uses parse
// to nothing rather than to the epoch.
assert_eq!(
global::parse_datetime("2023/06/19"),
global::parse_datetime("2023/06/19 0:00:00")
);
assert_eq!(global::parse_datetime(""), None);
assert_eq!(global::parse_datetime("null"), None);
}
#[test]
fn the_multi_backing_event_is_closed_by_design() {
// The evergreen label has no window at all and is always open.
assert!(event::release_label_is_open(1, during_multi_event_108()));
// Event 108 is in session only inside its own long-past label window...
assert!(event::is_in_session(108, during_multi_event_108()));
// ...and is closed now, which is the permanent-feature state multi runs in.
// global::timestamp() rather than set_time: set_time reads crate::get_args(),
// whose clap parser chokes on the test-harness filter argument.
let now = global::timestamp();
assert!(!event::is_in_session(108, now), "event 108 must stay closed");
for event_id in MULTI_EVENTS {
assert!(!event::is_in_session(event_id, now));
}
}
#[test]
fn a_closed_backing_event_scores_against_nothing() {
let started = object!{ master_event_id: 108, live_boost: 1 };
// Closed today: the whole event-point path is skipped.
// global::timestamp() rather than set_time: set_time reads crate::get_args(),
// whose clap parser chokes on the test-harness filter argument.
let now = global::timestamp();
assert_eq!(scoring_event(Some(&started), now), None);
// But the gate is a window test, not a hardcoded off switch — open the event
// and scoring resumes on its own.
assert_eq!(scoring_event(Some(&started), during_multi_event_108()), Some(108));
// A live with no backing event at all, and a missing start record, score nothing.
assert_eq!(scoring_event(Some(&object!{ master_event_id: 0 }), during_multi_event_108()), None);
assert_eq!(scoring_event(None, during_multi_event_108()), None);
}
// The end-to-end path cannot be exercised here: live_end_ex calls items::get_region,
// which reaches crate::get_args(), whose clap parser rejects the test harness's own
// filter argument. (live.rs's tests avoid live_end for the same reason.) What is
// testable, and what actually matters, is that the reward input is derived with no
// reference to the event window — so a closed event can only ever suppress scoring.
#[test]
fn a_closed_event_still_pays_its_normal_rewards() {
let started = object!{ master_event_id: 108, live_boost: 1, use_lp: 10, deck_slot: 2 };
let open = during_multi_event_108();
// global::timestamp() rather than set_time: set_time reads crate::get_args(),
// whose clap parser chokes on the test-harness filter argument.
let closed = global::timestamp();
// The event gate is the only thing that moves between the two.
assert_eq!(scoring_event(Some(&started), open), Some(108));
assert_eq!(scoring_event(Some(&started), closed), None);
// The reward input is identical either way, and identical to what an eventless
// live would get for the same boost.
assert_eq!(recorded_lp(Some(&started)), 10);
assert_eq!(recorded_lp(Some(&object!{ live_boost: 1, use_lp: 10 })), 10);
// A start record with no recorded charge still falls back to the boost's cost.
assert_eq!(recorded_lp(Some(&object!{ master_event_id: 108, live_boost: 3 })), 30);
assert_eq!(recorded_lp(None), 0);
// And a suppressed event awards nothing, where an open one would pay 35.
assert_eq!(multi_event_points(108, 1, 4, 4, STATUS_NONE), 35);
}
// --- duplicate protection (the claim that gates the award) ----------------------
//
// /multi_live/end awards if and only if take_started_live hands it the record, and the
// record can be handed out exactly once. These drive that claim directly: the handler
// itself cannot be called from a test (live_end_ex reaches items::get_region, which
// reaches crate::get_args(), whose clap parser rejects the harness's own arguments).
// Two clients signed in to one account share a single started-live record, so the
// second /multi_live/end arrives after the first consumed it. The handler answers that
// from current state and grants nothing; this pins the state machine it keys off.
#[test]
fn a_second_end_for_one_session_finds_no_record_to_spend() {
let _lock = crate::runtime::lock_test_data_path();
let token = "multi_duplicate_end";
let start_body = object!{
master_live_id: STOCK_LIVE_ID,
level: 4,
deck_slot: 1,
live_boost: 1,
master_event_id: 108,
use_lp: 10
};
live::start_live(token, &start_body);
// First end: the record is there and pays for the live, and claiming it is what
// the handler does BEFORE it awards anything.
let started = live::take_started_live(token, &start_body);
assert!(started.is_some());
assert_eq!(recorded_lp(started.as_ref()), 10);
// Second end: nothing left to spend, which is the duplicate signal the handler
// short-circuits on, and the reward scale is zero even if it did not.
let again = live::take_started_live(token, &start_body);
assert!(again.is_none(), "the record must not survive the first end");
assert_eq!(recorded_lp(again.as_ref()), 0);
assert_eq!(scoring_event(again.as_ref(), during_multi_event_108()), None);
// And it stays gone however many times the client re-POSTs.
assert!(live::take_started_live(token, &start_body).is_none());
assert!(live::get_started_live(token, &start_body).is_none());
}
// The consumption used to hide inside get_end_live_deck_id, behind
// `record["deck_slot"].as_i32()?` — a start whose body carried no numeric deck_slot
// left the record in place, so every re-POST awarded again. Claiming is now about the
// record's existence and nothing else.
#[test]
fn a_start_with_no_deck_slot_is_still_consumed_by_the_first_end() {
let _lock = crate::runtime::lock_test_data_path();
let token = "multi_no_deck_slot";
for start_body in [
// No deck_slot at all...
object!{ master_live_id: STOCK_LIVE_ID, level: 4, live_boost: 1, use_lp: 10 },
// ...and one that is present but not a number.
object!{ master_live_id: STOCK_LIVE_ID, level: 4, live_boost: 1, use_lp: 10, deck_slot: "1" }
] {
live::start_live(token, &start_body);
let first = live::take_started_live(token, &start_body);
assert!(first.is_some(), "the record must be claimable without a deck_slot");
assert_eq!(recorded_lp(first.as_ref()), 10);
let second = live::take_started_live(token, &start_body);
assert!(second.is_none(), "a re-POST must find nothing left to award off");
}
}
// Two ends landing together — the normal case for one account signed in twice, and
// the one the old shape got wrong: both read the record, both passed the guard, both
// awarded. The claim is a single transaction, so exactly one of any number of racing
// ends can proceed.
#[test]
fn concurrent_ends_claim_the_record_exactly_once() {
let _lock = crate::runtime::lock_test_data_path();
let token = "multi_concurrent_end";
let start_body = object!{
master_live_id: STOCK_LIVE_ID,
level: 4,
deck_slot: 1,
live_boost: 1,
master_event_id: 108,
use_lp: 10
};
// Create the account before the threads start: the claim itself is atomic, the
// lazy account creation behind it is not, and that is not what is under test.
live::start_live(token, &start_body);
let claims = std::sync::atomic::AtomicUsize::new(0);
std::thread::scope(|s| {
for _ in 0..8 {
s.spawn(|| {
if live::take_started_live(token, &start_body).is_some() {
claims.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
}
});
}
});
assert_eq!(
claims.load(std::sync::atomic::Ordering::SeqCst),
1,
"exactly one of eight simultaneous ends may award"
);
assert!(live::get_started_live(token, &start_body).is_none());
}
#[test]
fn rank_bonus_matches_multievent_rankbonus() {
assert_eq!(rank_bonus(4, 1), 3000);
assert_eq!(rank_bonus(4, 4), 0);
assert_eq!(rank_bonus(2, 1), 1000);
// Rows the table does not cover earn nothing rather than panicking.
assert_eq!(rank_bonus(1, 1), 0);
assert_eq!(rank_bonus(4, 9), 0);
}
fn score(perfect: i64, great: i64, good: i64, bad: i64, miss: i64) -> JsonValue {
object!{
master_live_id: STOCK_LIVE_ID,
level: 4,
live_score: {
perfect: perfect, great: great, good: good, bad: bad, miss: miss
}
}
}
#[test]
fn end_status_follows_multiutil_ratios() {
let notes = note_count(STOCK_LIVE_ID, 4).expect("music_level row");
// A clean full combo is normal.
assert_eq!(multi_live_end_status(&score(notes, 0, 0, 0, 0)), STATUS_NONE);
// 70% or more of the notes missed trips the penalty.
assert_eq!(multi_live_end_status(&score(0, 0, 0, 0, notes)), STATUS_MISS_RATIO_PENALTY);
// Nothing judged at all is the "no play" case the 70% rule would wave through.
assert_eq!(multi_live_end_status(&score(0, 0, 0, 0, 0)), STATUS_MISS_RATIO_PENALTY);
// Under half the notes as perfect/great, but few enough misses to avoid the
// penalty, is the caution ("halved") state.
let goods = notes - (notes / 4) - 1;
assert_eq!(
multi_live_end_status(&score(notes / 4, 0, goods, 0, 1)),
STATUS_GREAT_PERFECT_LOW_RATIO
);
// LIVE_LEVEL 1 is exempt from the great/perfect check.
let mut beginner = score(0, 0, 0, 0, 0);
beginner["level"] = 1.into();
beginner["live_score"]["good"] = note_count(STOCK_LIVE_ID, 1).unwrap().into();
assert_eq!(multi_live_end_status(&beginner), STATUS_NONE);
// A live with no MusicLevelMst row never penalises, like MultiUtil.
let mut unknown = score(0, 0, 0, 0, 0);
unknown["master_live_id"] = 999999999i64.into();
assert_eq!(multi_live_end_status(&unknown), STATUS_NONE);
}
#[test]
fn player_count_does_not_double_count_the_poster() {
let body = object!{
other_live_score_list: array![
object!{ user_id: 7 },
object!{ user_id: 8 },
object!{ user_id: 9 }
]
};
// LiveScene includes the poster in the list.
assert_eq!(player_count(&body, 8), 3);
// A list that omits the poster still yields the real party size.
assert_eq!(player_count(&body, 42), 4);
}
}

View File

@@ -0,0 +1,970 @@
// Wire format for the multi-live WebSocket relay, per docs/multi-live-ws-protocol.md.
//
// The C# client rewrite encodes/decodes the exact same bytes, so this module is a
// straight transcription of the spec tables rather than idiomatic Rust: every field is
// written in declaration order, all integers are little-endian, strings are UTF-8 behind
// a u16 length, and counts are u8. Nothing here is serde-driven - the type tags mirror
// Photon's Hashtable boxing (an Int32 must arrive as Int32 or GetCurrentRoomEventId's
// exact `is int` check fails), and a derive would hide that.
//
// Both directions are implemented in both halves (encode + decode for client messages
// AND for server messages) even though the relay only ever decodes the former and
// encodes the latter. The unused halves are what the round-trip tests exercise, and they
// double as the reference the C# side is written against.
use std::fmt;
// ---------------------------------------------------------------------------
// Constants
// ---------------------------------------------------------------------------
// Value tags (see "Value encoding" in the spec).
pub const TAG_NULL: u8 = 0;
pub const TAG_INT: u8 = 1;
pub const TAG_STRING: u8 = 2;
pub const TAG_BOOL: u8 = 3;
pub const TAG_DOUBLE: u8 = 4;
// Client -> server opcodes.
pub const OP_AUTH: u8 = 1;
pub const OP_JOIN_LOBBY: u8 = 2;
pub const OP_LEAVE_LOBBY: u8 = 3;
pub const OP_CREATE_ROOM: u8 = 4;
pub const OP_JOIN_ROOM: u8 = 5;
pub const OP_JOIN_RANDOM: u8 = 6;
pub const OP_LEAVE_ROOM: u8 = 7;
pub const OP_REJOIN: u8 = 8;
pub const OP_SET_PLAYER_PROPS: u8 = 9;
pub const OP_SET_ROOM_PROPS: u8 = 10;
pub const OP_RPC: u8 = 11;
pub const OP_PING: u8 = 12;
// Server -> client opcodes.
pub const OP_AUTH_OK: u8 = 20;
pub const OP_JOINED_LOBBY: u8 = 21;
pub const OP_LEFT_LOBBY: u8 = 22;
pub const OP_JOINED_ROOM: u8 = 23;
pub const OP_CREATE_FAILED: u8 = 24;
pub const OP_JOIN_FAILED: u8 = 25;
pub const OP_PLAYER_ENTERED: u8 = 26;
pub const OP_PLAYER_LEFT: u8 = 27;
pub const OP_LEFT_ROOM: u8 = 28;
pub const OP_ROOM_PROPS_CHANGED: u8 = 29;
pub const OP_PLAYER_PROPS_CHANGED: u8 = 30;
pub const OP_MASTER_SWITCHED: u8 = 31;
// Distinct name from the client-side OP_RPC (11); same message, opposite direction.
pub const OP_RPC_BROADCAST: u8 = 32;
pub const OP_PONG: u8 = 33;
pub const OP_KICKED: u8 = 34;
// Close codes. The spec names 4001 and 4002; 4000 covers the framing errors it
// describes ("Text frames are a protocol error -> close", malformed frame, unknown
// opcode) without naming a code for them.
pub const CLOSE_PROTOCOL: u16 = 4000;
pub const CLOSE_UNAUTHENTICATED: u16 = 4001;
pub const CLOSE_RATE_LIMIT: u16 = 4002;
// Added with the liveness sweep: nothing was heard from this connection for three ping
// intervals, so the relay stops holding its seat. See LIVENESS_TIMEOUT in ws.rs.
pub const CLOSE_IDLE_TIMEOUT: u16 = 4003;
// Photon ErrorCode mirrors, so the client's existing logging keeps its meaning.
pub const ERR_GAME_ID_ALREADY_EXISTS: i32 = 32766;
pub const ERR_GAME_FULL: i32 = 32765;
pub const ERR_GAME_CLOSED: i32 = 32764;
pub const ERR_NO_RANDOM_MATCH_FOUND: i32 = 32760;
pub const ERR_GAME_DOES_NOT_EXIST: i32 = 32758;
// Kicked causes. A room only dies once nobody is left to be told, so cause 1 is still
// reserved — encoded, decoded and tested so the C# side can be written against it now.
#[allow(dead_code)]
pub const KICK_ROOM_DESTROYED: i32 = 1;
// Cause 2 is real: the liveness sweep sends it immediately before close 4003, so a client
// that is alive enough to read (a suspended app coming back, a stalled network) can say
// why it was dropped instead of showing a bare socket error.
pub const KICK_IDLE_TIMEOUT: i32 = 2;
// ---------------------------------------------------------------------------
// Values and maps
// ---------------------------------------------------------------------------
#[derive(Clone, Debug, PartialEq)]
pub enum Value {
Null,
Int(i32),
Str(String),
Bool(bool),
Double(f64),
}
impl Value {
pub fn as_int(&self) -> Option<i32> {
match self {
Value::Int(v) => Some(*v),
_ => None,
}
}
pub fn as_str(&self) -> Option<&str> {
match self {
Value::Str(v) => Some(v),
_ => None,
}
}
}
// An ordered key -> value bag. Ordering is not semantically meaningful on the wire, but
// keeping insertion order makes the changed-subset broadcasts arrive in the order the
// sender wrote them, which is one less thing for the client to reason about (and makes
// the tests deterministic).
#[derive(Clone, Debug, Default, PartialEq)]
pub struct Map(Vec<(String, Value)>);
impl Map {
pub fn new() -> Self {
Map(Vec::new())
}
// Duplicate keys collapse last-writer-wins, exactly like the Hashtable this mirrors.
// Convenience for the tests and for any caller building a bag from scratch; the
// relay itself only ever merges into an existing bag.
#[allow(dead_code)]
pub fn from_pairs<I, K>(pairs: I) -> Self
where
I: IntoIterator<Item = (K, Value)>,
K: Into<String>,
{
let mut map = Map::new();
for (key, value) in pairs {
map.set(key, value);
}
map
}
pub fn get(&self, key: &str) -> Option<&Value> {
self.0.iter().find(|(k, _)| k == key).map(|(_, v)| v)
}
pub fn get_int(&self, key: &str) -> Option<i32> {
self.get(key).and_then(Value::as_int)
}
pub fn get_str(&self, key: &str) -> Option<&str> {
self.get(key).and_then(Value::as_str)
}
// Last-writer-wins in place: an existing key keeps its position.
pub fn set<K: Into<String>>(&mut self, key: K, value: Value) {
let key = key.into();
match self.0.iter_mut().find(|(k, _)| *k == key) {
Some(slot) => slot.1 = value,
None => self.0.push((key, value)),
}
}
// Last-writer-wins merge of `other` INTO self. The relay uses it for property updates
// and for seeding/merging a joiner's bag out of the seating op's `playerProps`.
pub fn merge(&mut self, other: &Map) {
for (key, value) in other.iter() {
self.set(key, value.clone());
}
}
pub fn len(&self) -> usize {
self.0.len()
}
#[allow(dead_code)]
pub fn is_empty(&self) -> bool {
self.0.is_empty()
}
pub fn iter(&self) -> impl Iterator<Item = (&str, &Value)> {
self.0.iter().map(|(k, v)| (k.as_str(), v))
}
}
// ---------------------------------------------------------------------------
// Messages
// ---------------------------------------------------------------------------
#[derive(Clone, Debug, PartialEq)]
pub enum ClientMsg {
Auth { user_id: String, token: String },
JoinLobby { name: String },
LeaveLobby,
// `props` is the ROOM bag; `player_props` is the joiner's own bag, mirroring Photon's
// OpCreateRoom/OpJoinRoom actorProperties. See docs/multi-live-ws-protocol.md,
// "Player properties at join time".
CreateRoom {
name: String,
max_players: u8,
visible: bool,
open: bool,
props: Map,
lobby_prop_keys: Vec<String>,
player_props: Map,
},
JoinRoom { name: String, player_props: Map },
JoinRandom { power_min: i32, power_max: i32, levels: Vec<Value>, player_props: Map },
LeaveRoom,
Rejoin { name: String, player_props: Map },
SetPlayerProps { props: Map },
SetRoomProps { props: Map },
Rpc { name: String, params: Vec<Value> },
Ping,
}
#[derive(Clone, Debug, PartialEq)]
pub enum ServerMsg {
AuthOk { actorless_time_ms: f64 },
JoinedLobby,
LeftLobby,
JoinedRoom {
room_name: String,
your_actor: i32,
master_actor: i32,
room_props: Map,
players: Vec<(i32, Map)>,
},
CreateFailed { code: i32, msg: String },
JoinFailed { code: i32, msg: String },
PlayerEntered { actor: i32, props: Map },
PlayerLeft { actor: i32, inactive: bool },
LeftRoom,
RoomPropsChanged { props: Map },
PlayerPropsChanged { actor: i32, props: Map },
MasterSwitched { new_master_actor: i32 },
Rpc { sender_actor: i32, name: String, params: Vec<Value> },
Pong { server_time_ms: f64 },
// Sent by the liveness sweep with KICK_IDLE_TIMEOUT; KICK_ROOM_DESTROYED is reserved.
Kicked { cause: i32 },
}
// ---------------------------------------------------------------------------
// Decoding
// ---------------------------------------------------------------------------
#[derive(Clone, Debug, PartialEq)]
pub enum DecodeError {
// Frame ran out before the field did.
Truncated,
// Zero-length frame: there is not even an opcode.
Empty,
UnknownOp(u8),
UnknownTag(u8),
BadUtf8,
// "One frame = one message" - anything after the message is a framing bug.
TrailingBytes,
}
impl fmt::Display for DecodeError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
DecodeError::Truncated => write!(f, "truncated frame"),
DecodeError::Empty => write!(f, "empty frame"),
DecodeError::UnknownOp(op) => write!(f, "unknown opcode {}", op),
DecodeError::UnknownTag(tag) => write!(f, "unknown value tag {}", tag),
DecodeError::BadUtf8 => write!(f, "string is not valid utf-8"),
DecodeError::TrailingBytes => write!(f, "trailing bytes after message"),
}
}
}
struct Reader<'a> {
buf: &'a [u8],
pos: usize,
}
impl<'a> Reader<'a> {
fn new(buf: &'a [u8]) -> Self {
Reader { buf, pos: 0 }
}
fn take(&mut self, n: usize) -> Result<&'a [u8], DecodeError> {
let end = self.pos.checked_add(n).ok_or(DecodeError::Truncated)?;
if end > self.buf.len() {
return Err(DecodeError::Truncated);
}
let out = &self.buf[self.pos..end];
self.pos = end;
Ok(out)
}
fn u8(&mut self) -> Result<u8, DecodeError> {
Ok(self.take(1)?[0])
}
fn bool(&mut self) -> Result<bool, DecodeError> {
// Photon booleans are one byte; anything non-zero is true.
Ok(self.u8()? != 0)
}
fn u16(&mut self) -> Result<u16, DecodeError> {
let b = self.take(2)?;
Ok(u16::from_le_bytes([b[0], b[1]]))
}
fn i32(&mut self) -> Result<i32, DecodeError> {
let b = self.take(4)?;
Ok(i32::from_le_bytes([b[0], b[1], b[2], b[3]]))
}
fn f64(&mut self) -> Result<f64, DecodeError> {
let b = self.take(8)?;
Ok(f64::from_le_bytes([b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7]]))
}
fn string(&mut self) -> Result<String, DecodeError> {
let len = self.u16()? as usize;
let bytes = self.take(len)?;
String::from_utf8(bytes.to_vec()).map_err(|_| DecodeError::BadUtf8)
}
fn value(&mut self) -> Result<Value, DecodeError> {
let tag = self.u8()?;
match tag {
TAG_NULL => Ok(Value::Null),
TAG_INT => Ok(Value::Int(self.i32()?)),
TAG_STRING => Ok(Value::Str(self.string()?)),
TAG_BOOL => Ok(Value::Bool(self.bool()?)),
TAG_DOUBLE => Ok(Value::Double(self.f64()?)),
other => Err(DecodeError::UnknownTag(other)),
}
}
fn map(&mut self) -> Result<Map, DecodeError> {
let count = self.u8()?;
let mut map = Map::new();
for _ in 0..count {
let key = self.string()?;
let value = self.value()?;
map.set(key, value);
}
Ok(map)
}
fn value_list(&mut self) -> Result<Vec<Value>, DecodeError> {
let count = self.u8()?;
let mut out = Vec::with_capacity(count as usize);
for _ in 0..count {
out.push(self.value()?);
}
Ok(out)
}
fn string_list(&mut self) -> Result<Vec<String>, DecodeError> {
let count = self.u8()?;
let mut out = Vec::with_capacity(count as usize);
for _ in 0..count {
out.push(self.string()?);
}
Ok(out)
}
fn finish<T>(&self, value: T) -> Result<T, DecodeError> {
if self.pos != self.buf.len() {
return Err(DecodeError::TrailingBytes);
}
Ok(value)
}
}
pub fn decode_client(buf: &[u8]) -> Result<ClientMsg, DecodeError> {
let mut r = Reader::new(buf);
let op = r.u8().map_err(|_| DecodeError::Empty)?;
let msg = match op {
OP_AUTH => ClientMsg::Auth { user_id: r.string()?, token: r.string()? },
OP_JOIN_LOBBY => ClientMsg::JoinLobby { name: r.string()? },
OP_LEAVE_LOBBY => ClientMsg::LeaveLobby,
OP_CREATE_ROOM => ClientMsg::CreateRoom {
name: r.string()?,
max_players: r.u8()?,
visible: r.bool()?,
open: r.bool()?,
props: r.map()?,
lobby_prop_keys: r.string_list()?,
player_props: r.map()?,
},
OP_JOIN_ROOM => ClientMsg::JoinRoom { name: r.string()?, player_props: r.map()? },
OP_JOIN_RANDOM => ClientMsg::JoinRandom {
power_min: r.i32()?,
power_max: r.i32()?,
levels: r.value_list()?,
player_props: r.map()?,
},
OP_LEAVE_ROOM => ClientMsg::LeaveRoom,
OP_REJOIN => ClientMsg::Rejoin { name: r.string()?, player_props: r.map()? },
OP_SET_PLAYER_PROPS => ClientMsg::SetPlayerProps { props: r.map()? },
OP_SET_ROOM_PROPS => ClientMsg::SetRoomProps { props: r.map()? },
OP_RPC => ClientMsg::Rpc { name: r.string()?, params: r.value_list()? },
OP_PING => ClientMsg::Ping,
other => return Err(DecodeError::UnknownOp(other)),
};
r.finish(msg)
}
// The client's half of the codec. The relay never calls it; it is the executable
// reference the C# rewrite is written against, and what the round-trip tests drive.
#[allow(dead_code)]
pub fn decode_server(buf: &[u8]) -> Result<ServerMsg, DecodeError> {
let mut r = Reader::new(buf);
let op = r.u8().map_err(|_| DecodeError::Empty)?;
let msg = match op {
OP_AUTH_OK => ServerMsg::AuthOk { actorless_time_ms: r.f64()? },
OP_JOINED_LOBBY => ServerMsg::JoinedLobby,
OP_LEFT_LOBBY => ServerMsg::LeftLobby,
OP_JOINED_ROOM => {
let room_name = r.string()?;
let your_actor = r.i32()?;
let master_actor = r.i32()?;
let room_props = r.map()?;
let count = r.u8()?;
let mut players = Vec::with_capacity(count as usize);
for _ in 0..count {
let actor = r.i32()?;
players.push((actor, r.map()?));
}
ServerMsg::JoinedRoom { room_name, your_actor, master_actor, room_props, players }
}
OP_CREATE_FAILED => ServerMsg::CreateFailed { code: r.i32()?, msg: r.string()? },
OP_JOIN_FAILED => ServerMsg::JoinFailed { code: r.i32()?, msg: r.string()? },
OP_PLAYER_ENTERED => ServerMsg::PlayerEntered { actor: r.i32()?, props: r.map()? },
OP_PLAYER_LEFT => ServerMsg::PlayerLeft { actor: r.i32()?, inactive: r.bool()? },
OP_LEFT_ROOM => ServerMsg::LeftRoom,
OP_ROOM_PROPS_CHANGED => ServerMsg::RoomPropsChanged { props: r.map()? },
OP_PLAYER_PROPS_CHANGED => {
ServerMsg::PlayerPropsChanged { actor: r.i32()?, props: r.map()? }
}
OP_MASTER_SWITCHED => ServerMsg::MasterSwitched { new_master_actor: r.i32()? },
OP_RPC_BROADCAST => ServerMsg::Rpc {
sender_actor: r.i32()?,
name: r.string()?,
params: r.value_list()?,
},
OP_PONG => ServerMsg::Pong { server_time_ms: r.f64()? },
OP_KICKED => ServerMsg::Kicked { cause: r.i32()? },
other => return Err(DecodeError::UnknownOp(other)),
};
r.finish(msg)
}
// ---------------------------------------------------------------------------
// Encoding
// ---------------------------------------------------------------------------
// The relay never legitimately produces a string past 64KiB or a count past 255 (keys
// are one or two characters, rooms hold four players, RPC params are a handful of ints),
// so encoding is infallible and the guards below only exist to keep a bug from emitting
// a frame the peer would mis-frame. They log and clamp rather than panic in a handler.
fn put_str(out: &mut Vec<u8>, s: &str) {
let mut bytes = s.as_bytes();
if bytes.len() > u16::MAX as usize {
println!("multi_live/ws: string of {} bytes truncated to fit u16 length", bytes.len());
let mut end = u16::MAX as usize;
while end > 0 && !s.is_char_boundary(end) {
end -= 1;
}
bytes = &s.as_bytes()[..end];
}
out.extend_from_slice(&(bytes.len() as u16).to_le_bytes());
out.extend_from_slice(bytes);
}
fn put_count(out: &mut Vec<u8>, count: usize, what: &str) -> usize {
let clamped = if count > u8::MAX as usize {
println!("multi_live/ws: {} count {} clamped to 255", what, count);
u8::MAX as usize
} else {
count
};
out.push(clamped as u8);
clamped
}
fn put_value(out: &mut Vec<u8>, value: &Value) {
match value {
Value::Null => out.push(TAG_NULL),
Value::Int(v) => {
out.push(TAG_INT);
out.extend_from_slice(&v.to_le_bytes());
}
Value::Str(v) => {
out.push(TAG_STRING);
put_str(out, v);
}
Value::Bool(v) => {
out.push(TAG_BOOL);
out.push(if *v { 1 } else { 0 });
}
Value::Double(v) => {
out.push(TAG_DOUBLE);
out.extend_from_slice(&v.to_le_bytes());
}
}
}
fn put_map(out: &mut Vec<u8>, map: &Map) {
let count = put_count(out, map.len(), "map");
for (key, value) in map.iter().take(count) {
put_str(out, key);
put_value(out, value);
}
}
fn put_value_list(out: &mut Vec<u8>, values: &[Value]) {
let count = put_count(out, values.len(), "value list");
for value in values.iter().take(count) {
put_value(out, value);
}
}
#[allow(dead_code)]
fn put_string_list(out: &mut Vec<u8>, values: &[String]) {
let count = put_count(out, values.len(), "string list");
for value in values.iter().take(count) {
put_str(out, value);
}
}
// See decode_server: the client's half, kept honest by the round-trip tests.
#[allow(dead_code)]
pub fn encode_client(msg: &ClientMsg) -> Vec<u8> {
let mut out = Vec::new();
match msg {
ClientMsg::Auth { user_id, token } => {
out.push(OP_AUTH);
put_str(&mut out, user_id);
put_str(&mut out, token);
}
ClientMsg::JoinLobby { name } => {
out.push(OP_JOIN_LOBBY);
put_str(&mut out, name);
}
ClientMsg::LeaveLobby => out.push(OP_LEAVE_LOBBY),
ClientMsg::CreateRoom { name, max_players, visible, open, props, lobby_prop_keys, player_props } => {
out.push(OP_CREATE_ROOM);
put_str(&mut out, name);
out.push(*max_players);
out.push(if *visible { 1 } else { 0 });
out.push(if *open { 1 } else { 0 });
put_map(&mut out, props);
put_string_list(&mut out, lobby_prop_keys);
put_map(&mut out, player_props);
}
ClientMsg::JoinRoom { name, player_props } => {
out.push(OP_JOIN_ROOM);
put_str(&mut out, name);
put_map(&mut out, player_props);
}
ClientMsg::JoinRandom { power_min, power_max, levels, player_props } => {
out.push(OP_JOIN_RANDOM);
out.extend_from_slice(&power_min.to_le_bytes());
out.extend_from_slice(&power_max.to_le_bytes());
put_value_list(&mut out, levels);
put_map(&mut out, player_props);
}
ClientMsg::LeaveRoom => out.push(OP_LEAVE_ROOM),
ClientMsg::Rejoin { name, player_props } => {
out.push(OP_REJOIN);
put_str(&mut out, name);
put_map(&mut out, player_props);
}
ClientMsg::SetPlayerProps { props } => {
out.push(OP_SET_PLAYER_PROPS);
put_map(&mut out, props);
}
ClientMsg::SetRoomProps { props } => {
out.push(OP_SET_ROOM_PROPS);
put_map(&mut out, props);
}
ClientMsg::Rpc { name, params } => {
out.push(OP_RPC);
put_str(&mut out, name);
put_value_list(&mut out, params);
}
ClientMsg::Ping => out.push(OP_PING),
}
out
}
pub fn encode_server(msg: &ServerMsg) -> Vec<u8> {
let mut out = Vec::new();
match msg {
ServerMsg::AuthOk { actorless_time_ms } => {
out.push(OP_AUTH_OK);
out.extend_from_slice(&actorless_time_ms.to_le_bytes());
}
ServerMsg::JoinedLobby => out.push(OP_JOINED_LOBBY),
ServerMsg::LeftLobby => out.push(OP_LEFT_LOBBY),
ServerMsg::JoinedRoom { room_name, your_actor, master_actor, room_props, players } => {
out.push(OP_JOINED_ROOM);
put_str(&mut out, room_name);
out.extend_from_slice(&your_actor.to_le_bytes());
out.extend_from_slice(&master_actor.to_le_bytes());
put_map(&mut out, room_props);
let count = put_count(&mut out, players.len(), "player");
for (actor, props) in players.iter().take(count) {
out.extend_from_slice(&actor.to_le_bytes());
put_map(&mut out, props);
}
}
ServerMsg::CreateFailed { code, msg } => {
out.push(OP_CREATE_FAILED);
out.extend_from_slice(&code.to_le_bytes());
put_str(&mut out, msg);
}
ServerMsg::JoinFailed { code, msg } => {
out.push(OP_JOIN_FAILED);
out.extend_from_slice(&code.to_le_bytes());
put_str(&mut out, msg);
}
ServerMsg::PlayerEntered { actor, props } => {
out.push(OP_PLAYER_ENTERED);
out.extend_from_slice(&actor.to_le_bytes());
put_map(&mut out, props);
}
ServerMsg::PlayerLeft { actor, inactive } => {
out.push(OP_PLAYER_LEFT);
out.extend_from_slice(&actor.to_le_bytes());
out.push(if *inactive { 1 } else { 0 });
}
ServerMsg::LeftRoom => out.push(OP_LEFT_ROOM),
ServerMsg::RoomPropsChanged { props } => {
out.push(OP_ROOM_PROPS_CHANGED);
put_map(&mut out, props);
}
ServerMsg::PlayerPropsChanged { actor, props } => {
out.push(OP_PLAYER_PROPS_CHANGED);
out.extend_from_slice(&actor.to_le_bytes());
put_map(&mut out, props);
}
ServerMsg::MasterSwitched { new_master_actor } => {
out.push(OP_MASTER_SWITCHED);
out.extend_from_slice(&new_master_actor.to_le_bytes());
}
ServerMsg::Rpc { sender_actor, name, params } => {
out.push(OP_RPC_BROADCAST);
out.extend_from_slice(&sender_actor.to_le_bytes());
put_str(&mut out, name);
put_value_list(&mut out, params);
}
ServerMsg::Pong { server_time_ms } => {
out.push(OP_PONG);
out.extend_from_slice(&server_time_ms.to_le_bytes());
}
ServerMsg::Kicked { cause } => {
out.push(OP_KICKED);
out.extend_from_slice(&cause.to_le_bytes());
}
}
out
}
#[cfg(test)]
mod tests {
use super::*;
fn round_client(msg: ClientMsg) {
let bytes = encode_client(&msg);
let back = decode_client(&bytes).expect("client message decodes");
assert_eq!(back, msg);
assert_eq!(encode_client(&back), bytes);
}
fn round_server(msg: ServerMsg) {
let bytes = encode_server(&msg);
let back = decode_server(&bytes).expect("server message decodes");
assert_eq!(back, msg);
assert_eq!(encode_server(&back), bytes);
}
fn sample_map() -> Map {
Map::from_pairs(vec![
("A", Value::Int(-7)),
("B", Value::Str("ラブライブ".to_string())),
("C", Value::Bool(true)),
("D", Value::Double(0.5)),
("E", Value::Null),
])
}
#[test]
fn every_client_message_round_trips() {
round_client(ClientMsg::Auth { user_id: "12345".into(), token: "a-uuid".into() });
round_client(ClientMsg::JoinLobby { name: "MultiEventLobby_31".into() });
round_client(ClientMsg::LeaveLobby);
round_client(ClientMsg::CreateRoom {
name: "123456".into(),
max_players: 4,
visible: false,
open: true,
props: sample_map(),
lobby_prop_keys: vec!["C0".into(), "C1".into()],
player_props: sample_map(),
});
round_client(ClientMsg::JoinRoom {
name: "042719".into(),
player_props: sample_map(),
});
round_client(ClientMsg::JoinRandom {
power_min: 0,
power_max: i32::MAX,
levels: vec![Value::Int(1), Value::Int(4)],
player_props: sample_map(),
});
round_client(ClientMsg::LeaveRoom);
round_client(ClientMsg::Rejoin {
name: "1000000".into(),
player_props: sample_map(),
});
round_client(ClientMsg::SetPlayerProps { props: sample_map() });
round_client(ClientMsg::SetRoomProps { props: sample_map() });
round_client(ClientMsg::Rpc {
name: "SendStamp".into(),
params: vec![Value::Int(3), Value::Str("hi".into())],
});
round_client(ClientMsg::Ping);
}
#[test]
fn every_server_message_round_trips() {
round_server(ServerMsg::AuthOk { actorless_time_ms: 1_754_500_000_123.0 });
round_server(ServerMsg::JoinedLobby);
round_server(ServerMsg::LeftLobby);
round_server(ServerMsg::JoinedRoom {
room_name: "1000000".into(),
your_actor: 2,
master_actor: 1,
room_props: sample_map(),
players: vec![(1, sample_map()), (2, Map::new())],
});
round_server(ServerMsg::CreateFailed {
code: ERR_GAME_ID_ALREADY_EXISTS,
msg: "GameIdAlreadyExists".into(),
});
round_server(ServerMsg::JoinFailed { code: ERR_GAME_FULL, msg: "GameFull".into() });
round_server(ServerMsg::PlayerEntered { actor: 3, props: sample_map() });
round_server(ServerMsg::PlayerLeft { actor: 3, inactive: true });
round_server(ServerMsg::PlayerLeft { actor: 3, inactive: false });
round_server(ServerMsg::LeftRoom);
round_server(ServerMsg::RoomPropsChanged { props: sample_map() });
round_server(ServerMsg::PlayerPropsChanged { actor: 4, props: sample_map() });
round_server(ServerMsg::MasterSwitched { new_master_actor: 2 });
round_server(ServerMsg::Rpc {
sender_actor: 1,
name: "_MoveScene".into(),
params: vec![Value::Null],
});
round_server(ServerMsg::Pong { server_time_ms: -0.0 });
round_server(ServerMsg::Kicked { cause: KICK_ROOM_DESTROYED });
}
#[test]
fn empty_map_and_empty_strings_round_trip() {
round_client(ClientMsg::Auth { user_id: String::new(), token: String::new() });
round_client(ClientMsg::JoinLobby { name: String::new() });
round_client(ClientMsg::SetPlayerProps { props: Map::new() });
round_client(ClientMsg::Rpc { name: String::new(), params: Vec::new() });
round_client(ClientMsg::CreateRoom {
name: String::new(),
max_players: 0,
visible: true,
open: false,
props: Map::new(),
lobby_prop_keys: Vec::new(),
player_props: Map::new(),
});
// A joiner that has committed nothing yet sends an empty bag on every seating op.
round_client(ClientMsg::JoinRoom { name: String::new(), player_props: Map::new() });
round_client(ClientMsg::Rejoin { name: String::new(), player_props: Map::new() });
round_client(ClientMsg::JoinRandom {
power_min: 0,
power_max: 0,
levels: Vec::new(),
player_props: Map::new(),
});
// The trailing playerProps of a JoinRoom is exactly one byte when empty.
assert_eq!(
encode_client(&ClientMsg::JoinRoom { name: String::new(), player_props: Map::new() }),
vec![OP_JOIN_ROOM, 0, 0, 0]
);
round_server(ServerMsg::JoinedRoom {
room_name: String::new(),
your_actor: 1,
master_actor: 1,
room_props: Map::new(),
players: Vec::new(),
});
// An empty map is exactly one byte of payload.
assert_eq!(encode_client(&ClientMsg::SetRoomProps { props: Map::new() }), vec![OP_SET_ROOM_PROPS, 0]);
}
#[test]
fn max_u8_counts_round_trip() {
let map = Map::from_pairs((0..255).map(|i| (format!("k{}", i), Value::Int(i))));
assert_eq!(map.len(), 255);
round_client(ClientMsg::SetPlayerProps { props: map.clone() });
let params: Vec<Value> = (0..255).map(Value::Int).collect();
round_client(ClientMsg::Rpc { name: "SendStamp".into(), params });
let keys: Vec<String> = (0..255).map(|i| format!("k{}", i)).collect();
round_client(ClientMsg::CreateRoom {
name: "n".into(),
max_players: 255,
visible: true,
open: true,
props: map.clone(),
lobby_prop_keys: keys,
player_props: map.clone(),
});
// A full 255-key bag on each of the other three seating ops.
round_client(ClientMsg::JoinRoom { name: "n".into(), player_props: map.clone() });
round_client(ClientMsg::Rejoin { name: "n".into(), player_props: map.clone() });
round_client(ClientMsg::JoinRandom {
power_min: 0,
power_max: 1,
levels: vec![Value::Int(4)],
player_props: map,
});
let players: Vec<(i32, Map)> = (0..255).map(|i| (i, Map::new())).collect();
round_server(ServerMsg::JoinedRoom {
room_name: "n".into(),
your_actor: 1,
master_actor: 1,
room_props: Map::new(),
players,
});
}
#[test]
fn integer_and_double_extremes_survive() {
round_client(ClientMsg::JoinRandom {
power_min: i32::MIN,
power_max: i32::MAX,
levels: vec![Value::Int(i32::MIN), Value::Int(i32::MAX), Value::Int(0)],
player_props: Map::new(),
});
round_server(ServerMsg::PlayerEntered {
actor: i32::MIN,
props: Map::from_pairs(vec![
("a", Value::Double(f64::MAX)),
("b", Value::Double(f64::MIN_POSITIVE)),
("c", Value::Double(f64::INFINITY)),
]),
});
}
#[test]
fn wire_layout_is_byte_exact() {
// Guard the framing itself: little-endian everywhere, u16 string lengths,
// u8 counts, tag-then-payload values. If this test needs updating, the C#
// client needs updating too.
assert_eq!(
encode_client(&ClientMsg::Auth { user_id: "7".into(), token: "ab".into() }),
vec![OP_AUTH, 1, 0, b'7', 2, 0, b'a', b'b']
);
assert_eq!(
encode_client(&ClientMsg::JoinRandom {
power_min: 1,
power_max: 256,
levels: vec![Value::Int(4)],
player_props: Map::new(),
}),
// ... levels ValueList ..., then the trailing empty playerProps map (count 0).
vec![OP_JOIN_RANDOM, 1, 0, 0, 0, 0, 1, 0, 0, 1, TAG_INT, 4, 0, 0, 0, 0]
);
// The seating ops' trailing bag is an ordinary Map: count:u8 then (key,value)*.
assert_eq!(
encode_client(&ClientMsg::JoinRoom {
name: "42".into(),
player_props: Map::from_pairs(vec![("B", Value::Str("7".into()))]),
}),
vec![OP_JOIN_ROOM, 2, 0, b'4', b'2', 1, 1, 0, b'B', TAG_STRING, 1, 0, b'7']
);
assert_eq!(
encode_client(&ClientMsg::Rejoin {
name: "42".into(),
player_props: Map::from_pairs(vec![("F", Value::Int(5))]),
}),
vec![OP_REJOIN, 2, 0, b'4', b'2', 1, 1, 0, b'F', TAG_INT, 5, 0, 0, 0]
);
assert_eq!(
encode_client(&ClientMsg::SetPlayerProps {
props: Map::from_pairs(vec![("LB", Value::Int(12))]),
}),
vec![OP_SET_PLAYER_PROPS, 1, 2, 0, b'L', b'B', TAG_INT, 12, 0, 0, 0]
);
assert_eq!(
encode_server(&ServerMsg::PlayerLeft { actor: 2, inactive: true }),
vec![OP_PLAYER_LEFT, 2, 0, 0, 0, 1]
);
assert_eq!(
encode_server(&ServerMsg::AuthOk { actorless_time_ms: 1.0 }),
vec![OP_AUTH_OK, 0, 0, 0, 0, 0, 0, 0xf0, 0x3f]
);
}
#[test]
fn malformed_frames_are_rejected() {
assert_eq!(decode_client(&[]), Err(DecodeError::Empty));
assert_eq!(decode_client(&[99]), Err(DecodeError::UnknownOp(99)));
assert_eq!(decode_server(&[99]), Err(DecodeError::UnknownOp(99)));
// JoinLobby with a length prefix longer than the payload.
assert_eq!(decode_client(&[OP_JOIN_LOBBY, 4, 0, b'a']), Err(DecodeError::Truncated));
// Ping carries nothing.
assert_eq!(decode_client(&[OP_PING, 0]), Err(DecodeError::TrailingBytes));
// Unknown value tag inside a map.
assert_eq!(
decode_client(&[OP_SET_ROOM_PROPS, 1, 1, 0, b'A', 9]),
Err(DecodeError::UnknownTag(9))
);
// A map that promises two entries but carries one.
assert_eq!(
decode_client(&[OP_SET_ROOM_PROPS, 2, 1, 0, b'A', TAG_NULL]),
Err(DecodeError::Truncated)
);
// Invalid UTF-8 in a string.
assert_eq!(decode_client(&[OP_JOIN_ROOM, 1, 0, 0xff]), Err(DecodeError::BadUtf8));
}
#[test]
fn duplicate_map_keys_collapse_last_writer_wins() {
let bytes = vec![
OP_SET_ROOM_PROPS, 2,
1, 0, b'A', TAG_INT, 1, 0, 0, 0,
1, 0, b'A', TAG_INT, 2, 0, 0, 0,
];
let ClientMsg::SetRoomProps { props } = decode_client(&bytes).unwrap() else {
panic!("expected SetRoomProps");
};
assert_eq!(props.len(), 1);
assert_eq!(props.get_int("A"), Some(2));
}
#[test]
fn map_set_is_last_writer_wins_in_place() {
let mut map = Map::from_pairs(vec![("A", Value::Int(1)), ("B", Value::Int(2))]);
map.set("A", Value::Int(9));
assert_eq!(map.len(), 2);
assert_eq!(
map.iter().map(|(k, _)| k).collect::<Vec<_>>(),
vec!["A", "B"]
);
assert_eq!(map.get_int("A"), Some(9));
}
#[test]
fn bool_payload_accepts_any_nonzero() {
// Photon writes 0/1; be lenient reading, strict writing.
assert_eq!(
decode_server(&[OP_PLAYER_LEFT, 1, 0, 0, 0, 7]),
Ok(ServerMsg::PlayerLeft { actor: 1, inactive: true })
);
assert_eq!(
encode_server(&ServerMsg::PlayerLeft { actor: 1, inactive: true })[5],
1
);
}
}

File diff suppressed because it is too large Load Diff

367
src/router/multi_live/ws.rs Normal file
View File

@@ -0,0 +1,367 @@
// WebSocket end of the multi-live relay: GET /api/multi_live/ws.
//
// One task per connection reads frames, decodes them and drives the (synchronous,
// lock-serialised) registry in rooms.rs. A second task per connection drains that
// connection's unbounded queue into the socket. Nothing that touches the registry ever
// awaits while the lock is held, which is what lets the registry hand out a total order
// over every broadcast - see the header comment in rooms.rs.
//
// Everything the client can get wrong ends in a close: 4000 for a framing/protocol
// error, 4001 for an unauthenticated or unauthenticated-first frame, 4002 for blowing
// the inbound rate cap, 4003 for going silent long enough to be presumed dead (the
// liveness sweep - see LIVENESS_TIMEOUT in rooms.rs, and start_sweeper below).
use std::collections::VecDeque;
use std::time::{Duration, Instant};
use actix_web::rt;
use actix_web::{web, HttpRequest, HttpResponse};
use actix_ws::{AggregatedMessage, AggregatedMessageStream, CloseCode, CloseReason, Session};
use tokio::sync::mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender};
use crate::router::userdata;
use super::proto::{
self, ClientMsg, DecodeError, ServerMsg, CLOSE_PROTOCOL, CLOSE_RATE_LIMIT,
CLOSE_UNAUTHENTICATED,
};
use super::rooms::{self, ConnId, Outbound};
// "Server closes idle unauthenticated connections after 10s."
const AUTH_TIMEOUT: Duration = Duration::from_secs(10);
// "a per-connection cap of 30 inbound messages/sec ... over the cap -> close 4002".
// The honest client peaks at 3-5/sec.
const RATE_LIMIT_PER_SEC: usize = 30;
const RATE_WINDOW: Duration = Duration::from_secs(1);
// Property bags and RPC params are tens of bytes; nothing legitimate comes close.
const MAX_FRAME_BYTES: usize = 64 * 1024;
// How often the inactive-actor, empty-room and connection-liveness expiries are checked.
const SWEEP_INTERVAL: Duration = Duration::from_secs(1);
pub async fn ws(req: HttpRequest, body: web::Payload) -> Result<HttpResponse, actix_web::Error> {
// Older client builds carry incompatible multi implementations (pre-relay wire
// framing), so the upgrade itself is gated on the extended-protocol version — a
// non-101 answer makes the client's ConnectAsync fail cleanly into its official
// disconnect flow instead of mis-framing against the relay.
let protocol = crate::router::global::client_protocol_version(&req);
if protocol < super::PROTOCOL_VERSION {
println!(
"multi_live/ws: upgrade refused, X-Protocol-Version {} < {}",
protocol,
super::PROTOCOL_VERSION
);
return Ok(HttpResponse::UpgradeRequired().finish());
}
let (response, session, stream) = match actix_ws::handle(&req, body) {
Ok(parts) => {
println!("multi_live/ws: upgrade accepted, awaiting Auth");
parts
}
Err(err) => {
println!("multi_live/ws: upgrade REJECTED (not a websocket handshake?): {}", err);
return Err(err);
}
};
let stream = stream
.max_frame_size(MAX_FRAME_BYTES)
.aggregate_continuations()
.max_continuation_size(MAX_FRAME_BYTES);
let (tx, rx) = unbounded_channel::<Outbound>();
rt::spawn(writer(session, rx));
rt::spawn(reader(stream, tx));
Ok(response)
}
// The expiry timers: held-slot TTL, empty-room TTL and the connection liveness window.
//
// One task for the whole process, started from run_server so it lives on the system
// arbiter. It used to be lazily started by the first WebSocket upgrade instead, which put
// it on whichever HTTP worker happened to serve that upgrade: a panic anywhere in that
// worker took the sweeper down with it, permanently and silently, and `Once` guaranteed
// nothing would ever start it again. Every room in the process would then hold its seats
// forever.
//
// Called once per run_server, unconditionally and not behind a "started already" flag:
// each run_server builds its own actix System, and a task spawned on the previous one died
// with it (the mobile path stops and restarts the server in-process). A flag would leave
// the restarted server with no sweeper at all; two sweepers, if they ever overlapped,
// would only mean the idempotent sweep runs twice a second.
pub fn start_sweeper() {
rt::spawn(async {
let mut ticker = rt::time::interval(SWEEP_INTERVAL);
loop {
ticker.tick().await;
// The guard is a temporary: it is released before the next await.
rooms::registry().sweep(Instant::now());
}
});
}
// Drains this connection's FIFO queue to the socket. The queue is unbounded so that the
// registry can push a whole broadcast while holding its lock without ever blocking.
async fn writer(mut session: Session, mut rx: UnboundedReceiver<Outbound>) {
while let Some(out) = rx.recv().await {
match out {
Outbound::Msg(msg) => {
if session.binary(proto::encode_server(&msg)).await.is_err() {
return;
}
}
Outbound::Pong(bytes) => {
if session.pong(&bytes).await.is_err() {
return;
}
}
Outbound::Close(code) => {
let _ = session
.close(Some(CloseReason { code: CloseCode::Other(code), description: None }))
.await;
return;
}
}
}
// Queue closed: the connection was deregistered, so the socket goes with it.
let _ = session.close(None).await;
}
async fn reader(mut stream: AggregatedMessageStream, tx: UnboundedSender<Outbound>) {
let Some(id) = authenticate(&mut stream, &tx).await else {
return;
};
let mut rate = RateLimiter::new();
loop {
let Some(frame) = stream.recv().await else {
break;
};
let payload = match frame {
Ok(AggregatedMessage::Binary(bytes)) => bytes,
Ok(AggregatedMessage::Ping(bytes)) => {
// WebSocket-level keepalive, unrelated to the protocol's Ping op. It is
// still proof the socket is alive, so it counts for the liveness window
// (the protocol ops are touched inside registry.handle).
rooms::registry().touch(id, Instant::now());
let _ = tx.send(Outbound::Pong(bytes.to_vec()));
continue;
}
Ok(AggregatedMessage::Pong(_)) => {
rooms::registry().touch(id, Instant::now());
continue;
}
Ok(AggregatedMessage::Close(_)) => break,
Ok(AggregatedMessage::Text(_)) => {
// "binary frames only ... Text frames are a protocol error -> close".
println!("multi_live/ws: text frame from conn {}", id);
close(&tx, CLOSE_PROTOCOL);
break;
}
Err(err) => {
println!("multi_live/ws: websocket error on conn {}: {}", id, err);
break;
}
};
let now = Instant::now();
if !rate.allow(now) {
println!("multi_live/ws: conn {} exceeded {} msg/sec", id, RATE_LIMIT_PER_SEC);
close(&tx, CLOSE_RATE_LIMIT);
break;
}
let msg = match proto::decode_client(&payload) {
Ok(msg) => msg,
Err(err) => {
println!("multi_live/ws: bad frame from conn {}: {}", id, err);
close(&tx, close_code_for(&err));
break;
}
};
if matches!(msg, ClientMsg::Auth { .. }) {
// Auth is the first message and only the first message.
println!("multi_live/ws: repeat Auth on conn {}", id);
close(&tx, CLOSE_PROTOCOL);
break;
}
rooms::registry().handle(id, msg, now);
}
rooms::registry().disconnect(id, Instant::now());
}
// Reads the mandatory first frame and registers the connection. Returns None when the
// connection was closed instead.
async fn authenticate(
stream: &mut AggregatedMessageStream,
tx: &UnboundedSender<Outbound>,
) -> Option<ConnId> {
let first = match rt::time::timeout(AUTH_TIMEOUT, stream.recv()).await {
Ok(Some(Ok(frame))) => frame,
Ok(Some(Err(_))) | Ok(None) => return None,
Err(_) => {
println!("multi_live/ws: no Auth within {}s", AUTH_TIMEOUT.as_secs());
close(tx, CLOSE_UNAUTHENTICATED);
return None;
}
};
let AggregatedMessage::Binary(payload) = first else {
// "First message on a connection MUST be Auth; anything else -> close 4001."
close(tx, CLOSE_UNAUTHENTICATED);
return None;
};
let Ok(ClientMsg::Auth { user_id, token }) = proto::decode_client(&payload) else {
println!("multi_live/ws: first message was not a decodable Auth frame");
close(tx, CLOSE_UNAUTHENTICATED);
return None;
};
let Some(uid) = resolve_user(&user_id, &token) else {
// Never print the token itself (it is the login credential); empty-vs-unknown is
// the diagnostic that matters: empty means the client sent no credential at all
// (the pre-fix Android builds sent UserSaveData.m_uuid, which device builds never
// populate), unknown means a credential the tokens table has no row for.
println!(
"multi_live/ws: rejecting uid {}: bad session ({})",
user_id,
if token.is_empty() { "empty token" } else { "unknown token" }
);
close(tx, CLOSE_UNAUTHENTICATED);
return None;
};
let id = rooms::registry().connect(uid, tx.clone(), Instant::now());
println!("multi_live/ws: auth ok, uid {} connected as conn {}", uid, id);
let _ = tx.send(Outbound::Msg(ServerMsg::AuthOk {
actorless_time_ms: rooms::server_time_ms(),
}));
Some(id)
}
// The relay validates the same credential the HTTP layer does. Over HTTP the login token
// arrives inside the `a6573cbe` header (global::get_login) and every handler then keys
// userdata off it; here it arrives as the Auth payload instead, and the tokens table maps
// it back to the account. The claimed userId only has to agree with the token, so a
// client cannot relay as somebody else - which is a little stricter than the HTTP layer,
// where an unknown token simply resolves to an empty account.
fn resolve_user(user_id: &str, token: &str) -> Option<i64> {
if token.is_empty() {
return None;
}
match_claim(user_id, userdata::uid_from_login_token(token))
}
// The claim check, split out from the lookup so it can be tested without a database.
// `uid` is 0 when the token is unknown.
fn match_claim(user_id: &str, uid: i64) -> Option<i64> {
if uid == 0 {
return None;
}
match user_id.parse::<i64>() {
// A blank or unparsable userId is tolerated: the token is the authority.
Err(_) => Some(uid),
Ok(claimed) if claimed == 0 || claimed == uid => Some(uid),
Ok(_) => None,
}
}
fn close_code_for(err: &DecodeError) -> u16 {
// The spec names 4001 and 4002 only; every framing failure shares 4000.
match err {
DecodeError::Empty
| DecodeError::Truncated
| DecodeError::TrailingBytes
| DecodeError::BadUtf8
| DecodeError::UnknownOp(_)
| DecodeError::UnknownTag(_) => CLOSE_PROTOCOL,
}
}
fn close(tx: &UnboundedSender<Outbound>, code: u16) {
let _ = tx.send(Outbound::Close(code));
}
// Sliding one second window rather than a fixed bucket, so 30 messages either side of a
// second boundary still trips the cap.
struct RateLimiter {
seen: VecDeque<Instant>,
}
impl RateLimiter {
fn new() -> Self {
RateLimiter { seen: VecDeque::with_capacity(RATE_LIMIT_PER_SEC + 1) }
}
fn allow(&mut self, now: Instant) -> bool {
while let Some(front) = self.seen.front() {
if now.duration_since(*front) >= RATE_WINDOW {
self.seen.pop_front();
} else {
break;
}
}
if self.seen.len() >= RATE_LIMIT_PER_SEC {
return false;
}
self.seen.push_back(now);
true
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn rate_limiter_allows_the_cap_and_rejects_the_next() {
let mut rate = RateLimiter::new();
let start = Instant::now();
for i in 0..RATE_LIMIT_PER_SEC {
assert!(rate.allow(start + Duration::from_millis(i as u64)), "message {} refused", i);
}
assert!(!rate.allow(start + Duration::from_millis(999)));
// The window slides: once the first message ages out there is room again.
assert!(rate.allow(start + Duration::from_millis(1001)));
}
#[test]
fn rate_limiter_catches_a_burst_straddling_a_second_boundary() {
let mut rate = RateLimiter::new();
let start = Instant::now();
// 29 messages at the end of one second...
for i in 0..RATE_LIMIT_PER_SEC - 1 {
assert!(rate.allow(start + Duration::from_millis(900 + i as u64)));
}
// ...and two more just after the boundary is still 31 inside one second.
assert!(rate.allow(start + Duration::from_millis(1000)));
assert!(!rate.allow(start + Duration::from_millis(1001)));
}
#[test]
fn every_decode_failure_closes_with_the_protocol_code() {
for err in [
DecodeError::Empty,
DecodeError::Truncated,
DecodeError::TrailingBytes,
DecodeError::BadUtf8,
DecodeError::UnknownOp(200),
DecodeError::UnknownTag(9),
] {
assert_eq!(close_code_for(&err), CLOSE_PROTOCOL);
}
}
#[test]
fn auth_needs_a_token_that_agrees_with_the_claimed_user() {
// An empty token never reaches the database.
assert_eq!(resolve_user("1", ""), None);
// An unknown token resolves to uid 0.
assert_eq!(match_claim("1", 0), None);
assert_eq!(match_claim("42", 42), Some(42));
// Claiming somebody else's account with your own token is refused.
assert_eq!(match_claim("43", 42), None);
// A blank, zero or unparsable userId defers to the token.
assert_eq!(match_claim("", 42), Some(42));
assert_eq!(match_claim("0", 42), Some(42));
assert_eq!(match_claim("not-a-number", 42), Some(42));
}
}

View File

@@ -1,19 +1,22 @@
use jzon::{object, array};
use actix_web::{web, HttpRequest, Responder};
use jzon::object;
use actix_web::{web, Responder};
use crate::router::global;
use crate::router::Api;
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.service(web::resource("/notice/reward").route(web::get().to(reward)).route(web::post().to(reward_post)));
}
//todo
async fn reward(req: HttpRequest) -> impl Responder {
global::api(&req, Some(object!{
async fn reward() -> impl Responder {
Api(Some(object!{
"reward_list": []
}))
}
async fn reward_post(req: HttpRequest, _body: String) -> impl Responder {
global::api(&req, Some(array![]))
async fn reward_post() -> impl Responder {
Api(Some(object!{
"gift_list": [],
"reward_list": []
}))
}

View File

@@ -1,14 +1,14 @@
use jzon::object;
use actix_web::{web, HttpRequest, Responder};
use actix_web::{web, Responder};
use crate::router::global;
use crate::router::Api;
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.route("/purchase", web::get().to(purchase));
}
async fn purchase(req: HttpRequest) -> impl Responder {
global::api(&req, Some(object!{
async fn purchase() -> impl Responder {
Api(Some(object!{
"product_list": [//Client will error if this is an empty array
{
"product_id": "com.bushiroad.global.lovelive.sif2.google.promo.4199",

144
src/router/rich_text.rs Normal file
View File

@@ -0,0 +1,144 @@
// TextMeshPro rich-text guarding for user-supplied strings.
//
// Every name/description the custom-song and custom-card uploads accept is rendered by the game
// through TextMeshUI -> TMP with rich text ENABLED (the shipped labels carry m_isRichText: 1),
// and the client does NOT escape it: it hands user text straight to SetText, exactly as it does
// for other players' account names. So a song called "<size=400%>x", a card whose skill
// description carries <sprite=...>, or a character named "<font=nonexistent>" mangles or breaks
// every screen that shows it - for EVERY player, since public songs and published cards are
// visible to all. This is the in-game equivalent of stored XSS.
//
// The fix belongs here rather than at the render seam, because that is where official data draws
// the line: the shipped masterdata carries NO markup in any name or artist column (1102 of the
// 1103 tags in the whole EN music table are <br>, all of them inside detailInfo), <br> in the
// descriptive columns, and <size=NN> only in character nameRichtextGacha - a column whose name
// says it is meant to be rich text. Uploads are held to exactly that shape.
//
// A '<' that TMP would not read as a tag is left alone, so titles like "<3" still upload.
// The tags found in `text`, lowercased and without a leading '/'. Mirrors TMP's own scan: a tag
// opens at '<' followed by an optional '/' then a letter or '#' (a colour tag), and must close
// with '>' before the next '<'. Anything else is literal text.
fn tags(text: &str) -> Vec<String> {
let chars: Vec<char> = text.chars().collect();
let mut rv = Vec::new();
let mut i = 0;
while i < chars.len() {
if chars[i] != '<' {
i += 1;
continue;
}
let mut j = i + 1;
if j < chars.len() && chars[j] == '/' {
j += 1;
}
// Not tag-like: a bare "<3", "< 3", "<<"
if j >= chars.len() || !(chars[j].is_ascii_alphabetic() || chars[j] == '#') {
i += 1;
continue;
}
let name_start = j;
while j < chars.len() && chars[j] != '>' && chars[j] != '<' && chars[j] != '=' && chars[j] != ' ' {
j += 1;
}
let name: String = chars[name_start..j].iter().collect();
// The tag has to actually close before another one opens, or TMP prints it verbatim
while j < chars.len() && chars[j] != '>' && chars[j] != '<' {
j += 1;
}
if j < chars.len() && chars[j] == '>' {
rv.push(name.to_lowercase());
i = j + 1;
} else {
i += 1;
}
}
rv
}
// Reject text carrying a rich-text tag the field is not supposed to have. `allowed` holds
// lowercase tag names without the slash, so listing "size" permits both <size=80> and </size>.
pub fn reject_tags(label: &str, text: &str, allowed: &[&str]) -> Result<(), String> {
for tag in tags(text) {
if !allowed.contains(&tag.as_str()) {
return Err(format!(
"{} may not contain the rich text tag <{}> - the game renders it as formatting and it would break the screens it appears on",
label, tag
));
}
}
Ok(())
}
// Drop every rich-text tag, keeping the text between them. For strings that are ALREADY stored
// and cannot be rejected at the point of use - an uploader's account name, which ew accepts
// verbatim on the profile route.
pub fn strip_tags(text: &str) -> String {
let chars: Vec<char> = text.chars().collect();
let mut rv = String::new();
let mut i = 0;
while i < chars.len() {
if chars[i] == '<' {
let mut j = i + 1;
if j < chars.len() && chars[j] == '/' {
j += 1;
}
if j < chars.len() && (chars[j].is_ascii_alphabetic() || chars[j] == '#') {
while j < chars.len() && chars[j] != '>' && chars[j] != '<' {
j += 1;
}
if j < chars.len() && chars[j] == '>' {
i = j + 1;
continue;
}
}
}
rv.push(chars[i]);
i += 1;
}
rv
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn only_real_tags_are_tags() {
// Literal text TMP never reads as formatting
for text in ["I <3 you", "a < b", "3 <", "<<", "1<2", "<b unclosed", "<b never closes"] {
assert!(reject_tags("Name", text, &[]).is_ok(), "{}", text);
}
// Everything TMP would format with
for text in ["<b>x", "x</b>", "<size=400%>x", "<sprite=1>", "<#ff0000>x", "<color=red>x",
"<font=\"none\">x", "<rotate=45>x", "<noparse>x", "<voffset=5em>x",
// the unclosed opener is literal, but the tag after it is not
"<b <i>x"] {
assert!(reject_tags("Name", text, &[]).is_err(), "{}", text);
}
}
#[test]
fn allowed_tags_pass_and_others_still_dont() {
assert!(reject_tags("Description", "line one<br>line two", &["br"]).is_ok());
assert!(reject_tags("Description", "line one<br>line two", &[]).is_err());
// The slash form of an allowed tag is allowed too
assert!(reject_tags("Gacha name", "<size=80>Mari</size>", &["size"]).is_ok());
assert!(reject_tags("Gacha name", "<size=80><sprite=3>", &["size"]).is_err());
}
#[test]
fn the_error_names_the_field_and_the_tag() {
let error = reject_tags("Song name", "<size=400%>boom", &[]).unwrap_err();
assert!(error.contains("Song name"), "{}", error);
assert!(error.contains("<size>"), "{}", error);
}
#[test]
fn stripping_keeps_the_words_and_the_harmless_angle_brackets() {
assert_eq!(strip_tags("<size=400%>Nozomi</size>"), "Nozomi");
assert_eq!(strip_tags("I <3 <b>you</b>"), "I <3 you");
assert_eq!(strip_tags("plain name"), "plain name");
assert_eq!(strip_tags("<b unclosed"), "<b unclosed");
}
}

View File

@@ -1,8 +1,7 @@
use jzon::{array, object};
use actix_web::{web, HttpRequest, Responder};
use actix_web::{web, Responder};
use crate::router::{global, userdata, items};
use crate::encryption;
use crate::router::{userdata, items, Session, Api};
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.service(
@@ -12,15 +11,13 @@ pub fn routes(cfg: &mut web::ServiceConfig) {
);
}
async fn events(req: HttpRequest) -> impl Responder {
global::api(&req, Some(object!{
async fn events() -> impl Responder {
Api(Some(object!{
"serial_code_list": []
}))
}
async fn serial_code(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn serial_code(Session { key, body }: Session) -> impl Responder {
let mut user = userdata::get_acc_home(&key);
let mut itemz = array![];
@@ -186,7 +183,7 @@ async fn serial_code(req: HttpRequest, body: String) -> impl Responder {
itemz.push(items::gift_item_basic(30010001, 500, 3, "Okay...............", &mut user)).unwrap();
itemz.push(items::gift_item_basic(15540001, 500, 3, "Okay...............", &mut user)).unwrap();
} else {
return global::api(&req, Some(object!{
return Api(Some(object!{
"result_code": 3
}));
}
@@ -195,7 +192,7 @@ async fn serial_code(req: HttpRequest, body: String) -> impl Responder {
userdata::save_acc_home(&key, user.clone());
}
global::api(&req, Some(object!{
Api(Some(object!{
"serial_code_event": {"id":1,"name":"Serial Code Reward","unique_limit_count":0,"min_user_rank":0,"max_user_rank":0,"end_date":null},
"reward_list": itemz,
"result_code": 0,

View File

@@ -1,8 +1,7 @@
use jzon::{object};
use actix_web::{web, HttpRequest, Responder};
use actix_web::{web, Responder};
use crate::router::{userdata, global, items, databases};
use crate::encryption;
use crate::router::{userdata, items, databases, Login, Session, Api};
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.service(
@@ -12,18 +11,15 @@ pub fn routes(cfg: &mut web::ServiceConfig) {
);
}
async fn shop(req: HttpRequest) -> impl Responder {
let key = global::get_login(req.headers(), "");
async fn shop(Login(key): Login) -> impl Responder {
let user = userdata::get_acc(&key);
global::api(&req, Some(object!{
Api(Some(object!{
"shop_list": user["shop_list"].clone()
}))
}
async fn buy(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn buy(Session { key, body }: Session) -> impl Responder {
let mut user = userdata::get_acc(&key);
let shop_item_id = body["master_shop_item_id"].as_i64().unwrap();
@@ -43,7 +39,7 @@ async fn buy(req: HttpRequest, body: String) -> impl Responder {
}
}
global::api(&req, Some(object!{
Api(Some(object!{
"gem": user["gem"].clone(),
"shop_list": [bought],
"gift_list": [],

View File

@@ -1,19 +1,14 @@
use jzon::{JsonValue, object};
use actix_web::{web, HttpRequest, Responder};
use crate::encryption;
use crate::router::{userdata, global};
use crate::router::{userdata, global, Body, Session};
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.route("/start", web::post().to(start));
cfg.route("/start/assetHash", web::post().to(asset_hash));
}
fn get_asset_hash(req: &HttpRequest, body: &JsonValue) -> String {
if global::get_player_region(&body["asset_version"].to_string()).is_none() {
println!("Warning! Asset version is not what was expected. (Did the app update?)");
}
fn get_asset_hash(req: &HttpRequest, body: &JsonValue) -> Option<String> {
let platform = req.headers()
.get("aoharu-platform")
.and_then(|v| v.to_str().ok())
@@ -22,30 +17,49 @@ fn get_asset_hash(req: &HttpRequest, body: &JsonValue) -> String {
println!("Login on platform: {}", platform);
global::get_asset_hash(&body["asset_version"].to_string(), platform).unwrap()
let rv = global::get_asset_hash(&body["asset_version"].to_string(), platform);
if rv.is_none() {
println!("Unknown asset version {}; telling the client to update.", body["asset_version"]);
}
rv
}
async fn asset_hash(req: HttpRequest, body: String) -> impl Responder {
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
global::api(&req, Some(object!{
"asset_hash": get_asset_hash(&req, &body)
}))
async fn asset_hash(req: HttpRequest, Body(body): Body) -> impl Responder {
match get_asset_hash(&req, &body) {
Some(hash) => global::api(&req, Some(object!{
"asset_hash": hash
})),
None => global::api_error(&req, global::RESULT_GAME_VERSION_UPDATED),
}
}
async fn start(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn start(req: HttpRequest, Session { key, body }: Session) -> impl Responder {
let Some(asset_hash) = get_asset_hash(&req, &body) else {
return global::api_error(&req, global::RESULT_GAME_VERSION_UPDATED);
};
let mut user = userdata::get_acc(&key);
println!("Signin from uid: {}", user["user"]["id"].clone());
user["user"]["last_login_time"] = global::timestamp().into();
userdata::save_acc(&key, user);
userdata::save_protocol_version(&key, global::client_protocol_version(&req));
if !crate::router::card::client_supports_custom_cards(&req) && crate::router::card::account_supports_custom_cards(&key) {
return global::api_error(&req, global::RESULT_GAME_VERSION_UPDATED); // todo - maybe compatibility layer?
}
// An account holding a runtime custom card (protocol 3) can't run on a
// client that only understands the baked band - card_list would carry ids
// it can't resolve
if !crate::router::custom_card::client_supports(&req) && crate::router::custom_card::account_supports(&key) {
return global::api_error(&req, global::RESULT_GAME_VERSION_UPDATED);
}
global::api(&req, Some(object!{
"asset_hash": get_asset_hash(&req, &body),
"asset_hash": asset_hash,
"token": hex::encode("Hello") //what is this?
}))
}

View File

@@ -1,16 +1,13 @@
use jzon::{object};
use actix_web::{web, HttpRequest, Responder};
use actix_web::{web, Responder};
use crate::encryption;
use crate::router::{global, userdata, databases};
use crate::router::{userdata, databases, Session, Api};
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.route("/story/read", web::post().to(read));
}
async fn read(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn read(Session { key, body }: Session) -> impl Responder {
let mut user = userdata::get_acc(&key);
let part = body["master_story_part_id"].as_i64().unwrap();
let master_id = databases::STORY[part.to_string()]["masterStoryId"].as_i64().unwrap();
@@ -33,7 +30,7 @@ async fn read(req: HttpRequest, body: String) -> impl Responder {
userdata::save_acc(&key, user.clone());
global::api(&req, Some(object!{
Api(Some(object!{
"gift_list":[],
"updated_value_list":{
"story_list": user["story_list"].clone()

View File

@@ -1,6 +1,9 @@
use jzon::{array, object, JsonValue};
use lazy_static::lazy_static;
use std::collections::HashMap;
use crate::router::userdata;
use crate::router::global;
use crate::router::{card, custom_card, databases};
fn get_clear_count(user: &JsonValue, level: i32) -> i64 {
let mut rv = 0;
@@ -65,7 +68,107 @@ pub enum UserView {
Ranking,
}
pub fn get_user(id: i64, friends: &JsonValue, view: UserView) -> JsonValue {
const DEFAULT_CARD: i64 = 10010001;
lazy_static! {
// Each character's lowest official card id: the stand-in shown to viewers
// who can't resolve a custom card of that character
static ref OFFICIAL_CARD_BY_CHARACTER: HashMap<i64, i64> = {
let mut rv: HashMap<i64, i64> = HashMap::new();
for entry in databases::CARD_LIST.entries() {
let Some(id) = entry.1["id"].as_i64() else { continue; };
if card::is_custom(id) {
continue;
}
let Some(character) = entry.1["masterCharacterId"].as_i64() else { continue; };
let slot = rv.entry(character).or_insert(id);
if id < *slot {
*slot = id;
}
}
rv
};
}
// The character behind any card id: baked masterdata first, then the runtime
// custom-card db, then the imported band's id arithmetic (prefix - 9000)
fn card_character(id: i64) -> Option<i64> {
let card = &databases::CARD_LIST[id.to_string()];
if !card.is_empty() {
return card["masterCharacterId"].as_i64();
}
if custom_card::is_custom_runtime(id) {
return custom_card::character_of(id);
}
Some(id / 10000 - 9000)
}
// A custom card the viewer can't resolve shows as its character's base
// official card - the right face, never a crash. Characters with no official
// card (custom ones included) fall back to the default
fn proxy_card_id(id: i64) -> i64 {
if !card::is_custom(id) {
return id;
}
let Some(character) = card_character(id) else {
return DEFAULT_CARD;
};
let Some(rv) = OFFICIAL_CARD_BY_CHARACTER.get(&character) else {
return DEFAULT_CARD;
};
*rv
}
pub fn proxy_user_cards(user: &mut JsonValue, protocol: u32) {
for key in ["favorite_master_card_id", "guest_smile_master_card_id", "guest_cool_master_card_id", "guest_pure_master_card_id"] {
let id = user["user"][key].as_i64().unwrap_or(0);
if !custom_card::viewer_can_resolve(id, protocol) {
user["user"][key] = proxy_card_id(id).into();
}
}
// A card's id is its master_card_id, so both sides need proxying
for key in ["favorite_card", "guest_smile_card", "guest_cool_card", "guest_pure_card"] {
let id = user[key]["master_card_id"].as_i64().unwrap_or(0);
if !custom_card::viewer_can_resolve(id, protocol) {
user[key]["id"] = proxy_card_id(id).into();
user[key]["master_card_id"] = proxy_card_id(id).into();
}
}
if !user["main_deck_detail"].is_empty() {
let mut used = array![];
for id in user["main_deck_detail"]["deck"]["main_card_ids"].members_mut() {
let raw = id.as_i64().unwrap_or(0);
let card = if custom_card::viewer_can_resolve(raw, protocol) { raw } else { proxy_card_id(raw) };
// Whole characters share one proxy, and the client can't hold the
// same card twice
if card == 0 || used.contains(card) {
*id = (0).into();
continue;
}
used.push(card).unwrap();
*id = card.into();
}
let mut cards = array![];
let mut ids = array![];
for card in user["main_deck_detail"]["card_list"].members() {
let id = card["master_card_id"].as_i64().unwrap_or(0);
let proxy = if custom_card::viewer_can_resolve(id, protocol) { id } else { proxy_card_id(id) };
if ids.contains(proxy) {
continue;
}
ids.push(proxy).unwrap();
let mut card = card.clone();
if proxy != id {
card["id"] = proxy.into();
card["master_card_id"] = proxy.into();
}
cards.push(card).unwrap();
}
user["main_deck_detail"]["card_list"] = cards;
}
}
pub fn get_user(id: i64, friends: &JsonValue, view: UserView, protocol: u32) -> JsonValue {
let user = userdata::get_acc_from_uid(id);
if !user["error"].is_empty() {
return object!{};
@@ -115,5 +218,124 @@ pub fn get_user(id: i64, friends: &JsonValue, view: UserView) -> JsonValue {
}
}
proxy_user_cards(&mut rv, protocol);
rv
}
#[cfg(test)]
mod tests {
use super::*;
use crate::database::custom_card as db;
fn wipe(owner: i64) {
for card in db::get_cards_by_owner(owner).members() {
db::delete_card(card["master_card_id"].as_i64().unwrap());
}
for character in db::get_characters_by_owner(owner).members() {
db::delete_character(character["master_character_id"].as_i64().unwrap());
}
}
// The imported band proxies to its own character's base card, not to a
// single default (the old prefix arithmetic collapsed 14000+ to Honoka)
#[test]
fn proxies_resolve_through_the_character() {
let _lock = crate::runtime::lock_test_data_path();
wipe(5101);
assert_eq!(proxy_card_id(10010001), 10010001);
assert_eq!(proxy_card_id(0), 0);
assert_eq!(proxy_card_id(100010001), 10010001);
assert_eq!(proxy_card_id(100090001), 10090001);
assert_eq!(proxy_card_id(110010001), 20010001);
assert_eq!(proxy_card_id(130010001), 40010001);
assert_eq!(proxy_card_id(140010001), DEFAULT_CARD);
// A runtime card on an official character proxies to that character
let id = db::next_card_id();
db::insert_card(id, 2003, 5101, &jzon::object!{ "master_card_id": id, "rarity": 1 }, true, false);
assert_eq!(proxy_card_id(id), 20030001);
// On a custom character (no official card) it falls to the default
let orphan = db::next_card_id();
db::insert_card(orphan, db::FIRST_CHARACTER_ID, 5101, &jzon::object!{ "master_card_id": orphan, "rarity": 1 }, true, false);
assert_eq!(proxy_card_id(orphan), DEFAULT_CARD);
// A deleted/unknown runtime id can't resolve a character either
let unknown = db::next_card_id() + 5000;
assert_eq!(proxy_card_id(unknown), DEFAULT_CARD);
// A proxy is never zero and always a real row
for id in [100010001i64, 141720001, 149990001, id, orphan, unknown] {
let proxy = proxy_card_id(id);
assert_ne!(proxy, 0, "id {}", id);
assert!(!databases::CARD_LIST[proxy.to_string()].is_empty(), "id {}", id);
}
wipe(5101);
}
// Even a protocol-3 viewer gets a proxy for a draft - published is what
// makes a runtime card resolvable, and older viewers proxy everything
#[test]
fn drafts_and_old_viewers_get_proxies() {
let _lock = crate::runtime::lock_test_data_path();
wipe(5102);
let published = db::next_card_id();
db::insert_card(published, 2003, 5102, &jzon::object!{ "master_card_id": published, "rarity": 1 }, true, false);
let draft = db::next_card_id();
db::insert_card(draft, 2003, 5102, &jzon::object!{ "master_card_id": draft, "rarity": 1 }, false, false);
assert!(custom_card::viewer_can_resolve(published, custom_card::PROTOCOL_VERSION));
assert!(!custom_card::viewer_can_resolve(draft, custom_card::PROTOCOL_VERSION));
let mut user = jzon::object!{
"user": {
"favorite_master_card_id": draft,
"guest_smile_master_card_id": published
},
"favorite_card": { "id": draft, "master_card_id": draft },
"guest_smile_card": { "id": published, "master_card_id": published },
"main_deck_detail": {
"deck": { "main_card_ids": [draft, published, 10010001, 0, 0] },
"card_list": [
{ "id": draft, "master_card_id": draft },
{ "id": published, "master_card_id": published },
{ "id": 10010001, "master_card_id": 10010001 }
]
}
};
proxy_user_cards(&mut user, custom_card::PROTOCOL_VERSION);
assert_eq!(user["user"]["favorite_master_card_id"].as_i64(), Some(20030001));
assert_eq!(user["user"]["guest_smile_master_card_id"].as_i64(), Some(published));
assert_eq!(user["favorite_card"]["master_card_id"].as_i64(), Some(20030001));
assert_eq!(user["guest_smile_card"]["master_card_id"].as_i64(), Some(published));
assert_eq!(user["main_deck_detail"]["deck"]["main_card_ids"][0].as_i64(), Some(20030001));
assert_eq!(user["main_deck_detail"]["deck"]["main_card_ids"][1].as_i64(), Some(published));
assert_eq!(user["main_deck_detail"]["deck"]["main_card_ids"][2].as_i64(), Some(10010001));
assert_eq!(user["main_deck_detail"]["card_list"].len(), 3);
for card in user["main_deck_detail"]["card_list"].members() {
assert_ne!(card["master_card_id"].as_i64(), Some(draft));
}
// Protocol 0-2 viewers proxy even the published runtime card
for protocol in [0u32, 1, 2] {
let mut user = jzon::object!{
"user": { "favorite_master_card_id": published },
"favorite_card": { "id": published, "master_card_id": published }
};
proxy_user_cards(&mut user, protocol);
assert_eq!(user["user"]["favorite_master_card_id"].as_i64(), Some(20030001), "protocol {}", protocol);
}
// The baked import band needs only protocol 2
let mut user = jzon::object!{
"user": { "favorite_master_card_id": 100010001 },
"favorite_card": { "id": 100010001, "master_card_id": 100010001 }
};
proxy_user_cards(&mut user, 2);
assert_eq!(user["user"]["favorite_master_card_id"].as_i64(), Some(100010001));
proxy_user_cards(&mut user, 1);
assert_eq!(user["user"]["favorite_master_card_id"].as_i64(), Some(10010001));
wipe(5102);
}
}

View File

@@ -1,16 +1,13 @@
use jzon::{array};
use actix_web::{web, HttpRequest, Responder};
use actix_web::{web, Responder};
use crate::router::{userdata, global};
use crate::encryption;
use crate::router::{userdata, global, Session, Api};
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.route("/tutorial", web::post().to(tutorial));
}
async fn tutorial(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn tutorial(Session { key, body }: Session) -> impl Responder {
let mut user = userdata::get_acc(&key);
if user["tutorial_step"].as_i32().unwrap() < 130 {
@@ -20,5 +17,5 @@ async fn tutorial(req: HttpRequest, body: String) -> impl Responder {
userdata::save_acc(&key, user);
}
global::api(&req, Some(array![]))
Api(Some(array![]))
}

View File

@@ -2,8 +2,7 @@ use jzon::{array, object, JsonValue};
use actix_web::{web, HttpRequest, Responder};
use sha1::{Digest, Sha1};
use crate::encryption;
use crate::router::{global, items, userdata};
use crate::router::{global, items, userdata, Body, Login, Session, Api};
use crate::include_file;
use crate::router::tools::guest;
@@ -26,9 +25,7 @@ pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.route("/album/sif", web::get().to(sif));
}
async fn deck(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn deck(Session { key, body }: Session) -> impl Responder {
let mut user = userdata::get_acc(&key);
for (i, data) in user["deck_list"].clone().members().enumerate() {
@@ -49,7 +46,7 @@ async fn deck(req: HttpRequest, body: String) -> impl Responder {
}
userdata::save_acc(&key, user.clone());
global::api(&req, Some(object!{
Api(Some(object!{
"deck": {
"slot": body["slot"].clone(),
"leader_role": 0,
@@ -59,8 +56,7 @@ async fn deck(req: HttpRequest, body: String) -> impl Responder {
}))
}
async fn user(req: HttpRequest) -> impl Responder {
let key = global::get_login(req.headers(), "");
async fn user(req: HttpRequest, Login(key): Login) -> impl Responder {
let mut user = userdata::get_acc(&key);
user["lottery_list"] = array![];
@@ -71,12 +67,15 @@ async fn user(req: HttpRequest) -> impl Responder {
}
}
// Don't allow account downgrade (will crash client)
if !crate::router::custom_card::client_supports(&req) {
crate::router::custom_card::strip_unsupported(&mut user);
}
global::api(&req, Some(user))
}
pub async fn gift(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
pub async fn gift(Session { key, body }: Session) -> impl Responder {
let mut user = userdata::get_acc_home(&key);
let mut userr = userdata::get_acc(&key);
@@ -119,7 +118,7 @@ pub async fn gift(req: HttpRequest, body: String) -> impl Responder {
userdata::save_acc(&key, userr.clone());
let userr = userdata::get_acc(&key);
global::api(&req, Some(object!{
Api(Some(object!{
"failed_gift_ids": failed,
"updated_value_list": {
"gem": userr["gem"].clone(),
@@ -132,9 +131,7 @@ pub async fn gift(req: HttpRequest, body: String) -> impl Responder {
}))
}
async fn user_post(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn user_post(Session { key, body }: Session) -> impl Responder {
let mut user = userdata::get_acc(&key);
@@ -175,105 +172,97 @@ async fn user_post(req: HttpRequest, body: String) -> impl Responder {
userdata::save_acc(&key, user.clone());
global::api(&req, Some(object!{
Api(Some(object!{
"user": user["user"].clone(),
"clear_mission_ids": []
}))
}
pub async fn announcement(req: HttpRequest) -> impl Responder {
let key = global::get_login(req.headers(), "");
pub async fn announcement(Login(key): Login) -> impl Responder {
let mut user = userdata::get_acc_home(&key);
user["home"]["new_announcement_flag"] = (0).into();
user["home"]["announcement_seen_at"] = (global::timestamp() as i64).into();
userdata::save_acc_home(&key, user);
global::api(&req, Some(object!{
Api(Some(object!{
new_announcement_flag: 0
}))
}
async fn get_migration_code(req: HttpRequest, body: String) -> impl Responder {
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn get_migration_code(Body(body): Body) -> impl Responder {
let Some(user_id) = body["user_id"].as_i64() else { return global::api(&req, None); };
let Some(user_id) = body["user_id"].as_i64() else { return Api(None); };
let code = userdata::user::migration::get_acc_token(user_id);
global::api(&req, Some(object!{
Api(Some(object!{
"migrationCode": code
}))
}
async fn register_password(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn register_password(Session { key, body }: Session) -> impl Responder {
let user = userdata::get_acc(&key);
userdata::user::migration::save_acc_transfer(user["user"]["id"].as_i64().unwrap(), &body["pass"].to_string());
global::api(&req, Some(array![]))
Api(Some(array![]))
}
async fn verify_migration_code(req: HttpRequest, body: String) -> impl Responder {
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn verify_migration_code(Body(body): Body) -> impl Responder {
let user = userdata::user::migration::get_acc_transfer(&body["migrationCode"].to_string(), &body["pass"].to_string());
if !user["success"].as_bool().unwrap() || user["user_id"] == 0 {
return global::api(&req, None);
return Api(None);
}
let data_user = userdata::get_acc(&user["login_token"].to_string());
global::api(&req, Some(object!{
Api(Some(object!{
"user_id": user["user_id"].clone(),
"uuid": user["login_token"].to_string(),
"charge": data_user["gem"]["charge"].clone(),
"free": data_user["gem"]["free"].clone()
}))
}
async fn request_migration_code(req: HttpRequest, body: String) -> impl Responder {
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn request_migration_code(Body(body): Body) -> impl Responder {
let user = userdata::user::migration::get_acc_transfer(&body["migrationCode"].to_string(), &body["pass"].to_string());
if !user["success"].as_bool().unwrap() || user["user_id"] == 0 {
return global::api(&req, None);
return Api(None);
}
global::api(&req, Some(object!{
Api(Some(object!{
"twxuid": user["login_token"].to_string()
}))
}
async fn migration(req: HttpRequest, body: String) -> impl Responder {
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn migration(Body(body): Body) -> impl Responder {
let user = userdata::get_name_and_rank(body["user_id"].to_string().parse::<i64>().unwrap());
global::api(&req, Some(user))
Api(Some(user))
}
async fn detail(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn detail(req: HttpRequest, Session { key, body }: Session) -> impl Responder {
let friends = userdata::get_acc_friends(&key);
let protocol = crate::router::global::client_protocol_version(&req);
let mut user_detail_list = array![];
for data in body["user_ids"].members() {
let uid = data.as_i64().unwrap();
let user = guest::get_user(uid, &friends, guest::UserView::Detail);
let user = guest::get_user(uid, &friends, guest::UserView::Detail, protocol);
user_detail_list.push(user).unwrap();
}
global::api(&req, Some(object!{
Api(Some(object!{
user_detail_list: user_detail_list
}))
}
async fn sif(req: HttpRequest) -> impl Responder {
let key = global::get_login(req.headers(), "");
async fn sif(Login(key): Login) -> impl Responder {
let mut user = userdata::get_acc(&key);
let mut cards = userdata::get_acc_sif(&key);
@@ -286,13 +275,13 @@ async fn sif(req: HttpRequest) -> impl Responder {
userdata::save_acc(&key, user);
}
global::api(&req, Some(object!{
Api(Some(object!{
cards: cards
}))
}
async fn sifas_migrate(req: HttpRequest, _body: String) -> impl Responder {
global::api(&req, Some(object!{
async fn sifas_migrate() -> impl Responder {
Api(Some(object!{
"ss_migrate_status": 1,
"user": null,
"gift_list": null,
@@ -342,15 +331,13 @@ fn clean_sif_data(current: &JsonValue) -> JsonValue {
rv
}
async fn sif_migrate(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
async fn sif_migrate(Session { key, body }: Session) -> impl Responder {
let mut user = userdata::get_acc(&key);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
let id = generate_passcode_sha1(body["sif_user_id"].to_string(), body["password"].to_string());
let user_info = npps4_req(id).await;
if user_info.is_none() {
return global::api(&req, Some(object!{
return Api(Some(object!{
sif_migrate_status: 38
}));
}
@@ -365,7 +352,7 @@ async fn sif_migrate(req: HttpRequest, body: String) -> impl Responder {
userdata::save_acc_sif(&key, clean_sif_data(&user_info["units"]));
userdata::save_acc(&key, user.clone());
global::api(&req, Some(object!{
Api(Some(object!{
"sif_migrate_status": 0,
"user": user["user"].clone(),
"master_title_ids": user["master_title_ids"].clone()
@@ -373,17 +360,15 @@ async fn sif_migrate(req: HttpRequest, body: String) -> impl Responder {
}
async fn getregisteredplatformlist(req: HttpRequest, _body: String) -> impl Responder {
global::api(&req, Some(object!{
async fn getregisteredplatformlist() -> impl Responder {
Api(Some(object!{
"google": 0,
"apple": 0,
"twitter": 0
}))
}
async fn initialize(req: HttpRequest, body: String) -> impl Responder {
let key = global::get_login(req.headers(), &body);
let body = jzon::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
async fn initialize(Session { key, body }: Session) -> impl Responder {
let mut user = userdata::get_acc(&key);
let mut user2 = userdata::get_acc_home(&key);
@@ -421,7 +406,7 @@ async fn initialize(req: HttpRequest, body: String) -> impl Responder {
cardstoreward = array![40010001, 40020001, 40030001, 40040001, 40050001, 40060001, 40070001, 40080001, 40090001]; //liella
masterid += 9 + 9 + 12; //nijigasaki
} else {
return global::api(&req, None);
return Api(None);
}
masterid += userr;
@@ -455,12 +440,15 @@ async fn initialize(req: HttpRequest, body: String) -> impl Responder {
master_character_id: chosen_character,
exp: 1
}];
items::advance_mission(1158000 + crate::router::live::get_master_id(chosen_character), 1, 1500, &mut missions);
let bond = crate::router::live::bond_missions(chosen_character);
if !bond.is_empty() {
items::advance_mission(bond[0][1].as_i64().unwrap(), 1, bond[0][0].as_i64().unwrap(), &mut missions);
}
userdata::save_acc(&key, user.clone());
userdata::save_acc_chats(&key, chats);
userdata::save_acc_home(&key, user2);
userdata::save_acc_missions(&key, missions);
global::api(&req, Some(user["user"].clone()))
Api(Some(user["user"].clone()))
}

View File

@@ -7,7 +7,9 @@ use rand::RngExt;
use crate::router::global;
use crate::router::items;
use crate::router::card;
use crate::database::custom_song;
use crate::database::custom_card;
use crate::sql::SQLite;
use crate::include_file;
@@ -35,7 +37,8 @@ CREATE TABLE IF NOT EXISTS tokens (
CREATE TABLE IF NOT EXISTS userdata (
user_id BIGINT NOT NULL PRIMARY KEY,
userdata TEXT NOT NULL,
friend_request_disabled INT NOT NULL
friend_request_disabled INT NOT NULL,
protocol_version INT NOT NULL DEFAULT 0
);
CREATE TABLE IF NOT EXISTS userhome (
user_id BIGINT NOT NULL PRIMARY KEY,
@@ -84,8 +87,63 @@ CREATE TABLE IF NOT EXISTS webui (
);
INSERT OR IGNORE INTO exchange (user_id, exchange) SELECT user_id, '[]' FROM userdata;
").unwrap();
let is_updated = conn.prepare("SELECT protocol_version FROM userdata LIMIT 1;").is_ok();
if !is_updated {
println!("Upgrading userdata table");
conn.execute("ALTER TABLE userdata ADD COLUMN protocol_version INT NOT NULL DEFAULT 0;", []).unwrap();
}
}
// maybe we will use this later
/*
pub fn downgrade_account_cards(user: &JsonValue) -> JsonValue {
let mut rv = user.clone();
let mut cards = array![];
let mut ids = array![];
for data in user["card_list"].members() {
let id = data["master_card_id"].as_i64().unwrap_or(0);
let downgraded = guest::proxy_card_id(id);
// Whole characters share one downgrade, and the client can't hold the
// same card twice
if ids.contains(downgraded) {
continue;
}
ids.push(downgraded).unwrap();
let mut data = data.clone();
if downgraded != id {
data["id"] = downgraded.into();
data["master_card_id"] = downgraded.into();
}
cards.push(data).unwrap();
}
rv["card_list"] = cards;
for deck in rv["deck_list"].members_mut() {
let mut used = array![];
for slot in deck["main_card_ids"].members_mut() {
let id = guest::proxy_card_id(slot.as_i64().unwrap_or(0));
// Cards the downgrade merged away leave the slot empty
if id == 0 || used.contains(id) {
*slot = (0).into();
continue;
}
used.push(id).unwrap();
*slot = id.into();
}
}
for key in ["favorite_master_card_id", "guest_smile_master_card_id", "guest_cool_master_card_id", "guest_pure_master_card_id"] {
let id = rv["user"][key].as_i64().unwrap_or(0);
rv["user"][key] = guest::proxy_card_id(id).into();
}
rv
}
*/
fn acc_exists(uid: i64) -> bool {
DATABASE.lock_and_select("SELECT user_id FROM userdata WHERE user_id=?1", params!(uid)).is_ok()
}
@@ -120,10 +178,11 @@ fn add_user_to_database(uid: i64, user: JsonValue, user_home: JsonValue, user_mi
let missions = jzon::stringify(user_missions.clone());
let cards = jzon::stringify(sif_cards.clone());
DATABASE.lock_and_exec("INSERT INTO userdata (user_id, userdata, friend_request_disabled) VALUES (?1, ?2, ?3)", params!(
DATABASE.lock_and_exec("INSERT INTO userdata (user_id, userdata, friend_request_disabled, protocol_version) VALUES (?1, ?2, ?3, ?4)", params!(
uid,
jzon::stringify(user.clone()),
user["user"]["friend_request_disabled"].as_i32().unwrap()
user["user"]["friend_request_disabled"].as_i32().unwrap(),
if card::account_has_custom_cards(&user) { card::PROTOCOL_VERSION } else { 0 }
));
DATABASE.lock_and_exec("INSERT INTO userhome (user_id, userhome) VALUES (?1, ?2)", params!(
uid,
@@ -187,6 +246,13 @@ fn get_uid(token: &str) -> i64 {
data.parse::<i64>().unwrap_or(0)
}
// The account a login token belongs to, 0 when the token is unknown. The HTTP layer
// never needs this (it keys everything off the token itself), but the multi-live relay
// authenticates a {userId, token} pair and has to check the two agree.
pub fn uid_from_login_token(token: &str) -> i64 {
get_uid(token)
}
// Needed by gree
pub fn get_login_token(uid: i64) -> String {
let data = DATABASE.lock_and_select("SELECT token FROM tokens WHERE user_id=?1", params!(uid));
@@ -249,7 +315,7 @@ fn remove_deleted_custom_songs(user: &mut JsonValue) -> bool {
for key in ["live_list", "live_mission_list"] {
for data in user[key].members() {
let id = data["master_live_id"].as_i64().unwrap_or(0);
if id >= custom_song::FIRST_MUSIC_ID && !candidates.contains(id) {
if id >= custom_song::FIRST_MUSIC_ID && id <= custom_song::LAST_MUSIC_ID && !candidates.contains(id) {
candidates.push(id).unwrap();
}
}
@@ -274,10 +340,66 @@ fn remove_deleted_custom_songs(user: &mut JsonValue) -> bool {
true
}
// Deleted custom cards leave stale card_list rows behind - and a card_list id
// the client can't resolve aborts its whole login. Wiped lazily when the
// userdata is pulled, mirroring remove_deleted_custom_songs: only the runtime
// band is a candidate (official/imported ids never are), ids are never
// reused, so the wipe is final. A card that still exists but is unpublished
// is NOT wiped - existence is what's checked, and the catalog keeps serving
// owned ids (custom_card::owned_runtime_ids) so holders still resolve them
fn remove_deleted_custom_cards(user: &mut JsonValue) -> bool {
// Feature off: never touch custom_cards.db, leave userdata untouched
if crate::router::custom_card::disabled() {
return false;
}
let mut candidates = array![];
for data in user["card_list"].members() {
let id = data["master_card_id"].as_i64().unwrap_or(0);
if id >= custom_card::FIRST_CARD_ID && id <= custom_card::LAST_CARD_ID && !candidates.contains(id) {
candidates.push(id).unwrap();
}
}
if candidates.is_empty() {
return false;
}
let dead = custom_card::dead_card_ids(&candidates);
if dead.is_empty() {
return false;
}
let mut i = 0;
while i < user["card_list"].len() {
if dead.contains(user["card_list"][i]["master_card_id"].as_i64().unwrap_or(0)) {
user["card_list"].array_remove(i);
} else {
i += 1;
}
}
for deck in user["deck_list"].members_mut() {
for slot in deck["main_card_ids"].members_mut() {
if dead.contains(slot.as_i64().unwrap_or(0)) {
*slot = (0).into();
}
}
}
// A dead favorite/guest card repoints to the account's first remaining
// card (every account has its tutorial cards; the fallback can't trigger
// in practice)
let fallback = user["card_list"][0]["master_card_id"].as_i64().unwrap_or(10010001);
for key in ["favorite_master_card_id", "guest_smile_master_card_id", "guest_cool_master_card_id", "guest_pure_master_card_id"] {
if dead.contains(user["user"][key].as_i64().unwrap_or(0)) {
user["user"][key] = fallback.into();
}
}
true
}
pub fn get_acc(auth_key: &str) -> JsonValue {
let mut user = get_data(auth_key, "userdata");
cleanup_account(&mut user);
let mut changed = remove_deleted_custom_songs(&mut user);
if remove_deleted_custom_cards(&mut user) {
changed = true;
}
if items::lp_modification(&mut user, 0, false) {
changed = true;
@@ -325,6 +447,9 @@ pub fn get_acc_event(auth_key: &str) -> JsonValue {
pub fn get_acc_eventlogin(auth_key: &str) -> JsonValue {
get_data(auth_key, "eventloginbonus")
}
pub fn get_protocol_version(auth_key: &str) -> u32 {
DATABASE.lock_and_select("SELECT protocol_version FROM userdata WHERE user_id=?1", params!(get_key(auth_key))).unwrap_or_default().parse::<u32>().unwrap_or(0)
}
pub fn save_data(auth_key: &str, row: &str, data: JsonValue) {
let key = get_key(auth_key);
@@ -357,12 +482,57 @@ pub fn save_acc_eventlogin(auth_key: &str, data: JsonValue) {
pub fn save_server_data(auth_key: &str, data: JsonValue) {
save_data(auth_key, "server_data", data);
}
// Read-modify-write of one account's server_data as ONE atomic step.
//
// get_server_data + save_server_data open a connection each, so two requests for the same
// account both read the pre-state and the later write wins - which for a record that is
// meant to be spent exactly once (the started-live record /multi_live/end awards off) means
// both ends see it and both award. Everything here happens inside a single BEGIN IMMEDIATE
// transaction instead, so concurrent callers serialise and the second one observes what the
// first one wrote.
//
// `f` sees the parsed server_data and returns whatever the caller needs out of it; the
// (possibly mutated) value is written back before the transaction commits. get_key runs
// BEFORE the transaction because it can create the account, which writes on its own
// connection and would otherwise deadlock against our write lock.
//
// A database error yields T::default() rather than a panic: the callers all have a
// "nothing to spend" branch, which is the right answer when the record could not be read.
pub fn modify_server_data<T: Default>(auth_key: &str, f: impl FnOnce(&mut JsonValue) -> T) -> T {
let key = get_key(auth_key);
let rv = DATABASE.lock_and_transact(|conn| {
let raw: String = conn.query_row(
"SELECT server_data FROM server_data WHERE user_id=?1",
params!(key),
|row| row.get(0)
)?;
let mut data = jzon::parse(&raw).unwrap_or(JsonValue::Null);
let rv = f(&mut data);
conn.execute(
"UPDATE server_data SET server_data=?1 WHERE user_id=?2",
params!(jzon::stringify(data), key)
)?;
Ok(rv)
});
match rv {
Ok(rv) => rv,
Err(err) => {
println!("modify_server_data: {} for user {}", err, key);
T::default()
}
}
}
pub fn save_acc_chats(auth_key: &str, data: JsonValue) {
save_data(auth_key, "chats", data);
}
pub fn save_acc_exchange(auth_key: &str, data: JsonValue) {
save_data(auth_key, "exchange", data);
}
pub fn save_protocol_version(auth_key: &str, version: u32) {
DATABASE.lock_and_exec("UPDATE userdata SET protocol_version=?1 WHERE user_id=?2 AND protocol_version<?1", params!(version as i64, get_key(auth_key)));
}
pub fn save_acc_sif(auth_key: &str, data: JsonValue) {
save_data(auth_key, "sifcards", data);
}
@@ -672,7 +842,10 @@ mod tests {
let private_id = custom_song::next_music_id();
custom_song::insert_song(private_id, 1, &object!{music_id: private_id}, "private", &array![], false);
for id in [1001, deleted_id, private_id] {
// 1100101 is a real stock live-id shape (7-digit, >= FIRST_MUSIC_ID): it
// must survive the custom-song wipe, unlike an unrealistic sub-10000 id
let stock_id = 1100101;
for id in [stock_id, deleted_id, private_id] {
user["live_list"].push(object!{
master_live_id: id,
level: 4,
@@ -699,7 +872,7 @@ mod tests {
assert!(!user["live_list"].members().any(|data| data["master_live_id"] == deleted_id));
assert!(!user["live_mission_list"].members().any(|data| data["master_live_id"] == deleted_id));
// Official records are untouchable, invisible-but-alive songs survive
assert!(user["live_list"].members().any(|data| data["master_live_id"] == 1001));
assert!(user["live_list"].members().any(|data| data["master_live_id"] == stock_id));
assert!(user["live_list"].members().any(|data| data["master_live_id"] == private_id));
assert_eq!(user["live_list"].len(), 2);
assert_eq!(user["live_mission_list"].len(), 2);
@@ -709,4 +882,57 @@ mod tests {
assert!(!stored["live_list"].members().any(|data| data["master_live_id"] == deleted_id));
assert!(!stored["live_mission_list"].members().any(|data| data["master_live_id"] == deleted_id));
}
// User draws a custom card -> the card is deleted -> the next userdata
// pull drops the dead card from card_list, empties its deck slots and
// repoints favorite/guest references; unpublished-but-alive cards survive
#[test]
fn deleted_custom_card_records_are_wiped_on_pull() {
let _lock = crate::runtime::lock_test_data_path();
let token = "userdata-card-test-token";
let mut user = get_acc(token);
let deleted_id = custom_card::next_card_id();
custom_card::insert_card(deleted_id, 1001, 1, &jzon::object!{ "master_card_id": deleted_id, "rarity": 1 }, true, true);
// Exists but was unpublished - must survive the wipe
let unpublished_id = custom_card::next_card_id();
custom_card::insert_card(unpublished_id, 1001, 1, &jzon::object!{ "master_card_id": unpublished_id, "rarity": 1 }, false, false);
for id in [deleted_id, unpublished_id] {
user["card_list"].push(jzon::object!{
"id": id,
"master_card_id": id,
"exp": 0,
"skill_exp": 0,
"evolve": [],
"created_date_time": 0
}).unwrap();
}
user["deck_list"][0]["main_card_ids"][0] = deleted_id.into();
user["deck_list"][0]["main_card_ids"][1] = unpublished_id.into();
user["user"]["favorite_master_card_id"] = deleted_id.into();
save_acc(token, user);
// Both cards still exist: nothing gets wiped
let user = get_acc(token);
assert!(user["card_list"].members().any(|data| data["master_card_id"] == deleted_id));
custom_card::delete_card(deleted_id);
// The next pull drops the dead card's records and only those
let user = get_acc(token);
assert!(!user["card_list"].members().any(|data| data["master_card_id"] == deleted_id));
assert!(user["card_list"].members().any(|data| data["master_card_id"] == unpublished_id));
assert_eq!(user["deck_list"][0]["main_card_ids"][0].as_i64(), Some(0));
assert_eq!(user["deck_list"][0]["main_card_ids"][1].as_i64(), Some(unpublished_id));
// The dead favorite repointed to the first remaining card
assert_eq!(user["user"]["favorite_master_card_id"].as_i64(), user["card_list"][0]["master_card_id"].as_i64());
// The wipe persisted to the database, not just the served copy
let stored = get_data(token, "userdata");
assert!(!stored["card_list"].members().any(|data| data["master_card_id"] == deleted_id));
custom_card::delete_card(unpublished_id);
}
}

View File

@@ -1,13 +1,29 @@
{
"point_ranking": {
"rank": 0,
"point": 0
},
"score_ranking": [],
"member_ranking": [],
"lottery_box": [],
"score_ranking": {
"all_rank": 0,
"group_rank": 0,
"score": 0
},
"member_ranking": {
"master_character_id": 0,
"rank": 0,
"point": 0
},
"lottery_box": {
"master_lottery_id": 0,
"reset_count": 0,
"draw_count_list": []
},
"mission_list": [],
"policy_agreement": 0,
"incentive_lottery": 0,
"is_disconnected": 0,
"help_count": 0,
"penalty_remaining_time": 0,
"star_event": {
"star_level": 0,
"last_event_star_level": 0,

View File

@@ -38,6 +38,12 @@ pub fn get_acc_transfer(token: &str, password: &str) -> JsonValue {
object!{success: false}
}
// Used by gree
pub fn transfer_code_exists(token: &str) -> bool {
let database = userdata::get_userdata_database();
database.lock_and_select("SELECT password FROM migration WHERE token=?1", params!(token)).is_ok()
}
pub fn save_acc_transfer(uid: i64, password: &str) -> String {
let database = userdata::get_userdata_database();
let token = if let Ok(value) = database.lock_and_select("SELECT token FROM migration WHERE user_id=?1", params!(uid)) {

View File

@@ -1,6 +1,513 @@
use actix_web::{HttpResponse, HttpRequest};
use actix_web::{web, HttpRequest, HttpResponse, http::header::ContentType};
use actix_multipart::Multipart;
use futures_util::TryStreamExt;
use jzon::{array, object, JsonValue};
use include_dir::{include_dir, Dir};
use std::collections::{HashMap, HashSet};
pub fn announcement(_req: HttpRequest) -> HttpResponse {
HttpResponse::Ok().body("sif2 is back!")
use crate::router::{global, userdata, webui};
use crate::database::{announcements, permissions};
use crate::database::announcements::Banner;
static ASSETS: Dir<'_> = include_dir!("web_assets/announcement/");
const MAX_BANNER_BYTES: usize = 8 * 1024 * 1024;
const MAX_BANNER_DIM: u32 = 8192;
const MAX_SCALED_PIXELS: u64 = 16 * 1024 * 1024;
const BANNER_W: u32 = 420;
const BANNER_H: u32 = 168;
const CATEGORY_LABELS: &[(i64, &str, &str)] = &[
(1, "notice", "お知らせ"),
(2, "update", "アップデート"),
(3, "bug", "不具合")
];
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.service(
web::scope("/web/announcement")
.route("", web::get().to(list))
.route("/detail", web::get().to(detail))
.route("/bulkRead", web::get().to(bulk_read))
.route("/assets/{file}", web::get().to(asset))
.route("/banner/{id}", web::get().to(banner_image))
);
cfg.service(
web::scope("/announcement")
.route("/list", web::get().to(admin_list))
.route("/create", web::post().to(create))
.route("/update", web::post().to(update))
.route("/delete", web::post().to(delete))
.route("/banner/{id}", web::get().to(admin_banner_image))
);
}
fn disabled() -> bool {
crate::get_args().hidden
}
fn query_i64(req: &HttpRequest, key: &str, def: i64) -> i64 {
req.query_string()
.split('&')
.find(|s| s.starts_with(&format!("{key}=")))
.and_then(|s| s.split('=').nth(1))
.and_then(|v| v.parse::<i64>().ok())
.unwrap_or(def)
}
fn player_key(req: &HttpRequest) -> Option<String> {
let key = global::get_login(req.headers(), "");
if key.is_empty() { None } else { Some(key) }
}
fn read_set(req: &HttpRequest) -> HashSet<i64> {
match player_key(req) {
Some(key) => { println!("Player has key"); userdata::get_acc_home(&key)["home"]["read_announcement_ids"].members().filter_map(|v| v.as_i64()).collect()},
None => { println!("No player key"); HashSet::new() }
}
}
fn mark_read(key: &str, ids: &[i64]) {
let mut user = userdata::get_acc_home(key);
let mut set: HashSet<i64> = user["home"]["read_announcement_ids"].members().filter_map(|v| v.as_i64()).collect();
for id in ids {
set.insert(*id);
}
let mut sorted: Vec<i64> = set.into_iter().collect();
sorted.sort();
let mut arr = array![];
for id in sorted {
arr.push(id).unwrap();
}
user["home"]["read_announcement_ids"] = arr;
userdata::save_acc_home(key, user);
}
fn display_date(published_at: i64) -> String {
if published_at <= 0 {
return String::new();
}
let s = global::format_datetime(published_at as u64);
format!("{}/{}/{} {}", &s[0..4], &s[5..7], &s[8..10], &s[11..16])
}
fn page_head() -> String {
String::from(r#"<!DOCTYPE html>n<html lang="ja-JP"><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta name="viewport" content="width=320, initial-scale=1.0, user-scalable=no">
<meta name="format-detection" content="telephone=no">
<meta name="robots" content="noindex,nofollow">
<link rel="stylesheet" href="/web/announcement/assets/sanitize.css" type="text/css">
<link rel="stylesheet" href="/web/announcement/assets/news_common.css" type="text/css">
<style>#tab div.on{background-image:none;background-color:#f93981;border-radius:0.6vw;}#news_list hr,#detail hr{background-image:none;background-color:#dfe6e6;}</style>
<script src="/web/announcement/assets/jquery-3.6.0.min.js"></script>
<script>var clicked=false;$(function(){$("a.once").on('click',function(){if(clicked){return false;}clicked=true;return true;});});window.addEventListener('pageshow',function(e){if(e.persisted){clicked=false;}});</script>
</head><body>"#)
}
fn page_foot() -> String {
String::from("</body></html>")
}
fn tab_bar(active: i64, read: &HashSet<i64>, bulk: bool) -> String {
let mut tabs = String::new();
for (cat, class, label) in CATEGORY_LABELS {
let unread = !bulk && announcements::visible_ids(Some(*cat)).iter().any(|id| !read.contains(id));
let badge = if unread {
String::from("<span class=\"new\"><img class=\"bg_badge_eff\" src=\"/web/announcement/assets/news_bg_badge_eff.png\"><img class=\"bg_badge\" src=\"/web/announcement/assets/news_bg_badge.png\"></span>")
} else {
String::new()
};
let inner = if *cat == active {
format!("<div class=\"on\">{label}</div>")
} else {
format!("<a class=\"once\" href=\"/web/announcement?category={cat}\">{label}</a>")
};
tabs.push_str(&format!("<div class=\"{class}\">{badge}{inner}</div>"));
}
let read_btn = if bulk {
String::from("<div class=\"read_btn\"><img class=\"off\" src=\"/web/announcement/assets/news_btn_bulk.png\"></div>")
} else {
format!("<div class=\"read_btn\"><a class=\"once\" href=\"/web/announcement/bulkRead?category={active}&amp;page=1\"><img src=\"/web/announcement/assets/news_btn_bulk.png\"></a></div>")
};
format!("<div id=\"header\"><div id=\"tab\">{tabs}{read_btn}</div></div><div id=\"tab_bottom\"></div>")
}
fn render_list(category: i64, read: &HashSet<i64>, bulk: bool) -> String {
let mut list = String::new();
let items = announcements::list_category(category);
if items.is_empty() {
list.push_str(&format!(r#"
<div class="info_title"><span class="title_text">No announcements right now</span></div>
"#));
}
for item in items.members() {
let id = item["id"].as_i64().unwrap_or(0);
let banner_url = if item["has_banner"].as_bool().unwrap_or(false) {
format!("/web/announcement/banner/{id}.png")
} else {
String::from("/web/announcement/assets/news_banner_generic_news.png")
};
let kind = item["type"].as_str().unwrap_or("news");
let date = display_date(item["published_at"].as_i64().unwrap_or(0));
let update_text = if item["updated"].as_bool().unwrap_or(false) { "<span class=\"update_text\">- update</span>" } else { "" };
let new_badge = if !bulk && !read.contains(&id) {
String::from("<div class=\"info_new_image\"><img class=\"new\" src=\"/web/announcement/assets/news_icon_new.png\"></div>")
} else {
String::new()
};
let title = item["title"].as_str().unwrap_or("");
list.push_str(&format!(r#"
<li class="list_area"><div class="information_area"><div id="{id}" class="anchor"></div>
<a href="/web/announcement/detail?announcement_id={id}&amp;page=1" class="news">
<div class="main_image"><span class="banner"><img src="{banner_url}"></span></div>
<div class="information">
<div class="info_type_image"><img class="tag" src="/web/announcement/assets/news_icon_{kind}.png"></div>
<div class="info_date"><span class="date_text">{date}</span>{update_text}</div>
{new_badge}
<div class="clear"></div>
<div class="info_title"><span class="title_text">{title}</span></div>
</div>
<div class="arrow_image"><img class="arrow" src="/web/announcement/assets/news_img_arrow.png"></div>
</a></div><div class="clear"></div><hr></li>
"#));
}
format!("{}{}<div id=\"news_list\"><ul>{}</ul><div id=\"page_area\"><div id=\"paging\"><span class=\"page off\">1</span></div></div></div>{}",
page_head(), tab_bar(category, read, bulk), list, page_foot())
}
fn render_detail(item: &JsonValue, read: &HashSet<i64>) -> String {
let category = item["category"].as_i64().unwrap_or(1);
let title = item["title"].as_str().unwrap_or("");
let date = display_date(item["published_at"].as_i64().unwrap_or(0));
let body = item["body"].as_str().unwrap_or("");
let banner = if item["has_banner"].as_bool().unwrap_or(false) {
let id = item["id"].as_i64().unwrap_or(0);
format!("<div class=\"detail_image\" style=\"display:block\"><img src=\"/web/announcement/banner/{id}.png\"></div>")
} else {
String::new()
};
format!("{}{}<div id=\"detail\"><div class=\"detail_text\"><div class=\"title\">{title}</div><div class=\"date\">{date}</div>{banner}<hr class=\"hr_detail\">{body}</div></div>{}",
page_head(), tab_bar(category, read, false), page_foot())
}
fn html(body: String) -> HttpResponse {
HttpResponse::Ok()
.insert_header(ContentType::html())
.body(body)
}
fn redirect_list(category: i64) -> HttpResponse {
HttpResponse::Found()
.insert_header(("Location", format!("/web/announcement?category={category}")))
.body("")
}
async fn list(req: HttpRequest) -> HttpResponse {
let category = query_i64(&req, "category", 1);
let category = if announcements::is_valid_category(category) { category } else { 1 };
html(render_list(category, &read_set(&req), false))
}
async fn detail(req: HttpRequest) -> HttpResponse {
let id = query_i64(&req, "announcement_id", 0);
let Some(item) = announcements::get(id) else {
return redirect_list(1);
};
if !item["visible"].as_bool().unwrap_or(false) {
return redirect_list(item["category"].as_i64().unwrap_or(1));
}
if let Some(key) = player_key(&req) {
mark_read(&key, &[id]);
}
html(render_detail(&item, &read_set(&req)))
}
async fn bulk_read(req: HttpRequest) -> HttpResponse {
let category = query_i64(&req, "category", 1);
let category = if announcements::is_valid_category(category) { category } else { 1 };
if let Some(key) = player_key(&req) {
mark_read(&key, &announcements::visible_ids(Some(category)));
}
html(render_list(category, &read_set(&req), true))
}
async fn asset(req: HttpRequest) -> HttpResponse {
let file = req.match_info().get("file").unwrap_or("");
let Some(file) = ASSETS.get_file(file) else {
return HttpResponse::NotFound().finish();
};
let body = file.contents();
let mime = mime_guess::from_path(file.path()).first_or_octet_stream();
HttpResponse::Ok()
.insert_header(ContentType(mime))
.insert_header(("content-length", body.len()))
.body(body)
}
fn png_response(bytes: Option<Vec<u8>>) -> HttpResponse {
match bytes {
Some(bytes) => HttpResponse::Ok()
.insert_header(ContentType::png())
.insert_header(("content-length", bytes.len()))
.body(bytes),
None => HttpResponse::NotFound().finish()
}
}
fn banner_id(req: &HttpRequest) -> i64 {
req.match_info().get("id").unwrap_or("").trim_end_matches(".png").parse::<i64>().unwrap_or(0)
}
async fn banner_image(req: HttpRequest) -> HttpResponse {
png_response(announcements::get_public_banner(banner_id(&req)))
}
async fn admin_banner_image(req: HttpRequest) -> HttpResponse {
if disabled() {
return HttpResponse::NotFound().finish();
}
if manager_uid(&req).filter(|uid| permissions::has(*uid, permissions::ANNOUNCEMENT_MANAGE)).is_none() {
return HttpResponse::NotFound().finish();
}
png_response(announcements::get_banner(banner_id(&req)))
}
type Fields = HashMap<String, Vec<u8>>;
async fn read_multipart(mut payload: Multipart) -> Result<Fields, String> {
let mut fields = Fields::new();
let mut total = 0usize;
while let Some(mut field) = payload.try_next().await.map_err(|e| e.to_string())? {
let name = field.name().unwrap_or("").to_string();
let mut data = Vec::new();
while let Some(chunk) = field.try_next().await.map_err(|e| e.to_string())? {
total += chunk.len();
if total > MAX_BANNER_BYTES {
return Err(format!("Upload exceeds the {} MB limit", MAX_BANNER_BYTES / (1024 * 1024)));
}
data.extend_from_slice(&chunk);
}
fields.insert(name, data);
}
Ok(fields)
}
fn field_str(fields: &Fields, key: &str) -> String {
String::from_utf8_lossy(fields.get(key).map(|v| v.as_slice()).unwrap_or(&[])).trim().to_string()
}
fn field_flag(fields: &Fields, key: &str) -> bool {
matches!(field_str(fields, key).to_lowercase().as_str(), "1" | "true" | "on")
}
fn file_of<'a>(fields: &'a Fields, key: &str) -> Option<&'a Vec<u8>> {
fields.get(key).filter(|v| !v.is_empty())
}
fn process_banner(bytes: &[u8]) -> Result<Vec<u8>, String> {
let img = image::load_from_memory(bytes).map_err(|_| String::from("The banner is not a decodable image (png, jpg and webp work)"))?;
if img.width() > MAX_BANNER_DIM || img.height() > MAX_BANNER_DIM {
return Err(format!("The banner is {}x{} - neither side may exceed {}px", img.width(), img.height(), MAX_BANNER_DIM));
}
let img = img.to_rgba8();
let scale = f64::max(BANNER_W as f64 / img.width() as f64, BANNER_H as f64 / img.height() as f64);
let scaled_w = ((img.width() as f64 * scale).round() as u32).max(1);
let scaled_h = ((img.height() as f64 * scale).round() as u32).max(1);
if (scaled_w as u64) * (scaled_h as u64) > MAX_SCALED_PIXELS {
return Err(format!("The banner is too far from the {}x{} banner shape to be cropped", BANNER_W, BANNER_H));
}
let scaled = image::imageops::resize(&img, scaled_w, scaled_h, image::imageops::FilterType::Lanczos3);
let x = (scaled.width() - BANNER_W.min(scaled.width())) / 2;
let y = (scaled.height() - BANNER_H.min(scaled.height())) / 2;
let cropped = image::imageops::crop_imm(&scaled, x, y, BANNER_W, BANNER_H).to_image();
let mut rv = Vec::new();
image::DynamicImage::ImageRgba8(cropped).write_to(&mut std::io::Cursor::new(&mut rv), image::ImageFormat::Png).map_err(|e| e.to_string())?;
Ok(rv)
}
fn send_json(resp: JsonValue) -> HttpResponse {
HttpResponse::Ok()
.insert_header(ContentType::json())
.body(jzon::stringify(resp))
}
fn manager_uid(req: &HttpRequest) -> Option<i64> {
let token = webui::get_login_token(req)?;
let login_token = userdata::webui_login_token(&token)?;
userdata::get_acc(&login_token)["user"]["id"].as_i64()
}
fn require_manager(req: &HttpRequest) -> Result<i64, HttpResponse> {
if disabled() {
return Err(HttpResponse::NotFound().finish());
}
let Some(uid) = manager_uid(req) else {
return Err(webui::error("Not logged in"));
};
if !permissions::has(uid, permissions::ANNOUNCEMENT_MANAGE) {
return Err(webui::error("You do not have permission to manage announcements"));
}
Ok(uid)
}
async fn admin_list(req: HttpRequest) -> HttpResponse {
if let Err(resp) = require_manager(&req) {
return resp;
}
let mut categories = array![];
for (id, key, label) in CATEGORY_LABELS {
categories.push(object!{ id: *id, key: *key, label: *label }).unwrap();
}
let mut types = array![];
for kind in announcements::TYPES {
types.push(*kind).unwrap();
}
send_json(object!{
result: "OK",
data: {
announcements: announcements::get_all(),
categories: categories,
types: types
}
})
}
async fn create(req: HttpRequest, payload: Multipart) -> HttpResponse {
let uid = match require_manager(&req) {
Ok(uid) => uid,
Err(resp) => return resp
};
let fields = match read_multipart(payload).await {
Ok(fields) => fields,
Err(e) => return webui::error(&e)
};
match save_new(uid, &fields) {
Ok(id) => send_json(object!{ result: "OK", id: id }),
Err(e) => webui::error(&e)
}
}
fn published_at_of(raw: &str) -> i64 {
if raw.is_empty() {
global::timestamp() as i64
} else {
global::parse_datetime(raw).map(|t| t as i64).unwrap_or_else(|| global::timestamp() as i64)
}
}
fn save_new(uid: i64, fields: &Fields) -> Result<i64, String> {
let category = field_str(fields, "category").parse::<i64>().unwrap_or(0);
if !announcements::is_valid_category(category) {
return Err(String::from("Invalid category"));
}
let kind = field_str(fields, "type");
if !announcements::is_valid_type(&kind) {
return Err(String::from("Invalid type"));
}
let title = field_str(fields, "title");
if title.is_empty() {
return Err(String::from("A title is required"));
}
let body = field_str(fields, "body");
let banner = match file_of(fields, "banner") {
Some(bytes) => Some(process_banner(bytes)?),
None => None
};
Ok(announcements::create(category, &kind, &title, &body, banner, field_flag(fields, "updated"), !field_flag(fields, "hidden"), published_at_of(&field_str(fields, "published_at")), uid))
}
async fn update(req: HttpRequest, payload: Multipart) -> HttpResponse {
if let Err(resp) = require_manager(&req) {
return resp;
}
let fields = match read_multipart(payload).await {
Ok(fields) => fields,
Err(e) => return webui::error(&e)
};
match save_update(&fields) {
Ok(id) => send_json(object!{ result: "OK", id: id }),
Err(e) => webui::error(&e)
}
}
fn save_update(fields: &Fields) -> Result<i64, String> {
let id = field_str(fields, "id").parse::<i64>().unwrap_or(0);
let Some(stored) = announcements::get(id) else {
return Err(String::from("That announcement no longer exists"));
};
let category = field_str(fields, "category").parse::<i64>().unwrap_or(0);
if !announcements::is_valid_category(category) {
return Err(String::from("Invalid category"));
}
let kind = field_str(fields, "type");
if !announcements::is_valid_type(&kind) {
return Err(String::from("Invalid type"));
}
let title = field_str(fields, "title");
if title.is_empty() {
return Err(String::from("A title is required"));
}
let body = field_str(fields, "body");
let banner = if let Some(bytes) = file_of(fields, "banner") {
Banner::Set(process_banner(bytes)?)
} else if field_flag(fields, "remove_banner") {
Banner::Clear
} else {
Banner::Keep
};
let published_at = if field_str(fields, "published_at").is_empty() {
stored["published_at"].as_i64().unwrap_or_else(|| global::timestamp() as i64)
} else {
published_at_of(&field_str(fields, "published_at"))
};
announcements::update(id, category, &kind, &title, &body, banner, field_flag(fields, "updated"), !field_flag(fields, "hidden"), published_at);
Ok(id)
}
async fn delete(req: HttpRequest, body: String) -> HttpResponse {
if let Err(resp) = require_manager(&req) {
return resp;
}
let body = jzon::parse(&body).unwrap_or(object!{});
let id = body["id"].as_i64().unwrap_or(0);
if announcements::get(id).is_none() {
return webui::error("That announcement no longer exists");
}
announcements::delete(id);
send_json(object!{ result: "OK" })
}
#[cfg(test)]
mod tests {
use super::*;
fn png(w: u32, h: u32) -> Vec<u8> {
let img = image::RgbaImage::from_pixel(w, h, image::Rgba([120, 90, 200, 255]));
let mut rv = Vec::new();
image::DynamicImage::ImageRgba8(img).write_to(&mut std::io::Cursor::new(&mut rv), image::ImageFormat::Png).unwrap();
rv
}
#[test]
fn banners_are_cropped_to_the_official_size() {
for (w, h) in [(420, 168), (1200, 300), (300, 1200), (64, 64)] {
let out = process_banner(&png(w, h)).unwrap();
let decoded = image::load_from_memory(&out).unwrap();
assert_eq!((decoded.width(), decoded.height()), (BANNER_W, BANNER_H), "source {}x{}", w, h);
}
assert!(process_banner(b"not an image").unwrap_err().contains("not a decodable image"));
}
#[test]
fn extreme_sources_are_refused_before_the_resize_allocates() {
let err = process_banner(&png(9000, 32)).unwrap_err();
assert!(err.contains("9000x32"), "got {}", err);
let err = process_banner(&png(24, 6000)).unwrap_err();
assert!(err.contains("banner shape"), "got {}", err);
}
}

View File

@@ -4,12 +4,13 @@ use actix_web::{
http::header::HeaderValue,
http::header::ContentType
};
use jzon::{JsonValue, object};
use jzon::{array, JsonValue, object};
use lazy_static::lazy_static;
use include_dir::{include_dir, Dir};
use std::fs;
use crate::include_file;
use crate::database::permissions;
use crate::router::{userdata, items};
use crate::router::databases::csv::Region;
@@ -30,6 +31,12 @@ pub fn get_login_token(req: &HttpRequest) -> Option<String> {
Some(cookies.split("ew_token=").last().unwrap_or("").split(';').collect::<Vec<_>>()[0].to_string())
}
fn session_uid(req: &HttpRequest) -> Option<i64> {
let token = get_login_token(req)?;
let login_token = userdata::webui_login_token(&token)?;
userdata::get_acc(&login_token)["user"]["id"].as_i64()
}
pub fn error(msg: &str) -> HttpResponse {
let resp = object!{
result: "ERR",
@@ -221,6 +228,8 @@ pub fn server_info(_req: HttpRequest) -> HttpResponse {
data: {
account_import: get_config()["import"].as_bool().unwrap(),
custom_songs: !crate::router::custom_song::disabled(),
custom_cards: !crate::router::custom_card::disabled(),
custom_3dmv: !crate::router::custom_3dmv::disabled(),
links: {
global: args.global_android,
japan: args.japan_android,
@@ -358,6 +367,196 @@ pub fn list_items(_req: HttpRequest) -> HttpResponse {
.body(jzon::stringify(ITEM.clone()))
}
lazy_static! {
static ref CHARACTER_CHOICES: JsonValue = {
let mut rv = jzon::array![];
for row in crate::router::databases::csv::table(Region::Jp, "character").members() {
let Some(id) = row["id"].as_i64() else { continue; };
rv.push(object!{
id: id,
name: row["name"].clone(),
name_en: row["nameEn"].clone(),
category: if id >= 5000 { "imported" } else { "official" }
}).unwrap();
}
rv
};
static ref SKILL_CENTER_CHOICES: JsonValue = {
let mut en_rows = object!{};
for row in crate::router::databases::csv::table(Region::En, "skill_center").members() {
en_rows[row["id"].to_string()] = row.clone();
}
let mut rv = jzon::array![];
for row in crate::router::databases::csv::table(Region::Jp, "skill_center").members() {
let en = &en_rows[row["id"].to_string()];
rv.push(object!{
id: row["id"].clone(),
name: row["name"].clone(),
name_en: en["name"].clone(),
detail_text: row["detailText"].clone(),
detail_text_en: en["detailText"].clone()
}).unwrap();
}
rv
};
}
pub fn list_characters(req: HttpRequest) -> HttpResponse {
let Some(uid) = session_uid(&req) else {
return error("Not logged in");
};
let mut characters = CHARACTER_CHOICES.clone();
if !crate::router::custom_card::disabled() {
for character in crate::database::custom_card::get_selectable_characters(uid).members() {
characters.push(object!{
id: character["master_character_id"].clone(),
name: character["name"].clone(),
name_en: character["name_en"].clone(),
category: "custom"
}).unwrap();
}
}
let resp = object!{
result: "OK",
characters: characters
};
HttpResponse::Ok()
.insert_header(ContentType::json())
.body(jzon::stringify(resp))
}
pub fn list_skill_centers(req: HttpRequest) -> HttpResponse {
if session_uid(&req).is_none() {
return error("Not logged in");
}
let resp = object!{
result: "OK",
skill_centers: SKILL_CENTER_CHOICES.clone()
};
HttpResponse::Ok()
.insert_header(ContentType::json())
.body(jzon::stringify(resp))
}
pub fn custom_card_limits(req: HttpRequest) -> HttpResponse {
if session_uid(&req).is_none() {
return error("Not logged in");
}
let resp = object!{
result: "OK",
data: crate::router::custom_card::upload_limits()
};
HttpResponse::Ok()
.insert_header(ContentType::json())
.body(jzon::stringify(resp))
}
pub fn custom_3dmv_limits(req: HttpRequest) -> HttpResponse {
if crate::router::custom_3dmv::disabled() {
return HttpResponse::NotFound().finish();
}
if session_uid(&req).is_none() {
return error("Not logged in");
}
let resp = object!{
result: "OK",
data: crate::router::custom_3dmv::upload_limits()
};
HttpResponse::Ok()
.insert_header(ContentType::json())
.body(jzon::stringify(resp))
}
pub fn my_scopes(req: HttpRequest) -> HttpResponse {
let Some(uid) = session_uid(&req) else {
return error("Not logged in");
};
let resp = object!{
result: "OK",
data: {
uid: uid,
scopes: permissions::get_user_permissions(uid),
can_upload_cards: permissions::has(uid, permissions::CARD_UPLOAD),
can_publish_cards: permissions::has(uid, permissions::CARD_PUBLISH),
can_edit_any_cards: permissions::has(uid, permissions::CARD_EDIT),
can_edit_any_3dmv: permissions::has(uid, permissions::MV_EDIT),
can_manage_permissions: permissions::has(uid, permissions::PERMISSION_GRANT)
|| permissions::has(uid, permissions::PERMISSION_REVOKE),
can_manage_announcements: permissions::has(uid, permissions::ANNOUNCEMENT_MANAGE)
}
};
HttpResponse::Ok()
.insert_header(ContentType::json())
.body(jzon::stringify(resp))
}
pub fn list_permissions(req: HttpRequest) -> HttpResponse {
let Some(uid) = session_uid(&req) else {
return error("Not logged in");
};
let can_grant = permissions::has(uid, permissions::PERMISSION_GRANT);
let can_revoke = permissions::has(uid, permissions::PERMISSION_REVOKE);
if !can_grant && !can_revoke {
return error("You do not have permission to manage scopes");
}
let mut available = array![];
for scope in permissions::SCOPES {
available.push(*scope).unwrap();
}
let resp = object!{
result: "OK",
data: {
uid: uid,
can_grant: can_grant,
can_revoke: can_revoke,
scopes: permissions::get_user_permissions(uid),
available: available,
grants: permissions::grants()
}
};
HttpResponse::Ok()
.insert_header(ContentType::json())
.body(jzon::stringify(resp))
}
pub fn grant_permission(req: HttpRequest, body: String) -> HttpResponse {
let Some(uid) = session_uid(&req) else {
return error("Not logged in");
};
let body = jzon::parse(&body).unwrap_or(object!{});
let target = body["uid"].as_i64().unwrap_or(0);
let scope = body["scope"].to_string();
if userdata::get_login_token(target) == String::new() {
return error(&format!("User {} does not exist", target));
}
if let Err(e) = permissions::grant(target, &scope, uid) {
return error(&e);
}
let resp = object!{
result: "OK"
};
HttpResponse::Ok()
.insert_header(ContentType::json())
.body(jzon::stringify(resp))
}
pub fn revoke_permission(req: HttpRequest, body: String) -> HttpResponse {
let Some(uid) = session_uid(&req) else {
return error("Not logged in");
};
let body = jzon::parse(&body).unwrap_or(object!{});
if let Err(e) = permissions::revoke(body["uid"].as_i64().unwrap_or(0), &body["scope"].to_string(), uid) {
return error(&e);
}
let resp = object!{
result: "OK"
};
HttpResponse::Ok()
.insert_header(ContentType::json())
.body(jzon::stringify(resp))
}
pub fn cheat(req: HttpRequest, _body: String) -> HttpResponse {
let token = get_login_token(&req);
if token.is_none() {
@@ -397,3 +596,37 @@ pub fn cheat(req: HttpRequest, _body: String) -> HttpResponse {
.insert_header(ContentType::json())
.body(jzon::stringify(resp))
}
// rest of file is tests that ai wrote
// I didn't read through them because I don't super care about tests but they probably do something
#[cfg(test)]
mod tests {
use super::*;
// The picker lists the card form searches by name: every baked character
// (official + SIF1 import, badged apart) and every skill_center row with
// its JP and EN display strings
#[test]
fn character_and_skill_center_choices_are_wellformed() {
assert!(CHARACTER_CHOICES.len() > 200, "got {}", CHARACTER_CHOICES.len());
let honoka = CHARACTER_CHOICES.members().find(|row| row["id"] == 1001).unwrap();
assert_eq!(honoka["name_en"].as_str(), Some("Honoka Kosaka"));
assert_eq!(honoka["category"].as_str(), Some("official"));
let imported = CHARACTER_CHOICES.members().find(|row| row["id"] == 5153).unwrap();
assert_eq!(imported["category"].as_str(), Some("imported"));
for row in CHARACTER_CHOICES.members() {
assert!(row["id"].as_i64().unwrap() > 0);
assert!(!row["name"].to_string().is_empty());
}
assert!(SKILL_CENTER_CHOICES.len() > 60, "got {}", SKILL_CENTER_CHOICES.len());
let first = SKILL_CENTER_CHOICES.members().find(|row| row["id"] == 100001).unwrap();
assert_eq!(first["name_en"].as_str(), Some("Smile Heart"));
assert_eq!(first["detail_text_en"].as_str(), Some("Smile points increased by 3%"));
assert!(!first["name"].to_string().is_empty());
assert!(!first["detail_text"].to_string().is_empty());
}
}

View File

@@ -7,9 +7,9 @@ use std::fs;
lazy_static! {
static ref RUNNING: RwLock<bool> = RwLock::new(false);
static ref DATAPATH: RwLock<String> = RwLock::new(String::new());
static ref OWNERS: RwLock<Vec<i64>> = RwLock::new(Vec::new());
static ref MASTERDATA_PATH: RwLock<String> = RwLock::new(String::new());
static ref MASTERDATA_WARNED: Mutex<HashSet<String>> = Mutex::new(HashSet::new());
static ref MOD_PATHS: RwLock<Vec<String>> = RwLock::new(Vec::new());
static ref EASTER: RwLock<bool> = RwLock::new(false);
static ref HOST_CONFIG: RwLock<HostConfig> = RwLock::new(HostConfig::default());
}
@@ -24,6 +24,8 @@ pub struct HostConfig {
pub jp_android_asset_hash: String,
pub en_android_asset_hash: String,
pub enable_custom_songs: bool,
pub enable_custom_cards: bool,
pub enable_custom_3dmv: bool,
}
// Lets an embedding app (or the tests) enable the opt-in custom songs feature
@@ -32,6 +34,26 @@ pub fn set_enable_custom_songs(enabled: bool) {
HOST_CONFIG.write().unwrap().enable_custom_songs = enabled;
}
pub fn set_enable_custom_cards(enabled: bool) {
HOST_CONFIG.write().unwrap().enable_custom_cards = enabled;
}
pub fn set_enable_custom_3dmv(enabled: bool) {
HOST_CONFIG.write().unwrap().enable_custom_3dmv = enabled;
}
// The --owner uids: the permission system's bootstrap grantors. Process-level
// state rather than db rows so they work on a fresh install and can't be
// revoked through the webui
pub fn update_owners(uids: &[i64]) {
let mut w = OWNERS.write().unwrap();
*w = uids.to_vec();
}
pub fn get_owners() -> Vec<i64> {
OWNERS.read().unwrap().clone()
}
pub fn set_running(running: bool) {
let mut w = RUNNING.write().unwrap();
*w = running;
@@ -100,42 +122,6 @@ pub fn get_easter_mode() -> bool {
*EASTER.read().unwrap()
}
pub fn update_mod_paths(paths: &[String]) {
let cleaned: Vec<String> = paths.iter()
.map(|p| p.trim_end_matches('/').to_string())
.filter(|p| !p.is_empty())
.filter_map(|p| {
if Path::new(&p).is_dir() {
Some(p)
} else {
println!("Couldn't find mod directory {} — skipping", p);
None
}
})
.collect();
if !cleaned.is_empty() {
println!("Loaded {} mod overlay{}", cleaned.len(),
if cleaned.len() == 1 { "" } else { "s" });
for p in &cleaned {
println!(" mod: {}", p);
}
}
let mut w = MOD_PATHS.write().unwrap();
*w = cleaned;
}
pub fn read_mod_files(rel_path: &str) -> Vec<(String, Vec<u8>)> {
let paths = MOD_PATHS.read().unwrap().clone();
let mut out = Vec::new();
for p in paths {
let full = format!("{}/{}", p, rel_path);
if let Ok(bytes) = fs::read(&full) {
out.push((p, bytes));
}
}
out
}
pub fn apply_config_json(json: &str) {
let parsed = match jzon::parse(json) {
Ok(p) => p,
@@ -181,11 +167,17 @@ pub fn overlay_args(args: &mut crate::options::Args) {
}
overlay_str!(jp_android_asset_hash);
overlay_str!(en_android_asset_hash);
// Overlay only ever enables the feature; a command-line --enable-custom-songs
// is never overridden back to off
// Overlay only ever enables the features; a command-line --enable-custom-*
// flag is never overridden back to off
if cfg.enable_custom_songs {
args.enable_custom_songs = true;
}
if cfg.enable_custom_cards {
args.enable_custom_cards = true;
}
if cfg.enable_custom_3dmv {
args.enable_custom_3dmv = true;
}
}
// idk why an ai put tests here but they are here now. Yay tests????
@@ -204,7 +196,10 @@ lazy_static! {
pub fn lock_test_data_path() -> std::sync::MutexGuard<'static, ()> {
let guard = crate::lock_onto_mutex!(TEST_LOCK);
update_data_path(&TEST_DATA_DIR);
// The feature is off by default; tests exercise it, so turn it on while holding the lock
// The features are off by default; tests exercise them, so turn them on
// while holding the lock
set_enable_custom_songs(true);
set_enable_custom_cards(true);
set_enable_custom_3dmv(true);
guard
}

View File

@@ -59,4 +59,28 @@ impl SQLite {
}
Ok(rv)
}
// Runs a read-modify-write as one unit. Additive on purpose — the other helpers open
// a fresh connection per statement, so a caller that SELECTs then INSERTs races any
// concurrent caller doing the same and the loser hits a constraint violation (which
// lock_and_exec would unwrap into a worker panic).
//
// BEGIN IMMEDIATE takes the write lock up front rather than at first write, so two
// callers serialise instead of both reading the pre-state; busy_timeout makes the
// loser wait for the winner rather than fail instantly (SQLite::new sets that on its
// own short-lived setup connection, not on the per-call ones).
//
// Errors are returned, never unwrapped: statistics writes must not take down a
// request.
pub fn lock_and_transact<T>(
&self,
f: impl FnOnce(&Connection) -> Result<T, rusqlite::Error>
) -> Result<T, rusqlite::Error> {
let mut conn = Connection::open(&self.path)?;
conn.busy_timeout(std::time::Duration::from_secs(10))?;
let tx = conn.transaction_with_behavior(rusqlite::TransactionBehavior::Immediate)?;
let rv = f(&tx)?;
tx.commit()?;
Ok(rv)
}
}

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

View File

@@ -0,0 +1,465 @@

/*+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+
背景設定
+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+*/
html {
box-sizing: border-box; /* 1 */
cursor: default; /* 2 */
line-height: 1.5; /* 3 */
-ms-text-size-adjust: 100%; /* 4 */
-webkit-text-size-adjust: 100%; /* 5 */
}
*,
::before,
::after {
/* 表示無い個所の処理 */
background-repeat: no-repeat; /* 1 */
box-sizing: inherit; /* 2 */
}
body {
font-family: 'YuGothic','Yu Gothic','Hiragino Kaku Gothic ProN','ヒラギノ角ゴ ProN W3',sans-serif;
font-size: 2.0vw;
font-weight: normal;
color: #494949;
background-color: #f5ffff;
background-size: cover;
background-attachment: fixed;
-webkit-touch-callout: none; /* リンク長押しのポップアップを無効化*/
-webkit-user-select: none; /* テキスト長押しの選択ボックスを無効化*/
-webkit-tap-highlight-color:rgba(0,0,0,0);/*リンクの領域表示を無効化*/
}
/* ダークモード */
@media (prefers-color-scheme: dark) {
body {
background-color: #f5ffff;
color: #494949;
}
#header {
background-color: #f5ffff;
}
#tab div.on {
color: #f5ffff;
}
.detail_text {
color: #494949;
}
#tab div a, #tab div a:visited {
color: #494949;
}
#news_list .news .info_date {
color: #828282;
}
}
/*+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+
文字大きさ、ポジション 幅1580px基準のvw
+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+*/
/* 詳細本文 */
/* 40文字×無制限 */
.detail_text {
font-size: 2.0vw;
color: #494949;
font-weight: normal;
}
/* 装飾用 */
/* <div class="title"> */
#detail .title {
font-weight: bold;
}
/* <span class="bold"> */
#detail .bold {
font-weight: bold;
}
/* <div class="date"> */
#detail .date {
color: #f93981;
}
/* <span class="pink"> */
#detail .pink {
color: #f93981;
}
/* 見出し用 *
/* 更新日 24px */
.date_text {
font-size: 1.6vw;
font-weight: normal;
}
/* タイトル 32px */
.title_text {
font-size: 2.0vw;
font-weight: normal;
}
.update_text {
font-size: 1.3vw;
font-weight: normal;
}
#tab {
font-size: 2.0vw;
font-weight: normal;
}
/*+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+
メニュータブ
+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+*/
#header {
position: fixed;
top: 0;
width: 100vw;
height: 7.2vw;
background-color: #F2FFFF;
z-index: 1;
}
#tab {
position: relative;
top: 0;
margin: 1.6vw 1.3vw;
width: 97.4vw;
height: 4.0vw;
z-index: 1;
}
#tab>div {
float: left;
width: 18.9vw;
height: 4.0vw;
color: #494949;
text-align: center;
line-height: 4.0vw;
position: relative;
}
#tab div:nth-child(1), #tab div:nth-child(2) {
border-right: #CDD0D0 1px solid;
}
#tab div a, #tab div a:visited {
color: #494949;
}
#tab div.on {
color: #f5ffff;
background-image: url("../0_common_images/news_img_tab.png");
background-repeat: repeat-x;
background-size: contain;
}
#tab a {
display: block;
height: 100%;
background-position: center;
background-size: 15.5vw;
text-decoration: none;
}
#tab .tab_text {
text-align: center;
line-height: 100%;
}
#tab .new img.bg_badge {
position: absolute;
z-index: 2;
top: -0.5vw;
right: 1.1vw;
width: 2.4vw;
height: auto;
}
#tab .new img.bg_badge_eff {
position: absolute;
z-index: 1;
top: -1.3vw;
right: 0.3vw;
width: 4.0vw;
height: auto;
}
#tab>div.read_btn, #tab>div.more_btn {
float: right;
width: 15.6vw;
height: 4.0vw;
margin: 0vw -0.4vw 0vw 0.4vw;
}
#tab .read_btn img, #tab .more_btn img {
width: 15.6vw;
height: auto;
}
#tab img.off {
opacity: 0.5;
}
#tab_bottom {
margin-top: 7.2vw;
}
/*+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+
共通項目
+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+*/
/*種類アイコン画像*/
.info_type_image img.tag {
width : 13.7vw; /* 画像を枠の100%の横幅にする */
height: auto; /* 画像の縦幅を自動調整 */
}
.info_type_image img.present {
width : 1.5vw;
height: auto;
margin-left: 0.5vw;
}
.information_area {
width: 100%;
overflow: hidden;
}
.information {
position: relative;
float: left;
overflow: hidden;
}
.information img.new {
width : 8.3vw;
height: auto;
}
img.arrow {
width : 1.8vw;
height: auto;
margin-top: 2.4vw;
margin-left: 1.0vw;
margin-right: 0.4vw;
}
img.arrow_back {
width : 1.8vw;
height: auto;
margin-top: 2.4vw;
margin-right: 1.4vw;
transform: scale(-1, 1);
}
.info_title {
margin-top: 0vw;
word-break: break-all;
}
.anchor {
position: absolute;
margin-top: -7.2vw;
}
.clear {
clear: both;
}
#outer {
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
}
#outer #center {
height:100%;
width:100%;
display:table;
}
#outer #center p {
display: table-cell;
height: 100%;
text-align: center;
vertical-align: middle;
}
/*+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
お知らせリスト設定
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+*/
#news_list .main_image img {
width : 20.86vw;
height: 8.34vw;
float: left;
}
#news_list .news {
display: block;
width: 100%;
height: 100%;
text-decoration: none;
color: #494949;
-webkit-tap-highlight-color: rgba(0,0,0,0);/*リンクの領域表示を無効化*/
overflow: hidden;
}
#news_list .news .info_date {
color: #828282;
}
#news_list ul {
margin: 1.3vw 1.3vw 0;
padding: 0;
width: 97.4vw;
}
#news_list li {
list-style: none;
}
#news_list hr, #detail hr {
background-image: url("../0_common_images/news_img_line.png");
background-repeat: repeat-x;
background-size: contain;
height: 0.26vw;
border: 0;
margin-top: 0.8vw;
margin-bottom: 0.8vw;
}
#news_list hr.hr_detail {
margin-top: 1.1vw;
margin-bottom: 1.1vw;
}
#news_list .list_area {
overflow: hidden;
}
#news_list .information {
float: left;
margin-left: 2.0vw;
width: 70.5vw;
}
#news_list .info_type_image {
float: left;
margin-top: 0.8vw;
width: 13.7vw;
}
#news_list .info_date {
float: left;
margin-top: 1.0vw;
margin-left: 2.0vw;
}
#news_list .info_new_image {
float: right;
margin-top: 0.7vw;
width: 8.3vw;
}
#news_list .arrow_image {
float: left;
width: 3.2vw;
height: 8.3vw;
}
#page_area {
margin-top: 3%;
padding: 0 2.0vw 4.0vw 2.0vw;
width: 100%;
overflow: auto;
font-size: 1.2vw;
display: none;
}
#paging {
text-align: center;
}
#page_area .page {
font-size: 1.8vw;
font-weight: bold;
padding-left: 1.5vw;
padding-right: 1.5vw;
color: #191919;
text-decoration: none;
}
#page_area .page.new {
color: #c12424;
}
#page_area .page.off {
color: #aaaaaa;
}
/*+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
詳細ページ設定
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+*/
#detail {
width: 100%;
height: 100%;
}
#detail .detail_text {
width : 97.4vw;
height : auto;
vertical-align:middle;
padding: 0;
margin: 0vw 1.3vw 1.3vw;
}
#detail .detail_image {
width: 100%;
padding: 1.0vw;
text-align: center;
display: none;
}
#detail .detail_image img {
width: 45.0vw;
height: auto;
}
.detail_text img {
max-width: 100%;
}
/*+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
外部コンテンツページ設定
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+*/
#contents {
width: 100%;
height: 100%;
overflow: hidden;
}
#contents #banner_list {
position: relative;
left: 3vw;
}
#contents .banner {
float: left;
padding: 0.6vw;
}
#contents .banner:nth-child(3n+4) {
clear: both;
}
#contents .clear {
clear: both;
}
#contents img {
width: 30.0vw;
height: auto;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,550 @@
/*! sanitize.css v4.0.0 | CC0 License | github.com/10up/sanitize.css */
/* Display definitions
========================================================================== */
/**
* Add the correct display in IE 9-.
* 1. Add the correct display in Edge, IE, and Firefox.
* 2. Add the correct display in IE.
*/
article,
aside,
details, /* 1 */
figcaption,
figure,
footer,
header,
main, /* 2 */
menu,
nav,
section,
summary { /* 1 */
display: block;
}
/**
* Add the correct display in IE 9-.
*/
audio,
canvas,
progress,
video {
display: inline-block;
}
/**
* Add the correct display in iOS 4-7.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Add the correct display in IE 10-.
* 1. Add the correct display in IE.
*/
template, /* 1 */
[hidden] {
display: none;
}
/* Elements of HTML (https://www.w3.org/TR/html5/semantics.html)
========================================================================== */
/**
* 1. Remove repeating backgrounds in all browsers (opinionated).
* 2. Add box sizing inheritence in all browsers (opinionated).
*/
*,
::before,
::after {
background-repeat: no-repeat; /* 1 */
box-sizing: inherit; /* 2 */
}
/**
* 1. Add text decoration inheritance in all browsers (opinionated).
* 2. Add vertical alignment inheritence in all browsers (opinionated).
*/
::before,
::after {
text-decoration: inherit; /* 1 */
vertical-align: inherit; /* 2 */
}
/**
* 1. Add border box sizing in all browsers (opinionated).
* 2. Add the default cursor in all browsers (opinionated).
* 3. Add a flattened line height in all browsers (opinionated).
* 4. Prevent font size adjustments after orientation changes in IE and iOS.
*/
html {
box-sizing: border-box; /* 1 */
cursor: default; /* 2 */
font-family: sans-serif; /* 3 */
line-height: 1.5; /* 3 */
-ms-text-size-adjust: 100%; /* 4 */
-webkit-text-size-adjust: 100%; /* 5 */
}
/* Sections (https://www.w3.org/TR/html5/sections.html)
========================================================================== */
/**
* Remove the margin in all browsers (opinionated).
*/
body {
margin: 0;
}
/**
* Correct the font sizes and margins on `h1` elements within
* `section` and `article` contexts in Chrome, Firefox, and Safari.
*/
h1 {
font-size: 2em;
margin: .67em 0;
}
/* Grouping content (https://www.w3.org/TR/html5/grouping-content.html)
========================================================================== */
/**
* 1. Correct font sizing inheritance and scaling in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
pre,
samp {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/**
* 1. Correct the height in Firefox.
* 2. Add visible overflow in Edge and IE.
*/
hr {
height: 0; /* 1 */
overflow: visible; /* 2 */
}
/**
* Remove the list style on navigation lists in all browsers (opinionated).
*/
nav ol,
nav ul {
list-style: none;
}
/* Text-level semantics
========================================================================== */
/**
* 1. Add a bordered underline effect in all browsers.
* 2. Remove text decoration in Firefox 40+.
*/
abbr[title] {
border-bottom: 1px dotted; /* 1 */
text-decoration: none; /* 2 */
}
/**
* Prevent the duplicate application of `bolder` by the next rule in Safari 6.
*/
b,
strong {
font-weight: inherit;
}
/**
* Add the correct font weight in Chrome, Edge, and Safari.
*/
b,
strong {
font-weight: bolder;
}
/**
* Add the correct font style in Android 4.3-.
*/
dfn {
font-style: italic;
}
/**
* Add the correct colors in IE 9-.
*/
mark {
background-color: #ffff00;
color: #000000;
}
/**
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
*/
progress {
vertical-align: baseline;
}
/**
* Correct the font size in all browsers.
*/
small {
font-size: 83.3333%;
}
/**
* Change the positioning on superscript and subscript elements
* in all browsers (opinionated).
* 1. Correct the font size in all browsers.
*/
sub,
sup {
font-size: 83.3333%; /* 1 */
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -.25em;
}
sup {
top: -.5em;
}
/*
* Remove the text shadow on text selections (opinionated).
* 1. Restore the coloring undone by defining the text shadow (opinionated).
*/
::-moz-selection {
background-color: #b3d4fc; /* 1 */
color: #000000; /* 1 */
text-shadow: none;
}
::selection {
background-color: #b3d4fc; /* 1 */
color: #000000; /* 1 */
text-shadow: none;
}
/* Embedded content (https://www.w3.org/TR/html5/embedded-content-0.html)
========================================================================== */
/*
* Change the alignment on media elements in all browers (opinionated).
*/
audio,
canvas,
iframe,
img,
svg,
video {
vertical-align: middle;
}
/**
* Remove the border on images inside links in IE 10-.
*/
img {
border-style: none;
}
/**
* Change the fill color to match the text color in all browsers (opinionated).
*/
svg {
fill: currentColor;
}
/**
* Hide the overflow in IE.
*/
svg:not(:root) {
overflow: hidden;
}
/* Links (https://www.w3.org/TR/html5/links.html#links)
========================================================================== */
/**
* 1. Remove the gray background on active links in IE 10.
* 2. Remove the gaps in underlines in iOS 8+ and Safari 8+.
*/
a {
background-color: transparent; /* 1 */
-webkit-text-decoration-skip: objects; /* 2 */
}
/**
* Remove the outline when hovering in all browsers (opinionated.
*/
:hover {
outline-width: 0;
}
/* Tabular data (https://www.w3.org/TR/html5/tabular-data.html)
========================================================================== */
/*
* Remove border spacing in all browsers (opinionated).
*/
table {
border-collapse: collapse;
border-spacing: 0;
}
/* transform-style: (https://www.w3.org/TR/html5/forms.html)
========================================================================== */
/**
* 1. Remove the default styling in all browsers (opinionated).
* 3. Remove the margin in Firefox and Safari.
*/
/* button, */
input,
select
/* textarea */
{
background-color: transparent; /* 1 */
border-style: none; /* 1 */
color: inherit; /* 1 */
font-size: 1em; /* 1 */
margin: 0; /* 3 */
}
/**
* Correct the overflow in IE.
* 1. Correct the overflow in Edge.
*/
button,
input { /* 1 */
overflow: visible;
}
/**
* Remove the inheritance in Edge, Firefox, and IE.
* 1. Remove the inheritance in Firefox.
*/
button,
select { /* 1 */
text-transform: none;
}
/**
* 1. Prevent the WebKit bug where (2) destroys native `audio` and `video`
* controls in Android 4.
* 2. Correct the inability to style clickable types in iOS and Safari.
*/
button,
html [type="button"], /* 1 */
[type="reset"],
[type="submit"] {
-webkit-appearance: button; /* 2 */
}
/**
* Remove the inner border and padding in Firefox.
*/
::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
* Correct the focus styles unset by the previous rule.
*/
:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
* Correct the border, margin, and padding in all browsers.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: .35em .625em .75em;
}
/**
* 1. Correct the text wrapping in Edge and IE.
* 2. Remove the padding so developers are not caught out when they zero out
* `fieldset` elements in all browsers.
*/
legend {
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 2 */
white-space: normal; /* 1 */
}
/**
* 1. Remove the vertical scrollbar in IE.
* 2. Change the resize direction on textareas in all browsers (opinionated).
*/
textarea {
overflow: auto; /* 1 */
resize: vertical; /* 2 */
}
/**
* Remove the padding in IE 10-.
*/
[type="checkbox"],
[type="radio"] {
padding: 0;
}
/**
* Correct the cursor style on increment and decrement buttons in Chrome.
*/
::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Correct the odd appearance in Chrome and Safari.
* 2. Correct the outline style in Safari.
*/
[type="search"] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
* Remove the inner padding and cancel buttons in Chrome and Safari for OS X.
*/
::-webkit-search-cancel-button,
::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* Correct the text style on placeholders in Chrome, Edge, and Safari.
*/
::-webkit-input-placeholder {
color: inherit;
opacity: .54;
}
/**
* 1. Correct the inability to style clickable types in iOS and Safari.
* 2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/* WAI-ARIA (https://www.w3.org/TR/html5/dom.html#wai-aria)
========================================================================== */
/**
* Change the cursor on busy elements (opinionated).
*/
[aria-busy="true"] {
cursor: progress;
}
/*
* Change the cursor on control elements (opinionated).
*/
[aria-controls] {
cursor: pointer;
}
/*
* Change the cursor on disabled, not-editable, or otherwise
* inoperable elements (opinionated).
*/
[aria-disabled] {
cursor: default;
}
/* User interaction (https://www.w3.org/TR/html5/editing.html)
========================================================================== */
/*
* Remove the tapping delay on clickable elements (opinionated).
* 1. Remove the tapping delay in IE 10.
*/
a,
area,
button,
input,
label,
select,
textarea,
[tabindex] {
-ms-touch-action: manipulation; /* 1 */
touch-action: manipulation;
}
/*
* Change the display on visually hidden accessible elements (opinionated).
*/
[hidden][aria-hidden="false"] {
clip: rect(0, 0, 0, 0);
display: inherit;
position: absolute;
}
[hidden][aria-hidden="false"]:focus {
clip: auto;
}

2
webui

Submodule webui updated: 896ef1ccda...c17a5b00dc