J'aurais besoin de quelques testeurs pour tester la fiabilité de ce code.
Dans un premier temps, l'objectif de ce code est de pouvoir créer un compte utilisateur sur un serveur mutualisé.
■ Pour créer un compte
- Entrer un nom d'utilisateur et un mot de passe puis cliquer sur le bouton Sign Up
■ Pour se connecter par la suite.
- Entrer un nom d'utilisateur et un mot de passe puis cliquer sur le bouton Sign In ou presser la touche Entrée.
■ Pour quitter l'application.
- Cliquer sur le bouton Quit ou presser la touche Escape.
Une fois connecter
■ Pour se déconnecter
- Cliquer sur le bouton Sign Out.
■ Pour supprimer son compte
- Clique sur le bouton Delete account.
- Un message vous demandera de confirmer cette suppression.
Le nom d'utilisateur n'est pas case sensitive ce qui n'est pas le cas du mot de passe l'
Merci de mettre le pseudo du forum mais pas le même mot de passe
Les information sont cryptés MD5.
Code : Tout sélectionner
EnableExplicit
Enumeration Font
#FontGlobal
#FontH1
#FontH2
EndEnumeration
Enumeration Process
;Process Account 0 -> 4
#PR_Sign_Up
#PR_Sign_In
#PR_Sign_Update
#PR_Account_Kill
#PR_UsersList
;Process Game 5 -> 7
#PR_Game_Exist
#PR_Game_New
#PR_Game_Kill
EndEnumeration
Enumeration Window
#mf ;Mainform
#pr ;Profil
EndEnumeration
Enumeration Gadget
#mfLabel ;0 -> 99
#mfLogin = 100
#mfContent
#mfUserIp
#mfUserName
#mfUserPassword
#mfUserNameView
#mfUsersList
#mfUserProfil
#mfSignUp
#mfSignIn
#mfSignOut
#mfAccountKill
#mfLang
#mfGameNew
#mfGameDelete
#mfQuit
;Thumbnails
#prThumNails
#prTime
#prExit
EndEnumeration
Structure NewMessage
fr.s
en.s
EndStructure
Global NewMap Messages.NewMessage()
Global UserAgent.s = "The quick brown fox jumps over the lazy dog."
Global url.s = "http://s242132022.onlinehome.fr/game01/"
Global Core.s = "core/"
Global Lang.s = "Fr"
Global Width, Height
Global MarginTop.i
;ThumbNails
Global NewList Avatars.s()
;Users
Structure NewUser
Name.s
Container.i
WebGadget.i
ThumbNail.s
EndStructure
Global NewList Users.NewUser(), Selector
;-Summary
Declare Start()
;U.T. Server
Declare ServeurEnable(Script.s = "")
;U.T. User Account
Declare.s GetUserIp()
Declare SignUp()
Declare SignIn()
Declare SignOut()
Declare AccountKill()
Declare Userslist()
;U.T. User Profile
Declare ViewThumNails()
Declare ThumbNailsList()
Declare.s ShowThumbNail(Profil.s = "")
Declare SelectThumNail()
;U.T. Game
Declare GameNew()
;U.T. Lang & Messages
Declare GetLang()
Declare MessageInit()
Declare.s m(Key.s)
;U.T. Tools
Declare.s md5(buffer.s)
Declare.f AdjustFontSize(Size.l)
Declare Exit()
Start()
Procedure Start()
UseMD5Fingerprint()
InitNetwork()
ExamineDesktops()
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
Width = GetSystemMetrics_(#SM_CXSCREEN)
Height = GetSystemMetrics_(#SM_CYSCREEN)
LoadFont(#FontGlobal, "", AdjustFontSize(11))
LoadFont(#FontH1, "", AdjustFontSize(15))
LoadFont(#FontH2, "", AdjustFontSize(12))
CompilerCase #PB_OS_MacOS
Width = DesktopWidth(0)
Height = DesktopHeight(0)
MarginTop + 40
LoadFont(#FontGlobal, "Helvetica", 12)
LoadFont(#FontH1, "Helvetica", 15)
LoadFont(#FontH2, "Helvetica", 13)
CompilerDefault
Width = DesktopWidth(0)
Height = DesktopHeight(0)
LoadFont(#FontGlobal, "", 11)
LoadFont(#FontH1, "", 15)
LoadFont(#FontH2, "", 12)
CompilerEndSelect
ReceiveHTTPMemory(url + "upload.php", #PB_HTTP_NoRedirect, UserAgent)
MessageInit()
SetGadgetFont(#PB_Default, FontID(#FontGlobal))
OpenWindow(#mf, 0, 0, Width, Height, "Test", #PB_Window_BorderLess)
;-FORM : The user is NOT connected
ContainerGadget(#mfLogin, 0, 0, Width, Height)
TextGadget(#mfUserIp, 10, MarginTop + 20, 300, 24, "Waiting to be connected")
TextGadget(#mfLabel + 1, 10, Height - 90, 200, 24, "")
StringGadget(#mfUserName, 10, Height - 60, 200, 24, "")
SetGadgetAttribute(#mfUserName, #PB_String_MaximumLength, 20)
TextGadget(#mfLabel + 2, 220, Height - 90, 200, 24, "")
StringGadget(#mfUserPassword, 220, Height - 60, 200, 24, "", #PB_String_Password)
SetGadgetAttribute(#mfUserPassword, #PB_String_MaximumLength, 20)
ButtonGadget(#mfQuit, Width - 140, MarginTop + 20, 120, 25, "")
ButtonGadget(#mfSignIn, 430, Height - 60, 80, 25, "")
ButtonGadget(#mfSignUp, 520, Height - 60, 80, 25, "")
ComboBoxGadget(#mfLang, 610, Height - 60, 80, 25)
AddGadgetItem(#mfLang, -1, "Fr")
AddGadgetItem(#mfLang, -1, "En")
SetGadgetState(#mfLang, 0)
CloseGadgetList()
;-FORM : The user is connected
ContainerGadget(#mfContent, 0, 0, Width, Height)
ButtonGadget(#mfSignOut, Width - 160, MarginTop + 20, 150, 25, m("so"))
ButtonGadget(#mfAccountKill, Width - 160, MarginTop + 50, 150, 25, m("da"))
ButtonGadget(#mfGameNew, Width - 160, MarginTop + 80, 150, 25, m("gn"))
ScrollAreaGadget(#mfUsersList, 0, 0 + MarginTop, 300, Height-MarginTop, 278, 112, #PB_ScrollArea_Single)
CloseGadgetList()
TextGadget(#mfUserNameView, 310, MarginTop + 10, 200, 22, "")
SetGadgetFont(#mfUserNameView, FontID(#FontH1))
CloseGadgetList()
HideGadget(#mfContent, #True)
GetLang()
AddKeyboardShortcut(#mf, #PB_Shortcut_Return, #mfSignIn)
AddKeyboardShortcut(#mf, #PB_Shortcut_Escape, #mfQuit)
;Triggers
BindGadgetEvent(#mfSignIn, @SignIn())
BindGadgetEvent(#mfSignUp, @SignUp())
BindGadgetEvent(#mfSignOut, @SignOut())
BindGadgetEvent(#mfLang, @Getlang())
BindGadgetEvent(#mfAccountKill, @AccountKill())
BindGadgetEvent(#mfQuit, @Exit())
BindGadgetEvent(#mfGameNew, @GameNew())
BindEvent(#PB_Event_Menu, @SignIn(), #mf, #mfSignIn)
BindEvent(#PB_Event_Menu, @Exit(), #mf, #mfQuit)
BindEvent(#PB_Event_CloseWindow, @Exit())
SetActiveGadget(#mfUserName)
If ServeurEnable() = #False
MessageRequester(m("info"), m("nc"), #PB_MessageRequester_Error)
Exit()
Else
SetGadgetText(#mfUserIp, GetUserIp())
EndIf
Repeat : WaitWindowEvent() : ForEver
EndProcedure
;-
;- U.T. Server
Procedure ServeurEnable(Script.s = "")
Protected Header.s, Buffer.s, Result.b
If Script = ""
Script = Core + "isenable.php"
EndIf
Header = GetHTTPHeader(Url + Script)
Buffer = StringField(Header, 1, #LF$)
If FindString(buffer, "200 OK")
Result = #True
EndIf
ProcedureReturn Result
EndProcedure
;-
;- U.T. User Account
Procedure.s GetUserIp()
Protected Buffer.s, *Buffer, Size, n
Protected Script.s = core + "pr_getip.php"
If ServeurEnable(Script)
*buffer = ReceiveHTTPMemory(url + script, #PB_HTTP_NoRedirect, UserAgent)
If *buffer
Size = MemorySize(*buffer)
Buffer = PeekS(*buffer, Size, #PB_UTF8|#PB_ByteLength)
FreeMemory(*buffer)
EndIf
EndIf
ProcedureReturn Buffer
EndProcedure
;Create user account
Procedure SignUp()
Protected UserName.s = GetGadgetText(#mfUserName)
Protected UserPass.s = md5(GetGadgetText(#mfUserPassword))
Protected Buffer.s, Parameters.s, *Buffer, Size
Protected script.s = core + "pr_account_a.php"
If ServeurEnable(Script)
Parameters = "?process=" + #PR_Sign_Up + "&username=" + UserName + "&userpassword=" + UserPass + "&thumbnail=profil.jpg"
*buffer = ReceiveHTTPMemory(url + script + "/" + URLEncoder(parameters), #PB_HTTP_NoRedirect, UserAgent)
If *buffer
Size = MemorySize(*buffer)
Buffer = PeekS(*buffer, Size, #PB_UTF8|#PB_ByteLength)
FreeMemory(*buffer)
Buffer = LSet(Buffer, Len(Buffer) - 1)
EndIf
Select Buffer
Case "01"
SignIn()
GameNew()
Case "00"
MessageRequester(m("info"), m(buffer) + " " + UserName , #PB_MessageRequester_Warning)
Case "10"
MessageRequester(m("info"), m(buffer), #PB_MessageRequester_Warning)
EndSelect
EndIf
EndProcedure
;User Connect
Procedure SignIn()
Protected UserName.s = GetGadgetText(#mfUserName)
Protected UserPass.s = md5(GetGadgetText(#mfUserPassword))
Protected Buffer.s, Parameters.s, *Buffer, Size
Protected script.s = core + "pr_account_a.php"
If ServeurEnable(Script)
Parameters = "?process=" + #PR_Sign_In + "&username=" + UserName + "&userpassword=" + UserPass
*buffer = ReceiveHTTPMemory(url + script + "/" + URLEncoder(parameters), #PB_HTTP_NoRedirect, UserAgent)
If *buffer
Size = MemorySize(*buffer)
Buffer = PeekS(*buffer, Size, #PB_UTF8|#PB_ByteLength)
FreeMemory(*buffer)
Buffer = LSet(Buffer, Len(Buffer) - 1)
EndIf
Select Buffer
Case "10"
MessageRequester(m("info"), m(buffer), #PB_MessageRequester_Warning)
Case "11"
HideGadget(#mfLogin, #True)
HideGadget(#mfContent, #False)
SetGadgetText(#mfUserNameView, m("uw") + UserName)
UsersList()
SetGadgetState(#mfUsersList, 0)
EndSelect
EndIf
EndProcedure
;User Disconnect
Procedure SignOut()
HideGadget(#mfContent, #True)
UnbindGadgetEvent(#mfUserProfil, @ViewThumNails(), #PB_EventType_LeftClick)
;Empty Empty user list
ForEach Users()
FreeGadget(users()\WebGadget)
FreeGadget(users()\Container)
Next
ClearList(Users())
HideGadget(#mfLogin, #False)
SetActiveGadget(#mfUserName)
EndProcedure
;Deleting a user account
Procedure AccountKill()
Protected UserName.s = GetGadgetText(#mfUserName)
Protected UserPass.s = md5(GetGadgetText(#mfUserPassword))
Protected Buffer.s, Parameters.s, *Buffer, Size
Protected script.s = core + "pr_account_a.php"
If MessageRequester(m("info"), m("3C"), #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
If ServeurEnable(Script)
Parameters = "?process=" + #PR_Account_Kill + "&username=" + UserName + "&userpassword=" + UserPass
*buffer = ReceiveHTTPMemory(url + script + "/" + URLEncoder(parameters), #PB_HTTP_NoRedirect, UserAgent)
If *buffer
Size = MemorySize(*buffer)
Buffer = PeekS(*buffer, Size, #PB_UTF8|#PB_ByteLength)
FreeMemory(*buffer)
Buffer = LSet(Buffer, Len(Buffer) - 1)
EndIf
Select Buffer
Case "31" ;Account destroy -> User Sign Out
SignOut()
Case "30" ;Error While deleting account
MessageRequester(m("info"), m(Buffer), #PB_MessageRequester_Warning)
EndSelect
EndIf
EndIf
EndProcedure
Procedure UsersList()
Protected Buffer.s, *Buffer, Size, n
Protected Script.s = core + "pr_userslist.php"
Protected Index, y
;For each user, receiving a JSON structure
;Example : {"username":"falsam","password":"57fdc2eb1a52921add306b73b3bd68ec","thumbnail":"p023.jpg"}
If ServeurEnable(Script)
*buffer = ReceiveHTTPMemory(url + script, #PB_HTTP_NoRedirect, UserAgent)
If *buffer
Size = MemorySize(*buffer)
Buffer = PeekS(*buffer, Size, #PB_UTF8|#PB_ByteLength)
FreeMemory(*buffer)
For n = 1 To CountString(Buffer, #CR$)
AddElement(Users())
If ParseJSON(0, StringField(Buffer, n, #CR$))
If ExamineJSONMembers(JSONValue(0))
While NextJSONMember(JSONValue(0))
Select JSONMemberKey(JSONValue(0))
Case "username"
Users()\Name = GetJSONString(JSONMemberValue(JSONValue(0)))
Case "thumbnail"
users()\ThumbNail = GetJSONString(JSONMemberValue(JSONValue(0)))
EndSelect
Wend
EndIf
EndIf
Next
;Sort user list
SortStructuredList(Users(), #PB_Sort_Ascending | #PB_Sort_NoCase, OffsetOf(NewUser\Name), #PB_String)
;Create user list gadgets
OpenGadgetList(#mfUsersList)
ForEach Users()
Index = ListIndex(Users())
Users()\Container = CanvasGadget(#PB_Any, 0, y, 350, 110, #PB_Canvas_Container)
;Show Name
StartDrawing(CanvasOutput(Users()\Container))
If LCase(Users()\Name) = LCase(GetGadgetText(#mfUserName))
Box(0, 0, 350, 110, RGB(188, 143, 143))
EndIf
DrawingFont(FontID(#FontH2))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(5, 5, "#" + Index, RGB(255, 0, 0))
DrawText(TextWidth("#" + Index) + 10, 5, Users()\Name, RGB(105, 105, 105))
StopDrawing()
;Show profil image (Image not selectable)
Users()\WebGadget = WebGadget(-1, 5, 25, 80, 80, "")
SetGadgetItemText(Users()\WebGadget, #PB_Web_HtmlCode , ShowThumbNail(Users()\ThumbNail))
SetGadgetAttribute(Users()\WebGadget, #PB_Web_BlockPopupMenu, #True)
SetGadgetData(Users()\Container, Index)
;Button change image profil
If LCase(Users()\Name) = LCase(GetGadgetText(#mfUserName))
ButtonGadget(#mfUserProfil, 240, 5, 30, 30, "?")
SetGadgetFont(#mfUserProfil, FontID(#FontH2))
SetGadgetData(#mfUserProfil, Index)
GadgetToolTip(#mfUserProfil, m("upr"))
BindGadgetEvent(#mfUserProfil, @ViewThumNails(), #PB_EventType_LeftClick)
EndIf
CloseGadgetList()
y + 115
SetGadgetAttribute(#mfUsersList, #PB_ScrollArea_InnerHeight, y)
Next
CloseGadgetList()
EndIf
EndIf
EndProcedure
;-
;- U.T. User Profile
Procedure ViewThumNails()
Protected w = Width/3
Protected h = Height/2
Protected Time
;Modal window
DisableWindow(#mf, #True)
Selector = GetGadgetData(EventGadget())
OpenWindow(#pr, 0, 0, w, h, m("uspu"), #PB_Window_ScreenCentered, WindowID(#mf))
ScrollAreaGadget(#prThumNails, 0, 0, w, h - 60, w, 0)
CloseGadgetList()
SetGadgetColor(#prThumNails, #PB_Gadget_BackColor, RGB(105, 105, 105) )
;Load thumbnails
Time = ElapsedMilliseconds()
ThumbNailsList()
TextGadget(#prTime, 10, h - 50, w - 100, 24, m("dt") + Str(ElapsedMilliseconds() - Time) + " ms")
ButtonGadget(#prExit, w - 100, h - 50, 80, 30, m("ue"))
BindGadgetEvent(#prExit, @Exit())
EndProcedure
Procedure SelectThumNail()
Protected UserName.s = GetGadgetText(#mfUserName)
Protected UserPass.s = md5(GetGadgetText(#mfUserPassword))
Protected Buffer.s, Parameters.s, *Buffer, Size
Protected script.s = core + "pr_account_a.php"
Protected Index = GetGadgetData(EventGadget())
Protected ThumbNail.s
SelectElement(Avatars(), Index)
ThumbNail = GetFilePart(Avatars())
SelectElement(Users(), Selector)
SetGadgetItemText(Users()\WebGadget, #PB_Web_HtmlCode , ShowThumbNail(ThumbNail))
If ServeurEnable(Script)
Parameters = "?process=" + #PR_Sign_Update + "&username=" + UserName + "&userpassword=" + UserPass + "&thumbnail=" + ThumbNail
*buffer = ReceiveHTTPMemory(url + script + "/" + URLEncoder(parameters), #PB_HTTP_NoRedirect, UserAgent)
If *buffer
Size = MemorySize(*buffer)
Buffer = PeekS(*buffer, Size, #PB_UTF8|#PB_ByteLength)
FreeMemory(*buffer)
Buffer = LSet(Buffer, Len(Buffer) - 1)
EndIf
Select Buffer
Case "01"
;SignIn()
Case "00"
MessageRequester(m("info"), m(buffer) + " " + UserName , #PB_MessageRequester_Warning)
Case "10"
MessageRequester(m("info"), m(buffer), #PB_MessageRequester_Warning)
EndSelect
EndIf
EndProcedure
Procedure.s ShowThumbNail(Profil.s = "")
Protected Buffer.s
If Profil = ""
Profil = "profil.jpg"
EndIf
Buffer = "<body scroll = 'no' style='margin:0px; padding:0px;'><img src='" + url + "/data/avatars/" + Profil + "' style='width:100%; height:100%;'></body>"
ProcedureReturn Buffer
EndProcedure
Procedure ThumbNailsList()
Protected Buffer.s, *Buffer, Size, n
Protected Script.s = core + "pr_avatarslist.php"
Protected Index, Gadget, WebGadget, x, y
Protected AreaWidth = 102, AreaHeight = 130
If ServeurEnable(Script)
*buffer = ReceiveHTTPMemory(url + script, #PB_HTTP_NoRedirect, UserAgent)
If *buffer
Size = MemorySize(*buffer)
Buffer = PeekS(*buffer, Size, #PB_UTF8|#PB_ByteLength)
FreeMemory(*buffer)
ClearList(Avatars())
For n = 1 To CountString(Buffer, #CR$)
AddElement(avatars())
avatars() = StringField(Buffer, n, #CR$)
Next
OpenGadgetList(#prThumNails)
ForEach avatars()
Index = ListIndex(Avatars())
Gadget = CanvasGadget(-1, x, y, 100, 120, #PB_Canvas_Container)
SetGadgetData(Gadget, Index)
BindGadgetEvent(Gadget, @SelectThumNail(), #PB_EventType_LeftClick)
StartDrawing(CanvasOutput(Gadget))
Box(0, 0, 100, 120, RGB(119, 136, 153))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(#FontGlobal))
DrawText((100 - TextWidth("Select"))/2, 100, "Select", RGB(0, 0, 0))
StopDrawing()
WebGadget = WebGadget(-1, 0, 0, 100, 100, "")
CloseGadgetList()
SetGadgetItemText(WebGadget, #PB_Web_HtmlCode , ShowThumbNail(GetFilePart(Avatars())))
SetGadgetAttribute(WebGadget, #PB_Web_BlockPopupMenu, #True)
x + AreaWidth
If x > WindowWidth(#pr) - AreaWidth
x = 0
y + AreaHeight
SetGadgetAttribute(#prThumNails, #PB_ScrollArea_InnerHeight, y + AreaHeight)
EndIf
Next
CloseGadgetList()
EndIf
EndIf
EndProcedure
;-
;- Game
Procedure GameNew()
Protected UserName.s = GetGadgetText(#mfUserName)
Protected Buffer.s, Parameters.s, *Buffer, Size, n
Protected Script.s = core + "pr_game.php"
If ServeurEnable(Script)
Parameters = "?process=" + #PR_Game_New + "&username=" + UserName
*buffer = ReceiveHTTPMemory(url + script + "/" + URLEncoder(parameters), #PB_HTTP_NoRedirect, UserAgent)
If *buffer
Size = MemorySize(*buffer)
Buffer = PeekS(*buffer, Size, #PB_UTF8|#PB_ByteLength)
FreeMemory(*buffer)
Buffer = LSet(Buffer, Len(Buffer) - 1)
Select Buffer
Case "61" ;Game environment is ready
MessageRequester(m("info"), m(Buffer))
Case "60" ;Game environment already exists
MessageRequester(m("info"), m(Buffer), #PB_MessageRequester_Error)
EndSelect
EndIf
EndIf
EndProcedure
;-
;- U.T. Messages
; Translation of the different labels and messages of the application
Procedure GetLang()
Lang = GetGadgetItemText(#mfLang, GetGadgetState(#mfLang))
SetGadgetText(#mfLabel + 1, m("un")) ;UserName
SetGadgetText(#mfLabel + 2, m("up")) ;UserPass
SetGadgetText(#mfQuit, m("ue")) ;Exit
SetGadgetText(#mfSignIn, m("si")) ;Sign In
SetGadgetText(#mfSignUp, m("su")) ;Sign Up
SetGadgetText(#mfSignOut, m("so")) ;Sign Out
SetGadgetText(#mfAccountKill, m("da")) ;Account delete
SetGadgetText(#mfGameNew, m("gn")) ;Game New
SetGadgetText(#mfGameNew, m("gn")) ;Game New
GadgetToolTip(#mfQuit, m("ueh")) ;Exit
GadgetToolTip(#mfSignIn, m("sih")) ;Sign In Help
GadgetToolTip(#mfSignUp, m("suh")) ;Sign Up Help
GadgetToolTip(#mfSignOut, m("soh")) ;Sign Out Help
GadgetToolTip(#mfAccountKill, m("dah")) ;Delete account Help
EndProcedure
Procedure MessageInit()
;Form Messages
AddMapElement(Messages(), "un")
Messages()\fr = "Nom utilisateur"
Messages()\en = "User Name"
AddMapElement(Messages(), "up")
Messages()\fr = "Mot de passe"
Messages()\en = "PassWord"
AddMapElement(Messages(), "si")
Messages()\fr = "S'identifier"
Messages()\en = "Sign In"
AddMapElement(Messages(), "sih")
Messages()\fr = "Connection (Entrée)"
Messages()\en = "Connect (Enter)"
AddMapElement(Messages(), "su")
Messages()\fr = "S'inscrire"
Messages()\en = "Sign Up"
AddMapElement(Messages(), "suh")
Messages()\fr = "Créer un compte"
Messages()\en = "Create account"
AddMapElement(Messages(), "uw")
Messages()\fr = "Bienvenu "
Messages()\en = "Welcome "
AddMapElement(Messages(), "upr")
Messages()\fr = "Changer l'image de votre profil utilisateur."
Messages()\en = "Change your user profile image."
AddMapElement(Messages(), "uspu")
Messages()\fr = "Sélectionner une vignette."
Messages()\en = "Select a thumbnail."
AddMapElement(Messages(), "gn")
Messages()\fr = "Créer jeu"
Messages()\en = "Create game"
AddMapElement(Messages(), "so")
Messages()\fr = "Déconnexion"
Messages()\en = "Sign Out"
AddMapElement(Messages(), "soh")
Messages()\fr = "Se deconnecter"
Messages()\en = "Disconnect"
AddMapElement(Messages(), "da")
Messages()\fr = "Supprimer compte"
Messages()\en = "Delete account"
AddMapElement(Messages(), "dah")
Messages()\fr = "Suppression de votre compte"
Messages()\en = "Deleting your account"
AddMapElement(Messages(), "ue")
Messages()\fr = "Quitter"
Messages()\en = "Quit"
AddMapElement(Messages(), "ueh")
Messages()\fr = "Quitter (Escape)"
Messages()\en = "Exit (Escape)"
AddMapElement(Messages(), "sel")
Messages()\fr = "Sélectionner"
Messages()\en = "Select"
AddMapElement(Messages(), "can")
Messages()\fr = "Abandonner"
Messages()\en = "Cancel"
AddMapElement(Messages(), "dt")
Messages()\fr = "Délais de chargement : "
Messages()\en = "Loading times : "
;Events Messages
AddMapElement(Messages(), "info")
Messages()\fr = "Information"
Messages()\en = "Information"
AddMapElement(Messages(), "nc")
Messages()\fr = "Pas de connexion avec le serveur."
Messages()\en = "No connection To the server !"
AddMapElement(Messages(), "00")
Messages()\fr = "Ce compte existe déja : "
Messages()\en = "This account already exists : "
AddMapElement(Messages(), "10")
Messages()\fr = "Nom ou mot de passe invalide."
Messages()\en = "Name or password Invalid."
AddMapElement(Messages(), "3C")
Messages()\fr = "Suppression de votre compte. Etes vous certain ?"
Messages()\en = "Deleting your account. Are you sure?"
AddMapElement(Messages(), "30")
Messages()\fr = "Erreur durant la suppression du compte."
Messages()\en = "Error While deleting your account."
AddMapElement(Messages(), "60")
Messages()\fr = "Votre environnement de jeu existe déja."
Messages()\en = "Your game environment already exists."
AddMapElement(Messages(), "61")
Messages()\fr = "Votre environnement est prêt."
Messages()\en = "Your game environment is ready."
AddMapElement(Messages(), "ex")
Messages()\fr = "Etes vous certain de vouloir quitter le jeu ?"
Messages()\en = "Are you sure you want to quit the game ?"
EndProcedure
;Returns the translation of a message
Procedure.s m(Key.s)
Protected Buffer.s = "not defined !"
If FindMapElement(Messages(), Key)
Select Lang
Case "Fr"
Buffer = Messages()\fr
Case "En"
Buffer = Messages()\en
EndSelect
EndIf
ProcedureReturn Buffer
EndProcedure
;-
;- U.T. Tools
Procedure.f AdjustFontSize(Size.l)
Protected iimage
Static fPpp.f
If fPpp = 0
iimage = CreateImage(#PB_Any, 1, 1)
If IsImage(iimage)
If StartVectorDrawing(ImageVectorOutput(iimage))
fPpp = VectorResolutionX()
StopVectorDrawing()
EndIf
FreeImage(iimage)
EndIf
EndIf
ProcedureReturn (size * 96) / fPpp
EndProcedure
Procedure.s md5(Buffer.s)
Protected *Buffer = AllocateMemory(500)
Protected MD5$
If *Buffer
PokeS(*Buffer, Buffer, -1, #PB_Ascii)
MD5$ = Fingerprint(*Buffer, MemoryStringLength(*Buffer, #PB_Ascii), #PB_Cipher_MD5)
FreeMemory(*Buffer)
ProcedureReturn MD5$
EndIf
EndProcedure
;-
Procedure Exit()
Protected Window = EventWindow()
Select Window
Case #pr
CloseWindow(#pr)
DisableWindow(#mf, #False)
Case #mf
If MessageRequester(m("info"), m("ex"), #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
End
EndIf
EndSelect
EndProcedure
Merci d'avance pour votre participation.