示例#1
0
void NPCTirarOro(struct npc & MiNPC) {
	/* '*************************************************** */
	/* 'Author: Unknown */
	/* 'Last Modification: - */
	/* ' */
	/* '*************************************************** */

	/* 'SI EL NPC TIENE ORO LO TIRAMOS */
	if (MiNPC.GiveGLD > 0) {
		struct Obj MiObj;
		int MiAux;
		MiAux = MiNPC.GiveGLD;
		while (MiAux > MAX_INVENTORY_OBJS) {
			MiObj.Amount = MAX_INVENTORY_OBJS;
			MiObj.ObjIndex = iORO;
			TirarItemAlPiso(MiNPC.Pos, MiObj);
			MiAux = MiAux - MAX_INVENTORY_OBJS;
		}
		if (MiAux > 0) {
			MiObj.Amount = MiAux;
			MiObj.ObjIndex = iORO;
			TirarItemAlPiso(MiNPC.Pos, MiObj);
		}
	}
}
示例#2
0
void GiveFactionArmours(int UserIndex, bool IsCaos) {
	/* '*************************************************** */
	/* 'Autor: ZaMa */
	/* 'Last Modification: 15/04/2010 */
	/* 'Gives faction armours to user */
	/* '*************************************************** */

	struct Obj ObjArmour;
	int Rango;

	Rango = (vb6::IIf(IsCaos, UserList[UserIndex].Faccion.RecompensasCaos,
			UserList[UserIndex].Faccion.RecompensasReal)) + 1;

	/* ' Entrego armaduras de defensa baja */
	ObjArmour.Amount = GetArmourAmount(Rango, eTipoDefArmors_ieBaja);

	if (IsCaos) {
		ObjArmour.ObjIndex =
				ArmadurasFaccion[UserList[UserIndex].clase][UserList[UserIndex].raza].Caos[eTipoDefArmors_ieBaja];
	} else {
		ObjArmour.ObjIndex =
				ArmadurasFaccion[UserList[UserIndex].clase][UserList[UserIndex].raza].Armada[eTipoDefArmors_ieBaja];
	}

	if (!MeterItemEnInventario(UserIndex, ObjArmour)) {
		TirarItemAlPiso(UserList[UserIndex].Pos, ObjArmour);
	}

	/* ' Entrego armaduras de defensa media */
	ObjArmour.Amount = GetArmourAmount(Rango, eTipoDefArmors_ieMedia);

	if (IsCaos) {
		ObjArmour.ObjIndex =
				ArmadurasFaccion[UserList[UserIndex].clase][UserList[UserIndex].raza].Caos[eTipoDefArmors_ieMedia];
	} else {
		ObjArmour.ObjIndex =
				ArmadurasFaccion[UserList[UserIndex].clase][UserList[UserIndex].raza].Armada[eTipoDefArmors_ieMedia];
	}

	if (!MeterItemEnInventario(UserIndex, ObjArmour)) {
		TirarItemAlPiso(UserList[UserIndex].Pos, ObjArmour);
	}

	/* ' Entrego armaduras de defensa alta */
	ObjArmour.Amount = GetArmourAmount(Rango, eTipoDefArmors_ieAlta);

	if (IsCaos) {
		ObjArmour.ObjIndex =
				ArmadurasFaccion[UserList[UserIndex].clase][UserList[UserIndex].raza].Caos[eTipoDefArmors_ieAlta];
	} else {
		ObjArmour.ObjIndex =
				ArmadurasFaccion[UserList[UserIndex].clase][UserList[UserIndex].raza].Armada[eTipoDefArmors_ieAlta];
	}

	if (!MeterItemEnInventario(UserIndex, ObjArmour)) {
		TirarItemAlPiso(UserList[UserIndex].Pos, ObjArmour);
	}

}
示例#3
0
void TirarOroNpc(int Cantidad, struct WorldPos & Pos) {
	/* '*************************************************** */
	/* 'Autor: ZaMa */
	/* 'Last Modification: 13/02/2010 */
	/* '*************************************************** */

	if (Cantidad > 0) {
		struct Obj MiObj;
		int RemainingGold;

		RemainingGold = Cantidad;

		while ((RemainingGold > 0)) {

			/* ' Tira pilon de 10k */
			if (RemainingGold > MAX_INVENTORY_OBJS) {
				MiObj.Amount = MAX_INVENTORY_OBJS;
				RemainingGold = RemainingGold - MAX_INVENTORY_OBJS;

				/* ' Tira lo que quede */
			} else {
				MiObj.Amount = RemainingGold;
				RemainingGold = 0;
			}

			MiObj.ObjIndex = iORO;

			TirarItemAlPiso(Pos, MiObj);
		}
	}
}
示例#4
0
void NPC_TIRAR_ITEMS(struct npc & npc, bool IsPretoriano) {
	/* '*************************************************** */
	/* 'Autor: Unknown (orginal version) */
	/* 'Last Modification: 28/11/2009 */
	/* 'Give away npc's items. */
	/* '28/11/2009: ZaMa - Implementado drops complejos */
	/* '02/04/2010: ZaMa - Los pretos vuelven a tirar oro. */
	/* '10/04/2011: ZaMa - Logueo los objetos logueables dropeados. */
	/* '*************************************************** */

	int i;
	struct Obj MiObj;
	int NroDrop;
	int Random;
	int ObjIndex;

	/* ' Tira todo el inventario */
	if (IsPretoriano) {
		for (i = (1); i <= (MAX_INVENTORY_SLOTS); i++) {
			if (npc.Invent.Object[i].ObjIndex > 0) {
				MiObj.Amount = npc.Invent.Object[i].Amount;
				MiObj.ObjIndex = npc.Invent.Object[i].ObjIndex;
				TirarItemAlPiso(npc.Pos, MiObj);
			}
		}

		/* ' Dropea oro? */
		if (npc.GiveGLD > 0) {
			TirarOroNpc(npc.GiveGLD, npc.Pos);
		}

		return;
	}

	Random = RandomNumber(1, 100);

	/* ' Tiene 10% de prob de no tirar nada */
	if (Random <= 90) {
		NroDrop = 1;

		if (Random <= 10) {
			NroDrop = NroDrop + 1;

			for (i = (1); i <= (3); i++) {
				/* ' 10% de ir pasando de etapas */
				if (RandomNumber(1, 100) <= 10) {
					NroDrop = NroDrop + 1;
				} else {
					break;
				}
			}

		}

		ObjIndex = npc.Drop[NroDrop].ObjIndex;
		if (ObjIndex > 0) {

			if (ObjIndex == iORO) {
				TirarOroNpc(npc.Drop[NroDrop].Amount, npc.Pos);
			} else {
				MiObj.Amount = npc.Drop[NroDrop].Amount;
				MiObj.ObjIndex = ObjIndex;

				TirarItemAlPiso(npc.Pos, MiObj);

				if (ObjData[ObjIndex].Log == 1) {
					LogDesarrollo(
							npc.Name + " dropeó " + vb6::CStr(MiObj.Amount) + " " + ObjData[ObjIndex].Name + "["
									+ vb6::CStr(ObjIndex) + "]");
				}
			}
		}
	}
}
void AceptarComercioUsu(int UserIndex) {
	/* '*************************************************** */
	/* 'Autor: Unkown */
	/* 'Last Modification: 06/05/2010 */
	/* '25/11/2009: ZaMa - Ahora se traspasan hasta 5 items + oro al comerciar */
	/* '06/05/2010: ZaMa - Ahora valida si los usuarios tienen los items que ofertan. */
	/* '*************************************************** */
	struct Obj TradingObj;
	int OtroUserIndex;
	int OfferSlot;

	UserList[UserIndex].ComUsu.Acepto = true;

	OtroUserIndex = UserList[UserIndex].ComUsu.DestUsu;

	/* ' User valido? */
	if (OtroUserIndex <= 0 || OtroUserIndex > MaxUsers) {
		FinComerciarUsu(UserIndex);
		return;
	}

	/* ' Acepto el otro? */
	if (UserList[OtroUserIndex].ComUsu.Acepto == false) {
		return;
	}

	/* ' Aceptaron ambos, chequeo que tengan los items que ofertaron */
	if (!HasOfferedItems(UserIndex)) {

		WriteConsoleMsg(UserIndex, "¡¡¡El comercio se canceló porque no posees los ítems que ofertaste!!!",
				FontTypeNames_FONTTYPE_FIGHT);
		WriteConsoleMsg(OtroUserIndex,
				"¡¡¡El comercio se canceló porque " + UserList[UserIndex].Name
						+ " no posee los ítems que ofertó!!!", FontTypeNames_FONTTYPE_FIGHT);

		FinComerciarUsu(UserIndex);
		FinComerciarUsu(OtroUserIndex);
		FlushBuffer(OtroUserIndex);

		return;

	} else if (!HasOfferedItems(OtroUserIndex)) {

		WriteConsoleMsg(UserIndex,
				"¡¡¡El comercio se canceló porque " + UserList[OtroUserIndex].Name
						+ " no posee los ítems que ofertó!!!", FontTypeNames_FONTTYPE_FIGHT);
		WriteConsoleMsg(OtroUserIndex,
				"¡¡¡El comercio se canceló porque no posees los ítems que ofertaste!!!",
				FontTypeNames_FONTTYPE_FIGHT);

		FinComerciarUsu(UserIndex);
		FinComerciarUsu(OtroUserIndex);
		FlushBuffer(OtroUserIndex);

		return;

	}

	/* ' Envio los items a quien corresponde */
	for (OfferSlot = (1); OfferSlot <= (MAX_OFFER_SLOTS + 1); OfferSlot++) {

		/* ' Items del 1er usuario */
		/* ' Le pasa el oro */
		if (OfferSlot == GOLD_OFFER_SLOT) {
			/* ' Quito la cantidad de oro ofrecida */
			UserList[UserIndex].Stats.GLD = UserList[UserIndex].Stats.GLD
					- UserList[UserIndex].ComUsu.GoldAmount;
			/* ' Log */
			if (UserList[UserIndex].ComUsu.GoldAmount >= MIN_GOLD_AMOUNT_LOG) {
				LogDesarrollo(
						UserList[UserIndex].Name + " soltó oro en comercio seguro con "
								+ UserList[OtroUserIndex].Name + ". Cantidad: "
								+ vb6::CStr(UserList[UserIndex].ComUsu.GoldAmount));
			}
			/* ' Update Usuario */
			WriteUpdateGold(UserIndex);
			/* ' Se la doy al otro */
			UserList[OtroUserIndex].Stats.GLD = UserList[OtroUserIndex].Stats.GLD
					+ UserList[UserIndex].ComUsu.GoldAmount;
			/* ' Update Otro Usuario */
			WriteUpdateGold(OtroUserIndex);

			/* ' Le pasa lo ofertado de los slots con items */
		} else if (UserList[UserIndex].ComUsu.Objeto[OfferSlot] > 0) {
			TradingObj.ObjIndex = UserList[UserIndex].ComUsu.Objeto[OfferSlot];
			TradingObj.Amount = UserList[UserIndex].ComUsu.cant[OfferSlot];

			/* 'Quita el objeto y se lo da al otro */
			if (!MeterItemEnInventario(OtroUserIndex, TradingObj)) {
				TirarItemAlPiso(UserList[OtroUserIndex].Pos, TradingObj);
			}

			QuitarObjetos(TradingObj.ObjIndex, TradingObj.Amount, UserIndex);

			/* 'Es un Objeto que tenemos que loguear? Pablo (ToxicWaste) 07/09/07 */
			if (((ObjData[TradingObj.ObjIndex].Log == 1)
					|| (ObjData[TradingObj.ObjIndex].OBJType == eOBJType_otLlaves))) {
				LogDesarrollo(
						UserList[UserIndex].Name + " le pasó en comercio seguro a "
								+ UserList[OtroUserIndex].Name + " " + vb6::CStr(TradingObj.Amount) + " "
								+ ObjData[TradingObj.ObjIndex].Name);
				/* 'Es mucha cantidad? */
			} else if (TradingObj.Amount >= MIN_AMOUNT_LOG) {
				/* 'Si no es de los prohibidos de loguear, lo logueamos. */
				if (ObjData[TradingObj.ObjIndex].NoLog != 1) {
					LogDesarrollo(
							UserList[UserIndex].Name + " le pasó en comercio seguro a "
									+ UserList[OtroUserIndex].Name + " " + vb6::CStr(TradingObj.Amount) + " "
									+ ObjData[TradingObj.ObjIndex].Name);
				}
			} else if ((TradingObj.Amount * ObjData[TradingObj.ObjIndex].Valor) >= MIN_VALUE_LOG) {
				/* 'Si no es de los prohibidos de loguear, lo logueamos. */
				if (ObjData[TradingObj.ObjIndex].NoLog != 1) {
					LogDesarrollo(
							UserList[UserIndex].Name + " le pasó en comercio seguro a "
									+ UserList[OtroUserIndex].Name + " " + vb6::CStr(TradingObj.Amount) + " "
									+ ObjData[TradingObj.ObjIndex].Name);
				}
			}
		}

		/* ' Items del 2do usuario */
		/* ' Le pasa el oro */
		if (OfferSlot == GOLD_OFFER_SLOT) {
			/* ' Quito la cantidad de oro ofrecida */
			UserList[OtroUserIndex].Stats.GLD = UserList[OtroUserIndex].Stats.GLD
					- UserList[OtroUserIndex].ComUsu.GoldAmount;
			/* ' Log */
			if (UserList[OtroUserIndex].ComUsu.GoldAmount >= MIN_GOLD_AMOUNT_LOG) {
				LogDesarrollo(
						UserList[OtroUserIndex].Name + " soltó oro en comercio seguro con "
								+ UserList[UserIndex].Name + ". Cantidad: "
								+ vb6::CStr(UserList[OtroUserIndex].ComUsu.GoldAmount));
			}
			/* ' Update Usuario */
			WriteUpdateGold(OtroUserIndex);
			/* 'y se la doy al otro */
			UserList[UserIndex].Stats.GLD = UserList[UserIndex].Stats.GLD
					+ UserList[OtroUserIndex].ComUsu.GoldAmount;

			/* ' Update Otro Usuario */
			WriteUpdateGold(UserIndex);

			/* ' Le pasa la oferta de los slots con items */
		} else if (UserList[OtroUserIndex].ComUsu.Objeto[OfferSlot] > 0) {
			TradingObj.ObjIndex = UserList[OtroUserIndex].ComUsu.Objeto[OfferSlot];
			TradingObj.Amount = UserList[OtroUserIndex].ComUsu.cant[OfferSlot];

			/* 'Quita el objeto y se lo da al otro */
			if (!MeterItemEnInventario(UserIndex, TradingObj)) {
				TirarItemAlPiso(UserList[UserIndex].Pos, TradingObj);
			}

			QuitarObjetos(TradingObj.ObjIndex, TradingObj.Amount, OtroUserIndex);

			/* 'Es un Objeto que tenemos que loguear? Pablo (ToxicWaste) 07/09/07 */
			if (((ObjData[TradingObj.ObjIndex].Log == 1)
					|| (ObjData[TradingObj.ObjIndex].OBJType == eOBJType_otLlaves))) {
				LogDesarrollo(
						UserList[OtroUserIndex].Name + " le pasó en comercio seguro a "
								+ UserList[UserIndex].Name + " " + vb6::CStr(TradingObj.Amount) + " "
								+ ObjData[TradingObj.ObjIndex].Name);
				/* 'Es mucha cantidad? */
			} else if (TradingObj.Amount >= MIN_AMOUNT_LOG) {
				/* 'Si no es de los prohibidos de loguear, lo logueamos. */
				if (ObjData[TradingObj.ObjIndex].NoLog != 1) {
					LogDesarrollo(
							UserList[OtroUserIndex].Name + " le pasó en comercio seguro a "
									+ UserList[UserIndex].Name + " " + vb6::CStr(TradingObj.Amount) + " "
									+ ObjData[TradingObj.ObjIndex].Name);
				}
			} else if ((TradingObj.Amount * ObjData[TradingObj.ObjIndex].Valor) >= MIN_VALUE_LOG) {
				/* 'Si no es de los prohibidos de loguear, lo logueamos. */
				if (ObjData[TradingObj.ObjIndex].NoLog != 1) {
					LogDesarrollo(
							UserList[OtroUserIndex].Name + " le pasó en comercio seguro a "
									+ UserList[UserIndex].Name + " " + vb6::CStr(TradingObj.Amount) + " "
									+ ObjData[TradingObj.ObjIndex].Name);
				}
			}
		}

	}

	/* ' End Trade */
	FinComerciarUsu(UserIndex);
	FinComerciarUsu(OtroUserIndex);
	FlushBuffer(OtroUserIndex);

}