]> jfr.im git - irc/quakenet/newserv.git/commitdiff
ACHIEVEMENTS: Big update
authorsplidge <redacted>
Sat, 27 Mar 2010 17:53:14 +0000 (17:53 +0000)
committersplidge <redacted>
Sat, 27 Mar 2010 17:53:14 +0000 (17:53 +0000)
Some of these changes are actually included in the previous partial commits.

* Added title system
  - First title you unlock is automatically selected
  - Q command "title" lists available titles and lets you change preference
  - After April 1 is over all titles are automatically removed
* Added timekeeping system
  - Nothing works until April 1
  - On April 1, all achievements and titles are enabled for everyone
  - After April 1, titles are disabled.  Achievements are only enabled for
    users with +c set.  Channel announcements are only enabled for channels
    with +h set (couldn't use same flag sadly).
    - These flags cannot be set before April 1.
  - All commands are flagged appropriately and will automatically disable
    and enable according to the above conditions.
* Added channel announcements
  - Announcements in all channels that all account users are known in.
  - Announcements only happen for achievements worth 30 or more points.
  - After April 1 +h must be set in chanflags to see announcements.
  - #achievements is exempt from most of these restrictions - any user in
    #achievements will have their achievements announced if they are worth
    30 or more points.
* Updated external achievements.  Achievements added for triviabot and snailbot.
* Added scheduled saving of achievements database.  Also saves old file
  before saving.

--HG--
branch : achievements

chanserv/chancmds/chanflags.c
chanserv/chanserv.h
chanserv/chanserv_flags.c
chanserv/chanserv_messages.h
chanserv/chanservstdcmds.c
chanserv/usercmds/userflags.c

index 0e66e689ad2551260ad7e6692f3792b50afdbbaf..ae0e5befb1dae493a4725ce0fb7a39200f9ef92d 100644 (file)
@@ -28,7 +28,7 @@
  * CMDHELP:                command must be used instead.
  * CMDHELP:  +g AUTOVOICE  Automatically voices any user who has voice access when they join
  * CMDHELP:                the channel.  Same effect as giving all voices the +g chanlev flag.
- * CMDHELP:  +h ACH'MENTS  Display achievement announcements in channel.
+ * DISHELP:  +h ACH'MENTS  Display achievement announcements in channel.
  * CMDHELP:  +j JOINED     Causes Q to remain on the channel.  Cannot be removed.
  * CMDHELP:  +k KNOWNONLY  Any user who joins the channel who is not known (+k) will be kicked.  
  * CMDHELP:                Unless channel mode +i is set they will be banned as well.
@@ -82,6 +82,12 @@ int csc_dochanflags(void *source, int cargc, char **cargv) {
 
     oldflags=rcp->flags;
     changemask=QCFLAG_USERCONTROL;
+    
+    /* Disable achievements flag before April 1 */
+    if (time(NULL) < ACHIEVEMENTS_START)
+      changemask &= ~QCFLAG_ACHIEVEMENTS;
+    /* Developer override! */  
     if (UIsDev(rup)) {
       changemask=QCFLAG_ALL;
     }
index e8dd90c62e6d33513213bb43edb3cab3c9cf8bb8..8babf6f00657c1992fd2f0cdcf30bfa3ceec1703 100644 (file)
 /* Achievements: Nothing before ACHIEVEMENTS_START
  * opt-in only after ACHIEVEMENTS_END
  * Titles are valid only between ACHIEVEMENTS_START and ACHIEVEMENTS_END */
-#define ACHIEVEMENTS_START      1270076400
-#define ACHIEVEMENTS_END        1270162800
+
+//#define ACH_TEST_APRIL1
+
+#ifdef ACH_TEST_APRIL1 
+
+#define ACHIEVEMENTS_START      1269702917
+#define ACHIEVEMENTS_END       1270162800
+
+#elif defined(ACH_TEST_POSTAPRIL1)
+
+#define ACHIEVEMENTS_START     0
+#define ACHIEVEMENTS_END       1269702917
+
+#else
+
+#define ACHIEVEMENTS_START     1270076400
+#define ACHIEVEMENTS_END       1270162800
+
+#endif
 
 /* Mini-hash of known users on channels to make lookups faster;
  * how big do we make it?  */
                               QCFLAG_PROTECT|QCFLAG_TOPICSAVE|QCFLAG_VOICEALL| \
                               QCFLAG_WELCOME|QCFLAG_KNOWNONLY|QCFLAG_ACHIEVEMENTS )
 
-#define   QCFLAG_ALL          0x7fff
+#define   QCFLAG_ALL          0xffff
 
 
 /* Channel user ("chanlev") flags */
index 6c5551269df46b8823c7f303c756ed50f5607a96..b67d6b5e271b875d0dec383cedc077b48f6139db 100644 (file)
@@ -9,6 +9,7 @@ const flag rcflags[] = {
   { 'e', QCFLAG_ENFORCE },
   { 'f', QCFLAG_FORCETOPIC },
   { 'g', QCFLAG_AUTOVOICE },
+  { 'h', QCFLAG_ACHIEVEMENTS },
   { 'i', QCFLAG_INFO },
   { 'j', QCFLAG_JOINED },
   { 'k', QCFLAG_KNOWNONLY },
@@ -42,6 +43,7 @@ const flag rcuflags[] = {
 
 const flag ruflags[] = {
   { 'a',  QUFLAG_ADMIN },
+  { 'c',  QUFLAG_ACHIEVEMENTS },
   { 'd',  QUFLAG_DEV },
   { 'D',  QUFLAG_CLEANUPEXEMPT },
   { 'g',  QUFLAG_GLINE },
index a3d7d36b78b4ea98b1d67d54266b5d72713dd4b7..91b7a069332a278ae798207c350c23f6c28cde00 100644 (file)
@@ -236,6 +236,11 @@ BeginMessages() {
   msg(QM_ACHIEVEMENTCOMPARERESULT,"End of list.  User $0 is ahead by $1 points!", "sd"),
   msg(QM_FEATOFSTRENGTHUNLOCKED,"FEAT OF STRENGTH: $0", "s"),
   msg(QM_ACHCHANNELHEADER,"Achievement points for users on $0:\n  #  Nick            Username        Points","s"),
+  msg(QM_TITLEUNLOCKED,"TITLE UNLOCKED: $0", "s"),
+  msg(QM_NOTITLES,"You have not unlocked any titles.",""),
+  msg(QM_TITLEHEADER,"Available titles:\n  #  Title",""),
+  msg(QM_INVALIDTITLE,"Invalid title ID.",""),
+  msg(QM_TITLETOOFAST,"You have already changed your title recently.  Please wait a while and try again.",""),
 } 
 EndMessages()
 #endif
index 168b4823e3a822db0fb613eb53902575aab9a6fd..b1b9d351b8a7c36ca1ed594e6dd16efd2981695a 100644 (file)
@@ -188,7 +188,7 @@ int cs_doshowcommands(void *source, int cargc, char **cargv) {
       if (time(NULL) < ACHIEVEMENTS_START)
         continue;
       
-      if ((time(NULL) > 1270162800) && 
+      if ((time(NULL) > ACHIEVEMENTS_END) && 
         !UIsAchievements(rup))
         continue;
     }
index 9702143323aec955f9871cb570a3db3f656b097f..8792ded87fc1e9d5a0d7623b23c6a7de0dcc4ff7 100644 (file)
@@ -11,8 +11,8 @@
  * CMDHELP: Changes your current user flags, where:
  * CMDHELP: flags - changes to apply, in the usual flag letters preceded by +/- format.
  * CMDHELP: Valid user flags are:
- * CMDHELP:  +c ACH'MENTS - enables achievements system - allows use of achievement commands
- * CMDHELP:                 and sends achievement messages.
+ * DISHELP:  +c ACH'MENTS - enables achievements system - allows use of achievement commands
+ * DISHELP:                 and sends achievement messages.
  * CMDHELP:  +n NOTICE    - causes the bot to sent you NOTICEs.  If this flag is not set the
  * CMDHELP:                 bot will communicate using PRIVMSG.
  */
@@ -25,7 +25,6 @@
 int csu_douserflags(void *source, int cargc, char **cargv) {
   nick *sender=source;
   reguser *rup=getreguserfromnick(sender), *target;
-  authname *anp;
   int arg=0, wasorisoper;
   flag_t flagmask, changemask, oldflags;
   char flagbuf[30];
@@ -80,6 +79,10 @@ int csu_douserflags(void *source, int cargc, char **cargv) {
     if (UIsDev(rup))
       changemask=QUFLAG_ALL;
     
+    if (time(NULL) > ACHIEVEMENTS_START) {
+      changemask |= QUFLAG_ACHIEVEMENTS;
+    }
+    
     wasorisoper = UHasOperPriv(target);
     setflags(&target->flags, changemask, cargv[arg], ruflags, REJECT_NONE);
     wasorisoper |= UHasOperPriv(target);
@@ -92,7 +95,7 @@ int csu_douserflags(void *source, int cargc, char **cargv) {
     cs_log(sender,"USERFLAGS #%s %s (%s -> %s)",target->username,cargv[arg],flagbuf,printflags(target->flags, ruflags));
 
     /* only warn about interesting changes */
-    if((target->flags ^ oldflags) & ~(QUFLAG_NOTICE | QUFLAG_INFO | QUFLAG_TRUST)) {
+    if((target->flags ^ oldflags) & ~(QUFLAG_NOTICE | QUFLAG_INFO | QUFLAG_TRUST | QUFLAG_ACHIEVEMENTS)) {
       chanservwallmessage("%s (%s) just used USERFLAGS on %s %s (%s -> %s)",sender->nick,rup->username,target->username,cargv[arg],flagbuf,printflags(target->flags,ruflags));
 
 #ifdef AUTHGATE_WARNINGS
@@ -113,7 +116,7 @@ int csu_douserflags(void *source, int cargc, char **cargv) {
   if (cs_privcheck(QPRIV_VIEWUSERFLAGS, sender))
     flagmask=QUFLAG_ALL;
   else
-    flagmask=QUFLAG_INFO | QUFLAG_NOTICE | QUFLAG_OPER | QUFLAG_HELPER | QUFLAG_DEV | QUFLAG_ADMIN | QUFLAG_STAFF;
+    flagmask=QUFLAG_INFO | QUFLAG_NOTICE | QUFLAG_OPER | QUFLAG_HELPER | QUFLAG_DEV | QUFLAG_ADMIN | QUFLAG_STAFF | QUFLAG_ACHIEVEMENTS;
   
   chanservstdmessage(sender, QM_CURUSERFLAGS, target->username, printflagsornone(target->flags & flagmask, ruflags));