Simple copy protection done right :)



  • I followed the directions exactly (I think) but i keep getting this message when I compile..

    Serials.js (2): Found ':' when expecting ';' {SW50ZXJmYWNlfFNlcmlhbHMuanN8MTF8Mnw5}

    anyone know why?



  • @BWSounds Yep I know! because ':' has been found when ';' was expected on line 2 in Serial.js… This one was hard 😛



  • @ustk ohh duh, the js file... man I feel slow ☹ 🤔 😂



  • @BWSounds In fact there seems to be something weird, because ':' is at the right place, wich means a ';' might be missing somewhere else before serials is called…



  • Ok, new problem (which prob. is a simple fix) but iv'e been compiling ALL DAY and my codes work in hise but once i compile none are working in the vsti.

    I seen someone have the same issue but the response was deleted, so im guessing the fix is easy... I just cant figure it out. Any help would be greatly appreciated.



  • This post is deleted!


  • i updated to the latest commit, still having the same issue, so it’s not that.



  • 1 add the auth. Script to your oninit
    2 add generator script to create serial.js
    3 remove generator script
    4 copy new script from root folder, add to script sub folder
    5 add the const var text at the beginning, “;” at the end
    6 oh and add the components from the auth. Script
    7 and add “include serial.js” to your oninit

    Should work right?? What am I missing because it’s not working for me on my compiled vsti



  • Does anyone have the copy protection working on a compiled vsti?



  • @BWSounds Yes, it's working on my compiled au, vst3 and vst plugins for mac
    (I have only tried then on the Mac platform)
    I use the "Global mute" version, you can use them for 20 min then it gets silent.



  • @ulrik thanks for responding. I’ll try on Mac to see if works then. It’s not working for pc or at least Not for me.



  • @BWSounds said in Simple copy protection done right 🙂:

    @ulrik thanks for responding. I’ll try on Mac to see if works then. It’s not working for pc or at least Not for me.

    its working fine on windows here..



  • Sorry to bring this post back up but... I finally got the simple copy protection to work. (Was pretty simple)

    But I updated to the latest commit (needed to) and it’s not working for me. I did the same thing I did to get it to work on the earlier commit (February) but it’s a no go.

    Any one updated to any commit in august and this still works for them?



  • @BWSounds I'm using the script node from 19/8 and it's working here on mac



  • @ulrik wow... ok 😔



  • Hey guys,
    do you have any tips or tricks on how to automatically populate the Serials.js file with a large number of serials? Since they have to be in a particular format between " " and with , at the end of each line, this will be quite a tedious work to do manually by copy+paste.
    What's your solution?



  • @gorangrooves The "Serial Generator" does this for you. Just uncomment the last line to run this function.

    /** This namespace contains the logic to create a new list of serials. 
        
        Feel free to remove this when not needed. */
    namespace SerialGenerator
    {
        inline function getNewRandomChar()
        {
            // ASCII, fuck yeah!
            local a = String.fromCharCode(Math.randInt(65, 90));
            local b = String.fromCharCode(Math.randInt(48, 57));
        
            return Math.random() > 0.5 ? a : b;
        }
    
        inline function createNewSerial()
        {
            local s = "";
        
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += "-";
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += "-";
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += "-";
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
        
            return s;
        }
    
        const var NUM_SERIALS = 1000;
    
        inline function createNewSerials()
        {
            local d = [];
            d.reserve(NUM_SERIALS);
        
            for(i = 0; i < NUM_SERIALS; i++)
            {
                d.push(createNewSerial());
            }
        
            local obj = { "Data": d };
        
            Engine.dumpAsJSON(obj, "../Serials.js");
        }
    
        // Uncomment this line to regenerate serials.
        //createNewSerials();
    }


  • @dustbro Thanks very much. I will give this a try.

    @orange Have you managed to implement the bundle serials solution and if so, would you mind sharing the working code here, please?



  • @gorangrooves

    • Prepare a bundle serial list .js file (named "List_Main_Bundle_Serials.js" here) like this - I am using 5 simple serial numbers here:
    const var BundlePackSerials = {
      "Data": [
        "BNDL_ABCDEF1",
        "BNDL_ABCDEF2",
        "BNDL_ABCDEF3",
        "BNDL_ABCDEF4",
        "BNDL_ABCDEF5"
      ]
    };
    
    
    • Prepare a single product serial list .js file (named "List_Single_Product_Serials.js" here) like this:
    const var SingleProductSerials = {
      "Data": [
        "SNGL_ABCDEF1",
        "SNGL_ABCDEF2",
        "SNGL_ABCDEF3",
        "SNGL_ABCDEF4",
        "SNGL_ABCDEF5"
      ]
    };
    
    

    Then create an "Authorization.js" file and also below UI components. Also don't forget to include this "Authorization.js" file in the interface script. In "Authorization.js" script:

    • SerialInput is an editable label for typing the serial in it.
    • SubmitButton is a button for submitting the serial
    • Description is a label for the information of the serial validation status.

    For the conditions, I've used "if", "else if" and "else" respectively.

    {
    
    include("List_Main_Bundle_Serials.js");
    include("List_Single_Product_Serials.js");
    
    
        const var SerialInput = Content.getComponent("SerialInput");
        const var SubmitButton = Content.getComponent("SubmitButton");
        const var Description = Content.getComponent("Description");
        
        
        /** Checks if the serial input is valid and stores the result if successful. */
        inline function onSubmitButtonControl(component, value)
        {
          if(!value) 
                return;
        
            local v = SerialInput.getValue();
            Console.print(v);
    	
             
                      
        // Checks if it's in the Bundle Serials List
        
            if(BundlePackSerials.Data.contains(v))
                {
                    Console.print("Serial number found");
            
                    local data = 
                    {
                        "Serial": v
                    };
    
                    Description.set("text", "YOUR LICENSE HAS BEEN SUCCESSFULLY REGISTERED");
                   
                  // Saves as Bundle_RegistrationInfo.js 
                    Engine.dumpAsJSON(data, "../Bundle_RegistrationInfo.js");
                
                    setValidLicense(true);
                }      
    
                
       // Checks if it's in the Single Product Serials List
        
            else if(SingleProductSerials.Data.contains(v))
                {
                    Console.print("Serial number found");
            
                    local data = 
                    {
                        "Serial": v
                    };
    
                    Description.set("text", "YOUR LICENSE HAS BEEN SUCCESSFULLY REGISTERED");
                   
                  // Saves as Bundle_RegistrationInfo.js 
                    Engine.dumpAsJSON(data, "../ProductA_RegistrationInfo.js");
                
                    setValidLicense(true);
                }      
            
            else
                {
                    Console.print("Invalid serial number");
                    Description.set("text", "INVALID KEY THAT DOES NOT MATCH WITH YOUR LICENSE");
                    setValidLicense(false);
                }
        };
    
        Content.getComponent("SubmitButton").setControlCallback(onSubmitButtonControl);
    
    
    
       inline function setValidLicense(isValid)
        {
            // Do whatever you want to do here. 
             
            if(isValid)
            {
    
    
            }
           
            
            else
            {
    
                          
            }
        }
    
    
    
    
        inline function checkOnLoad()
        {
            SerialInput.set("text", "");
            
            // Load the serial from the stored files
             
            local pData_MainBundle = Engine.loadFromJSON("../Bundle_RegistrationInfo.js");
            local pData_SingleProduct = Engine.loadFromJSON("../ProductA_ProductRegistrationInfo.js");
            
            Console.print("Checking serial");
        
           
            
        
        
        // Bundle serials  
        
          if(pData_MainBundle)    
            {
                local v = pData_MainBundle.Serial;
                Console.print("Restored serial: " + v);
            
               if(BundlePackSerials.Data.contains(v))
                {
                    setValidLicense(true);
                    return;
                }      
            }
    
            
       
        // Single Product serials  
        
          if(pData_SingleProduct)    
            {
                local v = pData_SingleProduct.Serial;
                Console.print("Restored serial: " + v);
            
               if(SingleProductSerials.Data.contains(v))
                {
                    setValidLicense(true);
                    return;
                }      
            }
           
    
          setValidLicense(false);
      }    
        
    // Call this on startup
        checkOnLoad();
    
    }
    

    Cheers 😉



  • @orange Thanks a lot for this. I really appreciate it! 👏


Log in to reply
 

11
Online

813
Users

3.0k
Topics

25.5k
Posts