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
|
// Grafitti board 0.0.2 for OpenSim
// By Justin Clark-Casey (justincc)
// http://justincc.wordpress.com
// This script is available under the BSD License
string text = "";
int LISTENING_CHANNEL = 43;
// XXX Only putting this here as well to get around OpenSim's int -> string casting oddness
string LISTENING_CHANNEL_STRING = "43";
// FIXME: Should be dynamic!
int CHARS_WIDTH = 42;
default
{
state_entry()
{
llSetText(
"Say /" + LISTENING_CHANNEL_STRING + " <message> to add text."
+ " Say /" + LISTENING_CHANNEL_STRING
+ " !clear to clear board",
<0.0, 1.0, 0.0>, 1.0);
llListen(LISTENING_CHANNEL, "", NULL_KEY, "");
addGraffiti("justincc's graffiti board v0.0.2");
addGraffiti("Now with primitive word wrap!");
draw();
}
listen(integer channel, string name, key id, string message)
{
if (message == "!clear")
{
clearGraffiti();
}
else
{
addGraffiti(message);
}
draw();
}
}
// Add some additional graffiti
void addGraffiti(string message)
{
while (llStringLength(message) > CHARS_WIDTH)
{
text += "\n\n" + llGetSubString(message, 0, CHARS_WIDTH - 1);
message = llDeleteSubString(message, 0, CHARS_WIDTH - 1);
}
text += "\n\n" + message;
}
// Clear the existing graffiti
void clearGraffiti()
{
text = "";
}
// Actually fires the graffiti out to the dynamic texture module
void draw()
{
//llSay(0, text);
string drawList = "PenColour BLACK; MoveTo 40,220; FontSize 32; Text " + text + ";";
osSetDynamicTextureData("", "vector", drawList, "1024", 0);
}
|