mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-28 17:11:29 +00:00
Wip merchant stuff, summoning should work now.
This commit is contained in:
parent
dda8ae4803
commit
00af95502e
@ -22,7 +22,6 @@
|
||||
#include "data_verification.h"
|
||||
#include "string_util.h"
|
||||
#include <map>
|
||||
#include <queue>
|
||||
|
||||
bool EQEmu::InventorySlot::IsValid() const {
|
||||
if(type_ == InvTypePersonal && EQEmu::ValueWithin(slot_, PersonalSlotCharm, PersonalSlotCursor)) {
|
||||
|
||||
@ -1253,7 +1253,7 @@ ItemInst* SharedDatabase::CreateBaseItemOld(const ItemData* item, int16 charges)
|
||||
return inst;
|
||||
}
|
||||
|
||||
std::shared_ptr<EQEmu::ItemInstance> SharedDatabase::CreateItem(uint32 item_id, int16 charges) {
|
||||
std::shared_ptr<EQEmu::ItemInstance> SharedDatabase::CreateItem(uint32 item_id, int16 charges, bool unique) {
|
||||
const ItemData* item = GetItem(item_id);
|
||||
if(item) {
|
||||
if(charges == 0 && item->MaxCharges == -1) {
|
||||
@ -1265,8 +1265,10 @@ std::shared_ptr<EQEmu::ItemInstance> SharedDatabase::CreateItem(uint32 item_id,
|
||||
}
|
||||
|
||||
std::shared_ptr<EQEmu::ItemInstance> inst = std::shared_ptr<EQEmu::ItemInstance>(new EQEmu::ItemInstance(item, charges));
|
||||
inst->SetSerialNumber(EQEmu::GetNextItemInstanceSerial());
|
||||
//Set Tracking here
|
||||
if(unique) {
|
||||
inst->SetSerialNumber(EQEmu::GetNextItemInstanceSerial());
|
||||
//Set Tracking here
|
||||
}
|
||||
return inst;
|
||||
}
|
||||
|
||||
|
||||
@ -85,7 +85,7 @@ class SharedDatabase : public Database
|
||||
ItemInst* CreateItemOld(uint32 item_id, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0);
|
||||
ItemInst* CreateItemOld(const ItemData* item, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0);
|
||||
ItemInst* CreateBaseItemOld(const ItemData* item, int16 charges = 0);
|
||||
std::shared_ptr<EQEmu::ItemInstance> CreateItem(uint32 item_id, int16 charges = 0);
|
||||
std::shared_ptr<EQEmu::ItemInstance> CreateItem(uint32 item_id, int16 charges = 0, bool unique = true);
|
||||
|
||||
/*
|
||||
Shared Memory crap
|
||||
|
||||
@ -829,7 +829,7 @@ public:
|
||||
bool SwapItem(const EQEmu::InventorySlot &src, const EQEmu::InventorySlot &dest, int number_in_stack);
|
||||
bool SummonItem(uint32 item_id,
|
||||
int16 charges,
|
||||
const EQEmu::InventorySlot &slot,
|
||||
const EQEmu::InventorySlot &slot = EQEmu::InventorySlot(EQEmu::InvTypePersonal, EQEmu::PersonalSlotCursor),
|
||||
uint32 aug1 = 0,
|
||||
uint32 aug2 = 0,
|
||||
uint32 aug3 = 0,
|
||||
|
||||
@ -2628,7 +2628,7 @@ void Client::Handle_OP_AltCurrencyReclaim(const EQApplicationPacket *app)
|
||||
|
||||
/* If you input more than you have currency wise, just give the max of the currency you currently have */
|
||||
if (reclaim->count > max_currency) {
|
||||
SummonItem(item_id, max_currency);
|
||||
SummonItem(item_id, max_currency, 0);
|
||||
SetAlternateCurrencyValue(reclaim->currency_id, 0);
|
||||
}
|
||||
else {
|
||||
@ -4889,14 +4889,14 @@ void Client::Handle_OP_CrystalCreate(const EQApplicationPacket *app)
|
||||
|
||||
if (cr->type == 5) {
|
||||
if (cr->amount > GetEbonCrystals()) {
|
||||
SummonItem(RuleI(Zone, EbonCrystalItemID), GetEbonCrystals());
|
||||
SummonItem(RuleI(Zone, EbonCrystalItemID), GetEbonCrystals(), 0);
|
||||
m_pp.currentEbonCrystals = 0;
|
||||
m_pp.careerEbonCrystals = 0;
|
||||
SaveCurrency();
|
||||
SendCrystalCounts();
|
||||
}
|
||||
else {
|
||||
SummonItem(RuleI(Zone, EbonCrystalItemID), cr->amount);
|
||||
SummonItem(RuleI(Zone, EbonCrystalItemID), cr->amount, 0);
|
||||
m_pp.currentEbonCrystals -= cr->amount;
|
||||
m_pp.careerEbonCrystals -= cr->amount;
|
||||
SaveCurrency();
|
||||
@ -4905,14 +4905,14 @@ void Client::Handle_OP_CrystalCreate(const EQApplicationPacket *app)
|
||||
}
|
||||
else if (cr->type == 4) {
|
||||
if (cr->amount > GetRadiantCrystals()) {
|
||||
SummonItem(RuleI(Zone, RadiantCrystalItemID), GetRadiantCrystals());
|
||||
SummonItem(RuleI(Zone, RadiantCrystalItemID), GetRadiantCrystals(), 0);
|
||||
m_pp.currentRadCrystals = 0;
|
||||
m_pp.careerRadCrystals = 0;
|
||||
SaveCurrency();
|
||||
SendCrystalCounts();
|
||||
}
|
||||
else {
|
||||
SummonItem(RuleI(Zone, RadiantCrystalItemID), cr->amount);
|
||||
SummonItem(RuleI(Zone, RadiantCrystalItemID), cr->amount, 0);
|
||||
m_pp.currentRadCrystals -= cr->amount;
|
||||
m_pp.careerRadCrystals -= cr->amount;
|
||||
SaveCurrency();
|
||||
@ -12177,7 +12177,6 @@ void Client::Handle_OP_ShopPlayerSell(const EQApplicationPacket *app)
|
||||
sizeof(Merchant_Purchase_Struct), app->size);
|
||||
return;
|
||||
}
|
||||
RDTSC_Timer t1(true);
|
||||
Merchant_Purchase_Struct* mp = (Merchant_Purchase_Struct*)app->pBuffer;
|
||||
|
||||
Mob* vendor = entity_list.GetMob(mp->npcid);
|
||||
@ -12206,7 +12205,6 @@ void Client::Handle_OP_ShopPlayerSell(const EQApplicationPacket *app)
|
||||
}
|
||||
|
||||
if (!item->NoDrop) {
|
||||
//Message(13,"%s tells you, 'LOL NOPE'", vendor->GetName());
|
||||
return;
|
||||
}
|
||||
|
||||
@ -12319,10 +12317,7 @@ void Client::Handle_OP_ShopPlayerSell(const EQApplicationPacket *app)
|
||||
QueuePacket(outapp);
|
||||
safe_delete(outapp);
|
||||
SendMoneyUpdate();
|
||||
t1.start();
|
||||
Save(1);
|
||||
t1.stop();
|
||||
std::cout << "Save took: " << t1.getDuration() << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -873,7 +873,7 @@ void Client::BulkSendMerchantInventory(int merchant_id, int npcid) {
|
||||
int charges = 1;
|
||||
if (item->ItemClass == ItemClassCommon)
|
||||
charges = item->MaxCharges;
|
||||
ItemInst* inst = database.CreateItemOld(item, charges);
|
||||
auto inst = database.CreateItem(item->ID, charges, false);
|
||||
if (inst) {
|
||||
if (RuleB(Merchant, UsePriceMod)) {
|
||||
inst->SetPrice((item->Price * (RuleR(Merchant, SellCostMod)) * item->SellRate * Client::CalcPriceMod(merch, false)));
|
||||
@ -887,8 +887,7 @@ void Client::BulkSendMerchantInventory(int merchant_id, int npcid) {
|
||||
else
|
||||
inst->SetCharges(1);
|
||||
|
||||
SendItemPacket(ml.slot - 1, inst, ItemPacketMerchant);
|
||||
safe_delete(inst);
|
||||
SendItemPacket(EQEmu::InventorySlot(EQEmu::InvTypePersonal, ml.slot - 1), inst, ItemPacketMerchant);
|
||||
}
|
||||
}
|
||||
// Account for merchant lists with gaps.
|
||||
|
||||
@ -5419,24 +5419,31 @@ void command_summonitem(Client *c, const Seperator *sep)
|
||||
}
|
||||
|
||||
EQEmu::InventorySlot cursor(EQEmu::InvTypePersonal, EQEmu::PersonalSlotCursor);
|
||||
if (item_status > c->Admin())
|
||||
bool v = false;
|
||||
if (item_status > c->Admin()) {
|
||||
c->Message(13, "Error: Insufficient status to summon this item.");
|
||||
return;
|
||||
}
|
||||
else if (sep->argnum==2 && sep->IsNumber(2))
|
||||
c->SummonItem(itemid, atoi(sep->arg[2]), cursor);
|
||||
v = c->SummonItem(itemid, atoi(sep->arg[2]), cursor);
|
||||
else if (sep->argnum==3)
|
||||
c->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]));
|
||||
v = c->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]));
|
||||
else if (sep->argnum==4)
|
||||
c->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]), atoi(sep->arg[4]));
|
||||
v = c->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]), atoi(sep->arg[4]));
|
||||
else if (sep->argnum==5)
|
||||
c->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]));
|
||||
v = c->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]));
|
||||
else if (sep->argnum==6)
|
||||
c->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]), atoi(sep->arg[6]));
|
||||
v = c->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]), atoi(sep->arg[6]));
|
||||
else if (sep->argnum==7)
|
||||
c->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]), atoi(sep->arg[6]), atoi(sep->arg[7]));
|
||||
v = c->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]), atoi(sep->arg[6]), atoi(sep->arg[7]));
|
||||
else if (sep->argnum==8)
|
||||
c->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]), atoi(sep->arg[6]), atoi(sep->arg[7]), atoi(sep->arg[8]));
|
||||
v = c->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]), atoi(sep->arg[6]), atoi(sep->arg[7]), atoi(sep->arg[8]));
|
||||
else {
|
||||
c->SummonItem(itemid, -1, cursor);
|
||||
v = c->SummonItem(itemid, -1, cursor);
|
||||
}
|
||||
|
||||
if(!v) {
|
||||
c->Message(13, "Error: unable to summon item.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -5458,24 +5465,32 @@ void command_giveitem(Client *c, const Seperator *sep)
|
||||
item_status = static_cast<int16>(item->MinStatus);
|
||||
}
|
||||
|
||||
if (item_status > c->Admin())
|
||||
EQEmu::InventorySlot cursor(EQEmu::InvTypePersonal, EQEmu::PersonalSlotCursor);
|
||||
bool v = false;
|
||||
if (item_status > c->Admin()) {
|
||||
c->Message(13, "Error: Insufficient status to summon this item.");
|
||||
return;
|
||||
}
|
||||
else if (sep->argnum==2 && sep->IsNumber(2))
|
||||
t->SummonItem(itemid, atoi(sep->arg[2]));
|
||||
v = t->SummonItem(itemid, atoi(sep->arg[2]), cursor);
|
||||
else if (sep->argnum==3)
|
||||
t->SummonItem(itemid, atoi(sep->arg[2]), atoi(sep->arg[3]));
|
||||
v = t->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]));
|
||||
else if (sep->argnum==4)
|
||||
t->SummonItem(itemid, atoi(sep->arg[2]), atoi(sep->arg[3]), atoi(sep->arg[4]));
|
||||
v = t->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]), atoi(sep->arg[4]));
|
||||
else if (sep->argnum==5)
|
||||
t->SummonItem(itemid, atoi(sep->arg[2]), atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]));
|
||||
v = t->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]));
|
||||
else if (sep->argnum==6)
|
||||
t->SummonItem(itemid, atoi(sep->arg[2]), atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]), atoi(sep->arg[6]));
|
||||
v = t->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]), atoi(sep->arg[6]));
|
||||
else if (sep->argnum==7)
|
||||
t->SummonItem(itemid, atoi(sep->arg[2]), atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]), atoi(sep->arg[6]), atoi(sep->arg[7]));
|
||||
v = t->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]), atoi(sep->arg[6]), atoi(sep->arg[7]));
|
||||
else if (sep->argnum == 7)
|
||||
t->SummonItem(itemid, atoi(sep->arg[2]), atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]), atoi(sep->arg[6]), atoi(sep->arg[7]), atoi(sep->arg[8]));
|
||||
v = t->SummonItem(itemid, atoi(sep->arg[2]), cursor, atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]), atoi(sep->arg[6]), atoi(sep->arg[7]), atoi(sep->arg[8]));
|
||||
else {
|
||||
t->SummonItem(itemid);
|
||||
v = t->SummonItem(itemid, -1, cursor);
|
||||
}
|
||||
|
||||
if(!v) {
|
||||
c->Message(13, "Error: Unable to summon item on target.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1649,7 +1649,7 @@ bool Client::SwapItem(MoveItemOld_Struct* move_in) {
|
||||
} else {
|
||||
if(RuleB(QueryServ, PlayerLogMoves)) { QSSwapItemAuditor(move_in); } // QS Audit
|
||||
|
||||
SummonItem(src_inst->GetID(), src_inst->GetCharges());
|
||||
SummonItem(src_inst->GetID(), src_inst->GetCharges(), 0);
|
||||
DeleteItemInInventory(MainCursor);
|
||||
|
||||
return true;
|
||||
|
||||
@ -672,7 +672,7 @@ void Lua_Client::SummonItem(uint32 item_id) {
|
||||
|
||||
void Lua_Client::SummonItem(uint32 item_id, int charges) {
|
||||
Lua_Safe_Call_Void();
|
||||
self->SummonItem(item_id, charges);
|
||||
self->SummonItem(item_id, charges, 0);
|
||||
}
|
||||
|
||||
void Lua_Client::SummonItem(uint32 item_id, int charges, uint32 aug1) {
|
||||
|
||||
@ -189,7 +189,7 @@ void QuestManager::summonitem(uint32 itemid, int16 charges) {
|
||||
QuestManagerCurrentQuestVars();
|
||||
if(!initiator)
|
||||
return;
|
||||
initiator->SummonItem(itemid, charges);
|
||||
initiator->SummonItem(itemid, charges, 0);
|
||||
}
|
||||
|
||||
void QuestManager::write(const char *file, const char *str) {
|
||||
|
||||
@ -619,7 +619,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
||||
strstr(transI->GetItem()->Name, "parts") ||
|
||||
strstr(transI->GetItem()->Name, "Parts")){
|
||||
CastToClient()->DeleteItemInInventory(MainCursor, fcharges, true);
|
||||
CastToClient()->SummonItem(13073, fcharges);
|
||||
CastToClient()->SummonItem(13073, fcharges, 0);
|
||||
}
|
||||
else{
|
||||
Message(13, "You can only transmute flesh to bone.");
|
||||
|
||||
@ -1068,7 +1068,7 @@ bool Client::TradeskillExecute(DBTradeskillRecipe_Struct *spec) {
|
||||
itr = spec->onsuccess.begin();
|
||||
while(itr != spec->onsuccess.end() && !spec->quest) {
|
||||
//should we check this crap?
|
||||
SummonItem(itr->first, itr->second);
|
||||
SummonItem(itr->first, itr->second, 0);
|
||||
item = database.GetItem(itr->first);
|
||||
if (this->GetGroup()) {
|
||||
entity_list.MessageGroup(this, true, MT_Skills, "%s has successfully fashioned %s!", GetName(), item->Name);
|
||||
@ -1111,7 +1111,7 @@ bool Client::TradeskillExecute(DBTradeskillRecipe_Struct *spec) {
|
||||
itr = spec->onfail.begin();
|
||||
while(itr != spec->onfail.end()) {
|
||||
//should we check these arguments?
|
||||
SummonItem(itr->first, itr->second);
|
||||
SummonItem(itr->first, itr->second, 0);
|
||||
++itr;
|
||||
}
|
||||
|
||||
@ -1126,7 +1126,7 @@ bool Client::TradeskillExecute(DBTradeskillRecipe_Struct *spec) {
|
||||
while(itr != spec->salvage.end()) {
|
||||
for(sc = 0; sc < itr->second; sc++)
|
||||
if(zone->random.Roll(SalvageChance))
|
||||
SummonItem(itr->first, 1);
|
||||
SummonItem(itr->first, 1, 0);
|
||||
++itr;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user