//********************************************************************************************* // 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; } } }
//********************************************************************************************* // 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); }