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");
}
}
|