Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
SubsystemTreasureGeneratorBlockBehavior.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
6 public struct TreasureData {
7 public TreasureData() { }
8 public int Value;
9
10 public float Probability;
11
12 public int MaxCount;
13
18 }
19
21
22 public Random m_random = new();
23
24 public static List<TreasureData> m_treasureData;
25
26 public override int[] HandledBlocks => [190];
27
28 public override void OnNeighborBlockChanged(int x, int y, int z, int neighborX, int neighborY, int neighborZ) {
29 int cellContents = SubsystemTerrain.Terrain.GetCellContents(neighborX, neighborY, neighborZ);
30 if (cellContents != 0
31 && cellContents != 18) {
32 return;
33 }
34 SubsystemTerrain.ChangeCell(x, y, z, Terrain.MakeBlockValue(0));
35 if (!m_random.Bool(0.25f)) {
36 return;
37 }
38 int num = 0;
39 int num2 = 0;
40 float max = m_treasureData.Sum(t => t.Probability);
41 float num3 = m_random.Float(0f, max);
42 for (int i = 0; i < m_treasureData.Count; i++) {
43 TreasureData treasureData2 = m_treasureData[i];
44 num3 -= treasureData2.Probability;
45 if (num3 <= 0f) {
46 num = treasureData2.Value;
47 num2 = m_random.Int(1, treasureData2.MaxCount);
48 break;
49 }
50 }
52 "OnTreasureGenerate",
53 modLoader => {
54 modLoader.OnTreasureGenerate(
56 x,
57 y,
58 z,
59 neighborX,
60 neighborY,
61 neighborZ,
62 ref num,
63 ref num2,
64 out bool IsGenerate
65 );
66 return IsGenerate;
67 }
68 );
69 if (num != 0
70 && num2 > 0) {
71 for (int j = 0; j < num2; j++) {
72 m_subsystemPickables.AddPickable(
73 num,
74 1,
75 new Vector3(x, y, z) + m_random.Vector3(0.1f, 0.4f) + new Vector3(0.5f),
77 null
78 );
79 }
80 int num4 = m_random.Int(3, 6);
81 for (int k = 0; k < num4; k++) {
82 m_subsystemPickables.AddPickable(
83 248,
84 1,
85 new Vector3(x, y, z) + m_random.Vector3(0.1f, 0.4f) + new Vector3(0.5f),
87 null
88 );
89 }
90 }
91 }
92
93 public override void Load(ValuesDictionary valuesDictionary) {
94 base.Load(valuesDictionary);
95 m_subsystemPickables = Project.FindSubsystem<SubsystemPickables>(true);
96 }
97
99 TreasureData[] array = new TreasureData[61];
100 TreasureData treasureData = new() { Value = 79, Probability = 4f, MaxCount = 4 };
101 array[0] = treasureData;
102 treasureData = new TreasureData { Value = 111, Probability = 1f, MaxCount = 1 };
103 array[1] = treasureData;
104 treasureData = new TreasureData { Value = 43, Probability = 4f, MaxCount = 4 };
105 array[2] = treasureData;
106 treasureData = new TreasureData { Value = 40, Probability = 2f, MaxCount = 3 };
107 array[3] = treasureData;
108 treasureData = new TreasureData { Value = 42, Probability = 4f, MaxCount = 3 };
109 array[4] = treasureData;
110 treasureData = new TreasureData { Value = 22, Probability = 4f, MaxCount = 4 };
111 array[5] = treasureData;
112 treasureData = new TreasureData { Value = 103, Probability = 2f, MaxCount = 4 };
113 array[6] = treasureData;
114 treasureData = new TreasureData { Value = 150, Probability = 1f, MaxCount = 1 };
115 array[7] = treasureData;
116 treasureData = new TreasureData { Value = 21, Probability = 2f, MaxCount = 16 };
117 array[8] = treasureData;
118 treasureData = new TreasureData { Value = 159, Probability = 2f, MaxCount = 4 };
119 array[9] = treasureData;
120 treasureData = new TreasureData { Value = 207, Probability = 2f, MaxCount = 4 };
121 array[10] = treasureData;
122 treasureData = new TreasureData { Value = 17, Probability = 2f, MaxCount = 2 };
123 array[11] = treasureData;
124 treasureData = new TreasureData { Value = 31, Probability = 4f, MaxCount = 4 };
125 array[12] = treasureData;
126 treasureData = new TreasureData { Value = 108, Probability = 4f, MaxCount = 8 };
127 array[13] = treasureData;
128 treasureData = new TreasureData { Value = 109, Probability = 2f, MaxCount = 4 };
129 array[14] = treasureData;
130 treasureData = new TreasureData { Value = 105, Probability = 1f, MaxCount = 4 };
131 array[15] = treasureData;
132 treasureData = new TreasureData { Value = 106, Probability = 1f, MaxCount = 2 };
133 array[16] = treasureData;
134 treasureData = new TreasureData { Value = 107, Probability = 1f, MaxCount = 1 };
135 array[17] = treasureData;
136 treasureData = new TreasureData { Value = 234, Probability = 1f, MaxCount = 4 };
137 array[18] = treasureData;
138 treasureData = new TreasureData { Value = 235, Probability = 1f, MaxCount = 2 };
139 array[19] = treasureData;
140 treasureData = new TreasureData { Value = 236, Probability = 1f, MaxCount = 1 };
141 array[20] = treasureData;
142 treasureData = new TreasureData { Value = 132, Probability = 2f, MaxCount = 2 };
143 array[21] = treasureData;
144 treasureData = new TreasureData { Value = Terrain.MakeBlockValue(173, 0, 6), Probability = 2f, MaxCount = 8 };
145 array[22] = treasureData;
146 treasureData = new TreasureData { Value = Terrain.MakeBlockValue(173, 0, 7), Probability = 8f, MaxCount = 8 };
147 array[23] = treasureData;
148 treasureData = new TreasureData { Value = Terrain.MakeBlockValue(173, 0, 5), Probability = 8f, MaxCount = 8 };
149 array[24] = treasureData;
150 treasureData = new TreasureData { Value = Terrain.MakeBlockValue(173, 0, 6), Probability = 2f, MaxCount = 8 };
151 array[25] = treasureData;
152 treasureData = new TreasureData { Value = Terrain.MakeBlockValue(119, 0, 0), Probability = 2f, MaxCount = 8 };
153 array[26] = treasureData;
154 treasureData = new TreasureData { Value = Terrain.MakeBlockValue(119, 0, 1), Probability = 2f, MaxCount = 8 };
155 array[27] = treasureData;
156 treasureData = new TreasureData { Value = Terrain.MakeBlockValue(119, 0, 2), Probability = 2f, MaxCount = 8 };
157 array[28] = treasureData;
158 treasureData = new TreasureData { Value = Terrain.MakeBlockValue(119, 0, 3), Probability = 2f, MaxCount = 8 };
159 array[29] = treasureData;
160 treasureData = new TreasureData { Value = Terrain.MakeBlockValue(119, 0, 4), Probability = 2f, MaxCount = 8 };
161 array[30] = treasureData;
162 treasureData = new TreasureData { Value = 191, Probability = 4f, MaxCount = 1 };
163 array[31] = treasureData;
164 treasureData = new TreasureData {
165 Value = Terrain.MakeBlockValue(192, 0, ArrowBlock.SetArrowType(0, ArrowBlock.ArrowType.CopperArrow)), Probability = 2f, MaxCount = 2
166 };
167 array[32] = treasureData;
168 treasureData = new TreasureData {
169 Value = Terrain.MakeBlockValue(192, 0, ArrowBlock.SetArrowType(0, ArrowBlock.ArrowType.IronArrow)), Probability = 2f, MaxCount = 2
170 };
171 array[33] = treasureData;
172 treasureData = new TreasureData {
173 Value = Terrain.MakeBlockValue(192, 0, ArrowBlock.SetArrowType(0, ArrowBlock.ArrowType.DiamondArrow)), Probability = 1f, MaxCount = 2
174 };
175 array[34] = treasureData;
176 treasureData = new TreasureData {
177 Value = Terrain.MakeBlockValue(192, 0, ArrowBlock.SetArrowType(0, ArrowBlock.ArrowType.FireArrow)), Probability = 2f, MaxCount = 2
178 };
179 array[35] = treasureData;
180 treasureData = new TreasureData { Value = 200, Probability = 1f, MaxCount = 1 };
181 array[36] = treasureData;
182 treasureData = new TreasureData {
183 Value = Terrain.MakeBlockValue(192, 0, ArrowBlock.SetArrowType(0, ArrowBlock.ArrowType.IronBolt)), Probability = 2f, MaxCount = 2
184 };
185 array[37] = treasureData;
186 treasureData = new TreasureData {
187 Value = Terrain.MakeBlockValue(192, 0, ArrowBlock.SetArrowType(0, ArrowBlock.ArrowType.DiamondBolt)), Probability = 1f, MaxCount = 2
188 };
189 array[38] = treasureData;
190 treasureData = new TreasureData {
191 Value = Terrain.MakeBlockValue(192, 0, ArrowBlock.SetArrowType(0, ArrowBlock.ArrowType.ExplosiveBolt)), Probability = 1f, MaxCount = 2
192 };
193 array[39] = treasureData;
194 treasureData = new TreasureData { Value = 212, Probability = 1f, MaxCount = 1 };
195 array[40] = treasureData;
196 treasureData = new TreasureData { Value = 124, Probability = 1f, MaxCount = 1 };
197 array[41] = treasureData;
198 treasureData = new TreasureData { Value = 125, Probability = 1f, MaxCount = 1 };
199 array[42] = treasureData;
200 treasureData = new TreasureData { Value = 82, Probability = 1f, MaxCount = 1 };
201 array[43] = treasureData;
202 treasureData = new TreasureData { Value = 116, Probability = 1f, MaxCount = 1 };
203 array[44] = treasureData;
204 treasureData = new TreasureData { Value = 36, Probability = 1f, MaxCount = 1 };
205 array[45] = treasureData;
206 treasureData = new TreasureData { Value = 113, Probability = 1f, MaxCount = 1 };
207 array[46] = treasureData;
208 treasureData = new TreasureData { Value = 38, Probability = 1f, MaxCount = 1 };
209 array[47] = treasureData;
210 treasureData = new TreasureData { Value = 115, Probability = 1f, MaxCount = 1 };
211 array[48] = treasureData;
212 treasureData = new TreasureData { Value = 37, Probability = 1f, MaxCount = 1 };
213 array[49] = treasureData;
214 treasureData = new TreasureData { Value = 114, Probability = 1f, MaxCount = 1 };
215 array[50] = treasureData;
216 treasureData = new TreasureData { Value = 171, Probability = 1f, MaxCount = 1 };
217 array[51] = treasureData;
218 treasureData = new TreasureData { Value = 172, Probability = 1f, MaxCount = 1 };
219 array[52] = treasureData;
220 treasureData = new TreasureData { Value = 90, Probability = 1f, MaxCount = 1 };
221 array[53] = treasureData;
222 treasureData = new TreasureData { Value = 160, Probability = 1f, MaxCount = 1 };
223 array[54] = treasureData;
224 treasureData = new TreasureData { Value = 158, Probability = 2f, MaxCount = 1 };
225 array[55] = treasureData;
226 treasureData = new TreasureData { Value = 133, Probability = 1f, MaxCount = 10 };
227 array[56] = treasureData;
228 treasureData = new TreasureData { Value = 179, Probability = 1f, MaxCount = 2 };
229 array[57] = treasureData;
230 treasureData = new TreasureData { Value = 142, Probability = 1f, MaxCount = 2 };
231 array[58] = treasureData;
232 treasureData = new TreasureData { Value = 141, Probability = 1f, MaxCount = 2 };
233 array[59] = treasureData;
234 treasureData = new TreasureData { Value = 237, Probability = 1f, MaxCount = 2 };
235 array[60] = treasureData;
236 m_treasureData = new List<TreasureData>(array);
237 }
238 }
239}
Engine.Vector3 Vector3
static int SetArrowType(int data, ArrowType arrowType)
override void OnNeighborBlockChanged(int x, int y, int z, int neighborX, int neighborY, int neighborZ)
static int MakeBlockValue(int contents)
ValuesDictionary ValuesDictionary
static void HookAction(string HookName, Func< ModLoader, bool > action)
执行Hook
static readonly Vector3 Zero
ValuesDictionary ValuesDictionaryForMods
模组如果需要添加或使用额外信息,可以在这个ValuesDictionary读写元素