docs(reference): import Dune: Awakening server-manager references
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:
977
docs/reference-repos/icehunter/db-routines/README.md
Normal file
977
docs/reference-repos/icehunter/db-routines/README.md
Normal 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.
|
||||
14243
docs/reference-repos/icehunter/db-routines/_all.sql
Normal file
14243
docs/reference-repos/icehunter/db-routines/_all.sql
Normal file
File diff suppressed because it is too large
Load Diff
261
docs/reference-repos/icehunter/db-routines/_build_readme.py
Normal file
261
docs/reference-repos/icehunter/db-routines/_build_readme.py
Normal 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)')
|
||||
201
docs/reference-repos/icehunter/db-routines/_export.sh
Executable file
201
docs/reference-repos/icehunter/db-routines/_export.sh
Executable 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
|
||||
524
docs/reference-repos/icehunter/db-routines/_manifest.tsv
Normal file
524
docs/reference-repos/icehunter/db-routines/_manifest.tsv
Normal 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.
|
16332
docs/reference-repos/icehunter/db-routines/_raw_dump.txt
Normal file
16332
docs/reference-repos/icehunter/db-routines/_raw_dump.txt
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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$
|
||||
@@ -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
Reference in New Issue
Block a user