summaryrefslogtreecommitdiff
path: root/world/map/npc/commands/remotecmd.txt
blob: b8c47f353b8e98444f6117cac1625fb98b02822b (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
-|script|@remotecmd|32767
{
    callfunc "argv_splitter";
    if (GM < CMD_REMOTECMD && GM < G_SYSOP) goto L_GM; // check if you can use it on self
    set .@target_id, BL_ID;
    set .@t$, @argv$[1];
    setarray @remotecmd[0], 0, 1, 1; // nr, to_self, multi_target
    if (.@t$ == "map") goto L_Map;
    if (.@t$ == "map!") goto L_AllMap;
    if (.@t$ == "area") goto L_Area;
    if (.@t$ == "area!") goto L_AllArea;
    if (.@t$ != "") set .@target_id, getcharid(3, @argv$[1]);
    if (.@t$ != "" && !(isloggedin(.@target_id))) goto L_Failed; // do NOT fallback to self

    set @target_id, .@target_id;
    set @remotecmd[2], 0; // only one target
    addtimer 0, strnpcinfo(0) + "::OnPC";
    end;

L_Map:
    set @remotecmd[1], 0; // do not include self
    goto L_AllMap;

L_AllMap:
    foreach 0, getmap(), 0, 0, 32767, 32767, strnpcinfo(0)+"::OnPC";
    goto L_Success;

L_Area:
    set @remotecmd[1], 0; // do not include self
    goto L_AllMap;

L_AllArea:
    foreach 0, getmap(), (POS_X - .range), (POS_Y - .range), (POS_X + .range), (POS_Y + .range), strnpcinfo(0)+"::OnPC";
    goto L_Success;

OnPC:
    if (@target_id == BL_ID && @remotecmd[1] < 1)
        end;
    remotecmd @argv$[0], strcharinfo(0, @target_id);
    set @remotecmd[0], @remotecmd[0] + 1;
    if (@remotecmd[2] < 1)
        goto L_Success;
    end;

L_Success:
    gmlog "@remotecmd " + @args$;
    message strcharinfo(0), "remotecmd : The operation succeeded. ["+ @remotecmd[0] + "]";
    end;

L_Failed:
    message strcharinfo(0), "remotecmd : Impossible to attach to the target player. Did you try putting the name in \"quotation marks\"?";
    end;

L_GM:
    message strcharinfo(0), "remotecmd : GM command is level "+ CMD_REMOTECMD +", but you are level " + GM;
    end;

OnInit:
    set .range, 14; // visible range
    registercmd chr(ATCMD_SYMBOL) + "remotecmd", strnpcinfo(0);
    end;
}