Besoin d'aide pour script .asi (gta)

Signaler
Messages postés
8
Date d'inscription
vendredi 12 juin 2009
Statut
Membre
Dernière intervention
15 juin 2009
-
Messages postés
1
Date d'inscription
samedi 21 avril 2007
Statut
Membre
Dernière intervention
27 avril 2010
-
Bonjour tlm,

Je débute complètement en coding, je n'ai commencé que depuis 15 jours, et j'apprend tous sur le tas. Donc quand on ne trouve pas le début d'un exemple sur lequel s'inspirer, c'est compliqué! xD

Je suis en train de créer un mod spectateur pour GTAIV, mais je suis bloqué pour quelque chose.

Je vous explique. Dans GTA, les joueurs sont défini par un entier qui va de 0 à 31.
Or, je ne sais pas comment switcher les joueurs un par un, et ce, en appuyant sur une seule touche.

Comme par exemple:
F7Next player 0 - 31
F6Previous player 31 -0
F8= Activate cheat function

Voici un c/c de la partie du code concerné:
[CODE]
void CustomFiberThread::RunScript()
{
// This is a fiber thread, so we use an loop to run the contents of this script.
// The thread will terminate when we return from this function.

while (IsThreadAlive())
{
if ((GetAsyncKeyState(VK_F7) & 1) != 0)
{
u32 playerId = 0; // Utilisateur à switcher, de 0 à 31.
u32 playerIndex = ConvertIntToPlayerIndex(playerId);
PrintStringWithLiteralStringNow("STRING", GetPlayerName(playerIndex), 1000, 1);
}
else if ((GetAsyncKeyState(VK_F8) & 1) != 0)
{
u32 playerId = 0;
u32 playerIndex = ConvertIntToPlayerIndex(playerId);
Ped ped;
f32 x,y,z;
GetPlayerChar(playerIndex, &ped);
GetCharCoordinates(ped, &x, &y, &z);
}
Wait(100);
}
}
[/CODE}

Quelqu'un pourrait il m'expliquer clairement comment je dois m'y prendre, s'il vous plait, en me donnant exemple.. Je suis un gros débutant et je galère depuis 2 jours avec ça.. xD

10 réponses

Messages postés
8
Date d'inscription
vendredi 12 juin 2009
Statut
Membre
Dernière intervention
15 juin 2009

Bonjour tlm,

Je débute complètement en coding, je n'ai commencé que depuis 15 jours, et j'apprend tous sur le tas. Donc quand on ne trouve pas le début d'un exemple sur lequel s'inspirer, c'est compliqué! xD

Je suis en train de créer un mod spectateur pour GTAIV, mais je suis bloqué pour quelque chose.

Je vous explique. Dans GTA, les joueurs sont défini par un entier qui va de 0 à 31.
Or, je ne sais pas comment switcher les joueurs un par un, et ce, en appuyant sur une seule touche.

Comme par exemple:
F7Next player 0 - 31
F6Previous player 31 -0
F8= Activate cheat function

Voici un c/c de la partie du code concerné:
void CustomFiberThread::RunScript()
{
// This is a fiber thread, so we use an loop to run the contents of this script.
// The thread will terminate when we return from this function.

while (IsThreadAlive())
{
if ((GetAsyncKeyState(VK_F7) & 1) != 0)
{
u32 playerId = 0;	// Utilisateur à switcher, de 0 à 31.
u32 playerIndex = ConvertIntToPlayerIndex(playerId);
PrintStringWithLiteralStringNow("STRING", GetPlayerName(playerIndex), 1000, 1);
}
else if ((GetAsyncKeyState(VK_F8) & 1) != 0)
{
u32 playerId = 0;
u32 playerIndex = ConvertIntToPlayerIndex(playerId);
Ped ped;
f32 x,y,z;
GetPlayerChar(playerIndex, &ped);
GetCharCoordinates(ped, &x, &y, &z);
}
Wait(100);
}
}


Quelqu'un pourrait il m'expliquer clairement comment je dois m'y prendre, s'il vous plait, je suis un gros débutant et je galère depuis 2 jours avec ça.. xD
Messages postés
8
Date d'inscription
vendredi 12 juin 2009
Statut
Membre
Dernière intervention
15 juin 2009

J'avais essayé de cette façon, en créant un compteur, mais ça ne fonctionne pas. Quand je le teste, c'est uniquement le nom de player 0 qui s'affiche à l'écran, et aucun incrémentation n'a lieu...

if ((GetAsyncKeyState(VK_F7) & 1) != 0) 
{ 
for(u32 playerId = 0; playerid<32; playerId++)
{
u32 playerId = 0; // Utilisateur à switcher, de 0 à 31. 
u32 playerIndex = ConvertIntToPlayerIndex(playerId); 
PrintStringWithLiteralStringNow("STRING", GetPlayerName(playerIndex), 1000, 1); 
}
}


Je ne vous demande pas de faire le truc à me place, mais juste de me dire si je vais dans la bonne directement ou si jme plante carrément.
Y-a t-il une méthode plus simple ?
Et t-il possible d'énumérer simplement les joueurs de 0 à 31, tout en pouvant les switcher à l'aide d'une seule touche ?

J'ai vraiment essayé plusieurs méthode, mais aucune fonctionne, c'est pour cette raison que j'ai besoin de votre aide.
Messages postés
8
Date d'inscription
vendredi 12 juin 2009
Statut
Membre
Dernière intervention
15 juin 2009

C'est impossible d'éditer ses messages sur ce forum ou quoi ?
Si c'est le cas c'est incroyable, j'ai jamais vu ça de ma vie.

J'ai fais une erreur dans mon précédant message, voilà le code que j'ai réalisé et qui ne s'incrémente pas:

 
if ((GetAsyncKeyState(VK_F7) & 1) != 0) 
{ 
for(u32 playerId = 0; playerid<32; playerId++) 
{ 
u32 playerIndex = ConvertIntToPlayerIndex(playerId); 
PrintStringWithLiteralStringNow("STRING", GetPlayerName(playerIndex), 1000, 1); 
} 
} 
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Jamais de boucle infinie, que soit sur lecture état du clavier ou nimporte quoi d'autre.
Fais un hook clavier.

ciao...
BruNews, MVP VC++
Messages postés
8
Date d'inscription
vendredi 12 juin 2009
Statut
Membre
Dernière intervention
15 juin 2009

Faire un hook clavier, d'après ce que j'ai pu voir, c'est pas de mon niveau, beaucoup trop compliqué pour moi.
Et ça me parait un peu énorme pour faire ce que je veux faire, non ?

Ya pas un moyen simple de faire un truc du genre:

if ((GetAsyncKeyState(VK_F7) & 1) != 0) première appuie sur la touche

u32 playerId = 0;
u32 playerIndex = ConvertIntToPlayerIndex(playerId);
PrintStringWithLiteralStringNow("STRING", GetPlayerName(playerIndex), 1000, 1);



if ((GetAsyncKeyState(VK_F7) & 1) != 0) second appuie sur la touche

u32 playerId = 1;
u32 playerIndex = ConvertIntToPlayerIndex(playerId);
PrintStringWithLiteralStringNow("STRING", GetPlayerName(playerIndex), 1000, 1);



if ((GetAsyncKeyState(VK_F7) & 1) != 0) 3ème appuie sur la touche

u32 playerId = 2;
u32 playerIndex = ConvertIntToPlayerIndex(playerId);
PrintStringWithLiteralStringNow("STRING", GetPlayerName(playerIndex), 1000, 1);


Etc... Et comme ça jusque playerId=31

Voilà, c'est juste ça dont j'ai besoin. Et tu me dis qu'il n'y a pas moyen de faire compter le nombre d'appuie sur une touche, sans passer par un hook clavier ?

Désolé mais je ne suis pas sur de comprendre. Comme jle disais, je suis débutant en tout type de language.
Messages postés
8
Date d'inscription
vendredi 12 juin 2009
Statut
Membre
Dernière intervention
15 juin 2009

Ah, ça y est j'ai compris. C'est bien un hook que je recherche tout compte fait.. xD
Tu as parfaitement compris ce que je recherchais.
Je fais essayé de faire ça.
Messages postés
8
Date d'inscription
vendredi 12 juin 2009
Statut
Membre
Dernière intervention
15 juin 2009

C'est possible de faire un hook sans dll ?
Car le script asi sur lequel je m'inspire, n'a pas de dll.. C'est un .asi seul.
Biensur, il n'est pas disponible en source.
Mais c'est exactement comme je le décrit, on appuie sur la même touche pour changer de player.
Connait tu stp un exemple qui correspond plus ou moins à ce que je recherche et que je pourrais adapter facilement, et l'inclure dans mon script ?
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Pas besoin de DLL sur hook clavier.

ciao...
BruNews, MVP VC++
Messages postés
8
Date d'inscription
vendredi 12 juin 2009
Statut
Membre
Dernière intervention
15 juin 2009

Bon tout compte fait, j'ai trouvé une autre solution. En énumérant les joueurs un par un, et par un succession de "if".
C'est complètement stupide mais ça fonctionne.
Le hook clavier ok, mais si je dois passer plusieurs jours voir plusieurs semaine à comprendre comment ça fonctionne avant de pouvoir en faire un.. Et tout ça juste pour pouvoir switcher des joueurs dans un jeux.. ça le ferait pas du tout.
Messages postés
1
Date d'inscription
samedi 21 avril 2007
Statut
Membre
Dernière intervention
27 avril 2010

Bonjour, je voudrais creer des scripts asi pour Gta IV !!! Mais je n'est pas les outils necessaires... et a vrai dire je ne sait meme pas quel outils me faut il !

Je precise que mes script seront compatible avec gta 4 1.0.6.0 ... il faut donc que mes outils soit aussi compatible avec cette version.... et les seule que j'ai trouver sont pour la version 1.0.4.0 !

si vous pouviez m'expliquer ce dont j'ai besoin... sa serait cool !! Merci D'avance....