@ -8,6 +8,8 @@ import { AwesomeButton } from 'react-awesome-button';
import Typewriter from 'react-ts-typewriter' ;
import Typewriter from 'react-ts-typewriter' ;
import Slider from 'rc-slider' ;
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 Boomer from '../img/unaboomer.png' ;
import Newspapers from '../img/newspapers.png' ;
import Newspapers from '../img/newspapers.png' ;
import Bomb from '../img/bomb.png' ;
import Bomb from '../img/bomb.png' ;
@ -21,8 +23,6 @@ import 'rc-slider/assets/index.css';
import '../styles/sections.css' ;
import '../styles/sections.css' ;
const contractAddress = '0x5FbDB2315678afecb367f032d93F642f64180aa3' ;
export class Section1 extends React . Component {
export class Section1 extends React . Component {
constructor ( props ) {
constructor ( props ) {
super ( props ) ;
super ( props ) ;
@ -123,7 +123,7 @@ class GameMap extends React.Component {
< h1 id = "gameMapTitle" > Metaverse Map < / h1 >
< h1 id = "gameMapTitle" > Metaverse Map < / h1 >
< p id = "gameMapText" >
< p id = "gameMapText" >
{ this . props . unaboomersRadicalized } / { this . props . unaboomerMaxSupply } Unaboomers radicalized and ready to terrorize the metaverse . < br / >
{ this . props . unaboomersRadicalized } / { this . props . unaboomerMaxSupply } Unaboomers radicalized and ready to terrorize the metaverse . < br / >
{ this . props . unaboomersRadicalized - this . props . unaboomersKilled } Unaboomers active . Th e project will fully begin when less tha n { this . props . unaboomerMaxSurvivorCount } Unaboomers remain standing . < br / >
{ this . props . unaboomersRadicalized - this . props . unaboomersKilled } Unaboomers active . Th is round will end and th e project will fully start whe n { this . props . unaboomerMaxSurvivorCount } or less Unaboomers remain standing . < br / >
< / p >
< / p >
{ this . props . unaboomersRadicalized > 0 && (
{ this . props . unaboomersRadicalized > 0 && (
< div id = "gameStats" >
< div id = "gameStats" >
@ -161,7 +161,8 @@ class GameMap extends React.Component {
}
}
}
}
function Section3 ( ) {
function Section3 ( props ) {
const contractAddress = props . contractAddress ;
const [ options , setOptions ] = useState ( {
const [ options , setOptions ] = useState ( {
unaboomerAmount : 1 ,
unaboomerAmount : 1 ,
bombAmount : 1 ,
bombAmount : 1 ,
@ -182,7 +183,8 @@ function Section3() {
leaderKillCount : 0 ,
leaderKillCount : 0 ,
unaboomerMaxSupply : 0 ,
unaboomerMaxSupply : 0 ,
unaboomerMaxSurvivorCount : 0 ,
unaboomerMaxSurvivorCount : 0 ,
unaboomerMaxMintPerWallet : 0
unaboomerMaxMintPerWallet : 0 ,
readWTF : false
} ) ;
} ) ;
function handleStateChange ( obj ) {
function handleStateChange ( obj ) {
setOptions ( preState => ( { ... preState , ... obj } ) ) ;
setOptions ( preState => ( { ... preState , ... obj } ) ) ;
@ -217,15 +219,15 @@ function Section3() {
functionName : 'unaboomerMaxMintPerWallet'
functionName : 'unaboomerMaxMintPerWallet'
}
}
] ,
] ,
watch : fals e,
watch : tru e,
cacheTime : 30 _000 ,
cacheTime : 30 _000 ,
onSuccess ( data ) {
onSuccess ( data ) {
handleStateChange ( {
handleStateChange ( {
unaboomerPrice : data [ 0 ] . toString ( ) ,
unaboomerPrice : data [ 0 ] . toString ( ) ,
bombPrice : data [ 1 ] . toString ( ) ,
bombPrice : data [ 1 ] . toString ( ) ,
unaboomerMaxSupply : data [ 2 ] . toString ( ) ,
unaboomerMaxSupply : Number ( data [ 2 ] ) ,
unaboomerMaxSurvivorCount : data [ 3 ] . toString ( ) ,
unaboomerMaxSurvivorCount : Number ( data [ 3 ] ) ,
unaboomerMaxMintPerWallet : data [ 4 ] . toString ( )
unaboomerMaxMintPerWallet : Number ( data [ 4 ] )
} ) ;
} ) ;
}
}
} ) ;
} ) ;
@ -267,13 +269,13 @@ function Section3() {
cacheTime : 6 _000 ,
cacheTime : 6 _000 ,
onSuccess ( data ) {
onSuccess ( data ) {
handleStateChange ( {
handleStateChange ( {
unaboomerBalance : data [ 0 ] . toString ( ) ,
unaboomerBalance : Number ( data [ 0 ] ) ,
bombBalance : data [ 1 ] . toString ( ) ,
bombBalance : Number ( data [ 1 ] ) ,
unaboomersRadicalized : data [ 2 ] . toString ( ) ,
unaboomersRadicalized : Number ( data [ 2 ] ) ,
bombsAssembled : data [ 3 ] . toString ( ) ,
bombsAssembled : Number ( data [ 3 ] ) ,
bombsExploded : data [ 4 ] . toString ( ) ,
bombsExploded : Number ( data [ 4 ] ) ,
unaboomersKilled : data [ 5 ] . toString ( ) ,
unaboomersKilled : Number ( data [ 5 ] ) ,
leaderboardPointer : data [ 6 ] .toString ( ),
leaderboardPointer : Number ( data [ 6 ] )
} ) ;
} ) ;
}
}
} ) ;
} ) ;
@ -301,7 +303,7 @@ function Section3() {
cacheTime : 8 _000 ,
cacheTime : 8 _000 ,
onSuccess ( data ) {
onSuccess ( data ) {
handleStateChange ( {
handleStateChange ( {
leaderKillCount : data . toString ( ) ,
leaderKillCount : Number ( data ) ,
} ) ;
} ) ;
}
}
} ) ;
} ) ;
@ -332,7 +334,7 @@ function Section3() {
const sendBombsPrepare = usePrepareContractWrite ( {
const sendBombsPrepare = usePrepareContractWrite ( {
address : contractAddress ,
address : contractAddress ,
abi : MainABI ,
abi : MainABI ,
enabled : isConnected ,
enabled : isConnected && options . bombBalance > 0 ,
staleTime : 2 _000 ,
staleTime : 2 _000 ,
functionName : 'sendBombs' ,
functionName : 'sendBombs' ,
args : [ options . sendBombAmount ]
args : [ options . sendBombAmount ]
@ -349,12 +351,12 @@ function Section3() {
const res = iface . decodeEventLog ( "SentBomb" , log . data , log . topics ) ;
const res = iface . decodeEventLog ( "SentBomb" , log . data , log . topics ) ;
if ( res . hit ) {
if ( res . hit ) {
if ( res . owned ) {
if ( res . owned ) {
NotificationManager . error ( ` Your bomb exploded during assembly and killed your Unaboomer ${ res . tokenId . toString ( ) } ` , 'oof' , 10 000) ;
NotificationManager . error ( ` Your bomb exploded during assembly and killed your Unaboomer ${ res . tokenId . toString ( ) } ` , 'oof' , 8 000) ;
} else {
} else {
NotificationManager . success ( ` Your bomb killed Unaboomer ${ res . tokenId . toString ( ) } ` , 'Got em!' , 10 000) ;
NotificationManager . success ( ` Your bomb killed Unaboomer ${ res . tokenId . toString ( ) } ` , 'Got em!' , 8 000) ;
}
}
} else {
} else {
NotificationManager . warning ( ` Your bomb for Unaboomer ${ res . tokenId . toString ( ) } was a dud ` , 'oof' , 10 000) ;
NotificationManager . warning ( ` Your bomb for Unaboomer ${ res . tokenId . toString ( ) } was a dud ` , 'oof' , 8 000) ;
}
}
} )
} )
@ -362,25 +364,75 @@ function Section3() {
} ) ;
} ) ;
return (
return (
< section className = "section" id = "mintSection" >
< section className = "section" id = "mintSection" >
{ isConnected &&
{ ! isConnected && (
< div id = "heroText" >
< h1 > connect your web3 wallet < / h1 >
< / div >
) }
{ isConnected && options . unaboomersKilled >= options . unaboomerMaxSupply - options . unaboomerMaxSurvivorCount && options . unaboomerMaxSupply > 0 && (
< div id = "heroText" >
< h4 style = { { margin : 0 } } > the culling of weak warriors has completed < / h4 >
< p >
{ options . unaboomersRadicalized - options . unaboomersKilled } Unaboomers remain standing . < br / > < br / >
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 .
< / p >
< p style = { { fontSize : '.8em' , color : '#FF3E41' } } > We will not rest until our objective is complete . < / p >
< / div >
) }
{ isConnected && options . unaboomersKilled < options . unaboomerMaxSupply - options . unaboomerMaxSurvivorCount &&
< >
{ ! options . readWTF && (
< >
< >
< h1 id = "mintTitle" >
< h1 id = "mintTitle" >
WTF
Web3 Community and Its Future
< / h1 >
< / h1 >
< p id = "mintText" >
< p id = "mintText" >
The degens are taking us all on an utterly reckless ride into the unknown . < br / > < br / >
The degens are taking us all on an utterly reckless ride into the unknown . < br / > < br / >
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 . < br / > < br / >
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 . < br / > < br / >
But we don ’ t think it is inevitable . We think it can be stopped . < br / > < br / >
But we don ’ t think it is inevitable . We think it can be stopped . < br / > < br / >
The two main tasks for the present are to < span className = "strong" > promote social stress and instability in the Web3 community < / span > and < span className = "strong" > to develop and propagate an ideology that opposes degeneracy and the corporate venture capital system < / span > . When the system becomes sufficiently stressed and unstable , a revolution against rent seekers , scammers , and sociopaths may be possible . < br / > < br / >
The two main tasks for the present are to < span className = "strong" > promote social stress and instability in the Web3 community < / span > and < span className = "strong" > to develop and propagate an ideology that opposes degeneracy and the corporate venture capital system < / span > . When the system becomes sufficiently stressed and unstable , a revolution against rent seekers , scammers , and sociopaths may be possible . < br / > < br / >
JOIN US .
< / p >
< / p >
< AwesomeButton ripple = { true } onPress = { ( ) => handleStateChange ( { readWTF : true } ) } >
join us
< / AwesomeButton >
< / >
) || (
< >
< h1 id = "mintTitle" >
WTF
< / h1 >
< p id = "mintText" >
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 . < br / > < br / >
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 . < br / > < br / >
< / p >
< p >
Godspeed .
< / p >
< span id = "team" >
< span className = "teamMember" >
< img src = { LZA } width = "150px" / >
< p className = "nopad" > < a href = "https://twitter.com/lza_menace" target = "_blank" > lza _menace < / a > - dev < / p >
< / span >
< span className = "teamMember" >
< img src = { Carty } width = "150px" / >
< p className = "nopad" > < a href = "https://twitter.com/cartyisme" target = "_blank" > cartyisme < / a > - artist < / p >
< / span >
< / span >
< div className = "mintContainer" >
< div className = "mintContainer" >
< div className = "mintItem" >
< div className = "mintItem" >
< h1 > Radicalize a Boomer < / h1 >
< h1 > Radicalize a Boomer < / h1 >
< p > Radicalizing a boomer will mint ERC - 721 BOOMR tokens with images of a pixel art Web3 Unaboomers . < / p >
< p > Radicalizing a boomer will mint ERC - 721 BOOMR tokens with images of a pixel art Web3 Unaboomers . < / p >
< p > You have { options . unaboomerBalance } BOOMR < / p >
< p > You have { options . unaboomerBalance } / { options . unaboomerMaxMintPerWallet } BOOMR < / p >
< img src = { Boomer } alt = "" width = "120px" / >
< img src = { Boomer } alt = "" width = "120px" / >
{ options . unaboomerBalance < options . unaboomerMaxMintPerWallet && ( < >
{ options . unaboomerBalance < options . unaboomerMaxMintPerWallet && options . unaboomersKilled + options . unaboomersRadicalized < options . unaboomerMaxSupply && (
< >
< p >
< p >
< AwesomeButton type = "secondary" ripple = { true } disabled = { radicalizeBoomersPrepare . status == 'error' } onPress = { ( ) => radicalizeBoomersWrite . write ? . ( ) } >
< AwesomeButton type = "secondary" ripple = { true } disabled = { radicalizeBoomersPrepare . status == 'error' } onPress = { ( ) => radicalizeBoomersWrite . write ? . ( ) } >
{ radicalizeBoomersWrite . isLoading && < > minting { options . unaboomerAmount } < / > }
{ radicalizeBoomersWrite . isLoading && < > minting { options . unaboomerAmount } < / > }
@ -393,7 +445,12 @@ function Section3() {
handleStateChange ( { unaboomerPreviewAmount : v } ) ;
handleStateChange ( { unaboomerPreviewAmount : v } ) ;
radicalizeBoomersWrite . reset ( ) ;
radicalizeBoomersWrite . reset ( ) ;
} } / >
} } / >
< / > ) || < h2 > max reached < / h2 > }
< / >
) || options . unaboomerBalance < options . unaboomerMaxMintPerWallet && options . unaboomersKilled + options . unaboomersRadicalized < options . unaboomerMaxSupply && (
< h2 > max per wallet reached < / h2 >
) || (
< h2 > max supply reached < / h2 >
) }
< / div >
< / div >
< div className = "mintItem" >
< div className = "mintItem" >
< h1 > Assemble Bombs < / h1 >
< h1 > Assemble Bombs < / h1 >
@ -415,7 +472,7 @@ function Section3() {
< / div >
< / div >
< div className = "mintItem" >
< div className = "mintItem" >
< h1 > Send Bombs < / h1 >
< h1 > Send Bombs < / h1 >
< p > Sending bombs will burn your BOMB token and kill a BOOMR token at random . Be careful not to kill yourself in the process . < / p >
< p > Sending bombs will burn your BOMB token and kill a BOOMR token at random . Try not to kill yourself in the process . < / p >
< p > There are { options . unaboomersRadicalized - options . unaboomersKilled } BOOMR available to kill < / p >
< p > There are { options . unaboomersRadicalized - options . unaboomersKilled } BOOMR available to kill < / p >
< img src = { Explosion } alt = "" width = "120px" / >
< img src = { Explosion } alt = "" width = "120px" / >
{ options . bombBalance > 0 && ( < >
{ options . bombBalance > 0 && ( < >
@ -434,7 +491,12 @@ function Section3() {
< / > ) || < h2 > no bombs < / h2 > }
< / > ) || < h2 > no bombs < / h2 > }
< / div >
< / div >
< / div >
< / div >
< / >
) }
< NotificationContainer / >
< NotificationContainer / >
< / > }
{ options . unaboomerMaxSupply > 0 && (
< GameMap
< GameMap
bombsAssembled = { options . bombsAssembled }
bombsAssembled = { options . bombsAssembled }
bombBalance = { options . bombBalance }
bombBalance = { options . bombBalance }
@ -446,22 +508,22 @@ function Section3() {
unaboomerMaxSupply = { options . unaboomerMaxSupply }
unaboomerMaxSupply = { options . unaboomerMaxSupply }
unaboomerMaxSurvivorCount = { options . unaboomerMaxSurvivorCount }
unaboomerMaxSurvivorCount = { options . unaboomerMaxSurvivorCount }
/ >
/ >
< / >
) || (
||
< div id = "heroText" >
< div id = "heroText" >
< h1 > connect your wallet to play < / h1 >
< h1 > loading ... < / h1 >
< / div >
< / div >
}
) }
< / section >
< / section >
)
)
}
}
export function AllSections ( ) {
export function AllSections ( props ) {
return (
return (
< >
< >
< Section1 / >
< Section1 / >
< Section2 / >
< Section2 / >
< Section3 / >
< Section3 contractAddress = { props . contractAddress } / >
< / >
< / >
)
)
}
}