Here is a nickname drawing system which draws nicknames in the same way that default systems do. This ofcourse offers no advantages in itself but can be used as a base for customisations.
- Factors in Alignment Points
- Draws (Paused) when a player is paused
- Draws nicknames of NPCs, set by this.nick = "Nick";
- Is optimised so that a text display is only rendered once, and then has its variables updated as an when needed instead of being re-rendered each frame
Necessary classes will be posted in the next post otherwise the post character limit is broken.
WEAPON
PHP Code:
/*
Created by Thor/ffcmike (Graal the Adventure)
*/
this.join("utility_display");
this.join("data_alignment");
//#CLIENTSIDE
function onCreated() {
this.data = new TStaticVar();
this.onTimeout();
}
public function reset() {
this.storedaccounts = NULL;
this.storednpcs = NULL;
this.data.clearVars();
this.displayWipe();
}
function onTimeout() {
this.setTimer(0.05);
/*
Re-Initialization of displays
*/
temp.zoom = $pref::graal::defaultfontsize/24;
if (this.fontzoom != temp.zoom) {
this.fontzoom = temp.zoom;
this.displayWipe();
}
temp.limitnicks = $pref::graal::limitnicknames;
if (this.limitnicks != temp.limitnicks) {
this.limitnicks = temp.limitnicks;
this.displayWipe();
}
temp.limit = this.limitnicks ? $pref::graal::nicknamelimit : 75;
if (this.limit != temp.limit) {
this.limit = temp.limit;
this.displayWipe();
}
temp.hash = new TStaticVar();
/*
Handle drawing of player nicknames
*/
for (temp.pl : players) {
temp.hash.(@ temp.pl.account) = true;
temp.paused = temp.pl.paused;
temp.d = this.data.(@ temp.pl.account);
//obtains stored data of the player, if NULL stores it and continues
if (temp.d == NULL) {
//nick, ap, paused, display
temp.d = {temp.pl.nick, temp.pl.ap, temp.paused, NULL};
this.storedaccounts.add(temp.pl.account);
temp.change = true;
}
else {
//if player is stored, checks to see if nick, ap or paused have changed
temp.change = temp.pl.ap != temp.d[1] || temp.paused != temp.d[2];
if (temp.change) {
//if change, store player data
temp.d[0] = temp.pl.nick;
temp.d[1] = temp.pl.ap;
temp.d[2] = temp.paused;
}
}
//check if display already exists
if (temp.d[3] != NULL) {
//if exists, updates display coordinates and text
temp.d[3].x = temp.pl.x + 1.625;
temp.d[3].y = temp.pl.y + 2.5;
if (temp.change)
this.updateText(temp.d[3], temp.pl, temp.paused);
}
else {
//if not exists, creates display
temp.d[3] = this.displayNick(temp.pl);
this.updateText(temp.d[3], temp.pl, temp.paused);
temp.change = true;
}
if (temp.change)
this.data.(@ temp.pl.account) = temp.d;
}
temp.s = this.storedaccounts.size();
for (temp.i = 0; temp.i < temp.s; temp.i ++) {
temp.a = this.storedaccounts[temp.i];
if (!temp.hash.(@ temp.a)) {
this.hideimg(this.data.(@ temp.a)[3].imageindex);
this.storedaccounts.delete(temp.i);
this.data.(@ temp.a) = NULL;
temp.i --;
temp.s --;
}
}
/*
Handle drawing of level NPC nicknames
*/
for(temp.n : npcs) {
if (
temp.n.nick == NULL ||
temp.n.visible
)
continue;
temp.hash.("#" @ temp.n.id) = true;
temp.d = this.data.("#" @ temp.n.id);
//obtains stored data of the NPC, if NULL stores it and continues
if (temp.d == NULL){
//nick, ap, display
temp.d = {temp.n.nick, temp.n.ap, NULL};
temp.change = true;
this.storednpcs.add(temp.n.id);
}
else {
//if NPC is stored, checks to see if nick, ap or paused have changed
temp.change = temp.n.nick != temp.d[0] || temp.n.ap != temp.d[1];
if (temp.change){
//if change, store NPC data
temp.d[0] = temp.n.nick;
temp.d[1] = temp.n.ap;
}
}
//check if display already exists
if (temp.d[2] != NULL) {
//if exists, updates display coordinates and text
temp.d[2].x = temp.n.x + 1.625;
temp.d[2].y = temp.n.y + 2.5;
if (temp.change)
this.updateNPCText(temp.d[2], temp.n);
}
else {
//if not exists, creates display
temp.d[2] = this.displayNick(temp.n);
this.updateNPCText(temp.d[2], temp.n);
temp.change = true;
}
if (temp.change)
this.data.("#" @ temp.n.id) = temp.d;
}
temp.s = this.storednpcs.size();
for (temp.i = 0; temp.i < temp.s; temp.i ++){
temp.id = this.storednpcs[temp.i];
if (!temp.hash.("#" @ temp.id)) {
this.hideimg(this.data.("#" @ temp.id)[2].imageindex);
this.storednpcs.delete(temp.i);
this.data.("#" @ temp.id) = NULL;
temp.i --;
temp.s --;
}
}
}
/*
The part which does the display stuff.
*/
function displayNick(temp.obj) {
temp.t = this.displayText2(temp.obj.x+1.625, temp.obj.y+2.5, -0.5, "", "cb", "");
temp.t.textshadow = 1;
temp.t.layer = 0;
temp.t.zoom = this.fontzoom;
return temp.t;
}
function updateText(temp.t, temp.pl, temp.paused) {
temp.text = temp.pl.nick;
temp.text @= temp.paused ? " (paused)" : "";
temp.t.text = temp.text.substring(0, this.limit);
temp.c = this.getNickColors(temp.pl);
temp.t.red = temp.c[0][0] / 255;
temp.t.green = temp.c[0][1] / 255;
temp.t.blue = temp.c[0][2] / 255;
temp.t.shadowcolor = temp.c[1];
}
function updateNPCText(temp.t, temp.n) {
temp.t.text = temp.n.nick.substring(0, this.limit);
temp.c = this.getNickColors(temp.n);
temp.t.red = temp.c[0][0] / 255;
temp.t.green = temp.c[0][1] / 255;
temp.t.blue = temp.c[0][2] / 255;
temp.t.shadowcolor = temp.c[1];
}
/*
Get Colours
*/
public function getNickColors(temp.pl)
return {this.apv[temp.pl.ap], this.aps[temp.pl.ap]};
/*
Other
*/
function onPlayerChanges(temp.pl) {
if (temp.pl.level == NULL)
return;
if (this.displayCounter > 200) {
temp.d = this.data.(@ temp.pl.account);
if (temp.d[3] != NULL) {
if (temp.pl.nick != temp.d[0]) {
this.data.(@ temp.pl.account)[0] = temp.pl.nick;
this.updateText(temp.d[3], temp.pl, temp.d[2]);
}
return;
}
}
}