docs(reference): import Dune: Awakening server-manager references
All checks were successful
CI / backend-types (push) Successful in 10s
CI / frontend-build (push) Successful in 15s
CI / agent-tests (push) Successful in 39s
CI / integration (push) Successful in 22s

Phase 2 references for the host-agent Dune adapter, moved out of volatile /tmp
into docs/reference-repos/ (per Commander). Three upstream projects, .git +
node_modules + compiled binaries stripped (16MB source). Nested AI-instruction
files (.claude/, CLAUDE.md) removed so they don't pollute Corrosion sessions.

- icehunter/    dune-admin (Go+React) — 4 control planes; SETUP_DOCKER.md is the
                closest analog to our agent's Dune docker control plane (compose
                lifecycle, docker logs, RabbitMQ-via-exec, dune Postgres schema)
- adainrivers/  Rust/Tauri desktop — SSH+k8s BattleGroup control, maintenance
                daemon, in-game admin console (Rust idiom reference)
- the4rchangel/ Node web UI replacing battlegroup.bat — matches the Commander's
                Hyper-V self-host path + game-config schema

See docs/reference-repos/README.md for the full index + how we use each.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Vantz Stockwell
2026-06-11 21:08:05 -04:00
parent 0715492ddf
commit 651a35d4be
1334 changed files with 238971 additions and 0 deletions

View File

@@ -0,0 +1,977 @@
# Dune Schema Routines — Reference & Cross-Map
Complete export of every function and procedure in the `dune` schema of the game-server Postgres (PG 17.4, pod `sh-ec68e59f636959ac-coyzzx-db-dbdepl-sts-0`). Generated by `_export.sh` + `_build_readme.py`.
## Inventory
- **Total routines:** 523
- **Functions:** 517
- **Procedures:** 6
- **Called from dune-admin Go source:** 18 (see Cross-reference column)
- **Not called from dune-admin:** 505
Per-routine SQL lives in `functions/<category>/<name>__<argcount>args.sql` and `procedures/<name>__<argcount>args.sql`. A single concatenated dump is at `_all.sql`. A TSV index is at `_manifest.tsv`.
## Access path (read-only)
```
ssh -i ./sshKey dune@192.168.0.72 \
"sudo -n kubectl exec -n funcom-seabass-sh-ec68e59f636959ac-coyzzx \
sh-ec68e59f636959ac-coyzzx-db-dbdepl-sts-0 -- \
env PGPASSWORD=<pw> psql -h 127.0.0.1 -p 15432 -U postgres -d dune <args>"
```
Passwordless `sudo` works on the VM. The password is also visible inside the pod via `env | grep POSTGRES_PASSWORD`.
## Categories
| Category | Count |
|---|---:|
| [actors](#actors) | 23 |
| [anticheat](#anticheat) | 3 |
| [base_backup](#base-backup) | 14 |
| [battlegroup](#battlegroup) | 2 |
| [building_blueprint](#building-blueprint) | 16 |
| [character_mod](#character-mod) | 16 |
| [cleanup](#cleanup) | 4 |
| [communinet](#communinet) | 4 |
| [currency](#currency) | 8 |
| [debug](#debug) | 10 |
| [dialogue](#dialogue) | 3 |
| [dungeon](#dungeon) | 4 |
| [encryption](#encryption) | 9 |
| [event_log](#event-log) | 5 |
| [exchange](#exchange) | 20 |
| [faction](#faction) | 9 |
| [farm](#farm) | 4 |
| [guild](#guild) | 19 |
| [igwo](#igwo) | 1 |
| [inventory](#inventory) | 21 |
| [items_purge](#items-purge) | 7 |
| [journey_progression](#journey-progression) | 28 |
| [landclaim](#landclaim) | 2 |
| [landsraad](#landsraad) | 39 |
| [lookup](#lookup) | 49 |
| [map_areas](#map-areas) | 12 |
| [markers](#markers) | 8 |
| [misc](#misc) | 23 |
| [partition](#partition) | 28 |
| [party](#party) | 13 |
| [permission](#permission) | 13 |
| [player_persistence](#player-persistence) | 9 |
| [schema_meta](#schema-meta) | 6 |
| [server](#server) | 9 |
| [shifting_sand](#shifting-sand) | 3 |
| [spawner](#spawner) | 4 |
| [spice_field](#spice-field) | 12 |
| [stock_vendor](#stock-vendor) | 5 |
| [takeover](#takeover) | 3 |
| [taxation](#taxation) | 8 |
| [transfer](#transfer) | 29 |
| [travel](#travel) | 3 |
| [vehicle](#vehicle) | 15 |
### actors
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `assign_actor_id` | in_class text → bigint | — | Assign actor id. |
| `delete_actor_states_travel` | in_actor_id bigint → void | — | Delete actor states travel. |
| `delete_actors` | in_ids bigint[] → void | — | Delete actors. |
| `delete_actors_and_respawns_on_server` | in_server_info dune.serverinfo, in_vehicle_classes_spawned_on_map text[], in_allow_vehicle_recovery boolean → void | — | Delete actors and respawns on server. |
| `delete_markers_return_actor_ids` | in_dimension_index integer, in_map_name text, in_marker_ids integer[] → TABLE(actor_id bigint, marker_id integer) | — | Delete markers return actor ids. |
| `find_actor_by_id` | in_id bigint → dune.actorspawninfo | — | Find actor by id. |
| `gather_ownerless_actors_on_server` | in_server_info dune.serverinfo → SETOF dune.actorspawninfo | — | Gather ownerless actors on server. |
| `gather_player_linked_actors` | in_player_pawn_id bigint → SETOF dune.actorspawninfo | — | Gather player linked actors. |
| `gather_removed_accounts_that_left_orphaned_actors_on_server` | in_server_info dune.serverinfo → TABLE(account_id bigint, removal_reason text, actors_left dune.orphanedplayeractorinfo[]) | — | Gather removed accounts that left orphaned actors on server. |
| `get_account_actor_ids` | in_account_id bigint → dune.playeractorids | — | Get account actor ids. |
| `get_actor_server_info` | in_id bigint → dune.serverinfo | — | Get actor server info. |
| `get_registered_spawned_actor` | in_spawner_id bigint → SETOF bigint | — | Get registered spawned actor. |
| `load_actors` | in_actor_ids bigint[], in_actor_state dune.actorstate → TABLE(ord bigint, actor_id bigint, generic_data dune.actorgenericdata, serial bigint) | — | Load actors. |
| `load_full_actors` | in_ids bigint[] → SETOF dune.actordescription | — | Load full actors. |
| `ownership_handle_actor_delete` | in_player_id bigint → void | — | Ownership handle actor delete. |
| `register_spawned_actor` | in_spawner_id bigint, in_actor_id bigint → void | — | Register spawned actor. |
| `remove_aborted_authority_transfer_actors` | in_partition_id bigint → SETOF dune.actorspawninfo | — | Remove aborted authority transfer actors. |
| `remove_recipes_from_actor_properties` | recipes_to_remove text[] → void | — | Remove recipes from actor properties. |
| `save_aborted_authority_transfer_actors` | in_actor_ids bigint[], in_partition_id bigint → void | — | Save aborted authority transfer actors. |
| `save_actor_dislocation` | in_actor_id bigint, in_current_server_info dune.serverinfo, in_target_location dune.vector, in_target_dimension_index integer → void | — | Save actor dislocation. |
| `save_actors` | in_server_info dune.serverinfo, in_actors dune.actordescription[], in_actor_state dune.actorstate → TABLE(actor_id bigint, current_saved_serial bigint, saved boolean) | — | Save actors. |
| `update_traveling_actor_dependencies` | in_dep dune.traveldependency[] → void | — | Update traveling actor dependencies. |
| `update_traveling_actor_tree` | in_actor_id bigint, in_target_transform dune.transform, in_target_map text, in_target_dimension_index integer, in_target_partition_id bigint → TABLE(out_id bigint, out_actor_state text) | — | Update traveling actor tree. |
### anticheat
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `add_actor_audit` | in_id bigint, in_class text → void | — | Add actor audit. |
| `flag_player_as_cheater` | in_account_id bigint, in_cheat_type dune.cheat_type_enum → void | — | Mark account as a cheater of given type. |
| `log_cheating` | in_fls_id text, in_cheat_type dune.cheat_type_enum, in_event_time timestamp with time zone → void | — | Append cheating event. |
### base_backup
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `base_backup_delete` | in_base_backup_id bigint → void | — | Delete a stored base backup. |
| `base_backup_find_totems_from_player_owner` | in_player_id bigint → TABLE(totem_id bigint) | — | List totem ids owned by a player (read-only). |
| `base_backup_finish_placing` | in_base_backup_id bigint → void | — | Finalize placement of a restored backup. |
| `base_backup_get_actors_to_spawn` | in_base_backup_id bigint → SETOF dune.actorspawninfo | — | Read actors to spawn for backup placement. |
| `base_backup_get_available_backups` | in_player_id bigint → TABLE(id bigint, base_backup_name text, totem_id bigint, totem_buildable_type text, landclaim_original_global_location real[], base_backup_map text) | — | List stored backups for a player. |
| `base_backup_get_buildable_data` | in_base_backup_id bigint → TABLE(buildable_type text, total_count integer) | — | Read buildable-piece data for a backup. |
| `base_backup_get_data` | in_base_backup_id bigint → dune.getbasebackupdata | — | Read backup metadata. |
| `base_backup_get_totem_data` | in_base_backup_id bigint → dune.basebackuptotemdata | — | Base backup get totem data. |
| `base_backup_get_totem_data_from_totem_id` | in_totem_id bigint → dune.basebackuptotemdata | — | Base backup get totem data from totem id. |
| `base_backup_get_totem_id` | backup_id bigint → bigint | — | Base backup get totem id. |
| `base_backup_recycle` | in_base_backup_id bigint, in_target_inventory_id bigint → integer | — | Recycle a stored base backup into an inventory. |
| `base_backup_save` | in_player_actor_id bigint, in_base_backup_name text, in_building_pieces_to_link dune.basebackupbuildingitem[], in_placeables_to_link bigint[], in_placeables_to_remove_totem_owner bigint[] → bigint | — | Base backup save. |
| `base_backup_save_all_totems_from_player_owner` | in_player_id bigint → TABLE(base_backup_id bigint) | — | Snapshot every base a player owns; returns set of backup ids. |
| `base_backup_save_from_totem` | in_player_id bigint, totem_id bigint → bigint | — | Snapshot a single base keyed by totem id; returns backup id. |
### battlegroup
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `get_battlegroup_close_date` | () → timestamp without time zone | — | Get battlegroup close date. |
| `set_battlegroup_close_date` | in_close_date timestamp without time zone → timestamp without time zone | — | Set battlegroup close date. |
### building_blueprint
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `_building_validate_totem_owner_id` | in_totem_owner_id bigint → bigint | — | Building validate totem owner id. |
| `_placeable_validate_totem_owner_id` | in_totem_owner_id bigint → bigint | — | Placeable validate totem owner id. |
| `delete_building_blueprint` | in_building_item_id bigint → void | — | Delete building blueprint. |
| `get_building_blueprint_copy_data` | in_building_blueprint_id bigint → dune.buildingblueprintgetcopydata | — | Get building blueprint copy data. |
| `get_building_favorites` | in_account_id bigint → TABLE(building_types text[]) | — | Get building favorites. |
| `get_building_id` | in_actor_id bigint, in_class text → dune.buildinggetidcomposite | — | Get building id. |
| `get_placeable_id` | in_actor_id bigint, in_class text, in_building_type text → dune.placeablegetidcomposite | — | Get placeable id. |
| `load_building` | in_building_id bigint → dune.buildingsavedata | — | Load building. |
| `load_placeable` | in_placeable_id bigint → dune.placeablesavedata | — | Load placeable. |
| `load_totem` | in_id bigint → dune.totemsavedata | — | Load totem. |
| `save_building` | in_building_id bigint, in_data dune.buildingsavedata → void | — | Save building. |
| `save_building_blueprint_copy` | in_building_item_id bigint, in_building_blueprint_id bigint, in_building_blueprint_building_data dune.buildingblueprintpiecesaveitemcontainer[], in_building_blueprint_placeable_data dune.buildingblueprintplaceablesaveitemcontainer[], in_building_blueprint_pentashield_data dune.buildingblueprintpentashielditem[] → bigint | — | Save building blueprint copy. |
| `save_placeable` | in_placeable_id bigint, in_data dune.placeablesavedata → void | — | Save placeable. |
| `save_totem` | in_id bigint, in_data dune.totemsavedata → void | — | Save totem. |
| `update_server_building_favorites` | in_account_id bigint, in_building_types text[] → void | — | Update server building favorites. |
| `update_server_learned_building_sets` | in_account_id bigint, in_learned_building_sets text[] → void | — | Update server learned building sets. |
### character_mod
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `delete_character` | in_actor_id bigint → void | — | Delete character. |
| `initialize_specialization_keystones` | in_keystones text[] → TABLE(keystone_id smallint, keystone_name text) | — | Initialize specialization keystones. |
| `login_account` | in_user_id text, in_funcom_id text, in_platform_id text, in_platform_name text, in_minimum_returning_player_time_seconds integer, in_character_name text, in_return_dimension_index integer, in_home_dimension_index integer → SETOF dune.playerdescription | — | Full login flow; returns player description (called by game server). |
| `permission_set_player_rank` | in_actor_id bigint, in_player_id bigint, in_rank smallint, in_map_id text → void | — | Permission set player rank. |
| `player_state_update` | in_data dune.playerstateupdatedata[] → void | — | Player state update. |
| `purchase_specialization_keystone` | in_player_id bigint, in_keystone text → boolean | — | Validate-then-record a keystone purchase. Returns bool. |
| `reset_specialization_keystones` | in_player_id bigint → void | `db.go:740` | Wipe all purchased keystones for a player. |
| `reset_specialization_tracks` | in_player_id bigint → void | `db.go:737` | Wipe all specialization tracks for a player. |
| `returning_player_award_given` | in_account_id bigint → void | — | Stamp last_returning_player_awarded_time = now() for an account. |
| `set_character_import_state` | in_fls_id text, in_state dune.transferimportstate → void | — | Set character import state. |
| `set_character_name` | in_account_id bigint, in_name text → void | `db.go:577` | Rename a character. |
| `set_players_from_server_ids_offline` | in_server_ids text[] → void | — | Set players from server ids offline. |
| `set_specialization_xp_and_level` | in_player_id bigint, in_track_type dune.specializationtracktype, in_xp_amount integer, in_level real → void | `db.go:2936` | Directly set spec XP and level for a player on a given track. |
| `update_player_tags` | in_account_id bigint, tags_to_add text[], tags_to_remove text[] → void | `db.go:628`<br>`db.go:1458`<br>`db.go:1938`<br>`db.go:1966`<br>`db.go:2245` | Add and/or remove gameplay tags for an account in one call. |
| `update_returning_player_status` | in_user_id text, in_minimum_returning_player_time_seconds integer → void | `db.go:665` | Recalculate returning-player eligibility on login. |
| `update_specialization_refund_id` | in_player_id bigint, in_refund_id smallint, in_removed_keystones smallint[] → void | — | Update specialization refund id. |
### cleanup
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `cleanup_orphaned_entities` | () → trigger | — | Cleanup orphaned entities. |
| `reset_all_players_from_server_ids_grace_period_and_logoff_timer` | in_server_id text, in_reset_time timestamp without time zone → void | — | Reset all players from server ids grace period and logoff timer. |
| `reset_server_all_player_access_codes` | in_account_id bigint → void | — | Reset server all player access codes. |
| `wipe_old_events_log` | in_days_limit integer → void | — | Wipe old events log. |
### communinet
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `load_communinet_player_data` | in_account_id bigint → TABLE(is_active boolean, selected_channel_name text, channel_name text, is_tuned boolean) | — | Load communinet player data. |
| `remove_communinet_player_channel` | in_account_id bigint, in_channel_name text → void | — | Remove communinet player channel. |
| `update_communinet_player_channel` | in_account_id bigint, in_channel_name text, in_is_tuned boolean → void | — | Update communinet player channel. |
| `update_communinet_player_data` | in_account_id bigint, in_is_active boolean, in_selected_channel_name text → void | — | Update communinet player data. |
### currency
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `adjust_player_virtual_currency_balance` | in_controller_id bigint, in_currency_id smallint, in_delta bigint → bigint | `db.go:475`<br>`db.go:519` | Atomic delta on Solaris/Scrip balance; returns new balance. |
| `dune_exchange_modify_user_solari_balance` | in_controller_id bigint, in_solari_delta bigint → void | — | Dune exchange modify user solari balance. |
| `dune_exchange_retrieve_solari_balance` | in_owner_id bigint → bigint | — | Dune exchange retrieve solari balance. |
| `dune_exchange_retrieve_solaris_from_item` | in_controller_id bigint, in_order_id bigint → dune.duneexchangeretrievesolarisfromitemresult | — | Dune exchange retrieve solaris from item. |
| `edit_guild_description` | in_guild_id bigint, in_guild_desc text → void | — | Edit guild description. |
| `get_player_virtual_currency_balances` | in_controller_id bigint → TABLE(out_currency_id smallint, out_currency_balance bigint) | — | List wallet balances for a controller. |
| `get_solaris_id` | () → smallint | `db.go:477`<br>`db.go:487`<br>`db.go:927` | Currency id used for Solaris. |
| `log_event_solaris` | in_function_oid oid, in_message dune.logmessagetype, in_controller_id bigint, in_solaris_balance bigint, in_solaris_delta bigint → void | — | Log event solaris. |
### debug
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `debug_add_test_table_data` | in_entry text → void | — | Debug add test table data. |
| `debug_collect_test_table_data` | () → SETOF text | — | Debug collect test table data. |
| `debug_echo` | in_text text, in_notices text[] → text | — | Debug echo. |
| `debug_get_coriolis_seeds` | () → TABLE(farm_seed integer, map_names text[], map_seeds integer[], partitions_ids bigint[], partitions_map text[], partitions_seeds integer[]) | — | Debug get coriolis seeds. |
| `debug_raise_exception` | in_exception text, in_notices text[] → void | — | Debug raise exception. |
| `debug_raise_notices` | in_notices text[] → void | — | Debug raise notices. |
| `debug_reset_test_table` | () → void | — | Debug reset test table. |
| `debug_set_farm_seed` | in_new_coriolis_seed integer → void | — | Debug set farm seed. |
| `debug_set_map_seed` | in_map text, in_new_coriolis_seed integer → void | — | Debug set map seed. |
| `debug_set_partition_seed` | in_partition_id bigint, in_new_coriolis_seed integer → void | — | Debug set partition seed. |
### dialogue
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `delete_dialogue_data` | in_player_controller_id bigint → void | — | Delete dialogue data. |
| `load_dialogue_data` | in_player_controller_id bigint, OUT met_npcs text[], OUT taken_nodes integer[] → record | — | Load dialogue data. |
| `save_dialogue_data` | in_player_controller_id bigint, in_met_npcs text[], in_taken_nodes integer[] → void | — | Save dialogue data. |
### dungeon
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `delete_all_dungeon_completions` | in_dungeon_id text → void | — | Delete all dungeon completions. |
| `delete_all_dungeon_completions_by_player` | in_dungeon_id text, in_player_id bigint, in_keep_completion_for_other_players boolean → void | — | Delete all dungeon completions by player. |
| `delete_all_dungeon_completions_for_all_dungeons_by_player` | in_player_id bigint, in_keep_completion_for_other_players boolean → void | — | Delete all dungeon completions for all dungeons by player. |
| `record_dungeon_completion` | in_dungeon_id text, in_difficulty integer, in_duration_ms integer, players_ids bigint[] → void | — | Record dungeon completion. |
### encryption
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `_user_data_encryption_initially_encrypt_existing_data` | () → void | — | User data encryption initially encrypt existing data. |
| `_user_data_encryption_setup_enabled` | key_hash bytea → void | — | User data encryption setup enabled. |
| `_user_data_encryption_setup_tainted` | () → void | — | User data encryption setup tainted. |
| `decrypt_user_data` | in_encrypted_data bytea → text | — | Decrypt user data. |
| `encrypt_user_data` | in_data text → bytea | — | Encrypt user data. |
| `get_stored_user_data_encryption_key_hash` | () → bytea | — | Get stored user data encryption key hash. |
| `get_stored_user_data_encryption_status` | () → dune.userdataencryptionstatus | — | Get stored user data encryption status. |
| `get_stored_user_data_encryption_taint_xmax` | () → bigint | — | Get stored user data encryption taint xmax. |
| `setup_user_data_encryption` _(proc)_ | IN in_enable boolean → void | — | Setup user data encryption. |
### event_log
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `add_event_log_data` | in_game_event_owner bigint, in_universe_time bigint, in_map_name text, in_partition_id bigint, in_event_type integer, in_x_location double precision, in_y_location double precision, in_z_location double precision, in_is_player_facing boolean, in_custom_data text → void | — | Add event log data. |
| `add_event_log_data_batched` | in_data dune.eventlogbulkentrydata[] → void | — | Add event log data batched. |
| `create_event_log_partition` | () → trigger | — | Create event log partition. |
| `create_event_log_partition_table` _(proc)_ | IN table_name text, IN partition_id bigint → void | — | Create event log partition table. |
| `init_event_log` | in_partition_id bigint → void | — | Init event log. |
### exchange
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `dune_exchange_add_sell_order` | in_exchange_id bigint, in_access_point_id bigint, in_owner_id bigint, in_max_orders_per_player integer, in_expiration_time bigint, in_item_id bigint, in_count bigint, in_category_mask integer, in_category_depth smallint, in_durability_cur real, in_durability_max real, in_item_price bigint, in_wear_normalized_item_price bigint, in_quality_level bigint, in_solari_cost bigint → dune.duneexchangeaddsellorderresult | — | Dune exchange add sell order. |
| `dune_exchange_cancel_order` | in_order_id bigint, in_purge_time bigint, in_completion_type integer → void | — | Dune exchange cancel order. |
| `dune_exchange_expire_orders` | in_exchange_id bigint, in_current_time bigint, in_purge_time bigint, in_expired_completion_type integer → SETOF dune.exchangeexpiredorder | — | Dune exchange expire orders. |
| `dune_exchange_fulfill_sell_order` | in_exchange_id bigint, in_max_orders_per_player integer, in_purchased_completion_type integer, in_sold_completion_type integer, in_instigator_id bigint, in_order_id bigint, in_order_revision bigint, in_dst_inventory_id bigint, in_dst_index bigint, in_count bigint, in_solaris_fee bigint, in_purge_time bigint → dune.duneexchangefulfillsellorderresult | — | Dune exchange fulfill sell order. |
| `dune_exchange_get_user_id` | in_owner_id bigint → bigint | — | Dune exchange get user id. |
| `dune_exchange_purge_completed_orders` | in_exchange_id bigint, in_current_time bigint → SETOF dune.exchangeexpiredorder | — | Dune exchange purge completed orders. |
| `dune_exchange_query_storage_item` | in_order_id bigint → TABLE(completion_type integer, id bigint, revision bigint, expiration_time bigint, access_point_id bigint, ap_name text, owner_id bigint, item_id bigint, template_id text, stack_size bigint, item_price bigint, quality_level bigint, durability_cur real, durability_max real, dynamic_stats jsonb) | — | Dune exchange query storage item. |
| `dune_exchange_query_storage_items` | in_exchange_id bigint, in_owner_id bigint → TABLE(completion_type integer, id bigint, revision bigint, expiration_time bigint, access_point_id bigint, ap_name text, owner_id bigint, item_id bigint, template_id text, stack_size bigint, item_price bigint, quality_level bigint, durability_cur real, durability_max real, dynamic_stats jsonb) | — | Dune exchange query storage items. |
| `dune_exchange_relist_order` | in_order_id bigint, in_expiration_time bigint, in_item_price bigint, in_wear_normalized_item_price bigint, in_solari_cost bigint → bigint | — | Dune exchange relist order. |
| `dune_exchange_retrieve_storage_item` | in_exchange_id bigint, in_order_id bigint, in_dst_inventory_id bigint, in_dst_index bigint, in_count bigint → dune.duneexchangeretrievestorageorderresult | — | Dune exchange retrieve storage item. |
| `dune_exchange_update_recurring_sell_order` | in_exchange_id bigint, in_expiration_time bigint, in_access_point_id bigint, in_owner_id bigint, in_item_id bigint, in_increment bigint, in_max_count bigint, in_category_mask integer, in_category_depth smallint, in_durability_cur real, in_durability_max real, in_item_price bigint, in_wear_normalized_item_price bigint, in_quality_level bigint → bigint | — | Dune exchange update recurring sell order. |
| `get_dune_exchange_accesspoint_id` | in_exchange_id bigint, in_name text → bigint | — | Get dune exchange accesspoint id. |
| `get_dune_exchange_data` | in_exchange_id bigint, in_controller_id bigint → dune.loadexchangedataresult | — | Get dune exchange data. |
| `get_dune_exchange_id` | in_name text → bigint | — | Get dune exchange id. |
| `get_dune_exchange_used_order_slots` | in_controller_id bigint → integer | — | Get dune exchange used order slots. |
| `get_exchange_inventory_id` | in_exchange_id bigint → bigint | — | Get exchange inventory id. |
| `get_exchange_orders_by_mask` | in_mask integer, in_depth smallint → SETOF bigint | — | Get exchange orders by mask. |
| `get_exchange_sell_orders` | in_id bigint, in_exchange_id bigint, in_min_item_price bigint, in_max_item_price bigint, in_template_id text, in_mask integer, in_depth smallint → TABLE(id bigint, revision bigint, expiration_time bigint, access_point_id bigint, ap_name text, owner_id bigint, template_id text, stack_size bigint, initial_stack_size bigint, item_price bigint, quality_level bigint, durability_cur real, durability_max real, dynamic_stats jsonb) | — | Get exchange sell orders. |
| `get_exchange_sell_orders_by_owner` | in_exchange_id bigint, in_owner_id bigint → TABLE(id bigint, revision bigint, expiration_time bigint, access_point_id bigint, ap_name text, owner_id bigint, template_id text, stack_size bigint, initial_stack_size bigint, item_price bigint, quality_level bigint, durability_cur real, durability_max real, dynamic_stats jsonb) | — | Get exchange sell orders by owner. |
| `try_update_exchange_categories_hash` | in_new_hash integer → TABLE(item_template_id text, mask integer, depth smallint) | — | Try update exchange categories hash. |
### faction
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `change_player_faction` | in_player_id bigint, in_faction_id smallint, neutral_faction_id smallint, in_utc_time_faction_change timestamp without time zone → void | `db.go:2239` | Switch a player's faction allegiance. |
| `clean_guild_invites_with_incompatible_faction` | in_player_id bigint, in_faction_id smallint, neutral_faction_id smallint → void | — | Clean guild invites with incompatible faction. |
| `get_all_faction_members` | () → TABLE(player_id bigint, fls_id text, faction_id smallint) | — | Get all faction members. |
| `get_player_current_faction_reputation` | in_actor_id bigint, OUT out_faction_id smallint, OUT out_reputation_amount integer → record | — | Get player current faction reputation. |
| `get_player_faction` | in_player_id bigint, in_neutral_faction_id smallint → smallint | — | Get player faction. |
| `get_player_faction_name` | in_actor_id bigint, OUT player_faction_name text, OUT utc_time_faction_change timestamp without time zone → record | — | Get player faction name. |
| `handle_player_faction_guild_effects` | in_player_id bigint, in_faction_id smallint, neutral_faction_id smallint → void | — | Handle player faction guild effects. |
| `register_new_factions` | factions text[] → TABLE(faction_id smallint, faction_name text) | — | Register new factions. |
| `set_player_faction_reputation` | in_actor_id bigint, in_faction_id smallint, in_reputation_amount integer → void | `db.go:995`<br>`db.go:1083`<br>`db.go:1497`<br>`db.go:2254` | Set a player's faction rep value directly (audited). |
### farm
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `delete_all_inactive_farms` | () → void | — | Delete all inactive farms. |
| `get_farm_state` | () → TABLE(server_id text, farm_id text, outgoing_s2s_connections integer, incoming_s2s_connections integer, connected_players integer, igw_addr inet, igw_port integer, game_addr inet, game_port integer, ready boolean, alive boolean, map text, revision integer) | — | Get farm state. |
| `set_all_inactive_players_in_farm_offline` | () → void | — | Set all inactive players in farm offline. |
| `update_farm_state` | in_server_id text, in_outgoing_s2s_connections integer, in_incoming_s2s_connections integer, in_connected_players integer, in_farm_id text, in_igw_addr inet, in_igw_port integer, in_ready boolean, in_alive boolean, in_game_addr inet, in_game_port integer, in_map text, in_revision integer → void | — | Update farm state. |
### guild
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `accept_guild_invite` | in_invite_id bigint, in_role_id smallint, in_max_guild_count_per_player integer, in_max_members_per_guild integer, in_neutral_faction_id smallint → void | — | Accept guild invite. |
| `add_guild_invite` | in_player_id bigint, in_guild_id bigint, in_sender_player_id bigint, in_invite_sent_timespan bigint, in_max_guild_invites_per_guild integer → void | — | Add guild invite. |
| `add_guild_member` | in_player_id bigint, in_guild_id bigint, in_role_id smallint, in_max_guild_count_per_player integer, in_max_members_per_guild integer, in_neutral_faction_id smallint → void | — | Add guild member. |
| `break_guild_allegiance` | in_guild_id bigint, in_neutral_faction_id smallint → void | — | Break guild allegiance. |
| `clean_old_guild_invites` | in_cutoff_timespan bigint → void | — | Clean old guild invites. |
| `create_guild` | in_player_id bigint, in_neutral_faction smallint, in_guild_name text, in_guild_desc text, in_max_guild_count_per_player integer, OUT out_guild_id bigint, OUT out_success boolean, OUT out_fail_reason dune.guildcreatefailreason → record | — | Create guild. |
| `demote_guild_member` | in_guild_id bigint, in_player_id bigint, in_new_role smallint → void | — | Demote guild member. |
| `disband_guild` | in_guild_id bigint → void | — | Disband guild. |
| `get_guild_data` | in_guild_id bigint → TABLE(guild_name text, guild_faction_id smallint, guild_description text) | — | Get guild data. |
| `get_guild_data_for_player` | in_player_id bigint → TABLE(guild_id bigint, guild_factions_id smallint, guild_name text, guild_description text, player_id bigint, role_id smallint, player_faction_id smallint) | — | Get guild data for player. |
| `get_guild_for_player` | in_player_id bigint → bigint | — | Get guild for player. |
| `get_guild_invites` | in_guild_id bigint → TABLE(invite_id bigint, player_id bigint, sender_player_id bigint, invite_sent_timespan bigint, character_name text, sender_character_name text) | — | Get guild invites. |
| `get_guild_members` | in_guild_id bigint → TABLE(player_id bigint, role_id smallint, player_faction_id smallint) | — | Get guild members. |
| `guild_handle_actor_delete` | in_player_id bigint → void | — | Guild handle actor delete. |
| `guilds_get_exclusive_operation_lock` | () → void | — | Guilds get exclusive operation lock. |
| `pledge_guild_allegiance` | in_guild_id bigint, in_guild_leader_player_id bigint, in_neutral_faction_id smallint → void | — | Pledge guild allegiance. |
| `promote_guild_member` | in_guild_id bigint, in_player_id bigint, in_new_role smallint → void | — | Promote guild member. |
| `reject_guild_invite` | in_invite_id bigint → void | — | Reject guild invite. |
| `remove_guild_members` | in_player_ids bigint[], in_guild_id bigint, in_remove_reason smallint → void | — | Remove guild members. |
### igwo
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `igwo_get_server_details` | () → TABLE(address text, server_id text, ready boolean, partition_id bigint, map text, dimension_index integer, label text) | — | Igwo get server details. |
### inventory
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `advance_items_id_sequencer` | count bigint → bigint | — | Advance items id sequencer. |
| `delete_inventory_item` | in_item_id bigint, in_count bigint → bigint | — | Partial delete (decrement count); removes when count hits 0. |
| `delete_item` | in_id bigint → void | `db.go:718` | Delete one inventory item by id. |
| `delete_items` | in_ids bigint[] → void | — | Delete a batch of inventory items by id. |
| `delete_items_from_actor` | in_actor_id bigint → void | — | Delete items from actor. |
| `drain_item_tracking_data` | () → TABLE(function_name dune.itemtrackingfunctiontype, item_id bigint, account_id bigint, inventory_id bigint, template_id text, event_time timestamp without time zone, position_index bigint) | — | Drain item tracking data. |
| `dune_exchange_get_item_price_stats` | in_template_ids text[] → TABLE(template_id text, minimum bigint, average bigint) | — | Dune exchange get item price stats. |
| `get_exchange_sell_orders_by_item_type` | in_exchange_id bigint, in_template_ids text[] → TABLE(id bigint, revision bigint, expiration_time bigint, access_point_id bigint, ap_name text, owner_id bigint, template_id text, stack_size bigint, initial_stack_size bigint, item_price bigint, quality_level bigint, durability_cur real, durability_max real, dynamic_stats jsonb) | — | Get exchange sell orders by item type. |
| `get_inventory_data` | in_inventory_id bigint → dune.inventorydata | — | Read inventory metadata. |
| `get_inventory_id` | in_actor_id bigint, in_component_name_hash integer → bigint | — | Get inventory id. |
| `load_item` | in_item_id bigint → TABLE(item_id bigint, stack_size bigint, quality_level bigint, volume_override real, position_index bigint, template_id text, inventory_id bigint, is_new boolean, acquisition_time bigint, stats jsonb, sub_inventory_id bigint) | — | Read a single item. |
| `load_items` | in_inventory_id bigint → TABLE(item_id bigint, stack_size bigint, quality_level bigint, volume_override real, position_index bigint, template_id text, inventory_id bigint, is_new boolean, acquisition_time bigint, stats jsonb, sub_inventory_id bigint) | — | Read all items in an inventory. |
| `merge_inventory_items` | in_item_id bigint, in_dst_inventory_id bigint, in_dst_index bigint, in_count bigint → bigint | — | Merge inventory items. |
| `merge_or_move_inventory_item` | in_item_id bigint, in_dst_inventory_id bigint, in_dst_index bigint, in_count bigint → bigint | — | Merge if possible, otherwise move. |
| `move_inventory_item` | in_item_id bigint, in_dst_inventory_id bigint, in_dst_index bigint, in_count bigint → bigint | — | Relocate an item within/between inventories. |
| `player_purchased_item_from_vendor` | in_vendor_id text, in_player_id bigint, in_template_id text, in_amount_bought integer → void | — | Player purchased item from vendor. |
| `save_item` | in_item dune.inventoryitem → void | — | Insert/update a single inventory item. |
| `set_item_tracking_enabled` | in_enabled boolean → void | — | Set item tracking enabled. |
| `update_inventory` | in_delete_list bigint[], in_stack_update dune.itemstackupdate[], in_quality_update dune.itemqualityupdate[], in_stat_update dune.itemstatupdate[], in_item_locations dune.inventoryitemlocation[] → void | — | Bulk inventory mutator (delete, stack, quality, stats, location lists). |
| `update_item_locations` | in_item_locations dune.inventoryitemlocation[] → void | — | Update item locations. |
| `verify_item_dup_backup_tool` | in_account_id bigint, in_vehicle_id bigint, in_cheat_type dune.cheat_type_enum → void | — | Anti-dup check around backup tool flow. |
### items_purge
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `get_items_to_remove` | items_to_remove text[] → text[] | — | Get items to remove. |
| `get_recipes_to_remove` | recipes_to_remove text[] → text[] | — | Get recipes to remove. |
| `remove_items` | items_to_remove text[] → void | — | Remove items. |
| `remove_items_and_recipes` | items_to_remove text[], recipes_to_remove text[] → void | — | Remove items and recipes. |
| `remove_items_or_recipes_from_fgl_entities` | item_or_recipes text[] → void | — | Remove items or recipes from fgl entities. |
| `remove_resourcefield_states` | in_map text, in_dimension_index integer, in_field_ids bigint[] → void | — | Remove resourcefield states. |
| `update_removed_items_and_recipes` | items_removed text[], recipes_removed text[] → void | — | Update removed items and recipes. |
### journey_progression
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `admin_get_mnemonic_recall_details` | in_account_id bigint → TABLE(mnemonic_recall_id bigint, lesson_id text, lesson_state bigint, lesson_progress integer) | — | Admin get mnemonic recall details. |
| `complete_journey_nodes_where_prerequisite_nodes_are_complete` | story_ids_to_complete text[], prerequisite_completed_story_ids text[] → void | — | Complete journey nodes where prerequisite nodes are complete. |
| `complete_journey_story_nodes_for_player` | in_player_id text, in_story_node_ids text[] → void | `db.go:2229` | Bulk-mark journey story nodes complete for a player. |
| `coriolis_cleanup_farm` | in_server_info dune.serverinfo, in_map_info dune.coriolismapinfo → void | — | Coriolis cleanup farm. |
| `coriolis_cleanup_partition` | in_server_info dune.serverinfo, in_map_info dune.coriolismapinfo → void | — | Coriolis cleanup partition. |
| `coriolis_update_seed` | in_server_info dune.serverinfo, in_new_coriolis_seed integer, in_map_info dune.coriolismapinfo → void | — | Coriolis update seed. |
| `create_or_update_tutorial_entry` | in_player_id bigint, in_tutorial_id smallint, in_tutorial_state smallint → void | — | Create or update tutorial entry. |
| `delete_all_journey_story_nodes` | in_account_id bigint → void | `db.go:1955` | Wipe all journey nodes for a player. |
| `delete_all_tutorial_entries` | in_player_id bigint → void | `db.go:2287` | Clear tutorial completion state for a player. |
| `delete_journey_story_ids` | story_ids text[] → void | — | Delete journey story ids. |
| `delete_journey_story_node` | in_account_id bigint, in_story_node_id text → void | — | Delete journey story node. |
| `delete_journey_story_nodes_for_group_for_player` | in_account_id bigint, in_reset_group dune.journeystoryresetgroup → void | — | Delete journey story nodes for group for player. |
| `delete_journey_story_nodes_for_player` | in_player_id text, in_story_node_ids text[] → void | — | Delete journey story nodes for player. |
| `delete_journey_story_nodes_for_player_account` | in_account_id bigint, in_story_node_ids text[] → void | — | Delete journey story nodes for player account. |
| `delete_mnemonic_recall_lesson` | in_account_id bigint, in_lesson_id text → void | — | Delete mnemonic recall lesson. |
| `delete_mnemonic_recall_lesson_all` | in_account_id bigint → void | `db.go:2304` | Wipe codex / mnemonic recall lessons. |
| `get_all_tutorial_entries` | in_player_id bigint → TABLE(tutorial_id smallint, tutorial_state smallint) | — | Get all tutorial entries. |
| `get_mnemonic_recall_lessons` | in_account_id bigint → TABLE(id bigint, lesson_id text, lession_state bigint, lesson_progress integer, is_new boolean) | — | Get mnemonic recall lessons. |
| `journey_story_node_cooldown_add` | in_account_id bigint, in_story_node_id text, in_time_to_expire timestamp without time zone → void | — | Journey story node cooldown add. |
| `journey_story_node_cooldown_delete_expired` | in_time_to_check timestamp without time zone → void | — | Journey story node cooldown delete expired. |
| `register_new_tutorials` | tutorials text[] → TABLE(tutorial_id smallint, tutorial_name text) | — | Register new tutorials. |
| `reset_journey_story_nodes_for_player` | in_player_id text, in_story_node_ids text[] → void | — | Reset journey story nodes for player. |
| `reveal_journey_story_nodes_for_player` | in_player_id text, in_story_node_ids text[] → void | — | Reveal journey story nodes for player. |
| `save_journey_story_node` | in_account_id bigint, in_story_node_id text, in_override_reward_block boolean, in_has_pending_reward boolean, in_complete_condition_state jsonb, in_reveal_condition_state jsonb, in_fail_condition_state jsonb, in_metadata_state jsonb, in_reset_group dune.journeystoryresetgroup → void | — | Save journey story node. |
| `save_journey_story_nodes` | in_account_id bigint, in_journey_data dune.savejourneydata[] → void | — | Save journey story nodes. |
| `save_mnemonic_recall_lesson` | in_account_id bigint, in_lesson_id text, in_lesson_state bigint, in_lesson_progress integer, in_is_new boolean → void | — | Save mnemonic recall lesson. |
| `update_coriolis_for_player` | in_controller_id bigint, OUT out_was_coriolis_processed boolean → boolean | — | Apply Coriolis storm processing for a player; returns whether processed. |
| `update_journey_story_ids` | old_story_ids text[], new_story_ids text[] → void | — | Update journey story ids. |
### landclaim
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `add_landclaim_segment` | in_totem_id bigint, in_grid_location_x bigint, in_grid_location_y bigint → void | — | Add landclaim segment. |
| `get_landclaim_segments` | in_totem_id bigint → TABLE(grid_location_x bigint, grid_location_y bigint) | — | Get landclaim segments. |
### landsraad
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `landsraad_cast_vote` | in_term_id bigint, in_player_id bigint, in_decree_name text → void | — | Landsraad cast vote. |
| `landsraad_change_term_end_time` | end_term_id bigint, new_end_time timestamp without time zone, in_test_term boolean → void | — | Landsraad change term end time. |
| `landsraad_check_task_completion` | () → trigger | — | Landsraad check task completion. |
| `landsraad_check_term_won` | () → trigger | — | Landsraad check term won. |
| `landsraad_collect_task_telemetry_for_faction` | in_term_id bigint, in_faction_name text → TABLE(task_telemetry dune.landsraadtermtasktelemetry[]) | — | Landsraad collect task telemetry for faction. |
| `landsraad_collect_term_telemetry` | in_term_id bigint, in_faction_names text[] → TABLE(term_telemetry dune.landsraadtermtelemetry[], task_telemetry dune.landsraadtermtasktelemetry[]) | — | Landsraad collect term telemetry. |
| `landsraad_collect_term_telemetry_for_faction` | in_term_id bigint, in_faction_name text → dune.landsraadtermtelemetry | — | Landsraad collect term telemetry for faction. |
| `landsraad_collect_vote_telemetry` | in_term_id bigint, in_winning_faction_id integer → TABLE(guild_id bigint, decree_name text, voting_influence integer) | — | Landsraad collect vote telemetry. |
| `landsraad_collect_votes` | in_term_id bigint → TABLE(elected_decree text, winning_faction_name text, available_decrees text[], guild_votes dune.landsraadguildvotetelemetry[]) | — | Landsraad collect votes. |
| `landsraad_determine_winner` | in_term_id bigint → text | — | Landsraad determine winner. |
| `landsraad_force_end_term` | end_term_id bigint → void | — | Landsraad force end term. |
| `landsraad_has_term_of_task_ended` | in_task_id bigint → boolean | — | Landsraad has term of task ended. |
| `landsraad_initialize_system` | number_of_weeks_term_retention integer, number_of_nominated_decrees integer, in_end_time timestamp without time zone, in_test_term boolean, faction_names text[], decrees dune.landsraaddecree[], tasks dune.landsraadtask[], task_rewards dune.landsraadtaskreward[] → TABLE(term_id bigint, reigning_faction_name text, active_decree_name text, winning_faction_name text, elected_decree_name text, start_time timestamp without time zone, end_time timestamp without time zone) | — | Landsraad initialize system. |
| `landsraad_initialize_term` | number_of_weeks_term_retention integer, number_of_nominated_decrees integer, in_end_time timestamp without time zone, in_test_term boolean, tasks dune.landsraadtask[], task_rewards dune.landsraadtaskreward[] → TABLE(term_id bigint, reigning_faction_name text, active_decree_name text, winning_faction_name text, elected_decree_name text, start_time timestamp without time zone, end_time timestamp without time zone) | — | Landsraad initialize term. |
| `landsraad_insert_task_progress` | in_term_id bigint, in_player_id bigint, in_guild_id bigint, in_house_name text, in_faction_progress integer, in_guild_progress real, in_player_progress real, in_timestamp timestamp without time zone → void | — | Landsraad insert task progress. |
| `landsraad_insert_task_progress_batched` | in_term_id bigint, in_task_progress dune.landsraadtaskprogress[] → void | — | Landsraad insert task progress batched. |
| `landsraad_insert_task_progress_faction` | in_term_id bigint, in_faction_name text, in_house_name text, in_faction_progress integer, in_guild_progress real, in_player_progress real → void | — | Landsraad insert task progress faction. |
| `landsraad_insert_task_progress_random` | in_term_id bigint, in_faction_names text[], in_num_rows integer → void | — | Landsraad insert task progress random. |
| `landsraad_insert_tasks` _(proc)_ | IN in_term_id bigint, IN in_tasks dune.landsraadtask[], IN in_task_rewards dune.landsraadtaskreward[] → void | — | Landsraad insert tasks. |
| `landsraad_load_current_rotation` | in_term_id bigint → TABLE(decree_name text, received_votes integer, open_votes integer) | — | Landsraad load current rotation. |
| `landsraad_load_current_term` | () → TABLE(term_id bigint, reigning_faction_name text, active_decree_name text, winning_faction_name text, elected_decree_name text, start_time timestamp without time zone, end_time timestamp without time zone, tasks dune.landsraadtask[], term_task_rewards dune.landsraadtaskreward[], winner_history text[], testterm boolean) | — | Landsraad load current term. |
| `landsraad_load_guild_contribution` | in_term_id bigint, in_guild_id bigint, in_faction_id bigint → TABLE(voting_influence real) | — | Landsraad load guild contribution. |
| `landsraad_load_guild_contributions` | in_term_id bigint, in_num_guilds integer, in_faction_names text[] → TABLE(faction_name text, guild_name text, voting_influence real) | — | Landsraad load guild contributions. |
| `landsraad_load_guild_vote` | in_term_id bigint, in_player_id bigint → TABLE(decree_name text, voting_influence real) | — | Landsraad load guild vote. |
| `landsraad_load_house_rewards` | in_player_id bigint → TABLE(house_name text, template_id text, amount integer, last_updated timestamp without time zone) | — | Landsraad load house rewards. |
| `landsraad_load_player_contributions` | in_term_id bigint, in_player_ids bigint[] → TABLE(player_id bigint, board_index smallint, amount integer) | — | Landsraad load player contributions. |
| `landsraad_load_task_faction_progress` | in_term_id bigint → TABLE(task_board_index integer, faction_name text, progress integer) | — | Landsraad load task faction progress. |
| `landsraad_load_task_faction_reveal_state` | in_term_id bigint → TABLE(task_board_index integer, faction_name text, reveal_state boolean, time_stamp timestamp without time zone) | — | Landsraad load task faction reveal state. |
| `landsraad_load_term_progress` | in_term_id bigint, in_num_guilds integer, in_faction_names text[], in_player_ids bigint[] → TABLE(faction_progress dune.landsraadtaskfactionprogress[], faction_reveal_state dune.landsraadtaskfactionrevealstate[], guild_contributions dune.landsraadguildcontribution[], player_contributions dune.landsraadplayercontribution[]) | — | Landsraad load term progress. |
| `landsraad_nominate_decrees_for_voting` _(proc)_ | IN last_active_decree_id bigint, IN num_decrees integer → void | — | Landsraad nominate decrees for voting. |
| `landsraad_notify_house_rewards_changed` | () → trigger | — | Landsraad notify house rewards changed. |
| `landsraad_perform_daily_task_reveal` | in_term_id bigint, in_faction_names text[], in_house_names_to_reveal text[], in_reveal_day integer → TABLE(faction_name text, house_name text, board_index integer) | — | Landsraad perform daily task reveal. |
| `landsraad_process_house_rewards` | () → trigger | — | Landsraad process house rewards. |
| `landsraad_process_task_progress` | max_rows integer → void | — | Landsraad process task progress. |
| `landsraad_task_has_been_completed` | in_task_id bigint → boolean | — | Landsraad task has been completed. |
| `landsraad_update_decrees` _(proc)_ | IN in_decrees dune.landsraaddecree[] → void | — | Landsraad update decrees. |
| `landsraad_update_factions` _(proc)_ | IN in_faction_names text[] → void | — | Landsraad update factions. |
| `landsraad_update_task_faction_reveal_state` | in_term_id bigint, in_task_board_index integer, faction_name text, reveal_state boolean → void | — | Landsraad update task faction reveal state. |
| `landsraad_withdraw_house_reward` | in_player_id bigint, in_house_rewards dune.landsraadplayerhousereward[] → void | — | Landsraad withdraw house reward. |
### lookup
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `admin_get_character_details` | in_account_id bigint → TABLE(account_id bigint, player_id text, character_name text, online_status text, last_avatar_activity timestamp with time zone, class text, map text, transform dune.transform, server_id text, partition_id bigint, partition_label text, dimension_index integer, gas_attributes jsonb, properties jsonb, slot_name text, fgl_data text) | — | Admin get character details. |
| `admin_get_character_ids` | in_search_term text → TABLE(id bigint, "user" text, character_name text) | — | Admin player search by partial name/id. |
| `admin_get_inventory_details` | in_account_id bigint → TABLE(inventory_id bigint, item_id bigint, stack_size integer, template_id text, acquisition_time bigint) | — | Admin: read inventory for an account. |
| `admin_get_journey_details` | in_player_id text, in_story_node_id text → TABLE(out_story_node_id text, out_override_reward_block boolean, out_has_pending_reward boolean, out_complete_condition_state jsonb, out_reveal_condition_state jsonb, out_fail_condition_state jsonb, out_metadata_state jsonb, out_reset_group dune.journeystoryresetgroup) | — | Admin get journey details. |
| `admin_get_partitions` | () → TABLE(out_partition_id bigint, out_server_id text, out_partition_definition jsonb, out_dimension_index integer, out_blocked boolean, out_label text, out_map text) | — | Admin get partitions. |
| `admin_move_offline_player` | in_fls_id text, in_target_partition_name text, in_target_location dune.vector → void | — | Admin move offline player. |
| `admin_move_offline_player_to_partition` | in_fls_id text, in_target_partition_id bigint, in_target_location dune.vector → void | `db.go:3341` | Admin move offline player to partition. |
| `admin_read_player_tags` | in_account_id bigint → TABLE(tags text) | — | Read tags for an account (admin). |
| `dune_get_account_id_by_user` | in_user text → bigint | — | Resolve FLS id → account id. |
| `fetch_resourcefield_state` | in_map text, in_dimension_index integer, in_field_kind_id smallint → TABLE(field_id bigint, spawn_time double precision, value_remaining bigint) | — | Fetch resourcefield state. |
| `fetch_server_spice_field_manifest` | in_server_id text → TABLE(spicefield_type_id integer, inactive_fields_of_type integer, requested_spawned_of_type integer) | — | Fetch server spice field manifest. |
| `fetch_spicefie_id_types_with_global_info` | in_map_name text, in_dimension_index integer → TABLE(spicefield_type_id integer, max_globally_active integer, max_globally_primed integer, current_globally_active integer, current_globally_primed integer, is_spawning_active boolean, field_type text) | — | Fetch spicefie id types with global info. |
| `get_all_demo_players` | () → TABLE(fls_ids text) | — | Get all demo players. |
| `get_all_guild_members` | () → TABLE(player_id bigint, fls_id text, guild_id bigint) | — | Get all guild members. |
| `get_all_online_or_recently_disconnected_player_online_state` | () → SETOF dune.playeronlinestateentry | — | Get all online or recently disconnected player online state. |
| `get_all_parties` | () → TABLE(party_id bigint, player_id bigint, player_name text, party_leader_id bigint, platform_session_id text, platform_name text, platform_players_count integer) | — | Get all parties. |
| `get_all_party_invites` | () → TABLE(invite_id bigint, party_id bigint, sender_player_id bigint, sender_name text, player_id bigint, player_name text, invite_sent_timespan bigint) | — | Get all party invites. |
| `get_all_party_members` | () → TABLE(player_id bigint, fls_id text, party_id bigint) | — | Get all party members. |
| `get_all_player_character_home_dimensions` | () → TABLE(fls_id text, home_dimension integer) | — | Get all player character home dimensions. |
| `get_all_player_in_guild_online_state` | in_guild_id bigint → SETOF dune.playeronlinestateentry | — | Get all player in guild online state. |
| `get_all_player_travel_states` | () → TABLE(fls_id text, login_target_dimension_index integer) | — | Get all player travel states. |
| `get_all_unresolved_character_imports` | () → TABLE(flsid text, importstate dune.transferimportstate, lastupdatetime timestamp with time zone) | — | Get all unresolved character imports. |
| `get_best_dungeon_completion` | in_dungeon_id text → TABLE(out_difficulty integer, out_duration_ms integer, out_players_names text[]) | — | Get best dungeon completion. |
| `get_best_dungeons_completions_for_player` | in_player_id bigint → TABLE(out_dungeon_id text, out_difficulty integer, out_duration_ms integer, out_players_num smallint) | — | Get best dungeons completions for player. |
| `get_character_import_state` | in_fls_id text → dune.transferimportstate | — | Get character import state. |
| `get_learned_building_sets` | in_account_id bigint → SETOF text | — | Get learned building sets. |
| `get_learned_new_buildable_pieces` | in_account_id bigint → SETOF text | — | Get learned new buildable pieces. |
| `get_login_journey_nodes` | in_account_id bigint → dune.journeynodeinfo[] | — | Get login journey nodes. |
| `get_login_journey_nodes_cooldown` | in_account_id bigint → dune.journeynodecooldowninfo[] | — | Get login journey nodes cooldown. |
| `get_online_player_controller_ids` | in_map text → SETOF bigint | — | Get online player controller ids. |
| `get_online_player_controller_ids_on_farm` | () → SETOF bigint | — | Get online player controller ids on farm. |
| `get_player_access_codes` | in_account_id bigint → TABLE(access_code integer, access_code_type integer) | — | Get player access codes. |
| `get_player_guild_invites` | in_player_id bigint → TABLE(invite_id bigint, guild_id bigint, guild_name text, guild_description text, sender_player_id bigint, invite_sent_timespan bigint, character_name text, sender_character_name text) | — | Get player guild invites. |
| `get_player_ids_online_state` | in_player_ids bigint[] → SETOF dune.playeronlinestateentry | — | Get player ids online state. |
| `get_player_infos_for_actor_ids` | in_actor_ids bigint[] → TABLE(player_id bigint, character_name text, fls_id text, funcom_id text, platform_id text, platform_name text) | — | Get player infos for actor ids. |
| `get_player_infos_for_character_names` | in_character_names text[] → TABLE(player_id bigint, character_name text, fls_id text, funcom_id text, platform_id text, platform_name text) | — | Get player infos for character names. |
| `get_player_infos_for_fls_ids` | in_fls_ids text[] → TABLE(player_id bigint, character_name text, fls_id text, funcom_id text, platform_id text, platform_name text) | — | Get player infos for fls ids. |
| `get_player_infos_for_funcom_ids` | in_funcom_ids text[] → TABLE(player_id bigint, character_name text, fls_id text, funcom_id text, platform_id text, platform_name text) | — | Get player infos for funcom ids. |
| `get_player_online_state_within_grace_period_for_each_server` | () → TABLE(fls_id text, previous_partition_id bigint, current_server_id text, online_status dune.playerconnectionstatus, within_grace_period boolean, last_disconnect timestamp without time zone, demo_playtime_seconds integer, logoff_persistence_end_time timestamp without time zone, party_id bigint) | — | Get player online state within grace period for each server. |
| `get_player_partition_id` | in_fls_id text → bigint | — | Get player partition id. |
| `get_player_pawn` | in_account_id bigint → TABLE(description dune.actordescription, server_info dune.serverinfo, player_tags text[]) | — | Get player pawn. |
| `get_players_demo_data` | in_controller_ids bigint[] → SETOF dune.playerdemostatedescription | — | Get players demo data. |
| `get_traveling_actor_id_and_types` | in_actor_id bigint → TABLE(id bigint, is_instigator boolean, is_player boolean, level integer) | — | Get traveling actor id and types. |
| `get_traveling_actor_ids` | in_actor_id bigint, in_max_recursion_level integer → TABLE(id bigint, is_instigator boolean, level integer) | — | Get traveling actor ids. |
| `get_traveling_actors_fls_ids` | in_actor_id bigint → TABLE(out_id text) | — | Get traveling actors fls ids. |
| `get_traveling_non_player_actor_ids` | in_actor_id bigint → TABLE(id bigint) | — | Get traveling non player actor ids. |
| `is_player_guild_admin` | in_player_id bigint, in_guild_id bigint → boolean | — | Is player guild admin. |
| `is_player_offline` | in_fls_id text → boolean | — | Return true if player has no live session. |
| `is_player_party_leader` | in_player_id bigint, in_party_id bigint → boolean | — | Is player party leader. |
### map_areas
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `add_map_areas_surveyed_items` | in_account_id bigint, in_area_id smallint, in_survey_point_marker_id bigint, in_surveyed_items_target jsonb, in_surveyed_items_progress jsonb, in_map_name text → void | — | Add map areas surveyed items. |
| `add_map_areas_time_discovered` | in_account_id bigint, in_area_id smallint, in_time_discovered timestamp without time zone, in_map_name text → void | — | Add map areas time discovered. |
| `add_map_areas_time_first_entered` | in_account_id bigint, in_area_id smallint, in_time_first_entered timestamp without time zone, in_map_name text → void | — | Add map areas time first entered. |
| `clear_map_areas_data_for_player` | in_id bigint → void | — | Clear map areas data for player. |
| `create_sinkchart_for_map_area_id` | in_item_id bigint, in_creator_id bigint, in_map_name text, in_area_id smallint → integer | — | Create sinkchart for map area id. |
| `delete_crafted_map` | in_item_id bigint → void | — | Delete crafted map. |
| `delete_world_partition_by_map_id` | in_map_id text → void | — | Delete world partition by map id. |
| `load_map_areas_entries` | in_account_id bigint, in_map_name text → TABLE(account_id bigint, area_id smallint, time_discovered timestamp without time zone, time_first_entered timestamp without time zone, survey_point_marker_id bigint, items_surveyed_target jsonb, items_surveyed_progress jsonb, map_name text) | — | Load map areas entries. |
| `overmap_delete_player_survival_data` | in_player_id bigint → void | — | Overmap delete player survival data. |
| `overmap_load_player_survival_data` | in_player_id bigint → TABLE(out_vehicle_id bigint, out_has_polar_psu boolean, out_overmap_location dune.vector) | — | Overmap load player survival data. |
| `overmap_save_player_survival_data` | in_player_id bigint, in_vehicle_id bigint, in_has_polar_psu boolean, in_overmap_location dune.vector → void | — | Overmap save player survival data. |
| `use_sinkchart` | in_player_id bigint, in_account_id bigint, in_area_id smallint, in_item_id bigint, in_sinkchart_map_name text, in_player_map_name text, in_player_current_dimension integer → dune.usesinkchartreturndata | — | Use sinkchart. |
### markers
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `delete_map_markers` | in_dimension_index integer, in_map_name text, in_player_marker_data dune.deleteplayermarkerdata[] → void | — | Delete map markers. |
| `delete_markers_by_id` | in_marker_ids integer[] → void | — | Delete markers by id. |
| `delete_markers_by_static_location_key` | p_location_key text → void | — | Delete markers by static location key. |
| `delete_markers_for_all_players` | in_marker_types_to_keep text[], in_map text → void | — | Delete markers for all players. |
| `delete_static_location_markers` | p_location_keys text[] → void | — | Delete static location markers. |
| `load_markers` | in_player_id bigint, in_dimension_id integer, in_map_name text → TABLE(out_marker_hash_id integer, out_marker_type text, out_x double precision, out_y double precision, out_z double precision, out_payload_type text, out_area_id smallint, out_area_radius real, out_long_range boolean, out_payload jsonb, out_discovery_level smallint, out_discovery_method smallint, out_player_payload jsonb) | — | Load markers. |
| `save_markers` | in_player_marker_data dune.saveplayermarkerdata[], in_marker_data dune.savemarkerdata[] → void | — | Save markers. |
| `update_marker_ids` | in_old_ids integer[], in_new_ids integer[] → void | — | Update marker ids. |
### misc
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `corilis_cleanup_map` | in_server_info dune.serverinfo, in_map_info dune.coriolismapinfo → void | — | Corilis cleanup map. |
| `downgrade_map_name` | in_map_name text → text | — | Downgrade map name. |
| `fix_broken_harkonnen_players_due_to_fooled_thufir` | () → void | — | Fix broken harkonnen players due to fooled thufir. |
| `get_consumed_lore_pickups` | in_actor_id bigint, in_use_temporary boolean → SETOF bit | — | Get consumed lore pickups. |
| `get_controller_id_from_platform_id` | in_platform_id text → bigint | — | Get controller id from platform id. |
| `get_friends_search` | in_player_name text, in_max_players_count integer → TABLE(player_id bigint, character_name text, funcom_id text, platform_id text, platform_name text) | — | Get friends search. |
| `get_sub_inventory_id` | in_owner_item_id bigint → bigint | — | Get sub inventory id. |
| `load_dimension_index` | in_map text, in_partition_id bigint → integer | — | Load dimension index. |
| `load_events_log_data_from_player` | in_actor_id bigint, in_limit_entries_num integer → TABLE(game_event_owner bigint, universe_time timestamp without time zone, map_name text, partition_id bigint, event_type integer, x_location double precision, y_location double precision, z_location double precision, custom_data jsonb) | — | Load events log data from player. |
| `load_static_encounter_name` | in_map_name text, in_package_name text, in_actor_name text → TABLE(encounter_name text, waiting_for_reset boolean) | — | Load static encounter name. |
| `parties_get_exclusive_operation_lock` | () → void | — | Parties get exclusive operation lock. |
| `remove_members_offline_for` | in_interval_seconds integer → void | — | Remove members offline for. |
| `save_login_target_dimension` | in_fls_id text, in_login_target_dimension_index integer → void | — | Save login target dimension. |
| `save_static_encounter_name` | in_map_name text, in_package_name text, in_actor_name text, in_encounter_name text → void | — | Save static encounter name. |
| `save_static_encounter_waiting_for_reset` | in_map_name text, in_package_name text, in_actor_name text, in_waiting_for_reset boolean → void | — | Save static encounter waiting for reset. |
| `update_consumed_per_player_lore` | in_actor_id bigint, in_consumed_bit_array bit, in_use_temporary boolean → void | — | Update consumed per player lore. |
| `update_inventories_data` | in_inventory_data_list dune.inventorydata[] → void | — | Update inventory metadata for a list. |
| `update_resourcefield_states` | in_map text, in_dimension_index integer, in_field_kind_id smallint, in_field_states dune.resourcefieldstateentry[] → void | — | Update resourcefield states. |
| `update_sell_orders_categories` | category_update_data dune.exchangecategoryupdatedata[] → void | — | Update sell orders categories. |
| `upgrade_location_data_list` | in_location_data_list jsonb, in_map_field_name text → jsonb | — | Upgrade location data list. |
| `upgrade_map_name` | in_map_name text → text | — | Upgrade map name. |
| `upgrade_map_value` | in_value jsonb → jsonb | — | Upgrade map value. |
| `zero_transform` | () → dune.transform | — | Zero transform. |
### partition
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `add_partition_unique` | in_map text, in_definition jsonb, in_dimension bigint, in_label text → bigint | — | Add partition unique. |
| `determine_partition_label` | in_map text, in_dimension_index integer, in_label text, in_allow_overwrite boolean, in_partition_id bigint → text | — | Determine partition label. |
| `determine_partition_label_trigger` | () → trigger | — | Determine partition label trigger. |
| `get_partition_presets` | () → SETOF text | — | Adds a partition only if its unique. Not using constraints, as this is only a helper function. |
| `get_partitions` | in_map text → SETOF bigint | — | Get partitions. |
| `igwo_delete_world_partitions` | in_partition_ids bigint[] → void | — | Igwo delete world partitions. |
| `igwo_get_partition_id_seq_last_value` | () → bigint | — | Igwo get partition id seq last value. |
| `igwo_get_partition_ids` | () → SETOF bigint | — | Igwo get partition ids. |
| `igwo_get_partitions` | () → TABLE(partition_id bigint, map text, dimension_index integer, label text, min_x double precision, min_y double precision, max_x double precision, max_y double precision) | — | Igwo get partitions. |
| `igwo_insert_world_partition` | in_partition_id bigint, in_map text, in_partition_definition jsonb, in_dimension_index integer, in_partition_label text → bigint | — | Igwo insert world partition. |
| `igwo_next_partition_id_seq` | () → bigint | — | Igwo next partition id seq. |
| `igwo_notify_world_partition_update` | () → void | — | Igwo notify world partition update. |
| `igwo_restart_partition_id_seq` | in_restart_with bigint → void | — | Igwo restart partition id seq. |
| `igwo_update_world_partition` | in_map text, in_partition_definition jsonb, in_partition_id bigint, in_dimension_index integer, in_label text → void | — | Igwo update world partition. |
| `initialize_partitions_basic_battlegroup` | () → void | — | Initialize partitions basic battlegroup. |
| `initialize_partitions_basic_survival_1` | () → void | — | Initialize partitions basic survival 1. |
| `initialize_partitions_development_battlegroup` | () → void | — | Initialize partitions development battlegroup. |
| `initialize_partitions_editor_default_1x1` | () → void | — | Initialize partitions editor default 1x1. |
| `initialize_partitions_full_battlegroup` | () → void | — | Initialize partitions full battlegroup. |
| `initialize_partitions_igw_test_small_2x1` | () → void | — | Initialize partitions igw test small 2x1. |
| `initialize_partitions_igw_test_small_2x2` | () → void | — | Initialize partitions igw test small 2x2. |
| `initialize_partitions_igw_training` | () → void | — | Initialize partitions igw training. |
| `initialize_world_partition` | in_map_name text, in_num_servers integer, in_dimension_index integer → SETOF bigint | — | Initialize world partition. |
| `load_partition_definition_map` | () → TABLE(out_partition_id bigint, out_server_id text, out_partition_definition jsonb, out_dimension_index integer, out_blocked boolean, out_label text, out_map text) | — | Load partition definition map. |
| `load_world_partition` | in_map_name text, in_server_id text, in_desired_dimension_index bigint, in_desired_partition_id bigint → TABLE(partition_id bigint, partition_definition jsonb, dimension_index integer, blocked boolean, label text) | — | Load world partition. |
| `save_world_partition` | in_map_name text, in_server_id text, in_dimension_index bigint, in_partition_definition jsonb, in_blocked boolean, in_label text → bigint | — | Save world partition. |
| `unassign_partition` | in_server_id text → boolean | — | Unassign partition. |
| `update_partition_labels` | in_allow_overwrite boolean → void | — | Update partition labels. |
### party
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `accept_party_invite` | in_invite_id bigint, in_platform_session_id text, in_max_party_member_count integer → dune.partyacceptinviteresult | — | Accept party invite. |
| `add_party_invite` | in_sender_player_id bigint, in_sender_platform_name text, in_sender_platform_session_id text, in_player_id bigint, in_max_party_member_count integer, in_invite_sent_timespan bigint → void | — | Add party invite. |
| `clean_expired_party_invites` | in_invite_expire_seconds integer → void | — | Clean expired party invites. |
| `disband_party` | in_party_id bigint → void | — | Disband party. |
| `get_party_members` | in_party_id bigint → TABLE(player_id bigint, fls_id text, party_id bigint) | — | Get party members. |
| `internal_add_party_member` | in_invite_id bigint, in_party_id bigint, in_player_id bigint, in_platform_session_id text, in_platform_name text, in_max_party_member_count integer → dune.partyacceptinviteresult | — | Internal add party member. |
| `internal_create_party` | in_invite_id bigint, in_leader_id bigint, in_leader_platform_session_id text, in_leader_platform_name text, in_member_id bigint, in_platform_session_id text, in_platform_name text → bigint | — | Internal create party. |
| `join_platform_session_party` | in_leader_platform_id text, in_player_platform_id text, in_platform_session_id text, in_platform_name text, in_max_party_member_count integer → dune.partyacceptinviteresult | — | Join platform session party. |
| `promote_new_party_leader` | in_party_id bigint → void | — | Promote new party leader. |
| `promote_party_leader_to` | in_party_id bigint, in_player_id bigint → void | — | Promote party leader to. |
| `remove_party_invite` | in_invite_id bigint, in_remove_reason smallint → void | — | Remove party invite. |
| `remove_party_member` | in_player_id bigint, in_remove_reason smallint → void | — | Remove party member. |
| `update_party_platform_session` | in_party_id bigint, in_platform_session_id text, in_platform_name text → void | — | Update party platform session. |
### permission
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `get_actors_location_data_with_permission` | in_actor_ids bigint[] → SETOF dune.actorpermissionlocationdata | — | Get actors location data with permission. |
| `get_permission_actors_for_server` | in_server_info dune.serverinfo → SETOF dune.actorpermissioncombineddata | — | Get permission actors for server. |
| `get_permission_for_actor` | in_actor_id bigint → dune.actorpermissioncombineddata | — | Get permission for actor. |
| `get_permission_for_actors` | in_actor_id bigint[] → SETOF dune.actorpermissioncombineddata | — | Get permission for actors. |
| `get_permission_for_player_actors` | in_player_id bigint, in_min_rank smallint → SETOF dune.actorpermissioncombineddata | — | Get permission for player actors. |
| `permission_actor_create_or_update_base_marker` | in_actor_id bigint, in_player_id bigint, in_rank smallint → void | — | Permission actor create or update base marker. |
| `permission_actor_destroy` | in_actor_id bigint → void | — | Permission actor destroy. |
| `permission_actor_register` | in_entry dune.actorpermissionentry, in_owner_rank dune.actorpermissionrankdata → void | — | Permission actor register. |
| `permission_actor_takeover` | in_entry dune.actorpermissionentry, in_owner_rank dune.actorpermissionrankdata → void | — | Permission actor takeover. |
| `permission_actor_update_marker_location` | in_actor_id bigint, in_location_x real, in_location_y real, in_location_z real → void | — | Permission actor update marker location. |
| `permission_remove_player_rank` | in_actor_id bigint, in_player_id bigint → void | — | Permission remove player rank. |
| `permission_set_access_level` | in_actor_id bigint, in_access_level smallint → void | — | Permission set access level. |
| `permission_set_name` | in_actor_id bigint, in_name text → void | — | Permission set name. |
### player_persistence
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `_add_item_delete_log` | in_item_id bigint, in_inventory_id bigint, in_template_id text → void | — | Add item delete log. |
| `_add_item_trace_log` | in_function_name dune.itemtrackingfunctiontype, in_item_locations dune.inventoryitemlocation[] → void | — | Add item trace log. |
| `_add_item_trace_log` | in_function_name dune.itemtrackingfunctiontype, in_item_id bigint, in_inventory_id bigint, in_template_id text, in_position_index bigint → void | — | Add item trace log. |
| `perform_notify_on_character_delete` | in_user_id text → void | — | Perform notify on character delete. |
| `record_logoff_persistence_end_time` | in_player_pawn_id bigint, in_logoff_persistence_end_time timestamp without time zone → void | — | Record logoff persistence end time. |
| `save_player` | in_player dune.playerdescription → boolean | — | Save player. |
| `save_player_pawn` | in_pawn dune.actordescription, in_server_info dune.serverinfo, in_life_state dune.playerlifestate → boolean | — | Save player pawn. |
| `save_tracked_journey_cards` | in_player_id bigint, in_tracked_journey_card text, in_tracked_landsraad_card text → void | — | Save tracked journey cards. |
| `update_death_location` | in_pawn dune.actordescription, in_server_info dune.serverinfo, in_life_state dune.playerlifestate → void | — | Update death location. |
### schema_meta
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `get_applied_patches` | () → SETOF text | — | Get applied patches. |
| `get_schema_version` | () → integer | — | Get schema version. |
| `get_universe_time` | () → TABLE(universe_time_timestamp timestamp without time zone, down_time_accumulation bigint) | — | Get universe time. |
| `save_demo_account_time` | in_fls_id text, in_demo_playtime_seconds integer → void | — | Save demo account time. |
| `set_demo_state` | in_user_id text, in_demo_state dune.demostate → void | — | Set demo state. |
| `update_universe_time` | in_farm_id text → TABLE(universe_time_timestamp timestamp without time zone, down_time_accumulation bigint) | — | Update universe time. |
### server
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `create_server_player_access_codes` | in_account_id bigint, in_access_code integer, in_access_code_type integer, in_is_resettable boolean → void | — | Create server player access codes. |
| `delete_server_player_access_codes` | in_account_id bigint, in_access_code integer, in_access_code_type integer → void | — | Delete server player access codes. |
| `get_active_servers_for_gateway` | () → TABLE(server_id text, map text, partition_id bigint, dimension_index integer, game_addr inet, game_port integer, revision integer) | — | Used by the gateway service to monitor for active servers. |
| `mark_server_dead` | in_server_id text → void | — | Mark server dead. |
| `register_lore_pickup` | in_lore_pickup_ids text[] → SETOF smallint | — | Register lore pickup. |
| `register_per_player_lore_pickup` | in_lore_pickup_ids text[], in_use_temporary boolean → SETOF smallint | — | Register per player lore pickup. |
| `register_temporary_lore_pickup` | in_lore_pickup_ids text[] → SETOF smallint | — | Register temporary lore pickup. |
| `server_info_match` | in_actor dune.actors, in_server_info dune.serverinfo → boolean | — | Server info match. |
| `update_server_learned_new_buildable_pieces` | in_account_id bigint, in_new_buildable_pieces text[] → void | — | Update server learned new buildable pieces. |
### shifting_sand
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `delete_all_static_shifting_sand` | () → void | — | Delete all static shifting sand. |
| `record_static_shifting_sand` | in_id text, in_alpha double precision, in_x double precision, in_y double precision, in_last_modified_time bigint → void | — | Record static shifting sand. |
| `retrieve_all_static_shifting_sand` | () → TABLE(out_id text, out_alpha double precision, out_x double precision, out_y double precision, out_last_modified_time bigint) | — | Retrieve all static shifting sand. |
### spawner
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `delete_spawner` | in_map text, in_name text, in_dimension_index integer → void | — | Delete spawner. |
| `get_respawn_locations` | in_account_id bigint → dune.respawnlocation[] | — | Get respawn locations. |
| `get_spawner_id` | in_map text, in_name text, in_dimension_index integer → bigint | — | Get spawner id. |
| `update_respawn_locations` | player_id bigint, respawn_locations dune.respawnlocation[] → void | — | Update respawn locations. |
### spice_field
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `produce_spicefield_manifest` | in_map_name text, in_dimension_index integer → TABLE(server text, type_id integer, inactive_fields integer, requested_fields integer) | — | Produce spicefield manifest. |
| `record_deactivated_spice_field` | in_server_id text, in_spicefield_type_id integer → void | — | Record deactivated spice field. |
| `record_unreadied_spice_fields` | in_server_id text, in_spicefield_type_id integer, in_num_unreadied integer → void | — | Record unreadied spice fields. |
| `register_spice_field_server_resources` | in_server_id text, in_spicefield_type_ids integer[], in_inactive_fields_of_types integer[] → void | — | Register spice field server resources. |
| `request_spawn_spice_field` | in_server_id text, in_spicefield_type_id integer → void | — | Request spawn spice field. |
| `reset_global_spice_field_state` | in_map_name text, in_dimension_index integer → void | — | Reset global spice field state. |
| `try_prime_spicefield` | in_source_server_id text, in_spicefield_id integer → boolean | — | Try prime spicefield. |
| `try_restart_spicefield` | in_server_id text, in_spicefield_type_id integer → boolean | — | Try restart spicefield. |
| `try_spawn_spicefield` | in_source_server_id text, in_spicefield_id integer → boolean | — | Try spawn spicefield. |
| `update_global_spice_field_rules` | in_max_globally_primed integer, in_max_globally_active integer, in_spicefield_type_id integer → void | — | Update global spice field rules. |
| `update_spice_field_spawn_state` | in_is_spawning_active boolean, in_spicefield_type_id integer → void | — | Update spice field spawn state. |
| `upsert_spicefield_types` | in_max_globally_active integer[], in_max_globally_primed integer[], in_field_types text[], in_map_name text, in_dimension_index integer → TABLE(type_id integer, max_global integer, max_global_primed integer, spawning_active boolean, out_field_type text) | — | Upsert spicefield types. |
### stock_vendor
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `clean_stock_for_player` | in_player_id bigint → void | — | Clean stock for player. |
| `clean_stock_for_vendors` | in_vendor_ids text[] → void | — | Clean stock for vendors. |
| `clean_vendors_older_than_timestamp` | in_reference_timestamp bigint → void | — | Clean vendors older than timestamp. |
| `interact_get_vendor_items_bought_from_player` | in_vendor_id text, in_player_id bigint, in_current_cycle_start_timestamp bigint → TABLE(out_template_id text, out_amount_bought integer) | — | Interact get vendor items bought from player. |
| `update_vendor_timestamp_for_player` | in_vendor_id text, in_player_id bigint, in_timestamp bigint → void | — | Update vendor timestamp for player. |
### takeover
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `load_takeoverable_user_ids` | () → SETOF dune.takeovercharacterdatacomposite | — | Load takeoverable user ids. |
| `set_account_as_takeoverable` | in_user_id text, in_new_user_id text → void | — | Set account as takeoverable. |
| `takeover_account` | in_user_to_takeover text, in_current_user text → void | — | Takeover account. |
### taxation
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `taxation_emit_invoices` | new_tax_invoices dune.taxinvoicedata[] → void | — | Taxation emit invoices. |
| `taxation_get_all_invoices_for_player` | in_player_id bigint → TABLE(id bigint, totem_id bigint, reference_timestamp bigint, invoice_status smallint, amount integer, actor_name text) | — | Taxation get all invoices for player. |
| `taxation_get_all_invoices_for_server` | map_name text, in_dimension_index integer, in_partition_id bigint → TABLE(id bigint, totem_id bigint, reference_timestamp bigint, invoice_status smallint, amount integer, actor_name text) | — | Taxation get all invoices for server. |
| `taxation_get_all_invoices_for_totem` | in_totem_id bigint → TABLE(id bigint, totem_id bigint, reference_timestamp bigint, invoice_status smallint, amount integer, actor_name text) | — | Taxation get all invoices for totem. |
| `taxation_pay_invoice` | invoice_id bigint, paid_invoice_status smallint → bigint | — | Taxation pay invoice. |
| `taxation_remove_invoices` | invoices_to_remove bigint[] → void | — | Taxation remove invoices. |
| `taxation_remove_invoices_from_totem` | totem_actor_id bigint → void | — | Taxation remove invoices from totem. |
| `taxation_update_invoice_status` | invoices_to_overdue bigint[], invoices_to_defaulted bigint[], overdue_invoice_status smallint, defaulted_invoice_status smallint → void | — | Taxation update invoice status. |
### transfer
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `_character_transfer_allocate_id` | kind dune._charactertransferentrykind, data jsonb → bigint | — | Character transfer allocate id. |
| `_character_transfer_create_data_table` | () → void | — | Character transfer create data table. |
| `_character_transfer_data_filter` | id text, removed text[], VARIADIC refs dune._charactertransferdatafilterref[] → dune._charactertransferdatafilter | — | Character transfer data filter. |
| `_character_transfer_data_table_load` | entries jsonb → void | — | Character transfer data table load. |
| `_character_transfer_data_table_save` | () → jsonb | — | Character transfer data table save. |
| `_character_transfer_get_filter` | kind dune._charactertransferentrykind → dune._charactertransferdatafilter | — | Character transfer get filter. |
| `_character_transfer_get_patches_checksum` | () → text | — | Character transfer get patches checksum. |
| `_character_transfer_pre_export_validation` | in_fls_id text → TABLE(out_acc_id bigint, out_funcom_id text, out_player_controller_id bigint, out_player_pawn_id bigint) | — | Character transfer pre export validation. |
| `_character_transfer_property_not_exported_is_expected` | path text → boolean | — | Character transfer property not exported is expected. |
| `_character_transfer_replace_local_id_with_transfer_id` | data text, path text → text | — | Character transfer replace local id with transfer id. |
| `_character_transfer_replace_local_id_with_transfer_id_in_json` | data jsonb, path text → jsonb | — | Character transfer replace local id with transfer id in json. |
| `_character_transfer_replace_transfer_id_with_local_id` | data text, path text → text | — | Character transfer replace transfer id with local id. |
| `_character_transfer_replace_transfer_id_with_local_id_in_json` | data jsonb, path text → jsonb | — | Character transfer replace transfer id with local id in json. |
| `_character_transfer_top_level_export` | in_kind dune._charactertransferentrykind, data jsonb → jsonb | — | Character transfer top level export. |
| `_character_transfer_top_level_import` | in_kind dune._charactertransferentrykind, data jsonb, in_id bigint → jsonb | — | Character transfer top level import. |
| `can_takeover_account` | in_user_id text → boolean | — | Can takeover account. |
| `character_migration_export` | in_fls_id text → jsonb | — | Export character for migration. |
| `character_migration_import` | in_data jsonb, in_fls_id text, in_character_name text → bigint | — | Character migration import. |
| `character_transfer_export` | in_fls_id text → jsonb | `handlers_players.go:522` | Export a character (incl. inventory, journey, etc.) as jsonb. |
| `character_transfer_get_unsaved_counts` | in_fls_id text → TABLE(unsaved_bases_count bigint, unsaved_vehicles_count bigint) | — | Pre-transfer counts of unsaved bases/vehicles. |
| `character_transfer_import` | in_data jsonb, in_fls_id text, in_character_name text → bigint | — | Import a jsonb character payload; returns new account id. |
| `cleanup_account_log_and_orphaned_actors` | () → void | — | Cleanup account log and orphaned actors. |
| `cleanup_accounts_marked_for_deletion_in_fls` | in_account_ids text[] → void | — | Cleanup accounts marked for deletion in fls. |
| `delete_account` | in_user_id text, in_reason text → boolean | `db.go:702` | Hard-delete an account by FLS id; returns bool. |
| `get_character_transfer_related_items` | in_fls_id text → jsonb | — | Get character transfer related items. |
| `get_unsaved_base_totem_ids_for_account` | in_account_id bigint → TABLE(totem_id bigint) | — | Bases not yet backed up (pre-transfer check). |
| `migrate_character` | in_account_id bigint, home_dimension integer, max_solaris_allowed bigint → void | — | Cross-server character migration; clamps Solaris to allowed cap. |
| `migrate_clamp_max_allow_solaris` | in_pawn_id bigint, max_solaris_allowed bigint → void | — | Clamp currency on migration. |
| `remove_character_transfer_state` | in_fls_id text → void | — | Remove character transfer state. |
### travel
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `load_travel_return_info` | in_player_controller_id bigint → TABLE(map text, transform dune.transform) | — | Load travel return info. |
| `load_travel_to_player_info` | in_player_controller_id bigint → TABLE(map text, transform dune.transform, partition_id bigint, dimension_index integer) | — | Load travel to player info. |
| `save_travel_return_info` | in_player_controller_id bigint, in_map text, in_transform dune.transform → void | — | Save travel return info. |
### vehicle
| Routine | Args → Returns | Used by | Purpose |
|---|---|---|---|
| `_character_transfer_ensure_player_is_owner_of_vbt_vehicle` | in_vehicle_id bigint[] → void | — | Character transfer ensure player is owner of vbt vehicle. |
| `_character_transfer_store_in_world_owned_vehicles_into_recovery` | in_player_id bigint → void | — | Character transfer store in world owned vehicles into recovery. |
| `get_player_owned_vehicles_data` | in_player_id bigint, in_account_id bigint → TABLE(out_actor_id bigint, out_name text, out_class text, out_map text, out_partition_id bigint, out_dimension integer, out_transform dune.transform, out_actor_state text) | — | Get player owned vehicles data. |
| `get_unbacked_up_vehicle_ids_for_account` | in_account_id bigint → TABLE(vehicle_id bigint) | — | Vehicles not yet backed up (pre-transfer check). |
| `get_vehicle_id` | in_actor_id bigint, in_class text → bigint | — | Get vehicle id. |
| `get_vehicle_module_inventory_id` | in_vehicle_module_id bigint, in_vehicle_module_inventory_type integer → bigint | — | Get vehicle module inventory id. |
| `load_backup_vehicle` | in_account_id bigint → TABLE(out_id bigint, out_class text, out_customization_id text) | — | Read backed-up vehicle metadata for an account. |
| `load_recovered_vehicles` | in_account_id bigint, in_restore_time_limit integer → TABLE(out_vehicle_id bigint, out_class text, out_name text, out_time_stored timestamp without time zone, out_chassis_durability real, out_customization_id text, out_migrated boolean) | — | List recoverable vehicles for an account. |
| `load_vehicle_modules` | in_vehicle_id bigint → TABLE(module_id bigint, template_id text, stats jsonb) | — | Load vehicle modules. |
| `restore_backup_vehicle` | in_account_id bigint, in_server_info dune.serverinfo, in_transform dune.transform → bigint | — | Spawn a backed-up vehicle for an account; returns vehicle id. |
| `restore_recovered_vehicle` | in_account_id bigint, in_vehicle_id bigint, in_server_info dune.serverinfo, in_transform dune.transform, in_restore_time_limit integer → void | — | Recover a vehicle into world; supports a time limit. |
| `save_vehicle_modules` | in_add_list dune.vehiclemodule[], in_delete_list bigint[], in_stat_update dune.itemstatupdate[] → SETOF bigint | — | Save vehicle modules. |
| `store_backup_vehicle` | in_vehicle_id bigint, in_account_id bigint, in_customization_id text → void | — | Move a vehicle into the backup slot. |
| `store_recovered_vehicle` | in_vehicle_id bigint, in_chassis_durability real, in_customization_id text, in_is_migration boolean → void | — | Save a recovered vehicle (with chassis durability/customization). |
| `store_recovered_vehicles_wiped_before_spawn` | in_vehicle_ids bigint[], in_delete_items boolean → void | — | Bulk: save recovered vehicles, optionally delete their items. |
## Cross-reference summary — what dune-admin already uses
| Routine | Called at |
|---|---|
| `adjust_player_virtual_currency_balance` | `db.go:475`<br>`db.go:519` |
| `admin_move_offline_player_to_partition` | `db.go:3341` |
| `change_player_faction` | `db.go:2239` |
| `character_transfer_export` | `handlers_players.go:522` |
| `complete_journey_story_nodes_for_player` | `db.go:2229` |
| `delete_account` | `db.go:702` |
| `delete_all_journey_story_nodes` | `db.go:1955` |
| `delete_all_tutorial_entries` | `db.go:2287` |
| `delete_item` | `db.go:718` |
| `delete_mnemonic_recall_lesson_all` | `db.go:2304` |
| `get_solaris_id` | `db.go:477`<br>`db.go:487`<br>`db.go:927` |
| `reset_specialization_keystones` | `db.go:740` |
| `reset_specialization_tracks` | `db.go:737` |
| `set_character_name` | `db.go:577` |
| `set_player_faction_reputation` | `db.go:995`<br>`db.go:1083`<br>`db.go:1497`<br>`db.go:2254` |
| `set_specialization_xp_and_level` | `db.go:2936` |
| `update_player_tags` | `db.go:628`<br>`db.go:1458`<br>`db.go:1938`<br>`db.go:1966`<br>`db.go:2245` |
| `update_returning_player_status` | `db.go:665` |
## Proposed additions and fixes to dune-admin
Concrete, high-confidence gaps where the DB already provides the right primitive but the admin tool either rolls its own SQL or has no UI for it. Each item is independently shippable.
### Vehicle backup / recovery UI
Admin has zero coverage of vehicle backup/recovery. Add a `handlers_vehicles.go` mirroring the base backup pattern. The DB primitives lock `backup_vehicles` exclusively so concurrent-safe; admin just needs the UI + RPC wiring.
Routines:
- `dune.store_backup_vehicle(in_vehicle_id bigint, in_account_id bigint, in_customization_id text)` — Move a vehicle into the backup slot.
- `dune.restore_backup_vehicle(in_account_id bigint, in_server_info dune.serverinfo, in_transform dune.transform)` — Spawn a backed-up vehicle for an account; returns vehicle id.
- `dune.load_backup_vehicle(in_account_id bigint)` — Read backed-up vehicle metadata for an account.
- `dune.store_recovered_vehicle(in_vehicle_id bigint, in_chassis_durability real, in_customization_id text, in_is_migration boolean)` — Save a recovered vehicle (with chassis durability/customization).
- `dune.store_recovered_vehicles_wiped_before_spawn(in_vehicle_ids bigint[], in_delete_items boolean)` — Bulk: save recovered vehicles, optionally delete their items.
- `dune.restore_recovered_vehicle(in_account_id bigint, in_vehicle_id bigint, in_server_info dune.serverinfo, in_transform dune.transform, in_restore_time_limit integer)` — Recover a vehicle into world; supports a time limit.
- `dune.load_recovered_vehicles(in_account_id bigint, in_restore_time_limit integer)` — List recoverable vehicles for an account.
### Character-transfer pre-flight checks
`handlers_players.go:522` calls `character_transfer_export` directly. The v1.40.1 safety helpers above exist specifically to gate this. Call `character_transfer_get_unsaved_counts(fls_id)` before export and either refuse or surface a confirmation listing the unsaved totem and vehicle IDs.
Routines:
- `dune.character_transfer_get_unsaved_counts(in_fls_id text)` — Pre-transfer counts of unsaved bases/vehicles.
- `dune.get_unsaved_base_totem_ids_for_account(in_account_id bigint)` — Bases not yet backed up (pre-transfer check).
- `dune.get_unbacked_up_vehicle_ids_for_account(in_account_id bigint)` — Vehicles not yet backed up (pre-transfer check).
### Base backup / restore UI
`handlers_bases.go` currently walks raw actor/building tables. Wrap the dedicated procs above for save / list / restore / delete / recycle so behavior matches the in-game flow (and audit trail).
Routines:
- `dune.base_backup_save_from_totem(in_player_id bigint, totem_id bigint)` — Snapshot a single base keyed by totem id; returns backup id.
- `dune.base_backup_save_all_totems_from_player_owner(in_player_id bigint)` — Snapshot every base a player owns; returns set of backup ids.
- `dune.base_backup_find_totems_from_player_owner(in_player_id bigint)` — List totem ids owned by a player (read-only).
- `dune.base_backup_get_available_backups(in_player_id bigint)` — List stored backups for a player.
- `dune.base_backup_get_data(in_base_backup_id bigint)` — Read backup metadata.
- `dune.base_backup_get_buildable_data(in_base_backup_id bigint)` — Read buildable-piece data for a backup.
- `dune.base_backup_delete(in_base_backup_id bigint)` — Delete a stored base backup.
- `dune.base_backup_recycle(in_base_backup_id bigint, in_target_inventory_id bigint)` — Recycle a stored base backup into an inventory.
- `dune.base_backup_finish_placing(in_base_backup_id bigint)` — Finalize placement of a restored backup.
- `dune.base_backup_get_actors_to_spawn(in_base_backup_id bigint)` — Read actors to spawn for backup placement.
### Use admin_get_character_ids for player search
Replaces hand-rolled `LIKE` queries with the indexed admin function so dune-admin agrees with other internal tools on what counts as a match.
Routines:
- `dune.admin_get_character_ids(in_search_term text)` — Admin player search by partial name/id.
### Replace raw returning-player UPDATE with procs
Currently the admin issues raw `UPDATE encrypted_player_state SET last_returning_player_*` (see memory note about the "sticky welcome-back modal" footgun). Route through these two functions to keep the timestamp pair coherent with the login flow.
Routines:
- `dune.update_returning_player_status(in_user_id text, in_minimum_returning_player_time_seconds integer)` — Recalculate returning-player eligibility on login.
- `dune.returning_player_award_given(in_account_id bigint)` — Stamp last_returning_player_awarded_time = now() for an account.
### Keystone purchases via purchase_specialization_keystone
Admin grants keystones with raw inserts; the proc returns bool after running game-side validation. Route through it so granting from dune-admin behaves identically to in-game purchase.
Routines:
- `dune.purchase_specialization_keystone(in_player_id bigint, in_keystone text)` — Validate-then-record a keystone purchase. Returns bool.
### Bulk inventory edits via update_inventory
Replace N-round-trip CRUD with the single bulk mutator. Reduces lock churn and matches the game-side write pattern.
Routines:
- `dune.update_inventory(in_delete_list bigint[], in_stack_update dune.itemstackupdate[], in_quality_update dune.itemqualityupdate[], in_stat_update dune.itemstatupdate[], in_item_locations dune.inventoryitemlocation[])` — Bulk inventory mutator (delete, stack, quality, stats, location lists).
- `dune.update_inventories_data(in_inventory_data_list dune.inventorydata[])` — Update inventory metadata for a list.
- `dune.merge_or_move_inventory_item(in_item_id bigint, in_dst_inventory_id bigint, in_dst_index bigint, in_count bigint)` — Merge if possible, otherwise move.
### Anti-cheat surfacing
No admin UI for marking a flagged player or browsing the cheat log. Add a read view over `log_cheating` results and an admin-action to flag.
Routines:
- `dune.flag_player_as_cheater(in_account_id bigint, in_cheat_type dune.cheat_type_enum)` — Mark account as a cheater of given type.
- `dune.log_cheating(in_fls_id text, in_cheat_type dune.cheat_type_enum, in_event_time timestamp with time zone)` — Append cheating event.
- `dune.verify_item_dup_backup_tool(in_account_id bigint, in_vehicle_id bigint, in_cheat_type dune.cheat_type_enum)` — Anti-dup check around backup tool flow.
### Account takeover / deletion lifecycle
The takeover and deletion-cleanup helpers are not exposed. Worth a dedicated admin screen, especially `cleanup_accounts_marked_for_deletion_in_fls` for periodic operator maintenance.
Routines:
- `dune.can_takeover_account(in_user_id text)` — Can takeover account.
- `dune.set_account_as_takeoverable(in_user_id text, in_new_user_id text)` — Set account as takeoverable.
- `dune.load_takeoverable_user_ids()` — Load takeoverable user ids.
- `dune.takeover_account(in_user_to_takeover text, in_current_user text)` — Takeover account.
- `dune.cleanup_account_log_and_orphaned_actors()` — Cleanup account log and orphaned actors.
- `dune.cleanup_accounts_marked_for_deletion_in_fls(in_account_ids text[])` — Cleanup accounts marked for deletion in fls.
### Schema/version visibility
Surface the schema version in the dune-admin status bar so operators know which DB rev they're looking at without exec-ing into the pod.
Routines:
- `dune.get_applied_patches()` — Get applied patches.
- `dune.get_schema_version()` — Get schema version.
### Spice field operator controls
Spice-field manipulation is a known operator chore; the DB exposes prime/restart/spawn primitives that an admin "spice fields" tab could wrap.
Routines:
- `dune.try_prime_spicefield(in_source_server_id text, in_spicefield_id integer)` — Try prime spicefield.
- `dune.try_restart_spicefield(in_server_id text, in_spicefield_type_id integer)` — Try restart spicefield.
- `dune.try_spawn_spicefield(in_source_server_id text, in_spicefield_id integer)` — Try spawn spicefield.
- `dune.request_spawn_spice_field(in_server_id text, in_spicefield_type_id integer)` — Request spawn spice field.
- `dune.record_deactivated_spice_field(in_server_id text, in_spicefield_type_id integer)` — Record deactivated spice field.
- `dune.update_spice_field_spawn_state(in_is_spawning_active boolean, in_spicefield_type_id integer)` — Update spice field spawn state.
- `dune.update_global_spice_field_rules(in_max_globally_primed integer, in_max_globally_active integer, in_spicefield_type_id integer)` — Update global spice field rules.
### Landsraad voting / decree management
Five Landsraad PROCEDUREs (insert tasks, nominate decrees, update decrees, update factions, create_event_log_partition_table). The 35 functions are mostly read-side. An admin tab that shows the current term and lets ops force-advance/update decrees would be high-value during live ops.
Routines:
- `dune.landsraad_insert_tasks(IN in_term_id bigint, IN in_tasks dune.landsraadtask[], IN in_task_rewards dune.landsraadtaskreward[])` — Landsraad insert tasks.
- `dune.landsraad_nominate_decrees_for_voting(IN last_active_decree_id bigint, IN num_decrees integer)` — Landsraad nominate decrees for voting.
- `dune.landsraad_update_decrees(IN in_decrees dune.landsraaddecree[])` — Landsraad update decrees.
- `dune.landsraad_update_factions(IN in_faction_names text[])` — Landsraad update factions.
## Notes & caveats
- Purpose blurbs come from three sources, in order: curated descriptions for the well-known ~60 routines; the Postgres COMMENT (`obj_description(oid)`) when present; otherwise a name-derived stub. The DB had almost no COMMENTs set, so most stubs are name-derived.
- The categorizer is rule-based on routine name. Edge cases land in `misc`; if you add an obvious cluster, edit `RULES` in `_export.sh` and re-run.
- Overloaded routines (same name, different signatures) get separate files; if two share an arg count the OID is appended.
- The Go cross-reference is a literal regex search for `dune.<name>(` in `*.go` files at the repo root. False negatives possible if a query is built with computed names; spot-check the routine you care about by hand.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,261 @@
#!/usr/bin/env python3
"""Generate db-routines/README.md from _manifest.tsv and dune-admin Go source grep."""
import os, re, sys, subprocess, pathlib, collections
ROOT = pathlib.Path(__file__).resolve().parent
REPO = ROOT.parent
MANIFEST = ROOT / '_manifest.tsv'
README = ROOT / 'README.md'
# Curated one-line descriptions for the well-known 50 (sourced from prior memory work).
CURATED = {
'set_specialization_xp_and_level': 'Directly set spec XP and level for a player on a given track.',
'reset_specialization_tracks': 'Wipe all specialization tracks for a player.',
'reset_specialization_keystones': 'Wipe all purchased keystones for a player.',
'purchase_specialization_keystone': 'Validate-then-record a keystone purchase. Returns bool.',
'update_player_tags': 'Add and/or remove gameplay tags for an account in one call.',
'admin_read_player_tags': 'Read tags for an account (admin).',
'set_character_name': 'Rename a character.',
'delete_all_tutorial_entries': 'Clear tutorial completion state for a player.',
'adjust_player_virtual_currency_balance': 'Atomic delta on Solaris/Scrip balance; returns new balance.',
'migrate_character': 'Cross-server character migration; clamps Solaris to allowed cap.',
'migrate_clamp_max_allow_solaris': 'Clamp currency on migration.',
'update_coriolis_for_player': 'Apply Coriolis storm processing for a player; returns whether processed.',
'returning_player_award_given': 'Stamp last_returning_player_awarded_time = now() for an account.',
'update_returning_player_status': 'Recalculate returning-player eligibility on login.',
'login_account': 'Full login flow; returns player description (called by game server).',
'admin_get_character_ids': 'Admin player search by partial name/id.',
'admin_get_inventory_details': 'Admin: read inventory for an account.',
'dune_get_account_id_by_user': 'Resolve FLS id → account id.',
'is_player_offline': 'Return true if player has no live session.',
'get_player_virtual_currency_balances': 'List wallet balances for a controller.',
'get_solaris_id': 'Currency id used for Solaris.',
'save_item': 'Insert/update a single inventory item.',
'delete_item': 'Delete one inventory item by id.',
'delete_items': 'Delete a batch of inventory items by id.',
'delete_inventory_item': 'Partial delete (decrement count); removes when count hits 0.',
'move_inventory_item': 'Relocate an item within/between inventories.',
'merge_inventory_item': 'Merge stackable items.',
'merge_or_move_inventory_item': 'Merge if possible, otherwise move.',
'update_inventory': 'Bulk inventory mutator (delete, stack, quality, stats, location lists).',
'load_items': 'Read all items in an inventory.',
'load_item': 'Read a single item.',
'get_inventory_data': 'Read inventory metadata.',
'update_inventories_data': 'Update inventory metadata for a list.',
'base_backup_save_from_totem': 'Snapshot a single base keyed by totem id; returns backup id.',
'base_backup_save_all_totems_from_player_owner': 'Snapshot every base a player owns; returns set of backup ids.',
'base_backup_find_totems_from_player_owner': 'List totem ids owned by a player (read-only).',
'base_backup_get_available_backups': 'List stored backups for a player.',
'base_backup_get_data': 'Read backup metadata.',
'base_backup_get_buildable_data': 'Read buildable-piece data for a backup.',
'base_backup_delete': 'Delete a stored base backup.',
'base_backup_recycle': 'Recycle a stored base backup into an inventory.',
'base_backup_finish_placing': 'Finalize placement of a restored backup.',
'base_backup_get_actors_to_spawn': 'Read actors to spawn for backup placement.',
'store_backup_vehicle': 'Move a vehicle into the backup slot.',
'restore_backup_vehicle': 'Spawn a backed-up vehicle for an account; returns vehicle id.',
'load_backup_vehicle': 'Read backed-up vehicle metadata for an account.',
'store_recovered_vehicle': 'Save a recovered vehicle (with chassis durability/customization).',
'store_recovered_vehicles_wiped_before_spawn': 'Bulk: save recovered vehicles, optionally delete their items.',
'restore_recovered_vehicle': 'Recover a vehicle into world; supports a time limit.',
'load_recovered_vehicles': 'List recoverable vehicles for an account.',
'get_unsaved_base_totem_ids_for_account': 'Bases not yet backed up (pre-transfer check).',
'get_unbacked_up_vehicle_ids_for_account': 'Vehicles not yet backed up (pre-transfer check).',
'character_transfer_get_unsaved_counts': 'Pre-transfer counts of unsaved bases/vehicles.',
'character_transfer_export': 'Export a character (incl. inventory, journey, etc.) as jsonb.',
'character_transfer_import': 'Import a jsonb character payload; returns new account id.',
'character_migration_export': 'Export character for migration.',
'delete_account': 'Hard-delete an account by FLS id; returns bool.',
'flag_player_as_cheater': 'Mark account as a cheater of given type.',
'log_cheating': 'Append cheating event.',
'verify_item_dup_backup_tool': 'Anti-dup check around backup tool flow.',
'set_player_faction_reputation': 'Set a player\'s faction rep value directly (audited).',
'change_player_faction': 'Switch a player\'s faction allegiance.',
'complete_journey_story_nodes_for_player': 'Bulk-mark journey story nodes complete for a player.',
'delete_all_journey_story_nodes': 'Wipe all journey nodes for a player.',
'delete_mnemonic_recall_lesson_all': 'Wipe codex / mnemonic recall lessons.',
}
def short_purpose(name: str, comment: str) -> str:
if name in CURATED: return CURATED[name]
if comment.strip(): return comment.strip()
# name-derived stub
parts = name.lstrip('_').split('_')
return ' '.join(parts).capitalize() + '.'
# Load manifest
rows = []
with open(MANIFEST) as f:
header = f.readline() # skip
for line in f:
cells = line.rstrip('\n').split('\t')
if len(cells) < 8: continue
oid, kind, cat, name, args, ret, comment, fpath = cells[:8]
rows.append({'oid':oid,'kind':kind,'cat':cat,'name':name,'args':args,
'ret':ret,'comment':comment,'file':fpath})
# Build name → list of (file, line) call sites from Go source.
# Pattern: dune.<name>( — appears in SQL string literals inside Go.
name_re = re.compile(r'\bdune\.([a-z_][a-z_0-9]*)\s*\(')
calls = collections.defaultdict(list)
fn_names = {r['name'] for r in rows}
for go in REPO.glob('*.go'):
rel = go.name
for ln, line in enumerate(go.read_text().splitlines(), 1):
for m in name_re.finditer(line):
n = m.group(1)
if n in fn_names:
calls[n].append(f'{rel}:{ln}')
# Group rows by category
by_cat = collections.defaultdict(list)
for r in rows:
by_cat[r['cat']].append(r)
for cat in by_cat:
by_cat[cat].sort(key=lambda r: r['name'])
# Compute counts
total = len(rows)
fns = sum(1 for r in rows if r['kind']=='f')
procs = sum(1 for r in rows if r['kind']=='p')
used = sum(1 for r in rows if r['name'] in calls)
unused = total - used
# Render
out = []
out.append('# Dune Schema Routines — Reference & Cross-Map')
out.append('')
out.append(f'Complete export of every function and procedure in the `dune` schema of the game-server Postgres '
f'(PG 17.4, pod `sh-ec68e59f636959ac-coyzzx-db-dbdepl-sts-0`). Generated by `_export.sh` + `_build_readme.py`.')
out.append('')
out.append('## Inventory')
out.append('')
out.append(f'- **Total routines:** {total}')
out.append(f'- **Functions:** {fns}')
out.append(f'- **Procedures:** {procs}')
out.append(f'- **Called from dune-admin Go source:** {used} (see Cross-reference column)')
out.append(f'- **Not called from dune-admin:** {unused}')
out.append('')
out.append('Per-routine SQL lives in `functions/<category>/<name>__<argcount>args.sql` and `procedures/<name>__<argcount>args.sql`. '
'A single concatenated dump is at `_all.sql`. A TSV index is at `_manifest.tsv`.')
out.append('')
out.append('## Access path (read-only)')
out.append('')
out.append('```')
out.append('ssh -i ./sshKey dune@192.168.0.72 \\')
out.append(' "sudo -n kubectl exec -n funcom-seabass-sh-ec68e59f636959ac-coyzzx \\')
out.append(' sh-ec68e59f636959ac-coyzzx-db-dbdepl-sts-0 -- \\')
out.append(' env PGPASSWORD=<pw> psql -h 127.0.0.1 -p 15432 -U postgres -d dune <args>"')
out.append('```')
out.append('')
out.append('Passwordless `sudo` works on the VM. The password is also visible inside the pod via `env | grep POSTGRES_PASSWORD`.')
out.append('')
out.append('## Categories')
out.append('')
out.append('| Category | Count |')
out.append('|---|---:|')
for cat in sorted(by_cat.keys()):
out.append(f'| [{cat}](#{cat.replace("_","-")}) | {len(by_cat[cat])} |')
out.append('')
# Per category detail
for cat in sorted(by_cat.keys()):
out.append(f'### {cat}')
out.append('')
out.append('| Routine | Args → Returns | Used by | Purpose |')
out.append('|---|---|---|---|')
for r in by_cat[cat]:
sig = f'`{r["name"]}({r["args"]})`'
ret = r['ret'] or ('void' if r['kind']=='p' else '')
argret = f'{r["args"] or "()"}{ret}'
# escape pipes for markdown table
argret = argret.replace('|','\\|')
used_cells = calls.get(r['name'], [])
used_str = '<br>'.join(f'`{c}`' for c in used_cells) if used_cells else ''
purpose = short_purpose(r['name'], r['comment']).replace('|','\\|')
kind_tag = ' _(proc)_' if r['kind']=='p' else ''
out.append(f'| `{r["name"]}`{kind_tag} | {argret} | {used_str} | {purpose} |')
out.append('')
out.append('## Cross-reference summary — what dune-admin already uses')
out.append('')
out.append('| Routine | Called at |')
out.append('|---|---|')
for name in sorted(calls.keys()):
locs = '<br>'.join(f'`{c}`' for c in calls[name])
out.append(f'| `{name}` | {locs} |')
out.append('')
out.append('## Proposed additions and fixes to dune-admin')
out.append('')
out.append('Concrete, high-confidence gaps where the DB already provides the right primitive but the admin tool either rolls its own SQL or has no UI for it. Each item is independently shippable.')
out.append('')
PUNCH = [
('Vehicle backup / recovery UI',
['store_backup_vehicle','restore_backup_vehicle','load_backup_vehicle',
'store_recovered_vehicle','store_recovered_vehicles_wiped_before_spawn',
'restore_recovered_vehicle','load_recovered_vehicles'],
'Admin has zero coverage of vehicle backup/recovery. Add a `handlers_vehicles.go` mirroring the base backup pattern. The DB primitives lock `backup_vehicles` exclusively so concurrent-safe; admin just needs the UI + RPC wiring.'),
('Character-transfer pre-flight checks',
['character_transfer_get_unsaved_counts','get_unsaved_base_totem_ids_for_account','get_unbacked_up_vehicle_ids_for_account'],
'`handlers_players.go:522` calls `character_transfer_export` directly. The v1.40.1 safety helpers above exist specifically to gate this. Call `character_transfer_get_unsaved_counts(fls_id)` before export and either refuse or surface a confirmation listing the unsaved totem and vehicle IDs.'),
('Base backup / restore UI',
['base_backup_save_from_totem','base_backup_save_all_totems_from_player_owner','base_backup_find_totems_from_player_owner',
'base_backup_get_available_backups','base_backup_get_data','base_backup_get_buildable_data',
'base_backup_delete','base_backup_recycle','base_backup_finish_placing','base_backup_get_actors_to_spawn'],
'`handlers_bases.go` currently walks raw actor/building tables. Wrap the dedicated procs above for save / list / restore / delete / recycle so behavior matches the in-game flow (and audit trail).'),
('Use admin_get_character_ids for player search',
['admin_get_character_ids'],
'Replaces hand-rolled `LIKE` queries with the indexed admin function so dune-admin agrees with other internal tools on what counts as a match.'),
('Replace raw returning-player UPDATE with procs',
['update_returning_player_status','returning_player_award_given'],
'Currently the admin issues raw `UPDATE encrypted_player_state SET last_returning_player_*` (see memory note about the "sticky welcome-back modal" footgun). Route through these two functions to keep the timestamp pair coherent with the login flow.'),
('Keystone purchases via purchase_specialization_keystone',
['purchase_specialization_keystone'],
'Admin grants keystones with raw inserts; the proc returns bool after running game-side validation. Route through it so granting from dune-admin behaves identically to in-game purchase.'),
('Bulk inventory edits via update_inventory',
['update_inventory','update_inventories_data','merge_or_move_inventory_item'],
'Replace N-round-trip CRUD with the single bulk mutator. Reduces lock churn and matches the game-side write pattern.'),
('Anti-cheat surfacing',
['flag_player_as_cheater','log_cheating','verify_item_dup_backup_tool'],
'No admin UI for marking a flagged player or browsing the cheat log. Add a read view over `log_cheating` results and an admin-action to flag.'),
('Account takeover / deletion lifecycle',
['can_takeover_account','set_account_as_takeoverable','load_takeoverable_user_ids','takeover_account',
'cleanup_account_log_and_orphaned_actors','cleanup_accounts_marked_for_deletion_in_fls'],
'The takeover and deletion-cleanup helpers are not exposed. Worth a dedicated admin screen, especially `cleanup_accounts_marked_for_deletion_in_fls` for periodic operator maintenance.'),
('Schema/version visibility',
['get_applied_patches','get_schema_version'],
'Surface the schema version in the dune-admin status bar so operators know which DB rev they\'re looking at without exec-ing into the pod.'),
('Spice field operator controls',
['try_prime_spicefield','try_restart_spicefield','try_spawn_spicefield','request_spawn_spice_field',
'record_deactivated_spice_field','update_spice_field_spawn_state','update_global_spice_field_rules'],
'Spice-field manipulation is a known operator chore; the DB exposes prime/restart/spawn primitives that an admin "spice fields" tab could wrap.'),
('Landsraad voting / decree management',
['landsraad_insert_tasks','landsraad_nominate_decrees_for_voting','landsraad_update_decrees','landsraad_update_factions'],
'Five Landsraad PROCEDUREs (insert tasks, nominate decrees, update decrees, update factions, create_event_log_partition_table). The 35 functions are mostly read-side. An admin tab that shows the current term and lets ops force-advance/update decrees would be high-value during live ops.'),
]
for title, names, body in PUNCH:
out.append(f'### {title}')
out.append('')
out.append(body)
out.append('')
out.append('Routines:')
for n in names:
r = next((x for x in rows if x['name']==n), None)
sig = f'`dune.{n}({r["args"] if r else "?"})`' if r else f'`dune.{n}(?)`'
purpose = short_purpose(n, r['comment'] if r else '') if r else ''
out.append(f'- {sig}{purpose}')
out.append('')
out.append('## Notes & caveats')
out.append('')
out.append('- Purpose blurbs come from three sources, in order: curated descriptions for the well-known ~60 routines; the Postgres COMMENT (`obj_description(oid)`) when present; otherwise a name-derived stub. The DB had almost no COMMENTs set, so most stubs are name-derived.')
out.append('- The categorizer is rule-based on routine name. Edge cases land in `misc`; if you add an obvious cluster, edit `RULES` in `_export.sh` and re-run.')
out.append('- Overloaded routines (same name, different signatures) get separate files; if two share an arg count the OID is appended.')
out.append('- The Go cross-reference is a literal regex search for `dune.<name>(` in `*.go` files at the repo root. False negatives possible if a query is built with computed names; spot-check the routine you care about by hand.')
README.write_text('\n'.join(out) + '\n')
print(f'wrote {README} ({README.stat().st_size} bytes, {len(out)} lines)')

View File

@@ -0,0 +1,201 @@
#!/usr/bin/env bash
# Exports every function and procedure in the dune schema as one .sql file per routine,
# categorized by name. Also writes _all.sql (concatenated) and _manifest.tsv (metadata).
#
# Usage: bash db-routines/_export.sh
# Re-runs are idempotent: functions/ and procedures/ are wiped first.
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
SSH_KEY="$REPO_DIR/sshKey"
SSH_HOST="dune@192.168.0.72"
NS="funcom-seabass-sh-ec68e59f636959ac-coyzzx"
POD="sh-ec68e59f636959ac-coyzzx-db-dbdepl-sts-0"
PGUSER="postgres"
PGDB="dune"
PGPORT="15432"
# Fetch the DB password from the pod's environment so we never commit it.
# Override by exporting PGPASS before running.
if [[ -z "${PGPASS:-}" ]]; then
PGPASS=$(ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "$SSH_HOST" \
"sudo -n kubectl exec -n $NS $POD -- printenv POSTGRES_PASSWORD" | tr -d '\r\n')
if [[ -z "$PGPASS" ]]; then
echo "ERROR: could not retrieve POSTGRES_PASSWORD from pod" >&2; exit 1
fi
fi
RAW="$SCRIPT_DIR/_raw_dump.txt"
MANIFEST="$SCRIPT_DIR/_manifest.tsv"
ALL="$SCRIPT_DIR/_all.sql"
rm -rf "$SCRIPT_DIR/functions" "$SCRIPT_DIR/procedures"
mkdir -p "$SCRIPT_DIR/functions" "$SCRIPT_DIR/procedures"
echo "==> Querying $POD for all dune.* routines…"
SQL=$(cat <<'EOSQL'
SELECT format(
E'@@@RTN@@@%s\n%s\n%s\n%s\n%s\n%s\n@@@BODY@@@\n%s\n@@@ENDRTN@@@',
p.oid::text,
p.prokind,
p.proname,
pg_get_function_identity_arguments(p.oid),
CASE WHEN p.prokind = 'p' THEN '' ELSE pg_get_function_result(p.oid) END,
replace(COALESCE(obj_description(p.oid, 'pg_proc'), ''), E'\n', ' '),
pg_get_functiondef(p.oid)
)
FROM pg_proc p
JOIN pg_namespace n ON p.pronamespace = n.oid
WHERE n.nspname = 'dune'
ORDER BY p.proname, p.oid;
EOSQL
)
ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "$SSH_HOST" \
"sudo -n kubectl exec -n $NS $POD -- env PGPASSWORD=$PGPASS \
psql -h 127.0.0.1 -p $PGPORT -U $PGUSER -d $PGDB -At -X -P pager=off -c \"$SQL\"" \
> "$RAW"
bytes=$(wc -c < "$RAW")
echo "==> Captured $bytes bytes of raw output to $RAW"
echo "==> Splitting into per-routine files…"
python3 - "$RAW" "$SCRIPT_DIR" "$MANIFEST" "$ALL" <<'PYEOF'
import os, re, sys, pathlib
raw_path, out_dir, manifest_path, all_path = sys.argv[1:5]
raw = pathlib.Path(raw_path).read_text()
# Category classifier (first match wins, ordered for specificity)
def has(n, *kws): return any(k in n for k in kws)
RULES = [
('debug', lambda n: n.startswith('debug_') or n.startswith('_debug')),
('base_backup', lambda n: 'base_backup' in n),
('vehicle', lambda n: has(n, 'recovered_vehicle','backup_vehicle','_vehicle','vehicle_') or n in ('store_recovered_vehicle','restore_recovered_vehicle','load_recovered_vehicles','store_recovered_vehicles_wiped_before_spawn')),
('transfer', lambda n: 'character_transfer' in n or 'character_migration' in n or n.startswith('migrate_') or n in ('delete_account','can_takeover_account','cleanup_account_log_and_orphaned_actors','cleanup_accounts_marked_for_deletion_in_fls') or 'unsaved' in n or 'unbacked_up' in n),
('encryption', lambda n: 'user_data_encryption' in n or n in ('decrypt_user_data','encrypt_user_data','setup_user_data_encryption')),
('inventory', lambda n: n.startswith(('inventory_','load_item','load_items','save_item','delete_item','delete_inventory','merge_inventory','move_inventory','update_inventory','merge_or_move_inventory','get_inventory')) or n in ('advance_items_id_sequencer','remove_items_from_inventory') or '_item_' in n and 'log' not in n),
('landsraad', lambda n: 'landsraad' in n),
('journey_progression',lambda n: n.startswith('journey_') or has(n, 'journey_story','tutorial','mnemonic','coriolis','progression','dunipedia','big_moments') or 'complete_journey' in n or 'delete_journey' in n or 'save_journey' in n),
('contracts', lambda n: 'contract' in n),
('anticheat', lambda n: n.startswith(('flag_player','log_cheating','verify_item_dup','add_actor_audit'))),
('event_log', lambda n: 'event_log' in n),
('faction', lambda n: 'faction' in n or 'reputation' in n),
('currency', lambda n: 'currency' in n or 'solaris' in n or 'scrip' in n or has(n, 'balance','wallet')),
('lookup', lambda n: n.startswith(('admin_','get_player_infos','dune_get_account','is_player_','get_player','get_character','get_online','get_login','get_learned','get_traveling','get_best','get_all','get_stored','fetch_')) or 'lookup' in n),
('character_mod', lambda n: has(n,'specialization','keystone','skill','player_tags','player_state','character_name','returning_player','welcome','login_account','delete_character','set_character','set_player')),
('guild', lambda n: 'guild' in n),
('party', lambda n: 'party' in n),
('map_areas', lambda n: has(n,'map_areas','overmap','sinkchart','crafted_map','set_map_seed','map_seed','map_for_player','map_id')),
('permission', lambda n: 'permission' in n),
('actors', lambda n: n.startswith('delete_actors') or n in ('assign_actor_id','unassign_actor_id','delete_actor_states_travel','delete_actor_states') or 'actor' in n and not 'audit' in n),
('partition', lambda n: 'partition' in n),
('dungeon', lambda n: 'dungeon' in n),
('farm', lambda n: 'farm' in n),
('igwo', lambda n: 'igwo' in n),
('taxation', lambda n: 'taxation' in n),
('exchange', lambda n: 'exchange' in n),
('communinet', lambda n: 'communinet' in n),
('travel', lambda n: 'travel' in n),
('markers', lambda n: 'markers' in n or 'marker' in n),
('stock_vendor', lambda n: 'stock' in n or 'vendor' in n),
('building_blueprint', lambda n: has(n,'blueprint','building_','_building','placeable','totem')),
('dialogue', lambda n: 'dialogue' in n),
('spice_field', lambda n: 'spice' in n or 'spicefield' in n),
('shifting_sand', lambda n: 'shifting_sand' in n),
('landclaim', lambda n: 'landclaim' in n),
('spawner', lambda n: 'spawner' in n or 'respawn' in n),
('takeover', lambda n: 'takeover' in n),
('schema_meta', lambda n: n in ('get_applied_patches','get_schema_version','get_universe_time','update_universe_time') or 'demo_account' in n or 'demo_state' in n),
('items_purge', lambda n: 'remove_items' in n or 'remove_resourcefield' in n or 'update_removed_items' in n or 'get_items_to_remove' in n or 'get_recipes_to_remove' in n),
('player_persistence', lambda n: n in ('save_player','save_player_pawn','save_tracked_journey_cards','record_logoff_persistence_end_time','perform_notify_on_character_delete','update_death_location') or '_add_item_' in n),
('battlegroup', lambda n: 'battlegroup' in n),
('server', lambda n: n.startswith('update_server_') or 'server_player_access' in n or n.startswith('register_') or n.startswith('initialize_') or n in ('get_active_servers_for_gateway','server_info_match','mark_server_dead')),
('cleanup', lambda n: n.startswith(('clean_','cleanup_','wipe_','clear_','reset_'))),
('contracts', lambda n: 'contract' in n),
]
def categorize(name: str) -> str:
for cat, fn in RULES:
if fn(name):
return cat
return 'misc'
# Split into records on @@@RTN@@@<oid>\n
records = re.split(r'(?m)^@@@RTN@@@', raw)
records = [r for r in records if r.strip()]
manifest_rows = [['oid','kind','category','name','args','return','comment','file']]
all_chunks = []
written = 0
seen_paths = {}
for rec in records:
# Strip trailing @@@ENDRTN@@@ line
rec = rec.rstrip()
if rec.endswith('@@@ENDRTN@@@'):
rec = rec[:-len('@@@ENDRTN@@@')].rstrip('\n')
# header lines: oid, kind, name, args, return, comment
lines = rec.split('\n')
try:
body_idx = lines.index('@@@BODY@@@')
except ValueError:
print(f'WARN: malformed record, skipping (head={lines[:3]})', file=sys.stderr)
continue
header = lines[:body_idx]
if len(header) < 6:
# pad missing trailing fields (e.g. empty comment that produced no line)
while len(header) < 6:
header.append('')
oid, kind, name, args, rettype, comment = header[:6]
body = '\n'.join(lines[body_idx+1:])
cat = categorize(name)
sub = 'procedures' if kind == 'p' else f'functions/{cat}'
target_dir = pathlib.Path(out_dir) / sub
target_dir.mkdir(parents=True, exist_ok=True)
arg_count = 0 if not args.strip() else (args.count(',') + 1)
base = f'{name}__{arg_count}args.sql'
# avoid collisions on overloads with identical arg counts
path = target_dir / base
if path.exists():
base = f'{name}__{arg_count}args__oid{oid}.sql'
path = target_dir / base
header_comment = (
f'-- {name}({args}) -> {rettype or "void"}\n'
f'-- oid: {oid} kind: {"PROCEDURE" if kind=="p" else "FUNCTION"} category: {cat}\n'
+ (f'-- comment: {comment}\n' if comment else '')
+ '\n'
)
path.write_text(header_comment + body.rstrip() + '\n')
rel = path.relative_to(pathlib.Path(out_dir))
manifest_rows.append([oid, kind, cat, name, args, rettype, comment, str(rel)])
all_chunks.append(header_comment + body.rstrip() + '\n')
written += 1
# write manifest
with open(manifest_path, 'w') as f:
for row in manifest_rows:
f.write('\t'.join(c.replace('\t',' ').replace('\n',' ') for c in row) + '\n')
# write _all.sql
with open(all_path, 'w') as f:
f.write('-- All routines in dune schema, concatenated. Generated by _export.sh\n\n')
f.write('\n\n'.join(all_chunks))
print(f'wrote {written} routines, manifest at {manifest_path}, _all.sql at {all_path}')
PYEOF
echo "==> File counts:"
find "$SCRIPT_DIR/functions" "$SCRIPT_DIR/procedures" -name '*.sql' | wc -l
echo "==> Categories:"
find "$SCRIPT_DIR/functions" -mindepth 1 -maxdepth 1 -type d -printf '%f\t' -exec sh -c 'find "$1" -name "*.sql" | wc -l' _ {} \; 2>/dev/null || \
for d in "$SCRIPT_DIR"/functions/*/; do
printf '%s\t%d\n' "$(basename "$d")" "$(find "$d" -name '*.sql' | wc -l)"
done

View File

@@ -0,0 +1,524 @@
oid kind category name args return comment file
58085 f player_persistence _add_item_delete_log in_item_id bigint, in_inventory_id bigint, in_template_id text void functions/player_persistence/_add_item_delete_log__3args.sql
58086 f player_persistence _add_item_trace_log in_function_name dune.itemtrackingfunctiontype, in_item_locations dune.inventoryitemlocation[] void functions/player_persistence/_add_item_trace_log__2args.sql
58087 f player_persistence _add_item_trace_log in_function_name dune.itemtrackingfunctiontype, in_item_id bigint, in_inventory_id bigint, in_template_id text, in_position_index bigint void functions/player_persistence/_add_item_trace_log__5args.sql
58094 f building_blueprint _building_validate_totem_owner_id in_totem_owner_id bigint bigint functions/building_blueprint/_building_validate_totem_owner_id__1args.sql
58095 f transfer _character_transfer_allocate_id kind dune._charactertransferentrykind, data jsonb bigint functions/transfer/_character_transfer_allocate_id__2args.sql
58096 f transfer _character_transfer_create_data_table void functions/transfer/_character_transfer_create_data_table__0args.sql
58097 f transfer _character_transfer_data_filter id text, removed text[], VARIADIC refs dune._charactertransferdatafilterref[] dune._charactertransferdatafilter functions/transfer/_character_transfer_data_filter__3args.sql
58098 f transfer _character_transfer_data_table_load entries jsonb void functions/transfer/_character_transfer_data_table_load__1args.sql
58099 f transfer _character_transfer_data_table_save jsonb functions/transfer/_character_transfer_data_table_save__0args.sql
58100 f vehicle _character_transfer_ensure_player_is_owner_of_vbt_vehicle in_vehicle_id bigint[] void functions/vehicle/_character_transfer_ensure_player_is_owner_of_vbt_vehicle__1args.sql
58101 f transfer _character_transfer_get_filter kind dune._charactertransferentrykind dune._charactertransferdatafilter functions/transfer/_character_transfer_get_filter__1args.sql
58102 f transfer _character_transfer_get_patches_checksum text functions/transfer/_character_transfer_get_patches_checksum__0args.sql
58103 f transfer _character_transfer_pre_export_validation in_fls_id text TABLE(out_acc_id bigint, out_funcom_id text, out_player_controller_id bigint, out_player_pawn_id bigint) functions/transfer/_character_transfer_pre_export_validation__1args.sql
58104 f transfer _character_transfer_property_not_exported_is_expected path text boolean functions/transfer/_character_transfer_property_not_exported_is_expected__1args.sql
58105 f transfer _character_transfer_replace_local_id_with_transfer_id data text, path text text functions/transfer/_character_transfer_replace_local_id_with_transfer_id__2args.sql
58106 f transfer _character_transfer_replace_local_id_with_transfer_id_in_json data jsonb, path text jsonb functions/transfer/_character_transfer_replace_local_id_with_transfer_id_in_json__2args.sql
58107 f transfer _character_transfer_replace_transfer_id_with_local_id data text, path text text functions/transfer/_character_transfer_replace_transfer_id_with_local_id__2args.sql
58108 f transfer _character_transfer_replace_transfer_id_with_local_id_in_json data jsonb, path text jsonb functions/transfer/_character_transfer_replace_transfer_id_with_local_id_in_json__2args.sql
58109 f vehicle _character_transfer_store_in_world_owned_vehicles_into_recovery in_player_id bigint void functions/vehicle/_character_transfer_store_in_world_owned_vehicles_into_recovery__1args.sql
58110 f transfer _character_transfer_top_level_export in_kind dune._charactertransferentrykind, data jsonb jsonb functions/transfer/_character_transfer_top_level_export__2args.sql
58111 f transfer _character_transfer_top_level_import in_kind dune._charactertransferentrykind, data jsonb, in_id bigint jsonb functions/transfer/_character_transfer_top_level_import__3args.sql
58112 f building_blueprint _placeable_validate_totem_owner_id in_totem_owner_id bigint bigint functions/building_blueprint/_placeable_validate_totem_owner_id__1args.sql
58113 f encryption _user_data_encryption_initially_encrypt_existing_data void functions/encryption/_user_data_encryption_initially_encrypt_existing_data__0args.sql
58114 f encryption _user_data_encryption_setup_enabled key_hash bytea void functions/encryption/_user_data_encryption_setup_enabled__1args.sql
58115 f encryption _user_data_encryption_setup_tainted void functions/encryption/_user_data_encryption_setup_tainted__0args.sql
58116 f guild accept_guild_invite in_invite_id bigint, in_role_id smallint, in_max_guild_count_per_player integer, in_max_members_per_guild integer, in_neutral_faction_id smallint void functions/guild/accept_guild_invite__5args.sql
58117 f party accept_party_invite in_invite_id bigint, in_platform_session_id text, in_max_party_member_count integer dune.partyacceptinviteresult functions/party/accept_party_invite__3args.sql
58118 f anticheat add_actor_audit in_id bigint, in_class text void functions/anticheat/add_actor_audit__2args.sql
58119 f event_log add_event_log_data in_game_event_owner bigint, in_universe_time bigint, in_map_name text, in_partition_id bigint, in_event_type integer, in_x_location double precision, in_y_location double precision, in_z_location double precision, in_is_player_facing boolean, in_custom_data text void functions/event_log/add_event_log_data__10args.sql
58120 f event_log add_event_log_data_batched in_data dune.eventlogbulkentrydata[] void functions/event_log/add_event_log_data_batched__1args.sql
58121 f guild add_guild_invite in_player_id bigint, in_guild_id bigint, in_sender_player_id bigint, in_invite_sent_timespan bigint, in_max_guild_invites_per_guild integer void functions/guild/add_guild_invite__5args.sql
58122 f guild add_guild_member in_player_id bigint, in_guild_id bigint, in_role_id smallint, in_max_guild_count_per_player integer, in_max_members_per_guild integer, in_neutral_faction_id smallint void functions/guild/add_guild_member__6args.sql
58123 f landclaim add_landclaim_segment in_totem_id bigint, in_grid_location_x bigint, in_grid_location_y bigint void functions/landclaim/add_landclaim_segment__3args.sql
58124 f map_areas add_map_areas_surveyed_items in_account_id bigint, in_area_id smallint, in_survey_point_marker_id bigint, in_surveyed_items_target jsonb, in_surveyed_items_progress jsonb, in_map_name text void functions/map_areas/add_map_areas_surveyed_items__6args.sql
58125 f map_areas add_map_areas_time_discovered in_account_id bigint, in_area_id smallint, in_time_discovered timestamp without time zone, in_map_name text void functions/map_areas/add_map_areas_time_discovered__4args.sql
58126 f map_areas add_map_areas_time_first_entered in_account_id bigint, in_area_id smallint, in_time_first_entered timestamp without time zone, in_map_name text void functions/map_areas/add_map_areas_time_first_entered__4args.sql
58127 f partition add_partition_unique in_map text, in_definition jsonb, in_dimension bigint, in_label text bigint functions/partition/add_partition_unique__4args.sql
58128 f party add_party_invite in_sender_player_id bigint, in_sender_platform_name text, in_sender_platform_session_id text, in_player_id bigint, in_max_party_member_count integer, in_invite_sent_timespan bigint void functions/party/add_party_invite__6args.sql
58129 f currency adjust_player_virtual_currency_balance in_controller_id bigint, in_currency_id smallint, in_delta bigint bigint functions/currency/adjust_player_virtual_currency_balance__3args.sql
58130 f lookup admin_get_character_details in_account_id bigint TABLE(account_id bigint, player_id text, character_name text, online_status text, last_avatar_activity timestamp with time zone, class text, map text, transform dune.transform, server_id text, partition_id bigint, partition_label text, dimension_index integer, gas_attributes jsonb, properties jsonb, slot_name text, fgl_data text) functions/lookup/admin_get_character_details__1args.sql
58131 f lookup admin_get_character_ids in_search_term text TABLE(id bigint, "user" text, character_name text) functions/lookup/admin_get_character_ids__1args.sql
58132 f lookup admin_get_inventory_details in_account_id bigint TABLE(inventory_id bigint, item_id bigint, stack_size integer, template_id text, acquisition_time bigint) functions/lookup/admin_get_inventory_details__1args.sql
58133 f lookup admin_get_journey_details in_player_id text, in_story_node_id text TABLE(out_story_node_id text, out_override_reward_block boolean, out_has_pending_reward boolean, out_complete_condition_state jsonb, out_reveal_condition_state jsonb, out_fail_condition_state jsonb, out_metadata_state jsonb, out_reset_group dune.journeystoryresetgroup) functions/lookup/admin_get_journey_details__2args.sql
58134 f journey_progression admin_get_mnemonic_recall_details in_account_id bigint TABLE(mnemonic_recall_id bigint, lesson_id text, lesson_state bigint, lesson_progress integer) functions/journey_progression/admin_get_mnemonic_recall_details__1args.sql
58135 f lookup admin_get_partitions TABLE(out_partition_id bigint, out_server_id text, out_partition_definition jsonb, out_dimension_index integer, out_blocked boolean, out_label text, out_map text) functions/lookup/admin_get_partitions__0args.sql
58136 f lookup admin_move_offline_player in_fls_id text, in_target_partition_name text, in_target_location dune.vector void functions/lookup/admin_move_offline_player__3args.sql
58137 f lookup admin_move_offline_player_to_partition in_fls_id text, in_target_partition_id bigint, in_target_location dune.vector void functions/lookup/admin_move_offline_player_to_partition__3args.sql
58138 f lookup admin_read_player_tags in_account_id bigint TABLE(tags text) functions/lookup/admin_read_player_tags__1args.sql
58139 f inventory advance_items_id_sequencer count bigint bigint functions/inventory/advance_items_id_sequencer__1args.sql
58140 f actors assign_actor_id in_class text bigint functions/actors/assign_actor_id__1args.sql
58141 f base_backup base_backup_delete in_base_backup_id bigint void functions/base_backup/base_backup_delete__1args.sql
58142 f base_backup base_backup_find_totems_from_player_owner in_player_id bigint TABLE(totem_id bigint) functions/base_backup/base_backup_find_totems_from_player_owner__1args.sql
58143 f base_backup base_backup_finish_placing in_base_backup_id bigint void functions/base_backup/base_backup_finish_placing__1args.sql
58144 f base_backup base_backup_get_actors_to_spawn in_base_backup_id bigint SETOF dune.actorspawninfo functions/base_backup/base_backup_get_actors_to_spawn__1args.sql
58145 f base_backup base_backup_get_available_backups in_player_id bigint TABLE(id bigint, base_backup_name text, totem_id bigint, totem_buildable_type text, landclaim_original_global_location real[], base_backup_map text) functions/base_backup/base_backup_get_available_backups__1args.sql
58146 f base_backup base_backup_get_buildable_data in_base_backup_id bigint TABLE(buildable_type text, total_count integer) functions/base_backup/base_backup_get_buildable_data__1args.sql
58147 f base_backup base_backup_get_data in_base_backup_id bigint dune.getbasebackupdata functions/base_backup/base_backup_get_data__1args.sql
58148 f base_backup base_backup_get_totem_data in_base_backup_id bigint dune.basebackuptotemdata functions/base_backup/base_backup_get_totem_data__1args.sql
58149 f base_backup base_backup_get_totem_data_from_totem_id in_totem_id bigint dune.basebackuptotemdata functions/base_backup/base_backup_get_totem_data_from_totem_id__1args.sql
58150 f base_backup base_backup_get_totem_id backup_id bigint bigint functions/base_backup/base_backup_get_totem_id__1args.sql
58151 f base_backup base_backup_recycle in_base_backup_id bigint, in_target_inventory_id bigint integer functions/base_backup/base_backup_recycle__2args.sql
58152 f base_backup base_backup_save in_player_actor_id bigint, in_base_backup_name text, in_building_pieces_to_link dune.basebackupbuildingitem[], in_placeables_to_link bigint[], in_placeables_to_remove_totem_owner bigint[] bigint functions/base_backup/base_backup_save__5args.sql
58153 f base_backup base_backup_save_all_totems_from_player_owner in_player_id bigint TABLE(base_backup_id bigint) functions/base_backup/base_backup_save_all_totems_from_player_owner__1args.sql
58154 f base_backup base_backup_save_from_totem in_player_id bigint, totem_id bigint bigint functions/base_backup/base_backup_save_from_totem__2args.sql
58155 f guild break_guild_allegiance in_guild_id bigint, in_neutral_faction_id smallint void functions/guild/break_guild_allegiance__2args.sql
58156 f transfer can_takeover_account in_user_id text boolean functions/transfer/can_takeover_account__1args.sql
58157 f faction change_player_faction in_player_id bigint, in_faction_id smallint, neutral_faction_id smallint, in_utc_time_faction_change timestamp without time zone void functions/faction/change_player_faction__4args.sql
58158 f transfer character_migration_export in_fls_id text jsonb functions/transfer/character_migration_export__1args.sql
58159 f transfer character_migration_import in_data jsonb, in_fls_id text, in_character_name text bigint functions/transfer/character_migration_import__3args.sql
58160 f transfer character_transfer_export in_fls_id text jsonb functions/transfer/character_transfer_export__1args.sql
58162 f transfer character_transfer_get_unsaved_counts in_fls_id text TABLE(unsaved_bases_count bigint, unsaved_vehicles_count bigint) functions/transfer/character_transfer_get_unsaved_counts__1args.sql
58163 f transfer character_transfer_import in_data jsonb, in_fls_id text, in_character_name text bigint functions/transfer/character_transfer_import__3args.sql
58165 f party clean_expired_party_invites in_invite_expire_seconds integer void functions/party/clean_expired_party_invites__1args.sql
58166 f faction clean_guild_invites_with_incompatible_faction in_player_id bigint, in_faction_id smallint, neutral_faction_id smallint void functions/faction/clean_guild_invites_with_incompatible_faction__3args.sql
58167 f guild clean_old_guild_invites in_cutoff_timespan bigint void functions/guild/clean_old_guild_invites__1args.sql
58168 f stock_vendor clean_stock_for_player in_player_id bigint void functions/stock_vendor/clean_stock_for_player__1args.sql
58169 f stock_vendor clean_stock_for_vendors in_vendor_ids text[] void functions/stock_vendor/clean_stock_for_vendors__1args.sql
58170 f stock_vendor clean_vendors_older_than_timestamp in_reference_timestamp bigint void functions/stock_vendor/clean_vendors_older_than_timestamp__1args.sql
58171 f transfer cleanup_account_log_and_orphaned_actors void functions/transfer/cleanup_account_log_and_orphaned_actors__0args.sql
58172 f transfer cleanup_accounts_marked_for_deletion_in_fls in_account_ids text[] void functions/transfer/cleanup_accounts_marked_for_deletion_in_fls__1args.sql
58173 f cleanup cleanup_orphaned_entities trigger functions/cleanup/cleanup_orphaned_entities__0args.sql
58174 f map_areas clear_map_areas_data_for_player in_id bigint void functions/map_areas/clear_map_areas_data_for_player__1args.sql
58175 f journey_progression complete_journey_nodes_where_prerequisite_nodes_are_complete story_ids_to_complete text[], prerequisite_completed_story_ids text[] void functions/journey_progression/complete_journey_nodes_where_prerequisite_nodes_are_complete__2args.sql
58176 f journey_progression complete_journey_story_nodes_for_player in_player_id text, in_story_node_ids text[] void functions/journey_progression/complete_journey_story_nodes_for_player__2args.sql
58177 f misc corilis_cleanup_map in_server_info dune.serverinfo, in_map_info dune.coriolismapinfo void functions/misc/corilis_cleanup_map__2args.sql
58178 f journey_progression coriolis_cleanup_farm in_server_info dune.serverinfo, in_map_info dune.coriolismapinfo void functions/journey_progression/coriolis_cleanup_farm__2args.sql
58179 f journey_progression coriolis_cleanup_partition in_server_info dune.serverinfo, in_map_info dune.coriolismapinfo void functions/journey_progression/coriolis_cleanup_partition__2args.sql
58180 f journey_progression coriolis_update_seed in_server_info dune.serverinfo, in_new_coriolis_seed integer, in_map_info dune.coriolismapinfo void functions/journey_progression/coriolis_update_seed__3args.sql
58181 f event_log create_event_log_partition trigger functions/event_log/create_event_log_partition__0args.sql
58182 p event_log create_event_log_partition_table IN table_name text, IN partition_id bigint procedures/create_event_log_partition_table__2args.sql
58183 f guild create_guild in_player_id bigint, in_neutral_faction smallint, in_guild_name text, in_guild_desc text, in_max_guild_count_per_player integer, OUT out_guild_id bigint, OUT out_success boolean, OUT out_fail_reason dune.guildcreatefailreason record functions/guild/create_guild__8args.sql
58184 f journey_progression create_or_update_tutorial_entry in_player_id bigint, in_tutorial_id smallint, in_tutorial_state smallint void functions/journey_progression/create_or_update_tutorial_entry__3args.sql
58185 f server create_server_player_access_codes in_account_id bigint, in_access_code integer, in_access_code_type integer, in_is_resettable boolean void functions/server/create_server_player_access_codes__4args.sql
58186 f map_areas create_sinkchart_for_map_area_id in_item_id bigint, in_creator_id bigint, in_map_name text, in_area_id smallint integer functions/map_areas/create_sinkchart_for_map_area_id__4args.sql
58187 f debug debug_add_test_table_data in_entry text void functions/debug/debug_add_test_table_data__1args.sql
58188 f debug debug_collect_test_table_data SETOF text functions/debug/debug_collect_test_table_data__0args.sql
58189 f debug debug_echo in_text text, in_notices text[] text functions/debug/debug_echo__2args.sql
58190 f debug debug_get_coriolis_seeds TABLE(farm_seed integer, map_names text[], map_seeds integer[], partitions_ids bigint[], partitions_map text[], partitions_seeds integer[]) functions/debug/debug_get_coriolis_seeds__0args.sql
58191 f debug debug_raise_exception in_exception text, in_notices text[] void functions/debug/debug_raise_exception__2args.sql
58192 f debug debug_raise_notices in_notices text[] void functions/debug/debug_raise_notices__1args.sql
58193 f debug debug_reset_test_table void functions/debug/debug_reset_test_table__0args.sql
58194 f debug debug_set_farm_seed in_new_coriolis_seed integer void functions/debug/debug_set_farm_seed__1args.sql
58195 f debug debug_set_map_seed in_map text, in_new_coriolis_seed integer void functions/debug/debug_set_map_seed__2args.sql
58196 f debug debug_set_partition_seed in_partition_id bigint, in_new_coriolis_seed integer void functions/debug/debug_set_partition_seed__2args.sql
58197 f encryption decrypt_user_data in_encrypted_data bytea text functions/encryption/decrypt_user_data__1args.sql
58198 f transfer delete_account in_user_id text, in_reason text boolean functions/transfer/delete_account__2args.sql
58199 f actors delete_actor_states_travel in_actor_id bigint void functions/actors/delete_actor_states_travel__1args.sql
58200 f actors delete_actors in_ids bigint[] void functions/actors/delete_actors__1args.sql
58201 f actors delete_actors_and_respawns_on_server in_server_info dune.serverinfo, in_vehicle_classes_spawned_on_map text[], in_allow_vehicle_recovery boolean void functions/actors/delete_actors_and_respawns_on_server__3args.sql
58202 f dungeon delete_all_dungeon_completions in_dungeon_id text void functions/dungeon/delete_all_dungeon_completions__1args.sql
58203 f dungeon delete_all_dungeon_completions_by_player in_dungeon_id text, in_player_id bigint, in_keep_completion_for_other_players boolean void functions/dungeon/delete_all_dungeon_completions_by_player__3args.sql
58204 f dungeon delete_all_dungeon_completions_for_all_dungeons_by_player in_player_id bigint, in_keep_completion_for_other_players boolean void functions/dungeon/delete_all_dungeon_completions_for_all_dungeons_by_player__2args.sql
58205 f farm delete_all_inactive_farms void functions/farm/delete_all_inactive_farms__0args.sql
58206 f journey_progression delete_all_journey_story_nodes in_account_id bigint void functions/journey_progression/delete_all_journey_story_nodes__1args.sql
58207 f shifting_sand delete_all_static_shifting_sand void functions/shifting_sand/delete_all_static_shifting_sand__0args.sql
58208 f journey_progression delete_all_tutorial_entries in_player_id bigint void functions/journey_progression/delete_all_tutorial_entries__1args.sql
58209 f building_blueprint delete_building_blueprint in_building_item_id bigint void functions/building_blueprint/delete_building_blueprint__1args.sql
58210 f character_mod delete_character in_actor_id bigint void functions/character_mod/delete_character__1args.sql
58211 f map_areas delete_crafted_map in_item_id bigint void functions/map_areas/delete_crafted_map__1args.sql
58212 f dialogue delete_dialogue_data in_player_controller_id bigint void functions/dialogue/delete_dialogue_data__1args.sql
58213 f inventory delete_inventory_item in_item_id bigint, in_count bigint bigint functions/inventory/delete_inventory_item__2args.sql
58214 f inventory delete_item in_id bigint void functions/inventory/delete_item__1args.sql
58215 f inventory delete_items in_ids bigint[] void functions/inventory/delete_items__1args.sql
58216 f inventory delete_items_from_actor in_actor_id bigint void functions/inventory/delete_items_from_actor__1args.sql
58217 f journey_progression delete_journey_story_ids story_ids text[] void functions/journey_progression/delete_journey_story_ids__1args.sql
58218 f journey_progression delete_journey_story_node in_account_id bigint, in_story_node_id text void functions/journey_progression/delete_journey_story_node__2args.sql
58219 f journey_progression delete_journey_story_nodes_for_group_for_player in_account_id bigint, in_reset_group dune.journeystoryresetgroup void functions/journey_progression/delete_journey_story_nodes_for_group_for_player__2args.sql
58220 f journey_progression delete_journey_story_nodes_for_player in_player_id text, in_story_node_ids text[] void functions/journey_progression/delete_journey_story_nodes_for_player__2args.sql
58221 f journey_progression delete_journey_story_nodes_for_player_account in_account_id bigint, in_story_node_ids text[] void functions/journey_progression/delete_journey_story_nodes_for_player_account__2args.sql
58222 f markers delete_map_markers in_dimension_index integer, in_map_name text, in_player_marker_data dune.deleteplayermarkerdata[] void functions/markers/delete_map_markers__3args.sql
58223 f markers delete_markers_by_id in_marker_ids integer[] void functions/markers/delete_markers_by_id__1args.sql
58224 f markers delete_markers_by_static_location_key p_location_key text void functions/markers/delete_markers_by_static_location_key__1args.sql
58225 f markers delete_markers_for_all_players in_marker_types_to_keep text[], in_map text void functions/markers/delete_markers_for_all_players__2args.sql
58226 f actors delete_markers_return_actor_ids in_dimension_index integer, in_map_name text, in_marker_ids integer[] TABLE(actor_id bigint, marker_id integer) functions/actors/delete_markers_return_actor_ids__3args.sql
58227 f journey_progression delete_mnemonic_recall_lesson in_account_id bigint, in_lesson_id text void functions/journey_progression/delete_mnemonic_recall_lesson__2args.sql
58228 f journey_progression delete_mnemonic_recall_lesson_all in_account_id bigint void functions/journey_progression/delete_mnemonic_recall_lesson_all__1args.sql
58229 f server delete_server_player_access_codes in_account_id bigint, in_access_code integer, in_access_code_type integer void functions/server/delete_server_player_access_codes__3args.sql
58230 f spawner delete_spawner in_map text, in_name text, in_dimension_index integer void functions/spawner/delete_spawner__3args.sql
58231 f markers delete_static_location_markers p_location_keys text[] void functions/markers/delete_static_location_markers__1args.sql
58232 f map_areas delete_world_partition_by_map_id in_map_id text void functions/map_areas/delete_world_partition_by_map_id__1args.sql
58233 f guild demote_guild_member in_guild_id bigint, in_player_id bigint, in_new_role smallint void functions/guild/demote_guild_member__3args.sql
58234 f partition determine_partition_label in_map text, in_dimension_index integer, in_label text, in_allow_overwrite boolean, in_partition_id bigint text functions/partition/determine_partition_label__5args.sql
58236 f partition determine_partition_label_trigger trigger functions/partition/determine_partition_label_trigger__0args.sql
58237 f guild disband_guild in_guild_id bigint void functions/guild/disband_guild__1args.sql
58238 f party disband_party in_party_id bigint void functions/party/disband_party__1args.sql
58239 f misc downgrade_map_name in_map_name text text functions/misc/downgrade_map_name__1args.sql
58240 f inventory drain_item_tracking_data TABLE(function_name dune.itemtrackingfunctiontype, item_id bigint, account_id bigint, inventory_id bigint, template_id text, event_time timestamp without time zone, position_index bigint) functions/inventory/drain_item_tracking_data__0args.sql
58241 f exchange dune_exchange_add_sell_order in_exchange_id bigint, in_access_point_id bigint, in_owner_id bigint, in_max_orders_per_player integer, in_expiration_time bigint, in_item_id bigint, in_count bigint, in_category_mask integer, in_category_depth smallint, in_durability_cur real, in_durability_max real, in_item_price bigint, in_wear_normalized_item_price bigint, in_quality_level bigint, in_solari_cost bigint dune.duneexchangeaddsellorderresult functions/exchange/dune_exchange_add_sell_order__15args.sql
58242 f exchange dune_exchange_cancel_order in_order_id bigint, in_purge_time bigint, in_completion_type integer void functions/exchange/dune_exchange_cancel_order__3args.sql
58243 f exchange dune_exchange_expire_orders in_exchange_id bigint, in_current_time bigint, in_purge_time bigint, in_expired_completion_type integer SETOF dune.exchangeexpiredorder functions/exchange/dune_exchange_expire_orders__4args.sql
58244 f exchange dune_exchange_fulfill_sell_order in_exchange_id bigint, in_max_orders_per_player integer, in_purchased_completion_type integer, in_sold_completion_type integer, in_instigator_id bigint, in_order_id bigint, in_order_revision bigint, in_dst_inventory_id bigint, in_dst_index bigint, in_count bigint, in_solaris_fee bigint, in_purge_time bigint dune.duneexchangefulfillsellorderresult functions/exchange/dune_exchange_fulfill_sell_order__12args.sql
58246 f inventory dune_exchange_get_item_price_stats in_template_ids text[] TABLE(template_id text, minimum bigint, average bigint) functions/inventory/dune_exchange_get_item_price_stats__1args.sql
58247 f exchange dune_exchange_get_user_id in_owner_id bigint bigint functions/exchange/dune_exchange_get_user_id__1args.sql
58248 f currency dune_exchange_modify_user_solari_balance in_controller_id bigint, in_solari_delta bigint void functions/currency/dune_exchange_modify_user_solari_balance__2args.sql
58249 f exchange dune_exchange_purge_completed_orders in_exchange_id bigint, in_current_time bigint SETOF dune.exchangeexpiredorder functions/exchange/dune_exchange_purge_completed_orders__2args.sql
58250 f exchange dune_exchange_query_storage_item in_order_id bigint TABLE(completion_type integer, id bigint, revision bigint, expiration_time bigint, access_point_id bigint, ap_name text, owner_id bigint, item_id bigint, template_id text, stack_size bigint, item_price bigint, quality_level bigint, durability_cur real, durability_max real, dynamic_stats jsonb) functions/exchange/dune_exchange_query_storage_item__1args.sql
58251 f exchange dune_exchange_query_storage_items in_exchange_id bigint, in_owner_id bigint TABLE(completion_type integer, id bigint, revision bigint, expiration_time bigint, access_point_id bigint, ap_name text, owner_id bigint, item_id bigint, template_id text, stack_size bigint, item_price bigint, quality_level bigint, durability_cur real, durability_max real, dynamic_stats jsonb) functions/exchange/dune_exchange_query_storage_items__2args.sql
58252 f exchange dune_exchange_relist_order in_order_id bigint, in_expiration_time bigint, in_item_price bigint, in_wear_normalized_item_price bigint, in_solari_cost bigint bigint functions/exchange/dune_exchange_relist_order__5args.sql
58253 f currency dune_exchange_retrieve_solari_balance in_owner_id bigint bigint functions/currency/dune_exchange_retrieve_solari_balance__1args.sql
58254 f currency dune_exchange_retrieve_solaris_from_item in_controller_id bigint, in_order_id bigint dune.duneexchangeretrievesolarisfromitemresult functions/currency/dune_exchange_retrieve_solaris_from_item__2args.sql
58255 f exchange dune_exchange_retrieve_storage_item in_exchange_id bigint, in_order_id bigint, in_dst_inventory_id bigint, in_dst_index bigint, in_count bigint dune.duneexchangeretrievestorageorderresult functions/exchange/dune_exchange_retrieve_storage_item__5args.sql
58256 f exchange dune_exchange_update_recurring_sell_order in_exchange_id bigint, in_expiration_time bigint, in_access_point_id bigint, in_owner_id bigint, in_item_id bigint, in_increment bigint, in_max_count bigint, in_category_mask integer, in_category_depth smallint, in_durability_cur real, in_durability_max real, in_item_price bigint, in_wear_normalized_item_price bigint, in_quality_level bigint bigint functions/exchange/dune_exchange_update_recurring_sell_order__14args.sql
58257 f lookup dune_get_account_id_by_user in_user text bigint functions/lookup/dune_get_account_id_by_user__1args.sql
58258 f currency edit_guild_description in_guild_id bigint, in_guild_desc text void functions/currency/edit_guild_description__2args.sql
58259 f encryption encrypt_user_data in_data text bytea functions/encryption/encrypt_user_data__1args.sql
58260 f lookup fetch_resourcefield_state in_map text, in_dimension_index integer, in_field_kind_id smallint TABLE(field_id bigint, spawn_time double precision, value_remaining bigint) functions/lookup/fetch_resourcefield_state__3args.sql
58261 f lookup fetch_server_spice_field_manifest in_server_id text TABLE(spicefield_type_id integer, inactive_fields_of_type integer, requested_spawned_of_type integer) functions/lookup/fetch_server_spice_field_manifest__1args.sql
58262 f lookup fetch_spicefie_id_types_with_global_info in_map_name text, in_dimension_index integer TABLE(spicefield_type_id integer, max_globally_active integer, max_globally_primed integer, current_globally_active integer, current_globally_primed integer, is_spawning_active boolean, field_type text) functions/lookup/fetch_spicefie_id_types_with_global_info__2args.sql
58263 f actors find_actor_by_id in_id bigint dune.actorspawninfo functions/actors/find_actor_by_id__1args.sql
58264 f misc fix_broken_harkonnen_players_due_to_fooled_thufir void functions/misc/fix_broken_harkonnen_players_due_to_fooled_thufir__0args.sql
58265 f anticheat flag_player_as_cheater in_account_id bigint, in_cheat_type dune.cheat_type_enum void functions/anticheat/flag_player_as_cheater__2args.sql
58266 f actors gather_ownerless_actors_on_server in_server_info dune.serverinfo SETOF dune.actorspawninfo functions/actors/gather_ownerless_actors_on_server__1args.sql
58267 f actors gather_player_linked_actors in_player_pawn_id bigint SETOF dune.actorspawninfo functions/actors/gather_player_linked_actors__1args.sql
58268 f actors gather_removed_accounts_that_left_orphaned_actors_on_server in_server_info dune.serverinfo TABLE(account_id bigint, removal_reason text, actors_left dune.orphanedplayeractorinfo[]) functions/actors/gather_removed_accounts_that_left_orphaned_actors_on_server__1args.sql
58269 f actors get_account_actor_ids in_account_id bigint dune.playeractorids functions/actors/get_account_actor_ids__1args.sql
58270 f server get_active_servers_for_gateway TABLE(server_id text, map text, partition_id bigint, dimension_index integer, game_addr inet, game_port integer, revision integer) Used by the gateway service to monitor for active servers. functions/server/get_active_servers_for_gateway__0args.sql
58271 f actors get_actor_server_info in_id bigint dune.serverinfo functions/actors/get_actor_server_info__1args.sql
58272 f permission get_actors_location_data_with_permission in_actor_ids bigint[] SETOF dune.actorpermissionlocationdata functions/permission/get_actors_location_data_with_permission__1args.sql
58273 f lookup get_all_demo_players TABLE(fls_ids text) functions/lookup/get_all_demo_players__0args.sql
58274 f faction get_all_faction_members TABLE(player_id bigint, fls_id text, faction_id smallint) functions/faction/get_all_faction_members__0args.sql
58275 f lookup get_all_guild_members TABLE(player_id bigint, fls_id text, guild_id bigint) functions/lookup/get_all_guild_members__0args.sql
58276 f lookup get_all_online_or_recently_disconnected_player_online_state SETOF dune.playeronlinestateentry functions/lookup/get_all_online_or_recently_disconnected_player_online_state__0args.sql
58277 f lookup get_all_parties TABLE(party_id bigint, player_id bigint, player_name text, party_leader_id bigint, platform_session_id text, platform_name text, platform_players_count integer) functions/lookup/get_all_parties__0args.sql
58278 f lookup get_all_party_invites TABLE(invite_id bigint, party_id bigint, sender_player_id bigint, sender_name text, player_id bigint, player_name text, invite_sent_timespan bigint) functions/lookup/get_all_party_invites__0args.sql
58279 f lookup get_all_party_members TABLE(player_id bigint, fls_id text, party_id bigint) functions/lookup/get_all_party_members__0args.sql
58280 f lookup get_all_player_character_home_dimensions TABLE(fls_id text, home_dimension integer) functions/lookup/get_all_player_character_home_dimensions__0args.sql
58281 f lookup get_all_player_in_guild_online_state in_guild_id bigint SETOF dune.playeronlinestateentry functions/lookup/get_all_player_in_guild_online_state__1args.sql
58282 f lookup get_all_player_travel_states TABLE(fls_id text, login_target_dimension_index integer) functions/lookup/get_all_player_travel_states__0args.sql
58283 f journey_progression get_all_tutorial_entries in_player_id bigint TABLE(tutorial_id smallint, tutorial_state smallint) functions/journey_progression/get_all_tutorial_entries__1args.sql
58284 f lookup get_all_unresolved_character_imports TABLE(flsid text, importstate dune.transferimportstate, lastupdatetime timestamp with time zone) functions/lookup/get_all_unresolved_character_imports__0args.sql
58285 f schema_meta get_applied_patches SETOF text functions/schema_meta/get_applied_patches__0args.sql
58286 f battlegroup get_battlegroup_close_date timestamp without time zone functions/battlegroup/get_battlegroup_close_date__0args.sql
58287 f lookup get_best_dungeon_completion in_dungeon_id text TABLE(out_difficulty integer, out_duration_ms integer, out_players_names text[]) functions/lookup/get_best_dungeon_completion__1args.sql
58288 f lookup get_best_dungeons_completions_for_player in_player_id bigint TABLE(out_dungeon_id text, out_difficulty integer, out_duration_ms integer, out_players_num smallint) functions/lookup/get_best_dungeons_completions_for_player__1args.sql
58289 f building_blueprint get_building_blueprint_copy_data in_building_blueprint_id bigint dune.buildingblueprintgetcopydata functions/building_blueprint/get_building_blueprint_copy_data__1args.sql
58290 f building_blueprint get_building_favorites in_account_id bigint TABLE(building_types text[]) functions/building_blueprint/get_building_favorites__1args.sql
58291 f building_blueprint get_building_id in_actor_id bigint, in_class text dune.buildinggetidcomposite functions/building_blueprint/get_building_id__2args.sql
58292 f lookup get_character_import_state in_fls_id text dune.transferimportstate functions/lookup/get_character_import_state__1args.sql
58293 f transfer get_character_transfer_related_items in_fls_id text jsonb functions/transfer/get_character_transfer_related_items__1args.sql
58294 f misc get_consumed_lore_pickups in_actor_id bigint, in_use_temporary boolean SETOF bit functions/misc/get_consumed_lore_pickups__2args.sql
58295 f misc get_controller_id_from_platform_id in_platform_id text bigint functions/misc/get_controller_id_from_platform_id__1args.sql
58296 f exchange get_dune_exchange_accesspoint_id in_exchange_id bigint, in_name text bigint functions/exchange/get_dune_exchange_accesspoint_id__2args.sql
58297 f exchange get_dune_exchange_data in_exchange_id bigint, in_controller_id bigint dune.loadexchangedataresult functions/exchange/get_dune_exchange_data__2args.sql
58298 f exchange get_dune_exchange_id in_name text bigint functions/exchange/get_dune_exchange_id__1args.sql
58299 f exchange get_dune_exchange_used_order_slots in_controller_id bigint integer functions/exchange/get_dune_exchange_used_order_slots__1args.sql
58300 f exchange get_exchange_inventory_id in_exchange_id bigint bigint functions/exchange/get_exchange_inventory_id__1args.sql
58301 f exchange get_exchange_orders_by_mask in_mask integer, in_depth smallint SETOF bigint functions/exchange/get_exchange_orders_by_mask__2args.sql
58302 f exchange get_exchange_sell_orders in_id bigint, in_exchange_id bigint, in_min_item_price bigint, in_max_item_price bigint, in_template_id text, in_mask integer, in_depth smallint TABLE(id bigint, revision bigint, expiration_time bigint, access_point_id bigint, ap_name text, owner_id bigint, template_id text, stack_size bigint, initial_stack_size bigint, item_price bigint, quality_level bigint, durability_cur real, durability_max real, dynamic_stats jsonb) functions/exchange/get_exchange_sell_orders__7args.sql
58303 f inventory get_exchange_sell_orders_by_item_type in_exchange_id bigint, in_template_ids text[] TABLE(id bigint, revision bigint, expiration_time bigint, access_point_id bigint, ap_name text, owner_id bigint, template_id text, stack_size bigint, initial_stack_size bigint, item_price bigint, quality_level bigint, durability_cur real, durability_max real, dynamic_stats jsonb) functions/inventory/get_exchange_sell_orders_by_item_type__2args.sql
58304 f exchange get_exchange_sell_orders_by_owner in_exchange_id bigint, in_owner_id bigint TABLE(id bigint, revision bigint, expiration_time bigint, access_point_id bigint, ap_name text, owner_id bigint, template_id text, stack_size bigint, initial_stack_size bigint, item_price bigint, quality_level bigint, durability_cur real, durability_max real, dynamic_stats jsonb) functions/exchange/get_exchange_sell_orders_by_owner__2args.sql
58305 f farm get_farm_state TABLE(server_id text, farm_id text, outgoing_s2s_connections integer, incoming_s2s_connections integer, connected_players integer, igw_addr inet, igw_port integer, game_addr inet, game_port integer, ready boolean, alive boolean, map text, revision integer) functions/farm/get_farm_state__0args.sql
58306 f misc get_friends_search in_player_name text, in_max_players_count integer TABLE(player_id bigint, character_name text, funcom_id text, platform_id text, platform_name text) functions/misc/get_friends_search__2args.sql
58307 f guild get_guild_data in_guild_id bigint TABLE(guild_name text, guild_faction_id smallint, guild_description text) functions/guild/get_guild_data__1args.sql
58308 f guild get_guild_data_for_player in_player_id bigint TABLE(guild_id bigint, guild_factions_id smallint, guild_name text, guild_description text, player_id bigint, role_id smallint, player_faction_id smallint) functions/guild/get_guild_data_for_player__1args.sql
58309 f guild get_guild_for_player in_player_id bigint bigint functions/guild/get_guild_for_player__1args.sql
58310 f guild get_guild_invites in_guild_id bigint TABLE(invite_id bigint, player_id bigint, sender_player_id bigint, invite_sent_timespan bigint, character_name text, sender_character_name text) functions/guild/get_guild_invites__1args.sql
58311 f guild get_guild_members in_guild_id bigint TABLE(player_id bigint, role_id smallint, player_faction_id smallint) functions/guild/get_guild_members__1args.sql
58312 f inventory get_inventory_data in_inventory_id bigint dune.inventorydata functions/inventory/get_inventory_data__1args.sql
58313 f inventory get_inventory_id in_actor_id bigint, in_component_name_hash integer bigint functions/inventory/get_inventory_id__2args.sql
58314 f items_purge get_items_to_remove items_to_remove text[] text[] functions/items_purge/get_items_to_remove__1args.sql
58315 f landclaim get_landclaim_segments in_totem_id bigint TABLE(grid_location_x bigint, grid_location_y bigint) functions/landclaim/get_landclaim_segments__1args.sql
58316 f lookup get_learned_building_sets in_account_id bigint SETOF text functions/lookup/get_learned_building_sets__1args.sql
58317 f lookup get_learned_new_buildable_pieces in_account_id bigint SETOF text functions/lookup/get_learned_new_buildable_pieces__1args.sql
58318 f lookup get_login_journey_nodes in_account_id bigint dune.journeynodeinfo[] functions/lookup/get_login_journey_nodes__1args.sql
58319 f lookup get_login_journey_nodes_cooldown in_account_id bigint dune.journeynodecooldowninfo[] functions/lookup/get_login_journey_nodes_cooldown__1args.sql
58320 f journey_progression get_mnemonic_recall_lessons in_account_id bigint TABLE(id bigint, lesson_id text, lession_state bigint, lesson_progress integer, is_new boolean) functions/journey_progression/get_mnemonic_recall_lessons__1args.sql
58321 f lookup get_online_player_controller_ids in_map text SETOF bigint functions/lookup/get_online_player_controller_ids__1args.sql
58322 f lookup get_online_player_controller_ids_on_farm SETOF bigint functions/lookup/get_online_player_controller_ids_on_farm__0args.sql
58323 f partition get_partition_presets SETOF text Adds a partition only if its unique. Not using constraints, as this is only a helper function. functions/partition/get_partition_presets__0args.sql
58324 f partition get_partitions in_map text SETOF bigint functions/partition/get_partitions__1args.sql
58325 f party get_party_members in_party_id bigint TABLE(player_id bigint, fls_id text, party_id bigint) functions/party/get_party_members__1args.sql
58326 f permission get_permission_actors_for_server in_server_info dune.serverinfo SETOF dune.actorpermissioncombineddata functions/permission/get_permission_actors_for_server__1args.sql
58327 f permission get_permission_for_actor in_actor_id bigint dune.actorpermissioncombineddata functions/permission/get_permission_for_actor__1args.sql
58328 f permission get_permission_for_actors in_actor_id bigint[] SETOF dune.actorpermissioncombineddata functions/permission/get_permission_for_actors__1args.sql
58329 f permission get_permission_for_player_actors in_player_id bigint, in_min_rank smallint SETOF dune.actorpermissioncombineddata functions/permission/get_permission_for_player_actors__2args.sql
58330 f building_blueprint get_placeable_id in_actor_id bigint, in_class text, in_building_type text dune.placeablegetidcomposite functions/building_blueprint/get_placeable_id__3args.sql
58331 f lookup get_player_access_codes in_account_id bigint TABLE(access_code integer, access_code_type integer) functions/lookup/get_player_access_codes__1args.sql
58332 f faction get_player_current_faction_reputation in_actor_id bigint, OUT out_faction_id smallint, OUT out_reputation_amount integer record functions/faction/get_player_current_faction_reputation__3args.sql
58333 f faction get_player_faction in_player_id bigint, in_neutral_faction_id smallint smallint functions/faction/get_player_faction__2args.sql
58334 f faction get_player_faction_name in_actor_id bigint, OUT player_faction_name text, OUT utc_time_faction_change timestamp without time zone record functions/faction/get_player_faction_name__3args.sql
58335 f lookup get_player_guild_invites in_player_id bigint TABLE(invite_id bigint, guild_id bigint, guild_name text, guild_description text, sender_player_id bigint, invite_sent_timespan bigint, character_name text, sender_character_name text) functions/lookup/get_player_guild_invites__1args.sql
58336 f lookup get_player_ids_online_state in_player_ids bigint[] SETOF dune.playeronlinestateentry functions/lookup/get_player_ids_online_state__1args.sql
58337 f lookup get_player_infos_for_actor_ids in_actor_ids bigint[] TABLE(player_id bigint, character_name text, fls_id text, funcom_id text, platform_id text, platform_name text) functions/lookup/get_player_infos_for_actor_ids__1args.sql
58338 f lookup get_player_infos_for_character_names in_character_names text[] TABLE(player_id bigint, character_name text, fls_id text, funcom_id text, platform_id text, platform_name text) functions/lookup/get_player_infos_for_character_names__1args.sql
58339 f lookup get_player_infos_for_fls_ids in_fls_ids text[] TABLE(player_id bigint, character_name text, fls_id text, funcom_id text, platform_id text, platform_name text) functions/lookup/get_player_infos_for_fls_ids__1args.sql
58340 f lookup get_player_infos_for_funcom_ids in_funcom_ids text[] TABLE(player_id bigint, character_name text, fls_id text, funcom_id text, platform_id text, platform_name text) functions/lookup/get_player_infos_for_funcom_ids__1args.sql
58341 f lookup get_player_online_state_within_grace_period_for_each_server TABLE(fls_id text, previous_partition_id bigint, current_server_id text, online_status dune.playerconnectionstatus, within_grace_period boolean, last_disconnect timestamp without time zone, demo_playtime_seconds integer, logoff_persistence_end_time timestamp without time zone, party_id bigint) functions/lookup/get_player_online_state_within_grace_period_for_each_server__0args.sql
58342 f vehicle get_player_owned_vehicles_data in_player_id bigint, in_account_id bigint TABLE(out_actor_id bigint, out_name text, out_class text, out_map text, out_partition_id bigint, out_dimension integer, out_transform dune.transform, out_actor_state text) functions/vehicle/get_player_owned_vehicles_data__2args.sql
58343 f lookup get_player_partition_id in_fls_id text bigint functions/lookup/get_player_partition_id__1args.sql
58344 f lookup get_player_pawn in_account_id bigint TABLE(description dune.actordescription, server_info dune.serverinfo, player_tags text[]) functions/lookup/get_player_pawn__1args.sql
58345 f currency get_player_virtual_currency_balances in_controller_id bigint TABLE(out_currency_id smallint, out_currency_balance bigint) functions/currency/get_player_virtual_currency_balances__1args.sql
58346 f lookup get_players_demo_data in_controller_ids bigint[] SETOF dune.playerdemostatedescription functions/lookup/get_players_demo_data__1args.sql
58347 f items_purge get_recipes_to_remove recipes_to_remove text[] text[] functions/items_purge/get_recipes_to_remove__1args.sql
58348 f actors get_registered_spawned_actor in_spawner_id bigint SETOF bigint functions/actors/get_registered_spawned_actor__1args.sql
58349 f spawner get_respawn_locations in_account_id bigint dune.respawnlocation[] functions/spawner/get_respawn_locations__1args.sql
58350 f schema_meta get_schema_version integer functions/schema_meta/get_schema_version__0args.sql
58351 f currency get_solaris_id smallint functions/currency/get_solaris_id__0args.sql
58352 f spawner get_spawner_id in_map text, in_name text, in_dimension_index integer bigint functions/spawner/get_spawner_id__3args.sql
58353 f encryption get_stored_user_data_encryption_key_hash bytea functions/encryption/get_stored_user_data_encryption_key_hash__0args.sql
58354 f encryption get_stored_user_data_encryption_status dune.userdataencryptionstatus functions/encryption/get_stored_user_data_encryption_status__0args.sql
58355 f encryption get_stored_user_data_encryption_taint_xmax bigint functions/encryption/get_stored_user_data_encryption_taint_xmax__0args.sql
58356 f misc get_sub_inventory_id in_owner_item_id bigint bigint functions/misc/get_sub_inventory_id__1args.sql
58357 f lookup get_traveling_actor_id_and_types in_actor_id bigint TABLE(id bigint, is_instigator boolean, is_player boolean, level integer) functions/lookup/get_traveling_actor_id_and_types__1args.sql
58358 f lookup get_traveling_actor_ids in_actor_id bigint, in_max_recursion_level integer TABLE(id bigint, is_instigator boolean, level integer) functions/lookup/get_traveling_actor_ids__2args.sql
58359 f lookup get_traveling_actors_fls_ids in_actor_id bigint TABLE(out_id text) functions/lookup/get_traveling_actors_fls_ids__1args.sql
58360 f lookup get_traveling_non_player_actor_ids in_actor_id bigint TABLE(id bigint) functions/lookup/get_traveling_non_player_actor_ids__1args.sql
58361 f vehicle get_unbacked_up_vehicle_ids_for_account in_account_id bigint TABLE(vehicle_id bigint) functions/vehicle/get_unbacked_up_vehicle_ids_for_account__1args.sql
58362 f schema_meta get_universe_time TABLE(universe_time_timestamp timestamp without time zone, down_time_accumulation bigint) functions/schema_meta/get_universe_time__0args.sql
58363 f transfer get_unsaved_base_totem_ids_for_account in_account_id bigint TABLE(totem_id bigint) functions/transfer/get_unsaved_base_totem_ids_for_account__1args.sql
58364 f vehicle get_vehicle_id in_actor_id bigint, in_class text bigint functions/vehicle/get_vehicle_id__2args.sql
58365 f vehicle get_vehicle_module_inventory_id in_vehicle_module_id bigint, in_vehicle_module_inventory_type integer bigint functions/vehicle/get_vehicle_module_inventory_id__2args.sql
58366 f guild guild_handle_actor_delete in_player_id bigint void functions/guild/guild_handle_actor_delete__1args.sql
58367 f guild guilds_get_exclusive_operation_lock void functions/guild/guilds_get_exclusive_operation_lock__0args.sql
58368 f faction handle_player_faction_guild_effects in_player_id bigint, in_faction_id smallint, neutral_faction_id smallint void functions/faction/handle_player_faction_guild_effects__3args.sql
58369 f partition igwo_delete_world_partitions in_partition_ids bigint[] void functions/partition/igwo_delete_world_partitions__1args.sql
58370 f partition igwo_get_partition_id_seq_last_value bigint functions/partition/igwo_get_partition_id_seq_last_value__0args.sql
58371 f partition igwo_get_partition_ids SETOF bigint functions/partition/igwo_get_partition_ids__0args.sql
58372 f partition igwo_get_partitions TABLE(partition_id bigint, map text, dimension_index integer, label text, min_x double precision, min_y double precision, max_x double precision, max_y double precision) functions/partition/igwo_get_partitions__0args.sql
58373 f igwo igwo_get_server_details TABLE(address text, server_id text, ready boolean, partition_id bigint, map text, dimension_index integer, label text) functions/igwo/igwo_get_server_details__0args.sql
58374 f partition igwo_insert_world_partition in_partition_id bigint, in_map text, in_partition_definition jsonb, in_dimension_index integer, in_partition_label text bigint functions/partition/igwo_insert_world_partition__5args.sql
58375 f partition igwo_next_partition_id_seq bigint functions/partition/igwo_next_partition_id_seq__0args.sql
58376 f partition igwo_notify_world_partition_update void functions/partition/igwo_notify_world_partition_update__0args.sql
58377 f partition igwo_restart_partition_id_seq in_restart_with bigint void functions/partition/igwo_restart_partition_id_seq__1args.sql
58378 f partition igwo_update_world_partition in_map text, in_partition_definition jsonb, in_partition_id bigint, in_dimension_index integer, in_label text void functions/partition/igwo_update_world_partition__5args.sql
58379 f event_log init_event_log in_partition_id bigint void functions/event_log/init_event_log__1args.sql
58380 f partition initialize_partitions_basic_battlegroup void functions/partition/initialize_partitions_basic_battlegroup__0args.sql
58381 f partition initialize_partitions_basic_survival_1 void functions/partition/initialize_partitions_basic_survival_1__0args.sql
58382 f partition initialize_partitions_development_battlegroup void functions/partition/initialize_partitions_development_battlegroup__0args.sql
58383 f partition initialize_partitions_editor_default_1x1 void functions/partition/initialize_partitions_editor_default_1x1__0args.sql
58384 f partition initialize_partitions_full_battlegroup void functions/partition/initialize_partitions_full_battlegroup__0args.sql
58385 f partition initialize_partitions_igw_test_small_2x1 void functions/partition/initialize_partitions_igw_test_small_2x1__0args.sql
58386 f partition initialize_partitions_igw_test_small_2x2 void functions/partition/initialize_partitions_igw_test_small_2x2__0args.sql
58387 f partition initialize_partitions_igw_training void functions/partition/initialize_partitions_igw_training__0args.sql
58388 f character_mod initialize_specialization_keystones in_keystones text[] TABLE(keystone_id smallint, keystone_name text) functions/character_mod/initialize_specialization_keystones__1args.sql
58389 f partition initialize_world_partition in_map_name text, in_num_servers integer, in_dimension_index integer SETOF bigint functions/partition/initialize_world_partition__3args.sql
58390 f stock_vendor interact_get_vendor_items_bought_from_player in_vendor_id text, in_player_id bigint, in_current_cycle_start_timestamp bigint TABLE(out_template_id text, out_amount_bought integer) functions/stock_vendor/interact_get_vendor_items_bought_from_player__3args.sql
58391 f party internal_add_party_member in_invite_id bigint, in_party_id bigint, in_player_id bigint, in_platform_session_id text, in_platform_name text, in_max_party_member_count integer dune.partyacceptinviteresult functions/party/internal_add_party_member__6args.sql
58392 f party internal_create_party in_invite_id bigint, in_leader_id bigint, in_leader_platform_session_id text, in_leader_platform_name text, in_member_id bigint, in_platform_session_id text, in_platform_name text bigint functions/party/internal_create_party__7args.sql
58393 f lookup is_player_guild_admin in_player_id bigint, in_guild_id bigint boolean functions/lookup/is_player_guild_admin__2args.sql
58394 f lookup is_player_offline in_fls_id text boolean Return true if player is marked as offline, taking into account server crashing before players online state was updated in DB. functions/lookup/is_player_offline__1args.sql
58395 f lookup is_player_party_leader in_player_id bigint, in_party_id bigint boolean functions/lookup/is_player_party_leader__2args.sql
58396 f party join_platform_session_party in_leader_platform_id text, in_player_platform_id text, in_platform_session_id text, in_platform_name text, in_max_party_member_count integer dune.partyacceptinviteresult functions/party/join_platform_session_party__5args.sql
58397 f journey_progression journey_story_node_cooldown_add in_account_id bigint, in_story_node_id text, in_time_to_expire timestamp without time zone void functions/journey_progression/journey_story_node_cooldown_add__3args.sql
58398 f journey_progression journey_story_node_cooldown_delete_expired in_time_to_check timestamp without time zone void functions/journey_progression/journey_story_node_cooldown_delete_expired__1args.sql
58399 f landsraad landsraad_cast_vote in_term_id bigint, in_player_id bigint, in_decree_name text void functions/landsraad/landsraad_cast_vote__3args.sql
58400 f landsraad landsraad_change_term_end_time end_term_id bigint, new_end_time timestamp without time zone, in_test_term boolean void functions/landsraad/landsraad_change_term_end_time__3args.sql
58401 f landsraad landsraad_check_task_completion trigger functions/landsraad/landsraad_check_task_completion__0args.sql
58402 f landsraad landsraad_check_term_won trigger functions/landsraad/landsraad_check_term_won__0args.sql
58403 f landsraad landsraad_collect_task_telemetry_for_faction in_term_id bigint, in_faction_name text TABLE(task_telemetry dune.landsraadtermtasktelemetry[]) functions/landsraad/landsraad_collect_task_telemetry_for_faction__2args.sql
58404 f landsraad landsraad_collect_term_telemetry in_term_id bigint, in_faction_names text[] TABLE(term_telemetry dune.landsraadtermtelemetry[], task_telemetry dune.landsraadtermtasktelemetry[]) functions/landsraad/landsraad_collect_term_telemetry__2args.sql
58405 f landsraad landsraad_collect_term_telemetry_for_faction in_term_id bigint, in_faction_name text dune.landsraadtermtelemetry functions/landsraad/landsraad_collect_term_telemetry_for_faction__2args.sql
58406 f landsraad landsraad_collect_vote_telemetry in_term_id bigint, in_winning_faction_id integer TABLE(guild_id bigint, decree_name text, voting_influence integer) functions/landsraad/landsraad_collect_vote_telemetry__2args.sql
58407 f landsraad landsraad_collect_votes in_term_id bigint TABLE(elected_decree text, winning_faction_name text, available_decrees text[], guild_votes dune.landsraadguildvotetelemetry[]) functions/landsraad/landsraad_collect_votes__1args.sql
58408 f landsraad landsraad_determine_winner in_term_id bigint text functions/landsraad/landsraad_determine_winner__1args.sql
58409 f landsraad landsraad_force_end_term end_term_id bigint void functions/landsraad/landsraad_force_end_term__1args.sql
58410 f landsraad landsraad_has_term_of_task_ended in_task_id bigint boolean functions/landsraad/landsraad_has_term_of_task_ended__1args.sql
58411 f landsraad landsraad_initialize_system number_of_weeks_term_retention integer, number_of_nominated_decrees integer, in_end_time timestamp without time zone, in_test_term boolean, faction_names text[], decrees dune.landsraaddecree[], tasks dune.landsraadtask[], task_rewards dune.landsraadtaskreward[] TABLE(term_id bigint, reigning_faction_name text, active_decree_name text, winning_faction_name text, elected_decree_name text, start_time timestamp without time zone, end_time timestamp without time zone) functions/landsraad/landsraad_initialize_system__8args.sql
58412 f landsraad landsraad_initialize_term number_of_weeks_term_retention integer, number_of_nominated_decrees integer, in_end_time timestamp without time zone, in_test_term boolean, tasks dune.landsraadtask[], task_rewards dune.landsraadtaskreward[] TABLE(term_id bigint, reigning_faction_name text, active_decree_name text, winning_faction_name text, elected_decree_name text, start_time timestamp without time zone, end_time timestamp without time zone) functions/landsraad/landsraad_initialize_term__6args.sql
58413 f landsraad landsraad_insert_task_progress in_term_id bigint, in_player_id bigint, in_guild_id bigint, in_house_name text, in_faction_progress integer, in_guild_progress real, in_player_progress real, in_timestamp timestamp without time zone void functions/landsraad/landsraad_insert_task_progress__8args.sql
58414 f landsraad landsraad_insert_task_progress_batched in_term_id bigint, in_task_progress dune.landsraadtaskprogress[] void functions/landsraad/landsraad_insert_task_progress_batched__2args.sql
58415 f landsraad landsraad_insert_task_progress_faction in_term_id bigint, in_faction_name text, in_house_name text, in_faction_progress integer, in_guild_progress real, in_player_progress real void functions/landsraad/landsraad_insert_task_progress_faction__6args.sql
58416 f landsraad landsraad_insert_task_progress_random in_term_id bigint, in_faction_names text[], in_num_rows integer void functions/landsraad/landsraad_insert_task_progress_random__3args.sql
58417 p landsraad landsraad_insert_tasks IN in_term_id bigint, IN in_tasks dune.landsraadtask[], IN in_task_rewards dune.landsraadtaskreward[] procedures/landsraad_insert_tasks__3args.sql
58418 f landsraad landsraad_load_current_rotation in_term_id bigint TABLE(decree_name text, received_votes integer, open_votes integer) functions/landsraad/landsraad_load_current_rotation__1args.sql
58419 f landsraad landsraad_load_current_term TABLE(term_id bigint, reigning_faction_name text, active_decree_name text, winning_faction_name text, elected_decree_name text, start_time timestamp without time zone, end_time timestamp without time zone, tasks dune.landsraadtask[], term_task_rewards dune.landsraadtaskreward[], winner_history text[], testterm boolean) functions/landsraad/landsraad_load_current_term__0args.sql
58420 f landsraad landsraad_load_guild_contribution in_term_id bigint, in_guild_id bigint, in_faction_id bigint TABLE(voting_influence real) functions/landsraad/landsraad_load_guild_contribution__3args.sql
58421 f landsraad landsraad_load_guild_contributions in_term_id bigint, in_num_guilds integer, in_faction_names text[] TABLE(faction_name text, guild_name text, voting_influence real) functions/landsraad/landsraad_load_guild_contributions__3args.sql
58422 f landsraad landsraad_load_guild_vote in_term_id bigint, in_player_id bigint TABLE(decree_name text, voting_influence real) functions/landsraad/landsraad_load_guild_vote__2args.sql
58423 f landsraad landsraad_load_house_rewards in_player_id bigint TABLE(house_name text, template_id text, amount integer, last_updated timestamp without time zone) functions/landsraad/landsraad_load_house_rewards__1args.sql
58424 f landsraad landsraad_load_player_contributions in_term_id bigint, in_player_ids bigint[] TABLE(player_id bigint, board_index smallint, amount integer) functions/landsraad/landsraad_load_player_contributions__2args.sql
58425 f landsraad landsraad_load_task_faction_progress in_term_id bigint TABLE(task_board_index integer, faction_name text, progress integer) functions/landsraad/landsraad_load_task_faction_progress__1args.sql
58426 f landsraad landsraad_load_task_faction_reveal_state in_term_id bigint TABLE(task_board_index integer, faction_name text, reveal_state boolean, time_stamp timestamp without time zone) functions/landsraad/landsraad_load_task_faction_reveal_state__1args.sql
58427 f landsraad landsraad_load_term_progress in_term_id bigint, in_num_guilds integer, in_faction_names text[], in_player_ids bigint[] TABLE(faction_progress dune.landsraadtaskfactionprogress[], faction_reveal_state dune.landsraadtaskfactionrevealstate[], guild_contributions dune.landsraadguildcontribution[], player_contributions dune.landsraadplayercontribution[]) functions/landsraad/landsraad_load_term_progress__4args.sql
58428 p landsraad landsraad_nominate_decrees_for_voting IN last_active_decree_id bigint, IN num_decrees integer procedures/landsraad_nominate_decrees_for_voting__2args.sql
58429 f landsraad landsraad_notify_house_rewards_changed trigger functions/landsraad/landsraad_notify_house_rewards_changed__0args.sql
58430 f landsraad landsraad_perform_daily_task_reveal in_term_id bigint, in_faction_names text[], in_house_names_to_reveal text[], in_reveal_day integer TABLE(faction_name text, house_name text, board_index integer) functions/landsraad/landsraad_perform_daily_task_reveal__4args.sql
58431 f landsraad landsraad_process_house_rewards trigger functions/landsraad/landsraad_process_house_rewards__0args.sql
58432 f landsraad landsraad_process_task_progress max_rows integer void functions/landsraad/landsraad_process_task_progress__1args.sql
58433 f landsraad landsraad_task_has_been_completed in_task_id bigint boolean functions/landsraad/landsraad_task_has_been_completed__1args.sql
58434 p landsraad landsraad_update_decrees IN in_decrees dune.landsraaddecree[] procedures/landsraad_update_decrees__1args.sql
58435 p landsraad landsraad_update_factions IN in_faction_names text[] procedures/landsraad_update_factions__1args.sql
58436 f landsraad landsraad_update_task_faction_reveal_state in_term_id bigint, in_task_board_index integer, faction_name text, reveal_state boolean void functions/landsraad/landsraad_update_task_faction_reveal_state__4args.sql
58437 f landsraad landsraad_withdraw_house_reward in_player_id bigint, in_house_rewards dune.landsraadplayerhousereward[] void functions/landsraad/landsraad_withdraw_house_reward__2args.sql
58438 f actors load_actors in_actor_ids bigint[], in_actor_state dune.actorstate TABLE(ord bigint, actor_id bigint, generic_data dune.actorgenericdata, serial bigint) functions/actors/load_actors__2args.sql
58439 f vehicle load_backup_vehicle in_account_id bigint TABLE(out_id bigint, out_class text, out_customization_id text) functions/vehicle/load_backup_vehicle__1args.sql
58449 f building_blueprint load_building in_building_id bigint dune.buildingsavedata functions/building_blueprint/load_building__1args.sql
58450 f communinet load_communinet_player_data in_account_id bigint TABLE(is_active boolean, selected_channel_name text, channel_name text, is_tuned boolean) functions/communinet/load_communinet_player_data__1args.sql
58451 f dialogue load_dialogue_data in_player_controller_id bigint, OUT met_npcs text[], OUT taken_nodes integer[] record functions/dialogue/load_dialogue_data__3args.sql
58452 f misc load_dimension_index in_map text, in_partition_id bigint integer functions/misc/load_dimension_index__2args.sql
58453 f misc load_events_log_data_from_player in_actor_id bigint, in_limit_entries_num integer TABLE(game_event_owner bigint, universe_time timestamp without time zone, map_name text, partition_id bigint, event_type integer, x_location double precision, y_location double precision, z_location double precision, custom_data jsonb) functions/misc/load_events_log_data_from_player__2args.sql
58454 f actors load_full_actors in_ids bigint[] SETOF dune.actordescription functions/actors/load_full_actors__1args.sql
58455 f inventory load_item in_item_id bigint TABLE(item_id bigint, stack_size bigint, quality_level bigint, volume_override real, position_index bigint, template_id text, inventory_id bigint, is_new boolean, acquisition_time bigint, stats jsonb, sub_inventory_id bigint) functions/inventory/load_item__1args.sql
58456 f inventory load_items in_inventory_id bigint TABLE(item_id bigint, stack_size bigint, quality_level bigint, volume_override real, position_index bigint, template_id text, inventory_id bigint, is_new boolean, acquisition_time bigint, stats jsonb, sub_inventory_id bigint) functions/inventory/load_items__1args.sql
58457 f map_areas load_map_areas_entries in_account_id bigint, in_map_name text TABLE(account_id bigint, area_id smallint, time_discovered timestamp without time zone, time_first_entered timestamp without time zone, survey_point_marker_id bigint, items_surveyed_target jsonb, items_surveyed_progress jsonb, map_name text) functions/map_areas/load_map_areas_entries__2args.sql
58458 f markers load_markers in_player_id bigint, in_dimension_id integer, in_map_name text TABLE(out_marker_hash_id integer, out_marker_type text, out_x double precision, out_y double precision, out_z double precision, out_payload_type text, out_area_id smallint, out_area_radius real, out_long_range boolean, out_payload jsonb, out_discovery_level smallint, out_discovery_method smallint, out_player_payload jsonb) functions/markers/load_markers__3args.sql
58459 f partition load_partition_definition_map TABLE(out_partition_id bigint, out_server_id text, out_partition_definition jsonb, out_dimension_index integer, out_blocked boolean, out_label text, out_map text) functions/partition/load_partition_definition_map__0args.sql
58460 f building_blueprint load_placeable in_placeable_id bigint dune.placeablesavedata functions/building_blueprint/load_placeable__1args.sql
58461 f vehicle load_recovered_vehicles in_account_id bigint, in_restore_time_limit integer TABLE(out_vehicle_id bigint, out_class text, out_name text, out_time_stored timestamp without time zone, out_chassis_durability real, out_customization_id text, out_migrated boolean) functions/vehicle/load_recovered_vehicles__2args.sql
58462 f misc load_static_encounter_name in_map_name text, in_package_name text, in_actor_name text TABLE(encounter_name text, waiting_for_reset boolean) functions/misc/load_static_encounter_name__3args.sql
58463 f takeover load_takeoverable_user_ids SETOF dune.takeovercharacterdatacomposite functions/takeover/load_takeoverable_user_ids__0args.sql
58464 f building_blueprint load_totem in_id bigint dune.totemsavedata functions/building_blueprint/load_totem__1args.sql
58465 f travel load_travel_return_info in_player_controller_id bigint TABLE(map text, transform dune.transform) functions/travel/load_travel_return_info__1args.sql
58466 f travel load_travel_to_player_info in_player_controller_id bigint TABLE(map text, transform dune.transform, partition_id bigint, dimension_index integer) functions/travel/load_travel_to_player_info__1args.sql
58467 f vehicle load_vehicle_modules in_vehicle_id bigint TABLE(module_id bigint, template_id text, stats jsonb) functions/vehicle/load_vehicle_modules__1args.sql
58468 f partition load_world_partition in_map_name text, in_server_id text, in_desired_dimension_index bigint, in_desired_partition_id bigint TABLE(partition_id bigint, partition_definition jsonb, dimension_index integer, blocked boolean, label text) functions/partition/load_world_partition__4args.sql
58469 f anticheat log_cheating in_fls_id text, in_cheat_type dune.cheat_type_enum, in_event_time timestamp with time zone void functions/anticheat/log_cheating__3args.sql
58470 f currency log_event_solaris in_function_oid oid, in_message dune.logmessagetype, in_controller_id bigint, in_solaris_balance bigint, in_solaris_delta bigint void functions/currency/log_event_solaris__5args.sql
58471 f character_mod login_account in_user_id text, in_funcom_id text, in_platform_id text, in_platform_name text, in_minimum_returning_player_time_seconds integer, in_character_name text, in_return_dimension_index integer, in_home_dimension_index integer SETOF dune.playerdescription functions/character_mod/login_account__8args.sql
58473 f server mark_server_dead in_server_id text void functions/server/mark_server_dead__1args.sql
58474 f inventory merge_inventory_items in_item_id bigint, in_dst_inventory_id bigint, in_dst_index bigint, in_count bigint bigint functions/inventory/merge_inventory_items__4args.sql
58475 f inventory merge_or_move_inventory_item in_item_id bigint, in_dst_inventory_id bigint, in_dst_index bigint, in_count bigint bigint functions/inventory/merge_or_move_inventory_item__4args.sql
58476 f transfer migrate_character in_account_id bigint, home_dimension integer, max_solaris_allowed bigint void functions/transfer/migrate_character__3args.sql
58477 f transfer migrate_clamp_max_allow_solaris in_pawn_id bigint, max_solaris_allowed bigint void functions/transfer/migrate_clamp_max_allow_solaris__2args.sql
58478 f inventory move_inventory_item in_item_id bigint, in_dst_inventory_id bigint, in_dst_index bigint, in_count bigint bigint functions/inventory/move_inventory_item__4args.sql
58479 f map_areas overmap_delete_player_survival_data in_player_id bigint void functions/map_areas/overmap_delete_player_survival_data__1args.sql
58480 f map_areas overmap_load_player_survival_data in_player_id bigint TABLE(out_vehicle_id bigint, out_has_polar_psu boolean, out_overmap_location dune.vector) functions/map_areas/overmap_load_player_survival_data__1args.sql
58481 f map_areas overmap_save_player_survival_data in_player_id bigint, in_vehicle_id bigint, in_has_polar_psu boolean, in_overmap_location dune.vector void functions/map_areas/overmap_save_player_survival_data__4args.sql
58482 f actors ownership_handle_actor_delete in_player_id bigint void functions/actors/ownership_handle_actor_delete__1args.sql
58483 f misc parties_get_exclusive_operation_lock void functions/misc/parties_get_exclusive_operation_lock__0args.sql
58484 f player_persistence perform_notify_on_character_delete in_user_id text void functions/player_persistence/perform_notify_on_character_delete__1args.sql
58485 f permission permission_actor_create_or_update_base_marker in_actor_id bigint, in_player_id bigint, in_rank smallint void functions/permission/permission_actor_create_or_update_base_marker__3args.sql
58486 f permission permission_actor_destroy in_actor_id bigint void functions/permission/permission_actor_destroy__1args.sql
58487 f permission permission_actor_register in_entry dune.actorpermissionentry, in_owner_rank dune.actorpermissionrankdata void functions/permission/permission_actor_register__2args.sql
58488 f permission permission_actor_takeover in_entry dune.actorpermissionentry, in_owner_rank dune.actorpermissionrankdata void functions/permission/permission_actor_takeover__2args.sql
58489 f permission permission_actor_update_marker_location in_actor_id bigint, in_location_x real, in_location_y real, in_location_z real void functions/permission/permission_actor_update_marker_location__4args.sql
58490 f permission permission_remove_player_rank in_actor_id bigint, in_player_id bigint void functions/permission/permission_remove_player_rank__2args.sql
58491 f permission permission_set_access_level in_actor_id bigint, in_access_level smallint void functions/permission/permission_set_access_level__2args.sql
58492 f permission permission_set_name in_actor_id bigint, in_name text void functions/permission/permission_set_name__2args.sql
58493 f character_mod permission_set_player_rank in_actor_id bigint, in_player_id bigint, in_rank smallint, in_map_id text void functions/character_mod/permission_set_player_rank__4args.sql
58494 f inventory player_purchased_item_from_vendor in_vendor_id text, in_player_id bigint, in_template_id text, in_amount_bought integer void functions/inventory/player_purchased_item_from_vendor__4args.sql
58495 f character_mod player_state_update in_data dune.playerstateupdatedata[] void functions/character_mod/player_state_update__1args.sql
58496 f guild pledge_guild_allegiance in_guild_id bigint, in_guild_leader_player_id bigint, in_neutral_faction_id smallint void functions/guild/pledge_guild_allegiance__3args.sql
58497 f spice_field produce_spicefield_manifest in_map_name text, in_dimension_index integer TABLE(server text, type_id integer, inactive_fields integer, requested_fields integer) functions/spice_field/produce_spicefield_manifest__2args.sql
58498 f guild promote_guild_member in_guild_id bigint, in_player_id bigint, in_new_role smallint void functions/guild/promote_guild_member__3args.sql
58499 f party promote_new_party_leader in_party_id bigint void functions/party/promote_new_party_leader__1args.sql
58500 f party promote_party_leader_to in_party_id bigint, in_player_id bigint void functions/party/promote_party_leader_to__2args.sql
58501 f character_mod purchase_specialization_keystone in_player_id bigint, in_keystone text boolean functions/character_mod/purchase_specialization_keystone__2args.sql
58502 f spice_field record_deactivated_spice_field in_server_id text, in_spicefield_type_id integer void functions/spice_field/record_deactivated_spice_field__2args.sql
58503 f dungeon record_dungeon_completion in_dungeon_id text, in_difficulty integer, in_duration_ms integer, players_ids bigint[] void functions/dungeon/record_dungeon_completion__4args.sql
58504 f player_persistence record_logoff_persistence_end_time in_player_pawn_id bigint, in_logoff_persistence_end_time timestamp without time zone void functions/player_persistence/record_logoff_persistence_end_time__2args.sql
58505 f shifting_sand record_static_shifting_sand in_id text, in_alpha double precision, in_x double precision, in_y double precision, in_last_modified_time bigint void functions/shifting_sand/record_static_shifting_sand__5args.sql
58506 f spice_field record_unreadied_spice_fields in_server_id text, in_spicefield_type_id integer, in_num_unreadied integer void functions/spice_field/record_unreadied_spice_fields__3args.sql
58507 f server register_lore_pickup in_lore_pickup_ids text[] SETOF smallint functions/server/register_lore_pickup__1args.sql
58508 f faction register_new_factions factions text[] TABLE(faction_id smallint, faction_name text) functions/faction/register_new_factions__1args.sql
58509 f journey_progression register_new_tutorials tutorials text[] TABLE(tutorial_id smallint, tutorial_name text) functions/journey_progression/register_new_tutorials__1args.sql
58510 f server register_per_player_lore_pickup in_lore_pickup_ids text[], in_use_temporary boolean SETOF smallint functions/server/register_per_player_lore_pickup__2args.sql
58511 f actors register_spawned_actor in_spawner_id bigint, in_actor_id bigint void functions/actors/register_spawned_actor__2args.sql
58512 f spice_field register_spice_field_server_resources in_server_id text, in_spicefield_type_ids integer[], in_inactive_fields_of_types integer[] void functions/spice_field/register_spice_field_server_resources__3args.sql
58513 f server register_temporary_lore_pickup in_lore_pickup_ids text[] SETOF smallint functions/server/register_temporary_lore_pickup__1args.sql
58514 f guild reject_guild_invite in_invite_id bigint void functions/guild/reject_guild_invite__1args.sql
58515 f actors remove_aborted_authority_transfer_actors in_partition_id bigint SETOF dune.actorspawninfo functions/actors/remove_aborted_authority_transfer_actors__1args.sql
58516 f transfer remove_character_transfer_state in_fls_id text void functions/transfer/remove_character_transfer_state__1args.sql
58517 f communinet remove_communinet_player_channel in_account_id bigint, in_channel_name text void functions/communinet/remove_communinet_player_channel__2args.sql
58518 f guild remove_guild_members in_player_ids bigint[], in_guild_id bigint, in_remove_reason smallint void functions/guild/remove_guild_members__3args.sql
58519 f items_purge remove_items items_to_remove text[] void functions/items_purge/remove_items__1args.sql
58520 f items_purge remove_items_and_recipes items_to_remove text[], recipes_to_remove text[] void functions/items_purge/remove_items_and_recipes__2args.sql
58521 f items_purge remove_items_or_recipes_from_fgl_entities item_or_recipes text[] void functions/items_purge/remove_items_or_recipes_from_fgl_entities__1args.sql
58522 f misc remove_members_offline_for in_interval_seconds integer void functions/misc/remove_members_offline_for__1args.sql
58523 f party remove_party_invite in_invite_id bigint, in_remove_reason smallint void functions/party/remove_party_invite__2args.sql
58524 f party remove_party_member in_player_id bigint, in_remove_reason smallint void functions/party/remove_party_member__2args.sql
58525 f actors remove_recipes_from_actor_properties recipes_to_remove text[] void functions/actors/remove_recipes_from_actor_properties__1args.sql
58526 f items_purge remove_resourcefield_states in_map text, in_dimension_index integer, in_field_ids bigint[] void functions/items_purge/remove_resourcefield_states__3args.sql
58527 f spice_field request_spawn_spice_field in_server_id text, in_spicefield_type_id integer void functions/spice_field/request_spawn_spice_field__2args.sql
58528 f cleanup reset_all_players_from_server_ids_grace_period_and_logoff_timer in_server_id text, in_reset_time timestamp without time zone void functions/cleanup/reset_all_players_from_server_ids_grace_period_and_logoff_timer__2args.sql
58529 f spice_field reset_global_spice_field_state in_map_name text, in_dimension_index integer void functions/spice_field/reset_global_spice_field_state__2args.sql
58530 f journey_progression reset_journey_story_nodes_for_player in_player_id text, in_story_node_ids text[] void functions/journey_progression/reset_journey_story_nodes_for_player__2args.sql
58531 f cleanup reset_server_all_player_access_codes in_account_id bigint void functions/cleanup/reset_server_all_player_access_codes__1args.sql
58532 f character_mod reset_specialization_keystones in_player_id bigint void functions/character_mod/reset_specialization_keystones__1args.sql
58533 f character_mod reset_specialization_tracks in_player_id bigint void functions/character_mod/reset_specialization_tracks__1args.sql
58534 f vehicle restore_backup_vehicle in_account_id bigint, in_server_info dune.serverinfo, in_transform dune.transform bigint functions/vehicle/restore_backup_vehicle__3args.sql
58535 f vehicle restore_recovered_vehicle in_account_id bigint, in_vehicle_id bigint, in_server_info dune.serverinfo, in_transform dune.transform, in_restore_time_limit integer void functions/vehicle/restore_recovered_vehicle__5args.sql
58536 f shifting_sand retrieve_all_static_shifting_sand TABLE(out_id text, out_alpha double precision, out_x double precision, out_y double precision, out_last_modified_time bigint) functions/shifting_sand/retrieve_all_static_shifting_sand__0args.sql
58537 f character_mod returning_player_award_given in_account_id bigint void functions/character_mod/returning_player_award_given__1args.sql
58538 f journey_progression reveal_journey_story_nodes_for_player in_player_id text, in_story_node_ids text[] void functions/journey_progression/reveal_journey_story_nodes_for_player__2args.sql
58539 f actors save_aborted_authority_transfer_actors in_actor_ids bigint[], in_partition_id bigint void functions/actors/save_aborted_authority_transfer_actors__2args.sql
58540 f actors save_actor_dislocation in_actor_id bigint, in_current_server_info dune.serverinfo, in_target_location dune.vector, in_target_dimension_index integer void functions/actors/save_actor_dislocation__4args.sql
58541 f actors save_actors in_server_info dune.serverinfo, in_actors dune.actordescription[], in_actor_state dune.actorstate TABLE(actor_id bigint, current_saved_serial bigint, saved boolean) functions/actors/save_actors__3args.sql
58543 f building_blueprint save_building in_building_id bigint, in_data dune.buildingsavedata void functions/building_blueprint/save_building__2args.sql
58544 f building_blueprint save_building_blueprint_copy in_building_item_id bigint, in_building_blueprint_id bigint, in_building_blueprint_building_data dune.buildingblueprintpiecesaveitemcontainer[], in_building_blueprint_placeable_data dune.buildingblueprintplaceablesaveitemcontainer[], in_building_blueprint_pentashield_data dune.buildingblueprintpentashielditem[] bigint functions/building_blueprint/save_building_blueprint_copy__5args.sql
58545 f schema_meta save_demo_account_time in_fls_id text, in_demo_playtime_seconds integer void functions/schema_meta/save_demo_account_time__2args.sql
58546 f dialogue save_dialogue_data in_player_controller_id bigint, in_met_npcs text[], in_taken_nodes integer[] void functions/dialogue/save_dialogue_data__3args.sql
58547 f inventory save_item in_item dune.inventoryitem void functions/inventory/save_item__1args.sql
58548 f journey_progression save_journey_story_node in_account_id bigint, in_story_node_id text, in_override_reward_block boolean, in_has_pending_reward boolean, in_complete_condition_state jsonb, in_reveal_condition_state jsonb, in_fail_condition_state jsonb, in_metadata_state jsonb, in_reset_group dune.journeystoryresetgroup void functions/journey_progression/save_journey_story_node__9args.sql
58549 f journey_progression save_journey_story_nodes in_account_id bigint, in_journey_data dune.savejourneydata[] void functions/journey_progression/save_journey_story_nodes__2args.sql
58550 f misc save_login_target_dimension in_fls_id text, in_login_target_dimension_index integer void functions/misc/save_login_target_dimension__2args.sql
58551 f markers save_markers in_player_marker_data dune.saveplayermarkerdata[], in_marker_data dune.savemarkerdata[] void functions/markers/save_markers__2args.sql
58552 f journey_progression save_mnemonic_recall_lesson in_account_id bigint, in_lesson_id text, in_lesson_state bigint, in_lesson_progress integer, in_is_new boolean void functions/journey_progression/save_mnemonic_recall_lesson__5args.sql
58561 f building_blueprint save_placeable in_placeable_id bigint, in_data dune.placeablesavedata void functions/building_blueprint/save_placeable__2args.sql
58562 f player_persistence save_player in_player dune.playerdescription boolean functions/player_persistence/save_player__1args.sql
58563 f player_persistence save_player_pawn in_pawn dune.actordescription, in_server_info dune.serverinfo, in_life_state dune.playerlifestate boolean functions/player_persistence/save_player_pawn__3args.sql
58564 f misc save_static_encounter_name in_map_name text, in_package_name text, in_actor_name text, in_encounter_name text void functions/misc/save_static_encounter_name__4args.sql
58565 f misc save_static_encounter_waiting_for_reset in_map_name text, in_package_name text, in_actor_name text, in_waiting_for_reset boolean void functions/misc/save_static_encounter_waiting_for_reset__4args.sql
58571 f building_blueprint save_totem in_id bigint, in_data dune.totemsavedata void functions/building_blueprint/save_totem__2args.sql
58572 f player_persistence save_tracked_journey_cards in_player_id bigint, in_tracked_journey_card text, in_tracked_landsraad_card text void functions/player_persistence/save_tracked_journey_cards__3args.sql
58573 f travel save_travel_return_info in_player_controller_id bigint, in_map text, in_transform dune.transform void functions/travel/save_travel_return_info__3args.sql
58574 f vehicle save_vehicle_modules in_add_list dune.vehiclemodule[], in_delete_list bigint[], in_stat_update dune.itemstatupdate[] SETOF bigint functions/vehicle/save_vehicle_modules__3args.sql
58575 f partition save_world_partition in_map_name text, in_server_id text, in_dimension_index bigint, in_partition_definition jsonb, in_blocked boolean, in_label text bigint functions/partition/save_world_partition__6args.sql
58586 f server server_info_match in_actor dune.actors, in_server_info dune.serverinfo boolean functions/server/server_info_match__2args.sql
58587 f takeover set_account_as_takeoverable in_user_id text, in_new_user_id text void functions/takeover/set_account_as_takeoverable__2args.sql
58588 f farm set_all_inactive_players_in_farm_offline void functions/farm/set_all_inactive_players_in_farm_offline__0args.sql
58589 f battlegroup set_battlegroup_close_date in_close_date timestamp without time zone timestamp without time zone functions/battlegroup/set_battlegroup_close_date__1args.sql
58590 f character_mod set_character_import_state in_fls_id text, in_state dune.transferimportstate void functions/character_mod/set_character_import_state__2args.sql
58591 f character_mod set_character_name in_account_id bigint, in_name text void functions/character_mod/set_character_name__2args.sql
58592 f schema_meta set_demo_state in_user_id text, in_demo_state dune.demostate void functions/schema_meta/set_demo_state__2args.sql
58593 f inventory set_item_tracking_enabled in_enabled boolean void functions/inventory/set_item_tracking_enabled__1args.sql
58594 f faction set_player_faction_reputation in_actor_id bigint, in_faction_id smallint, in_reputation_amount integer void functions/faction/set_player_faction_reputation__3args.sql
58595 f character_mod set_players_from_server_ids_offline in_server_ids text[] void functions/character_mod/set_players_from_server_ids_offline__1args.sql
58596 f character_mod set_specialization_xp_and_level in_player_id bigint, in_track_type dune.specializationtracktype, in_xp_amount integer, in_level real void functions/character_mod/set_specialization_xp_and_level__4args.sql
58597 p encryption setup_user_data_encryption IN in_enable boolean procedures/setup_user_data_encryption__1args.sql
58598 f vehicle store_backup_vehicle in_vehicle_id bigint, in_account_id bigint, in_customization_id text void functions/vehicle/store_backup_vehicle__3args.sql
58599 f vehicle store_recovered_vehicle in_vehicle_id bigint, in_chassis_durability real, in_customization_id text, in_is_migration boolean void functions/vehicle/store_recovered_vehicle__4args.sql
58600 f vehicle store_recovered_vehicles_wiped_before_spawn in_vehicle_ids bigint[], in_delete_items boolean void functions/vehicle/store_recovered_vehicles_wiped_before_spawn__2args.sql
58601 f takeover takeover_account in_user_to_takeover text, in_current_user text void functions/takeover/takeover_account__2args.sql
58602 f taxation taxation_emit_invoices new_tax_invoices dune.taxinvoicedata[] void functions/taxation/taxation_emit_invoices__1args.sql
58603 f taxation taxation_get_all_invoices_for_player in_player_id bigint TABLE(id bigint, totem_id bigint, reference_timestamp bigint, invoice_status smallint, amount integer, actor_name text) functions/taxation/taxation_get_all_invoices_for_player__1args.sql
58604 f taxation taxation_get_all_invoices_for_server map_name text, in_dimension_index integer, in_partition_id bigint TABLE(id bigint, totem_id bigint, reference_timestamp bigint, invoice_status smallint, amount integer, actor_name text) functions/taxation/taxation_get_all_invoices_for_server__3args.sql
58605 f taxation taxation_get_all_invoices_for_totem in_totem_id bigint TABLE(id bigint, totem_id bigint, reference_timestamp bigint, invoice_status smallint, amount integer, actor_name text) functions/taxation/taxation_get_all_invoices_for_totem__1args.sql
58606 f taxation taxation_pay_invoice invoice_id bigint, paid_invoice_status smallint bigint functions/taxation/taxation_pay_invoice__2args.sql
58607 f taxation taxation_remove_invoices invoices_to_remove bigint[] void functions/taxation/taxation_remove_invoices__1args.sql
58608 f taxation taxation_remove_invoices_from_totem totem_actor_id bigint void functions/taxation/taxation_remove_invoices_from_totem__1args.sql
58609 f taxation taxation_update_invoice_status invoices_to_overdue bigint[], invoices_to_defaulted bigint[], overdue_invoice_status smallint, defaulted_invoice_status smallint void functions/taxation/taxation_update_invoice_status__4args.sql
58610 f spice_field try_prime_spicefield in_source_server_id text, in_spicefield_id integer boolean functions/spice_field/try_prime_spicefield__2args.sql
58611 f spice_field try_restart_spicefield in_server_id text, in_spicefield_type_id integer boolean functions/spice_field/try_restart_spicefield__2args.sql
58612 f spice_field try_spawn_spicefield in_source_server_id text, in_spicefield_id integer boolean functions/spice_field/try_spawn_spicefield__2args.sql
58613 f exchange try_update_exchange_categories_hash in_new_hash integer TABLE(item_template_id text, mask integer, depth smallint) functions/exchange/try_update_exchange_categories_hash__1args.sql
58614 f partition unassign_partition in_server_id text boolean functions/partition/unassign_partition__1args.sql
58615 f communinet update_communinet_player_channel in_account_id bigint, in_channel_name text, in_is_tuned boolean void functions/communinet/update_communinet_player_channel__3args.sql
58616 f communinet update_communinet_player_data in_account_id bigint, in_is_active boolean, in_selected_channel_name text void functions/communinet/update_communinet_player_data__3args.sql
58617 f misc update_consumed_per_player_lore in_actor_id bigint, in_consumed_bit_array bit, in_use_temporary boolean void functions/misc/update_consumed_per_player_lore__3args.sql
58618 f journey_progression update_coriolis_for_player in_controller_id bigint, OUT out_was_coriolis_processed boolean boolean functions/journey_progression/update_coriolis_for_player__2args.sql
58619 f player_persistence update_death_location in_pawn dune.actordescription, in_server_info dune.serverinfo, in_life_state dune.playerlifestate void functions/player_persistence/update_death_location__3args.sql
58620 f farm update_farm_state in_server_id text, in_outgoing_s2s_connections integer, in_incoming_s2s_connections integer, in_connected_players integer, in_farm_id text, in_igw_addr inet, in_igw_port integer, in_ready boolean, in_alive boolean, in_game_addr inet, in_game_port integer, in_map text, in_revision integer void functions/farm/update_farm_state__13args.sql
58621 f spice_field update_global_spice_field_rules in_max_globally_primed integer, in_max_globally_active integer, in_spicefield_type_id integer void functions/spice_field/update_global_spice_field_rules__3args.sql
58622 f misc update_inventories_data in_inventory_data_list dune.inventorydata[] void functions/misc/update_inventories_data__1args.sql
58623 f inventory update_inventory in_delete_list bigint[], in_stack_update dune.itemstackupdate[], in_quality_update dune.itemqualityupdate[], in_stat_update dune.itemstatupdate[], in_item_locations dune.inventoryitemlocation[] void functions/inventory/update_inventory__5args.sql
58624 f inventory update_item_locations in_item_locations dune.inventoryitemlocation[] void functions/inventory/update_item_locations__1args.sql
58625 f journey_progression update_journey_story_ids old_story_ids text[], new_story_ids text[] void functions/journey_progression/update_journey_story_ids__2args.sql
58626 f markers update_marker_ids in_old_ids integer[], in_new_ids integer[] void functions/markers/update_marker_ids__2args.sql
58627 f partition update_partition_labels in_allow_overwrite boolean void functions/partition/update_partition_labels__1args.sql
58628 f party update_party_platform_session in_party_id bigint, in_platform_session_id text, in_platform_name text void functions/party/update_party_platform_session__3args.sql
58629 f character_mod update_player_tags in_account_id bigint, tags_to_add text[], tags_to_remove text[] void functions/character_mod/update_player_tags__3args.sql
58630 f items_purge update_removed_items_and_recipes items_removed text[], recipes_removed text[] void functions/items_purge/update_removed_items_and_recipes__2args.sql
58631 f misc update_resourcefield_states in_map text, in_dimension_index integer, in_field_kind_id smallint, in_field_states dune.resourcefieldstateentry[] void functions/misc/update_resourcefield_states__4args.sql
58632 f spawner update_respawn_locations player_id bigint, respawn_locations dune.respawnlocation[] void functions/spawner/update_respawn_locations__2args.sql
58633 f character_mod update_returning_player_status in_user_id text, in_minimum_returning_player_time_seconds integer void functions/character_mod/update_returning_player_status__2args.sql
58634 f misc update_sell_orders_categories category_update_data dune.exchangecategoryupdatedata[] void functions/misc/update_sell_orders_categories__1args.sql
58635 f building_blueprint update_server_building_favorites in_account_id bigint, in_building_types text[] void functions/building_blueprint/update_server_building_favorites__2args.sql
58636 f building_blueprint update_server_learned_building_sets in_account_id bigint, in_learned_building_sets text[] void functions/building_blueprint/update_server_learned_building_sets__2args.sql
58637 f server update_server_learned_new_buildable_pieces in_account_id bigint, in_new_buildable_pieces text[] void functions/server/update_server_learned_new_buildable_pieces__2args.sql
58638 f character_mod update_specialization_refund_id in_player_id bigint, in_refund_id smallint, in_removed_keystones smallint[] void functions/character_mod/update_specialization_refund_id__3args.sql
58639 f spice_field update_spice_field_spawn_state in_is_spawning_active boolean, in_spicefield_type_id integer void functions/spice_field/update_spice_field_spawn_state__2args.sql
58640 f actors update_traveling_actor_dependencies in_dep dune.traveldependency[] void functions/actors/update_traveling_actor_dependencies__1args.sql
58641 f actors update_traveling_actor_tree in_actor_id bigint, in_target_transform dune.transform, in_target_map text, in_target_dimension_index integer, in_target_partition_id bigint TABLE(out_id bigint, out_actor_state text) functions/actors/update_traveling_actor_tree__5args.sql
58642 f schema_meta update_universe_time in_farm_id text TABLE(universe_time_timestamp timestamp without time zone, down_time_accumulation bigint) functions/schema_meta/update_universe_time__1args.sql
58643 f stock_vendor update_vendor_timestamp_for_player in_vendor_id text, in_player_id bigint, in_timestamp bigint void functions/stock_vendor/update_vendor_timestamp_for_player__3args.sql
58644 f misc upgrade_location_data_list in_location_data_list jsonb, in_map_field_name text jsonb functions/misc/upgrade_location_data_list__2args.sql
58645 f misc upgrade_map_name in_map_name text text functions/misc/upgrade_map_name__1args.sql
58646 f misc upgrade_map_value in_value jsonb jsonb functions/misc/upgrade_map_value__1args.sql
58647 f spice_field upsert_spicefield_types in_max_globally_active integer[], in_max_globally_primed integer[], in_field_types text[], in_map_name text, in_dimension_index integer TABLE(type_id integer, max_global integer, max_global_primed integer, spawning_active boolean, out_field_type text) functions/spice_field/upsert_spicefield_types__5args.sql
58648 f map_areas use_sinkchart in_player_id bigint, in_account_id bigint, in_area_id smallint, in_item_id bigint, in_sinkchart_map_name text, in_player_map_name text, in_player_current_dimension integer dune.usesinkchartreturndata functions/map_areas/use_sinkchart__7args.sql
58649 f inventory verify_item_dup_backup_tool in_account_id bigint, in_vehicle_id bigint, in_cheat_type dune.cheat_type_enum void functions/inventory/verify_item_dup_backup_tool__3args.sql
58650 f cleanup wipe_old_events_log in_days_limit integer void functions/cleanup/wipe_old_events_log__1args.sql
58651 f misc zero_transform dune.transform functions/misc/zero_transform__0args.sql
Can't render this file because it contains an unexpected character in line 42 and column 77.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,16 @@
-- assign_actor_id(in_class text) -> bigint
-- oid: 58140 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.assign_actor_id(in_class text)
RETURNS bigint
LANGUAGE plpgsql
AS $function$
DECLARE
new_id BIGINT;
BEGIN
INSERT INTO actors(id) VALUES(DEFAULT) RETURNING id INTO new_id;
PERFORM add_actor_audit(new_id, in_class);
RETURN new_id;
END
$function$

View File

@@ -0,0 +1,15 @@
-- delete_actor_states_travel(in_actor_id bigint) -> void
-- oid: 58199 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.delete_actor_states_travel(in_actor_id bigint)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
WITH
traveling_actor_ids AS (
SELECT t.id FROM get_traveling_non_player_actor_ids(in_actor_id) AS t
)
DELETE FROM actor_state WHERE (actor_id IN (SELECT t.id FROM traveling_actor_ids AS t(id)) OR actor_id = in_actor_id) AND state = 'Travel';
END;
$function$

View File

@@ -0,0 +1,11 @@
-- delete_actors(in_ids bigint[]) -> void
-- oid: 58200 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.delete_actors(in_ids bigint[])
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
DELETE FROM actors WHERE id = ANY(in_ids);
END
$function$

View File

@@ -0,0 +1,47 @@
-- delete_actors_and_respawns_on_server(in_server_info dune.serverinfo, in_vehicle_classes_spawned_on_map text[], in_allow_vehicle_recovery boolean) -> void
-- oid: 58201 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.delete_actors_and_respawns_on_server(in_server_info dune.serverinfo, in_vehicle_classes_spawned_on_map text[], in_allow_vehicle_recovery boolean)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
WITH actors_to_delete AS (
SELECT a.id
FROM actors a
LEFT JOIN actor_state s ON a.id = s.actor_id
WHERE owner_account_id IS NULL
AND s.state IS DISTINCT FROM 'Travel'
AND s.state IS DISTINCT FROM 'VehicleBackup'
AND s.state IS DISTINCT FROM 'VehicleRecovery'
AND server_info_match(a, in_server_info)
AND (
-- Actors that are not vehicles should always be deleted
NOT EXISTS (SELECT 1 FROM vehicles v WHERE v.id = a.id)
-- Only vehicles that are allowed to be spawned on this map should be deleted
OR in_vehicle_classes_spawned_on_map IS NULL -- If the list is NULL all vehicles are allowed
OR a.class = ANY(in_vehicle_classes_spawned_on_map) -- Vehicle type is explicitly allowed on this map
)
ORDER BY a.id FOR UPDATE OF a
),
vehicles_to_recover AS (
SELECT COALESCE(ARRAY_AGG(v.id), ARRAY[]::BIGINT[]) AS ids FROM actors_to_delete a JOIN vehicles v ON (a.id = v.id)
WHERE in_allow_vehicle_recovery
),
recovered_vehicles AS (
SELECT ids, store_recovered_vehicles_wiped_before_spawn(ids) FROM vehicles_to_recover
)
DELETE FROM actors a USING recovered_vehicles rv
WHERE a.id = ANY(SELECT id FROM actors_to_delete)
AND NOT a.id = ANY(rv.ids);
with
deleted_ids as (
DELETE from player_respawn_locations
WHERE map = in_server_info.map AND dimension = in_server_info.dimension_index
returning id
)
update player_state set pending_respawn_location_id=null
where pending_respawn_location_id in (select * from deleted_ids);
END
$function$

View File

@@ -0,0 +1,35 @@
-- delete_markers_return_actor_ids(in_dimension_index integer, in_map_name text, in_marker_ids integer[]) -> TABLE(actor_id bigint, marker_id integer)
-- oid: 58226 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.delete_markers_return_actor_ids(in_dimension_index integer, in_map_name text, in_marker_ids integer[])
RETURNS TABLE(actor_id bigint, marker_id integer)
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN QUERY
-- Lock markers matching query
WITH affected_markers AS (
SELECT * FROM markers JOIN map_names USING(map_name_id)
WHERE (dimension_index = in_dimension_index OR dimension_index = -1)
AND map_names.map_name = in_map_name
AND marker_hash_id = ANY(in_marker_ids)
ORDER BY marker_hash_id, dimension_index FOR UPDATE -- Ordering to avoid deadlocks
),
-- Lock player_markers to be deleted on cascade
referencing_player_markers AS (
SELECT player_id, player_markers.marker_hash_id FROM player_markers, affected_markers
WHERE affected_markers.marker_hash_id = player_markers.marker_hash_id
AND affected_markers.dimension_index = player_markers.dimension_index
AND affected_markers.map_name_id = player_markers.map_name_id
ORDER BY player_id, player_markers.marker_hash_id, player_markers.dimension_index FOR UPDATE -- Ordering to avoid deadlocks
),
-- Delete markers
deleted_markers AS (
DELETE FROM markers USING affected_markers
WHERE affected_markers.marker_hash_id = markers.marker_hash_id
AND affected_markers.dimension_index = markers.dimension_index
AND affected_markers.map_name_id = markers.map_name_id
)
SELECT * FROM referencing_player_markers;
END
$function$

View File

@@ -0,0 +1,13 @@
-- find_actor_by_id(in_id bigint) -> dune.actorspawninfo
-- oid: 58263 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.find_actor_by_id(in_id bigint)
RETURNS dune.actorspawninfo
LANGUAGE plpgsql
AS $function$
begin
return (select (id, class, transform, partition_id, dimension_index)::ActorSpawnInfo
FROM actors WHERE actors.id = in_id
LIMIT 1);
end
$function$

View File

@@ -0,0 +1,13 @@
-- gather_ownerless_actors_on_server(in_server_info dune.serverinfo) -> SETOF dune.actorspawninfo
-- oid: 58266 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.gather_ownerless_actors_on_server(in_server_info dune.serverinfo)
RETURNS SETOF dune.actorspawninfo
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN QUERY
SELECT a.id, a.class as class_name, a.transform, a.partition_id, a.dimension_index FROM actors as a
WHERE a.owner_account_id is null AND server_info_match(a, in_server_info);
END;
$function$

View File

@@ -0,0 +1,16 @@
-- gather_player_linked_actors(in_player_pawn_id bigint) -> SETOF dune.actorspawninfo
-- oid: 58267 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.gather_player_linked_actors(in_player_pawn_id bigint)
RETURNS SETOF dune.actorspawninfo
LANGUAGE plpgsql
AS $function$
begin
return query
select actors.id, actors.class as class_name, actors.transform, actors.partition_id, actors.dimension_index
from actors
left join actor_state on actor_state.actor_id = actors.id
where actors.id in (select id from get_traveling_non_player_actor_ids(in_player_pawn_id)) and actor_state.state = 'Travel' and actors.owner_account_id is null
order by actors.id;
end
$function$

View File

@@ -0,0 +1,25 @@
-- gather_removed_accounts_that_left_orphaned_actors_on_server(in_server_info dune.serverinfo) -> TABLE(account_id bigint, removal_reason text, actors_left dune.orphanedplayeractorinfo[])
-- oid: 58268 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.gather_removed_accounts_that_left_orphaned_actors_on_server(in_server_info dune.serverinfo)
RETURNS TABLE(account_id bigint, removal_reason text, actors_left dune.orphanedplayeractorinfo[])
LANGUAGE plpgsql
AS $function$
BEGIN
return query with
orphaned_actors_per_account as (
SELECT
a.owner_account_id as account_id,
array_agg((a.id, a.class)::OrphanedPlayerActorInfo) as actors_left
FROM actors as a
WHERE
-- not is null instead of is not null to match the index expression
not a.owner_account_id is null
AND NOT EXISTS(select 1 from accounts where id=owner_account_id)
AND server_info_match(a, in_server_info)
GROUP BY a.owner_account_id
)
select orphans.account_id, log.reason, orphans.actors_left
from orphaned_actors_per_account as orphans left join account_removal_log as log using (account_id);
END
$function$

View File

@@ -0,0 +1,15 @@
-- get_account_actor_ids(in_account_id bigint) -> dune.playeractorids
-- oid: 58269 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.get_account_actor_ids(in_account_id bigint)
RETURNS dune.playeractorids
LANGUAGE plpgsql
AS $function$
BEGIN
return (
select (player_controller_id, player_state_id, player_pawn_id)::PlayerActorIds from player_state
where account_id = in_account_id
limit 1
);
END
$function$

View File

@@ -0,0 +1,11 @@
-- get_actor_server_info(in_id bigint) -> dune.serverinfo
-- oid: 58271 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.get_actor_server_info(in_id bigint)
RETURNS dune.serverinfo
LANGUAGE plpgsql
AS $function$
begin
return (select (map, partition_id, dimension_index)::ServerInfo from actors where id=in_id limit 1);
end
$function$

View File

@@ -0,0 +1,11 @@
-- get_registered_spawned_actor(in_spawner_id bigint) -> SETOF bigint
-- oid: 58348 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.get_registered_spawned_actor(in_spawner_id bigint)
RETURNS SETOF bigint
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN QUERY
SELECT actor_id FROM actor_spawner_actors WHERE spawner_id = in_spawner_id;
END; $function$

View File

@@ -0,0 +1,54 @@
-- load_actors(in_actor_ids bigint[], in_actor_state dune.actorstate) -> TABLE(ord bigint, actor_id bigint, generic_data dune.actorgenericdata, serial bigint)
-- oid: 58438 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.load_actors(in_actor_ids bigint[], in_actor_state dune.actorstate DEFAULT 'Default'::dune.actorstate)
RETURNS TABLE(ord bigint, actor_id bigint, generic_data dune.actorgenericdata, serial bigint)
LANGUAGE plpgsql
AS $function$
begin
return query
with
ids as (
select * from unnest(in_actor_ids) with ordinality as t(id, ord)
),
entities as (
select
fgl_bridge.actor_id,
(fgl_bridge.entity_id, fgl_bridge.slot_name, entity_data.components)::FglEntity as data
from
ids
left join actor_fgl_entities as fgl_bridge on ids.id=fgl_bridge.actor_id
left join fgl_entities as entity_data on fgl_bridge.entity_id = entity_data.entity_id
)
select
ids.ord, actors.id,
(
coalesce(array_agg(entities.data) filter (where entities.data is not null), array[]::FglEntity[]),
actors.properties,
actors.gas_attributes,
case
when exists(select 1 from buildings where actors.id = buildings.id) then load_building(actors.id)
end
,
case
when exists(select 1 from placeables where actors.id = placeables.id) then load_placeable(actors.id)
end
,
case
when exists(select 1 from totems where actors.id = totems.id) then load_totem(actors.id)
end
)::ActorGenericData, actors.serial
from
ids
join actors using (id)
left join entities on actors.id = entities.actor_id
where
case when (in_actor_state = 'Default') then
not exists(select 1 from actor_state where actors.id = actor_state.actor_id)
else
exists(select 1 from actor_state where actors.id = actor_state.actor_id and actor_state.state = in_actor_state)
end
group by ids.ord, actors.id, actors.properties, actors.gas_attributes, actors.serial
order by ids.ord;
END
$function$

View File

@@ -0,0 +1,48 @@
-- load_full_actors(in_ids bigint[]) -> SETOF dune.actordescription
-- oid: 58454 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.load_full_actors(in_ids bigint[])
RETURNS SETOF dune.actordescription
LANGUAGE plpgsql
AS $function$
begin
return query
with
ids as (
select * from unnest(in_ids) with ordinality as t(id, ord)
),
entities as (
select
actor_id,
(fgl_bridge.entity_id, fgl_bridge.slot_name, entity_data.components)::FglEntity as data
from
ids
left join actor_fgl_entities as fgl_bridge on ids.id=fgl_bridge.actor_id
left join fgl_entities as entity_data using (entity_id)
)
select
id, "class", "transform", (
coalesce(array_agg(entities.data) filter (where entities.data is not null), array[]::FglEntity[]),
actors.properties,
actors.gas_attributes,
case
when exists(select 1 from buildings where ids.id = buildings.id) then load_building(id)
else null
end,
case
when exists(select 1 from placeables where ids.id = placeables.id) then load_placeable(id)
else null
end
,
case
when exists(select 1 from totems where id = totems.id) then load_totem(id)
end
)::ActorGenericData, actors.serial
from
ids
join actors using (id)
left join entities on id=entities.actor_id
group by ids.ord, id, class, "transform", actors.properties, actors.gas_attributes, actors.serial
order by ids.ord;
end
$function$

View File

@@ -0,0 +1,32 @@
-- ownership_handle_actor_delete(in_player_id bigint) -> void
-- oid: 58482 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.ownership_handle_actor_delete(in_player_id bigint)
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE
owned_totem_ids BIGINT[];
actors_with_permission BIGINT[];
BEGIN
-- Get owner entity ids (totems) where in_player_id is the owner
SELECT ARRAY_AGG(owner_entity_id) into owned_totem_ids
FROM permission_actor_rank
JOIN permission_actor ON actor_id = permission_actor_id
JOIN placeables on placeables.id = permission_actor_id
WHERE player_id = in_player_id AND rank = 1::smallint; -- 1:owner
-- Get actors where in_player_id is the owner
SELECT ARRAY_AGG(permission_actor_id) into actors_with_permission
FROM permission_actor_rank WHERE player_id = in_player_id AND rank = 1::smallint; -- 1:owner
-- Remove all permissions for those actors
IF cardinality(actors_with_permission) > 0 THEN
DELETE FROM permission_actor_rank WHERE permission_actor_id = ANY(actors_with_permission);
DELETE FROM MARKERS WHERE marker_hash_id = ANY(actors_with_permission);
PERFORM pg_notify('permission_notify_channel', format('owner_delete#{"PlayerId" : %s}', in_player_id));
END IF;
END
$function$

View File

@@ -0,0 +1,10 @@
-- register_spawned_actor(in_spawner_id bigint, in_actor_id bigint) -> void
-- oid: 58511 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.register_spawned_actor(in_spawner_id bigint, in_actor_id bigint)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
INSERT INTO actor_spawner_actors(spawner_id, actor_id) VALUES(in_spawner_id, in_actor_id);
END $function$

View File

@@ -0,0 +1,19 @@
-- remove_aborted_authority_transfer_actors(in_partition_id bigint) -> SETOF dune.actorspawninfo
-- oid: 58515 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.remove_aborted_authority_transfer_actors(in_partition_id bigint)
RETURNS SETOF dune.actorspawninfo
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN QUERY
WITH removed_actors AS (
DELETE FROM actor_state WHERE actor_state.state = 'AbortedAuthorityTransfer'
RETURNING actor_state.actor_id
)
SELECT a.id, a.class AS class_name, a.transform, a.partition_id, a.dimension_index
FROM actors AS a
INNER JOIN removed_actors ON a.id = removed_actors.actor_id
WHERE a.partition_id = in_partition_id;
END
$function$

View File

@@ -0,0 +1,30 @@
-- remove_recipes_from_actor_properties(recipes_to_remove text[]) -> void
-- oid: 58525 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.remove_recipes_from_actor_properties(recipes_to_remove text[])
RETURNS void
LANGUAGE plpgsql
AS $function$
begin
with actors_properties as (
select id, properties->'CraftingRecipesLibraryActorComponent'->'m_KnownItemRecipes' as recipes
from actors
),
modified_actors_properties as (
select id, (
select jsonb_agg(recipe)
from jsonb_array_elements(actors_properties.recipes) as recipe
where not (recipe->'BaseRecipeId'->>'Name' = any(recipes_to_remove))
) as filtered_recipes
from actors_properties
)
update actors
set properties = jsonb_set(
actors.properties,
'{CraftingRecipesLibraryActorComponent,m_KnownItemRecipes}',
coalesce(modified_actors_properties.filtered_recipes, '[]'::jsonb)
)
from modified_actors_properties
where actors.id = modified_actors_properties.id;
end;
$function$

View File

@@ -0,0 +1,15 @@
-- save_aborted_authority_transfer_actors(in_actor_ids bigint[], in_partition_id bigint) -> void
-- oid: 58539 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.save_aborted_authority_transfer_actors(in_actor_ids bigint[], in_partition_id bigint)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
INSERT INTO actor_state(actor_id, state)
SELECT a.id, 'AbortedAuthorityTransfer'
FROM actors AS a
WHERE a.id = ANY(in_actor_ids) AND a.partition_id = in_partition_id
ON CONFLICT DO NOTHING;
END
$function$

View File

@@ -0,0 +1,23 @@
-- save_actor_dislocation(in_actor_id bigint, in_current_server_info dune.serverinfo, in_target_location dune.vector, in_target_dimension_index integer) -> void
-- oid: 58540 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.save_actor_dislocation(in_actor_id bigint, in_current_server_info dune.serverinfo, in_target_location dune.vector, in_target_dimension_index integer)
RETURNS void
LANGUAGE plpgsql
AS $function$
begin
update actors
set
transform = (in_target_location, (transform).rotation),
dimension_index = in_target_dimension_index,
partition_id = null
where id = in_actor_id
and map = (in_current_server_info).map
and dimension_index = (in_current_server_info).dimension_index
and (
partition_id is null
or (in_current_server_info).partition_id is null
or partition_id = (in_current_server_info).partition_id
);
end
$function$

View File

@@ -0,0 +1,132 @@
-- save_actors(in_server_info dune.serverinfo, in_actors dune.actordescription[], in_actor_state dune.actorstate) -> TABLE(actor_id bigint, current_saved_serial bigint, saved boolean)
-- oid: 58541 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.save_actors(in_server_info dune.serverinfo, in_actors dune.actordescription[], in_actor_state dune.actorstate DEFAULT 'Default'::dune.actorstate)
RETURNS TABLE(actor_id bigint, current_saved_serial bigint, saved boolean)
LANGUAGE plpgsql
AS $function$
BEGIN
return query with
input_actors as (
select * from unnest(in_actors)
),
valid_input_actors as (
select input_actors.id from input_actors
left join actor_state on input_actors.id = actor_state.actor_id
where actor_state.state = in_actor_state or (in_actor_state = 'Default' and actor_state.actor_id is null)
),
serial_checks as (
select
input.id,
input.serial as input_serial,
coalesce(actors.serial, 0) as saved_serial,
input.serial >= coalesce(actors.serial, 0) and input.id in (select id from valid_input_actors) as should_save
from
input_actors as input left join actors using (id)
),
actors_to_save as (
select i.* from input_actors as i join serial_checks as c using (id) where c.should_save
),
upsert_actors as (
insert into actors(
"id", "class", "transform",
"gas_attributes",
"properties",
"map", "partition_id", "dimension_index",
"serial"
)
select
i.id, i.class_name, i.transform,
(i.generic_data).gas_attribute_sets_json, (i.generic_data).properties_json,
in_server_info.map, in_server_info.partition_id, coalesce(in_server_info.dimension_index, 0),
i.serial
from actors_to_save as i
on conflict (id) do update
set
"class" = EXCLUDED.class, "transform" = case when EXCLUDED.transform is null or (EXCLUDED.transform).location = (zero_transform()).location then actors.transform else EXCLUDED.transform end,
"gas_attributes" = EXCLUDED.gas_attributes, "properties" = EXCLUDED.properties,
"map" = EXCLUDED.map, "partition_id" = EXCLUDED.partition_id, "dimension_index" = EXCLUDED.dimension_index,
"serial" = EXCLUDED.serial
returning id
),
fgl_entity_data as (
select id as actor_id, (u).entity_id, (u).slot_name, (u).components_json as components
from (select id, unnest((generic_data).entities) as u from actors_to_save) q
),
missing_entities as (
select entity_id
from actors_to_save join actor_fgl_entities as existing on (actors_to_save.id = existing.actor_id)
where not exists(select 1 from fgl_entity_data as updated where updated.entity_id=existing.entity_id)
),
delete_missing_entity_links as (
delete from actor_fgl_entities as existing using missing_entities
where existing.entity_id=missing_entities.entity_id
returning existing.entity_id as deleted_entity_id
),
delete_missing_entities as (
delete from fgl_entities as existing using missing_entities
where existing.entity_id=missing_entities.entity_id
),
upsert_entities as (
insert into fgl_entities("entity_id", "components")
select entity_id, components from fgl_entity_data
on conflict (entity_id) do update
set components=EXCLUDED.components
returning entity_id
),
upsert_entity_links as (
insert into actor_fgl_entities("actor_id", "entity_id", "slot_name")
select fgl_entity_data.actor_id, fgl_entity_data.entity_id, fgl_entity_data.slot_name
from fgl_entity_data left join upsert_entities using (entity_id)
-- HACK: this is a temporary fix until we do TECH-23063
where not entity_id in (select deleted_entity_id from delete_missing_entity_links)
on conflict (entity_id) do update
set
actor_id=EXCLUDED.actor_id,
slot_name=EXCLUDED.slot_name
returning actor_fgl_entities.actor_id, actor_fgl_entities.entity_id
),
all_actor_entities as (
select fgl_entity_data.actor_id as id, array_agg(entity_id) as entity_ids
from fgl_entity_data
left join upsert_entities using (entity_id)
left join upsert_entity_links using (entity_id)
group by fgl_entity_data.actor_id
),
extra_data as (
select
input_actors.id,
serial_checks.saved_serial,
(serial_checks.should_save) as saved,
(input_actors.generic_data).building_actor_data as building_data,
(input_actors.generic_data).placeable_actor_data as placeable_data,
(input_actors.generic_data).totem_actor_data as totem_data,
coalesce(all_actor_entities.entity_ids, array[]::int[]) as entity_ids
from
serial_checks
left join input_actors using(id)
left join upsert_actors using(id) -- this is needed for dependency
left join all_actor_entities using(id) -- this is needed for dependency only
),
save_extras as (
select
extra_data.id,
extra_data.saved_serial,
extra_data.saved,
case when extra_data.saved and building_data is not null then
save_building(id, building_data)
end,
case when extra_data.saved and placeable_data is not null then
save_placeable(id, placeable_data)
end,
case when extra_data.saved and totem_data is not null then
save_totem(id, totem_data)
end,
entity_ids
from extra_data
)
select id, saved_serial, save_extras.saved from save_extras;
END
$function$

View File

@@ -0,0 +1,47 @@
-- update_traveling_actor_dependencies(in_dep dune.traveldependency[]) -> void
-- oid: 58640 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.update_traveling_actor_dependencies(in_dep dune.traveldependency[])
RETURNS void
LANGUAGE plpgsql
AS $function$
begin
with valid_ids as (
with d as (select * from unnest(in_dep))
select d.id from d where d.id is not null
union
select d.parent_id from d where d.parent_id is not null
),
valid_ids_plus_dep as (
select * from valid_ids
union
select tap.id from travel_actor_parent as tap where tap.parent_id in (select * from valid_ids)
),
-- remove valid ids and connected dependencies from actor_state
delete_actor_state_ids AS (
delete from actor_state as acs
where acs.actor_id in (select * from valid_ids_plus_dep) and acs.state = 'Travel'
)
-- remove valid ids and connected dependencies from any other dependency tree
delete from travel_actor_parent
where id in (select * from valid_ids_plus_dep);
-- add/update dependencies with valid parent and child ids
with valid_dep as (
select a1.id as id, a2.id as parent_id, d.is_instigator
from unnest(in_dep) d
left join actors as a1
on d.id = a1.id
left join actors as a2
on d.parent_id = a2.id
where
a1.id is not null
and a2.id is not null
)
insert into travel_actor_parent (id, parent_id, is_instigator)
select * from valid_dep
on conflict (id) do update set
"parent_id" = excluded.parent_id,
"is_instigator" = excluded.is_instigator;
end
$function$

View File

@@ -0,0 +1,39 @@
-- update_traveling_actor_tree(in_actor_id bigint, in_target_transform dune.transform, in_target_map text, in_target_dimension_index integer, in_target_partition_id bigint) -> TABLE(out_id bigint, out_actor_state text)
-- oid: 58641 kind: FUNCTION category: actors
CREATE OR REPLACE FUNCTION dune.update_traveling_actor_tree(in_actor_id bigint, in_target_transform dune.transform, in_target_map text, in_target_dimension_index integer, in_target_partition_id bigint)
RETURNS TABLE(out_id bigint, out_actor_state text)
LANGUAGE plpgsql
AS $function$
begin
RETURN query WITH
traveling_actor_ids AS (
SELECT t.id FROM get_traveling_actor_ids(in_actor_id) AS t
),
invalid_traveling_actor_ids AS (
SELECT id, actor_state.state::TEXT FROM traveling_actor_ids
INNER JOIN actor_state ON actor_state.actor_id = traveling_actor_ids.id
WHERE actor_state.state != 'Travel'
),
valid_traveling_actor_ids AS (
SELECT id FROM traveling_actor_ids
WHERE NOT EXISTS (SELECT 1 FROM invalid_traveling_actor_ids)
),
insert_actor_state AS (
INSERT INTO actor_state(actor_id, state)
SELECT id, 'Travel' FROM valid_traveling_actor_ids
ON CONFLICT DO NOTHING
),
update_actors AS (
UPDATE actors
SET
transform = in_target_transform,
dimension_index = in_target_dimension_index,
map = in_target_map,
partition_id = in_target_partition_id
FROM valid_traveling_actor_ids
WHERE actors.id = valid_traveling_actor_ids.id
)
SELECT * FROM invalid_traveling_actor_ids;
end
$function$

View File

@@ -0,0 +1,11 @@
-- add_actor_audit(in_id bigint, in_class text) -> void
-- oid: 58118 kind: FUNCTION category: anticheat
CREATE OR REPLACE FUNCTION dune.add_actor_audit(in_id bigint, in_class text)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
INSERT INTO actor_audit("id", "class") VALUES(in_id, in_class) ON CONFLICT(id) DO NOTHING;
END
$function$

View File

@@ -0,0 +1,19 @@
-- flag_player_as_cheater(in_account_id bigint, in_cheat_type dune.cheat_type_enum) -> void
-- oid: 58265 kind: FUNCTION category: anticheat
CREATE OR REPLACE FUNCTION dune.flag_player_as_cheater(in_account_id bigint, in_cheat_type dune.cheat_type_enum)
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE
v_FLS_id TEXT;
BEGIN
SELECT acc."user"
INTO v_FLS_id
FROM accounts acc
WHERE acc.id = in_account_id
LIMIT 1;
PERFORM log_cheating(v_FLS_id, in_cheat_type);
END;
$function$

View File

@@ -0,0 +1,21 @@
-- log_cheating(in_fls_id text, in_cheat_type dune.cheat_type_enum, in_event_time timestamp with time zone) -> void
-- oid: 58469 kind: FUNCTION category: anticheat
CREATE OR REPLACE FUNCTION dune.log_cheating(in_fls_id text, in_cheat_type dune.cheat_type_enum, in_event_time timestamp with time zone DEFAULT now())
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
-- Insert into suspicious_be
INSERT INTO cheater_tracking (
event_time,
fls_id,
cheat_type
) VALUES (
in_event_time,
in_fls_id,
in_cheat_type
);
END;
$function$

View File

@@ -0,0 +1,19 @@
-- base_backup_delete(in_base_backup_id bigint) -> void
-- oid: 58141 kind: FUNCTION category: base_backup
CREATE OR REPLACE FUNCTION dune.base_backup_delete(in_base_backup_id bigint)
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE
actors_to_destroy BIGINT[];
BEGIN
DELETE FROM actors a WHERE id = ANY(
SELECT actor_id
FROM base_backup_linked_actors bbla
WHERE bbla.id = in_base_backup_id
);
DELETE FROM base_backups WHERE id = in_base_backup_id;
END
$function$

View File

@@ -0,0 +1,15 @@
-- base_backup_find_totems_from_player_owner(in_player_id bigint) -> TABLE(totem_id bigint)
-- oid: 58142 kind: FUNCTION category: base_backup
CREATE OR REPLACE FUNCTION dune.base_backup_find_totems_from_player_owner(in_player_id bigint)
RETURNS TABLE(totem_id bigint)
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN QUERY
SELECT t.id
FROM totems t
JOIN permission_actor_rank par ON par.permission_actor_id = t.id
WHERE par.player_id = in_player_id AND par.rank = 1;
END;
$function$

View File

@@ -0,0 +1,42 @@
-- base_backup_finish_placing(in_base_backup_id bigint) -> void
-- oid: 58143 kind: FUNCTION category: base_backup
CREATE OR REPLACE FUNCTION dune.base_backup_finish_placing(in_base_backup_id bigint)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
WITH base_info AS (
SELECT
bb.id AS base_backup_id,
a.partition_id,
a.dimension_index,
a.map
FROM
base_backups bb
JOIN actors a on bb.player_id = a.id
WHERE
bb.id = in_base_backup_id
)
UPDATE actors
SET
partition_id = base_info.partition_id,
dimension_index = base_info.dimension_index,
map = base_info.map
FROM
base_backup_linked_actors bbl
JOIN base_info ON bbl.id = base_info.base_backup_id
WHERE
actors.id = bbl.actor_id;
DELETE FROM actor_state a
WHERE actor_id = ANY(
SELECT actor_id
FROM base_backup_linked_actors bbla
WHERE bbla.id = in_base_backup_id
);
DELETE FROM base_backups
WHERE id = in_base_backup_id;
END
$function$

View File

@@ -0,0 +1,16 @@
-- base_backup_get_actors_to_spawn(in_base_backup_id bigint) -> SETOF dune.actorspawninfo
-- oid: 58144 kind: FUNCTION category: base_backup
CREATE OR REPLACE FUNCTION dune.base_backup_get_actors_to_spawn(in_base_backup_id bigint)
RETURNS SETOF dune.actorspawninfo
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN QUERY
SELECT a.id, a.class as class_name, a.transform, a.partition_id, a.dimension_index
FROM actors as a
WHERE a.id IN (
SELECT actor_id FROM base_backup_linked_actors as bbla WHERE bbla.id = in_base_backup_id
);
END
$function$

View File

@@ -0,0 +1,24 @@
-- base_backup_get_available_backups(in_player_id bigint) -> TABLE(id bigint, base_backup_name text, totem_id bigint, totem_buildable_type text, landclaim_original_global_location real[], base_backup_map text)
-- oid: 58145 kind: FUNCTION category: base_backup
CREATE OR REPLACE FUNCTION dune.base_backup_get_available_backups(in_player_id bigint)
RETURNS TABLE(id bigint, base_backup_name text, totem_id bigint, totem_buildable_type text, landclaim_original_global_location real[], base_backup_map text)
LANGUAGE plpgsql
AS $function$
begin
RETURN QUERY
SELECT
bb.id,
bb.base_backup_name,
t.id AS totem_id,
p.building_type,
t.landclaim_original_global_location,
a.map
FROM base_backups bb
JOIN base_backup_linked_actors bbla ON bbla.id = bb.id
JOIN totems t ON bbla.actor_id = t.id
JOIN actors a ON a.id = t.id
JOIN placeables p ON p.id = a.id
WHERE bb.player_id = in_player_id;
END
$function$

View File

@@ -0,0 +1,30 @@
-- base_backup_get_buildable_data(in_base_backup_id bigint) -> TABLE(buildable_type text, total_count integer)
-- oid: 58146 kind: FUNCTION category: base_backup
CREATE OR REPLACE FUNCTION dune.base_backup_get_buildable_data(in_base_backup_id bigint)
RETURNS TABLE(buildable_type text, total_count integer)
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN QUERY
SELECT t.buildable_type, SUM(t.cnt)::INT AS total_count
FROM (
SELECT bi.building_type AS buildable_type, COUNT(*) AS cnt
FROM base_backup_linked_actors bla
JOIN building_instances bi ON bla.actor_id = bi.building_id
WHERE
bla.id = in_base_backup_id AND
(bi.building_flags IS NULL OR (bi.building_flags & (1 << 2) = 0 AND bi.building_flags & (1 << 7) = 0)) -- flag 2 and 7 not enabled, which relates to holograms and extensions
GROUP BY bi.building_type
UNION ALL
SELECT p.building_type AS buildable_type, COUNT(*) AS cnt
FROM base_backup_linked_actors bla
JOIN placeables p ON bla.actor_id = p.id
WHERE bla.id = in_base_backup_id AND p.is_hologram = FALSE
GROUP BY p.building_type
) t
GROUP BY t.buildable_type;
END
$function$

View File

@@ -0,0 +1,42 @@
-- base_backup_get_data(in_base_backup_id bigint) -> dune.getbasebackupdata
-- oid: 58147 kind: FUNCTION category: base_backup
CREATE OR REPLACE FUNCTION dune.base_backup_get_data(in_base_backup_id bigint)
RETURNS dune.getbasebackupdata
LANGUAGE plpgsql
AS $function$
DECLARE
base_backup_name TEXT;
totem_data BaseBackupTotemData;
buildings_array BaseBackupBuildingItem[];
placeables_array BaseBackupPlaceableItem[];
BEGIN
SELECT bb.base_backup_name
INTO base_backup_name
FROM base_backups bb
WHERE bb.id = in_base_backup_id;
totem_data := base_backup_get_totem_data(in_base_backup_id);
-- building pieces
SELECT array_agg((bi.building_id, bi.instance_id, bi.building_type, bi.transform, bi.building_flags)::BaseBackupBuildingItem)
into buildings_array
FROM
building_instances bi
JOIN base_backup_linked_actors bbla ON bi.building_id = bbla.actor_id
WHERE bbla.id = in_base_backup_id;
-- placeables
SELECT array_agg((p.building_type, a.transform)::BaseBackupPlaceableItem)
into placeables_array
FROM
placeables p
JOIN actors a ON p.id = a.id
JOIN base_backup_linked_actors bbla ON a.id = bbla.actor_id
WHERE
bbla.id = in_base_backup_id;
return ROW(base_backup_name, totem_data, buildings_array, placeables_array)::GetBaseBackupData;
END
$function$

View File

@@ -0,0 +1,26 @@
-- base_backup_get_totem_data(in_base_backup_id bigint) -> dune.basebackuptotemdata
-- oid: 58148 kind: FUNCTION category: base_backup
CREATE OR REPLACE FUNCTION dune.base_backup_get_totem_data(in_base_backup_id bigint)
RETURNS dune.basebackuptotemdata
LANGUAGE plpgsql
AS $function$
DECLARE
totem_id BIGINT;
result BaseBackupTotemData;
BEGIN
SELECT t.id
INTO totem_id
FROM totems t JOIN base_backup_linked_actors bbla ON t.id = bbla.actor_id
WHERE bbla.id = in_base_backup_id
LIMIT 1;
IF totem_id IS NULL THEN
RAISE EXCEPTION 'No totem found for base_backup id %', in_base_backup_id;
END IF;
result := base_backup_get_totem_data_from_totem_id(totem_id);
RETURN result;
END;
$function$

View File

@@ -0,0 +1,42 @@
-- base_backup_get_totem_data_from_totem_id(in_totem_id bigint) -> dune.basebackuptotemdata
-- oid: 58149 kind: FUNCTION category: base_backup
CREATE OR REPLACE FUNCTION dune.base_backup_get_totem_data_from_totem_id(in_totem_id bigint)
RETURNS dune.basebackuptotemdata
LANGUAGE plpgsql
AS $function$
DECLARE
result BaseBackupTotemData;
BEGIN
SELECT
t.id,
p.building_type,
a.map,
t.landclaim_original_global_location,
t.landclaim_original_global_yaw_rotation,
t.landclaim_vertical_level
INTO
result.totem_actor_id,
result.totem_building_type,
result.totem_map,
result.landclaim_original_global_location,
result.landclaim_original_global_yaw_rotation,
result.landclaim_vertical_level
FROM totems t
JOIN placeables p ON p.id = t.id
JOIN actors a ON a.id = t.id
WHERE t.id = in_totem_id
LIMIT 1;
IF result.totem_actor_id IS NULL THEN
RAISE EXCEPTION 'No totem found for totem_id %', in_totem_id;
END IF;
SELECT array_agg(ROW(grid_location_x, grid_location_y)::SMALLINTPOINT)
INTO result.landclaim_grid
FROM landclaim_segments s
WHERE s.totem_id = result.totem_actor_id;
RETURN result;
END;
$function$

View File

@@ -0,0 +1,24 @@
-- base_backup_get_totem_id(backup_id bigint) -> bigint
-- oid: 58150 kind: FUNCTION category: base_backup
CREATE OR REPLACE FUNCTION dune.base_backup_get_totem_id(backup_id bigint)
RETURNS bigint
LANGUAGE plpgsql
AS $function$
DECLARE
result BIGINT;
BEGIN
SELECT t.id
INTO result
FROM totems t
JOIN base_backup_linked_actors bbla ON t.id = bbla.actor_id
WHERE bbla.id = backup_id
LIMIT 1;
IF result IS NULL THEN
RAISE EXCEPTION 'No totem found for base_backup id %', backup_id;
END IF;
RETURN result;
END;
$function$

View File

@@ -0,0 +1,38 @@
-- base_backup_recycle(in_base_backup_id bigint, in_target_inventory_id bigint) -> integer
-- oid: 58151 kind: FUNCTION category: base_backup
CREATE OR REPLACE FUNCTION dune.base_backup_recycle(in_base_backup_id bigint, in_target_inventory_id bigint)
RETURNS integer
LANGUAGE plpgsql
AS $function$
DECLARE
base_backup_items_moved INT;
BEGIN
UPDATE items
SET inventory_id = in_target_inventory_id
FROM
inventories inv
JOIN base_backup_linked_actors bbla ON inv.actor_id = bbla.actor_id
WHERE
items.inventory_id = inv.id
AND bbla.id = in_base_backup_id;
get diagnostics base_backup_items_moved = ROW_COUNT;
-- Re-organize the index of all the items
UPDATE items
SET position_index = new_index
FROM (
SELECT
id,
ROW_NUMBER() OVER (ORDER BY position_index) - 1 AS new_index
FROM items
WHERE inventory_id = in_target_inventory_id
) AS sub
WHERE items.id = sub.id;
PERFORM base_backup_delete(in_base_backup_id);
return base_backup_items_moved;
END
$function$

View File

@@ -0,0 +1,58 @@
-- base_backup_save(in_player_actor_id bigint, in_base_backup_name text, in_building_pieces_to_link dune.basebackupbuildingitem[], in_placeables_to_link bigint[], in_placeables_to_remove_totem_owner bigint[]) -> bigint
-- oid: 58152 kind: FUNCTION category: base_backup
CREATE OR REPLACE FUNCTION dune.base_backup_save(in_player_actor_id bigint, in_base_backup_name text, in_building_pieces_to_link dune.basebackupbuildingitem[], in_placeables_to_link bigint[], in_placeables_to_remove_totem_owner bigint[])
RETURNS bigint
LANGUAGE plpgsql
AS $function$
DECLARE
v_backup_id BIGINT;
totem_id BIGINT;
BEGIN
-- Find and Validate the Totem exists in the list
SELECT t.id INTO totem_id
FROM totems t
JOIN unnest(in_placeables_to_link) AS ai(actor_id) ON t.id = ai.actor_id
LIMIT 1;
IF totem_id IS NULL THEN
RAISE EXCEPTION 'No totem found for base_backup_save';
END IF;
INSERT INTO base_backups(player_id, base_backup_name)
VALUES (in_player_actor_id, in_base_backup_name) RETURNING id INTO v_backup_id;
-- for each building_id, create a new actor for those building pieces and then assign that new building_id to the building pieces.
with
input as (select DISTINCT building_id from unnest(in_building_pieces_to_link)),
instances_input as (select building_id, instance_id from unnest(in_building_pieces_to_link)),
new_actor_ids as (select nextval('actors_id_seq') as new_id, building_id as old_id from input),
_copy_building_actors as (
insert into actors("id", "class", "map", "transform", "partition_id", "dimension_index")
select i.new_id, a."class", a."map", a."transform", a."partition_id", a."dimension_index"
from new_actor_ids i join actors a on (i.old_id = a.id)),
_insert_actor_states as (insert into actor_state(actor_id, state) select new_id, 'BaseBackup' from new_actor_ids),
_insert_buildings as (insert into buildings("id") select new_id from new_actor_ids),
_insert_base_backup_linked_actors as (insert into base_backup_linked_actors("id", "actor_id") select v_backup_id, new_id from new_actor_ids)
update building_instances bi set building_id = ids.new_id from new_actor_ids ids join instances_input i on (ids.old_id = i.building_id) where bi.building_id = ids.old_id and bi.instance_id = i.instance_id;
-- Link all placeables to the linked_base_backup_id and set them to BaseBackup ActorState in actor_state
INSERT INTO base_backup_linked_actors(id, actor_id)
SELECT v_backup_id, unnest(in_placeables_to_link);
INSERT INTO actor_state(actor_id, state)
SELECT unnest(in_placeables_to_link), 'BaseBackup'::ActorState;
UPDATE placeables
SET owner_entity_id = NULL
WHERE id = ANY(in_placeables_to_remove_totem_owner);
-- We need to remove permissions for the Totem
PERFORM permission_actor_destroy(totem_id);
-- Remove all invoices from the totem
PERFORM taxation_remove_invoices_from_totem(totem_id);
RETURN v_backup_id;
END
$function$

View File

@@ -0,0 +1,13 @@
-- base_backup_save_all_totems_from_player_owner(in_player_id bigint) -> TABLE(base_backup_id bigint)
-- oid: 58153 kind: FUNCTION category: base_backup
CREATE OR REPLACE FUNCTION dune.base_backup_save_all_totems_from_player_owner(in_player_id bigint)
RETURNS TABLE(base_backup_id bigint)
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN QUERY
SELECT base_backup_save_from_totem(in_player_id, totem_id)
FROM base_backup_find_totems_from_player_owner(in_player_id);
END;
$function$

View File

@@ -0,0 +1,47 @@
-- base_backup_save_from_totem(in_player_id bigint, totem_id bigint) -> bigint
-- oid: 58154 kind: FUNCTION category: base_backup
CREATE OR REPLACE FUNCTION dune.base_backup_save_from_totem(in_player_id bigint, totem_id bigint)
RETURNS bigint
LANGUAGE plpgsql
AS $function$
DECLARE
totem_entity_id BIGINT;
totem_name TEXT;
building_pieces_to_link BaseBackupBuildingItem[];
placeables_to_link BIGINT[];
placeables_to_remove_totem_owner BIGINT[];
BEGIN
SELECT entity_id INTO totem_entity_id
FROM actor_fgl_entities
WHERE actor_id = totem_id;
SELECT COALESCE(actor_name, '') INTO totem_name
FROM permission_actor
WHERE actor_id = totem_id
LIMIT 1;
SELECT array_agg((bi.building_id, bi.instance_id, bi.building_type, bi.transform, bi.building_flags)::BaseBackupBuildingItem)
INTO building_pieces_to_link
FROM building_instances bi
WHERE bi.owner_entity_id = totem_entity_id;
SELECT array_agg(p.id)
INTO placeables_to_link
FROM placeables p
WHERE (p.owner_entity_id = totem_entity_id AND p.has_buildable_support = TRUE) OR p.id = totem_id;
SELECT array_agg(p.id)
INTO placeables_to_remove_totem_owner
FROM placeables p
WHERE p.owner_entity_id = totem_entity_id AND p.has_buildable_support = FALSE AND p.id != totem_id;
RETURN base_backup_save(
in_player_id,
totem_name,
building_pieces_to_link,
placeables_to_link,
placeables_to_remove_totem_owner
);
END;
$function$

View File

@@ -0,0 +1,11 @@
-- get_battlegroup_close_date() -> timestamp without time zone
-- oid: 58286 kind: FUNCTION category: battlegroup
CREATE OR REPLACE FUNCTION dune.get_battlegroup_close_date()
RETURNS timestamp without time zone
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN (SELECT farm_variables.battlegroup_close_date from farm_variables);
END
$function$

View File

@@ -0,0 +1,13 @@
-- set_battlegroup_close_date(in_close_date timestamp without time zone) -> timestamp without time zone
-- oid: 58589 kind: FUNCTION category: battlegroup
CREATE OR REPLACE FUNCTION dune.set_battlegroup_close_date(in_close_date timestamp without time zone)
RETURNS timestamp without time zone
LANGUAGE plpgsql
AS $function$
BEGIN
INSERT INTO farm_variables (one_row, battlegroup_close_date) VALUES (true,in_close_date)
ON CONFLICT (one_row) DO UPDATE SET battlegroup_close_date = in_close_date;
RETURN (select * from get_battlegroup_close_date());
END
$function$

View File

@@ -0,0 +1,16 @@
-- _building_validate_totem_owner_id(in_totem_owner_id bigint) -> bigint
-- oid: 58094 kind: FUNCTION category: building_blueprint
CREATE OR REPLACE FUNCTION dune._building_validate_totem_owner_id(in_totem_owner_id bigint)
RETURNS bigint
LANGUAGE sql
BEGIN ATOMIC
SELECT
CASE
WHEN (in_totem_owner_id = 0) THEN NULL::bigint
WHEN (EXISTS ( SELECT 1
FROM dune.fgl_entities
WHERE (fgl_entities.entity_id = _building_validate_totem_owner_id.in_totem_owner_id))) THEN in_totem_owner_id
ELSE NULL::bigint
END AS "case";
END

View File

@@ -0,0 +1,16 @@
-- _placeable_validate_totem_owner_id(in_totem_owner_id bigint) -> bigint
-- oid: 58112 kind: FUNCTION category: building_blueprint
CREATE OR REPLACE FUNCTION dune._placeable_validate_totem_owner_id(in_totem_owner_id bigint)
RETURNS bigint
LANGUAGE sql
BEGIN ATOMIC
SELECT
CASE
WHEN (in_totem_owner_id = 0) THEN NULL::bigint
WHEN (EXISTS ( SELECT 1
FROM dune.fgl_entities
WHERE (fgl_entities.entity_id = _placeable_validate_totem_owner_id.in_totem_owner_id))) THEN in_totem_owner_id
ELSE NULL::bigint
END AS "case";
END

View File

@@ -0,0 +1,11 @@
-- delete_building_blueprint(in_building_item_id bigint) -> void
-- oid: 58209 kind: FUNCTION category: building_blueprint
CREATE OR REPLACE FUNCTION dune.delete_building_blueprint(in_building_item_id bigint)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
DELETE FROM building_blueprints WHERE id = in_building_item_id;
END
$function$

View File

@@ -0,0 +1,33 @@
-- get_building_blueprint_copy_data(in_building_blueprint_id bigint) -> dune.buildingblueprintgetcopydata
-- oid: 58289 kind: FUNCTION category: building_blueprint
CREATE OR REPLACE FUNCTION dune.get_building_blueprint_copy_data(in_building_blueprint_id bigint)
RETURNS dune.buildingblueprintgetcopydata
LANGUAGE plpgsql
AS $function$
DECLARE
buildings_array BuildingBlueprintItem[];
placeables_array BuildingBlueprintPlaceableItem[];
pentashields_array BuildingBlueprintPentashieldItem[];
BEGIN
-- All Building Pieces
SELECT array_agg((instance_id, building_type, transform, provides_stability, health, hologram)::BuildingBlueprintItem)
into buildings_array
FROM building_blueprint_instances
WHERE building_blueprint_id = in_building_blueprint_id;
-- All Placeables
SELECT array_agg((placeable_id, building_type, transform, hologram)::BuildingBlueprintPlaceableItem)
into placeables_array
FROM building_blueprint_placeables
WHERE building_blueprint_id = in_building_blueprint_id;
-- Pentashields
SELECT array_agg((placeable_id, scale)::BuildingBlueprintPentashieldItem)
into pentashields_array
FROM building_blueprint_pentashields
WHERE building_blueprint_id = in_building_blueprint_id;
return ROW(buildings_array, placeables_array, pentashields_array)::BuildingBlueprintGetCopyData;
END
$function$

View File

@@ -0,0 +1,11 @@
-- get_building_favorites(in_account_id bigint) -> TABLE(building_types text[])
-- oid: 58290 kind: FUNCTION category: building_blueprint
CREATE OR REPLACE FUNCTION dune.get_building_favorites(in_account_id bigint)
RETURNS TABLE(building_types text[])
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN QUERY
SELECT building_favorites.building_types FROM building_favorites WHERE account_id = in_account_id;
END; $function$

View File

@@ -0,0 +1,19 @@
-- get_building_id(in_actor_id bigint, in_class text) -> dune.buildinggetidcomposite
-- oid: 58291 kind: FUNCTION category: building_blueprint
CREATE OR REPLACE FUNCTION dune.get_building_id(in_actor_id bigint, in_class text)
RETURNS dune.buildinggetidcomposite
LANGUAGE plpgsql
AS $function$
BEGIN
IF not exists(select 1 from buildings where "id" = in_actor_id) THEN
if in_actor_id is null or in_actor_id = 0 then
in_actor_id := (SELECT assign_actor_id(in_class));
end if;
INSERT INTO buildings("id") VALUES(in_actor_id);
END IF;
return ROW(in_actor_id)::BuildingGetIdComposite;
END
$function$

View File

@@ -0,0 +1,20 @@
-- get_placeable_id(in_actor_id bigint, in_class text, in_building_type text) -> dune.placeablegetidcomposite
-- oid: 58330 kind: FUNCTION category: building_blueprint
CREATE OR REPLACE FUNCTION dune.get_placeable_id(in_actor_id bigint, in_class text, in_building_type text)
RETURNS dune.placeablegetidcomposite
LANGUAGE plpgsql
AS $function$
DECLARE
placeable_id BIGINT;
BEGIN
SELECT INTO placeable_id id FROM placeables WHERE "id" = in_actor_id;
IF placeable_id IS NULL THEN
SELECT assign_actor_id(in_class) id INTO placeable_id;
INSERT INTO placeables("id", "building_type") VALUES(placeable_id, in_building_type);
END IF;
return ROW(placeable_id)::PlaceableGetIdComposite;
END
$function$

View File

@@ -0,0 +1,11 @@
-- load_building(in_building_id bigint) -> dune.buildingsavedata
-- oid: 58449 kind: FUNCTION category: building_blueprint
CREATE OR REPLACE FUNCTION dune.load_building(in_building_id bigint)
RETURNS dune.buildingsavedata
LANGUAGE sql
BEGIN ATOMIC
RETURN ( SELECT ROW(array_agg(ROW(building_instances.instance_id, building_instances.building_type, building_instances.transform, building_instances.owner_entity_id, building_instances.building_flags, building_instances.health, building_instances.shelter, building_instances.stabilization_begin_timespan, building_instances.stabilization_end_timespan, building_instances.stabilization_state, building_instances.sand_buildup)::dune.buildinginstance), ARRAY[]::integer[], ARRAY[]::dune.buildinginstanceupdateowner[], ARRAY[]::dune.buildinginstanceupdatestabilization[], ARRAY[]::dune.buildinginstanceupdatehealth[], ARRAY[]::dune.buildinginstanceupdateshelter[], ARRAY[]::dune.buildinginstanceupdatesandbuildup[], ARRAY[]::dune.buildinginstanceupdatebuildingflags[], ARRAY[]::dune.buildinginstanceupdatetransform[])::dune.buildingsavedata AS "row"
FROM dune.building_instances
WHERE (building_instances.building_id = load_building.in_building_id));
END

View File

@@ -0,0 +1,23 @@
-- load_placeable(in_placeable_id bigint) -> dune.placeablesavedata
-- oid: 58460 kind: FUNCTION category: building_blueprint
CREATE OR REPLACE FUNCTION dune.load_placeable(in_placeable_id bigint)
RETURNS dune.placeablesavedata
LANGUAGE plpgsql
AS $function$
DECLARE
result PlaceableSaveData;
BEGIN
SELECT
owner_entity_id as in_owner_entity_id,
health as in_health,
building_type as in_building_type,
has_hit_ground as in_has_hit_ground,
has_buildable_support as in_has_buildable_support,
is_hologram as in_is_hologram
INTO result
FROM placeables
WHERE id = in_placeable_id;
return result;
END
$function$

View File

@@ -0,0 +1,21 @@
-- load_totem(in_id bigint) -> dune.totemsavedata
-- oid: 58464 kind: FUNCTION category: building_blueprint
CREATE OR REPLACE FUNCTION dune.load_totem(in_id bigint)
RETURNS dune.totemsavedata
LANGUAGE plpgsql
AS $function$
DECLARE
result TotemSaveData;
BEGIN
SELECT
landclaim_vertical_level,
last_backup_timestamp,
landclaim_original_global_location,
landclaim_original_global_yaw_rotation
INTO result
FROM totems
WHERE id = in_id;
return result;
END
$function$

View File

@@ -0,0 +1,143 @@
-- save_building(in_building_id bigint, in_data dune.buildingsavedata) -> void
-- oid: 58543 kind: FUNCTION category: building_blueprint
CREATE OR REPLACE FUNCTION dune.save_building(in_building_id bigint, in_data dune.buildingsavedata)
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE
instance BUILDINGINSTANCE;
instance_to_remove INTEGER;
instance_owner BuildingInstanceUpdateOwner;
BEGIN
-- ADD
IF array_length(in_data.in_add_building_data, 1) > 0 THEN
INSERT INTO building_instances(
"building_id",
"instance_id",
"building_type",
"transform",
"owner_entity_id",
"building_flags",
"health",
"shelter",
"stabilization_begin_timespan",
"stabilization_end_timespan",
"stabilization_state",
"sand_buildup"
)
SELECT
in_building_id,
add_data.instance_id,
add_data.building_type,
add_data.transform,
_building_validate_totem_owner_id(add_data.owner_entity_id),
add_data.building_flags,
add_data.health,
add_data.shelter,
add_data.stabilization_begin_timespan,
add_data.stabilization_end_timespan,
add_data.stabilization_state,
add_data.sand_buildup
FROM unnest(in_data.in_add_building_data) as add_data
ON CONFLICT ("building_id", "instance_id")
DO UPDATE SET
"building_type" = (instance).building_type,
"transform" = (instance).transform,
"owner_entity_id" = _building_validate_totem_owner_id((instance).owner_entity_id),
"building_flags" = (instance).building_flags,
"health" = (instance).health,
"shelter" = (instance).shelter,
"stabilization_begin_timespan" = (instance).stabilization_begin_timespan,
"stabilization_end_timespan" = (instance).stabilization_end_timespan,
"stabilization_state" = (instance).stabilization_state,
"sand_buildup" = (instance).sand_buildup;
END IF;
-- REMOVE
IF array_length(in_data.in_remove_building_data, 1) > 0 THEN
DELETE FROM building_instances
WHERE building_instances."building_id" = in_building_id AND building_instances."instance_id" = ANY(in_data.in_remove_building_data);
END IF;
-- OWNER. 99.99% of the time, this will only have 1 Owner Array.
IF array_length(in_data.in_building_owner_data, 1) > 0 THEN
FOREACH instance_owner IN ARRAY in_data.in_building_owner_data LOOP
WITH owner_changes_table AS
(
SELECT unnest(instance_owner.instances) AS instance_id, instance_owner.owner_entity_id AS owner_entity_id
)
UPDATE building_instances
SET owner_entity_id = _building_validate_totem_owner_id(owner_changes_table.owner_entity_id)
FROM owner_changes_table
WHERE building_instances.building_id = in_building_id AND building_instances.instance_id = owner_changes_table.instance_id;
END LOOP;
END IF;
-- STABILIZATION
IF array_length(in_data.in_building_stabilization_data, 1) > 0 THEN
WITH stabilization_changes_table AS
(
select * FROM unnest(in_data.in_building_stabilization_data)
)
UPDATE building_instances SET stabilization_begin_timespan = stabilization_changes_table.stabilization_begin_timespan, stabilization_end_timespan = stabilization_changes_table.stabilization_end_timespan, stabilization_state = stabilization_changes_table.stabilization_state
FROM stabilization_changes_table
WHERE building_instances.building_id = in_building_id AND building_instances.instance_id = stabilization_changes_table.instance_id;
END IF;
-- HEALTH
IF array_length(in_data.in_building_health_data, 1) > 0 THEN
WITH health_changes_table AS
(
select * FROM unnest(in_data.in_building_health_data)
)
UPDATE building_instances SET health = health_changes_table.health
FROM health_changes_table
WHERE building_instances.building_id = in_building_id AND building_instances.instance_id = health_changes_table.instance_id;
END IF;
-- SHELTER
IF array_length(in_data.in_building_shelter_data, 1) > 0 THEN
WITH shelter_changes_table AS
(
select * FROM unnest(in_data.in_building_shelter_data)
)
UPDATE building_instances SET shelter = shelter_changes_table.shelter
FROM shelter_changes_table
WHERE building_instances.building_id = in_building_id AND building_instances.instance_id = shelter_changes_table.instance_id;
END IF;
-- SAND BUILDUP
IF array_length(in_data.in_building_sand_buildup_data, 1) > 0 THEN
WITH sand_buildup_changes_table AS
(
select * FROM unnest(in_data.in_building_sand_buildup_data)
)
UPDATE building_instances SET sand_buildup = sand_buildup_changes_table.sand_buildup
FROM sand_buildup_changes_table
WHERE building_instances.building_id = in_building_id AND building_instances.instance_id = sand_buildup_changes_table.instance_id;
END IF;
-- BUILDING FLAGS
IF array_length(in_data.in_building_building_flags_data, 1) > 0 THEN
WITH building_flags_changes_table AS
(
select * FROM unnest(in_data.in_building_building_flags_data)
)
UPDATE building_instances SET building_flags = building_flags_changes_table.building_flags
FROM building_flags_changes_table
WHERE building_instances.building_id = in_building_id AND building_instances.instance_id = building_flags_changes_table.instance_id;
END IF;
-- BUILDING TRANSFORM
IF array_length(in_data.in_building_building_transform_data, 1) > 0 THEN
WITH building_flags_transform_table AS
(
select * FROM unnest(in_data.in_building_building_transform_data)
)
UPDATE building_instances SET transform = building_flags_transform_table.transform
FROM building_flags_transform_table
WHERE building_instances.building_id = in_building_id AND building_instances.instance_id = building_flags_transform_table.instance_id;
END IF;
END
$function$

View File

@@ -0,0 +1,50 @@
-- save_building_blueprint_copy(in_building_item_id bigint, in_building_blueprint_id bigint, in_building_blueprint_building_data dune.buildingblueprintpiecesaveitemcontainer[], in_building_blueprint_placeable_data dune.buildingblueprintplaceablesaveitemcontainer[], in_building_blueprint_pentashield_data dune.buildingblueprintpentashielditem[]) -> bigint
-- oid: 58544 kind: FUNCTION category: building_blueprint
CREATE OR REPLACE FUNCTION dune.save_building_blueprint_copy(in_building_item_id bigint, in_building_blueprint_id bigint, in_building_blueprint_building_data dune.buildingblueprintpiecesaveitemcontainer[], in_building_blueprint_placeable_data dune.buildingblueprintplaceablesaveitemcontainer[], in_building_blueprint_pentashield_data dune.buildingblueprintpentashielditem[])
RETURNS bigint
LANGUAGE plpgsql
AS $function$
DECLARE
return_id BIGINT;
BEGIN
IF in_building_blueprint_id != 0 THEN
DELETE FROM building_blueprints WHERE id = in_building_blueprint_id;
END IF;
INSERT INTO building_blueprints(id, item_id, player_id, building_blueprint_map)
VALUES(DEFAULT, in_building_item_id, NULL, '') RETURNING id INTO return_id;
-- All Building Pieces
INSERT INTO building_blueprint_instances(building_blueprint_id, instance_id, building_type, transform, provides_stability, health, hologram)
SELECT
return_id,
piece_data.instance_id,
container_data.building_type,
piece_data.transform,
piece_data.provides_stability,
piece_data.health,
True
FROM
unnest(in_building_blueprint_building_data) AS container_data
CROSS JOIN LATERAL unnest(container_data.building_pieces) AS piece_data;
-- All Placeables
INSERT INTO building_blueprint_placeables(building_blueprint_id, placeable_id, building_type, transform, hologram)
SELECT
return_id,
placeable_data.placeable_id,
container_data.building_type,
placeable_data.transform,
True
FROM
unnest(in_building_blueprint_placeable_data) AS container_data
CROSS JOIN LATERAL unnest(container_data.placeables) AS placeable_data;
-- Pentashields
INSERT INTO building_blueprint_pentashields("building_blueprint_id", "placeable_id", "scale")
SELECT return_id as building_blueprint_id, placeable_id, scale FROM unnest(in_building_blueprint_pentashield_data);
RETURN return_id;
END
$function$

View File

@@ -0,0 +1,10 @@
-- save_placeable(in_placeable_id bigint, in_data dune.placeablesavedata) -> void
-- oid: 58561 kind: FUNCTION category: building_blueprint
CREATE OR REPLACE FUNCTION dune.save_placeable(in_placeable_id bigint, in_data dune.placeablesavedata)
RETURNS void
LANGUAGE sql
BEGIN ATOMIC
INSERT INTO dune.placeables (id, owner_entity_id, health, building_type, has_hit_ground, has_buildable_support, is_hologram)
VALUES (save_placeable.in_placeable_id, dune._placeable_validate_totem_owner_id((save_placeable.in_data).in_owner_entity_id), (save_placeable.in_data).in_health, (save_placeable.in_data).in_building_type, (save_placeable.in_data).in_has_hit_ground, (save_placeable.in_data).in_has_buildable_support, (save_placeable.in_data).in_is_hologram) ON CONFLICT(id) DO UPDATE SET owner_entity_id = excluded.owner_entity_id, health = excluded.health, building_type = excluded.building_type, has_hit_ground = excluded.has_hit_ground, has_buildable_support = excluded.has_buildable_support, is_hologram = excluded.is_hologram;
END

View File

@@ -0,0 +1,10 @@
-- save_totem(in_id bigint, in_data dune.totemsavedata) -> void
-- oid: 58571 kind: FUNCTION category: building_blueprint
CREATE OR REPLACE FUNCTION dune.save_totem(in_id bigint, in_data dune.totemsavedata)
RETURNS void
LANGUAGE sql
BEGIN ATOMIC
INSERT INTO dune.totems (id, landclaim_vertical_level, last_backup_timestamp, landclaim_original_global_location, landclaim_original_global_yaw_rotation)
VALUES (save_totem.in_id, (save_totem.in_data).landclaim_vertical_level, (save_totem.in_data).last_backup_timestamp, (save_totem.in_data).landclaim_original_global_location, (save_totem.in_data).landclaim_original_global_yaw_rotation) ON CONFLICT(id) DO UPDATE SET landclaim_vertical_level = excluded.landclaim_vertical_level, last_backup_timestamp = excluded.last_backup_timestamp, landclaim_original_global_location = excluded.landclaim_original_global_location, landclaim_original_global_yaw_rotation = excluded.landclaim_original_global_yaw_rotation;
END

View File

@@ -0,0 +1,12 @@
-- update_server_building_favorites(in_account_id bigint, in_building_types text[]) -> void
-- oid: 58635 kind: FUNCTION category: building_blueprint
CREATE OR REPLACE FUNCTION dune.update_server_building_favorites(in_account_id bigint, in_building_types text[])
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
INSERT INTO building_favorites(account_id, building_types)
VALUES(in_account_id, in_building_types)
ON CONFLICT(account_id) DO UPDATE SET building_types = in_building_types WHERE building_favorites.account_id = in_account_id;
END; $function$

View File

@@ -0,0 +1,12 @@
-- update_server_learned_building_sets(in_account_id bigint, in_learned_building_sets text[]) -> void
-- oid: 58636 kind: FUNCTION category: building_blueprint
CREATE OR REPLACE FUNCTION dune.update_server_learned_building_sets(in_account_id bigint, in_learned_building_sets text[])
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
INSERT INTO building_progression(account_id, learned_building_sets)
VALUES(in_account_id, in_learned_building_sets)
ON CONFLICT(account_id) DO UPDATE SET learned_building_sets = in_learned_building_sets WHERE building_progression.account_id = in_account_id;
END; $function$

View File

@@ -0,0 +1,14 @@
-- delete_character(in_actor_id bigint) -> void
-- oid: 58210 kind: FUNCTION category: character_mod
CREATE OR REPLACE FUNCTION dune.delete_character(in_actor_id bigint)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
DELETE FROM actors WHERE id = in_actor_id;
DELETE FROM properties WHERE object_id = in_actor_id;
DELETE FROM fgl_data WHERE object_id = in_actor_id;
DELETE FROM actor_transform WHERE actor_id = in_actor_id;
END
$function$

View File

@@ -0,0 +1,16 @@
-- initialize_specialization_keystones(in_keystones text[]) -> TABLE(keystone_id smallint, keystone_name text)
-- oid: 58388 kind: FUNCTION category: character_mod
CREATE OR REPLACE FUNCTION dune.initialize_specialization_keystones(in_keystones text[])
RETURNS TABLE(keystone_id smallint, keystone_name text)
LANGUAGE plpgsql
AS $function$
BEGIN
LOCK TABLE specialization_keystones_map IN SHARE ROW EXCLUSIVE MODE;
-- Note: we filter the existing values before the insert, otherwise it bumps the generated id in specialization_keystones_map
INSERT INTO specialization_keystones_map (name)
SELECT in_keystone_name FROM UNNEST(in_keystones) in_keystone_name LEFT JOIN specialization_keystones_map k ON in_keystone_name = k.name
WHERE name IS NULL;
RETURN QUERY SELECT * from specialization_keystones_map;
END $function$

View File

@@ -0,0 +1,166 @@
-- login_account(in_user_id text, in_funcom_id text, in_platform_id text, in_platform_name text, in_minimum_returning_player_time_seconds integer, in_character_name text, in_return_dimension_index integer, in_home_dimension_index integer) -> SETOF dune.playerdescription
-- oid: 58471 kind: FUNCTION category: character_mod
CREATE OR REPLACE FUNCTION dune.login_account(in_user_id text, in_funcom_id text, in_platform_id text, in_platform_name text, in_minimum_returning_player_time_seconds integer, in_character_name text, in_return_dimension_index integer, in_home_dimension_index integer)
RETURNS SETOF dune.playerdescription
LANGUAGE plpgsql
AS $function$
DECLARE
user_account_id BigInt;
BEGIN
PERFORM update_returning_player_status(in_user_id, in_minimum_returning_player_time_seconds);
return query with
acc as (
INSERT INTO encrypted_accounts("id", "user", "platform_id", "platform_name", "encrypted_funcom_id")
VALUES (default, in_user_id, in_platform_id, in_platform_name, encrypt_user_data(in_funcom_id))
ON CONFLICT ("user") DO UPDATE SET
encrypted_funcom_id = excluded.encrypted_funcom_id,
platform_id = excluded.platform_id,
platform_name = excluded.platform_name
RETURNING id, encrypted_accounts.user
),
actor_ids as (
-- TODO: unite this with accounts. One table to rule them all (until we want multiple chars per account)
SELECT
coalesce(player_controller_id, nextval('actors_id_seq')) as controller,
coalesce(player_state_id, nextval('actors_id_seq')) as state,
coalesce(player_pawn_id, nextval('actors_id_seq')) as pawn
from acc left join player_state on player_state.account_id = acc.id
),
actors_insert as (
INSERT INTO actors("id", "owner_account_id")
select unnest(array[controller, pawn, state]), acc.id from actor_ids, acc
ON CONFLICT DO NOTHING
returning id
),
insert_actor_audit_log as (
insert into actor_audit("id", "class")
select
unnest(array[controller, pawn, state]) as id,
unnest(array['Controller', 'Pawn', 'State']) as clas
from actor_ids
on conflict do nothing
),
demo as (
UPDATE demo_users
SET demo_state = CASE
WHEN demo_playtime_seconds IS NOT NULL THEN 'Demo'::DemoState
ELSE demo_state
END
WHERE fls_id = in_user_id
RETURNING fls_id, demo_playtime_seconds, demo_state
),
player_state_insert as (
INSERT INTO encrypted_player_state(
"account_id", "encrypted_character_name", "online_status",
"player_controller_id", "player_pawn_id", "player_state_id",
"return_dimension_index", "home_dimension_index", "last_login_time"
)
select
id, case
when in_character_name is not null then encrypt_user_data(in_character_name)
when encrypted_player_state.encrypted_character_name is null then encrypt_user_data('<TEMP>')
else encrypted_player_state.encrypted_character_name
end,
'Online', controller, pawn, state, in_return_dimension_index, in_home_dimension_index, now()
from acc left join encrypted_player_state on acc.id = encrypted_player_state.account_id, actor_ids
ON CONFLICT ("account_id")
DO UPDATE SET
online_status = 'Online',
"return_dimension_index" = coalesce(in_return_dimension_index, encrypted_player_state.return_dimension_index),
"home_dimension_index" = coalesce(in_home_dimension_index, encrypted_player_state.home_dimension_index),
"last_login_time" = now()
RETURNING
account_id,
"return_dimension_index",
"home_dimension_index"
),
inserted_count_dummy as (
select count(*) from actors_insert
),
player_actors as (
select array_agg(full_actors.*) as actors
from
-- We need to refer 'returning' from inserts to ensure order of with statements
inserted_count_dummy,
actor_ids,
load_full_actors(array[actor_ids.controller, actor_ids.state, actor_ids.pawn]) as full_actors
),
pawn_info as (
select id, (map, partition_id, dimension_index)::ServerInfo as server_info
from actor_ids join actors on actors.id=actor_ids.pawn
),
respawn_locations as (
SELECT acc.id as account_id, get_respawn_locations(acc.id) as locations
FROM acc
),
this_player_tags as (
select
acc.id as account_id,
array_agg(tag) as tags
from acc join player_tags as tgs on tgs.account_id=acc.id
group by acc.id
),
keystones as (
select player_id, array_agg(keystone_id) as purchased_keystones
from purchased_specialization_keystones
group by player_id
),
tracks as (
select player_id, array_agg(track_info) as progression_tracks
from (
select player_id, (track_type, xp_amount, level)::SpecializationTrackInfo as track_info
from specialization_tracks
)
group by player_id
),
journey_nodes as (
SELECT acc.id as account_id, get_login_journey_nodes(acc.id) as journey_nodes_data
FROM acc
),
journey_nodes_cooldown as (
SELECT acc.id as account_id, get_login_journey_nodes_cooldown(acc.id) as journey_nodes_cooldown_data
FROM acc
)
select
acc.id,
player_actors.actors[1], player_actors.actors[2], player_actors.actors[3],
coalesce(pawn_info.server_info, (null, null, null)::ServerInfo),
(
coalesce(respawn_locations.locations, array[]::RespawnLocation[]),
player_state.pending_respawn_location_id
)::RespawnInfo,
coalesce(player_state.life_state, 'Alive'),
coalesce(this_player_tags.tags, array[]::Text[]),
player_state_insert.return_dimension_index,
player_state.death_location,
player_state_insert.home_dimension_index,
demo.demo_state,
demo.demo_playtime_seconds,
(progression_tracks, purchased_keystones, refund_id)::SpecializationInfo,
(
coalesce(journey_nodes.journey_nodes_data, array[]::JourneyNodeInfo[]),
coalesce(journey_nodes_cooldown.journey_nodes_cooldown_data, array[]::JourneyNodeCooldownInfo[]),
coalesce(journey_tracked_cards.tracked_journey_card, ''),
coalesce(journey_tracked_cards.tracked_landsraad_card, '')
)::JourneyInfo,
(player_state.last_returning_player_event_time AT TIME ZONE 'UTC')::TIMESTAMP,
(player_state.last_returning_player_awarded_time AT TIME ZONE 'UTC')::TIMESTAMP
from
acc left join player_state on player_state.account_id = acc.id
left join respawn_locations on respawn_locations.account_id = acc.id
left join this_player_tags on this_player_tags.account_id = acc.id
left join player_state_insert on player_state_insert.account_id = acc.id
left join demo on demo.fls_id = acc.user
left join journey_nodes on journey_nodes.account_id = acc.id
left join journey_nodes_cooldown on journey_nodes_cooldown.account_id = acc.id
left join journey_tracked_cards on journey_tracked_cards.player_id = player_state.player_controller_id
left join keystones on keystones.player_id = player_state.player_controller_id
left join tracks on tracks.player_id = player_state.player_controller_id
left join specialization_refund_id on specialization_refund_id.player_id = player_state.player_controller_id,
player_actors left join pawn_info on (player_actors.actors[3].id = pawn_info.id)
limit 1;
END
$function$

View File

@@ -0,0 +1,28 @@
-- permission_set_player_rank(in_actor_id bigint, in_player_id bigint, in_rank smallint, in_map_id text) -> void
-- oid: 58493 kind: FUNCTION category: character_mod
CREATE OR REPLACE FUNCTION dune.permission_set_player_rank(in_actor_id bigint, in_player_id bigint, in_rank smallint, in_map_id text)
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE
found_actor_id BIGINT;
found_guild_id BIGINT;
BEGIN
SELECT permission_actor_id FROM permission_actor_rank WHERE permission_actor_id = in_actor_id AND player_id = in_player_id INTO found_actor_id;
IF NOT FOUND THEN
INSERT INTO permission_actor_rank("permission_actor_id", "player_id", "rank") VALUES(in_actor_id, in_player_id, in_rank);
ELSE
UPDATE permission_actor_rank SET rank = in_rank WHERE permission_actor_rank.permission_actor_id = in_actor_id AND player_id = in_player_id;
END IF;
SELECT guild_id FROM guild_members WHERE player_id = in_actor_id INTO found_guild_id;
IF NOT FOUND THEN
found_guild_id := 0;
END IF;
PERFORM permission_actor_create_or_update_base_marker(in_actor_id, in_player_id, in_rank);
PERFORM pg_notify('permission_notify_channel', format('set_rank#{"ActorId" : %s , "PlayerId" : %s, "PlayerGuildId" : %s, "Rank" : %s, "Map" : %s}', in_actor_id, in_player_id, found_guild_id, in_rank, in_map_id));
END
$function$

View File

@@ -0,0 +1,47 @@
-- player_state_update(in_data dune.playerstateupdatedata[]) -> void
-- oid: 58495 kind: FUNCTION category: character_mod
CREATE OR REPLACE FUNCTION dune.player_state_update(in_data dune.playerstateupdatedata[])
RETURNS void
LANGUAGE sql
AS $function$
-- online -> offline
with
update_data as (select * from unnest(in_data))
update encrypted_player_state as ps
set online_status = update_data.online_status
from update_data
where ps.player_controller_id = update_data.player_controller_id
and ps.server_id = update_data.current_server_id -- make sure we don't update if the player is already online somewhere else
and update_data.online_status != 'Online'
and ps.online_status != update_data.online_status; -- avoid unnecessary data changes
-- offline -> online
with
update_data as (select * from unnest(in_data))
update encrypted_player_state as ps
set online_status = update_data.online_status,
server_id = update_data.current_server_id
from update_data
where ps.player_controller_id = update_data.player_controller_id
and update_data.online_status = 'Online'
and (ps.server_id is null or ps.server_id != update_data.current_server_id or ps.online_status != update_data.online_status); -- avoid unnecessary data changes
with
update_data as (select * from unnest(in_data))
update encrypted_player_state as ps
set reconnect_grace_period_end = update_data.reconnect_grace_period_end
from update_data
where ps.player_controller_id = update_data.player_controller_id
and not update_data.reconnect_grace_period_end is null;
with
update_data as (select * from unnest(in_data))
update encrypted_player_state as ps
set
last_avatar_activity = (update_data.on_disconnect).last_online_time AT TIME ZONE 'UTC',
previous_server_partition_id = (update_data.on_disconnect).previous_server_partition_id
from update_data
where ps.player_controller_id = update_data.player_controller_id
and not update_data.on_disconnect is null;
$function$

View File

@@ -0,0 +1,26 @@
-- purchase_specialization_keystone(in_player_id bigint, in_keystone text) -> boolean
-- oid: 58501 kind: FUNCTION category: character_mod
CREATE OR REPLACE FUNCTION dune.purchase_specialization_keystone(in_player_id bigint, in_keystone text)
RETURNS boolean
LANGUAGE plpgsql
AS $function$
DECLARE
found_id SMALLINT;
inserted_id SMALLINT;
BEGIN
SELECT id FROM specialization_keystones_map INTO found_id WHERE name = in_keystone;
IF found_id IS NULL THEN
RETURN FALSE;
END IF;
INSERT INTO purchased_specialization_keystones (player_id, keystone_id) VALUES (in_player_id, found_id)
ON CONFLICT DO NOTHING
RETURNING keystone_id INTO inserted_id;
IF inserted_id IS NULL THEN
RETURN FALSE;
END IF;
RETURN TRUE;
END $function$

View File

@@ -0,0 +1,10 @@
-- reset_specialization_keystones(in_player_id bigint) -> void
-- oid: 58532 kind: FUNCTION category: character_mod
CREATE OR REPLACE FUNCTION dune.reset_specialization_keystones(in_player_id bigint)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
DELETE FROM purchased_specialization_keystones WHERE player_id = in_player_id;
END $function$

View File

@@ -0,0 +1,10 @@
-- reset_specialization_tracks(in_player_id bigint) -> void
-- oid: 58533 kind: FUNCTION category: character_mod
CREATE OR REPLACE FUNCTION dune.reset_specialization_tracks(in_player_id bigint)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
DELETE FROM specialization_tracks WHERE player_id = in_player_id;
END $function$

View File

@@ -0,0 +1,9 @@
-- returning_player_award_given(in_account_id bigint) -> void
-- oid: 58537 kind: FUNCTION category: character_mod
CREATE OR REPLACE FUNCTION dune.returning_player_award_given(in_account_id bigint)
RETURNS void
LANGUAGE sql
AS $function$
UPDATE player_state SET last_returning_player_awarded_time=now(), last_returning_player_event_time=NULL WHERE account_id=in_account_id;
$function$

View File

@@ -0,0 +1,15 @@
-- set_character_import_state(in_fls_id text, in_state dune.transferimportstate) -> void
-- oid: 58590 kind: FUNCTION category: character_mod
CREATE OR REPLACE FUNCTION dune.set_character_import_state(in_fls_id text, in_state dune.transferimportstate)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
INSERT INTO character_transfer_imports (fls_id, last_update, transfer_state)
VALUES (in_fls_id, now(), in_state)
ON CONFLICT (fls_id) DO UPDATE
SET last_update = now(),
transfer_state = EXCLUDED.transfer_state;
END;
$function$

View File

@@ -0,0 +1,9 @@
-- set_character_name(in_account_id bigint, in_name text) -> void
-- oid: 58591 kind: FUNCTION category: character_mod
CREATE OR REPLACE FUNCTION dune.set_character_name(in_account_id bigint, in_name text)
RETURNS void
LANGUAGE sql
AS $function$
update encrypted_player_state set encrypted_character_name=encrypt_user_data(in_name) where account_id=in_account_id;
$function$

View File

@@ -0,0 +1,11 @@
-- set_players_from_server_ids_offline(in_server_ids text[]) -> void
-- oid: 58595 kind: FUNCTION category: character_mod
CREATE OR REPLACE FUNCTION dune.set_players_from_server_ids_offline(in_server_ids text[])
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
UPDATE player_state SET online_status = 'Offline', last_avatar_activity = current_timestamp WHERE online_status <> 'Offline' AND server_id = ANY(in_server_ids);
END
$function$

View File

@@ -0,0 +1,11 @@
-- set_specialization_xp_and_level(in_player_id bigint, in_track_type dune.specializationtracktype, in_xp_amount integer, in_level real) -> void
-- oid: 58596 kind: FUNCTION category: character_mod
CREATE OR REPLACE FUNCTION dune.set_specialization_xp_and_level(in_player_id bigint, in_track_type dune.specializationtracktype, in_xp_amount integer, in_level real)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
INSERT INTO specialization_tracks (player_id, track_type, xp_amount, level) VALUES (in_player_id, in_track_type, in_xp_amount, in_level)
ON CONFLICT(player_id, track_type) DO UPDATE SET xp_amount = in_xp_amount, level = in_level;
END $function$

View File

@@ -0,0 +1,10 @@
-- update_player_tags(in_account_id bigint, tags_to_add text[], tags_to_remove text[]) -> void
-- oid: 58629 kind: FUNCTION category: character_mod
CREATE OR REPLACE FUNCTION dune.update_player_tags(in_account_id bigint, tags_to_add text[], tags_to_remove text[])
RETURNS void
LANGUAGE sql
AS $function$
insert into player_tags("account_id", "tag") select in_account_id, unnest(tags_to_add) on conflict do nothing;
delete from player_tags where account_id = in_account_id and tag = ANY(tags_to_remove);
$function$

View File

@@ -0,0 +1,26 @@
-- update_returning_player_status(in_user_id text, in_minimum_returning_player_time_seconds integer) -> void
-- oid: 58633 kind: FUNCTION category: character_mod
CREATE OR REPLACE FUNCTION dune.update_returning_player_status(in_user_id text, in_minimum_returning_player_time_seconds integer)
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE
user_account_id BigInt;
last_login_time TIMESTAMPTZ;
last_award_time TIMESTAMPTZ;
BEGIN
SELECT INTO user_account_id, last_login_time, last_award_time id, ps.last_login_time, ps.last_returning_player_awarded_time
FROM accounts acc
JOIN player_state ps ON ps.account_id = acc.id
WHERE acc.user=in_user_id;
IF user_account_id IS NOT NULL THEN
IF last_award_time + INTERVAL '1 second' * in_minimum_returning_player_time_seconds > CURRENT_TIMESTAMP THEN
UPDATE player_state SET last_returning_player_event_time=NULL WHERE account_id=user_account_id;
ELSIF last_login_time + INTERVAL '1 second' * in_minimum_returning_player_time_seconds < CURRENT_TIMESTAMP THEN
UPDATE player_state SET last_returning_player_event_time=now() WHERE account_id=user_account_id;
END IF;
END IF;
END
$function$

View File

@@ -0,0 +1,13 @@
-- update_specialization_refund_id(in_player_id bigint, in_refund_id smallint, in_removed_keystones smallint[]) -> void
-- oid: 58638 kind: FUNCTION category: character_mod
CREATE OR REPLACE FUNCTION dune.update_specialization_refund_id(in_player_id bigint, in_refund_id smallint, in_removed_keystones smallint[])
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
DELETE FROM purchased_specialization_keystones WHERE player_id = in_player_id AND keystone_id = ANY(in_removed_keystones);
INSERT INTO specialization_refund_id (player_id, refund_id) VALUES(in_player_id, in_refund_id)
ON conflict (player_id) DO UPDATE SET refund_id = in_refund_id;
END $function$

View File

@@ -0,0 +1,12 @@
-- cleanup_orphaned_entities() -> trigger
-- oid: 58173 kind: FUNCTION category: cleanup
CREATE OR REPLACE FUNCTION dune.cleanup_orphaned_entities()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
DELETE FROM fgl_entities WHERE fgl_entities.entity_id = OLD.entity_id;
RETURN NULL;
END
$function$

View File

@@ -0,0 +1,12 @@
-- reset_all_players_from_server_ids_grace_period_and_logoff_timer(in_server_id text, in_reset_time timestamp without time zone) -> void
-- oid: 58528 kind: FUNCTION category: cleanup
CREATE OR REPLACE FUNCTION dune.reset_all_players_from_server_ids_grace_period_and_logoff_timer(in_server_id text, in_reset_time timestamp without time zone)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
UPDATE encrypted_player_state SET reconnect_grace_period_end = in_reset_time WHERE server_id = in_server_id AND reconnect_grace_period_end > in_reset_time;
UPDATE encrypted_player_state SET logoff_persistence_end_time = in_reset_time WHERE server_id = in_server_id AND logoff_persistence_end_time > in_reset_time;
END
$function$

View File

@@ -0,0 +1,13 @@
-- reset_server_all_player_access_codes(in_account_id bigint) -> void
-- oid: 58531 kind: FUNCTION category: cleanup
CREATE OR REPLACE FUNCTION dune.reset_server_all_player_access_codes(in_account_id bigint)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
DELETE FROM player_access_codes
WHERE account_id = in_account_id
AND is_resettable = true;
END
$function$

View File

@@ -0,0 +1,11 @@
-- wipe_old_events_log(in_days_limit integer) -> void
-- oid: 58650 kind: FUNCTION category: cleanup
CREATE OR REPLACE FUNCTION dune.wipe_old_events_log(in_days_limit integer)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
DELETE FROM game_events WHERE universe_time < to_timestamp(in_days_limit);
END
$function$

View File

@@ -0,0 +1,14 @@
-- load_communinet_player_data(in_account_id bigint) -> TABLE(is_active boolean, selected_channel_name text, channel_name text, is_tuned boolean)
-- oid: 58450 kind: FUNCTION category: communinet
CREATE OR REPLACE FUNCTION dune.load_communinet_player_data(in_account_id bigint)
RETURNS TABLE(is_active boolean, selected_channel_name text, channel_name text, is_tuned boolean)
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN QUERY
SELECT cp.is_active, cp.selected_channel_name, cpc.channel_name, cpc.is_tuned
FROM communinet_player AS cp JOIN communinet_player_channels as cpc
ON cp.account_id = cpc.account_id
WHERE cpc.account_id = in_account_id;
END; $function$

View File

@@ -0,0 +1,11 @@
-- remove_communinet_player_channel(in_account_id bigint, in_channel_name text) -> void
-- oid: 58517 kind: FUNCTION category: communinet
CREATE OR REPLACE FUNCTION dune.remove_communinet_player_channel(in_account_id bigint, in_channel_name text)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
DELETE FROM communinet_player_channels WHERE account_id = in_account_id AND channel_name = in_channel_name;
END
$function$

View File

@@ -0,0 +1,11 @@
-- update_communinet_player_channel(in_account_id bigint, in_channel_name text, in_is_tuned boolean) -> void
-- oid: 58615 kind: FUNCTION category: communinet
CREATE OR REPLACE FUNCTION dune.update_communinet_player_channel(in_account_id bigint, in_channel_name text, in_is_tuned boolean)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
INSERT INTO communinet_player_channels(account_id, channel_name, is_tuned) VALUES (in_account_id, in_channel_name, in_is_tuned)
ON CONFLICT(account_id, channel_name) DO UPDATE SET is_tuned = in_is_tuned WHERE communinet_player_channels.account_id = in_account_id AND communinet_player_channels.channel_name = in_channel_name;
END $function$

View File

@@ -0,0 +1,11 @@
-- update_communinet_player_data(in_account_id bigint, in_is_active boolean, in_selected_channel_name text) -> void
-- oid: 58616 kind: FUNCTION category: communinet
CREATE OR REPLACE FUNCTION dune.update_communinet_player_data(in_account_id bigint, in_is_active boolean, in_selected_channel_name text)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
INSERT INTO communinet_player(account_id, is_active, selected_channel_name) VALUES (in_account_id, in_is_active, in_selected_channel_name)
ON CONFLICT(account_id) DO UPDATE SET is_active = in_is_active, selected_channel_name = in_selected_channel_name WHERE communinet_player.account_id = in_account_id;
END $function$

View File

@@ -0,0 +1,46 @@
-- adjust_player_virtual_currency_balance(in_controller_id bigint, in_currency_id smallint, in_delta bigint) -> bigint
-- oid: 58129 kind: FUNCTION category: currency
CREATE OR REPLACE FUNCTION dune.adjust_player_virtual_currency_balance(in_controller_id bigint, in_currency_id smallint, in_delta bigint)
RETURNS bigint
LANGUAGE plpgsql
AS $function$
DECLARE
current_balance BIGINT;
current_delta BIGINT;
new_delta BIGINT;
fls_id TEXT;
function_oid oid;
BEGIN
SELECT INTO current_balance balance from player_virtual_currency_balances WHERE player_controller_id = in_controller_id AND currency_id = in_currency_id;
INSERT INTO player_virtual_currency_balances("player_controller_id", "currency_id", "balance")
VALUES (in_controller_id, in_currency_id, in_delta)
ON CONFLICT (player_controller_id, currency_id) DO UPDATE SET balance = (player_virtual_currency_balances.balance + in_delta)
RETURNING balance INTO current_balance;
IF in_currency_id = get_solaris_id() THEN
GET DIAGNOSTICS function_oid = PG_ROUTINE_OID;
PERFORM log_event_solaris(function_oid, 'update_solaris', in_controller_id, current_balance, in_delta);
END IF;
current_delta = 0;
IF current_balance < 0 THEN
SELECT acc."user"
INTO fls_id
FROM accounts acc
JOIN player_state ps on ps.account_id = acc.id
WHERE ps.account_id = in_player_id
LIMIT 1;
PERFORM log_cheating(COALESCE(fls_id, in_player_id::text), 'negative_solaris');
INSERT INTO player_virtual_currency_balances("player_controller_id", "currency_id", "balance")
VALUES (in_controller_id, in_currency_id, 0)
ON CONFLICT (player_controller_id, currency_id) DO UPDATE SET balance = 0;
current_delta = current_balance;
END IF;
new_delta = in_delta + current_delta;
RETURN new_delta;
END;
$function$

View File

@@ -0,0 +1,43 @@
-- dune_exchange_modify_user_solari_balance(in_controller_id bigint, in_solari_delta bigint) -> void
-- oid: 58248 kind: FUNCTION category: currency
CREATE OR REPLACE FUNCTION dune.dune_exchange_modify_user_solari_balance(in_controller_id bigint, in_solari_delta bigint)
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE
user_id BIGINT;
current_balance BIGINT;
new_balance BIGINT;
delta_balance BIGINT;
fls_id TEXT;
function_oid oid;
BEGIN
SELECT INTO user_id dune_exchange_get_user_id(in_controller_id);
SELECT INTO current_balance balance from player_virtual_currency_balances WHERE currency_id = get_solaris_id() AND player_controller_id = in_controller_id;
IF current_balance < 0 THEN
SELECT acc."user"
INTO fls_id
FROM accounts acc
JOIN player_state ps on ps.account_id = acc.id
WHERE ps.player_controller_id = in_controller_id
LIMIT 1;
PERFORM log_cheating(COALESCE(fls_id, in_controller_id::text), 'exchange_negative_solaris');
UPDATE player_virtual_currency_balances SET balance = 0 WHERE currency_id = get_solaris_id() AND player_controller_id = in_controller_id;
current_balance = 0;
END IF;
delta_balance = in_solari_delta;
IF current_balance < in_solari_delta THEN
delta_balance = current_balance;
END IF;
UPDATE dune_exchange_users SET solari_balance = solari_balance + delta_balance WHERE id = user_id;
UPDATE player_virtual_currency_balances SET balance = balance - delta_balance WHERE currency_id = get_solaris_id() AND player_controller_id = in_controller_id RETURNING player_virtual_currency_balances.balance INTO new_balance;
GET DIAGNOSTICS function_oid = PG_ROUTINE_OID;
PERFORM log_event_solaris(function_oid, 'update_solaris', in_controller_id, new_balance, delta_balance);
END $function$

View File

@@ -0,0 +1,27 @@
-- dune_exchange_retrieve_solari_balance(in_owner_id bigint) -> bigint
-- oid: 58253 kind: FUNCTION category: currency
CREATE OR REPLACE FUNCTION dune.dune_exchange_retrieve_solari_balance(in_owner_id bigint)
RETURNS bigint
LANGUAGE plpgsql
AS $function$
DECLARE
current_balance BIGINT;
fls_id TEXT;
BEGIN
SELECT INTO current_balance solari_balance from dune_exchange_users WHERE owner_id = in_owner_id LIMIT 1;
IF current_balance < 0 THEN
SELECT acc."user"
INTO fls_id
FROM accounts acc
JOIN player_state ps on ps.account_id = acc.id
WHERE ps.player_controller_id = in_owner_id
LIMIT 1;
PERFORM log_cheating(COALESCE(fls_id, in_owner_id::text), 'exchange_negative_solaris');
UPDATE dune_exchange_users SET solari_balance = 0 WHERE owner_id = in_owner_id;
END IF;
RETURN (SELECT solari_balance FROM dune_exchange_users WHERE owner_id = in_owner_id LIMIT 1);
END; $function$

View File

@@ -0,0 +1,41 @@
-- dune_exchange_retrieve_solaris_from_item(in_controller_id bigint, in_order_id bigint) -> dune.duneexchangeretrievesolarisfromitemresult
-- oid: 58254 kind: FUNCTION category: currency
CREATE OR REPLACE FUNCTION dune.dune_exchange_retrieve_solaris_from_item(in_controller_id bigint, in_order_id bigint)
RETURNS dune.duneexchangeretrievesolarisfromitemresult
LANGUAGE plpgsql
AS $function$
DECLARE
result DuneExchangeRetrieveSolarisFromItemResult;
new_balance BIGINT;
function_oid oid;
BEGIN
WITH
delete_orders_prices AS (
DELETE FROM dune_exchange_orders
USING dune_exchange_fulfilled_orders
WHERE (dune_exchange_orders.id = dune_exchange_fulfilled_orders.order_id)
AND id = in_order_id AND (item_id IS NULL OR item_id = 0)
RETURNING item_price * dune_exchange_fulfilled_orders.stack_size AS total_price
),
total_price AS (
SELECT SUM(total_price) AS delta FROM delete_orders_prices
)
UPDATE player_virtual_currency_balances
SET balance = balance + total_price.delta
FROM total_price
WHERE currency_id = get_solaris_id() AND player_controller_id = in_controller_id
RETURNING
player_virtual_currency_balances.balance,
total_price.delta,
(SELECT original_order_id FROM dune_exchange_fulfilled_orders WHERE order_id = in_order_id)
INTO
new_balance,
result.total_item_value,
result.original_order_id;
GET DIAGNOSTICS function_oid = PG_ROUTINE_OID;
PERFORM log_event_solaris(function_oid, 'update_solaris', in_controller_id, new_balance, result.total_item_value);
RETURN result;
END $function$

View File

@@ -0,0 +1,23 @@
-- edit_guild_description(in_guild_id bigint, in_guild_desc text) -> void
-- oid: 58258 kind: FUNCTION category: currency
CREATE OR REPLACE FUNCTION dune.edit_guild_description(in_guild_id bigint, in_guild_desc text)
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE
out_guild_description TEXT;
BEGIN
PERFORM guilds_get_exclusive_operation_lock();
-- check if guild exists
SELECT guild_description INTO out_guild_description FROM guilds WHERE guild_id = in_guild_id;
IF NOT FOUND THEN
RAISE EXCEPTION 'Trying to add invite to non existing guild %.', in_guild_id;
END IF;
UPDATE guilds SET guild_description = in_guild_desc WHERE guilds.guild_id = in_guild_id;
PERFORM pg_notify('guild_notify_channel', format('edit_guild_description#{"GuildId" : %s}', in_guild_id));
END
$function$

View File

@@ -0,0 +1,18 @@
-- get_player_virtual_currency_balances(in_controller_id bigint) -> TABLE(out_currency_id smallint, out_currency_balance bigint)
-- oid: 58345 kind: FUNCTION category: currency
CREATE OR REPLACE FUNCTION dune.get_player_virtual_currency_balances(in_controller_id bigint)
RETURNS TABLE(out_currency_id smallint, out_currency_balance bigint)
LANGUAGE plpgsql
AS $function$
BEGIN
return query (
with currencies as (select currency_id, balance from player_virtual_currency_balances where player_controller_id = in_controller_id),
bad_currencies as (select * from currencies where balance < 0),
target_account_id as (select account_id from player_state where player_controller_id = in_controller_id limit 1),
report_cheaters as (select currency_id, flag_player_as_cheater(target_account_id.account_id, 'negative_solaris') from bad_currencies, target_account_id),
fix_bad_currencies as (update player_virtual_currency_balances set balance = 0 from report_cheaters where player_controller_id = in_controller_id and player_virtual_currency_balances.currency_id = report_cheaters.currency_id)
select currency_id, balance from currencies
);
END;
$function$

View File

@@ -0,0 +1,14 @@
-- get_solaris_id() -> smallint
-- oid: 58351 kind: FUNCTION category: currency
CREATE OR REPLACE FUNCTION dune.get_solaris_id()
RETURNS smallint
LANGUAGE plpgsql
IMMUTABLE
AS $function$
DECLARE
solaris_id CONSTANT SMALLINT := 0;
BEGIN
return solaris_id;
END
$function$

View File

@@ -0,0 +1,48 @@
-- log_event_solaris(in_function_oid oid, in_message dune.logmessagetype, in_controller_id bigint, in_solaris_balance bigint, in_solaris_delta bigint) -> void
-- oid: 58470 kind: FUNCTION category: currency
CREATE OR REPLACE FUNCTION dune.log_event_solaris(in_function_oid oid, in_message dune.logmessagetype, in_controller_id bigint, in_solaris_balance bigint, in_solaris_delta bigint)
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE
partition_id BIGINT = 0;
calling_function_name LogFunctionType;
fls_id TEXT;
fc_id BYTEA;
char_name BYTEA;
BEGIN
partition_id := coalesce(current_setting('dune.partition_id', true)::BIGINT, 0);
-- map calling function name to LogFunctionType (each calling function must be added to LogFunctionType)
SELECT proname::text::LogFunctionType
INTO calling_function_name
FROM pg_proc
WHERE oid = in_function_oid;
-- get the fls_id for the user performing the acction
SELECT acc."user"
INTO fls_id
FROM accounts acc
JOIN player_state ps on ps.account_id = acc.id
WHERE ps.player_controller_id = in_controller_id
LIMIT 1;
INSERT INTO event_log (
partition_id,
category,
function_name,
message,
event_time,
meta
) VALUES (
partition_id,
'solaris',
calling_function_name,
in_message,
now(),
json_build_object('fls_id', fls_id, 'event', calling_function_name::text, 'solaris_balance', in_solaris_balance, 'solaris_delta', in_solaris_delta)
);
END;
$function$

View File

@@ -0,0 +1,9 @@
-- debug_add_test_table_data(in_entry text) -> void
-- oid: 58187 kind: FUNCTION category: debug
CREATE OR REPLACE FUNCTION dune.debug_add_test_table_data(in_entry text)
RETURNS void
LANGUAGE sql
AS $function$
insert into debug_test_table("entry") VALUES (in_entry);
$function$

View File

@@ -0,0 +1,9 @@
-- debug_collect_test_table_data() -> SETOF text
-- oid: 58188 kind: FUNCTION category: debug
CREATE OR REPLACE FUNCTION dune.debug_collect_test_table_data()
RETURNS SETOF text
LANGUAGE sql
AS $function$
select entry from debug_test_table;
$function$

View File

@@ -0,0 +1,12 @@
-- debug_echo(in_text text, in_notices text[]) -> text
-- oid: 58189 kind: FUNCTION category: debug
CREATE OR REPLACE FUNCTION dune.debug_echo(in_text text, in_notices text[])
RETURNS text
LANGUAGE plpgsql
AS $function$
BEGIN
perform debug_raise_notices(in_notices);
return in_text;
END;
$function$

View File

@@ -0,0 +1,42 @@
-- debug_get_coriolis_seeds() -> TABLE(farm_seed integer, map_names text[], map_seeds integer[], partitions_ids bigint[], partitions_map text[], partitions_seeds integer[])
-- oid: 58190 kind: FUNCTION category: debug
CREATE OR REPLACE FUNCTION dune.debug_get_coriolis_seeds()
RETURNS TABLE(farm_seed integer, map_names text[], map_seeds integer[], partitions_ids bigint[], partitions_map text[], partitions_seeds integer[])
LANGUAGE plpgsql
AS $function$
begin
RETURN QUERY
WITH
map_seeds as (
SELECT array_agg(map_name) as map_name, array_agg(seed) as seed
FROM (
SELECT COALESCE(map_seed.map, partition.map) AS map_name, COALESCE(map_seed.world_reset_seed, -1) AS seed
FROM world_map_reset_seed AS map_seed FULL JOIN world_partition as partition ON map_seed.map = partition.map
GROUP BY map_seed.map, partition.map, map_seed.world_reset_seed
ORDER BY map_name ASC
) as maps_temp
),
partitions_seeds as (
SELECT array_agg(partition_id) as partition_id, array_agg(map_name) as map_name, array_agg(seed) as seed
FROM (
SELECT partition.partition_id as partition_id, partition.map as map_name, COALESCE(partition_seed.world_reset_seed, -1) AS seed
FROM world_partition_reset_seed AS partition_seed FULL JOIN world_partition as partition ON partition_seed.partition_id = partition.partition_id
GROUP BY partition.map, partition.partition_id, partition_seed.world_reset_seed
ORDER BY partition.partition_id ASC
) as partitions_temp
)
SELECT
COALESCE(world_reset_seed, -1),
COALESCE(map_seeds.map_name, array[]::TEXT[]),
COALESCE(map_seeds.seed, array[]::Integer[]),
COALESCE(partitions_seeds.partition_id, array[]::BigInt[]),
COALESCE(partitions_seeds.map_name, array[]::TEXT[]),
COALESCE(partitions_seeds.seed, array[]::Integer[])
FROM
world_farm_reset_seed,
map_seeds,
partitions_seeds;
end
$function$

Some files were not shown because too many files have changed in this diff Show More