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

Source: https://habr.com/ru/post/J73164/


All Articles