//********************************************************************************************* // 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; } } }
//********************************************************************************************* // CanPlayerMove / Revisto pela última vez em 01/08/2016, criado por Allyson S. Bacon // Verifica se determinado jogador pode se mover no contexto em que está atualmente //********************************************************************************************* public static bool CanPlayerMove(int index, byte Dir, int x = 0, int y = 0) { //EXTEND if (Extensions.ExtensionApp.ExtendMyApp (MethodBase.GetCurrentMethod().Name, index, Dir, x, y) != null) { return(Convert.ToBoolean(Extensions.ExtensionApp.ExtendMyApp (MethodBase.GetCurrentMethod().Name, index, Dir, x, y))); } //CÓDIGO int map = Convert.ToInt32(PStruct.character[index, PStruct.player[index].SelectedChar].Map); if (x <= 0 || y <= 0) { x = Convert.ToInt32(PStruct.character[index, PStruct.player[index].SelectedChar].X); y = Convert.ToInt32(PStruct.character[index, PStruct.player[index].SelectedChar].Y); } //Tentamos nos mover switch (Dir) { case 8: if (y - 1 < 0) { return(false); } if (Convert.ToBoolean(MStruct.tile[map, x, y].UpBlock) == false) { return(false); } if (Convert.ToBoolean(MStruct.tile[map, x, y - 1].DownBlock) == false) { return(false); } if ((MStruct.tile[map, x, y - 1].Data1 == "3") || (MStruct.tile[map, x, y - 1].Data1 == "10")) { return(false); } if (MStruct.tile[map, x, y - 1].Data1 == "21") { if (!PlayerRelations.IsPlayerPremmy(index)) { PlayerMove(index, Convert.ToByte(Convert.ToInt32(MStruct.tile[map, x, y - 1].Data2))); return(false); } } break; case 2: if (y + 1 > 14) { return(false); } if (Convert.ToBoolean(MStruct.tile[map, x, y].DownBlock) == false) { return(false); } if (Convert.ToBoolean(MStruct.tile[map, x, y + 1].UpBlock) == false) { return(false); } if ((MStruct.tile[map, x, y + 1].Data1 == "3") || (MStruct.tile[map, x, y + 1].Data1 == "10")) { return(false); } if (MStruct.tile[map, x, y + 1].Data1 == "21") { if (!PlayerRelations.IsPlayerPremmy(index)) { PlayerMove(index, Convert.ToByte(Convert.ToInt32(MStruct.tile[map, x, y + 1].Data2))); return(false); } } break; case 4: if (x - 1 < 0) { return(false); } if (Convert.ToBoolean(MStruct.tile[map, x, y].LeftBlock) == false) { return(false); } if (Convert.ToBoolean(MStruct.tile[map, x - 1, y].RightBlock) == false) { return(false); } if ((MStruct.tile[map, x - 1, y].Data1 == "3") || (MStruct.tile[map, x - 1, y].Data1 == "10")) { return(false); } if (MStruct.tile[map, x - 1, y].Data1 == "21") { if (!PlayerRelations.IsPlayerPremmy(index)) { PlayerMove(index, Convert.ToByte(Convert.ToInt32(MStruct.tile[map, x - 1, y].Data2))); return(false); } } break; case 6: if (x + 1 > 19) { return(false); } if (Convert.ToBoolean(MStruct.tile[map, x, y].RightBlock) == false) { return(false); } if (Convert.ToBoolean(MStruct.tile[map, x + 1, y].LeftBlock) == false) { return(false); } if ((MStruct.tile[map, x + 1, y].Data1 == "3") || (MStruct.tile[map, x + 1, y].Data1 == "10")) { return(false); } if (MStruct.tile[map, x + 1, y].Data1 == "21") { if (!PlayerRelations.IsPlayerPremmy(index)) { PlayerMove(index, Convert.ToByte(Convert.ToInt32(MStruct.tile[map, x + 1, y].Data2))); return(false); } } break; default: WinsockAsync.Log(String.Format("Direção nula")); break; } return(true); }
//********************************************************************************************* // PartyShareExp / Revisto pela última vez em 01/08/2016, criado por Allyson S. Bacon // Divide a Exp para determinado grupo baseado no atacante //********************************************************************************************* public static void PartyShareExp(int Attacker, int Victim, int Map) { //EXTEND if (Extensions.ExtensionApp.ExtendMyApp (MethodBase.GetCurrentMethod().Name, Attacker, Victim, Map) != null) { return; } //CÓDIGO int NpcX = NStruct.tempnpc[Map, Victim].X; int NpcY = NStruct.tempnpc[Map, Victim].Y; int PlayerX = Convert.ToInt32(PStruct.character[Attacker, PStruct.player[Attacker].SelectedChar].X); int PlayerY = Convert.ToInt32(PStruct.character[Attacker, PStruct.player[Attacker].SelectedChar].Y); //PARTY EXP int partynum = PStruct.tempplayer[Attacker].Party; //Damos xp ao jogador e mostramos a xp ganha if (partynum > 0) { int memberscount = PartyRelations.GetPartyMembersCount(partynum); for (int i = 1; i <= memberscount; i++) { int memberindex = PStruct.partymembers[partynum, i].index; if (PStruct.character[memberindex, PStruct.player[memberindex].SelectedChar].Map == PStruct.character[Attacker, PStruct.player[Attacker].SelectedChar].Map) { //Tem grupo para dividir a exp //Adiciona uma kill se houver uma quest para esse npc for (int g = 1; g < Globals.MaxQuestGivers; g++) { for (int q = 1; q < Globals.MaxQuestPerGiver; q++) { //Prevent if ((String.IsNullOrEmpty(MStruct.quest[g, q].type)) && (PStruct.queststatus[memberindex, g, q].status > 0)) { PStruct.queststatus[memberindex, g, q].status = 0; return; } //Execute if ((PStruct.queststatus[memberindex, g, q].status == 1) && (Convert.ToInt32(MStruct.quest[g, q].type.Split('|')[0]) > 0)) { for (int k = 1; k < Globals.MaxQuestKills; k++) { if (MStruct.questkills[g, q, k].monstername == NStruct.npc[Map, Victim].Name) { if (PStruct.questkills[memberindex, g, q, k].kills < MStruct.questkills[g, q, k].value) { PStruct.questkills[memberindex, g, q, k].kills += 1; SendData.Send_ActionMsg(memberindex, lang.quest_defeat + " " + MStruct.questkills[g, q, k].monstername + " " + PStruct.questkills[memberindex, g, q, k].kills + "/" + MStruct.questkills[g, q, k].value, Globals.ColorGreen, NpcX, NpcY, 0, PStruct.character[Attacker, PStruct.player[Attacker].SelectedChar].Dir); SendData.Send_QuestKill(memberindex, g, q, k); } } } } } } int exp = NStruct.npc[Map, Victim].Exp; if (PlayerRelations.IsPlayerPremmy(memberindex)) { exp = Convert.ToInt32(exp * 1.5); } PlayerRelations.GivePlayerExp(memberindex, exp); } } } //Não tem grupo para dividir a exp else { //Adiciona uma kill se houver uma quest para esse npc for (int g = 1; g < Globals.MaxQuestGivers; g++) { for (int q = 1; q < Globals.MaxQuestPerGiver; q++) { //Prevent if ((String.IsNullOrEmpty(MStruct.quest[g, q].type)) && (PStruct.queststatus[Attacker, g, q].status > 0)) { PStruct.queststatus[Attacker, g, q].status = 0; return; } //Execute if ((PStruct.queststatus[Attacker, g, q].status == 1) && (Convert.ToInt32(MStruct.quest[g, q].type.Split('|')[0]) > 0)) { for (int k = 1; k < Globals.MaxQuestKills; k++) { if (MStruct.questkills[g, q, k].monstername == NStruct.npc[Map, Victim].Name) { if (PStruct.questkills[Attacker, g, q, k].kills < MStruct.questkills[g, q, k].value) { PStruct.questkills[Attacker, g, q, k].kills += 1; SendData.Send_ActionMsg(Attacker, lang.quest_defeat + " " + MStruct.questkills[g, q, k].monstername + " " + PStruct.questkills[Attacker, g, q, k].kills + "/" + MStruct.questkills[g, q, k].value, Globals.ColorGreen, NpcX, NpcY, 0, PStruct.character[Attacker, PStruct.player[Attacker].SelectedChar].Dir); SendData.Send_QuestKill(Attacker, g, q, k); } } } } } } int exp = NStruct.npc[Map, Victim].Exp; if (PlayerRelations.IsPlayerPremmy(Attacker)) { exp = Convert.ToInt32(exp * 1.5); } PlayerRelations.GivePlayerExp(Attacker, exp); } }