2 Ecrire dans la database pour tout les swap (même quand rien ne change) => pouvoir forcer l'update
3 Voir avec Olivier le pb d'init d'interfaces qui envoit un message reseau alors que la couche reseau n'est pas initialisée.
6 Les sources sont balisées avec des TODO_GAMEDEV pour indiquer les endroits à modifier ou checker par le gamedev
8 // Done: Il faudra revenir sur le checksum et le remplacer par un compteur d'action
9 * database.xml: SERVER:BUILDING_SENTENCE:BRICKS supprimé.
10 Plus de communication server vers client pour la construction de la sentence courante.
11 Le client envoie toujours les messages SENTENCE:ADDBRICK etc... mais seulement pour que le serveur:
13 - renplisse VALID, COST, STRING, comme avant
14 - remplisse CHECKSUM qui est calculé avec
15 CDBCheckSum.add(RootSheetId)
16 CDBCheckSum.addVector(MandatorySheetId) Taille du tableau en accord avec la RootBrick
17 CDBCheckSum.addVector(OptionalSheetId) Taille du tableau en accord avec la RootBrick
18 NB: sheetId en sint32. Si une brique optionnelle n'est pas voulu, 0 est ajouté au checksum.
20 Ainsi le client ne peut valider la sentence que si CHECKSUM et VALID sont bons.
22 Le CHECKSUM sert pour éviter que le client, après VALID=1 du serveur, change une brique, puis clique OK tout de suite (avant possible invalidation)
24 // Done: Ne pas oublier de mettre à jour la database avec la quand un perso monte de niveau ou acquiere un nouveau metier
25 * database.xml: SERVER:CHARACTER_INFO:CAREER modifiée.
26 - LEVEL indique le level de la carriere (0,carriere non entreprise) (1-25,carriere valide)
27 - JOB0 à JOB7 correcpondent a tout les metier d'une carriere
28 - LEVEL pareil que pour la carriere mais pour le metier
29 - PROGRESS est l'indice de progression du metier (pour les progress bar des skills ?)
32 * message ITEM:SWAP doit marcher pas seulement de main à autre mais de n'importe quel inventory a nimporte quel autre
35 * message SENTENCE:MEMORIZE
37 Il faut maintenant rajouter un numéro de slot pour la mémorisation des sorts (car fait par un glisser/deplacer now):
41 * Note: sentences.name a changé de format... (c deja codé)
45 - le joueur ne peut choisir que le meme nombre de MP requis par la formule.
47 par consequent le message SENTENCE:CLEAR doit le remettre à 0
49 - De la meme facon qu'avec la magie,
50 SERVER:BUILDING_SENTENCE:TOOL et
51 SERVER:BUILDING_SENTENCE:MPS
53 sont supprimés, car la gestion est faite sur le client. VALID, STRING et COST (cout en stamina) sont remplis de la meme facon
55 CHECKSUM est calculé selon:
56 CDBCheckSum.add(OptionalSheetId) (sint32) Taille du tableau en accord avec la RootBrick. 0 si brique optionnelle non voulue
57 CDBCheckSum.addVector(Mps-Quality) (sint32) Taille du tableau en accord avec la RootBrick
58 CDBCheckSum.add(OBJECT:SHEET) (sint32) sheetId de l'obet à créer
59 CDBCheckSum.add(OBJECT:QUANTITY) (sint32) quantités de l'obet à créer (objets stackables)
61 Ainsi le client ne peut valider que si le client et le serveurs sont raccords et que la sentence est valide.
63 - FABER:ADD_MP et FABER:REMOVE_MP sont remplacés par
66 format="u16 u8" => "Quality MpSlot"
68 Ainsi le serveur doit verifier que le client a ce qu'il faut dans son inventaire pour selectionner le MP.
69 L'execution de la sentence devra enlever "au mieux" les MPs, si necessaire en supprimant plusieurs slots
71 - Pour les items stackable (fleches etc...) on peut en créer plusieurs d'un coup (Les MPs sont multipliés)
72 Le message FABER:SET_NUM_ITEM (format="u8") permet de changer le nombre voulu d'items.
73 il devra aussi surement changer tout ce qui est cout en stamina etc...
74 Le message SENTENCE:CLEAR reset le nombre d'items du Faber à 1
77 - Ya pas de briques racines de FABER! Pour la création, à la place de l'ADD_BRICK du root,
78 avant le message FABER:EXECUTE, un message est envoyé:
81 format="u32" => "SheetId"
83 - pour la réparation et le rafinage, l'objet n'est pas enlevé de l'inventaire. A la place de l'ADD_BRICK du root, et
84 avant le message FABER:EXECUTE, un message est envoyé:
87 format="u16 u16" => "InventoryId SlotId"
91 format="u16 u16" => "InventoryId SlotId"
94 L'objet est alors locked (fait par le serveur)
95 (à voir pour plus tard quand les swap_items se feront sur le client, c'est le client qui devra locker)
96 L'objet doit etre delocké sur un SENTENCE:CLEAR
98 - INFO: Pour La selection du tool je scan les sheaths et le bag (dans l'ordre)
99 - INFO: Pour La selection des MP, je scan seulement les bag
101 NOTE: msg.xml n'est pas modifié!
104 * A voir : pour les cheveux il n'y a pas de difference dans le character summary entre tete et cheveux