Call own plugin

● ARCHIVED · READ-ONLY
Started by MrB 7 posts View original ↗
  1. This is really embarrasing, but. How do I do it?

    I have a simple plugin, that works if I use it as a script.

    Code:
    //=============================================================================
    // MrB_Shop.js
    //=============================================================================
    /*:
     * @plugindesc  Add and remove items from a shopscene
     * @author MrB 
     * @help Yes I need help.
     * 
     * A lot of it.
     */
    
     (function() {
        function CallShop(){
            //Add item unlock
            if ($gameSwitches.value(1)){
                var WoodenRing = [0,4,0,0];
            } else { 
                var WoodenRing = "Not Unlocked";
            }
    
            var shopItems = [
            [0,1,0,0],
            [0,2,0,0],
            [0,3,0,0],
            WoodenRing
           
            ];
            SceneManager.push(Scene_Shop);
            SceneManager.prepareNextScene(shopItems, false);
        }
     })();

    I just can't call for it's function, no matter what I do or try.

    I tried the following, where the first two options don't do anything at all, and the third simply just gives me the error "CallShop is not defined.

    http://prntscr.com/lkrfgr

    - I tried this in a completely new project, no other plugins active
    - Plugin is turned on etc

    What am I doing wrong? :(
  2. hi @MrB ,
    You should write it like this

    Code:
      Game_Interpreter.prototype.callShop = function () {
          if (SceneManager._scene.constructor.name !== 'Scene_Battle') {
           //Add item unlock
           if ($gameSwitches.value(1)){
               var WoodenRing = [0,4,0,0];
           } else {
               var WoodenRing = "Not Unlocked";
           }
    
           var shopItems = [
           [0,1,0,0],
           [0,2,0,0],
           [0,3,0,0],
           WoodenRing
       
           ];
           SceneManager.push(Scene_Shop);
           SceneManager.prepareNextScene(shopItems, false);
        }
        return true;
    }

    this.callShop();
  3. If you want to fix code as pic,
    Remove the block scope
    (function() {

    })();
  4. Thank you so much, it's working!

    I've read a bit about writing plugins, but it's all so confusing. So thank you a bunch!!
  5. You've just encountered your first context error.
    What "(function(){})()" does is contain all your plugin in a function so that variables can't leak to the global space.
    So if you want to do everything inside such a call you must graft your plugin to an already existing object accesible outside of the scope of that function.
    Or if you want your function to be global, you just remove it.

    In your initial example you were trying to call a function that wasn't available in the conext you called it in.
    Either you redefine it in the context you'll call it in like the second poster told you to, or you make it global.
  6. That makes a lot of sense actually. Thanks for explaining :)
  7. This thread is being closed, due to being solved. If for some reason you would like this thread re-opened, please report this post and leave a message why. Thank you.