old哥的nebula

没想到这么久了我还能想起来这个东西。
今天在old哥的安排下折腾一下Dyson Sphere Program的联机mod:Nebula

下面是官方wiki

Setting up a development environment

Development Setup

Repo Setup

  1. Fork the repository to your own Github account.
  2. Pull git repository locally (pass --recursive to git clone to init and clone submodules)
    • git clone https://github.com/lssb/nebula.git --recursive 这个代码阴影不是圆角看起来好丑
  3. Initialize git submodule(s) by running the following command:
    • git submodule update --init --recursive This command can also be used to fetch and update changes.

Nebula setup

  1. Get the most up-to-date version of Dyson Sphere Program from Steam.
  2. Install BepInEx inside the Dyson Sphere Program Steam installation folder.
    • Download BepInEx_x64_5.4.22.0.zip
    • Unzip the content to F:\SteamLibrary\steamapps\common\Dyson Sphere Program
  3. Run the game once to activate BepInEx (new subfolders should appears in the BepInEx folder)
  4. Add a Nebula folder inside the BepInEx\Plugins folder
  5. Load Nebula.sln inside Visual Studio # 尬住了
  6. Add NuGet to Visual Studio package sources.
  7. If your game installation is not at the default location C:\Program Files (x86)\Steam\steamapps\common\Dyson Sphere Program a DevEnv.targets file should have been generated at the root of your copy of the Nebula repo. You can change the path to your game installation location.
  8. Build entire solution to generate binaries.
    • Nebula uses Visual Studio build events to automatically copy the mod binaries to the BepInEx\Plugins\Nebula folder.

Verify Setup

  1. Make sure that you have built the entire solution without errors
  2. Start the game using Steam
  3. From the game main menu, you should now see a Multiplayer button

How to run 2 game instances on the same computer

There are two options for running multiple instances:

Remove Single Instance

Edit Dyson Sphere Program\DSPGAME_Data\boot.config, removing the single-instance= line from the file.
If you would like to keep the instances’ settings separate then Sandboxie might be preferred.

In order to run the game from the exe you must create a steam_appid.txt file in the root of the game directory (next to DSPGame.exe) with the text 1366540

Sandboxie

  1. Install Sandboxie Plus
  2. Launch Sandboxie Plus
  3. Right Click on DefaultBox and choose Run -> Run Program
  4. In the popup window browse to select the Steam.exe from your Steam installation location.
  5. Make sure to check the Run As UAC Administrator and click OK
  6. Also start steam normally
  7. You should now have 2 Steam apps running at once.
  8. Start Dyson Sphere Program on both of them.
  9. You should now have 2 Dyson Sphere Program running at once.

I highly recommend you to use the very useful plugin UnityExplorer. Once installed, you only need to press F7 while in-game to toggle it and you will be able to inspect any Unity GameObjects, Components and it has a runtime console to run some code at runtime.

shyf在NiceB的放映室看过的电影

史哥说按这个榜单往下看

https://www.bilibili.com/v/popular/rank/movie/

日期 电影名 备注
2023.06.04 >>航海王:红发歌姬<< BV1XV4y1B7Ld 史哥认为这是一个音乐番
2023.05.20 >>速度与激情<< BV1dY411U7zD 史哥今天才知道那个榜单是会变的..
不记得了 >>追凶者也<<
不记得了 >>扬名立万<<
不记得了 >>四海<< 很离谱,大家都是以一种很难受的心情看完的,对了,当时猹猹也在
不记得了 >>疯狂的赛车<<
不记得了 >>无人区<<
2023.05.10 >>宇宙探索编辑部<< BV1bz4y1a7QZ 史哥说他不明白,还问我悟了吗,我说要不就后天再看一遍
2023.05.16 >>流浪地球2<< BV1A54y1F7v6 史哥说居然有这个,不过可惜的是现在还要钱,不能一起看 2023-05-12 16:32:19
今天史哥用vr看了2023-05-16 21:06:17
2023.05.12 >>无名<< BV1Sc411W7tf old说何主任出来 扒车那地方 多此一举吧
2023.05.15 >>无耻混蛋<< BV1Ec411J7ea 史哥说谁飞出来了

更新日期 2023-05-20 18:28:15

R语言S4对象

创建类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
setClass(
# 类名
"TumorPrognosis",

# 数据列表
slots = c(
rawdata = "data.frame",
data = "data.frame",
markers = "character",
survival_year = "numeric",
group = "character",
cutoff = "list",
roc = "list",
ROCPlot = "list",
KMCurve = "list"
)
)

构造函数
initialize是内置的构造函数,
这也是范式方法的增加方法,如果是范式方法,可以直接给S4类增加这个方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
setMethod("initialize", signature(.Object = "TumorPrognosis"),
function(.Object, tumorName, markers, survival_year){
.Object@markers = markers
.Object@survival_year = survival_year
.Object@rawdata = read.xlsx("01.data/prognosis1.xlsx", sheet = tumorName)

colnames(.Object@rawdata) = c(
"ID",
"inTime",
"outInfo",
"stage",
markers
)

.Object = ScreenData(.Object)
.Object = GroupedSample(.Object)
.Object = CalcBestCutoff(.Object)
.Object = getKMCurve(.Object)

.Object
})

如果不是范式,就需要先创建一个范式的,然后再添加到S4类上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
setGeneric("getKMCurve", function(.Object) standardGeneric("getKMCurve"))
setMethod("getKMCurve", signature(.Object = "TumorPrognosis"), function(.Object){

for (data_set_name in c("train", "valid")){




sur_data = getGroupSameples(.Object, data_set_name)
for (marker in c("stage", .Object@markers)){
if(marker == "stage"){
legend_labs = c("Stage I/II", "Stage III/IV")
}else{
legend_labs = paste0(marker, c(" high risk", " low rish"))
}

group = paste0(marker, "_b")
surv = Surv(sur_data$futime, sur_data$fustat2)
formula_this = as.formula(paste0("surv", "~", group))

ggl = surv_fit(formula_this, data = sur_data)
surv_diff = survdiff(formula_this, data = sur_data)
p = ggsurvplot(ggl,
# palette = c("blue", "red"),
xlab = "Time (Years)",
ylab = "OS (percentage)",
break.x.by = 365,
break.y.by = 0.25,
ylim = c(0, 1),
xlim = c(0, 365 * .Object@survival_year),
legend.title = paste0("Log-rank p = ", format(1 - pchisq(surv_diff$chisq, length(surv_diff$n) -1), digits = 3)), # 图例标题
legend.labs = legend_labs,
size = 0.8,
# pval = T,
# pval.size = 5,
# pval.coord=c(365,0.05),
censor.shape=124,
censor.size=2,
font.main = c(16, "plain", "darkblue"),
font.x = c(10, "plain", "black"),
font.y = c(10, "plain", "black"),
font.tickslab = c(8,"plain", "black"),
font.legend = c(8,"plain","black"),
risk.table =F,
tables.height = 0.25,
# legend.labs=c("LPA","Non-LPA"),
legend = c(0.3,0.28),
fontsize=4.5,
conf.int=T,
conf.int.style='ribbon',
conf.int.alpha=0.1
# surv.median.line="hv"
)

p = p$plot +
scale_x_continuous(breaks = seq(0, 1825, 365), labels = seq(0, 5))

.Object@KMCurve[[data_set_name]][[marker]] = p
}
}
.Object

})

创建类实例

1
T05_5 = new("TumorPrognosis", "T05", c("CEA", "CA199", "AFP")  , 5)

一个游戏构想

昨天,准确点说是2022/8/25 20: 50: 45,史哥史无前例地提出了一个想法,
他的原话是
@NiceB 给你一个idea
村里唯一的NPC
他还说
希望明天可以开工

那么按理说,今天就是明天,那就是今天就要开工了,
那么再按理说,我今天写了这个po,是不是就已经算开工了?

没错,是这样的。

史哥另外还详细阐述了一个细节情况
玩家扮演村里唯一的NPC
npc的任务包括但不限于新手教学,解答问题,买卖东西,交接任务,发布通知
还有什么
打造防具武器

而且还不忘说
没问题的话希望明天可以开工了

okok

其实我自己一直的想法是,我们扮演一个boss,指挥自己的手去入侵人类城邦或者去迫害冒险家,然后自己有一定量的装备,可以来武装自己的小弟,同时,这些小弟挂了之后,就会把装备爆出来,会让人类或者冒险家获得强力装备和升级经验。

我在vs code上找了一个插件,叫做 Insert Time Stamp, 安装之后在文件界面按Ctrl+F5就可以插入时间###### Fri Aug 26 13:45:30 CST 2022, 所以这个游戏后续都会更新在这个po里面,不同的时间我会先插个时间在里面。

比如
~~ ###### Fri Aug 26 13:48:09 CST 2022~~

我还是换了一个插件,因为,,我不太喜欢上面这个插件插出来的这个格式,而且看了之后好像还是不能改的,, 所以我现在用的是 Insert Date String这个插件,快捷键是Ctrl+Shift+i,插出来就是2022-08-26 13:52:54, 这个我看起来更直观~

2022-08-26 13:52:58

不过想想,史哥这个也是可以考虑的。

但是我有一个顾虑,就是如果我们只是一味地满足“玩家”的要求,那么,这个游戏可能就是分手厨房那种类型的游戏了,这显然,会让游戏变得无聊和重复;

另外一个方向就是,我们作为NPC,通过给“玩家”发布任务,打造装备,强化战斗能力,引导这些“玩家”去完成这个游戏世界的一些成就和挑战,最终干掉一个终极boss, 这可能就是一种经营挂机游戏了。

是不是还有一种可能是这两种的结合?我暂时还没有好的点子。

无论如何,作为村子里面唯一的NPC,我们的日子一定是充实快乐的,所以我给这个游戏取名叫《BusyDay》,感觉挺贴切的,上百万的玩家同时在线,就我们一个NPC,可不是Busy Day嘛,,就这样吧,反正史哥也没有给取名的建议。

另外,如果我们是游戏世界里面唯一的NPC,那么我们首先要想的应该是,这个游戏里面的玩家应该、可以、需要、可能要做什么,另外,游戏的剧情应该也是要通过我们这个NPC来推动的,所以,除了上面史哥说的,应该还有更多内容。这些内容,我想,我可能要在玩家的角度来想来体验可能会更全面,
话不多说,

FF14启动!

2022-08-26 13:56:05

真邒离谱,我刚刚突然想到我可以把我的想法和史哥的想法结合起来卧槽,

我们是村里唯一的NPC,也是一个大魔王Boss,我们一边派喽啰来入侵村子,另一边引导“玩家”来对抗入侵的怪物。。。。那我是图什么呢。。。?

还是去游戏里面找找灵感吧。。。。

DSP启动!

2022-08-26 14:01:18

虽然我们是唯一的一个NPC,那我们能不能搞一些自动化的东西呢? 在游戏后期可以自动处理一些低端的事务,我已经有一点想法了,比如,“玩家”成长到一定的程度之后可以打怪爆出来一些宠物,我们可以发布收购需求之类的,从“玩家”手里收购这些宠物,然后培养来帮我们做一些事情,这些萌宠应该会有几率搞砸一些事情吧?想想还挺好玩的~ 具体的细节可能还是要在游戏里面找找了,
话不多说,

FF14启动!!

编辑器nodepad3试用~

虽然以前就知道notepad++的作者是个毒,但是没有好的工具去代替,所以也就一直用着,但是是这种感觉就像是房间里面的蟑螂一样,虽然知道他在,但是又不好解决,他还时不时出来恶心你一下

昨天发现了notepad3这个东西,虽然其实也是很早就知道了,但是一直没有试过,,昨天试了一下发现真香~

再用几天, 要是没有特别别扭的地方就把notepad++给删了~

hhhhhhhhhhhhh

自作孽,不可活

哈哈已经发现一个问题了, notepad3的ctrl+w居然不是默认的关闭当前文件,而是自动换行的toggle 0.0

近期有网友询问unity死循环的问题

近期有网友询问小编关于unity死循环的问题

他的原话是有没有办法可以在我运行一个死循环的时候不用关闭unity

在此,小编在网上找到了一些不太适合的答案,让我们一起来看看吧~

https://blog.csdn.net/yjy99yjy999/article/details/123299744

https://blog.csdn.net/weixin_43673589/article/details/123337059

这就是关于unity死循环的问题的答案啦,各位观众如果有什么新奇的想法或者问题都可以发送在评论区或者私信小编哦

我们下期再见

好几天没推了

真的有好久没有推了

虽然也没人看,但是这么久没写也挺不好意思的,主要是这两天实在是太充实了
给根哥做了几张图, 学到了不少新东西~~

之前说长横写不好, 就在吃饭的时候看了几个视频学了一下, 还买了田字格的纸,,但是到现在也没写几个字。。。

史哥说github copilot写代码好用,, 但是我下载了却要问我要钱, 好气哦

不过想想, ,我平时vs code用的也确实比较不多,用不了就用不了吧