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 oninitShould 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?
-
- 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 ;)