diff --git a/src/__tests__/dailyTasks/DailyTasksStartupRefreshService/startupRefresh.test.ts b/src/__tests__/dailyTasks/DailyTasksStartupRefreshService/startupRefresh.test.ts deleted file mode 100644 index 209226da..00000000 --- a/src/__tests__/dailyTasks/DailyTasksStartupRefreshService/startupRefresh.test.ts +++ /dev/null @@ -1,223 +0,0 @@ -import { ModelName } from '../../../common/enum/modelName.enum'; -import { ServerTaskName } from '../../../dailyTasks/enum/serverTaskName.enum'; -import { OldTaskName } from '../../../dailyTasks/enum/oldTaskNames.enum'; -import { uiDailyTasks } from '../../../dailyTasks/uiDailyTasks/uiDailyTasks'; -import { DailyTasksStartupRefreshService } from '../../../dailyTasks/dailyTasksStartupRefresh.service'; -import { - ACTIVE_SERVER_TASK_DEFINITIONS, - MIN_OCCURRENCES_PER_TASK_TYPE, - SERVER_TASKS_PER_CLAN, - TaskGeneratorService, -} from '../../../dailyTasks/taskGenerator.service'; - -describe('DailyTasksStartupRefreshService', () => { - const createService = ({ - oldTaskFindResults, - lockOwnerId, - }: { - oldTaskFindResults: any[]; - lockOwnerId?: string; - }) => { - const dailyTaskCollection = { - findOne: jest.fn(async () => oldTaskFindResults.shift() ?? null), - deleteMany: jest.fn(async () => ({ deletedCount: 1 })), - insertMany: jest.fn(async () => ({ insertedCount: 1 })), - }; - const lockCollection = { - findOneAndUpdate: jest.fn(async () => ({ ownerId: lockOwnerId })), - deleteOne: jest.fn(async () => ({ deletedCount: 1 })), - }; - const clanCollection = { - find: jest.fn(() => ({ - toArray: jest.fn(async () => [{ _id: 'clan-1' }, { _id: 'clan-2' }]), - })), - updateMany: jest.fn(async () => ({ modifiedCount: 2 })), - }; - const playerCollection = { - updateMany: jest.fn(async () => ({ modifiedCount: 4 })), - }; - const session = { - withTransaction: jest.fn(async (callback) => callback()), - endSession: jest.fn(async () => undefined), - }; - const connection = { - db: { - collection: jest.fn((name: string) => { - switch (name) { - case ModelName.DAILY_TASK: - return dailyTaskCollection; - case 'MaintenanceLock': - return lockCollection; - case ModelName.CLAN: - return clanCollection; - case ModelName.PLAYER: - return playerCollection; - default: - throw new Error(`Unexpected collection ${name}`); - } - }), - }, - startSession: jest.fn(async () => session), - }; - const service = new DailyTasksStartupRefreshService( - connection as any, - new TaskGeneratorService(), - ); - const ownerId = (service as any).ownerId; - - if (!lockOwnerId) { - lockCollection.findOneAndUpdate.mockResolvedValue({ ownerId }); - } - - jest.spyOn((service as any).logger, 'log').mockImplementation(); - jest.spyOn((service as any).logger, 'error').mockImplementation(); - - return { - clanCollection, - connection, - dailyTaskCollection, - lockCollection, - ownerId, - playerCollection, - service, - session, - }; - }; - - it('recognizes retired character and avatar task names as old tasks', () => { - expect(Object.values(OldTaskName)).toEqual( - expect.arrayContaining([ - 'change_avatar_clothes', - 'change_character_stats', - 'change_avatar_outlook', - ]), - ); - }); - - it('does not acquire a lock when old daily tasks are not found', async () => { - const { connection, dailyTaskCollection, lockCollection, service } = - createService({ - oldTaskFindResults: [null], - }); - - await service.onApplicationBootstrap(); - - expect(dailyTaskCollection.findOne).toHaveBeenCalledWith({ - type: { $in: Object.values(OldTaskName) }, - }); - expect(lockCollection.findOneAndUpdate).not.toHaveBeenCalled(); - expect(connection.startSession).not.toHaveBeenCalled(); - }); - - it('does not refresh daily tasks when another instance owns the lock', async () => { - const { connection, lockCollection, service } = createService({ - oldTaskFindResults: [{ _id: 'old-task' }], - lockOwnerId: 'another-instance', - }); - - await service.onApplicationBootstrap(); - - expect(lockCollection.findOneAndUpdate).toHaveBeenCalled(); - expect(connection.startSession).not.toHaveBeenCalled(); - }); - - it('refreshes daily tasks once after acquiring the startup lock', async () => { - const { - clanCollection, - dailyTaskCollection, - lockCollection, - ownerId, - playerCollection, - service, - session, - } = createService({ - oldTaskFindResults: [{ _id: 'old-task' }, { _id: 'old-task' }], - }); - - await service.onApplicationBootstrap(); - - expect(lockCollection.findOneAndUpdate).toHaveBeenCalledWith( - expect.objectContaining({ - _id: 'daily-tasks-startup-refresh', - }), - expect.objectContaining({ - $set: expect.objectContaining({ - ownerId, - lockedAt: expect.any(Date), - expiresAt: expect.any(Date), - }), - }), - { - upsert: true, - returnDocument: 'after', - }, - ); - expect(session.withTransaction).toHaveBeenCalledTimes(1); - expect(clanCollection.find).toHaveBeenCalled(); - expect(dailyTaskCollection.deleteMany).toHaveBeenCalledWith( - {}, - expect.objectContaining({ session }), - ); - expect(dailyTaskCollection.insertMany).toHaveBeenCalledTimes(1); - expect(clanCollection.updateMany).toHaveBeenCalledWith( - {}, - { $set: { points: 0, unlockedMilestones: [] } }, - expect.objectContaining({ session }), - ); - expect(playerCollection.updateMany).toHaveBeenCalledWith( - {}, - { $set: { points: 0, claimableRewards: [] } }, - expect.objectContaining({ session }), - ); - expect(lockCollection.deleteOne).toHaveBeenCalledWith({ - _id: 'daily-tasks-startup-refresh', - ownerId, - }); - expect(session.endSession).toHaveBeenCalled(); - - const insertedTasks = (dailyTaskCollection.insertMany as jest.Mock).mock - .calls[0][0]; - expect(insertedTasks).toHaveLength( - Object.values(uiDailyTasks).length * 2 + SERVER_TASKS_PER_CLAN * 2, - ); - expect( - insertedTasks.every((task) => - [ - ...Object.keys(uiDailyTasks), - ...ACTIVE_SERVER_TASK_DEFINITIONS.map(({ type }) => type), - ].includes(task.type), - ), - ).toBe(true); - }); - - it('releases the lock without refreshing if another instance already removed old tasks', async () => { - const { connection, lockCollection, ownerId, service } = createService({ - oldTaskFindResults: [{ _id: 'old-task' }, null], - }); - - await service.onApplicationBootstrap(); - - expect(connection.startSession).not.toHaveBeenCalled(); - expect(lockCollection.deleteOne).toHaveBeenCalledWith({ - _id: 'daily-tasks-startup-refresh', - ownerId, - }); - }); - - it('creates a balanced server-task pool including INNER_VOICE', () => { - const { service } = createService({ oldTaskFindResults: [] }); - const tasks = (service as any).createServerTasksForClan({ - _id: 'clan-1', - }); - - expect(tasks).toHaveLength(SERVER_TASKS_PER_CLAN); - expect( - tasks.filter((task) => task.type === ServerTaskName.INNER_VOICE).length, - ).toBeGreaterThanOrEqual(MIN_OCCURRENCES_PER_TASK_TYPE); - for (const { type } of ACTIVE_SERVER_TASK_DEFINITIONS) { - expect( - tasks.filter((task) => task.type === type).length, - ).toBeGreaterThanOrEqual(MIN_OCCURRENCES_PER_TASK_TYPE); - } - }); -}); diff --git a/src/dailyTasks/dailyTasks.module.ts b/src/dailyTasks/dailyTasks.module.ts index 7c8c9b87..235ea873 100644 --- a/src/dailyTasks/dailyTasks.module.ts +++ b/src/dailyTasks/dailyTasks.module.ts @@ -20,8 +20,6 @@ import { Item, ItemSchema } from '../clanInventory/item/item.schema'; import { DailyTasksScheduler } from './dailyTasksScheduler.service'; import DailyTasksResetNotifier from './dailyTaskReset.notifier'; import { DailyTaskProgressService } from './dailyTaskProgress.service'; -// will be removed in the future -import { DailyTasksStartupRefreshService } from './dailyTasksStartupRefresh.service'; @Module({ imports: [ @@ -52,7 +50,6 @@ import { DailyTasksStartupRefreshService } from './dailyTasksStartupRefresh.serv ClanProgression, DailyTasksScheduler, DailyTasksResetNotifier, - DailyTasksStartupRefreshService, // will be removed in the future ], controllers: [DailyTasksController], exports: [DailyTasksService, UiDailyTasksService, DailyTaskProgressService], diff --git a/src/dailyTasks/dailyTasksStartupRefresh.service.ts b/src/dailyTasks/dailyTasksStartupRefresh.service.ts deleted file mode 100644 index 968bdfc8..00000000 --- a/src/dailyTasks/dailyTasksStartupRefresh.service.ts +++ /dev/null @@ -1,204 +0,0 @@ -import { Injectable, Logger, OnApplicationBootstrap } from '@nestjs/common'; -import { InjectConnection } from '@nestjs/mongoose'; -import { Connection } from 'mongoose'; -import { randomUUID } from 'node:crypto'; -import { hostname } from 'node:os'; -import { ModelName } from '../common/enum/modelName.enum'; -import { OldTaskName } from './enum/oldTaskNames.enum'; -import { - SERVER_TASKS_PER_CLAN, - TaskGeneratorService, -} from './taskGenerator.service'; -import { uiDailyTasks } from './uiDailyTasks/uiDailyTasks'; - -const LOCK_ID = 'daily-tasks-startup-refresh'; -const LOCK_TTL_MS = 30 * 60 * 1000; - -type MaintenanceLock = { - _id: string; - ownerId: string; - lockedAt: Date; - expiresAt: Date; -}; - -type ClanDocument = { - _id: unknown; -}; - -type DailyTaskDocument = { - clan_id: unknown; - player_id: null; - title: { fi: string }; - type: string; - startedAt: null; - points: number; - coins: number; - amount: number; - amountLeft: number; - progress: { key?: string; steps?: number[] }; - timeLimitMinutes: number; -}; - -@Injectable() -export class DailyTasksStartupRefreshService implements OnApplicationBootstrap { - private readonly logger = new Logger(DailyTasksStartupRefreshService.name); - private readonly ownerId = `${hostname()}-${process.pid}-${randomUUID()}`; - - constructor( - @InjectConnection() private readonly connection: Connection, - private readonly taskGenerator: TaskGeneratorService, - ) {} - - async onApplicationBootstrap() { - try { - if (!(await this.hasOldDailyTasks())) return; - - const lockAcquired = await this.tryAcquireLock(); - if (!lockAcquired) { - this.logger.log( - 'Daily task startup refresh skipped; another instance is running it.', - ); - return; - } - - try { - if (!(await this.hasOldDailyTasks())) return; - - await this.refreshDailyTasks(); - } finally { - await this.releaseLock(); - } - } catch (error) { - this.logger.error('Daily task startup refresh failed', error); - } - } - - private async hasOldDailyTasks() { - const oldTask = await this.connection.db - .collection(ModelName.DAILY_TASK) - .findOne({ - type: { $in: Object.values(OldTaskName) }, - }); - - return !!oldTask; - } - - private async tryAcquireLock() { - const now = new Date(); - const expiresAt = new Date(now.getTime() + LOCK_TTL_MS); - - try { - const lock = await this.connection.db - .collection('MaintenanceLock') - .findOneAndUpdate( - { - _id: LOCK_ID, - $or: [ - { expiresAt: { $lte: now } }, - { expiresAt: { $exists: false } }, - ], - }, - { - $set: { - ownerId: this.ownerId, - lockedAt: now, - expiresAt, - }, - }, - { - upsert: true, - returnDocument: 'after', - }, - ); - - return lock?.ownerId === this.ownerId; - } catch { - return false; - } - } - - private async releaseLock() { - await this.connection.db - .collection('MaintenanceLock') - .deleteOne({ - _id: LOCK_ID, - ownerId: this.ownerId, - }); - } - - private async refreshDailyTasks() { - const session = await this.connection.startSession(); - - try { - await session.withTransaction(async () => { - const clans = await this.connection.db - .collection(ModelName.CLAN) - .find({}, { session }) - .toArray(); - - const tasks = clans.flatMap((clan) => this.createTasksForClan(clan)); - - await this.connection.db - .collection(ModelName.DAILY_TASK) - .deleteMany({}, { session }); - - if (tasks.length > 0) { - await this.connection.db - .collection(ModelName.DAILY_TASK) - .insertMany(tasks, { session }); - } - - await this.connection.db - .collection(ModelName.CLAN) - .updateMany( - {}, - { $set: { points: 0, unlockedMilestones: [] } }, - { session }, - ); - - await this.connection.db - .collection(ModelName.PLAYER) - .updateMany( - {}, - { $set: { points: 0, claimableRewards: [] } }, - { session }, - ); - }); - - this.logger.log('Daily task startup refresh completed.'); - } finally { - await session.endSession(); - } - } - - private createTasksForClan(clan: ClanDocument): DailyTaskDocument[] { - return [ - ...this.createUiTasksForClan(clan), - ...this.createServerTasksForClan(clan), - ]; - } - - private createUiTasksForClan(clan: ClanDocument): DailyTaskDocument[] { - return Object.values(uiDailyTasks).map((task) => ({ - ...task, - clan_id: clan._id, - player_id: null, - amountLeft: task.amount, - startedAt: null, - progress: {}, - })); - } - - private createServerTasksForClan(clan: ClanDocument): DailyTaskDocument[] { - return this.taskGenerator - .createBalancedTaskValues(SERVER_TASKS_PER_CLAN) - .map((generated) => ({ - ...generated, - clan_id: clan._id, - player_id: null, - amountLeft: generated.amount, - startedAt: null, - progress: {}, - })); - } -} diff --git a/src/dailyTasks/enum/oldTaskNames.enum.ts b/src/dailyTasks/enum/oldTaskNames.enum.ts deleted file mode 100644 index d64abca9..00000000 --- a/src/dailyTasks/enum/oldTaskNames.enum.ts +++ /dev/null @@ -1,85 +0,0 @@ -export enum OldTaskName { - // old server tasks - PLAY_BATTLE = 'play_battle', - WIN_BATTLE = 'win_battle', - SUCCEED_STEAL = 'succeed_steal', - STEAL_TOO_MUCH = 'steal_too_much', - CHANGE_CHARACTER_BE_FAST = 'change_character_be_fast', - CHANGE_CHARACTER_BE_RESISTANT = 'change_character_be_resistant', - CHANGE_CHARACTER_BE_STRONG = 'change_character_be_strong', - CHANGE_CHARACTER_BE_LARGE = 'change_character_be_large', - USE_ALL_ITEMS_SOULHOME = 'use_all_items_soulhome', - CHANGE_ITEMS_POSITION = 'change_items_position', - CREATE_GAME_STRATEGY = 'create_game_strategy', - WRITE_CHAT_MESSAGE_PRIVATE = 'write_chat_message_private', - FIND_ALL_CHAT_OPTIONS = 'find_all_chat_options', - USE_ALL_CHAT_FEELINGS = 'use_all_chat_feelings', - REACT_EMOJI_BATTLE = 'react_emoji_battle', - SELL_CLAN_ITEM = 'sell_clan_item', - CREATE_CLAN_VOTING = 'create_clan_voting', - WRITE_PLAYER_INTRO_TEXT = 'write_player_intro_text', - DEFINE_PLAYER_STYLE = 'define_player_style', - DEFINE_PLAYER_SLOGAN = 'define_player_slogan', - REACT_EMOJI_CHAT = 'react_emoji_chat', - CALL_CLAN_TO_FRIEND_BATTLE = 'call_clan_friend_to_battle', - ADD_FRIEND = 'add_friend', - SHARE_BATTLE_REPLAY_CLAN_CHAT = 'share_battle_replay_clan_chat', - JOIN_GAME_DISCORD = 'join_game_discord', - WATCH_REPLAY_VIDEO = 'watch_reply_video', - SHARE_REPLAY_VIDEO = 'share_reply_video', - CHOOSE_CHARACTER_OF_YOUR_STYLE = 'choose_character_of_your_style', - CREATE_UNIFIED_INTERIOR = 'create_unified_interior', - WATCH_REPLAY_REACT_FEELING = 'watch_reply_react_feeling', - DEFINE_PLAYER_TYPE = 'define_player_type', - CREATE_CLAN_PLAYLIST = 'create_clan_playlist', - WRITE_CHAT_MESSAGE = 'write_chat_message', - WRITE_CHAT_MESSAGE_GLOBAL = 'write_chat_message_global', - WRITE_CHAT_MESSAGE_CLAN = 'write_chat_message_clan', - ADD_ITEM_TO_FLEA_MARKET = 'add_item_to_flea_market', - SUGGEST_ITEM_TO_FLEA_MARKET = 'suggest_item_to_flea_market', - PARTICIPATE_CLAN_VOTING = 'participate_clan_voting', - CHANGE_AVATAR_CLOTHES = 'change_avatar_clothes', - CHANGE_CHARACTER_STATS = 'change_character_stats', - CHANGE_AVATAR_OUTLOOK = 'change_avatar_outlook', - - // old UI tasks - FIND_3_IMPORTANT_BUTTONS = 'find_3_important_buttons', - EXPLODE_CHARACTER_BATTLE = 'explode_character_battle', - WHAT_IS_MISSING = 'what_is_missing', - FIND_BUG = 'find_bug', - FIND_ALL_INSTRUCTION_WINDOWS = 'find_all_instruction_windows', - FIND_VARIABLE_VALUE_IN_GAME = 'find_variable_value_in_game', - MAKE_MUSIC_WITH_BUTTONS = 'make_music_with_buttons', - INFLUENCE_OPPONENT_GAME_CHAT_EMOJI = 'influence_opponent_game_chat_chat_emoji', - PRESS_3_SYMBOL_FURNITURE = 'press_3_symbol_furniture', - PRESS_STORY_MOST_IMPRESSIVE_PANELS = 'press_story_impressive_panels', - WHERE_GAME_HAPPENS = 'where_game_happens', - PRESS_STORY_TELLING_INSTRUCTIONS = 'press_story_testing_instructions', - PRESS_CHARACTER_DESCRIPTION = 'press_character_description', - RECOGNIZE_CHARACTER_MECHANIC = 'recognize_character_mechanic', - CONTINUE_CLAN_STORY = 'continue_clan_story', - RECOGNIZE_GRAPHIC_HINTS = 'recognize_graphic_hints', - RECOGNIZE_AUDIO_HINTS = 'recognize_audio_hints', - WRITE_BATTLE_DIALOG = 'write_battle_dialog', - FIND_UI_SYMBOLIC_GRAPHICS = 'find_ui_symbolics', - CHOOSE_FAVORITE_INTERIOR_SERIES = 'choose_favorite_interior_series', - PRESS_YOURSELF_IDENTIFYING_STORIES = 'press_yourself_identifying_stories', - WHAT_IS_GAME_STORY = 'what_is_game_story', - PRESS_STORY_EXPANDING_OBJECTS = 'press_story_expanding_objects', - PRESS_FAMOUS_THINGS_REFERRING_OBJECTS = 'press_famous_thing_referring_objects', - PRESS_OTHER_GRAPHIC_STYLE_ELEMENTS = 'press_other_graphic_style_elements', - WHAT_STYLE_TYPES_GAME_HAS = 'what_style_types_game_has', - PRESS_FAMOUS_CHARACTER = 'press_famous_character', - WHAT_FAMOUS_GAME_REMINDING = 'what_famous_game_reminding', - CHOOSE_CULTURAL_GUIDELINE_CLAN_DESCRIPTION = 'choose_cultural_guideline_cultural_description', - CHANGE_LANGUAGE = 'change_language', - PRESS_MONEY_STUFF = 'press_money_stuff', - USE_ONLY_POSITIVE_GESTURES_IN_BATTLE = 'use_only_positive_gestures_in_battle', - USE_ONLY_NEGATIVE_GESTURES_IN_BATTLE = 'use_only_negative_gestures_in_battle', - PRESS_PRIZE_GIVING_ITEMS = 'press_prize_giving_items', - PRESS_ACCESSIBILITY_SETTINGS = 'press_accessibility_settings', - PRESS_ETHIC_QUESTIONABLE_OBJECTS = 'press_ethic_questionable_objects', - PRESS_RESPONSIBILITY_OBJECTS = 'press_responsibility_objects', - PRESS_SUSTAINABLE_CONSUMPTION_OBJECTS = 'press_substainable_consumption_objects', - PRESS_VALUES_OBJECTS = 'press_values_objects', -} diff --git a/src/dailyTasks/enum/serverTaskName.enum.ts b/src/dailyTasks/enum/serverTaskName.enum.ts index 440295bc..0a9c2941 100644 --- a/src/dailyTasks/enum/serverTaskName.enum.ts +++ b/src/dailyTasks/enum/serverTaskName.enum.ts @@ -43,256 +43,5 @@ export enum ServerTaskName { BUILD_YOUR_WORLD = 'build_your_world', SET_BOUNDARIES = 'set_boundaries', - - /* Some of the older tasks are commented out, - some have been kept to keep the server code running at the moment */ - - // WRITE_CHAT_MESSAGE = 'write_chat_message', - - //Why? - /** - * lataa peli (tää tehtävä on jo valmis ja pitää vaan klikata valmiiksi klaanissa) - */ - // DOWNLOAD_GAME = 'download_game', - - //Server, what is the song, name of the soundtrack? - /** - * vaihda biisi sielunkodissa - */ - // CHANGE_SONG_SOULHOME = 'change_song_soulhome', - - //Server, what is it, list of soundtrack names? - /** - * luo soittolista klaanille - */ - // CREATE_CLAN_PLAYLIST = 'create_clan_playlist', - - //Server, what is that? - /** - * laita esine toisen sisään sielunkodissa - */ - // PUT_ITEM_INSIDE_ANOTHER_ITEM_SOULHOME = 'put_item_inside_another_item_soulhome', - - //Server, to any? - /** - * vaihda avatarisi vaatteita - */ - // CHANGE_AVATAR_CLOTHES = 'change_avatar_clothes', - //Server, to any? - /** - * muokkaa hahmosi statseja - */ - // CHANGE_CHARACTER_STATS = 'change_character_stats', - - //Server - /** - * pelaa battle - */ - // PLAY_BATTLE = 'play_battle', // old task (not in the list), but left here so, that the game works - //Server - /** - * voita battle - */ - // WIN_BATTLE = 'win_battle', // old task (not in the list), but left here so, that the game works - - //Server - /** - * onnistu ryöstössä - */ - // SUCCEED_STEAL = 'succeed_steal', - - //Server, how much is too much? - /** - * ryöstä liikaa tavaraa - */ - // STEAL_TOO_MUCH = 'steal_too_much', - - //Server + what does each mean? - /** - * muokkaa pelihahmosta nopea - */ - // CHANGE_CHARACTER_BE_FAST = 'change_character_be_fast', - /** - * muokkaa pelihahmosta kestävä (HP) - */ - // CHANGE_CHARACTER_BE_RESISTANT = 'change_character_be_resistant', - /** - * muokkaa pelihahmosta voimakas - */ - // CHANGE_CHARACTER_BE_STRONG = 'change_character_be_strong', - /** - * muokkaa pelihahmosta isokokoinen - */ - // CHANGE_CHARACTER_BE_LARGE = 'change_character_be_large', - - //Server or client, depends on what does it mean? mb not implement if too complicated - /** - * käytä kaikki sielunkotisi esineet - */ - // USE_ALL_ITEMS_SOULHOME = 'use_all_items_soulhome', - - //Server + is "asento" = place / coordinates? and what does items mean, is it 2 or more or all of them? - /** - * vaihda sielunkodin esineiden asentoja - */ - // CHANGE_ITEMS_POSITION = 'change_items_position', - - //What is that? - /** - * luo pelistrategia - */ - // CREATE_GAME_STRATEGY = 'create_game_strategy', - - //Server - /** - * laita viesti klaanissa - */ - // WRITE_CHAT_MESSAGE_CLAN = 'write_chat_message_clan', - - //Server - /** - * laita viesti globalissa - */ - // WRITE_CHAT_MESSAGE_GLOBAL = 'write_chat_message_global', - - /** - * laita privaviesti toiselle pelaajalle - */ - // WRITE_CHAT_MESSAGE_PRIVATE = 'write_chat_message_private', - - //How? - /** - * löydä kaikki chat-vaihtoehdot - */ - // FIND_ALL_CHAT_OPTIONS = 'find_all_chat_options', - - //Server - /** - * käytä kaikkia eri tunne-emojeita - */ - // USE_ALL_CHAT_FEELINGS = 'use_all_chat_feelings', - - //How, in chat and is it emoji or feeling? - /** - * reagoi emojilla matsissa - */ - // REACT_EMOJI_BATTLE = 'react_emoji_battle', - - //Server, is it = put item to sell to flea market? - /** - * laita tavaraa klaanissa myyntiin - */ - // SELL_CLAN_ITEM = 'sell_clan_item', - - //Server - /** - * osallistu klaanin äänestykseen - */ - // PARTICIPATE_CLAN_VOTING = 'participate_clan_voting', - /** - * luo uusi äänestys klaaniin - */ - // CREATE_CLAN_VOTING = 'create_clan_voting', - - //Server, what is the difference from SELL_CLAN_ITEM? - /** - * lisää tavara kirpputorille - */ - // ADD_ITEM_TO_FLEA_MARKET = 'add_item_to_flea_market', - - /** - * ehdottaa tavara kirpputorille - */ - // SUGGEST_ITEM_TO_FLEA_MARKET = 'suggest_item_to_flea_market', - - //Server, to own player + what is that? - /** - * kirjoita esittelytekstisi pelaajaprofiiliin - */ - // WRITE_PLAYER_INTRO_TEXT = 'write_player_intro_text', - - //Server, what is that? - /** - * määrittele pelaajatyylisi pelaajaprofiiliin - */ - // DEFINE_PLAYER_STYLE = 'define_player_style', - - //Server, any change of data? - /** - * muokkaa avatarisi ulkonäköä - */ - // CHANGE_AVATAR_OUTLOOK = 'change_avatar_outlook', - - //Server, what is the slogan and how is it different from intro text - /** - * määrittele "iskulauseesi" - */ - // DEFINE_PLAYER_SLOGAN = 'define_player_slogan', - - //Server, is it feeling or emoji? - /** - * reagoi emojilla toisen viestiin - */ - // REACT_EMOJI_CHAT = 'react_emoji_chat', - - //Server, what is a clan friend + how he/she is called? - /** - * kutsu klaanikaveri battleen - */ - // CALL_CLAN_TO_FRIEND_BATTLE = 'call_clan_friend_to_battle', - - //Server, what is a friend, add where? - /** - * lisää kaveri - */ - // ADD_FRIEND = 'add_friend', - - //Server, what and why, requires a lot of work, is it worth it? - /** - * jaa battle-replay klaani chattiin - */ - // SHARE_BATTLE_REPLAY_CLAN_CHAT = 'share_battle_replay_clan_chat', - - //How to implement? One such implementation is to ask a question that can be answered only after joining a server. - // like if the discord server is closed and the question is "what is the name of main channel?" - /** - * liity pelin discordiin - */ - // JOIN_GAME_DISCORD = 'join_game_discord', - - //Where? Same questions as with SHARE_BATTLE_REPLAY_CLAN_CHAT - /** - * katso klaanilaisen replay-video - */ - // WATCH_REPLAY_VIDEO = 'watch_reply_video', - - //Where? Same as with SHARE_BATTLE_REPLAY_CLAN_CHAT - /** - * jaa matsin replay-video - */ - // SHARE_REPLAY_VIDEO = 'share_reply_video', - - //Server, how to measure? - /** - * valitse pelihahmo, joka heijastaa parhaiten pelaajatyyliäsi - */ - // CHOOSE_CHARACTER_OF_YOUR_STYLE = 'choose_character_of_your_style', - - //Server, how to measure + where is the interior? - /** - * tee yhtenäinen sisustus - */ - // CREATE_UNIFIED_INTERIOR = 'create_unified_interior', - - //What is that? - /** - * katso replay ja klikkaa sopivaa tunnereaktiota eri kohdissa - */ - // WATCH_REPLAY_REACT_FEELING = 'watch_reply_react_feeling', - - //What is player type, where is it defined. How is it different from player style - /** - * määrittele pelaajaprofiiliin pelaajatyyppisi - */ - // DEFINE_PLAYER_TYPE = 'define_player_type', + } diff --git a/src/dailyTasks/enum/uiTaskName.enum.ts b/src/dailyTasks/enum/uiTaskName.enum.ts index c2602aee..d2da8dc7 100644 --- a/src/dailyTasks/enum/uiTaskName.enum.ts +++ b/src/dailyTasks/enum/uiTaskName.enum.ts @@ -37,235 +37,4 @@ export enum UITaskName { ETHICS_METRICS = 'ethics_metrics', - // Old UI tasks - - //Client, what are these buttons? Is find = click? - /** - * etsi käyttöliittymän kannalta mielestäsi 3 tärkeintä painiketta - */ - // FIND_3_IMPORTANT_BUTTONS = 'find_3_important_buttons', - //Client - /** - * räjäytä hahmosi ryöstössä - */ - // EXPLODE_CHARACTER_BATTLE = 'explode_character_battle', - - //Client, how to implement and what is that thing? - /** - * "Mitä puuttuu?" - */ - // WHAT_IS_MISSING = 'what_is_missing', - //Client, how to implement and what is that thing? - /** - * "Etsi bugi!" - */ - // FIND_BUG = 'find_bug', - - //Client, what is the list of these windows, what does find means - /** - * löydä kaikki pelin ohjeistusikkunat ja paina niitä - */ - // FIND_ALL_INSTRUCTION_WINDOWS = 'find_all_instruction_windows', - - //Client, How to implement, is it some answer question task? - /** - * "Löydä muuttuja toiminnassa!" - */ - // FIND_VARIABLE_VALUE_IN_GAME = 'find_variable_value_in_game', - - //Client - /** - * tee näppäimillä musiikkia - */ - // MAKE_MUSIC_WITH_BUTTONS = 'make_music_with_buttons', - - //Client, What is that, how to measure and how to implement? - /** - * vaikuta vastustajan peliin viestimällä emojeita - */ - // INFLUENCE_OPPONENT_GAME_CHAT_EMOJI = 'influence_opponent_game_chat_chat_emoji', - - //Client, what the symbols are, are there a specific symbol furniture - /** - * paina kolmea symboliikkaa sisältävää huonekalua - */ - // PRESS_3_SYMBOL_FURNITURE = 'press_3_symbol_furniture', - - //Client, is it defined? - /** - * TUNNETEHTÄVÄ > klikkaa alkutarinasta sinusta vaikuttavinta ruutua - */ - // PRESS_STORY_MOST_IMPRESSIVE_PANELS = 'press_story_impressive_panels', - - //Client, how, via a form? - /** - * missä peli tarinan mukaan tapahtuu? - */ - // WHERE_GAME_HAPPENS = 'where_game_happens', - - //Client, what they are + how much to press? - /** - * klikkaa tarinaa kertovia ohjeistuksia - */ - // PRESS_STORY_TELLING_INSTRUCTIONS = 'press_story_testing_instructions', - - //Client, is it defined? where to press? - /** - * lue ja paina pelihahmon kuvausta - */ - // PRESS_CHARACTER_DESCRIPTION = 'press_character_description', - - //Client, how, via form? What is the answer? - /** - * tunnista pelihahmon tarinallinen mekaniikka - */ - // RECOGNIZE_CHARACTER_MECHANIC = 'recognize_character_mechanic', - - //Client, how + what does it mean? - /** - * jatka klaanin tarinaa - */ - // CONTINUE_CLAN_STORY = 'continue_clan_story', - - //Client, how, via form, what are they? - /** - * tunnista graafiset vihjeet - */ - // RECOGNIZE_GRAPHIC_HINTS = 'recognize_graphic_hints', - - //Client, how, via form, what are they? - /** - * tunnista äänimaailman vihjeet - */ - // RECOGNIZE_AUDIO_HINTS = 'recognize_audio_hints', - - //Client or Server, depends on what that means? - /** - * kirjoita battlen dialogi - */ - // WRITE_BATTLE_DIALOG = 'write_battle_dialog', - - //Client, what is that symbolic + how to implement, via a form? - /** - * löydä käyttöliittymästä symbolista grafiikkaa - */ - // FIND_UI_SYMBOLIC_GRAPHICS = 'find_ui_symbolics', - - //Client, how via a form? - /** - * valitse lemppari sisustus-sarjasi - */ - // CHOOSE_FAVORITE_INTERIOR_SERIES = 'choose_favorite_interior_series', - - //Client, how, via a form? - /** - * klikkaa tarinoita joihin pystyt samastumaan - */ - // PRESS_YOURSELF_IDENTIFYING_STORIES = 'press_yourself_identifying_stories', - - //Client, how, via a form? - /** - * mikä on pelin viesti? mistä peli kertoo? - */ - // WHAT_IS_GAME_STORY = 'what_is_game_story', - - //Client, what they are? - /** - * etsi ja klikkaa pelin tarinaa laajentavia asioita nettisivuilta - */ - // PRESS_STORY_EXPANDING_OBJECTS = 'press_story_expanding_objects', - - //Client, what are these objects, where they are present? How much? - /** - * klikkaa tunnettuihin teoksiin, ideoihin tai ihmisiin viittaavia asioita - */ - // PRESS_FAMOUS_THINGS_REFERRING_OBJECTS = 'press_famous_thing_referring_objects', - - //Client, where game or web pages? What are these elements? How much to press? - /** - * etsi ja klikkaa graafisia elementtejä, jotka viittaavat muihin taiteenlajeihin - */ - // PRESS_OTHER_GRAPHIC_STYLE_ELEMENTS = 'press_other_graphic_style_elements', - - //Client, via form, what they are? - /** - * mitä lajityyppiä (tai useampaa) peli sinulle edustaa? - */ - // WHAT_STYLE_TYPES_GAME_HAS = 'what_style_types_game_has', - - //Client, via form? What is the answer? - /** - * klikkaa pelihahmoa josta tulee mieleen joku tunnettu hahmo - */ - // PRESS_FAMOUS_CHARACTER = 'press_famous_character', - - //Client, via form? What is the answer - /** - * mitä tunnettua peliä tämä peli muistuttaa? - */ - // WHAT_FAMOUS_GAME_REMINDING = 'what_famous_game_reminding', - - //Client - /** - * valitse klaanin kuvaukseen toimintakulttuurinen ohje - */ - // CHOOSE_CULTURAL_GUIDELINE_CLAN_DESCRIPTION = 'choose_cultural_guideline_cultural_description', - - //Client - /** - * katso kieliasetukset ja klikkaa kohtia jotka muuttuvat eri kielien välillä - */ - // CHANGE_LANGUAGE = 'change_language', - - //Client, what money, real? what are these things? - /** - * klikkaa asioita, joissa voi käyttää rahaa - */ - // PRESS_MONEY_STUFF = 'press_money_stuff', - - //Client, what are these gestures, how to use them? - /** - * käytä matsin aikana vain positiivisia ja kannustavia eleitä - */ - // USE_ONLY_POSITIVE_GESTURES_IN_BATTLE = 'use_only_positive_gestures_in_battle', - /** - * käytä matsin aikana vain negatiivisia eleitä - */ - // USE_ONLY_NEGATIVE_GESTURES_IN_BATTLE = 'use_only_negative_gestures_in_battle', - - //Client, What are these? - /** - * tunnista ja paina kohtia, joissa peli palkitsee sinua jotenkin - */ - // PRESS_PRIZE_GIVING_ITEMS = 'press_prize_giving_items', - - //Client, what are these? - /** - * etsi ja klikkaa kaikkia saavutettavuus-asetuksia - */ - //PRESS_ACCESSIBILITY_SETTINGS = 'press_accessibility_settings', - - //Client, what are these? - /** - * etsi ja klikkaa eettisesti arveluttavia asioita - */ - // PRESS_ETHIC_QUESTIONABLE_OBJECTS = 'press_ethic_questionable_objects', - - //Client, what are these? Responsibility for what + where to press? - /** - * etsi ja klikkaa vastuullisuuteen liittyviä asioita - */ - // PRESS_RESPONSIBILITY_OBJECTS = 'press_responsibility_objects', - - //Client, what and where? - /** - * etsi ja klikkaa kestävään kuluttamiseen liittyviä asioita - */ - // PRESS_SUSTAINABLE_CONSUMPTION_OBJECTS = 'press_substainable_consumption_objects', - - //Client, what and where? - /** - * etsi ja klikkaa arvoihin liittyviä asioita - */ - // PRESS_VALUES_OBJECTS = 'press_values_objects', }