]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/weapons/config.qc
Fix HMG
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / weapons / config.qc
index 454ee22a2396b93458a4461c72d6561dd9d1c711..2537022f6ac55bba9cff6d12570e68ea0f12b3f9 100644 (file)
 //  Balance Config Generator
 // ==========================
 
-void Dump_Weapon_Settings(float fh, float alsoprint)
+void W_Config_Queue_Swap(float root, float child, entity pass)
 {
-       float i;
-       for(i = WEP_FIRST; i <= WEP_LAST; ++i)
-       {
-               WEP_ACTION(i, WR_CONFIG)
-       }
-
-                       
-       #define WEP_BAL_WRITE(a) { \
-               fputs(fh, a); \
-               if(alsoprint) { print(a); } }
-       #define WEP_BAL_WRITE_ENTITY(description) { \
-               notif_msg = \
-                       sprintf( \
-                               "seta notification_%s \"%d\" \"%s\"\n", \
-                               e.nent_name, e.nent_default, description \
-                       ); \
-               WEP_BAL_WRITE(notif_msg) }
-       #define WEP_BAL_WRITE_HARDCODED(cvar,default,description) { \
-               notif_msg = \
-                       sprintf( \
-                               "seta notification_%s \"%s\" \"%s\"\n", \
-                               cvar, default, description \
-                       ); \
-               WEP_BAL_WRITE(notif_msg) }
-
-       string notif_msg;
-       float i;
-       entity e;
+       string oldroot = wep_config_queue[root];
+       wep_config_queue[root] = wep_config_queue[child];
+       wep_config_queue[child] = oldroot;
+}
 
-       NOTIF_WRITE(sprintf("\n// MSG_ANNCE notifications (count = %d):\n", NOTIF_ANNCE_COUNT));
-       for(i = 1; i <= NOTIF_ANNCE_COUNT; ++i)
-       {
-               e = Get_Notif_Ent(MSG_ANNCE, i);
-               if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
-               
-               NOTIF_WRITE_ENTITY(
-                       "Notification control cvar: 0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled)"
-               );
-       }
+float W_Config_Queue_Compare(float root, float child, entity pass)
+{
+       return strcmp(wep_config_queue[root], wep_config_queue[child]);
+}
 
-       NOTIF_WRITE(sprintf("\n// MSG_INFO notifications (count = %d):\n", NOTIF_INFO_COUNT));
-       for(i = 1; i <= NOTIF_INFO_COUNT; ++i)
+void Dump_Weapon_Settings(void)
+{
+       float i, x, totalsettings = 0;
+       for(i = WEP_FIRST; i <= WEP_LAST; ++i)
        {
-               e = Get_Notif_Ent(MSG_INFO, i);
-               if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
-               
-               NOTIF_WRITE_ENTITY(
-                       "Notification control cvar: 0 = off, 1 = print to console, "
-                       "2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-               );
-       }
+               // step 1: clear the queue
+               WEP_CONFIG_COUNT = 0;
+               for(x = 0; x <= MAX_WEP_CONFIG; ++x)
+                       { wep_config_queue[x] = string_null; }
 
-       NOTIF_WRITE(sprintf("\n// MSG_CENTER notifications (count = %d):\n", NOTIF_CENTER_COUNT));
-       for(i = 1; i <= NOTIF_CENTER_COUNT; ++i)
-       {
-               e = Get_Notif_Ent(MSG_CENTER, i);
-               if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
-               
-               NOTIF_WRITE_ENTITY(
-                       "Notification control cvar: 0 = off, 1 = centerprint"
-               );
-       }
+               // step 2: build new queue
+               WEP_ACTION(i, WR_CONFIG);
 
-       NOTIF_WRITE(sprintf("\n// MSG_MULTI notifications (count = %d):\n", NOTIF_MULTI_COUNT));
-       for(i = 1; i <= NOTIF_MULTI_COUNT; ++i)
-       {
-               e = Get_Notif_Ent(MSG_MULTI, i);
-               if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
+               // step 3: sort queue
+               heapsort(WEP_CONFIG_COUNT, W_Config_Queue_Swap, W_Config_Queue_Compare, world);
                
-               NOTIF_WRITE_ENTITY(
-                       "Notification control cvar: 0 = off, 1 = trigger subcalls"
-               );
+               // step 4: write queue
+               WEP_CONFIG_WRITETOFILE(sprintf(
+                       "// {{{ #%d: %s%s\n",
+                       i,
+                       WEP_NAME(i),
+                       (((get_weaponinfo(i)).spawnflags & WEP_FLAG_MUTATORBLOCKED) ? " (MUTATOR WEAPON)" : "")
+               ))
+               for(x = 0; x <= WEP_CONFIG_COUNT; ++x) { WEP_CONFIG_WRITETOFILE(wep_config_queue[x]) }
+               WEP_CONFIG_WRITETOFILE("// }}}\n")
+
+               // step 5: debug info
+               print(sprintf("#%d: %s: %d settings...\n", i, WEP_NAME(i), WEP_CONFIG_COUNT));
+               totalsettings += WEP_CONFIG_COUNT;
        }
 
-       // edit these to match whichever cvars are used for specific notification options
-       NOTIF_WRITE("\n// HARD CODED notification variables:\n");
-       
-       NOTIF_WRITE_HARDCODED(
-               "allow_chatboxprint", "1",
-               "Allow notifications to be printed to chat box by setting notification cvar to 2 "
-               "(You can also set this cvar to 2 to force ALL notifications to be printed to the chatbox)"
-       );
+       // clear queue now that we're finished
+       WEP_CONFIG_COUNT = 0;
+       for(x = 0; x <= MAX_WEP_CONFIG; ++x)
+               { wep_config_queue[x] = string_null; }
 
-       NOTIF_WRITE(sprintf(
-               strcat(
-                       "\n// Notification counts (total = %d): ",
-                       "MSG_ANNCE = %d, MSG_INFO = %d, MSG_CENTER = %d, MSG_MULTI = %d\n"
-               ),
-               (
-                       NOTIF_ANNCE_COUNT +
-                       NOTIF_INFO_COUNT +
-                       NOTIF_CENTER_COUNT +
-                       NOTIF_MULTI_COUNT
-               ),
-               NOTIF_ANNCE_COUNT,
-               NOTIF_INFO_COUNT,
-               NOTIF_CENTER_COUNT,
-               NOTIF_MULTI_COUNT
-       ));
-       
-       return;
-       #undef NOTIF_WRITE_HARDCODED
-       #undef NOTIF_WRITE_ENTITY
-       #undef NOTIF_WRITE
+       // extra information
+       print(sprintf("Totals: %d weapons, %d settings\n", (i - 1), totalsettings));
 }