すべてのMCSコードは、ファイルmonopoly.1255614067.jsにあります。 firebugを使用して建物を購入するプロセスで何が起こるかを見ると、MCS.BUILD.showLocations()[利用可能な場所のマーカーを表示する]とMCS.BUILD.buyBuilding()[実際には建物を購入する]の2つの関数が使用されていることがわかります]。 考えた後、私は次のコードを得ました:
if ( typeof MCS == "undefined" ) {コードの強調表示 : highlight.hohli.com
alert ( 「ブックマークレットは独占ページでのみ呼び出す必要があります」 ) ;
投げる '' ;
}
var buildingType = null ;
var player = MCS。 getPlayerData ( ) ;
if ( player == null ) {
alert ( 「呼び出す前にログインする必要があります」 ) ;
投げる '' ;
}
var streetId = MCS。 ストリート 。 getStreetData ( ) 。 id ;
var streetData = MCS。 ストリート 。 getStreetData ( ) 。 データ ;
if ( streetId == null ) {
alert ( '電話する前に、通りを選択する必要があります' ) ;
投げる '' ;
} else if ( streetData。o != player。nickname ) {
アラート ( 「電話をかける前に通りを選択する必要があります」 ) ;
投げる '' ;
}
var locations = new Array ( ) ;
var builtCnt = 0 ;
var buildLimit = 0 ;
関数購入( ) {
if ( builtCnt < buildLimit ) {
buyBuilding (ロケーション[ 0 ] ) ;
MCS。 ステータスバー 再描画 ( ) ;
getLocations ( ) ;
setTimeout (購入、 250 ) ;
} else {
完了( ) ;
}
}
機能完了( )
{
MCS。 ストリート 。 show ( streetId 、 null 、 false 、 false ) ;
MCS。 読み込み中 hide ( ) ;
alert ( 'ビルを構築:' + builtCnt + 'pcs。' ) ;
}
関数 getLocations ( )
{
locations = new Array ( ) ;
$。 ajax ( {
url : "/ build / getlocations" 、
キャッシュ: false 、
データ: {
id : streetId 、
タイプ: buildingType
} 、
dataType : "json" 、
非同期: false 、
成功: 関数 (データ、 ステータス ) {
$。 各 ( data 、 function ( foo 、 point ) {
if ( point ) {
場所。 push ( foo ) ;
}
} ) ;
}
} ) ;
}
関数 buyBuilding (ロケーション)
{
$。 ajax ( {
url : "/ negotiate / buybuilding" 、
タイプ: "post" 、
データ: {
ニックネーム:プレーヤー。 ニックネーム
ハッシュ:プレーヤー。 ハッシュ
id : streetId 、
タイプ: buildingType 、
loc :場所
} 、
dataType : "json" 、
非同期: false 、
成功: 関数 (データ、 ステータス ) {
プレーヤー。 バランス -= MCS。 建物 [ buildingType ] 。 価格
builtCnt ++;
}
} ) ;
MCS。 トラック ビュー ( {
ページ: "build" 、
セクション: "build" 、
street : streetData。 n
国: streetData。 cy
地域: streetData。 再
building_type : buildingType 、
アクティビティ: 「プロパティを構築する」 、
値: MCS。 建物 [ buildingType ] 。 価格
} ) ;
}
buildingType = prompt ( '建物識別子を入力してください。使用可能なタイプのリストは、「?」' 、 '?'を 入力することで見つけることができます ) ;
if ( buildingType != null ) {
if ( buildingType == '?' ) {
var string = '' ;
for ( i in MCS。building ) {
if ( ! isNaN ( MCS.buildings [ i ] .effect ) )) {
string = string + "Identifier:" + i + "、name:" + MCS。 LANG building [ "building" + i ] + "、cost:" + MCS。 建物 [ i ] 。 価格 * 1000 + " \ n " ;
}
}
アラート (文字列) ;
} else if ( typeof MCS。building [ buildingType ] == "undefined" || isNaN ( MCS。building [ buildingType ] 。effect ) ) {
alert ( "指定された無効な識別子" ) ;
} else {
var count = Math。 floor (プレーヤー。 残高 / MCS。 建物 [ buildingType ] .price ) ;
if ( count > 0 ) {
getLocations ( ) ;
var minCnt =数学。 min (カウント、ロケーション、 長さ ) ;
if ( minCnt == 0 ) {
警告 ( 「通りには、このタイプの建物のための場所はありません」 ) ;
} else {
buildLimit = minCnt ;
if ( ! 確認 ( '今すぐ家の量を設定しよう' + minCnt + 'pcs。制限を変更する場合(小さい側のみ)-[キャンセル]をクリックします' ) ) {
buildLimit = prompt ( 'いくつの建物を建てるべきですか?' 、 minCnt ) ;
if ( buildLimit == null ) {
投げる '' ;
}
if ( isNaN ( buildLimit ) || buildLimit > minCnt || buildLimit < 0 ) {
alert ( 「無効な値」 ) ;
投げる '' ;
}
}
MCS。 読み込み中 show ( ) ;
setTimeout (購入、 250 ) ;
}
} else {
警告 ( 「この建物を建てるのに十分な資金がありません」 ) ;
}
}
}
作業を開始する前に、スクリプトはいくつかのチェックを実行します。MCSクラスの存在(そうでなければゲームのWebサイトに間違いなく存在します)、ユーザーの承認、現在選択されている通りもチェックされます。 次に、建物のタイプを見つけるためのリクエストが発行されます-後者のリストはゲームコードから取得されます。 プレーヤーのお金の存在と通りの無料席の空き状況をチェックします。 次に、建設する家の数を見つけて、このエキサイティングなレッスンに進みます。 ユーザーが退屈しないように-上部パネルに砂時計を表示することを忘れないでください。 そして最後に、建てられた家の数が表示されます。
このスクリプトを1行に変換するには-javascriptcompressor.comを使用します。その結果、ブックマークレットがほとんどあります-残っているのは、結果の行の先頭に「javascript:」を追加することだけです。
pastebinのブックマークレットの既製のテキスト: pastebin.mozilla.org/678433
PSボーナスとして、建物のない現在の通りの値を表示するブックマークレット:
javascript:if(typeof MCS != "undefined"&&MCS.STREET.getStreetData().data)alert(MCS.STREET.getStreetData().data.p*1000);
建物のバッチ除去のためのUPDブックマークレット:
if ( typeof MCS == "undefined" ) {
alert ( 「ブックマークレットは独占ページでのみ呼び出す必要があります」 ) ;
投げる '' ;
}
var buildingType = null ;
var player = MCS。 getPlayerData ( ) ;
if ( player == null ) {
alert ( 「呼び出す前にログインする必要があります」 ) ;
投げる '' ;
}
var streetId = MCS。 ストリート 。 getStreetData ( ) 。 id ;
var streetData = MCS。 ストリート 。 getStreetData ( ) 。 データ ;
if ( streetId == null ) {
alert ( '電話する前に、通りを選択する必要があります' ) ;
投げる '' ;
} else if ( streetData。o != player。nickname ) {
アラート ( 「電話をかける前に通りを選択する必要があります」 ) ;
投げる '' ;
}
関数 demolish ( ) {
if ( removedCnt < removeCnt && buildingList。length ) {
$。 ajax ( {
url : "/ negotiate / demolishbuilding" 、
タイプ: "post" 、
データ: {
ニックネーム:プレーヤー。 ニックネーム
ハッシュ:プレーヤー。 ハッシュ
id : streetId 、
bid : buildingList。 シフト ( )
} 、
dataType : "json" 、
非同期: false 、
成功: 関数 ( ) {
MCS。 getPlayerData ( ) 。 balance + = parseInt ( MCS。building [ removeMe ] .price / 2 ) ;
}
} ) ;
removedCnt ++;
setTimeout (破壊、 500 ) ;
} else {
完了( ) ;
}
}
機能完了( )
{
MCS。 ストリート 。 show ( streetId 、 null 、 false 、 false ) ;
MCS。 読み込み中 hide ( ) ;
}
var buildingTypes = new Array ( ) ;
var str = '' ;
var i ;
for ( i in streetData。b ) {
if ( ! isNaN ( MCS.buildings [ streetData.b [ i ] .t ] .effect ) )) {
if ( typeof buildingTypes [ streetData。b [ i ] 。t ] == "undefined" ) {
buildingTypes [ streetData。 b [ i ] t ] = new Array ( ) ;
buildingTypes [ streetData。 b [ i ] t ] [ 'name' ] = MCS。 LANG building [ "建物" + streetData。 b [ i ] t ] ;
buildingTypes [ streetData。 b [ i ] t ] [ 'count' ] = 1 ;
} else {
buildingTypes [ streetData。 b [ i ] t ] [ 'count' ] ++;
}
}
}
if ( buildingTypes。length == 0 ) {
警告 ( 「選択した通りには取り壊し可能な建物はありません」 ) ;
投げる '' ;
}
for ( i in buildingTypes ) {
str = str + "Identifier:" + i + "、name:" + buildingTypes [ i ] [ 'name' ] + "、quantity:" + buildingTypes [ i ] [ 'count' ] + "pcs。" + " \ n " ;
}
var removeMe = prompt ( 「解体用の建物識別子を入力してください。通りの建物のリスト: \ n " + str ) ;
var buildingList = new Array ( ) ;
if ( removeMe != null ) {
if ( typeof buildingTypes [ removeMe ] == 'undefined' ) {
alert ( 「指定された無効な建物タイプ」 ) ;
投げる '' ;
}
var removeCnt = buildingTypes [ removeMe ] [ 'count' ] ;
var removedCnt = 0 ;
if ( ! confirm ( '建物の破壊を試みます' + removeCnt + 'pcs。数量を変更する場合(下のみ)-[キャンセル]をクリックします' ) ) {
removeCnt = prompt ( 「破壊する家の数を入力してください」 ) ;
if ( removeCnt == null ) {
投げる '' ;
}
if ( isNaN ( removeCnt ) || removeCnt > buildingTypes [ removeMe ] [ 'count' ] || removeCnt < 0 ) {
alert ( 「無効な値」 ) ;
投げる '' ;
}
}
MCS。 読み込み中 show ( ) ;
for ( i in streetData。b ) {
if ( streetData。b [ i ] 。t == removeMe && removedCnt < removeCnt ) {
buildingList。 push ( i ) ;
}
}
setTimeout (取り壊す、 250 ) ;
}
pastebin.mozilla.org/678730