void clsParty::ObtenerExito(int ExpGanada, int mapa, int X, int Y) { /* '*************************************************** */ /* 'Author: Unknown */ /* 'Last Modification: 07/04/08 */ /* 'Last Modification By: Marco Vanotti (MarKoxX) */ /* ' - 09/29/07 New formula for calculating the experience point of each user */ /* ' - 09/29/07 Experience is round to the biggest number less than that number */ /* ' - 09/29/07 Now experience is a real-number */ /* ' - 04/04/08 Ahora antes de calcular la experiencia a X usuario se fija si ese usuario existe (MarKoxX) */ /* ' - 07/04/08 New formula to calculate Experience for each user. (MarKoxX) */ /* '*************************************************** */ /* 'Se produjo un evento que da experiencia en la wp referenciada */ int i; int UI; double expThisUser; p_expTotal = p_expTotal + ExpGanada; for (i = (1); i <= (PARTY_MAXMEMBERS); i++) { UI = p_members[i].UserIndex; if (UI > 0) { /* ' Formula: Exp* (Nivel ^ ExponenteNivelParty) / sumadeNivelesElevados */ expThisUser = vb6::CDbl( ExpGanada * (std::pow(UserList[p_members[i].UserIndex].Stats.ELV, ExponenteNivelParty)) / p_SumaNivelesElevados); if (mapa == UserList[UI].Pos.Map && UserList[UI].flags.Muerto == 0) { if (Distance(UserList[UI].Pos.X, UserList[UI].Pos.Y, X, Y) <= PARTY_MAXDISTANCIA) { p_members[i].Experiencia = p_members[i].Experiencia + expThisUser; if (p_members[i].Experiencia < 0) { p_members[i].Experiencia = 0; } if (PARTY_EXPERIENCIAPORGOLPE) { UserList[UI].Stats.Exp = UserList[UI].Stats.Exp + vb6::Fix(expThisUser); if (UserList[UI].Stats.Exp > MAXEXP) { UserList[UI].Stats.Exp = MAXEXP; } CheckUserLevel(UI); WriteUpdateUserStats(UI); } } } } } }
void clsParty::FlushExperiencia() { /* '*************************************************** */ /* 'Author: Unknown */ /* 'Last Modification: 09/29/07 */ /* 'Last Modification By: Lucas Tavolaro Ortiz (Tavo) */ /* ' - 09/29/07 Experience is round to the biggest number less than that number */ /* ' - 09/29/07 Now experience is a real-number */ /* '*************************************************** */ /* 'esta funcion se invoca frente a cerradas del servidor. Flushea la experiencia */ /* 'acumulada a los usuarios. */ int i; /* 'esto sirve SOLO cuando acumulamos la experiencia! */ if (!PARTY_EXPERIENCIAPORGOLPE) { for (i = (1); i <= (PARTY_MAXMEMBERS); i++) { if (p_members[i].UserIndex > 0) { if (p_members[i].Experiencia > 0) { UserList[p_members[i].UserIndex].Stats.Exp = UserList[p_members[i].UserIndex].Stats.Exp + vb6::Fix(p_members[i].Experiencia); if (UserList[p_members[i].UserIndex].Stats.Exp > MAXEXP) { UserList[p_members[i].UserIndex].Stats.Exp = MAXEXP; } CheckUserLevel(p_members[i].UserIndex); } else { if (vb6::Abs(UserList[p_members[i].UserIndex].Stats.Exp) > vb6::Abs(vb6::Fix(p_members[i].Experiencia))) { UserList[p_members[i].UserIndex].Stats.Exp = UserList[p_members[i].UserIndex].Stats.Exp + vb6::Fix(p_members[i].Experiencia); } else { UserList[p_members[i].UserIndex].Stats.Exp = 0; } } p_members[i].Experiencia = 0; WriteUpdateUserStats(p_members[i].UserIndex); } } } }
void GiveExpReward(int UserIndex, int Rango) { /* '*************************************************** */ /* 'Autor: ZaMa */ /* 'Last Modification: 15/04/2010 */ /* 'Gives reward exp to user */ /* '*************************************************** */ int GivenExp; GivenExp = RecompensaFacciones[Rango]; UserList[UserIndex].Stats.Exp = UserList[UserIndex].Stats.Exp + GivenExp; if (UserList[UserIndex].Stats.Exp > MAXEXP) { UserList[UserIndex].Stats.Exp = MAXEXP; } WriteConsoleMsg(UserIndex, "Has sido recompensado con " + vb6::CStr(GivenExp) + " puntos de experiencia.", FontTypeNames_FONTTYPE_FIGHT); CheckUserLevel(UserIndex); }
void MuereNpc(int NpcIndex, int UserIndex) { /* '******************************************************** */ /* 'Author: Unknown */ /* 'Llamado cuando la vida de un NPC llega a cero. */ /* 'Last Modify Date: 13/07/2010 */ /* '22/06/06: (Nacho) Chequeamos si es pretoriano */ /* '24/01/2007: Pablo (ToxicWaste): Agrego para actualización de tag si cambia de status. */ /* '22/05/2010: ZaMa - Los caos ya no suben nobleza ni plebe al atacar npcs. */ /* '23/05/2010: ZaMa - El usuario pierde la pertenencia del npc. */ /* '13/07/2010: ZaMa - Optimizaciones de logica en la seleccion de pretoriano, y el posible cambio de alencion del usuario. */ /* '******************************************************** */ struct npc MiNPC; MiNPC = Npclist[NpcIndex]; bool EraCriminal; /* ' Es pretoriano? */ if (MiNPC.NPCtype == eNPCType_Pretoriano) { // ClanPretoriano[MiNPC.ClanIndex].MuerePretoriano(NpcIndex); } /* 'Quitamos el npc */ QuitarNPC(NpcIndex); /* ' Lo mato un usuario? */ if (UserIndex > 0) { if (MiNPC.flags.Snd3 > 0) { SendData(SendTarget_ToPCArea, UserIndex, dakara::protocol::server::BuildPlayWave(MiNPC.flags.Snd3, MiNPC.Pos.X, MiNPC.Pos.Y)); } UserList[UserIndex].flags.TargetNPC = 0; UserList[UserIndex].flags.TargetNpcTipo = eNPCType_Comun; /* 'El user que lo mato tiene mascotas? */ if (UserList[UserIndex].NroMascotas > 0) { int T; for (T = (1); T <= (MAXMASCOTAS); T++) { if (UserList[UserIndex].MascotasIndex[T] > 0) { if (Npclist[UserList[UserIndex].MascotasIndex[T]].TargetNPC == NpcIndex) { FollowAmo(UserList[UserIndex].MascotasIndex[T]); } } } } /* '[KEVIN] */ if (MiNPC.flags.ExpCount > 0) { if (UserList[UserIndex].PartyIndex > 0) { ObtenerExito(UserIndex, MiNPC.flags.ExpCount, MiNPC.Pos.Map, MiNPC.Pos.X, MiNPC.Pos.Y); } else { UserList[UserIndex].Stats.Exp = UserList[UserIndex].Stats.Exp + MiNPC.flags.ExpCount; if (UserList[UserIndex].Stats.Exp > MAXEXP) { UserList[UserIndex].Stats.Exp = MAXEXP; } WriteConsoleMsg(UserIndex, "Has ganado " + vb6::CStr(MiNPC.flags.ExpCount) + " puntos de experiencia.", FontTypeNames_FONTTYPE_FIGHT); } MiNPC.flags.ExpCount = 0; } /* '[/KEVIN] */ WriteConsoleMsg(UserIndex, "¡Has matado a la criatura!", FontTypeNames_FONTTYPE_FIGHT); if (UserList[UserIndex].Stats.NPCsMuertos < 32000) { UserList[UserIndex].Stats.NPCsMuertos = UserList[UserIndex].Stats.NPCsMuertos + 1; } EraCriminal = criminal(UserIndex); if (MiNPC.Stats.Alineacion == 0) { if (MiNPC.Numero == Guardias) { UserList[UserIndex].Reputacion.NobleRep = 0; UserList[UserIndex].Reputacion.PlebeRep = 0; UserList[UserIndex].Reputacion.AsesinoRep = UserList[UserIndex].Reputacion.AsesinoRep + 500; if (UserList[UserIndex].Reputacion.AsesinoRep > MAXREP) { UserList[UserIndex].Reputacion.AsesinoRep = MAXREP; } } if (MiNPC.MaestroUser == 0) { UserList[UserIndex].Reputacion.AsesinoRep = UserList[UserIndex].Reputacion.AsesinoRep + vlASESINO; if (UserList[UserIndex].Reputacion.AsesinoRep > MAXREP) { UserList[UserIndex].Reputacion.AsesinoRep = MAXREP; } } } else if (!esCaos(UserIndex)) { if (MiNPC.Stats.Alineacion == 1) { UserList[UserIndex].Reputacion.PlebeRep = UserList[UserIndex].Reputacion.PlebeRep + vlCAZADOR; if (UserList[UserIndex].Reputacion.PlebeRep > MAXREP) { UserList[UserIndex].Reputacion.PlebeRep = MAXREP; } } else if (MiNPC.Stats.Alineacion == 2) { UserList[UserIndex].Reputacion.NobleRep = UserList[UserIndex].Reputacion.NobleRep + vlASESINO / 2; if (UserList[UserIndex].Reputacion.NobleRep > MAXREP) { UserList[UserIndex].Reputacion.NobleRep = MAXREP; } } else if (MiNPC.Stats.Alineacion == 4) { UserList[UserIndex].Reputacion.PlebeRep = UserList[UserIndex].Reputacion.PlebeRep + vlCAZADOR; if (UserList[UserIndex].Reputacion.PlebeRep > MAXREP) { UserList[UserIndex].Reputacion.PlebeRep = MAXREP; } } } bool EsCriminal; EsCriminal = criminal(UserIndex); /* ' Cambio de alienacion? */ if (EraCriminal != EsCriminal) { /* ' Se volvio pk? */ if (EsCriminal) { if (esArmada(UserIndex)) { ExpulsarFaccionReal(UserIndex); } /* ' Se volvio ciuda */ } else { if (esCaos(UserIndex)) { ExpulsarFaccionCaos(UserIndex); } } RefreshCharStatus(UserIndex); } CheckUserLevel(UserIndex); if (NpcIndex == UserList[UserIndex].flags.ParalizedByNpcIndex) { RemoveParalisis(UserIndex); } /* ' Userindex > 0 */ } if (MiNPC.MaestroUser == 0) { /* 'Tiramos el inventario */ NPC_TIRAR_ITEMS(MiNPC, MiNPC.NPCtype == eNPCType_Pretoriano); /* 'ReSpawn o no */ ReSpawnNpc(MiNPC); } }
bool clsParty::SaleMiembro(int UserIndex) { bool retval; /* '*************************************************** */ /* 'Author: Unknown */ /* 'Last Modification: 07/04/08 */ /* 'Last Modification By: Marco Vanotti (MarKoxX) */ /* ' - 09/29/07 Experience is round to the biggest number less than that number */ /* ' - 09/29/07 Now experience is a real-number (Tavo) */ /* ' - 07/04/08 Added const ExponenteNivelParty. (MarKoxX) */ /* '11/03/2010: ZaMa - Ahora no le dice al lider que salio de su propia party, y optimice con with. */ /* '*************************************************** */ /* 'el valor de retorno representa si se disuelve la party */ int i; int j; int MemberIndex; i = 1; retval = false; while (i <= PARTY_MAXMEMBERS && p_members[i].UserIndex != UserIndex) { i = i + 1; } if (i == 1) { /* 'sale el founder, la party se disuelve */ retval = true; MandarMensajeAConsola("El líder disuelve la party.", "Servidor"); for (j = (PARTY_MAXMEMBERS); ((-1) > 0) ? (j <= (1)) : (j >= (1)); j = j + (-1)) { if (p_members[j].UserIndex > 0) { /* ' No envia el mensaje al lider */ if (j != 1) { WriteConsoleMsg(p_members[j].UserIndex, "Abandonas la party liderada por " + UserList[p_members[1].UserIndex].Name + ".", FontTypeNames_FONTTYPE_PARTY); } WriteConsoleMsg(p_members[j].UserIndex, "Durante la misma has conseguido " + vb6::CStr(vb6::Fix(p_members[j].Experiencia)) + " puntos de experiencia.", FontTypeNames_FONTTYPE_PARTY); if (!PARTY_EXPERIENCIAPORGOLPE) { UserList[p_members[j].UserIndex].Stats.Exp = UserList[p_members[j].UserIndex].Stats.Exp + vb6::Fix(p_members[j].Experiencia); if (UserList[p_members[j].UserIndex].Stats.Exp > MAXEXP) { UserList[p_members[j].UserIndex].Stats.Exp = MAXEXP; } CheckUserLevel(p_members[j].UserIndex); WriteUpdateUserStats(p_members[j].UserIndex); } MandarMensajeAConsola(UserList[p_members[j].UserIndex].Name + " abandona la party.", "Servidor"); UserList[p_members[j].UserIndex].PartyIndex = 0; p_CantMiembros = p_CantMiembros - 1; p_SumaNivelesElevados = p_SumaNivelesElevados - std::pow(UserList[UserIndex].Stats.ELV, ExponenteNivelParty); p_members[j].UserIndex = 0; p_members[j].Experiencia = 0; } } } else { if (i <= PARTY_MAXMEMBERS) { MemberIndex = p_members[i].UserIndex; if (!PARTY_EXPERIENCIAPORGOLPE) { UserList[MemberIndex].Stats.Exp = UserList[MemberIndex].Stats.Exp + vb6::Fix(p_members[i].Experiencia); if (UserList[MemberIndex].Stats.Exp > MAXEXP) { UserList[MemberIndex].Stats.Exp = MAXEXP; } CheckUserLevel(MemberIndex); WriteUpdateUserStats(MemberIndex); } MandarMensajeAConsola(UserList[MemberIndex].Name + " abandona la party.", "Servidor"); /* 'TODO: Revisar que esto este bien, y no este faltando/sobrando un mensaje, ahora solo los estoy corrigiendo */ WriteConsoleMsg(MemberIndex, "Durante la misma has conseguido " + vb6::CStr(vb6::Fix(p_members[i].Experiencia)) + " puntos de experiencia.", FontTypeNames_FONTTYPE_PARTY); p_CantMiembros = p_CantMiembros - 1; p_SumaNivelesElevados = p_SumaNivelesElevados - std::pow(UserList[UserIndex].Stats.ELV, ExponenteNivelParty); MemberIndex = 0; p_members[i].Experiencia = 0; p_members[i].UserIndex = 0; CompactMemberList(); } } return retval; }