mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2025-02-18 10:53:43 +01:00
Fix bug that allowed players to place pieces outside the baord.
This commit is contained in:
@ -1,4 +1,5 @@
|
|||||||
import { FragmentType } from "./FragmentType";
|
import { FragmentType } from "./FragmentType";
|
||||||
|
import { Shapes } from "./data/Shapes";
|
||||||
|
|
||||||
export const Fragments: Fragment[] = [];
|
export const Fragments: Fragment[] = [];
|
||||||
|
|
||||||
@ -101,12 +102,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
0, // id
|
0, // id
|
||||||
[
|
Shapes.T,
|
||||||
// shape
|
|
||||||
[X, X, X],
|
|
||||||
[_, _, X],
|
|
||||||
[_, _, X],
|
|
||||||
],
|
|
||||||
FragmentType.Hacking, // type
|
FragmentType.Hacking, // type
|
||||||
1,
|
1,
|
||||||
1, // limit
|
1, // limit
|
||||||
@ -115,12 +111,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
1, // id
|
1, // id
|
||||||
[
|
Shapes.Z,
|
||||||
// shape
|
|
||||||
[_, X, _],
|
|
||||||
[X, X, X],
|
|
||||||
[_, X, _],
|
|
||||||
],
|
|
||||||
FragmentType.Hacking, // type
|
FragmentType.Hacking, // type
|
||||||
1,
|
1,
|
||||||
1, // limit
|
1, // limit
|
||||||
@ -129,10 +120,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
5, // id
|
5, // id
|
||||||
[
|
Shapes.S,
|
||||||
// shape
|
|
||||||
[X, X],
|
|
||||||
],
|
|
||||||
FragmentType.HackingSpeed, // type
|
FragmentType.HackingSpeed, // type
|
||||||
1.3,
|
1.3,
|
||||||
1, // limit
|
1, // limit
|
||||||
@ -142,10 +130,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
6, // id
|
6, // id
|
||||||
[
|
Shapes.I,
|
||||||
[X, _],
|
|
||||||
[X, X],
|
|
||||||
], // shape
|
|
||||||
FragmentType.HackingMoney, // type
|
FragmentType.HackingMoney, // type
|
||||||
2, // power
|
2, // power
|
||||||
1, // limit
|
1, // limit
|
||||||
@ -154,10 +139,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
7, // id
|
7, // id
|
||||||
[
|
Shapes.J,
|
||||||
[X, X],
|
|
||||||
[X, X],
|
|
||||||
], // shape
|
|
||||||
FragmentType.HackingGrow, // type
|
FragmentType.HackingGrow, // type
|
||||||
0.5, // power
|
0.5, // power
|
||||||
1, // limit
|
1, // limit
|
||||||
@ -166,11 +148,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
8, // id
|
8, // id
|
||||||
[
|
Shapes.O,
|
||||||
[X, X, X],
|
|
||||||
[_, X, _],
|
|
||||||
[X, X, X],
|
|
||||||
], // shape
|
|
||||||
FragmentType.Hacking, // type
|
FragmentType.Hacking, // type
|
||||||
1, // power
|
1, // power
|
||||||
1, // limit
|
1, // limit
|
||||||
@ -179,10 +157,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
10, // id
|
10, // id
|
||||||
[
|
Shapes.T,
|
||||||
[X, X],
|
|
||||||
[_, X],
|
|
||||||
], // shape
|
|
||||||
FragmentType.Strength, // type
|
FragmentType.Strength, // type
|
||||||
2, // power
|
2, // power
|
||||||
1, // limit
|
1, // limit
|
||||||
@ -191,10 +166,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
12, // id
|
12, // id
|
||||||
[
|
Shapes.L,
|
||||||
[_, X],
|
|
||||||
[X, X],
|
|
||||||
], // shape
|
|
||||||
FragmentType.Defense, // type
|
FragmentType.Defense, // type
|
||||||
2, // power
|
2, // power
|
||||||
1, // limit
|
1, // limit
|
||||||
@ -203,10 +175,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
14, // id
|
14, // id
|
||||||
[
|
Shapes.L,
|
||||||
[X, X],
|
|
||||||
[X, _],
|
|
||||||
], // shape
|
|
||||||
FragmentType.Dexterity, // type
|
FragmentType.Dexterity, // type
|
||||||
2, // power
|
2, // power
|
||||||
1, // limit
|
1, // limit
|
||||||
@ -215,10 +184,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
16, // id
|
16, // id
|
||||||
[
|
Shapes.S,
|
||||||
[X, _],
|
|
||||||
[X, X],
|
|
||||||
], // shape
|
|
||||||
FragmentType.Agility, // type
|
FragmentType.Agility, // type
|
||||||
2, // power
|
2, // power
|
||||||
1, // limit
|
1, // limit
|
||||||
@ -227,10 +193,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
18, // id
|
18, // id
|
||||||
[
|
Shapes.S,
|
||||||
[X, X],
|
|
||||||
[X, _],
|
|
||||||
], // shape
|
|
||||||
FragmentType.Charisma, // type
|
FragmentType.Charisma, // type
|
||||||
3, // power
|
3, // power
|
||||||
1, // limit
|
1, // limit
|
||||||
@ -239,11 +202,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
20, // id
|
20, // id
|
||||||
[
|
Shapes.I,
|
||||||
[X, _, _],
|
|
||||||
[X, X, _],
|
|
||||||
[X, X, X],
|
|
||||||
], // shape
|
|
||||||
FragmentType.HacknetMoney, // type
|
FragmentType.HacknetMoney, // type
|
||||||
1, // power
|
1, // power
|
||||||
1, // limit
|
1, // limit
|
||||||
@ -252,11 +211,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
21, // id
|
21, // id
|
||||||
[
|
Shapes.O,
|
||||||
[X, X],
|
|
||||||
[_, X],
|
|
||||||
[_, X],
|
|
||||||
], // shape
|
|
||||||
FragmentType.HacknetCost, // type
|
FragmentType.HacknetCost, // type
|
||||||
-1, // power
|
-1, // power
|
||||||
1, // limit
|
1, // limit
|
||||||
@ -265,10 +220,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
25, // id
|
25, // id
|
||||||
[
|
Shapes.J,
|
||||||
[X, X, X],
|
|
||||||
[_, X, _],
|
|
||||||
], // shape
|
|
||||||
FragmentType.Rep, // type
|
FragmentType.Rep, // type
|
||||||
0.5, // power
|
0.5, // power
|
||||||
1, // limit
|
1, // limit
|
||||||
@ -277,10 +229,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
27, // id
|
27, // id
|
||||||
[
|
Shapes.J,
|
||||||
[X, _],
|
|
||||||
[_, X],
|
|
||||||
], // shape
|
|
||||||
FragmentType.WorkMoney, // type
|
FragmentType.WorkMoney, // type
|
||||||
10, // power
|
10, // power
|
||||||
1, // limit
|
1, // limit
|
||||||
@ -289,7 +238,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
28, // id
|
28, // id
|
||||||
[[X, X]], // shape
|
Shapes.L,
|
||||||
FragmentType.Crime, // type
|
FragmentType.Crime, // type
|
||||||
2, // power
|
2, // power
|
||||||
1, // limit
|
1, // limit
|
||||||
@ -298,11 +247,7 @@ export function FragmentById(id: number): Fragment | null {
|
|||||||
Fragments.push(
|
Fragments.push(
|
||||||
new Fragment(
|
new Fragment(
|
||||||
30, // id
|
30, // id
|
||||||
[
|
Shapes.S,
|
||||||
[X, X, X],
|
|
||||||
[X, X, X],
|
|
||||||
[X, X, X],
|
|
||||||
], // shape
|
|
||||||
FragmentType.Bladeburner, // type
|
FragmentType.Bladeburner, // type
|
||||||
0.4, // power
|
0.4, // power
|
||||||
1, // limit
|
1, // limit
|
||||||
|
@ -70,20 +70,21 @@ export class StaneksGift implements IStaneksGift {
|
|||||||
return CalculateEffect(fragment.charge, fragment.fragment().power, boost);
|
return CalculateEffect(fragment.charge, fragment.fragment().power, boost);
|
||||||
}
|
}
|
||||||
|
|
||||||
canPlace(x: number, y: number, rotation: number, fragment: Fragment): boolean {
|
canPlace(worldX: number, worldY: number, rotation: number, fragment: Fragment): boolean {
|
||||||
if (x + fragment.width(0) > this.width()) return false;
|
if (worldX < 0 || worldY < 0) return false;
|
||||||
if (y + fragment.height(0) > this.height()) return false;
|
if (worldX + fragment.width(rotation) > this.width()) return false;
|
||||||
|
if (worldY + fragment.height(rotation) > this.height()) return false;
|
||||||
if (this.count(fragment) >= fragment.limit) return false;
|
if (this.count(fragment) >= fragment.limit) return false;
|
||||||
const newFrag = new ActiveFragment({ x: x, y: y, rotation: rotation, fragment: fragment });
|
const newFrag = new ActiveFragment({ x: worldX, y: worldY, rotation: rotation, fragment: fragment });
|
||||||
for (const aFrag of this.fragments) {
|
for (const aFrag of this.fragments) {
|
||||||
if (aFrag.collide(newFrag)) return false;
|
if (aFrag.collide(newFrag)) return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
place(x: number, y: number, rotation: number, fragment: Fragment): boolean {
|
place(worldX: number, worldY: number, rotation: number, fragment: Fragment): boolean {
|
||||||
if (!this.canPlace(x, y, rotation, fragment)) return false;
|
if (!this.canPlace(worldX, worldY, rotation, fragment)) return false;
|
||||||
this.fragments.push(new ActiveFragment({ x: x, y: y, rotation: rotation, fragment: fragment }));
|
this.fragments.push(new ActiveFragment({ x: worldX, y: worldY, rotation: rotation, fragment: fragment }));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,5 +3,5 @@ export const StanekConstants: {
|
|||||||
BaseSize: number;
|
BaseSize: number;
|
||||||
} = {
|
} = {
|
||||||
RAMBonus: 0.1,
|
RAMBonus: 0.1,
|
||||||
BaseSize: 12,
|
BaseSize: 9,
|
||||||
};
|
};
|
||||||
|
37
src/CotMG/data/Shapes.ts
Normal file
37
src/CotMG/data/Shapes.ts
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
const _ = false;
|
||||||
|
const X = true;
|
||||||
|
export const Shapes: {
|
||||||
|
O: boolean[][];
|
||||||
|
I: boolean[][];
|
||||||
|
L: boolean[][];
|
||||||
|
J: boolean[][];
|
||||||
|
S: boolean[][];
|
||||||
|
Z: boolean[][];
|
||||||
|
T: boolean[][];
|
||||||
|
} = {
|
||||||
|
O: [
|
||||||
|
[X, X],
|
||||||
|
[X, X],
|
||||||
|
],
|
||||||
|
I: [[X, X, X, X]],
|
||||||
|
L: [
|
||||||
|
[_, _, X],
|
||||||
|
[X, X, X],
|
||||||
|
],
|
||||||
|
J: [
|
||||||
|
[X, _, _],
|
||||||
|
[X, X, X],
|
||||||
|
],
|
||||||
|
S: [
|
||||||
|
[_, X, X],
|
||||||
|
[X, X, _],
|
||||||
|
],
|
||||||
|
Z: [
|
||||||
|
[X, X, _],
|
||||||
|
[_, X, X],
|
||||||
|
],
|
||||||
|
T: [
|
||||||
|
[X, X, X],
|
||||||
|
[_, X, _],
|
||||||
|
],
|
||||||
|
};
|
Reference in New Issue
Block a user