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); } } }
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); } }
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); } } }
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); }