So, Emera's thread reminded me I wanted to release my little staff tool to you guys. Here you go!
The idea and design is a blatant rip off of the tool Era (used to?) use, sorry guys
It looks a little cooler, though, and is full of awesome. You can add new items to the tool easily without even really touching the main portion of the code. First off, here's the code:
PHP Code:
//#CLIENTSIDE
function onCreated() {
// staff tool stuff
this.toolOn = false;
this.toolIdx = 0;
// add new items here
this.toolEntries = {
{ "Exit", "block.png" },
{ "Update Level", "block.png" }
};
}
// draw the staff tool
function DrawTool(create) {
// create image objects
if (create) {
// background
temp.x = GraalControl.width / 2 - this.toolEntries.size() * 20;
temp.p = GetPolyRect(temp.x, GraalControl.height - 104, 8 + this.toolEntries.size() * 40, 64);
with (findImg(200)) {
polygon = temp.p;
red = green = blue = 0;
alpha = 0.75; mode = 1;
layer = 5;
}
// text
with (findImg(201)) {
x = temp.x + 8;
y = GraalControl.height - 58;
text = thiso.toolEntries[thiso.toolIdx][0];
font = "Arial"; zoom = 0.5;
red = green = blue = 1;
layer = 6;
}
// icons
for (temp.i = 0; i < this.toolEntries.size(); i++) {
with (findImg(202 + i)) {
x = temp.x + 8 + i * 40;
y = GraalControl.height - 96;
image = thiso.toolEntries[i][1];
partx = party = 0;
partw = parth = 32;
alpha = 0.5; mode = 1;
layer = 6;
}
}
}
// update text & alpha
findImg(201).text = this.toolEntries[this.toolIdx][0];
temp.ci = this.toolIdx; // current tool
temp.li = (ci > 0 ? ci - 1 : this.toolEntries.size() - 1); // last tool
findImg(202 + ci).alpha = 1;
findImg(202 + li).alpha = 0.5;
}
// reposition the staff tool when resizing Graal
function GraalControl.onResize(nw, nh) {
if (!this.toolOn)
return;
DrawTool(true);
}
// keyboard stuff
function GraalControl.onKeyDown(code) {
if (code == 69) { // E
if (!this.toolOn) {
this.toolOn = true;
this.toolIdx = 0;
DrawTool(true);
} else {
this.toolIdx++;
this.toolIdx %= this.toolEntries.size() - 1;
DrawTool(false);
}
} elseif (code == 87) { // W
if (!this.toolOn)
return;
temp.f = ReplaceText(this.toolEntries[this.toolIdx][0].upper(), " ", "_");
("StaffTool" @ temp.f)();
}
}
// close staff tool
function StaffToolEXIT() {
this.toolOn = false;
hideImgs(200, 201 + this.toolEntries.size());
}
// update level
function StaffToolUPDATE_LEVEL() {
shared.chat("");
sleep(0.05);
shared.chat("update level");
}
// Dusty's, restyled
function ReplaceText(txt, a, b) {
if (txt.pos(a) < 0)
return txt;
temp.len = a.length();
temp.txtpos = txt.positions(a);
temp.newtxt = txt.substring(0, txtpos[0]);
for (temp.i: temp.txtpos) {
temp.p = txt.substring(i + temp.len).pos(a);
temp.newtxt @= b;
temp.newtxt @= txt.substring(i + temp.len, temp.p);
}
return temp.newtxt;
}
// Crow's :3
function GetPolyRect(x, y, w, h)
return { x, y, x + w, y, x + w, y + h, x, y + h };
To use it, press E to open the menu and scroll through the items, then W to "use" the highlighted item.
To add more items, just edit the
this.toolEntries array in the
onCreated() event and also add a function for your new item. Functions are prefixed with "StaffTool" and then the name of the item is added, with all upper case and spaces replaced with underscores. So if your item's name is "Do some crazy StUfF", the function that's being called is
StaffToolDO_SOME_CRAZY_STUFF.
Second entry in the item arrays is the icon; change if you want to.
This
should run just fine, but it was "dry-stripped" (didn't test it) from an existing system that is way bigger than just this stuff. Report any problems, pretty please.
End product can look like this:
Enjoy! <3