コード例 #1
0
        //*********************************************************************************************
        // GiveTradeTo
        // Entrega itens da troca para determinado jogador
        //*********************************************************************************************
        public static void GiveTradeTo(int index, int intrade)
        {
            //EXTEND
            if (Extensions.ExtensionApp.ExtendMyApp
                    (MethodBase.GetCurrentMethod().Name, index, intrade) != null)
            {
                return;
            }

            //CÓDIGO
            if (PStruct.tempplayer[index].TradeG > 0)
            {
                PlayerRelations.GivePlayerGold(intrade, PStruct.tempplayer[index].TradeG);
            }

            for (int i = 1; i < Globals.MaxTradeOffers; i++)
            {
                if ((PStruct.tradeslot[index, i].item != Globals.NullItem) && (!String.IsNullOrEmpty(PStruct.tradeslot[index, i].item)))
                {
                    string[] splititem = PStruct.tradeslot[index, i].item.Split(',');

                    int itemNum   = Convert.ToInt32(splititem[1]);
                    int itemType  = Convert.ToInt32(splititem[0]);
                    int itemValue = Convert.ToInt32(splititem[2]);
                    int itemRefin = Convert.ToInt32(splititem[3]);
                    int itemExp   = Convert.ToInt32(splititem[4]);

                    InventoryRelations.GiveItem(intrade, itemType, itemNum, itemValue, itemRefin, itemExp);

                    PStruct.tradeslot[index, i].item = Globals.NullItem;
                }
            }
        }
コード例 #2
0
ファイル: WinsockAsync.cs プロジェクト: kazuyabr/Forjerum
        //*********************************************************************************************
        // DisconnectUser / Revisto pela última vez em 01/08/2016, criado por Allyson S. Bacon
        // Desconectar o jogador.
        //*********************************************************************************************
        public static void DisconnectUser(int clientid)
        {
            //EXTEND
            if (Extensions.ExtensionApp.ExtendMyApp
                    (MethodBase.GetCurrentMethod().Name, clientid) != null)
            {
                return;
            }

            //CÓDIGO
            //LOL
            if ((Clients.Count <= 0) || (clientid > Clients.Count - 1))
            {
                return;
            }
            //Se estiver morto, resetar posição
            //PStruct.tempplayer[Clients[clientid].index].isDead = false;

            //Sai da troca
            if (PStruct.tempplayer[Clients[clientid].index].InTrade > 0)
            {
                TradeRelations.GiveTrade(Clients[clientid].index);
                TradeRelations.GiveTrade(PStruct.tempplayer[Clients[clientid].index].InTrade);

                //Verificar se o jogador não se desconectou no processo
                if (Clients[(UserConnection.Getindex(PStruct.tempplayer[Clients[clientid].index].InTrade))].IsConnected)
                {
                    SendData.Send_PlayerG(PStruct.tempplayer[Clients[clientid].index].InTrade);
                    SendData.Send_TradeClose(PStruct.tempplayer[Clients[clientid].index].InTrade);
                    SendData.Send_InvSlots(PStruct.tempplayer[Clients[clientid].index].InTrade, PStruct.player[PStruct.tempplayer[Clients[clientid].index].InTrade].SelectedChar);
                }

                TradeRelations.ClearTempTrade(PStruct.tempplayer[Clients[clientid].index].InTrade);
                TradeRelations.ClearTempTrade(Clients[clientid].index);
            }

            //Sai do Craft
            if (PStruct.tempplayer[Clients[clientid].index].InCraft)
            {
                for (int i = 1; i < Globals.Max_Craft; i++)
                {
                    if (PStruct.craft[Clients[clientid].index, i].num > 0)
                    {
                        InventoryRelations.GiveItem(Clients[clientid].index, PStruct.craft[Clients[clientid].index, i].type, PStruct.craft[Clients[clientid].index, i].num, PStruct.craft[Clients[clientid].index, i].value, PStruct.craft[Clients[clientid].index, i].refin, PStruct.craft[Clients[clientid].index, i].exp);
                    }
                }
            }

            //Salva o jogador SE PRECISAR
            if (PStruct.tempplayer[Clients[clientid].index].ingame)
            {
                Database.SaveCharacter(Clients[clientid].index, PStruct.player[Clients[clientid].index].Email, PStruct.player[Clients[clientid].index].SelectedChar);
                Database.SaveBank(Clients[clientid].index);
                Database.SaveFriendList(Clients[clientid].index);
            }

            //Sai do grupo
            if (PStruct.tempplayer[Clients[clientid].index].Party > 0)
            {
                PartyRelations.KickParty(Clients[clientid].index, Clients[clientid].index, true);
            }

            //Vamos avisar ao mapa que o jogador saiu
            SendData.Send_PlayerLeft(PStruct.character[Clients[clientid].index, PStruct.player[Clients[clientid].index].SelectedChar].Map, Clients[clientid].index);

            //Apagamos o banco
            Database.ClearBank(Clients[clientid].index);

            Console.WriteLine(lang.player_cleared + " " + clientid + Clients[clientid].index);

            //Fecha a conexão
            Clients[clientid].Async.Close();

            //Limpa dados sobre o jogador
            Clients[clientid].Async = null;

            //Limpa dados temporários sobre o jogador
            Database.ClearPlayer(Clients[clientid].index, true);
            PStruct.ClearTempPlayer(Clients[clientid].index);

            //Limpa informações gerais da conexão
            Clients[clientid].index = -1;

            //Remova da lista de clientes do servidor
            Clients.RemoveAt(clientid);

            //Zerar o Player_Highindex pra evitar problemas
            Globals.Player_Highindex = 0;

            //Vamos atualizar o Player_Highindex sem frescura
            for (int i = 0; i < WinsockAsync.Clients.Count(); i++)
            {
                if (Clients[i].index > Globals.Player_Highindex)
                {
                    Globals.Player_Highindex = Clients[i].index;
                }
            }

            //Vamos atualizar o Player_Highindex para todos os jogadores
            SendData.Send_UpdatePlayerHighindex();

            Log(lang.player_disconnected + " " + clientid);
        }