Bonjour à tous!
Dans tout jeu de tir, il faut pouvoir dégainer l'arme que l'on veut, assez rapidement.
Il est prévu, d'origine, d'offrir 4-5 touches environ pour changer de "classe" d'arme (corps à corps, chimiques, armes à feu, explosifs et super-armes), ainsi qu'un menu de sélection immédiat de l'arme (choisir non pas d'utiliser la classe "explosifs", mais choisir d'utiliser un explosif précis).
Or, pour le moment, il y a un certain blocage de la part du client, et du coup, une incompréhension totale pour le serveur.
Ce qui pose problème, c'est que le même schéma de code sera utilisé pour activer le zoom, la lampe torche ou tout autre gadget de l'arme, et ce décalage client / serveur rend toute avancée impossible pour le moment.
Donc, jusqu'à maintenant, ca patauge plus qu'autre chose...
[Pour pousser plus loin]:
Le client peut envoyer 6 données différentes au serveurs, qu'on va appeler P, R, S, M, G, H, la 7e étant le blanc (on est limité entre 0 et 7, inclus, données).
Pour indiquer le début d'une séquence de données, le client envoie le paquet "P", via la commande "OpenSocket".
Le serveur reçoit toujours parfaitement cette donnée, et la traite bien comme étant le début d'un paquet de données.
Ensuite, le client envoie une suite de données composées de R, S, M ou G (4 données différentes). Chaque fois que le serveur reçoit une donnée R, S, M ou G, il vérifie si le Socket a été ouvert, et si oui, il enregistre la donnée.
Dans le cas du code "511", qui correspond à la prise en main du lanceur de V1, les données correspondantes sont "G, G, G, G, S" (un petit plug-in fait main permet de trouver rapidement la séquence de données correspondant à un numéro précise, et inversement).
Une fois la séquence de données envoyées, le client termine la connexion en envoyant la donnée H, via la commande "CloseSocket".
Le serveur peut alors savoir que la suite de commandes est terminée, et que le client désire clore la connexion et la valider: on peut calculer la valeur correspondante à la séquence de données, et en déduire alors ce que le joueur veut faire (ex: séquence "G, G, G, G, S" => Code numéro 511 => d'apres le fichier INI, il s'agit de dégainer le V1).
Or, il y a parfois soucis: le serveur ne reçoit pas correctement les données. Ainsi, desfois, la séquence suivante fonctionne:
- Citation :
- P, G, G, G, S, H
Le serveur reçoit bien P, le traite, et considère la séquence comme ouverte. Il recoit ensuite, dans l'ordre, G, G, G, G puis S, et les sauve correctement, puis il reçoit H, et clot alors la connexion pour traiter la liste de données.
Ce résultat, fructueux, est obtenu via la succession de commandes suivantes dans la console:
- Citation :
- OpenSocket;Socket3;Socket3;Socket3;Socket3;Socket0;CloseSocket
Et tout va bien.
Alors de quoi se plaint-on?
Il arrive parfois que le serveur interprète cette séquence de dommandes comme étant les données:
- Citation :
- P, G, G, G, R, M
ou encore, en renvoyant la suite de commandes, comme étant:
- Citation :
- P, M, G, R, M
mais on a aussi eu le droit, trois fois, à du:
- Citation :
- P, M, R, M
Envoyée une à une, manuellement, la suite de commandes Open, 3, 3, 3, 3, 1, Close pour le Socket fonctionne.
Mais envoyées à la suite automatiquement, il semble que le client fasse une sorte de "blocage", et s'embrouille les pinceaux ("il vaut mieux ne pas vous emmêler les pinceaux!" ^^) dans les données...
Code du fichier de traitement:
- Code:
-
state OPEN_SOCKET
{
entrycommands
{
exec Game/TorsoStateInfo.dll "ItemCMD, Going in"
exec Game/ItemCmd.dll INITIALIZE
activatenewweapon
}
states
{
SOCKET_MAIN : +NEW_SOCKET_DATA
}
}
state SOCKET_MAIN
{
entrycommands
{
deactivateweapon mainhand
}
states
{
SOCKET_CLOSE : IS_NEW_SOCKET_DATA "H"
SOCKET_DATA_M : IS_NEW_SOCKET_DATA "M"
SOCKET_DATA_S : IS_NEW_SOCKET_DATA "S"
SOCKET_DATA_R : IS_NEW_SOCKET_DATA "R"
SOCKET_DATA_G : IS_NEW_SOCKET_DATA "G"
SOCKET_ERROR : default
}
}
state SOCKET_DATA_M
{
entrycommands
{
exec Game/TorsoStateInfo.dll "Socket Data M"
exec Game/ItemCmd.dll 1 M
activatenewweapon
}
states
{
SOCKET_MAIN : default
}
}
state SOCKET_DATA_R
{
entrycommands
{
exec Game/TorsoStateInfo.dll "Socket Data R"
exec Game/ItemCmd.dll 1 R
activatenewweapon
}
states
{
SOCKET_MAIN : default
}
}
state SOCKET_DATA_S
{
entrycommands
{
exec Game/TorsoStateInfo.dll "Socket Data S"
exec Game/ItemCmd.dll 1 S
activatenewweapon
}
states
{
SOCKET_MAIN : default
}
}
state SOCKET_DATA_G
{
entrycommands
{
exec Game/TorsoStateInfo.dll "Socket Data G"
exec Game/ItemCmd.dll 1 G
activatenewweapon
}
states
{
SOCKET_MAIN : default
}
}