合成大西瓜_魔改or外掛


運行環境

  • electron v8.1.1
  • electron-packager v14.2.1

目標

  • 魔改《合成大西瓜》

最近《合成大西瓜》特別火,我去看了源碼之后發現了是用cocos開發的,之前也有一點經驗,所以想要魔改一下。其實就是開外掛,分三個方面,一個是控制出來的水果類型、一個是合成到大西瓜的時候又變成山竹,一個就是直接修改分數。

如何在Cocos編譯出來的產物尋找關鍵信息

我是在這個網址玩的小游戲:合成大西瓜,project.js是游戲過程控制的關鍵文件,加載場景、生成新水果、判斷水果位置、計算分數等邏輯都在這個文件里。

尋找的技巧就是先假設、再搜索、再調試、最后就可以得到對應的代碼。

1、控制出來的水果類型

假設我們是一個開發者,我們會在什么時候去創建新水果呢?大概是在上一個水果掉落的時候,而上一個水果是在我們結束觸摸的時候掉落的,那我們就可以去搜索代碼里onTouchEnd之類的代碼,然后打上斷點,就會發現這段代碼就是生成水果的關鍵代碼。

t.prototype.onTouchEnd = function(e) {
                    var t = this;
                    i.default.playerTouch && null != a.default.Instance.targetFruit && 1 == this.touchNum && (this.touchNum = 0, a.default.Instance.targetFruit.getComponent(cc.PhysicsCircleCollider).radius = a.default.Instance.targetFruit.height / 2, a.default.Instance.targetFruit.getComponent(cc.PhysicsCircleCollider).apply(), a.default.Instance.targetFruit.getComponent(cc.RigidBody).type = cc.RigidBodyType.Dynamic, a.default.Instance.targetFruit.getComponent(cc.RigidBody).linearVelocity = cc.v2(0, -800), a.default.Instance.targetFruit = null, this.scheduleOnce(function() {
                        i.default.GameUpdateCtrl && (0 == t.createFruitCount ? (a.default.Instance.createOneFruit(0), t.createFruitCount++) : 1 == t.createFruitCount ? (a.default.Instance.createOneFruit(0), t.createFruitCount++) : 2 == t.createFruitCount ? (a.default.Instance.createOneFruit(1), t.createFruitCount++) : 3 == t.createFruitCount ? (a.default.Instance.createOneFruit(2), t.createFruitCount++) : 4 == t.createFruitCount ? (a.default.Instance.createOneFruit(2), t.createFruitCount++) : 5 == t.createFruitCount ? (a.default.Instance.createOneFruit(3), t.createFruitCount++) : t.createFruitCount > 5 && (a.default.Instance.createOneFruit(s.default.RandomInteger(0, 5)), t.createFruitCount++))
                    }, .5))
                }

其實這個代碼邏輯也非常清晰,很容易就看出創建水果的邏輯就是第一個、第二個、第三個是山竹,第四個是桃子,第五個、第六個是橘子,第七個是檸檬。這里多一個山竹是因為在start的生命周期里就創建了一個。

只要把上面的代碼改成:

i.default.GameUpdateCtrl && (a.default.Instance.createOneFruit(0))

就只有山竹了。

改成這樣:

i.default.GameUpdateCtrl && (a.default.Instance.createOneFruit(9))

就可以立馬合成大西瓜了。

2、合成到大西瓜的時候又變成山竹

之所以有這個想法是因為感覺西瓜和西瓜不能合並,那不管技術多好,都只可以合成四個瓜,所以就想要讓大西瓜變成山竹。

檢測碰撞應該是游戲開始后一直運行的代碼,本來去搜update這個生命周期的代碼,結果也沒有找到。考慮到水果合成伴隨着分數增加,所以搜索了score相關的並打上斷點。終於找到了相關代碼。

c == r && c < 9 && r < 9 ? (this.pengzhuangCount += 1, 0 == t.node.getComponent("fruitData").getNumber() && (a.default.score += this.fruitNumber + 1, u.default.Instance.SetScoreTween(a.default.score), n.node.getComponent(cc.PhysicsCircleCollider).radius = 0, n.node.getComponent(cc.PhysicsCircleCollider).apply(), this.node.getComponent(cc.PhysicsCircleCollider).radius = 0, this.node.getComponent(cc.PhysicsCircleCollider).apply(), cc.tween(t.node).to(.1, {
                            position: n.node.position
                        }).call(function() {
                            i.default.Instance.createFruitSui(o.fruitNumber, n.node.position);
                            i.default.Instance.createFruitL(o.fruitNumber, n.node.position, n.node.width);
  												 	i.default.Instance.createLevelUpFruit(o.fruitNumber + 1, n.node.position);
                            n.node.active = !1;
                            t.node.active = !1;
                            n.node.destroy();
                            t.node.destroy();
                        }).start())) : c == r && 9 == c && 9 == r && (this.pengzhuangCount += 1, 0 == t.node.getComponent("fruitData").getNumber() && (a.default.score += this.fruitNumber + 10, u.default.Instance.SetScoreTween(a.default.score), n.node.getComponent(cc.PhysicsCircleCollider).radius = 0, n.node.getComponent(cc.PhysicsCircleCollider).apply(), this.node.getComponent(cc.PhysicsCircleCollider).radius = 0, this.node.getComponent(cc.PhysicsCircleCollider).apply(), a.default.playerTouch = !1, cc.tween(t.node).to(.1, {
                            position: n.node.position
                        }).call(function() {
                            //debug
                            i.default.Instance.createFruitSui(o.fruitNumber, n.node.position), i.default.Instance.createFruitL(o.fruitNumber, n.node.position, n.node.width), i.default.Instance.createLevelUpFruit(o.fruitNumber+1, n.node.position);
                            var e = cc.find("Canvas/upEffectParent").getChildByName("daxigua");
                            e.active = !0, e.opacity = 0, cc.tween(e).to(.5, {
                                opacity: 150
                            }).start();
                            var c = new cc.Node;
                            c.addComponent(cc.Sprite).spriteFrame = l.default.Instance.fruit[10], c.parent = cc.find("Canvas/upEffectParent"), c.position = cc.v2(0, -500), c.scale = 0;
                            var r = new cc.Node;
                            r.addComponent(cc.Sprite).spriteFrame = l.default.Instance.caidia[6], r.scale = 3, r.parent = c, r.position = cc.v2(0), cc.tween(r).by(5, {
                                angle: 360
                            }).repeatForever().start();
                            var s = new cc.Node;
                            s.addComponent(cc.Sprite).spriteFrame = l.default.Instance.fruit[10], s.parent = c, s.position = cc.v2(0), d.default.Instance.Play(4, !1, 1), i.default.Instance.ribbonEffect(cc.v2(0, 0)), c.runAction(cc.sequence(cc.spawn(cc.jumpBy(1, 0, 0, 300, 1), cc.scaleTo(1, 1)), cc.delayTime(1), cc.spawn(cc.moveTo(1, cc.v2(0, 500)), cc.scaleTo(1, 0)), cc.callFunc(function() {
                                a.default.score += 100, u.default.Instance.SetScoreTween(a.default.score), e.active = !1, a.default.playerTouch = !0, c.destroy()
                            }))), n.node.active = !1, t.node.active = !1, n.node.destroy(), t.node.destroy()
                        }).start()))

c == r && c < 9 && r < 9是合成大西瓜之前,c == r && c = 9 && r = 9是合成大西瓜之后。

這里把c == r && c = 9 && r = 9條件下

i.default.Instance.createLevelUpFruit(o.fruitNumber+1, n.node.position);

改成

i.default.Instance.createLevelUpFruit(0, n.node.position);

就可以讓大西瓜又變成小山竹。

3、直接修改分數

作弊的最高境界當然就是直接改分數了,因為在找水果合成的代碼時已經找到增加

分數的代碼了。

c == r && c < 9 && r < 9條件下

a.default.score += this.fruitNumber + 1

c == r && c = 9 && r = 9條件下

a.default.score += this.fruitNumber + 10

直接動手改就好了,不過改很高的分數也是超過99%。所以第一名到底開了什么無敵掛。

魔改《合成大西瓜》

我用electron做了mac版離線的,就是大西瓜會變山竹的新玩法,項目放在gitee上(僅供技術交流)。

由於時間關系,沒有去做逆向,直接用了編譯好的代碼改。這個游戲去做逆向后應該是一個不錯的小游戲教程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM