summaryrefslogtreecommitdiff
path: root/npc/functions/vault.txt
blob: 1cfe7c99126c764bd598142ea4fe7a30bbd59ac7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// 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));
}

/**
 * handles Vault hooks on player login
 */
-	script	VaultHandler	NPC_HIDDEN,{
    public function OnDualLogin {
        .@toKick$ = strcharinfo(PC_NAME, "", getarg(0, 0));

        if (.@toKick$ != "") {
            .@msg$ = sprintf("Kicking player %s (Vault dual-login)", .@toKick$);
            consolemes(CONSOLEMES_INFO, .@msg$); // log this
            dispbottom(.@msg$); // tell the player

            return kick(.@toKick$, 2); // reason 2 is dual-login
        }

        return false;
    }

OnInit:
    if (SERVER_USES_VAULT) {
        "playerCache"::addVaultHandler("OnDualLogin");
    }
}