Skip to content

Commit

Permalink
Started added in tests for guide request requirments
Browse files Browse the repository at this point in the history
  • Loading branch information
AdamKyle committed Dec 9, 2024
1 parent a4f99d5 commit 9824f99
Show file tree
Hide file tree
Showing 5 changed files with 683 additions and 67 deletions.
10 changes: 5 additions & 5 deletions app/Game/GuideQuests/Services/GuideQuestRequirementsService.php
Original file line number Diff line number Diff line change
Expand Up @@ -379,9 +379,9 @@ public function requiredClassRankLevel(Character $character, GuideQuest $quest):
*/
public function requiredCurrency(Character $character, GuideQuest $quest, string $currency): GuideQuestRequirementsService
{
if (! is_null($quest->{'required_'.$currency})) {
if ($character->{$currency} >= $quest->{'required_'.$currency}) {
$this->finishedRequirements[] = 'required_'.$currency;
if (! is_null($quest->{'required_' . $currency})) {
if ($character->{$currency} >= $quest->{'required_' . $currency}) {
$this->finishedRequirements[] = 'required_' . $currency;
}
}

Expand Down Expand Up @@ -419,13 +419,13 @@ public function requiredTotalStats(Character $character, GuideQuest $quest, arra
public function requiredStats(Character $character, GuideQuest $quest, array $stats): GuideQuestRequirementsService
{
foreach ($stats as $stat) {
$questStat = $quest->{'required_'.$stat};
$questStat = $quest->{'required_' . $stat};

if (! is_null($questStat)) {
$value = $character->getInformation()->statMod($stat);

if ($value >= $questStat) {
$this->finishedRequirements[] = 'required_'.$stat;
$this->finishedRequirements[] = 'required_' . $stat;
}
}
}
Expand Down
95 changes: 37 additions & 58 deletions app/Game/GuideQuests/Services/GuideQuestService.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,11 @@ public function __construct(GuideQuestRequirementsService $guideQuestRequirement
$this->guideQuestRequirementsService = $guideQuestRequirementsService;
}

public function fetchQuestForCharacter(Character $character): ?array
public function fetchQuestForCharacter(Character $character): array
{

$quests = $this->fetchNextGuideQuest($character);

if (is_null($quests)) {
return null;
}

$canHandIn = [];
$completedAttributes = [];

Expand Down Expand Up @@ -82,18 +78,6 @@ public function handInQuest(Character $character, GuideQuest $quest): bool
$shards = MaxCurrenciesValue::MAX_SHARDS;
}

if ($quest->gold_reward > 0) {
event(new ServerMessageEvent($character->user, 'Rewarded with: ' . number_format($quest->gold_reward) . ' Gold.'));
}

if ($quest->gold_dust_reward > 0) {
event(new ServerMessageEvent($character->user, 'Rewarded with: ' . number_format($quest->gold_dust_reward) . ' Gold Dust.'));
}

if ($quest->shards_reward > 0) {
event(new ServerMessageEvent($character->user, 'Rewarded with: ' . number_format($quest->shards_reward) . ' Shards.'));
}

$character = $this->giveXP($character, $quest);

$character->update([
Expand All @@ -109,31 +93,23 @@ public function handInQuest(Character $character, GuideQuest $quest): bool

$character = $character->refresh();

event(new UpdateTopBarEvent($character));

event(new ShowGuideQuestCompletedToast($character->user, false));

return true;
}

public function giveXP(Character $character, GuideQuest $guideQuest): Character
{

if ($guideQuest->xp_reward <= 0) {
return $character;
if ($quest->gold_reward > 0) {
event(new ServerMessageEvent($character->user, 'Rewarded with: ' . number_format($quest->gold_reward) . ' Gold. You now have: ' . number_format($character->gold)));
}

$character->update([
'xp' => $character->xp + $guideQuest->xp_reward,
]);
if ($quest->gold_dust_reward > 0) {
event(new ServerMessageEvent($character->user, 'Rewarded with: ' . number_format($quest->gold_dust_reward) . ' Gold Dust. You now have: ' . number_format($character->gold_dust)));
}

$character = $character->refresh();
if ($quest->shards_reward > 0) {
event(new ServerMessageEvent($character->user, 'Rewarded with: ' . number_format($quest->shards_reward) . ' Shards. You now have: ' . number_format($character->shards)));
}

$this->handlePossibleLevelUp($character);
event(new UpdateTopBarEvent($character));

event(new ServerMessageEvent($character->user, 'Rewarded with: ' . number_format($guideQuest->xp_reward) . ' XP.'));
event(new ShowGuideQuestCompletedToast($character->user, false));

return $character;
return true;
}

public function canHandInQuest(Character $character, GuideQuest $quest, bool $ignoreAutomation = false): bool
Expand Down Expand Up @@ -197,7 +173,27 @@ public function canHandInQuest(Character $character, GuideQuest $quest, bool $ig
return false;
}

protected function fetchNextGuideQuest(Character $character): array
private function giveXP(Character $character, GuideQuest $guideQuest): Character
{

if ($guideQuest->xp_reward <= 0) {
return $character;
}

$character->update([
'xp' => $character->xp + $guideQuest->xp_reward,
]);

$character = $character->refresh();

$this->handlePossibleLevelUp($character);

event(new ServerMessageEvent($character->user, 'Rewarded with: ' . number_format($guideQuest->xp_reward) . ' XP.'));

return $character;
}

private function fetchNextGuideQuest(Character $character): array
{

$winterEvent = Event::where('type', EventType::WINTER_EVENT)->first();
Expand Down Expand Up @@ -249,7 +245,7 @@ protected function fetchNextGuideQuest(Character $character): array
return $guideQuests;
}

protected function fetchNextRegularGuideQuest(Character $character): ?GuideQuest
private function fetchNextRegularGuideQuest(Character $character): ?GuideQuest
{
$lastCompletedGuideQuest = $character->questsCompleted()
->whereHas('guideQuest', function ($query) {
Expand All @@ -260,7 +256,7 @@ protected function fetchNextRegularGuideQuest(Character $character): ?GuideQuest
->first();

if (is_null($lastCompletedGuideQuest)) {
return GuideQuest::first();
return GuideQuest::whereNull('only_during_event')->whereNull('unlock_at_level')->first();
}

$questId = GuideQuest::whereNull('only_during_event')
Expand All @@ -271,15 +267,8 @@ protected function fetchNextRegularGuideQuest(Character $character): ?GuideQuest
return GuideQuest::find($questId);
}

protected function fetchNextEventQuest(Character $character, GuideQuest $initialEventGuideQuest): ?GuideQuest
private function fetchNextEventQuest(Character $character, GuideQuest $initialEventGuideQuest): ?GuideQuest
{

if (! is_null($initialEventGuideQuest->unlock_at_level)) {
if ($character->level < $initialEventGuideQuest->unlock_at_level) {
return null;
}
}

$completedFirstEventQuest = $character->questsCompleted()
->where('guide_quest_id', $initialEventGuideQuest->id)
->first();
Expand All @@ -288,12 +277,6 @@ protected function fetchNextEventQuest(Character $character, GuideQuest $initial
return $initialEventGuideQuest;
}

$completedIds = $character->questsCompleted()->whereNotNull('guide_quest_id')->pluck('guide_quest_id')->toArray();

if (! in_array($initialEventGuideQuest->id, $completedIds)) {
return GuideQuest::where('parent_id', $initialEventGuideQuest->id)->orderBy('id')->first();
}

$nextGuideQuest = GuideQuest::where('parent_id', $initialEventGuideQuest->id)->orderBy('id')->first();

if (is_null($nextGuideQuest)) {
Expand All @@ -303,7 +286,7 @@ protected function fetchNextEventQuest(Character $character, GuideQuest $initial
return $this->fetchNextEventQuest($character, $nextGuideQuest);
}

protected function requiredAttributeNames(GuideQuest $quest): array
private function requiredAttributeNames(GuideQuest $quest): array
{

$requiredAttributes = [];
Expand Down Expand Up @@ -331,10 +314,6 @@ protected function requiredAttributeNames(GuideQuest $quest): array
continue;
}

if ($key === 'required_skill_type') {
continue;
}

if ($key === 'required_kingdom_building_id') {
continue;
}
Expand Down
14 changes: 12 additions & 2 deletions tests/Setup/Character/CharacterFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -105,11 +105,21 @@ public function createBaseCharacter(array $raceOptions = [], array|GameClass $cl

$character = $this->character->refresh();

Cache::put('character-attack-data-'.$character->id, (new AttackDataCacheSetUp)->getCacheObject());
Cache::put('character-attack-data-' . $character->id, (new AttackDataCacheSetUp)->getCacheObject());

return $this;
}

public function getCharacterId(): int
{
return $this->character->id;
}

public function getCharacterClassId(): int
{
return $this->character->game_class_id;
}

public function assignPassiveSkills(?GameBuilding $gameBuilding = null): CharacterFactory
{

Expand Down Expand Up @@ -506,7 +516,7 @@ public function updateSkill(string $name, array $changes = []): CharacterFactory
$skill = $this->character->skills->where('name', $name)->first();

if (is_null($skill)) {
throw new Exception($name.' not found.');
throw new Exception($name . ' not found.');
}

$skill->update($changes);
Expand Down
Loading

0 comments on commit 9824f99

Please sign in to comment.