Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=a8d012522b2cdc28bd840138aa645cb6Médailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

à la recherche d'un desync....
Aller à la page Précédente  1, 2
 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2009
Sujets: 49

Médailles: 2 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1) Ayane (Quantité : 1)

MessagePosté le: 18/06/19 07:49    Sujet du message: Citer

Pour capturer les paquets il y a déjà des outils tel que Ghost, le bot qui héberge des parties, il joue le rôle de serveur et a la possibilité de mettre dans le journal tous les échanges réseaux, tu peux donc isoler sur quel échange réseau cela cause problème.

https://github.com/w3gh/ghostplusplus

Secret:

ctrl+c ctrl+v from forum valhallalegends
Some info is inaccurate or wrong, but it's a good starting point for understanding
game packets.
Most info is about game mechanics packets, without chat and incomplete actions
info (not done probably to don't make job for mhs too easy)
For more descriptions see code grouped in solution filter "packetcapture".


// Packets Listing C/C++:

#pragma pack(1)

// its start part of all packets in Warcraft III Game Sysyem
struct sW3GS_PACKETINFO {
BYTE sig; // always 0xF7
BYTE psig; // packet signature (example: W3GS_SEARCHGAME)
WORD size; // packet size
BYTE pktData[1]; // packet data
};

// Local Network

// this is part of many packets
struct sW3GS_GAME {
DWORD gamesig; // game signature PX3W for example
DWORD crcount; // creation counter
};
struct sW3GS_GAMEP {
sW3GS_GAME data;
DWORD pcount; // players in game
};

#define W3GS_SEARCHGAME 0x2F // Sends to all local network to detect game
struct sW3GS_SEARCHGAME {
sW3GS_GAMEP data; // data.pcount always zero
};

#define W3GS_GAMEINFO 0x30 // Answer from host about game
struct sW3GS_GAMEINFO {
sW3GS_GAMEP data;
w_char* //..... game name, host name and other
// dont remember ... because not used it
};

#define W3GS_CREATEGAME 0x31 // Host spams local network about created game
struct sW3GS_CREATEGAME {
sW3GS_GAMEP data;
};

#define W3GS_REFRESHGAME 0x32 // Host spams local network about game (happens every 5 seconds or refresh slots)
struct sW3GS_REFRESHGAME {
sW3GS_GAMEP data;
DWORD slots; // total slots in game
};

#define W3GS_DECREATEGAME 0x33 // Host decreates game (spam local network)
struct sW3GS_DECREATEGAME {
sW3GS_GAME data;
};

// In game (after start and loadding)

#define W3GS_CLIENTSYNC 0x27 // Clients Sync packets (only if packet size = 9)

#define W3GS_CLIENTACTREQ 0x26 // Client requests action
struct sW3GS_CLIENTACTREQ {
SHORT sync; // dont know - maby sync value
SHORT crc16; // possible crc16
BYTE subPktData[1]; // sub packet data - consist game command
};

#define W3GS_HOSTSYNC 0x0C // Host Sync packets or/with actions (only sync when packet size = 6)
#define W3GS_HOSTACT 0x0C
struct sW3GS_HOSTACT {
SHORT sync; // 0x6D | 0x6E | 0x7D - possible sync
SHORT crc16; // possible crc16 value
BYTE playerNum; // 1 (for host)
SHORT subPktSize; // sub packet size = packet size - 11
BYTE subPktData[1]; // sub packet data - consist game command
};

// commands description and structures (not all)

// structure of any object in game (for example: Town Hall or Peon)
struct sW3GS_OBJECT {
BYTE id1; // first part of object ID
SHORT race; // object race id
BYTE zero1; // always zero
BYTE id2; // second part of object ID
SHORT race_dup; // same as race (duplicate)
BYTE zero2; // always zero
};
// so total object ID will be RACE:ID
// 0xFFFFFFFF 0xFFFFFFFF for unknow objects (all 0xFF) - it means no target or ground point

// commands list (not all)
#define W3GS_CMD_ACTION 0x10 // stop / hold position / auto cast on off / buy item ... and more
#define W3GS_CMD_CREATE 0x11 // build structure
#define W3GS_CMD_MOVE 0x12 // move unit
#define W3GS_CMD_DROPITEM 0x13 // drop item from slot
#define W3GS_CMD_SELECT 0x16 // change selection add or remove
#define W3GS_CMD_VIEW 0x1A // change view of unit or structure (TAB button changes view)
#define W3GS_CMD_BLINK 0x68 // blink on the map
#define W3GS_CMD_CANCEL 0x1E // cancel upgrade or something

// structure of any command
struct sW3GS_CMD_ANY {
BYTE cmd; // Command (example: W3GS_CMD_ACTION)
BYTE opCode; // Command operation code - each command have self unique operation codes
BYTE data[1]; // consist command data
};

// operation codes for some commands
#define W3GS_CMD_SELECT_ADD 0x01 // Add selection
#define W3GS_CMD_SELECT_REM 0x02 // Remove selection
#define W3GS_CMD_VIEW_OP 0x19 // Change view group

struct sW3GS_CMD_SELECT {
BYTE cmd; // Command W3GS_CMD_SELECT
BYTE opCode; // Command operation code - each command have self unique operation codes
SHORT count; // count of object to operate
sW3GS_OBJECT objects[1]; // one or more objects
};

struct sW3GS_CMD_VIEW {
BYTE cmd; // Command W3GS_CMD_VIEW
BYTE opCode; // Command operation code - each command have self unique operation codes
DWORD type; // string type of object
sW3GS_OBJECT object; // first object in view group
};

struct sW3GS_CMD_BLINK {
BYTE cmd; // Command W3GS_CMD_BLINK
FLOAT x; // x y coordinates on the map
FLOAT y;
DWORD color; // possibly blink color
};

// modes and types of move for structure sW3GS_CMD_MOVE (any mode can be combined together)
#define W3GS_CMD_MOVE_MODE_QUED 0x01 // happens when shifting targets
#define W3GS_CMD_MOVE_MODE_INTO 0x02 // dont remember inside what?
#define W3GS_CMD_MOVE_MODE_CREATE 0x04 // create what? ...
#define W3GS_CMD_MOVE_MODE_GRP 0x08 // action on all group (not used for single units)
#define W3GS_CMD_MOVE_MODE_SAVEGRP 0x10 // save group form
#define W3GS_CMD_MOVE_MODE_NOMOVE 0x40 // dont move, target only to coordinates
#define W3GS_CMD_MOVE_TYPE_MOVE 0x03 // move units to x y
#define W3GS_CMD_MOVE_TYPE_ATTACK 0x0F // attack target at x y (if target hides this will be coodrinates to move)
#define W3GS_CMD_MOVE_TYPE_PATROL 0x16 // patrol to point x y

struct sW3GS_CMD_MOVE {
BYTE cmd; // Command W3GS_CMD_MOVE
BYTE mode; // move mode
BYTE zero; // always zero?
SHORT type; // move type
SHORT unknow; // always 0x000D?
sW3GS_OBJECT objUnknow; // always 0xFFFFFFFF FFFFFFFF
FLOAT x; // x y coordinates on the map
FLOAT y;
sW3GS_OBJECT target; // target object
};

struct sW3GS_CMD_CANCEL {
BYTE cmd; // Command W3GS_CMD_CANCEL
BYTE zero;
DWORD type; // string type of object
};

#define W3GS_CMD_DROPITEM_TYPE_ITEM 0x44 // object type to drop

struct sW3GS_CMD_DROPITEM {
BYTE cmd; // Command W3GS_CMD_CANCEL
SHORT type; // W3GS_CMD_DROPINTM_TYPE_ITEM
BYTE slot; // from 0x21 to 0x27
BYTE zero;
BYTE unknow; // always 0x000D?
sW3GS_OBJECT objUnknow; // always 0xFFFFFFFF FFFFFFFF?
FLOAT x;
FLOAT y;
sW3GS_OBJECT target; // target getting item or 0xFFFFFFFF FFFFFFFF for ground point (if target hides from view then ground point)
sW3GS_OBJECT item; // item object to operate
};

#define W3GS_CMD_CREATE_MODE_BUILD 0x04

struct sW3GS_CMD_CREATE {
BYTE cmd; // Command W3GS_CMD_CREATE
SHORT mode; // W3GS_CMD_CREATE_MODE_BUILD
DWORD type; // string object type
sW3GS_OBJECT objUnknow; // always 0xFFFFFFFF FFFFFFFF?
FLOAT x; // x y location to build/create
FLOAT y;
};

#define W3GS_CMD_ACTION_MODE_BATTLE 0x0000 // stop or hold position
#define W3GS_CMD_ACTION_MODE_CAST 0x0102 // autocast on off
#define W3GS_CMD_ACTION_MODE_DO 0x0040 // build / cancel build / buy item / upgrade ability
#define W3GS_CMD_ACTION_MODE_RESEARCH 0x0046 // upgrade building / train unit

struct sW3GS_CMD_ACTION {
BYTE cmd; // Command W3GS_CMD_ACTION
SHORT mode; // W3GS_CMD_CREATE_MODE_BUILD
DWORD type; // string object type or options (depends on command) object type for train unit or upgrade
sW3GS_OBJECT objUnknow; // always 0xFFFFFFFF FFFFFFFF?
};

// end of command list

#define W3GS_MAPCHECK 0x3D // check map size and path
struct sW3GS_MAPCHECK {
DWORD unknow; // dont remember
char mapPath[1]; // null terminated path
DWORD fileSize; // size of file (don use this pointer it must be calculated)
};

#define W3GS_MAPSIZE 0x42 // map size downloaded or have
struct sW3GS_MAPSIZE {
BYTE unknow[5]; // dont remember
DWORD fileSize; // got size of map file (you can block download if fileSize not equal fileSize in map check structure)
};

#define W3GS_STARTDOWNLOAD 0x3F // host or any other client sends this to prepare other client for download map

#define W3GS_MAPPART 0x43 // Part of map file
struct sW3GS_MAPPART {
BYTE unknow[6]; // dont remember
DWORD filePos; // block position in file (blockSize = 1442, doneSize = blockSize + filePos)
BYTE data[1442]; // block data
};

#define W3GS_MAPPARTOK 0x44 // Part of map success downloaded (client sends this)
struct sW3GS_MAPPARTOK {
BYTE unknow[6];
DWORD filePos;
};

#define W3GS_REQJOIN 0x1E // Request join game
struct sW3GS_REQJOIN {
BYTE unknow1[9]; // dont remember
SHORT gamePort; // player game port
DWORD playCounter; // count of game player joined
char playerName; // null terminated string
SHORT unknow2;
sockaddr_in internal; // internal player IP
};

#define W3GS_HOSTECHOREQ 0x01 // Host request echo from client (every 30 seconds)
#define W3GS_HOSTECHORES 0x46 // Host response echo from client
struct sW3GS_ECHO {
DWORD tickCount; // value from GetTickCount(); so ping = (GetTickCount()-tickCount)/2; for lan it can be 0
};

#define W3GS_CLIENTECHOREQ 0x35 // Client request echo from other client (every 10 seconds)
#define W3GS_CLIENTECHORES 0x36 // Client response echo from other client

// if you smart you can get ping to host simply

// most hard part is understand how slot system works when player joins game
#define W3GS_SLOTINFOJOIN 0x04 // Host sends this packet to say client all slots status and where he is joining
#define W3GS_SLOTINFO 0x09 // Host sends this packet to say client all slots status only
// check of this packets should be combined togetger in one pass
// better show part of my prog and 3 structures of packet, playerPos its player slot, playerNum its player unique number (0 for host)
/*
struct gameSlot {
unsigned char playerNumber; // 0 - if not human
unsigned char download; // 0x64 - 100%, 0xFF for not humans
unsigned char slotStatus; // 0 - open, 1 - closed, 2 - controlled
unsigned char controller; // 1 - computer, 0 - human or opened or closed
unsigned char clan; // Clan Number-1
unsigned char color; // Color from 0 to 11 // 12 - No Color for free slots
unsigned char team; // Team Number
unsigned char controllerType; // 0 - easy comp, 2 - hard comp, 1 - human or normal comp
unsigned char handicap; // Handicap from 0 to 0x64=100
};
struct gameSlotsBegin {
unsigned short size;
unsigned char slotCount;
gameSlot slot[1];
};
struct gameSlotsEnd {
DWORD hostTickCount;
unsigned char gameType;
unsigned char slotCount;
unsigned char addition[1];
};
struct gameSlotsAddition {
unsigned char playerNum; // Number of player (UID)
sockaddr_in addr; // Player Address
};
*/
/* case 0x04:
case 0x09: {
if (gameState < 2) {
if ((dirin == true) && (pkt->type == 0x04)) {
startPingHost(si);
memset(&slots,0,sizeof(slots));
}
gameSlotsBegin *gsb = (gameSlotsBegin*)(pkt->data);
gameSlotsEnd *gse = NULL;
gameSlotsAddition *gsa = NULL;
if (gsb->size == 0) {
slots.slotCount = 0;
if (pkt->type == 0x04) gsa = (gameSlotsAddition*)&(gsb->slotCount);
} else {
slots.slotCount = gsb->slotCount;
if (slots.slotCount <= 12) {
memcpy(slots.slot,gsb->slot,sizeof(gameSlot)*slots.slotCount);
for (int i = 0; i < 12; i++) { slots.map[i] = -1; }
for (int i = 0; i < slots.slotCount; i++) {
int pn = (int)(slots.slot[i].playerNumber)-1;
if (pn >= 0) slots.map[pn] = i;
}
}
gse = (gameSlotsEnd*)((DWORD)gsb->slot + (gsb->slotCount*sizeof(gameSlot)));
if (pkt->type == 0x04) gsa = (gameSlotsAddition*)(gse->addition);
}
if (gsa) {
int playerPos = gsa->playerNum - 1;;
if ((playerPos >= 0) && (playerPos < 12)) {
// Inserting Player Info
slots.playCounter[playerPos] = si->playCounter;
strcpy(slots.playerNames[playerPos],si->playerName);
slots.sock[playerPos] = si->s;
si->playerPos = playerPos;
si->player = true;
if (dirin == true) {
slots.intAddr[playerPos] = si->internal;
slots.extAddr[playerPos] = si->internal;
slots.ping[playerPos] = bnetPing;
slots.myNum = playerPos;
strcpy(slots.from[playerPos],"--");
} else {
slots.intAddr[playerPos] = si->internal;
slots.extAddr[playerPos] = si->remote;
slots.ping[playerPos] = -1;
memset(slots.from[playerPos],0,2);
}
}
}
*/

#define W3GS_PLAYERINFO 0x06 // player name and number
struct sW3GS_PLAYERINFO {
DWORD playCounter;
BYTE playerNum;
char playerName[1]; // null terminated string
SHORT unknow;
sockaddr_in ext; // external IP (not for host, host always zero)
sockaddr_in int; // internal IP (not for host, host always zero)
};

// f737 1200 02000000 00000000 06 ff 5e000000
#define W3GS_CLIENTINFO 0x37 // client send to other client info about self when connected
struct sW3GS_CLIENTINFO {
DWORD playCounter;
DWORD zero;
BYTE playerNum;
BYTE unknow[5]; // first FF posibly status of player
};

#define W3GS_LEAVEREQ 0x21 // client requests leave
struct sW3GS_LEAVEREQ {
BYTE playerNum;
BYTE zero[3];
};
#define W3GS_LEAVERES 0x1B // host response (you can leave) after this connection terminated

#define W3GS_LEAVER 0x07 // host spams all clients about leaver
// only socket hook can detect is it Disconnect or Leaving of player
struct sW3GS_LEAVER {
BYTE playerNum;
};

#define W3GS_ 0x34 // messages from other players or change positions
#define W3GS_ 0x28
#define W3GS_ 0x0F

// im tired explaining ^^ (3 hours doing this)

#define W3GS_START 0x0A // Start game
#define W3GS_LOADDING 0x0B // Start loadding (after this you cannot leave game)
#define W3GS_CLIENTRDY 0x08 // Host spams to all that Player loadded and ready except loadded player
#define W3GS_READY 0x23 // Clients tells to host that they are ready

// i think its enough for me now
// ill complete it late and hope you help me
// sry for my bad english

// please dont use it for cheating
// posible cheats ... detect player destination ... and other tricks ...
// all information was got by me analysing packets long long time

Redone from post http://forum.valhallalegends.com/index.php?topic=14970.0

IPs of two computers that i used for testing and grabbing packets
192.168.0.1 - Host
192.168.0.3 - Client


Code:
1. LAN Game Search/Create/Decreate
2. Join Game
3. Map Check/Download

=====================================================
= 1. LAN Game Search/Create/Decreate =
=====================================================

Lookup LAN Game
W3GS_SEARCHGAME 0x2F
OUT 255.255.255.255:06112 LEN:16
· / · · P X 3 W · · · · · · · ·
f7 2f 1000 50583357 14000000 00000000
(BYTE) f7 |W3GS Signature
(BYTE) 2f |Packet Signature
(WORD) 1000 |Packet Size
(DWORD) 50583357 |Game Signature
(DWORD) 14000000 |Always 0x14? Maby its game version
(DWORD) 00000000 |Zero

*****************************************************

Create LAN Game
W3GS_CREATEGAME 0x31
OUT 255.255.255.255:06112 LEN:16
· 1 · · P X 3 W · · · · · · · ·
f7 31 1000 50583357 14000000 03000000
(BYTE) f7 |W3GS Signature
(BYTE) 31 |Packet Signature
(WORD) 1000 |Packet Size
(DWORD) 50583357 |Game Signature
(DWORD) 14000000 |Always 0x14? Maby its game version
(DWORD) 03000000 |Creation Counter

*****************************************************

Refresh LAN Game (every 5 seconds or slot change)
W3GS_REFRESHGAME 0x32
OUT 255.255.255.255:06112 LEN:16
· 2 · · · · · · · · · · · · · ·
f7 32 1000 03000000 01000000 04000000
(BYTE) f7 |W3GS Signature
(BYTE) 32 |Packet Signature
(WORD) 1000 |Packet Size
(DWORD) 03000000 |Creation Counter
(DWORD) 01000000 |Client players in game (host counted)
(DWORD) 04000000 |Total client slots (do not counts computers or closed slots)

*****************************************************

Decreates LAN Game (happens when decrates game or game starts loadding)
W3GS_DECREATEGAME 0x33
OUT 255.255.255.255:06112 LEN:8
· 3 · · · · · ·
f7 33 0800 02000000
(BYTE) f7 |W3GS Signature
(BYTE) 33 |Packet Signature
(WORD) 0800 |Packet Size
(DWORD) 02000000 |Creation Counter

*****************************************************

Response LAN Game Info (response on client game search W3GS_SEARCHGAME)
W3GS_GAMEINFO 0x30
OUT 192.168.000.003:06112 LEN:117
· 0 u · P X 3 W · · · · · · · · · V · · · · · · · · · · ( F o r . R e s t ) · · · · I · · ·
f7 30 7500 50583357 14000000 01000000 e4569f00d098d0b3d180d0b02028466f722e526573742900 00 01034907 0101
} · · } · · · · C M · a q s ] ) 5 ) · M o s u U e m · q m e / w 3 m · · G o s / S e · s u · · ·
7d01 997d01a3df1d434d 8b6171735d293529 cd4d6f737555656d e9716d652f77336d 8901476f732f5365 037375 010100
· · · · · · · · · · · · · · · · · · · · · ·
04000000 09000000 01000000 04000000 00000000 e017
(BYTE) f7 |W3GS Signature
(BYTE) 30 |Packet Signature
(WORD) 0800 |Packet Size
(DWORD) 50583357 |Game Signature
(DWORD) 14000000 |Always 0x14? Maby its game version
(DWORD) 01000000 |Creation Counter
(char[]) e4569f00d098d0b3d180d0b02028466f722e526573742900
|Game Name (UTF-8 Coded) null terminated string
(BYTE) 00 |Zero
----Coded Part of Packet----
(char[]) 0103490701017d01 |Coded data
997d01a3df1d434d
8b6171735d293529
cd4d6f737555656d
e9716d652f77336d
8901476f732f5365
037375
(char[3])010100 |End tag of coded data
|last Zero is not Coded - it used only for detect end of Coded data
|Decode is simple: all Coded data splited by 8 bytes blocks
|First byte of each block is first bits of 7 bytes data bit0 always 1
|Bit1 represents bit0 of byte1, bit2 represents bit0 of byte2 ...
|Left 7 bytes bit0 set to 1 for coded data
|Decoded result of our example will be:
| M a p s \ ( 5 ) L o s t T e m p l e . w 3 m F o r . R e s t
|02480600 00 7C00 7C00 A3DF1C42 4D6170735E2835294C6F737454656D706C652E77336D00 466F722E5265737400 00
|(DWORD) 02480600 |Game Flags
| | Speed: (mask 0x00000003) cannot be combined
| | 0x00000000 - Slow game speed
| | 0x00000001 - Normal game speed
| | 0x00000002 - Fast game speed
| | Visibility: (mask 0x00000F00) cannot be combined
| | 0x00000100 - Hide terrain
| | 0x00000200 - Map explored
| | 0x00000400 - Always visible (no fog of war)
| | 0x00000800 - Default
| | Observers/Referees: (mask 0x40003000) cannot be combined
| | 0x00000000 - No Observers
| | 0x00002000 - Observers on Defeat
| | 0x00003000 - Additional players as observer allowed
| | 0x40000000 - Referees
| | Teams/Units/Hero/Race: (mask 0x07064000) can be combined
| | 0x00004000 - Teams Together (team members are placed at neighbored starting locations)
| | 0x00060000 - Fixed teams
| | 0x01000000 - Unit share
| | 0x02000000 - Random hero
| | 0x04000000 - Random races
|(BYTE) 00 |Zero
|(BYTE) 7C |unknow value (zero for ladder games)
|(BYTE) 00 |Zero
|(BYTE) 7C |unknow value (zero for ladder games)
|(BYTE) 00 |Zero
|(DWORD) A3DF1C42 |Map file CRC32
|(char[])4D6170735E2835294C6F737454656D706C652E77336D00
| |Map path (null terminated)
|(char[])466F722E5265737400
| |Host player name (null terminated)
|(BYTE) 00 |Zero
----End of Coded Part----
(DWORD) 04000000 |Total game slots (count all slots)
(DWORD) 09000000 |Game type tag
| 0x00000001 - Custom
| 0x00000009 - Blizzard/Ladder
| (not used others possible values)
| 0x00000002 - Melee
| 0x00000003 - Free for all
| 0x00000004 - one vs one
| 0x00000005 - CTF
| 0x00000006 - Greed
| 0x00000007 - Slaughter
| 0x00000008 - Sudden Death
| 0x0000000A - Use Map Settings
| 0x0000000B - Team Melee
| 0x0000000C - Team FFA
| 0x0000000D - Team CTF
| 0x0000000F - Top vs Bottom
| 0x00000010 - Iron man ladder
(DWORD) 01000000 |Always 0x00000001?
(DWORD) 04000000 |Free game slots (aviable for player connection)
(DWORD) 00000000 |Hosting time in seconds
(WORD) e017 |Hosts client port

*****************************************************

Request game list (from Battle.Net)
SID_GETADVLISTEX 0x09
OUT BATTLE.NET:06112 LEN:23
· · · · · · · · · · · · · · · · · · · · · · ·
ff 09 1700 00e07f00 00000000 00000000 14000000 0000 00
(BYTE) ff |W3GS Signature
(BYTE) 09 |Packet Signature
(WORD) 1700 |Packet Size
(DWORD) 00e07f00 |Filter flags
| Map author: (mask 0x00006000) can be combined
| 0x00002000 - Blizzard
| 0x00004000 - Custom
| 0x00006000 - Any
| Battle type: (mask 0x00018000) cant be combined
| 0x00000000 - Battle
| 0x00010000 - Scenario
| 0x00018000 - Any
| Map size: (mask 0x000E0000) can be combined
| 0x00020000 - Small
| 0x00040000 - Medium
| 0x00080000 - Huge
| 0x000E0000 - Any
| Observers: (mask 0x00700000) can be combined
| 0x00100000 - Allowed observers
| 0x00200000 - Observers on defeat
| 0x00400000 - No observers
| 0x00700000 - Any
(DWORD) 00000000 |Filter mask: can be combined (mask used only if not ANY value for filter)
| 0x00006000 - Filter author
| 0x00018000 - Battle type
| 0x000E0000 - Map size
| 0x00700000 - Observers
| 0x00000000 - No filters
(DWORD) 00000000 |Zero
(DWORD) 14000000 |Always 0x14? Maby its game version
(WORD) 0000 |Zero
(BYTE) 00 |Zero

*****************************************************

Response game list (from Battle.Net)
SID_GETADVLISTEX 0x09
IN BATTLE.NET:06112 LEN:12
· · · · · · · · · · · ·
ff 09 0c00 00000000 01000000
IN BATTLE.NET:06112 LEN:2706
· · · · · · · ·
ff 09 920a 14000000
· I · · · · · · · · · R · · · · · · · · · · · · · · · · · · · · · · · · · · · · · b 1 0 0 0 0 0 0 0 · · I · · · y · · y · · · · · M · a q s ] E o w · o m o a e ] ) · 1 1 ) K e y _ · U o _ M i g e I · W 1 / 3 7 ) · S U S ) / w 3 · y · [ o m m m · · · ·
0120490019040000 020017e052c19483 00000000 00000000 10000000 05000000 d0bad0bbd18ed18700 00 62 3130303030303030 0103490701017901f97901c7c19b854dcb6171735d456f77196f6d6f61655d29fb3131294b65795fad556f5f4d696765497f57312f333729dd535553292f77331179015b6f6d6d6d01010100
· I · · · · · · · · · · p · ~ · · · · · · · · · · · · · · · · F i n a l F a n t a s y O p e n R P G · · b 1 0 0 0 0 0 0 0 · · I · · · · · · · · · · { · M · a q s ] E o w · o m o a e ] G ) G ! o q e o ! · G i o a m ! 1 e / 1 1 / w 3 y · · S i m k e s · a q a o · · ·
012049001d040000 020017e0d570897e 00000000 00000000 10000000 00000000 46696e616c2046616e74617379204f70656e205250470000623130303030303030010349070101f50199f50195917be94dcb6171735d456f77196f6d6f61655d472947216f71656f219547696f616d2131652f31312f773379ed0153696d6b65730b6171616f010100
· · B · · · · · · · · · S · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 1 · · · · 1 · · 3 1 0 0 0 0 0 0 0 · · I · · · u · · u · · [ y = M · a q s ] G s o · { e o U i s o · o e ] ) 5 ) M · a e m s u s o ; m ! W E G ! 3 1 / 5 / w 3 y · W a u u i [ m · · · ·
01a0420019040000 020017e053ef18aa 00000000 00000000 10000000 20000000 d0bcd0bed187d18320d180d183d181d181d0bad0b8d1852031d0bdd0b0312000003331303030303030300103490701017501b17501f55b793d4d8b6171735d47736f857b656f5569736fc56f655d2935294d9761656d7375736f3b6d215745472133312f352f7733790157617575695b6d01010100
· I · · · · · · · · · U · 6 · · · · · · · · · · · · · · · · · D o t A . 3 2 b - a p - s m - b l · · 9 1 0 0 0 0 0 0 0 · · I · · · u · · u · · · · · M · a q s ] E o w · o m o a e ] E + o u A ! A m m + s u a s s ! w · 7 / 3 3 c / w · 3 y · i 1 1 u · _ a c · · ·
0120490007040000 020017e155d8369f 00000000 00000000 10000000 13000000 446f7441202e33326220202d6170202d736d202d626c00003931303030303030300103490701017501e17501bfcda7ed4dcb6171735d456f77196f6d6f61655d452b6f754121416d6d2b7375617373217789372f3333632f770333790169313175075f6163010100
· I · · · · · · · · · X · T 3 · · · · · · · · · · · · · · · · H u m a n s v s O r c s ! ! ! C o m e o n ! ! ! · · b 1 0 0 0 0 0 0 0 · · I · · · · · · · · s · ' s M · a q s ] E o w · o m o a e ] I · u m a o s w s · O s c s w 3 [ · 1 ] [ 1 ] / 1 · / w 3 y · C e · w a s e _ 7 7 · · · ·
012049000c040000 020017e058895433 00000000 00000000 10000000 05000000 48756d616e73207673204f726373212121436f6d65206f6e21212100006231303030303030300103490701019501b1950173db27734dcb6171735d456f77196f6d6f61655d49af756d616f7377739b4f73637377335bbf315d5b315d2f318d2f773379014365f7776173655f373701010100
· I · · · · · · · · · > & · · · · · · · · · · · · · · · · · · d o t A v 6 . 3 2 - a p - s m n o l e a v e r s · · 9 4 0 0 0 0 0 0 0 · · I · · · u · · u · · · · · M · a q s ] e o w · o m o a e ] E ; o u A _ A m m k s u a s s _ w ] 7 [ 1 ] / 3 3 · / w 3 y · g a · m i e i · · ·
0120490008040000 020017e03e26e48a 00000000 00000000 10000000 05000000 646f74412076362e3332202d6170202d736d206e6f206c65617665727300003934303030303030300103490701017501917501b3a7a9b74dcb6171735d656f77196f6d6f61655d453b6f75415f416d6d6b73756173735f775d375b315d2f3333cd2f773379016761176d696569010100
· E · · · · · · · · · V · · · · · · · · · · · · · · · · · · · F i n a l f a n t a s y F R ( l v l 2 5 o u + ) · · 4 1 0 0 0 0 0 0 0 · · I · · · · · · · · } · · O M · a q s ] E o w · o m o a e ] G · G G o s e w e · s ! s 1 c / w # 3 y · S y i m · e i o o · · ·
012045000c040000 020017e056d0a8e5 00000000 00000000 10000000 12000000 46696e616c2066616e7461737920465220286c766c203235206f75202b290000343130303030303030010349070101f501c9f5017de7834f4dcb6171735d456f77196f6d6f61655d47a947476f73657765b173217331632f77233379015379696d0d65696f6f010100
...
(BYTE) ff |W3GS Signature
(BYTE) 09 |Packet Signature
(WORD) 920a |Packet Size
###If GameList empty###
(DWORD) 00000000 |Zero if GameList is empty
(DWORD) 01000000 |Always 0x00000001? (end of packet)
###If GameList not empty###
(DWORD) 14000000 |Always 0x14? Maby its game version (Zero if GameList is empty)
===GameList=== (contains one or more GameInfo structures)
~~~GameInfo~~~
(DWORD) 01204900 |Game type
| Game type tag: (read W3GS_GAMEINFO for this field)
| 0x00000001 - Custom
| 0x00000009 - Blizzard/Ladder
| Map author: (mask 0x00006000) can be combined
| 0x00002000 - Blizzard
| 0x00004000 - Custom
| Battle type: (mask 0x00018000) cant be combined
| 0x00000000 - Battle
| 0x00010000 - Scenario
| Map size: (mask 0x000E0000) can be combined with 2 nearest values
| 0x00020000 - Small
| 0x00040000 - Medium
| 0x00080000 - Huge
| Observers: (mask 0x00700000) cant be combined
| 0x00100000 - Allowed observers
| 0x00200000 - Observers on defeat
| 0x00400000 - No observers
| Flags:
| 0x00000800 - Private game flag (not used in game list)
|Not all researched!!!!
(DWORD) 19040000 |Unknow
(sockaddr_in)020017e052c19483
|Host IP and Port used for join game
(DWORD) 00000000 |Zero
(DWORD) 00000000 |Zero
(DWORD) 10000000 |Always 0x00000010?
(DWORD) 05000000 |Hosting time in seconds
(char[]) d0bad0bbd18ed18700
|GameName UTF-8 Coded (null terminated string)
(BYTE) 00 |Zero
(char) 62 |text formated hexadecimal Count of Free Slots (small case)
(char[8])3130303030303030
|text formated hexadecimal Hosting Counter (upper case)
----Coded Part of Packet----
(char[]) 0103490701017901|Coded data
f97901c7c19b854d
cb6171735d456f77
196f6d6f61655d29
fb3131294b65795f
ad556f5f4d696765
497f57312f333729
dd535553292f7733
1179015b6f6d6d6d
01
(char[3])010100 |End tag of coded data (and end tag of GameInfo)
|Decoded data means same as W3GS_GAMEINFO coded part (read above)
----End of Coded Part----
~~~GameInfo(end)~~~
...
===GameList(end)===

*****************************************************

Create Custom Game (on Battle.Net)
SID_STARTADVEX3 0x1C
OUT BATTLE.NET:06112 LEN:117
· · u · · · · · · · · · · I · · · · · · · · · D o t A · · 9 1 0 0 0 0 0 0 0 · · I · · · u · · u · · · · · M · a q s ] E o w · o m o a e ] E + o u A ! A m m + s u a s s ! w · 7 / 3 3 c / w · 3 y · E o u A · / G o s / S e · s u · · ·
ff 1c 7500 10000000 00000000 01204900ff030000 00000000 446f744100 00 39 3130303030303030 0103490701017501e17501bfcda7ed4dcb6171735d456f77196f6d6f61655d452b6f754121416d6d2b7375617373217789372f3333632f77a3337901456f7541892f476f732f5365037375010100
(BYTE) ff |W3GS Signature
(BYTE) 1c |Packet Signature
(WORD) 7500 |Packet Size
(DWORD) 10000000 |Always 0x00000010?
(DWORD) 00000000 |Zero
(DWORD) 01204900 |Game type (read SID_GETADVLISTEX 0x09 first GameInfo bytes)
(DWORD) ff030000 |Always 0x000003FF?
(DWORD) 00000000 |Zero
(char[]) 446f744100
|GameName UTF-8 Coded (null terminated string)
(BYTE) 00 |Zero
(char) 39 |text formated hexadecimal Count of Free Slots (small case)
(char[8])3130303030303030
|text formated hexadecimal Hosting Counter (upper case)
----Coded Part of Packet----
(char[]) 0103490701017501|Coded data
e17501bfcda7ed4d
cb6171735d456f77
196f6d6f61655d45
2b6f754121416d6d
2b73756173732177
89372f3333632f77
a3337901456f7541
892f476f732f5365
037375
(char[3])010100 |End tag of coded data
|Decoded data means same as W3GS_GAMEINFO coded part (read above)
----End of Coded Part----

=====================================================
= 2. Join Game =
=====================================================

Request Join Game (clients send this on every try to join game)
W3GS_REQJOIN 0x1E
IN 192.168.000.003:01040 LEN:42
· · 3 · · · · · · · 8 · · · · · · · · R u s s i a . O n l i n e · · · · · · · · · · · · · · · · · · ·
f7 1e 3300 05000000 fed83814 00 e117 02000000 5275737369612e4f6e6c696e6500 0100 020017e0c0a80003 00000000 00000000
(BYTE) f7 |W3GS Signature
(BYTE) 1e |Packet Signature
(WORD) 3300 |Packet Size
(DWORD) 05000000 |Join game counter of client
(DWORD) fed83814 |GetTickCount WinAPI value only for LAN games (Zero for battle.net games)
(BYTE) 00 |Always zero? (i think its additional byte for tick count)
(WORD) e117 |External game port (used by others Game clients to connect to this client)
(DWORD) 02000000 |Total game join/create counter
(char[]) 5275737369612e4f6e6c696e6500
|Client name (null terminated string)
(WORD) 0100 |Always 0x0001? IPv4 type tag
(sockaddr_in) 020017e0c0a80003
|Internal client IP and Port
(DWORD) 00000000 |Always zero? additional bytes for IPv6 compability
(DWORD) 00000000 |Always zero? additional bytes for IPv6 compability

*****************************************************

Reject Join Game (host Rejects join game request W3GS_REQJOIN)
W3GS_REJECTJOIN 0x05
OUT 192.168.000.003:01047 LEN:8
· · · · · · · ·
f7 05 0800 09000000
(BYTE) f7 |W3GS Signature
(BYTE) 05 |Packet Signature
(WORD) 0800 |Packet Size
(DWORD) 09000000 |Always 0x0000009?

*****************************************************

Accept Join Game with Slot info (host send this to client on W3GS_REQJOIN)
W3GS_SLOTINFOJOIN 0x04
Update Slot info (host send this to client on slot changes, even player dont know any info about players or donwload map)
W3GS_SLOTINFO 0x09
OUT 192.168.000.003:01046 LEN:48
· · 0 · · · · · d · · · · ` · d · · · · · · ` · d - · · · · ·
f7 04 3000 1900 02 016402000000600164 00ff0000010c600164 2dd21302 00 02
· · · · · · · · · · · · · · · · ·
02 02000416c0a80003 00000000 00000000
(BYTE) f7 |W3GS Signature
(BYTE) 04 |Packet Signature (0x04 or 0x09)
(WORD) 3000 |Packet Size
(WORD) 1900 |SlotsInfo size (can be 0 if host updating slots at this moment)
----SlotsInfo---- (optional for W3GS_SLOTINFOJOIN but should be in W3GS_SLOTINFO)
(BYTE) 02 |Count of slots (can be 0 for example in ladder game)
(char[9])016402000000600164 |Slot1
(char[9])00ff0000010c600164 |Slot2
|(BYTE) 01 |PID - Player ID (0 - not client, 1 - host)
|(BYTE) 64 |Download status (0x64 - 100%, 0xFF - not client)
|(BYTE) 02 |SlotStatus (0 - open, 1 - closed, 2 - controlled)
|(BYTE) 00 |Controller (1 - computer, 0 - human/open/closed)
|(BYTE) 00 |Team Number from 0 to 11 (12 - free/observer/referee)
|(BYTE) 00 |Color Number from 0 to 11 (12 - free/observer/referee)
|(BYTE) 60 |Race flags
| | 0x01 - Human
| | 0x02 - Orc
| | 0x04 - Night Elf
| | 0x08 - Undead
| | 0x20 - Random
| | 0x40 - Race selected or fixed by map or ladder game
|(BYTE) 01 |Controller Type (0 - easy comp, 2 - hard comp, 1 - human/normal comp)
|(BYTE) 64 |Handicap from (valid values: 0x32, 0x3C, 0x46, 0x50, 0x5A, 0x64)
(DWORD) 2dd21302 |GetTickCount WinAPI value of host
(BYTE) 00 |Always zero? (i think its additional byte for tick count) (0xCC for ladder game)
(BYTE) 02 |Count of slots (end tag?) (0xCC for ladder game)
----SlotsInfo End----
----JoinInfo---- (only for W3GS_SLOTINFOJOIN) this part not contains in W3GS_SLOTINFO packets
(BYTE) 02 |PID - Player ID that host gives to client
(sockaddr_in)02000416c0a80003
|Host side client IP and Port (sockaddr_in structure)
(DWORD) 00000000 |Always zero? additional bytes for IPv6 compability
(DWORD) 00000000 |Always zero? additional bytes for IPv6 compability
----JoinInfo End----
==== Examples ====
Ladder game (not contains slots in Slot Info stucture, also 0xCC bytes)
f704 1e00 0700 00 c7bdcf30 cc cc 05 0200 10b0 52d04788 00000000 00000000
Custom game without SlotsInfo
f704 1700 0000 02 0200 0775 52d04708 00000000 00000000
Update slot info (without JoinInfo always)
f709 4c00 4600 07 016402000000010164 02ff02000001010164 036402000002010164
046402000003010164 00ff02010109080164 00ff0201020a010164 00ff0201010b080164
9fc6a700 03 07
==== Examples (end) ====

*****************************************************

Player information (host send this to each client on every player except player that recive this info)
W3GS_PLAYERINFO 0x06
OUT 192.168.000.003:01053 LEN:52
· · 4 · · · · · · F o r . R e s t · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
f7 06 3400 12000000 01 466f722e5265737400 0100 0000000000000000 00000000 00000000 0000000000000000 00000000 00000000
(BYTE) f7 |W3GS Signature
(BYTE) 06 |Packet Signature
(WORD) 3400 |Packet Size
(DWORD) 12000000 |Player join/create counter
(BYTE) 01 |PID
(char[]) 466f722e5265737400
|Player name (null terminated)
(WORD) 0100 |Always 0x0001? IPv4 type tag
(sockaddr_in)0000000000000000
|External player IP and Port (sockaddr_in structure) (Zero for host)
(DWORD) 00000000 |Always zero? additional bytes for IPv6 compability
(DWORD) 00000000 |Always zero? additional bytes for IPv6 compability
(sockaddr_in)0000000000000000
|Internal player IP and Port (sockaddr_in structure) (Zero for host)
(DWORD) 00000000 |Always zero? additional bytes for IPv6 compability
(DWORD) 00000000 |Always zero? additional bytes for IPv6 compability

=====================================================
= 3. Map Check/Download =
=====================================================

Check map request (host send this to client after all players info)
W3GS_MAPCHECK 0x3D
OUT 192.168.000.003:01030 LEN:45
· = - · · · · · M a p s \ ( 2 ) H i l l s O f G l o r y . w 3 m · 6 u · · I · · · ' · · 6
f7 3d 2d00 01000000 4d6170735c28322948696c6c734f66476c6f72792e77336d00 36750100 49caebd1 2792eb36
(BYTE) f7 |W3GS Signature
(BYTE) 3d |Packet Signature
(WORD) 2d00 |Packet Size
(DWORD) 01000000 |Always 0x00000001?
(char[]) 4d6170735c28322948696c6c734f66476c6f72792e77336d00
|Map path (null terminated)
(DWORD) 36750100 |File size
(DWORD) 49caebd1 |Unknow DWORD
(DWORD) 2792eb36 |Map file CRC32

*****************************************************

Response map size (client send this as response on map check)
W3GS_MAPSIZE 0x42
IN 192.168.000.003:01033 LEN:13
· B · · · · · · · 6 u · ·
f7 42 0d00 01000000 01 36750100
(BYTE) f7 |W3GS Signature
(BYTE) 42 |Packet Signature
(WORD) 0d00 |Packet Size
(DWORD) 01000000 |Always 0x00000001?
(BYTE) 01 |Size flag
| 0x01 - Got total size of file (happens on map check or finished download map)
| next field: Map file size client have (Zero, if client request download map)
| 0x03 - Continue donwload map file (happens after every W3GS_MAPPARTOK)
| next field: Start location of part that client requests (or curren got file size)
(DWORD) 36750100 |Map file size
Remarks: If 2 players have same external IP and one of them dont have map, then those who have no map
sends some packets to other from subnet to download Locally the map, without host.
Need research this moments.

*****************************************************

Prepare to download map (host send this to client if he have wrong size or have no map)
W3GS_STARTDOWNLOAD 0x3F
OUT 192.168.000.003:01034 LEN:9
· ? · · · · · · ·
f7 3f 0900 01000000 01
(BYTE) f7 |W3GS Signature
(BYTE) 3f |Packet Signature
(WORD) 0900 |Packet Size
(DWORD) 01000000 |Always 0x00000001?
(BYTE) 01 |Always 0x01? (think its PID from who client requests download)

*****************************************************

Part of map file (host send this part by part if client needs update or download map after W3GS_STARTDOWNLOAD)
W3GS_MAPPART 0x43
OUT 192.168.000.003:01035 LEN:1460
· C · · · · · · · · · · · ·
f7 43 b405 0201 01000000 00000000
t ! , v H M 3 W · · · · D o t A A l l s t a r s v 6 . 1 6 · h O · · · · · · · · · · · · · · · ·
74212c76484d335700000000446f744120416c6c73746172732076362e313600684f01000a00000000000000000000000000...
(BYTE) f7 |W3GS Signature
(BYTE) 43 |Packet Signature
(WORD) b405 |Packet Size
(WORD) 0201 |Always 0x0102? (think first byte is receiver PID and second is sender PID)
(DWORD) 01000000 |Always 0x00000001?
(DWORD) 00000000 |File pointer (start location of this file part)
(char[]) 74212c...|Part of file (1442 bytes maximum) to the end of packet

*****************************************************

Part of map file succesful download (client send this on every part got)
W3GS_MAPPARTOK 0x44
IN 192.168.000.003:01035 LEN:14
· D · · · · · · · · · · · ·
f7 44 0e00 0102 01000000 a2050000
(BYTE) f7 |W3GS Signature
(BYTE) 44 |Packet Signature
(WORD) 0e00 |Packet Size
(WORD) 0102 |Always 0x0201? (think first byte is PID who should send next part and second is receiver PID)
(DWORD) 01000000 |Always 0x00000001?
(DWORD) a2050000 |File pointer (start location of next part that client request)


_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Ghost_of_past
Floodeur prématuré


Inscrit le: 08 Sep 2013
Messages: 532
Sujets: 70
Spécialité en worldedit: GameDesign et optimisation JASS


MessagePosté le: 18/06/19 10:34    Sujet du message: Citer

Mais ghost fonctionne avec la 1.31 maintenant ?

D'ailleurs je pense avoir peut être isolé la cause de desync, mais il me faudra d'autres parties pour confirmer. J'avais mis la vitesse du cycle jour nuit à 0.01%, peut être qu'à cause de la progression trop faible ça créait des approximations différentes en fonction des machines ?
_________________
"L'homme qui meurt est un astre couchant, qui se lève plus radieux sur un autre hémisphère"

"On entends le fracas des Arbres qui tombent, mais pas le murmure de ceux qui poussent"
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2009
Sujets: 49

Médailles: 2 (En savoir plus...)
Ayane (Quantité : 1) Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 18/06/19 21:45    Sujet du message: Citer

Il te faudra peut être une version de Warcraft3 plus ancienne.

Cela ne devrait pas être causé par la vitesse du jour. Il ne faut pas partir en hyperbole sur les float32, toutes les machines X86 utilisent les mêmes spécifications pour leur calcul.

La seule inexactitude qu'on leur reproche c'est lorsque l'on fait des comparaisons d'égalité sur des constantes. Il me semble que c'était 1.7 + 0.1 == 1.8 qui retourne false. Pour contrer cela on peut faire des égalités floues, c'est à dire à epsilon près, epsilon étant le palier entre chaque valeur du float, soit 1.401298E-45. Avec un double ayant un epsilon bien plus faible on ne rencontre pas ces problèmes (ou alors il faudrait une constante très précise).
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Ghost_of_past
Floodeur prématuré


Inscrit le: 08 Sep 2013
Messages: 532
Sujets: 70
Spécialité en worldedit: GameDesign et optimisation JASS


MessagePosté le: 19/06/19 07:35    Sujet du message: Citer

Je vois. Merci des réponses /o/

Pour la version, le hic c'est que le desync a commencé vers la 1.28.5 xD

De toutes façon je ne crie pas encore victoire, car de nouveaux tests doivent être faits.

Pour les comparaisons de floats, j'y veillerai histoire de rendre le code moins foireux.
_________________
"L'homme qui meurt est un astre couchant, qui se lève plus radieux sur un autre hémisphère"

"On entends le fracas des Arbres qui tombent, mais pas le murmure de ceux qui poussent"
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2009
Sujets: 49

Médailles: 2 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1) Ayane (Quantité : 1)

MessagePosté le: 20/06/19 07:49    Sujet du message: Citer

Tu peux toujours rejoindre la longue liste de plaintes à Blizzard par rapport aux patchs. Tu n'es pas le seul dans ce cas.

Tu peux aussi essayer de voir dans le changelog de la version 1.28.5 ce qui pourrait en être la cause. Tu peux aussi ouvrir le patch avec un éditeur Mopaq pour en tirer plus d'informations.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs Toutes les heures sont au format GMT + 1 Heure
Aller à la page Précédente  1, 2
Page 2 sur 2

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com