smrealms /
smr
We could not synchronize checks via GitHub's checks API since Scrutinizer's GitHub App is not installed for this repository.
| 1 | <?php declare(strict_types=1); |
||
| 2 | |||
| 3 | use Smr\BarDrink; |
||
| 4 | use Smr\PlotGroup; |
||
| 5 | |||
| 6 | const MISSION_ACTIONS = [ |
||
| 7 | 'LeaveSector', |
||
| 8 | 'EnterSector', |
||
| 9 | 'WalkSector', |
||
| 10 | 'JoinAlliance', |
||
| 11 | 'LeaveAlliance', |
||
| 12 | 'DisbandAlliance', |
||
| 13 | 'KickPlayer', |
||
| 14 | 'PlayerKicked', |
||
| 15 | 'BuyDrink', |
||
| 16 | ]; |
||
| 17 | |||
| 18 | //REQUIREMENTS |
||
| 19 | //if you use an array as a requirement and the requirement name represents an array, it will check every value and all must pass |
||
| 20 | //if you use an array as a requirement and the requirement name is not an array, only one of the checks must pass |
||
| 21 | //ie 'Completed Missions' => array(2,3) means the player must have completed BOTH missions |
||
| 22 | //ie 'Ship ID' => array(1,2) means the player must be in EITHER ship id 1 or 2 |
||
| 23 | //STEPS |
||
| 24 | /*key types: |
||
| 25 | *'KillName' - kill 'Detail' Player/NPC |
||
| 26 | *'KillNPCs' - kill 'Detail' NPCs |
||
| 27 | *'KillPlayers' - kill 'Detail' Players |
||
| 28 | *'KillSpawn' - Spawn 'Detail' Type NPC and kill it, DB field Progress with then be NPC_ID, also requires a 'Level' element, use -1 for normal |
||
| 29 | 'Trade' - |
||
| 30 | ^'Visit' - Examine 'Detail' location |
||
| 31 | *'DrinkAmount' - Buy 'Detail' drinks at a bar |
||
| 32 | *'Drink' - Buy 'Detail' drink name at a bar |
||
| 33 | *'Move' - Move 'Detail' sectors anywhere |
||
| 34 | *'MoveSector' - Move to 'Detail' sector |
||
| 35 | *'MoveRacial' - Move to galaxy containing 'Detail' race HQ (use racial id) |
||
| 36 | *'MoveGal' - Move to 'Detail' galaxy |
||
| 37 | 'ClearNPC' - Clear 'Detail' stacks of NPC forces in sector (use MoveSector) command to tell them which sector, also stored as mission_sector in DB |
||
| 38 | *'StartPortRaid' - start raiding 'detail' ports |
||
| 39 | *'RaidPort' - raid 'detail' ports |
||
| 40 | 'Bring' - bring 'detail' to starting sector |
||
| 41 | |||
| 42 | Replacements: |
||
| 43 | <Race> - Current race name |
||
| 44 | <Starting Sector> - Sector where mission was accepted |
||
| 45 | <Sector> - Random sector for mission. |
||
| 46 | |||
| 47 | * = implemented |
||
| 48 | ^ = partial implementaion |
||
| 49 | Visit - done for 'Bar' |
||
| 50 | */ |
||
| 51 | |||
| 52 | // NOTE: Array keys are the mission ID and should not be changed! |
||
| 53 | const MISSIONS = [ |
||
| 54 | 0 => [ |
||
| 55 | 'Name' => 'Drunk Guy', |
||
| 56 | 'Offerer' => 'Drunk', |
||
| 57 | 'Time Limit' => 0, |
||
| 58 | 'HasX' => [ |
||
| 59 | 'Type' => PlotGroup::Locations, |
||
| 60 | 'X' => 'Bar', |
||
| 61 | ], |
||
| 62 | 'Steps' => [ |
||
| 63 | [ |
||
| 64 | 'Step' => 'EnterSector', |
||
| 65 | 'PickSector' => [ |
||
| 66 | 'Type' => PlotGroup::Locations, |
||
| 67 | 'X' => RACE_SALVENE + LOCATION_GROUP_RACIAL_HQS, |
||
| 68 | ], |
||
| 69 | 'Detail' => [ |
||
| 70 | 'SectorID' => '<Sector>', |
||
| 71 | ], |
||
| 72 | 'Text' => '*Hiccup* Hey! I need you to...*Hiccup* do me a favor. All the ' . BarDrink::SALVENE_SWAMP_SODA . ' in this bar is awful! Go to the Sal...*Hiccup*...the Salvene HQ, they\'ll know a good bar.', |
||
| 73 | 'Task' => 'Go to the Salvene HQ at [sector=<Sector>]', |
||
| 74 | ], |
||
| 75 | [ |
||
| 76 | 'Step' => 'EnterSector', |
||
| 77 | 'PickSector' => [ |
||
| 78 | 'Type' => PlotGroup::Locations, |
||
| 79 | 'X' => 'Bar', |
||
| 80 | ], |
||
| 81 | 'Detail' => [ |
||
| 82 | 'SectorID' => '<Sector>', |
||
| 83 | ], |
||
| 84 | 'Text' => 'Here we are! The Salvene HQ! You ask around a bit and find that the bar in [sector=<Sector>] does the best ' . BarDrink::SALVENE_SWAMP_SODA . ' around!', |
||
| 85 | 'Task' => 'Go to the bar at [sector=<Sector>] and buy a ' . BarDrink::SALVENE_SWAMP_SODA . ' from the bartender. This may take many tries.', |
||
| 86 | ], |
||
| 87 | [ |
||
| 88 | 'Step' => 'BuyDrink', |
||
| 89 | 'Detail' => [ |
||
| 90 | 'SectorID' => '<Sector>', |
||
| 91 | 'Drink' => BarDrink::SALVENE_SWAMP_SODA, |
||
| 92 | ], |
||
| 93 | 'Text' => 'Here we are! Now let\'s get this ' . BarDrink::SALVENE_SWAMP_SODA . '.', |
||
| 94 | 'Task' => 'Go to the bar at [sector=<Sector>] and buy a ' . BarDrink::SALVENE_SWAMP_SODA . ' from the bartender. This may take many tries.', |
||
| 95 | ], |
||
| 96 | [ |
||
| 97 | 'Step' => 'EnterSector', |
||
| 98 | 'Detail' => [ |
||
| 99 | 'SectorID' => '<Starting Sector>', |
||
| 100 | ], |
||
| 101 | 'Text' => 'Finally! A true ' . BarDrink::SALVENE_SWAMP_SODA . ', let\'s return to that drunk!', |
||
| 102 | 'Task' => 'Return to [sector=<Starting Sector>] to claim your reward.', |
||
| 103 | ], |
||
| 104 | [ |
||
| 105 | 'Step' => 'Claim', |
||
| 106 | 'Rewards' => [ |
||
| 107 | 'Credits' => 500000, |
||
| 108 | 'Experience' => 1000, |
||
| 109 | 'Text' => '*Hiccup* For your...service *Hiccup* to me, take these *Hiccup* 500,000 credits and 1,000 experience *Hiccup*!', |
||
| 110 | ], |
||
| 111 | 'Detail' => [ |
||
| 112 | 'SectorID' => '<Starting Sector>', |
||
| 113 | ], |
||
| 114 | 'Text' => 'You hand the ' . BarDrink::SALVENE_SWAMP_SODA . ' to the drunk!', |
||
| 115 | ], |
||
| 116 | ], |
||
| 117 | ], |
||
| 118 | ]; |
||
| 119 | |||
| 120 | /** |
||
| 121 | * Callback for array_walk_recursive in SmrPlayer::rebuildMission. |
||
| 122 | * Searches for placeholders in template and replaces them with values |
||
| 123 | * derived from the supplied data. |
||
| 124 | * |
||
| 125 | * @param array<string, mixed> $data |
||
| 126 | */ |
||
| 127 | function replaceMissionTemplate(string|int|PlotGroup &$template, string $key, array $data): void { |
||
|
0 ignored issues
–
show
|
|||
| 128 | if (!is_string($template)) { |
||
| 129 | return; |
||
| 130 | } |
||
| 131 | $search = ['<Race>', '<Sector>', '<Starting Sector>']; |
||
| 132 | $replace = [$data['player']->getRaceID(), $data['mission']['Sector'], $data['mission']['Starting Sector']]; |
||
| 133 | $template = str_replace($search, $replace, $template); |
||
| 134 | } |
||
| 135 | |||
| 136 | /** |
||
| 137 | * @param array<string, mixed> $values |
||
| 138 | * @param array<string, mixed> $requirements |
||
| 139 | */ |
||
| 140 | function checkMissionRequirements(array $values, array $requirements): bool { |
||
| 141 | foreach ($requirements as $reqName => $reqValue) { |
||
| 142 | if ($values[$reqName] != $reqValue) { |
||
| 143 | return false; |
||
| 144 | } |
||
| 145 | } |
||
| 146 | return true; |
||
| 147 | } |
||
| 148 |
This check looks for parameters that have been defined for a function or method, but which are not used in the method body.