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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? packets.cpp

?? wyd server 753 development with c++ and codeblocks
?? CPP
?? 第 1 頁 / 共 2 頁
字號(hào):
/* 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);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产一区二区| 欧美日韩国产a| 精品午夜久久福利影院| 日本成人在线电影网| 日本在线不卡视频| 日韩电影免费在线看| 日韩二区三区四区| 日韩福利电影在线观看| 久久电影网站中文字幕| 精品亚洲国内自在自线福利| 久99久精品视频免费观看| 精品一区二区三区免费播放 | 日本系列欧美系列| 日本中文在线一区| 久久99久久精品| 国产精品一区二区在线播放| 国产91精品免费| 粉嫩久久99精品久久久久久夜| eeuss鲁片一区二区三区在线看| 91一区一区三区| 欧美日韩精品免费| 日韩一二三四区| 国产午夜一区二区三区| 中文字幕一区二区三区色视频| 亚洲女人的天堂| 五月激情综合网| 黄色精品一二区| 国产999精品久久久久久绿帽| 99久久久久久| 制服丝袜国产精品| 久久综合久久鬼色| 亚洲三级免费观看| 青青青爽久久午夜综合久久午夜| 韩国三级电影一区二区| 91丨九色porny丨蝌蚪| 欧美日韩国产小视频在线观看| 精品日韩成人av| 国产精品国产三级国产aⅴ入口| 亚洲图片一区二区| 久久 天天综合| 一本久久a久久精品亚洲| 欧美精品v国产精品v日韩精品| 久久综合中文字幕| 亚洲免费在线播放| 精品亚洲国内自在自线福利| 色婷婷综合五月| 精品剧情在线观看| 亚洲人精品一区| 奇米影视一区二区三区| 波多野洁衣一区| 91精品婷婷国产综合久久竹菊| 国产亚洲一区二区三区| 亚洲成人免费av| 麻豆精品精品国产自在97香蕉| 99热这里都是精品| 日韩欧美国产综合一区| 中文字幕中文乱码欧美一区二区| 视频在线观看一区| 成人激情小说乱人伦| 91精品国产欧美一区二区18| 国产精品亲子乱子伦xxxx裸| 日本不卡一区二区| 91色乱码一区二区三区| 久久久欧美精品sm网站 | 9久草视频在线视频精品| 欧美日韩你懂的| 亚洲欧洲日产国码二区| 久久精品国产999大香线蕉| 色综合激情五月| 国产欧美一区二区在线| 麻豆精品一区二区av白丝在线| 91免费观看视频| 欧美激情资源网| 久久国产尿小便嘘嘘尿| 欧美日韩在线一区二区| 国产精品国产自产拍高清av | 国产精品自拍网站| 欧美一区二区三区四区五区| 一区二区三区影院| 成人午夜电影小说| 久久久久久久久久久久久久久99| 麻豆极品一区二区三区| 在线观看91精品国产麻豆| 亚洲男人电影天堂| 不卡的av电影| 国产精品成人在线观看| 国产成人精品亚洲午夜麻豆| 精品捆绑美女sm三区| 青青草国产精品亚洲专区无| 欧美午夜影院一区| 一区二区三区在线免费视频| 99re6这里只有精品视频在线观看| 久久久av毛片精品| 国产精品888| 久久久电影一区二区三区| 久久成人av少妇免费| 在线播放国产精品二区一二区四区| 一区二区三区中文字幕| 日本道精品一区二区三区| 亚洲同性同志一二三专区| 成人免费电影视频| 中文欧美字幕免费| 欧美伊人精品成人久久综合97| 日本一区二区不卡视频| 蜜臀久久99精品久久久久宅男 | 欧美日韩国产一区| 欧美剧在线免费观看网站| 91精品国产入口在线| av电影在线观看不卡| 国产午夜精品一区二区三区视频| 在线免费观看日韩欧美| 亚洲欧美在线观看| 风间由美一区二区av101| 精品裸体舞一区二区三区| 国产精品传媒视频| 亚洲va欧美va人人爽| 久久亚洲精品小早川怜子| 欧美国产成人在线| 精品国产凹凸成av人导航| 日韩精品每日更新| 欧美丰满一区二区免费视频| 日韩国产一二三区| 国产一区二区精品久久| eeuss鲁一区二区三区| 欧美电影一区二区三区| 国产欧美日韩在线| 亚洲一区二区三区国产| 免费成人在线影院| 一区二区三区91| 国产在线播放一区三区四| 国产精品理论片在线观看| 天天操天天干天天综合网| 亚洲婷婷在线视频| 捆绑紧缚一区二区三区视频| 99riav一区二区三区| 欧美高清视频一二三区| 在线观看三级视频欧美| 国产亚洲人成网站| 欧美xxxx在线观看| 久久99热国产| 精品国产91乱码一区二区三区 | 欧美二区三区的天堂| 精品国产一区二区三区av性色 | 亚洲精品福利视频网站| 国产日韩精品久久久| 91色乱码一区二区三区| 国产精品色婷婷久久58| 97精品电影院| 偷拍与自拍一区| 久久精品综合网| 色噜噜狠狠成人网p站| 国产性色一区二区| 色综合久久中文综合久久97| 中文无字幕一区二区三区| 欧美日韩你懂的| 国产高清精品久久久久| 亚洲三级在线免费| 国产精品初高中害羞小美女文| 日韩国产欧美三级| 国产精品国产自产拍高清av| 欧美一级欧美三级| av中文字幕不卡| 日本韩国欧美一区| 国产精品一区二区在线看| 一区二区在线观看av| 2023国产精华国产精品| 欧美综合色免费| 精品国产一区二区三区不卡| 99久久精品国产精品久久| 日本欧美在线观看| 国内不卡的二区三区中文字幕 | 97精品久久久久中文字幕 | 色婷婷综合久久久中文字幕| 国模一区二区三区白浆| 亚洲aⅴ怡春院| 亚洲免费在线视频| 欧美国产乱子伦| 精品国产百合女同互慰| 欧美老女人在线| 日本二三区不卡| 9i看片成人免费高清| 国产精品原创巨作av| 精品一区二区在线观看| 亚洲444eee在线观看| 一区二区三区精品久久久| 国产精品视频线看| 2024国产精品| 日韩欧美国产系列| 欧美精品乱人伦久久久久久| 91色视频在线| 96av麻豆蜜桃一区二区| 成人精品国产福利| 国产剧情在线观看一区二区| 极品少妇xxxx偷拍精品少妇| 美洲天堂一区二卡三卡四卡视频 | 国产福利不卡视频| 久久se精品一区精品二区| 奇米色一区二区| 免费欧美日韩国产三级电影| 五月婷婷欧美视频|