diff --git a/src/img/cartyisme.png b/src/img/cartyisme.png new file mode 100644 index 0000000..5f7ce99 Binary files /dev/null and b/src/img/cartyisme.png differ diff --git a/src/img/lza_menace.jpg b/src/img/lza_menace.jpg new file mode 100644 index 0000000..30355c5 Binary files /dev/null and b/src/img/lza_menace.jpg differ diff --git a/src/index.js b/src/index.js index ef4357d..5f81b6a 100644 --- a/src/index.js +++ b/src/index.js @@ -36,12 +36,21 @@ const wagmiClient = createClient({ ReactDOM.createRoot(document.getElementById("root")).render( - +
- +
-); \ No newline at end of file +); + + +// goerli +// 5 +// 0x31205d753ec2784160f70e6e6177581c7721bd0e + +// local +// 1337 +// 0x5FbDB2315678afecb367f032d93F642f64180aa3 \ No newline at end of file diff --git a/src/styles/sections.css b/src/styles/sections.css index 0271260..b7fc154 100644 --- a/src/styles/sections.css +++ b/src/styles/sections.css @@ -56,13 +56,13 @@ } #mintTitle { - font-size: 6em; + font-size: 5em; padding: 0; margin: .5em 0 0 0; } #mintText { - width: 80%; + max-width: 800px; margin: 0 auto; font-size: 1.1em; } @@ -71,6 +71,22 @@ color: #ff00ea; } +#team { + flex-wrap: wrap; + display: flex; + width: 50%; + margin: 0 auto; +} + +.teamMember { + height: 100%; + margin: 0 auto; +} + +.teamMember img { + border-radius: 50%; +} + .mintContainer { padding: 2em 0; display: flex; diff --git a/src/template/Sections.jsx b/src/template/Sections.jsx index 5173ebe..c97aa53 100644 --- a/src/template/Sections.jsx +++ b/src/template/Sections.jsx @@ -8,6 +8,8 @@ import { AwesomeButton } from 'react-awesome-button'; import Typewriter from 'react-ts-typewriter'; import Slider from 'rc-slider'; +import LZA from '../img/lza_menace.jpg'; +import Carty from '../img/cartyisme.png'; import Boomer from '../img/unaboomer.png'; import Newspapers from '../img/newspapers.png'; import Bomb from '../img/bomb.png'; @@ -21,8 +23,6 @@ import 'rc-slider/assets/index.css'; import '../styles/sections.css'; -const contractAddress = '0x5FbDB2315678afecb367f032d93F642f64180aa3'; - export class Section1 extends React.Component { constructor(props) { super(props); @@ -123,7 +123,7 @@ class GameMap extends React.Component {

Metaverse Map

{this.props.unaboomersRadicalized} / {this.props.unaboomerMaxSupply} Unaboomers radicalized and ready to terrorize the metaverse.
- {this.props.unaboomersRadicalized - this.props.unaboomersKilled} Unaboomers active. The project will fully begin when less than {this.props.unaboomerMaxSurvivorCount} Unaboomers remain standing.
+ {this.props.unaboomersRadicalized - this.props.unaboomersKilled} Unaboomers active. This round will end and the project will fully start when {this.props.unaboomerMaxSurvivorCount} or less Unaboomers remain standing.

{this.props.unaboomersRadicalized > 0 && (
@@ -161,7 +161,8 @@ class GameMap extends React.Component { } } -function Section3() { +function Section3(props) { + const contractAddress = props.contractAddress; const [options, setOptions] = useState({ unaboomerAmount: 1, bombAmount: 1, @@ -182,7 +183,8 @@ function Section3() { leaderKillCount: 0, unaboomerMaxSupply: 0, unaboomerMaxSurvivorCount: 0, - unaboomerMaxMintPerWallet: 0 + unaboomerMaxMintPerWallet: 0, + readWTF: false }); function handleStateChange(obj) { setOptions(preState => ({...preState , ...obj})); @@ -217,15 +219,15 @@ function Section3() { functionName: 'unaboomerMaxMintPerWallet' } ], - watch: false, + watch: true, cacheTime: 30_000, onSuccess(data) { handleStateChange({ unaboomerPrice: data[0].toString(), bombPrice: data[1].toString(), - unaboomerMaxSupply: data[2].toString(), - unaboomerMaxSurvivorCount: data[3].toString(), - unaboomerMaxMintPerWallet: data[4].toString() + unaboomerMaxSupply: Number(data[2]), + unaboomerMaxSurvivorCount: Number(data[3]), + unaboomerMaxMintPerWallet: Number(data[4]) }); } }); @@ -267,13 +269,13 @@ function Section3() { cacheTime: 6_000, onSuccess(data) { handleStateChange({ - unaboomerBalance: data[0].toString(), - bombBalance: data[1].toString(), - unaboomersRadicalized: data[2].toString(), - bombsAssembled: data[3].toString(), - bombsExploded: data[4].toString(), - unaboomersKilled: data[5].toString(), - leaderboardPointer: data[6].toString(), + unaboomerBalance: Number(data[0]), + bombBalance: Number(data[1]), + unaboomersRadicalized: Number(data[2]), + bombsAssembled: Number(data[3]), + bombsExploded: Number(data[4]), + unaboomersKilled: Number(data[5]), + leaderboardPointer: Number(data[6]) }); } }); @@ -301,7 +303,7 @@ function Section3() { cacheTime: 8_000, onSuccess(data) { handleStateChange({ - leaderKillCount: data.toString(), + leaderKillCount: Number(data), }); } }); @@ -332,7 +334,7 @@ function Section3() { const sendBombsPrepare = usePrepareContractWrite({ address: contractAddress, abi: MainABI, - enabled: isConnected, + enabled: isConnected && options.bombBalance > 0, staleTime: 2_000, functionName: 'sendBombs', args: [options.sendBombAmount] @@ -349,12 +351,12 @@ function Section3() { const res = iface.decodeEventLog("SentBomb", log.data, log.topics); if (res.hit) { if (res.owned) { - NotificationManager.error(`Your bomb exploded during assembly and killed your Unaboomer ${res.tokenId.toString()}`, 'oof', 10000); + NotificationManager.error(`Your bomb exploded during assembly and killed your Unaboomer ${res.tokenId.toString()}`, 'oof', 8000); } else { - NotificationManager.success(`Your bomb killed Unaboomer ${res.tokenId.toString()}`, 'Got em!', 10000); + NotificationManager.success(`Your bomb killed Unaboomer ${res.tokenId.toString()}`, 'Got em!', 8000); } } else { - NotificationManager.warning(`Your bomb for Unaboomer ${res.tokenId.toString()} was a dud`, 'oof', 10000); + NotificationManager.warning(`Your bomb for Unaboomer ${res.tokenId.toString()} was a dud`, 'oof', 8000); } }) @@ -362,79 +364,139 @@ function Section3() { }); return (
- {isConnected && + {!isConnected && ( +
+

connect your web3 wallet

+
+ )} + + {isConnected && options.unaboomersKilled >= options.unaboomerMaxSupply - options.unaboomerMaxSurvivorCount && options.unaboomerMaxSupply > 0 && ( +
+

the culling of weak warriors has completed

+

+ {options.unaboomersRadicalized - options.unaboomersKilled} Unaboomers remain standing.

+ These warriors will advance to the next round of the game where they will work together + to continue to terrorize the metaverse in order to lead a revolution. +

+

We will not rest until our objective is complete.

+
+ )} + + {isConnected && options.unaboomersKilled < options.unaboomerMaxSupply - options.unaboomerMaxSurvivorCount && <> -

- WTF -

-

- The degens are taking us all on an utterly reckless ride into the unknown.

- Many people understand something of what Web3 progress is doing to us yet take a passive attitude toward degeneracy because they think it is inevitable.

- But we don’t think it is inevitable. We think it can be stopped.

- The two main tasks for the present are to promote social stress and instability in the Web3 community and to develop and propagate an ideology that opposes degeneracy and the corporate venture capital system. When the system becomes sufficiently stressed and unstable, a revolution against rent seekers, scammers, and sociopaths may be possible.

- JOIN US. -

-
-
-

Radicalize a Boomer

-

Radicalizing a boomer will mint ERC-721 BOOMR tokens with images of a pixel art Web3 Unaboomers.

-

You have {options.unaboomerBalance} BOOMR

- - {options.unaboomerBalance < options.unaboomerMaxMintPerWallet && (<> -

- radicalizeBoomersWrite.write?.()}> - {radicalizeBoomersWrite.isLoading && <>minting {options.unaboomerAmount}} - {radicalizeBoomersWrite.isIdle && <>mint {options.unaboomerPreviewAmount} ({ethers.utils.formatEther((options.unaboomerPrice * options.unaboomerPreviewAmount).toString())} Ξ)} - {radicalizeBoomersWrite.isSuccess && <>sent} - {radicalizeBoomersWrite.isError && <>error} - -

- handleStateChange({unaboomerAmount: v})} onChange={(v) => { - handleStateChange({unaboomerPreviewAmount: v}); - radicalizeBoomersWrite.reset(); - }} /> - ) ||

max reached

} -
-
-

Assemble Bombs

-

Assembling bombs will mint ERC-1155 BOMB tokens with an image of a pixel art bomb to send to random Unaboomers to kill them.

-

You have {options.bombBalance} BOMB

- + {!options.readWTF && ( + <> +

+ Web3 Community and Its Future +

+

+ The degens are taking us all on an utterly reckless ride into the unknown.

+ Many people understand something of what Web3 progress is doing to us yet take a passive attitude toward degeneracy because they think it is inevitable.

+ But we don’t think it is inevitable. We think it can be stopped.

+ The two main tasks for the present are to promote social stress and instability in the Web3 community and to develop and propagate an ideology that opposes degeneracy and the corporate venture capital system. When the system becomes sufficiently stressed and unstable, a revolution against rent seekers, scammers, and sociopaths may be possible.

+

+ handleStateChange({readWTF: true})}> + join us + + + ) || ( + <> +

+ WTF +

+

+ This is a chain based game. There is a max supply of {options.unaboomerMaxSupply} Unaboomer tokens (BOOMR) and an infinite supply of Mailbomb tokens (BOMB). + Players will mint BOOMR and send BOMB to kill the other players. There is a pseudo-random element which may cause your bomb to malfuction, killing your own token.

+ This is the first round of the game in which we select the fiercest warriors to lead the decentralized revolution. + There will be up to {options.unaboomerMaxSurvivorCount} survivors. The round will conclude when the survivor count has been reached.

+

- assembleBombsWrite.write?.()}> - {assembleBombsWrite.isLoading && <>minting {options.bombAmount}} - {assembleBombsWrite.isIdle && <>mint {options.bombPreviewAmount} ({ethers.utils.formatEther((options.bombPrice * options.bombPreviewAmount).toString())} Ξ)} - {assembleBombsWrite.isSuccess && <>sent} - {assembleBombsWrite.isError && <>error} - + Godspeed.

- handleStateChange({bombAmount: v})} onChange={(v) => { - handleStateChange({bombPreviewAmount: v}); - assembleBombsWrite.reset(); - }} /> -
-
-

Send Bombs

-

Sending bombs will burn your BOMB token and kill a BOOMR token at random. Be careful not to kill yourself in the process.

-

There are {options.unaboomersRadicalized - options.unaboomersKilled} BOOMR available to kill

- - {options.bombBalance > 0 && (<> -

- sendBombsWrite.write?.()}> - {sendBombsWrite.isLoading && <>sending {options.sendBombAmount}} - {sendBombsWrite.isIdle && <>send {options.sendBombPreviewAmount} (~0 Ξ)} - {sendBombsWrite.isSuccess && <>sent} - {sendBombsWrite.isError && <>error} - -

- handleStateChange({sendBombAmount: v})} onChange={(v) => { - handleStateChange({sendBombPreviewAmount: v}); - sendBombsWrite.reset(); - }} /> - ) ||

no bombs

} -
-
+ + + +

lza_menace - dev

+
+ + +

cartyisme - artist

+
+
+ + +
+
+

Radicalize a Boomer

+

Radicalizing a boomer will mint ERC-721 BOOMR tokens with images of a pixel art Web3 Unaboomers.

+

You have {options.unaboomerBalance} / {options.unaboomerMaxMintPerWallet} BOOMR

+ + {options.unaboomerBalance < options.unaboomerMaxMintPerWallet && options.unaboomersKilled + options.unaboomersRadicalized < options.unaboomerMaxSupply && ( + <> +

+ radicalizeBoomersWrite.write?.()}> + {radicalizeBoomersWrite.isLoading && <>minting {options.unaboomerAmount}} + {radicalizeBoomersWrite.isIdle && <>mint {options.unaboomerPreviewAmount} ({ethers.utils.formatEther((options.unaboomerPrice * options.unaboomerPreviewAmount).toString())} Ξ)} + {radicalizeBoomersWrite.isSuccess && <>sent} + {radicalizeBoomersWrite.isError && <>error} + +

+ handleStateChange({unaboomerAmount: v})} onChange={(v) => { + handleStateChange({unaboomerPreviewAmount: v}); + radicalizeBoomersWrite.reset(); + }} /> + + ) || options.unaboomerBalance < options.unaboomerMaxMintPerWallet && options.unaboomersKilled + options.unaboomersRadicalized < options.unaboomerMaxSupply && ( +

max per wallet reached

+ ) || ( +

max supply reached

+ )} +
+
+

Assemble Bombs

+

Assembling bombs will mint ERC-1155 BOMB tokens with an image of a pixel art bomb to send to random Unaboomers to kill them.

+

You have {options.bombBalance} BOMB

+ +

+ assembleBombsWrite.write?.()}> + {assembleBombsWrite.isLoading && <>minting {options.bombAmount}} + {assembleBombsWrite.isIdle && <>mint {options.bombPreviewAmount} ({ethers.utils.formatEther((options.bombPrice * options.bombPreviewAmount).toString())} Ξ)} + {assembleBombsWrite.isSuccess && <>sent} + {assembleBombsWrite.isError && <>error} + +

+ handleStateChange({bombAmount: v})} onChange={(v) => { + handleStateChange({bombPreviewAmount: v}); + assembleBombsWrite.reset(); + }} /> +
+
+

Send Bombs

+

Sending bombs will burn your BOMB token and kill a BOOMR token at random. Try not to kill yourself in the process.

+

There are {options.unaboomersRadicalized - options.unaboomersKilled} BOOMR available to kill

+ + {options.bombBalance > 0 && (<> +

+ sendBombsWrite.write?.()}> + {sendBombsWrite.isLoading && <>sending {options.sendBombAmount}} + {sendBombsWrite.isIdle && <>send {options.sendBombPreviewAmount} (~0 Ξ)} + {sendBombsWrite.isSuccess && <>sent} + {sendBombsWrite.isError && <>error} + +

+ handleStateChange({sendBombAmount: v})} onChange={(v) => { + handleStateChange({sendBombPreviewAmount: v}); + sendBombsWrite.reset(); + }} /> + ) ||

no bombs

} +
+
+ + )} + + } + {options.unaboomerMaxSupply > 0 && ( - - || -
-

connect your wallet to play

-
- } + ) || ( +
+

loading...

+
+ )} +
) } -export function AllSections() { +export function AllSections(props) { return ( <> - + ) } \ No newline at end of file