亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? packets.cpp

?? wyd server 753 development with c++ and codeblocks
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/* by My Destiny Team */
#include "basedef.h"
#include "packets.h"
#include "server.h"// Funcoes para o tratamento dos pacotes
cPacket Packet;
// Buffer para escrita dos pacoteschar buf[8192];
cPacket::cPacket()
{
}

cPacket::~cPacket()
{
}

// Verifica e executa o pacote enviado pelo client
void cPacket::ClientControl(sSocket &sSock, pHeader *pServer)
{    cClient *Client = (cClient*)List.Get(sSock.clientID);    if(Client == NULL && pServer->opCode != 0x20D)    { /* Client Invalido */        Log(WARN, "check INVALID CLIENT: clientID = %d", sSock.clientID);        return ;    }
    switch(pServer->opCode)
    {
        case 0x020D: /* Login Packet */ break;        case 0x03A0: Log(INFO, "Ping..."); /* Ping */ break;        // Pacotes da Database        case 0x020F: RequestCreateChar(Client, sSock, (u8*)pServer); break;        case 0x0211: RequestDeleteChar(Client, sSock, (u8*)pServer); break;        case 0x0213: RequestEnterGame(Client, sSock, (u8*)pServer); break;        case 0x0215: RequestReturnCharList(Client, sSock, (u8*)pServer); break;
        default:            Log(INFO, "[ClientControl] Unknown Packet 0x%03X.",
                pServer->opCode); break;
    }
}
// Verifica e executa o pacote enviado pela databasevoid cPacket::DBControl(sSocket &sSock, pHeader *pServer){    if(pServer->clientID != INVALID_ID)    { // ID valido        cClient *Client = (cClient*)List.Get(pServer->clientID);        if(Client == NULL)        { // Client Invalido            Log(WARN, "check INVALID CLIENT: clientID = %d", pServer->clientID);            return ;        }        // Atualiza a informacao do client        Client->qDataServ = false;        // Pacotes que sao para os clients        switch(pServer->opCode)        {            case 0x002: RequestMessage(sSock, Client, (pGS_2h*)pServer); break;            case 0x003: RequestDisconnectClient(sSock, (pGS_3h*)pServer); break;            case 0x004: RequestAccount(sSock, Client, (pGS_4h*)pServer); break;            case 0x005: RequestCharList(sSock, Client, (pGS_5h*)pServer); break;            case 0x006: RequestCharacter(sSock, Client, (pGS_6h*)pServer); break;            default:                Log(NORMAL, "[DBControl] Unknown Packet 0x%03X.",                    pServer->opCode); break;        }    }    else    { // Pacote utilizado somente para o servidor        switch(pServer->opCode)        {            case 0x001: RequestLog(sSock, (pGS_1h*)pServer); break;            default:                Log(NORMAL, "[DBControl] Unknown Packet 0x%03X.",                    pServer->opCode); break;        }    }}/**    Pacotes enviados pelo client**/// Pacote para o login do client
void cPacket::RequestLogin(cClient *Client, sSocket &sSock, pCL_20Dh *pServer)
{    if(Client->qDataServ)    { // Client ja enviou o pedido de login        SendServerMessage(sSock, Server.GetMessage(DATABASEQUERY));    }    else if(pServer->cliVer < CLIENT_VERSION)    { // Client Invalido        SendServerMessage(sSock, Server.GetMessage(WRONGCLIENT));    }    else    {        // Header        pDB_3h *pPacket = (pDB_3h*)pak;        pPacket->Header.packetSize = sizeof(pDB_3h);        pPacket->Header.opCode = 0x003;        pPacket->Header.clientID = sSock.clientID;        // Nome e senha do client        strncpy(pPacket->username, pServer->userName, 16);        strncpy(pPacket->password, pServer->passWord, 12);        // Envia o pacote        cClient::Send(Server.GetDatabaseSocket(), pak, len);        // Atualiza a informacao do client        Client->qDataServ = true;        return ;    }    Server.DeleteSocket(sSock);
}
// Pacote para a criacao do personagemvoid cPacket::RequestCreateChar(cClient *Client, sSocket &sSock, u8 *pServer){    if(Client->qDataServ)    { // Client ja enviou um pedido para criar um personagem        SendServerMessage(sSock, Server.GetMessage(DATABASEQUERY));        return ;    }    // Header    pDB_5h *pPacket = (pDB_5h*)pak;    pPacket->Header.packetSize = sizeof(pDB_5h);    pPacket->Header.opCode = 0x005;    pPacket->Header.clientID = sSock.clientID;    // Posicao do personagem    pPacket->charindex = GetInt(12);    // Informacoes dos personagens    pPacket->charinfo = Client->Account.Info.Flag.CharInfo;    // Nome do usuario    strncpy(pPacket->username, Client->Account.Username, 16);    // Nome do personagem    strncpy(pPacket->charname, ptr(16), 16);    // Classe do personagem    pPacket->charclass = GetInt(32);    // Envia o pacote    cClient::Send(Server.GetDatabaseSocket(), pak, len);    // Atualiza a informacao do client    Client->qDataServ = true;}// Envia o pedido para a database, para apagar o personagemvoid cPacket::RequestDeleteChar(cClient *Client, sSocket &sSock, u8 *pServer){    if(Client->qDataServ)    { // Client ja enviou um pedido para deletar        SendServerMessage(sSock, Server.GetMessage(DATABASEQUERY));        return ;    }    else if(strcmp(ptr(32), Client->Account.Password) != 0)    { // Client errou a senha        SendServerMessage(sSock, Server.GetMessage(INVALIDPASSWORD));        return ;    }    // Header    pDB_6h *pPacket = (pDB_6h*)pak;    pPacket->Header.packetSize = sizeof(pDB_6h);    pPacket->Header.opCode = 0x006;    pPacket->Header.clientID = sSock.clientID;    // Posicao do personagem    pPacket->charindex = GetInt(12);    // Informacoes dos personagens    pPacket->charinfo = Client->Account.Info.Flag.CharInfo;    // Nome do usuario    strncpy(pPacket->username, Client->Account.Username, 16);    // Nome do personagem    strncpy(pPacket->charname, ptr(16), 16);    // Envia o pacote    cClient::Send(Server.GetDatabaseSocket(), pak, len);    // Atualiza a informacao do client    Client->qDataServ = true;}// Envia o pedido para entra no jogovoid cPacket::RequestEnterGame(cClient *Client, sSocket &sSock, u8 *pServer){    // Header    pDB_7h *pPacket = (pDB_7h*)pak;    pPacket->Header.packetSize = sizeof(pDB_7h);    pPacket->Header.opCode = 0x007;    pPacket->Header.clientID = sSock.clientID;    // Posicao do personagem    pPacket->charindex = GetInt(12);    // Informacoes dos personagens    pPacket->charinfo = Client->Account.Info.Flag.CharInfo;    // Nome do usuario    strncpy(pPacket->username, Client->Account.Username, 16);    // Envia o pacote    cClient::Send(Server.GetDatabaseSocket(), pak, len);    // Atualiza a informacao do client    Client->qDataServ = true;}// Retorna o client para a lista dos personagensvoid cPacket::RequestReturnCharList(cClient *Client, sSocket &sSock, u8 *pServer){
    if(Client->Character != NULL)
    { // Salva o personagem
        Client->Save(SAVE_CHARACTER);

        delete Client->Character;
        Client->Character = NULL;
    }
    // Header    SetShort(12, 0);    SetShort(0x116, 4);    SetShort(Client->clientID, 6);    // Envia o pacote    cClient::Send(sSock, pak, len);}/**    Pacotes enviados para o client**/// Envia uma mensagem para o client
void cPacket::SendServerMessage(sSocket &sSock, const char *str, ...)
{    // Header    SetShort(108, 0);    SetShort(0x0101, 4);    SetShort(0, 6);
    // Mensagem
    va_list pArgList;
	va_start(pArgList, str);
	vsprintf(ptr_buf(12), str, pArgList);
	va_end(pArgList);
    // Envia o pacote
	cClient::Send(sSock, pak, len);
}
// Envia o pacote para entra nos personagensvoid cPacket::SendCharList(cClient *Client, sCharacter *Character, bool isReSend){    // Header    SetShort(isReSend ? 756 : 1824, 0);    SetShort(isReSend ? 0x112 : 0x10E, 4);    SetShort(Client->clientID, 6);    sCharacter *ptrchar = &Character[0];    for(u32 x = 0; x < 4; ++x, ++ptrchar)    {        // Posicao da Gema        SetShort(ptrchar->Last.X, (2 * x) + 12);        SetShort(ptrchar->Last.Y, (2 * x) + 20);        // Nome do personagem        SetString(ptrchar->Name, (16 * x) + 28);        // Normal Status        SetBytes(&ptrchar->Status, (28 * x) + 92, sizeof(ptrchar->Status));        // Equipamentos        SetBytes(ptrchar->Equip, (128 * x) + 204, sizeof(ptrchar->Equip));        // Infos        SetInt(ptrchar->Gold, (4 * x) + 724);        SetInt(ptrchar->Exp, (4 * x) + 740);    }    if(!isReSend)    { // Envia o char list depois de logar        // Items do bau        SetBytes(Client->Account.Storage, 756, sizeof(Client->Account.Storage));        // Dinheiro no bau        SetInt(Client->Account.sGold, 1780);        // Nome do usuario

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品原创巨作av| 欧美日韩国产另类一区| 欧美日韩一区二区在线观看视频| 日韩精品一区二区三区视频播放 | 色综合咪咪久久| 日韩美一区二区三区| 亚洲在线视频网站| 成人动漫一区二区| 精品国产乱码久久久久久牛牛| 亚洲欧美偷拍卡通变态| 国产很黄免费观看久久| 欧美剧在线免费观看网站| 中文字幕在线观看不卡视频| 国产乱码一区二区三区| 精品日韩在线一区| 毛片av中文字幕一区二区| 欧美综合一区二区| 一区二区三区日本| 91在线porny国产在线看| 中文字幕免费观看一区| 国产福利精品一区二区| 久久久久久久免费视频了| 蜜桃视频一区二区三区| 日韩一区二区视频在线观看| 日本免费在线视频不卡一不卡二| 欧美日韩视频一区二区| 午夜精品久久一牛影视| 欧美久久久久久久久中文字幕| 亚洲国产日韩精品| 欧美日韩中文字幕一区二区| 亚洲一区二区三区免费视频| 在线免费亚洲电影| 午夜影院在线观看欧美| 欧美日韩高清一区二区三区| 亚洲综合一区在线| 欧美日韩国产bt| 美女在线一区二区| 久久久久久久av麻豆果冻| 国产69精品久久99不卡| 中文字幕欧美国产| 色欧美片视频在线观看在线视频| 亚洲人亚洲人成电影网站色| 欧美在线免费播放| 日韩激情在线观看| 精品剧情在线观看| 粉嫩aⅴ一区二区三区四区五区| 中文在线资源观看网站视频免费不卡 | 国产成人免费9x9x人网站视频| 国产日产亚洲精品系列| 成人91在线观看| 亚洲成精国产精品女| 欧美精品一区二区精品网| 国产成人精品在线看| 亚洲综合区在线| 日韩欧美中文一区二区| 国产成人午夜视频| 亚洲一区电影777| 精品av综合导航| 99久久久久久| 青青草一区二区三区| 欧美高清在线一区| 欧美日韩精品一区视频| 国产一区二区h| 亚洲综合图片区| 国产三级一区二区| 在线视频你懂得一区| 国产风韵犹存在线视精品| 亚洲bt欧美bt精品777| 国产日产欧产精品推荐色| 欧美三电影在线| 国产91在线观看| 日韩av成人高清| 综合欧美亚洲日本| 久久久青草青青国产亚洲免观| 色综合久久中文字幕综合网| 久久aⅴ国产欧美74aaa| 亚洲一区二区精品视频| 国产女人18毛片水真多成人如厕| 欧美喷潮久久久xxxxx| 白白色 亚洲乱淫| 久久爱另类一区二区小说| 亚洲成人自拍网| 亚洲人成网站色在线观看| 日韩精品一区二区三区swag| 91九色02白丝porn| 国产盗摄视频一区二区三区| 蜜桃传媒麻豆第一区在线观看| 亚洲丝袜自拍清纯另类| 国产午夜精品久久久久久免费视| 3d动漫精品啪啪1区2区免费| 91亚洲午夜精品久久久久久| 国产高清久久久| 久久av资源站| 免费人成精品欧美精品| 亚洲一区二区三区视频在线| 亚洲视频网在线直播| 欧美激情中文字幕一区二区| 久久久综合激的五月天| 欧美一区二区免费| 欧美日韩三级在线| 欧美午夜寂寞影院| 色综合视频一区二区三区高清| 9i看片成人免费高清| 高清成人在线观看| 国产盗摄女厕一区二区三区| 国产成人午夜片在线观看高清观看| 麻豆精品视频在线观看免费| 麻豆久久久久久久| 久久99国产精品成人| 麻豆精品视频在线观看免费| 奇米888四色在线精品| 日本美女视频一区二区| 奇米精品一区二区三区在线观看 | 精品国产成人系列| 日韩午夜电影在线观看| 日韩精品一区二区三区中文精品| 日韩女同互慰一区二区| 精品国产青草久久久久福利| 久久久噜噜噜久久人人看| 国产欧美日韩激情| 亚洲天堂a在线| 亚洲欧美日韩电影| 午夜不卡av在线| 麻豆成人在线观看| 国产福利一区二区三区视频| 成人动漫视频在线| 欧美视频你懂的| 日韩欧美的一区| 国产精品无圣光一区二区| 国产精品久久久久天堂| 亚洲美女少妇撒尿| 日韩中文字幕麻豆| 国产乱码精品一区二区三区五月婷| 国产精品乡下勾搭老头1| 波多野结衣视频一区| 欧美日韩中文国产| 久久亚洲私人国产精品va媚药| 亚洲国产精品二十页| 亚洲自拍另类综合| 黄网站免费久久| 91丨九色丨蝌蚪丨老版| 欧美精品xxxxbbbb| 国产午夜精品理论片a级大结局| 亚洲精品高清在线| 秋霞午夜鲁丝一区二区老狼| 岛国av在线一区| 91.xcao| 国产精品狼人久久影院观看方式| 亚洲综合网站在线观看| 极品美女销魂一区二区三区| 91网站最新地址| 日韩欧美一卡二卡| 有码一区二区三区| 久久国产精品99久久人人澡| 96av麻豆蜜桃一区二区| 日韩色在线观看| 亚洲日本在线看| 国产裸体歌舞团一区二区| 欧美性感一类影片在线播放| 日本一区二区三区四区在线视频| 亚洲成在人线在线播放| 成人一区二区三区中文字幕| 欧美精品电影在线播放| 亚洲免费资源在线播放| 国产一区在线视频| 欧美剧情电影在线观看完整版免费励志电影| 2020日本不卡一区二区视频| 亚洲第一av色| 99久久久久久| 中文成人av在线| 久久99精品国产麻豆婷婷洗澡| 欧美色精品在线视频| 亚洲欧洲国产日韩| 国产毛片一区二区| 精品免费视频一区二区| 亚洲一区影音先锋| 91同城在线观看| 中日韩免费视频中文字幕| 精品无码三级在线观看视频 | 色老汉一区二区三区| 国产精品欧美久久久久一区二区| 日韩av电影免费观看高清完整版 | 亚洲国产一区二区在线播放| av中文字幕不卡| 国产精品视频免费| 国产精品一二三四| 亚洲精品在线免费播放| 麻豆成人免费电影| 日韩欧美亚洲国产另类| 日本不卡123| 538prom精品视频线放| 五月激情综合婷婷| 欧美精品一二三| 午夜精品久久久久影视| 欧美绝品在线观看成人午夜影视| 亚洲午夜免费福利视频| 欧美日韩一级片在线观看| 亚洲美女区一区| 在线亚洲+欧美+日本专区| 夜夜亚洲天天久久|