• 04 Juin 2026, 16:23:49


Auteur Sujet: [Topic Général] Aide de Chneubeul - Lire en plusieurs fois sscanf  (Lu 9165 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - GetPlayerCameraFrontVector
« Réponse #30 le: 27 Novembre 2010, 20:23:51 »
Ce n'est pas une commande, mais bien un code placé dans une fonction qui va être checké en boucle.. :)
Je peut simplifier, j'y pense. En permettant au joueur de se mettre en mod combat ou pas. :)

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - GetPlayerCameraFrontVector
« Réponse #31 le: 27 Novembre 2010, 20:28:15 »
Salut,

les calculs fait ici sont probablement beaucoup plus rapides que l'appel des fonctions en elles-mêmes. Le volume de calcul est très restreint, d'ailleurs tu pourrais (même devrais) retiré les fonction floatmul et simplement utiliser * .

Explique ta véritable application et on pourra t'aider d'avantage. Toutefois, je dirais que tu ne rencontrera pas de problèmes niveau calcul. Un streamer comporte beaucoup, beaucoup plus de calcul et pourtant ça fonctionne.

++Sim++





Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - GetPlayerCameraFrontVector
« Réponse #32 le: 27 Novembre 2010, 20:31:26 »
Voila, donc finalement, je vais rajouter la possibilité du mode combat, ça éviterais le PK  :happy
Donc, enfaite si un joueur est un mod combat, il si il regarde un autre joueur qui lui aussi l'est, une flèche au dessus de celui ci sera afficher, ce qui va montrer sa cible. Si le joueur qui le vise lance un sort, alors le sort sera contre le joueur ciblé.

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - GetPlayerCameraFrontVector
« Réponse #33 le: 27 Novembre 2010, 22:01:24 »
Salut,

j'aime bien l'idée, toutefois faudra faire attention, faire le test assez rapidement mais ne pas permettre que ça change tous les 200 ms, sinon on risque d'avoir de la difficulté.

Ce qu'il te faudrait faire, c'est établir des points dans la direction qu'il regarde et avec des sphères (de rayon qui augmente avec la distance) chercher les joueurs dans ces sphères, en s'assurant qu'ils sont en mode combat. Le mieux ce serait de trouver celui qui se rapproche le plus de la ligne où le joueur regarde. Ce qui est bien, c'est que si on veut on peut appliquer ici des maths moyennement avancés, avec la distance entre un point et une droite en 3 dimensions. Bien sur, ce n'est pas essentiel.

En sauvegardant simplement le joueur visé dans une variable, tu pourras rendre ta commande (ou autre) de sortilège très simple.
D'ailleurs, de cette façon on peut rendre certaines armes plus efficace, par exemple, le sniper (en utilisant de petites sphères).

simple conseil: la distance entre les sphères ne devrait pas dépasser leurs rayon.

++Sim++





Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - GetPlayerCameraFrontVector
« Réponse #34 le: 28 Novembre 2010, 08:44:35 »
Salut :)

Au pire ce que je peut faire c'est utiliser, GetXYFront qui utilise une sorte de produit scalaire je crois. ( sin et cos) puis checker devant le joueur à la distance ou le joueur regarde voir si il y a un joueur en mode combat.
Je vais faire un petite brouillon pour voir, et tester ça.

PS: une fois j'ai vu un petit système lorsque qu'on activé le scope avec le sniper ou pouvoir la distance de tir, si on se pointer sur une victime, je l'ai tester, c'était très précis, il faut que je le retrouve et voir comme ceci fonctionne, voir le système que le codeur à utiliser et  comparer avec nos théorie.

A toute à l'heure,
Sam.  :dling


Edit : Voila donc j'ai réaliser le script. Je résume :
Ce système permet de cibler un joueur pour pouvoir lui lancer des sorts sans devoir taper l'id ou quoi que ce soit.
Quand le joueur va se mettre en mode combat et si il rencontre une cible elle aussi en mode combat, une flêche va s'afficher au dessus de la cible, l'id de la cible va alors s'enregistrer dans une variable, et si le joueur veut la garder alors il doit appuyer sur une touche.

Pastebin GTAOnline
« Modifié: 28 Novembre 2010, 18:04:15 par chneubeul »

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - GetPlayerCameraFrontVector
« Réponse #35 le: 29 Novembre 2010, 19:25:40 »
Salut,

ça me parait plutôt bien comme code, seulement tu as mis un return 1 dans ta boucle, dans le cas où tu test le joueur en question. Il faudrait remplacer ce return par un continue sinon tu ne traiteras pas les cas où l'ID est plus grand que celui du joueur.

Si tu veut être plus précis, je te recommande de faire varié le rayon de ta sphère acceptée avec la distance, je t'explique en code:

new Float:Dist = 25.0;//supposons que ceci est la distance entre les deux joueurs
new Float:rayon = 0.02;//le rapport rayon/distance est de 0.02, donc un angle de 1.15° à côté du joueur est accepté, tu peut mettre plus
rayon *= Dist;//ici on ajuste le rayon à la distance
if(IsPlayerInRangeOfPoint(toplayer, rayon, X, Y, Z))
{
    //il est dans la bonne zone, on le cible.
}

par contre il y a un truc que je ne comprend pas à quoi ça sert, le x, y, z (dans ton code).

Fais aussi attention, GetXYinFrontOf ... fonctionne avec un angle, ici tu as le vecteur directeur de la caméra (à vérifier)
il te suffit de faire:

new Float:X, Float:Y, Float:Z;
new Float:X2, Float:Y2, Float:Z2;
new Float:Dist;
//on récupère les positions du joueur:
GetPlayerPos(playerid, X, Y, Z);
foreach(toplayer)
{
//on récupère les positions du second joueur:
GetPlayerPos(toplayer, X2,Y2, Z2);
X2 -= X;
Y2 -= Y;
Z2 -= Z;
Dist = floatsqroot(X2 * X2 + Y2 * Y2 + Z2 * Z2);
if(Dist > 20.0)continue;//ça c'est à voir...
X2 += X - CamX * Dist;//on soustrait car je le fait à l'envers (permet de sauver 1 groupe de variable)
Y2 += Y - CamY * Dist;
Z2 += Z - CamZ * Dist;
Dist *= 0.02;//je calcule mon rayon comme précédemment.
if(PointToPoint( X, Y, Z, X2, Y2, Z2, Dist))//fonction à définir avec un define, je te le ferai si tu veut
{
        ....
}
...

vois avec ça, je doit aller à mon cours, au pire je vais éditer pour terminer.

PS. codé sur le forum alors peut contenir de nombreuses fautes.

++Sim++






Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - GetPlayerCameraFrontVector
« Réponse #36 le: 29 Novembre 2010, 19:44:10 »
Salut :)
Merci d'avoir répondu aussi précisément.
Pour te répondre x, y, z sert à calculer la position ou le joueur regarde que je complète avec la position devant le joueur. ^^

J'ai remplacer mon code par le tiens, ça simplifie énormément x')
Je cherche pour faire le define pointtopoint là :)

Par contre CamX, CamY et CamZ comment on le définis ?


edit : j'ai trouvé pointtopoint, que tu as créé :D

#define PointToPoint(%0,%1,%2,%3,%4,%5,%6) ((%0 - %3) * (%0 - %3) + (%1 - %4) * (%1 - %4) + (%2 - %5) * (%2 - %5) <= (%6 * %6))
« Modifié: 29 Novembre 2010, 20:26:14 par chneubeul »

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - GetPlayerCameraFrontVector
« Réponse #37 le: 29 Novembre 2010, 23:46:31 »
Salut,

CamX, CamY, CamZ est le vecteur directeur de la caméra du joueur, à récupérer avec GetPlayerCameraFrontVector.

Comme j'ai dit à la fin de mon message précédent, je n'ai pas testé ce code, il se peut donc qu'il ne soit pas tout à fait fonctionnel, il y a peut-être de petits ajustement à faire, mais l'idée principale est là.

++Sim++





Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - GetPlayerCameraFrontVector
« Réponse #38 le: 01 Décembre 2010, 14:08:14 »
Salut :)

Merci à toi Sim, j'ai tout modifier et compiler aucune erreur de syntaxe etc.. reste à savoir si ça fonctionne, je ne pourrais pas tester avant ce soir.. :(

A+, Sam.

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - GetPlayerCameraFrontVector
« Réponse #39 le: 02 Décembre 2010, 21:19:13 »
Soir', je coupe court à l'autre sujet, car je ne peut pas le tester me faut un gens qui est le temps ^^ ( je reprendrais après le problème qui va suivre)

Voila mon autres problèmes :

J'ai installer le système djson une upgrade de dini, mais apparemment l'écriture de string, merdouille un peu.
Voila ce qui est marqué sur le topic officiel :

Citer
Known Issues
- Writing strings with unescaped " does not work! You have to replace " with \" first! This will be fixed in future versions.

A ce que j'ai compris, j'ai fait ça :

djSet(ini, \"Key", password);
[code]

Mais ça ne marche pas.. voila ce qui est enregistrée :

"Key":""

J'ai même essayer de formater le password, j'ai bidouiller un tas de trucs, et rien ne marche..

Merci de votre aide.
[/code]

Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Ecrire un string avec DjSon
« Réponse #40 le: 02 Décembre 2010, 21:56:41 »
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Ecrire un string avec DjSon
« Réponse #41 le: 03 Décembre 2010, 18:05:35 »
Non, le y_ini je l'ai tester, il ne marchais pas, peut être ça venez du code que j'ai produit, mais en tout cas si faut plus se casser la tête c'pas la peine, autant passer direct au SQL et pas se faire chier ^^
Sinon moi j'ai :

http://forum.sa-mp.com/showthread.php?t=48439

A+, Sam.


Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Ecrire un string avec DjSon
« Réponse #42 le: 03 Décembre 2010, 18:12:43 »
je pense que c'est djSetInt et non djSet
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Ecrire un string avec DjSon
« Réponse #43 le: 03 Décembre 2010, 18:48:45 »
integer = nombre entier, le mdp peut contenir des chiffres comme des lettres et on doit stocker le tout sous string.

Double post
Bonsoir, j'ai beaucoup réfléchis, et le système de fichier et pas terrible finalement, comme j'aimerais développer un mode entièrement dynamique. Pour cela, il me faudrait passer au SQL ( site sur un autre dédié) mais quels plugins me conseilleriez vous ? Il y en a pleins ^^
En cas de problème, ou si je plante, j'ai un amis qui  si j'le chope sur TS, peut m'aider. Donc pour l'utilisation et les conseilles de sécurité, il pourra m'éclairer.

Merci de votre aide,
Sam.
« Modifié: 04 Décembre 2010, 16:19:30 par chneubeul »

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : [Topic Général] Aide de Chneubeul - Plugin SQL ?
« Réponse #44 le: 04 Décembre 2010, 17:01:52 »
J'utilise celui ci et cela marche à la perfection !

http://forum.sa-mp.com/showthread.php?t=56564

Et voici un code (par moi) qui permet juste de vérifié si un compte existe.


Code: (Pawn) [Sélectionner]
#include <a_samp>
#include <a_mysql>


new Handle;


main(){}


public OnGameModeInit()
{
new rows;

if(mysql_connect("localhost" , "root" , "samp", "" )) {
mysql_debug(1);
print("[MYSQL]: La connexion à `localhost` est établie !");
}
else {
   print("[MYSQL][ERREUR]: La connexion à `localhost` à échoué !");
}

mysql_query("SELECT * FROM `users` WHERE `user_name` = 'player';");
    
mysql_store_result();
rows = mysql_num_rows();
mysql_free_result();

printf("%d", rows);
// rows = 1  -> Le compte existe
// rows = 0  -> La compte n'existe pas !
// rows = -1 -> Erreur !

return 1;
}

public OnGameModeExit()
{
mysql_close(Handle);

return 1;
}
« Modifié: 04 Décembre 2010, 17:41:28 par Xartrick »