⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.cpp

📁 WYD Server 753 (Development)
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    if(clientid == -1)        return ;    // Client nao foi encontrado    Log(WARN, "cServer::DeleteAccount failed.");}// Procura o id do servidor//// Retorna -1 se o ip nao foi encontrado// Retorna o id do servidor caso foi encontrados32 cServer::GetServerIndex(const char *ip){    for(u32 x = 0; x < 10; x++)        if(strcmp(srvList[x], ip) == 0)            return x;    return -1;}// Procura o id do admin//// Retorna -1 se o ip nao foi encontrado// Retorna o id do admin caso foi encontrados32 cServer::GetAdminIndex(const char *ip){    for(u32 x = 0; x < 10; x++)        if(strcmp(adminList[x], ip) == 0)            return x;    return -1;}// Le o arquivo de configuração do personagem ou npcvoid cServer::ReadCharacter(const char *file, sCharacter *ptrchar){    FILE *fp = fopen(file, "r");    if(fp == NULL)    { /* not found */        Log(WARN, Server.GetMessage(ERRORLOADED), file);        return ;    }    // Apaga todas as informacoes do personagem    memset(ptrchar, 0, sizeof(sCharacter));    // Seta o valor padrao da barra de skill    memset(ptrchar->qSkillBar1, 0xFF, 4);    memset(ptrchar->qSkillBar2, 0xFF, 16);    // Zera as skills em uso    memset(ptrchar->Skill, 0, sizeof(sSkill) * 16);    int data[8];    sItem *ptritem = NULL;    sSkill *ptrskill = NULL;    while(fgets(buf, sizeof(buf), fp))    {        if(buf[0] == '#' || buf[0] == '\n')            continue;        memset(cmd, 0, sizeof(cmd));        memset(data, 0, sizeof(data));        sscanf(buf, "%[^( ](%d,%d,%d,%d,%d,%d,%d,%d)", cmd, &data[0],            &data[1], &data[2], &data[3], &data[4], &data[5], &data[6], &data[7]);        // Seta todas as letras para minusculo        for(u32 x = 0; x < strlen(cmd); x++)            cmd[x] = tolower(cmd[x]);        if(strcmp(cmd, "setpos") == 0)        {            ptrchar->Last.X = data[0];            ptrchar->Last.Y = data[1];        }        else if(strcmp(cmd, "setlevel") == 0)            ptrchar->Status.Level = data[0];        else if(strcmp(cmd, "setattack") == 0)            ptrchar->Status.Attack = data[0];        else if(strcmp(cmd, "setdefense") == 0)            ptrchar->Status.Defense = data[0];        else if(strcmp(cmd, "setmerchant") == 0)
        {            ptrchar->Status.Merchant.Flag.Merchant = data[0];
            ptrchar->Status.Merchant.Flag.charDir = data[1];
        }        else if(strcmp(cmd, "setspeed") == 0)            ptrchar->Status.MoveSpeed = data[0];        else if(strcmp(cmd, "sethp") == 0)        {            ptrchar->Status.cHP = data[0];            ptrchar->Status.mHP = data[1];        }        else if(strcmp(cmd, "setmp") == 0)        {            ptrchar->Status.cMP = data[0];            ptrchar->Status.mMP = data[1];        }        else if(strcmp(cmd, "setstr") == 0)            ptrchar->Status.STR = data[0];        else if(strcmp(cmd, "setint") == 0)            ptrchar->Status.INT = data[0];        else if(strcmp(cmd, "setdex") == 0)            ptrchar->Status.DEX = data[0];        else if(strcmp(cmd, "setcon") == 0)            ptrchar->Status.CON = data[0];        else if(strcmp(cmd, "setwmaster") == 0)            ptrchar->Status.wMaster = data[0];        else if(strcmp(cmd, "setfmaster") == 0)            ptrchar->Status.fMaster = data[0];        else if(strcmp(cmd, "setsmaster") == 0)            ptrchar->Status.sMaster = data[0];        else if(strcmp(cmd, "settmaster") == 0)            ptrchar->Status.tMaster = data[0];        else if(strcmp(cmd, "setequip") == 0)        {            ptritem = &ptrchar->Equip[data[0]];            ptritem->ItemID = data[1];            ptritem->EF1 = data[2];            ptritem->EFV1 = data[3];            ptritem->EF2 = data[4];            ptritem->EFV2 = data[5];            ptritem->EF3 = data[6];            ptritem->EFV3 = data[7];        }        else if(strcmp(cmd, "setinv") == 0)        {            ptritem = &ptrchar->Inventory[data[0]];            ptritem->ItemID = data[1];            ptritem->EF1 = data[2];            ptritem->EFV1 = data[3];            ptritem->EF2 = data[4];            ptritem->EFV2 = data[5];            ptritem->EF3 = data[6];            ptritem->EFV3 = data[7];        }        else if(strcmp(cmd, "setskill") == 0)        {            ptrskill = &ptrchar->Skill[data[0]];            ptrskill->Effect = data[1];            ptrskill->Master = data[2];            ptrskill->effVal = data[3];            ptrskill->sTime = (data[4] / 8);        }        else if(strcmp(cmd, "setstatuspoints") == 0)            ptrchar->pStatus = data[0];        else if(strcmp(cmd, "setmasterpoints") == 0)            ptrchar->pMaster = data[0];        else if(strcmp(cmd, "setskillpoints") == 0)            ptrchar->pSkill = data[0];        else if(strcmp(cmd, "setregen") == 0)        {            ptrchar->rHP = data[0];            ptrchar->rMP = data[1];        }        else if(strcmp(cmd, "setresist") == 0)        {            ptrchar->Resist.Flag.Resist1 = data[0];            ptrchar->Resist.Flag.Resist2 = data[1];            ptrchar->Resist.Flag.Resist3 = data[2];            ptrchar->Resist.Flag.Resist4 = data[3];        }        else if(strcmp(cmd, "sethold") == 0)            ptrchar->Hold = data[0];        else if(strcmp(cmd, "setrace") == 0)            ptrchar->Race = data[0];        else if(strcmp(cmd, "setcity") == 0)        {            ptrchar->City.Flag.ID = data[0];            ptrchar->City.Flag.nop = data[1];        }        else if(strcmp(cmd, "setclass") == 0)            ptrchar->charClass = data[0];        else if(strcmp(cmd, "setgold") == 0)            ptrchar->Gold = data[0];        else if(strcmp(cmd, "setexp") == 0)            ptrchar->Exp = data[0];        else if(strcmp(cmd, "setkpoint") == 0)            ptrchar->kPoint = data[0];        else if(strcmp(cmd, "setkillpoint") == 0)        {            ptrchar->currentKill = data[0];            ptrchar->totalKill = data[1];        }        else if(strcmp(cmd, "setcritical") == 0)            ptrchar->Critical = data[0];        else            Log(INFO, "Invalid command (%s): \"%\"", file, cmd);    }    memcpy(&ptrchar->bStatus, &ptrchar->Status, sizeof(sStatus));    fclose(fp);    Log(NORMAL, Server.GetMessage(LOADEDFILE), file);}
// Recebe o primeiro pacote do client
//
// Retorna false se o client nao enviou o hello packet
// Retorna true se o client foi logado com sucesso
bool cServer::Login(sSocket &sSock)
{    if(!sSock.Info.Flag.sHello)    { /* n enviou o pacote de hello */        if(4 == recv(sSock.Sock, buf, 4, 0))        { /* tamanho valido */            if(*(u32*)buf == 0x1F11F311)            { /* pacote valido */                sSock.Info.Flag.sHello = true;                return true;            }        }        DeleteSocket(sSock);    }    else if(cSocket::Login(sSock))
    { /* new client */        s32 indexServer;        char *ip = inet_ntoa(sSock.socketInfo.sin_addr);        pDB_1h *pServer = (pDB_1h*)GetPointerPacket();        if(pServer->isGameServer == 1)            indexServer = GetServerIndex(ip);        else            indexServer = GetAdminIndex(ip);        if(indexServer != -1)        { /* gameserver valido */            indexServer++;
            cClient *Client = (cClient*)List.Insert(indexServer);
            if(Client == NULL)
            { /* lista cheia */                Log(WARN, GetMessage(MAXCLIENTLIST));
                Packet.SendLogMessage(sSock, GetMessage(MAXCLIENTLIST));
            }
            else
            { /* client adicionado */
                sSock.clientID = indexServer;                Client->Socket = &sSock;

                Log(NORMAL, GetMessage(CLIENTCONNECTED), sSock.clientID,
                    ip, ntohs(sSock.socketInfo.sin_port));
                currUser++;                RefStatusBar();
                return true;
            }        }        else        { /* send log */            Log(WARN, GetMessage(IPNOTFOUND), ip);            Packet.SendLogMessage(sSock, GetMessage(IPNOTFOUND), ip);        }        DeleteSocket(sSock);
    }

    return false;
}

// Trata o pacote recebido//// Retorna false se o pacote eh invalido// Retorna true se o pacote eh validovoid cServer::ReceivedPacket(sSocket &sSock, pHeader *pServer)
{    Packet.PacketControl(sSock, (pHeader*)GetPointerPacket());
}
// Deleta o socket da listavoid cServer::DeleteSocket(s32 id){    DeleteSocket(cSocket::Get(id));}
// Deleta o socket da lista
void cServer::DeleteSocket(sSocket &sSock)
{
    cSocket::DeleteSocket(sSock);

    if(sSock.clientID != INVALID_SERVERINDEX)
    { /* deleta o client do servidor */
        currUser--;        RefStatusBar();
        // Deleta os clients conectados nesse servidor        DeleteAccount(sSock.clientID, -1);
        Log(NORMAL, GetMessage(CLIENTDISCONNECTED), sSock.clientID);
        List.Remove(sSock.clientID);
    }
}
// Retorna a mensagemconst char *cServer::GetMessage(u32 id) const { return language[id]; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -