mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-31 17:26:30 +00:00
Wip merchant stuff, summoning should work now.
This commit is contained in:
+1
-1
@@ -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,
|
||||
|
||||
+5
-10
@@ -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.
|
||||
|
||||
+33
-18
@@ -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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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) {
|
||||
|
||||
+1
-1
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user