Bon ben me revoilà avec ma commande Sauf que cette fois c'est en production ! Sur mon serveur linux , le code est le suivant
[code=cpp]bool ChatHandler::HandleRecupAllCommand(const char* args)
{
if(!*args)
{
return false;
}
Player *pPlayer = m_session->GetPlayer();
uint32 pGUID = pPlayer->GetGUID();
uint32 ID_command = atoi(args);
QueryResult_AutoPtr sac = CharacterDatabase.PQuery("SELECT bag FROM new_recup WHERE PGUID = %u" , pGUID);
if(sac->Fetch()->GetUInt32() == 0)
{
PSendSysMessage("Vous n'avez pas récupérés vos sac !");
return false;
}
QueryResult_AutoPtr id_command = CharacterDatabase.PQuery("SELECT id_command FROM new_recup WHERE PGUID = %u" , pGUID);
if (id_command->Fetch()->GetUInt32() != atoi(args))
{
PSendSysMessage("L'id de votre commande n'est pas bon , veuillez entrer le bon : %u" , id_command->Fetch()->GetString());
return false;
}
else
{
/*===== OBJETS === */
//On récupère l'id du set
QueryResult_AutoPtr id_set = CharacterDatabase.PQuery("SELECT id_set FROM new_recup WHERE id_command = %u" , ID_command);
uint32 tmp = id_set->Fetch()->GetUInt32();
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());
/* ==== LVL + MONEY === */
pPlayer->SetLevel(70);
pPlayer->SetMoney(30000000);//3000 po
/* === MONTURES ====*/
QueryResult_AutoPtr mountComp = CharacterDatabase.PQuery("SELECT MountComp FROM new_recup WHERE PGUID = %u" , pGUID);
switch(mountComp->Fetch()->GetUInt32())
{
case 75:
pPlayer->learnSpell(33388);
break;
case 150:
pPlayer->learnSpell(33391);
break;
case 225:
pPlayer->learnSpell(34090);
break;
case 300:
pPlayer->learnSpell(34091);
break;
}
/* ==== PREMIER METIER ==== */
QueryResult_AutoPtr QFirstWork = CharacterDatabase.PQuery("SELECT FirstWork FROM new_recup WHERE id_command = %u" , id_command);
QueryResult_AutoPtr QFirstWorkLvl = CharacterDatabase.PQuery("SELECT FirstWorkLvl FROM new_recup WHERE id_command = %u" , id_command);
QueryResult_AutoPtr QFirstWorkSpell;
uint32 FirstWorkId;
uint32 FirstWorkLevel;
uint32 FirstWorkSpell;
if(QFirstWork->Fetch() && QFirstWorkLvl->Fetch())
{
FirstWorkId = QFirstWork->Fetch()->GetUInt32();
FirstWorkLevel = QFirstWorkLvl->Fetch()->GetUInt32();
QFirstWorkSpell = CharacterDatabase.PQuery("SELECT Spell FROM recup_work_data WHERE Work = %u AND Lvl = %u" , FirstWorkId , FirstWorkLevel);
}
else {
sLog.outString("Tes fetch() marchent pas ");
return false;
}
if(QFirstWorkSpell->Fetch())
FirstWorkSpell = QFirstWorkSpell->Fetch()->GetUInt32();
pPlayer->learnSpell(FirstWorkSpell);
pPlayer->SetSkill(FirstWorkId , FirstWorkLevel , FirstWorkLevel);
/* ==== DEUXIEME METIER === */
QueryResult_AutoPtr QSecondWork = CharacterDatabase.PQuery("SELECT SecondWork FROM new_recup WHERE id_command = %u" , id_command);
QueryResult_AutoPtr QSecondWorkLvl = CharacterDatabase.PQuery("SELECT SecondWorkLvl FROM new_recup WHERE id_command = %u" , id_command);
QueryResult_AutoPtr QSecondWorkSpell;
uint32 SecondWorkId;
uint32 SecondWorkLevel;
uint32 SecondWorkSpell;
if(QSecondWork->Fetch() && QSecondWorkLvl->Fetch())
{
SecondWorkId = QSecondWork->Fetch()->GetUInt32();
SecondWorkLevel = QSecondWorkLvl->Fetch()->GetUInt32();
QSecondWorkSpell = CharacterDatabase.PQuery("SELECT Spell FROM recup_work_data WHERE Work = %u AND Lvl = %u" , SecondWorkId , SecondWorkLevel);
}
else {
sLog.outString("Tes fetch() marchent pas ");
return false;
}
if(QSecondWorkSpell->Fetch())
SecondWorkSpell = QSecondWorkSpell->Fetch()->GetUInt32();
pPlayer->learnSpell(SecondWorkSpell);
pPlayer->SetSkill(SecondWorkId , SecondWorkLevel , SecondWorkLevel);
/* ==== METIER SECONDAIRE = */
QueryResult_AutoPtr QSecondaryWork = CharacterDatabase.PQuery("SELECT SecondaryWork FROM new_recup WHERE id_command = %u" , id_command);
QueryResult_AutoPtr QSecondaryWorkLvl = CharacterDatabase.PQuery("SELECT SecondaryWorkLvl FROM new_recup WHERE id_command = %u" , id_command);
QueryResult_AutoPtr QSecondaryWorkSpell;
uint32 SecondaryWorkId;
uint32 SecondaryWorkLevel;
uint32 SecondaryWorkSpell;
if(QSecondaryWork->Fetch() && QSecondaryWorkLvl->Fetch())
{
SecondaryWorkId = QSecondaryWork->Fetch()->GetUInt32();
SecondaryWorkLevel = QSecondaryWorkLvl->Fetch()->GetUInt32();
QSecondaryWorkSpell = CharacterDatabase.PQuery("SELECT Spell FROM recup_work_data WHERE Work = %u AND Lvl = %u" , SecondaryWorkId , SecondaryWorkLevel);
}
else {
sLog.outString("Tes fetch() marchent pas ");
return false;
}
if(QSecondaryWorkSpell->Fetch())
SecondaryWorkSpell = QSecondaryWorkSpell->Fetch()->GetUInt32();
pPlayer->learnSpell(SecondaryWorkSpell);
pPlayer->SetSkill(SecondaryWorkId , SecondaryWorkLevel , SecondaryWorkLevel);
/* ==== REP VILLE BASSE === */
QueryResult_AutoPtr villeBasse = CharacterDatabase.PQuery("SELECT RepVilleBasse FROM new_recup WHERE id_command = %u" , id_command);
if(villeBasse->Fetch()->GetUInt32() > 0)
{
std::stringstream outvb;
outvb << "1011 " << villeBasse->Fetch()->GetUInt32();
ChatHandler::HandleModifyRepCommand(outvb.str().c_str());
}
/* ==== REP SHATAR ======== */
QueryResult_AutoPtr Shatar = CharacterDatabase.PQuery("SELECT RepShatar FROM new_recup WHERE id_command = %u" , id_command);
if(Shatar->Fetch()->GetUInt32() > 0)
{
std::stringstream outs;
outs << "935 " << villeBasse->Fetch()->GetUInt32();
ChatHandler::HandleModifyRepCommand(outs.str().c_str());
}
/* ==== REP THRALLMAR ===== */
QueryResult_AutoPtr Thrallmar = CharacterDatabase.PQuery("SELECT RepThrallmar FROM new_recup WHERE id_command = %u" , id_command);
if(Thrallmar->Fetch()->GetUInt32() > 0)
{
std::stringstream outt;
outt << "947 " << villeBasse->Fetch()->GetUInt32();
ChatHandler::HandleModifyRepCommand(outt.str().c_str());
}
/* ==== REP CENARIENNE ==== */
QueryResult_AutoPtr RepCenarienne = CharacterDatabase.PQuery("SELECT RepCenarienne FROM new_recup WHERE id_command = %u" , id_command);
if(RepCenarienne->Fetch()->GetUInt32() > 0)
{
std::stringstream outc;
outc << "942 " << villeBasse->Fetch()->GetUInt32();
ChatHandler::HandleModifyRepCommand(outc.str().c_str());
}
/* ==== REP GARDIENS ====== */
QueryResult_AutoPtr RepGardiens = CharacterDatabase.PQuery("SELECT RepGardiens FROM new_recup WHERE id_command = %u" , id_command);
if(RepGardiens->Fetch()->GetUInt32() > 0)
{
std::stringstream outg;
outg << "989 " << villeBasse->Fetch()->GetUInt32();
ChatHandler::HandleModifyRepCommand(outg.str().c_str());
}
args = NULL;
ChatHandler::HandleMaxSkillCommand(args);
CharacterDatabase.PQuery("DELETE FROM new_recup WHERE PGUID = %u" , pGUID);
return true;
}
}[/code]
Donc quand j'utilise gdb il me dit bien que le crash vient de cette fonction , sauf que je sais pas comment faire pour qu'il me donne la ligne . Si vous aviez une idée ? :/