8 Commits

Author SHA1 Message Date
7722e5fa70 UPDATE: Re-optimize performance 2025-10-04 21:16:44 +07:00
dafb6aba1b UPDATE: New res 2025-10-03 22:03:27 +07:00
3e967d7bed UPDATE: New res 2025-10-03 22:02:57 +07:00
c75207f8e1 UPDATE: Extra setting 2025-10-02 23:37:14 +07:00
3871dc8677 FIX: Fix env 2025-09-30 12:06:51 +07:00
72dc9b238f UPDATE: Update new link 2025-09-30 11:15:49 +07:00
edf158028e UPDATE: apk link 2025-09-30 10:30:40 +07:00
e21b59b9b1 UPDATE: Update to 3.6.52 2025-09-30 10:10:06 +07:00
19 changed files with 784 additions and 325 deletions

1
.gitignore vendored
View File

@@ -15,3 +15,4 @@
.externalNativeBuild .externalNativeBuild
.cxx .cxx
local.properties local.properties
.history/

View File

@@ -18,12 +18,12 @@
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:requestLegacyExternalStorage="true" android:requestLegacyExternalStorage="true"
android:theme="@style/Theme.FireflyPsAndorid" android:theme="@style/Theme.FireflyGoAndroid"
tools:targetApi="31"> tools:targetApi="31">
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:exported="true" android:exported="true"
android:theme="@style/Theme.FireflyPsAndorid"> android:theme="@style/Theme.FireflyGoAndroid">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />

View File

@@ -4,8 +4,8 @@ import android.app.NotificationChannel
import android.app.NotificationManager import android.app.NotificationManager
import android.app.PendingIntent import android.app.PendingIntent
import android.app.Service import android.app.Service
import android.content.Context
import android.content.Intent import android.content.Intent
import android.graphics.BitmapFactory
import android.os.Build import android.os.Build
import android.os.IBinder import android.os.IBinder
import android.os.PowerManager import android.os.PowerManager
@@ -14,6 +14,7 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat
import libandroid.Libandroid import libandroid.Libandroid
class GolangServerService : Service() { class GolangServerService : Service() {
@@ -47,20 +48,29 @@ class GolangServerService : Service() {
notificationIntent, notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
) )
val largeIcon = BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher)
val notification = NotificationCompat.Builder(this, CHANNEL_ID) val notification = NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.mipmap.ic_launcher_round)
.setLargeIcon(largeIcon)
.setContentTitle("FireflyGO Server") .setContentTitle("FireflyGO Server")
.setContentText("FireflyGO is running...") .setContentText("Server is running...")
.setSmallIcon(R.drawable.ic_launcher_foreground) .setColor(ContextCompat.getColor(this, R.color.teal_700))
.setOngoing(true)
.setOnlyAlertOnce(true)
.setContentIntent(pendingIntent) .setContentIntent(pendingIntent)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setShowWhen(false)
.setCategory(NotificationCompat.CATEGORY_SERVICE)
.build() .build()
startForeground(NOTIFICATION_ID, notification) startForeground(NOTIFICATION_ID, notification)
try { try {
val powerManager = getSystemService(POWER_SERVICE) as PowerManager val powerManager = getSystemService(POWER_SERVICE) as PowerManager
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "GolangServer::WakeLock") wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "GolangServer::WakeLock")
wakeLock?.acquire() wakeLock?.acquire(10*60*1000L)
Log.d(TAG, "✅ WakeLock acquired") Log.d(TAG, "✅ WakeLock acquired")
} catch (e: Exception) { } catch (e: Exception) {
Log.e(TAG, "❌ WakeLock failed", e) Log.e(TAG, "❌ WakeLock failed", e)
@@ -106,7 +116,6 @@ class GolangServerService : Service() {
Log.e(TAG, "Error shutting down server", e) Log.e(TAG, "Error shutting down server", e)
} }
// 2. Giải phóng WakeLock nếu còn giữ
try { try {
wakeLock?.let { wakeLock?.let {
if (it.isHeld) { if (it.isHeld) {
@@ -132,7 +141,7 @@ class GolangServerService : Service() {
description = "Channel for running Golang backend in foreground" description = "Channel for running Golang backend in foreground"
} }
val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val manager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
manager.createNotificationChannel(channel) manager.createNotificationChannel(channel)
Log.d(TAG, "✅ Notification channel created") Log.d(TAG, "✅ Notification channel created")
} }

View File

@@ -16,7 +16,6 @@ import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.* import androidx.compose.material3.*
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
@@ -56,12 +55,17 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.scale import androidx.compose.ui.draw.scale
import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Shadow import androidx.compose.ui.graphics.Shadow
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties import androidx.compose.ui.window.DialogProperties
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import org.json.JSONObject import org.json.JSONObject
import androidx.compose.ui.graphics.Color
data class AppVersion( data class AppVersion(
val latestVersion: String, val latestVersion: String,
@@ -98,7 +102,7 @@ class MainActivity : ComponentActivity() {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
Box(modifier = Modifier.fillMaxSize()) { Box(modifier = Modifier.fillMaxSize()) {
ServerControlScreen(appDataPath, dataDir, appVersion, Modifier.padding(innerPadding)) ServerControlScreen(appDataPath, dataDir, appVersion, Modifier.padding(innerPadding))
AutoUpdateDialog(onDismiss = {}, appVersion, true) AutoUpdateDialog(onDismiss = {}, appVersion, dataDir, true)
} }
} }
} }
@@ -126,6 +130,28 @@ fun copyRawToFile(context: Context, targetDir: File, fileName: String, resId: In
} }
} }
fun removeFile(targetDir: File, fileName: String): Boolean {
val file = File(targetDir, fileName)
return if (file.exists()) {
try {
if (file.delete()) {
Log.i("FileRemove", "🗑️ Removed $fileName from ${file.absolutePath}")
true
} else {
Log.e("FileRemove", "❌ Failed to remove $fileName from ${file.absolutePath}")
false
}
} catch (e: Exception) {
Log.e("FileRemove", "❌ Error removing $fileName: ${e.message}")
false
}
} else {
Log.i("FileRemove", " $fileName does not exist in ${targetDir.absolutePath}")
false
}
}
@SuppressLint("ImplicitSamInstance") @SuppressLint("ImplicitSamInstance")
@Composable @Composable
fun ServerControlScreen(appDataPath: String, dataDir: File, appVersion: AppVersion, modifier: Modifier = Modifier) { fun ServerControlScreen(appDataPath: String, dataDir: File, appVersion: AppVersion, modifier: Modifier = Modifier) {
@@ -161,7 +187,7 @@ fun ServerControlScreen(appDataPath: String, dataDir: File, appVersion: AppVersi
) { ) {
// Title // Title
Text( Text(
text = "Firefly Ps for Android", text = "Firefly GO for Android",
fontSize = 26.sp, fontSize = 26.sp,
fontWeight = FontWeight.Bold, fontWeight = FontWeight.Bold,
modifier = Modifier.padding(top = 24.dp), modifier = Modifier.padding(top = 24.dp),
@@ -248,7 +274,6 @@ fun ServerControlScreen(appDataPath: String, dataDir: File, appVersion: AppVersi
horizontalArrangement = Arrangement.spacedBy(32.dp), horizontalArrangement = Arrangement.spacedBy(32.dp),
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
val context = LocalContext.current
// Check Update widget // Check Update widget
Column( Column(
@@ -381,7 +406,9 @@ fun ServerControlScreen(appDataPath: String, dataDir: File, appVersion: AppVersi
// Auto Update Dialog // Auto Update Dialog
if (showUpdateDialog) { if (showUpdateDialog) {
AutoUpdateDialog( AutoUpdateDialog(
onDismiss = { showUpdateDialog = false }, appVersion onDismiss = { showUpdateDialog = false },
appVersion,
dataDir
) )
} }
} }
@@ -394,6 +421,63 @@ fun parseGoLogLine(line: String): String? {
return if (content.isNullOrBlank()) null else content return if (content.isNullOrBlank()) null else content
} }
fun parseAnsi(text: String): AnnotatedString {
val regex = Regex("\u001B\\[(\\d+)(;\\d+)*m")
val builder = buildAnnotatedString {
var lastIndex = 0
var currentColor = Color.Black
for (match in regex.findAll(text)) {
val start = match.range.first
val before = text.substring(lastIndex, start)
withStyle(SpanStyle(color = currentColor)) {
append(before)
}
val code = match.groupValues[1].toInt()
currentColor = when (code) {
30 -> {
Color.Black
}
31 -> {
Color.Red
}
32 -> {
Color(0xFF00C853)
}
33 -> {
Color(0xFFFFD600)
}
34 -> {
Color(0xFF2962FF)
}
35 -> {
Color(0xFFD500F9)
}
36 -> {
Color(0xFF00B8D4)
}
37 -> {
Color.White
}
else -> {
Color.Black
}
}
lastIndex = match.range.last + 1
}
val remain = text.substring(lastIndex)
withStyle(SpanStyle(color = currentColor)) {
append(remain)
}
}
return builder
}
@Composable @Composable
fun LogPopup( fun LogPopup(
@@ -444,19 +528,16 @@ fun LogPopup(
) )
Spacer(modifier = Modifier.height(8.dp)) Spacer(modifier = Modifier.height(8.dp))
LazyColumn( LazyColumn(state = listState, modifier = Modifier.weight(1f)) {
state = listState,
modifier = Modifier.weight(1f)
) {
items(logs.size) { index -> items(logs.size) { index ->
Text( Text(
text = logs[index], text = parseAnsi(logs[index]),
fontSize = 12.sp, fontSize = 12.sp,
color = Color.Black,
modifier = Modifier.padding(vertical = 2.dp) modifier = Modifier.padding(vertical = 2.dp)
) )
} }
} }
Spacer(modifier = Modifier.height(8.dp)) Spacer(modifier = Modifier.height(8.dp))
Button( Button(
onClick = { onDismiss() }, onClick = { onDismiss() },
@@ -475,6 +556,7 @@ fun LogPopup(
fun AutoUpdateDialog( fun AutoUpdateDialog(
onDismiss: () -> Unit, onDismiss: () -> Unit,
appVersion: AppVersion, appVersion: AppVersion,
dataDir: File,
isFirstOpen: Boolean = false isFirstOpen: Boolean = false
) { ) {
val context = LocalContext.current val context = LocalContext.current
@@ -522,6 +604,10 @@ fun AutoUpdateDialog(
LaunchedEffect(progress) { LaunchedEffect(progress) {
if (progress >= 100 && isDownloading) { if (progress >= 100 && isDownloading) {
downloadComplete = true downloadComplete = true
removeFile(dataDir, "data-in-game.json" )
removeFile(dataDir, "freesr-data.json")
removeFile(dataDir, "version.json")
delay(500) delay(500)
} }
} }
@@ -601,7 +687,7 @@ fun AutoUpdateDialog(
autoUpdaterManager.downloadapk( autoUpdaterManager.downloadapk(
context, context,
update!!.apk_url, update!!.apk_url,
"MyApp_${update!!.latestversion}.apk" "FireflyGO_${update!!.latestversion}.apk"
) { prog -> progress = prog } ) { prog -> progress = prog }
} }
} }

View File

@@ -1,5 +1,5 @@
{ {
"latest_version": "3.5.4-02", "latest_version": "3.6.2-05",
"changelog": "UPDATE: Fix bug, update libs", "changelog": "UPDATE: Re-optimize performance",
"apk_url": "https://git.kain.io.vn/Firefly-Shelter/FireflyGo_Andoid/releases/download/3.5.4-02/firefly_go_android.apk" "apk_url": "https://git.kain.io.vn/Firefly-Shelter/FireflyGo_Android/releases/download/3.6.2-05/firefly_go_android.apk"
} }

View File

@@ -2,21 +2,24 @@
"leader": 0, "leader": 0,
"lineups": { "lineups": {
"0": 1413, "0": 1413,
"1": 1403, "1": 1415,
"2": 1409, "2": 1409,
"3": 1407 "3": 1407
}, },
"position": { "position": {
"x": -4030, "x": 218004,
"z": -13006, "z": 259263,
"y": 0, "y": 53915,
"rot_y": 270000 "rot_y": 79863
}, },
"scene": { "scene": {
"plane_id": 10000, "plane_id": 20423,
"floor_id": 10000000, "floor_id": 20423001,
"entry_id": 100000104 "entry_id": 2042301
}, },
"player_outfit": [
1001
],
"char_path": { "char_path": {
"main": 8008, "main": 8008,
"march_7": 1224 "march_7": 1224
@@ -32,7 +35,7 @@
"skip_half": 0, "skip_half": 0,
"blessings": [], "blessings": [],
"is_in_challenge": false, "is_in_challenge": false,
"current_stage_id": 30117121, "current_stage_id": 30118121,
"path_resonance_id": 0, "path_resonance_id": 0,
"maze_buff": 0, "maze_buff": 0,
"first_lineup": [], "first_lineup": [],
@@ -40,7 +43,7 @@
}, },
"challenge_peak": { "challenge_peak": {
"current_mode": "Knight", "current_mode": "Knight",
"group_id": 1, "group_id": 2,
"is_in_challenge_peak": false, "is_in_challenge_peak": false,
"challenge_peak_data": { "challenge_peak_data": {
"1": { "1": {
@@ -91,17 +94,70 @@
} }
] ]
} }
},
"2": {
"checkmate_data": {
"challenge_id": 204,
"blessing": 3033021,
"lineup": [
1415,
1413,
1409,
1407
],
"stage_id": 30502022,
"is_hard_mode": true
},
"knight_data": {
"current_challenge_id": 203,
"details_data": [
{
"lineup": [
1302,
1309,
1410
],
"stage_id": 30502011,
"challenge_id": 201
},
{
"lineup": [
1221,
1222
],
"stage_id": 30502012,
"challenge_id": 202
},
{
"lineup": [
1415,
8001,
1414,
1313
],
"stage_id": 30502013,
"challenge_id": 203
}
]
}
} }
} }
}, },
"theory_craft": { "theory_craft": {
"hp": { "hp": {
"1": 600000, "1": [
"2": 10000000 200000,
1000000,
200000
],
"2": [
500000,
10000000,
500000
]
}, },
"cycle_count": 1, "cycle_count": 1,
"log": false, "mode": true
"mode": false
}, },
"profile_data": { "profile_data": {
"cur_chat_bubble_id": 220008, "cur_chat_bubble_id": 220008,

View File

@@ -338,19 +338,27 @@
}, },
{ {
"level": 80, "level": 80,
"item_id": 21050, "item_id": 23052,
"equip_avatar": 8007, "equip_avatar": 1415,
"rank": 5, "rank": 1,
"promotion": 6, "promotion": 6,
"internal_uid": 42 "internal_uid": 42
}, },
{ {
"level": 80, "level": 80,
"item_id": 24005, "item_id": 21050,
"equip_avatar": 8008, "equip_avatar": 8007,
"rank": 5, "rank": 5,
"promotion": 6, "promotion": 6,
"internal_uid": 43 "internal_uid": 43
},
{
"level": 80,
"item_id": 22006,
"equip_avatar": 8008,
"rank": 5,
"promotion": 6,
"internal_uid": 44
} }
], ],
"relics": [ "relics": [
@@ -8096,8 +8104,8 @@
}, },
{ {
"level": 15, "level": 15,
"relic_id": 61101, "relic_id": 61281,
"relic_set_id": 110, "relic_set_id": 128,
"main_affix_id": 1, "main_affix_id": 1,
"sub_affixes": [ "sub_affixes": [
{ {
@@ -8126,8 +8134,8 @@
}, },
{ {
"level": 15, "level": 15,
"relic_id": 61102, "relic_id": 61282,
"relic_set_id": 110, "relic_set_id": 128,
"main_affix_id": 1, "main_affix_id": 1,
"sub_affixes": [ "sub_affixes": [
{ {
@@ -8156,9 +8164,9 @@
}, },
{ {
"level": 15, "level": 15,
"relic_id": 61103, "relic_id": 61283,
"relic_set_id": 110, "relic_set_id": 128,
"main_affix_id": 3, "main_affix_id": 2,
"sub_affixes": [ "sub_affixes": [
{ {
"sub_affix_id": 2, "sub_affix_id": 2,
@@ -8186,8 +8194,8 @@
}, },
{ {
"level": 15, "level": 15,
"relic_id": 61104, "relic_id": 61284,
"relic_set_id": 110, "relic_set_id": 128,
"main_affix_id": 4, "main_affix_id": 4,
"sub_affixes": [ "sub_affixes": [
{ {
@@ -8216,9 +8224,9 @@
}, },
{ {
"level": 15, "level": 15,
"relic_id": 63085, "relic_id": 63175,
"relic_set_id": 308, "relic_set_id": 317,
"main_affix_id": 3, "main_affix_id": 2,
"sub_affixes": [ "sub_affixes": [
{ {
"sub_affix_id": 3, "sub_affix_id": 3,
@@ -8246,13 +8254,193 @@
}, },
{ {
"level": 15, "level": 15,
"relic_id": 63086, "relic_id": 63176,
"relic_set_id": 308, "relic_set_id": 317,
"main_affix_id": 2, "main_affix_id": 2,
"sub_affixes": [ "sub_affixes": [
{ {
"sub_affix_id": 3, "sub_affix_id": 3,
"count": 2, "count": 2,
"step": 3
},
{
"sub_affix_id": 7,
"count": 3,
"step": 3
},
{
"sub_affix_id": 2,
"count": 2,
"step": 2
},
{
"sub_affix_id": 5,
"count": 2,
"step": 3
}
],
"internal_uid": 263,
"equip_avatar": 1414
},
{
"level": 15,
"relic_id": 61271,
"relic_set_id": 127,
"main_affix_id": 1,
"sub_affixes": [
{
"sub_affix_id": 7,
"count": 3,
"step": 4
},
{
"sub_affix_id": 4,
"count": 2,
"step": 3
},
{
"sub_affix_id": 8,
"count": 2,
"step": 4
},
{
"sub_affix_id": 9,
"count": 2,
"step": 3
}
],
"internal_uid": 264,
"equip_avatar": 1415
},
{
"level": 15,
"relic_id": 61272,
"relic_set_id": 127,
"main_affix_id": 1,
"sub_affixes": [
{
"sub_affix_id": 7,
"count": 3,
"step": 3
},
{
"sub_affix_id": 8,
"count": 2,
"step": 2
},
{
"sub_affix_id": 4,
"count": 3,
"step": 1
},
{
"sub_affix_id": 9,
"count": 1,
"step": 1
}
],
"internal_uid": 265,
"equip_avatar": 1415
},
{
"level": 15,
"relic_id": 61273,
"relic_set_id": 127,
"main_affix_id": 5,
"sub_affixes": [
{
"sub_affix_id": 8,
"count": 2,
"step": 2
},
{
"sub_affix_id": 4,
"count": 3,
"step": 2
},
{
"sub_affix_id": 1,
"count": 2,
"step": 3
},
{
"sub_affix_id": 12,
"count": 2,
"step": 1
}
],
"internal_uid": 266,
"equip_avatar": 1415
},
{
"level": 15,
"relic_id": 61274,
"relic_set_id": 127,
"main_affix_id": 4,
"sub_affixes": [
{
"sub_affix_id": 4,
"count": 3,
"step": 3
},
{
"sub_affix_id": 8,
"count": 2,
"step": 1
},
{
"sub_affix_id": 9,
"count": 2,
"step": 4
},
{
"sub_affix_id": 1,
"count": 2,
"step": 2
}
],
"internal_uid": 267,
"equip_avatar": 1415
},
{
"level": 15,
"relic_id": 63235,
"relic_set_id": 323,
"main_affix_id": 6,
"sub_affixes": [
{
"sub_affix_id": 9,
"count": 5,
"step": 3
},
{
"sub_affix_id": 8,
"count": 1,
"step": 2
},
{
"sub_affix_id": 7,
"count": 2,
"step": 1
},
{
"sub_affix_id": 4,
"count": 1,
"step": 0
}
],
"internal_uid": 268,
"equip_avatar": 1415
},
{
"level": 15,
"relic_id": 63236,
"relic_set_id": 323,
"main_affix_id": 3,
"sub_affixes": [
{
"sub_affix_id": 8,
"count": 2,
"step": 4 "step": 4
}, },
{ {
@@ -8262,17 +8450,17 @@
}, },
{ {
"sub_affix_id": 9, "sub_affix_id": 9,
"count": 2, "count": 3,
"step": 2 "step": 3
}, },
{ {
"sub_affix_id": 10, "sub_affix_id": 1,
"count": 2, "count": 2,
"step": 2 "step": 1
} }
], ],
"internal_uid": 263, "internal_uid": 269,
"equip_avatar": 1414 "equip_avatar": 1415
}, },
{ {
"level": 15, "level": 15,
@@ -8301,7 +8489,7 @@
"step": 2 "step": 2
} }
], ],
"internal_uid": 264, "internal_uid": 270,
"equip_avatar": 8007 "equip_avatar": 8007
}, },
{ {
@@ -8331,7 +8519,7 @@
"step": 2 "step": 2
} }
], ],
"internal_uid": 265, "internal_uid": 271,
"equip_avatar": 8007 "equip_avatar": 8007
}, },
{ {
@@ -8361,7 +8549,7 @@
"step": 0 "step": 0
} }
], ],
"internal_uid": 266, "internal_uid": 272,
"equip_avatar": 8007 "equip_avatar": 8007
}, },
{ {
@@ -8391,7 +8579,7 @@
"step": 2 "step": 2
} }
], ],
"internal_uid": 267, "internal_uid": 273,
"equip_avatar": 8007 "equip_avatar": 8007
}, },
{ {
@@ -8421,7 +8609,7 @@
"step": 2 "step": 2
} }
], ],
"internal_uid": 268, "internal_uid": 274,
"equip_avatar": 8007 "equip_avatar": 8007
}, },
{ {
@@ -8451,187 +8639,187 @@
"step": 2 "step": 2
} }
], ],
"internal_uid": 269, "internal_uid": 275,
"equip_avatar": 8007 "equip_avatar": 8007
}, },
{ {
"level": 15, "level": 15,
"relic_id": 61101, "relic_id": 61271,
"relic_set_id": 110, "relic_set_id": 127,
"main_affix_id": 1, "main_affix_id": 1,
"sub_affixes": [ "sub_affixes": [
{ {
"sub_affix_id": 2, "sub_affix_id": 5,
"count": 2, "count": 3,
"step": 3 "step": 1
}, },
{ {
"sub_affix_id": 7, "sub_affix_id": 7,
"count": 1, "count": 2,
"step": 1 "step": 2
}, },
{ {
"sub_affix_id": 11, "sub_affix_id": 8,
"count": 2, "count": 1,
"step": 1 "step": 2
}, },
{ {
"sub_affix_id": 9, "sub_affix_id": 9,
"count": 4, "count": 3,
"step": 4 "step": 4
} }
], ],
"internal_uid": 270, "internal_uid": 276,
"equip_avatar": 8008 "equip_avatar": 8008
}, },
{ {
"level": 15, "level": 15,
"relic_id": 61102, "relic_id": 61272,
"relic_set_id": 110, "relic_set_id": 127,
"main_affix_id": 1, "main_affix_id": 1,
"sub_affixes": [ "sub_affixes": [
{ {
"sub_affix_id": 6, "sub_affix_id": 5,
"count": 2, "count": 4,
"step": 3 "step": 3
}, },
{ {
"sub_affix_id": 7, "sub_affix_id": 7,
"count": 3, "count": 2,
"step": 2 "step": 3
}, },
{ {
"sub_affix_id": 9, "sub_affix_id": 9,
"count": 2, "count": 2,
"step": 2 "step": 1
}, },
{ {
"sub_affix_id": 11, "sub_affix_id": 8,
"count": 2, "count": 1,
"step": 2 "step": 0
} }
], ],
"internal_uid": 271, "internal_uid": 277,
"equip_avatar": 8008 "equip_avatar": 8008
}, },
{ {
"level": 15, "level": 15,
"relic_id": 61103, "relic_id": 61273,
"relic_set_id": 110, "relic_set_id": 127,
"main_affix_id": 5, "main_affix_id": 5,
"sub_affixes": [ "sub_affixes": [
{ {
"sub_affix_id": 4, "sub_affix_id": 4,
"count": 3, "count": 3,
"step": 4
},
{
"sub_affix_id": 5,
"count": 3,
"step": 2
},
{
"sub_affix_id": 7,
"count": 2,
"step": 1
},
{
"sub_affix_id": 8,
"count": 1,
"step": 0
}
],
"internal_uid": 278,
"equip_avatar": 8008
},
{
"level": 15,
"relic_id": 61274,
"relic_set_id": 127,
"main_affix_id": 4,
"sub_affixes": [
{
"sub_affix_id": 5,
"count": 3,
"step": 4
},
{
"sub_affix_id": 9,
"count": 3,
"step": 4
},
{
"sub_affix_id": 8,
"count": 2,
"step": 3 "step": 3
}, },
{ {
"sub_affix_id": 1, "sub_affix_id": 11,
"count": 1, "count": 1,
"step": 1 "step": 2
}
],
"internal_uid": 279,
"equip_avatar": 8008
},
{
"level": 15,
"relic_id": 63215,
"relic_set_id": 321,
"main_affix_id": 6,
"sub_affixes": [
{
"sub_affix_id": 5,
"count": 3,
"step": 3
},
{
"sub_affix_id": 9,
"count": 3,
"step": 3
},
{
"sub_affix_id": 7,
"count": 2,
"step": 3
},
{
"sub_affix_id": 8,
"count": 1,
"step": 2
}
],
"internal_uid": 280,
"equip_avatar": 8008
},
{
"level": 15,
"relic_id": 63216,
"relic_set_id": 321,
"main_affix_id": 2,
"sub_affixes": [
{
"sub_affix_id": 5,
"count": 2,
"step": 3
}, },
{ {
"sub_affix_id": 7, "sub_affix_id": 7,
"count": 3, "count": 3,
"step": 4 "step": 4
}, },
{
"sub_affix_id": 11,
"count": 2,
"step": 3
}
],
"internal_uid": 272,
"equip_avatar": 8008
},
{
"level": 15,
"relic_id": 61104,
"relic_set_id": 110,
"main_affix_id": 4,
"sub_affixes": [
{
"sub_affix_id": 1,
"count": 2,
"step": 3
},
{ {
"sub_affix_id": 9, "sub_affix_id": 9,
"count": 3, "count": 1,
"step": 3
},
{
"sub_affix_id": 10,
"count": 2,
"step": 2 "step": 2
}, },
{ {
"sub_affix_id": 11, "sub_affix_id": 8,
"count": 1,
"step": 1
}
],
"internal_uid": 273,
"equip_avatar": 8008
},
{
"level": 15,
"relic_id": 63105,
"relic_set_id": 310,
"main_affix_id": 1,
"sub_affixes": [
{
"sub_affix_id": 3,
"count": 2,
"step": 3
},
{
"sub_affix_id": 9,
"count": 1,
"step": 1
},
{
"sub_affix_id": 7,
"count": 3,
"step": 3
},
{
"sub_affix_id": 11,
"count": 3, "count": 3,
"step": 3 "step": 3
} }
], ],
"internal_uid": 274, "internal_uid": 281,
"equip_avatar": 8008
},
{
"level": 15,
"relic_id": 63106,
"relic_set_id": 310,
"main_affix_id": 2,
"sub_affixes": [
{
"sub_affix_id": 5,
"count": 1,
"step": 1
},
{
"sub_affix_id": 7,
"count": 3,
"step": 3
},
{
"sub_affix_id": 9,
"count": 2,
"step": 1
},
{
"sub_affix_id": 11,
"count": 2,
"step": 3
}
],
"internal_uid": 275,
"equip_avatar": 8008 "equip_avatar": 8008
} }
], ],
@@ -10518,7 +10706,7 @@
"owner_uid": 0, "owner_uid": 0,
"avatar_id": 1313, "avatar_id": 1313,
"data": { "data": {
"rank": 0, "rank": 2,
"skills": { "skills": {
"1313001": 2, "1313001": 2,
"1313002": 10, "1313002": 10,
@@ -11045,12 +11233,12 @@
"owner_uid": 0, "owner_uid": 0,
"avatar_id": 1414, "avatar_id": 1414,
"data": { "data": {
"rank": 5, "rank": 2,
"skills": { "skills": {
"1414001": 1, "1414001": 6,
"1414002": 1, "1414002": 10,
"1414003": 1, "1414003": 10,
"1414004": 1, "1414004": 10,
"1414007": 1, "1414007": 1,
"1414101": 1, "1414101": 1,
"1414102": 1, "1414102": 1,
@@ -11077,6 +11265,40 @@
"sp_value": 70, "sp_value": 70,
"sp_max": 140 "sp_max": 140
}, },
"1415": {
"owner_uid": 0,
"avatar_id": 1415,
"data": {
"rank": 2,
"skills": {
"1415001": 6,
"1415002": 10,
"1415003": 10,
"1415004": 10,
"1415007": 1,
"1415101": 1,
"1415102": 1,
"1415103": 1,
"1415201": 1,
"1415202": 1,
"1415203": 1,
"1415204": 1,
"1415205": 1,
"1415206": 1,
"1415207": 1,
"1415208": 1,
"1415209": 1,
"1415210": 1,
"1415301": 6,
"1415302": 6
}
},
"level": 80,
"promotion": 6,
"techniques": [],
"sp_value": 12,
"sp_max": 24
},
"8001": { "8001": {
"owner_uid": 0, "owner_uid": 0,
"avatar_id": 8001, "avatar_id": 8001,
@@ -11294,7 +11516,8 @@
"8007209": 1, "8007209": 1,
"8007210": 1, "8007210": 1,
"8007301": 6, "8007301": 6,
"8007302": 6 "8007302": 6,
"8007501": 1
} }
}, },
"level": 80, "level": 80,
@@ -11328,7 +11551,8 @@
"8008209": 1, "8008209": 1,
"8008210": 1, "8008210": 1,
"8008301": 6, "8008301": 6,
"8008302": 6 "8008302": 6,
"8008501": 1
} }
}, },
"level": 80, "level": 80,
@@ -11347,13 +11571,17 @@
"path_resonance_id": 0, "path_resonance_id": 0,
"monsters": [ "monsters": [
[ [
{
"monster_id": 8034012,
"level": 95,
"amount": 1
},
{ {
"monster_id": 8034012, "monster_id": 8034012,
"level": 95, "level": 95,
"amount": 1 "amount": 1
} }
], ]
[]
] ]
} }
} }

View File

@@ -1,135 +1,44 @@
{ {
"CNBETAAndroid3.5.52": { "CNBETAAndroid3.6.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11537608_83921e2bbfb5_f15a1cc2aaba76", "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12066992_f083970b907e_999074cab6dce6",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11531357_ac5c50fe7c5c_5b8f1dfdef8d06", "asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12056690_16bfd67c199f_f3c0367d7b051e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11555075_e532a47d9e06_61b3c1ed162173", "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_12114942_e99cbde25134_e63a6b835f17f9",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11531873_abaa8247cede_b13c1ccb975acd", "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12103115_ee78155e9867_3626f0948d93e2",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_12118783_55113408814f_c874267d04c04a"
}, },
"CNBETAAndroid3.5.53": { "CNBETAWin3.6.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11619846_a5b546c20acf_c6ba7f65cf9eab", "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12066992_f083970b907e_999074cab6dce6",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11619846_a5b546c20acf_c6ba7f65cf9eab", "asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12056690_16bfd67c199f_f3c0367d7b051e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11652344_6dae28086399_aaf63e0fedc33b", "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_12114942_e99cbde25134_e63a6b835f17f9",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11620131_ba9be3a133df_248c41962f7625", "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12103115_ee78155e9867_3626f0948d93e2",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_12118783_55113408814f_c874267d04c04a"
}, },
"CNBETAAndroid3.5.54": { "CNBETAiOS3.6.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11715498_4850ed5bf0fe_76bdeb19894e7e", "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12066992_f083970b907e_999074cab6dce6",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11715498_4850ed5bf0fe_76bdeb19894e7e", "asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12056690_16bfd67c199f_f3c0367d7b051e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11748833_44e6507dc182_fc55ad3d7434ba", "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_12114942_e99cbde25134_e63a6b835f17f9",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11715817_6b9296fec056_20fd6286275e46", "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12103115_ee78155e9867_3626f0948d93e2",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_12118783_55113408814f_c874267d04c04a"
}, },
"CNBETAWin3.5.51": { "OSBETAAndroid3.6.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11497493_b4a5d8f717df_d632f2f00b0108", "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12066992_f083970b907e_999074cab6dce6",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11443120_75e75bb630b2_bb1653f50a24b3", "asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12056690_16bfd67c199f_f3c0367d7b051e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11503893_72129078bcdf_31a0117dd0c5aa", "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_12114942_e99cbde25134_e63a6b835f17f9",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11475376_d8a6597dc30c_b9f6afe07715f3", "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12103115_ee78155e9867_3626f0948d93e2",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_11454524_a18a9e47d5b8_3647b1d6ce2d9a" "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_12118783_55113408814f_c874267d04c04a"
}, },
"CNBETAWin3.5.52": { "OSBETAWin3.6.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11537608_83921e2bbfb5_f15a1cc2aaba76", "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12066992_f083970b907e_999074cab6dce6",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11531357_ac5c50fe7c5c_5b8f1dfdef8d06", "asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12056690_16bfd67c199f_f3c0367d7b051e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11555075_e532a47d9e06_61b3c1ed162173", "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_12114942_e99cbde25134_e63a6b835f17f9",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11531873_abaa8247cede_b13c1ccb975acd", "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12103115_ee78155e9867_3626f0948d93e2",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_12118783_55113408814f_c874267d04c04a"
}, },
"CNBETAWin3.5.53": { "OSBETAiOS3.6.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11619846_a5b546c20acf_c6ba7f65cf9eab", "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12066992_f083970b907e_999074cab6dce6",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11619846_a5b546c20acf_c6ba7f65cf9eab", "asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12056690_16bfd67c199f_f3c0367d7b051e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11652344_6dae28086399_aaf63e0fedc33b", "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_12114942_e99cbde25134_e63a6b835f17f9",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11620131_ba9be3a133df_248c41962f7625", "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12103115_ee78155e9867_3626f0948d93e2",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_12118783_55113408814f_c874267d04c04a"
},
"CNBETAWin3.5.54": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11715498_4850ed5bf0fe_76bdeb19894e7e",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11715498_4850ed5bf0fe_76bdeb19894e7e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11748833_44e6507dc182_fc55ad3d7434ba",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11715817_6b9296fec056_20fd6286275e46",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"CNBETAiOS3.5.52": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11537608_83921e2bbfb5_f15a1cc2aaba76",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11531357_ac5c50fe7c5c_5b8f1dfdef8d06",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11555075_e532a47d9e06_61b3c1ed162173",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11531873_abaa8247cede_b13c1ccb975acd",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"CNBETAiOS3.5.53": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11619846_a5b546c20acf_c6ba7f65cf9eab",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11619846_a5b546c20acf_c6ba7f65cf9eab",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11652344_6dae28086399_aaf63e0fedc33b",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11620131_ba9be3a133df_248c41962f7625",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"CNBETAiOS3.5.54": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11715498_4850ed5bf0fe_76bdeb19894e7e",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11715498_4850ed5bf0fe_76bdeb19894e7e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11748833_44e6507dc182_fc55ad3d7434ba",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11715817_6b9296fec056_20fd6286275e46",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"OSBETAAndroid3.5.52": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11537608_83921e2bbfb5_f15a1cc2aaba76",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11531357_ac5c50fe7c5c_5b8f1dfdef8d06",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11555075_e532a47d9e06_61b3c1ed162173",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11531873_abaa8247cede_b13c1ccb975acd",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"OSBETAAndroid3.5.53": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11619846_a5b546c20acf_c6ba7f65cf9eab",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11619846_a5b546c20acf_c6ba7f65cf9eab",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11652344_6dae28086399_aaf63e0fedc33b",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11620131_ba9be3a133df_248c41962f7625",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"OSBETAAndroid3.5.54": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11715498_4850ed5bf0fe_76bdeb19894e7e",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11715498_4850ed5bf0fe_76bdeb19894e7e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11748833_44e6507dc182_fc55ad3d7434ba",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11715817_6b9296fec056_20fd6286275e46",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"OSBETAWin3.5.52": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11537608_83921e2bbfb5_f15a1cc2aaba76",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11531357_ac5c50fe7c5c_5b8f1dfdef8d06",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11555075_e532a47d9e06_61b3c1ed162173",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11531873_abaa8247cede_b13c1ccb975acd",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"OSBETAWin3.5.53": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11619846_a5b546c20acf_c6ba7f65cf9eab",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11619846_a5b546c20acf_c6ba7f65cf9eab",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11652344_6dae28086399_aaf63e0fedc33b",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11620131_ba9be3a133df_248c41962f7625",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"OSBETAWin3.5.54": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11715498_4850ed5bf0fe_76bdeb19894e7e",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11715498_4850ed5bf0fe_76bdeb19894e7e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11748833_44e6507dc182_fc55ad3d7434ba",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11715817_6b9296fec056_20fd6286275e46",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"OSBETAiOS3.5.52": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11537608_83921e2bbfb5_f15a1cc2aaba76",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11531357_ac5c50fe7c5c_5b8f1dfdef8d06",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11555075_e532a47d9e06_61b3c1ed162173",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11531873_abaa8247cede_b13c1ccb975acd",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"OSBETAiOS3.5.53": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11619846_a5b546c20acf_c6ba7f65cf9eab",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11619846_a5b546c20acf_c6ba7f65cf9eab",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11652344_6dae28086399_aaf63e0fedc33b",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11620131_ba9be3a133df_248c41962f7625",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"OSBETAiOS3.5.54": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11715498_4850ed5bf0fe_76bdeb19894e7e",
"asset_bundle_url_b": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11715498_4850ed5bf0fe_76bdeb19894e7e",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11748833_44e6507dc182_fc55ad3d7434ba",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11715817_6b9296fec056_20fd6286275e46",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
} }
} }

View File

@@ -1,3 +1,3 @@
<resources> <resources>
<string name="app_name">FireflyGo-3.5.5X</string> <string name="app_name">Firefly Go</string>
</resources> </resources>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<style name="Theme.FireflyPsAndorid" parent="android:Theme.Material.Light.NoActionBar" /> <style name="Theme.FireflyGoAndroid" parent="android:Theme.Material.Light.NoActionBar" />
</resources> </resources>

View File

@@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# Android operating system, and which are packaged with your app's APK # Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn # https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=false
# Kotlin code style for this project: "official" or "obsolete": # Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official kotlin.code.style=official
# Enables namespacing of each library's R class so that its R class includes only the # Enables namespacing of each library's R class so that its R class includes only the

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:78fd3d4938199813bbdf5b54d427e2e497c618cb228b230a3eaf26506e78b55d oid sha256:b2890a23bc1bad9326247f5b8a055f7bfe93eeaaf0e89e220fe27cf9aedf07b5
size 86920440 size 89623442

2
script/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
.env
*.exe

2
script/README_Note.md Normal file
View File

@@ -0,0 +1,2 @@
# Changelog
## - UPDATE: Re-optimize performance

5
script/go.mod Normal file
View File

@@ -0,0 +1,5 @@
module release
go 1.25.0
require github.com/joho/godotenv v1.5.1

2
script/go.sum Normal file
View File

@@ -0,0 +1,2 @@
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=

154
script/main.go Normal file
View File

@@ -0,0 +1,154 @@
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"mime/multipart"
"net/http"
"os"
"path/filepath"
"github.com/joho/godotenv"
)
const (
repoOwner = "Firefly-Shelter"
repoName = "FireflyGo_Android"
giteaURL = "https://git.kain.io.vn"
)
type ReleaseInput struct {
TagName string `json:"tag_name"`
Name string `json:"name"`
Body string `json:"body"`
Draft bool `json:"draft"`
Prerelease bool `json:"prerelease"`
}
type ReleaseResponse struct {
ID int `json:"id"`
HTMLURL string `json:"html_url"`
URL string `json:"url"`
}
func readFile(path string) string {
data, err := os.ReadFile(path)
if err != nil {
panic(fmt.Sprintf("Failed to read %s: %v", path, err))
}
return string(data)
}
func main() {
err := godotenv.Load("script/.env")
if err != nil {
fmt.Println("Error loading .env file")
}
token := os.Getenv("TOKEN")
if token == "" {
fmt.Println("TOKEN not found in .env")
}
releaseJSON := readFile("script/release.json")
var meta map[string]string
if err := json.Unmarshal([]byte(releaseJSON), &meta); err != nil {
panic("Invalid release.json")
}
tag := meta["tag"]
title := meta["title"]
body := readFile("script/README_Note.md")
// Step 1: Create release
releaseInput := ReleaseInput{
TagName: tag,
Name: title,
Body: body,
Draft: false,
Prerelease: false,
}
payload, _ := json.Marshal(releaseInput)
req, _ := http.NewRequest("POST",
fmt.Sprintf("%s/api/v1/repos/%s/%s/releases", giteaURL, repoOwner, repoName),
bytes.NewReader(payload),
)
req.Header.Set("Authorization", "token "+token)
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusCreated {
bodyBytes, _ := io.ReadAll(resp.Body)
panic(fmt.Sprintf("Failed to create release: %s", bodyBytes))
}
var releaseResp ReleaseResponse
if err := json.NewDecoder(resp.Body).Decode(&releaseResp); err != nil {
panic("Failed to decode release response")
}
fmt.Printf("Release created:\n- ID: %d\n- HTML: %s\n", releaseResp.ID, releaseResp.HTMLURL)
uploadURL := releaseResp.URL
if uploadURL == "" {
panic("url missing in release response")
}
files, err := os.ReadDir("app/release")
if err != nil {
panic("Cannot read prebuild folder")
}
for _, file := range files {
if filepath.Ext(file.Name()) != ".apk" {
continue
}
uploadPath := filepath.Join("app/release", file.Name())
fmt.Println("Uploading:", uploadPath)
buf := new(bytes.Buffer)
writer := multipart.NewWriter(buf)
part, err := writer.CreateFormFile("attachment", filepath.Base(uploadPath))
if err != nil {
fmt.Printf("Failed to create form: %v\n", err)
continue
}
src, err := os.Open(uploadPath)
if err != nil {
fmt.Printf("Cannot open file %s: %v\n", file.Name(), err)
continue
}
io.Copy(part, src)
src.Close()
writer.Close()
req, err := http.NewRequest("POST", uploadURL+"/assets", buf)
if err != nil {
fmt.Printf("NewRequest error: %v\n", err)
continue
}
req.Header.Set("Authorization", "token "+token)
req.Header.Set("Content-Type", writer.FormDataContentType())
resp, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Printf("Upload failed: %v\n", err)
continue
}
if resp.StatusCode != http.StatusCreated {
bodyBytes, _ := io.ReadAll(resp.Body)
fmt.Printf("Upload failed: %s\n", bodyBytes)
} else {
fmt.Println("Uploaded:", file.Name())
}
resp.Body.Close()
}
}

5
script/release.json Normal file
View File

@@ -0,0 +1,5 @@
{
"tag": "3.6.2-05",
"title": "PreBuild Version 3.6.52 - 05"
}