บันทึกความแปรปรวนของสินทรัพย์
- ทรัพย์สินแบ่งออกเป็นประเภทที่สามารถแลกเป็นเงินสดและไม่สามารถแลกเป็นเงินสดเพื่อส่งไปยังหมวดหมู่ที่กำหนดตามลำดับ เช่น Tiny Farm มีสองประเภท; ประเภทเงินสด (ระฆัง) และประเภทไม่ใช่เงินสด (ทอง)
- การเก็บรวบรวมบันทึกความแปรปรวนของทรัพย์สิน (เงินสด, เงินในเกม, ฯลฯ) จากเซิร์ฟเวอร์เกมมีเป้าหมายเพื่อวิเคราะห์รูปแบบการเล่นของผู้ใช้แต่ละคนเพื่อให้บริการที่ดียิ่งขึ้น.
หมวดหมู่¶
เซิร์ฟเวอร์ทั่วไป 172.19.1.10 | noncash_var_log, cash_var_log |
---|---|
เซิร์ฟเวอร์ทดสอบ 222.112.182.65 | test_noncash_var_log, test_cash_var_log |
ข้อกำหนดการบันทึก¶
Note
ฟิลด์ที่ใช้รูปแบบ snake_case เช่น server_id
จะถูกแปลงเป็นรูปแบบ camelCase เช่น serverId
เมื่อถูกเก็บในที่จัดเก็บสุดท้าย (BigQuery) และบันทึกที่ส่งในรูปแบบที่ไม่ได้ระบุ เช่น serverid
จะไม่ได้รับการบันทึกในคอลัมน์ของมัน
ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็น |
---|---|---|---|
date | เวลาที่บันทึกล็อก, รูปแบบ: yyyy-mm-dd hhss ตัวอย่าง: 2012-01-19 16:24:00 | string | Y |
channel | C2S: HIVE, KAK: Kakao, LIN: LINE, WEI: Weibo | string(3) | Y |
user_id | Hub uid ที่ส่งจากไคลเอนต์ (ในกรณีของช่องทางอื่น ๆ หมายถึง user_id ที่ใช้ในแต่ละช่องทาง) | bigint | Y |
user_seq | หมายเลขบัญชีผู้ใช้ที่ใช้โดยเซิร์ฟเวอร์เกม (PK) | bigint | N |
lang | รหัสภาษา ที่ส่งจากไคลเอนต์ ISO 639-2 (รหัสภาษาขนาด 3 ไบต์) ตัวอย่าง: KOR | string(3) | Y |
game | ใช้ชื่อแบรนด์ของเกม (เช่น derbydays). รายการที่สามของ app_id ตัวอย่าง: com.com2us.littlelegends.kakao.freefull.apple.global.ios.universal → littlelegends | string(50) | Y |
market | ข้อมูลตลาด "TS": SKT Tstore "OL": KT OllehMarket "OZ": LGU+ OzStore "AP": Apple Appstore "GO": Google Play "SA": Samsung Apps "LE": Com2us Lebi | string(2) | Y |
level | ระดับผู้ใช้ในเกม | int | Y |
action_id | ID การกระทำของผู้ใช้ที่เกี่ยวข้องกับการเปลี่ยนแปลงในเงินเกมที่ไม่ซ้ำกันในเกม ช่วง: [1–(2^31−1)] API หรือโปรโตคอลจะแยกแยะการกระทำในเกม ดังนั้นเซิร์ฟเวอร์เกมควรกำหนด ID แต่ละตัวเกี่ยวกับการกระทำ เมื่อคุณกำหนดแล้ว อย่าเปลี่ยนแปลงมัน การทดสอบเป็นสิ่งจำเป็น | int | Y |
action_name | ค่าที่จับคู่ 1:1 กับ action_id. หาก action_id แตกต่างกัน action_name ก็เช่นกัน ตัวอย่าง: Feeding, Harvesting, เป็นต้น ข้อมูลจริงจะถูกจัดเก็บตาม action_id. หากมีการเปลี่ยนแปลง เมทาตารางจะถูกอัปเดตโดยอัตโนมัติ | string(50) | Y |
item_id | ตัวระบุรายการที่ทำให้เกิดการเปลี่ยนแปลงทรัพย์สิน ตั้งค่านี้เป็น 0 หากการกระทำการเปลี่ยนแปลงทรัพย์สินไม่เกี่ยวข้องกับรายการ ช่วง: [1–(2^31−1)] พารามิเตอร์นี้จำเป็นเมื่อการกระทำเกี่ยวข้องกับรายการ แต่ละเกมควรกำหนด ID ของรายการ เมื่อคุณกำหนดแล้ว อย่าเปลี่ยนแปลงมัน การทดสอบเป็นสิ่งจำเป็น | int | Y |
item_name | ค่าที่จับคู่ 1:1 กับ item_id. ค่าทั้งหมดควรมีคำอธิบาย ยกเว้นเมื่อ item_id เป็น 0. ป้อน 0 เมื่อ item_id เป็น 0 คำอธิบายสั้น ๆ เกี่ยวกับ item_id | string(50) | Y |
asset_id | ตั้งค่านี้จาก 1 ถึง 100 สำหรับทรัพย์สินที่สามารถแลกได้/คะแนนโซเชียลมีเดีย และจาก 101 ขึ้นไปสำหรับทรัพย์สินที่ไม่สามารถแลกได้ เมื่อคุณกำหนดแล้ว อย่าเปลี่ยนแปลงมัน การทดสอบเป็นสิ่งจำเป็น (cf. หากทรัพย์สินที่สามารถแลกได้คือสิ่งที่ผู้ใช้มักจะได้รับแทนที่จะซื้อในเกม ให้ตั้งค่าจาก 101 และหมายเลขที่สูงกว่า) | int | Y |
asset_name | คำอธิบายสั้น ๆ เกี่ยวกับ asset_id (เช่น bell, star, goldball, gold) | string(50) | Y |
amount_prev | จำนวนทรัพย์สินก่อนการเปลี่ยนแปลงทรัพย์สินที่เกี่ยวข้องกับ asset_id | bigint | Y |
amount_var | จำนวนการเปลี่ยนแปลงทรัพย์สินที่เกี่ยวข้องกับ asset_id. การลดทรัพย์สิน: หมายเลขลบ, การเพิ่มทรัพย์สิน: หมายเลขบวก | bigint | Y |
amount_curr | จำนวนทรัพย์สินหลังการเปลี่ยนแปลงทรัพย์สินที่เกี่ยวข้องกับ asset_id. amount_curr = amount_prev + amount_var | int | Y |
amount_free_prev | จำนวนทรัพย์สินฟรีก่อนการเปลี่ยนแปลงทรัพย์สินที่เกี่ยวข้องกับ asset_id (เพิ่มขึ้นเนื่องจากพระราชบัญญัติการชำระเงินในญี่ปุ่นที่แก้ไขแล้ว) | bigint | Y (เพิ่มเมื่อ 18 ม.ค. 2018) |
amount_free_var | จำนวนการเปลี่ยนแปลงทรัพย์สินฟรีที่เกี่ยวข้องกับ asset_id การลดทรัพย์สิน: หมายเลขลบ, การเพิ่มทรัพย์สิน: หมายเลขบวก (เพิ่มขึ้นเนื่องจากพระราชบัญญัติการชำระเงินในญี่ปุ่นที่แก้ไขแล้ว) | bigint | Y (เพิ่มเมื่อ 18 ม.ค. 2018) |
amount_free_curr | จำนวนทรัพย์สินหลังการเปลี่ยนแปลงทรัพย์สินฟรีที่เกี่ยวข้องกับ asset_id (เพิ่มขึ้นเนื่องจากพระราชบัญญัติการชำระเงินในญี่ปุ่นที่แก้ไขแล้ว) amount_free_curr = amount_free_prev + amount_free_var | int | Y (เพิ่มเมื่อ 18 ม.ค. 2018) |
amount_paid_prev | จำนวนสินทรัพย์ที่ชำระแล้วก่อนการเปลี่ยนแปลงสินทรัพย์ที่เกี่ยวข้องกับ asset_id (เพิ่มขึ้นตามพระราชบัญญัติการชำระเงินที่แก้ไขในญี่ปุ่น) | bigint | Y (เพิ่มเมื่อวันที่ 18 ม.ค. 2018) |
amount_paid_var | จำนวนการเปลี่ยนแปลงสินทรัพย์ที่ชำระแล้วที่เกี่ยวข้องกับ asset_id การลดสินทรัพย์: หมายเลขลบ, การเพิ่มสินทรัพย์: หมายเลขบวก (เพิ่มขึ้นตามพระราชบัญญัติการชำระเงินที่แก้ไขในญี่ปุ่น) | bigint | Y (เพิ่มเมื่อวันที่ 18 ม.ค. 2018) |
amount_paid_curr | จำนวนสินทรัพย์หลังจากการเปลี่ยนแปลงสินทรัพย์ที่ชำระแล้วที่เกี่ยวข้องกับ asset_id (เพิ่มขึ้นตามพระราชบัญญัติการชำระเงินที่แก้ไขในญี่ปุ่น) amount_paid_curr = amount_paid_prev + amount_paid_var | int | Y (เพิ่มเมื่อวันที่ 18 ม.ค. 2018) |
client_ip | IP ของลูกค้า ค่านี้จะดึงค่าของประเทศจาก GeoIP | string(32) | Y |
country | ป้อนรหัสประเทศโดยตรงหาก client_ip ไม่ได้ให้ เช่น KR | string(2) | N |
server_ip | IP ของเซิร์ฟเวอร์ | string(32) | Y |
company | บริษัทเผยแพร่เกม เป้าหมายของบันทึก: เช่น "C2S": Com2uS, "GVI": Com2uS Holdings | string(3) | Y |
server_id | รหัสเซิร์ฟเวอร์ อ้างอิงจาก ตารางรหัสเซิร์ฟเวอร์ เพื่อป้อนรหัสเซิร์ฟเวอร์ (JSON Enter Code) | string | Y |
is_emulator | หากเชื่อมต่อกับ Emulator สำหรับ PC เช่น BlueStacks ให้คืนค่า 1; มิฉะนั้น ให้คืนค่า 0 สำหรับเวอร์ชัน PC ให้คืนค่า 2 | tinyint(1) | ไม่จำเป็น แต่แนะนำ. |
game_language | ภาษาในเกมด้วยตัวอักษรเล็กสองตัว เช่น ko อ้างอิง: นโยบายตัวระบุ | varchar | ไม่จำเป็น แต่แนะนำ. (เพิ่มเมื่อวันที่ 18 ม.ค. 2018) |
account_id | ตัวระบุบัญชีที่ไม่ซ้ำกันในเซิร์ฟเวอร์ (PK) | bigint | N (เพิ่มเมื่อวันที่ 18 ม.ค. 2018) |
deviceid | รหัสอุปกรณ์บน HIVE ตัวระบุที่สรุปตัวระบุโฆษณา (Android: AdvertisingID; iOS: IDFA) | bigint | N (เพิ่มเมื่อวันที่ 18 ม.ค. 2018) |
guid | คีย์ที่ไม่ซ้ำกันที่สร้างขึ้นต่อบันทึก รูปแบบสุ่มเช่น uuid เป็นที่แนะนำ | varchar(64) | N |
real_count | จำนวนสินทรัพย์ที่ผู้ใช้ได้รับจริง เช่น เมื่อผู้ใช้ได้รับสินทรัพย์สิบรายการในครั้งเดียว จะเหลือเพียงบันทึกเดียว แต่จำนวนสินทรัพย์จริงคือสิบ | int | Y (เพิ่มเมื่อวันที่ 4 ก.ย. 2019) |
ประเภทของ Scribe¶
<?php
$GLOBALS['THRIFT_ROOT'] = '/dev/scribe-php'; // The route is an example. Modify it in accordance with the development environment.
include_once $GLOBALS['THRIFT_ROOT'].'/scribe.php';
include_once $GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php';
include_once $GLOBALS['THRIFT_ROOT'].'/transport/TFramedTransport.php';
include_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php';
…
public function writeCashVarLog(.....params.....) // Function is an example as well. Modify it in accordance with the development environment. (Category, however, should be fixed as ‘cash_var_log’)
{
$msg['category'] = 'cash_var_log';
$msg['message'] = array();
$msg['message']['date'] = date('Y-m-d H:i:s', time());
$msg['message']['channel'] = $channel;
$msg['message']['user_id'] = $uid;
$msg['message']['country'] = $country;
$msg['message']['lang'] = $lang;
$msg['message']['game'] = $game;
$msg['message']['market'] = $market;
$msg['message']['level'] = $level;
$msg['message']['action_id'] = $action_id; // Once you define, change is unavailable.
$msg['message']['action_name'] = $action_name;
$msg['message']['item_id'] = $item_id; // Once you define, change is unavailable.
$msg['message']['item_name'] = $item_name;
$msg['message']['asset_id'] = $asset_id; // Use the value between 1 and 100 for each game.
$msg['message']['asset_name'] = $asset_name;
$msg['message']['amount_prev'] = $amount_prev;
$msg['message']['amount_var'] = $amount_var;
$msg['message']['amount_curr'] = $amount_curr;
$msg['message'] = json_encode($msg['message']);
$entry = new LogEntry($msg);
$messages = array($entry);
//var_dump($messages);
$socket = new TSocket('localhost', 1463, TRUE); // the target host to send logs(fixed port)
$transport = new TFramedTransport($socket);
$protocol = new TBinaryProtocol($transport, FALSE, FALSE);
$scribe_client = new scribeClient($protocol, $protocol);
$transport->open();
$scribe_client->Log($messages);
$transport->close();
}
public function writeNonCashVarLog(.....params.....) // Function is an example as well. Modify it in accordance with the development environment. (Category, however, should be fixed as ‘noncash_var_log’)
{
$msg['category'] = 'noncash_var_log';
$msg['message'] = array();
$msg['message']['date'] = date('Y-m-d H:i:s', time());
$msg['message']['channel'] = $channel;
$msg['message']['user_id'] = $uid;
$msg['message']['country'] = $country;
$msg['message']['lang'] = $lang;
$msg['message']['game'] = $game;
$msg['message']['market'] = $market;
$msg['message']['level'] = $level;
$msg['message']['action_id'] = $action_id; // Once you define, change is unavailable.
$msg['message']['action_name'] = $action_name;
$msg['message']['item_id'] = $item_id; // Once you define, change is unavailable.
$msg['message']['item_name'] = $item_name;
$msg['message']['asset_id'] = $asset_id; // Use the value between 1 and 100 for each game.
$msg['message']['asset_name'] = $asset_name;
$msg['message']['amount_prev'] = $amount_prev;
$msg['message']['amount_var'] = $amount_var;
$msg['message']['amount_curr'] = $amount_curr;
$msg['message'] = json_encode($msg['message']);
$entry = new LogEntry($msg);
$messages = array($entry);
//var_dump($messages);
$socket = new TSocket('localhost', 1463, TRUE); // the target host to send logs(fixed port)
$transport = new TFramedTransport($socket);
$protocol = new TBinaryProtocol($transport, FALSE, FALSE);
$scribe_client = new scribeClient($protocol, $protocol);
$transport->open();
$scribe_client->Log($messages);
$transport->close();
}
?>
วิธีการใช้งาน¶
- บันทึกความแปรปรวนของสินทรัพย์ช่วยตรวจสอบสถานะการส่ง/ดึงสินค้าตามสินทรัพย์และตรวจสอบอัตราการดึง สัดส่วนการขายขึ้นอยู่กับอัตราการดึง
- ประเภทสินค้าที่สามารถแยกแยะได้และการกระทำของผู้ใช้ในเกมแสดงให้เห็นว่าสินค้าถูกส่ง/ดึงอย่างไร
- สามารถตรวจสอบรายละเอียดของการขายสินค้าพิเศษหรือสินทรัพย์ฟรีได้จากประเภทของเหตุการณ์ต่างๆ
- โปรดหารือกับผู้จัดการโครงการเกม, PIC ของทีมวางแผนแพลตฟอร์ม และทีมวางแผน BI เกี่ยวกับวิธีการแยกแยะสินทรัพย์/การกระทำ/สินค้า ก่อนที่จะใช้บันทึก