Author Topic: 3rd Person Sans les cheats !  (Read 25195 times)

mehdness

  • Apprenti poseur de brushs
  • Posts: 61
    • http://
3rd Person Sans les cheats !
« on: December 12, 2012, 11:33:47 AM »
Bonjour à tous les amis !!!
Bon, cela fait au moins 2 ans que je ne suis pas revenu sur ce forum... j'ai oublié un peu les scripts personnelement.. J'espere que tous le monde trouve son pti bonheur avec les entraides que j'ai bien connu il y a quelques années.. et c'est pour cela que je viens a vous les amis !

J'ai un serveur en 3rd Person... il marche tres bien...  mais j'ai besoin de votre aide car apres avoir cherché et scripté, je n'arrive pas a desactivé les cheats sur ce mod. J'aimerai pouvoir jouer en toute tranquilité sans que les cheaters ramene leur popotin sur le serveur.

Je ne sais pas s'il faut un fichier cgamex86.dll modifié a mettre sur le serveur, ou bien s'il faut rajouté quelques lignes de script sur le mod.  

Je vous remercie par avance si quelqu'un a un pti tuyau. Excellente journée a vous.

voici le script:

main:

   level waittill spawn

   setcvar "cheats" "0"  ------------> ici j'ai mis la valeur 0  et rien ne change
   setcvar "thereisnomonkey" "1"
   setcvar "dmflags 262144"
   setcvar "dmrespawning" "1"

   thread 3rd_person

end


3rd_person:

   local.setting = waitexec tercera_persona.txt

   if(local.setting[1][2] == "1")
   {
      level.3rd_person = 1
   }
   else if(local.setting[1][2] == "0")
   {
      level.3rd_person = 0
   }
   while(level.3rd_person)
   {
      if ( level.3rd_person == 1 )
      {
         huddraw_alpha 21 0
         huddraw_virtualsize 21 1
         huddraw_alpha 21 .8
         huddraw_font 21 "verdana-12"
         huddraw_color 21 0 0 1
         huddraw_rect 21 320 -195 200 20

         $player stufftext ("set cg_3rd_person 1")
         $player stufftext ("cg_cameraverticaldisplacement -18")
         $player scale 0.87

         level.3rdperson = On
      }
      else if ( level.3rd_person == 0 )
      {
         huddraw_alpha 21 0
         huddraw_virtualsize 21 1
         huddraw_alpha 21 .8
         huddraw_font 21 "verdana-12"
         huddraw_color 21 0 0 1
         huddraw_rect 21 320 -195 200 20

         $player stufftext ("set cg_3rd_person 0")
         $player stufftext ("cg_cameraverticaldisplacement 18")
         $player scale 1.0

         level.3rdperson = Off
      }

      if (getcvar(3rd_person) == "1")
      {
         $player stufftext ("set cg_3rd_person 1")
         $player stufftext ("cg_cameraverticaldisplacement -18")
         $player scale 0.87

         level.3rdperson = On
      }

      if (getcvar(3rd_person) == "0")
      {
         $player stufftext ("set cg_3rd_person 0")
         $player stufftext ("cg_cameraverticaldisplacement 18")
         $player scale 1.0

         level.3rdperson = Off
      }

      wait 1
   }
end

 

snaky

  • Squatteur de forum
  • ****
  • Posts: 3332
    • http://profparty.forumpro.fr
3rd Person Sans les cheats !
« Reply #1 on: December 13, 2012, 11:29:41 AM »
Salut,

si le script se base sur la console du client (aka, la console de "$player"), alors il n'y aura pas moyen de faire sans activer "cheats 1".

Je suis un peu étonné de voir "$player stufftext" d'ailleurs, car en multijoueur, "$player" est un tableau, et non une seule entité ($player est le joueur i)...
Il se peut que le CoDe marche tant qu'il n'y a qu'un seul joueur, mais que si un deuxième arrive, le script coince...

"thereisnomonkey" est aussi à mettre à 0 pour désactiver tout cheat CoDe.

Si tu veux un 3rd person sans cheats, la seule solution consiste à utiliser une caméra, et non pas le "3rd_person" de la console.

mehdness

  • Apprenti poseur de brushs
  • Posts: 61
    • http://
3rd Person Sans les cheats !
« Reply #2 on: December 15, 2012, 01:31:16 PM »
Merci de ta reponse.

Premierement, le mod 3rd Person est bien sur un PK3, on ne l'active pas via la console, mais directement via un transfert FTP sur serveur et un redemarrage de celui ci.

Deuxiemement, je me suis renseigné aupres d'une team qui se servent du mod 3RD, et apparement, il faut modifier le gamex86.dll du serveur (pour serveur windows) ou bien le fgameded.so (pour linux). Le serveur que j'ai est un linux.

On m'a conseillé d'editer le fgameded.so via un utilitaire comme HEXEDIT , de facon a desactiver les cheats sur ce fichier.  Certes, j'ai regardé pour l'edit, lorsque je tape sur la barre de recherche du logiciel " cheats " on peut voir toutes les commandes relié au jeu.  Mais alors pour y desactivé .. apparement c pas compliqué mais c la merde.

 

snaky

  • Squatteur de forum
  • ****
  • Posts: 3332
    • http://profparty.forumpro.fr
3rd Person Sans les cheats !
« Reply #3 on: December 15, 2012, 06:56:32 PM »
Pour l'édition des dll, j'en sais rien, c'est pas du ressort d'un forum MoHAA mais d'un forum de dev.

Je ne parlais pas de l'activation du mod, mais de son fonctionnement: ce mode utilise la commande "stufftext", qui simule l'entrée d'une ligne dans la console chez les joueurs-clients.

Si tu pars sur un système comme celui-ci, tu n'arriveras jamais à sécuriser proprement le serveur pour empêcher toute forme de cheat, sauf en allant lourdement modifier les exécutables du jeu, ce qui n'est pas gagné (on tombe dans le domaine de rétro-ingénierie, ca devient assez velu assez vite).

Tu auras peut-être plus de faciliter en t'inspirant des scripts existants relatifs aux caméras et aux cinématiques. Il Existe, dans MoHAA, une entité "camera" (ou un nom assez proche) qui peut être rattachée à un joueur via un trigger_camerause (je crois, ca fait longtemps, je n'ai plus les noms en tete). Via ce système, la vue affichée chez le joueur n'est plus celle FPS, mais celle vue par cette caméra. Ensuite, il ne te reste plus qu'à coller la caméra au-dessus du modèle 3D du joueur, et le tour est joué.

Je crois que le mod freeze-tag (l'auteur en est mefy, il me semble) utilise ce système: tu pourras t'inspirer de ces CoDes pour faire apparaitre la caméra et la lier au joueur.

Dans l'idée, le CoDe ressemblerait à ceci (algorithmiquement parlant):

Code: [Select]
while (1) // en boucle
{
foreach ($player as $oneplayer) // pour chaque joueur sur le serveur
{
if (!entity_exists($oneplayer.camera)) // si l'entité n'existe pas
{
$oneplayer.camera = new Camera(); // on crée l'entité "Camera"
$oneplayer.camera.doUse $oneplayer.camera; // On active la caméra pour ce joueur
$oneplayer.camera glue $oneplayer; // Il faudra aussi attacher la caméra au joueur
// avec un décalage pour la placer derrière le joueur
}
}
waitframe
}

L'idée est donc de parcourir le tableau des joueurs, de faire apparaitre la camera si elle n'existe pas, de faire utiliser la caméra par le joueur, et de recommencer ce parcours régulièrement.

Il me semble qu'il faudra gérer le cas où un joueur quitte... Car sa caméra ne sera peut-être pas supprimée. C'est à tester.

Utiliser les scripts scr te seras, à mon avis, plus facile que d'éditer les DLL, et plus sûr car tu n'activeras plus les cheats sur le serveur.
« Last Edit: December 15, 2012, 06:57:58 PM by snaky »

Jed

  • Tailleur de maps (expérimenté)
  • Posts: 727
    • http://www.hudescharfe.com
3rd Person Sans les cheats !
« Reply #4 on: January 15, 2013, 08:43:36 PM »
On n'édite pas des dll, ce sont des librairies compilées... Et l’histoire de l'éditeur hexa laissez moi rire, il est impossible de s'en sortir comme ça. En revanche il serait en théorie possible de compiler sa propre version du gamex86.dll à partir des sources du moteur de Quake 3 distribuées gratuitement. Je dis "en théorie", car EA n'a pas rendu publique sa version modifiée du moteur et il serait illusoire de s'imaginer retrouver les modifs apportées avec du pif.

https://github.com/id-Software/Quake-III-Arena

Bon courage !
« Last Edit: January 15, 2013, 08:44:35 PM by Jed »

snaky

  • Squatteur de forum
  • ****
  • Posts: 3332
    • http://profparty.forumpro.fr
3rd Person Sans les cheats !
« Reply #5 on: January 17, 2013, 02:53:24 PM »
Quote
On n'édite pas des dll, ce sont des librairies compilées... Et l’histoire de l'éditeur hexa laissez moi rire, il est impossible de s'en sortir comme ça.
Impossible, non.
Extrèmement difficile, oui, et avec un ratio temps passé/gains très mauvais.

Mais ce n'est en aucun cas impossible.
Rien n'empêche de déporter le problème d'ailleurs, et de créer sa propre dll qui redirige tous les appels sur la dll d'origine, sauf les appels à certaines fonctions que l'on souhaite intercepter (je crois bien que certains ont déjà réalisé ce genre de by-pass, sur gamex86.dll, mais je ne sais plus qui ni quand ni pourquoi).

Jed

  • Tailleur de maps (expérimenté)
  • Posts: 727
    • http://www.hudescharfe.com
3rd Person Sans les cheats !
« Reply #6 on: January 17, 2013, 08:42:40 PM »
C'est strictement impossible, le CoDe hexa obtenu correspond à du CoDe compilé donc du langage machine. Et il est tout à fait impossible d'essayer de "décompiler" un programme écrit en C. Quant à surcharger des fonctions dans une autre librairie c'est possible, à condition de connaître la définition des fonctions d'origine et de connaître les directives de liaison au programme principal (MoHaa.exe). Si les gars de EA ont été fainéants  et ont gardé les directives du moteur q3 c'est peanuts, sinon c'est cuit. Tient ça me donne envie de bricoler un peu ça.
« Last Edit: January 17, 2013, 08:43:06 PM by Jed »

snaky

  • Squatteur de forum
  • ****
  • Posts: 3332
    • http://profparty.forumpro.fr
3rd Person Sans les cheats !
« Reply #7 on: January 20, 2013, 02:36:32 AM »
Ca va demander de connaitre la liste complète des instructions ASM, et d'avoir l'extrème patience de tout se farcir pour essayer de comprendre. C'est pas impossible, c'est juste très très complexe, et ca n'en vaut pas la chandelle.

Le langage machine est un langage structuré, qui répond à une norme stricte connue (ou en tous cas, définie, reste plus qu'à la lire pour la connaitre). A partir de là, on peut donc suivre la même prodédure que ladite machine pour comprendre le fonctionnement des algorithmes. Y'a "juste" quelques millions d'instructions entremêlées, c'est pas la mer à boire :lalala

Pour la connexion DLL-EXE, les noms des fonctions trainent, je crois, à la fin des DLL, ce qui donne déjà une piste majeure. Après, un peu de réflexion et des procédures de test peuvent venir à la rescousse (une fonction se nommant "loadTIKIFile" par exemple, prendra probablement une chaine de caractères en paramètre).
Ca fait beaucoup de combinaisons à tester, mais c'est une piste immédiate pour chercher les points d'entrées d'une DLL (il existe surement des softs qui font ca d'ailleurs).

Bref, "En Informatique, tout est possible... mais... ce n'est pas toujours évident!".

Jed

  • Tailleur de maps (expérimenté)
  • Posts: 727
    • http://www.hudescharfe.com
3rd Person Sans les cheats !
« Reply #8 on: January 20, 2013, 08:08:59 AM »
Pareil pour l'asm, c'est tout juste bon pour cracker un exécutable en "no cd" mais pour modifier une fonction plus complexe ce n'est plus humainement possible. Pour le reste, je te sens motivé ! B)