Monopoly City Streetsの機能を拡張する

残念ながら、MCSの開発者は、マウスを数回クリックするだけで、多数の建物がある通りを作る可能性を提供していません。 しかし、ゲームはJSで記述されているため、小さなブックマークレットを書くことを妨げるものは何もありません。これにより、必要な機能を追加できます。



すべてのMCSコードは、ファイルmonopoly.1255614067.jsにあります。 firebugを使用して建物を購入するプロセスで何が起こるかを見ると、MCS.BUILD.showLocations()[利用可能な場所のマーカーを表示する]とMCS.BUILD.buyBuilding()[実際には建物を購入する]の2つの関数が使用されていることがわかります]。 考えた後、私は次のコードを得ました:

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 ) {

アラート ( 「電話をかける前に通りを選択する必要があります」 ) ;

投げる '' ;

}

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 {

警告 ( 「この建物を建てるのに十分な資金がありません」 ) ;

}

}

}
コードの強調表示 : highlight.hohli.com



作業を開始する前に、スクリプトはいくつかのチェックを実行します。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



All Articles