Fenêtre pour faire payer les props sur GMod

  1. Centre d'aide
  2. Garry's Mod
  3. Fenêtre pour faire payer les props sur GMod

Afin de limiter les props sur la map et d'optimiser un minimum son serveur, j'ai décidé de mettre un job sur ScriptFodder. 

Le gamemode de DarkRP propose déjà cette options de faire payer un props. Mais le script suivant présente une petit fenêtre qui demande au joueurs de valider leur choix par "Oui" ou par "Non", ce qui est plus joli visuellement.

Tutoriel proposé par Nicolas22

Installation du script

Il vous suffira de créer un dossier paytospawn dans votre dossier addons.

Ensuite dans le dossier paytospawn de recréer un dossier nommé lua et encore un autre dossier nommé autorun .

Ajouter ce code dans un fichier nommé shared.lua :

lmmpropcost = 75 -- Changer le prix du spawn d'un objet (A)

if (SERVER) then
  util.AddNetworkString("LMMPlayerSpawnPropCL")
  util.AddNetworkString("LMMPlayerSpawnPropCLBack")
  hook.Add( "PlayerSpawnProp", "LMMPlayerSpawnProp", function( ply, mdl )
    if ply:GetNWBool("LMMCanSpawnProp") then
      return true
    else
      net.Start("LMMPlayerSpawnPropCL")
        net.WriteString(mdl)
      net.Send(ply)
    end
  end )

  net.Receive("LMMPlayerSpawnPropCLBack",function(len, ply)
    local mdl = net.ReadString()
    ply:addMoney(-lmmpropcost)
    ply:SetNWBool("LMMCanSpawnProp",true)
    ply:ConCommand("gm_spawn "..mdl)
    timer.Simple(1,function()
      ply:SetNWBool("LMMCanSpawnProp",false)
    end)
  end)
end

if (CLIENT) then
  surface.CreateFont( "DRPTitleFont", {
      font = "Arial",
      size = 25,
      weight = 5000,
      blursize = 0,
      scanlines = 0,
      antialias = true,
  })

  surface.CreateFont( "DRPLabelFont", {
      font = "Arial",
      size = 20,
      weight = 5000,
      blursize = 0,
      scanlines = 0,
      antialias = true,
  })

  surface.CreateFont( "DRPBtnLabelFont", {
      font = "Arial",
      size = 15,
      weight = 5000,
      blursize = 0,
      scanlines = 0,
      antialias = true,
  })

  net.Receive("LMMPlayerSpawnPropCL",function()
    local mdl = net.ReadString()
    local DFrame = vgui.Create( "DFrame" )
    DFrame:SetSize( 450, 100 )
    DFrame:Center()
    DFrame:SetTitle( "" )
    DFrame:SetDraggable( false )
    DFrame:ShowCloseButton(false)
    DFrame:MakePopup()
    function DFrame:Paint(w, h)
      draw.RoundedBox(2, 0, 0, self:GetWide(), self:GetTall(), Color(35, 35, 35, 250))
      draw.RoundedBox(2, 0, 0, self:GetWide(), 30, Color(0, 102, 255, 250))
      draw.SimpleText( "Payer pour spawn un props!", "DRPTitleFont", self:GetWide() / 2, 15, Color(255,255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
    end

    local Label1 = vgui.Create("DLabel", DFrame)
    Label1:SetPos(30,40)
    Label1:SetSize(400,20)
    Label1:SetText("Etes-vous sûre de payer "..DarkRP.formatMoney(lmmpropcost).." pour le faire spawn?")
    Label1:SetTextColor(Color(255,255,255,255))
    Label1:SetFont("DRPLabelFont")

    local YesBTN = vgui.Create("DButton", DFrame)
    YesBTN:SetPos(30, 70)
    YesBTN:SetSize(150, 20)
    YesBTN:SetText("Oui")
    YesBTN:SetFont("DRPBtnLabelFont")
    YesBTN.OnCursorEntered = function(self)
      self.hover = true
    end
    YesBTN.OnCursorExited = function(self)
      self.hover = false
    end
    YesBTN.Paint = function( self, w, h )
      if self.IsClose then
        draw.RoundedBox(0, 0, 0, w, h, (self.hover and Color(88,0,0,250) or Color(255,255,255,255))) -- Paints on hover
      else
        draw.RoundedBox(0, 0, 0, w, h, (self.hover and Color(0,160,255,250) or Color(255,255,255,255))) -- Paints on hover
      end
      self:SetTextColor(self.hover and Color(255,255,255,255) or Color(0,0,0,250))
    end
    YesBTN.DoClick = function()
      net.Start("LMMPlayerSpawnPropCLBack")
        net.WriteString(mdl)
      net.SendToServer()
      DFrame:Close()
    end

    local NoBTN = vgui.Create("DButton", DFrame)
    NoBTN:SetPos(220, 70)
    NoBTN:SetSize(150, 20)
    NoBTN:SetText("Non")
    NoBTN.IsClose = true
    NoBTN:SetFont("DRPBtnLabelFont")
    NoBTN.OnCursorEntered = function(self)
      self.hover = true
    end
    NoBTN.OnCursorExited = function(self)
      self.hover = false
    end
    NoBTN.Paint = function( self, w, h )
      if self.IsClose then
        draw.RoundedBox(0, 0, 0, w, h, (self.hover and Color(88,0,0,250) or Color(255,255,255,255))) -- Paints on hover
      else
        draw.RoundedBox(0, 0, 0, w, h, (self.hover and Color(0,160,255,250) or Color(255,255,255,255))) -- Paints on hover
      end
      self:SetTextColor(self.hover and Color(255,255,255,255) or Color(0,0,0,250))
    end
    NoBTN.DoClick = function()
      DFrame:Close()
    end
  end)
end