Пример #1
0
void MyServer::makeUserInfo(qint64 id)
{
    QDataStream in(&bufBlock,QIODevice::WriteOnly);
    in.setVersion(QDataStream::Qt_5_0);
    in<<qint32(0)<<qint8(respondType::registeOk);
    in<<qint64(id+N)<<qint8(1)<<QString("编辑个性签名")<<QString("head1.png");
    in.device()->seek(0);
    in<<qint32(bufBlock.size() - sizeof(qint32));
}
Пример #2
0
// 用于返回好友列表    封装用户基本信息>>bufBlock
void MyServer::makeUserInfo(userInfo *info, qint8 state, qint8 type)
{
    bufBlock.resize(0);
    QDataStream in(&bufBlock,QIODevice::WriteOnly);
    in.setVersion(QDataStream::Qt_5_0);
    in<<qint32(0)<<type;
    in<<info->account<<info->nick<<qint8(info->level) <<info->signatrue<<qint8(state);
    QPixmap pix(QString(":/image/") +  info->headImage);
    in<<pix;
    in.device()->seek(0);
    in<<qint32(bufBlock.size() - sizeof(qint32));
}
Пример #3
0
QDataStream &operator<<(QDataStream &out, const GameState::State &data)
{
   out << qint8(data.eastPosition)
       << qint8(data.winnerPosition);

   for (int i = 0; i < 4; ++i)
   {
       out <<        data.playersSet[i]
           << qint32(data.scores    [i])
           << qint32(data.overall   [i]);
   }
   return out;
}
Пример #4
0
void MyServer::makeTextChat(QMap<QString, QVariant> map)
{
    bufBlock.resize(0);
    QDataStream in(&bufBlock,QIODevice::WriteOnly);
    in.setVersion(QDataStream::Qt_5_0);

    in<<qint32(0)<<qint8(respondType::chat)<<qint8(respondType::textChat);
    in<<map["fromAccount"].toString()<<map["content"].toString();
    in<<map["time"].toDateTime();

    in.device()->seek(0);
    in<<qint32(bufBlock.size() - sizeof(qint32));
}
Пример #5
0
void MyServer::makeUserRecommd(userInfo *info,int limit, int type)
{
    bufBlock.resize(0);
    QDataStream in(&bufBlock,QIODevice::WriteOnly);
    in.setVersion(QDataStream::Qt_5_0);
    in<<qint32(0)<<qint8(type) <<qint8(limit) ;
    for (int i=0;i<limit;i++ ) {
        in<<qint32(info[i].id)<<info[i].nick;   qDebug()<<" for "<<info[i].id<<" "<<info[i].nick<<" "<<info[i].headImage;
        QPixmap pix(QString(":/image/") +  info[i].headImage);
        in<<pix;
    }
    in.device()->seek(0);
    in<<qint32(bufBlock.size() - sizeof(qint32));
}
Пример #6
0
void MyServer::makeUserInfo(userInfo *info,qint8 state)
{
    bufBlock.resize(0);
    QDataStream in(&bufBlock,QIODevice::WriteOnly);
    in.setVersion(QDataStream::Qt_5_0);
    in<<qint32(0)<<qint8(respondType::loginOk);
    in<<info->nick<<qint8(info->level) <<info->signatrue<<qint8(state);
    QByteArray data = getHeadImage( QString(":/image/") +  info->headImage);
    in<<qint32(data.size());
    bufBlock.append( data );

    in.device()->seek(0);
    in<<qint32(bufBlock.size() - sizeof(qint32));
}
Пример #7
0
void MyServer::sendGroupSize(const QVector<groupInfo> &groups, socketClients *client)
{
    int size = groups.count();
    QDataStream in(&bufBlock,QIODevice::WriteOnly);
    in.setVersion(QDataStream::Qt_5_0);

    // 	好友分组个数上限 : qint8
    in<<qint32(0)<<qint8(respondType::friendGroupSize)<<qint8(size);
    for (int i=0;i<size;i++) {     //  qDebug()<<size<<" ,  "<<groups[i].name<<" , "<<groups[i].total;
        in<<qint32(groups[i].total)<<groups[i].name;
    }
    bufferHead(in);
    client->getSocket()->write(bufBlock);
    bufBlock.resize(0);
}
Пример #8
0
QDataStream &operator << ( QDataStream &out, const TestNode &node )
{
    out << qint32 ( node.getType() ) << node.getTask() << node.getQuestion() << node.getQuestions()
        << node.getAnswers() << qint8 ( node.getRealsInt() ) << node.getReals();

    return out;
}
Пример #9
0
void MyServer::sendFriendGroup(const QVector<groupInfo>& groups,socketClients* client)
{
    int size = groups.count();
   QTcpSocket* socket = client->getSocket();

   QByteArray data;
   QDataStream in(&data,QIODevice::WriteOnly);
   in.setVersion(QDataStream::Qt_5_0);

   in<<qint32(0)<<qint8(respondType::friendGroup);
    QVector<int> friendsID;
    for (int i=0;i<size;i++) {
        in<<groups[i].name;
        // 将每一个分组下的所有好友信息封装在一起,再发送出去
        if (groups[i].total<=0) continue;
        model.getFriendsID(friendsID, groups[i].id);
        for (int j=0;j<friendsID.count();j++) {
            userInfo* info = model.getFriendsInfo(friendsID[j]);
            if ( hx.contains(info->account) ) {
                makeFriendInfo(in,info,clients.at( hx[ info->account ] )->getUserState() );
            }
            else {
                makeFriendInfo(in,info,userStateType::offline );
            }
            delete info;
        }
    }
    in.device()->seek(0);
    in<<qint32(data.size()-sizeof(qint32));
    socket->write(data);
}
Пример #10
0
void CSVImportDialog::readSettings()
{
    QSettings settings(GenericHelper::getCompanyName(), GenericHelper::getAppName());

    settings.beginGroup("CSVImportDialog");
    ui->amountCheck->setChecked(settings.value("amountChecked", true).toBool());
    ui->dateCheck->setChecked(settings.value("dateChecked", true).toBool());
    ui->descriptionCheck->setChecked(settings.value("descriptionChecked", true).toBool());
    ui->whatCheck->setChecked(settings.value("whatChecked", true).toBool());
    ui->categoryCheck->setChecked(settings.value("categoryChecked", true).toBool());
    ui->paymentCheck->setChecked(settings.value("paymentChecked", true).toBool());

    ui->amountEdit->setText(settings.value("amountValue", qint8(1)).toString());
    ui->dateEdit->setText(settings.value("dateValue", qint8(2)).toString());
    ui->descriptionEdit->setText(settings.value("descriptionValue", qint8(3)).toString());
    ui->whatEdit->setText(settings.value("whatValue", qint8(4)).toString());
    ui->categoryEdit->setText(settings.value("categoryValue", qint8(5)).toString());
    ui->paymentEdit->setText(settings.value("paymentValue", qint8(6)).toString());

    ui->lineskipSpinBox->setValue(settings.value("lineskip", qint8(4)).toInt());
    ui->invertCheck->setChecked(settings.value("invertChecked", false).toBool());

    ui->dateFormatEdit->setText(settings.value("dateformat","M/d/yyyy").toString());
    ui->separatorEdit->setText(settings.value("separator",",").toString());
    ui->localeEdit->setText(settings.value("locale","C").toString());

    settings.endGroup();
}
Пример #11
0
void MyServer::makeFriendInfo(QDataStream& in, userInfo *info, qint8 state)
{
    bufBlock.resize(0);
    in<<info->account<<info->nick<<qint8(info->level)<<info->signatrue<<state;
    //QByteArray data = getHeadImage( QString(":/image/") +  info->headImage);
    //in<<qint32(data.size());
    //bufBlock.append( data );
    QPixmap pix(QString(":/image/") +  info->headImage);
    in<<pix;
}
Пример #12
0
QByteArray *sql::getErrorData(QString str, int type)
{
    QByteArray *data = new QByteArray;
    QDataStream in(data,QIODevice::WriteOnly);
    in.setVersion(QDataStream::Qt_5_0);
    in<<qint32(0)<<qint8(type)<<str;
    in.device()->seek(0);
    in<<qint32(data->size() - sizeof(qint32));
    return data;
}
Пример #13
0
QByteArray *sql::sendDescriptor(int descrip)
{
    QByteArray *data=new QByteArray;
    QDataStream in(data,QIODevice::WriteOnly);
    in.setVersion(QDataStream::Qt_5_0);
    in<<qint32(0)<<qint8(respondType::descriptor)<<qint32(descrip);
    in.device()->seek(0);
    in<<qint32(data->size() - sizeof(qint32));
    return data;
}
Пример #14
0
qint8 U2Bits::readInt8(const uchar* bits, int pos) {
    int res = 0;
    for (int i = 0; i < 8; i++) {
        res = res << 1;
        if (U2Bits::getBit(bits,  pos + i)) {
            res += 1;
        }
    }
    return qint8(res);
}
Пример #15
0
qint8 KisColorSelector::getLightIndex(const QPointF& pt) const
{
    if (m_lightStripArea.contains(pt.toPoint(), true)) {
        qreal t = (pt.x() - m_lightStripArea.x()) / qreal(m_lightStripArea.width());
        t = (pt.y() - m_lightStripArea.y()) / qreal(m_lightStripArea.height());

        return qint8(t * getNumLightPieces());
    }
    
    return -1;
}
Пример #16
0
qint8 KisColorSelector::getSaturationIndex(const QPointF& pt) const
{
    qreal length = std::sqrt(pt.x()*pt.x() + pt.y()*pt.y());
    
    for(int i=0; i<m_colorRings.size(); ++i) {
        if (length >= m_colorRings[i].innerRadius && length < m_colorRings[i].outerRadius)
            return qint8(i);
    }

    return -1;
}
Пример #17
0
//-------------------------------------------------------------------------------------------------
bool ToG3DataID( tG3DataID& g3DataID, const tDataId& dataID )
{
    g3DataID.engine = qint8( dataID.DataEngine() );
    g3DataID.length = dataID.DataSource().Length();
    memcpy( g3DataID.source, dataID.DataSource().Data(), g3DataID.length );
    if (g3DataID.length < MAX_DATA_SOURCE_SIZE)
        memset( g3DataID.source + g3DataID.length, 0, MAX_DATA_SOURCE_SIZE - g3DataID.length );

    Assert( g3DataID.engine == dataID.DataEngine() );
    return true;
}
void QPicturePaintEngine::updateClipRegion(const QRegion &region, Qt::ClipOperation op)
{
    Q_D(QPicturePaintEngine);
#ifdef QT_PICTURE_DEBUG
    qDebug() << " -> updateClipRegion(): op:" << op
             << "bounding rect:" << region.boundingRect();
#endif
    int pos;
    SERIALIZE_CMD(QPicturePrivate::PdcSetClipRegion);
    d->s << region << qint8(op);
    writeCmdLength(pos, QRectF(), false);
}
Пример #19
0
QDataStream &operator<<(QDataStream &stream, const QAmqpFrame &frame)
{
    // write header
    stream << frame.type_;
    stream << frame.channel_;
    stream << frame.size();

    frame.writePayload(stream);

    // write end
    stream << qint8(QAmqpFrame::FRAME_END);
    stream.device()->waitForBytesWritten(QAmqpFrame::writeTimeout());
    return stream;
}
void BattleCommunicator::showResult(int battleid, int result, int loser)
{
    QByteArray command;
    DataStream stream(&command, QIODevice::WriteOnly);

    stream << uchar(BattleCommands::BattleEnd) << qint8(mybattles[battleid]->opponent(mybattles[battleid]->spot(loser))) << uchar(result);

    emit battleInfo(battleid, mybattles[battleid]->id(0), command);
    emit battleInfo(battleid, mybattles[battleid]->id(1), command);

    foreach(int spectator, mybattles[battleid]->spectators) {
        emit battleInfo(battleid, spectator, command);
    }
}
Пример #21
0
// Отправка сообщения в сеть
void MainWindow::send(QString str, qint8 type) {
  // Полный пакет данных будет в массиве data
  QByteArray data; // Массив данных для отправки

  // Последовательно выводим в него байты
  QDataStream out(&data, QIODevice::WriteOnly);
  out << qint8(type); // Тип сообщения
  out << str; // Само сообщение

  // Отправляем полученный массив данных всем в локальный сети
  // на порт указанный в интерфейсе
  socket->writeDatagram(data,
                        QHostAddress::Broadcast,
                        ui->portNumEdit->text().toInt() );
}
Пример #22
0
void TestNode::shuffleClose()
{
    quint32 num = answers.count();
    quint32 a = 0, b = 0, c = 0, j = 0, i = 0;
    quint32 *d = new quint32[num];
    QStringList tmp1, tmp2;
    QString sep = "&$";
    
    for(i = 0; i < num; i++)
    {
        qint8 ans = qint8(std::pow(2, i)) & reals;
        if(ans > 0)
            ans = 1;
        tmp1.append(answers.at(i) + sep + QString().setNum(ans));
    }
    
    for(i = 0; i < num; i ++)
        d[i] = i;
    
    while(j < (num * 2))
    {
        a = qrand() % num;
        b = qrand() % num;
        c = d[a];
        d[a] = d[b];
        d[b] = c;
        j++;
    }
    
    for(i = 0; i < num; i++)
    {
        tmp2.append(tmp1.at(d[i]));
    }
    
    answers.clear();
    reals = 0;
    
    for(i = 0; i < num; i++)
    {
        QStringList tmp3 = tmp2.at(i).split(sep);
        answers.append(tmp3.at(0));
        reals += tmp3.at(1).toUInt() * std::pow(2, i);
    }
    delete[] d;
}
Пример #23
0
void QAmqpChannel::qos(qint16 prefetchCount, qint32 prefetchSize)
{
    Q_D(QAmqpChannel);
    QAmqpMethodFrame frame(QAmqpFrame::Basic, QAmqpChannelPrivate::bmQos);
    frame.setChannel(d->channelNumber);

    QByteArray arguments;
    QDataStream stream(&arguments, QIODevice::WriteOnly);

    d->requestedPrefetchSize = prefetchSize;
    d->requestedPrefetchCount = prefetchCount;

    stream << qint32(prefetchSize);
    stream << qint16(prefetchCount);
    stream << qint8(0x0);   // global

    frame.setArguments(arguments);
    d->sendFrame(frame);
}
Пример #24
0
void Widget::startTransferMsg(){
    if(msgSendReady){
//    localFile = new QFile(fileName);
//    if(!localFile->open(QFile::ReadOnly))
//    {
//        qDebug() << "open file error!";
//        return;
//    }
    msg = this->msgLineEdit->text();
    totalBytes = msg.size();
    //文件总大小
    QDataStream sendOut(&outBlock,QIODevice::WriteOnly);
    sendOut.setVersion(QDataStream::Qt_4_6);
    //QString currentFileName = fileName.right(fileName.size() - fileName.lastIndexOf('/')-1);
    //fileName.lastIndexOf('/')返回的是从首字符开始 到最后一个 / 的位数
    //fileName.right(8) 意思就是 从路径右面开始 到第八位数的字符串
    sendOut << qint64(0)<<qint8(0)<<qint64(0)<<msg;
    //依次写入总大小信息空间,发送类型信息空间
    totalBytes += outBlock.size();
    //这里的总大小是消息大小消息+类型信息的总和
    sendOut.device()->seek(0);
    //回到字节流起始位置
    msgtype = 2;
    sendOut<<totalBytes<<msgtype<<qint64((outBlock.size() - sizeof(qint64)*2-sizeof(qint8)));
    //totalBytes是文件总大小,即两个quint64的大小+文件名+文件实际内容的大小
    //qint64((outBlock.size() - sizeof(qint64)*2))得到的是文件名大小
    //为了保证在客户端能接收到完整的文件,我们都在数据流的最开始写入完整文件的大小信息,
    //这样客户端就可以根据大小信息来判断是否接受到了完整的文件。而在服务器端,我们在发送数据时就要首先发送实际文件的大小信息,
    //但是,文件的大小一开始是无法预知的,所以我们先使用了out<<(quint16) 0;在block的开始添加了一个quint16大小的空间,
    //也就是两字节的空间,它用于后面放置文件的大小信息。然后out<<tr(“hello Tcp!!!”);输入实际的文件,这里是字符串。
    //当文件输入完成后我们在使用out.device()->seek(0);返回到block的开始,加入实际的文件大小信息,也就是后面的代码,
    //它是实际文件的大小:out<<(quint16) (block.size() – sizeof(quint16));
    tcpClient->write(outBlock);
    //发送完头数据后剩余数据的大小,即文件实际内容的大小
//    this->stateLabel->setText(QString::fromLocal8Bit("已连接"));
    outBlock.resize(0);
    qDebug()<<"#####totalBytes"<<totalBytes;
    this->stateLabel->setText(this->msgLineEdit->text()+" is Send");
    tcpClient->close();
    }
}
Пример #25
0
void MyServer::makeSomeChats(QVector<chatMes> chatVec,qint8 onetype, qint8 type)
{
    bufBlock.resize(0);
    QDataStream in(&bufBlock,QIODevice::WriteOnly);
    in.setVersion(QDataStream::Qt_5_0);

    in<<qint32(0)<<onetype<<type;
    if (type  == respondType::chat) {
        in<<qint8(chatVec.count());
        for (int i=0;i<chatVec.count();i++) {
            in<<chatVec[i].fromAccount <<chatVec[i].type;
            if (chatVec[i].type == queryType::textChat ) {
                in<<chatVec[i].content;
            }
            in<<chatVec[i].time;
        }
    }

    in.device()->seek(0);
    in<<qint32(bufBlock.size() - sizeof(qint32));
}
Пример #26
0
static QString formatRegister(quint64 v, int size, RegisterFormat format, bool forEdit)
{
    QString result;
    if (format == HexadecimalFormat) {
        result = QString::number(v, 16);
        result.prepend(QString(2*size - result.size(), '0'));
    } else if (format == DecimalFormat) {
        result = QString::number(v, 10);
        result.prepend(QString(2*size - result.size(), ' '));
    } else if (format == SignedDecimalFormat) {
        qint64 sv;
        if (size >= 8)
            sv = qint64(v);
        else if (size >= 4)
            sv = qint32(v);
        else if (size >= 2)
            sv = qint16(v);
        else
            sv = qint8(v);
        result = QString::number(sv, 10);
        result.prepend(QString(2*size - result.size(), ' '));
    } else if (format == CharacterFormat) {
        bool spacesOnly = true;
        if (v >= 32 && v < 127) {
            spacesOnly = false;
            if (!forEdit)
                result += '\'';
            result += char(v);
            if (!forEdit)
                result += '\'';
        } else {
            result += "   ";
        }
        if (spacesOnly && forEdit)
            result.clear();
        else
            result.prepend(QString(2*size - result.size(), ' '));
    }
    return result;
}
Пример #27
0
void WorldSession::SendUpdateObject()
{
    Character* character = GetCharacter();
    if (!character)
        return;

    WorldPacket data(SMSG_UPDATE_OBJECT);
    data << quint8(0);
    data << quint8(1);

    data << quint8(0);
    data << character->GetGuid();

    data.StartBlock<quint16>();
    {
        data << quint8(7);
        data << character->GetGuid();
        data << quint8(0);
        data << GetAccountInfos().id;
        data.WriteString(character->GetName(), true);

        data << character->GetBreed();
        data << character->GetPositionX();
        data << character->GetPositionY();
        data << character->GetPositionZ();
        data << character->GetInstanceId();
        data << character->GetDirection();

        // *** Skin
        data << character->GetGender();
        data << character->GetSkinColor();
        data << character->GetHairColor();
        data << character->GetPupilColor();
        data << character->GetSkinColorFactor();
        data << character->GetHairColorFactor();
        data << character->GetClothIndex();
        data << character->GetFaceIndex();
        data << qint16(-1); // Titles

        // PUBLIC_CHARACTERISTICS
        data << quint16(0); // size

        // FIGHT_PROPERTIES
        data << quint8(0); // hasProperties

        // FIGHT
        data << qint32(-1); // currentFightId
        data << quint8(0); // isKo
        data << quint8(0); // isDead
        data << quint8(0); // isSummonned
        data << quint8(0); // isFleeing
        data << qint8(-1); // obstacleId

        data << quint8(0); // hasSummon

        // EQUIPMENT_APPEARANCE
        data << quint16(0); // Views size

        // RUNNING_EFFECTS
        data << quint8(0); // hasInFightData
        data << quint8(0); // hasOutFightData

        // CURRENT_MOVEMENT_PATH
        data << quint8(0); // hasCurrentPath

        // WORLD_PROPERTIES
        data << quint8(0); // hasProperties

        // GROUP
        data << quint64(0); // partyId

        // TEMPLATE
        data << quint16(0); // sightRadius
        data << quint16(0); // aggroRadius

        // COLLECT
        data << quint16(0); // unavailableActions size

        // OCCUPATION
        data << quint8(0); // hasOccupation

        // XP
        data << character->GetXP();

        // XP_CHARACTERISTICS
        data << character->GetXPFreePoints();
        data << quint16(0); // xpBonusPoints size
        data << quint16(0); // characteristicBonusPoints size

        data << character->GetXPGauge(); // Should be named WakfuGauge...

        // CITIZEN_POINT
        data << quint16(0); // nationCitizenScores
        data << quint16(0); // offendedNations

        // GUILD_REMOTE_INFO
        data << character->GetGuildId();
        data << quint64(0); // Blazon
        data << quint16(0); // Level
        data << quint16(0); // GuildName

        // NATION_ID
        data << quint32(0); // NationId

        // NATION_SYNCHRO
        data << quint64(0); // rank
        data << quint64(0); // jobs
        data << quint64(0); // vote
        data << quint8(0); // governmentOpinion
        data << quint8(0); // isCandidate

        // SOCIAL_STATES
        data << quint8(0); // afkState
        data << quint8(0); // dndState

        // PET
        data << quint8(0); // hasPet

        // ACCOUNT_INFORMATION_REMOTE
        data << quint32(0); // subscriptionLevel
        data << quint16(0); // additionalRights size

        // COMPANION_CONTROLLER_ID
        data << quint64(0); // controllerId
        data << quint64(0); // companionId
    }
    data.EndBlock<quint16>();

    SendPacket(data);
}
Пример #28
0
void U2Bits::writeInt32(uchar* bits, int pos, qint32 val) {
    writeInt8(bits, pos + 24, qint8(val));
    writeInt8(bits, pos + 16, qint8(val >> 8));
    writeInt8(bits, pos + 8, qint8(val >> 16));
    writeInt8(bits, pos, qint8(val >> 24));
}
Пример #29
0
void Base::writeEnd(QDataStream &stream) const
{
    stream << qint8(FRAME_END);
    stream.device()->waitForBytesWritten(1000);
}
Пример #30
0
    void OnActive(Character* character, InteractiveElementType /*type*/)
    {
        // Seuelement une instance du script ou bien ? Du coup va poser des problèmes
        // si plusieurs joueurs en même temps ? Du coup gérer la création de nouvelles instances de scripts ?
        m_char = character;

        // Envoie comme quoi l'élémentId n'est plus "usable" (différence avec le paquet de spawn 200)
        WorldPacket data(SMSG_INTERACTIVE_ELEMENT_UPDATE);

        data << quint64(20114); // Instance ElementId

        data.StartBlock<quint16>();
        {
            data << quint8(1); // BlockCount

            data << quint8(2); // blockId
            data << quint32(6); // offset

            data << quint8(2); // BlockId

            data << quint16(1); // ?
            data << quint8(1); // isVisible
            data << quint8(0); // isUsable
            data << quint8(0); // ?
            data << quint8(0); // ?
            data << quint8(0); // ?
            data << quint32(0); // ?
        }
        data.EndBlock<quint16>();

        character->GetSession()->SendPacket(data);

        // Spawn Wapin
        WorldPacket data2(SMSG_UPDATE_OBJECT);
        data2 << quint8(0);
        data2 << quint8(1);

        data2 << quint8(1);
        data2 << qint64(-1706442045669898);

        data2.StartBlock<quint16>();
        {
            data2 << quint8(7);

            // GUID
            data2 << qint64(-1706442045669898);

            // IDENTITY
            data2 << quint8(1);
            data2 << qint64(-1);

            // NAME
            data2 << quint16(0);

            // BREED
            data2 << quint16(2644);

            // POSITION
            data2 << qint32(0); // X
            data2 << qint32(-17); // Y
            data2 << qint16(0); // Z
            data2 << quint16(-1); // InstanceId
            data2 << quint8(3); // Direction

            // APPEARANCE
            data2 << quint8(1); // Show

            // PUBLIC_CHARACTERISTICS
            data2 << quint16(1); // Level
            data2 << quint16(0); // States size

            // FIGHT_PROPERTIES
            data2 << quint8(0); // hasProperties

            // FIGHT
            data2 << qint32(-1); // currentFightId
            data2 << quint8(0); // isKo
            data2 << quint8(0); // isDead
            data2 << quint8(0); // isSummoned
            data2 << quint8(0); // isFleeing
            data2 << qint8(-1); // obstacleId
            data2 << quint8(0); // hasSummon

            // EQUIPMENT_APPEARANCE
            data2 << quint8(0); // size

            // RUNNING_EFFECTS
            data2 << quint8(1); // hasInFightData
            data2 << quint16(1); // data size
            data2 << quint8(13); // data

            data2 << quint8(1); // hasOutFightData
            data2 << quint16(0); // size

            // CURRENT_MOVEMENT_PATH
            data2 << quint8(0); // hasCurrentPath

            // WORLD_PROPERTIES
            data2 << quint8(0); // hasProperties

            // GROUP
            data2 << quint64(79645873605204); // PartyId
            data2 << quint16(1); // Members size
            data2 << qint16(-1); // breedId
            data2 << qint16(-1); // Level

            // TEMPLATE
            data2 << quint16(0); // sightRadius
            data2 << quint16(0); // aggroRadius

            // COLLECT
            data2 << quint16(0);

            // OCCUPATION
            data2 << quint8(0);

            // XP
            data2 << quint64(0);

            // XP_CHARACTERISTICS
            data2 << quint16(0);
            data2 << quint16(0);
            //data2 << quint16(0);
            //data2 << quint32(0);

            // Pourquoi sniff size 110 et la on est déjà à 117 ??
        }
        data2.EndBlock<quint16>();

        character->GetSession()->SendPacket(data2);

        // Activation du script (mouvement de la fenêtre entre autre)
        // Root aussi le joueur ?
        WorldPacket data3(SMSG_SCENARIO_SCRIPT);
        data3 << quint8(0); // Event
        data3 << quint32(12603); // Function
        data3 << quint32(1611); // ScenarioId
        data3 << quint8(1); // Long size?
        data3 << qint64(-1706442045669898); // Param
        character->GetSession()->SendPacket(data3);

        // Spawn Kano
        WorldPacket data4(SMSG_UPDATE_OBJECT);
        data4 << quint8(0);
        data4 << quint8(1);

        data4 << quint8(1);
        data4 << qint64(-1706442045669878);

        data4.StartBlock<quint16>();
        {
            data4 << quint8(7);

            // GUID
            data4 << qint64(-1706442045669878);

            // IDENTITY
            data4 << quint8(1);
            data4 << qint64(-1);

            // NAME
            data4 << quint16(0);

            // BREED
            data4 << quint16(2694);

            // POSITION
            data4 << qint32(0); // X
            data4 << qint32(-21); // Y
            data4 << qint16(3); // Z
            data4 << quint16(-1); // InstanceId
            data4 << quint8(3); // Direction

            // APPEARANCE
            data4 << quint8(1); // Show

            // PUBLIC_CHARACTERISTICS
            data4 << quint16(100); // Level
            data4 << quint16(0); // States size

            // FIGHT_PROPERTIES
            data4 << quint8(0); // hasProperties

            // FIGHT
            data4 << qint32(-1); // currentFightId
            data4 << quint8(0); // isKo
            data4 << quint8(0); // isDead
            data4 << quint8(0); // isSummoned
            data4 << quint8(0); // isFleeing
            data4 << qint8(-1); // obstacleId
            data4 << quint8(0); // hasSummon

            // EQUIPMENT_APPEARANCE
            data4 << quint8(0); // size

            // RUNNING_EFFECTS should be wrong
            data4 << quint8(1); // hasInFightData
            data4 << quint16(1); // data size
            data4 << quint8(13); // data

            data4 << quint8(1); // hasOutFightData
            data4 << quint16(0); // size

            // CURRENT_MOVEMENT_PATH
            data4 << quint8(0); // hasCurrentPath

            // WORLD_PROPERTIES
            data4 << quint8(0); // hasProperties

            // GROUP
            data4 << quint64(79645873605204); // PartyId
            data4 << quint16(1); // Members size
            data4 << qint16(-1); // breedId
            data4 << qint16(-1); // Level

            // TEMPLATE
            data4 << quint16(0); // sightRadius
            data4 << quint16(0); // aggroRadius

            // COLLECT
            data4 << quint16(0);

            // OCCUPATION
            data4 << quint8(0);

            // XP
            data4 << quint64(0);

            // XP_CHARACTERISTICS
            data4 << quint16(0);
            data4 << quint16(0);
            //data4 << quint16(0);
            //data4 << quint32(0);

            // Pourquoi sniff size 110 et la on est déjà à 117 ??
        }
        data4.EndBlock<quint16>();

        character->GetSession()->SendPacket(data4);

        // Texte : "Hé toi le nouveau" etc.
        WorldPacket data5(SMSG_SCENARIO_SCRIPT);
        data5 << quint8(0); // Event
        data5 << quint32(12687); // Function
        data5 << quint32(1611); // ScenarioId
        data5 << quint8(1); // Params size?
        data5 << qint64(-1706442045669878); // Param
        character->GetSession()->SendPacket(data5);

        // Flèche sur le wapin
        WorldPacket data6(SMSG_SCENARIO_SCRIPT);
        data6 << quint8(0); // Event
        data6 << quint32(12691); // Function
        data6 << quint32(1611); // ScenarioId
        data6 << quint8(1); // Long size?
        data6 << qint64(-1706442045669898); // Param
        character->GetSession()->SendPacket(data6);

        m_spawned = true;
    }