PDA

View Full Version : Radio System


Rapidwolve
04-06-2007, 09:05 PM
NPC: Radio

/*
Radio System by Rapidwolve
*/

public function doUpdateStation(stationid, dj, text, song, head){
this.radio.("station_" @ stationid) = {dj, text, song, head};
refresh(stationid);
}

public function doUpdateSong(stationid, song, dj, djhead){
temp.text = this.radio.("station_" @ stationid)[1];
this.radio.("station_" @ stationid) = new [4];
this.radio.("station_" @ stationid)[1] = temp.text;
this.radio.("station_" @ stationid)[2] = song;
this.radio.("station_" @ stationid)[0] = dj;
this.radio.("station_" @ stationid)[3] = djhead;
refresh(stationid);
}

public function doUpdateText(stationid, text, dj, djhead){
temp.song = this.radio.("station_" @ stationid)[2];
this.radio.("station_" @ stationid) = new [4];
this.radio.("station_" @ stationid)[2] = temp.song;
this.radio.("station_" @ stationid)[1] = text;
this.radio.("station_" @ stationid)[0] = dj;
this.radio.("station_" @ stationid)[3] = djhead;
refresh(stationid);
}

public function refresh(stationid){
for (p: allplayers){
with (p){
if (client.radiochannel == stationid){
temp.newdj = this.radio.("station_" @ stationid)[0];
temp.newtext = this.radio.("station_" @ stationid)[1];
temp.newsong = this.radio.("station_" @ stationid)[2];
temp.newhead = this.radio.("station_" @ stationid)[3];
p.findWeapon("Radio").updateChannelVars(temp.newdj, temp.newtext, temp.newsong, temp.newhead);
}
}
}
}



Class: radiostation-control

//

function onPlayerChats(){
if (player.chat.starts(":song")) findNPC("Radio").doUpdateSong(this.stationid, player.chat.substring(6), player.account, player.head);
if (player.chat.starts(":text")) findNPC("Radio").doUpdateText(this.stationid, player.chat.substring(6), player.account, player.head);
}




Weapon: Radio

/*
NPC by rapidwolve
*/
function onActionServerside(action){
switch (action){
case "updateChannel":
findNPC("Radio").refresh(params[1]);
break;
}
}

public function updateChannelVars(dj, text, song, djhead){
player.triggerClient("gui", name, "recRadioParams", dj, text, song, djhead);
}
//#CLIENTSIDE

function onCreated()
setVars();


function onActionClientside(action){
switch (action){
case "recRadioParams":
updateChannelVars(params[1], params[2], params[3], params[4]);
break;
}
}

function onKeyPressed(code, key){
if (client.radio = true){
if (key in serverr.radio.validstations){
doChangeStation(key);
}
}
}

function onWeaponFired()
toggleRadio();


function setVars(){
if (client.radiochannel == null) client.radiochannel = 1;
updateChannel(client.radiochannel);
client.radio = false;
this.sx = screenwidth - (32 * 9.5);
this.sy = 35;
this.font = "Tahoma";
this.fontsize = .65;
this.textstyle = "b";
stopmidi();
}

public function updateChannelVars(dj, rtext, song, djhead){
this.djhead = temp.djhead;
this.rtext = temp.rtext;
this.dj = temp.dj;
this.song = temp.song;
}

public function updateChannel(channel)
triggerServer("gui", name, "updateChannel", channel);


public function doChangeStation(channel){
updateChannel(channel);
client.radiochannel = channel;
}

public function toggleRadio(){
if (client.radio == false){
client.radio = true;
drawRadio();
setTimer(.05);
}
else{
destroyRadio();
setTimer(0);
}
}

function drawRadio(){
updateChannel(client.radiochannel);
client.radio = true;
player.addMessage("System", "You turned your radio on.");
onTimeout();
}

function destroyRadio(){
client.radio = false;
player.addMessage("System", "You turned your radio off.");
stopmidi();
hideimgs(-1,1000);
}

function onTimeout(){
showimg(202, this.djhead, this.sx, this.sy - 25);
changeimgvis(202,4);
changeimgpart(202,3,69,26,23);

showText(200, this.sx + 140, this.sy - 25, "Tahoma", "ic", serverr.("radio" @ client.radiochannel @ "name"));
changeimgvis(200, 7);
changeimgzoom(200, this.fontsize - .1);
showText(201, this.sx + 140, this.sy - 10, "Tahoma", "ic", this.dj);
changeimgvis(201, 7);
changeimgzoom(201, this.fontsize - .1);

tokens = wraptext2(255, this.fontsize, " ", this.font @ "@" @ this.fontstyle @ "@" @ this.rtext);
hideimgs(250,300);
for (this.i = 0; this.i < tokens.size(); this.i++){
showText(250 + this.i, this.sx, this.sy + (this.i * 15), this.font, this.textstyle, tokens[this.i]);
changeimgvis(250 + this.i, 7);
changeimgzoom(250 + this.i, this.fontsize);
}
if (this.song != null)
playlooped(this.song);
else
stopmidi();
setTimer(.05);
}


Operation:

Setting up stations
Create a new level with and inside of an NPC add this code in.

join("radiostation-control");
this.stationid = int; // Can be any value from 1-9 Make sure the station id isn't in use

Create a 'serverr.radio.validstations' flag and add the station id to that array(make sure that the list is in numerical order).

To give the radio station a name create another server flag 'serverr.radio#name' and its value should be the desired name.

Station Operation
While you are inside the station level, use these commands (without the <>'s).
:text <text> | Changes the stations text
:song <file/url> | Changes the stations song

pez307
08-24-2009, 04:35 PM
It found 3 errors;


Script compiler output for Radio:
<b>error: function updateChannelVars redefined at line 50: public function updateChannelVars(dj, rtext, song, djhead){
Weapon/GUI-script Radio added/updated by pez307
<b>Script: Function triggerServer not found at line 58 in script of Radio
<b>Script: Function stopmidi not found at line 47 in script of Radio

cbk1994
08-24-2009, 10:51 PM
It found 3 errors;


Script compiler output for Radio:
<b>error: function updateChannelVars redefined at line 50: public function updateChannelVars(dj, rtext, song, djhead){
Weapon/GUI-script Radio added/updated by pez307
<b>Script: Function triggerServer not found at line 58 in script of Radio
<b>Script: Function stopmidi not found at line 47 in script of Radio

Did you place the NPC and weapon in different (and correct) places?

pez307
08-25-2009, 02:08 PM
Don't worry, i used your Jukebox Chris, it's nice ;p