summaryrefslogtreecommitdiff
path: root/npc/functions/time.txt
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2021-04-10 03:00:20 -0300
committerJesusaves <cpntb1@ymail.com>2021-04-10 03:00:20 -0300
commitba1e827b6b4c17c35a163e6b55be8c122de632b8 (patch)
tree819f93d0ffee3697e336471710afb9681f0b8d86 /npc/functions/time.txt
parent6e7f3113c0faad9edd4367d100ba9dd77e8d3130 (diff)
downloadserverdata-ba1e827b6b4c17c35a163e6b55be8c122de632b8.tar.gz
serverdata-ba1e827b6b4c17c35a163e6b55be8c122de632b8.tar.bz2
serverdata-ba1e827b6b4c17c35a163e6b55be8c122de632b8.tar.xz
serverdata-ba1e827b6b4c17c35a163e6b55be8c122de632b8.zip
Add several convenience functions. Fix some bugs regarding misuse of readparam()
Diffstat (limited to 'npc/functions/time.txt')
-rwxr-xr-xnpc/functions/time.txt256
1 files changed, 107 insertions, 149 deletions
diff --git a/npc/functions/time.txt b/npc/functions/time.txt
index 21b94ac5..e6e4c70a 100755
--- a/npc/functions/time.txt
+++ b/npc/functions/time.txt
@@ -1,159 +1,117 @@
+// Evol Script
+// Authors: Gumi, Jesusalva
+function script now {
+ return gettimetick(2);
+}
-function script time_stamp {
- // local variables
- // if there is reasonable demand, these might be exported
- // (that is what the builtin is likely to do)
- @ts_year = gettime(7);
- @ts_month = gettime(6);
- @ts_mday = gettime(5);
- //set @ts_wday, gettime(4);
- @ts_hour = gettime(3);
- @ts_minute = gettime(2);
- @ts_second = gettime(1);
-
- // locals used to generate leading zeroes
- @ts_month_pad$ = "";
- @ts_mday_pad$ = "";
- @ts_hour_pad$ = "";
- @ts_minute_pad$ = "";
- @ts_second_pad$ = "";
-
- if (@ts_month < 10)
- @ts_month_pad$ = "0";
- if (@ts_mday < 10)
- @ts_mday_pad$ = "0";
- if (@ts_hour < 10)
- @ts_hour_pad$ = "0";
- if (@ts_minute < 10)
- @ts_minute_pad$ = "0";
- if (@ts_second < 10)
- @ts_second_pad$ = "0";
-
- @ts_date$ = @ts_year + "-" + @ts_month_pad$ + @ts_month + "-" + @ts_mday_pad$ + @ts_mday;
- @ts_time$ = @ts_hour_pad$ + @ts_hour + ":" + @ts_minute_pad$ + @ts_minute + ":" +@ts_second_pad$ + @ts_second;
-
- // cleanup
- @ts_year = 0;
- @ts_month = 0;
- @ts_mday = 0;
- @ts_hour = 0;
- @ts_minute = 0;
- @ts_second = 0;
- @ts_month_pad$ = "";
- @ts_mday_pad$ = "";
- @ts_hour_pad$ = "";
- @ts_minute_pad$ = "";
- @ts_second_pad$ = "";
-
- return;
+// Returns current time. A SQL update superseeded this.
+// santime( )
+function script santime {
+ return gettimetick(2);
}
+function script time_from_ms {
+ return now() + (getarg(0) / 1000);
+}
+function script time_from_seconds {
+ return now() + getarg(0);
+}
+function script time_from_minutes {
+ return now() + (getarg(0) * 60);
+}
+function script time_from_hours {
+ return now() + (getarg(0) * 3600);
+}
+
+function script time_from_days {
+ return now() + (getarg(0) * 86400);
+}
-function script HumanTime {
- @time$ = "now";
- if(@seconds) set @ms, @ms + (@seconds * 1000);
- if(@minutes) set @ms, @ms + (@minutes * 60000);
- if(@days) set @ms, @ms + (@days * 1440000);
- if(@ms < 1000) goto L_Millis; // under 1 second we have nothing to count
- @seconds = @ms / 1000;
- @ms = @ms % 1000;
- if(@seconds < 60) goto L_Seconds;
- @minutes = @seconds / 60;
- @seconds = @seconds % 60;
- if(@minutes < 60) goto L_Minutes;
- @hours = @minutes / 60;
- @minutes = @minutes % 60;
- if(@hours < 24) goto L_Hours;
- @days = @hours / 24;
- @hours = @hours % 24;
- if(@days) goto L_Days;
- goto L_Clean;
-
-L_Millis:
- @time$ = @ms + "ms";
- return;
-
-L_Seconds:
- @unit$ = "second";
- if(@seconds > 1) set @unit$, "seconds";
- @unit2$ = "millisecond";
- if(@ms > 1) set @unit2$, "milliseconds";
- @time$ = @seconds + " " + @unit$;
- if(@ms) set @time$, @time$ + " and " + @ms + " " + @unit2$;
- goto L_Clean;
-
-L_Minutes:
- @unit$ = "minute";
- if(@minutes > 1) set @unit$, "minutes";
- @unit2$ = "second";
- if(@seconds > 1) set @unit2$, "seconds";
- @unit3$ = "millisecond";
- if(@ms > 1) set @unit3$, "milliseconds";
- @time$ = @minutes + " " + @unit$;
- @separator$ = " and ";
- if(@ms) set @separator$, ", ";
- if(@seconds) set @time$, @time$ + @separator$ + @seconds + " " + @unit2$;
- if(@ms) set @time$, @time$ + " and " + @ms + " " + @unit3$;
- goto L_Clean;
-
-L_Hours:
- @unit$ = "hour";
- if(@hours > 1) set @unit$, "hours";
- @unit2$ = "minute";
- if(@minutes > 1) set @unit2$, "minutes";
- @unit3$ = "second";
- if(@seconds > 1) set @unit3$, "seconds";
- @unit4$ = "millisecond";
- if(@ms > 1) set @unit4$, "milliseconds";
- @time$ = @hours + " " + @unit$;
- @separator$ = " and ";
- if(@seconds || @ms) set @separator$, ", ";
- if(@minutes) set @time$, @time$ + @separator$ + @minutes + " " + @unit2$;
- @separator$ = " and ";
- if(@ms) set @separator$, ", ";
- if(@seconds) set @time$, @time$ + @separator$ + @seconds + " " + @unit3$;
- if(@ms) set @time$, @time$ + " and " + @ms + " " + @unit4$;
- goto L_Clean;
-
-L_Days:
- @unit$ = "day";
- if(@hours > 1) set @unit$, "days";
- @unit2$ = "hour";
- if(@hours > 1) set @unit2$, "hours";
- @unit3$ = "minute";
- if(@minutes > 1) set @unit3$, "minutes";
- @unit4$ = "second";
- if(@seconds > 1) set @unit4$, "seconds";
- @unit5$ = "millisecond";
- if(@ms > 1) set @unit5$, "milliseconds";
- @time$ = @days + " " + @unit$;
- @separator$ = " and ";
- if(@minutes || @seconds || @ms) set @separator$, ", ";
- if(@hours) set @time$, @time$ + @separator$ + @hours + " " + @unit2$;
- @separator$ = " and ";
- if(@seconds || @ms) set @separator$, ", ";
- if(@minutes) set @time$, @time$ + @separator$ + @minutes + " " + @unit3$;
- @separator$ = " and ";
- if(@ms) set @separator$, ", ";
- if(@seconds) set @time$, @time$ + @separator$ + @seconds + " " + @unit3$;
- if(@ms) set @time$, @time$ + " and " + @ms + " " + @unit4$;
- goto L_Clean;
-
-L_Clean:
- @unit$ = "";
- @unit2$ = "";
- @unit3$ = "";
- @unit4$ = "";
- @unit5$ = "";
- @seconds = 0;
- @minutes = 0;
- @hours = 0;
- @days = 0;
- @separator$ = "";
- return;
+// FuzzyTime(<unix timestamp>{, <options>{, <precision>}})
+// gives time in a human-readable format
+//
+// <options> is bitmasked:
+// 1 do not show "ago" when in past
+// 2 do not show "in" when in the future
+// 4 show "from now" instead of "in" when in the future
+//
+// <precision> is the number of units to show,
+// by default uses two (eg. 2m30s or 1h20m).
+// Use '99' for max precision
+
+function script FuzzyTime {
+ .@future = getarg(0, now());
+ .@options = getarg(1, 3);
+ .@precision = getarg(2, 2);
+ .@diff = (.@future - now());
+
+ // check if in the past, or in the future
+ if (.@diff < 0) {
+ .@diff *= -1;
+ .@past = true;
+ }
+
+ .@diff = max(1, .@diff);
+
+ if (.@diff >= 31536000) {
+ .@years = (.@diff / 31536000);
+ .@diff = (++.@s == .@precision ? 0 : (.@diff % 31536000));
+ .@ret$ += sprintf("%d %s", .@years, (.@years > 1 ? "years" : "year"));
+ }
+
+ if (.@diff >= 86400) {
+ .@days = (.@diff / 86400);
+ .@diff = (++.@s == .@precision ? 0 : (.@diff % 86400));
+
+ if (.@s > 1) {
+ .@ret$ += (.@diff > 0 ? ", " : " and ");
+ }
+
+ .@ret$ += sprintf("%d %s", .@days, (.@days > 1 ? "days" : "day"));
+ }
+
+ if (.@diff >= 3600) {
+ .@hours = (.@diff / 3600);
+ .@diff = (++.@s == .@precision ? 0 : (.@diff % 3600));
+
+ if (.@s > 1) {
+ .@ret$ += (.@diff > 0 ? ", " : (.@s >= 3 ? ", " : " ") + "and ");
+ }
+
+ .@ret$ += sprintf("%d %s", .@hours, (.@hours > 1 ? "hours" : "hour"));
+ }
+
+ if (.@diff >= 60) {
+ .@minutes = (.@diff / 60);
+ .@diff = (++.@s == .@precision ? 0 : (.@diff % 60));
+
+ if (.@s > 1) {
+ .@ret$ += (.@diff > 0 ? ", " : (.@s >= 3 ? ", " : " ") + "and ");
+ }
+
+ .@ret$ += sprintf("%d %s", .@minutes, (.@minutes > 1 ? "minutes" : "minute"));
+ }
+
+ if (.@diff >= 1) {
+ if (++.@s > 1) {
+ .@ret$ += (.@s >= 3 ? ", " : " ") + "and ";
+ }
+
+ .@ret$ += sprintf("%d %s", .@diff, (.@diff > 1 ? "seconds" : "second"));
+ }
+
+ if (.@past && !(.@options & 1)) {
+ .@ret$ += " ago";
+ }
+
+ if (!(.@past) && !(.@options & 2)) {
+ .@ret$ = ((.@options & 4) ? sprintf("%s from now", .@ret$) : sprintf("in %s", .@ret$));
+ }
+
+ return .@ret$;
}