Exemplo n.º 1
0
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);
					}
				}
			}
		}
	}

}
Exemplo n.º 2
0
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);
			}
		}
	}

}
Exemplo n.º 3
0
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);

}
Exemplo n.º 4
0
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);
	}
}
Exemplo n.º 5
0
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;
}