Serial Numbers



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 20/01/2010 at 13:07, xxxxxxxx wrote:

    Thanks spedler and Matthias for the info.  I will put it to good use as soon as I get home tonight.

    ~Shawn



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 20/01/2010 at 17:44, xxxxxxxx wrote:

    Okay so This is the code I have in my .cpp file now for the serial number..

      
    ////////////////////////////////////////////////////////////////////////////////////  
    //const ID_PLANET_OBJECT_SERIAL  = 1024924;  
        
    class PlanetXSerial : public SNHookClass  
    {  
    public:  
      String name;  
      
      PlanetXSerial()  
      {  
          name = GeLoadString(IDS_SERIAL_HOOK);  
          if(!name.Content())  
              name = "C++ SDK - Example Serial Hook";  
      }  
      
      virtual LONG SNCheck(const String &c4dsn,const String &sn,LONG regdate,LONG curdate)  
      {  
          return sn == String("123456789-abcdef") ? SN_OKAY : SN_WRONGNUMBER;  
      }  
      
      virtual const String& GetTitle()  
      {  
          return name;  
      }  
    };  
      
    PlanetXSerial *snhook = NULL;  
      
    Bool RegisterPlanetXSerial()  
    {  
      snhook = gNew PlanetXSerial;  
      if (!snhook->Register(450000241, SNFLAG_OWN))  
          return FALSE;  
      return TRUE;  
    }  
      
    void FreePlanetXSerial()  
    {  
      if (snhook)  
          gDelete(snhook);  
    }  
        
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////  
    

    My question is, what am I supposed to do to prompt the user to put in their serial number, and where do I determine the algorithm for the serial number.    When I finally do determine that,  I will of course not post it on this forum .  LOL

    Also, shouldn't I see another serial field when I go to the personalize dialog box with the code I have?

    Once again I am new to this whole part of it so any help you can offer would be greatly appreciated.

    ~Shawn



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 21/01/2010 at 01:23, xxxxxxxx wrote:

    Originally posted by xxxxxxxx

    Also, shouldn't I see another serial field when I go to the personalize dialog box with the code I have?

    Did you call RegisterPlanetXSerial() during C4DPL_INIT_SYS to register the plugin with Cinema?

    cheers,
    Matthias



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 21/01/2010 at 02:40, xxxxxxxx wrote:

    Yes, I did,
    Here's my main.cpp

      
    /////////////////////////////////////////////////////////////  
    // Planet  
      
    // Starts the plugin registration  
      
    #include "c4d.h"  
    #include <string.h>  
      
    // forward declarations  
    Bool RegisterPlanet(void);  
    Bool RegisterSun(void);  
    Bool RegisterPlanetXSerial();  
    void FreePlanetXSerial();  
      
    C4D_CrashHandler old_handler;  
      
    void SDKCrashHandler(CHAR *crashinfo)  
    {  
      // don't forget to call the original handler!!!  
      if (old_handler) (*old_handler)(crashinfo);  
    }  
      
    void EnhanceMainMenu(void)   
    {  
      // do this only if necessary - otherwise the user will end up with dozens of menus!  
      
      if (!(GeGetVersionType()&VERSION_CINEMA4D)) // only if C4D is loaded  
          return;  
      
      BaseContainer *bc = GetMenuResource(String("M_EDITOR"));  
      if (!bc) return;  
      
      // search for the most important menu entry. if present, the user has customized the settings  
      // -> don't add menu again  
      if (SearchMenuResource(bc,String("PLUGIN_CMD_1000472")))  
          return;   
      
      GeData *last = SearchPluginMenuResource();  
      
      BaseContainer sc;  
      sc.InsData(MENURESOURCE_SUBTITLE,String("SDK Test"));  
      sc.InsData(MENURESOURCE_COMMAND,String("IDM_NEU")); // add C4D's new scene command to menu  
      sc.InsData(MENURESOURCE_SEPERATOR,TRUE);  
      sc.InsData(MENURESOURCE_COMMAND,String("PLUGIN_CMD_1000472")); // add ActiveObject dialog to menu  
        
      if (last)  
          bc->InsDataAfter(MENURESOURCE_STRING,sc,last);  
      else // user killed plugin menu - add as last overall entry  
          bc->InsData(MENURESOURCE_STRING,sc);  
    }  
      
    Bool PluginStart(void)  
    {  
      // example of installing a crashhandler  
      old_handler = C4DOS.CrashHandler; // backup the original handler (must be called!)  
      C4DOS.CrashHandler = SDKCrashHandler; // insert the own handler  
        
      // Planet Object  
      if (!RegisterPlanet()) return FALSE;  
      // Sun Object  
      if (!RegisterSun()) return FALSE;  
      
      return TRUE;  
    }  
      
    void PluginEnd(void)  
    {  
    FreePlanetXSerial();  
    }  
      
      
    Bool PluginMessage(LONG id, void *data)  
    {  
      //use the following lines to set a plugin priority  
      //  
      switch (id)  
      {  
          case C4DPL_INIT_SYS:  
              if (!resource.Init()) return FALSE; // don't start plugin without resource  
              return TRUE;  
              if (!RegisterPlanetXSerial()) return FALSE;  
      
          case C4DPL_ENDACTIVITY:  
              FreePlanetXSerial(); return TRUE;  
      
          case C4DMSG_PRIORITY:   
              return TRUE;  
      
          case C4DPL_BUILDMENU:  
              //EnhanceMainMenu();       
              break;  
                
          case C4DPL_COMMANDLINEARGS:  
              {  
                  C4DPL_CommandLineArgs *args = (C4DPL_CommandLineArgs* )data;  
                  LONG i;  
      
                  for (i=0;i<args->argc;i++)  
                  {  
                      if (!args->argv[i]) continue;  
                        
                      if (!strcmp(args->argv[i],"--help") || !strcmp(args->argv[i],"-help"))  
                      {  
                          // do not clear the entry so that other plugins can make their output!!!  
                          GePrint("\x01-SDK is here :-)");  
                      }  
                      else if (!strcmp(args->argv[i],"-SDK"))  
                      {  
                          args->argv[i] = NULL;  
                          GePrint("\x01-SDK executed:-)");  
                      }  
                      else if (!strcmp(args->argv[i],"-plugincrash"))  
                      {  
                          args->argv[i] = NULL;  
                          *((LONG* )0) = 1234;  
                      }  
                  }  
              }  
              break;  
      
          case C4DPL_EDITIMAGE:  
              {  
                  GePrint("Something Changed");  
                  C4DPL_EditImage *editimage = (C4DPL_EditImage* )data;  
                  if (!data) break;  
                  if (editimage->return_processed) break;  
                  GePrint("C4DSDK - Edit Image Hook: "+editimage->imagefn->GetString());  
                  // editimage->return_processed = TRUE; if image was processed  
              }  
              return FALSE;  
      }  
      
      return FALSE;  
    }  
      
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 21/01/2010 at 03:34, xxxxxxxx wrote:

    Instead of

      
    ...  
    case C4DPL_INIT_SYS:  
      if (!resource.Init()) return FALSE; // don't start plugin without resource  
      return TRUE;  
      if (!RegisterPlanetXSerial()) return FALSE;  
    ...  
    

    do this

      
    ...  
    case C4DPL_INIT_SYS:  
      if (!resource.Init()) return FALSE; // don't start plugin without resource  
      if (!RegisterPlanetXSerial()) return FALSE;  
      return TRUE;  
    ...  
    

    Otherwise RegisterPlanetXSerial() will never be called.

    cheers,
    Matthias



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 21/01/2010 at 03:36, xxxxxxxx wrote:

    LOL...  woops.  thanks Matthias



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 21/01/2010 at 17:56, xxxxxxxx wrote:

    okay so here's the code I am using right now.   Just the code to get me started.

      
    //SERIAL CODE/////////////////////////////////  
    //////////////////////////////////////////////  
    #define ID_PLANET_OBJECT_SERIAL  = 1024924  
        
    class PlanetXSerial : public SNHookClass  
    {  
    public:  
      String name;  
      
      PlanetXSerial()  
      {  
          name = GeLoadString(IDS_SERIAL_HOOK);  
          if(!name.Content())  
              name = "Planet X Generator";  
      }  
      
      virtual LONG SNCheck(const String &c4dsn,const String &sn,LONG regdate,LONG curdate)  
      {  
          return sn == String(name) ? SN_OKAY : SN_WRONGNUMBER;  
            
      }  
      
      virtual const String& GetTitle()  
      {  
          return name;  
      }  
    };  
      
    PlanetXSerial *snhook = NULL;  
      
    Bool RegisterPlanetXSerial()  
    {  
      snhook = gNew PlanetXSerial;  
      if (!snhook->Register(450000241, SNFLAG_OWN))  
          return FALSE;  
      return TRUE;  
    }  
      
    void FreePlanetXSerial()  
    {  
      if (snhook)  
          gDelete(snhook);  
    }  
        
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////  
    

    Here's the result I get when I look in the personalize dialog box. 
    For some reason, it is saying "StrNotFound"  Where do I set the name.   And,  where do I check to see if the serial number they entered matches what they should enter?

    Thanks,  Shawn

    _<_img src="http://www.c4davenue.com/mag/wrong.jpg" height="291" width="703" border="0" /_>_



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 22/01/2010 at 08:50, xxxxxxxx wrote:

    Any thoughts on this?



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 23/01/2010 at 08:59, xxxxxxxx wrote:

    figured it out..  Thanks,

    ~Shawn



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 23/01/2010 at 09:26, xxxxxxxx wrote:

    I am trying to use StringToLong()   to convert the serial number to a long so that I can perform an algorithm on it.

    For some reason, even though I have included c4d_string.h,   I am getting the error.

    'StringToLong': identifier not found

    Can anyone tell me why this is?

    ~Shawn



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 23/01/2010 at 19:56, xxxxxxxx wrote:

    lol..  figured this one out too..    had to do

    LONG lngMyLONG =  myString.StringToLong(&err);


Log in to reply