Jump to content

on screen message


Xuander
 Share

You are about to reply to a thread that has been inactive for 2145 days.

Please take a moment to consider if this thread is worth bumping.

Recommended Posts

Hello all,

i have this script what i can place in a object and then when i wear it and someone els also wear it we can chat and only the people who wear the script can see the message. Now it gives a message in local chat but i want that it gives the message big on the screen for a couple seconds and then fade away and also that i can give the message a color.

 

Here is the script and i hope someone can help me with it..

 

integer transmit_channel = 66;
integer listen_handle;
 
say_message(string message)
{
llOwnerSay(message);
llSetColor(<0, 1, 0>, ALL_SIDES);
llSleep(0.5);
llSetColor(<1, 1, 1>, ALL_SIDES);
}
 
transmit(string message)
{
llRegionSay(transmit_channel, message);
llSetColor(<1, 0, 0>, ALL_SIDES);
llSleep(0.5);
llSetColor(<1, 1, 1>, ALL_SIDES);
}
 
show_help()
{
llOwnerSay("Bird Call Directions:");
llOwnerSay("/bc on: Turn on.");
llOwnerSay("/bc off : Turn off.");
llOwnerSay("/bc reset: Reset.");
llOwnerSay("/bc scan: Scan channels.");
}
 
default
{
state_entry()
{
llOwnerSay("Bird Call enabled (To sent a message to your team, type in local for example /5 bandage me).  Type \"/bc help \" for directions.");
llSetObjectName(llKey2Name(llGetOwner()) + " (BC)");
state on;
}
}
 
state on
{
state_entry()
{
llListen(0, "", llGetOwner(), "");
listen_handle = llListen(transmit_channel, "", NULL_KEY, "");
llOwnerSay("Bird Call on.");
llOwnerSay("Bird Call listening on channel " + (string) transmit_channel);
}
 
attach(key attached)
{
if (attached != NULL_KEY)
{
llSetObjectName(llKey2Name(llGetOwner()) + " (BC)");
llOwnerSay("Bird Call enabled (To sent a message to your team, type in local for example /5 bandage me).  Type \"/bc help \" for directions.");
llOwnerSay("Bird Call on.");
llOwnerSay("Bird Call listening on channel " + (string) transmit_channel);
}
}
 
changed(integer change)
{
if (change & CHANGED_OWNER)
{
llResetScript();
}
}
 
listen(integer channel, string name, key id, string message)
{
if (channel == 0 && id == llGetOwner() && llStringLength(message) > 4 && llGetSubString(llToLower(message), 0, 3) == "/bc ")
{
message = llDeleteSubString(message, 0, 3);
if (llGetSubString(llToLower(message), 0, llStringLength("channel ") - 1) == "channel " && llStringLength(message) > llStringLength("channel "))
{
message = llDeleteSubString(message, 0, llStringLength("channel ") - 1);
if ((integer) message != 0)
{
transmit_channel = (integer) message;
llListenRemove(listen_handle);
listen_handle = llListen(transmit_channel, "", NULL_KEY, "");
llOwnerSay("Bird Call listening on channel " + (string) transmit_channel);
}
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("off") - 1) == "off")
{
state off;
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("help") - 1) == "help")
{
show_help();
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("scan") - 1) == "scan")
{
state scan;
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("reset") - 1) == "reset")
{
llResetScript();
}
 
else
{
transmit(message);
}
}
 
else if (channel != 0)
{
if (id == llGetOwner())
{
say_message(message);
}
 
else
{
say_message(name + ": " + message);
}
}
}   
}
 
state off
{
state_entry()
{
llListen(0, "", llGetOwner(), "");
llOwnerSay("Bird Call off.");
}
 
attach(key attached)
{
if (attached != NULL_KEY)
{
llSetObjectName(llKey2Name(llGetOwner()) + " (BC)");
llOwnerSay("Bird Call enabled (status: OFF).  Type \"/bc help\" for directions.");
}
}
 
changed(integer change)
{
if (change & CHANGED_OWNER)
{
llResetScript();
}
}
 
listen(integer channel, string name, key id, string message)
{
if (channel == 0 && id == llGetOwner() && llStringLength(message) > 4 && llGetSubString(llToLower(message), 0, 3) == "/bc ")
{
message = llDeleteSubString(message, 0, 3);
 
if (llGetSubString(llToLower(message), 0, llStringLength("on") - 1) == "on")
{
state on;
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("help") - 1) == "help")
{
show_help();
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("scan") - 1) == "scan")
{
state scan;
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("reset") - 1) == "reset")
{
llResetScript();
}
}
}   
}
 
 
state scan
{
state_entry()
{
llListen(0, "", llGetOwner(), "");
listen_handle = llListen(transmit_channel, "", NULL_KEY, "");
llSetTimerEvent(5);
llOwnerSay("Channel Scanning...say \"bc stop\" to stop.");
}
 
attach(key attached)
{
if (attached != NULL_KEY)
{
llSetObjectName(llKey2Name(llGetOwner()) + " (BC)");
llOwnerSay("Bird Call enabled (status: SCANNING).  Type \"/bc help\" for directions.");
}
}
 
changed(integer change)
{
if (change & CHANGED_OWNER)
{
llResetScript();
}
}
 
timer()
{
transmit_channel++;
llListenRemove(listen_handle);
listen_handle = llListen(transmit_channel, "", NULL_KEY, "");
llOwnerSay("Bird Call listening on channel " + (string) transmit_channel);
}
 
listen(integer channel, string name, key id, string message)
{
if (channel == 0 && id == llGetOwner() && llStringLength(message) > 4 && llGetSubString(llToLower(message), 0, 3) == "/bc ")
{
message = llDeleteSubString(message, 0, 3);
 
if (llGetSubString(llToLower(message), 0, llStringLength("channel ") - 1) == "channel " && llStringLength(message) > llStringLength("channel "))
{
message = llDeleteSubString(message, 0, llStringLength("channel ") - 1);
 
if ((integer) message != 0)
{
transmit_channel = (integer) message;
llListenRemove(listen_handle);
listen_handle = llListen(transmit_channel, "", NULL_KEY, "");
llOwnerSay("Bird Call listening on channel " + (string) transmit_channel);
}
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("on") - 1) == "on")
{
state on;
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("stop") - 1) == "stop")
{
state on;
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("off") - 1) == "off")
{
state off;
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("help") - 1) == "help")
{
show_help();
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("reset") - 1) == "reset")
 
{
llResetScript();
}
 
else
{
transmit(message);
}
}
 
else if (channel != 0)
{
if (id == llGetOwner())
{
say_message(message);
}
 
else
{
say_message(name + ": " + message);
}
state on;
}
}
}

 

Thanks in advantage

  • Like 1
Link to comment
Share on other sites

if "bandage me" is typical of the type and length of message being communicated then the simplist way would be to wear attached to HUD and use llSetText to display the message on the receivers' screen. You will able to set the text color and script a fade out effect. You won't be able to change the font or fontsize.  

Link to comment
Share on other sites

thanks all,

ellestones that what you say is what i wanted, both people wear it as a hud and when they type in local ''/5 bandage'' then they see that message. Now i am very new in scripting but can you explain how to do that llSetText and where in the script i have to put it and how to change the color of the text?

 

Thanks

Link to comment
Share on other sites

13 hours ago, ellestones said:

if "bandage me" is typical of the type and length of message being communicated then the simplist way would be to wear attached to HUD and use llSetText to display the message on the receivers' screen. You will able to set the text color and script a fade out effect. You won't be able to change the font or fontsize.  

thanks all,

ellestones that what you say is what i wanted, both people wear it as a hud and when they type in local ''/5 bandage'' then they see that message. Now i am very new in scripting but can you explain how to do that llSetText and where in the script i have to put it and how to change the color of the text?

 

Thanks

Link to comment
Share on other sites

a place to start would be to change say_message(...) to display the message as text on the HUD rather than send the message to the owner's chat

this is what you currently have:

say_message(string message)
{
   llOwnerSay(message);
   llSetColor(<0, 1, 0>, ALL_SIDES);
   llSleep(0.5);
   llSetColor(<1, 1, 1>, ALL_SIDES);
} 

to get you started change to:

say_message(string message)
{
   // llOwnerSay(message);
   llSetText(message, <1.0, 1.0, 1.0>, 1.0>;
     
   llSetColor(<0, 1, 0>, ALL_SIDES);
   llSleep(0.5);
   llSetColor(<1, 1, 1>, ALL_SIDES);
} 

 

Link to comment
Share on other sites

On 26-5-2018 at 1:05 AM, ellestones said:

a place to start would be to change say_message(...) to display the message as text on the HUD rather than send the message to the owner's chat

this is what you currently have:


say_message(string message)
{
   llOwnerSay(message);
   llSetColor(<0, 1, 0>, ALL_SIDES);
   llSleep(0.5);
   llSetColor(<1, 1, 1>, ALL_SIDES);
} 

to get you started change to:


say_message(string message)
{
   // llOwnerSay(message);
   llSetText(message, <1.0, 1.0, 1.0>, 1.0>;
     
   llSetColor(<0, 1, 0>, ALL_SIDES);
   llSleep(0.5);
   llSetColor(<1, 1, 1>, ALL_SIDES);
} 

 

Thanks so much this is what i wanted....now i did try to figure out how the text can fade away after a couple seconds but cant get that to work...maybe you have a idea to get that work?

Link to comment
Share on other sites

2 hours ago, Xuander said:

...i did try to figure out how the text can fade away after a couple seconds but cant get that to work...maybe you have a idea to get that work?

i do, but is going to be messy, as a timer is needed to do this,  and the script uses states, and say_message(...) is called in 2 of the states, state on and state scan which complicates matters.

so before we start hacking a fix for this, can you post your current script formatted please so I can see anything else you might have done since. On the edit toolbar is the Code toolbutton, the button symbol is <>. Press it and paste your script into the popup dialog.

do this and I will have current info, enough to post the bare necessary hacks to let you carry on without having to do a major rewrite

Link to comment
Share on other sites

9 minutes ago, ellestones said:

i do, but is going to be messy, as a timer is needed to do this,  and the script uses states, and say_message(...) is called in 2 of the states, state on and state scan which complicates matters.

so before we start hacking a fix for this, can you post your current script formatted please so I can see anything else you might have done since. On the edit toolbar is the Code toolbutton, the button symbol is <>. Press it and paste your script into the popup dialog.

do this and I will have current info, enough to post the bare necessary hacks to let you carry on without having to do a major rewrite

integer transmit_channel = 66;
integer listen_handle;
 
 //////////////////////////////
 
say_message(string message)
{
// llOwnerSay(message);
llSetText(message, <1.0, 0.0, 0.0>,1.0);
llSetColor(<0, 1, 0>, ALL_SIDES);
llSleep(0.5);
llSetColor(<1, 1, 1>, ALL_SIDES);
} 
 
 //////////////////////////////
 
transmit(string message)
{
llRegionSay(transmit_channel, message);
llSetColor(<1, 0, 0>, ALL_SIDES);
llSleep(0.5);
llSetColor(<1, 1, 1>, ALL_SIDES);
}
 
 //////////////////////////////
 
show_help()
{
llOwnerSay("Bird Call Directions:");
llOwnerSay("/bc on: Turn on.");
llOwnerSay("/bc off : Turn off.");
llOwnerSay("/bc reset: Reset.");
}
 
 //////////////////////////////
 
default
{
state_entry()
{
llOwnerSay("Bird Call enabled (To sent a message to your team, type in local for example /5 bandage me).  Type \"/bc help \" for directions.");
llSetObjectName(llKey2Name(llGetOwner()) + " (BC)");
state on;
}
}
 
 //////////////////////////////
 
state on
{
state_entry()
{
llListen(0, "", llGetOwner(), "");
listen_handle = llListen(transmit_channel, "", NULL_KEY, "");
llOwnerSay("Bird Call on.");
llOwnerSay("Bird Call listening on channel " + (string) transmit_channel);
}
 
 //////////////////////////////
 
attach(key attached)
{
if (attached != NULL_KEY)
{
llSetObjectName(llKey2Name(llGetOwner()) + " (BC)");
llOwnerSay("Bird Call enabled (To sent a message to your team, type in local for example /5 bandage me).  Type \"/bc help \" for directions.");
llOwnerSay("Bird Call on.");
llOwnerSay("Bird Call listening on channel " + (string) transmit_channel);
}
}
 
 //////////////////////////////
 
changed(integer change)
{
if (change & CHANGED_OWNER)
{
llResetScript();
}
}

//////////////////////////////

listen(integer channel, string name, key id, string message)
{
if (channel == 0 && id == llGetOwner() && llStringLength(message) > 4 && llGetSubString(llToLower(message), 0, 3) == "/bc ")
{
message = llDeleteSubString(message, 0, 3);
if (llGetSubString(llToLower(message), 0, llStringLength("channel ") - 1) == "channel " && llStringLength(message) > llStringLength("channel "))
{
message = llDeleteSubString(message, 0, llStringLength("channel ") - 1);
if ((integer) message != 0)
{
transmit_channel = (integer) message;
llListenRemove(listen_handle);
listen_handle = llListen(transmit_channel, "", NULL_KEY, "");
llOwnerSay("Bird Call listening on channel " + (string) transmit_channel);
}
}
 
 //////////////////////////////
 
else if (llGetSubString(llToLower(message), 0, llStringLength("off") - 1) == "off")
{
state off;
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("help") - 1) == "help")
{
show_help();
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("scan") - 1) == "scan")
{
state scan;
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("reset") - 1) == "reset")
{
llResetScript();
}
 
else
{
transmit(message);
}
}
 
 //////////////////////////////
 
else if (channel != 0)
{
if (id == llGetOwner())
{
say_message(message);
}
 
else
{
say_message(name + ": " + message);
}
}
}   
}
 
 //////////////////////////////
 
state off
{
state_entry()
{
llListen(0, "", llGetOwner(), "");
llOwnerSay("Bird Call off.");
}
 
attach(key attached)
{
if (attached != NULL_KEY)
{
llSetObjectName(llKey2Name(llGetOwner()) + " (BC)");
llOwnerSay("Bird Call enabled (status: OFF).  Type \"/bc help\" for directions.");
}
}
 
 //////////////////////////////
 
changed(integer change)
{
if (change & CHANGED_OWNER)
{
llResetScript();
}
}
 
 //////////////////////////////
 
listen(integer channel, string name, key id, string message)
{
if (channel == 0 && id == llGetOwner() && llStringLength(message) > 4 && llGetSubString(llToLower(message), 0, 3) == "/bc ")
{
message = llDeleteSubString(message, 0, 3);
 
if (llGetSubString(llToLower(message), 0, llStringLength("on") - 1) == "on")
{
state on;
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("help") - 1) == "help")
{
show_help();
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("scan") - 1) == "scan")
{
state scan;
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("reset") - 1) == "reset")
{
llResetScript();
}
}
}   
}
 
 //////////////////////////////
 
state scan
{
state_entry()
{
llListen(0, "", llGetOwner(), "");
listen_handle = llListen(transmit_channel, "", NULL_KEY, "");
llSetTimerEvent(5);
llOwnerSay("Channel Scanning...say \"bc stop\" to stop.");
}
 
attach(key attached)
{
if (attached != NULL_KEY)
{
llSetObjectName(llKey2Name(llGetOwner()) + " (BC)");
llOwnerSay("Bird Call enabled (status: SCANNING).  Type \"/bc help\" for directions.");
}
}
 
 //////////////////////////////
 
 changed(integer change)
{
if (change & CHANGED_OWNER)
{
llResetScript();
}
}
 
 //////////////////////////////
 
timer()
{
transmit_channel++;
llListenRemove(listen_handle);
listen_handle = llListen(transmit_channel, "", NULL_KEY, "");
llOwnerSay("Bird Call listening on channel " + (string) transmit_channel);
}
 
listen(integer channel, string name, key id, string message)
{
if (channel == 0 && id == llGetOwner() && llStringLength(message) > 4 && llGetSubString(llToLower(message), 0, 3) == "/bc ")
{
message = llDeleteSubString(message, 0, 3);
 
if (llGetSubString(llToLower(message), 0, llStringLength("channel ") - 1) == "channel " && llStringLength(message) > llStringLength("channel "))
{
message = llDeleteSubString(message, 0, llStringLength("channel ") - 1);
 
if ((integer) message != 0)
{
transmit_channel = (integer) message;
llListenRemove(listen_handle);
listen_handle = llListen(transmit_channel, "", NULL_KEY, "");
llOwnerSay("Bird Call listening on channel " + (string) transmit_channel);
}
}
 
 //////////////////////////////
 
else if (llGetSubString(llToLower(message), 0, llStringLength("on") - 1) == "on")
{
state on;
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("stop") - 1) == "stop")
{
state on;
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("off") - 1) == "off")
{
state off;
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("help") - 1) == "help")
{
show_help();
}
 
else if (llGetSubString(llToLower(message), 0, llStringLength("reset") - 1) == "reset")
 
{
llResetScript();
}
 
else
{
transmit(message);
}
}
 
 //////////////////////////////
 
else if (channel != 0)
{
if (id == llGetOwner())
{
say_message(message);
}
 
else
{
say_message(name + ": " + message);
}
state on;
}
}
}

Thanks a lot you wanna look at it...here is what i have so far

Link to comment
Share on other sites

2 minutes ago, Xuander said:

Thanks a lot you wanna look at it...here is what i have so far

when you pasted it, it would have been useful if you had of indented the lines of code with tabs and spaces. Formatted it. Nevermind, is ok but next time ok :)

First 2 hacks. I am doing this off the top of my head here. So the outcome might be variable.  Anyways, here goes:

Hack #1: at top of the script replace say_message(...) with this

float MyFade;
string MyMessage;

say_message(string message)
{
   llSetTimerEvent(0.0);
   llSetText(message, <1.0,1.0,1.0>, 1.0);
   llSetColor(<0.0, 1.0, 0.0>, ALL_SIDES);
   llSleep(0.5);
   llSetColor(1.0,1.0,1.0, ALL_SIDES);
   MyFade = 1.0;
   MyMessage = message;
   llSetTimerEvent(2.0);  // tick every 2 seconds. 
}

Hack #2: in state on, insert the following timer event code

timer()
{
   MyFade -= 0.2;   // reduce by 1/5th each time
   llSetText(MyMessage, <1.0, 1.0, 1.0>, MyFade);
   if (MyFade == 0.0)
      llSetTimerEvent(0.0);
}

Hack #3 has to handle what happens in state scan when say_message(...) is called. State scan already uses a timer event, so we have to hack around that somehow. And is further complicated as say_message(...) is also called in state scan immediately before returning to state on

tricky and I will have to think a bit more about how best to do that

Hacks #1 and #2 do though do give you something to work on in the meantime ok

 

Link to comment
Share on other sites

17 hours ago, ellestones said:

when you pasted it, it would have been useful if you had of indented the lines of code with tabs and spaces. Formatted it. Nevermind, is ok but next time ok :)

First 2 hacks. I am doing this off the top of my head here. So the outcome might be variable.  Anyways, here goes:

Hack #1: at top of the script replace say_message(...) with this


float MyFade;
string MyMessage;

say_message(string message)
{
   llSetTimerEvent(0.0);
   llSetText(message, <1.0,1.0,1.0>, 1.0);
   llSetColor(<0.0, 1.0, 0.0>, ALL_SIDES);
   llSleep(0.5);
   llSetColor(1.0,1.0,1.0, ALL_SIDES);
   MyFade = 1.0;
   MyMessage = message;
   llSetTimerEvent(2.0);  // tick every 2 seconds. 
}

Hack #2: in state on, insert the following timer event code


timer()
{
   MyFade -= 0.2;   // reduce by 1/5th each time
   llSetText(MyMessage, <1.0, 1.0, 1.0>, MyFade);
   if (MyFade == 0.0)
      llSetTimerEvent(0.0);
}

Hack #3 has to handle what happens in state scan when say_message(...) is called. State scan already uses a timer event, so we have to hack around that somehow. And is further complicated as say_message(...) is also called in state scan immediately before returning to state on

tricky and I will have to think a bit more about how best to do that

Hacks #1 and #2 do though do give you something to work on in the meantime ok

 

Thanks so much for helping me, i did what you said above and it works really good....i get the message i type in local with /66 on the screen and also on the screen from the other person who wear the hud and it fade away in a couple seconds so that works perfect.....Now there is one thing what not works and that is that the other person only get the message on the screen when they are in chat range so in 20 meter from each other, if they are 21 meter from each other the receiver don't get the message on the screen...ill hope you can help me with that......again thanks so much for all you do

Link to comment
Share on other sites

19 hours ago, Xuander said:

... the other person only get the message on the screen when they are in chat range so in 20 meter from each other, if they are 21 meter from each other the receiver don't get the message on the screen ...

try pressing Ctrl+Enter keys (Shout) instead of Enter key (Say)

 

Link to comment
Share on other sites

One alternate possibility, to get past messy hacks with timers fighting states and thus make debugging and changes in 6 or 12 months time easier... is to have a second script to do the display, and simply talk to it with a link message.

((All the below is untested, and vastly unoptimised))

So, the SayMessage in the original script now becomes:

say_message(string message)
{
	llMessageLinked(LINK_THIS, 9000, message, "");
}

The new display script in the same hud can get the link message and start it's own timer to fade the text away.

string FadeText;
integer Delay;

default
{
  state_entry()
  {
  }

  link_message(integer Sender, integer Number, string Message, key UUID)
  {
    if (Message == 9000) {
      FadeText = Message;
      Delay = 0;
      llSetText(FadeText,<0,1,0>,1);
      llSetTimerEvent(0.5);
    }
  }
              
  timer()
  {
    Delay += 1;
    if (delay < 5) return; // Display the text at full brightness for 5 ticks
    float Alpha = 1.0 - ((Delay - 5) / 10.0); // fade .1 each tick
    llSetText(FadeText,<0,1,0>,Alpha);
  }
}

As for the shouting, that will only work to 100 meters... maybe instead of llSay, use llRegionSay which will work as long as it's not on channel 0.

Edited by Callum Meriman
  • Like 1
Link to comment
Share on other sites

4 hours ago, Callum Meriman said:

One alternate possibility, to get past messy hacks with timers fighting states and thus make debugging and changes in 6 or 12 months time easier... is to have a second script to do the display, and simply talk to it with a link message.

((All the below is untested, and vastly unoptimised))

So, the SayMessage in the original script now becomes:


say_message(string message)
{
	llMessageLinked(LINK_THIS, 9000, message, "");
}

The new display script in the same hud can get the link message and start it's own timer to fade the text away.


string FadeText;
integer Delay;

default
{
  state_entry()
  {
  }

  link_message(integer Sender, integer Number, string Message, key UUID)
  {
    if (Message == 9000) {
      FadeText = Message;
      Delay = 0;
      llSetText(FadeText,<0,1,0>,1);
      llSetTimerEvent(0.5);
    }
  }
              
  timer()
  {
    Delay += 1;
    if (delay < 5) return; // Display the text at full brightness for 5 ticks
    float Alpha = 1.0 - ((Delay - 5) / 10.0); // fade .1 each tick
    llSetText(FadeText,<0,1,0>,Alpha);
  }
}

As for the shouting, that will only work to 100 meters... maybe instead of llSay, use llRegionSay which will work as long as it's not on channel 0.

Thank Callum i did what you said but now if i type /66 (message) in local i not get the message on the screen and also not on the screen of the receiver

Edited by Xuander
Link to comment
Share on other sites

You are about to reply to a thread that has been inactive for 2145 days.

Please take a moment to consider if this thread is worth bumping.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

×
×
  • Create New...