231 {
232 if (!playerTarget)
233 {
235 }
236
237 if (!playerTarget)
238 {
241 return false;
242 }
243
244 uint32 entry = quest->GetQuestId();
245
246 if (
Player* player = playerTarget->GetConnectedPlayer())
247 {
248
250 {
253 return false;
254 }
255
256
258 {
259 uint32 id = quest->RequiredItemId[x];
260 uint32 count = quest->RequiredItemCount[x];
261 if (!id || !count)
262 {
263 continue;
264 }
265
266 uint32 curItemCount = player->GetItemCount(
id,
true);
267
271 {
272 Item* item = player->StoreNewItem(dest,
id,
true);
273 player->SendNewItem(item, count - curItemCount, true, false);
274 }
275 }
276
277
279 {
280 int32 creature = quest->RequiredNpcOrGo[i];
281 uint32 creatureCount = quest->RequiredNpcOrGoCount[i];
282
283 if (creature > 0)
284 {
286 {
287 for (
uint16 z = 0; z < creatureCount; ++z)
288 {
290 }
291 }
292 }
293 else if (creature < 0)
294 {
295 for (
uint16 z = 0; z < creatureCount; ++z)
296 {
297 player->KillCreditGO(creature);
298 }
299 }
300 }
301
302
304 {
305 if (
uint32 reqPlayers = quest->GetPlayersSlain())
306 {
307 player->KilledPlayerCreditForQuest(reqPlayers, quest);
308 }
309 }
310
311
312 if (
uint32 repFaction = quest->GetRepObjectiveFaction())
313 {
314 uint32 repValue = quest->GetRepObjectiveValue();
315 uint32 curRep = player->GetReputationMgr().GetReputation(repFaction);
316 if (curRep < repValue)
317 {
319 {
320 player->GetReputationMgr().SetReputation(factionEntry, static_cast<float>(repValue));
321 }
322 }
323 }
324
325
326 if (
uint32 repFaction = quest->GetRepObjectiveFaction2())
327 {
328 uint32 repValue2 = quest->GetRepObjectiveValue2();
329 uint32 curRep = player->GetReputationMgr().GetReputation(repFaction);
330 if (curRep < repValue2)
331 {
333 {
334 player->GetReputationMgr().SetReputation(factionEntry, static_cast<float>(repValue2));
335 }
336 }
337 }
338
339
340 int32 ReqOrRewMoney = quest->GetRewOrReqMoney(player->GetLevel());
341 if (ReqOrRewMoney < 0)
342 {
343 player->ModifyMoney(-ReqOrRewMoney);
344 }
345
346 player->CompleteQuest(entry);
347 }
348 else
349 {
352
353 if (!result)
354 {
357 return false;
358 }
359
361
362 typedef std::pair<uint32, uint32> items;
363 std::vector<items> questItems;
364
366 {
367 uint32 id = quest->RequiredItemId[x];
368 uint32 count = quest->RequiredItemCount[x];
369 if (!id || !count)
370 {
371 continue;
372 }
373
374 questItems.push_back(std::pair(id, count));
375 }
376
377 if (!questItems.empty())
378 {
380
381 MailDraft draft(quest->GetTitle(), std::string());
382
383 for (auto const& itr : questItems)
384 {
386 {
388 draft.AddItem(item);
389 }
390 }
391
392 draft.SendMailTo(trans,
MailReceiver(
nullptr, guid), sender);
393 }
394
396
403
405 {
406 stmt->
SetData(index++, quest->RequiredNpcOrGoCount[i]);
407 }
408
410 {
411
413 }
414
416
417 trans->Append(stmt);
418
419
420 if (
uint32 repFaction = quest->GetRepObjectiveFaction())
421 {
422 uint32 repValue = quest->GetRepObjectiveValue();
423
428
429 if (result)
430 {
431 Field* fields = result->Fetch();
433
434 if (curRep < repValue)
435 {
437 {
443 trans->Append(stmt);
444 }
445 }
446 }
447 }
448
449
450 if (
uint32 repFaction = quest->GetRepObjectiveFaction2())
451 {
452 uint32 repValue = quest->GetRepObjectiveValue();
453
458
459 if (result)
460 {
461 Field* fields = result->Fetch();
463
464 if (curRep < repValue)
465 {
467 {
473 trans->Append(stmt);
474 }
475 }
476 }
477 }
478
480 }
481
482
484 {
485
488 stmt->
SetData(1, playerTarget->GetGUID().GetCounter());
489
490
492 }
493
496 return true;
497 }
std::int32_t int32
Definition: Define.h:104
std::uint16_t uint16
Definition: Define.h:109
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
Definition: DatabaseEnvFwd.h:70
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition: DatabaseEnvFwd.h:46
@ CHAR_SEL_CHAR_REP_BY_FACTION
Definition: CharacterDatabase.h:396
@ CHAR_UPD_QUEST_TRACK_GM_COMPLETE
Definition: CharacterDatabase.h:499
@ CHAR_UPD_CHAR_REP_FACTION_CHANGE
Definition: CharacterDatabase.h:398
DBCStorage< FactionEntry > sFactionStore(FactionEntryfmt)
@ EQUIP_ERR_OK
Definition: Item.h:41
std::vector< ItemPosCount > ItemPosCountVec
Definition: Player.h:772
@ NULL_BAG
Definition: Unit.h:210
@ NULL_SLOT
Definition: Unit.h:211
@ MAIL_STATIONERY_GM
Definition: Mail.h:60
@ MAIL_NORMAL
Definition: Mail.h:38
@ LANG_COMMAND_QUEST_COMPLETE
Definition: Language.h:491
@ LANG_COMMAND_QUEST_NOTFOUND
Definition: Language.h:487
@ LANG_COMMAND_QUEST_NOT_FOUND_IN_LOG
Definition: Language.h:1129
@ QUEST_FLAGS_EXPLORATION
Definition: QuestDef.h:134
@ QUEST_STATUS_NONE
Definition: QuestDef.h:100
@ QUEST_SPECIAL_FLAGS_PLAYER_KILL
Definition: QuestDef.h:176
@ CONFIG_QUEST_ENABLE_QUEST_TRACKER
Definition: IWorld.h:149
#define sWorld
Definition: World.h:451
Class used to access individual fields of database query result.
Definition: Field.h:99
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition: Field.h:113
Definition: CreatureData.h:176
static Item * CreateItem(uint32 item, uint32 count, Player const *player=nullptr, bool clone=false, uint32 randomPropertyId=0)
Definition: Item.cpp:1089
virtual void SaveToDB(CharacterDatabaseTransaction trans)
Definition: Item.cpp:338
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:106
LowType GetCounter() const
Definition: ObjectGuid.h:147
static ObjectGuid const Empty
Definition: ObjectGuid.h:122
Definition: DBCStructure.h:898