Gros soucis pour une commande de récupération
Bonjour a tous , ayant fait une commande de récupération , celle ci doit donner des objets en fonction de ce qui est dans ma DB . Or elle donne bien ces objets mais j'obtiens des trucs du genre

[Image: pbzesac.png]

Comme vous l'aurez remarqué c'est embettant alors que mon code est comme ceci : pPlayer->SendNewItem(item,1,true,false);
le 1 correspondant au count , il n'est pas possible qu'il soit donné plusieurs fois le même item au joueur

ensuite quand je me déco j'ai beau regarder dans la table item_instance où a ce que j'ai compris c'est ici qu'il y a les différents objets et leur "count" vu qu'une colonne porte ce nom . Eh bien même pas ! (le guid de mon perso est bien 13 et tout les objets que vous voyez là sont bien ceux que ma commande a ajouté plusieurs fois)

[Image: pbzesac3.png]

Donc là un petit peu énervé je me déco reco , dans ma console j'ai un beau

[Image: pbzesac2.png]

ce qui veut dire qu'il y a un soucis avec mes items a charger

Et IG ça donne ça

[Image: pbzesac1.png]

Le code : [code=cpp]
QueryResult_AutoPtr results2 = CharacterDatabase.PQuery("SELECT id_objet FROM recup_datas WHERE id_set = %u" , tmp);
uint32 noSpaceForCount = 0;
uint32 count = 1;
ItemPosCountVec dest;
uint32 id;
uint64 rowcount = results2->GetRowCount();

uint32 a = 1;
while(a < rowcount + 1)
{
// check space and find places
QueryResult_AutoPtr results3 = CharacterDatabase.PQuery("SELECT id_objet FROM recup_datas WHERE id_set = %u AND subid = %u" , tmp , a);
if(results3->Fetch()->GetUInt32())
{
id = results3->Fetch()->GetUInt32();
}

ItemPrototype const *pProto = objmgr.GetItemPrototype(id);
if (!pProto)
{
PSendSysMessage(LANG_COMMAND_ITEMIDINVALID, id);
SetSentErrorMessage(true);
return false;
}

uint8 msg = pPlayer->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, id, 1, &noSpaceForCount);
if (msg != EQUIP_ERR_OK) // convert to possible store amount
count -= noSpaceForCount;

for (ItemPosCountVec::const_iterator itr = dest.begin(); itr != dest.end(); ++itr)
if (Item* item1 = pPlayer->GetItemByPos(itr->pos))
item1->SetBinding(false);

if (dest.empty()) // can't add any
{
PSendSysMessage(LANG_ITEM_CANNOT_CREATE, id, noSpaceForCount);
SetSentErrorMessage(true);
return false;
}

Item* item = pPlayer->StoreNewItem(dest, id , true, Item::GenerateItemRandomPropertyId(id));
if (item)
{
pPlayer->SendNewItem(item,1,true,false);
//Une condition future quant a mon problème d'ajout de plusieurs mêmes items ?
}

if (noSpaceForCount > 0)
{
PSendSysMessage(LANG_ITEM_CANNOT_CREATE, id, noSpaceForCount);
return false;
}
++a;
}[/code]
Autant vous dire que ça bien une semaine que je tourne en rond entre les crash et les galères de ce style là je ne m'en sort plus . Donc si vous aviez une idée ... :/
Tu as essayé simplement de reprendre juste un appel à HandleAdditem non ? au lieu de tout ça Clin
ça donne ça et ça crash
[code=cpp]
QueryResult_AutoPtr results2 = CharacterDatabase.PQuery("SELECT id_objet FROM recup_datas WHERE id_set = %u" , tmp);
uint32 noSpaceForCount = 0;
uint32 count = 1;
ItemPosCountVec dest;
uint32 id;
uint64 rowcount = results2->GetRowCount();
uint32 a = 1;

while(a < rowcount + 1)
{

QueryResult_AutoPtr results3 = CharacterDatabase.PQuery("SELECT id_objet FROM recup_datas WHERE id_set = %u AND subid = %u" , tmp , a);
if(results3->Fetch()->GetUInt32())
{
args = (char *)results3->Fetch()->GetUInt32();
ChatHandler::HandleAddItemCommand(args);
}}[/code]
Édition :
j'avais oublié un ++a; a la fin de ma boucle mais ça crash toujours
crash log ? ...
Ne te compliquerais tu pas un peu la vie ?

Je fais ca de tête et avec les fonctions de Trinity, même si ca doit être presque pareil, je ne garantie rien
[code=cpp]
QueryResult_AutoPtr results2 = CharacterDatabase.PQuery("SELECT id_objet FROM recup_datas WHERE id_set = %u" , tmp);
do
{
Field* fields = results2->Fetch();
char args = (char*)fields[0].GetString();
ChatHandler::HandleAddItemCommand(args);
}
while(results2->NextRow());
[/code]
C’est ce que je disais Clin
(15-06-2011 18:41)et65 a écrit :  Ne te compliquerais tu pas un peu la vie ?

En fait oui je me complique parceque j'ai repris mon ancien code qui crashait aussi .

(15-06-2011 18:35)Morphau a écrit :  crash log ? ...

le debuggage ne donne rien , je tombe sur un fichier de la lib standard le plus souvent .


ET65 MON SAUVEUR Langue MERCI BEAUCOUP
Édition :
Je poste le code au final au cas où

[code=cpp]QueryResult_AutoPtr results2 = CharacterDatabase.PQuery("SELECT id_objet FROM recup_datas WHERE id_set = %u" , tmp);
do
{
Field* fields = results2->Fetch();
args = (char*)fields[0].GetString();
ChatHandler::HandleAddItemCommand(args);
}
while(results2->NextRow());[/code]

Je suis vraiment a la masse en ce moment entre les révisions et ces émulateurs mal foutus Langue

Retourner en haut Accueil