コード例 #1
0
void ExpulsarFaccionCaos(int UserIndex, bool Expulsado) {
	/* '*************************************************** */
	/* 'Author: Unknown */
	/* 'Last Modification: - */
	/* ' 09/28/2010 C4b3z0n - Arreglado RT6 Overflow, el Desequipar() del escudo, ponía de parametro el ObjIndex del escudo en vez del EqpSlot. */
	/* '*************************************************** */

	UserList[UserIndex].Faccion.FuerzasCaos = 0;
	/* 'Call PerderItemsFaccionarios(UserIndex) */
	if (Expulsado) {
		WriteConsoleMsg(UserIndex, "¡¡¡Has sido expulsado de la Legión Oscura!!!",
				FontTypeNames_FONTTYPE_FIGHT);
	} else {
		WriteConsoleMsg(UserIndex, "¡¡¡Te has retirado de la Legión Oscura!!!", FontTypeNames_FONTTYPE_FIGHT);
	}

	bool bRefresh = false;

	if (UserList[UserIndex].Invent.ArmourEqpObjIndex != 0) {
		/* 'Desequipamos la armadura de caos si está equipada */
		if (ObjData[UserList[UserIndex].Invent.ArmourEqpObjIndex].Caos == 1) {
			Desequipar(UserIndex, UserList[UserIndex].Invent.ArmourEqpSlot, false);
			bRefresh = true;
		}
	}

	if (UserList[UserIndex].Invent.EscudoEqpObjIndex != 0) {
		/* 'Desequipamos el escudo de caos si está equipado */
		if (ObjData[UserList[UserIndex].Invent.EscudoEqpObjIndex].Caos == 1) {
			Desequipar(UserIndex, UserList[UserIndex].Invent.EscudoEqpSlot, false);
			bRefresh = true;
		}
	}

	if (bRefresh) {
		ChangeUserChar(UserIndex, UserList[UserIndex].Char.body, UserList[UserIndex].Char.Head,
				UserList[UserIndex].Char.heading, UserList[UserIndex].Char.WeaponAnim,
				UserList[UserIndex].Char.ShieldAnim, UserList[UserIndex].Char.CascoAnim);
		WriteUpdateUserStats(UserIndex);
	}

	/* 'Actualizamos la barca si esta navegando (NicoNZ) */
	if (UserList[UserIndex].flags.Navegando) {
		RefreshCharStatus(UserIndex);
	}

}
コード例 #2
0
ファイル: Npcs.cpp プロジェクト: irongete/dakara-server
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);
	}
}
コード例 #3
0
void EnlistarCaos(int UserIndex) {
	/* '*************************************************** */
	/* 'Autor: Pablo (ToxicWaste) & Unknown (orginal version) */
	/* 'Last Modification: 27/11/2009 */
	/* '15/03/2009: ZaMa - No se puede enlistar el fundador de un clan con alineación neutral. */
	/* '27/11/2009: ZaMa - Ahora no se puede enlistar un miembro de un clan neutro, por ende saque la antifaccion. */
	/* 'Handles the entrance of users to the "Legión Oscura" */
	/* '*************************************************** */

	if (!criminal(UserIndex)) {
		WriteChatOverHead(UserIndex, "¡¡¡Lárgate de aquí, bufón!!!",
				(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		return;
	}

	if (UserList[UserIndex].Faccion.FuerzasCaos == 1) {
		WriteChatOverHead(UserIndex, "¡¡¡Ya perteneces a la legión oscura!!!",
				(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		return;
	}

	if (UserList[UserIndex].Faccion.ArmadaReal == 1) {
		WriteChatOverHead(UserIndex, "Las sombras reinarán en Argentum. ¡¡¡Fuera de aquí insecto real!!!",
				(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		return;
	}

	/* '[Barrin 17-12-03] Si era miembro de la Armada Real no se puede enlistar */
	/* 'Tomamos el valor de ahí: ¿Recibio la experiencia para entrar? */
	if (UserList[UserIndex].Faccion.RecibioExpInicialReal == 1) {
		WriteChatOverHead(UserIndex, "No permitiré que ningún insecto real ingrese a mis tropas.",
				(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		return;
	}
	/* '[/Barrin] */

	if (!criminal(UserIndex)) {
		WriteChatOverHead(UserIndex, "¡¡Ja ja ja!! Tú no eres bienvenido aquí asqueroso ciudadano.",
				(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		return;
	}

	if (UserList[UserIndex].Faccion.CiudadanosMatados < 70) {
		WriteChatOverHead(UserIndex,
				"Para unirte a nuestras fuerzas debes matar al menos 70 ciudadanos, sólo has matado "
						+ vb6::CStr(UserList[UserIndex].Faccion.CiudadanosMatados) + ".",
				(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		return;
	}

	if (UserList[UserIndex].Stats.ELV < 25) {
		WriteChatOverHead(UserIndex, "¡¡¡Para unirte a nuestras fuerzas debes ser al menos nivel 25!!!",
				(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		return;
	}

	if (UserList[UserIndex].GuildIndex > 0) {
		if (GuildAlignment(UserList[UserIndex].GuildIndex) == "Neutral") {
			WriteChatOverHead(UserIndex,
					"¡¡¡Perteneces a un clan neutro, sal de él si quieres unirte a nuestras fuerzas!!!",
					(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
			return;
		}
	}

	if (UserList[UserIndex].Faccion.Reenlistadas > 4) {
		if (UserList[UserIndex].Faccion.Reenlistadas == 200) {
			WriteChatOverHead(UserIndex,
					"Has sido expulsado de las fuerzas oscuras y durante tu rebeldía has atacado a mi ejército. ¡Vete de aquí!",
					(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		} else {
			WriteChatOverHead(UserIndex, "¡Has sido expulsado de las fuerzas oscuras demasiadas veces!",
					(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		}
		return;
	}

	UserList[UserIndex].Faccion.Reenlistadas = UserList[UserIndex].Faccion.Reenlistadas + 1;
	UserList[UserIndex].Faccion.FuerzasCaos = 1;

	WriteChatOverHead(UserIndex,
			"¡¡¡Bienvenido al lado oscuro!!! Aquí tienes tus armaduras. Derrama sangre ciudadana y real, y serás recompensado, lo prometo.",
			(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);

	if (UserList[UserIndex].Faccion.RecibioArmaduraCaos == 0) {

		GiveFactionArmours(UserIndex, true);
		GiveExpReward(UserIndex, 0);

		UserList[UserIndex].Faccion.RecibioArmaduraCaos = 1;
		UserList[UserIndex].Faccion.NivelIngreso = UserList[UserIndex].Stats.ELV;
		UserList[UserIndex].Faccion.FechaIngreso = vb6::dateToString(vb6::Now());

		UserList[UserIndex].Faccion.RecibioExpInicialCaos = 1;
		UserList[UserIndex].Faccion.RecompensasCaos = 0;
		UserList[UserIndex].Faccion.NextRecompensa = 160;
	}

	/* 'Actualizamos la barca si esta navegando (NicoNZ) */
	if (UserList[UserIndex].flags.Navegando) {
		RefreshCharStatus(UserIndex);
	}

	LogEjercitoCaos(
			UserList[UserIndex].Name + " ingresó el " + UserList[UserIndex].Faccion.FechaIngreso
					+ " cuando era nivel " + vb6::CStr(UserList[UserIndex].Stats.ELV));
}
コード例 #4
0
void EnlistarArmadaReal(int UserIndex) {
	/* '*************************************************** */
	/* 'Autor: Pablo (ToxicWaste) & Unknown (orginal version) */
	/* 'Last Modification: 15/04/2010 */
	/* 'Handles the entrance of users to the "Armada Real" */
	/* '15/03/2009: ZaMa - No se puede enlistar el fundador de un clan con alineación neutral. */
	/* '27/11/2009: ZaMa - Ahora no se puede enlistar un miembro de un clan neutro, por ende saque la antifaccion. */
	/* '15/04/2010: ZaMa - Cambio en recompensas iniciales. */
	/* '*************************************************** */

	if (UserList[UserIndex].Faccion.ArmadaReal == 1) {
		WriteChatOverHead(UserIndex, "¡¡¡Ya perteneces a las tropas reales!!! Ve a combatir criminales.",
				(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		return;
	}

	if (UserList[UserIndex].Faccion.FuerzasCaos == 1) {
		WriteChatOverHead(UserIndex, "¡¡¡Maldito insolente!!! Vete de aquí seguidor de las sombras.",
				(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		return;
	}

	if (criminal(UserIndex)) {
		WriteChatOverHead(UserIndex, "¡¡¡No se permiten criminales en el ejército real!!!",
				(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		return;
	}

	if (UserList[UserIndex].Faccion.CriminalesMatados < 30) {
		WriteChatOverHead(UserIndex,
				"Para unirte a nuestras fuerzas debes matar al menos 30 criminales, sólo has matado "
						+ vb6::CStr(UserList[UserIndex].Faccion.CriminalesMatados) + ".",
				(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		return;
	}

	if (UserList[UserIndex].Stats.ELV < 25) {
		WriteChatOverHead(UserIndex, "¡¡¡Para unirte a nuestras fuerzas debes ser al menos de nivel 25!!!",
				(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		return;
	}

	if (UserList[UserIndex].Faccion.CiudadanosMatados > 0) {
		WriteChatOverHead(UserIndex,
				"¡Has asesinado gente inocente, no aceptamos asesinos en las tropas reales!",
				(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		return;
	}

	if (UserList[UserIndex].Faccion.Reenlistadas > 4) {
		WriteChatOverHead(UserIndex, "¡Has sido expulsado de las fuerzas reales demasiadas veces!",
				(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		return;
	}

	if (UserList[UserIndex].Reputacion.NobleRep < 1000000) {
		WriteChatOverHead(UserIndex,
				"Necesitas ser aún más noble para integrar el ejército real, sólo tienes "
						+ vb6::CStr(UserList[UserIndex].Reputacion.NobleRep) + "/1.000.000 puntos de nobleza",
				(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
		return;
	}

	if (UserList[UserIndex].GuildIndex > 0) {
		if (GuildAlignment(UserList[UserIndex].GuildIndex) == "Neutral") {
			WriteChatOverHead(UserIndex,
					"¡¡¡Perteneces a un clan neutro, sal de él si quieres unirte a nuestras fuerzas!!!",
					(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);
			return;
		}
	}

	UserList[UserIndex].Faccion.ArmadaReal = 1;
	UserList[UserIndex].Faccion.Reenlistadas = UserList[UserIndex].Faccion.Reenlistadas + 1;

	WriteChatOverHead(UserIndex,
			"¡¡¡Bienvenido al ejército real!!! Aquí tienes tus vestimentas. Cumple bien tu labor exterminando criminales y me encargaré de recompensarte.",
			(Npclist[UserList[UserIndex].flags.TargetNPC].Char.CharIndex), 0x00ffffff);

	/* ' TODO: Dejo esta variable por ahora, pero con chequear las reenlistadas deberia ser suficiente :S */
	if (UserList[UserIndex].Faccion.RecibioArmaduraReal == 0) {

		GiveFactionArmours(UserIndex, false);
		GiveExpReward(UserIndex, 0);

		UserList[UserIndex].Faccion.RecibioArmaduraReal = 1;
		UserList[UserIndex].Faccion.NivelIngreso = UserList[UserIndex].Stats.ELV;
		UserList[UserIndex].Faccion.FechaIngreso = vb6::dateToString(vb6::Now());
		/* 'Esto por ahora es inútil, siempre va a ser cero, pero bueno, despues va a servir. */
		UserList[UserIndex].Faccion.MatadosIngreso = UserList[UserIndex].Faccion.CiudadanosMatados;

		UserList[UserIndex].Faccion.RecibioExpInicialReal = 1;
		UserList[UserIndex].Faccion.RecompensasReal = 0;
		UserList[UserIndex].Faccion.NextRecompensa = 70;

	}

	/* 'Actualizamos la barca si esta navegando (NicoNZ) */
	if (UserList[UserIndex].flags.Navegando) {
		RefreshCharStatus(UserIndex);
	}

	LogEjercitoReal(
			UserList[UserIndex].Name + " ingresó el " + UserList[UserIndex].Faccion.FechaIngreso + " cuando era nivel "
					+ vb6::CStr(UserList[UserIndex].Stats.ELV));
}