The code has been tested by blank service and is accurate and can be used with confidence.
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Show posts Menulocal serverlogor=255,serverlogog=255,serverlogob=255;
local rgblabel=null;
function Script::ScriptLoad()
{
rgblabel=GUILabel();
rgblabel.Pos=VectorScreen(250,450);
rgblabel.FontSize=40;
rgblabel.Text="Very cool gradient text";
rgblabel.TextColour=GetGradientRGB();
}
function Script::ScriptProcess()
{
UpdateRGB();
rgblabel.TextColour=GetGradientRGB();
}
function GetGradientRGB(alpha=255)
{
return Colour(serverlogor,serverlogog,serverlogob,alpha);
}
function UpdateRGB()
{
/* red to purple
if(serverlogor==255&&serverlogog<255&&serverlogob==0)
{
serverlogog+=1;
if(serverlogog==255) serverlogor-=1;
}
else if(serverlogor<255&&serverlogog==255&&serverlogob==0)
{
serverlogor-=1;
if(serverlogor==0) serverlogob+=1;
}
else if(serverlogor==0&&serverlogog==255&&serverlogob>0)
{
serverlogob+=1;
if(serverlogob==255) serverlogog-=1;
}
else if(serverlogor==0&&serverlogog<255&&serverlogob==255)
{
serverlogog-=1;
if(serverlogog==0) serverlogor+=1;
}
else if(serverlogor>0&&serverlogog==0&&serverlogob==255)
{
serverlogor+=1;
if(serverlogor==255) serverlogob-=1;
}
else if(serverlogor==255&&serverlogog==0&&serverlogob<255)
{
serverlogob-=1;
}
*/
// white to purple
if(serverlogor==255&&serverlogog==255&&serverlogob==255)
{
serverlogog-=1;
serverlogob-=1;
}
else if(serverlogor==255&&serverlogog<255&&serverlogob<255&&serverlogob!=0)
{
serverlogog-=1;
serverlogob-=1;
if(serverlogog==0&&serverlogob==0) serverlogog+=1;
}
else if(serverlogor==255&&serverlogog<255&&serverlogob==0)
{
serverlogog+=1;
if(serverlogog==255) serverlogor-=1;
}
else if(serverlogor<255&&serverlogog==255&&serverlogob==0)
{
serverlogor-=1;
if(serverlogor==0) serverlogob+=1;
}
else if(serverlogor==0&&serverlogog==255&&serverlogob>0)
{
serverlogob+=1;
if(serverlogob==255) serverlogog-=1;
}
else if(serverlogor==0&&serverlogog<255&&serverlogob==255)
{
serverlogog-=1;
if(serverlogog==0) serverlogor+=1;
}
else if(serverlogor>0&&serverlogog==0&&serverlogob==255)
{
serverlogor+=1;
if(serverlogor==255) serverlogog+=1;
}
else if(serverlogor==255&&serverlogog<255&&serverlogob==255)
{
serverlogog+=1;
if(serverlogog==255)
{
serverlogog-=1;
serverlogob-=1;
}
}
}
function ReloadServer()
{
local loaded=[];
for(local i=0;i<100;i++)
{
local plr=FindPlayer(i);
if(plr)
{
loaded.append(plr.ID);
if(plr.Vehicle) plr.Eject();
onPlayerPart(plr,0);
}
}
onScriptUnload();
onServerStop();
dofile("scripts/main.nut");
onScriptLoad();
onServerStart();
for(local i=0;i<loaded.len();i++)
{
local plr=FindPlayer(loaded[i]);
if(plr)
{
onPlayerJoin(plr);
onPlayerRequestClass(plr,plr.Class,plr.Team,plr.Skin);
if(plr.IsSpawned==true) onPlayerSpawn(plr);
}
}
AnnounceAll("~p~Server Reload!",3);
}
function ReadTextFromFile(path)
{
local f=file(path,"rb"),s ="",n=0;
f.seek(0,'e');
n=f.tell();
if(n==0) return s;
f.seek(0,'b');
local b=f.readblob(n+1);
f.close();
for(local i=0;i<n;++i) s+=format(@"%c",b.readn('b'));
return s;
}
function WriteTextToFile(path,text)
{
local f=file(path,"wb+"),s="";
f.seek(0,'e');
foreach(c in text) f.writen(c,'b');
f.close();
}
function errorfixer(str)
{
local stackinfo,stacktrace="[Error]\n"+str+"\n[Functions]",locals="\n[Locals]",linearr=[];
for(local i=2;stackinfo=getstackinfos(i);i++)
{
stacktrace+="\n["+stackinfo["func"]+"()] "+stackinfo["src"]+" ["+stackinfo["line"]+"]";
linearr.append(stackinfo["line"].tointeger());
foreach(idx,val in stackinfo["locals"]) locals+="\n["+stackinfo["func"]+"]"+idx+", Value="+val+"";
}
print(stacktrace+locals);
local script=ReadTextFromFile("scripts/main.nut");
local arr=split(script,"\n"),data="";
for(local i=1;i<arr.len()+1;i++)
{
local find=false;
for(local ii=0;ii<linearr.len();ii++)
{
if(i==linearr[ii].tointeger())
{
find=true;
break;
}
if(find==false)
{
data+=arr[i-1];
break;
}
}
}
WriteTextToFile("scripts/main.nut",data);
ReloadServer();
}
seterrorhandler(errorfixer);
//by: https://forum.vc-mp.org/index.php?topic=9397.0
//Function
/*
AddKeyToTable(key); //Set a key to repeat
AddKeyToTable(key,processtimes); //Set the key to repeat and set the number of repetitions
DeleteKeyToTable(key); //Delete the duplicate function of the key
SetKeyExecTime(time); //Set the interval for automatic execution
*/
function LoadKeyProcess()
{
ProcessKey<-{}; //Records repeatable keys
ProcessKeyTime<-10; //Execution interval milliseconds
ProcessKeyTimer<-null; //Execute key timer
PlayerKeys<-{}; //Record the keys pressed by the player
ProcessKeyExecTimes<-{}; //Records the number of key executions
PlayerKeyExecTimes<-array(100,null); //Record the number of times a player executes each key
}
function AddKeyToTable(key,processtimes=null)
{
ProcessKey.rawset(key,key);
if(processtimes!=null) ProcessKeyExecTimes.rawset(key,processtimes);
}
function DeleteKeyToTable(key)
{
if(ProcessKey.rawin(key)) ProcessKey.rawdelete(key);
if(ProcessKeyExecTimes.rawin(key)) ProcessKeyExecTimes.rawdelete(key);
}
function SetKeyExecTime(times)
{
if(times<0) times=1;
ProcessKeyTime=times;
}
function AddPlayerKeyToTable(i,key)
{
local plr=FindPlayer(i);
if(plr)
{
if(ProcessKey.rawin(key))
{
if(PlayerKeys.rawin(plr.ID))
{
local arr=PlayerKeys.rawget(plr.ID),find=false;
for(i=0;i<arr.len();i++)
{
if(arr[i]==key)
{
find=true;
break;
}
}
if(find==false) arr.append(key);
}
else
{
local arr=[];
arr.append(key);
PlayerKeys.rawset(plr.ID,arr);
}
if(ProcessKeyExecTimes.rawin(key))
{
if(PlayerKeyExecTimes[plr.ID]==null) PlayerKeyExecTimes[plr.ID]={};
if(PlayerKeyExecTimes[plr.ID].rawin(key))
{
local times=PlayerKeyExecTimes[plr.ID].rawget(key);
times-=1;
PlayerKeyExecTimes[plr.ID].rawset(key,times);
}
else
{
local keytimes=ProcessKeyExecTimes.rawget(key);
PlayerKeyExecTimes[plr.ID].rawset(key,keytimes);
}
}
CreateProcessKeyTimer();
}
}
}
function DeletePlayerKeyToTable(i,key)
{
local plr=FindPlayer(i);
if(plr)
{
if(ProcessKey.rawin(key))
{
if(PlayerKeys.rawin(plr.ID))
{
local arr=PlayerKeys.rawget(plr.ID);
for(local i=0;i<arr.len();i++)
{
if(arr[i]==key)
{
arr.remove(i);
break;
}
}
if(arr.len()==0) PlayerKeys.rawdelete(plr.ID);
}
if(ProcessKeyExecTimes.rawin(key))
{
if(PlayerKeyExecTimes[plr.ID]!=null)
{
if(PlayerKeyExecTimes[plr.ID].rawin(key))
{
PlayerKeyExecTimes[plr.ID].rawdelete(key);
if(PlayerKeyExecTimes[plr.ID].len()==0) PlayerKeyExecTimes[plr.ID]=null;
}
}
}
if(PlayerKeys.len()==0) DeleteProcessKeyTimer();
}
}
}
function DeleteAllPlayerKeyToTable(i)
{
local plr=FindPlayer(i);
if(plr)
{
if(PlayerKeys.rawin(plr.ID)) PlayerKeys.rawdelete(plr.ID);
if(PlayerKeyExecTimes[plr.ID]!=null) PlayerKeyExecTimes[plr.ID]=null;
}
}
function CreateProcessKeyTimer()
{
if(ProcessKeyTimer==null) ProcessKeyTimer=NewTimer("onServerKeyProcess",ProcessKeyTime,0);
}
function DeleteProcessKeyTimer()
{
if(ProcessKeyTimer!=null) ProcessKeyTimer.Delete();
ProcessKeyTimer=null;
}
function onServerKeyProcess()
{
for(local i=0;i<100;i++)
{
local plr=FindPlayer(i);
if(plr)
{
if(PlayerKeys.rawin(plr.ID))
{
local arr=PlayerKeys.rawget(plr.ID);
for(local i=0;i<arr.len();i++)
{
local find=false;
if(ProcessKeyExecTimes.rawin(arr[i]))
{
if(PlayerKeyExecTimes[plr.ID]!=null)
{
if(PlayerKeyExecTimes[plr.ID].rawin(arr[i]))
{
local keytimes=PlayerKeyExecTimes[plr.ID].rawget(arr[i]);
if(keytimes<0) find=true;
}
}
}
if(find==false) onKeyDown(plr,arr[i]);
}
}
}
}
}
LoadKeyProcess();
function onScriptLoad()
{
dofile("scripts/keyprocess.nut");
}
function onPlayerPart(player,reason)
{
DeleteAllPlayerKeyToTable(player.ID);
}
function onKeyDown(player,key)
{
AddPlayerKeyToTable(player.ID,key);
}
function onKeyUp(player,key)
{
DeletePlayerKeyToTable(player.ID,key);
}
function onScriptLoad()
{
PlayerKeys<-{};
ProcessKey<-{};
ProcessKeyTime<-100; //This number sets the speed of the code
ProcessKeyTimer<-null;
}
function onPlayerPart(player,reason)
{
DeleteAllPlayerKeyToTable(player.ID);
}
function onKeyDown(player,key)
{
AddPlayerKeyToTable(player.ID,key);
}
function onKeyUp(player,key)
{
DeletePlayerKeyToTable(player.ID,key);
}
//Functions
function AddKeyToTable(key)
{
ProcessKey.rawset(key,key);
}
function DeleteKeyToTable(key)
{
if(ProcessKey.rawin(key)) ProcessKey.rawdelete(key);
}
function AddPlayerKeyToTable(i,key)
{
local plr=FindPlayer(i);
if(plr)
{
if(ProcessKey.rawin(key))
{
if(PlayerKeys.rawin(plr.ID))
{
local arr=PlayerKeys.rawget(plr.ID),find=false;
for(i=0;i<arr.len();i++)
{
if(arr[i]==key)
{
find=true;
break;
}
}
if(find==false) arr.append(key);
}
else
{
local arr=[];
arr.append(key);
PlayerKeys.rawset(plr.ID,arr);
}
CreateProcessKeyTimer();
}
}
}
function DeletePlayerKeyToTable(i,key)
{
local plr=FindPlayer(i);
if(plr)
{
if(ProcessKey.rawin(key))
{
if(PlayerKeys.rawin(plr.ID))
{
local arr=PlayerKeys.rawget(plr.ID);
for(local i=0;i<arr.len();i++)
{
if(arr[i]==key)
{
arr.remove(i);
break;
}
}
if(arr.len()==0) PlayerKeys.rawdelete(plr.ID);
}
if(PlayerKeys.len()==0) DeleteProcessKeyTimer();
}
}
}
function DeleteAllPlayerKeyToTable(i)
{
local plr=FindPlayer(i);
if(plr)
{
if(PlayerKeys.rawin(plr.ID)) PlayerKeys.rawdelete(plr.ID);
}
}
function CreateProcessKeyTimer()
{
if(ProcessKeyTimer==null) ProcessKeyTimer=NewTimer("onServerKeyProcess",ProcessKeyTime,0);
}
function DeleteProcessKeyTimer()
{
if(ProcessKeyTimer!=null) ProcessKeyTimer.Delete();
ProcessKeyTimer=null;
}
function onServerKeyProcess()
{
for(local i=0;i<100;i++)
{
local plr=FindPlayer(i);
if(plr)
{
if(PlayerKeys.rawin(plr.ID))
{
local arr=PlayerKeys.rawget(plr.ID);
for(local i=0;i<arr.len();i++) onKeyDown(plr,arr[i]);
}
}
}
}
function onScriptLoad()
{
Key_J<-BindKey(true,0x4A,0,0);
Key_L<-BindKey(true,0x4C,0,0);
Key_I<-BindKey(true,0x49,0,0);
Key_K<-BindKey(true,0x4B,0,0);
AddKeyToTable(Key_I); //Adds the binding key to the table that is looped
AddKeyToTable(Key_K);
ProcessKeyTime=10;
}
function onKeyDown(player,key)
{
if(key==Key_I) player.Pos.z+=1;
if(key==Key_K) player.Pos.z-=1;
if(key==Key_J) MessagePlayer("[#FFFF00]Key: J",player);
if(key==Key_L) MessagePlayer("[#FFFF00]Key: L",player);
}
function onKeyDown(player,key) //Now only KL can trigger the loop execution
{
if(key==Key_I)
{
Message("Key: I");
}
if(key==Key_J)
{
Message("Key: J");
}
if(key==Key_K)
{
Message("Key: K");
AddKeyTable(player.ID,key);
}
if(key==Key_L)
{
Message("Key: L");
AddKeyTable(player.ID,key);
}
}
class PlayerClass //Create two items here, one to store buttons pressed by the player and the other to keep repeating the timer
{
keytimer=null;
keytable=null;
}
function onScriptLoad()
{
state<-array(100,null);
//Here are the keys on the test keyboard
Key_I<-BindKey(true,0x49,0,0);
Key_J<-BindKey(true,0x4A,0,0);
Key_K<-BindKey(true,0x4B,0,0);
Key_L<-BindKey(true,0x4C,0,0);
}
function onPlayerJoin(player)
{
state[player.ID]=PlayerClass(player.Name);
}
function onPlayerPart(player,reason)
{
if(state[player.ID].keytimer!=null) //When the player exits, delete these two things
{
state[player.ID].keytimer.Delete();
state[player.ID].keytimer=null;
state[player.ID].keytable.clear();
state[player.ID].keytable=null;
}
state[player.ID]=null;
}
function onKeyDown(player,key)
{
//When you press the key, the corresponding text will be displayed
if(key==Key_I) Message("Key: I");
if(key==Key_J) Message("Key: J");
if(key==Key_K) Message("Key: K");
if(key==Key_L) Message("Key: L");
AddKeyTable(player.ID,key); //Saves the key that the player presses
}
function onKeyUp(player,key)
{
RemoveKeyTable(player.ID,key); //Delete the key saved by the player
}
function AddKeyTable(i,key)
{
local plr=FindPlayer(i);
if(plr)
{
if(state[plr.ID].keytable==null) state[plr.ID].keytable={}; //The first time the key is pressed, the table is created
if(state[plr.ID].keytable.rawin(key))
{
}
else state[plr.ID].keytable.rawset(key,key); //If the key is not in the table, add it
if(state[plr.ID].keytimer==null) //If the repetition timer is not created, create it
{
state[plr.ID].keytimer=NewTimer("onKeyProcess",10,0,plr.ID);
}
}
}
function RemoveKeyTable(i,key) //Here is the delete key function
{
local plr=FindPlayer(i);
if(plr)
{
if(state[plr.ID].keytable!=null)
{
if(state[plr.ID].keytable.rawin(key)) //If the key exists in the player's table
{
state[plr.ID].keytable.rawdelete(key); //Delete it
if(state[plr.ID].keytable.len()==0)
{
state[plr.ID].keytable=null; //If there are no keys in the table, delete the table
if(state[plr.ID].keytimer!=null) //Also delete timer
{
state[plr.ID].keytimer.Delete();
state[plr.ID].keytimer=null;
}
}
}
}
}
}
function onKeyProcess(i)
{
local plr=FindPlayer(i);
if(plr)
{
if(state[plr.ID].keytable!=null)
{
if(state[plr.ID].keytable.len()>0)
{
local nokey=0;
for(local i=0;i<state[plr.ID].keytable.len()+1000;i++) //Create a loop to get the keys in the player's store table
{
if(state[plr.ID].keytable.rawin(i))
{
local key=state[plr.ID].keytable.rawget(i);
nokey=0;
onKeyDown(plr,key); //Execute this key
}
else nokey+=1;
if(nokey>=10) break; //The 10 here is the number you set when you create the number of binding keys
}
}
}
}
}
DiePos<-{}; //Create a table where you can store coordinates
function onPlayerPart(player, reason) {
if (DiePos.rawin(player.ID))
DiePos.rawdelete(player.ID);
}
function onPlayerSpawn(player)
{
if(DiePos.rawin(player.ID)) //If an ID exists in the table
{
player.Pos=DiePos.rawget(player.ID); //Restores the player to death point
DiePos.rawdelete(player.ID); //Delete coordinates after recovery
}
}
function onPlayerDeath(player,reason)
{
if(reason!=43)
{
DiePos.rawset(player.ID,player.Pos); //After the player dies, the ID is used as the search object, and the death coordinates are stored in the table
}
}
function OnPlayerStreamIn(playerid)
{
print("I see the "+GetPlayerName(playerid)+" enter my field of view, and his ID is: "+playerid+".");
local r=RFC("IsPlayerNPC")(playerid);
print(""+r+""); //Always return true
}
DiePos<-{}; //Create a table where you can store coordinates
function onPlayerSpawn(player)
{
if(DiePos.rawin(player.ID)) //If an ID exists in the table
{
player.Pos=DiePos.rawget(player.ID); //Restores the player to death point
DiePos.rawdelete(player.ID); //Delete coordinates after recovery
}
}
function onPlayerDeath(player,reason)
{
DiePos.rawset(player.ID,player.Pos); //After the player dies, the ID is used as the search object, and the death coordinates are stored in the table
}