Ressources Web NPC Addon V2

Valfunde

Membre
Membre
28 Mars 2016
12
3
18
Bonjour, je vous propose une nouvelle version de l'addon Web NPC Addon.
Cet addon propose :
  • Un premier menu où se trouve un nombre variable de boutons
  • Un design du menu "Responsive"
  • Un Panel customisable (Changer les couleurs, les liens, les textes..)
  • Un NPC customisable ( Changer le texte, la couleur et le playermodel)
  • Un bouton retour en arrière & fermer
  • Ouverture de page web de votre choix
Voici les différents screenshots de l'addon :











L'installation de l'addon est très simple :
Une fois téléchargé, vous trouverez dans le fichier .rar un dossier nommé valfunde_web_npc_v2.
Prenez ce fichier et glissez le dans votre dossier addons.
Pour ce qui est de la configuration de l'addon, allez dans : valfunde_web_npc_v2>lua>entities>tab_panel_npc puis ouvrez le fichier cl_config.lua .
Suivez ensuite les instructions dans ce même fichier.


J’espère que vous apprécierez mon addon.
A plus tard !
 
  • J'aime
Réactions: Pol

mignoti

daiveulopeur scripte feau-d'heure
Membre
10 Janvier 2011
307
38
103
Pseudo RP
Renardo Serasa
Script ultra simple a réaliser mais sinon bonne chance pour la suite.
PS: Ton menu est pas "responsive" comme tu le dis et tu fais très mal la gestion des boutons.

Utilise plutot un ListLayout ou un PanelList dans lequel tu ajoute tes boutons et ou tu a ajusté la taille avec des calculs simples auparavant.

(Nan parceque
if Valfunde.Number.NumberLinkTab == 1 then

elseif Valfunde.Number.NumberLinkTab == 2 then

elseif Valfunde.Number.NumberLinkTab == 3 then

elseif Valfunde.Number.NumberLinkTab == 4 then

elseif Valfunde.Number.NumberLinkTab >= 5 then
voilà quoi...)

Et, pour ta fonction "webpanel"

Fais plutot ca: (en modifiant un peut ton code)

Code:
function WebPanel( url )
    local webframe = vgui.Create("DFrame")
        webframe:SetSize(1280,720) -- Ton menu n'est pas "responsive" car il ne s'adapte pas a la taille des écrans.
        webframe:Center()
        webframe:SetTitle("")
        webframe:SetVisible(true)
        webframe:SetDraggable(false)
        webframe:MakePopup()
        webframe:ShowCloseButton(false)

        webframe.Paint = function( self )

            Derma_DrawBackgroundBlur( self, 1 )
            draw.RoundedBox(1, 0, 0, self:GetWide(), self:GetTall(), Valfunde.Colour.Secondary)
            draw.RoundedBox(4, 2, 2, self:GetWide()-4, self:GetTall()-4, Valfunde.Colour.Primary)
        end

    local htmlPart = vgui.Create("DHTML", webframe)
        htmlPart :Dock( FILL )
        htmlPart :OpenURL( url )
        htmlPart :SetAllowLua( true )

    local closebuttonone = vgui.Create("DButton", webframeone)
        closebuttonone:SetPos(1240,6.5)
        closebuttonone:SetText("Х")
        closebuttonone:SetSize(25,15)
        closebuttonone:SetTextColor(Valfunde.Colour.Primary)

    closebuttonone.Paint = function(s , w , h)
        draw.RoundedBox(1, 0, 0, w, h, Valfunde.Colour.Secondary)
    end
    closebuttonone.DoClick = function ( self )
        webframe:Close(true)
    end

        local backbuttonone = vgui.Create("DButton", webframeone)
        backbuttonone:SetPos(20,6.5)
        backbuttonone:SetText("<")
        backbuttonone:SetSize(25,15)
        backbuttonone:SetTextColor(Valfunde.Colour.Primary)

    backbuttonone.Paint = function(s , w , h)
        draw.RoundedBox(1, 0, 0, w, h, Valfunde.Colour.Secondary)
    end
    backbuttonone.DoClick = function ( self )
        webframe:Close(true)
        PaneL ()
    end
end

J'ai pas tout modifié mais j'èspère que tu as compris l'idée. Ca prends moins de place, ca fais un plus beau code et c'est globalement plus performant.

J'ai pas encore regardé tout ton code, (car il me fais vraiment mal aux yeux) mais je le faire vite fais.

Après avoir regardé la dernère partie de ton code,
Code:
hook.Add("PostDrawOpaqueRenderables", "PaneL", function()[/SIZE][/SIZE]
[SIZE=1][SIZE=4]    for _, ent in pairs (ents.FindByClass("tab_panel_npc")) do
        if ent:GetPos():Distance(LocalPlayer():GetPos()) < 1000 then
            local Ang = ent:GetAngles()

            Ang:RotateAroundAxis( Ang:Forward(), 90)
            Ang:RotateAroundAxis( Ang:Right(), -90)
      
            cam.Start3D2D(ent:GetPos()+ent:GetUp()*85, Ang, 0.20)
                draw.SimpleTextOutlined( Valfunde.Text.TextAboveHead, "HUDNumber5", 0, 0, Valfunde.Colour.TextAboveHeadColor, TEXT_ALIGN_CENTER, TEXT_ALIGN_TOP, 1, Color(0, 0, 0, 255))          
            cam.End3D2D()
        end
    end
end)
Non, tu fais pas ca. Jamais. Pas dans une entité en plus.

Dans ton cas, fais tout ca dans ent:Draw() ou ent:DrawTranslucent()

ca t'évitera déja ca for _, ent in pairs (ents.FindByClass("tab_panel_npc")) do

et, pour le " if ent:GetPos():Distance(LocalPlayer():GetPos()) < 1000 then "

change le en " if ent:GetPos():Distance(LocalPlayer():GetPos()) < 255 then"

et fais que l'alpha de ton texte (au dessus du npc) est calulé comme tel:

(Je part de l'idée que tu est dans la fonction ENT:Draw())

Code:
[/SIZE][/SIZE][/SIZE][/SIZE]
[SIZE=1][SIZE=4][SIZE=1][SIZE=4]
            local Ang = self:GetAngles()
            local Pos = self:GetPos()
            local clr = Valfunde.Colour.TextAboveHeadColor
      if Pos:Distance(LocalPlayer():GetPos()) <= 255 then

            Ang:RotateAroundAxis( Ang:Forward(), 90)
            Ang:RotateAroundAxis( Ang:Right(), -90)
      
            cam.Start3D2D(Pos, Ang, 0.20) -- Pourquoi +ent:GetUp()*85 ?
                draw.SimpleTextOutlined( Valfunde.Text.TextAboveHead, "HUDNumber5", 0, 0, Color(clr.r,clr.g,clr.b,math.Clamp(Pos:Distance( LocalPlayer():GetPos() ),0,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_TOP, 1, Color(0, 0, 0, 255))          
            cam.End3D2D()
        end

PS: Aucun de mon code a été testé, mais si tu sait un minimum coder tu devrait pouvoir l'adapter simplement.

Ah et j'avais oublié:

cl_config.lua = Fichier clientside(cl_)

tu fais une référence a ce fichier dans init.lua, je sait pas si t'a testé ton truc sur un serveur srcds ou autre mais pas un serv local mais logiquement ca devrait pas marcher.
 
Dernière édition:
  • J'aime
Réactions: Pol

Valfunde

Membre
Membre
28 Mars 2016
12
3
18
Script ultra simple a réaliser mais sinon bonne chance pour la suite.
PS: Ton menu est pas "responsive" comme tu le dis et tu fais très mal la gestion des boutons.

Utilise plutot un ListLayout ou un PanelList dans lequel tu ajoute tes boutons et ou tu a ajusté la taille avec des calculs simples auparavant.

(Nan parceque
if Valfunde.Number.NumberLinkTab == 1 then

elseif Valfunde.Number.NumberLinkTab == 2 then

elseif Valfunde.Number.NumberLinkTab == 3 then

elseif Valfunde.Number.NumberLinkTab == 4 then

elseif Valfunde.Number.NumberLinkTab >= 5 then
voilà quoi...)

Et, pour ta fonction "webpanel"

Fais plutot ca: (en modifiant un peut ton code)

Code:
function WebPanel( url )
    local webframe = vgui.Create("DFrame")
        webframe:SetSize(1280,720) -- Ton menu n'est pas "responsive" car il ne s'adapte pas a la taille des écrans.
        webframe:Center()
        webframe:SetTitle("")
        webframe:SetVisible(true)
        webframe:SetDraggable(false)
        webframe:MakePopup()
        webframe:ShowCloseButton(false)

        webframe.Paint = function( self )

            Derma_DrawBackgroundBlur( self, 1 )
            draw.RoundedBox(1, 0, 0, self:GetWide(), self:GetTall(), Valfunde.Colour.Secondary)
            draw.RoundedBox(4, 2, 2, self:GetWide()-4, self:GetTall()-4, Valfunde.Colour.Primary)
        end

    local htmlPart = vgui.Create("DHTML", webframe)
        htmlPart :Dock( FILL )
        htmlPart :OpenURL( url )
        htmlPart :SetAllowLua( true )

    local closebuttonone = vgui.Create("DButton", webframeone)
        closebuttonone:SetPos(1240,6.5)
        closebuttonone:SetText("Х")
        closebuttonone:SetSize(25,15)
        closebuttonone:SetTextColor(Valfunde.Colour.Primary)

    closebuttonone.Paint = function(s , w , h)
        draw.RoundedBox(1, 0, 0, w, h, Valfunde.Colour.Secondary)
    end
    closebuttonone.DoClick = function ( self )
        webframe:Close(true)
    end

        local backbuttonone = vgui.Create("DButton", webframeone)
        backbuttonone:SetPos(20,6.5)
        backbuttonone:SetText("<")
        backbuttonone:SetSize(25,15)
        backbuttonone:SetTextColor(Valfunde.Colour.Primary)

    backbuttonone.Paint = function(s , w , h)
        draw.RoundedBox(1, 0, 0, w, h, Valfunde.Colour.Secondary)
    end
    backbuttonone.DoClick = function ( self )
        webframe:Close(true)
        PaneL ()
    end
end

J'ai pas tout modifié mais j'èspère que tu as compris l'idée. Ca prends moins de place, ca fais un plus beau code et c'est globalement plus performant.

J'ai pas encore regardé tout ton code, (car il me fais vraiment mal aux yeux) mais je le faire vite fais.

Après avoir regardé la dernère partie de ton code,
Code:
hook.Add("PostDrawOpaqueRenderables", "PaneL", function()[/SIZE][/SIZE][/SIZE][/SIZE]
[SIZE=1][SIZE=4][SIZE=1][SIZE=4]    for _, ent in pairs (ents.FindByClass("tab_panel_npc")) do
        if ent:GetPos():Distance(LocalPlayer():GetPos()) < 1000 then
            local Ang = ent:GetAngles()

            Ang:RotateAroundAxis( Ang:Forward(), 90)
            Ang:RotateAroundAxis( Ang:Right(), -90)
     
            cam.Start3D2D(ent:GetPos()+ent:GetUp()*85, Ang, 0.20)
                draw.SimpleTextOutlined( Valfunde.Text.TextAboveHead, "HUDNumber5", 0, 0, Valfunde.Colour.TextAboveHeadColor, TEXT_ALIGN_CENTER, TEXT_ALIGN_TOP, 1, Color(0, 0, 0, 255))         
            cam.End3D2D()
        end
    end
end)
Non, tu fais pas ca. Jamais. Pas dans une entité en plus.

Dans ton cas, fais tout ca dans ent:Draw() ou ent:DrawTranslucent()

ca t'évitera déja ca for _, ent in pairs (ents.FindByClass("tab_panel_npc")) do

et, pour le " if ent:GetPos():Distance(LocalPlayer():GetPos()) < 1000 then "

change le en " if ent:GetPos():Distance(LocalPlayer():GetPos()) < 255 then"

et fais que l'alpha de ton texte (au dessus du npc) est calulé comme tel:

(Je part de l'idée que tu est dans la fonction ENT:Draw())

Code:
[/SIZE][/SIZE][/SIZE][/SIZE][/SIZE][/SIZE]
[SIZE=1][SIZE=4][SIZE=1][SIZE=4][SIZE=1][SIZE=4]
            local Ang = self:GetAngles()
            local Pos = self:GetPos()
            local clr = Valfunde.Colour.TextAboveHeadColor
      if Pos:Distance(LocalPlayer():GetPos()) <= 255 then

            Ang:RotateAroundAxis( Ang:Forward(), 90)
            Ang:RotateAroundAxis( Ang:Right(), -90)
     
            cam.Start3D2D(Pos, Ang, 0.20) -- Pourquoi +ent:GetUp()*85 ?
                draw.SimpleTextOutlined( Valfunde.Text.TextAboveHead, "HUDNumber5", 0, 0, Color(clr.r,clr.g,clr.b,math.Clamp(Pos:Distance( LocalPlayer():GetPos() ),0,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_TOP, 1, Color(0, 0, 0, 255))         
            cam.End3D2D()
        end

PS: Aucun de mon code a été testé, mais si tu sait un minimum coder tu devrait pouvoir l'adapter simplement.

Ah et j'avais oublié:

cl_config.lua = Fichier clientside(cl_)

tu fais une référence a ce fichier dans init.lua, je sait pas si t'a testé ton truc sur un serveur srcds ou autre mais pas un serv local mais logiquement ca devrait pas marcher.
Merci de m'avoir aidé, je compte m'occuper d'opti le code dès que j'ai le temps, oui mon code est assez caca :3
Je dirait quand j'aurais update tt sa ^^
 
  • J'aime
Réactions: Pol

Pol

Apopo RolePlay
Membre du personnel
Administrateur
Equipe développement
18 Octobre 2009
5 314
827
304
Pseudo RP
Pol Morteau
:thumbsup::thumbsup::thumbsup::thumbsup:
 

Valfunde

Membre
Membre
28 Mars 2016
12
3
18
mignoti, aussi quand j'ai dit responsive, c'est pas par rapport a la résolution de l'écran, mais plus la taille du panel "menu" en fonction du nombre de buttons ^^
 

Valfunde

Membre
Membre
28 Mars 2016
12
3
18
Mignoti, quand tu me dis que tu a edit le code de la fonction du webpanel, avec le DHTML, il n'a pas bougé :p c'est le même ^^'
 

mignoti

daiveulopeur scripte feau-d'heure
Membre
10 Janvier 2011
307
38
103
Pseudo RP
Renardo Serasa
Naah, tu m'a mal compris.
Fais une fonction pour ouvrir le menu en spécifiant l'url a la place d'a chaque fois recréer le code et hardcoder l'url dedans.

Si tu veut, je peut t'expliquer en détail si tu n'a pas compris.
 

mignoti

daiveulopeur scripte feau-d'heure
Membre
10 Janvier 2011
307
38
103
Pseudo RP
Renardo Serasa
https://mega.nz/#!TRh2QAQI!rTfwspenGlv55w_PVPJGMvixi2GTsUz1xNmCbykXz-I

J'ai modifié ton code en reprennant celui de base. Le miens prends beaucoup moins de place et est beaucoup plus optimisé :)

Je te donne toutes les permissions par rapport au code; tu en fais ce que tu veut.
(btw, j'ai juste modifié le code client. Et j'ai retiré la limite de "boutons")
 
Dernière édition:

mignoti

daiveulopeur scripte feau-d'heure
Membre
10 Janvier 2011
307
38
103
Pseudo RP
Renardo Serasa
Faut que tu joues sur la valeur de la mutliplication ( la valeur "h" ) je crois que si tu mets la base a 75 et que tu mets le truc a 84 normalement ca devrais marcher, non testé mais j'ai fais les calculs et c'est bon normalement.
 
  • J'aime
Réactions: Pol