]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/util.qc
Merge branch 'master' into Mario/stats_eloranking
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / util.qc
index 183302b3a1e0460c246c9c1c8357edfbace43c53..7713679f3ce57a2cbaa1deb6cd9f663a3245e6d0 100644 (file)
@@ -217,7 +217,8 @@ void wordwrap_cb(string s, float l, void(string) callback)
 
        s = strzone(s);
        lleft = l;
-       for (i = 0;i < strlen(s);++i)
+       int len = strlen(s);
+       for (i = 0; i < len; ++i)
        {
                if (substring(s, i, 2) == "\\n")
                {
@@ -235,12 +236,12 @@ void wordwrap_cb(string s, float l, void(string) callback)
                        if (lleft > 0)
                        {
                                callback(" ");
-                               lleft = lleft - 1;
+                               --lleft;
                        }
                }
                else
                {
-                       for (j = i+1;j < strlen(s);++j)
+                       for (j = i+1; j < len; ++j)
                                //    ^^ this skips over the first character of a word, which
                                //       is ALWAYS part of the word
                                //       this is safe since if i+1 == strlen(s), i will become
@@ -268,7 +269,7 @@ void wordwrap_cb(string s, float l, void(string) callback)
                                lleft = l;
                        }
                        callback(substring(s, i, wlen));
-                       lleft = lleft - wlen;
+                       lleft -= wlen;
                        i = j - 1;
                }
        }
@@ -521,7 +522,7 @@ string fixPriorityList(string order, float from, float to, float subtract, float
                for(w = to; w >= from; --w)
                {
                        int wflags = Weapons_from(w).spawnflags;
-                       if((wflags & WEP_FLAG_HIDDEN) && (wflags & WEP_FLAG_MUTATORBLOCKED) && !(wflags & WEP_FLAG_NORMAL))
+                       if(wflags & WEP_FLAG_SPECIALATTACK)
                                continue;
                        for(i = 0; i < n; ++i)
                                if(stof(argv(i)) == w)
@@ -1298,11 +1299,19 @@ float matchacl(string acl, string str)
                if(s == t)
                {
                        r = d;
+                       break; // if we found a killing case, apply it! other settings may be allowed in the future, but this one is caught
                }
        }
        return r;
 }
 
+ERASEABLE
+void write_String_To_File(int fh, string str, bool alsoprint)
+{
+       fputs(fh, str);
+       if (alsoprint) LOG_INFO(str);
+}
+
 string get_model_datafilename(string m, float sk, string fil)
 {
        if(m)
@@ -1390,7 +1399,12 @@ float get_model_parameters(string m, float sk)
                                case "reserved":    get_model_parameters_species = SPECIES_RESERVED;    break;
                        }
                if(c == "sex")
+               {
+                       if (s == "Male")                                s = _("Male");
+                       else if (s == "Female")                 s = _("Female");
+                       else if (s == "Undisclosed")    s = _("Undisclosed");
                        get_model_parameters_sex = s;
+               }
                if(c == "weight")
                        get_model_parameters_weight = stof(s);
                if(c == "age")
@@ -1429,6 +1443,158 @@ float get_model_parameters(string m, float sk)
        return 1;
 }
 
+string translate_key(string key)
+{
+       if (prvm_language == "en") return key;
+
+       if (substring(key, 0, 1) == "<")
+       {
+               if (key == "<KEY NOT FOUND>") return _("<KEY NOT FOUND>");
+               if (key == "<UNKNOWN KEYNUM>") return _("<UNKNOWN KEYNUM>");
+       }
+
+       switch(key)
+       {
+               case "TAB":                             return _("TAB");
+               case "ENTER":                   return _("ENTER");
+               case "ESCAPE":                  return _("ESCAPE");
+               case "SPACE":                   return _("SPACE");
+
+               case "BACKSPACE":               return _("BACKSPACE");
+               case "UPARROW":                 return _("UPARROW");
+               case "DOWNARROW":               return _("DOWNARROW");
+               case "LEFTARROW":               return _("LEFTARROW");
+               case "RIGHTARROW":              return _("RIGHTARROW");
+
+               case "ALT":                             return _("ALT");
+               case "CTRL":                    return _("CTRL");
+               case "SHIFT":                   return _("SHIFT");
+
+               case "INS":                             return _("INS");
+               case "DEL":                             return _("DEL");
+               case "PGDN":                    return _("PGDN");
+               case "PGUP":                    return _("PGUP");
+               case "HOME":                    return _("HOME");
+               case "END":                             return _("END");
+
+               case "PAUSE":                   return _("PAUSE");
+
+               case "NUMLOCK":                 return _("NUMLOCK");
+               case "CAPSLOCK":                return _("CAPSLOCK");
+               case "SCROLLOCK":               return _("SCROLLOCK");
+
+               case "SEMICOLON":               return _("SEMICOLON");
+               case "TILDE":                   return _("TILDE");
+               case "BACKQUOTE":               return _("BACKQUOTE");
+               case "QUOTE":                   return _("QUOTE");
+               case "APOSTROPHE":              return _("APOSTROPHE");
+               case "BACKSLASH":               return _("BACKSLASH");
+       }
+
+       if (substring(key, 0, 1) == "F")
+       {
+               string subkey = substring(key, 1, -1);
+               if (IS_DIGIT(substring(key, 3, 1))) // check only first digit
+               {
+                       return sprintf(_("F%d"), stof(subkey));
+               }
+               // continue in case there is another key name starting with F
+       }
+
+       if (substring(key, 0, 3) == "KP_")
+       {
+               string subkey = substring(key, 3, -1);
+               if (IS_DIGIT(substring(key, 3, 1))) // check only first digit
+               {
+                       return sprintf(_("KP_%d"), stof(subkey));
+               }
+
+               switch(subkey)
+               {
+                       case "INS":                             return sprintf(_("KP_%s"), _("INS"));
+                       case "END":                             return sprintf(_("KP_%s"), _("END"));
+                       case "DOWNARROW":               return sprintf(_("KP_%s"), _("DOWNARROW"));
+                       case "PGDN":                    return sprintf(_("KP_%s"), _("PGDN"));
+                       case "LEFTARROW":               return sprintf(_("KP_%s"), _("LEFTARROW"));
+                       case "RIGHTARROW":              return sprintf(_("KP_%s"), _("RIGHTARROW"));
+                       case "HOME":                    return sprintf(_("KP_%s"), _("HOME"));
+                       case "UPARROW":                 return sprintf(_("KP_%s"), _("UPARROW"));
+                       case "PGUP":                    return sprintf(_("KP_%s"), _("PGUP"));
+                       case "PERIOD":                  return sprintf(_("KP_%s"), _("PERIOD"));
+                       case "DEL":                             return sprintf(_("KP_%s"), _("DEL"));
+                       case "DIVIDE":                  return sprintf(_("KP_%s"), _("DIVIDE"));
+                       case "SLASH":                   return sprintf(_("KP_%s"), _("SLASH"));
+                       case "MULTIPLY":                return sprintf(_("KP_%s"), _("MULTIPLY"));
+                       case "MINUS":                   return sprintf(_("KP_%s"), _("MINUS"));
+                       case "PLUS":                    return sprintf(_("KP_%s"), _("PLUS"));
+                       case "ENTER":                   return sprintf(_("KP_%s"), _("ENTER"));
+                       case "EQUALS":                  return sprintf(_("KP_%s"), _("EQUALS"));
+                       default:                                return key;
+               }
+       }
+
+       if (key == "PRINTSCREEN") return _("PRINTSCREEN");
+
+       if (substring(key, 0, 5) == "MOUSE")
+               return sprintf(_("MOUSE%d"), stof(substring(key, 5, -1)));
+
+       if (key == "MWHEELUP") return _("MWHEELUP");
+       if (key == "MWHEELDOWN") return _("MWHEELDOWN");
+
+       if (substring(key, 0,3) == "JOY")
+               return sprintf(_("JOY%d"), stof(substring(key, 3, -1)));
+
+       if (substring(key, 0,3) == "AUX")
+               return sprintf(_("AUX%d"), stof(substring(key, 3, -1)));
+
+       if (substring(key, 0, 4) == "X360_")
+       {
+               string subkey = substring(key, 4, -1);
+               switch(subkey)
+               {
+                       case "DPAD_UP":                                 return sprintf(_("X360_%s"), _("DPAD_UP"));
+                       case "DPAD_DOWN":                               return sprintf(_("X360_%s"), _("DPAD_DOWN"));
+                       case "DPAD_LEFT":                               return sprintf(_("X360_%s"), _("DPAD_LEFT"));
+                       case "DPAD_RIGHT":                              return sprintf(_("X360_%s"), _("DPAD_RIGHT"));
+                       case "START":                                   return sprintf(_("X360_%s"), _("START"));
+                       case "BACK":                                    return sprintf(_("X360_%s"), _("BACK"));
+                       case "LEFT_THUMB":                              return sprintf(_("X360_%s"), _("LEFT_THUMB"));
+                       case "RIGHT_THUMB":                             return sprintf(_("X360_%s"), _("RIGHT_THUMB"));
+                       case "LEFT_SHOULDER":                   return sprintf(_("X360_%s"), _("LEFT_SHOULDER"));
+                       case "RIGHT_SHOULDER":                  return sprintf(_("X360_%s"), _("RIGHT_SHOULDER"));
+                       case "LEFT_TRIGGER":                    return sprintf(_("X360_%s"), _("LEFT_TRIGGER"));
+                       case "RIGHT_TRIGGER":                   return sprintf(_("X360_%s"), _("RIGHT_TRIGGER"));
+                       case "LEFT_THUMB_UP":                   return sprintf(_("X360_%s"), _("LEFT_THUMB_UP"));
+                       case "LEFT_THUMB_DOWN":                 return sprintf(_("X360_%s"), _("LEFT_THUMB_DOWN"));
+                       case "LEFT_THUMB_LEFT":                 return sprintf(_("X360_%s"), _("LEFT_THUMB_LEFT"));
+                       case "LEFT_THUMB_RIGHT":                return sprintf(_("X360_%s"), _("LEFT_THUMB_RIGHT"));
+                       case "RIGHT_THUMB_UP":                  return sprintf(_("X360_%s"), _("RIGHT_THUMB_UP"));
+                       case "RIGHT_THUMB_DOWN":                return sprintf(_("X360_%s"), _("RIGHT_THUMB_DOWN"));
+                       case "RIGHT_THUMB_LEFT":                return sprintf(_("X360_%s"), _("RIGHT_THUMB_LEFT"));
+                       case "RIGHT_THUMB_RIGHT":               return sprintf(_("X360_%s"), _("RIGHT_THUMB_RIGHT"));
+                       default:                                                return key;
+               }
+       }
+
+       if (substring(key, 0, 4) == "JOY_")
+       {
+               string subkey = substring(key, 4, -1);
+               switch(subkey)
+               {
+                       case "UP":                      return sprintf(_("JOY_%s"), _("UP"));
+                       case "DOWN":            return sprintf(_("JOY_%s"), _("DOWN"));
+                       case "LEFT":            return sprintf(_("JOY_%s"), _("LEFT"));
+                       case "RIGHT":           return sprintf(_("JOY_%s"), _("RIGHT"));
+                       default:                        return key;
+               }
+       }
+
+       if (substring(key, 0, 8) == "MIDINOTE")
+               return sprintf(_("MIDINOTE%d"), stof(substring(key, 8, -1)));
+
+       return key;
+}
+
 // x-encoding (encoding as zero length invisible string)
 const string XENCODE_2  = "xX";
 const string XENCODE_22 = "0123456789abcdefABCDEF";