Menu

Show posts

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 Menu

Topics - Sonmez

#1
Script Showroom / Sonmez's New Chat System
May 10, 2022, 07:38 AM
As most of us know, the original chat in vcmp only supports English letters. So, I have created this custom chat system in order to use Turkish letters. It is also possible to bring support for different languages ​​by changing the font file.   

SERVER SIDE
[noae][noae][noae][noae][noae][noae][noae]function onClientScriptData( player ) {
  local int=Stream.ReadInt(), str=Stream.ReadString();
  local aColour = player.Colour, pcolor = format("[#%02X%02X%02X]", aColour.r, aColour.g, aColour.b);
  if(int==2022){for(local i = 0; i<100; i++){SendDataToClient(i, 2022, pcolor.tolower()+player.Name+": [#ffffff]"+str);}}
}

function SendDataToClient(p,i,s){
  p=FindPlayer(p);
  if(p){
    Stream.StartWrite();Stream.WriteInt(i);
  }
  if(s!=null){
    Stream.WriteString(s);
  }
  Stream.SendStream(p);
}
[/noae][/noae][/noae][/noae][/noae][/noae][/noae]

CLIENT SIDE
[noae][noae]// =================== Credits Goes To ysc3839 for Client Timer ==============================
function Script::ScriptProcess(){
  Timer.Process();
}

Timer <- {
 Timers = {}

 function Create(environment, listener, interval, repeat, ...)
 {
  // Prepare the arguments pack
  vargv.insert(0, environment);

  // Store timer information into a table
  local TimerInfo = {
   Environment = environment,
   Listener = listener,
   Interval = interval,
   Repeat = repeat,
   Args = vargv,
   LastCall = Script.GetTicks(),
   CallCount = 0
  };

  local hash = split(TimerInfo.tostring(), ":")[1].slice(3, -1).tointeger(16);

  // Store the timer information
  Timers.rawset(hash, TimerInfo);

  // Return the hash that identifies this timer
  return hash;
 }

 function Destroy(hash)
 {
  // See if the specified timer exists
  if (Timers.rawin(hash))
  {
   // Remove the timer information
   Timers.rawdelete(hash);
  }
 }

 function Exists(hash)
 {
  // See if the specified timer exists
  return Timers.rawin(hash);
 }

 function Fetch(hash)
 {
  // Return the timer information
  return Timers.rawget(hash);
 }

 function Clear()
 {
  // Clear existing timers
  Timers.clear();
 }

 function Process()
 {
  local CurrTime = Script.GetTicks();
  foreach (hash, tm in Timers)
  {
   if (tm != null)
   {
    if (CurrTime - tm.LastCall >= tm.Interval)
    {
     tm.CallCount++;
     tm.LastCall = CurrTime;

     tm.Listener.pacall(tm.Args);

     if (tm.Repeat != 0 && tm.CallCount >= tm.Repeat)
      Timers.rawdelete(hash);
    }
   }
  }
 }
};

// ============================================================================================

local sX = GUI.GetScreenSize().X,sY = GUI.GetScreenSize().Y;
chatbox <-{Box = null EditBox = null}

function Script::ScriptLoad(){
  createChatBox();
}

function Server::ServerData( stream ){
 local readint=stream.ReadInt( ),readstr=stream.ReadString( );
 switch(readint.tointeger()){
  case 2022: chatProcess(readstr); break;
 }
}

function GUI::InputReturn( editbox ){
  if (editbox == chatbox.EditBox){
      if (chatbox.EditBox.Text == "" || chatbox.EditBox.Text == " " || chatbox.EditBox.Text == " " ){
        chatbox.EditBox = null;
      }else{
        if (chatbox.EditBox.Text.len() < 97){
          SendDataToServer(chatbox.EditBox.Text, 2022);
        }chatbox.EditBox = null;
      }         
  }
}

chat_key <- KeyBind( 0x59 );
function KeyBind::OnDown(key){
  if (key == chat_key){
    if(!chatbox.EditBox){
      createChatEditBox();
    }
  }
}

function VScreen(pos_x, pos_y){//Credits goes to Doom_Kill3R for this function
 local
     screenSize = GUI.GetScreenSize( ),
     x = floor( pos_x * screenSize.X / 1920 ),
     y = floor( pos_y * screenSize.Y / 1080 );
  return VectorScreen( x, y );
}
function SendDataToServer(s, i){local msg=Stream();msg.WriteInt(i.tointeger());msg.WriteString(s);Server.SendData(msg);}


function createChatBox(){
  chatbox.Box = GUIMemobox(VScreen( 10 , 25 ), VScreen(1000, 400), Colour(0, 0, 0, 255), GUI_FLAG_MEMOBOX_TOPBOTTOM | GUI_FLAG_VISIBLE | GUI_FLAG_TEXT_TAGS);
  chatbox.Box.RemoveFlags( GUI_FLAG_BACKGROUND | GUI_FLAG_BORDER );
  chatbox.Box.FontSize = floor( 17 * GUI.GetScreenSize( ).Y / 1080 );
  chatbox.Box.FontName = "TR Tahoma Bold"
  chatbox.Box.FontFlags = GUI_FFLAG_OUTLINE;
  chatbox.Box.LineHeight = 0;
}

function createChatEditBox(){
    chatbox.EditBox = GUIEditbox(VScreen( 15, 370 ), VScreen( 900, 30 ), Colour(0, 0, 0, 255), GUI_FLAG_TEXT_TAGS);
    chatbox.EditBox.FontSize = floor( 17 * GUI.GetScreenSize( ).Y / 1080 );
    chatbox.EditBox.TextColour = Colour(255, 255, 255, 255);
    chatbox.EditBox.FontName = "TR Tahoma Bold"
    chatbox.EditBox.FontFlags = GUI_FFLAG_OUTLINE;
    chatbox.EditBox.RemoveFlags( GUI_FLAG_BACKGROUND | GUI_FLAG_BORDER );
chatbox.EditBox.Text = "";
chatboxTimer <- Timer.Create(this, function(text, int) {
      chatbox.EditBox.Text = "";
  GUI.SetFocusedElement( chatbox.EditBox );
    }, 45, 1, "Timer Text ", 12345);
}
chatTimer <- null;
maxChatLine <- 15;
function chatProcess(readstr){
  if (chatbox.Box.LineHeight == 0){chatbox.Box.LineHeight = 1;}
    chatbox.Box.AddLine(readstr, Colour(255, 255, 255, 255))
    if(chatbox.Box.LineHeight < maxChatLine ){
      chatbox.Box.LineHeight += 1;
    }
    chatTimerProcess();
}

function chatTimerProcess(){
    Timer.Destroy( chatTimer );
    chatTimer <- Timer.Create(this, function(text, int) {
    if (chatbox.Box.LineHeight > 0 ){
      chatbox.Box.LineHeight -=1;
    }
    chatbox.Box.DisplayPos = 0;
 }, 10000, 0, "Timer Text ", 12345);
}
[/noae][/noae]

You need add fonts folder to store.


New Chat Key Is -> "Y"

Preview:


Good luck...
#2
v1.0 Release

Features
  • Controls are similar to Dizzasters map editor. (Because it is the most common editor.)
  • Added relative positioning mode.
  • Very simple and useful.
  • (For v1.0 Beta most features are disabled so you might need wait for updates.)

Controls
  • R - Resets object rotation.
  • Delete - Deletes an object selected.
  • Backspace - Stop controlling an object.
  • Object can be selected by shooting it once.

Commands

  • /editor - Enable or disable map editor.
  • /savemap  - Saves map.
  • /objectlist - Listing all created objects. (With editor)
  • /addobject - Listing all created objects.
  • /selectobject - Selects object with id.
  • /removeobject - Removes object with id.
  • /cloneobject - Clones an object selected.
  • Arrow keys - Movements and rotation.

SERVER SIDE

main.nut
[noae][noae]function onScriptLoad(){
  dofile("scripts/editor.nut"); MonScriptLoad();
}

function onPlayerJoin(player){
    MonPlayerJoin(player);
}

function onClientScriptData( player ) { local int=Stream.ReadInt(), str=Stream.ReadString();
  if (int == 939381){onNewKeyUp(player,str)} else if (int == 939382){onNewKeyDown(player,str)}
}

function onNewKeyUp(player,key){MonKeyUp(player,key)}

function onNewKeyDown(player,key){MonKeyDown(player,key)}

function onPlayerCommand(player,cmd,text){
    MonPlayerCommand(player,cmd,text);
}

function onObjectShot( object, player, weapon ){MonObjectShot( object, player, weapon )}

function find(str,string){if(string.find(str)!= null){return true;}else{return false;}}

function FindAndReplace(string,findString,Replace){
  if (find(findString,string)&&findString!=string){ local n=-1;
    do{n++
      if(n+findString.len()<=string.len()){
        if(string.slice(n,n+findString.len())==findString){ local prev=null,next=null;
          if(n==0){prev="";}else{prev=string.slice(0,n)}
          if(n+Replace.len()==string.len()){next=""}else{next=string.slice(n+findString.len(),string.len())}
          string = format("%s%s%s"prev,Replace,next); n=string.len()+1;
          return string;
        }
      }
    }while (n<string.len())
  }else{return string;}
}

function GetTok(string, separator, n, ...){
  local m = vargv.len() > 0 ? vargv[0] : n,tokenized = split(string, separator),text = "";
  if (n > tokenized.len() || n < 1) return null;
  for (; n <= m; n++){text += text == "" ? tokenized[n-1] : separator + tokenized[n-1];}return text;
}

function NumTok( string, separator){local tokenized = split(string, separator); return tokenized.len();}
[/noae][/noae]

editor.nut
[noae][noae]class MapEditor{ editing=false; reposition=true; selectedobj=null; speed=0.1; motion=null; motioning=false; }

function MonScriptLoad(){
  MapDB <- ConnectSQL( "MapDB.db" ); map <- array(GetMaxPlayers(), null); MapObjects <- "";
  QuerySQL(MapDB, "create table if not exists Map (List NUMERIC DEFAULT 0,Model NUMERIC DEFAULT 0,World NUMERIC DEFAULT 0,X TEXT, Y TEXT,Z TEXT,rX TEXT, rY TEXT,rZ TEXT, Alpha TEXT)");
  createMapObjects();
}

function MonPlayerJoin(player){ map[player.ID] = MapEditor(); }

function MonPlayerCommand(player,cmd,text){
  if (cmd=="cmds"||cmd=="commands"){
    MessagePlayer("[#3486eb](/) [#ffffff]editor, savemap, objectlist", player);
    MessagePlayer("[#3486eb](/) [#ffffff]addobject, removeobject, selectobject, cloneobject", player);
  }
  else if (cmd=="editor"){
    if (map[player.ID].editing == false){map[player.ID].editing = true; MessagePlayer("[#3486eb]# [#ffffff]Map editor mod enabled.", player);}
    else {map[player.ID].editing = false;  map[player.ID].selectedobj = null; MessagePlayer("[#3486eb]# [#ffffff]Map editor mod disabled.", player);}
  }
  else if (cmd=="savemap"){
    if (map[player.ID].editing == false){return false;}
    saveMapObjects()
  }
  else if (cmd=="objectlist"){ local list=""
    for (local i = 0; i < GetObjectCount()+1; i++){
      if (GetTok(MapObjects, ",", i)){
        local object = FindObject(GetTok(MapObjects,",",i).tointeger());
        if (object){if (list == ""){list = "[#34e5eb]ID: [#ffffff]"+object.ID}else{list = list+", [#34e5eb]ID: [#ffffff]"+object.ID}}
      }
    }text = "[#3486eb]|Object List| ";MessagePlayer("[#3486eb]# [#ffffff]"+text, player);MessagePlayer("[#3486eb]# [#ffffff]"+list, player);
  }
  else if (cmd=="addobject"){
    if (map[player.ID].editing == false){return false;}
    if (!text){MessagePlayer("[#3486eb]# [#ffffff]You must enter numeric value for object model.", player);}
    if (IsNum(text)){
      local model = text.tointeger(), world = player.World,pos = player.Pos,alpha = 255,ObjID = CreateObject( model, world, pos, alpha ).ID;
      FindObject(ObjID).TrackingShots = true; addMapObject(ObjID); map[player.ID].selectedobj = FindObject(ObjID);
      MessagePlayer("[#3486eb]# [#ffffff]Object with model number "+model+" created. ID: "+ObjID+"", player);
      MessagePlayer("[#3486eb]# [#ffffff]Selected object with id:"+ObjID+"", player);
    }
    else{MessagePlayer("[#3486eb]# [#ffffff]You must enter numeric value for object model.", player);}
  }
  else if (cmd=="removeobject"){
    if (map[player.ID].editing == false){return false;}
    if (!text){MessagePlayer("[#3486eb]# [#ffffff]You must enter numeric value for object ID.", player);}
    if (!IsNum(text)){MessagePlayer("[#3486eb]# [#ffffff]You must enter numeric value for object ID.", player); return false;}
    if (FindObject(text.tointeger())){deleteMapObject(text.tointeger());}
    MessagePlayer("[#3486eb]# [#ffffff]Object with id: "+text+" deleted", player);
  }
  else if (cmd=="selectobject"){
    if (map[player.ID].editing == false){return false;}
    if (!text){MessagePlayer("[#3486eb]# [#ffffff]You must enter numeric value for object ID.", player);}
    if (!IsNum(text)){MessagePlayer("[#3486eb]# [#ffffff]You must enter numeric value for object ID.", player); return false;}
    local obj = FindObject(text.tointeger());
    local found = 989898;for (local i = 0; i < 100; i++){local plr = FindPlayer(i); if (plr){if (map[plr.ID].selectedobj == obj){found = i;}}}
    if (found == true){MessagePlayer("[#3486eb]# [#ffffff]"+FindPlayer(found.tointeger).Name+" is using this object now. Select another one.", player); return false;}
    if (obj){ map[player.ID].selectedobj = obj;
    MessagePlayer("[#3486eb]# [#ffffff]Selected object with id:"+text+"", player);
    }else{MessagePlayer("[#3486eb]# [#ffffff]ID: "+text+" not found. Try with another id.", player);}
  }
  else if (cmd=="cloneobject"){
    if (map[player.ID].editing == false){return false;}
    if (map[player.ID].selectedobj){local object = map[player.ID].selectedobj;
      local model = object.Model, world = object.World,pos = object.Pos,alpha = 255,ObjID = CreateObject( model, world, pos, alpha ).ID;
      FindObject(ObjID).TrackingShots = true; addMapObject(ObjID); map[player.ID].selectedobj = FindObject(ObjID);
      map[player.ID].selectedobj = FindObject(ObjID);
      MessagePlayer("[#3486eb]# [#ffffff]Cloned object " + text + " at its position", player);
      MessagePlayer("[#3486eb]# [#ffffff]Selected object with id:"+ObjID+"", player);
    }
  }
  else{
    MessagePlayer("[#3486eb]# [#ffffff]''"+cmd+"'' command not found. Use /cmds or /commands to see all commands.", player)
  }
}
function MonObjectShot( object, player, weapon ){
  if (map[player.ID].editing == true){
    local found = false;
    for (local i = 0; i < 100; i++){local plr = FindPlayer(i); if (plr){if (map[plr.ID].selectedobj == object){found = true;}}}
    if (found == true) return false;
    MessagePlayer("[#3486eb]# [#ffffff]Selected object with id:"+object.ID+"", player)
    map[player.ID].selectedobj = object;
  }
}

function speedUP(player){
  switch(map[player.ID].speed){
    case 0.1: map[player.ID].speed = 0.6; MessagePlayer("[#3486eb]# [#ffffff]Movement speed is: NORMAL",player); break;
    case 0.6: map[player.ID].speed = 1.1; MessagePlayer("[#3486eb]# [#ffffff]Movement speed is: FAST",player); break;
    case 1.1: map[player.ID].speed = 1.6; MessagePlayer("[#3486eb]# [#ffffff]Movement speed is: VERY FAST",player); break;
    case 1.6: MessagePlayer("[#3486eb]# [#ffffff]Movement speed is: VERY FAST",player); break;
  }
}
function speedDOWN(player){
  switch(map[player.ID].speed){
    case 0.1: MessagePlayer("[#3486eb]# [#ffffff]Movement speed is: SLOW",player); break;
    case 0.6: map[player.ID].speed = 0.1; MessagePlayer("[#3486eb]# [#ffffff]Movement speed is: SLOW",player); break;
    case 1.1: map[player.ID].speed = 0.6; MessagePlayer("[#3486eb]# [#ffffff]Movement speed is: NORMAL",player); break;
    case 1.6: map[player.ID].speed = 1.1; MessagePlayer("[#3486eb]# [#ffffff]Movement speed is: FAST",player); break;
  }
}
function PUP(player,object){
  if (map[player.ID].reposition == true){object.Pos.z += map[player.ID].speed;}
  else{object.RotateByEuler( Vector( map[player.ID].speed, 0, 0 ), 100 );}
}
function PDOWN(player,object){
  if (map[player.ID].reposition == true){object.Pos.z -= map[player.ID].speed;}
  else{object.RotateByEuler( Vector( -map[player.ID].speed, 0, 0 ), 100 );}
}
function UP(player,object){
  if (map[player.ID].reposition == true){
  local rel = calculateAngle(player);
    switch(rel){
      case 1: object.Pos.x -= map[player.ID].speed; break;
      case 2: object.Pos.y -= map[player.ID].speed; break;
      case 3: object.Pos.y += map[player.ID].speed; break;
      case 4: object.Pos.x += map[player.ID].speed; break;
      case 5: object.Pos.y -= map[player.ID].speed; break;
      case 6: object.Pos.y += map[player.ID].speed; break;
    }
  }else{object.RotateByEuler( Vector( 0, map[player.ID].speed, 0 ), 100 );}
}
function DOWN(player,object){
  if (map[player.ID].reposition == true){
  local rel = calculateAngle(player);
    switch(rel){
      case 1: object.Pos.x += map[player.ID].speed; break;
      case 2: object.Pos.y += map[player.ID].speed; break;
      case 3: object.Pos.y -= map[player.ID].speed; break;
      case 4: object.Pos.x -= map[player.ID].speed; break;
      case 5: object.Pos.y += map[player.ID].speed; break;
      case 6: object.Pos.y -= map[player.ID].speed; break;
    }
  }else{object.RotateByEuler( Vector( 0, -map[player.ID].speed, 0 ), 100 );}
}
function RIGHT(player,object){
  if (map[player.ID].reposition == true){
  local rel = calculateAngle(player);
    switch(rel){
      case 1: object.Pos.y -= map[player.ID].speed; break;
      case 2: object.Pos.x += map[player.ID].speed; break;
      case 3: object.Pos.x -= map[player.ID].speed; break;
      case 4: object.Pos.y += map[player.ID].speed; break;
      case 5: object.Pos.x += map[player.ID].speed; break;
      case 6: object.Pos.x -= map[player.ID].speed; break;
    }
  }else{object.RotateByEuler( Vector( 0, 0, map[player.ID].speed ), 100 );}
}
function LEFT(player,object){
  if (map[player.ID].reposition == true){
  local rel = calculateAngle(player);
    switch(rel){
      case 1: object.Pos.y += map[player.ID].speed; break;
      case 2: object.Pos.x -= map[player.ID].speed; break;
      case 3: object.Pos.x += map[player.ID].speed; break;
      case 4: object.Pos.y -= map[player.ID].speed; break;
      case 5: object.Pos.x -= map[player.ID].speed; break;
      case 6: object.Pos.x += map[player.ID].speed; break;
    }
  }else{object.RotateByEuler( Vector( 0, 0, -map[player.ID].speed ), 100 );}
}

function calculateAngle(player){
  local a = player.Angle;
  if (a > 0){if (0.8 < a && a < 2.4){return 1;}else{if (a > 2.4){return 2;}else if (a < 0.8){return 3;}}}
  else{if (-2.4 < a && a < -0.8){return 4;}else{if (-2.4 > a){return 5;}else if (-0.8 < a){return 6;}}}
}

function MonKeyUp(player,key){
  if (map[player.ID].motion != null){ map[player.ID].motion.Delete(); map[player.ID].motion = null;}
}
function MonKeyDown(player,key){
  if ( typeof player != "instance" ){player = FindPlayer(player); if (!player){return false}}
  if (map[player.ID].editing == true && map[player.ID].selectedobj != null){
    local obj = FindObject(map[player.ID].selectedobj.ID);
    switch (key)
    {
      case "Up": UP(player,obj); break;
      case "Down": DOWN(player,obj); break;
      case "Right": LEFT(player,obj); break;
      case "Left": RIGHT(player,obj); break;
      case "PUp": PUP(player,obj); break;
      case "PDown": PDOWN(player,obj); break;
      case "R":
        obj.RotateToEuler( Vector( 0, 0, 0 ), 0 );
        MessagePlayer( "[#3486eb]# [#ffffff]Rotation angles have been reset", player );
      break;
      case "One":
        switch(map[player.ID].speed){
          case 0.1:
            map[player.ID].speed = 0.6;
            MessagePlayer("[#3486eb]# [#ffffff]Movement speed is: NORMAL",player);
          break;
          case 0.6:
            map[player.ID].speed = 1.1;
            MessagePlayer("[#3486eb]# [#ffffff]Movement speed is: FAST",player);
          break;
          case 1.1:
            map[player.ID].speed = 1.6;
            MessagePlayer("[#3486eb]# [#ffffff]Movement speed is: VERY FAST",player);
          break;
          case 1.6:
            map[player.ID].speed = 0.1;
            MessagePlayer("[#3486eb]# [#ffffff]Movement speed is: SLOW",player);
          break;
        }
      break;
      case "Two":
      if (map[player.ID].reposition == true){map[player.ID].reposition=false;
        MessagePlayer("[#3486eb]# [#ffffff]Positioning mode closed. Rotating mode opened.", player);
      }else{map[player.ID].reposition=true;
        MessagePlayer("[#3486eb]# [#ffffff]Positioning mode opened. Rotating mode closed.", player);
      }
      break;
      case "Delete":
        deleteMapObject(obj.ID);
        MessagePlayer("[#3486eb]# [#ffffff]Object has been removed",player);
        map[player.ID].selectedobj = null;
      break;
      case "BackSpace":
        map[player.ID].selectedobj = null;
        MessagePlayer("[#3486eb]# [#ffffff]You have finished editing the object",player);
      break;
    }
    if (key == "Up" || key == "Down" || key == "Right" || key == "Left" || key == "PUp" || key == "PDown"){
      if (map[player.ID].motion == null){map[player.ID].motion = NewTimer("MonKeyDown", 100, 0, player.ID,key);}
    }
  }
}

function createMapObjects(){
  for (local i = 0; i < 5000; i++){
    local q = QuerySQL(MapDB, "SELECT * FROM Map WHERE List = '" + i + "'");
    if (q){
      local list = GetSQLColumnData(q, 0).tointeger(),
      model = GetSQLColumnData(q, 1).tointeger(),
      world = GetSQLColumnData(q, 2).tointeger(),
      X = GetSQLColumnData(q, 3).tofloat(),
      Y = GetSQLColumnData(q, 4).tofloat(),
      Z = GetSQLColumnData(q, 5).tofloat(),
      rX = GetSQLColumnData(q, 6).tofloat(),
      rY = GetSQLColumnData(q, 7).tofloat(),
      rZ = GetSQLColumnData(q, 8).tofloat(),
      alpha = GetSQLColumnData(q, 9).tointeger(),
      pos = Vector(X,Y,Z);
      CreateObject( model, world, pos, alpha );
      local ObjID = GetObjectCount()-1;
      FindObject(ObjID).TrackingShots = true;
      FindObject(ObjID).RotateToEuler(Vector(rX,rY,rZ),0);
      addMapObject(ObjID) 
    }
  }
}

function addMapObject(ObjID){
  if (MapObjects == ""){MapObjects = ObjID.tostring();}
  else{MapObjects = MapObjects+","+ObjID;}
}

function deleteMapObject(ObjID){
  ObjID = ObjID.tointeger()
  local object = FindObject(ObjID);
  if (object){
    if (find(","+ObjID,MapObjects)){MapObjects = FindAndReplace(MapObjects,","+ObjID,"");}
    else if (find(ObjID+",",MapObjects)){MapObjects = FindAndReplace(MapObjects,ObjID+",","");}
    else{MapObjects = "";}
    object.Delete()
  }
}

function saveMapObjects(){
  QuerySQL(MapDB,"DELETE FROM Map"); local a = 0;
  for (local i = 0; i < GetObjectCount()+1; i++){
    if (GetTok(MapObjects, ",", i)){
      local object = FindObject(GetTok(MapObjects,",",i).tointeger());
      if (object){
        QuerySQL(MapDB, "INSERT INTO Map (List, Model, World , X, Y, Z, rX ,rY,rZ, Alpha) VALUES ( '"
        + a + "','"
        + object.Model + "','"
        + object.World + "','"
        + object.Pos.x + "','"
        + object.Pos.y + "','"
        + object.Pos.z + "','"
        + object.RotationEuler.x + "','"
        + object.RotationEuler.y + "','"
        + object.RotationEuler.z + "','"
        + object.Alpha + "' )");
        a++;
      }
    }
  }
  if (a == 0){Message("[#3486eb]# [#ffffff]Database has been reset.");}
  else{Message("[#3486eb]# [#ffffff]"+a+" object saved to database.");}
}
[/noae][/noae]


CLIENT SIDE

main.nut
[noae][noae]local Enter = KeyBind( 0x0D );
local BackSpace = KeyBind( 0x08 );
local Shift = KeyBind( 0x10 );
local Delete = KeyBind(0x2E);
local Up = KeyBind(0x26);
local Down = KeyBind(0x28);
local Left = KeyBind(0x25);
local Right = KeyBind(0x27);
local PUp = KeyBind(0x21);
local PDown = KeyBind(0x22);
local One = KeyBind(0x31);
local Two = KeyBind(0x32);
local I = KeyBind(0x49);
local L = KeyBind(0x4C);
local R = KeyBind(0x52);
function KeyBind::OnUp(key){
  switch(key){
    case Enter: SendDataToServer("Enter", 939381); break;
    case BackSpace: SendDataToServer("BackSpace", 939381); break;
    case Shift: SendDataToServer("Shift", 939381); break;
    case Delete: SendDataToServer("Delete", 939381); break;
    case Up: SendDataToServer("Up", 939381); break;
    case Down: SendDataToServer("Down", 939381); break;
    case Left: SendDataToServer("Left", 939381); break;
    case Right: SendDataToServer("Right", 939381); break;
    case PUp: SendDataToServer("PUp", 939381); break;
    case PDown: SendDataToServer("PDown", 939381); break;
    case One: SendDataToServer("One", 939381); break;
    case Two: SendDataToServer("Two", 939381); break;
    case I: SendDataToServer("I", 939381); break;
    case L: SendDataToServer("L", 939381); break;
    case R: SendDataToServer("R", 939381); break;
  }
}

function KeyBind::OnDown(key){
  switch(key){
    case Enter: SendDataToServer("Enter", 939382); break;
    case BackSpace: SendDataToServer("BackSpace", 939382); break;
    case Shift: SendDataToServer("Shift", 939382); break;
    case Delete: SendDataToServer("Delete", 939382); break;
    case Up: SendDataToServer("Up", 939382); break;
    case Down: SendDataToServer("Down", 939382); break;
    case Left: SendDataToServer("Left", 939382); break;
    case Right: SendDataToServer("Right", 939382); break;
    case PUp: SendDataToServer("PUp", 939382); break;
    case PDown: SendDataToServer("PDown", 939382); break;
    case One: SendDataToServer("One", 939382); break;
    case Two: SendDataToServer("Two", 939382); break;
    case I: SendDataToServer("I", 939382); break;
    case L: SendDataToServer("L", 939382); break;
    case R: SendDataToServer("R", 939382); break;
  }
}
function SendDataToServer(s, i){local msg=Stream();msg.WriteInt(i.tointeger());msg.WriteString(s);Server.SendData(msg);}
[/noae][/noae]

    Update Notes:
    • Code has been reproduced
    • Added more features
    • Added client side key event to server side key event
    • Bug fixes
#3
Syntax
function onPlayerUnderAttack(player,plr)

Example
function onPlayerUnderAttack(player,plr)
{
  Message(player.Name+" is attacking "+plr.Name);
}

Source Code

CLIENT SIDE
function Player::PlayerShoot(player, weapon, hitEntity, hitPosition)
{
  if (player == World.FindLocalPlayer()){
  if (hitEntity.Type == 0){
      local shooter = player;
      local plr = hitEntity.ID;
      local message = Stream();
      message.WriteInt(12332115);  // use unique integer
      message.WriteString(plr.tostring());
      Server.SendData(message);}
}}


SERVER SIDE

function onPlayerUnderAttack(player,plr)
{
  Message(player.Name+" is attacking "+plr.Name);
}
function onClientScriptData( player )
{
    local int = Stream.ReadInt(),
    string = Stream.ReadString();
    if (int == 12332115)
    {
      local plr = FindPlayer(string.tointeger());
      if (plr){onPlayerUnderAttack(player,plr)}
    }
}
#4
Source Code
function find(str,string){
  if(string.find(str)!= null){return true;}else{return false;}
}
function FindAndReplace(string,findString,Replace){
  if (find(findString,string)&&findString!=string){ local n=-1;
    do{n++
      if(n+findString.len()<=string.len()){
        if(string.slice(n,n+findString.len())==findString){ local prev=null,next=null;
          if(n==0){prev="";}else{prev=string.slice(0,n)}
          if(n+Replace.len()==string.len()){next=""}else{next=string.slice(n+findString.len(),string.len())}
          string = format("%s%s%s"prev,Replace,next); n=string.len()+1;
          return string;
        }
      }
    }while (n<string.len())
  }else{return string;}
}
#5
Syntax
function onPickupExited( player, pickup )

Example
function onPickupExited( player, pickup )
{
  if ( pickup.Model == 408 )
  {
    MessagePlayer( "You exited from pickup with model 408", player );
  }
}

Source Code
function onScriptLoad()
{
  LastPickup <- array(GetMaxPlayers(),null)
}
function onPlayerJoin( player )
{
  LastPickup[player.ID] = null;
}
function onPickupPickedUp( player, pickup )
{
  LastPickup[player.ID] = pickup;
}
function onPlayerMove( player, lastX, lastY, lastZ, newX, newY, newZ )
{
  if (LastPickup[player.ID] != null)
  {
    local LP = LastPickup[player.ID];
    local DistanceFromLastPickup = DistanceFromPoint( newX, newY, LP.Pos.x, LP.Pos.y).tointeger();
    if (DistanceFromLastPickup > 0.5)
    {
      onPickupExited(player,LP)
      LastPickup[player.ID] = null;
    }
  }
}

function onPickupExited( player,pickup )
{
  MessagePlayer("Wow, new function!. It works...",player);
}
#6
Source Code
[noae]function onScriptLoad(){
  VehicleDB <- ConnectSQL( "VehicleDB.db" );
  QuerySQL(VehicleDB, "create table if not exists Vehicles (List NUMERIC DEFAULT 0, ID NUMERIC DEFAULT 0,"
                     +"Model NUMERIC DEFAULT 0, World NUMERIC DEFAULT 0,"
                     +"PosX TEXT,PosY TEXT, PosZ TEXT,"
                     +"Col1 TEXT, Col2 TEXT, Angle TEXT,"
                     +"Locked BOOLEAN DEFAULT true,Owner TEXT,Price NUMERIC DEFAULT 0)");
  LoadVehicles();
}
function ReloadVehicles(){
  for(local i = 0; i<500; i++){
    local r = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE List = '" + i + "'");
    if (r){
      local veh = FindVehicle(q(r,1).tointeger()); if (veh){veh.Delete();} if(i==500){}
    }
  }LoadVehicles();
}
function LoadVehicles(){
  for(local i = 0; i<500; i++){local r = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE List = '" + i + "'");
    if (r){
      local Model = q(r,2).tointeger(), PosX = q(r,4).tofloat(), PosY = q(r,5).tofloat(), PosZ = q(r,6).tofloat(), Col1 = q(r,7).tointeger(), Col2 = q(r,8).tointeger(), Angle = q(r,9).tofloat();
      CreateVehicle( Model, 1, Vector(PosX,PosY,PosZ), Angle, Col1 ,Col2 )
      local newID = GetVehicleCount();
      QuerySQL( VehicleDB, "UPDATE Vehicles SET ID='"+newID+"' WHERE List LIKE '" + i + "'" );
    }
  }
}function q(r,n){return GetSQLColumnData(r,n);}

function onPlayerEnteringVehicle( player, vehicle, door ){
  local r = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE ID = '" + vehicle.ID + "'")
  if (r){local Locked = q(r,10).tostring();
    if (Locked == "true"){
      local Owner = q(r,11).tostring();
      local Price = q(r,12).tointeger();
      if(Owner != "null"){MessagePlayer("This car locked by "+Owner,player);}
      if(Owner == "null"){MessagePlayer("You haven't got keys. Use /buycar "+vehicle.ID,player);}
      return false;
    }else{return true;}
  }else{return true;}
}
function onPlayerEnterVehicle( player, vehicle, door ){
  local r = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE ID = '" + vehicle.ID + "'")
  if (r){ local Owner=q(r,11).tostring(), Price=q(r,12).tointeger();
    if (Owner != "null"){MessagePlayer("This car is owned by "+Owner+" for "+Price+"$",player);}
    if (Owner == "null"){MessagePlayer("This car is for sale "+Price+"$",player);}
  }
}

function onPlayerCommand( player, cmd, text ){
  if (cmd == "buycar"){
    if (!text){MessagePlayer("/buycar <id>",player); return false;}
    if (!IsNum(text)){MessagePlayer("/buycar <id>",player); return false;}
    local vehicle = FindVehicle(text.tointeger())
    if (vehicle){
      local r = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE ID = '" + vehicle.ID + "'");
      if (r){
        local Model =q(r,2).tointeger(),Owner = q(r,11).tostring(),Price = q(r,12).tointeger();
        if (Owner != "null"){MessagePlayer("This car is owned by "+Owner+" for "+Price+"$", player); return false;}
        if (player.Cash < Price){MessagePlayer("Your money isn't enough for buy this car", player); return false;}
        QuerySQL( VehicleDB, "UPDATE Vehicles SET Owner='"+player.Name+"' WHERE ID LIKE '" + vehicle.ID + "'" );
        player.Cash -= Price;
        MessagePlayer("You bought "+GetVehicleNameFromModel( Model )+" with "+vehicle.ID+" ID", player);
      }else{MessagePlayer("This car isn't available try another vehicle", player);return false;}
    }
  }
  else if (cmd == "sellcar"){
    if (!text){MessagePlayer("/buycar <id>",player); return false;}
    if (!IsNum(text)){MessagePlayer("/buycar <id>",player); return false;}
    local vehicle = FindVehicle(text.tointeger())
    if (vehicle){
      local r = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE ID = '" + vehicle.ID + "'");
      if (r){
        local Owner = q(r,11).tostring(),Price = q(r,12).tointeger();
        if (Owner != "null" && Owner != player.Name){MessagePlayer("This car is owned by "+Owner+" for "+Price+"$", player); return false;}
        if (Owner == "null"){MessagePlayer("This car isn't yours", player); return false;}
        QuerySQL( VehicleDB, "UPDATE Vehicles SET Owner='"+"null"+"' WHERE ID LIKE '" + vehicle.ID + "'" );
        MessagePlayer("You sold your vehicle for "+Price*0.5+"$", player);
        player.Cash += Price*0.5;
      }else{MessagePlayer("This car isn't available try another vehicle", player);return false;}
    }
  }
  else if (cmd == "getcar"){
    if (!text){MessagePlayer("/getcar <id>",player); return false;}
    if (!IsNum(text)){MessagePlayer("/getcar <id>",player); return false;}
    local vehicle = FindVehicle(text.tointeger())
    if (vehicle){
      local r = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE ID = '" + vehicle.ID + "'");
      if (r){
        local Owner = q(r,11).tostring();
        local Price = q(r,12).tointeger();
        if (Owner != "null" && Owner != player.Name||Owner == "null"){MessagePlayer("This car isn't yours", player); return false;}
        vehicle.Pos = Vector(player.Pos.x+2, player.Pos.y, player.Pos.z);
        MessagePlayer("You teleported your vehicle to yourself", player);
      }else{MessagePlayer("This car isn't available try another vehicle", player);return false;}
    }
  }
  else if (cmd == "lockcar"){
    if (!text){MessagePlayer("/lockcar <id>",player); return false;}
    if (!IsNum(text)){MessagePlayer("/lockcar <id>",player); return false;}
    local vehicle = FindVehicle(text.tointeger())
    if (vehicle){
      local r = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE ID = '" + vehicle.ID + "'");
        if (r){local Owner = q(r,11).tostring(),Price = q(r,12).tointeger();
          if (Owner != "null" && Owner != player.Name||Owner == "null"){MessagePlayer("This car isn't yours", player); return false;}
          QuerySQL( VehicleDB, "UPDATE Vehicles SET Locked='"+"true"+"' WHERE ID LIKE '" + vehicle.ID + "'" );
          MessagePlayer("You locked your car", player);
        }else{
          MessagePlayer("This car isn't available try another vehicle", player);
          return false;
        }
    }
  }
  else if (cmd == "unlockcar"){
    if (!text){MessagePlayer("/unlockcar <id>",player); return false;}
    if (!IsNum(text)){MessagePlayer("/unlockcar <id>",player); return false;}
    local vehicle = FindVehicle(text.tointeger())
    if (vehicle){
      local r = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE ID = '" + vehicle.ID + "'");
      if (r){
        local Owner = q(r,11).tostring(), Price = q(r,12).tointeger();
        if (Owner != "null" && Owner != player.Name||Owner == "null"){MessagePlayer("This car isn't yours", player); return false;}
        QuerySQL( VehicleDB, "UPDATE Vehicles SET Locked='"+"false"+"' WHERE ID LIKE '" + vehicle.ID + "'" );
        MessagePlayer("You unlocked your car", player);
      }else{MessagePlayer("This car isn't available try another vehicle", player);return false;}
    }
  }
  else if (cmd == "mycars"){
    local cars = "";
    for(local i = 0; i<500; i++){local r = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE List = '" + i + "'");
      if (r){
        local Owner = q(r,11).tostring(),ID = q(r,1).tointeger(),Model = q(r,2).tointeger();
        if (Owner == player.Name){
          if (cars !=""){
            cars = cars+", "+GetVehicleNameFromModel( Model )+"("+ID+")";
          }
          if (cars == ""){
            cars = ""+GetVehicleNameFromModel( Model )+"("+ID+")";
          }
        }
      }
    }
    local t = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE Owner = '" + player.Name + "'");
    if (t){MessagePlayer("Your cars: " +cars, player);}
    else{MessagePlayer("You haven't got any car", player);return false;}
  }
  else{
    if (stats[player.ID].Level==200){onPlayerACommand(player,cmd,text);}
  }
}
function onPlayerACommand( player, cmd, text ){
  if (cmd == "addcar"){
    if (!text){MessagePlayer("/addcar <world> <model> <col1> <col2> <price>",player); return false;}
    if (!GetTok( text, " ", 1 )||!GetTok( text, " ", 2 )||!GetTok( text, " ", 3 )||!GetTok( text, " ", 4 )||!GetTok( text, " ", 5 )||GetTok( text, " ", 6 )){MessagePlayer("/addcar <world> <model> <col1> <col2> <price>",player); return false;}
    if (!IsNum(GetTok( text, " ", 1 ))||!IsNum(GetTok( text, " ", 2 ))||!IsNum(GetTok( text, " ", 3 ))||!(IsNum(GetTok( text, " ", 4 )))||!IsNum(GetTok( text, " ", 5 ))){MessagePlayer("/addcar <world> <model> <col1> <col2> <price>",player); return false;}
    local lastlist = 0,world = GetTok( text, " ", 1 ).tointeger(),model = GetTok( text, " ", 2 ).tointeger(),col1 = GetTok( text, " ", 3 ).tointeger(),col2 = GetTok( text, " ", 4 ).tointeger(),price = GetTok( text, " ", 5 ).tointeger(),
    veh = CreateVehicle( model, world, Vector(player.Pos.x,player.Pos.y,player.Pos.z), player.Angle, col1 ,col2 ),
    vehID= GetVehicleCount();
    for(local i = 0; i<500; i++){local r = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE List = '" + i + "'");
      if (r){lastlist++;}
    }
    QuerySQL(VehicleDB, "INSERT INTO Vehicles ( List, ID, Model , World, PosX, PosY, PosZ, Col1, Col2, Angle, Locked,Owner,Price) VALUES ( '" + lastlist + "','" + vehID + "','" + model + "','" + world + "','" + player.Pos.x + "','" + player.Pos.y  + "','" + player.Pos.z  + "','" + col1 + "','" + col2 + "','" + player.Angle + "','" + true + "','" + "null" + "','" + price + "' )");
  }
  if (cmd == "removecar"){
    if (!text){MessagePlayer("/removecar <vehicleID>",player); return false;}
    if (!GetTok( text, " ", 1 )||!IsNum(GetTok( text, " ", 1 )) || GetTok( text, " ", 2 )){MessagePlayer("/removecar <vehicleID>",player); return false;}
    local vehicle = FindVehicle(GetTok( text, " ", 1 ).tointeger());
    if (!vehicle){MessagePlayer("This car isn't available try another vehicle", player); return false;}
    local lastlist = 0,List = 0,i = 0;
    for(i = 0; i<500; i++){local a = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE List = '" + i + "'");
      if (a){lastlist++;}
    }
    local b = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE ID = '" + vehicle.ID + "'");
    if (b){List = GetSQLColumnData(b, 0).tointeger();
      QuerySQL( VehicleDB, "DELETE FROM Vehicles WHERE ID='"+vehicle.ID+"'" );
      vehicle.Delete();
    }
    for(i = List+1; i<lastlist; i++){local c = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE List = '" + i + "'");
      if (c){
        local newList = GetSQLColumnData(c, 0).tointeger()-1;
        QuerySQL( VehicleDB, "UPDATE Vehicles SET List='"+newList+"' WHERE List LIKE '" + i + "'" );
      }ReloadVehicles();
    }
  }
  if (cmd == "changecol")
  {
    if (!text){MessagePlayer("/changecol <vehicle id> <col1 id> <col2 id>",player); return false;}
    if(!GetTok( text, " ", 1 )||!GetTok( text, " ", 2 )||!GetTok( text, " ", 3 )||GetTok(text, " ", 4)){MessagePlayer("/changecol <vehicle id> <col1 id> <col2 id>",player); return false;}
    if(!IsNum(GetTok( text, " ", 1 ))||!IsNum(GetTok( text, " ", 2 ))||!IsNum(GetTok( text, " ", 3 ))){MessagePlayer("/changecol <vehicle id> <col1 id> <col2 id>",player); return false;}
    local vehicle = FindVehicle(GetTok( text, " ", 1 ).tointeger())
    local col1 = GetTok( text, " ", 2 ).tointeger(),col2 = GetTok( text, " ", 3 ).tointeger();
    if (vehicle){
      local r = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE ID = '" + vehicle.ID + "'");
      if (r){
        QuerySQL( VehicleDB, "UPDATE Vehicles SET Col1='"+col1+"', Col2 = '"+col2+"' WHERE ID LIKE '" + vehicle.ID + "'" );
        MessagePlayer("Vehicle ID:"+vehicle.ID+"'s color has been changed with col1:"+col1+", col2: "+col2+"", player);
        vehicle.Colour1 = col1
        vehicle.Colour2 = col2
      }else{MessagePlayer("This car isn't available try another vehicle", player);return false;}
    }
  }
  if (cmd == "changepos"){
    if (!text){MessagePlayer("/changepos <vehicle id>",player); return false;}
    if (!GetTok( text, " ", 1 )||!IsNum(GetTok(text, " ", 1))||GetTok( text, " ", 2 )){MessagePlayer("/changepos <vehicle id>",player); return false;}
    local vehicle = FindVehicle(GetTok( text, " ", 1 ).tointeger()),px = player.Pos.x.tostring(),py = player.Pos.y.tostring(),pz = player.Pos.z.tostring(),angle = asin(vehicle.Rotation.z)*2;
    if (!vehicle){return false;}
    local r = QuerySQL(VehicleDB, "SELECT * FROM Vehicles WHERE ID = '" + vehicle.ID + "'");
    if (r){QuerySQL( VehicleDB, "UPDATE Vehicles SET PosX='"+px+"', PosY = '"+py+"', PosZ = '"+pz+"', Angle = '"+angle+"' WHERE ID LIKE '" + vehicle.ID + "'" );
      MessagePlayer("Vehicle ID:"+vehicle.ID+"'s position has been changed with position:"+px+", "+py+", "+pz+"", player);
    }else{MessagePlayer("This car isn't available try another vehicle", player);return false;}
    ReloadVehicles();
  }
}

function GetTok(string, separator, n, ...){local m = vargv.len() > 0 ? vargv[0] : n,tokenized = split(string, separator),text = "";
if (n > tokenized.len() || n < 1){return null;}for (; n <= m; n++){text += text == "" ? tokenized[n-1] : separator + tokenized[n-1];} return text;
}function NumTok( string, separator ){local tokenized = split(string, separator); return tokenized.len();}
[/noae]

    Update Notes:
    • Code has been reproduced
    • Bug fixes.
#7
Updated...

[noae][noae][noae][noae]function onScriptLoad()
{
    fatigue <- array(GetMaxPlayers(), null);
}
function onPlayerJoin( player )
{
    fatigue[player.ID] = false;
}
function onPlayerMove( player, lastX, lastY, lastZ, newX, newY, newZ )
{
    if (player.Speed.x > 0.15 || player.Speed.x < -0.15||player.Speed.y > 0.15 || player.Speed.y < -0.15)
    {
        if(fatigue[player.ID] == false && !player.Vehicle)
        {
            NewTimer("CheckFatigue", 1000, 1, player.ID,1,0);
            fatigue[player.ID] = true;
        }
    }
}
function CheckFatigue(p,a,t)
{
    local player = FindPlayer(p)
    if (!player) return false;
    if (player.Vehicle) return false;
    switch(a)
    {
        case 0:
          if (player.Speed.x > 0.15 || player.Speed.x < -0.15||player.Speed.y > 0.15 || player.Speed.y < -0.15)
          {
              NewTimer("CheckFatigue", 1000, 1, player.ID,1,0);
          }
          else
          {
              fatigue[player.ID] = false;
          }
        break;
        case 1:
          if (player.Speed.x > 0.15 || player.Speed.x < -0.15||player.Speed.y > 0.15 || player.Speed.y < -0.15)
          {
              NewTimer("CheckFatigue", 1000, 1, player.ID,2,0);
          }
          else
          {
              NewTimer("CheckFatigue", 1000, 1, player.ID,0,0);
          }
        break;
        case 2:
          if (player.Speed.x > 0.15 || player.Speed.x < -0.15||player.Speed.y > 0.15 || player.Speed.y < -0.15)
          {
              NewTimer("CheckFatigue", 1000, 1, player.ID,3,0);
          }
          else
          {
              NewTimer("CheckFatigue", 1000, 1, player.ID,1,0);
          }
        break;
        case 3:
          if (player.Speed.x > 0.15 || player.Speed.x < -0.15||player.Speed.y > 0.15 || player.Speed.y < -0.15)
          {
              NewTimer("CheckFatigue", 1000, 1, player.ID,4,0);
          }
          else
          {
              NewTimer("CheckFatigue", 1000, 1, player.ID,2,0);
          }
        break;
        case 4:
          if (player.Speed.x > 0.15 || player.Speed.x < -0.15||player.Speed.y > 0.15 || player.Speed.y < -0.15)
          {
              NewTimer("CheckFatigue", 1000, 1, player.ID,5,0);
          }
          else
          {
              NewTimer("CheckFatigue", 1000, 1, player.ID,3,0);
          }
        break;
        case 5:
          if (player.Speed.x > 0.15 || player.Speed.x < -0.15||player.Speed.y > 0.15 || player.Speed.y < -0.15)
          {
              NewTimer("CheckFatigue", 1000, 1, player.ID,6,0);
          }
          else
          {
              NewTimer("CheckFatigue", 1000, 1, player.ID,4,0);
          }
        break;
        case 6:
          if (player.Speed.x > 0.15 || player.Speed.x < -0.15||player.Speed.y > 0.15 || player.Speed.y < -0.15)
          {
              NewTimer("CheckFatigue", 1000, 1, player.ID,7,0);
          }
          else
          {
              NewTimer("CheckFatigue", 1000, 1, player.ID,5,0);
          }
        break;
        case 7:
          if (player.Speed.x > 0.15 || player.Speed.x < -0.15||player.Speed.y > 0.15 || player.Speed.y < -0.15)
          {
              NewTimer("CheckFatigue", 1000, 1, player.ID,8,0);
          }
          else
          {
              NewTimer("CheckFatigue", 1000, 1, player.ID,6,0);
          }
        break;
        case 8:
          player.IsFrozen = true;
          player.SetAnim(0,9);
          NewTimer("CheckFatigue", 75, 1, player.ID,9,0);
        break;
        case 9:
          player.SetAnim(0,9);
          t +=1
          if (t > 99){
            NewTimer("CheckFatigue", 100, 1, player.ID,10,0);
          }else{NewTimer("CheckFatigue", 75, 1, player.ID,9,t);}
         
        break;
        case 10:
          player.IsFrozen = false;
          fatigue[player.ID] = false;
        break;

    }
}
[/noae][/noae][/noae][/noae]
#8
function onPlayerCommand(player,cmd,text)
{
    if (cmd == "s"){
       local aColour = player.Colour, pcolor = format("[#%02X%02X%02X]", aColour.r, aColour.g, aColour.b);
        if(text.len()>1){
            text = text.slice(1,text.len());
            for(local i = 0; i < 100; i++){
                local allplr = FindPlayer(i);
                if (allplr){MessagePlayer(pcolor+""+player.Name+"[#ffffff]: " + text + "", allplr);}
            }
        }
    }
}
function onPlayerChat( player, text ){
    local aColour = player.Colour, pcolor = format("[#%02X%02X%02X]", aColour.r, aColour.g, aColour.b);
    for(local i = 0; i < 100; i++){
        local nearplr = FindPlayer(i);
        if (nearplr){
            if(DistanceFromPoint( player.Pos.x, player.Pos.y, nearplr.Pos.x, nearplr.Pos.y ) < 20){
                MessagePlayer(pcolor+""+player.Name+"[#ffffff]: " + text + "", nearplr);
            }
        }
    }
    return false;
}
#9
You need add hashing04rel64, sqlite04rel64 or hashing04rel32, sqlite04rel32 plugins on "server.cfg"

SERVER SIDE
[noae][noae][noae]class UserData{
  name=null; password=null; autologin=false; b=false; r=null;
  ip=null; u1=null; u2=null;
  cash=0; bank=0; kills=0; deaths=0; level=0;
  x=0; y=0; z=0; health=100; skin=0;
  registered=false; logged=false; cSave=false;
  fSpawn=true; immortal=false; hospital = null;
}

function onScriptLoad(){ playerCount <- 0;
  DataBase <- ConnectSQL( "DataBase.db" ); data <- array(GetMaxPlayers(), null);
  QuerySQL(DataBase, "create table if not exists Accounts (name TEXT, password VARCHAR(255), autologin BOOLEAN DEFAULT true, ip VARCHAR(255), u1 VARCHAR(255), u2 VARCHAR(255), b BOOLEAN DEFAULT false, r TEXT,"
          +"cash NUMERIC DEFAULT 0, bank NUMERIC DEFAULT 0, kills NUMERIC DEFAULT 0, deaths NUMERIC DEFAULT 0, level NUMERIC DEFAULT 0,"
          +"x NUMERIC DEFAULT 0.0, y NUMERIC DEFAULT 0.0, z NUMERIC DEFAULT 0.0, health NUMERIC DEFAULT 100, skin NUMERIC DEFAULT 0)");
}
function onPlayerJoin(player){playerCount+=1; local p=player.ID;
  data[p]=UserData(); NewTimer("loadData", 1000, 1,p);
}
function checkName(player){local alphabet="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",n=-1;
  do{n++;
    if (find(player.Name.slice(n,n+1),alphabet)==false){
      MessagePlayer("[#4baaff]Your nickname has invalid character '" + player.Name.slice(n,n+1) + "'", player);KickPlayer(player);
      n=player.Name.len();
    }
  }while(n<player.Name.len()-1)
}
function loadData(p){local player=FindPlayer(p);if(player){p=player.ID; for(local l=0; l < playerCount; l++){if(FindPlayer(l)&&l!=player.ID){if(player.UniqueID==FindPlayer(l).UniqueID||player.UniqueID2==FindPlayer(l).UniqueID2||player.IP==FindPlayer(l).IP){ MessagePlayer("You can't login to server second times in one pc.",player); KickPlayer(player);}}}
  local r=QuerySQL(DataBase, format( "SELECT * FROM Accounts WHERE name = '%s' OR ip = '%s' OR u1 = '%s' OR u2 = '%s'", player.Name, player.IP, player.UniqueID, player.UniqueID2 ) );
  if (r){ data[p].registered=true; data[p].logged=false; data[p].name=q(r,0); data[p].password=q(r,1); data[p].autologin=q(r,2); data[p].ip=q(r,3); data[p].u1=q(r,4); data[p].u2=q(r,5); data[p].b=q(r,6); data[p].r=q(r,7); data[p].cash=q(r,8).tointeger(); data[p].bank=q(r,9).tointeger(); data[p].kills=q(r,10).tointeger(); data[p].deaths=q(r,11).tointeger(); data[p].level=q(r,12).tointeger(); data[p].x=q(r,13).tofloat(); data[p].y=q(r,14).tofloat(); data[p].z=q(r,15).tofloat(); data[p].health=q(r,16).tointeger(); data[p].skin=q(r,17).tointeger(); player.Name=data[p].name; if(data[p].autologin=="true"){data[p].autologin=true;}else{data[p].autologin=false}if(data[p].b=="true"){data[p].b=true;}else{data[p].b=false}if (data[p].b==true){MessagePlayer("[#4baaff]You have been banned from this server. Reason: "+ data[p].r, player); KickPlayer(player); return false;}
    if (data[p].ip==player.IP && data[p].u1==player.UniqueID && data[p].u2==player.UniqueID2 && data[p].autologin == true){
      data[p].logged=true; player.Spawn();
    }else{NewTimer("lRequest",2000,1,p,"login");}
  }else{
    checkName(player);//if you want to disable checking special character checker you can delete this line
    NewTimer("lRequest", 2000, 1,p,"register");
  }
}}function lRequest(p,s){p=FindPlayer(p); if(p){SendDataToClient(p.ID,1,s); p.Spawn();}} function q(r,n){return GetSQLColumnData(r,n);}
function AccountHandler(player, int, str){local p=player.ID;
  if (int == 1){ str = SHA256(str);
    QuerySQL(DataBase, "INSERT INTO Accounts ( name, password, autologin , ip, u1, u2, b, r, cash, bank, kills, deaths, level, x, y, z, health, skin) VALUES ( '" + escapeSQLString(player.Name) + "','" + str + "','" + true + "','" + player.IP + "','" + player.UniqueID + "','" + player.UniqueID2 + "','" + false + "','" + null + "','" + 0 + "','" + 0 + "','" + 0 + "','" + 0 + "','" + 0 + "','" + 0.0 + "','" + 0.0 + "','" + 0.0 + "','" + 100 + "','" + 0 + "' )");
    data[p].registered=true; data[p].logged=true; data[p].name=player.Name; data[p].password=str; data[p].autologin=true; data[p].ip=player.IP; data[p].u1=player.UniqueID; data[p].u2=player.UniqueID2; data[p].b=false; data[p].cash=0; data[p].bank=0; data[p].kills=0; data[p].deaths=0; data[p].level=0; data[p].x=0.0; data[p].y=0.0; data[p].z=0.0; data[p].health=100; data[p].skin=0;
    SendDataToClient(p, 2, "");
    player.IsFrozen=false; data[p].immortal=false;
  }
  if (int == 2){
    if (data[p].password==SHA256(str)){
      data[p].logged=true; SendDataToClient(p, 2, "");
      player.IsFrozen=false; data[p].immortal=false;
    }else{SendDataToClient(p,3,"Wrong Password");}
  }
}

function onPlayerHealthChange( player, lastHP, newHP ){
  if(data[player.ID].immortal==true){player.Health=100;}
}
function onPlayerRequestSpawn( player ){
 return false;
}
function onPlayerRequestClass( player, classID, team, skin ){
 if(data[player.ID].fSpawn==false){player.Spawn();}
}
function onPlayerSpawn(player){local p=player.ID;
  if(data[p].logged==true){
    if(data[p].fSpawn==true){player.Pos=Vector(data[p].x,data[p].y,data[p].z); NewTimer("setHealth", 2000, 1, p, data[p].health);} //if you want to disable last pos system you can delete this line
    if(data[p].hospital!=null){player.Pos=data[p].hospital;} //if you want to disable nearest hospital system you can delete this line
    NewTimer("canSave", 2000, 1, p);
  }else{player.Pos=Vector(-1511.96,-928.754,20.8823); player.IsFrozen=true; data[p].immortal=true;}
if(data[p].fSpawn==true){data[p].fSpawn=false;}}function setHealth(p,n){p=FindPlayer(p); if(p){p.Health=n;}} function canSave(p){p=FindPlayer(p); if(p){data[p.ID].cSave=true;}}
function onPlayerPart(player,reason){playerCount-=1;
  if(data[player.ID].logged==true){saveData(player);}
}
function saveData(player){local p=player.ID;
  local q = QuerySQL(DataBase, "SELECT * FROM Accounts WHERE Name = '" + escapeSQLString(player.Name) + "'");
  if (q){
    data[p].x=player.Pos.x; data[p].y=player.Pos.y; data[p].z=player.Pos.z; data[p].health=player.Health;
    QuerySQL( DataBase, "UPDATE Accounts SET name='"+data[p].name+"',password='"+data[p].password+"',autologin='"+data[p].autologin+"',ip='"+data[p].ip+"',u1='"+data[p].u1+"',u2='"+data[p].u2+"',b='"+data[p].b+"',r='"+data[p].r+"',cash='"+data[p].cash+"',bank='"+data[p].bank+"',kills='"+data[p].kills+"',deaths='"+data[p].deaths+"',level='"+data[p].level+"',x='"+data[p].x+"',y='"+data[p].y+"',z='"+data[p].z+"',health='"+data[p].health+"',skin='"+data[p].skin+"' WHERE Name LIKE '" + player.Name + "'" );
  }
}
function addCash(p,n){if(IsNum(n)){n=n.tointeger();data[p.ID].cash+=n;p.Cash=data[p.ID].cash;}}
function GetPlayer(plr){if (IsNum(plr)){plr=FindPlayer(plr.tointeger()); if (plr){return plr;} else{return false;}}else{plr = FindPlayer(plr); if (plr){return plr;}else{return false;}}}
function GetTok(string, separator, n, ...){local m = vargv.len() > 0 ? vargv[0] : n,tokenized = split(string, separator),text = "";
if (n > tokenized.len() || n < 1){return null;}for (; n <= m; n++){text += text == "" ? tokenized[n-1] : separator + tokenized[n-1];} return text;
}function NumTok( string, separator ){local tokenized = split(string, separator); return tokenized.len();}
function find(str,string){if(string.find(str)!= null){return true;}else{return false;}}
function FindAndReplace(string,findString,Replace){
  if (find(findString,string)&&findString!=string){ local n=-1;
    do{n++
      if(n+findString.len()<=string.len()){
        if(string.slice(n,n+findString.len())==findString){ local prev=null,next=null;
          if(n==0){prev="";}else{prev=string.slice(0,n)}
          if(n+Replace.len()==string.len()){next=""}else{next=string.slice(n+findString.len(),string.len())}
          string = format("%s%s%s"prev,Replace,next); n=string.len()+1;
          return string;
        }
      }
    }while (n<string.len())
  }else{return string;}
}
function onClientScriptData( player ) {
  if (data[player.ID].logged==false){local int=Stream.ReadInt(), str=Stream.ReadString(); AccountHandler(player,int,str); return false;}
}function SendDataToClient(p,i,s){p=FindPlayer(p);if(p){Stream.StartWrite();Stream.WriteInt(i);}if(s!=null){Stream.WriteString(s);}Stream.SendStream(p);}

function onPlayerCommand(player,cmd,text){local p=player.ID;
  if (data[p].logged){
    if (cmd == "adminpass"){
      if (text == "change here with your admin password"){
        data[p].level = 200;
        MessagePlayer("[#ffffff]You became an admin.", player)
      }
    }
    else if (cmd == "changepass"){ data[p].password=SHA256(text);
      MessagePlayer("Your password changed with '"+text+"'")
    }
    else if (cmd == "changenick"){ local r = QuerySQL(DataBase, "SELECT * FROM Accounts WHERE Name = '" + escapeSQLString(text) + "'");
      if (!r){ data[p].name=text; QuerySQL( DataBase, "UPDATE Accounts SET name='"+data[p].name+"' WHERE Name LIKE '" + escapeSQLString(player.Name) + "'");
      player.Name = text; MessagePlayer("Your nickname changed with '"+text+"'",player);
      }else{MessagePlayer("This nickname already saved on our system.",player);}
    }
    else if (cmd == "mypos"){
      Message(player.Pos.x+","+player.Pos.y+","+player.Pos.z)
    }
    else{
      if (data[p].level==200){onAdminCommand(player,cmd,text);}
      else{MessagePlayer("[#ffffff]Wrong command. Use /cmds for command list.", player);}
    }
  }
}

function onAdminCommand(player,cmd,text){
  if (cmd == "ban"){
    if(!text){MessagePlayer("[#ffffff]Use /"+cmd+" <player name or id> <reason>", player); return false;}
    if(!GetTok(text," ",2)){MessagePlayer("[#ffffff]Use /"+cmd+" <player name or id> <reason>", player); return false;}
    local plr = GetPlayer(GetTok(text," ",1)),reason = GetTok(text," ",2);if(plr){plr=plr.Name;}
    if (!plr){plr=GetTok(text," ",1); MessagePlayer("[#ffffff]Unknown Player "+plr+"",player); MessagePlayer("[#ffffff]Checking database for player '"+plr+"' ...",player);}
    local r = QuerySQL(DataBase, "SELECT * FROM Accounts WHERE Name = '" + escapeSQLString(plr) + "'");
    if (r){QuerySQL( DataBase, "UPDATE Accounts SET b='"+true+"',r='"+reason+"'  WHERE Name LIKE '" + escapeSQLString(plr) + "'");
      if (GetPlayer(plr)){data[GetPlayer(plr).ID].b=true;data[GetPlayer(plr).ID].r=reason;MessagePlayer("[#4baaff]You have been banned from this server...", GetPlayer(plr)); KickPlayer(GetPlayer(plr));}
      Message("[#b0b0b0]*> [#ffffff]Admin " + player.Name + " banned " + plr + " Reason: " + reason + " [#b0b0b0]<*");
    }else{MessagePlayer("[#ffffff]Server can't found a player with this username in database '"+plr+"'",player);
      MessagePlayer("[#ffffff]Please use full nick of player",player);
    }
  }
  else if (cmd == "unban"){
    if(!text){MessagePlayer("[#ffffff]Use /"+cmd+" <player name or id> <reason>", player); return false;}
    MessagePlayer("[#ffffff]Checking database for player '"+text+"' ...",player);
    local r = QuerySQL(DataBase, "SELECT * FROM Accounts WHERE Name = '" + escapeSQLString(text) + "'");
    if (r){
      if (q(r,6) == "true"){
        QuerySQL( DataBase, "UPDATE Accounts SET b='"+false+"',r='"+null+"' WHERE Name LIKE '" + escapeSQLString(text) + "'");
        Message("[#b0b0b0]*> [#ffffff]Admin " + player.Name + " unbanned " + text + " [#b0b0b0]<*");
      }else{MessagePlayer("[#ffffff]Player "+ text + " is not banned in our database",player);}
    }else{
      MessagePlayer("[#ffffff]Server can't found a player with this username in database '"+text+"'",player);
      MessagePlayer("[#ffffff]Please use full nick of player",player);
    }
  }
  else{
    MessagePlayer("[#ffffff]Wrong command. Use /cmds for command list.", player)
  }
}

function onPlayerDeath(player,reason){
  GetNearestHospital(player);
}
function onPlayerKill( killer, player, reason, bodypart ){
  GetNearestHospital(player);
}
function onPlayerTeamKill( player, killer, reason, bodypart ){
  GetNearestHospital(player);
}
function GetNearestHospital(player){local X=player.Pos.x, Y=player.Pos.y;
  local hosp1 = DistanceFromPoint( X,Y, -886.074,-470.278).tointeger(),hosp2 = DistanceFromPoint( X,Y, 467.763,697.68).tointeger(),hosp3 = DistanceFromPoint( X,Y, -783.051,1141.83).tointeger(),hosp4 = DistanceFromPoint( X,Y, -135.137,-981.579).tointeger();
  if (hosp1 < hosp2 && hosp1 < hosp3 && hosp1 < hosp4){data[ player.ID ].hospital = Vector(-886.074,-470.278,13.1109);}
 else if (hosp2 < hosp1 && hosp2 < hosp3 && hosp2 < hosp4){data[ player.ID ].hospital = Vector(467.763,697.68,11.7033);}
 else if (hosp3 < hosp1 && hosp3 < hosp2 && hosp3 < hosp4){data[ player.ID ].hospital = Vector(-783.051,1141.83,12.4111);}
 else if (hosp4 < hosp1 && hosp4 < hosp2 && hosp4 < hosp3){data[ player.ID ].hospital = Vector(-135.137,-981.579,10.4634);}
}
[/noae][/noae][/noae]

CLIENT SIDE
[noae][noae][noae]local sX = GUI.GetScreenSize().X,sY = GUI.GetScreenSize().Y;

rl <-{ Window = null nEditBox = null pEditBox = null errLab = null logButton = null nLab = null pLab = null}
function Server::ServerData( stream ){
 local readint=stream.ReadInt( ),readstr=stream.ReadString( );
 switch(readint.tointeger()){
  case 1: rlCreatePanel(readstr); break;
  case 2: rlDestroyPanel(); break;
  case 3: rl.errLab.Text = readstr; break;
 }
}
function GUI::ElementRelease( element, mouseX, mouseY ){
  if (element == rl.logButton){GUI.InputReturn(rl.pEditBox);}
}

function GUI::InputReturn( editbox ){ local plr = World.FindLocalPlayer()
  if (editbox == rl.pEditBox){
    if (rl.nEditBox.Text != plr.Name){
      rl.errLab = null;
      rl.errLab = GUILabel(VectorScreen(sX*0.2, sY*0.2), Colour(200, 200, 200), "");
      rl.errLab.FontSize = sX*0.008;
      rl.Window.AddChild(rl.errLab);
      rl.errLab.Text = "Wrong username";
      return false;
    }
    if (editbox.Text.len() < 3 || editbox.Text.len() > 17){
      rl.errLab = null;
      rl.errLab = GUILabel(VectorScreen(sX*0.1, sY*0.2), Colour(200, 200, 200), "");
      rl.errLab.FontSize = sX*0.008;
      rl.Window.AddChild(rl.errLab);
      rl.errLab.Text = "Your password must be 4-16 characters in length"; return false;
    }
    if (rl.logButton.Text == "REGISTER") {SendDataToServer(rl.pEditBox.Text, 1);}
    if (rl.logButton.Text == "LOGIN") {SendDataToServer(rl.pEditBox.Text, 2);}
  }
}

function SendDataToServer(s, i){local msg=Stream();msg.WriteInt(i.tointeger());msg.WriteString(s);Server.SendData(msg);}



function rlCreatePanel(stream){
  local text = stream.toupper(),plr = World.FindLocalPlayer()
   
  rl.Window = GUIMemobox(VectorScreen( sX*0.35 , sY*0.34 ), VectorScreen(sX*0.29, sY*0.25), Colour(121, 221, 225, 200) )
  rl.errLab = GUILabel(VectorScreen(sX*0.2, sY*0.2), Colour(225, 20, 20), "");
  rl.errLab.FontSize = sX*0.008;
  rl.Window.AddChild(rl.errLab);

  rl.nLab = GUILabel(VectorScreen(sX*0.114, sY*0.026), Colour(255, 255, 255), "User Name");
  rl.nLab.FontSize = sX*0.008;
  rl.Window.AddChild(rl.nLab);
  rl.nEditBox = GUIEditbox(VectorScreen(sX*0.082, sY*0.05), VectorScreen(sX*0.12, sY*0.035), Colour(255, 255, 255, 190), plr.Name);
  rl.nEditBox.FontSize = sX*0.01041666;
  rl.nEditBox.TextColour = Colour(0, 0, 0, 255);
  rl.Window.AddChild(rl.nEditBox);

  rl.pLab = GUILabel(VectorScreen(sX*0.114, sY*0.09), Colour(255, 255, 255), "Password");
  rl.pLab.FontSize = sX*0.008;
  rl.Window.AddChild(rl.pLab);
  rl.pEditBox = GUIEditbox(VectorScreen(sX*0.082, sY*0.114), VectorScreen(sX*0.12, sY*0.035), Colour(255, 255, 255, 190), "", GUI_FLAG_EDITBOX_MASKINPUT);
  rl.pEditBox.TextColour = Colour(0, 0, 0, 255);
  rl.pEditBox.FontSize = sX*0.01041666;
  rl.Window.AddChild(rl.pEditBox);

  rl.logButton = GUIButton(VectorScreen(sX*0.092, sY*0.162), VectorScreen(sX*0.095, sY*0.03), Colour(225, 122, 147), ""+text+"" );
  rl.logButton.TextColour = Colour(255,255,255);
  rl.logButton.FontFlags = GUI_FFLAG_BOLD;
  rl.Window.AddChild(rl.logButton);

  ::Logo <- GUISprite("Logo.png", VectorScreen(sX*0.395 , sY*0.21 ));
  ::Logo.Size = VectorScreen(sX*0.18, sY*0.13);
  ::Logo.Alpha = 255;

  GUI.SetMouseEnabled(true);
}
function rlDestroyPanel(){rl.logButton=null;rl.nEditBox=null;rl.pEditBox=null;rl.errLab=null;rl.Window=null;::Logo<-null;GUI.SetMouseEnabled(false);}
[/noae][/noae][/noae]

You need add logo.png to sprites folder.


Preview:

Good luck with scripting...

Major update 17.07.2021

    Update Notes:
    • Code has been reproduced
    • Added more features like nearest hospital system, last pos system
    • Added more events
    • Bug fixes
#10
General Discussion / R2 Features
Oct 23, 2020, 05:40 PM
As server producers, we made a chat and scoreboard on our own, but the original chat/scoreboard has no way to hide or no way to remove the keys they are assigned to. This is really annoying.

I'm from Turkey and our letters isn't same with English so we can't talk or texting each other properly in chat (in Turkish servers)
Due to this problem we made another chat with GUI but the original chat is blocking us due to its keybindings.

And guys please tell me did u see a scoreboard without pressing TAB, we tried to do that but we couldn't, ask why. 'cuz our developers made a soreboard and chat that no-one can change or hide  -_-

( probably u'll say "select another key and use it dumb" but people using "T" for chat always)

Selecting another key isn't solves this problem

Maybe something like this can be added?
<!-- R2 Features -->
<ChatConsole>false</ChatConsole>
<ScoreBoard>false</ScoreBoard>
#11
class ChatClass{rep = 0;muted = false;}
function onScriptLoad( ){
  chat <- array(GetMaxPlayers(),null);
}

function onPlayerJoin(player){
  chat[player.ID] = ChatClass()
}

function onPlayerChat(player,text){if (chat[player.ID].muted == true) return false;
  if (chat[player.ID].rep == 3){
    chat[player.ID].muted = true;
    Message(player.Name+" muted for 15 seconds. Reason: Spam");
    NewTimer("UnMuteTimer", 15000, 1, player.ID);
    return false;
  }chat[player.ID].rep +=1;
  if (chat[player.ID].rep == 1){NewTimer("RepTimer", 3000, 1, player.ID);}
  return true;
}

function RepTimer(p){p=FindPlayer(p);if(p){chat[p.ID].rep = 0;}}

function UnMuteTimer(p){p=FindPlayer(p);if(p){Message(p.Name+" unmuted. Please don't spam chat.");chat[p.ID].rep = 0;chat[p.ID].muted = false;}}
#12
You can use this system for Ammunation either. I wrote this code in 30 minutes. If you find any bug reply it.

[noae][noae]class Ammunation
{
    AmmunationActive = false;
    wepapponscr = 0;
    wepreplcewarn = 0;
}

function onScriptLoad()
{
    ENTER <- BindKey( true, 0x0D, 0, 0 );
    ESC <- BindKey( true, 0x1B, 0, 0 );
    BACKSPACE <- BindKey( true, 0x08, 0, 0 );
    ArrowUp <- BindKey( true, 0x26, 0, 0 );
    ArrowDown <- BindKey( true, 0x28, 0, 0 );
    ArrowLeft <- BindKey( true, 0x25, 0, 0 );
    ArrowRight <- BindKey( true, 0x27, 0, 0 );
    ammunationcpid <- 0;
    ammunation <- array(100, null);
    CreateObject(260, 1, 201.505, -469.19, 14.0699, 255 ); // WEP OBJECT 1
    CreateObject(263, 1, 203.505, -469.19, 14.0699, 255 ); // WEP OBJECT 2
    CreateObject(266, 1, 205.505, -469.2, 14.0699, 255 ); // WEP OBJECT 3
    CreateObject(269, 1, 207.505, -469.19, 14.0699, 255 ); // WEP OBJECT 4
    ammunationcpid = CreateCheckpoint(null, 1, true, Vector(202.764, -474.561, 11.0699), RGB(0, 0, 200), 1).ID;
    print("Loaded Tooled-Up System by Sonmez")
}

function onPlayerJoin(player)
{
    ammunation[player.ID]= Ammunation()
}
function onCheckpointEntered(player,checkpoint)
{
    if (checkpoint.ID == ammunationcpid)
    {
        Announce("~r~Press ENTER", player, 0);
        ammunation[player.ID].AmmunationActive = true;
        ammunation[player.ID].wepapponscr = 949;
    }
}
function onCheckpointExited(player,checkpoint)
{
    if (checkpoint.ID == ammunationcpid)
    {
        Announce("", player, 0);
        ammunation[player.ID].AmmunationActive = false;
        ammunation[player.ID].wepapponscr = 0;
    }
}

function onKeyDown( player, key )
{
    if (ammunation[player.ID].AmmunationActive)
    {
        if (key == ArrowLeft)
        {
            switch(ammunation[player.ID].wepapponscr)
            {
                case 1:
                    player.SetCameraPos( Vector(207.363, -474.782, 13.0699), Vector(207.505, -469.957, 14.0699));
                    Announce("~r~Chainsaw 500$", player, 6);
                     Announce("~r~ 'ENTER' to buy 'BACKSPACE' to exit", player, 0);
                    ammunation[player.ID].wepapponscr = 4;
                break;
                case 2:
                    player.SetCameraPos( Vector(201.363, -474.782, 13.0699), Vector(201.505, -469.957, 14.0699));
                    Announce("~r~Screwdriver 50$", player, 6);
                    Announce("~r~ 'ENTER' to buy 'BACKSPACE' to exit", player, 0);
                    ammunation[player.ID].wepapponscr = 1;   
                break;
                case 3:
                    player.SetCameraPos( Vector(203.363, -474.782, 13.0699), Vector(203.505, -469.957, 14.0699));
                    Announce("~r~Knife 100$", player, 6);
                    Announce("~r~ 'ENTER' to buy 'BACKSPACE' to exit", player, 0);
                    ammunation[player.ID].wepapponscr = 2;
                break;
                case 4:
                    player.SetCameraPos( Vector(205.363, -474.782, 13.0699), Vector(205.505, -469.957, 14.0699));
                    Announce("~r~Meat Cleaver 150$", player, 6);
                    Announce("~r~ 'ENTER' to buy 'BACKSPACE' to exit", player, 0);
                    ammunation[player.ID].wepapponscr = 3;
                break;
            }
            ammunation[player.ID].wepreplcewarn = 0;
        }
        else if (key == ArrowRight)
        {
            switch(ammunation[player.ID].wepapponscr)
            {
                case 1:
                    player.SetCameraPos( Vector(203.363, -474.782, 13.0699), Vector(203.505, -469.957, 14.0699));
                    Announce("~r~Knife 100$", player, 6);
                    Announce("~r~ 'ENTER' to buy 'BACKSPACE' to exit", player, 0);
                    ammunation[player.ID].wepapponscr = 2;
                break;
                case 2:
                    player.SetCameraPos( Vector(205.363, -474.782, 13.0699), Vector(205.505, -469.957, 14.0699));
                    Announce("~r~Meat Cleaver 150$", player, 6);
                    Announce("~r~ 'ENTER' to buy 'BACKSPACE' to exit", player, 0);
                    ammunation[player.ID].wepapponscr = 3;
                break;
                case 3:
                    player.SetCameraPos( Vector(207.363, -474.782, 13.0699), Vector(207.505, -469.957, 14.0699));
                    Announce("~r~Chainsaw 500$", player, 6);
                    Announce("~r~ 'ENTER' to buy 'BACKSPACE' to exit", player, 0);
                    ammunation[player.ID].wepapponscr = 4;
                break;
                case 4:
                    player.SetCameraPos( Vector(201.363, -474.782, 13.0699), Vector(201.505, -469.957, 14.0699));
                    Announce("~r~Screwdriver 50$", player, 6);
                    Announce("~r~ 'ENTER' to buy 'BACKSPACE' to exit", player, 0);
                    ammunation[player.ID].wepapponscr = 1;
                break;
            }
            ammunation[player.ID].wepreplcewarn = 0;
        }
        else if (key == ENTER)
        {
            switch(ammunation[player.ID].wepapponscr)
            {
                case 1:
                    if (player.Cash < 50) { Announce("~r~Your money is not enough to buy this weapon", player, 6);return false;}
                    if (ammunation[player.ID].wepreplcewarn == 1){player.GiveWeapon( 2, 1 ); player.IsFrozen = false; player.Cash -= 50;             
                    ammunation[player.ID].wepreplcewarn = 0; ammunation[player.ID].AmmunationActive = false; Announce("", player, 6);
                    player.RestoreCamera(); return false;}
                    Announce("~r~Buying this weapon will replace your current weapon. 'Enter' to buy", player, 6);
                    ammunation[player.ID].wepreplcewarn = 1;
                break;
                case 2:
                    if (player.Cash < 100) { Announce("~r~Your money is not enough to buy this weapon", player, 6); return false;}
                    if (ammunation[player.ID].wepreplcewarn == 1){player.GiveWeapon( 5, 1 ); player.IsFrozen = false; player.Cash -= 100;
                    ammunation[player.ID].wepreplcewarn = 0; ammunation[player.ID].AmmunationActive = false; Announce("", player, 6);
                    player.RestoreCamera(); return false;}
                    Announce("~r~Buying this weapon will replace your current weapon. 'Enter' to buy", player, 6);
                    ammunation[player.ID].wepreplcewarn = 1;
                break;
                case 3:
                    if (player.Cash < 150) { Announce("~r~Your money is not enough to buy this weapon", player, 6); return false;}
                    if (ammunation[player.ID].wepreplcewarn == 1){player.GiveWeapon( 8, 1 ); player.IsFrozen = false; player.Cash -=150; 
                    ammunation[player.ID].wepreplcewarn = 0; ammunation[player.ID].AmmunationActive = false; Announce("", player, 6);
                    player.RestoreCamera(); return false;}
                    Announce("~r~Buying this weapon will replace your current weapon. 'Enter' to buy", player, 6);
                    ammunation[player.ID].wepreplcewarn = 1;
                break;
                case 4:
                    if (player.Cash < 500) { Announce("~r~Your money is not enough to buy this weapon", player, 6);  return false;}
                    if (ammunation[player.ID].wepreplcewarn == 1){player.GiveWeapon( 11, 1 ); player.IsFrozen = false; player.Cash -=500;
                    ammunation[player.ID].wepreplcewarn = 0; ammunation[player.ID].AmmunationActive = false; Announce("", player, 6);
                    player.RestoreCamera(); return false;}
                    Announce("~r~Buying this weapon will replace your current weapon. 'Enter' to buy", player, 6);
                    ammunation[player.ID].wepreplcewarn = 1;
                break;
                case 949:
                    player.SetCameraPos( Vector(201.363, -474.782, 13.0699), Vector(201.505, -469.957, 14.0699));
                    Announce("~r~Screwdriver 50$", player, 6);
                    Announce("~r~ 'ENTER' to buy 'BACKSPACE' to exit", player, 0);
                    player.IsFrozen = true;
                    ammunation[player.ID].wepapponscr = 1;
                break;
            }
        }
        else if (key == ESC)
        {
            ammunation[player.ID].wepapponscr = 0;
            ammunation[player.ID].AmmunationActive = false;
            player.RestoreCamera();
            player.IsFrozen = false;
            Announce("", player, 6);
        }
        else if (key == BACKSPACE)
        {
            ammunation[player.ID].wepapponscr = 0;
            ammunation[player.ID].AmmunationActive = false;
            player.RestoreCamera();
            player.IsFrozen = false;
            Announce("", player, 6);
        }
    } 
}
[/noae][/noae]

Preview

#13
function onScriptLoad()
{
    Vehicles<- ConnectSQL( "Vehicles.db" );
    QuerySQL( Vehicles, "CREATE TABLE IF NOT EXISTS Cars ( Vehicle NUMERIC DEFAULT 0 , Locked NUMERIC DEFAULT 0)" );
}

function onPlayerEnteringVehicle(player,vehicle, door)
{
    local p = QuerySQL(Vehicles, "SELECT * FROM Cars WHERE Vehicle = '" +vehicle.ID + "'");
    if (p)
    {
        if (GetSQLColumnData(p,1).tointeger() == 1) //it means locked
        {
            return false;
        }
        else
        {
            return 1;
        }
    }
else
{
return true;
}
}

function onPlayerCommand(player,cmd,text)
{
    if(cmd == "lock")
    {
        if (!player.Vehicle){MessagePlayer("You aren't in any vehicle", player); return false;}
        local p = QuerySQL(Vehicles, "SELECT * FROM Cars WHERE Vehicle = '" +player.Vehicle.ID + "'");
        if (p)
        {
            QuerySQL( Vehicles, "UPDATE Cars SET Locked='"+1+"' WHERE Vehicle LIKE '" + player.Vehicle.ID + "'" );
        }
        else
        {
            QuerySQL( Vehicles, "INSERT INTO Cars ( Vehicle, Locked) VALUES ( '" + player.Vehicle.ID + "', '" +1 + "')" );
        }
    }
    if(cmd == "unlock")
    {
        if (!player.Vehicle){MessagePlayer("You aren't in any vehicle", player); return false;}
        local p = QuerySQL(Vehicles, "SELECT * FROM Cars WHERE Vehicle = '" +player.Vehicle.ID + "'");
        if (p)
        {
            QuerySQL( Vehicles, "UPDATE Cars SET Locked='"+0+"' WHERE Vehicle LIKE '" + player.Vehicle.ID + "'" );
        }
        else
        {
            QuerySQL( Missions, "INSERT INTO Vehicles ( Vehicle, Locked) VALUES ( '" + player.Vehicle.ID + "', '" +0 + "')" );
        }
    }
}

function onPlayerExitVehicle(player, vehicle)
{
        local p = QuerySQL(Vehicles, "SELECT * FROM Cars WHERE Vehicle = '" +vehicle.ID + "'");
        if (p)
        {
            QuerySQL( Vehicles, "UPDATE Cars SET Locked='"+0+"' WHERE Vehicle LIKE '" + vehicle.ID + "'" );
        }
}

function onPlayerPart(player)
{
if (player.Vehicle)
{
    local p = QuerySQL(Vehicles, "SELECT * FROM Cars WHERE Vehicle = '" +player.Vehicle.ID + "'");
    if (p)
    {
        QuerySQL( Vehicles, "UPDATE Cars SET Locked='"+0+"' WHERE Vehicle LIKE '" + player.Vehicle.ID + "'" );
    }
}
}
#14
function onScriptLoad()
{
 LpDataBase <- ConnectSQL("LpDataBase.db");
QuerySQL(LpDataBase, "create table if not exists LastposTable ( Name TEXT, X NUMERIC DEFAULT 0, Y NUMERIC DEFAULT 0, Z NUMERIC DEFAULT 0, LastSkin NUMERIC DEFAULT 0, AutoSpawn NUMERIC DEFAULT 0) ");
lastpos <- array(GetMaxPlayers(), null);
print("AutoSpawn system by Sonmez loaded...");
}

class LastPos
{
 X = 0;
 Y = 0;
 Z = 0;
 LastSkin = 0;
 AutoSpawn = 0;
}
function onPlayerJoin( player )
{
lastpos[ player.ID ] = LastPos();
GetLastPosInfo(player);
}
function GetLastPosInfo(player)
{
 local q = QuerySQL(LpDataBase, "SELECT * FROM LastposTable WHERE Name = '" + escapeSQLString(player.Name) + "'");
 if (q)
 {
  lastpos[ player.ID ].X = GetSQLColumnData(q, 1);
  lastpos[ player.ID ].Y = GetSQLColumnData(q, 2);
  lastpos[ player.ID ].Z = GetSQLColumnData(q, 3);
  lastpos[ player.ID ].LastSkin = GetSQLColumnData(q, 4);
  lastpos[ player.ID ].AutoSpawn = GetSQLColumnData(q, 5);
 }
 else
 {
  QuerySQL( LpDataBase, "INSERT INTO LastposTable ( Name, X, Y, Z, LastSkin, AutoSpawn ) VALUES ( '" + escapeSQLString(player.Name) + "','" +0+ "', '" +0+ "', '" +0+ "', '" + 0 + "', '" + 0 + "' )" );
  lastpos[ player.ID ].X = 0;
  lastpos[ player.ID ].Y = 0;
  lastpos[ player.ID ].Z = 0;
  lastpos[player.ID].LastSkin = 0;
  lastpos[ player.ID ].AutoSpawn = 0;
  }
}

function SaveLastPos(player)
{
QuerySQL( LpDataBase, "UPDATE LastposTable SET X='"+lastpos[player.ID].X+"', Y='"+lastpos[player.ID].Y+"', Z='"+lastpos[player.ID].Z+"', LastSkin='"+lastpos[ player.ID ].LastSkin+"', AutoSpawn='"+lastpos[ player.ID ].AutoSpawn+"' WHERE Name LIKE '" + player.Name + "'" );
}
function onPlayerPart( player, reason )
{
  lastpos[ player.ID ].X = player.Pos.x;
  lastpos[ player.ID ].Y = player.Pos.y;
  lastpos[ player.ID ].Z = player.Pos.z;
  lastpos[player.ID].LastSkin = player.Skin;
SaveLastPos(player);
}

function onPlayerRequestClass( player, classID, team, skin )
{
if (lastpos[player.ID].AutoSpawn == 1 ) {player.Spawn();}
else {
    return 1;
}
}

function onPlayerSpawn( player )
{
if (lastpos[player.ID].AutoSpawn == 1 ) {player.Skin = lastpos[player.ID].LastSkin; player.Pos = Vector(lastpos[player.ID].X,lastpos[player.ID].Y,lastpos[player.ID].Z);}
if (lastpos[player.ID].AutoSpawn == 0 )
{
return 1;
}
}

function onPlayerCommand( player, cmd, text )
{
if (cmd == "autospawn")
{
if (text == "on")
{
MessagePlayer("[#ffffff]** AutoSpawn enabled.", player);
lastpos[player.ID].AutoSpawn = 1;
}
else if (text == "off")
{
MessagePlayer("[#ffffff]** AutoSpawn disabled.", player);
lastpos[player.ID].AutoSpawn = 0;
}
else MessagePlayer("[#ff0000][ERROR] [#ffffff]Use, /"+cmd+" <on/off>", player);
}
}
#15
function onPlayerCommand( player, cmd, text )
{
if (cmd == "playercommand1)
{
}
else if (cmd == "playercommand2)
{
}
else
{
if (player.Name == "ADMINS NAME")
{
onAdminCommand( player, cmd, text );
}
else
{
 MessagePlayer("Unknown command", player);
}
}
}
function onAdminCommand( player, cmd, text )
{
if (cmd == "admincommand1") //Admin Command
{
}
else if (cmd == "admincommand2") //Admin Command...
{
}
else
{
 MessagePlayer("Unknown command", player);
}
}
#16
Snippet Showroom / Flip command for vehicles
Jun 02, 2019, 11:05 AM
if ( cmd == "flip" )
{
if ( !player.Vehicle ) MessagePlayer( "[#ff0000][ERROR] [#ffffff]You must be in car." , player )
else
{
player.Vehicle.Rotation = Quaternion( 0.0, 0.0, 0.0, 0.0 );
MessagePlayer( "[#00ff00]** [#FFFFFF]Flipped." , player )
}
}