summaryrefslogtreecommitdiff
path: root/npc/functions/legacy.txt
diff options
context:
space:
mode:
Diffstat (limited to 'npc/functions/legacy.txt')
-rw-r--r--npc/functions/legacy.txt238
1 files changed, 238 insertions, 0 deletions
diff --git a/npc/functions/legacy.txt b/npc/functions/legacy.txt
new file mode 100644
index 00000000..5f5ad026
--- /dev/null
+++ b/npc/functions/legacy.txt
@@ -0,0 +1,238 @@
+// 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;
+}
+
+/**
+ * gets the inventory the attached or provided char had on the Legacy server at
+ * snapshot time
+ *
+ * Example:
+ * .@size = getlegacyinventory(.@item, .@amount);
+ *
+ * @param 0 - a reference to an array variable to hold the item ids
+ * @param 1 - a reference to an array variable to hold the item qty
+ * @param 2? - char name / account id (defaults to attached player)
+ * @return number of entries added to the arrays
+ */
+function script getlegacyinventory {
+ .@char = getlegacycharid(getarg(2, ""));
+
+ if (.@char < 1) {
+ consolemes(CONSOLEMES_ERROR, "getlegacyinventory: target legacy character not found");
+ return 0;
+ }
+
+ if ((getdatatype(getarg(0)) & (DATATYPE_VAR | DATATYPE_INT)) == 0) {
+ consolemes(CONSOLEMES_ERROR, "getlegacyinventory: first argument should be an integer array");
+ return 0;
+ }
+
+ if ((getdatatype(getarg(1)) & (DATATYPE_VAR | DATATYPE_INT)) == 0) {
+ consolemes(CONSOLEMES_ERROR, "getlegacyinventory: second argument should be an integer array");
+ return 0;
+ }
+
+ freeloop(true);
+ .@rows = query_sql(sprintf("SELECT nameid, amount FROM legacy.inventory WHERE char_id = '%d';", .@char),
+ getarg(0), getarg(1));
+ freeloop(false);
+
+ return .@rows;
+}
+
+/**
+ * gets the storage the attached or provided account had on the Legacy server at
+ * snapshot time
+ *
+ * Example:
+ * .@size = getlegacystorage(.@item, .@amount);
+ *
+ * @param 0 - a reference to an array variable to hold the item ids
+ * @param 1 - a reference to an array variable to hold the item qty
+ * @param 2? - char name / account id (defaults to attached player)
+ * @return number of entries added to the arrays
+ */
+function script getlegacystorage {
+ .@acc = getlegacyaccountid(getarg(2, ""));
+
+ if (.@acc < 1) {
+ consolemes(CONSOLEMES_ERROR, "getlegacystorage: target legacy account not found");
+ return 0;
+ }
+
+ if ((getdatatype(getarg(0)) & (DATATYPE_VAR | DATATYPE_INT)) == 0) {
+ consolemes(CONSOLEMES_ERROR, "getlegacystorage: first argument should be an integer array");
+ return 0;
+ }
+
+ if ((getdatatype(getarg(1)) & (DATATYPE_VAR | DATATYPE_INT)) == 0) {
+ consolemes(CONSOLEMES_ERROR, "getlegacystorage: second argument should be an integer array");
+ return 0;
+ }
+
+ freeloop(true);
+ .@rows = query_sql(sprintf("SELECT nameid, amount FROM legacy.storage WHERE account_id = '%d';", .@acc),
+ getarg(0), getarg(1));
+ freeloop(false);
+
+ return .@rows;
+}