Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - blackmetal

Pages: [1]
1
Je ne suis pas expert dans le domaine mais un moyen facile de gérer ca si ton jeu est multijoueur c'est d'utiliser un checksum.

C'est un petit programme (voir un petit algo que tu peux inclure dans ton code) qui prends un fichier, fait un ensemble de calculs sur ce qu'il contient et te ressort un identifiant, par exemple: t5788927jiqc8hz7az1.

Voici la doc wikipedia du md5sum en anglais: http://en.wikipedia.org/wiki/Md5sum

L'objectif est que tu le passe sur chacun des fichiers que tu veux protéger. Cela va te donner un identifiant unique par fichier. Tu les enregistre coté serveur de ton application dans une hashmap (table qui relie une clé à une valeur) avec pour clé le nom de ton fichier de ressource et pour valeur l'identifiant du checksum.

Ensuite, quand tu veux dans ton programme (au lancement par exemple), ton application client passe le checksum sur l'ensemble des fichiers que tu veux vérifier et demande confirmation au serveur.

Tu n'aura qu'a comparer le checksum effectué par ton client à celui pré-enregistré par ton serveur.
Si ils sont différents, l'utilisateur a modifié les ressources et tu peux lui mettre un message d'erreur du genre: Le je ne se lancera pas car vous avez toucher les ressources, veuillez restaurer l'installation initiale.

Le seul inconvénient de cette technique est que le checksum peut être long si tu veux avoir une sécurité élevée et que tu as beaucoup de données (je n'ai pas d'ordre de grandeur à te donner par contre, trop longtemps que je n'ai pas remis les mains la dedans). Du coup, il vaudrait mieux le faire en même temps que tu charges les données en mémoire, par exemple quand ton joueur entre dans une nouvelle map ou charge sa partie.

Tu peux faire ca pour toutes tes ressources, même pour la sauvegarde de ton joueur. Au moment ou il sauvegarde, tu checksum son fichier et tu envoi la valeur au serveur (tu peux même envoyer une copie du perso par précaution si tu ne veux pas perdre les données au cas ou elles aient été modifiées). Le serveur la sauvegarde et au prochain chargement, tu la vérifie. Ca te permettra d'éviter que le joueur se booste les stats, se rajoute de l'argent, des items, etc.

En espérant t'avoir été utile :)

2
Graphique / Re : Problème avec la fonction loadFromMemory [Résolu]
« le: Novembre 07, 2014, 10:16:56 pm »
Merci beaucoup, ca marche :)

3
Graphique / Problème avec la fonction loadFromMemory [Résolu]
« le: Novembre 07, 2014, 08:12:48 pm »
Bonjour,

J'ai remarqué que la fonction loadFromMemory provoquait des erreurs que la fonction loadFromFile ne provoquait pas. Voici un exemple ce code dans lequel le chargement d'une font par la mémoire ne fonctionne pas alors que le chargement de la même font directement à partir du fichier fonctionne.

Je suis sur Windows 7, avec Code::Blocks 13.12. J'utilise SFML 2.1 que j'ai recompilé sur mon ordi.

#include <iostream>
#include <SFML/Graphics.hpp>

int main()
{
    sf::Texture texture;
    if (!texture.loadFromFile("data/cursor_icon.png"))
        std::cout << "LoadFromFile failed" << std::endl;
    else
        std::cout << "LoadFromFile success" << std::endl;

        std::ifstream file;
    file.open("data/cursor_icon.png");
    std::vector<char> buffer_;
    std::streampos length;
        if (file.is_open())
    {
        file.seekg(0,std::ios::end);
        length = file.tellg();
        file.seekg(0,std::ios::beg);
        buffer_.resize((unsigned)length);
        file.read(&buffer_[0],length);

                file.close();
    }

    sf::Texture texture2;
    if (!texture2.loadFromMemory(&buffer_[0], (unsigned)length))
        std::cout << "LoadFromMemory failed" << std::endl;
    else
        std::cout << "LoadFromMemory success" << std::endl;
}

La sortie de console est la suivante:

LoadFromFile success
Failed to load image from memory. Reason : Image not of any known type, or corrupt
LoadFromMemory failed

Est-ce moi qui fait n'importe quoi? Ou est-ce cette fonction qui ne fait pas ce qu'elle devrait?

Merci d'avance pour votre réponse

4
Bon, j'ai fini par linker la SFML en dynamique plutôt qu'en statique. Ca fonctionne correctement même si ca ne fait pas vraiment ce que je voulais.

Merci quand même :)

5
Bonjour,

J'ai crée une bibliothèque dynamique à l'aide de Code::Blocks et SFML 2.1. A la base, le code était dans un projet console classique et il compile et fonctionne correctement.
J'ai tenté de le passer en bibliothèque dynamique. J'ai donc utilisé l'utilitaire de Code::Blocks pour le faire. J'ai une bibliothèque qui contient des fichiers .h, .hxx (templates) et un fichier .cc
J'ai correctement ajouté le DLL_EXPORT devant chacune des fonctions du .cc que je voulais pouvoir utiliser.
La compilation et le linkage fonctionne correctement. Un .dll, .a et .def sont créés au bon endroit.
J'ai compilé avec le flag SFML_STATIC ainsi que toutes les libs sfml-xxx-s ou -s-d selon Debug/Release.

J'ai crée un second projet console dans lequel j'utilise la bibliothèque que j'ai fabriquée. Pour ca, je définie le lien des includes et des libs puis je défini quelles libs je veux utiliser: la mienne donc qui s'appelle: "libinterface_engine.a"

Dans ce second projet, si je ne fais qu'include le code de ma bibliothèque, la compilation se passe bien et le programme se lance. Par contre, quand je tente d'utiliser ce code, voici le message d'erreur que j'obtiens:
||=== Build: Release in interface_test (compiler: GNU GCC Compiler) ===|
obj\Release\src\FormNothing.o:FormNothing.cpp|| undefined reference to `vtable for Interface::Form::FormNothing'|
obj\Release\src\FormNothing.o:FormNothing.cpp:(.text$_ZN12LibInterface7Element5IFormIN9Interface4Form11FormNothingEE4DrawEPN2sf12RenderWindowE[__ZN12LibInterface7Element5IFormIN9Interface4Form11FormNothingEE4DrawEPN2sf12RenderWindowE]+0x17)||undefined reference to `_imp___ZN2sf12RenderStates7DefaultE'
|
obj\Release\src\FormNothing.o:FormNothing.cpp:(.text$_ZN12LibInterface7Element5IFormIN9Interface4Form11FormNothingEE4DrawEPN2sf12RenderWindowE[__ZN12LibInterface7Element5IFormIN9Interface4Form11FormNothingEE4DrawEPN2sf12RenderWindowE]+0x24)||undefined reference to `_imp___ZN2sf12RenderTarget4drawERKNS_8DrawableERKNS_12RenderStatesE'|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

Je ne comprends pas l'erreur car ce même code avec les mêmes includes fonctionne parfaitement si je ne fais pas de bibliothèque et que je met tout dans le même projet.
Pour info: J'utilise Code::Blocks 13.12, je compile SFML en static (GCC 4.7 TDM (SJLJ) - 32 bits).
J'ai joint à ce post les images de mon arborescence sous Code::Blocks. Ma lib s'appelle interface_engine et mon programme interface_test.

Auriez vous une idée?

PS: Si besoin, je peux fournir mon projet complet Code::Blocks avec les sources dedans pour que vous puissiez m'aider.

6
Bonjour,

J'ai pu remarquer qu'il est impossible de récuperer des inputs tels que '&' ou encore 'é'.
En effet, la valeur du sf::Event.Key vaut 0.
Tout d'abord, ces valeurs n'étant pas accessibles, la totalité du clavier n'est pas recouverte et pour développer un jeu c'est problématique.
Ensuite, la valeur 1 qui est composée par 'shift + Num1' sur un AZERTY n'est pas représentée de la même manière que sur un QWERTY (elle vaut 'Num1'). Il est donc diffiçile de faire une gestion des inputs générique.
Une modification est-elle prévue pour la version 2.0 dans le but de corriger ce problème?

Merci d'avance pour la réponse.

Pages: [1]