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

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

?? packets.cpp

?? WYD Server 753 (Development)
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/* by My Destiny Team */
#include "server.h"
#include "packets.h"
// Funcoes para o tratamento dos pacotes
cPacket Packet;

cPacket::cPacket()
{
}

cPacket::~cPacket()
{
}

// Verifica se o pacote eh valido
//
// Retorna false se o pacote eh invalido
// Retorna true se o pacote eh valido
bool cPacket::PacketControl(sSocket &sSock, pHeader *pServer)
{
    switch(pServer->opCode)
    {
        case 0x001: /* Login Packet */ break;        case 0x002: /* Ping */ break;        case 0x003: RequestLogin(sSock, (pDB_3h*)pServer); break;        case 0x004: RequestSaveAccount(sSock, (pDB_4h*)pServer); break;        case 0x005: RequestCreateChar(sSock, (pDB_5h*)pServer); break;        case 0x006: RequestDeleteChar(sSock, (pDB_6h*)pServer); break;        case 0x007: RequestEnterGame(sSock, (pDB_7h*)pServer); break;
        case 0x008: RequestSaveCharacter(sSock, (pDB_8h*)pServer); break;
        case 0x009: RequestSaveAccountAndCharacter(sSock, (pDB_9h*)pServer); break;
        default:            Log(NORMAL, "[PacketControl] Unknown Packet 0x%03X.",
                pServer->opCode); break;
    }

    return true;
}// Faz o login do client no servidorvoid cPacket::RequestLogin(sSocket &sSock, pDB_3h *pServer){    pGS_4h *pPacket = (pGS_4h*)buf;    // Preven??o contra crash na leitura das strings    pServer->username[15] = '\0';    pServer->password[11] = '\0';    FILE *fp = Server.OpenFile(pServer->username, "r+b", ACCOUNT);    if(fp != NULL)    { // Abriu a conta do client com sucesso        fread(&pPacket->account, sizeof(sAccount), 1, fp);        if(pPacket->account.bantime <= time(NULL))        { // Verifica a senha do client            if(pPacket->account.errorLogin >= 3 && pPacket->account.lasterror >= time(NULL))            { // Client errou a senha 3 vezes ou mais em menos de 5 minutos                pPacket->account.lasterror += 10;                // Conta banida por mais 10 segundos                SendServerMessage(sSock, pServer->Header.clientID,                    Server.GetMessage(PASS3TIMES));            }            else if(strcmp(pServer->password, pPacket->account.Password) == 0)            { // Verifica se o client ja esta online                sAccountList *acc = Server.ContainsAccount(pServer->username);                if(acc != NULL)                { // Conta ja esta online                    sSocket &sServer = Server.Get(acc->gsIndex);                    // Envia mensagem e desconecta o client que esta na conta                    SendServerMessage(sServer, acc->clientID, Server.GetMessage(BANNED2LOGIN));                    SendDisconnectClient(sServer, acc->clientID);                    // Envia a mensagem para o client que tentou conectar                    SendServerMessage(sSock, pServer->Header.clientID, Server.GetMessage(BANNED2LOGIN));                    // Banido por 10 minutos por conexao simultanea                    pPacket->account.bantime = time(NULL) + 600;                }                else                { // Envia os pacotes de resposta para o servidor                    // Header                    pPacket->Header.packetSize = sizeof(pGS_4h);                    pPacket->Header.opCode = 0x004;                    pPacket->Header.clientID = pServer->Header.clientID;                    // Zera o numero de erros de senha                    pPacket->account.errorLogin = 0;                    // Atualiza o arquivo da conta                    fseek(fp, 0, SEEK_SET);                    fwrite(&pPacket->account, sizeof(sAccount), 1, fp);                    // Envia o pacote para atualizar a conta do client                    cClient::Send(sSock, pPacket, sizeof(pGS_4h));                    // Header                    pGS_5h *charPacket = (pGS_5h*)buf;                    charPacket->Header.packetSize = sizeof(pGS_5h);                    charPacket->Header.opCode = 0x005;                    charPacket->Header.clientID = pServer->Header.clientID;                    charPacket->isReSend = false;                    // Le todos os personagens do client                    fread(charPacket->Character, sizeof(sCharacter), 4, fp);                    fclose(fp);                    // Envia o pacote para mandar o client para o char list                    cClient::Send(sSock, charPacket, sizeof(pGS_5h));                    // Adiciona o client na lista dos conectados                    acc = new sAccountList;                    strncpy(acc->name, pServer->username, 16);                    acc->gsIndex = sSock.clientID;                    acc->clientID = pServer->Header.clientID;                    Server.AddAccount(acc);                    return ;                }            }            else            { // Aumenta o numero de vezes que o client errou a senha                pPacket->account.errorLogin++;                pPacket->account.lasterror = time(NULL) + 300;                SendServerMessage(sSock, pServer->Header.clientID,                    Server.GetMessage(PASSWORDWRONG));            }            // Atualiza a conta do usuario            fseek(fp, 0, SEEK_SET);            fwrite(&pPacket->account, sizeof(sAccount), 1, fp);        }        else        { // Envia a mensagem pro client do ban da conta            SendServerMessage(sSock, pServer->Header.clientID,                Server.GetMessage(ACCOUNTBANNED));        }        fclose(fp);    }    else    { // Envia a mensagem de conta nao encontrada para o client        SendServerMessage(sSock, pServer->Header.clientID,            Server.GetMessage(ACCOUNT_NOTFOUND));    }    // Desconecta o client    SendDisconnectClient(sSock, pServer->Header.clientID);}// Salva a conta do clientvoid cPacket::RequestSaveAccount(sSocket &sSock, pDB_4h *pServer){    FILE *fp = Server.OpenFile(pServer->account.Username, "r+b", ACCOUNT);    if(fp != NULL)    { // Escreve a conta no arquivo do client        fwrite(&pServer->account, sizeof(sAccount), 1, fp);        fclose(fp);        // Deleta a conta dos usuarios conectados        Server.DeleteAccount(sSock.clientID, pServer->Header.clientID);

        Log(INFO, "Save Account [%s].", pServer->account.Username);    }    else    { // Nao foi possivel abrir o arquivo da conta        Log(INFO, "check INVALID USERNAME: \"%s\"", pServer->account.Username);    }}// Cria um personagem na conta do clientvoid cPacket::RequestCreateChar(sSocket &sSock, pDB_5h *pServer){    // Preven?ao contra o crash    pServer->charclass &= 3;    pServer->charindex &= 3;    // Verifica se ja existe um personagem neste slot    if(pServer->charinfo & (1 << pServer->charindex))    { // Existe um personagem neste slot        SendServerMessage(sSock, pServer->Header.clientID,            Server.GetMessage(ERRORCREATESLOT));        return ;    }    // Abre o arquivo do personagem    FILE *fp = Server.OpenFile(pServer->charname, "rb", CHARACTER);    if(fp != NULL)    { // Ja existe um personagem com este nome        fclose(fp);        // Envia a mensagem de erro pro client        SendServerMessage(sSock, pServer->Header.clientID,            Server.GetMessage(ERRORCREATECHAR), pServer->charname);        return ;    }    fp = Server.OpenFile(pServer->charname, "wb", CHARACTER);    if(fp == NULL)    { // N?o foi possivel criar o arquivo        SendServerMessage(sSock, pServer->Header.clientID,            Server.GetMessage(ERRORCREATEFILE), pServer->charname);        return ;    }    // Escreve o nome da conta    fwrite(pServer->username, 16, 1, fp);    fclose(fp);    // Pega o ponteiro das informacoes do char base    sCharacter *bchar = &charBase[pServer->charclass];    // Abre o arquivo da conta    fp = Server.OpenFile(pServer->username, "r+b", ACCOUNT);    if(fp == NULL)    { // Arquivo da conta nao foi encontrado        SendServerMessage(sSock, pServer->Header.clientID,            Server.GetMessage(ERRORCREATEACC), pServer->username);        return ;    }    // Guarda o valor real da cidadania do personagem base    u32 bCitizen = bchar->Equip[0].EFV3;    if(bCitizen == 16)    { // Edita a cidadania do personagem        bchar->Equip[0].EFV3 = sSock.clientID;    }    // Troca o nome do personagem    strncpy(bchar->Name, pServer->charname, 12);    // Vai para o offset do personagem que sera criado    fseek(fp, sizeof(sAccount) + (sizeof(sCharacter) * pServer->charindex), SEEK_SET);    // Escreve o personagem na conta    fwrite(bchar, sizeof(sCharacter), 1, fp);    fseek(fp, sizeof(sAccount), SEEK_SET);    // Registra o personagem nas informacoes da conta    pServer->charinfo |= (1 << pServer->charindex);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久er精品视频| 色av综合在线| 大美女一区二区三区| 成人精品一区二区三区中文字幕| 蜜芽一区二区三区| 成人夜色视频网站在线观看| 一本大道久久a久久精品综合| 欧美日韩在线播| 精品国产一区二区三区久久久蜜月| 精品成人佐山爱一区二区| 国产精品丝袜一区| 午夜av一区二区| 一本一本大道香蕉久在线精品 | 国产盗摄一区二区三区| 色88888久久久久久影院野外 | 一区二区三区国产| 日韩一区二区影院| 91黄色在线观看| 欧美电影免费观看高清完整版在线观看| 麻豆专区一区二区三区四区五区| 国产农村妇女毛片精品久久麻豆| 91精品午夜视频| 色婷婷国产精品| 欧美男人的天堂一二区| 欧美精品视频www在线观看| 欧洲精品视频在线观看| 欧美一级精品大片| 亚洲婷婷在线视频| 亚洲高清在线精品| 国产乱码精品一区二区三| 国产不卡免费视频| 日韩精品专区在线影院重磅| 中文字幕欧美日本乱码一线二线| 亚洲成精国产精品女| 色婷婷久久久久swag精品 | 成人免费视频一区| 久久在线观看免费| 成人性生交大片免费看中文| 国产欧美精品一区二区色综合 | 欧美久久免费观看| 亚洲曰韩产成在线| 欧美亚洲丝袜传媒另类| 亚洲特黄一级片| 色偷偷成人一区二区三区91| 91精品国产综合久久久蜜臀粉嫩| 亚洲激情男女视频| 日韩一区二区三区电影在线观看| 精品中文字幕一区二区| 国产欧美日韩综合精品一区二区| 成人avav影音| 亚洲va国产va欧美va观看| 日韩免费一区二区| 色婷婷久久一区二区三区麻豆| 日韩中文字幕区一区有砖一区| 久久精品日产第一区二区三区高清版 | 亚洲视频一区在线| 91精品国产福利在线观看 | 亚洲三级在线免费观看| 欧美中文字幕一区| 国产传媒久久文化传媒| 亚洲午夜一二三区视频| 国产精品理论在线观看| 欧美一个色资源| 欧美在线免费视屏| 国产福利精品一区| 蜜桃视频第一区免费观看| 国产欧美日韩精品一区| 欧美日韩久久久一区| 97久久久精品综合88久久| 国产乱子伦视频一区二区三区| 亚洲同性同志一二三专区| 亚洲欧洲日产国产综合网| 中文字幕一区在线观看视频| 欧美tickling网站挠脚心| 337p亚洲精品色噜噜| 精品婷婷伊人一区三区三| 欧美在线小视频| 精品视频一区 二区 三区| caoporn国产一区二区| 国内久久婷婷综合| 99re这里都是精品| 色狠狠桃花综合| 欧美日本韩国一区二区三区视频 | 欧美在线一二三| 色综合天天综合色综合av| 国产精品一区免费在线观看| 精品一区二区三区不卡| 91偷拍与自偷拍精品| 在线播放91灌醉迷j高跟美女| 精品国产一区二区三区忘忧草 | 在线观看成人小视频| 欧美日韩一本到| 精品不卡在线视频| 一区二区三区日韩在线观看| 亚洲h在线观看| 国产91在线观看丝袜| 在线影视一区二区三区| 欧美一级免费大片| 欧美国产一区视频在线观看| 亚洲午夜久久久久久久久久久| 精品一区二区三区免费| 欧美人与性动xxxx| 亚洲第一综合色| 色综合久久中文综合久久97| 久久久99久久精品欧美| 日本vs亚洲vs韩国一区三区二区| 91麻豆国产自产在线观看| 久久免费美女视频| 国产精品综合网| 国产精品久久久久永久免费观看| 免费观看在线色综合| 色成人在线视频| 亚洲六月丁香色婷婷综合久久| 不卡的电视剧免费网站有什么| 国产精品青草久久| 丰满白嫩尤物一区二区| 欧美经典一区二区| 国产精品综合av一区二区国产馆| 欧美三级电影在线看| 五月婷婷另类国产| 日韩精品一区二区三区蜜臀| 开心九九激情九九欧美日韩精美视频电影 | bt欧美亚洲午夜电影天堂| 久久免费电影网| 福利一区在线观看| 国产精品视频麻豆| 国产黑丝在线一区二区三区| 成人欧美一区二区三区黑人麻豆| 99视频精品免费视频| 亚洲一级在线观看| 在线成人午夜影院| 国产精品12区| 亚洲一区二区三区四区在线| 精品美女一区二区| 欧美视频在线一区二区三区 | 国产女同互慰高潮91漫画| 欧美日韩精品一区视频| 麻豆国产欧美一区二区三区| 中文字幕av在线一区二区三区| 97久久超碰国产精品电影| 激情综合网av| 精品一区二区三区不卡| 成人免费在线播放视频| 日韩一级高清毛片| 欧美在线综合视频| 国产一区二区三区日韩| 亚洲六月丁香色婷婷综合久久| 久久亚洲私人国产精品va媚药| 色综合久久久久综合体| 成人性生交大片免费看中文网站| 日本免费新一区视频| 亚洲 欧美综合在线网络| 国产精品久久久久久亚洲毛片| 欧美精品一区二区三区很污很色的 | 1000精品久久久久久久久| 精品久久久久久久久久久久久久久| 欧美日韩午夜影院| 色综合一个色综合| 99久久国产综合精品女不卡| 激情综合五月天| 成人白浆超碰人人人人| 欧美亚洲日本国产| 日韩天堂在线观看| 国产网站一区二区三区| 久久精品网站免费观看| 亚洲制服丝袜av| 美腿丝袜亚洲三区| 国产91在线|亚洲| 欧美性一区二区| 日韩精品中午字幕| 久久久久久久久免费| 亚洲综合网站在线观看| 亚洲.国产.中文慕字在线| 韩国三级电影一区二区| 一本大道久久精品懂色aⅴ| 92精品国产成人观看免费| a在线欧美一区| 国产免费观看久久| 久久99日本精品| 欧美日韩一区二区在线观看| 国产亚洲成年网址在线观看| 偷拍日韩校园综合在线| 91成人免费网站| 国产精品护士白丝一区av| 免费在线一区观看| www.日韩在线| 精品美女在线观看| 丝瓜av网站精品一区二区| 波多野结衣精品在线| 欧美精品一区二区三区高清aⅴ | 中文字幕免费不卡| 久久av资源站| 91高清视频在线| 亚洲综合区在线| 国产91富婆露脸刺激对白| 欧美精品一区二区三区蜜桃 | 亚洲成人一区在线| 欧美日韩亚洲综合一区| 天使萌一区二区三区免费观看| 欧美亚洲一区三区|