summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--npc/functions/legacy.txt162
-rw-r--r--npc/functions/main.txt4
-rw-r--r--npc/functions/vault.txt74
-rw-r--r--npc/scripts.conf2
4 files changed, 241 insertions, 1 deletions
diff --git a/npc/functions/legacy.txt b/npc/functions/legacy.txt
new file mode 100644
index 00000000..029d2ed4
--- /dev/null
+++ b/npc/functions/legacy.txt
@@ -0,0 +1,162 @@
+// NOTE: no script other than the functions in this file should EVER access
+// ##LEGACY[] or LEGACY[]
+
+/**
+ * gets the timestamp of when the attached or provided account was ported from
+ * the Legacy snapshot through Vault
+ *
+ * Example:
+ * getlegacyporttime();
+ *
+ * @param 0? - char name / account id (defaults to attached player)
+ * @return timestamp (seconds)
+ */
+function script getlegacyporttime {
+ // we dereference the variable (+ 0) to avoid accidental assignment
+ return 0+ getvariableofpc(##LEGACY[1], nameid2id(getarg(0, "")), 0);
+}
+
+/**
+ * gets the former account id that was assigned to the attached or provided
+ * account on the Legacy server
+ *
+ * Example:
+ * getlegacyaccountid();
+ *
+ * @param 0? - char name / account id (defaults to attached player)
+ * @return former account id
+ */
+function script getlegacyaccountid {
+ // we dereference the variable (+ 0) to avoid accidental assignment
+ return 0+ getvariableofpc(##LEGACY[0], nameid2id(getarg(0, "")), 0);
+}
+
+/**
+ * checks whether the attached or provided account is a former Legacy account
+ *
+ * Example:
+ * islegacyaccount()
+ *
+ * @param 0? - char name / account id (defaults to attached player)
+ * @return true/false
+ */
+function script islegacyaccount {
+ return getlegacyaccountid(getarg(0, "")) > 0;
+}
+
+/**
+ * gets the former char id that was assigned to the attached or provided
+ * character on the Legacy server
+ *
+ * Example:
+ * getlegacycharid();
+ *
+ * @param 0? - char name / account id (defaults to attached player)
+ * @return former char id
+ */
+function script getlegacycharid {
+ // we dereference the variable (+ 0) to avoid accidental assignment
+ return 0+ getvariableofpc(LEGACY[0], nameid2id(getarg(0, "")), 0);
+}
+
+/**
+ * checks whether the attached or provided character is a former Legacy char
+ *
+ * Example:
+ * islegacychar()
+ *
+ * @param 0? - char name / account id (defaults to attached player)
+ * @return true/false
+ */
+function script islegacychar {
+ return getlegacycharid(getarg(0, "")) > 0;
+}
+
+/**
+ * gets the timestamp of when the attached or provided account completed the
+ * tutorial on the Legacy server
+ *
+ * Example:
+ * getlegacytuttime("player name")
+ *
+ * @param 0? - char name / account id (defaults to attached player)
+ * @return timestamp (seconds)
+ */
+function script getlegacytuttime {
+ .@tut_var = getvariableofpc(LEGACY[2], nameid2id(getarg(0, "")), 0);
+ return .@tut_var < 0x7F ? 0 : .@tut_var;
+}
+
+/**
+ * gets the level the attached or provided player had on the Legacy server at
+ * snapshot time
+ *
+ * Example:
+ * getlegacylevel("player name")
+ *
+ * @param 0? - char name / account id (defaults to attached player)
+ * @return base level
+ */
+function script getlegacylevel {
+ return bitwise_get(getvariableofpc(LEGACY[1], nameid2id(getarg(0, "")), 0), 0x000000FF, 0);
+}
+
+/**
+ * gets the boss points the attached or provided player had on the Legacy server
+ * at snapshot time
+ *
+ * Example:
+ * getlegacybosspoints("player name")
+ *
+ * @param 0? - char name / account id (defaults to attached player)
+ * @return boss points
+ */
+function script getlegacybosspoints {
+ return bitwise_get(getvariableofpc(LEGACY[1], nameid2id(getarg(0, "")), 0), 0x7FFFFF00, 8);
+}
+
+
+
+// the functions below can be used to mimic a Legacy account for local testing
+
+
+/**
+ * mimics a legacy account for local testing
+ *
+ * Example:
+ * setfakelegacyaccount("player name");
+ *
+ * @param 0? - char name / account id (defaults to attached player)
+ * @param 1? - legacy level (defaults to 99)
+ * @param 2? - legacy boss points (defaults to 5000)
+ * @return true/false
+ */
+function script setfakelegacyaccount {
+ if (!debug) {
+ consolemes(CONSOLEMES_ERROR, "setfakelegacyaccount() can only be used in debug mode");
+ return false;
+ }
+
+ .@acc = nameid2id(getarg(0, ""));
+
+ if (.@acc < 1) {
+ // player not found
+ return false;
+ }
+
+ // set the legacy account id to the current account id
+ set(getvariableofpc(##LEGACY[0], .@acc), .@acc);
+
+ // set the port time to yesterday
+ set(getvariableofpc(##LEGACY[1], .@acc), time_from_days(-1));
+
+ // set the legacy tut var to 180 days ago
+ set(getvariableofpc(LEGACY[2], .@acc), time_from_days(-180));
+
+ // set the legacy level
+ bitwise_set(getvariableofpc(LEGACY[1], .@acc), 0x000000FF, 0, getarg(1, 99));
+
+ // set the legacy boss points
+ bitwise_set(getvariableofpc(LEGACY[1], .@acc), 0x7FFFFF00, 8, getarg(2, 5000));
+ return true;
+}
diff --git a/npc/functions/main.txt b/npc/functions/main.txt
index 81204400..1ae37a35 100644
--- a/npc/functions/main.txt
+++ b/npc/functions/main.txt
@@ -14,12 +14,14 @@
* @return the account id
*/
function script nameid2id {
- if (getdatatype(getarg(0, "")) & DATATYPE_STR != 0) {
+ if ((getdatatype(getarg(0, "")) & DATATYPE_STR) != 0) {
if (getarg(0, "") == "") {
return playerattached();
} else {
return getcharid(CHAR_ID_ACCOUNT, getarg(0));
}
+ } else if (getarg(0) == 0) {
+ return playerattached();
} else {
return getarg(0);
}
diff --git a/npc/functions/vault.txt b/npc/functions/vault.txt
new file mode 100644
index 00000000..05d65886
--- /dev/null
+++ b/npc/functions/vault.txt
@@ -0,0 +1,74 @@
+// TODO: create a Vault hercules plugin for native support
+
+// NOTE: no script other than the functions in this file should EVER access
+// ##VAULT[] or the vault-bound variables
+
+/**
+ * Gets the Vault account ID of the provided or attached player.
+ * If the server does not use Vault, it returns a virtual Vault ID.
+ *
+ * Example:
+ * getvaultid("player name");
+ *
+ * @param 0? - char name / account id (defaults to attached player)
+ * @return the Vault ID
+ */
+function script getvaultid {
+ if (SERVER_USES_VAULT) {
+ // we dereference the variable to avoid accidental assignment
+ return 0+ getvariableofpc(##VAULT[0], nameid2id(getarg(0, "")));
+ } else {
+ return nameid2id(getarg(0, ""));
+ }
+}
+
+/**
+ * gets a (fake) vault account-bound variable.
+ * right now these are map-server global variables so they should be used
+ * sparingly
+ *
+ * Example:
+ * set(getvaultvar(VAR$), "foo bar");
+ *
+ * @param 0 - a variable name without prefix
+ * @param 1? - char name / account id (defaults to attached player)
+ * @return a reference to the variable
+ */
+function script getvaultvar {
+ if ((getdatatype(getarg(0)) & DATATYPE_VAR) == 0) {
+ consolemes(CONSOLEMES_ERROR, "getvaultvar: first argument should be a variable");
+ end;
+ }
+
+ .@var$ = data_to_string(getarg(0));
+
+ if (charat(.@var$, 0) == "." || charat(.@var$, 0) == "@" ||
+ charat(.@var$, 0) == "$" || charat(.@var$, 0) == "#") {
+ consolemes(CONSOLEMES_ERROR, "getvaultvar: the variable must be unprefixed");
+ end;
+ }
+
+ if (SERVER_USES_VAULT) {
+ .@vault = getvaultid(getarg(1, ""));
+ return getd(sprintf("$VAULT_%s[%i]", .@var$, .@vault));
+ } else {
+ return getvariableofpc(getd(sprintf("##%s", .@var$)), nameid2id(getarg(1, "")));
+ }
+}
+
+/**
+ * sets a (fake) vault account-bound variable.
+ * right now these are map-server global variables so they should be used
+ * sparingly
+ *
+ * Example:
+ * setvaultvar(FOO$, "bar");
+ *
+ * @param 0 - a variable name without prefix
+ * @param 1 - the value to set
+ * @param 2? - char name / account id (defaults to attached player)
+ * @return a reference to the variable
+ */
+function script setvaultvar {
+ return set(getvaultvar(getarg(0), getarg(2, "")), getarg(1));
+}
diff --git a/npc/scripts.conf b/npc/scripts.conf
index f0e48c98..edc58478 100644
--- a/npc/scripts.conf
+++ b/npc/scripts.conf
@@ -17,6 +17,8 @@
// Misc functions
"npc/functions/main.txt",
+"npc/functions/legacy.txt",
+"npc/functions/vault.txt",
"npc/functions/asleep.txt",
"npc/functions/barber.txt",
"npc/functions/clientversion.txt",