return sprintf("%.*f", decimals, number);
}
-float time;
vector colormapPaletteColor(float c, float isPants)
{
switch(c)
}
}
-vector healtharmor_maxdamage(float h, float a, float armorblock)
+#ifndef MENUQC
+vector healtharmor_maxdamage(float h, float a, float armorblock, float deathtype)
{
// NOTE: we'll always choose the SMALLER value...
float healthdamage, armordamage, armorideal;
+ if (deathtype == DEATH_DROWN) // Why should armor help here...
+ armorblock = 0;
vector v;
healthdamage = (h - 1) / (1 - armorblock); // damage we can take if we could use more health
armordamage = a + (h - 1); // damage we can take if we could use more armor
return v;
}
-vector healtharmor_applydamage(float a, float armorblock, float damage)
+vector healtharmor_applydamage(float a, float armorblock, float deathtype, float damage)
{
vector v;
+ if (deathtype == DEATH_DROWN) // Why should armor help here...
+ armorblock = 0;
v_y = bound(0, damage * armorblock, a); // save
v_x = bound(0, damage - v_y, damage); // take
v_z = 0;
return v;
}
+#endif
string getcurrentmod()
{
v += ReadByte(); // note: this is unsigned
return v;
}
+vector ReadInt48_t()
+{
+ vector v;
+ v_x = ReadInt24_t();
+ v_y = ReadInt24_t();
+ v_z = 0;
+ return v;
+}
+vector ReadInt72_t()
+{
+ vector v;
+ v_x = ReadInt24_t();
+ v_y = ReadInt24_t();
+ v_z = ReadInt24_t();
+ return v;
+}
#else
void WriteInt24_t(float dst, float val)
{
WriteShort(dst, (v = floor(val / 256)));
WriteByte(dst, val - v * 256); // 0..255
}
+void WriteInt48_t(float dst, vector val)
+{
+ WriteInt24_t(dst, val_x);
+ WriteInt24_t(dst, val_y);
+}
+void WriteInt72_t(float dst, vector val)
+{
+ WriteInt24_t(dst, val_x);
+ WriteInt24_t(dst, val_y);
+ WriteInt24_t(dst, val_z);
+}
#endif
#endif
float lowestbit(float f)
{
- f &~= f * 2;
- f &~= f * 4;
- f &~= f * 16;
- f &~= f * 256;
- f &~= f * 65536;
+ f &= ~(f * 2);
+ f &= ~(f * 4);
+ f &= ~(f * 16);
+ f &= ~(f * 256);
+ f &= ~(f * 65536);
return f;
}
queue_start.FindConnectedComponent_processing = 0;
}
-float Count_Proper_Strings(string improper, string...count)
-{
- float i, total = 0;
- string tmp;
-
- for(i = 0; i < count; ++i)
- {
- tmp = ...(i, string);
- if((tmp) && (tmp != improper)) { ++total; }
- }
-
- return total;
-}
-
-float Count_Proper_Floats(float improper, float...count)
-{
- float i, total = 0;
-
- for(i = 0; i < count; ++i)
- {
- if(...(i, float) != improper) { ++total; }
- }
-
- return total;
-}
-
// todo: this sucks, lets find a better way to do backtraces?
#ifndef MENUQC
void backtrace(string msg)
}
#endif
-string count_ordinal(float interval)
-{
- // This function is designed primarily for the English language, it's impossible
- // to accomodate all languages unless we do a specific function for each one...
- // and since that's not technically feasible/practical, this is all we've got folks.
-
- // Basically, it just allows you to represent a number or count in different ways
- // depending on the number... like, with count_ordinal you can provide integers
- // and retrieve 1st, 2nd, 3rd, nth ordinal numbers in a clean and simple way.
- if(floor((mod(interval, 100))/10) * 10 != 10) // examples: 12th, 111th, 213th will not execute this block
- {
- // otherwise, check normally for 1st,2nd,3rd insertions
- switch(mod(interval, 10))
- {
- case 1: return sprintf(_("%dst"), interval);
- case 2: return sprintf(_("%dnd"), interval);
- case 3: return sprintf(_("%drd"), interval);
- default: return sprintf(_("%dth"), interval);
- }
- }
- else { return sprintf(_("%dth"), interval); }
-
- return "";
-}
-
-string count_fill(float interval, string zeroth, string first, string second, string third, string multi)
+#ifdef SVQC
+void dedicated_print(string input) // print(), but only print if the server is not local
{
- // This function is designed primarily for the English language, it's impossible
- // to accomodate all languages unless we do a specific function for each one...
- // and since that's not technically feasible/practical, this is all we've got folks.
-
- // Here you can insert specific strings based on the interval number, so you could do
- // i.e. count_seconds which outputs like this:
- // 0 seconds
- // 1 second
- // 2 seconds
- // 3 seconds
- // etc... minutes, hours, days, etc.
-
- switch(floor(interval))
- {
- case 0: return sprintf(zeroth, interval);
- case 1:
- {
- if(interval == 1) // EXACTLY value of 1
- return sprintf(first, interval);
- else
- return sprintf(multi, interval);
- }
- case 2: return sprintf(second, interval);
- case 3: return sprintf(third, interval);
- default: return sprintf(multi, interval);
- }
- return "";
+ if(server_is_dedicated) { print(input); }
}
+#endif
-string process_time(float outputtype, float seconds)
+#ifndef MENUQC
+float Announcer_PickNumber(float type, float num)
{
- float tmp_hours = 0, tmp_minutes = 0, tmp_seconds = 0;
- float tmp_years = 0, tmp_weeks = 0, tmp_days = 0;
-
- tmp_seconds = floor(seconds);
-
- if(tmp_seconds)
+ switch(type)
{
- tmp_minutes = floor(tmp_seconds / 60);
-
- if(tmp_minutes)
+ case CNT_GAMESTART:
{
- tmp_seconds -= (tmp_minutes * 60);
- tmp_hours = floor(tmp_minutes / 60);
-
- if(tmp_hours)
+ switch(num)
{
- tmp_minutes -= (tmp_hours * 60);
- tmp_days = floor(tmp_hours / 24);
-
- if(tmp_days)
- {
- tmp_hours -= (tmp_days * 24);
- tmp_weeks = floor(tmp_days / 7);
-
- if(tmp_weeks)
- {
- tmp_days -= (tmp_weeks * 7);
- tmp_years = floor(tmp_weeks / 52);
- }
- }
+ case 10: return ANNCE_NUM_GAMESTART_10;
+ case 9: return ANNCE_NUM_GAMESTART_9;
+ case 8: return ANNCE_NUM_GAMESTART_8;
+ case 7: return ANNCE_NUM_GAMESTART_7;
+ case 6: return ANNCE_NUM_GAMESTART_6;
+ case 5: return ANNCE_NUM_GAMESTART_5;
+ case 4: return ANNCE_NUM_GAMESTART_4;
+ case 3: return ANNCE_NUM_GAMESTART_3;
+ case 2: return ANNCE_NUM_GAMESTART_2;
+ case 1: return ANNCE_NUM_GAMESTART_1;
}
+ break;
}
- }
-
- switch(outputtype)
- {
- case 1: return sprintf("%02d:%02d:%02d", tmp_hours, tmp_minutes, tmp_seconds);
- case 2:
+ case CNT_IDLE:
{
- string output = "";
-
- output = count_seconds(tmp_seconds);
-
- if(tmp_minutes)
+ switch(num)
{
- output = sprintf(
- "%s%s",
- count_minutes(tmp_minutes),
- ((output != "") ? sprintf(", %s", output) : ""));
+ case 10: return ANNCE_NUM_IDLE_10;
+ case 9: return ANNCE_NUM_IDLE_9;
+ case 8: return ANNCE_NUM_IDLE_8;
+ case 7: return ANNCE_NUM_IDLE_7;
+ case 6: return ANNCE_NUM_IDLE_6;
+ case 5: return ANNCE_NUM_IDLE_5;
+ case 4: return ANNCE_NUM_IDLE_4;
+ case 3: return ANNCE_NUM_IDLE_3;
+ case 2: return ANNCE_NUM_IDLE_2;
+ case 1: return ANNCE_NUM_IDLE_1;
}
-
- if(tmp_hours)
+ break;
+ }
+ case CNT_KILL:
+ {
+ switch(num)
{
- output = sprintf(
- "%s%s",
- count_hours(tmp_hours),
- ((output != "") ? sprintf(", %s", output) : ""));
+ case 10: return ANNCE_NUM_KILL_10;
+ case 9: return ANNCE_NUM_KILL_9;
+ case 8: return ANNCE_NUM_KILL_8;
+ case 7: return ANNCE_NUM_KILL_7;
+ case 6: return ANNCE_NUM_KILL_6;
+ case 5: return ANNCE_NUM_KILL_5;
+ case 4: return ANNCE_NUM_KILL_4;
+ case 3: return ANNCE_NUM_KILL_3;
+ case 2: return ANNCE_NUM_KILL_2;
+ case 1: return ANNCE_NUM_KILL_1;
}
-
- if(tmp_days)
+ break;
+ }
+ case CNT_RESPAWN:
+ {
+ switch(num)
{
- output = sprintf(
- "%s%s",
- count_days(tmp_days),
- ((output != "") ? sprintf(", %s", output) : ""));
+ case 10: return ANNCE_NUM_RESPAWN_10;
+ case 9: return ANNCE_NUM_RESPAWN_9;
+ case 8: return ANNCE_NUM_RESPAWN_8;
+ case 7: return ANNCE_NUM_RESPAWN_7;
+ case 6: return ANNCE_NUM_RESPAWN_6;
+ case 5: return ANNCE_NUM_RESPAWN_5;
+ case 4: return ANNCE_NUM_RESPAWN_4;
+ case 3: return ANNCE_NUM_RESPAWN_3;
+ case 2: return ANNCE_NUM_RESPAWN_2;
+ case 1: return ANNCE_NUM_RESPAWN_1;
}
-
- if(tmp_weeks)
+ break;
+ }
+ case CNT_ROUNDSTART:
+ {
+ switch(num)
{
- output = sprintf(
- "%s%s",
- count_weeks(tmp_weeks),
- ((output != "") ? sprintf(", %s", output) : ""));
+ case 10: return ANNCE_NUM_ROUNDSTART_10;
+ case 9: return ANNCE_NUM_ROUNDSTART_9;
+ case 8: return ANNCE_NUM_ROUNDSTART_8;
+ case 7: return ANNCE_NUM_ROUNDSTART_7;
+ case 6: return ANNCE_NUM_ROUNDSTART_6;
+ case 5: return ANNCE_NUM_ROUNDSTART_5;
+ case 4: return ANNCE_NUM_ROUNDSTART_4;
+ case 3: return ANNCE_NUM_ROUNDSTART_3;
+ case 2: return ANNCE_NUM_ROUNDSTART_2;
+ case 1: return ANNCE_NUM_ROUNDSTART_1;
}
-
- if(tmp_years)
+ break;
+ }
+ default:
+ {
+ switch(num)
{
- output = sprintf(
- "%s%s",
- count_years(tmp_years),
- ((output != "") ? sprintf(", %s", output) : ""));
+ case 10: return ANNCE_NUM_10;
+ case 9: return ANNCE_NUM_9;
+ case 8: return ANNCE_NUM_8;
+ case 7: return ANNCE_NUM_7;
+ case 6: return ANNCE_NUM_6;
+ case 5: return ANNCE_NUM_5;
+ case 4: return ANNCE_NUM_4;
+ case 3: return ANNCE_NUM_3;
+ case 2: return ANNCE_NUM_2;
+ case 1: return ANNCE_NUM_1;
}
-
- return output;
+ break;
}
}
- return "";
-}
-
-#ifdef SVQC
-void dedicated_print(string input) // print(), but only print if the server is not local
-{
- if(server_is_dedicated) { print(input); }
+ return NOTIF_ABORT; // abort sending if none of these numbers were right
}
#endif