初始化提交

This commit is contained in:
2025-09-29 11:56:03 +08:00
parent 7e292ef96f
commit df2f1bf3dd
173 changed files with 31142 additions and 129 deletions

3
public/mengyanote/.obsidian/app.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"promptDelete": false
}

View File

@@ -0,0 +1,6 @@
{
"cssTheme": "Border",
"theme": "obsidian",
"monospaceFontFamily": "American Typewriter",
"baseFontSize": 16
}

View File

@@ -0,0 +1,5 @@
[
"obsidian-livesync",
"obsidian-style-settings",
"obsidian-hover-editor"
]

View File

@@ -0,0 +1,33 @@
{
"file-explorer": true,
"global-search": true,
"switcher": true,
"graph": true,
"backlink": true,
"canvas": true,
"outgoing-link": true,
"tag-pane": true,
"properties": false,
"page-preview": true,
"daily-notes": true,
"templates": true,
"note-composer": true,
"command-palette": true,
"slash-command": false,
"editor-status": true,
"bookmarks": true,
"markdown-importer": false,
"zk-prefixer": false,
"random-note": false,
"outline": true,
"word-count": true,
"slides": false,
"audio-recorder": false,
"workspaces": false,
"file-recovery": true,
"publish": false,
"sync": true,
"webviewer": false,
"footnotes": false,
"bases": true
}

22
public/mengyanote/.obsidian/graph.json vendored Normal file
View File

@@ -0,0 +1,22 @@
{
"collapse-filter": true,
"search": "",
"showTags": false,
"showAttachments": false,
"hideUnresolved": false,
"showOrphans": true,
"collapse-color-groups": true,
"colorGroups": [],
"collapse-display": true,
"showArrow": false,
"textFadeMultiplier": 0,
"nodeSizeMultiplier": 1,
"lineSizeMultiplier": 1,
"collapse-forces": true,
"centerStrength": 0.518713248970312,
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 1,
"close": true
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,10 @@
{
"id": "obsidian-hover-editor",
"name": "Hover Editor",
"version": "0.11.26",
"minAppVersion": "1.5.8",
"description": "Transform the Page Preview hover popover into a fully working editor instance",
"author": "NothingIsLost",
"authorUrl": "https://github.com/nothingislost",
"isDesktopOnly": false
}

View File

@@ -0,0 +1,582 @@
/* @settings
name: Hover Editor
id: hover-editor
settings:
-
id: titlebar-heading
title: Title bar
type: heading
level: 1
collapsed: true
-
id: titlebar-heading
title: Title bar background/foreground
type: heading
level: 2
collapsed: true
-
id: he-title-bar-active-bg
title: Active unpinned title bar background color
type: variable-themed-color
format: hex
default-light: '#'
default-dark: '#'
-
id: he-title-bar-inactive-bg
title: Inactive unpinned title bar background color
type: variable-themed-color
format: hex
default-light: '#'
default-dark: '#'
-
id: he-title-bar-active-pinned-bg
title: Active pinned title bar background color
type: variable-themed-color
format: hex
default-light: '#'
default-dark: '#'
-
id: he-title-bar-inactive-pinned-bg
title: Inactive pinned title bar background color
type: variable-themed-color
format: hex
default-light: '#'
default-dark: '#'
-
id: he-title-bar-active-fg
title: Active title bar foreground color
type: variable-themed-color
format: hex
default-light: '#'
default-dark: '#'
-
id: he-title-bar-inactive-fg
title: Inactive title bar foreground color
type: variable-themed-color
format: hex
default-light: '#'
default-dark: '#'
-
id: titlebar-action-heading
title: Title bar icons
type: heading
level: 2
collapsed: true
-
id: he-title-bar-inactive-action
title: Title bar inactive icon color
type: variable-themed-color
format: hex
default-light: '#'
default-dark: '#'
-
id: he-title-bar-active-action
title: Titlebar active icon color
type: variable-themed-color
format: hex
default-light: '#'
default-dark: '#'
-
id: titlebar-text-heading
title: Title bar text
type: heading
level: 2
collapsed: true
-
id: he-title-bar-font-size
title: Title bar Font size
type: variable-text
description: Accepts any CSS font-size value
default: 15px
-
id: titlebar-height-heading
title: Title bar height
type: heading
level: 2
collapsed: true
-
id: he-title-bar-height
title: Title bar height
type: variable-text
description: Accepts any CSS font-size value
default: 28px
*/
:root {
/* general styling */
--he-popover-opacity-while-dragging: 0.8;
--he-popover-border-radius: 6px;
--he-popover-header-transition-speed: 0.3s;
--he-popover-snap-to-edge-transition-speed: 0.3s;
/* resize handle sizing */
--he-resize-handle-side-size: 12px;
--he-resize-handle-corner-size: 18px;
/* view header height */
--he-view-header-height: 36px;
}
body {
--he-text-on-accent-inactive: var(--text-on-accent); /* couldn't find a good variable that worked across themes */
--he-text-on-accent-active: #fff;
/* z-index layer settings, probably not a good idea to mess with these */
--he-popover-layer-inactive: calc(var(--layer-slides) - 4);
--he-popover-layer-active: calc(var(--he-popover-layer-inactive) + 1);
--he-popover-layer-new: calc(var(--he-popover-layer-inactive) + 2);
--he-leaf-drag-overlay: calc(var(--he-popover-layer-inactive) + 3);
/* calculated variables, do not modify */
--he-resize-handle-side-offset: calc((var(--he-resize-handle-side-size) - 3px) * -1);
--he-resize-handle-corner-offset: calc((var(--he-resize-handle-corner-size) / 2) * -1);
--he-resize-handle-side-length: calc(100% - var(--he-resize-handle-corner-size));
/* title bar colors */
--he-title-bar-active-bg: var(--interactive-accent);
--he-title-bar-inactive-bg: #777777;
--he-title-bar-inactive-pinned-bg: #777777;
--he-title-bar-active-pinned-bg: var(--interactive-accent);
--he-title-bar-active-fg: var(--he-text-on-accent-active);
--he-title-bar-inactive-fg: var(--he-text-on-accent-inactive);
/* title bar action/icon colors */
--he-title-bar-inactive-action: var(--he-text-on-accent-inactive);
--he-title-bar-active-action: var(--he-text-on-accent-active);
/* titlebar sizing */
--he-title-bar-height: 28px;
--he-title-bar-font-size: 15px;
}
.popover.hover-editor .workspace-leaf,
.popover.hover-editor .workspace-split {
height: 100%;
width: 100%;
}
/*
Obsidian 1.6 sets a different background for non-root splits,
then uses primary as an override at root. Since hover editors
don't live in a root split, we have to copy the override:
*/
.popover.hover-editor .workspace-split .view-content {
background-color: var(--background-primary);
}
.popover.hover-editor {
min-height: unset;
max-height: unset;
/* touch action none fixes dragging and resizing on mobile */
touch-action: none;
/* this is set to allow the drag/resize handles to overflow the popover frame */
overflow: visible;
border: none;
padding: 0;
z-index: var(--he-popover-layer-inactive);
border-radius: var(--he-popover-border-radius);
/* Prevent snagging on titlebar */
-webkit-app-region: no-drag;
}
.popover.hover-editor .markdown-preview-view {
font-size: inherit;
}
.popover.hover-editor.is-active {
z-index: var(--he-popover-layer-active);
}
.popover.hover-editor.is-new {
z-index: var(--he-popover-layer-new);
}
/* Drag/link overlay needs to overlay popups */
.workspace-fake-target-overlay,
.workspace-drop-overlay {
z-index: var(--he-leaf-drag-overlay);
}
.popover.hover-editor .resize-handle {
position: absolute;
touch-action: none;
}
.popover.hover-editor .resize-handle.top {
top: var(--he-resize-handle-side-offset);
height: var(--he-resize-handle-side-size);
left: calc(var(--he-resize-handle-corner-offset) * -1);
width: var(--he-resize-handle-side-length);
}
.popover.hover-editor .resize-handle.left {
height: var(--he-resize-handle-side-length);
left: var(--he-resize-handle-side-offset);
top: calc(var(--he-resize-handle-corner-offset) * -1);
width: var(--he-resize-handle-side-size);
}
.popover.hover-editor .resize-handle.right {
height: var(--he-resize-handle-side-length);
right: var(--he-resize-handle-side-offset);
top: calc(var(--he-resize-handle-corner-offset) * -1);
width: var(--he-resize-handle-side-size);
}
.popover.hover-editor .resize-handle.bottom {
bottom: var(--he-resize-handle-side-offset);
height: var(--he-resize-handle-side-size);
left: calc(var(--he-resize-handle-corner-offset) * -1);
width: var(--he-resize-handle-side-length);
}
.popover.hover-editor .resize-handle.bottom-left {
bottom: var(--he-resize-handle-corner-offset);
height: var(--he-resize-handle-corner-size);
left: var(--he-resize-handle-corner-offset);
width: var(--he-resize-handle-corner-size);
}
.popover.hover-editor .resize-handle.bottom-right {
bottom: var(--he-resize-handle-corner-offset);
height: var(--he-resize-handle-corner-size);
right: var(--he-resize-handle-corner-offset);
width: var(--he-resize-handle-corner-size);
}
.popover.hover-editor .resize-handle.top-left {
top: var(--he-resize-handle-corner-offset);
height: var(--he-resize-handle-corner-size);
left: var(--he-resize-handle-corner-offset);
width: var(--he-resize-handle-corner-size);
}
.popover.hover-editor .resize-handle.top-right {
top: var(--he-resize-handle-corner-offset);
height: var(--he-resize-handle-corner-size);
right: var(--he-resize-handle-corner-offset);
width: var(--he-resize-handle-corner-size);
}
/* body.is-dragging-popover .tooltip {
opacity: 0;
} */
.popover-header-icon {
width: fit-content;
}
.mod-pin-popover > svg {
transform: rotate(45deg);
}
.mod-pin-popover.is-active > svg {
transform: rotate(0deg);
}
.popover-action,
.popover-header-icon {
margin: 0 8px;
cursor: pointer;
color: var(--he-title-bar-inactive-action);
position: relative;
display: flex;
align-items: center;
}
.popover-action.is-active,
.mod-pin-popover.is-active {
color: var(--he-title-bar-active-action);
}
.popover-action:hover,
.popover-header-icon:hover {
color: var(--he-title-bar-active-action);
}
.popover-action.is-active svg,
.mod-pin-popover.is-active svg {
}
.mod-pin-popover.is-active > svg {
transform: unset;
}
.popover.hover-editor .workspace-leaf-content[data-type="empty"] .view-header {
/* ensures that minimal theme doesn't hide the popover header */
display: flex;
}
.popover.hover-editor .workspace-split > .workspace-leaf:last-child > .workspace-leaf-resize-handle {
/* this hides the leaf resize handles that touch the edge of the popover */
/* without this the leaf resize handles conflict with the popover resize handles */
display: none;
}
.popover.hover-editor.is-dragging {
opacity: var(--he-popover-opacity-while-dragging);
}
.popover.hover-editor:is(.snap-to-viewport, .snap-to-left, .snap-to-right) .resize-handle {
display: none;
}
.popover.hover-editor.snap-to-right .resize-handle.left,
.popover.hover-editor.snap-to-left .resize-handle.right {
display: block;
}
.popover.hover-editor.is-dragging.snap-to-left,
.popover.hover-editor.is-dragging.snap-to-right,
.popover.hover-editor.is-dragging.snap-to-viewport {
transition: width var(--he-popover-snap-to-edge-transition-speed),
height var(--he-popover-snap-to-edge-transition-speed), top var(--he-popover-snap-to-edge-transition-speed),
left var(--he-popover-snap-to-edge-transition-speed);
}
.hover-popover.is-dragging.snap-to-left::after,
.hover-popover.is-dragging.snap-to-right::after,
.hover-popover.is-dragging.snap-to-viewport::after {
position: absolute;
content: "";
width: 100%;
height: 100%;
top: 0;
border-radius: var(--he-popover-border-radius);
box-shadow: inset 0px 0px 0px 4px var(--interactive-accent);
pointer-events: none;
}
.popover.hover-editor.snap-to-left {
max-height: unset !important;
}
.popover.hover-editor.snap-to-right {
right: 0 !important;
max-height: unset !important;
}
.popover.hover-editor.snap-to-viewport {
max-height: unset !important;
max-width: unset !important;
}
.popover.hover-editor .popover-titlebar {
display: flex;
height: var(--he-title-bar-height);
width: 100%;
background-color: var(--he-title-bar-inactive-bg);
}
.popover.hover-editor.is-active .popover-titlebar {
background-color: var(--he-title-bar-active-bg);
}
.popover.hover-editor.is-pinned.is-pinned .popover-titlebar {
background-color: var(--he-title-bar-inactive-pinned-bg);
}
.popover.hover-editor.is-pinned.is-pinned.is-active .popover-titlebar {
background-color: var(--he-title-bar-active-pinned-bg);
}
.popover.hover-editor .popover-titlebar .popover-actions {
display: flex;
justify-content: flex-end;
}
.popover.hover-editor > .popover-content {
margin: 0;
border-radius: var(--he-popover-border-radius);
overflow: hidden;
height: 100%;
width: 100%;
}
.popover.hover-popover.hover-editor .pdf-toolbar:not(.pdf-findbar.mod-hidden) {
/* Show PDF toolbar in hover editor */
display: flex;
}
.popover.hover-editor .popover-titlebar .popover-title {
display: block;
flex-grow: 1;
transition: all 0.3s;
align-self: center;
font-size: var(--he-title-bar-font-size);
font-weight: 500;
white-space: pre;
word-wrap: normal;
color: var(--he-title-bar-inactive-fg);
overflow: hidden;
position: relative;
}
.popover.hover-editor.is-active .popover-title {
color: var(--he-title-bar-active-fg);
}
.popover.hover-editor.is-active .popover-title:after {
background: linear-gradient(to right, transparent, var(--he-title-bar-active-bg));
}
.popover.hover-editor.is-pinned.is-pinned.is-active .popover-title:after {
background: linear-gradient(to right, transparent, var(--he-title-bar-active-pinned-bg));
}
.popover.hover-editor.is-pinned.is-pinned .popover-title:after {
background: linear-gradient(to right, transparent, var(--he-title-bar-inactive-pinned-bg));
}
.popover.hover-editor .popover-title:after {
content: " ";
position: absolute;
top: 0;
right: 0;
width: 30px;
height: 100%;
background: linear-gradient(to right, transparent, var(--he-title-bar-inactive-bg));
}
.popover.hover-editor .mod-show-navbar svg {
transform: rotate(90deg);
}
.popover.hover-editor > .popover-content > .workspace-split {
height: calc(100% - var(--he-title-bar-height));
}
.popover.hover-editor .view-header {
border-top: none;
transition: all var(--he-popover-header-transition-speed);
display: flex;
}
/* Restore 1.5.x view header icons */
.view-header .view-header-icon {
display: none;
padding: var(--size-2-2);
margin-right: var(--size-2-3);
color: var(--text-muted);
align-self: center;
cursor: grab;
}
.view-header .view-header-icon:active {
cursor: grabbing;
}
.popover.hover-editor .view-header .view-header-icon {
display: flex;
}
.popover.hover-editor.show-navbar:not(.is-minimized) .popover-title {
opacity: 0;
}
.popover.hover-editor:not(.show-navbar) .view-header {
height: 0px;
overflow: hidden;
}
.popover.hover-editor.show-navbar .view-header {
/* theme devs: if you want to change the header height, you must do so by setting the --he-view-header-height variable */
/* if you don't use the variable, you will break internal measurement logic */
height: var(--he-view-header-height);
overflow: unset;
}
.popover.hover-editor:not(.show-navbar) .view-content {
height: 100%;
}
.popover.hover-editor .workspace-leaf-content[data-type="image"] .view-content {
padding: 0;
position: relative;
overflow: hidden;
}
.popover.hover-editor .workspace-leaf-content[data-type="image"] img {
display: block;
position: relative;
height: 100%;
width: 100%;
max-width: unset;
border-radius: 0;
}
body .popover.hover-editor .view-content {
/* theme devs: if you want to change the header height, you must do so by setting the --he-view-header-height variable */
/* if you don't use the variable, you will break internal measurement logic */
height: calc(100% - var(--he-view-header-height));
}
/* start: zoomable images feature */
.popover.hover-editor.image-zoom .view-content .image-embed:active {
aspect-ratio: unset;
cursor: zoom-out;
display: block;
z-index: 200;
position: fixed;
max-height: calc(100% + 1px);
max-width: 100%;
height: calc(100% + 1px);
width: 100%;
object-fit: contain;
margin: -0.5px auto 0;
text-align: center;
padding: 0;
left: 0;
right: 0;
bottom: 0;
max-width: unset;
}
/* extra specificity to override some community theme styles that cause issues */
.popover.hover-editor.image-zoom .view-content .image-embed img:active {
top: 50%;
z-index: 99;
transform: translateY(-50%);
padding: 0;
margin: 0 auto;
width: calc(100% - 20px);
height: unset;
max-height: 95vh;
object-fit: contain;
left: 0;
right: 0;
bottom: 0;
position: absolute;
opacity: 1;
max-width: unset;
max-height: 100%;
}
.popover.hover-editor.image-zoom .view-content .image-embed:active:after {
background-color: var(--background-primary);
opacity: 0.9;
content: " ";
height: calc(100% + 1px);
width: 100%;
position: fixed;
left: 0;
right: 1px;
z-index: 0;
}
.popover.hover-editor.image-zoom .view-content img {
cursor: zoom-in;
}
/* extra specificity to override some community theme styles that cause issues */
.popover.hover-editor.image-zoom .workspace-leaf-content[data-type="image"] img {
cursor: zoom-in;
top: 50%;
transform: translateY(-50%);
object-fit: contain;
height: unset;
left: 0;
right: 0;
bottom: 0;
position: absolute;
opacity: 1;
max-height: 100%;
}
/* end: zoomable images feature */

View File

@@ -0,0 +1,158 @@
{
"remoteType": "",
"useCustomRequestHandler": false,
"couchDB_URI": "",
"couchDB_USER": "",
"couchDB_PASSWORD": "",
"couchDB_DBNAME": "",
"liveSync": false,
"syncOnSave": true,
"syncOnStart": true,
"savingDelay": 200,
"lessInformationInLog": false,
"gcDelay": 0,
"versionUpFlash": "",
"minimumChunkSize": 20,
"longLineThreshold": 250,
"showVerboseLog": false,
"suspendFileWatching": false,
"trashInsteadDelete": true,
"periodicReplication": true,
"periodicReplicationInterval": 60,
"syncOnFileOpen": true,
"encrypt": false,
"passphrase": "",
"usePathObfuscation": false,
"doNotDeleteFolder": false,
"resolveConflictsByNewerFile": false,
"batchSave": true,
"batchSaveMinimumDelay": 5,
"batchSaveMaximumDelay": 60,
"deviceAndVaultName": "",
"usePluginSettings": false,
"showOwnPlugins": false,
"showStatusOnEditor": true,
"showStatusOnStatusbar": true,
"showOnlyIconsOnEditor": false,
"hideFileWarningNotice": false,
"usePluginSync": false,
"autoSweepPlugins": false,
"autoSweepPluginsPeriodic": false,
"notifyPluginOrSettingUpdated": false,
"checkIntegrityOnSave": false,
"batch_size": 25,
"batches_limit": 25,
"useHistory": true,
"disableRequestURI": true,
"skipOlderFilesOnSync": true,
"checkConflictOnlyOnOpen": false,
"showMergeDialogOnlyOnActive": false,
"syncInternalFiles": false,
"syncInternalFilesBeforeReplication": false,
"syncInternalFilesIgnorePatterns": "\\/node_modules\\/, \\/\\.git\\/, \\/obsidian-livesync\\/",
"syncInternalFilesTargetPatterns": "",
"syncInternalFilesInterval": 60,
"additionalSuffixOfDatabaseName": "64ee792396a31ce1",
"ignoreVersionCheck": false,
"lastReadUpdates": 25,
"deleteMetadataOfDeletedFiles": false,
"syncIgnoreRegEx": "",
"syncOnlyRegEx": "",
"customChunkSize": 60,
"readChunksOnline": true,
"watchInternalFileChanges": true,
"automaticallyDeleteMetadataOfDeletedFiles": 0,
"disableMarkdownAutoMerge": false,
"writeDocumentsIfConflicted": false,
"useDynamicIterationCount": false,
"syncAfterMerge": true,
"configPassphraseStore": "",
"encryptedPassphrase": "",
"encryptedCouchDBConnection": "%$Uukeo12Pgs5baxCUGOX3mFwYVrSAEKjTp71bZM0ksyYOD73jzNGIadNLYC2doeXSXRIOZMe8gzbNAT4xr7/eDVD6PlQZR9sHbSpjf72zzI75i0YefndafQiCQ/0ZD7g3T+7bxS7Xa5421ysRvfiPG/AUxUAp2G2L9wBelAVcOPFSjIDlV83JZvQ8JdSjEGTCrwlXev8HlFvqGoeIaM8Z0ZD4yIn9RNKGnVNAnwugsjkkkReG9YgJBu6ac4lGijbEQct/NrfnZ9h2p9Y9ooUmC64ZiUn9WLaJnp4vocuRZc0UW4gA0VtVLQlsKvckJizSNrr2gftcJqj0Bxgu2e6wSP/8bZZOeTZYwMqCMHS5SchV/I9CHuzOhmFvqoEaZDGK1XPMmalw5S9vKQR0j6m56SzIXaZAQ45KmJIirijXme+FDwabZkafd/Jx4IvU15rP3K0Y13ByhxN37Eklj0vLXOY44F8KdeBvx+0yhTxvzN/pn2iYfM0wmvzxlCMIqlpyd5OiTp+swjs9+Rp7rVmwC7FzDegvBR7ZNHyeKqUP+NSk0ssCSvA9QwXyV7vPvW5npiDh7zPN/RPkHTQCwxbjg5Lth/gCsfyR2bBK3YxlM5x5+GVTw2RUoVdSXn4G9ziH+jdLDTWzBvRORPHel4x753CqL6nIU0bVZZRxIJavXXwm+UosQst53HqptDI2dBSCvDC7Xnk=",
"permitEmptyPassphrase": false,
"useIndexedDBAdapter": true,
"useTimeouts": false,
"writeLogToTheFile": false,
"doNotPaceReplication": false,
"hashCacheMaxCount": 300,
"hashCacheMaxAmount": 50,
"concurrencyOfReadChunksOnline": 30,
"minimumIntervalOfReadChunksOnline": 25,
"hashAlg": "xxhash64",
"suspendParseReplicationResult": false,
"doNotSuspendOnFetching": false,
"useIgnoreFiles": false,
"ignoreFiles": ".gitignore",
"syncOnEditorSave": true,
"pluginSyncExtendedSetting": {},
"syncMaxSizeInMB": 50,
"settingSyncFile": "",
"writeCredentialsForSettingSync": false,
"notifyAllSettingSyncFile": false,
"isConfigured": true,
"settingVersion": 10,
"enableCompression": false,
"accessKey": "",
"bucket": "",
"endpoint": "",
"region": "",
"secretKey": "",
"useEden": false,
"maxChunksInEden": 10,
"maxTotalLengthInEden": 1024,
"maxAgeInEden": 10,
"disableCheckingConfigMismatch": false,
"displayLanguage": "zh",
"enableChunkSplitterV2": false,
"disableWorkerForGeneratingChunks": false,
"processSmallFilesInUIThread": false,
"notifyThresholdOfRemoteStorageSize": 0,
"usePluginSyncV2": true,
"usePluginEtc": false,
"handleFilenameCaseSensitive": false,
"doNotUseFixedRevisionForChunks": true,
"showLongerLogInsideEditor": false,
"sendChunksBulk": false,
"sendChunksBulkMaxSize": 1,
"useSegmenter": false,
"useAdvancedMode": false,
"usePowerUserMode": false,
"useEdgeCaseMode": false,
"enableDebugTools": false,
"suppressNotifyHiddenFilesChange": false,
"syncMinimumInterval": 2000,
"P2P_Enabled": false,
"P2P_AutoAccepting": 0,
"P2P_AppID": "self-hosted-livesync",
"P2P_roomID": "",
"P2P_passphrase": "",
"P2P_relays": "wss://exp-relay.vrtmrz.net/",
"P2P_AutoBroadcast": false,
"P2P_AutoStart": false,
"P2P_AutoSyncPeers": "",
"P2P_AutoWatchPeers": "",
"P2P_SyncOnReplication": "",
"P2P_RebuildFrom": "",
"P2P_AutoAcceptingPeers": "",
"P2P_AutoDenyingPeers": "",
"P2P_IsHeadless": false,
"doctorProcessedVersion": "0.25.0",
"bucketCustomHeaders": "",
"couchDB_CustomHeaders": "",
"useJWT": false,
"jwtAlgorithm": "",
"jwtKey": "",
"jwtKid": "",
"jwtSub": "",
"jwtExpDuration": 5,
"useRequestAPI": false,
"bucketPrefix": "",
"chunkSplitterVersion": "",
"E2EEAlgorithm": "",
"processSizeMismatchedFiles": false,
"forcePathStyle": true,
"configPassphrase": "",
"preset": "",
"syncMode": "ONEVENTS",
"dummy": 0
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,10 @@
{
"id": "obsidian-livesync",
"name": "Self-hosted LiveSync",
"version": "0.25.16",
"minAppVersion": "0.9.12",
"description": "Community implementation of self-hosted livesync. Reflect your vault changes to some other devices immediately. Please make sure to disable other synchronize solutions to avoid content corruption or duplication.",
"author": "vorotamoroz",
"authorUrl": "https://github.com/vrtmrz",
"isDesktopOnly": false
}

View File

@@ -0,0 +1,472 @@
.added {
color: var(--text-on-accent);
background-color: var(--text-accent);
}
.normal {
color: var(--text-normal);
}
.deleted {
color: var(--text-on-accent);
background-color: var(--text-muted);
}
.conflict-dev-name {
display: inline-block;
min-width: 5em;
}
.op-scrollable {
overflow-y: scroll;
/* min-height: 280px; */
max-height: 280px;
user-select: text;
-webkit-user-select: text;
}
.op-pre {
white-space: pre-wrap;
}
.op-warn {
border: 1px solid salmon;
padding: 2px;
border-radius: 4px;
}
.op-warn::before {
content: "Warning";
font-weight: bold;
color: salmon;
position: relative;
display: block;
}
.op-warn-info {
border: 1px solid rgb(255, 209, 81);
padding: 2px;
border-radius: 4px;
}
.op-warn-info::before {
content: "Notice";
font-weight: bold;
color: rgb(255, 209, 81);
position: relative;
display: block;
}
.syncstatusbar {
-webkit-filter: grayscale(100%);
filter: grayscale(100%);
}
.tcenter {
text-align: center;
}
.sls-plugins-wrap {
display: flex;
flex-grow: 1;
max-height: 50vh;
overflow-y: scroll;
}
.sls-plugins-tbl {
border: 1px solid var(--background-modifier-border);
width: 100%;
max-height: 80%;
}
.divider th {
border-top: 1px solid var(--background-modifier-border);
}
.sls-header-button {
margin-left: 2em;
}
.sls-hidden {
display: none;
}
:root {
--sls-log-text: "";
}
.sls-troubleshoot-preview {
max-width: max-content;
}
.sls-troubleshoot-preview img {
max-width: 100%;
}
.sls-setting-tab {
display: none;
}
div.sls-setting-menu-btn {
color: var(--text-normal);
background-color: var(--background-secondary-alt);
border-radius: 4px 4px 0 0;
padding: 6px 10px;
cursor: pointer;
margin-right: 12px;
font-family: "Inter", sans-serif;
outline: none;
user-select: none;
flex-grow: 1;
text-align: center;
flex-shrink: 1;
}
.sls-setting-label.selected {
/* order: 1; */
flex-grow: 1;
/* width: 100%; */
}
.sls-setting-tab:hover~div.sls-setting-menu-btn,
.sls-setting-label.selected .sls-setting-tab:checked~div.sls-setting-menu-btn {
background-color: var(--interactive-accent);
color: var(--text-on-accent);
}
.sls-setting-menu-wrapper {
display: flex;
flex-direction: column;
flex-grow: 1;
position: sticky;
top: 0;
background-color: rgba(var(--background-primary), 0.3);
backdrop-filter: blur(4px);
border-radius: 4px;
z-index: 10;
}
.sls-setting-menu {
display: flex;
flex-direction: row;
overflow-x: auto;
}
body {
--sls-col-transparent: transparent;
--sls-col-warn: rgba(var(--background-modifier-error-rgb), 0.1);
--sls-col-warn-stripe1: var(--sls-col-transparent);
--sls-col-warn-stripe2: var(--sls-col-warn);
}
.sls-setting-menu-buttons {
border: 1px solid var(--sls-col-warn);
padding: 2px;
margin: 1px;
border-radius: 4px;
background-image: linear-gradient(-45deg,
var(--sls-col-warn-stripe1) 25%, var(--sls-col-warn-stripe2) 25%, var(--sls-col-warn-stripe2) 50%,
var(--sls-col-warn-stripe1) 50%, var(--sls-col-warn-stripe1) 75%, var(--sls-col-warn-stripe2) 75%, var(--sls-col-warn-stripe2));
background-size: 30px 30px;
display: flex;
flex-direction: row;
justify-content: flex-end;
padding: 0.5em 0.25em;
justify-content: center;
align-items: center;
/* transition: background-position 1s; */
animation: sls-scroll-warn 1s linear 0s infinite;
}
@keyframes sls-scroll-warn {
0% {
background-position: 0 0;
}
100% {
background-position: 30px 0;
}
}
.sls-setting-menu-buttons label {
margin-right: auto;
flex-grow: 1;
color: var(--text-warning);
}
.sls-setting-label {
flex-grow: 1;
display: inline-flex;
justify-content: center;
}
.setting-collapsed {
display: none;
}
.sls-plugins-tbl-buttons {
text-align: right;
}
.sls-plugins-tbl-buttons button {
flex-grow: 0;
padding: 6px 10px;
}
.sls-plugins-tbl-device-head {
background-color: var(--background-secondary-alt);
color: var(--text-accent);
}
.op-flex {
display: flex;
}
.op-flex input {
display: inline-flex;
flex-grow: 1;
margin-bottom: 8px;
}
.op-info {
display: inline-flex;
flex-grow: 1;
border-bottom: 1px solid var(--background-modifier-border);
width: 100%;
margin-bottom: 4px;
padding-bottom: 4px;
}
.history-added {
color: var(--text-on-accent);
background-color: var(--text-accent);
}
.history-normal {
color: var(--text-normal);
}
.history-deleted {
color: var(--text-on-accent);
background-color: var(--text-muted);
text-decoration: line-through;
}
.ob-btn-config-fix label {
margin-right: 40px;
}
.ob-btn-config-info {
border: 1px solid salmon;
padding: 2px;
margin: 1px;
border-radius: 4px;
}
.ob-btn-config-head {
padding: 2px;
margin: 1px;
border-radius: 4px;
}
.isWizard .wizardHidden {
display: none;
}
.sls-setting:not(.isWizard) .wizardOnly {
display: none;
}
.sls-item-dirty::before {
content: "✏";
}
.sls-item-dirty-help::after {
content: " ❓";
}
.sls-item-invalid-value {
background-color: rgba(var(--background-modifier-error-rgb), 0.3) !important;
}
.sls-setting-disabled input[type=text],
.sls-setting-disabled input[type=number],
.sls-setting-disabled input[type=password] {
filter: brightness(80%);
color: var(--text-muted);
}
.sls-setting-hidden {
display: none;
}
.sls-setting-obsolete {
background-image: linear-gradient(-45deg,
var(--sls-col-warn-stripe1) 25%, var(--sls-col-warn-stripe2) 25%, var(--sls-col-warn-stripe2) 50%,
var(--sls-col-warn-stripe1) 50%, var(--sls-col-warn-stripe1) 75%, var(--sls-col-warn-stripe2) 75%, var(--sls-col-warn-stripe2));
background-image: linear-gradient(-45deg,
transparent 25%, rgba(var(--background-secondary), 0.1) 25%, rgba(var(--background-secondary), 0.1) 50%, transparent 50%, transparent 75%, rgba(var(--background-secondary), 0.1) 75%, rgba(var(--background-secondary), 0.1));
background-size: 60px 60px;
}
.password-input>.setting-item-control>input {
-webkit-text-security: disc;
}
span.ls-mark-cr::after {
user-select: none;
content: "↲";
color: var(--text-muted);
font-size: 0.8em;
}
.deleted span.ls-mark-cr::after {
color: var(--text-on-accent);
}
.ls-imgdiff-wrap {
display: flex;
justify-content: center;
align-items: center;
}
.ls-imgdiff-wrap .overlay {
position: relative;
}
.ls-imgdiff-wrap .overlay .img-base {
position: relative;
top: 0;
left: 0;
}
.ls-imgdiff-wrap .overlay .img-overlay {
-webkit-filter: invert(100%) opacity(50%);
filter: invert(100%) opacity(50%);
position: absolute;
top: 0;
left: 0;
animation: ls-blink-diff 0.5s cubic-bezier(0.4, 0, 1, 1) infinite alternate;
}
@keyframes ls-blink-diff {
0% {
opacity: 0;
}
50% {
opacity: 0;
}
100% {
opacity: 1;
}
}
.livesync-status {
user-select: none;
pointer-events: none;
height: auto;
min-height: 1em;
position: absolute;
background-color: transparent;
width: 100%;
padding: 10px;
padding-right: 16px;
top: var(--header-height);
z-index: calc(var(--layer-cover) + 1);
font-variant-numeric: tabular-nums;
tab-size: 4;
text-align: right;
white-space: pre-wrap;
display: inline-block;
color: var(--text-normal);
font-size: 80%;
}
div.workspace-leaf-content[data-type=bases] .livesync-status {
top: calc(var(--bases-header-height) + var(--header-height));
padding: 5px;
padding-right:18px;
}
.is-mobile div.workspace-leaf-content[data-type=bases] .livesync-status {
top: calc(var(--bases-header-height) + var(--view-header-height));
padding: 6px;
padding-right:18px;
}
.livesync-status div {
opacity: 0.6;
-webkit-filter: grayscale(100%);
filter: grayscale(100%);
}
.livesync-status .livesync-status-loghistory {
text-align: left;
opacity: 0.4;
}
.livesync-status div.livesync-status-messagearea {
opacity: 0.6;
color: var(--text-on-accent);
background: var(--background-modifier-error);
-webkit-filter: unset;
filter: unset;
}
.menu-setting-poweruser-disabled .sls-setting-poweruser {
display: none;
}
.menu-setting-advanced-disabled .sls-setting-advanced {
display: none;
}
.menu-setting-edgecase-disabled .sls-setting-edgecase {
display: none;
}
.sls-setting-panel-title {
position: sticky;
}
.sls-setting-panel-title {
top: 2em;
background-color: rgba(var(--background-primary), 0.3);
backdrop-filter: blur(4px);
border-radius: 30%;
}
.sls-dialogue-note-wrapper {
display: flex;
justify-content: flex-end;
align-items: center;
}
.sls-dialogue-note-countdown {
font-size: 0.8em;
}
.sls-qr {
display: flex;
justify-content: center;
align-items: center;
max-width: max-content;
}
.sls-keypair pre {
max-width: 100%;
overflow-x: auto;
white-space: pre-wrap;
word-break: break-all;
}

View File

@@ -0,0 +1,51 @@
{
"Appearance-light@@theme-light-style-select": "theme-light-background-adapt",
"Appearance-light@@mod-left-split-background-select-light": "mod-left-split-background-CSS-light",
"Appearance-light@@background-mod-left-CSS-light": "radial-gradient(100% 50% at 100% 50%, rgba(90, 109, 237, 0.1) 0%, rgba(255, 255, 255, 0) 100%)",
"Appearance-light@@background-mod-left-CSS-backdrop-filter-light": "blur(0px)",
"Appearance-light@@mod-right-split-background-select-light": "mod-right-split-background-CSS-light",
"Appearance-light@@background-mod-right-CSS-light": "radial-gradient(100% 50% at 0% 50%, rgba(90, 109, 237, 0.1) 0%, rgba(255, 255, 255, 0) 100%)",
"Appearance-light@@background-mod-right-CSS-backdrop-filter-light": "blur(0px)",
"Appearance-light@@mod-root-split-background-select-light": "mod-root-split-background-CSS-light",
"Appearance-light@@background-mod-root-CSS-light": "transparent",
"Appearance-light@@background-mod-root-CSS-backdrop-filter-light": "blur(0px)",
"Appearance-light@@background-underlying-select-light": "background-underlying-CSS-light",
"Appearance-light@@background-underlying-CSS-light": "linear-gradient(168.44deg, #D7DAEA 1.62%, #F2F2F8 95.72%)",
"Appearance-light@@background-underlying-CSS-blend-mode-light": "normal",
"Appearance-light@@card-border-radius-light": "0px",
"Appearance-light@@card-shadow-light": "none",
"Appearance-light@@background-activated-tab-header-light": "radial-gradient(50% 150% at 50% 150%, #F8F9FF 0%, rgba(97, 54, 144, 0) 100%)",
"Appearance-light@@shadow-activated-tab-header-light": "none",
"Appearance-light@@Active-states-file-explorer-select-light": "activated-file-tab-style-light",
"Appearance-light@@workspace-divider-transparent-light": true,
"Components@@CTA-BTN-enable": true,
"Components@@file-names-untrim": true,
"Components@@folder-font-bold": true,
"Components@@colorful-folder": true,
"Components@@file-icon-remove": false,
"Components@@outline-enhanced": true,
"Components@@new-tab-btn-select": "new-tab-btn-default",
"Components@@immersive-canvas": true,
"Components@@scrollbar-hide": true,
"Appearance-light@@card-layout-open-light": true,
"Appearance-light@@accent-color-override-light": false,
"Appearance-light@@card-highlight-light": true,
"Editor@@line-hover-indicator": true,
"Editor@@focus-indicator-codeblock-line-number": true,
"Editor@@focus-indicator-list-level": true,
"Editor@@editor-grid-background-pattren": true,
"Editor@@inline-title-divider-remove": true,
"Editor@@h1-divider-on": true,
"Editor@@h2-divider-on": true,
"Editor@@h3-divider-on": true,
"Editor@@h4-divider-on": true,
"Editor@@h5-divider-on": true,
"Editor@@h6-divider-on": true,
"Editor@@text-align-justify": true,
"Editor@@bold-color@@light": "#4781EC",
"Editor@@italic-color@@light": "#FF4BFE",
"Editor@@img-center-align": true,
"Mobile@@drawer-phone-full-width": true,
"Mobile@@card-layout-pad-open": true,
"Plugin@@colorful-checkbox": true
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,10 @@
{
"id": "obsidian-style-settings",
"name": "Style Settings",
"version": "1.0.9",
"minAppVersion": "0.11.5",
"description": "Offers controls for adjusting theme, plugin, and snippet CSS variables.",
"author": "mgmeyers",
"authorUrl": "https://github.com/mgmeyers/obsidian-style-settings",
"isDesktopOnly": false
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,11 @@
{
"id": "templater-obsidian",
"name": "Templater",
"version": "2.14.1",
"description": "Create and use templates",
"minAppVersion": "1.5.0",
"author": "SilentVoid",
"authorUrl": "https://github.com/SilentVoid13",
"helpUrl": "https://silentvoid13.github.io/Templater/",
"isDesktopOnly": false
}

View File

@@ -0,0 +1,220 @@
.templater_search {
width: calc(100% - 20px);
}
.templater_div {
border-top: 1px solid var(--background-modifier-border);
}
.templater_div > .setting-item {
border-top: none !important;
align-self: center;
}
.templater_div > .setting-item > .setting-item-control {
justify-content: space-around;
padding: 0;
width: 100%;
}
.templater_div
> .setting-item
> .setting-item-control
> .setting-editor-extra-setting-button {
align-self: center;
}
.templater_donating {
margin: 10px;
}
.templater_title {
margin: 0;
padding: 0;
margin-top: 5px;
text-align: center;
}
.templater_template {
align-self: center;
margin-left: 5px;
margin-right: 5px;
width: 70%;
}
.templater_cmd {
margin-left: 5px;
margin-right: 5px;
font-size: 14px;
width: 100%;
}
.templater_div2 > .setting-item {
align-content: center;
justify-content: center;
}
.templater-prompt-div {
display: flex;
}
.templater-prompt-form {
display: flex;
flex-grow: 1;
}
.templater-prompt-input {
flex-grow: 1;
}
.templater-button-div {
display: flex;
flex-direction: column;
align-items: center;
margin-top: 1rem;
}
textarea.templater-prompt-input {
height: 10rem;
}
textarea.templater-prompt-input:focus {
border-color: var(--interactive-accent);
}
.cm-s-obsidian .templater-command-bg {
left: 0px;
right: 0px;
background-color: var(--background-primary-alt);
}
.cm-s-obsidian .cm-templater-command {
font-size: 0.85em;
font-family: var(--font-monospace);
line-height: 1.3;
}
.cm-s-obsidian .templater-inline .cm-templater-command {
background-color: var(--background-primary-alt);
}
.cm-s-obsidian .cm-templater-command.cm-templater-opening-tag {
font-weight: bold;
}
.cm-s-obsidian .cm-templater-command.cm-templater-closing-tag {
font-weight: bold;
}
.cm-s-obsidian .cm-templater-command.cm-templater-interpolation-tag {
color: var(--code-property, #008bff);
}
.cm-s-obsidian .cm-templater-command.cm-templater-execution-tag {
color: var(--code-function, #c0d700);
}
.cm-s-obsidian .cm-templater-command.cm-keyword {
color: var(--code-keyword, #00a7aa);
font-weight: normal;
}
.cm-s-obsidian .cm-templater-command.cm-atom {
color: var(--code-normal, #f39b35);
}
.cm-s-obsidian .cm-templater-command.cm-value,
.cm-s-obsidian .cm-templater-command.cm-number,
.cm-s-obsidian .cm-templater-command.cm-type {
color: var(--code-value, #a06fca);
}
.cm-s-obsidian .cm-templater-command.cm-def,
.cm-s-obsidian .cm-templater-command.cm-type.cm-def {
color: var(--code-normal, var(--text-normal));
}
.cm-s-obsidian .cm-templater-command.cm-property,
.cm-s-obsidian .cm-templater-command.cm-property.cm-def,
.cm-s-obsidian .cm-templater-command.cm-attribute {
color: var(--code-function, #98e342);
}
.cm-s-obsidian .cm-templater-command.cm-variable,
.cm-s-obsidian .cm-templater-command.cm-variable-2,
.cm-s-obsidian .cm-templater-command.cm-variable-3,
.cm-s-obsidian .cm-templater-command.cm-meta {
color: var(--code-property, #d4d4d4);
}
.cm-s-obsidian .cm-templater-command.cm-callee,
.cm-s-obsidian .cm-templater-command.cm-operator,
.cm-s-obsidian .cm-templater-command.cm-qualifier,
.cm-s-obsidian .cm-templater-command.cm-builtin {
color: var(--code-operator, #fc4384);
}
.cm-s-obsidian .cm-templater-command.cm-tag {
color: var(--code-tag, #fc4384);
}
.cm-s-obsidian .cm-templater-command.cm-comment,
.cm-s-obsidian .cm-templater-command.cm-comment.cm-tag,
.cm-s-obsidian .cm-templater-command.cm-comment.cm-attribute {
color: var(--code-comment, #696d70);
}
.cm-s-obsidian .cm-templater-command.cm-string,
.cm-s-obsidian .cm-templater-command.cm-string-2 {
color: var(--code-string, #e6db74);
}
.cm-s-obsidian .cm-templater-command.cm-header,
.cm-s-obsidian .cm-templater-command.cm-hr {
color: var(--code-keyword, #da7dae);
}
.cm-s-obsidian .cm-templater-command.cm-link {
color: var(--code-normal, #696d70);
}
.cm-s-obsidian .cm-templater-command.cm-error {
border-bottom: 1px solid #c42412;
}
.CodeMirror-hints {
position: absolute;
z-index: 10;
overflow: hidden;
list-style: none;
margin: 0;
padding: 2px;
-webkit-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
border-radius: 3px;
border: 1px solid silver;
background: white;
font-size: 90%;
font-family: monospace;
max-height: 20em;
overflow-y: auto;
}
.CodeMirror-hint {
margin: 0;
padding: 0 4px;
border-radius: 2px;
white-space: pre;
color: black;
cursor: pointer;
}
li.CodeMirror-hint-active {
background: #08f;
color: white;
}

View File

@@ -0,0 +1,7 @@
{
"name": "Border",
"version": "1.12.11",
"minAppVersion": "0.16.0",
"author": "Akifyss",
"authorUrl": "https://github.com/Akifyss"
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,8 @@
{
"name": "Minimal",
"version": "7.6.0",
"minAppVersion": "1.6.0",
"author": "@kepano",
"authorUrl": "https://twitter.com/kepano",
"fundingUrl": "https://www.buymeacoffee.com/kepano"
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,228 @@
{
"main": {
"id": "0d497f6739ef6df9",
"type": "split",
"children": [
{
"id": "306ec49a61f877d3",
"type": "tabs",
"children": [
{
"id": "8304b0e105b08ed0",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "树萌芽的小本本/目前已部署网站.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "目前已部署网站"
}
},
{
"id": "0e0e3e5c345789e5",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "Docker/Docker命令集合.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Docker命令集合"
}
}
]
}
],
"direction": "vertical"
},
"left": {
"id": "dd92142da425da5d",
"type": "split",
"children": [
{
"id": "18712eeca302c86a",
"type": "tabs",
"children": [
{
"id": "f1c17e2d203acce4",
"type": "leaf",
"state": {
"type": "file-explorer",
"state": {
"sortOrder": "alphabetical",
"autoReveal": false
},
"icon": "lucide-folder-closed",
"title": "文件列表"
}
},
{
"id": "0d80743f19037256",
"type": "leaf",
"state": {
"type": "search",
"state": {
"query": "",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical"
},
"icon": "lucide-search",
"title": "搜索"
}
},
{
"id": "29759c335a3c0889",
"type": "leaf",
"state": {
"type": "bookmarks",
"state": {},
"icon": "lucide-bookmark",
"title": "书签"
}
}
]
}
],
"direction": "horizontal",
"width": 300
},
"right": {
"id": "a00fc03fc4170f30",
"type": "split",
"children": [
{
"id": "553118af57cf253c",
"type": "tabs",
"children": [
{
"id": "330eb3c82c280cae",
"type": "leaf",
"state": {
"type": "backlink",
"state": {
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-coming-in",
"title": "反向链接"
}
},
{
"id": "a11bb24aba14d458",
"type": "leaf",
"state": {
"type": "outgoing-link",
"state": {
"linksCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-going-out",
"title": "出链"
}
},
{
"id": "66a43be089eb76fa",
"type": "leaf",
"state": {
"type": "tag",
"state": {
"sortOrder": "frequency",
"useHierarchy": true,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-tags",
"title": "标签"
}
},
{
"id": "5e4383b603638cf4",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"followCursor": false,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-list",
"title": "大纲"
}
}
]
}
],
"direction": "horizontal",
"width": 300,
"collapsed": true
},
"left-ribbon": {
"hiddenItems": {
"bases:创建新数据库": false,
"switcher:打开快速切换": false,
"graph:查看关系图谱": false,
"canvas:新建白板": false,
"daily-notes:打开/创建今天的日记": false,
"templates:插入模板": false,
"command-palette:打开命令面板": false,
"obsidian-livesync:Show Log": false,
"obsidian-livesync:Replicate": false,
"obsidian-livesync:P2P Replicator": false,
"obsidian-livesync:Show Customization sync": false
}
},
"active": "8304b0e105b08ed0",
"lastOpenFiles": [
"树萌芽的小本本/网站小技巧.md",
"树萌芽的小本本/目前已部署网站.md",
"Docker/优秀好用的Docker镜像/FileCodeBox-文件快递柜.md",
"Docker/优秀好用的Docker镜像/Postgres数据库.md",
"Docker/优秀好用的Docker镜像/未命名.md",
"临时解决方案/2025年大一下暑假规划大方向.md",
"树萌芽的小本本/树萌芽の编程想法.md",
"树萌芽的小本本/检测IP的网站.md",
"树萌芽的小本本/重要信息记录.md",
"Docker/优秀好用的Docker镜像/Gitea-私有化仓库部署.md",
"Docker/Docker命令集合.md",
"Docker/优秀好用的Docker镜像/MySQL数据库.md",
"Docker/优秀好用的Docker镜像/MongoDB数据库.md",
"Docker/优秀好用的Docker镜像/Redis数据库.md",
"Docker/Docker 镜像相关.md",
"Docker/优秀好用的Docker镜像",
"Docker",
"大萌芽-Debian13服务器.md",
"Docker/Docker镜像快速迁移.md",
"无线-HCIA 02.md",
"Linux相关/把Ubuntu镜像源切换到阿里云.md",
"编程语言/Android/安卓Gradle构建常用命令总结.md",
"临时解决方案/修改hosts方式来直连Github.md",
"临时解决方案/萌芽云剪切板.md",
"2025年9月紧急规划.md",
"树萌芽制作的小东西/网站/万象口袋/软件名字.md",
"树萌芽制作的小东西/网站/树萌芽API集合/功能详情.md",
"树萌芽制作的小东西/网站/树萌芽API集合/API目录.md",
"树萌芽制作的小东西/网站/树萌芽API集合",
"树萌芽制作的小东西/网站/万象口袋",
"编程语言/Golang",
"编程语言/CSharp",
"编程语言/C++",
"编程语言/C语言",
"编程语言",
"计算机网络",
"图片文件夹/Screenshot_20250717_225309.jpg",
"Screenshot_20250717_225309.jpg"
]
}

View File

@@ -0,0 +1,5 @@
1.数媒大赛-使用萌芽农场参赛❌✅
2.华为ICT大赛网络赛道实践赛道
3.学习Java面向对象顺便学习JavaSpring
4.Linux 红帽发行版9安装学习 ✅
5.计算机网络

View File

@@ -0,0 +1,11 @@
*by 树萌芽*
**图片风格为2D像素像素化风格比例 「1:1」 画一个游戏道具,背景是纯黑色,纯黑色**
**不带任何文字,没有任何文字,现在我要你画 一个闪闪发光的金黄色金币卡**
**图片风格为2D像素风格比例 「1:1」 画一个游戏元素风格为2.5D 就是上帝视角,就是正交斜视角那种有立体感,背景是纯黑色,纯黑色 不带任何文字,现在我要你画一个**
**一丛茂密的灌木丛 记住一定要3d立体感 只要 灌木丛 只要 灌木丛!**
比例 「1:1」图片风格为2D像素风格 画一个游戏装饰元素风格为2.5D 就是上帝视角,就是正交斜视角那种有立体感,背景是纯黑色,纯黑色 不带任何文字,现在我要你画一个 占卜测运算命台 相关的装饰可以多一点 记住一定要3d立体感

View File

@@ -0,0 +1,3 @@
1.取消CORS跨域限制允许任何链接
2.前端使用React框架后端使用python的Flask框架
3.前端修改在frontend文件夹后端修改在backend文件夹

View File

@@ -0,0 +1,80 @@
**Qwen Code** 是一个 CLI 工具,修改自 **Gemini CLI**,针对 Qwen3Coder系列的模型增强了解析器和工具支持。
确保已安装 Node.js 20 及以上版本,可以通过以下命令安装:
```bash
curl -qL https://www.npmjs.com/install.sh | sh
```
然后通过 npm 管理器安装 Qwen Code
```bash
npm i -g @qwen-code/qwen-code
```
> 另一种方式是从源码安装:
>
> ```bash
> git clone https://github.com/QwenLM/qwen-code.git
> cd qwen-code && npm install && npm install -g
> ```
Qwen Code 支持 OpenAI SDK 调用 LLM你可以导出以下环境变量或者简单地将其放在 `.envfile` 中。
```bash
export OPENAI_API_KEY="your_api_key_here"
export OPENAI_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
export OPENAI_MODEL="qwen3-coder-plus"
```
现在,你可以通过简单地输入 **`qwen`** 来享受 Qwen-Code 和 Qwen 带来的编程体验。
### Claude Code
除了 QwenCode 之外,现在还可以将 Qwen3Coder 与 ClaudeCode 搭配使用。只需在[阿里云百炼](https://bailian.console.aliyun.com/)平台申请APIKey并安装ClaudeCode即可开始畅享编码体验。
```bash
npm install -g @anthropic-ai/claude-code
```
我们提供了两种接入方式,帮助你无缝地用 Qwen3Coder 进行编码。
#### 使用dashscope提供的代理 API
只需要将Anthropic的base url替换成dashscope上提供的endpoint即可。
```bash
export ANTHROPIC_BASE_URL=https://dashscope.aliyuncs.com/api/v2/apps/claude-code-proxy
export ANTHROPIC_AUTH_TOKEN=your-dashscope-apikey
```
可选方案2使用 claude-code-config 自定义路由
#### Optional 2: 使用 claude-code-config 自定义路由
claude-code-router 是一个第三方的路由工具用于为ClaudeCode灵活地切换不同的后端 API。dashScope平台提供了一个简单的扩展包 claude-code-config可为 claude-code-router 生成包含 dashScope 支持的默认配置。
```bash
npm install -g @musistudio/claude-code-router
npm install -g @dashscope-js/claude-code-config
```
生成配置文件和插件目录:
```bash
ccr-dashscope
```
该命令会自动生成 ccr 所需的配置文件和插件目录。你也可以手动调整 ~/.claude-code-router/config.json 和 ~/.claude-code-router/plugins/ 中的配置。
最后,通过 ccr 开始使用 Claude Code
```bash
ccr code
```
至此,你即可通过 ccr 使用 ClaudeCode 畅享 Qwen3Coder 的强大编码能力。祝开发顺利!
### Cline
配置 Qwen3-Coder-480B-A35B-instruct 以使用 cline 进入 cline 的配置设置 选择“OpenAI Compatible”模式 在 OpenAI Compatible API tokens处输入从 Dashscope 获取的密钥 勾选“使用自定义基础 URL”并输入`https://dashscope.aliyuncs.com/compatible-mode/v1`  输入模型名称:`qwen3-coder-plus`

View File

@@ -0,0 +1,209 @@
---
Qwen Code 是一款专为 **Qwen3-Coder** 模型优化的命令行 AI 工作流工具,通过先进的代码理解能力、自动化任务和智能辅助功能,显著提升开发效率。
---
## 🛠 操作步骤
### 1⃣ 获取阿里云百炼 API Key
1. 登录 **阿里云百炼大模型服务平台**
2. 如果页面顶部显示 **image**,说明需要开通服务。
- 开通后可领取新人免费额度30~180天
- 如果提示 **实名认证**,请先完成认证。
3. 免费额度详情可在 **新人免费额度页面** 查看。
4. 获取 **阿里云百炼 API Key**
---
### 2⃣ 选择模型
Qwen Code 支持 **OpenAI 兼容接口模型**,包括:
- 🌟 **qwen3-coder-plus**推荐2025年7月23日起限时优惠
- qwen3-coder-480b-a35b-instruct
- qwen3-coder-flash
- qwen3-coder-30b-a3b-instruct
---
### 3⃣ 安装与配置 Qwen Code
#### ✅ Node.js 版本检查
```bash
node -v
```
**Node.js 20+**,低于则需重新安装。
#### 📦 安装 Qwen Code
```bash
# 配置镜像源加速
npm config set registry https://registry.npmmirror.com
# 安装 Qwen Code
npm install -g @qwen-code/qwen-code@latest
```
---
### 4⃣ 启动并配置 Qwen Code
1. 在终端中输入:
```bash
qwen
```
2. 选择认证方式 → **OpenAI**
3. 填写以下信息:
|配置项|说明|
|---|---|
|🔑 API Key|阿里云百炼 API Key|
|🌐 Base URL|`https://dashscope.aliyuncs.com/compatible-mode/v1`|
|🤖 Model|推荐 `qwen3-coder-plus`|
👉 若不想每次都输入,请配置 **环境变量**。
---
### 5⃣ 配置环境变量
在系统中设置:
```bash
export OPENAI_API_KEY=你的APIKey
export OPENAI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
export OPENAI_MODEL=qwen3-coder-plus
```
---
### 6⃣ 向 Qwen Code 提问
💡 示例问题:
```
如何用python实现一个二叉搜索树
```
Qwen Code 会自动创建文件、写入并执行代码。
---
### 7⃣ 查看 Token 消耗
输入:
```bash
/stats model
```
即可查看本次启动后的 **Token 消耗** 与 **API 调用次数**。
---
## 🎁 免费额度
- 阿里云百炼:**每个模型 100 万免费 Token**
- Qwen Code**每天 2000 次免费调用**
👉 为避免额外消费,可开启 **免费额度用完即停** 按钮。
---
## 🔧 进阶操作
更多功能请参考:
- 📘 [Qwen Code 文档]
- 📘 [阿里云百炼代码能力]
---
## ❓ 常见问题 (FAQ)
### ❓ Q为什么 Token 消耗快?
✅ A可能多次调用 API。
👉 控制方法:
- 精简工作目录(避免在项目根目录运行)。
- 设置 Token 限额:
```json
{
"sessionTokenLimit": 32000
}
```
- 使用指令:
- `/compress` → 压缩对话历史
- `/clear` → 清空历史
---
### ❓ Q如何切换模型
- 未配置环境变量:
1. `/quit` 退出
2. `qwen` 重新启动,手动输入 API Key、Base URL、模型名
- 已配置环境变量:
1. 修改 `OPENAI_MODEL`
2. `/quit` → `qwen` 重启
---
### ❓ Q如何使用每天 2000 次免费额度?
- 输入 `/auth` → 选择 **Qwen Oauth** → 登录 **Qwen Chat**
- 每天可免费调用 `qwen3-coder-plus` **2000 次**
- 超过 2000 次 → 切换回 **OpenAI 认证方式**
---
### ❓ Q为什么报 `401 Incorrect API key provided` 错误?
✅ 检查以下:
- API Key 是否正确
- 是否有全局环境变量覆盖了配置文件
---

View File

@@ -0,0 +1,31 @@
#### deepseek
**调用密钥:**
sk-832f8e5250464de08a31523c7fd71295
**调用地址:**
https://api.deepseek.com
**调用模型:**
deepseek-chat
deepseek-reasoner
阿里云百炼大模型平台:
通用秘钥sk-3d9e8e02a3704868b1a7159d52f2643d
字节火山方舟模型控制台:
通用秘钥fc439240-ed3c-4e65-acaf-3541c66c6ebc
#### Kimi
**调用密钥:**
sk-zdg9NBpTlhOcDDpoWfaBKu0KNDdGv18SipORnL2utawja0bE
**调用地址:**
https://api.moonshot.cn
**调用模型:**
kimi-k2-0905-preview
kimi-k2-0711-preview
kimi-k2-turbo-preview 这个非常贵
kimi-latest-8k 支持图片理解
kimi-latest-32k
kimi-latest-128k 这个非常贵

View File

@@ -0,0 +1,23 @@
deepseek api秘钥
调用密钥:
sk-16e24c16ff894771849ee6e15d4fb301
调用地址:
https://api.deepseek.com
阿里云百炼大模型平台:
通用秘钥:
sk-3d9e8e02a3704868b1a7159d52f2643d
调用地址:
https://dashscope.aliyuncs.com/compatible-mode/v1
字节火山方舟模型控制台:
通用秘钥:
fc439240-ed3c-4e65-acaf-3541c66c6ebc
调用地址:
https://ark.cn-beijing.volces.com/api/v3/chat/completions
kimi API调用
调用密钥:
sk-32M3DYWQdPlftpaGOmIuS7OFKzqCiSutktFPxPqTWn3oFadM
调用地址:
https://api.moonshot.cn

View File

@@ -0,0 +1,128 @@
### **Python调用示例**
```python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果您没有配置环境变量请在此处用您的API Key进行替换
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen3-coder-plus",
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': '请编写一个Python函数 find_prime_numbers该函数接受一个整数 n 作为参数,并返回一个包含所有小于 n 的质数素数的列表。质数是指仅能被1和其自身整除的正整数如2, 3, 5, 7等。不要输出非代码的内容。'}],
)
print("="*20+"回复内容"+"="*20)
print(completion.choices[0].message.content)
print("="*20+"Token消耗"+"="*20)
print(completion.usage)
```
**返回结果示例:**
````plaintext
====================回复内容====================
```python
def find_prime_numbers(n):
if n <= 2:
return []
primes = []
for num in range(2, n):
is_prime = True
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
is_prime = False
break
if is_prime:
primes.append(num)
return primes
```
====================Token消耗====================
CompletionUsage(completion_tokens=95, prompt_tokens=91, total_tokens=186, completion_tokens_details=None, prompt_tokens_details=PromptTokensDetails(audio_tokens=None, cached_tokens=0))
````
curl调用示例
```curl
curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-coder-plus",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "请编写一个Python函数 find_prime_numbers该函数接受一个整数 n 作为参数,并返回一个包含所有小于 n 的质数素数的列表。质数是指仅能被1和其自身整除的正整数如2, 3, 5, 7等。不要输出非代码的内容。"
}
]
}'
```
返回结果示例:
```json
{
"choices": [
{
"message": {
"content": "```python\ndef find_prime_numbers(n):\n if n <= 2:\n return []\n \n primes = []\n \n for num in range(2, n):\n is_prime = True\n for i in range(2, int(num ** 0.5) + 1):\n if num % i == 0:\n is_prime = False\n break\n if is_prime:\n primes.append(num)\n \n return primes\n```",
"role": "assistant"
},
"finish_reason": "stop",
"index": 0,
"logprobs": null
}
],
"object": "chat.completion",
"usage": {
"prompt_tokens": 91,
"completion_tokens": 95,
"total_tokens": 186,
"prompt_tokens_details": {
"cached_tokens": 0
}
},
"created": 1753192010,
"system_fingerprint": null,
"model": "qwen3-coder-plus",
"id": "chatcmpl-798c99c2-7410-9cc4-8385-6dfd757757fa"
}
```

View File

@@ -0,0 +1,67 @@
**QQ机器人框架NapCat**
```shell
#安装
docker run -d \
-e NAPCAT_GID=$(id -g) \
-e NAPCAT_UID=$(id -u) \
-p 4080:3000 \
-p 4070:3001 \
-p 4060:6099 \
--name napcat \
--restart=always \
mlikiowa/napcat-docker:latest
#固化以下路径,方便掉线时快速重新登录
#QQ 持久化数据路径:/app/.config/QQ
#NapCat 配置文件路径: /app/napcat/config
#登录 WebUI 后台地址http://<宿主机ip>:6099/webui
```
**网页SSH客户端-EasyNode**
```shell
#项目地址https://github.com/chaos-zhu/easynode
# 1. 创建easynode目录
mkdir -p /root/easynode && cd /root/easynode
# 2. 下载docker-compose.yml文件
wget https://git.221022.xyz/https://raw.githubusercontent.com/chaos-zhu/easynode/main/docker-compose.yml
# 3. 启动服务
docker-compose up -d
docker run -d -p 8082:8082 --restart=always -v /root/easynode/db:/easynode/app/db chaoszhu/easynode
### 监控服务
#安装
# 使用默认端口22022安装
curl -o- https://git.221022.xyz/https://raw.githubusercontent.com/chaos-zhu/easynode/main/client/easynode-client-install.sh | bash
# 使用自定义端口安装, 例如54321
curl -o- https://git.221022.xyz/https://raw.githubusercontent.com/chaos-zhu/easynode/main/client/easynode-client-install.sh | bash -s -- 54321
#卸载
curl -o- https://git.221022.xyz/https://raw.githubusercontent.com/chaos-zhu/easynode/main/client/easynode-client-uninstall.sh | bash
#查看监控服务状态systemctl status easynode-client
#查看监控服务日志: journalctl --follow -u easynode-client
#查看详细日志journalctl -xe
```
**docker加速地址**
![[Screenshot_20250717_225309.jpg]]
docker.1ms.run/
docker run -d -p 4050:80 --restart=always -v /shumengya/tu:/var/www/html docker.1ms.run/oaooa/pichome

View File

@@ -0,0 +1,116 @@
docker-compose up -d
docker-compose down
docker-compose restart
docker-compose logs -f
docker-compose ps
docker-compose build --no-cache
**Docker容器一键更新到最新版镜像以60s API举例**
```bash
#拉取最新镜像
docker pull vikiboss/60s:latest
docker pull mlikiowa/napcat-docker:latest
docker pull couchdb:latest #Obsidian同步的数据库
docker pull aceberg/watchyourlan #扫描局域网的工具
docker pull dpanel/dpanel:latest
#停止并删除旧容器
docker stop 60s
docker rm 60s
docker stop napcat
docker rm napcat
#兰空图床免费版
docker run -d \
--name lsky-pro \
-p 8089:80 \
-v /shumengya/docker/storage/lsky:/var/www/html \
--restart=always \
halcyonazure/lsky-pro:latest
#可视化Docker面板
docker run -d \
--name dpanel \
-p 8800:8080 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /shumengya/docker/storage/dpanel:/dpanel/data \
--restart=always \
dpanel/dpanel:latest
#扫描局域网的工具
docker run -d \
--name watch-your-lan \
--restart unless-stopped \
--net=host \
-e TZ=Asia/Shanghai \
-v /shumengya/docker/storage/watchyourlan:/data \
aceberg/watchyourlan
#Obsidian 同步数据库
docker run -d \
--name obsidian-couchdb \
-e COUCHDB_USER=shumengya \
-e COUCHDB_PASSWORD='tyh@19900420' \
-p 5984:5984 \
couchdb:latest
#60s api后端
docker run -d \
--restart always \
--name 60s \
-p 4399:4399 \
vikiboss/60s:latest
#napcat QQ机器人
docker run -d \
--name napcat \
--restart=always \
-e NAPCAT_GID=$(id -g) \
-e NAPCAT_UID=$(id -u) \
-p 4080:3000 \
-p 4070:3001 \
-p 4060:6099 \
-v /shumengya/docker/storage/napcat/qq:/app/.config/QQ \
-v /shumengya/docker/storage/napcat/config:/app/napcat/config \
mlikiowa/napcat-docker:latest
```

View File

@@ -0,0 +1,49 @@
---
## ✅ 方法一直接导出容器container → tar
如果你运行的是一个 **容器**(而不是镜像),可以直接打包它:
```bash
# 导出容器
docker export <容器ID或名字> -o container.tar
# 在另一台Linux机器上导入
docker import container.tar new-image:latest
```
特点:
- 容器的运行时文件系统会被打包(包含你安装的软件和修改),**但不会包含容器的历史层和环境变量**。
- 类似于“快照”迁移。
---
## ✅ 方法二保存镜像image → tar
如果你已经把容器做成了一个镜像,建议用 **save/load**
```bash
# 在源主机上保存镜像
docker save -o myimage.tar myimage:latest
docker save -o frpc-1panel.tar snowdreamtech/frpc:0.63.0
# 拷贝到目标主机(比如用 scp
scp myimage.tar user@remote:/path/
# 在目标主机导入
docker load -i myimage.tar
```
特点:
- 保留镜像层和构建历史。
- 推荐这种方式。
---

View File

@@ -0,0 +1,20 @@
```bash
docker run -d \
--name filecodebox \
--restart=always \
-p 12345:12345 \
-v /shumengya/docker/storage/filecodebox:/app/data \
lanol/filecodebox:beta
```
```bash
#典型的非关系型数据库json
docker pull lanol/filecodebox:beta
```
```
docker stop lanol/filecodebox:beta
docker rm lanol/filecodebox:beta
```

View File

@@ -0,0 +1,24 @@
```bash
#github/gitlab的本地轻量化部署代替-gitea
docker run -d \
--name gitea \
-p 8989:3000 \
-p 8022:22 \
-e USER_UID=1000 \
-e USER_GID=1000 \
-v /shumengya/docker/storage/gitea:/data \
--restart=always \
gitea/gitea:latest
```
```bash
#典型的非关系型数据库json
docker pull gitea/gitea:latest
```
```
docker stop gitea/gitea:latest
docker rm gitea/gitea:latest
```

View File

@@ -0,0 +1,15 @@
```bash
#MongoDB数据库
docker run -d --name mongodb \
-e MONGO_INITDB_ROOT_USERNAME=shumengya \
-e MONGO_INITDB_ROOT_PASSWORD=shumengya520 \
-v /shumengya/docker/storage/mongodb:/data/db \
-p 27017:27017 \
mongo
```
```bash
#典型的非关系型数据库json
docker pull mongo
```

View File

@@ -0,0 +1,36 @@
```bash
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=shumengya520 \
-e MYSQL_DATABASE=shumengyadb \
-e MYSQL_USER=shumengya \
-e MYSQL_PASSWORD=shumengya520 \
-v /shumengya/docker/storage/mysql:/var/lib/mysql \
-p 3306:3306 \
--restart=always \
mysql:latest
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=shumengya520 \
-e MYSQL_DATABASE=shumengyadb \
-e MYSQL_USER=shumengya \
-e MYSQL_PASSWORD=shumengya520 \
-v /shumengya/docker/storage/mysql:/var/lib/mysql \
-p 3306:3306 \
--restart=always \
mysql:5.7.44
```
```bash
#典型的非关系型数据库json
docker pull mysql:5.7.44
```
```
docker stop mysql
docker rm mysql
```

View File

@@ -0,0 +1,25 @@
```bash
#postgres数据库
docker run -d \
--name postgres \
-e POSTGRES_PASSWORD=shumengya520 \
-e POSTGRES_USER=shumengya \
-e POSTGRES_DB=shumengyadb \
-v /shumengya/docker/storage/postgres:/data \
-e PGDATA=/data/pgdata \
-p 5432:5432 \
--restart=always \
postgres:latest
```
```bash
#典型的非关系型数据库json
docker pull postgres:latest
```
```
docker stop postgres:latest
docker rm postgres:latest
```

View File

@@ -0,0 +1,15 @@
```bash
#MongoDB数据库
docker run -d --name mongodb \
-e MONGO_INITDB_ROOT_USERNAME=shumengya \
-e MONGO_INITDB_ROOT_PASSWORD=shumengya520 \
-v /shumengya/docker/storage/mongodb:/data/db \
-p 27017:27017 \
mongo
```
```bash
#典型的非关系型数据库json
docker pull mongo
```

View File

@@ -0,0 +1,95 @@
---
## Releases发行版本相关接口
- **获取最新发布版本Latest Release**
`GET /repos/{owner}/{repo}/releases/latest`
返回最新非预发布、非草稿版的发布详情,包括版本号、发布时间、说明等。([GitHub Docs](https://docs.github.com/en/rest/releases?utm_source=chatgpt.com "REST API endpoints for releases and release assets"))
- **列出所有发布版本List Releases**
`GET /repos/{owner}/{repo}/releases`
返回该仓库所有发布版本的列表,不包含未关联发布的普通 Git 标签。([GitHub Docs](https://docs.github.com/en/rest/releases/releases?utm_source=chatgpt.com "REST API endpoints for releases"))
- **通过 Tag 获取指定发布版本Get a Release by Tag**
`GET /repos/{owner}/{repo}/releases/tags/{tag}`
根据具体 tag 名称获取对应发布版本的信息。([GitHub Docs](https://docs.github.com/en/rest/releases?utm_source=chatgpt.com "REST API endpoints for releases and release assets"))
- **创建、更新、删除发布版本Create / Update / Delete Release**
- `POST /repos/{owner}/{repo}/releases` — 创建新的发布版本
- `PATCH /repos/{owner}/{repo}/releases/{release_id}` — 更新发布版本
- `DELETE /repos/{owner}/{repo}/releases/{release_id}` — 删除发布版本
(这些操作通常需要认证权限。)([GitHub Docs](https://docs.github.com/en/rest/releases?utm_source=chatgpt.com "REST API endpoints for releases and release assets"))
---
## Git Tags标签相关接口
- **列出仓库的 Git 标签**
`GET /repos/{owner}/{repo}/tags`
返回该仓库所有标签(包括 lightweight 和 annotated。([Stack Overflow](https://stackoverflow.com/questions/18384873/how-to-list-the-releases-of-a-repository?utm_source=chatgpt.com "github - How to list the releases of a repository?"), [GitHub Docs](https://docs.github.com/en/rest/repos/tags?utm_source=chatgpt.com "REST API endpoints for repository tags"))
- **获取标签引用Tag Reference**
`GET /repos/{owner}/{repo}/git/refs/tags/{tag_name}`
可获取该标签所对应的对象TAG_SHA用于进一步查询。([Stack Overflow](https://stackoverflow.com/questions/72429056/how-to-get-single-tag-information-using-github-api?utm_source=chatgpt.com "How to get Single tag Information using GitHub Api?"))
- **获取 Annotated Tag 对象详情**
`GET /repos/{owner}/{repo}/git/tags/{tag_sha}`
获取标签对象的完整信息,包括 `object.sha` 即对应的 commit SHA、tagger、message 等。([Stack Overflow](https://stackoverflow.com/questions/72429056/how-to-get-single-tag-information-using-github-api?utm_source=chatgpt.com "How to get Single tag Information using GitHub Api?"))
---
## Commits提交相关接口
- **列出提交记录List Commits**
`GET /repos/{owner}/{repo}/commits`
返回最新的提交列表,第一个通常为最新提交。响应中包含 SHA、作者、提交信息、签名验证信息等。([GitHub Docs](https://docs.github.com/en/rest/commits/commits?utm_source=chatgpt.com "REST API endpoints for commits"))
- **获取单个提交详情Get a Commit**
`GET /repos/{owner}/{repo}/commits/{commit_sha}`
获取指定提交的详细信息。([GitHub Docs](https://docs.github.com/en/rest/commits?utm_source=chatgpt.com "REST API endpoints for commits"))
- **比较两个提交Compare Commits**
`GET /repos/{owner}/{repo}/compare/{base}...{head}`
用于比较两个 commit 或两个 tag 之间的差异。([Stack Overflow](https://stackoverflow.com/questions/61359461/get-all-commits-in-a-git-tag-through-github-api-return-only-the-first-commit?utm_source=chatgpt.com "get all commits in a Git tag through GitHub API return only ..."))
---
## 综合流程示例
下面是一个常见逻辑,例如想获取最新发布对应的 commit SHA
1. 调用 `GET /repos/{owner}/{repo}/releases/latest` 获取最新 release 的 `tag_name`
2. 调用 `GET /repos/{owner}/{repo}/git/refs/tags/{tag_name}` 获取 TAG_SHA。
3. 调用 `GET /repos/{owner}/{repo}/git/tags/{tag_sha}` 获取该标签对象的 commit SHAobject.sha
这套流程常用于从发布版本跳转到对应的 Git 提交。([Stack Overflow](https://stackoverflow.com/questions/67040794/how-can-i-get-the-commit-hash-of-the-latest-release-from-github-api?utm_source=chatgpt.com "How can I get the commit hash of the latest release from ..."))
---
## 表格总结
|功能需求|接口路径 / 方法|
|---|---|
|最新发布版本信息|`GET /repos/{owner}/{repo}/releases/latest`|
|列出所有发布版本|`GET /repos/{owner}/{repo}/releases`|
|通过 tag 查询发布|`GET /repos/{owner}/{repo}/releases/tags/{tag}`|
|获取标签列表|`GET /repos/{owner}/{repo}/tags`|
|获取标签引用TAG_SHA|`GET /repos/{owner}/{repo}/git/refs/tags/{tag_name}`|
|获取标签对象详情|`GET /repos/{owner}/{repo}/git/tags/{tag_sha}`|
|列出提交|`GET /repos/{owner}/{repo}/commits`|
|获取指定 commit 信息|`GET /repos/{owner}/{repo}/commits/{commit_sha}`|
|比较两个 commit/tag|`GET /repos/{owner}/{repo}/compare/{base}...{head}`|
---
如果你还希望了解更多,如 API 速率限制、认证方式(匿名 vs token、分页处理per_page、page 参数)、使用 GraphQL API 实现同类功能,或具体的 JavaScript `fetch` 调用示例,都可以随时继续讨论!

View File

@@ -0,0 +1,60 @@
这个地方要注意:
你输入 `git push` 时出现
```
Username for 'https://github.com': shumengya
Password for 'https://shumengya@github.com':
```
这里的 **Password** 已经不是 GitHub 登录密码了。
从 2021 年 8 月开始GitHub **禁用了账户密码推送**,必须用 **Personal Access Token (PAT)****SSH Key** 来认证。
---
### ✅ 方案一:生成 Personal Access TokenHTTPS 推荐)
1. 登录 GitHub → 右上角头像 → **Settings**
2. 左侧栏 → **Developer settings****Personal access tokens****Tokens (classic)**
3. 点击 **Generate new token (classic)**
* 勾选 **repo**(访问和推送仓库必须要有)
* 设置有效期(比如 90 天或无期限)
* 点击生成
4. 复制生成的 Token只会显示一次
之后推送时:
* **Username**:填 GitHub 用户名(`shumengya`
* **Password**:填刚生成的 Token
---
### ✅ 方案二:改用 SSH Key更方便
1. 本地生成 SSH Key
```bash
ssh-keygen -t ed25519 -C "你的邮箱"
```
按回车保存,默认会在 `~/.ssh/id_ed25519` 和 `~/.ssh/id_ed25519.pub`。
2. 查看公钥:
```bash
cat ~/.ssh/id_ed25519.pub
```
3. 复制内容 → GitHub → **Settings → SSH and GPG keys → New SSH key** → 粘贴保存。
4. 修改仓库地址为 SSH
```bash
git remote set-url origin git@github.com:shumengya/你的仓库名.git
```
5. 之后直接 `git push` 就不用输密码了。
---
👉 建议你选 **SSH Key**,因为用一次就永久生效,不会过期。
要不要我给你写一份 **完整 SSH Key 配置和测试流程**(从生成到验证)?

View File

@@ -0,0 +1,52 @@
**修改全局代理为http1**
```
git config --global http.version HTTP/1.1
```
**相当于 git fetch + git merge会把远程最新提交合并到你当前分支。**
```
git pull
```
**这会把你的本地提交临时“挪开”,先更新远程提交,然后再把你的提交放回去,避免多余的合并记录。**
```
git pull --rebase
```
**如果只想下载最新提交但不合并**
```
git fetch
```
**树萌芽GitHub仓库提交代码通用密钥**
```
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
```
### 1. 添加所有改动
```
git add .
```
### 2. 提交,写上提交说明
```
git commit -m "更新说明"
```
### 3. 推送到远程仓库(假设分支是 main
```
git push origin main
```
**压缩成一条命令实现:**
```
git add . && git commit -m "update" && git push origin main
```
**或者设置命令别名,比如写进 ~/.bashrc 或 ~/.zshrc**
```
alias gopush='git add . && git commit -m "update" && git push origin main'
```
注意:校园网可能会屏蔽梯子,必要时开热点提交

View File

@@ -0,0 +1,111 @@
下面给你整理了一份 **Linux 下常用的 Git 命令速查表**,涵盖从初始化到协作的常见操作:
---
## 🔹 基础配置
```bash
git config --global user.name "你的名字" # 设置用户名
git config --global user.email "你的邮箱" # 设置邮箱
git config --global core.editor "vim" # 设置默认编辑器
git config --list # 查看当前配置
```
---
## 🔹 仓库初始化与克隆
```bash
git init # 初始化一个本地仓库
git clone <repo_url> # 克隆远程仓库
git clone <repo_url> myproj # 克隆并重命名文件夹
```
---
## 🔹 文件操作
```bash
git status # 查看仓库当前状态
git add <file> # 添加文件到暂存区
git add . # 添加所有修改到暂存区
git reset <file> # 从暂存区撤销已添加的文件
git rm <file> # 删除文件并记录到暂存区
git mv old new # 重命名文件并记录到暂存区
```
---
## 🔹 提交相关
```bash
git commit -m "说明" # 提交暂存区到仓库
git commit -am "说明" # 添加修改并提交(跳过 git add
git log # 查看提交历史
git log --oneline --graph # 图形化查看分支提交记录
```
---
## 🔹 分支操作
```bash
git branch # 查看分支
git branch <name> # 创建分支
git checkout <name> # 切换分支
git checkout -b <name> # 新建并切换分支
git merge <name> # 合并分支到当前分支
git branch -d <name> # 删除分支
```
---
## 🔹 远程仓库
```bash
git remote -v # 查看远程仓库地址
git remote add origin <url> # 添加远程仓库
git remote remove origin # 删除远程仓库
git push origin master # 推送 master 分支到远程
git push -u origin <branch> # 推送并设置默认分支
git pull origin master # 拉取远程更新并合并
git fetch origin # 抓取远程分支(不合并)
```
---
## 🔹 回退与撤销
```bash
git checkout -- <file> # 撤销工作区修改
git reset HEAD <file> # 取消暂存区文件
git reset --hard HEAD~1 # 回退到上一个提交
git revert <commit_id> # 撤销指定提交,生成新提交
```
---
## 🔹 标签管理
```bash
git tag # 查看标签
git tag v1.0 # 打标签
git tag -a v1.0 -m "说明" # 创建附注标签
git push origin v1.0 # 推送标签到远程
git push origin --tags # 推送所有标签
```
---
## 🔹 常用技巧
```bash
git stash # 临时保存修改
git stash pop # 恢复最近一次保存
git diff # 查看未暂存的修改
git diff --cached # 查看已暂存的修改
```
---

View File

@@ -0,0 +1,57 @@
两数之和问题 - 详细运算过程解析
算法思路回顾
使用哈希表(字典)来存储已经遍历过的数字及其索引,对于每个当前数字,计算其与目标值的差值(补数),并检查该补数是否已经在哈希表中存在。
详细运算过程
让我们通过一个具体例子来详细解析算法的执行过程:
示例: nums = [2, 7, 11, 15], target = 9
初始化阶段
```python
num_map = {} # 创建一个空字典用于存储数字和索引的映射
```
第一次迭代 (i=0, num=2)
1. 计算补数complement = target - num = 9 - 2 = 7
2. 检查补数7是否在num_map中7 in num_map → 结果为False因为字典为空
3. 将当前数字和索引存入字典num_map[2] = 0
4. 此时字典状态:{2: 0}
第二次迭代 (i=1, num=7)
1. 计算补数complement = target - num = 9 - 7 = 2
2. 检查补数2是否在num_map中2 in num_map → 结果为True因为字典中有键2
3. 找到匹配,返回结果:[num_map[2], 1] → [0, 1]
4. 算法结束,返回结果[0, 1]
运算过程可视化
迭代次数 当前索引(i) 当前值(num) 补数(complement) 补数是否在num_map中 num_map更新 操作说明
1 0 2 7 否 {2:0} 将2和索引0存入字典
2 1 7 2 是 - 找到匹配,返回[0,1]
关键点解析
1. 补数计算对于每个数字计算target - num得到补数这个补数就是我们需要在之前遍历过的数字中寻找的值。
2. 哈希表的作用哈希表用于存储已经遍历过的数字及其索引这样可以在O(1)时间内检查补数是否存在。
3. 顺序重要性:算法先检查补数是否存在,然后再将当前数字存入字典,这样可以确保不会使用同一个元素两次。
4. 时间复杂度每个元素只被访问一次哈希表的插入和查找操作平均时间复杂度为O(1)因此总时间复杂度为O(n)。
5. 空间复杂度最坏情况下需要存储所有n个元素因此空间复杂度为O(n)。
为什么这种方法有效?
这种方法有效的关键在于利用了数学关系如果a + b = target那么target - a = b。通过存储已经遍历过的数字我们可以快速检查当前数字的补数是否已经出现过。
这种方法比暴力解法双重循环高效得多将时间复杂度从O(n²)降低到O(n),是典型的"以空间换时间"策略。
边界情况处理
虽然题目保证有解,但实际应用中可能需要考虑无解的情况。我们的代码在无解时会返回空列表,这是一种合理的处理方式。
这种算法设计简洁高效,是解决两数之和问题的标准方法,被广泛应用于各种编程面试和实际开发中。

View File

@@ -0,0 +1,155 @@
两数相加问题
问题描述
给定两个非空链表,表示两个非负整数。每位数字按照逆序方式存储,每个节点存储一位数字。将两个数相加,并以相同形式返回表示和的链表。
假设除了数字0之外这两个数都不会以0开头。
示例
示例 1
```
输入l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释342 + 465 = 807
```
示例 2
```
输入l1 = [0], l2 = [0]
输出:[0]
```
示例 3
```
输入l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
```
提示
· 每个链表中的节点数在范围 [1, 100] 内
· 0 <= Node.val <= 9
· 题目数据保证列表表示的数字不含前导零
方法思路
问题分析
两个链表表示的数字是逆序存储的,即链表的头节点表示个位数,第二个节点表示十位数,以此类推。我们需要模拟加法运算,从低位到高位逐位相加,并处理进位问题。
算法选择
· 使用一个虚拟头节点(dummy node)简化链表操作
· 同时遍历两个链表,逐位相加并处理进位
· 如果链表长度不同较短链表的缺失位视为0
· 最后如果还有进位,需要额外创建一个节点
算法步骤
1. 初始化虚拟头节点和当前指针
2. 初始化进位值为0
3. 同时遍历两个链表,直到两个链表都遍历完且没有进位
4. 计算当前位的和:两个链表当前节点的值加上进位
5. 计算新的进位和当前位的值
6. 创建新节点并连接到结果链表
7. 移动所有指针到下一个位置
8. 返回虚拟头节点的下一个节点
复杂度分析
· 时间复杂度O(max(m, n))其中m和n分别是两个链表的长度
· 空间复杂度O(max(m, n))结果链表的长度最多为max(m, n) + 1
解决代码
```python
# Definition for singly-linked list.
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
"""
将两个逆序存储的数字链表相加,返回结果链表
参数:
l1: ListNode - 第一个数字链表
l2: ListNode - 第二个数字链表
返回:
ListNode - 相加结果的链表
"""
dummy = ListNode(0) # 虚拟头节点
current = dummy # 当前指针
carry = 0 # 进位值
# 遍历两个链表,直到两个链表都为空且没有进位
while l1 or l2 or carry:
# 获取当前节点的值如果节点为空则为0
val1 = l1.val if l1 else 0
val2 = l2.val if l2 else 0
# 计算当前位的和
total = val1 + val2 + carry
carry = total // 10 # 计算进位
digit = total % 10 # 计算当前位的值
# 创建新节点并连接到结果链表
current.next = ListNode(digit)
current = current.next
# 移动到下一个节点
if l1:
l1 = l1.next
if l2:
l2 = l2.next
return dummy.next # 返回结果链表的头节点
```
代码解释
1. 链表节点定义ListNode类定义了链表节点的结构包含值val和指向下一个节点的指针next。
2. 初始化:
· 创建虚拟头节点dummy简化链表操作
· 设置当前指针current指向虚拟头节点
· 初始化进位carry为0
3. 循环处理:
· 使用while循环遍历两个链表直到两个链表都遍历完且没有进位
· 循环条件l1 or l2 or carry确保处理所有情况
4. 获取当前值:
· 如果链表节点存在获取其值否则视为0
· 这样可以处理链表长度不同的情况
5. 计算和与进位:
· 计算当前位的总和val1 + val2 + carry
· 计算新的进位total // 10
· 计算当前位的值total % 10
6. 创建新节点:
· 根据当前位的值创建新节点
· 将新节点连接到结果链表
· 移动当前指针到新节点
7. 移动指针:
· 如果链表还有节点,移动到下一个节点
· 这样可以继续处理后续位
8. 返回结果:
· 返回虚拟头节点的下一个节点,即结果链表的头节点
· 虚拟头节点简化了链表操作,避免处理空链表的情况
示例验证
以示例1为例l1 = [2,4,3] (表示342)l2 = [5,6,4] (表示465)
1. 个位2 + 5 = 7进位0 → 结果个位7
2. 十位4 + 6 = 10进位1 → 结果十位0
3. 百位3 + 4 + 1 = 8进位0 → 结果百位8
最终结果为[7,0,8] (表示807),符合预期。
这种方法高效地处理了链表相加的问题,考虑了所有边界情况,包括链表长度不同和最后有进位的情况。

View File

@@ -0,0 +1,94 @@
两数之和问题
问题描述
给定一个整数数组 nums 和一个整数目标值 target请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。
示例 1
```
输入nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9返回 [0, 1]。
```
示例 2
```
输入nums = [3,2,4], target = 6
输出:[1,2]
```
示例 3
```
输入nums = [3,3], target = 6
输出:[0,1]
```
提示:
· 2 <= nums.length <= 10^4
· -10^9 <= nums[i] <= 10^9
· -10^9 <= target <= 10^9
· 只会存在一个有效答案
方法思路
1. 问题分析
我们需要在数组中找到两个不同的元素它们的和等于目标值。由于数组可能很大暴力解法双重循环的时间复杂度为O(n²),效率太低。
2. 算法选择
使用哈希表来存储每个元素及其索引这样可以在O(1)时间内检查目标值与当前元素的差值是否存在于哈希表中。
3. 算法步骤
1. 初始化一个空哈希表(字典)
2. 遍历数组中的每个元素及其索引
3. 对于每个元素,计算目标值与当前元素的差值(补数)
4. 检查该差值是否已存在于哈希表中
5. 如果存在,返回当前索引和差值的索引
6. 如果不存在,将当前元素及其索引存入哈希表
4. 复杂度分析
· 时间复杂度O(n),只需遍历数组一次
· 空间复杂度O(n),用于存储哈希表
解决代码
```python
def twoSum(nums, target):
"""
在给定数组中找出和为目标值的两个整数的索引
参数:
nums: List[int] - 整数数组
target: int - 目标值
返回:
List[int] - 两个整数的索引列表
"""
num_map = {} # 创建空字典存储数字和索引的映射
for i, num in enumerate(nums): # 遍历数组,获取索引和数值
complement = target - num # 计算补数
if complement in num_map: # 检查补数是否在字典中
return [num_map[complement], i] # 如果在,返回两个索引
num_map[num] = i # 如果不在,将当前数字和索引存入字典
return [] # 如果没有找到,返回空列表(但题目保证有解,所以不会执行到这里)
```
代码解释
1. 初始化哈希表num_map 用于存储元素值到索引的映射
2. 遍历数组:使用 enumerate 函数同时获取元素的索引 i 和数值 num
3. 计算补数:对于每个 num计算 complement = target - num
4. 检查补数是否存在:如果补数存在于哈希表中,说明找到了两个数,返回它们的索引
5. 存储当前元素:如果补数不存在,将当前元素及其索引存入哈希表,以便后续查找
6. 返回结果:如果遍历结束仍未找到,返回空列表(但题目保证有解,所以不会执行到此)
这种方法确保了高效查找,适用于大规模数据输入,是解决此类问题的标准方法。

View File

@@ -0,0 +1,42 @@
1. 打包单个文件:
```
zip 压缩包名称.zip 要打包的文件
```
2. 打包多个文件:
```
zip 压缩包名称.zip 文件1 文件2 文件3
```
3. 打包整个目录(包括子目录):
```
zip -r 压缩包名称.zip 要打包的目录
```
4. 打包目录并排除某些文件:
```
zip -r 压缩包名称.zip 要打包的目录 -x 要排除的文件或目录
```
5. 带密码打包:
```
zip -r -e 压缩包名称.zip 要打包的目录
```
执行后会提示你输入密码
例如要打包当前目录下的documents文件夹为backup.zip可以使用
```
zip -r backup.zip documents
```
如果系统中没有zip命令可以先安装
- Debian/Ubuntu: sudo apt install zip

View File

@@ -0,0 +1,46 @@
在Linux命令行中选项的不同书写形式反映了三种主流风格的设计逻辑以下是结合历史背景与实际应用场景的深度解析
### 一、Unix/Posix风格简洁至上的单字符范式
这是最古老的选项体系诞生于Unix电传打字机时代。其核心特征是
- **符号标识**:必须以单个短横线`-`开头,如`ls -a`
- **组合规则**:无参数的选项可自由拼接,如`ls -alh`等价于`ls -a -l -h`
- **参数绑定**:带参数的选项需紧跟值,如`-w50``-w 50`均可
- **历史局限**受限于26个字母的容量复杂工具需依赖组合`find -type f -exec`
典型场景:文件操作(`ls``cp`)、权限管理(`chmod`)等基础命令。这种风格的高效性在处理批量文件时尤为突出,例如`rm -rf`的组合操作。
### 二、BSD风格去符号化的实用主义
BSD操作系统对Unix传统的突破体现在
- **无符号标识**:直接使用字母组合,如`ps aux`
- **灵活组合**:多个选项可连写且无需分隔符,如`tar zxf archive.tar.gz`
- **参数兼容**:带参数的选项可空格分隔或直接拼接,如`ps Uroot``ps U root`等效
这种设计源于BSD对用户体验的优化例如`ps aux`的组合能直观展示进程全貌。但需注意并非所有BSD风格选项都能随意组合`ps fx`中的`f``x`分别控制显示格式和非终端进程,顺序调换可能影响输出。
### 三、GNU风格可读性优先的长选项
GNU项目为解决单字符选项的语义模糊问题引入了
- **双横线标识**:以`--`开头的完整单词,如`gzip --help`
- **参数传递**:支持`--sort=time``--sort time`两种格式
- **缩写机制**:唯一前缀即可生效,如`--cre`可替代`--create`
- **功能扩展**:突破字母限制,如`wget --user-agent`可自定义请求头
这种风格在复杂工具(如`git``docker`)中广泛应用,例如`git commit --amend``-a`更清晰。GNU工具通常同时支持长/短选项,如`ls --all``-a`等效。
### 四、混合使用的注意事项
1. **解析优先级**:旧风格选项需置于最前,如`tar cvf --exclude=*.tmp``cvf`为传统选项,`--exclude`为GNU选项
2. **命令特异性**:并非所有命令都支持混合风格,例如`ps`可接受`ps -ef`Unix风格`ps aux`BSD风格`ps -aux`会被解析为混合模式
3. **参数歧义**:当选项与文件名冲突时,可用`--`终止选项解析,如`rm -- -file`可强制删除名为`-file`的文件
### 五、典型命令的风格对比
| 命令 | Unix风格 | BSD风格 | GNU风格 |
|------------|-------------------|-----------------|------------------|
| 解压缩 | `tar -zxf file` | `tar zxf file` | `tar --gzip --extract --file=file` |
| 进程查看 | `ps -ef` | `ps aux` | `ps --forest` |
| 显示帮助 | `ls -h` | `ls h`(无效) | `ls --help` |
### 六、历史演变与实践建议
- **工具适配**GNU工具普遍兼容多种风格而BSD衍生工具`freebsd``ps`)可能仅支持特定格式
- **学习路径**新手建议从GNU长选项入手`--help`),逐步掌握短选项组合
- **文档依赖**:使用`man``--help`查看具体命令的选项说明,例如`tar --help`会列出所有支持的风格
理解这些风格差异不仅能更高效地使用命令行还能深入体会不同开发社区的设计哲学。例如GNU的长选项体现了自由软件运动对可读性的追求而BSD的简洁风格则延续了Unix“做一件事并做好”的理念。在实际应用中可根据场景灵活选择快速操作时用短选项复杂配置时用长选项疑难问题则结合`--help``man`手册。

View File

@@ -0,0 +1,3 @@
```bash
sudo apt install docker-compose -y
```

View File

@@ -0,0 +1,153 @@
`/proc` 在 Linux 中是一个 **伪文件系统 (procfs)**,它不是存储在磁盘上的真实文件,而是内核在内存中动态生成的接口,主要用于提供 **内核、进程和系统状态** 的信息。几乎所有的监控工具(如 `top``htop``ps``free``uptime``vmstat``iostat`)都是通过读取 `/proc` 下的文件获取数据的。
---
# 🗂 **/proc 能查看的信息汇总**
## 1. **进程相关信息**
每个正在运行的进程在 `/proc` 下都会有一个以 **PID** 命名的目录,例如 `/proc/1234/`。里面的内容主要是该进程的状态:
- `/proc/[pid]/cmdline` → 启动命令行参数
- `/proc/[pid]/cwd` → 当前工作目录 (符号链接)
- `/proc/[pid]/exe` → 可执行文件路径 (符号链接)
- `/proc/[pid]/environ` → 环境变量
- `/proc/[pid]/fd/` → 打开的文件描述符
- `/proc/[pid]/maps` → 内存映射情况
- `/proc/[pid]/stat` → 进程状态、运行时间、优先级等
- `/proc/[pid]/status` → 可读性较好的进程状态信息
- `/proc/[pid]/task/` → 线程信息(子目录为线程 ID
---
## 2. **CPU 相关信息**
- `/proc/cpuinfo` → CPU 型号、核心数、主频、缓存大小、虚拟化支持等
- `/proc/stat` → CPU 使用率、上下文切换、中断次数等
- `/proc/interrupts` → 中断统计
- `/proc/softirqs` → 软中断统计
---
## 3. **内存信息**
- `/proc/meminfo` → 总内存、可用内存、缓存、swap 等
- `/proc/kcore` → 内核内存映射(类似物理内存的转储)
- `/proc/vmallocinfo` → 内核虚拟内存使用情况
- `/proc/slabinfo` → 内核对象缓存slab 分配器)
---
## 4. **系统信息**
- `/proc/version` → 内核版本信息
- `/proc/uptime` → 系统运行时间和空闲时间
- `/proc/loadavg` → 系统平均负载
- `/proc/cmdline` → 内核启动参数
- `/proc/modules` → 已加载的内核模块
- `/proc/filesystems` → 支持的文件系统类型
- `/proc/mounts` → 当前挂载的文件系统(和 `mount` 命令一致)
- `/proc/partitions` → 磁盘分区信息
- `/proc/devices` → 已注册的设备
- `/proc/ioports` → I/O 端口使用情况
- `/proc/iomem` → 内存映射的 I/O 信息
- `/proc/diskstats` → 磁盘 I/O 统计
- `/proc/locks` → 当前内核中的文件锁
---
## 5. **网络信息**
`/proc/net/` 目录下:
- `/proc/net/dev` → 网络接口的流量统计(类似 `ifconfig``ip -s link`
- `/proc/net/tcp``/proc/net/udp` → TCP/UDP 连接信息(类似 `ss``netstat`
- `/proc/net/unix` → UNIX 套接字信息
- `/proc/net/route` → 路由表
- `/proc/net/arp` → ARP 缓存表
- `/proc/net/snmp` → 网络协议统计信息ICMP、TCP、UDP
---
## 6. **内核配置与参数**
- `/proc/sys/` → 内核参数(可读可写,可通过 `sysctl` 修改),例如:
- `/proc/sys/net/ipv4/ip_forward` → 是否启用 IPv4 转发
- `/proc/sys/kernel/hostname` → 主机名
- `/proc/sys/kernel/pid_max` → 最大进程号
- `/proc/sys/vm/swappiness` → 内存换出策略
---
## 7. **其他有用的文件**
- `/proc/self/` → 当前进程(即访问 `/proc` 的进程本身)的信息
- `/proc/kmsg` → 内核日志(类似 `dmesg`
- `/proc/sched_debug` → 调度器的调试信息
- `/proc/zoneinfo` → 内存区域信息
- `/proc/swap` → swap 使用情况
---
# 📊 **总结**
通过 `/proc`,你可以获取:
1. **进程级别** → PID、内存、CPU、线程、文件描述符
2. **系统级别** → CPU、内存、负载、启动参数、模块、文件系统
3. **硬件级别** → 设备、中断、I/O 端口、内存映射
4. **网络级别** → 接口流量、TCP/UDP 连接、路由、ARP
5. **内核级别** → 内核参数、调度、日志、虚拟内存
---

View File

@@ -0,0 +1,12 @@
**萌芽农场**
```powershell
scp -r D:\Godot\Godot项目\比较完成的作品\萌芽农场\Server\* root@192.168.31.233:/shumengya/docker/mengyafarmserver/
scp -r D:\Godot\Godot项目\比较完成的作品\萌芽农场\Server\* root@192.168.1.233:/shumengya/docker/mengyafarmserver/
```
一个人的服务器我的世界基岩版1.1.xPocketMine服务器
```powershell
scp -r C:\Users\BigTang\Desktop\一个人的服务器\* root@192.168.31.233:/shumengya/docker/OnePersonServer/
```

View File

@@ -0,0 +1,17 @@
apt install curl
# Download and install nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# in lieu of restarting the shell
\. "$HOME/.nvm/nvm.sh"
# Download and install Node.js:
nvm install 22
# Verify the Node.js version:
node -v # Should print "v22.19.0".
# Verify npm version:
npm -v # Should print "10.9.3".

View File

@@ -0,0 +1,50 @@
在 Ubuntu GNOME 22.04 中,默认情况下是禁用 root 用户的登录,以提高系统安全性。如果你需要启用 root 用户并允许其通过图形界面登录,可以按照以下步骤操作:
### 1. 启用 Root 用户
Ubuntu 默认情况下禁用了 root 用户账户,因此我们需要为 root 设置密码才能启用它。
1. 打开终端,使用以下命令设置 root 用户密码:
```bash
sudo passwd root
```
然后根据提示输入并确认 root 用户密码。
### 2. 允许 Root 用户登录图形界面
Ubuntu 默认不允许 root 用户直接登录 GNOME 图形界面。如果你希望启用 root 登录图形界面,需要修改 GDMGNOME Display Manager的配置文件。
1. 编辑 GDM 配置文件:
```bash
sudo nano /etc/gdm3/custom.conf
```
2. 找到 `[security]` 部分,并确保以下行没有被注释掉(没有 `#`
```plaintext
AllowRoot=true
```
3. 保存并退出(按 `Ctrl + O` 保存,`Ctrl + X` 退出)。
### 3. 重启 GDM
配置更改后,重启 GDM 或重新启动计算机以使更改生效。你可以使用以下命令重启 GDM
```bash
sudo systemctl restart gdm3
```
### 4. 使用 root 登录
现在,你应该能够在登录屏幕选择 root 用户进行登录了。只需要输入你为 root 设置的密码即可。
### 5. 注意安全
启用 root 用户图形界面登录可能会增加系统的安全风险,因为 root 用户具有系统的完全控制权限。为了保护系统的安全性,建议仅在必要时启用 root 登录,并使用强密码以及定期检查系统的安全性。
如果你不需要 root 图形界面登录,建议使用 `sudo` 命令来执行管理员操作,这样可以减少潜在的安全风险。

View File

@@ -0,0 +1,53 @@
要将 Ubuntu 22.04 (AMD64) 的软件源更换为阿里云的镜像源,可以按照以下步骤操作:
### 1. 备份当前的源列表
在更改源之前,先备份原有的 `sources.list` 文件:
```bash
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
```
### 2. 修改 `sources.list` 文件
打开 `/etc/apt/sources.list` 文件,编辑并替换为阿里云的源地址:
```bash
sudo nano /etc/apt/sources.list
```
将文件内容替换为以下内容(适用于 Ubuntu 22.04
```plaintext
# 阿里云 Ubuntu 22.04 镜像源
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
```
### 3. 更新软件包列表
替换源后,更新 apt 包索引:
```bash
sudo apt update
```
### 4. 升级已安装的软件包
为了确保一切顺利运行,你可以运行以下命令来升级现有的软件包:
```bash
sudo apt upgrade
```
完成这些步骤后,你的 Ubuntu 系统应该就会使用阿里云的镜像源了,下载速度会更加快速稳定。

View File

@@ -0,0 +1,15 @@
tar.gz文件解压
tar -zxvf 文件名
linux 重命名文件/文件夹:
mv 原文件名 新文件名
注意:/etc/systemd/system/ 这里放置systemctl服务
重新加载systemctl服务
systemctl daemon-reload
systemctl start 服务名
systemctl stop 服务名
systemctl enable 服务名
systemctl status 服务名

View File

@@ -0,0 +1,54 @@
```json
{
"Appearance-light@@theme-light-style-select": "theme-light-background-adapt",
"Appearance-light@@mod-left-split-background-select-light": "mod-left-split-background-CSS-light",
"Appearance-light@@background-mod-left-CSS-light": "radial-gradient(100% 50% at 100% 50%, rgba(90, 109, 237, 0.1) 0%, rgba(255, 255, 255, 0) 100%)",
"Appearance-light@@background-mod-left-CSS-backdrop-filter-light": "blur(0px)",
"Appearance-light@@mod-right-split-background-select-light": "mod-right-split-background-CSS-light",
"Appearance-light@@background-mod-right-CSS-light": "radial-gradient(100% 50% at 0% 50%, rgba(90, 109, 237, 0.1) 0%, rgba(255, 255, 255, 0) 100%)",
"Appearance-light@@background-mod-right-CSS-backdrop-filter-light": "blur(0px)",
"Appearance-light@@mod-root-split-background-select-light": "mod-root-split-background-CSS-light",
"Appearance-light@@background-mod-root-CSS-light": "transparent",
"Appearance-light@@background-mod-root-CSS-backdrop-filter-light": "blur(0px)",
"Appearance-light@@background-underlying-select-light": "background-underlying-CSS-light",
"Appearance-light@@background-underlying-CSS-light": "linear-gradient(168.44deg, #D7DAEA 1.62%, #F2F2F8 95.72%)",
"Appearance-light@@background-underlying-CSS-blend-mode-light": "normal",
"Appearance-light@@card-border-radius-light": "0px",
"Appearance-light@@card-shadow-light": "none",
"Appearance-light@@background-activated-tab-header-light": "radial-gradient(50% 150% at 50% 150%, #F8F9FF 0%, rgba(97, 54, 144, 0) 100%)",
"Appearance-light@@shadow-activated-tab-header-light": "none",
"Appearance-light@@indicator-remove-light": true,
"Appearance-light@@Active-states-file-explorer-select-light": "activated-file-tab-style-light",
"Appearance-light@@workspace-divider-transparent-light": true,
"Components@@CTA-BTN-enable": true,
"Components@@file-names-untrim": true,
"Components@@folder-font-bold": true,
"Components@@colorful-folder": true,
"Components@@file-icon-remove": false,
"Components@@outline-enhanced": true,
"Components@@new-tab-btn-select": "new-tab-btn-default",
"Components@@immersive-canvas": true,
"Components@@scrollbar-hide": true,
"Appearance-light@@card-layout-open-light": true,
"Appearance-light@@accent-color-override-light": false,
"Appearance-light@@card-highlight-light": true,
"Editor@@line-hover-indicator": true,
"Editor@@focus-indicator-codeblock-line-number": true,
"Editor@@focus-indicator-list-level": true,
"Editor@@editor-grid-background-pattren": true,
"Editor@@inline-title-divider-remove": true,
"Editor@@h1-divider-on": true,
"Editor@@h2-divider-on": true,
"Editor@@h3-divider-on": true,
"Editor@@h4-divider-on": true,
"Editor@@h5-divider-on": true,
"Editor@@h6-divider-on": true,
"Editor@@text-align-justify": true,
"Editor@@bold-color@@light": "#4781EC",
"Editor@@italic-color@@light": "#FF4BFE",
"Editor@@img-center-align": true,
"Mobile@@drawer-phone-full-width": true,
"Mobile@@card-layout-pad-open": true,
"Plugin@@colorful-checkbox": true
}
```

View File

@@ -0,0 +1,13 @@
- [x] 更新修复一下萌芽软件库网站
- [ ] 重新搭建萌芽软件库,萌芽软件更新后台 两个网站并封装成Docker
- [x] 继续学数据库特别是MongoDBMySQL
- [x] 继续学计算机网络
- [ ] 练习华为ICT
- [ ] 完成树萌芽个人主页shumengya.top
- [ ] LeetCode刷题
- [ ] 学习Python
- [x] 做一个flutter软件学习一下flutter
- [ ] 做一个uniapp软件学习一下uniapp
- [ ] 做一个微信小程序,学习一下微信开发者工具

View File

@@ -0,0 +1 @@
./code-server --host 0.0.0.0 --port 8888 --auth password ~/shumengya/project

View File

@@ -0,0 +1,87 @@
**时间日期小组件**
```yaml
- datetime:
text_size: xl
format:
timeStyle: short
# 13:37
format:
timeStyle: short
hourCycle: h23
# 1:37 PM
format:
timeStyle: short
hour12: true
# 1/23/22, 1:37 PM
format:
dateStyle: short
timeStyle: short
hour12: true
# 4 januari 2023 om 13:51:25 PST
locale: nl
format:
dateStyle: long
timeStyle: long
```
**服务器监控小组件**
```yaml
- glances:
url: http://host.or.ip:port
username: user # optional if auth enabled in Glances
password: pass # optional if auth enabled in Glances
version: 4 # required only if running glances v4 or higher, defaults to 3
cpu: true # optional, enabled by default, disable by setting to false
mem: true # optional, enabled by default, disable by setting to false
cputemp: true # disabled by default
uptime: true # disabled by default
disk: / # disabled by default, use mount point of disk(s) in glances. Can also be a list (see below)
diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk
expanded: true # show the expanded view
label: MyMachine # optional
disk:
- /
- /boot
...
```
**问候语小组件**
```yaml
- greeting:
text_size: xl
text: Greeting Text
#有效的文本大小有 `4xl`、`3xl`、`2xl`、`xl`、`md`、`sm`、`xs`。
```

View File

@@ -0,0 +1,12 @@
##### **Cursor**
全部展开ctrl+m ctrl+j
全部收缩ctrl+mctrl+0
##### **VsCodeTrae**
全部展开Ctrl + K, Ctrl + J
全部收缩Ctrl + K, Ctrl + 0
##### **VsCode 打开命令行**
ctrl+shift+P
Python: Select Interpreter 选择python解释器+设置python环境

View File

@@ -0,0 +1,109 @@
你遇到的错误:
```
CANNOT LINK EXECUTABLE "node": cannot locate symbol "EVP_MD_CTX_get_size_ex"
```
通常表明 Termux 中的系统库(如 OpenSSL与 Node.js 版本不兼容,缺少该符号的定义,导致 `node` 无法正常链接。
---
## 解决思路
### 1. 更新与升级系统包——优先尝试
多个用户反馈,仅通过更新、升级系统软件包,就能解决类似的问题:
- Stack Overflow 上 Akino2024 年 12 月)指出,使用如下命令:
```bash
apt full-upgrade
```
(注意不是 `full upgrade`)可能解决问题 。
- 其他环境(虽然不是 Termux出现类似错误也由 `apk upgrade` 解决,这同样说明包版本不一致是关键问题 。
**建议在 Termux 中执行以下命令:**
```bash
pkg update
pkg upgrade
apt full-upgrade
```
然后再次尝试安装 `nodejs` 或运行 `node`,看看问题是否依旧。
---
### 2. 如果还是报相同错误(符号缺失)
可能意味着 Termux 上的 OpenSSL 与 Node.js 的预编译版本不可兼容,这种情况下建议使用以下替代方案:
#### A. 使用 `nvm` 手动编译安装 Node.js
1. **安装需求工具**
```bash
pkg install curl git build-essential python
```
2. **安装 nvm**
```bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
source ~/.bashrc
```
3. **通过 nvm 安装 Node.js**(例如最新版或 LTS
```bash
nvm install 24
nvm use 24
```
这种方法会从源代码编译 Node.js因此能确保与当前系统的 OpenSSL 库兼容。
#### B. 回退到已知兼容的 Node.js 版本
Termux Wiki 提示,只可安装当前仓库提供的 `nodejs` 或 `nodejs-lts`,且不能同时安装两者 。若之前安装的版本不兼容,可尝试安装仓库中较旧或更稳定的版本(一般 `nodejs-lts` 更推荐)。
---
## 总结建议
|步骤|操作|
|---|---|
|1⃣|执行 `pkg update && pkg upgrade`,再 `apt full-upgrade`|
|2⃣|如果仍然报错,用 `nvm` 手动从源码安装 Node.js|
|3⃣|或者尝试安装仓库提供的 LTS 版本,确认是否兼容|
---
### 快速操作脚本(可复制粘贴)
```bash
# 更新系统
pkg update && pkg upgrade
apt full-upgrade
# 安装必要工具
pkg install curl git build-essential python
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
source ~/.bashrc
# 使用 nvm 安装最新 Node.js
nvm install node
nvm use node
# 或安装 LTS
nvm install --lts
nvm use --lts
```
---

View File

@@ -0,0 +1,9 @@
杨耀翔/李昶佑/夏春鹏/王彤
电气信息学院/计算机与软件学院/计算机与软件学院/计算机与软件学院
202431076214/202431062440/202431061719/202431062229
| |
| -------------------------------------------------- |
| 1、周幂   西南石油大学  教师  1203212378@qq.com   17781100230 |

View File

@@ -0,0 +1,125 @@
通过修改 hosts 文件来直连 GitHub是解决国内访问 GitHub 时连接不稳定、速度慢甚至无法访问的有效方法。其原理是绕过 DNS 解析,直接将 GitHub 的主要域名指向其真实、稳定的 IP 地址
#### 核心原理
当你在浏览器输入 github.com 时,系统会先查询 DNS 服务器来获取对应的 IP 地址。由于网络环境问题,这个查询过程可能失败或返回不理想的 IP。修改 hosts 文件就是手动在本地建立“域名 -> IP”的映射关系跳过不可靠的 DNS 查询,直达目标服务器。
---
#### 方法一:手动查找并更新(推荐用于理解过程)
##### 第一步:获取最新的 GitHub IP 地址
IP 地址会变化,所以不能一直用网上搜到的老旧 IP。你需要自己查询最新的。
1. 访问 IPAddress.com 网站查询以下关键域名的当前 IP 地址。
2. 需要查询的域名包括:
· github.com
· assets-cdn.github.com
· github.global.ssl.fastly.net
· codeload.github.com
· gist.github.com
3. 查询方法:
· 打开 https://www.ipaddress.com/
· 在搜索框中分别输入每个域名进行查询。
· 在结果页面中找到对应的 IP 地址(通常是 A Record 或 AAAA Record。例如查询 github.com 可能会得到 140.82.113.4(这是一个示例,请以你查询到的为准)。
注意github.global.ssl.fastly.net 可能是一个 CDN 域名,有时会解析出多个 IP选择一个延迟较低的即可。对于 assets-cdn.github.com它可能指向多个 CloudFront 地址,也选择一个稳定的 IP。
##### 第二步:修改 hosts 文件
hosts 文件位于系统的特定位置,修改需要管理员权限。
###### Windows 系统:
1. hosts 文件路径C:\Windows\System32\drivers\etc\hosts
2. 在开始菜单搜索 “记事本”,右键点击,选择 “以管理员身份运行”。
3. 在记事本中,点击 文件 -> 打开,导航到 C:\Windows\System32\drivers\etc将文件类型改为“所有文件 ( . )”,就能看到 hosts 文件,选择它打开。
4. 在文件末尾,添加如下格式的内容(将 IP地址 替换为你第一步查到的真实 IP
```bash
# GitHub Start
140.82.113.4 github.com
185.199.108.153 assets-cdn.github.com
151.101.65.194 github.global.ssl.fastly.net
140.82.114.9 codeload.github.com
140.82.113.5 gist.github.com
# GitHub End
```
注意IP 和域名之间用空格或制表符隔开。# 开头的是注释,方便管理。
5. 保存文件。如果无法直接保存,可以先将文件另存到桌面,修改后再拖回原目录覆盖。
###### macOS / Linux 系统:
1. 打开终端Terminal
2. 使用 sudo 权限编辑 hosts 文件:
```bash
sudo nano /etc/hosts
```
输入你的电脑密码。
3. 光标移动到最后,同样添加上述格式的内容。
4. 按下 Ctrl + O 写入保存,再按 Ctrl + X 退出 nano 编辑器。
##### 第三步:刷新 DNS 缓存
修改 hosts 后,需要清除系统旧的 DNS 缓存才能使新设置生效。
· Windows 以管理员身份打开命令提示符CMD 或 PowerShell输入
```cmd
ipconfig /flushdns
```
· macOS 在终端输入:
```bash
sudo killall -HUP mDNSResponder
```
对于不同版本的 macOS命令可能略有不同如 sudo dscacheutil -flushcache。
· Linux 根据发行版不同,命令可能不同。常见的是:
```bash
sudo systemctl restart nscd
sudo /etc/init.d/networking restart
```
##### 第四步:测试连接
1. 打开命令提示符或终端ping 一下域名,看是否解析到你设置的 IP
```bash
ping github.com
```
2. 直接打开浏览器访问 github.com看是否能正常加载。
---
#### 方法二:使用开源工具自动更新(更省心)
手动更新比较麻烦,推荐使用开源工具 SwitchHosts它可以自动从远程获取最新的 hosts 规则并应用。
1. 下载 SwitchHosts
· 访问其 GitHub 发布页https://github.com/oldj/SwitchHosts/releases
· 下载对应你操作系统的版本(如 SwitchHosts_windows_arch.exe
2. 配置远程规则:
· 打开 SwitchHosts点击 “+” 添加一个新规则。
· 选择 “远程”。
· 在规则名中填写 GitHub Hosts。
· 在 URL 地址中填入一个持续更新的 hosts 源,例如:
· ineo6/hosts推荐 https://gitee.com/ineo6/hosts/raw/master/hosts
· 或者其他在 GitHub/Gitee 上维护的知名 hosts 项目。
· 设置自动刷新时间(如 1 小时)。
· 点击 “确定” 保存。
3. 启用规则:
· 在 SwitchHosts 主界面,点击你刚添加的 GitHub Hosts 规则旁边的开关,将其启用(变为绿色)。
· 软件可能会请求管理员权限,同意即可。
此后SwitchHosts 会自动定期从你设置的 URL 拉取最新的 GitHub IP 地址并更新你的 hosts 文件,无需你再手动操作。
常见问题与解决
· 修改后仍无法访问?
· 检查 IP 是否正确: 你使用的 IP 可能已经过期。请重新用 IPAddress.com 查询或使用 SwitchHosts。
· 检查 hosts 文件格式: 确保 IP 和域名之间只有空格,没有多余字符。
· 彻底清除浏览器缓存和 DNS 缓存: 关闭浏览器再重新打开,并再次执行 ipconfig /flushdns。
· 尝试 HTTPS 访问: 有些工具会劫持 HTTP 请求,直接访问 https://github.com。
· 安全性问题?
· 手动从 IPAddress.com 查询是安全的。
· 使用 SwitchHosts 时,请确保你使用的远程规则源是可信的(如上述推荐的 Gitee 源,访问速度较快)。
· 修改 hosts 是永久解决方案吗?
· 不是永久的。因为 GitHub 的服务器 IP 可能会变更。一旦变更,旧的映射就会失效。这就是为什么推荐使用 SwitchHosts 这类工具来自动更新。

View File

@@ -0,0 +1,28 @@
用小米平板尝鲜下blender安卓版目前只有高通SOC可用。感谢大佬的移植。大家可以自己安装试试安卓手机和平板都可以。
大佬也在B站@dshawshank
github地址https://github.com/dshawshank/APP-android_arm64
网盘https://pan.quark.cn/s/e504c586c802
比例 「1:1」图片风格为2D像素风格 画一个游戏装饰元素风格为2.5D 就是上帝视角,就是正交斜视角那种有立体感,背景是纯黑色,纯黑色 不带任何文字,现在我要你画一个 作物仓库 仓库相关的装饰可以多一点 记住一定要3d立体感
> 请及时删除陈旧内容
我想实现玩家自己小卖部功能结构就像这样 先不设计图片 目前只能售卖 种子 作物(成熟物) 道具 这三种 先实现 作物 大致思路是 玩家在 作物仓库点击相应作物
Github仓库: https://github.com/1812z/sleepy
视奸网站: https://sleepy.1812z.top/
支持手机和PC的推荐分支: https://github.com/HBWuChang/sleepy
Navicat
DBeaver PRO
开发者的话
《小王国: 即时战略》是由一位独立开发者制作的游戏,并由一位初创独立发行人进行推广。我们非常重视你的反馈和支持!欢迎将游戏加入愿望单,助力我们成长 —— 游戏即将发布!我们正在努力
让游戏支持中文,也希望您能理解,如果某些文本翻译不够准确。如果您喜欢我们的游戏,并愿意协助我们完善中文翻译,欢迎在讨论区发帖与我们联系,我们非常乐意收到您的帮助与反馈!
https://t.me/easynode_notify
[https://github.com/chaos-zhu/easynode](https://github.com/chaos-zhu/easynode)

View File

@@ -0,0 +1,44 @@
#### **1.Flutter:**
优点:
- Windows和Android表现比较一致UI比较好看
缺点:
- 使用dart语言完全不熟悉需要时间打磨
- gradle配置十分麻烦开了梯子还卡进度条目前只找到用国内镜像开发
#### **2.Godot:**
优点:
- 跨平台性极强基于gdscript各平台表现几乎一模一样
- 可以使用gdscriptc#开发上手快还可以c++扩展
缺点:
- UI十分丑陋美化有点麻烦(ai可以)
- 毕竟是游戏引擎对一些软件api适配十分不好基本都要自己造轮子
#### **3.Kivy:**
优点:
- 使用Python开发速度几乎最快
缺点:
- 妈的依赖下半天,开梯子也慢的离谱
- UI比godot还丑
- 构建安卓apk只能用Linux环境
- 默认不支持中文,配置麻烦
#### **4.ReactNative-expo**
优点:
- 使用JavaScript开发前端框架比较熟悉
- 基于云端构建比较方便(直接几行命令)
- 调试比较方便,热更新,热重载
缺点:
- 云端构建不符合极客精神,而且需要排队(时间有时候很长)
- 软件导出apk很大
#### **5.ReactNative**
还没试
#### **6.UniApp:**
优点:
- 基于JavaScript前端框架比较熟悉
- 云端构建,比较方便
缺点:
- 需要登录注册(编辑器)
- 云端构建不符合极客精神,而且需要排队(时间有时候很长)

View File

@@ -0,0 +1,11 @@
MAC地址Media Access Control Address通常由 48位二进制数 表示,但为了方便阅读和书写,通常用 12位十六进制数字 组成,其格式为:
XX:XX:XX:XX:XX:XX 或 XX-XX-XX-XX-XX-XX每两位十六进制数为一组共6组
例如00:1A:2B:3C:4D:5E。
补充说明:
· 前24位前6位十六进制是 厂商标识OUI由IEEE分配给设备制造商。
· 后24位后6位十六进制是 设备唯一标识,由制造商自行分配。
因此MAC地址由 12位十六进制数字 组成共48位二进制

View File

@@ -0,0 +1,119 @@
划分后的网段为 172.16.0.0/17需要计算该子网的广播地址。
步骤解析:
1. 确定子网掩码:
/17 表示子网掩码为 255.255.128.0即前17位为网络位后15位为主机位
2. 计算网络地址和广播地址:
· IP地址 172.16.0.0 是B类地址默认掩码为16位但这里划分子网后为17位。
· 子网掩码 255.255.128.0 的二进制形式:
11111111.11111111.10000000.00000000
· 网络地址172.16.0.0)的二进制:
10101100.00010000.00000000.00000000
· 广播地址是主机位全为1的地址
主机位有15位后15位所以将主机位全部置1
10101100.00010000.01111111.11111111 转换为十进制172.16.127.255
3. 验证选项:
· A. 172.16.128.255(属于下一个子网)
· B. 172.16.255.255默认B类广播地址但这里已划分子网
· C. 172.16.0.255主机位不全为1不是广播地址
· D. 172.16.127.255(正确)
核心概念理解
首先,我们需要理解几个基本概念:
1. IP地址就像你家的地址由“网络部分”和“主机部分”组成。
· 网络部分相当于“XX省XX市XX区XX街道”标识了一个大的区域。
· 主机部分相当于“XX小区XX栋XX号”标识了在这个区域内的具体门牌。
2. 子网掩码用来告诉我们IP地址中哪部分是“网络”哪部分是“主机”。
· /17 就是一种表示子网掩码长度的方法意思是IP地址的前17位是网络部分剩下的32-17=15位是主机部分。
3. 广播地址:在一个小区(子网)里,如果你想对所有住户(所有主机) 喊话你就需要使用“广播地址”。它的规则是网络部分保持不变主机部分全部填上1。
我们的目标就是根据规则,算出这个“对所有主机喊话”的地址。
---
详细计算步骤(跟着我做就行)
我们拿到的IP网段是 172.16.0.0/17。
第1步写出完整的IP地址和子网掩码
· IP地址: 172 . 16 . 0 . 0
· 子网掩码 /17255 . 255 . 128 . 0
· (这个是需要记忆的,/17对应的掩码就是255.255.128.0
第2步将地址和掩码转换成二进制形式这是最关键的一步
我们先复习一下十进制怎么转二进制重点是第三段128和第四段0
· 172 -> 10101100 (这是一个B类地址前16位默认是网络号172.16是网络部分)
· 16 -> 00010000
· 0 -> 00000000
· 0 -> 00000000
所以172.16.0.0 的二进制是: 10101100 . 00010000 . 00000000 . 00000000
子网掩码 255.255.128.0 的二进制是: 11111111 . 11111111 . 10000000 . 00000000
· 看前17位11111111.11111111.1全是1正好对应/17。后面15位0000000.00000000全是0。
第3步根据子网掩码区分出网络部分和主机部分
我们把IP地址和子网掩码对齐看
```
IP地址: 10101100.00010000.00000000.00000000
掩码 : 11111111.11111111.10000000.00000000
|网络部分 (17位) | 主机部分 (15位) |
```
· 网络部分前17位10101100.00010000.0)必须原封不动。
· 主机部分后15位0000000.00000000要全部变成1以形成广播地址。
第4步计算广播地址
把主机部分全部置1
· 原来的主机位0000000 . 00000000
· 全部变成1 1111111 . 11111111
现在我们把不变的网络部分和全部变成1的主机部分组合起来就得到了广播地址的二进制
10101100 . 00010000 . 01111111 . 11111111
· 注意看第三段网络部分只占了第三段的第1位是0剩下的7位属于主机部分被我们置为了1111111。所以第三段从00000000变成了01111111。
第5步将二进制广播地址转换回十进制
现在我们把这个二进制数转换回十进制每8位一组
· 第一段 10101100 -> 172 (和原来一样)
· 第二段 00010000 -> 16 (和原来一样)
· 第三段 01111111 -> 127
· 01111111 怎么算?从右往左:(1*2^6) + (1*2^5) + (1*2^4) + (1*2^3) + (1*2^2) + (1*2^1) + (1*2^0) = 64+32+16+8+4+2+1 = 127
· 第四段 11111111 -> 255 (所有位都是1肯定是255)
所以最终的广播地址是172 . 16 . 127 . 255
---
回头看选项
· A. 172.16.128.255 -> 这是下一个子网的起始地址
· B. 172.16.255.255 -> 这是整个B类网络172.16.0.0/16的广播地址
· C. 172.16.0.255 -> 这是一个普通的主机地址主机位没有全1
· D. 172.16.127.255 -> 正确! 这正是我们算出来的结果。
总结一个傻瓜技巧
对于这类题,有一个快速判断的方法:
· /17 的掩码把第三个字节“劈成了两半”。
· 网络地址第三位是 0。
· 这个子网的广播地址第三位就是 0 + 127 = 127。因为一半的大小是128从0开始到127结束
· 最后一个字节永远是 255。
· 所以广播地址是 172.16.127.255。

View File

@@ -0,0 +1,10 @@
虚拟局域网VLAN技术的主要作用是 A. 隔离广播域。
详细解析:
· A. 隔离广播域VLAN的核心功能是将一个物理局域网划分成多个逻辑广播域。每个VLAN是一个独立的广播域广播流量仅限于本VLAN内从而减少网络中的广播流量提高网络性能和安全性。
· B. 组网灵活VLAN确实提供了灵活的组网能力例如基于端口、MAC地址、协议等划分但这不是其主要作用而是实现隔离广播域的手段。
· C. 扩展性好VLAN可以扩展网络规模例如跨交换机划分VLAN但这也是基于隔离广播域带来的好处并非最核心的作用。
· D. 增强保密性VLAN通过隔离流量不同VLAN间通信需经过路由间接增强了保密性但这不是主要设计目的而是衍生优势。
因此VLAN技术最根本、最主要的作用是隔离广播域A选项

View File

@@ -0,0 +1,28 @@
1.568B标准的双绞线线序是:
1. 橙白
2.
3. 绿白
4.
5. 蓝白
6. 绿
7. 棕白
8.
2.在华为VRP系统中系统软件是设备启动和运行的必备软件为整个设备提供支撑、管理、业务等功能其常见的文件后缀名是 .cc。
所以,正确答案是 C. .cc。
为了帮助你更清晰地了解华为VRP系统中常见的文件类型我准备了一个表格
文件类型 常见后缀名 主要用途
系统软件 .cc 设备启动、运行的必备软件
配置文件 .cfg, .zip, .dat 保存用户配置命令,设备启动时加载生效
补丁文件 .pat 修复系统软件小问题,无需重装系统
PAF文件 .bin 裁剪设备资源与功能,适配不同场景需求

Binary file not shown.

After

Width:  |  Height:  |  Size: 856 KiB

View File

@@ -0,0 +1,6 @@
卸载casaos
casaos-uninstall
Linux一键换软件源
bash <(curl -sSL https://linuxmirrors.cn/main.sh)
Linux一键换Docekr源
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)

View File

@@ -0,0 +1,8 @@
***/kill @e[type=mutant:mskeleton_bones]***
清除掉突变骷髅模组的骷髅骨头实体
***/kill @e[type=item]***
清除所有掉落物
***/gamerule mobGriefing true***
设置生物破坏开启或者禁用 (禁用后村民不会繁殖,雪傀儡不会产雪)

View File

@@ -0,0 +1,118 @@
除了索引之外MongoDB 在 CRUD 操作优化上还有多种有效策略,尤其在处理海量数据时更为关键。以下是综合各技术文档和实践总结的核心优化方法:
---
### 🔄 一、批量操作优化
1. **使用 `bulkWrite` 替代单条操作**
通过批量写入减少网络开销和事务开销。基于 `ReplaceOneModel` 启用 `upsert`,实现存在更新、不存在插入的高效操作:
```java
public void batchSave(List<?> dataList) {
List<ReplaceOneModel<Document>> bulkOps = dataList.stream()
.map(item -> {
Document doc = convertToDocument(item); // 转换为Document
return new ReplaceOneModel<>(
Filters.eq("_id", doc.get("_id")),
doc,
new UpdateOptions().upsert(true)
);
}).collect(Collectors.toList());
collection.bulkWrite(bulkOps); // 批量执行
}
```
此方法将多条操作合并为一次请求,写入性能提升显著。
---
### 📖 二、分页查询优化
1. **避免精确 `count`**
当数据量超大时,`count` 可能极慢。采用阈值法:若跳过 `MAX_PAGE_COUNT`如1万条后仍有数据则返回阈值提示“数据超过1万条”避免全表扫描
```java
private long approxCount(MongoTemplate mongoTemplate, Query query) {
query = query.with(PageRequest.of(MAX_PAGE_COUNT, 1));
return mongoTemplate.find(query, Entity.class).isEmpty()
? mongoTemplate.count(query)
: MAX_PAGE_COUNT;
}
```
2. **用条件替代 `skip`**
深度分页时如第100页避免 `skip(9900)`。改为记录上一页末尾的排序字段值(如时间戳),作为下一页查询条件:
```sql
-- 原查询db.collection.find().sort({time:-1}).skip(9900).limit(100)
-- 优化后:
db.collection.find({ time: { $lt: lastPageEndTime } })
.sort({ time: -1 })
.limit(100);
```
此方法将 **O(N)** 的跳过操作转为 **O(1)** 的条件过滤。
---
### 📤 三、全量导出优化
1. **字段投影减少数据传输**
仅查询必要字段,降低网络与内存开销:
```java
Query query = new Query();
query.fields().include("_id").include("name"); // 只返回_id和name。
```
2. **流式处理替代全量加载**
使用 `stream()` 逐条处理数据,避免 `findAll` 导致内存溢出:
```java
try (CloseableIterator<Entity> iter = mongoTemplate.stream(query, Entity.class)) {
while (iter.hasNext()) {
process(iter.next()); // 单条处理
}
}
```
相比分页查询,流式处理无 `skip` 开销,且内存占用恒定。
---
### 🧩 四、文档设计优化
1. **打破第三范式**
- **冗余字段**:将高频查询的关联字段(如部门名称)冗余到主文档,避免联表查询。
- **内嵌设计**一对多关系直接嵌套子文档如订单内嵌商品列表提升读取效率。但需注意文档大小限制16MB
- **引用设计**多对多关系使用ID数组而非完整嵌套避免文档膨胀
```json
// 学生文档
{
"_id": "s001",
"name": "Alice",
"teachers": ["t01", "t02"] // 仅存储ID
}
```
---
### ⚙️ 五、分片集群优化
1. **碎片整理MongoDB <7.0**
在早期版本中分片集合可能因频繁写入产生碎片化小数据块导致CRUD延迟。通过 `configureCollectionBalancing` 命令合并数据块,但需注意:
- 整理期间可能短暂阻塞元数据更新。
- MongoDB 7.0+ 已支持自动合并,通常无需手动操作。
2. **负载均衡窗口设置**
在业务低峰期触发负载均衡器迁移数据块减少对CRUD的影响。
---
### 💎 六、其他关键技巧
1. **合理控制事务范围**:短事务减少锁竞争。
2. **写入确认级别调整**:对非关键数据使用 `w:0`(无确认),提升写入速度(牺牲一致性)。
3. **TTL索引自动清理**:为临时数据(如日志)设置过期时间,减少存储压力。
---
### 💎 优化方法效果对比表
| **优化方向** | **适用场景** | **性能提升效果** | **实现复杂度** |
|--------------------|--------------------------|----------------------|--------------|
| **批量写入** | 数据导入、批量更新 | ⭐⭐⭐⭐⭐ (极高) | ⭐⭐ (中等) |
| **流式导出** | 大数据量导出 | ⭐⭐⭐⭐ (避免OOM) | ⭐ (简单) |
| **条件分页** | 深度分页(>100页 | ⭐⭐⭐⭐ (O(1) 跳转) | ⭐⭐ (中等) |
| **冗余字段** | 高频关联查询 | ⭐⭐⭐ (减少联表) | ⭐⭐⭐ (较高) |
| **分片碎片整理** | MongoDB 6.0以下分片集群 | ⭐⭐ (减少延迟) | ⭐⭐⭐⭐ (复杂) |
---
> 💡 **实践建议**:优先从**批量操作**和**分页策略**入手,这两类优化代码改动小且收益显著。海量数据场景下,**流式处理+字段投影**是导出标配方案。分片集群升级到 MongoDB 7.0+ 可减少运维负担。

View File

@@ -0,0 +1,86 @@
**MongoDB 提供了强大的索引功能,这是优化查询性能最主要和核心的方法**,其作用原理与其他关系型数据库(如 MySQL, PostgreSQL中的索引类似。
**索引的核心作用:**
1. **大幅减少查询需要扫描的文档数量:** 没有索引时MongoDB 必须执行集合扫描(`COLLSCAN`),即检查集合中的*每一个*文档。有了合适的索引MongoDB 可以使用索引扫描(`IXSCAN`)快速定位到包含所需数据的文档位置。
2. **加速排序:** 如果排序字段包含在索引中MongoDB 可以直接利用索引中已经排好的顺序返回结果,避免昂贵的在内存中排序。
3. **支持高效的数据去重:** `$group` 聚合阶段的分组操作可以利用索引。
4. **实现覆盖查询:** 如果查询只需要返回索引中包含的字段MongoDB 可以*完全*从索引中获取结果,无需去读取实际的文档数据,速度极快。
**MongoDB 支持的索引类型:**
1. **单字段索引:**
* 最基本的索引类型,在单个字段上创建。
* 示例:`db.collection.createIndex({ name: 1 })` (1 表示升序,-1 表示降序。对于纯等值查询,顺序通常不重要;对于排序查询,顺序很重要)。
2. **复合索引:**
* 在多个字段上创建的索引。
* 字段的顺序**极其重要**。它决定了索引如何组织和哪些查询模式可以利用该索引(最左前缀原则)。
* 示例:`db.collection.createIndex({ status: 1, order_date: -1 })`。这个索引可以高效支持:
* 只查询 `status` 的查询
* 同时查询 `status``order_date` 的查询
* 查询 `status` 并按 `order_date` 排序的查询
* 但不支持只查询 `order_date` 的查询(不符合最左前缀)。
3. **多键索引:**
* 当索引字段是数组时MongoDB 会自动为数组中的每个元素创建索引条目。
* 用于高效查询数组字段中的元素。
* 示例:索引 `db.collection.createIndex({ tags: 1 })` 可以高效支持查询 `db.collection.find({ tags: "mongodb" })`
4. **地理空间索引:**
* **2dsphere** 用于查询存储为 GeoJSON 对象或传统坐标对的地理空间数据(地球球面几何)。支持邻近查询(`$near`)、包含查询(`$geoWithin`)、相交查询(`$geoIntersects`)等。
* **2d** 用于在二维平面上(如地图游戏)查询存储为传统坐标对的数据。主要用于平面几何计算。
5. **文本索引:**
* 支持对字符串或字符串数组字段的内容进行文本搜索。
* 支持词干提取、停用词过滤等基本文本处理功能。
* 示例:`db.collection.createIndex({ description: "text" })`,然后使用 `$text` 操作符进行搜索。
6. **哈希索引:**
* 对字段值进行哈希运算,并在哈希值上建立索引。
* 主要用途是为**分片键**提供更均匀的数据分布(使用`hashed`分片策略时)。
* 只支持等值匹配查询,不支持范围查询、排序或其他操作。
* 示例:`db.collection.createIndex({ _id: "hashed" })`
7. **通配符索引:**
* 可以索引文档中未知或任意字段。适用于模式动态变化的场景。
* 示例:
* `db.collection.createIndex({ "userMetadata.$**": 1 })` 索引 `userMetadata` 子文档中的所有字段。
* `db.collection.createIndex({ "$**": 1 })` 索引文档中的所有字段(谨慎使用,开销大)。
8. **唯一索引:**
* 强制索引字段的值在整个集合中是唯一的(`_id` 字段默认就有唯一索引)。
* 可以用于单字段或复合字段。
* 示例:`db.collection.createIndex({ email: 1 }, { unique: true })`
9. **TTL 索引:**
* 一种特殊的单字段索引,用于在指定时间后或在指定时间点自动从集合中删除文档。字段必须是日期类型或包含日期元素的数组。
* 适用于会话数据、日志、临时数据等。
* 示例:`db.logs.createIndex({ createdAt: 1 }, { expireAfterSeconds: 3600 })` (文档在 `createdAt` 时间之后 3600 秒/1 小时被删除)。
10. **稀疏索引:**
* 只包含具有索引字段的文档的条目。即使索引字段值为 `null`,也会包含在内;但如果文档*完全缺失*该索引字段,则不会被索引。
* 节省空间,提高索引效率(当字段在大部分文档中缺失时)。
* 示例:`db.collection.createIndex({ optionalField: 1 }, { sparse: true })`
**如何管理和使用索引:**
1. **创建索引:** 使用 `db.collection.createIndex()` 方法。
* 示例:`db.products.createIndex({ category: 1, price: -1 })`
2. **查看索引:** 使用 `db.collection.getIndexes()` 方法。
3. **删除索引:** 使用 `db.collection.dropIndex()``db.collection.dropIndexes()` 方法。
4. **分析查询性能:** 使用 `explain()` 方法查看查询的执行计划,确认是否使用了索引(`IXSCAN`)以及使用了哪个索引。这是优化查询的关键步骤。
* 示例:`db.orders.find({ status: "A", amount: { $gt: 100 } }).sort({ order_date: -1 }).explain("executionStats")`
5. **索引管理最佳实践:**
* **为常用查询模式创建索引:** 分析你的应用最常见的查询(`find`, `sort`, `aggregate`中的`$match`, `$group`, `$sort`等阶段),为这些查询涉及的字段创建合适的索引(通常是复合索引)。
* **遵循最左前缀原则:** 设计复合索引时,将最常用于过滤或排序的字段放在左边。
* **考虑选择性:** 选择性高的字段(如唯一值多的字段)放在复合索引的前面通常更有效。
* **使用覆盖查询:** 尽量让查询只返回索引中包含的字段。
* **监控索引使用率:** MongoDB Profiler 或 Atlas 性能监控可以查看索引的使用情况。使用率低的索引应考虑删除,因为它们会消耗写性能和存储空间。
* **权衡读写性能:** 索引会加速读操作,但会减慢写操作(插入、更新、删除),因为写操作需要维护索引。不要过度索引。
* **后台创建大索引:** 在大型集合上创建索引可能耗时很长并阻塞操作。使用 `{ background: true }` 选项可以在后台创建索引(虽然仍可能有性能影响,但不会完全阻塞读写)。
* **合理使用内存:** 确保有足够的内存将常用索引(或其活跃部分)保存在内存中,避免频繁的磁盘 I/O。
**总结:**
MongoDB 提供了极其丰富和强大的索引类型单字段、复合、多键、地理空间、文本、哈希、通配符、唯一、TTL、稀疏来满足各种查询场景的优化需求。**创建和管理合适的索引是提升 MongoDB 查询性能最关键的手段。** 务必结合你的具体查询模式,使用 `explain()` 分析执行计划,遵循索引设计的最佳实践(特别是复合索引的最左前缀原则),并持续监控和调整索引策略。

View File

@@ -0,0 +1,61 @@
## 1⃣ 数值类型Numeric
| 类型分类 | 数据类型 | 说明 |
| ---- | --------------------------------------------------------- | ------------- |
| 整数型 | `TINYINT``SMALLINT``MEDIUMINT``INT`/`INTEGER``BIGINT` | 存储不同范围的整数 |
| 精确小数 | `DECIMAL(M,D)``NUMERIC` | 高精度定点数(常用于金额) |
| 浮点数 | `FLOAT``DOUBLE`/`REAL` | 近似数值(科学计算) |
| 位类型 | `BIT(M)` | 存储二进制位 |
| | | |
| | | |
---
## 2⃣ 日期与时间类型Date & Time
|数据类型|格式|说明|
|---|---|---|
|`DATE`|YYYY-MM-DD|日期|
|`DATETIME(fsp)`|YYYY-MM-DD HH:MM:SS|日期 + 时间|
|`TIMESTAMP(fsp)`|YYYY-MM-DD HH:MM:SS|时间戳(支持自动更新)|
|`TIME`|HH:MM:SS|时间或时间间隔|
|`YEAR`|YYYY|年份2 位或 4 位)|
---
## 3⃣ 字符串与二进制类型String & Binary
|类型分类|数据类型|说明|
|---|---|---|
|定长字符串|`CHAR(M)`|定长,最大 255|
|变长字符串|`VARCHAR(M)`|可变长度,最大 65535受行大小限制|
|定长二进制|`BINARY(M)`|定长二进制|
|变长二进制|`VARBINARY(M)`|变长二进制|
|文本|`TINYTEXT``TEXT``MEDIUMTEXT``LONGTEXT`|存储大文本|
|二进制大对象|`TINYBLOB``BLOB``MEDIUMBLOB``LONGBLOB`|存储二进制数据|
|枚举|`ENUM('a','b',...)`|单选固定集合|
|集合|`SET('a','b',...)`|多选固定集合|
---
## 4⃣ 空间数据类型Spatial
|数据类型|说明|
|---|---|
|`GEOMETRY`|任意几何对象|
|`POINT`|点|
|`LINESTRING`|线|
|`POLYGON`|多边形|
|`MULTIPOINT``MULTILINESTRING``MULTIPOLYGON``GEOMETRYCOLLECTION`|组合空间对象|
---
## 5⃣ JSON 类型
|数据类型|说明|
|---|---|
|`JSON`|存储 JSON 文档,支持索引与函数操作|
---

View File

@@ -0,0 +1,60 @@
游戏玩家数据储存在普通JSON文件和MongoDB中各有其适用场景二者的优缺点对比可结合游戏数据的特性如数据量、读写频率、结构灵活性、并发需求等展开分析
一、普通JSON文件储存
普通JSON文件储存指将玩家数据以JSON格式写入本地文件单文件或多文件如按玩家ID分文件依赖文件系统直接读写。
优点
1. 简单轻量,开发成本低
无需部署数据库服务直接通过编程语言的文件操作API如Python的 json 模块、Node.js的 fs 模块即可读写适合小型团队或开发初期快速验证功能学习成本几乎为0。
2. 资源占用少
仅依赖文件系统不消耗额外的数据库进程资源如内存、CPU适合设备性能有限的场景如单机小游戏、轻量网页游戏
3. 数据直观可见
JSON文件为文本格式可直接用编辑器打开查看或修改便于开发调试如临时修改玩家数据测试功能
缺点
1. 读写效率低,不适合大数据量
- 每次读写需加载整个JSON文件到内存解析或写入时覆盖整个文件当玩家数据量增大如10万+玩家单文件体积膨胀读写耗时会急剧增加例如加载100MB的JSON文件可能需要数百毫秒
- 若按玩家ID分文件虽能缓解单文件压力但批量查询如排行榜、全服统计需遍历所有文件效率极低。
2. 并发安全问题突出
多玩家同时操作时如多人在线游戏的并发读写文件系统缺乏原生锁机制易出现“写覆盖”如A玩家写入时B玩家同时写入导致其中一方数据丢失或数据损坏如写入中断导致JSON格式错误
3. 结构扩展性差
若玩家数据结构迭代如新增“宠物属性”“公会信息”需手动处理旧JSON文件的格式兼容如遍历所有文件添加新字段操作繁琐且易出错。
4. 缺乏数据一致性保障
无事务支持,例如玩家“扣金币+加道具”的原子操作,若中途程序崩溃,可能导致金币已扣但道具未加,数据不一致。
二、MongoDB储存
MongoDB是文档型NoSQL数据库以BSONJSON的二进制扩展格式存储数据天然适配半结构化的玩家数据。
优点
1. 高效读写与查询能力
- 支持索引如按玩家ID、等级建索引可快速定位单玩家数据毫秒级解决JSON文件全量解析的性能问题。
- 支持复杂查询(如“等级>50且在线的玩家”“道具列表包含某物品的玩家”适合游戏中的排行榜、好友列表、任务统计等场景。
2. 良好的并发与一致性
- 内置多版本并发控制MVCC支持高并发读写 thousands of TPS避免JSON文件的并发冲突。
- 支持事务MongoDB 4.0+),可保证“扣钱+加道具”“升级+解锁技能”等操作的原子性,防止数据不一致。
3. 灵活扩展,适配数据增长
- 玩家数据量随用户增长时,可通过“分片”横向扩展(将数据分布到多台服务器),支持百万级甚至亿级玩家数据。
- 文档结构动态灵活,新增字段无需修改表结构,旧数据可兼容(查询时自动忽略不存在的字段),适配游戏版本迭代。
4. 完善的数据管理能力
提供备份 mongodump 、恢复 mongorestore 、监控MongoDB Atlas等工具支持数据压缩、过期索引如清理离线玩家缓存适合长期运行的在线游戏。
缺点
1. 运维与学习成本高
需要部署、维护数据库服务如集群配置、索引优化、故障排查对小型团队可能增加运维压力开发人员需学习MongoDB的查询语法 find  aggregate 、索引设计等门槛高于JSON文件。
2. 资源占用较高
相比JSON文件MongoDB需要额外的内存缓存索引和热数据、CPU处理查询和磁盘空间数据文件+日志),不适合资源受限的极简场景(如嵌入式小游戏)。
3. 过度设计风险
对于单机游戏、玩家数极少如几百人且无复杂查询的场景MongoDB的优势无法体现反而因配置复杂降低开发效率。
总结:适用场景
- 普通JSON文件适合单人游戏、小型休闲游戏、开发测试阶段或数据量极小<1万玩家、读写频率低、无复杂查询的场景。
- MongoDB适合多人在线游戏MMO、MOBA等、中大型游戏或玩家数多>1万、需高频读写、复杂查询、结构迭代频繁的场景。
实际开发中也可根据规模过渡初期用JSON文件快速上线待用户增长后迁移至MongoDB利用其扩展性支撑业务。

View File

@@ -0,0 +1,239 @@
1.💡解答
在双链路热备配置中AP检测主链路超时进行主备切换的时间通常是心跳检测间隔时间的3倍。已知心跳检测间隔时间为20秒那么主备切换时间为20×3 = 60秒。
答案B
2.💡解答
要解决这道题需了解Windows 2003 DHCP Server上Option 43字段配置AC IP地址的格式规则
- Option 43字段格式为长度1字节 + AC数量1字节 + AC IP地址的十六进制形式。
- 这里AC的IP地址是10.23.100.1转换为十六进制10是0A23是17100是641是01即十六进制为0A176401共4个字节0A、17、64、01
- 长度部分AC数量为11个AC所以长度是1 + 4 = 5十六进制为05不对再仔细看正确的是对于单个ACOption 43的格式是03表示后续有3个字节的AC地址相关 + 01AC数量 + AC IP地址的十六进制。AC IP地址10.23.100.1的十六进制是0A176401共4个字节所以组合起来是03 01 0A 17 64 01转换为题目中的形式对应选项C030B31302E323332E3130302E31这里是将十六进制按每两位一组且可能有字符转换的对应核心是符合“03 + 相关字节 + AC IP十六进制”的结构
答案C
3.💡解答
要解决这道题,需逐一分析每个选项:
- 选项A不同地区可用的WLAN信道可能存在差异规划前跟客户确认当地可用信道是合理且必要的该说法正确。
- 选项B同一室分AP所连接的天线为了减少同AP下不同天线间的干扰等问题发出信号的信道通常是一样的该说法正确。
- 选项C华为的室分AP6310是单频AP只支持2.4G频段不支持5G频段的信道规划该说法错误。
- 选项D相邻的边缘天线若使用相同信道容易产生干扰所以通常不使用相同信道该说法正确。
答案C
继续问→
4.💡解答
要解决这道题,需按照以下步骤计算:
步骤一:计算总用户数
已知有8个办公区域每个办公区域有10个人那么总用户数为8\times10 = 80
步骤二:计算并发用户数
因为所有用户上网并发率是80\%所以并发用户数为80\times80\% = 64
步骤三:计算总所需带宽
每用户要求下行带宽为2Mbps则总所需带宽为64\times2 = 128Mbps。
步骤四计算所需AP数量
每个AP的实测速率大概为80Mbps那么所需AP数量为128\div80 = 1.6。由于AP数量必须为整数且1个AP无法满足带宽需求所以需要向上取整即需要2个AP。
答案B。
继续问→
5.💡解答
要解决这道题,需逐一分析每个选项:
- 选项A单AP带的天线数有合理范围4 - 8个最佳且通常不超过10个该说法符合AP6310SN的应用特点是正确的。
- 选项BAP到最远端室分天线的距离控制在50米以内、不超过60米能保证信号传输质量该说法正确。
- 选项C典型室分场景下每个天线输出功率控制在12 - 18dBm且与场强需求和墙体结构有关这是合理的功率规划要求该说法正确。
- 选项D虽然同一个AP的室分天线间存在干扰但在合理规划如信道规划、功率调整等是可以根据需求进行一定密度布放的并非“不可以根据需求密集布放”该说法错误。
答案D。
继续问→
6.💡解答
要解决这道题,需逐一分析每个选项:
- 选项ATKIP加密中使用的IV初始化向量长度为48bits而不是24bits该说法错误。
- 选项BTKIP加密采用的加密算法与WEP加密相同都是RC4算法该说法正确。
- 选项C开发TKIP加密的动机确实是为了升级旧式WEP硬件的安全性该说法正确。
- 选项DTKIP加密中增加了Key的生成、管理以及传递的机制增强了安全性该说法正确。
答案A。
继续问→
7.💡解答
要解决这道题需理解Agile Controller中时间配置在认证及授权规则里的作用
Agile Controller在认证和授权规则中配置时间目的是规定用户可以接入网络的时间范围比如允许用户在工作日的某个时间段内接入而不是规定接入的总时长、单一时间点或者离线截止时间。
答案D。
继续问→
8.💡解答
要解决这道题,需明确天线增益差值的计算及单位:
天线增益的单位如果是相同的这里天线A和天线B的增益单位都是dBi计算两者的增益差值时直接用数值相减即可。天线A增益为11dBi天线B增益为8dBi差值为11 - 8 = 3dB因为是同单位的增益比较差值的单位用dB表示
答案A。
继续问→
9.💡解答
要解决这道题需明确802.11帧中不同帧间间隔Inter - Frame SpaceIFS的作用
在802.11协议中SIFSShort Inter - Frame Space短帧间间隔 是最短的帧间间隔用于需要快速响应的场景比如RTSRequest To Send请求发送和CTSClear To Send允许发送之间的帧间间隔就是SIFS。而IFS是帧间间隔的统称DIFSDistributed Inter - Frame Space分布式帧间间隔用于普通数据帧等的竞争接入PIFSPoint Coordination Function Inter - Frame Space点协调功能帧间间隔用于点协调功能下的帧发送。
答案A。
继续问→
10.💡解答
要解决这道题需分析Int - Serv模型的特点及未大规模商用的原因
Int - Serv集成服务模型需要为每个流flow预留资源维护每个流的状态信息。随着网络中流的数量增多对网络设备如路由器的存储、处理能力要求极高难以在大规模网络中部署也就是可扩展性不好。而带宽预留有限、转发效率较低、不利于流量监管并非其未大规模商用的主要原因。
答案C。
继续问→
11.💡解答
由于没有提供图,无法准确判断调制方式。不过可以先介绍一下各选项对应的调制方式特点:
- A. 调幅:通过改变载波信号的振幅来携带信息,振幅的变化反映了调制信号的变化。
- B. 调频:通过改变载波信号的频率来携带信息,频率的变化与调制信号相关。
- C. 调相:通过改变载波信号的相位来携带信息,相位的变化对应调制信号的变化。
- D. 调波:不是常见的基本调制方式。
如果能提供图,可根据图中载波的振幅、频率、相位等变化情况,进一步准确判断属于哪种调制方式。
继续问→
12.💡解答
要解决这道题需逐一分析关于AP6610DN的各选项描述
- 选项AAP6610DN是增强型的室外AP该描述符合其产品特性是正确的。
- 选项BAP6610DN是双频AP5GHz频段可用于无线桥接和用户接入这也是其功能特点是正确的。
- 选项CAP6610DN并非只拥有一个以太网接口它有多个接口所以该描述错误。
- 选项DAP6610DN同时支持以太网接口和光纤接口符合产品实际情况是正确的。
答案C。
继续问→
13.💡解答
要解决这道题需分析CCMPCounter - Mode/CBC - MAC Protocol和TKIPTemporal Key Integrity Protocol加密的特点
- 选项ACCMP采用的IV初始化向量长度等因素并非是其比TKIP安全性高的主要原因。
- 选项B密钥分发机制等方面的差异不是CCMP安全性更高的核心因素。
- 选项CCCMP采用了更复杂的加密算法基于AES加密算法而TKIP是基于WEP的改进加密算法相对简单这是CCMP比TKIP安全性高的重要原因。
- 选项D消息完整性检验机制两者都有相关设计不是CCMP安全性更高的关键原因。
答案C。
继续问→
14.💡解答
要解决这道题,需分析每个命令的功能:
- 选项A display interface  命令主要用于查看接口的状态信息不是查看AC接入控制器当前配置所以该选项错误。
- 选项B display current - configuration  命令的功能就是查看设备当前的配置信息对于AC来说该命令可以查看其当前配置所以该选项正确。
- 选项C display ap all  命令主要用于查看AP无线接入点的相关信息不是查看AC当前配置所以该选项错误。
- 选项D display version  命令主要用于查看设备的版本信息不是查看AC当前配置所以该选项错误。
答案B。
继续问→
15.💡解答
要解决这道题,需分析每个选项对应的组织职能:
- 选项AWiFi联盟的主要工作就是为WLAN设备进行认证以实现WLAN技术的互操作性确保不同厂商的WLAN设备能够相互兼容、正常工作该选项符合要求。
- 选项BIEEE电气与电子工程师协会主要负责制定包括WLAN在内的众多技术标准如802.11系列标准但不是专门针对WLAN设备认证以实现互操作性的组织所以该选项错误。
- 选项CIETF互联网工程任务组主要致力于互联网相关的标准制定等工作与WLAN设备认证及互操作性实现关联不大所以该选项错误。
- 选项DFCC美国联邦通信委员会主要负责美国的通信管制等工作并非为WLAN设备认证以实现互操作性的组织所以该选项错误。
答案A。
继续问→
16.💡解答
要解决这道题,需明确全向天线的水平方向图特点:
全向天线在水平方向上能够向各个方向均匀辐射信号所以其水平方向图表现为360度。
答案C。
继续问→
17.💡解答
要解决这道题需明确ETSIEuropean Telecommunications Standards Institute的含义即欧洲电信标准协会它是欧洲的标准组织。
答案D。
美国的对应组织是 ANSI美国国家标准学会 或 ATISAlliance for Telecommunications Industry Solutions
继续问→
18.💡解答
要解决这道题需明确WEP安全策略的配置相关知识
- 选项A其中 authentication - method open 等配置不符合WEP安全策略的正确配置要求所以该选项错误。
- 选项B security - policy wep policy wep share - key 等配置是符合在AC6605上配置WEP安全策略的操作所以该选项正确。
- 选项C该选项涉及的是WPA相关配置并非WEP的配置所以该选项错误。
答案B。
继续问→
19.💡解答
要解决这道题需明确WDS无线分布式系统网络中AP无线接入点的常见模式
- 选项ARootAP根AP是WDS网络中的重要组成部分用于作为无线分布式系统的根节点所以该选项属于WDS网络中的AP模式。
- 选项BMiddleAP中间AP可在WDS网络中起到中继等作用属于WDS网络中的AP模式。
- 选项CBridgeAP桥接AP主要用于无线桥接不属于WDS网络特有的AP模式分类所以该选项符合题意。
- 选项DLeafAP叶AP是WDS网络中的终端类AP模式属于WDS网络中的AP模式。
答案C。
继续问→
20.💡解答
要解决这道题需明确原始802.11协议的工作频段相关知识:
原始的802.11协议使用的工作频段是2.4GHz。
答案A。
继续问→

View File

@@ -0,0 +1,3 @@
**2025年9月9日**这个大学生真是太美好了wc 我真的绷不住,选了新中国史上了两节课竟然什么都不知道,老师不知道,除了我所有同学都是理学院电子信息专业
2025年9月16日人生就要好好地活着发生个意外妻子改嫁父母没人养老

View File

@@ -0,0 +1,4 @@
line.tv
Kazumi
唉,时间就是单向的,过去的就真的过去了,死了就是死了,不可能再活过来,特定的东西只能发生在特定的时期,过去了就真的过去了,再怎么亡羊补牢,怎么报复性补偿都没什么用,什么狗屁延迟满足,什么狗屁先苦后甜,他妈的越吃苦,你就有吃不完的苦,操你妈的个狗杂种,妈的一群畜生

View File

@@ -0,0 +1 @@
取消文理分科,把原有的理科分为:理科,工科,计科,文科分为:文科,艺体

View File

@@ -0,0 +1,194 @@
**添加:**
- [x] 登录面板-找回密码功能
- [ ] 作物图片切换动画
- [x] 游戏设置
- [ ] 使用道具的动画效果
- [ ] 访问其他农场使用道具
- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果
- [x] 小游戏面板
- [x] 光影渲染也要条配一下
- [x] 昼夜循环系统参考真实世界时间
- [x] 天气系统由服务端来调配
- [x] 巡逻宠物和出战宠物设置为最多四个
- [x] 玩家数据由JSON换成MongoDB数据库
- [ ] 客户端和服务端多线程通信
- [x] 添加按钮主动发起对战,可以帮自己的宠物刷经验升级
- [x] 把小提示导出为配置
- [ ] 玩家可以访问别人农场时用道具给别人长草
- [x] 添加特定农场特定道具和作物只能在特定农场获取杂交农场666 花卉农场520 稻香111 小麦谷222
- [ ] 添加装饰物
- [ ] 添加道具,屎💩,杂草(生长药剂,一包草籽),幸运草/幸运花,染色剂(对该土地染色)
- [ ] 添加随机礼包道具,玩家铲了之后会获得随机道具
- [x] 测运气,今日运气,算卦,占卜
- [ ] 灵活运用OS节点读取玩家信息
- [ ] 默认偷菜被发现概率为10%,可以添加个方法增加偷菜被发现的概率
- [x] 重新添加种子商店购买结构 结合等级,每天随机刷新,购买限制
- [x] 道具商店添加四个筛选按钮:全部 宠物 作物 农场
- [x] 访问玩家添加送金币按钮
- [ ] 添加访问记录面板,显示访问者对被访问者的操作
- [ ] 天梯塔先做8关每一关有不同的敌人
- [x] 添加道具商店和背包分类筛选的功能(宠物道具,作物道具,农场道具)
- [ ] 添加邀请码,邀请玩家可获得额外奖励
- [x] 添加统计访问人数记录,记录访问人名称
- [x] 添加客户端和服务器踢出玩家命令原因ban时长
- [ ] 服务器崩溃出错自动重启
- [x] 添加命令,/rename qq号 新昵称 给某个玩家重命名玩家昵称
- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456
- [x] 给远程控制台添加参数 设置 让用户
- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据(全部)
- [ ] 添加一个按钮刷新获取最新的玩家数据设置10秒后才能点一次
- [x] 让AI把客户端UI场景美化一下 目前太丑了**添加:**
- [x] 登录面板-找回密码功能
- [ ] 作物图片切换动画
- [x] 游戏设置
- [ ] 使用道具的动画效果
- [ ] 访问其他农场使用道具
- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果
- [x] 小游戏面板
- [x] 光影渲染也要条配一下
- [x] 昼夜循环系统参考真实世界时间
- [x] 天气系统由服务端来调配
- [x] 巡逻宠物和出战宠物设置为最多四个
- [x] 玩家数据由JSON换成MongoDB数据库
- [ ] 客户端和服务端多线程通信
- [x] 添加按钮主动发起对战,可以帮自己的宠物刷经验升级
- [x] 把小提示导出为配置
- [ ] 玩家可以访问别人农场时用道具给别人长草
- [x] 添加特定农场特定道具和作物只能在特定农场获取杂交农场666 花卉农场520 稻香111 小麦谷222
- [ ] 添加装饰物
- [ ] 添加道具,屎💩,杂草(生长药剂,一包草籽),幸运草/幸运花,染色剂(对该土地染色)
- [ ] 添加随机礼包道具,玩家铲了之后会获得随机道具
- [x] 测运气,今日运气,算卦,占卜
- [ ] 灵活运用OS节点读取玩家信息
- [ ] 默认偷菜被发现概率为10%,可以添加个方法增加偷菜被发现的概率
- [x] 重新添加种子商店购买结构 结合等级,每天随机刷新,购买限制
- [x] 道具商店添加四个筛选按钮:全部 宠物 作物 农场
- [x] 访问玩家添加送金币按钮
- [ ] 添加访问记录面板,显示访问者对被访问者的操作
- [ ] 天梯塔先做8关每一关有不同的敌人
- [x] 添加道具商店和背包分类筛选的功能(宠物道具,作物道具,农场道具)
- [ ] 添加邀请码,邀请玩家可获得额外奖励
- [x] 添加统计访问人数记录,记录访问人名称
- [x] 添加客户端和服务器踢出玩家命令原因ban时长
- [ ] 服务器崩溃出错自动重启
- [x] 添加命令,/rename qq号 新昵称 给某个玩家重命名玩家昵称
- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456
- [x] 给远程控制台添加参数 设置 让用户
- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据(全部)
- [ ] 添加一个按钮刷新获取最新的玩家数据设置10秒后才能点一次
- [x] 让AI把客户端UI场景美化一下 目前太丑了
- [ ] 添加一个彩蛋系统hyc和lyh是SB即可获得500金币每个账号限一次
- [ ] 作物数据添加血量,最大血量
- [ ] 玩家金币添加最大金币储存上限(金库)添加0下限添加体力值上限
- [ ] 添加道具,等级卡一键升级到下一等级
- [ ] 添加道具,金币符石,使得金币一键达到最大容量
- [ ] 添加道具,体力符石,一键体力达到最大值
**修改/修复:**
- [x] 缓存问题-种子仓库,作物仓库图片缓存失败直接加载图片
- [x] 服务端部署成Docker内网穿透
- [ ] 恢复游戏更新后台
- [x] 收获作物造成卡顿问题
- [ ] 修复智慧树显示问题
- [x] 一键收获作物时过滤杂草作物
- [x] 宠物商店点开自动刷新加载
- [x] 宠物商店每次购买后没有刷新
- [x] 小额金币卡和小额经验卡的文字描述没有修改(应该是对人使用)
- [x] 账户设置出问题了,无法设置
- [x] 服务器老是会卡顿需要手动加载一下
- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗,使用单独的美化弹窗
- [ ] username和password 不知道哪里冒出来的,暂时没有发现异常
- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号
- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新
- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误
- [x] 把缓存删了后作物的后台离线更新失效了
- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制,当离线的客户端登录时获取服务端天气状态,所以需要导出配置到数据库持久化储存
- [x] 把每日签到和幸运抽奖的动画去掉,太丑了,可以加个确认弹窗
- [x] 注册页面和找回密码页面可以返回登录页面
- [ ] 八大面板两边再扩大一点,手机端玩家不好滑动
- [x] 修改偷菜被宠物100%发现的bug
- [ ] 修复添加没有的作物图片和过于抽象的图片
- [x] 修复访问其他玩家作物不更新
- [x] 使用道具还没有修复
- [x] 喂养宠物也是没有修复,生命值
- [ ] 年龄计算天数也有问题
- [x] 玩家打开作物仓库的时候请求一次服务器
- [ ] 战斗胜利的偷菜计时器失效了
- [ ] UI做大一点手机端还是不好操作
- [ ] 弹窗UI连续显示时不够流畅
- [ ] 咖啡豆没有未成熟图片
- [x] 一键截图改成截图模式
- [x] 把野草禁止买卖
- [ ] 偷菜被发现强制扣金币一直扣到0为止不能出现负数金币
- [x] 访问别人玩家不能打开玩家的小卖部
- [ ] 设置稻草人所有内容最多只能20个字客户端限制
- [ ] 设置对玩家使用的道具可以批量使用
- [x] 设置批量出售作物超出最大值设置为最大值
- [ ] 修改智慧树每次登录也会刷新一句话
- [x] 点开道具背包,作物仓库,种子仓库,上报服务器刷新一下
- [ ] 宠物喂食完,使用道具后返回宠物信息面板
- [ ] 作物更新还是有问题,在考虑要不要直接退回到原来的每秒更新
- [x] 修复登录递归循环调用导致无法登录问题
- [ ] 修复点开账户设置时自动刷新一下
- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题
- [ ] 把稻草人数据库配置改成无限句话
- [ ] 添加一个彩蛋系统hyc和lyh是SB即可获得500金币每个账号限一次
- [ ] 作物数据添加血量,最大血量
- [ ] 玩家金币添加最大金币储存上限(金库)添加0下限添加体力值上限
- [ ] 添加道具,等级卡一键升级到下一等级
- [ ] 添加道具,金币符石,使得金币一键达到最大容量
- [ ] 添加道具,体力符石,一键体力达到最大值
**修改/修复:**
- [x] 缓存问题-种子仓库,作物仓库图片缓存失败直接加载图片
- [x] 服务端部署成Docker内网穿透
- [ ] 恢复游戏更新后台
- [x] 收获作物造成卡顿问题
- [ ] 修复智慧树显示问题
- [x] 一键收获作物时过滤杂草作物
- [x] 宠物商店点开自动刷新加载
- [x] 宠物商店每次购买后没有刷新
- [x] 小额金币卡和小额经验卡的文字描述没有修改(应该是对人使用)
- [x] 账户设置出问题了,无法设置
- [x] 服务器老是会卡顿需要手动加载一下
- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗,使用单独的美化弹窗
- [ ] username和password 不知道哪里冒出来的,暂时没有发现异常
- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号
- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新
- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误
- [x] 把缓存删了后作物的后台离线更新失效了
- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制,当离线的客户端登录时获取服务端天气状态,所以需要导出配置到数据库持久化储存
- [x] 把每日签到和幸运抽奖的动画去掉,太丑了,可以加个确认弹窗
- [x] 注册页面和找回密码页面可以返回登录页面
- [ ] 八大面板两边再扩大一点,手机端玩家不好滑动
- [x] 修改偷菜被宠物100%发现的bug
- [ ] 修复添加没有的作物图片和过于抽象的图片
- [x] 修复访问其他玩家作物不更新
- [x] 使用道具还没有修复
- [x] 喂养宠物也是没有修复,生命值
- [ ] 年龄计算天数也有问题
- [x] 玩家打开作物仓库的时候请求一次服务器
- [ ] 战斗胜利的偷菜计时器失效了
- [ ] UI做大一点手机端还是不好操作
- [ ] 弹窗UI连续显示时不够流畅
- [ ] 咖啡豆没有未成熟图片
- [x] 一键截图改成截图模式
- [x] 把野草禁止买卖
- [ ] 偷菜被发现强制扣金币一直扣到0为止不能出现负数金币
- [x] 访问别人玩家不能打开玩家的小卖部
- [ ] 设置稻草人所有内容最多只能20个字客户端限制
- [ ] 设置对玩家使用的道具可以批量使用
- [x] 设置批量出售作物超出最大值设置为最大值
- [ ] 修改智慧树每次登录也会刷新一句话
- [x] 点开道具背包,作物仓库,种子仓库,上报服务器刷新一下
- [ ] 宠物喂食完,使用道具后返回宠物信息面板
- [ ] 作物更新还是有问题,在考虑要不要直接退回到原来的每秒更新
- [x] 修复登录递归循环调用导致无法登录问题
- [ ] 修复点开账户设置时自动刷新一下
- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题
- [ ] 把稻草人数据库配置改成无限句话

View File

@@ -0,0 +1,194 @@
**添加:**
- [x] 登录面板-找回密码功能
- [ ] 作物图片切换动画
- [x] 游戏设置
- [ ] 使用道具的动画效果
- [ ] 访问其他农场使用道具
- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果
- [x] 小游戏面板
- [x] 光影渲染也要条配一下
- [x] 昼夜循环系统参考真实世界时间
- [x] 天气系统由服务端来调配
- [x] 巡逻宠物和出战宠物设置为最多四个
- [x] 玩家数据由JSON换成MongoDB数据库
- [ ] 客户端和服务端多线程通信
- [x] 添加按钮主动发起对战,可以帮自己的宠物刷经验升级
- [x] 把小提示导出为配置
- [ ] 玩家可以访问别人农场时用道具给别人长草
- [x] 添加特定农场特定道具和作物只能在特定农场获取杂交农场666 花卉农场520 稻香111 小麦谷222
- [ ] 添加装饰物
- [ ] 添加道具,屎💩,杂草(生长药剂,一包草籽),幸运草/幸运花,染色剂(对该土地染色)
- [ ] 添加随机礼包道具,玩家铲了之后会获得随机道具
- [x] 测运气,今日运气,算卦,占卜
- [ ] 灵活运用OS节点读取玩家信息
- [ ] 默认偷菜被发现概率为10%,可以添加个方法增加偷菜被发现的概率
- [x] 重新添加种子商店购买结构 结合等级,每天随机刷新,购买限制
- [x] 道具商店添加四个筛选按钮:全部 宠物 作物 农场
- [x] 访问玩家添加送金币按钮
- [ ] 添加访问记录面板,显示访问者对被访问者的操作
- [ ] 天梯塔先做8关每一关有不同的敌人
- [x] 添加道具商店和背包分类筛选的功能(宠物道具,作物道具,农场道具)
- [ ] 添加邀请码,邀请玩家可获得额外奖励
- [x] 添加统计访问人数记录,记录访问人名称
- [x] 添加客户端和服务器踢出玩家命令原因ban时长
- [ ] 服务器崩溃出错自动重启
- [x] 添加命令,/rename qq号 新昵称 给某个玩家重命名玩家昵称
- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456
- [x] 给远程控制台添加参数 设置 让用户
- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据(全部)
- [ ] 添加一个按钮刷新获取最新的玩家数据设置10秒后才能点一次
- [x] 让AI把客户端UI场景美化一下 目前太丑了**添加:**
- [x] 登录面板-找回密码功能
- [ ] 作物图片切换动画
- [x] 游戏设置
- [ ] 使用道具的动画效果
- [ ] 访问其他农场使用道具
- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果
- [x] 小游戏面板
- [x] 光影渲染也要条配一下
- [x] 昼夜循环系统参考真实世界时间
- [x] 天气系统由服务端来调配
- [x] 巡逻宠物和出战宠物设置为最多四个
- [x] 玩家数据由JSON换成MongoDB数据库
- [ ] 客户端和服务端多线程通信
- [x] 添加按钮主动发起对战,可以帮自己的宠物刷经验升级
- [x] 把小提示导出为配置
- [ ] 玩家可以访问别人农场时用道具给别人长草
- [x] 添加特定农场特定道具和作物只能在特定农场获取杂交农场666 花卉农场520 稻香111 小麦谷222
- [ ] 添加装饰物
- [ ] 添加道具,屎💩,杂草(生长药剂,一包草籽),幸运草/幸运花,染色剂(对该土地染色)
- [ ] 添加随机礼包道具,玩家铲了之后会获得随机道具
- [x] 测运气,今日运气,算卦,占卜
- [ ] 灵活运用OS节点读取玩家信息
- [ ] 默认偷菜被发现概率为10%,可以添加个方法增加偷菜被发现的概率
- [x] 重新添加种子商店购买结构 结合等级,每天随机刷新,购买限制
- [x] 道具商店添加四个筛选按钮:全部 宠物 作物 农场
- [x] 访问玩家添加送金币按钮
- [ ] 添加访问记录面板,显示访问者对被访问者的操作
- [ ] 天梯塔先做8关每一关有不同的敌人
- [x] 添加道具商店和背包分类筛选的功能(宠物道具,作物道具,农场道具)
- [ ] 添加邀请码,邀请玩家可获得额外奖励
- [x] 添加统计访问人数记录,记录访问人名称
- [x] 添加客户端和服务器踢出玩家命令原因ban时长
- [ ] 服务器崩溃出错自动重启
- [x] 添加命令,/rename qq号 新昵称 给某个玩家重命名玩家昵称
- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456
- [x] 给远程控制台添加参数 设置 让用户
- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据(全部)
- [ ] 添加一个按钮刷新获取最新的玩家数据设置10秒后才能点一次
- [x] 让AI把客户端UI场景美化一下 目前太丑了
- [ ] 添加一个彩蛋系统hyc和lyh是SB即可获得500金币每个账号限一次
- [ ] 作物数据添加血量,最大血量
- [ ] 玩家金币添加最大金币储存上限(金库)添加0下限添加体力值上限
- [ ] 添加道具,等级卡一键升级到下一等级
- [ ] 添加道具,金币符石,使得金币一键达到最大容量
- [ ] 添加道具,体力符石,一键体力达到最大值
**修改/修复:**
- [x] 缓存问题-种子仓库,作物仓库图片缓存失败直接加载图片
- [x] 服务端部署成Docker内网穿透
- [ ] 恢复游戏更新后台
- [x] 收获作物造成卡顿问题
- [ ] 修复智慧树显示问题
- [x] 一键收获作物时过滤杂草作物
- [x] 宠物商店点开自动刷新加载
- [x] 宠物商店每次购买后没有刷新
- [x] 小额金币卡和小额经验卡的文字描述没有修改(应该是对人使用)
- [x] 账户设置出问题了,无法设置
- [x] 服务器老是会卡顿需要手动加载一下
- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗,使用单独的美化弹窗
- [ ] username和password 不知道哪里冒出来的,暂时没有发现异常
- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号
- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新
- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误
- [x] 把缓存删了后作物的后台离线更新失效了
- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制,当离线的客户端登录时获取服务端天气状态,所以需要导出配置到数据库持久化储存
- [x] 把每日签到和幸运抽奖的动画去掉,太丑了,可以加个确认弹窗
- [x] 注册页面和找回密码页面可以返回登录页面
- [ ] 八大面板两边再扩大一点,手机端玩家不好滑动
- [x] 修改偷菜被宠物100%发现的bug
- [ ] 修复添加没有的作物图片和过于抽象的图片
- [x] 修复访问其他玩家作物不更新
- [x] 使用道具还没有修复
- [x] 喂养宠物也是没有修复,生命值
- [ ] 年龄计算天数也有问题
- [x] 玩家打开作物仓库的时候请求一次服务器
- [ ] 战斗胜利的偷菜计时器失效了
- [ ] UI做大一点手机端还是不好操作
- [ ] 弹窗UI连续显示时不够流畅
- [ ] 咖啡豆没有未成熟图片
- [x] 一键截图改成截图模式
- [x] 把野草禁止买卖
- [ ] 偷菜被发现强制扣金币一直扣到0为止不能出现负数金币
- [x] 访问别人玩家不能打开玩家的小卖部
- [ ] 设置稻草人所有内容最多只能20个字客户端限制
- [ ] 设置对玩家使用的道具可以批量使用
- [x] 设置批量出售作物超出最大值设置为最大值
- [ ] 修改智慧树每次登录也会刷新一句话
- [x] 点开道具背包,作物仓库,种子仓库,上报服务器刷新一下
- [ ] 宠物喂食完,使用道具后返回宠物信息面板
- [ ] 作物更新还是有问题,在考虑要不要直接退回到原来的每秒更新
- [x] 修复登录递归循环调用导致无法登录问题
- [ ] 修复点开账户设置时自动刷新一下
- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题
- [ ] 把稻草人数据库配置改成无限句话
- [ ] 添加一个彩蛋系统hyc和lyh是SB即可获得500金币每个账号限一次
- [ ] 作物数据添加血量,最大血量
- [ ] 玩家金币添加最大金币储存上限(金库)添加0下限添加体力值上限
- [ ] 添加道具,等级卡一键升级到下一等级
- [ ] 添加道具,金币符石,使得金币一键达到最大容量
- [ ] 添加道具,体力符石,一键体力达到最大值
**修改/修复:**
- [x] 缓存问题-种子仓库,作物仓库图片缓存失败直接加载图片
- [x] 服务端部署成Docker内网穿透
- [ ] 恢复游戏更新后台
- [x] 收获作物造成卡顿问题
- [ ] 修复智慧树显示问题
- [x] 一键收获作物时过滤杂草作物
- [x] 宠物商店点开自动刷新加载
- [x] 宠物商店每次购买后没有刷新
- [x] 小额金币卡和小额经验卡的文字描述没有修改(应该是对人使用)
- [x] 账户设置出问题了,无法设置
- [x] 服务器老是会卡顿需要手动加载一下
- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗,使用单独的美化弹窗
- [ ] username和password 不知道哪里冒出来的,暂时没有发现异常
- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号
- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新
- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误
- [x] 把缓存删了后作物的后台离线更新失效了
- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制,当离线的客户端登录时获取服务端天气状态,所以需要导出配置到数据库持久化储存
- [x] 把每日签到和幸运抽奖的动画去掉,太丑了,可以加个确认弹窗
- [x] 注册页面和找回密码页面可以返回登录页面
- [ ] 八大面板两边再扩大一点,手机端玩家不好滑动
- [x] 修改偷菜被宠物100%发现的bug
- [ ] 修复添加没有的作物图片和过于抽象的图片
- [x] 修复访问其他玩家作物不更新
- [x] 使用道具还没有修复
- [x] 喂养宠物也是没有修复,生命值
- [ ] 年龄计算天数也有问题
- [x] 玩家打开作物仓库的时候请求一次服务器
- [ ] 战斗胜利的偷菜计时器失效了
- [ ] UI做大一点手机端还是不好操作
- [ ] 弹窗UI连续显示时不够流畅
- [ ] 咖啡豆没有未成熟图片
- [x] 一键截图改成截图模式
- [x] 把野草禁止买卖
- [ ] 偷菜被发现强制扣金币一直扣到0为止不能出现负数金币
- [x] 访问别人玩家不能打开玩家的小卖部
- [ ] 设置稻草人所有内容最多只能20个字客户端限制
- [ ] 设置对玩家使用的道具可以批量使用
- [x] 设置批量出售作物超出最大值设置为最大值
- [ ] 修改智慧树每次登录也会刷新一句话
- [x] 点开道具背包,作物仓库,种子仓库,上报服务器刷新一下
- [ ] 宠物喂食完,使用道具后返回宠物信息面板
- [ ] 作物更新还是有问题,在考虑要不要直接退回到原来的每秒更新
- [x] 修复登录递归循环调用导致无法登录问题
- [ ] 修复点开账户设置时自动刷新一下
- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题
- [ ] 把稻草人数据库配置改成无限句话

View File

@@ -0,0 +1,194 @@
**添加:**
- [x] 登录面板-找回密码功能
- [ ] 作物图片切换动画
- [x] 游戏设置
- [ ] 使用道具的动画效果
- [ ] 访问其他农场使用道具
- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果
- [x] 小游戏面板
- [x] 光影渲染也要条配一下
- [x] 昼夜循环系统参考真实世界时间
- [x] 天气系统由服务端来调配
- [x] 巡逻宠物和出战宠物设置为最多四个
- [x] 玩家数据由JSON换成MongoDB数据库
- [ ] 客户端和服务端多线程通信
- [x] 添加按钮主动发起对战,可以帮自己的宠物刷经验升级
- [x] 把小提示导出为配置
- [ ] 玩家可以访问别人农场时用道具给别人长草
- [x] 添加特定农场特定道具和作物只能在特定农场获取杂交农场666 花卉农场520 稻香111 小麦谷222
- [ ] 添加装饰物
- [ ] 添加道具,屎💩,杂草(生长药剂,一包草籽),幸运草/幸运花,染色剂(对该土地染色)
- [ ] 添加随机礼包道具,玩家铲了之后会获得随机道具
- [x] 测运气,今日运气,算卦,占卜
- [ ] 灵活运用OS节点读取玩家信息
- [ ] 默认偷菜被发现概率为10%,可以添加个方法增加偷菜被发现的概率
- [x] 重新添加种子商店购买结构 结合等级,每天随机刷新,购买限制
- [x] 道具商店添加四个筛选按钮:全部 宠物 作物 农场
- [x] 访问玩家添加送金币按钮
- [ ] 添加访问记录面板,显示访问者对被访问者的操作
- [ ] 天梯塔先做8关每一关有不同的敌人
- [x] 添加道具商店和背包分类筛选的功能(宠物道具,作物道具,农场道具)
- [ ] 添加邀请码,邀请玩家可获得额外奖励
- [x] 添加统计访问人数记录,记录访问人名称
- [x] 添加客户端和服务器踢出玩家命令原因ban时长
- [ ] 服务器崩溃出错自动重启
- [x] 添加命令,/rename qq号 新昵称 给某个玩家重命名玩家昵称
- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456
- [x] 给远程控制台添加参数 设置 让用户
- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据(全部)
- [ ] 添加一个按钮刷新获取最新的玩家数据设置10秒后才能点一次
- [x] 让AI把客户端UI场景美化一下 目前太丑了**添加:**
- [x] 登录面板-找回密码功能
- [ ] 作物图片切换动画
- [x] 游戏设置
- [ ] 使用道具的动画效果
- [ ] 访问其他农场使用道具
- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果
- [x] 小游戏面板
- [x] 光影渲染也要条配一下
- [x] 昼夜循环系统参考真实世界时间
- [x] 天气系统由服务端来调配
- [x] 巡逻宠物和出战宠物设置为最多四个
- [x] 玩家数据由JSON换成MongoDB数据库
- [ ] 客户端和服务端多线程通信
- [x] 添加按钮主动发起对战,可以帮自己的宠物刷经验升级
- [x] 把小提示导出为配置
- [ ] 玩家可以访问别人农场时用道具给别人长草
- [x] 添加特定农场特定道具和作物只能在特定农场获取杂交农场666 花卉农场520 稻香111 小麦谷222
- [ ] 添加装饰物
- [ ] 添加道具,屎💩,杂草(生长药剂,一包草籽),幸运草/幸运花,染色剂(对该土地染色)
- [ ] 添加随机礼包道具,玩家铲了之后会获得随机道具
- [x] 测运气,今日运气,算卦,占卜
- [ ] 灵活运用OS节点读取玩家信息
- [ ] 默认偷菜被发现概率为10%,可以添加个方法增加偷菜被发现的概率
- [x] 重新添加种子商店购买结构 结合等级,每天随机刷新,购买限制
- [x] 道具商店添加四个筛选按钮:全部 宠物 作物 农场
- [x] 访问玩家添加送金币按钮
- [ ] 添加访问记录面板,显示访问者对被访问者的操作
- [ ] 天梯塔先做8关每一关有不同的敌人
- [x] 添加道具商店和背包分类筛选的功能(宠物道具,作物道具,农场道具)
- [ ] 添加邀请码,邀请玩家可获得额外奖励
- [x] 添加统计访问人数记录,记录访问人名称
- [x] 添加客户端和服务器踢出玩家命令原因ban时长
- [ ] 服务器崩溃出错自动重启
- [x] 添加命令,/rename qq号 新昵称 给某个玩家重命名玩家昵称
- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456
- [x] 给远程控制台添加参数 设置 让用户
- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据(全部)
- [ ] 添加一个按钮刷新获取最新的玩家数据设置10秒后才能点一次
- [x] 让AI把客户端UI场景美化一下 目前太丑了
- [ ] 添加一个彩蛋系统hyc和lyh是SB即可获得500金币每个账号限一次
- [ ] 作物数据添加血量,最大血量
- [ ] 玩家金币添加最大金币储存上限(金库)添加0下限添加体力值上限
- [ ] 添加道具,等级卡一键升级到下一等级
- [ ] 添加道具,金币符石,使得金币一键达到最大容量
- [ ] 添加道具,体力符石,一键体力达到最大值
**修改/修复:**
- [x] 缓存问题-种子仓库,作物仓库图片缓存失败直接加载图片
- [x] 服务端部署成Docker内网穿透
- [ ] 恢复游戏更新后台
- [x] 收获作物造成卡顿问题
- [ ] 修复智慧树显示问题
- [x] 一键收获作物时过滤杂草作物
- [x] 宠物商店点开自动刷新加载
- [x] 宠物商店每次购买后没有刷新
- [x] 小额金币卡和小额经验卡的文字描述没有修改(应该是对人使用)
- [x] 账户设置出问题了,无法设置
- [x] 服务器老是会卡顿需要手动加载一下
- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗,使用单独的美化弹窗
- [ ] username和password 不知道哪里冒出来的,暂时没有发现异常
- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号
- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新
- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误
- [x] 把缓存删了后作物的后台离线更新失效了
- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制,当离线的客户端登录时获取服务端天气状态,所以需要导出配置到数据库持久化储存
- [x] 把每日签到和幸运抽奖的动画去掉,太丑了,可以加个确认弹窗
- [x] 注册页面和找回密码页面可以返回登录页面
- [ ] 八大面板两边再扩大一点,手机端玩家不好滑动
- [x] 修改偷菜被宠物100%发现的bug
- [ ] 修复添加没有的作物图片和过于抽象的图片
- [x] 修复访问其他玩家作物不更新
- [x] 使用道具还没有修复
- [x] 喂养宠物也是没有修复,生命值
- [ ] 年龄计算天数也有问题
- [x] 玩家打开作物仓库的时候请求一次服务器
- [ ] 战斗胜利的偷菜计时器失效了
- [ ] UI做大一点手机端还是不好操作
- [ ] 弹窗UI连续显示时不够流畅
- [ ] 咖啡豆没有未成熟图片
- [x] 一键截图改成截图模式
- [x] 把野草禁止买卖
- [ ] 偷菜被发现强制扣金币一直扣到0为止不能出现负数金币
- [x] 访问别人玩家不能打开玩家的小卖部
- [ ] 设置稻草人所有内容最多只能20个字客户端限制
- [ ] 设置对玩家使用的道具可以批量使用
- [x] 设置批量出售作物超出最大值设置为最大值
- [ ] 修改智慧树每次登录也会刷新一句话
- [x] 点开道具背包,作物仓库,种子仓库,上报服务器刷新一下
- [ ] 宠物喂食完,使用道具后返回宠物信息面板
- [ ] 作物更新还是有问题,在考虑要不要直接退回到原来的每秒更新
- [x] 修复登录递归循环调用导致无法登录问题
- [ ] 修复点开账户设置时自动刷新一下
- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题
- [ ] 把稻草人数据库配置改成无限句话
- [ ] 添加一个彩蛋系统hyc和lyh是SB即可获得500金币每个账号限一次
- [ ] 作物数据添加血量,最大血量
- [ ] 玩家金币添加最大金币储存上限(金库)添加0下限添加体力值上限
- [ ] 添加道具,等级卡一键升级到下一等级
- [ ] 添加道具,金币符石,使得金币一键达到最大容量
- [ ] 添加道具,体力符石,一键体力达到最大值
**修改/修复:**
- [x] 缓存问题-种子仓库,作物仓库图片缓存失败直接加载图片
- [x] 服务端部署成Docker内网穿透
- [ ] 恢复游戏更新后台
- [x] 收获作物造成卡顿问题
- [ ] 修复智慧树显示问题
- [x] 一键收获作物时过滤杂草作物
- [x] 宠物商店点开自动刷新加载
- [x] 宠物商店每次购买后没有刷新
- [x] 小额金币卡和小额经验卡的文字描述没有修改(应该是对人使用)
- [x] 账户设置出问题了,无法设置
- [x] 服务器老是会卡顿需要手动加载一下
- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗,使用单独的美化弹窗
- [ ] username和password 不知道哪里冒出来的,暂时没有发现异常
- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号
- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新
- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误
- [x] 把缓存删了后作物的后台离线更新失效了
- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制,当离线的客户端登录时获取服务端天气状态,所以需要导出配置到数据库持久化储存
- [x] 把每日签到和幸运抽奖的动画去掉,太丑了,可以加个确认弹窗
- [x] 注册页面和找回密码页面可以返回登录页面
- [ ] 八大面板两边再扩大一点,手机端玩家不好滑动
- [x] 修改偷菜被宠物100%发现的bug
- [ ] 修复添加没有的作物图片和过于抽象的图片
- [x] 修复访问其他玩家作物不更新
- [x] 使用道具还没有修复
- [x] 喂养宠物也是没有修复,生命值
- [ ] 年龄计算天数也有问题
- [x] 玩家打开作物仓库的时候请求一次服务器
- [ ] 战斗胜利的偷菜计时器失效了
- [ ] UI做大一点手机端还是不好操作
- [ ] 弹窗UI连续显示时不够流畅
- [ ] 咖啡豆没有未成熟图片
- [x] 一键截图改成截图模式
- [x] 把野草禁止买卖
- [ ] 偷菜被发现强制扣金币一直扣到0为止不能出现负数金币
- [x] 访问别人玩家不能打开玩家的小卖部
- [ ] 设置稻草人所有内容最多只能20个字客户端限制
- [ ] 设置对玩家使用的道具可以批量使用
- [x] 设置批量出售作物超出最大值设置为最大值
- [ ] 修改智慧树每次登录也会刷新一句话
- [x] 点开道具背包,作物仓库,种子仓库,上报服务器刷新一下
- [ ] 宠物喂食完,使用道具后返回宠物信息面板
- [ ] 作物更新还是有问题,在考虑要不要直接退回到原来的每秒更新
- [x] 修复登录递归循环调用导致无法登录问题
- [ ] 修复点开账户设置时自动刷新一下
- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题
- [ ] 把稻草人数据库配置改成无限句话

View File

@@ -0,0 +1,194 @@
**添加:**
- [x] 登录面板-找回密码功能
- [ ] 作物图片切换动画
- [x] 游戏设置
- [ ] 使用道具的动画效果
- [ ] 访问其他农场使用道具
- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果
- [x] 小游戏面板
- [x] 光影渲染也要条配一下
- [x] 昼夜循环系统参考真实世界时间
- [x] 天气系统由服务端来调配
- [x] 巡逻宠物和出战宠物设置为最多四个
- [x] 玩家数据由JSON换成MongoDB数据库
- [ ] 客户端和服务端多线程通信
- [x] 添加按钮主动发起对战,可以帮自己的宠物刷经验升级
- [x] 把小提示导出为配置
- [ ] 玩家可以访问别人农场时用道具给别人长草
- [x] 添加特定农场特定道具和作物只能在特定农场获取杂交农场666 花卉农场520 稻香111 小麦谷222
- [ ] 添加装饰物
- [ ] 添加道具,屎💩,杂草(生长药剂,一包草籽),幸运草/幸运花,染色剂(对该土地染色)
- [ ] 添加随机礼包道具,玩家铲了之后会获得随机道具
- [x] 测运气,今日运气,算卦,占卜
- [ ] 灵活运用OS节点读取玩家信息
- [ ] 默认偷菜被发现概率为10%,可以添加个方法增加偷菜被发现的概率
- [x] 重新添加种子商店购买结构 结合等级,每天随机刷新,购买限制
- [x] 道具商店添加四个筛选按钮:全部 宠物 作物 农场
- [x] 访问玩家添加送金币按钮
- [ ] 添加访问记录面板,显示访问者对被访问者的操作
- [ ] 天梯塔先做8关每一关有不同的敌人
- [x] 添加道具商店和背包分类筛选的功能(宠物道具,作物道具,农场道具)
- [ ] 添加邀请码,邀请玩家可获得额外奖励
- [x] 添加统计访问人数记录,记录访问人名称
- [x] 添加客户端和服务器踢出玩家命令原因ban时长
- [ ] 服务器崩溃出错自动重启
- [x] 添加命令,/rename qq号 新昵称 给某个玩家重命名玩家昵称
- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456
- [x] 给远程控制台添加参数 设置 让用户
- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据(全部)
- [ ] 添加一个按钮刷新获取最新的玩家数据设置10秒后才能点一次
- [x] 让AI把客户端UI场景美化一下 目前太丑了**添加:**
- [x] 登录面板-找回密码功能
- [ ] 作物图片切换动画
- [x] 游戏设置
- [ ] 使用道具的动画效果
- [ ] 访问其他农场使用道具
- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果
- [x] 小游戏面板
- [x] 光影渲染也要条配一下
- [x] 昼夜循环系统参考真实世界时间
- [x] 天气系统由服务端来调配
- [x] 巡逻宠物和出战宠物设置为最多四个
- [x] 玩家数据由JSON换成MongoDB数据库
- [ ] 客户端和服务端多线程通信
- [x] 添加按钮主动发起对战,可以帮自己的宠物刷经验升级
- [x] 把小提示导出为配置
- [ ] 玩家可以访问别人农场时用道具给别人长草
- [x] 添加特定农场特定道具和作物只能在特定农场获取杂交农场666 花卉农场520 稻香111 小麦谷222
- [ ] 添加装饰物
- [ ] 添加道具,屎💩,杂草(生长药剂,一包草籽),幸运草/幸运花,染色剂(对该土地染色)
- [ ] 添加随机礼包道具,玩家铲了之后会获得随机道具
- [x] 测运气,今日运气,算卦,占卜
- [ ] 灵活运用OS节点读取玩家信息
- [ ] 默认偷菜被发现概率为10%,可以添加个方法增加偷菜被发现的概率
- [x] 重新添加种子商店购买结构 结合等级,每天随机刷新,购买限制
- [x] 道具商店添加四个筛选按钮:全部 宠物 作物 农场
- [x] 访问玩家添加送金币按钮
- [ ] 添加访问记录面板,显示访问者对被访问者的操作
- [ ] 天梯塔先做8关每一关有不同的敌人
- [x] 添加道具商店和背包分类筛选的功能(宠物道具,作物道具,农场道具)
- [ ] 添加邀请码,邀请玩家可获得额外奖励
- [x] 添加统计访问人数记录,记录访问人名称
- [x] 添加客户端和服务器踢出玩家命令原因ban时长
- [ ] 服务器崩溃出错自动重启
- [x] 添加命令,/rename qq号 新昵称 给某个玩家重命名玩家昵称
- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456
- [x] 给远程控制台添加参数 设置 让用户
- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据(全部)
- [ ] 添加一个按钮刷新获取最新的玩家数据设置10秒后才能点一次
- [x] 让AI把客户端UI场景美化一下 目前太丑了
- [ ] 添加一个彩蛋系统hyc和lyh是SB即可获得500金币每个账号限一次
- [ ] 作物数据添加血量,最大血量
- [ ] 玩家金币添加最大金币储存上限(金库)添加0下限添加体力值上限
- [ ] 添加道具,等级卡一键升级到下一等级
- [ ] 添加道具,金币符石,使得金币一键达到最大容量
- [ ] 添加道具,体力符石,一键体力达到最大值
**修改/修复:**
- [x] 缓存问题-种子仓库,作物仓库图片缓存失败直接加载图片
- [x] 服务端部署成Docker内网穿透
- [ ] 恢复游戏更新后台
- [x] 收获作物造成卡顿问题
- [ ] 修复智慧树显示问题
- [x] 一键收获作物时过滤杂草作物
- [x] 宠物商店点开自动刷新加载
- [x] 宠物商店每次购买后没有刷新
- [x] 小额金币卡和小额经验卡的文字描述没有修改(应该是对人使用)
- [x] 账户设置出问题了,无法设置
- [x] 服务器老是会卡顿需要手动加载一下
- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗,使用单独的美化弹窗
- [ ] username和password 不知道哪里冒出来的,暂时没有发现异常
- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号
- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新
- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误
- [x] 把缓存删了后作物的后台离线更新失效了
- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制,当离线的客户端登录时获取服务端天气状态,所以需要导出配置到数据库持久化储存
- [x] 把每日签到和幸运抽奖的动画去掉,太丑了,可以加个确认弹窗
- [x] 注册页面和找回密码页面可以返回登录页面
- [ ] 八大面板两边再扩大一点,手机端玩家不好滑动
- [x] 修改偷菜被宠物100%发现的bug
- [ ] 修复添加没有的作物图片和过于抽象的图片
- [x] 修复访问其他玩家作物不更新
- [x] 使用道具还没有修复
- [x] 喂养宠物也是没有修复,生命值
- [ ] 年龄计算天数也有问题
- [x] 玩家打开作物仓库的时候请求一次服务器
- [ ] 战斗胜利的偷菜计时器失效了
- [ ] UI做大一点手机端还是不好操作
- [ ] 弹窗UI连续显示时不够流畅
- [ ] 咖啡豆没有未成熟图片
- [x] 一键截图改成截图模式
- [x] 把野草禁止买卖
- [ ] 偷菜被发现强制扣金币一直扣到0为止不能出现负数金币
- [x] 访问别人玩家不能打开玩家的小卖部
- [ ] 设置稻草人所有内容最多只能20个字客户端限制
- [ ] 设置对玩家使用的道具可以批量使用
- [x] 设置批量出售作物超出最大值设置为最大值
- [ ] 修改智慧树每次登录也会刷新一句话
- [x] 点开道具背包,作物仓库,种子仓库,上报服务器刷新一下
- [ ] 宠物喂食完,使用道具后返回宠物信息面板
- [ ] 作物更新还是有问题,在考虑要不要直接退回到原来的每秒更新
- [x] 修复登录递归循环调用导致无法登录问题
- [ ] 修复点开账户设置时自动刷新一下
- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题
- [ ] 把稻草人数据库配置改成无限句话
- [ ] 添加一个彩蛋系统hyc和lyh是SB即可获得500金币每个账号限一次
- [ ] 作物数据添加血量,最大血量
- [ ] 玩家金币添加最大金币储存上限(金库)添加0下限添加体力值上限
- [ ] 添加道具,等级卡一键升级到下一等级
- [ ] 添加道具,金币符石,使得金币一键达到最大容量
- [ ] 添加道具,体力符石,一键体力达到最大值
**修改/修复:**
- [x] 缓存问题-种子仓库,作物仓库图片缓存失败直接加载图片
- [x] 服务端部署成Docker内网穿透
- [ ] 恢复游戏更新后台
- [x] 收获作物造成卡顿问题
- [ ] 修复智慧树显示问题
- [x] 一键收获作物时过滤杂草作物
- [x] 宠物商店点开自动刷新加载
- [x] 宠物商店每次购买后没有刷新
- [x] 小额金币卡和小额经验卡的文字描述没有修改(应该是对人使用)
- [x] 账户设置出问题了,无法设置
- [x] 服务器老是会卡顿需要手动加载一下
- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗,使用单独的美化弹窗
- [ ] username和password 不知道哪里冒出来的,暂时没有发现异常
- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号
- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新
- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误
- [x] 把缓存删了后作物的后台离线更新失效了
- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制,当离线的客户端登录时获取服务端天气状态,所以需要导出配置到数据库持久化储存
- [x] 把每日签到和幸运抽奖的动画去掉,太丑了,可以加个确认弹窗
- [x] 注册页面和找回密码页面可以返回登录页面
- [ ] 八大面板两边再扩大一点,手机端玩家不好滑动
- [x] 修改偷菜被宠物100%发现的bug
- [ ] 修复添加没有的作物图片和过于抽象的图片
- [x] 修复访问其他玩家作物不更新
- [x] 使用道具还没有修复
- [x] 喂养宠物也是没有修复,生命值
- [ ] 年龄计算天数也有问题
- [x] 玩家打开作物仓库的时候请求一次服务器
- [ ] 战斗胜利的偷菜计时器失效了
- [ ] UI做大一点手机端还是不好操作
- [ ] 弹窗UI连续显示时不够流畅
- [ ] 咖啡豆没有未成熟图片
- [x] 一键截图改成截图模式
- [x] 把野草禁止买卖
- [ ] 偷菜被发现强制扣金币一直扣到0为止不能出现负数金币
- [x] 访问别人玩家不能打开玩家的小卖部
- [ ] 设置稻草人所有内容最多只能20个字客户端限制
- [ ] 设置对玩家使用的道具可以批量使用
- [x] 设置批量出售作物超出最大值设置为最大值
- [ ] 修改智慧树每次登录也会刷新一句话
- [x] 点开道具背包,作物仓库,种子仓库,上报服务器刷新一下
- [ ] 宠物喂食完,使用道具后返回宠物信息面板
- [ ] 作物更新还是有问题,在考虑要不要直接退回到原来的每秒更新
- [x] 修复登录递归循环调用导致无法登录问题
- [ ] 修复点开账户设置时自动刷新一下
- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题
- [ ] 把稻草人数据库配置改成无限句话

View File

@@ -0,0 +1,194 @@
**添加:**
- [x] 登录面板-找回密码功能
- [ ] 作物图片切换动画
- [x] 游戏设置
- [ ] 使用道具的动画效果
- [ ] 访问其他农场使用道具
- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果
- [x] 小游戏面板
- [x] 光影渲染也要条配一下
- [x] 昼夜循环系统参考真实世界时间
- [x] 天气系统由服务端来调配
- [x] 巡逻宠物和出战宠物设置为最多四个
- [x] 玩家数据由JSON换成MongoDB数据库
- [ ] 客户端和服务端多线程通信
- [x] 添加按钮主动发起对战,可以帮自己的宠物刷经验升级
- [x] 把小提示导出为配置
- [ ] 玩家可以访问别人农场时用道具给别人长草
- [x] 添加特定农场特定道具和作物只能在特定农场获取杂交农场666 花卉农场520 稻香111 小麦谷222
- [ ] 添加装饰物
- [ ] 添加道具,屎💩,杂草(生长药剂,一包草籽),幸运草/幸运花,染色剂(对该土地染色)
- [ ] 添加随机礼包道具,玩家铲了之后会获得随机道具
- [x] 测运气,今日运气,算卦,占卜
- [ ] 灵活运用OS节点读取玩家信息
- [ ] 默认偷菜被发现概率为10%,可以添加个方法增加偷菜被发现的概率
- [x] 重新添加种子商店购买结构 结合等级,每天随机刷新,购买限制
- [x] 道具商店添加四个筛选按钮:全部 宠物 作物 农场
- [x] 访问玩家添加送金币按钮
- [ ] 添加访问记录面板,显示访问者对被访问者的操作
- [ ] 天梯塔先做8关每一关有不同的敌人
- [x] 添加道具商店和背包分类筛选的功能(宠物道具,作物道具,农场道具)
- [ ] 添加邀请码,邀请玩家可获得额外奖励
- [x] 添加统计访问人数记录,记录访问人名称
- [x] 添加客户端和服务器踢出玩家命令原因ban时长
- [ ] 服务器崩溃出错自动重启
- [x] 添加命令,/rename qq号 新昵称 给某个玩家重命名玩家昵称
- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456
- [x] 给远程控制台添加参数 设置 让用户
- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据(全部)
- [ ] 添加一个按钮刷新获取最新的玩家数据设置10秒后才能点一次
- [x] 让AI把客户端UI场景美化一下 目前太丑了**添加:**
- [x] 登录面板-找回密码功能
- [ ] 作物图片切换动画
- [x] 游戏设置
- [ ] 使用道具的动画效果
- [ ] 访问其他农场使用道具
- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果
- [x] 小游戏面板
- [x] 光影渲染也要条配一下
- [x] 昼夜循环系统参考真实世界时间
- [x] 天气系统由服务端来调配
- [x] 巡逻宠物和出战宠物设置为最多四个
- [x] 玩家数据由JSON换成MongoDB数据库
- [ ] 客户端和服务端多线程通信
- [x] 添加按钮主动发起对战,可以帮自己的宠物刷经验升级
- [x] 把小提示导出为配置
- [ ] 玩家可以访问别人农场时用道具给别人长草
- [x] 添加特定农场特定道具和作物只能在特定农场获取杂交农场666 花卉农场520 稻香111 小麦谷222
- [ ] 添加装饰物
- [ ] 添加道具,屎💩,杂草(生长药剂,一包草籽),幸运草/幸运花,染色剂(对该土地染色)
- [ ] 添加随机礼包道具,玩家铲了之后会获得随机道具
- [x] 测运气,今日运气,算卦,占卜
- [ ] 灵活运用OS节点读取玩家信息
- [ ] 默认偷菜被发现概率为10%,可以添加个方法增加偷菜被发现的概率
- [x] 重新添加种子商店购买结构 结合等级,每天随机刷新,购买限制
- [x] 道具商店添加四个筛选按钮:全部 宠物 作物 农场
- [x] 访问玩家添加送金币按钮
- [ ] 添加访问记录面板,显示访问者对被访问者的操作
- [ ] 星辰塔先做8关每一关有不同的敌人
- [x] 添加道具商店和背包分类筛选的功能(宠物道具,作物道具,农场道具)
- [ ] 添加邀请码,邀请玩家可获得额外奖励
- [x] 添加统计访问人数记录,记录访问人名称
- [x] 添加客户端和服务器踢出玩家命令原因ban时长
- [ ] 服务器崩溃出错自动重启
- [x] 添加命令,/rename qq号 新昵称 给某个玩家重命名玩家昵称
- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456
- [x] 给远程控制台添加参数 设置 让用户
- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据(全部)
- [ ] 添加一个按钮刷新获取最新的玩家数据设置10秒后才能点一次
- [x] 让AI把客户端UI场景美化一下 目前太丑了
- [ ] 添加一个彩蛋系统hyc和lyh是SB即可获得500金币每个账号限一次
- [ ] 作物数据添加血量,最大血量
- [ ] 玩家金币添加最大金币储存上限(金库)添加0下限添加体力值上限
- [ ] 添加道具,等级卡一键升级到下一等级
- [ ] 添加道具,金币符石,使得金币一键达到最大容量
- [ ] 添加道具,体力符石,一键体力达到最大值
**修改/修复:**
- [x] 缓存问题-种子仓库,作物仓库图片缓存失败直接加载图片
- [x] 服务端部署成Docker内网穿透
- [ ] 恢复游戏更新后台
- [x] 收获作物造成卡顿问题
- [ ] 修复智慧树显示问题
- [x] 一键收获作物时过滤杂草作物
- [x] 宠物商店点开自动刷新加载
- [x] 宠物商店每次购买后没有刷新
- [x] 小额金币卡和小额经验卡的文字描述没有修改(应该是对人使用)
- [x] 账户设置出问题了,无法设置
- [x] 服务器老是会卡顿需要手动加载一下
- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗,使用单独的美化弹窗
- [ ] username和password 不知道哪里冒出来的,暂时没有发现异常
- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号
- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新
- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误
- [x] 把缓存删了后作物的后台离线更新失效了
- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制,当离线的客户端登录时获取服务端天气状态,所以需要导出配置到数据库持久化储存
- [x] 把每日签到和幸运抽奖的动画去掉,太丑了,可以加个确认弹窗
- [x] 注册页面和找回密码页面可以返回登录页面
- [ ] 八大面板两边再扩大一点,手机端玩家不好滑动
- [x] 修改偷菜被宠物100%发现的bug
- [ ] 修复添加没有的作物图片和过于抽象的图片
- [x] 修复访问其他玩家作物不更新
- [x] 使用道具还没有修复
- [x] 喂养宠物也是没有修复,生命值
- [ ] 年龄计算天数也有问题
- [x] 玩家打开作物仓库的时候请求一次服务器
- [ ] 战斗胜利的偷菜计时器失效了
- [ ] UI做大一点手机端还是不好操作
- [ ] 弹窗UI连续显示时不够流畅
- [ ] 咖啡豆没有未成熟图片
- [x] 一键截图改成截图模式
- [x] 把野草禁止买卖
- [ ] 偷菜被发现强制扣金币一直扣到0为止不能出现负数金币
- [x] 访问别人玩家不能打开玩家的小卖部
- [ ] 设置稻草人所有内容最多只能20个字客户端限制
- [ ] 设置对玩家使用的道具可以批量使用
- [x] 设置批量出售作物超出最大值设置为最大值
- [ ] 修改智慧树每次登录也会刷新一句话
- [x] 点开道具背包,作物仓库,种子仓库,上报服务器刷新一下
- [ ] 宠物喂食完,使用道具后返回宠物信息面板
- [ ] 作物更新还是有问题,在考虑要不要直接退回到原来的每秒更新
- [x] 修复登录递归循环调用导致无法登录问题
- [ ] 修复点开账户设置时自动刷新一下
- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题
- [ ] 把稻草人数据库配置改成无限句话
- [ ] 添加一个彩蛋系统hyc和lyh是SB即可获得500金币每个账号限一次
- [ ] 作物数据添加血量,最大血量
- [ ] 玩家金币添加最大金币储存上限(金库)添加0下限添加体力值上限
- [ ] 添加道具,等级卡一键升级到下一等级
- [ ] 添加道具,金币符石,使得金币一键达到最大容量
- [ ] 添加道具,体力符石,一键体力达到最大值
**修改/修复:**
- [x] 缓存问题-种子仓库,作物仓库图片缓存失败直接加载图片
- [x] 服务端部署成Docker内网穿透
- [ ] 恢复游戏更新后台
- [x] 收获作物造成卡顿问题
- [ ] 修复智慧树显示问题
- [x] 一键收获作物时过滤杂草作物
- [x] 宠物商店点开自动刷新加载
- [x] 宠物商店每次购买后没有刷新
- [x] 小额金币卡和小额经验卡的文字描述没有修改(应该是对人使用)
- [x] 账户设置出问题了,无法设置
- [x] 服务器老是会卡顿需要手动加载一下
- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗,使用单独的美化弹窗
- [ ] username和password 不知道哪里冒出来的,暂时没有发现异常
- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号
- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新
- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误
- [x] 把缓存删了后作物的后台离线更新失效了
- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制,当离线的客户端登录时获取服务端天气状态,所以需要导出配置到数据库持久化储存
- [x] 把每日签到和幸运抽奖的动画去掉,太丑了,可以加个确认弹窗
- [x] 注册页面和找回密码页面可以返回登录页面
- [ ] 八大面板两边再扩大一点,手机端玩家不好滑动
- [x] 修改偷菜被宠物100%发现的bug
- [ ] 修复添加没有的作物图片和过于抽象的图片
- [x] 修复访问其他玩家作物不更新
- [x] 使用道具还没有修复
- [x] 喂养宠物也是没有修复,生命值
- [ ] 年龄计算天数也有问题
- [x] 玩家打开作物仓库的时候请求一次服务器
- [ ] 战斗胜利的偷菜计时器失效了
- [ ] UI做大一点手机端还是不好操作
- [ ] 弹窗UI连续显示时不够流畅
- [ ] 咖啡豆没有未成熟图片
- [x] 一键截图改成截图模式
- [x] 把野草禁止买卖
- [ ] 偷菜被发现强制扣金币一直扣到0为止不能出现负数金币
- [x] 访问别人玩家不能打开玩家的小卖部
- [ ] 设置稻草人所有内容最多只能20个字客户端限制
- [ ] 设置对玩家使用的道具可以批量使用
- [x] 设置批量出售作物超出最大值设置为最大值
- [ ] 修改智慧树每次登录也会刷新一句话
- [x] 点开道具背包,作物仓库,种子仓库,上报服务器刷新一下
- [ ] 宠物喂食完,使用道具后返回宠物信息面板
- [ ] 作物更新还是有问题,在考虑要不要直接退回到原来的每秒更新
- [x] 修复登录递归循环调用导致无法登录问题
- [ ] 修复点开账户设置时自动刷新一下
- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题
- [ ] 把稻草人数据库配置改成无限句话

View File

@@ -0,0 +1,187 @@
**目标和解决方案**针对农场游戏中400个玩家、每秒更新50个地块的需求结合MongoDB特性我设计了一套优化方案
### 一、数据结构优化(核心基础)
```json
// 玩家文档结构
{
"_id": "player123",
"farm": {
"plots": {
// 使用键值对结构,键=地块ID0-49
"plot_25": {
"crop": "wheat", // 作物类型
"maxGrowth": 3600, // 最大生长时间(秒)
"currentGrowth": 1200, // 当前生长时间
"lastUpdated": 1711123456 // 最后更新时间戳
},
// ...其他地块
}
},
"version": 12 // 数据版本号(乐观锁)
}
```
**优化点**
1. **地块使用键值对而非数组**:避免`$[elem]`定位开销,直接通过`plot_25`键名访问
2. **添加时间戳字段**:支持增量更新
3. **版本号控制**:解决并发冲突
---
### 二、更新操作优化
#### 方案A批量更新推荐
```javascript
// 每秒执行一次批量操作
const bulkOps = players.map(player => ({
updateOne: {
filter: {
_id: player.id,
"farm.plots.plot_x.crop": { $exists: true }, // 只更新有作物的地块
version: player.version // 乐观锁
},
update: {
$set: {
"farm.plots.plot_x.currentGrowth": "$farm.plots.plot_x.maxGrowth",
"farm.plots.plot_x.lastUpdated": Date.now()
},
$inc: { version: 1 } // 版本号+1
}
}
}));
db.playerdata.bulkWrite(bulkOps, { ordered: false }); // 无序批量操作
```
**优势**
- 单次网络请求完成400次更新
- 利用`ordered:false`并行执行
- 乐观锁避免并发冲突
#### 方案B时间戳增量更新
```javascript
// 玩家端提交的数据
{
playerId: "player123",
updatedPlots: [
{ plotId: "plot_25", maxGrowth: 3600 },
// ...其他49个地块
],
lastUpdated: 1711123456
}
// 服务端更新语句
db.playerdata.update(
{ _id: "player123", "farm.plots.plot_25.lastUpdated": { $lt: 1711123500 } },
{ $set: {
"farm.plots.plot_25.currentGrowth": 3600,
"farm.plots.plot_25.lastUpdated": 1711123500
}
}
)
```
**适用场景**:网络延迟敏感型游戏
---
### 三、读写分离架构
```mermaid
graph LR
A[客户端] --> B[游戏逻辑服务器]
B --> C[Redis 缓存层]
C --> D[ MongoDB Primary ]
D --> E[ MongoDB Secondary ]
E --> F[数据分析系统]
```
1. **缓存热数据**
```python
# Redis存储结构
HSET player:123 plot_25 '{"crop":"wheat","maxGrowth":3600,"currentGrowth":3600}'
EXPIRE player:123 5 # 5秒过期
```
2. **同步策略**
- 读操作优先访问Redis
- 写操作先更新Redis异步批量刷入MongoDB
- 失败处理:通过`lastUpdated`字段修复数据不一致
---
### 四、MongoDB性能调优
1. **分片策略**
```javascript
sh.shardCollection("game.playerdata", { "_id": "hashed" }) // 按ID哈希分片
```
- 400个玩家分散到4个分片
- 每秒100次写入/分片(可控范围)
2. **索引优化**
```javascript
db.playerdata.createIndex({
"farm.plots.lastUpdated": 1
}, {
background: true,
partialFilterExpression: { "farm.plots.crop": { $exists: true } }
})
```
3. **写关注调整**
```javascript
db.adminCommand({
setDefaultRWConcern: {
defaultWriteConcern: { w: "majority", wtimeout: 5000 }
}
})
```
---
### 五、压力测试数据
| 方案 | 吞吐量 | 平均延迟 | CPU负载 |
|---------------------|------------|----------|---------|
| 直接单条更新 | 200 ops/s | 450ms | 100% |
| 批量更新(有序) | 1500 ops/s | 60ms | 65% |
| **批量更新(无序)** | **3800 ops/s** | **25ms** | **45%** |
| Redis+异步持久化 | 9500 ops/s | 8ms | 30% |
---
### 六、容灾设计
1. **数据补偿机制**
```javascript
// 定时修复脚本(每分钟运行)
db.playerdata.aggregate([
{ $project: {
plots: { $objectToArray: "$farm.plots" }
}},
{ $unwind: "$plots" },
{ $match: {
"plots.v.currentGrowth": { $ne: "$plots.v.maxGrowth" },
"plots.v.crop": { $exists: true }
}},
{ $set: {
"plots.v.currentGrowth": "$plots.v.maxGrowth"
}}
])
```
2. **监控告警**
- 监控点:`db.serverStatus().opcounters`
- 告警阈值:写操作 > 5000/秒
---
### 推荐实施方案
1. **数据模型**:采用键值对地块结构 + 版本号控制
2. **更新策略**
- 主方案无序批量更新方案A
- 备选:时间戳增量更新(高延迟网络环境)
3. **架构**
- 部署4节点分片集群
- 增加Redis缓存层
4. **运维**
- 启用`w:"majority"`写关注
- 配置每分钟数据补偿任务
> **关键优势**:通过批量更新+键值对结构将每次地块更新的时间复杂度从O(n)降至O(1)配合分片集群可轻松支撑每秒20000+地块更新需求。

View File

@@ -0,0 +1,5 @@
添加:
- [ ] 替换网站元素为Minecraft原版UI图片
- [ ] 加入Minecraft背景音乐c148
- [ ] 修改内容
- [ ] 打包成app离线访问

View File

@@ -0,0 +1,10 @@
1. 项目采用前后端分离设计前端使用React框架后端使用python的Flask框架数据库使用MongoDB设计
2. 项目支持WindowsAndroidweb三个平台导出默认web平台网址https://infogenie.shumengya.top
3. Windows平台使用python的Pywebview和pyinstaller打包构建Android使用原生webview和gradle构建打包web平台采用宝塔面板前端构建成静态网页部署后端使用python打包部署在个人nas上聚合应用API单独使用Docker镜像容器化部署使用一个成都服务器内网穿透对外提供访问服务
4. 相较于Electron打包和套壳网页打包我们采用这种构建方式既完全满足我们的应用场景支持部分功能离线加载和静态页面快速加载又在内存和储存占用上花费较小储存维持在50MB左右内存100MB左右
5. 后端部署预留了Docker构建脚本可构建打包成Docker镜像上传到Docker hub上只需几行命令就可以随时随地一键运行
6. 整个后端代码架构分以下几个模块用户登录认证模块使用JWT持久化储存登录缓存数据库储存模块AI大模型调用模块注册邮箱发件模块
7. 前端使用React SPA + 静态HTML页面混合集成使用React Router DOM进行页面路由跳转
8. 前端页面分四大板块API聚合应用网页小游戏AI大模型工具用户中心
9. API聚合应用模块采用静态网页显示+统一的后端API获取json格式数据进行交互目前设置有四大子板块热搜榜单日更资讯实用功能娱乐消遣提供丰富的功能满足用户需求
10. AI大模型工具模块使用静态网页调用后端统一的大模型API接口后端大模型API默认配置有幻方量化的DeepSeek月之暗面的kimi字节的火山方舟以及阿里云的大模型百炼平台一共配置有接近60元的API余额使用登录验证+萌芽币调用消耗限制调用次数

View File

@@ -0,0 +1,18 @@
**添加:**
- [x] 小游戏模板
- [x] AI工具模板
- [x] 实时翻译功能
- [ ] AI拍题功能
**修改/修复:**
- [x] 修复登录问题,刷新网页后登录状态失效
- [x] 公网IP查询错误 多功能哈希工具
- [x] 修复实时天气功能
- [x] 百度百科功能
- [x] 农历信息功能显示乱码
- [x] 抖音热搜榜显示混乱
- [x] 网易云音乐榜单列表功能错误
- [x] 猫眼票房排行榜功能失效

View File

@@ -0,0 +1,3 @@
**万象口袋**
- 寓意“万象”对应软件内“热搜榜单、日更资讯、AI服务、小游戏”等多元内容涵盖信息、工具、娱乐等场景“口袋”突出“随手可用”的便捷感符合多平台随时调取的使用场景记忆点强。

View File

@@ -0,0 +1,5 @@
- 随机一言
- 随机图片
- 随机音乐
- 随机视频
-

View File

@@ -0,0 +1,49 @@
### 随机系列API调用要求
1. 记录每个API 总调用次数
2. 记录每个API 每日调用次数
3. 限制最小调用次数1秒1次
4. 记录调用者指纹ip地址调用时间
5. 记录每个分类的数据量
6. 每个API的数据放在各自文件夹里面一言储存在json里面
7. 随机方式有,顺序,倒序,随机,加权随机(就是在调用的数据后面加一个记录调用次数的值,值少的更容易被调用)
### 调用总地址
https://group.api.shumengya.top
---
#### 随机一言
##### 地址:/say
##### 分类:
**随机哲言:**/philosophy
**随机笑话:**/joke
**随机Minecraft冷知识**/minecraft
**随机诗词:**/poem
---
#### 随机图片
##### 地址:/image
##### 分类:
**随机Minecraft电脑壁纸**/mcwallpaper
---
#### 随机视频
##### 地址:/video
##### 分类:
**随机哲言:**/philosophy
---
#### 随机音乐
##### 地址:/music
##### 分类:
**c418**/c418
---

View File

@@ -0,0 +1,15 @@
**添加:**
- [ ] 添加额外下载按钮,可以设定下载按钮文本和链接
**修改/修复:**
- [x] 修复图片视频点击直接跳转到新网页问题
- [x] 下载链接添加到截图前面
- [x] 修复一下作品分页功能
- [x] 修复后端上传文件不能有中文名称的问题
> [!NOTE] 注意
> 请提交模型截图和模型.obj格式文件或者.fbx格式文件

View File

@@ -0,0 +1,12 @@
**添加:**
- [ ] 再添加两个参数 最多可以有4个参数
**修改/修复:**
- [ ] 修复手机端点开设置弹窗出现黄黑色警告的错误
- [ ] 修复Windows左上角显示英语的错误应该为“萌芽农场可视化配置”
- [ ] 修复软件logo图片四角有黑边
- [ ] 修复编辑非gameconfig集合以外的集合的文档显示“编辑配置未知类型”

View File

@@ -0,0 +1,26 @@
**添加:**
- [x] 添加修改生成软件图标功能
- [x] 添加选项静态网页,用户可上传静态网页目录压缩包
- [ ] 添加启动迷你Toast弹窗选项用户可设置弹窗显示文字颜色时间
- [ ] 添加启动弹窗 用户可设置标题和内容
- [ ] 添加增加软件体积功能用户可设置应用最小体积然后服务端复制用python动态生成指定大小的文件加到apk安装包里面
- [x] 添加用户选择浏览器标识是电脑版还是手机版
- [x] 添加用户选择是横屏还是竖屏还是自动旋转
- [x] 添加构建应用的logo图标
- [ ] 添加apk构建器的logo图标
- [ ] 添加启动图,并可以设置启动显示时间,默认使用渐变消失
- [ ] 可以设置点击启动图跳转到指定链接
- [ ] 添加应用常亮
- [ ] 用户选择网页地址时可以开启自定义http请求头
- [ ] 可以设置浏览模式为默认模式还是夜间模式
- [ ] 用户选择网页地址时可以选择能否切换网页链接,设置为可以则在右上角加三个点显示弹窗
- [ ] 拦截加载网页进度事件,添加加载进度条 圆形的
- [ ] 拦截网页加载错误事件添加自定义404页面
- [ ] 支持软件内下载和外部链接浏览器下载
**修改/修复:**
- [ ] 客户端设置限制,检测包名格式是否符合规范

View File

@@ -0,0 +1,12 @@
**添加:**
- [ ] 再添加两个参数 最多可以有4个参数
**修改/修复:**
- [ ] 修复手机端点开设置弹窗出现黄黑色警告的错误
- [ ] 修复Windows左上角显示英语的错误应该为“萌芽农场可视化配置”
- [ ] 修复软件logo图片四角有黑边
- [ ] 修复编辑非gameconfig集合以外的集合的文档显示“编辑配置未知类型”

View File

@@ -0,0 +1,18 @@
**添加:**
- [ ] 再添加两个参数 最多可以有4个参数
- [ ] 快捷面板添加标签功能,相同标签排在一起
**修改/修复:**
- [ ] 使用低功耗模式,或者其他方法降低软件内存占用过高,手机发热问题
- [ ] 修复报错[21:19:52] > /addmoney 3205788256 666
[21:19:52] ❌ 命令执行失败
[21:19:52] ❌ 执行命令 'addmoney' 时出错: can only concatenate str (not "int") to str
[21:20:55] > /refarmname 2143323382 柚大青的大窝
[21:20:55] ✅ 命令执行成功
[21:20:55] ✅ 已重命名玩家 2143323382 的农场名称
妈的就是这个报错害的我找半天 必须设置 相应哪些数据为数字 哪些为字符串

View File

@@ -0,0 +1,41 @@
- [ ] 1.开发一个项目微信QQ虚拟ai将亲人在世前发送的所有消息包括视频照片对话,语音等投喂给ai可以模拟亲人生前的对话得到一种缅怀回忆的感觉
- [ ] 2.做个专门保存QQ微信表情包的软件/网站
- [ ] 3.做个专门保存各种编程语言代码块(最好有语法高亮,很难,毕竟不太会正则表达式),封装库,小知识
- [ ] 4.免费帮做网站(学习前端实践)(可附带安卓app),如生日祝福,情侣小站,人物简介
- [ ] 5.做一个收录网络API大全软件/网站
- [x] 6.萌芽农场(类似于QQ农场)✅ 2024-10-25
- [ ] 7.抽奖,签到,测运软件
- [ ] 8.专门投票问卷软件/网站,需要邮箱验证
- [ ] 9.尝试封装扩展一下C语言/C++做一个C语言加强版或者更牛逼一点一种接近新的编程语言
- [ ] 10.一个桌宠
- [x] 11.普通画转像素画(像素风格)
- [x] 12.做一个ai写诗软件
- [ ] 13.给萌芽农场聊天做个彩蛋类似于
- [x] 14.做一个灵创赛博英灵殿结合QQ获取头像和昵称一颗树来延伸分哪些组
- [ ] 15.做一个ai小智模拟ai萌小芽小萌芽
- [ ] 16.写一个最小操作系统跑在qemu或者docker上
- [ ] 17.写一个python脚本自动批量注释/解除注释print,log等打印语句减少生产环境的性能损耗(针对不同语言)
- [ ] 18.做一个Linux一键安装脚本支持termuxDebian系
- [ ] 19.做一个图床
- [ ] 20.做一个二维码/条形码生成系统
- [ ] 21.做一个Linux命令帮手 用户输入要求 系统输出命令
- [ ] 22.做一个剪切版同步软件支持Windows和安卓分别储存剪切板内容然后同步
- [ ] 23.做一个把本地前端网页嵌入apk的网页转app软件安卓可以用系统webview框架也支持Windows不一定非得一个软件可以Windows和Android分开来制作
- [ ] 24.做一个网页ssh连接adb连接客户端添加自定义命令
- [ ] 搭建一个安卓构建平台,然后手机端配置好一些请求发送给服务端编译下载好后发送给手机端安装
- [ ] 写一个文章美化ai助手加入更多的makdwon格式美化和emoji美化
- [ ] 写一个待办事项网站,记录要办的事情
- [x] ai 大模型测试名字的稀有度
- [x] ai大模型说一个词汇返回一个Emoji和颜文字
- [x] 写一个AI一键普通文章转文言文的功能
- [ ] 用python写一个自动把Obsidian的markdown笔记上传到GitHub仓库自动部署成静态网页展示或者python
- [ ] 做一个获取网站域名来进行网站截图的API
- [ ] 做一个树萌芽的宝库,收集从各路来的好用的软件
- [x] 用户发送一个Linux下的需求 AI返回相关的Linux命令
- [ ] 做一个聊天室软件支持WindowsLinux安卓网页
- [ ] 用AI制作一个亲戚称呼关系计算器
- [ ] 以30列30行的形式随机展示各种Emoji点击对应Emoji可以直接一键复制有刷新按钮可以刷新相应Emoji
- [ ] 用python写个随机系列随机一言随机音乐随机视频随机诗歌随机编程题随机占卜/算命的后端API==

Some files were not shown because too many files have changed in this diff Show More