ข้ามไปที่เนื้อหา

บันทึกความแปรปรวนของสินทรัพย์

  • ทรัพย์สินแบ่งออกเป็นประเภทที่สามารถแลกเป็นเงินสดและไม่สามารถแลกเป็นเงินสดเพื่อส่งไปยังหมวดหมู่ที่กำหนดตามลำดับ เช่น 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 hh🇲🇲ss
ตัวอย่าง: 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 เกี่ยวกับวิธีการแยกแยะสินทรัพย์/การกระทำ/สินค้า ก่อนที่จะใช้บันทึก