From 8690a94b3a37633411e03a8dd498de28c9546308 Mon Sep 17 00:00:00 2001 From: sergiotarxz Date: Sat, 22 Jul 2023 17:12:45 +0200 Subject: [PATCH] Adding preliminar Chaman. --- dbicdh/PostgreSQL/deploy/14/001-auto.sql | 351 ++++ dbicdh/PostgreSQL/upgrade/13-14/001-auto.sql | 23 + dbicdh/_source/deploy/14/001-auto.yml | 1749 +++++++++++++++++ lib/LasTres/Flags.pm | 7 + lib/LasTres/Location.pm | 9 + .../PJAction/RezarAyazelTribuDeLaLima.pm | 54 + .../TribuDeLaLima/TemploDeAyazel.pm | 69 + lib/LasTres/Schema.pm | 2 +- lib/LasTres/Schema/Result/PJ.pm | 87 +- lib/LasTres/Schema/Result/PJVar.pm | 40 + lib/LasTres/TalkingNPC/Chaman.pm | 105 + lib/LasTres/TalkingNPC/VeteranoCalizor.pm | 1 + lib/LasTres/Vars.pm | 11 + 13 files changed, 2504 insertions(+), 4 deletions(-) create mode 100644 dbicdh/PostgreSQL/deploy/14/001-auto.sql create mode 100644 dbicdh/PostgreSQL/upgrade/13-14/001-auto.sql create mode 100644 dbicdh/_source/deploy/14/001-auto.yml create mode 100644 lib/LasTres/PJAction/RezarAyazelTribuDeLaLima.pm create mode 100644 lib/LasTres/Planet/Bahdder/BosqueDelHeroe/TribuDeLaLima/TemploDeAyazel.pm create mode 100644 lib/LasTres/Schema/Result/PJVar.pm create mode 100644 lib/LasTres/TalkingNPC/Chaman.pm create mode 100644 lib/LasTres/Vars.pm diff --git a/dbicdh/PostgreSQL/deploy/14/001-auto.sql b/dbicdh/PostgreSQL/deploy/14/001-auto.sql new file mode 100644 index 0000000..e4888b8 --- /dev/null +++ b/dbicdh/PostgreSQL/deploy/14/001-auto.sql @@ -0,0 +1,351 @@ +-- +-- Created by SQL::Translator::Producer::PostgreSQL +-- Created on Sat Jul 22 15:00:23 2023 +-- +; +-- +-- Table: equipment +-- +CREATE TABLE "equipment" ( + "uuid" uuid NOT NULL, + PRIMARY KEY ("uuid") +); + +; +-- +-- Table: inventories +-- +CREATE TABLE "inventories" ( + "uuid" uuid NOT NULL, + PRIMARY KEY ("uuid") +); + +; +-- +-- Table: players +-- +CREATE TABLE "players" ( + "uuid" uuid NOT NULL, + "username" text NOT NULL, + "encrypted_password" text NOT NULL, + "email" text NOT NULL, + "verified" boolean NOT NULL, + "verification_token" text, + "register_date" timestamp DEFAULT NOW() NOT NULL, + "last_activity" timestamp DEFAULT NOW() NOT NULL, + PRIMARY KEY ("uuid"), + CONSTRAINT "unique_constraint_email" UNIQUE ("email"), + CONSTRAINT "unique_constraint_username" UNIQUE ("username") +); + +; +-- +-- Table: skill_like_lists +-- +CREATE TABLE "skill_like_lists" ( + "uuid" uuid DEFAULT uuid_generate_v4() NOT NULL, + PRIMARY KEY ("uuid") +); + +; +-- +-- Table: stats +-- +CREATE TABLE "stats" ( + "uuid" uuid NOT NULL, + "health" integer NOT NULL, + "mana" integer NOT NULL, + "strength" integer NOT NULL, + "resistance" integer NOT NULL, + "magic" integer NOT NULL, + "speed" integer NOT NULL, + "intelligence" integer NOT NULL, + PRIMARY KEY ("uuid") +); + +; +-- +-- Table: equipment_items +-- +CREATE TABLE "equipment_items" ( + "kind" text NOT NULL, + "equipment" uuid NOT NULL, + "identifier" text NOT NULL, + "quantity" integer NOT NULL, + PRIMARY KEY ("kind", "equipment") +); +CREATE INDEX "equipment_items_idx_equipment" on "equipment_items" ("equipment"); + +; +-- +-- Table: inventory_items +-- +CREATE TABLE "inventory_items" ( + "uuid" uuid DEFAULT uuid_generate_v4() NOT NULL, + "inventory" uuid NOT NULL, + "identifier" text NOT NULL, + "quantity" integer NOT NULL, + PRIMARY KEY ("uuid"), + CONSTRAINT "inventory_items_unique_item" UNIQUE ("inventory", "identifier") +); +CREATE INDEX "inventory_items_idx_inventory" on "inventory_items" ("inventory"); + +; +-- +-- Table: skill_like_items +-- +CREATE TABLE "skill_like_items" ( + "identifier" text NOT NULL, + "owner_list" uuid NOT NULL, + "level" integer DEFAULT 1 NOT NULL, + PRIMARY KEY ("identifier", "owner_list") +); +CREATE INDEX "skill_like_items_idx_owner_list" on "skill_like_items" ("owner_list"); + +; +-- +-- Table: teams +-- +CREATE TABLE "teams" ( + "uuid" uuid NOT NULL, + "is_exploring" boolean DEFAULT false NOT NULL, + "action_frame" integer DEFAULT 0 NOT NULL, + "is_moving" boolean DEFAULT false NOT NULL, + "last_spawn" jsonb DEFAULT 'null' NOT NULL, + "moving_to" jsonb DEFAULT 'null' NOT NULL, + "leader" uuid, + "name" text NOT NULL, + "planet" text NOT NULL, + "super_area" text NOT NULL, + "area" text NOT NULL, + "location" text NOT NULL, + "current_battle" uuid, + PRIMARY KEY ("uuid") +); +CREATE INDEX "teams_idx_leader" on "teams" ("leader"); + +; +-- +-- Table: player_pjs +-- +CREATE TABLE "player_pjs" ( + "uuid" uuid NOT NULL, + "owner" uuid NOT NULL, + "full_name" text NOT NULL, + "short_name" text NOT NULL, + "nick" text NOT NULL, + "race" text NOT NULL, + "team" uuid NOT NULL, + "creation_date" timestamp DEFAULT NOW() NOT NULL, + "last_activity" timestamp DEFAULT NOW() NOT NULL, + "experience" integer DEFAULT 1 NOT NULL, + "equipment" uuid NOT NULL, + "born_stats" uuid NOT NULL, + "training_stats" uuid NOT NULL, + "skills" uuid NOT NULL, + "spells" uuid NOT NULL, + "inventory" uuid NOT NULL, + "health" integer NOT NULL, + "mana" integer NOT NULL, + "combat_target" uuid, + "combat_action" text, + PRIMARY KEY ("uuid") +); +CREATE INDEX "player_pjs_idx_born_stats" on "player_pjs" ("born_stats"); +CREATE INDEX "player_pjs_idx_equipment" on "player_pjs" ("equipment"); +CREATE INDEX "player_pjs_idx_inventory" on "player_pjs" ("inventory"); +CREATE INDEX "player_pjs_idx_owner" on "player_pjs" ("owner"); +CREATE INDEX "player_pjs_idx_skills" on "player_pjs" ("skills"); +CREATE INDEX "player_pjs_idx_spells" on "player_pjs" ("spells"); +CREATE INDEX "player_pjs_idx_team" on "player_pjs" ("team"); +CREATE INDEX "player_pjs_idx_training_stats" on "player_pjs" ("training_stats"); + +; +-- +-- Table: player_companion_npcs +-- +CREATE TABLE "player_companion_npcs" ( + "uuid" uuid DEFAULT uuid_generate_v4() NOT NULL, + "owner" uuid NOT NULL, + "identifier" text NOT NULL, + "nick" text, + "race" text NOT NULL, + "level" integer DEFAULT 1 NOT NULL, + "exp" integer DEFAULT 1 NOT NULL, + "equipment" uuid NOT NULL, + "stats" uuid NOT NULL, + "skills" uuid NOT NULL, + "spells" uuid NOT NULL, + "inventory" uuid NOT NULL, + PRIMARY KEY ("uuid") +); +CREATE INDEX "player_companion_npcs_idx_equipment" on "player_companion_npcs" ("equipment"); +CREATE INDEX "player_companion_npcs_idx_inventory" on "player_companion_npcs" ("inventory"); +CREATE INDEX "player_companion_npcs_idx_owner" on "player_companion_npcs" ("owner"); +CREATE INDEX "player_companion_npcs_idx_skills" on "player_companion_npcs" ("skills"); +CREATE INDEX "player_companion_npcs_idx_spells" on "player_companion_npcs" ("spells"); +CREATE INDEX "player_companion_npcs_idx_stats" on "player_companion_npcs" ("stats"); + +; +-- +-- Table: player_pjs_flags +-- +CREATE TABLE "player_pjs_flags" ( + "name" text NOT NULL, + "owner" uuid NOT NULL, + PRIMARY KEY ("name", "owner") +); +CREATE INDEX "player_pjs_flags_idx_owner" on "player_pjs_flags" ("owner"); +CREATE INDEX "index_flag" on "player_pjs_flags" ("owner", "name"); + +; +-- +-- Table: player_pjs_known_places +-- +CREATE TABLE "player_pjs_known_places" ( + "owner" uuid NOT NULL, + "planet" text NOT NULL, + "super_area" text NOT NULL, + "area" text NOT NULL, + "location" text NOT NULL, + PRIMARY KEY ("owner", "planet", "super_area", "area", "location") +); +CREATE INDEX "player_pjs_known_places_idx_owner" on "player_pjs_known_places" ("owner"); + +; +-- +-- Table: player_pjs_known_words +-- +CREATE TABLE "player_pjs_known_words" ( + "identifier" text NOT NULL, + "owner" uuid NOT NULL, + PRIMARY KEY ("identifier", "owner") +); +CREATE INDEX "player_pjs_known_words_idx_owner" on "player_pjs_known_words" ("owner"); +CREATE INDEX "index_known_word" on "player_pjs_known_words" ("owner", "identifier"); + +; +-- +-- Table: player_pjs_log +-- +CREATE TABLE "player_pjs_log" ( + "uuid" uuid NOT NULL, + "content" jsonb NOT NULL, + "owner" uuid NOT NULL, + "date" timestamp DEFAULT NOW() NOT NULL, + PRIMARY KEY ("uuid") +); +CREATE INDEX "player_pjs_log_idx_owner" on "player_pjs_log" ("owner"); +CREATE INDEX "index_log" on "player_pjs_log" ("owner", "date"); + +; +-- +-- Table: player_pjs_vars +-- +CREATE TABLE "player_pjs_vars" ( + "name" text NOT NULL, + "owner" uuid NOT NULL, + "value" text NOT NULL, + PRIMARY KEY ("name", "owner") +); +CREATE INDEX "player_pjs_vars_idx_owner" on "player_pjs_vars" ("owner"); +CREATE INDEX "index_var" on "player_pjs_vars" ("owner", "name"); + +; +-- +-- Foreign Key Definitions +-- + +; +ALTER TABLE "equipment_items" ADD CONSTRAINT "equipment_items_fk_equipment" FOREIGN KEY ("equipment") + REFERENCES "equipment" ("uuid") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE; + +; +ALTER TABLE "inventory_items" ADD CONSTRAINT "inventory_items_fk_inventory" FOREIGN KEY ("inventory") + REFERENCES "inventories" ("uuid") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE; + +; +ALTER TABLE "skill_like_items" ADD CONSTRAINT "skill_like_items_fk_owner_list" FOREIGN KEY ("owner_list") + REFERENCES "skill_like_lists" ("uuid") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE; + +; +ALTER TABLE "teams" ADD CONSTRAINT "teams_fk_leader" FOREIGN KEY ("leader") + REFERENCES "player_pjs" ("uuid") DEFERRABLE; + +; +ALTER TABLE "player_pjs" ADD CONSTRAINT "player_pjs_fk_born_stats" FOREIGN KEY ("born_stats") + REFERENCES "stats" ("uuid") DEFERRABLE; + +; +ALTER TABLE "player_pjs" ADD CONSTRAINT "player_pjs_fk_equipment" FOREIGN KEY ("equipment") + REFERENCES "equipment" ("uuid") DEFERRABLE; + +; +ALTER TABLE "player_pjs" ADD CONSTRAINT "player_pjs_fk_inventory" FOREIGN KEY ("inventory") + REFERENCES "inventories" ("uuid") DEFERRABLE; + +; +ALTER TABLE "player_pjs" ADD CONSTRAINT "player_pjs_fk_owner" FOREIGN KEY ("owner") + REFERENCES "players" ("uuid") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE; + +; +ALTER TABLE "player_pjs" ADD CONSTRAINT "player_pjs_fk_skills" FOREIGN KEY ("skills") + REFERENCES "skill_like_lists" ("uuid") DEFERRABLE; + +; +ALTER TABLE "player_pjs" ADD CONSTRAINT "player_pjs_fk_spells" FOREIGN KEY ("spells") + REFERENCES "skill_like_lists" ("uuid") DEFERRABLE; + +; +ALTER TABLE "player_pjs" ADD CONSTRAINT "player_pjs_fk_team" FOREIGN KEY ("team") + REFERENCES "teams" ("uuid") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE; + +; +ALTER TABLE "player_pjs" ADD CONSTRAINT "player_pjs_fk_training_stats" FOREIGN KEY ("training_stats") + REFERENCES "stats" ("uuid") DEFERRABLE; + +; +ALTER TABLE "player_companion_npcs" ADD CONSTRAINT "player_companion_npcs_fk_equipment" FOREIGN KEY ("equipment") + REFERENCES "equipment" ("uuid") DEFERRABLE; + +; +ALTER TABLE "player_companion_npcs" ADD CONSTRAINT "player_companion_npcs_fk_inventory" FOREIGN KEY ("inventory") + REFERENCES "inventories" ("uuid") DEFERRABLE; + +; +ALTER TABLE "player_companion_npcs" ADD CONSTRAINT "player_companion_npcs_fk_owner" FOREIGN KEY ("owner") + REFERENCES "player_pjs" ("uuid") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE; + +; +ALTER TABLE "player_companion_npcs" ADD CONSTRAINT "player_companion_npcs_fk_skills" FOREIGN KEY ("skills") + REFERENCES "skill_like_lists" ("uuid") DEFERRABLE; + +; +ALTER TABLE "player_companion_npcs" ADD CONSTRAINT "player_companion_npcs_fk_spells" FOREIGN KEY ("spells") + REFERENCES "skill_like_lists" ("uuid") DEFERRABLE; + +; +ALTER TABLE "player_companion_npcs" ADD CONSTRAINT "player_companion_npcs_fk_stats" FOREIGN KEY ("stats") + REFERENCES "stats" ("uuid") DEFERRABLE; + +; +ALTER TABLE "player_pjs_flags" ADD CONSTRAINT "player_pjs_flags_fk_owner" FOREIGN KEY ("owner") + REFERENCES "player_pjs" ("uuid") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE; + +; +ALTER TABLE "player_pjs_known_places" ADD CONSTRAINT "player_pjs_known_places_fk_owner" FOREIGN KEY ("owner") + REFERENCES "player_pjs" ("uuid") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE; + +; +ALTER TABLE "player_pjs_known_words" ADD CONSTRAINT "player_pjs_known_words_fk_owner" FOREIGN KEY ("owner") + REFERENCES "player_pjs" ("uuid") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE; + +; +ALTER TABLE "player_pjs_log" ADD CONSTRAINT "player_pjs_log_fk_owner" FOREIGN KEY ("owner") + REFERENCES "player_pjs" ("uuid") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE; + +; +ALTER TABLE "player_pjs_vars" ADD CONSTRAINT "player_pjs_vars_fk_owner" FOREIGN KEY ("owner") + REFERENCES "player_pjs" ("uuid") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE; + +; diff --git a/dbicdh/PostgreSQL/upgrade/13-14/001-auto.sql b/dbicdh/PostgreSQL/upgrade/13-14/001-auto.sql new file mode 100644 index 0000000..f6f144c --- /dev/null +++ b/dbicdh/PostgreSQL/upgrade/13-14/001-auto.sql @@ -0,0 +1,23 @@ +-- Convert schema '/var/lib/las_tres/LasTres/script/../dbicdh/_source/deploy/13/001-auto.yml' to '/var/lib/las_tres/LasTres/script/../dbicdh/_source/deploy/14/001-auto.yml':; + +; +BEGIN; + +; +CREATE TABLE "player_pjs_vars" ( + "name" text NOT NULL, + "owner" uuid NOT NULL, + "value" text NOT NULL, + PRIMARY KEY ("name", "owner") +); +CREATE INDEX "player_pjs_vars_idx_owner" on "player_pjs_vars" ("owner"); +CREATE INDEX "index_var" on "player_pjs_vars" ("owner", "name"); + +; +ALTER TABLE "player_pjs_vars" ADD CONSTRAINT "player_pjs_vars_fk_owner" FOREIGN KEY ("owner") + REFERENCES "player_pjs" ("uuid") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE; + +; + +COMMIT; + diff --git a/dbicdh/_source/deploy/14/001-auto.yml b/dbicdh/_source/deploy/14/001-auto.yml new file mode 100644 index 0000000..7de96fb --- /dev/null +++ b/dbicdh/_source/deploy/14/001-auto.yml @@ -0,0 +1,1749 @@ +--- +schema: + procedures: {} + tables: + equipment: + constraints: + - deferrable: 1 + expression: '' + fields: + - uuid + match_type: '' + name: '' + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: PRIMARY KEY + fields: + uuid: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: uuid + order: 1 + size: + - 0 + indices: [] + name: equipment + options: [] + order: 1 + equipment_items: + constraints: + - deferrable: 1 + expression: '' + fields: + - kind + - equipment + match_type: '' + name: '' + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: PRIMARY KEY + - deferrable: 1 + expression: '' + fields: + - equipment + match_type: '' + name: equipment_items_fk_equipment + on_delete: CASCADE + on_update: CASCADE + options: [] + reference_fields: + - uuid + reference_table: equipment + type: FOREIGN KEY + fields: + equipment: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: equipment + order: 2 + size: + - 0 + identifier: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: identifier + order: 3 + size: + - 0 + kind: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: kind + order: 1 + size: + - 0 + quantity: + data_type: Integer + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: quantity + order: 4 + size: + - 0 + indices: + - fields: + - equipment + name: equipment_items_idx_equipment + options: [] + type: NORMAL + name: equipment_items + options: [] + order: 6 + inventories: + constraints: + - deferrable: 1 + expression: '' + fields: + - uuid + match_type: '' + name: '' + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: PRIMARY KEY + fields: + uuid: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: uuid + order: 1 + size: + - 0 + indices: [] + name: inventories + options: [] + order: 2 + inventory_items: + constraints: + - deferrable: 1 + expression: '' + fields: + - uuid + match_type: '' + name: '' + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: PRIMARY KEY + - deferrable: 1 + expression: '' + fields: + - inventory + - identifier + match_type: '' + name: inventory_items_unique_item + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: UNIQUE + - deferrable: 1 + expression: '' + fields: + - inventory + match_type: '' + name: inventory_items_fk_inventory + on_delete: CASCADE + on_update: CASCADE + options: [] + reference_fields: + - uuid + reference_table: inventories + type: FOREIGN KEY + fields: + identifier: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 1 + name: identifier + order: 3 + size: + - 0 + inventory: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 1 + name: inventory + order: 2 + size: + - 0 + quantity: + data_type: Integer + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: quantity + order: 4 + size: + - 0 + uuid: + data_type: uuid + default_value: !!perl/ref + =: uuid_generate_v4() + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: uuid + order: 1 + size: + - 0 + indices: + - fields: + - inventory + name: inventory_items_idx_inventory + options: [] + type: NORMAL + name: inventory_items + options: [] + order: 7 + player_companion_npcs: + constraints: + - deferrable: 1 + expression: '' + fields: + - uuid + match_type: '' + name: '' + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: PRIMARY KEY + - deferrable: 1 + expression: '' + fields: + - equipment + match_type: '' + name: player_companion_npcs_fk_equipment + on_delete: '' + on_update: '' + options: [] + reference_fields: + - uuid + reference_table: equipment + type: FOREIGN KEY + - deferrable: 1 + expression: '' + fields: + - inventory + match_type: '' + name: player_companion_npcs_fk_inventory + on_delete: '' + on_update: '' + options: [] + reference_fields: + - uuid + reference_table: inventories + type: FOREIGN KEY + - deferrable: 1 + expression: '' + fields: + - owner + match_type: '' + name: player_companion_npcs_fk_owner + on_delete: CASCADE + on_update: CASCADE + options: [] + reference_fields: + - uuid + reference_table: player_pjs + type: FOREIGN KEY + - deferrable: 1 + expression: '' + fields: + - skills + match_type: '' + name: player_companion_npcs_fk_skills + on_delete: '' + on_update: '' + options: [] + reference_fields: + - uuid + reference_table: skill_like_lists + type: FOREIGN KEY + - deferrable: 1 + expression: '' + fields: + - spells + match_type: '' + name: player_companion_npcs_fk_spells + on_delete: '' + on_update: '' + options: [] + reference_fields: + - uuid + reference_table: skill_like_lists + type: FOREIGN KEY + - deferrable: 1 + expression: '' + fields: + - stats + match_type: '' + name: player_companion_npcs_fk_stats + on_delete: '' + on_update: '' + options: [] + reference_fields: + - uuid + reference_table: stats + type: FOREIGN KEY + fields: + equipment: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: equipment + order: 8 + size: + - 0 + exp: + data_type: integer + default_value: !!perl/ref + =: 1 + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: exp + order: 7 + size: + - 0 + identifier: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: identifier + order: 3 + size: + - 0 + inventory: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: inventory + order: 12 + size: + - 0 + level: + data_type: integer + default_value: !!perl/ref + =: 1 + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: level + order: 6 + size: + - 0 + nick: + data_type: text + default_value: ~ + is_nullable: 1 + is_primary_key: 0 + is_unique: 0 + name: nick + order: 4 + size: + - 0 + owner: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: owner + order: 2 + size: + - 0 + race: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: race + order: 5 + size: + - 0 + skills: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: skills + order: 10 + size: + - 0 + spells: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: spells + order: 11 + size: + - 0 + stats: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: stats + order: 9 + size: + - 0 + uuid: + data_type: uuid + default_value: !!perl/ref + =: uuid_generate_v4() + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: uuid + order: 1 + size: + - 0 + indices: + - fields: + - equipment + name: player_companion_npcs_idx_equipment + options: [] + type: NORMAL + - fields: + - inventory + name: player_companion_npcs_idx_inventory + options: [] + type: NORMAL + - fields: + - owner + name: player_companion_npcs_idx_owner + options: [] + type: NORMAL + - fields: + - skills + name: player_companion_npcs_idx_skills + options: [] + type: NORMAL + - fields: + - spells + name: player_companion_npcs_idx_spells + options: [] + type: NORMAL + - fields: + - stats + name: player_companion_npcs_idx_stats + options: [] + type: NORMAL + name: player_companion_npcs + options: [] + order: 11 + player_pjs: + constraints: + - deferrable: 1 + expression: '' + fields: + - uuid + match_type: '' + name: '' + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: PRIMARY KEY + - deferrable: 1 + expression: '' + fields: + - born_stats + match_type: '' + name: player_pjs_fk_born_stats + on_delete: '' + on_update: '' + options: [] + reference_fields: + - uuid + reference_table: stats + type: FOREIGN KEY + - deferrable: 1 + expression: '' + fields: + - equipment + match_type: '' + name: player_pjs_fk_equipment + on_delete: '' + on_update: '' + options: [] + reference_fields: + - uuid + reference_table: equipment + type: FOREIGN KEY + - deferrable: 1 + expression: '' + fields: + - inventory + match_type: '' + name: player_pjs_fk_inventory + on_delete: '' + on_update: '' + options: [] + reference_fields: + - uuid + reference_table: inventories + type: FOREIGN KEY + - deferrable: 1 + expression: '' + fields: + - owner + match_type: '' + name: player_pjs_fk_owner + on_delete: CASCADE + on_update: CASCADE + options: [] + reference_fields: + - uuid + reference_table: players + type: FOREIGN KEY + - deferrable: 1 + expression: '' + fields: + - skills + match_type: '' + name: player_pjs_fk_skills + on_delete: '' + on_update: '' + options: [] + reference_fields: + - uuid + reference_table: skill_like_lists + type: FOREIGN KEY + - deferrable: 1 + expression: '' + fields: + - spells + match_type: '' + name: player_pjs_fk_spells + on_delete: '' + on_update: '' + options: [] + reference_fields: + - uuid + reference_table: skill_like_lists + type: FOREIGN KEY + - deferrable: 1 + expression: '' + fields: + - team + match_type: '' + name: player_pjs_fk_team + on_delete: CASCADE + on_update: CASCADE + options: [] + reference_fields: + - uuid + reference_table: teams + type: FOREIGN KEY + - deferrable: 1 + expression: '' + fields: + - training_stats + match_type: '' + name: player_pjs_fk_training_stats + on_delete: '' + on_update: '' + options: [] + reference_fields: + - uuid + reference_table: stats + type: FOREIGN KEY + fields: + born_stats: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: born_stats + order: 12 + size: + - 0 + combat_action: + data_type: text + default_value: ~ + is_nullable: 1 + is_primary_key: 0 + is_unique: 0 + name: combat_action + order: 20 + size: + - 0 + combat_target: + data_type: uuid + default_value: ~ + is_nullable: 1 + is_primary_key: 0 + is_unique: 0 + name: combat_target + order: 19 + size: + - 0 + creation_date: + data_type: timestamp + default_value: !!perl/ref + =: NOW() + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: creation_date + order: 8 + size: + - 0 + equipment: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: equipment + order: 11 + size: + - 0 + experience: + data_type: integer + default_value: !!perl/ref + =: 1 + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: experience + order: 10 + size: + - 0 + full_name: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: full_name + order: 3 + size: + - 0 + health: + data_type: integer + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: health + order: 17 + size: + - 0 + inventory: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: inventory + order: 16 + size: + - 0 + last_activity: + data_type: timestamp + default_value: !!perl/ref + =: NOW() + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: last_activity + order: 9 + size: + - 0 + mana: + data_type: integer + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: mana + order: 18 + size: + - 0 + nick: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: nick + order: 5 + size: + - 0 + owner: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: owner + order: 2 + size: + - 0 + race: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: race + order: 6 + size: + - 0 + short_name: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: short_name + order: 4 + size: + - 0 + skills: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: skills + order: 14 + size: + - 0 + spells: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: spells + order: 15 + size: + - 0 + team: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: team + order: 7 + size: + - 0 + training_stats: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: training_stats + order: 13 + size: + - 0 + uuid: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: uuid + order: 1 + size: + - 0 + indices: + - fields: + - born_stats + name: player_pjs_idx_born_stats + options: [] + type: NORMAL + - fields: + - equipment + name: player_pjs_idx_equipment + options: [] + type: NORMAL + - fields: + - inventory + name: player_pjs_idx_inventory + options: [] + type: NORMAL + - fields: + - owner + name: player_pjs_idx_owner + options: [] + type: NORMAL + - fields: + - skills + name: player_pjs_idx_skills + options: [] + type: NORMAL + - fields: + - spells + name: player_pjs_idx_spells + options: [] + type: NORMAL + - fields: + - team + name: player_pjs_idx_team + options: [] + type: NORMAL + - fields: + - training_stats + name: player_pjs_idx_training_stats + options: [] + type: NORMAL + name: player_pjs + options: [] + order: 10 + player_pjs_flags: + constraints: + - deferrable: 1 + expression: '' + fields: + - owner + - name + match_type: '' + name: '' + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: PRIMARY KEY + - deferrable: 1 + expression: '' + fields: + - owner + match_type: '' + name: player_pjs_flags_fk_owner + on_delete: CASCADE + on_update: CASCADE + options: [] + reference_fields: + - uuid + reference_table: player_pjs + type: FOREIGN KEY + fields: + name: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: name + order: 1 + size: + - 0 + owner: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: owner + order: 2 + size: + - 0 + indices: + - fields: + - owner + name: player_pjs_flags_idx_owner + options: [] + type: NORMAL + - fields: + - owner + - name + name: index_flag + options: [] + type: NORMAL + name: player_pjs_flags + options: [] + order: 12 + player_pjs_known_places: + constraints: + - deferrable: 1 + expression: '' + fields: + - owner + - planet + - super_area + - area + - location + match_type: '' + name: '' + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: PRIMARY KEY + - deferrable: 1 + expression: '' + fields: + - owner + match_type: '' + name: player_pjs_known_places_fk_owner + on_delete: CASCADE + on_update: CASCADE + options: [] + reference_fields: + - uuid + reference_table: player_pjs + type: FOREIGN KEY + fields: + area: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: area + order: 4 + size: + - 0 + location: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: location + order: 5 + size: + - 0 + owner: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: owner + order: 1 + size: + - 0 + planet: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: planet + order: 2 + size: + - 0 + super_area: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: super_area + order: 3 + size: + - 0 + indices: + - fields: + - owner + name: player_pjs_known_places_idx_owner + options: [] + type: NORMAL + name: player_pjs_known_places + options: [] + order: 13 + player_pjs_known_words: + constraints: + - deferrable: 1 + expression: '' + fields: + - owner + - identifier + match_type: '' + name: '' + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: PRIMARY KEY + - deferrable: 1 + expression: '' + fields: + - owner + match_type: '' + name: player_pjs_known_words_fk_owner + on_delete: CASCADE + on_update: CASCADE + options: [] + reference_fields: + - uuid + reference_table: player_pjs + type: FOREIGN KEY + fields: + identifier: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: identifier + order: 1 + size: + - 0 + owner: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: owner + order: 2 + size: + - 0 + indices: + - fields: + - owner + name: player_pjs_known_words_idx_owner + options: [] + type: NORMAL + - fields: + - owner + - identifier + name: index_known_word + options: [] + type: NORMAL + name: player_pjs_known_words + options: [] + order: 14 + player_pjs_log: + constraints: + - deferrable: 1 + expression: '' + fields: + - uuid + match_type: '' + name: '' + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: PRIMARY KEY + - deferrable: 1 + expression: '' + fields: + - owner + match_type: '' + name: player_pjs_log_fk_owner + on_delete: CASCADE + on_update: CASCADE + options: [] + reference_fields: + - uuid + reference_table: player_pjs + type: FOREIGN KEY + fields: + content: + data_type: jsonb + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: content + order: 2 + size: + - 0 + date: + data_type: timestamp + default_value: !!perl/ref + =: NOW() + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: date + order: 4 + size: + - 0 + owner: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: owner + order: 3 + size: + - 0 + uuid: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: uuid + order: 1 + size: + - 0 + indices: + - fields: + - owner + name: player_pjs_log_idx_owner + options: [] + type: NORMAL + - fields: + - owner + - date + name: index_log + options: [] + type: NORMAL + name: player_pjs_log + options: [] + order: 15 + player_pjs_vars: + constraints: + - deferrable: 1 + expression: '' + fields: + - owner + - name + match_type: '' + name: '' + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: PRIMARY KEY + - deferrable: 1 + expression: '' + fields: + - owner + match_type: '' + name: player_pjs_vars_fk_owner + on_delete: CASCADE + on_update: CASCADE + options: [] + reference_fields: + - uuid + reference_table: player_pjs + type: FOREIGN KEY + fields: + name: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: name + order: 1 + size: + - 0 + owner: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: owner + order: 2 + size: + - 0 + value: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: value + order: 3 + size: + - 0 + indices: + - fields: + - owner + name: player_pjs_vars_idx_owner + options: [] + type: NORMAL + - fields: + - owner + - name + name: index_var + options: [] + type: NORMAL + name: player_pjs_vars + options: [] + order: 16 + players: + constraints: + - deferrable: 1 + expression: '' + fields: + - uuid + match_type: '' + name: '' + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: PRIMARY KEY + - deferrable: 1 + expression: '' + fields: + - email + match_type: '' + name: unique_constraint_email + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: UNIQUE + - deferrable: 1 + expression: '' + fields: + - username + match_type: '' + name: unique_constraint_username + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: UNIQUE + fields: + email: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 1 + name: email + order: 4 + size: + - 0 + encrypted_password: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: encrypted_password + order: 3 + size: + - 0 + last_activity: + data_type: timestamp + default_value: !!perl/ref + =: NOW() + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: last_activity + order: 8 + size: + - 0 + register_date: + data_type: timestamp + default_value: !!perl/ref + =: NOW() + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: register_date + order: 7 + size: + - 0 + username: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 1 + name: username + order: 2 + size: + - 0 + uuid: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: uuid + order: 1 + size: + - 0 + verification_token: + data_type: text + default_value: ~ + is_nullable: 1 + is_primary_key: 0 + is_unique: 0 + name: verification_token + order: 6 + size: + - 0 + verified: + data_type: boolean + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: verified + order: 5 + size: + - 0 + indices: [] + name: players + options: [] + order: 3 + skill_like_items: + constraints: + - deferrable: 1 + expression: '' + fields: + - identifier + - owner_list + match_type: '' + name: '' + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: PRIMARY KEY + - deferrable: 1 + expression: '' + fields: + - owner_list + match_type: '' + name: skill_like_items_fk_owner_list + on_delete: CASCADE + on_update: CASCADE + options: [] + reference_fields: + - uuid + reference_table: skill_like_lists + type: FOREIGN KEY + fields: + identifier: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: identifier + order: 1 + size: + - 0 + level: + data_type: integer + default_value: !!perl/ref + =: 1 + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: level + order: 3 + size: + - 0 + owner_list: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: owner_list + order: 2 + size: + - 0 + indices: + - fields: + - owner_list + name: skill_like_items_idx_owner_list + options: [] + type: NORMAL + name: skill_like_items + options: [] + order: 8 + skill_like_lists: + constraints: + - deferrable: 1 + expression: '' + fields: + - uuid + match_type: '' + name: '' + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: PRIMARY KEY + fields: + uuid: + data_type: uuid + default_value: !!perl/ref + =: uuid_generate_v4() + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: uuid + order: 1 + size: + - 0 + indices: [] + name: skill_like_lists + options: [] + order: 4 + stats: + constraints: + - deferrable: 1 + expression: '' + fields: + - uuid + match_type: '' + name: '' + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: PRIMARY KEY + fields: + health: + data_type: integer + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: health + order: 2 + size: + - 0 + intelligence: + data_type: integer + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: intelligence + order: 8 + size: + - 0 + magic: + data_type: integer + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: magic + order: 6 + size: + - 0 + mana: + data_type: integer + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: mana + order: 3 + size: + - 0 + resistance: + data_type: integer + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: resistance + order: 5 + size: + - 0 + speed: + data_type: integer + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: speed + order: 7 + size: + - 0 + strength: + data_type: integer + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: strength + order: 4 + size: + - 0 + uuid: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: uuid + order: 1 + size: + - 0 + indices: [] + name: stats + options: [] + order: 5 + teams: + constraints: + - deferrable: 1 + expression: '' + fields: + - uuid + match_type: '' + name: '' + on_delete: '' + on_update: '' + options: [] + reference_fields: [] + reference_table: '' + type: PRIMARY KEY + - deferrable: 1 + expression: '' + fields: + - leader + match_type: '' + name: teams_fk_leader + on_delete: '' + on_update: '' + options: [] + reference_fields: + - uuid + reference_table: player_pjs + type: FOREIGN KEY + fields: + action_frame: + data_type: integer + default_value: !!perl/ref + =: 0 + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: action_frame + order: 3 + size: + - 0 + area: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: area + order: 11 + size: + - 0 + current_battle: + data_type: uuid + default_value: ~ + is_nullable: 1 + is_primary_key: 0 + is_unique: 0 + name: current_battle + order: 13 + size: + - 0 + is_exploring: + data_type: boolean + default_value: !!perl/ref + =: false + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: is_exploring + order: 2 + size: + - 0 + is_moving: + data_type: boolean + default_value: !!perl/ref + =: false + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: is_moving + order: 4 + size: + - 0 + last_spawn: + data_type: jsonb + default_value: !!perl/ref + =: "'null'" + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: last_spawn + order: 5 + size: + - 0 + leader: + data_type: uuid + default_value: ~ + is_nullable: 1 + is_primary_key: 0 + is_unique: 0 + name: leader + order: 7 + size: + - 0 + location: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: location + order: 12 + size: + - 0 + moving_to: + data_type: jsonb + default_value: !!perl/ref + =: "'null'" + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: moving_to + order: 6 + size: + - 0 + name: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: name + order: 8 + size: + - 0 + planet: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: planet + order: 9 + size: + - 0 + super_area: + data_type: text + default_value: ~ + is_nullable: 0 + is_primary_key: 0 + is_unique: 0 + name: super_area + order: 10 + size: + - 0 + uuid: + data_type: uuid + default_value: ~ + is_nullable: 0 + is_primary_key: 1 + is_unique: 0 + name: uuid + order: 1 + size: + - 0 + indices: + - fields: + - leader + name: teams_idx_leader + options: [] + type: NORMAL + name: teams + options: [] + order: 9 + triggers: {} + views: {} +translator: + add_drop_table: 0 + filename: ~ + no_comments: 0 + parser_args: + sources: + - CompanionNPC + - Equipment + - EquipmentItem + - Inventory + - InventoryItem + - PJ + - PJFlag + - PJKnownPlaces + - PJKnownWord + - PJLog + - PJVar + - Player + - SkillLikeItem + - SkillLikeList + - Stats + - Team + parser_type: SQL::Translator::Parser::DBIx::Class + producer_args: {} + producer_type: SQL::Translator::Producer::YAML + show_warnings: 0 + trace: 0 + version: 1.63 diff --git a/lib/LasTres/Flags.pm b/lib/LasTres/Flags.pm index d752e72..d36a501 100644 --- a/lib/LasTres/Flags.pm +++ b/lib/LasTres/Flags.pm @@ -14,4 +14,11 @@ sub TALKED_WITH_OLD_MAN_AND_LEARNED_TO_SAY_DEVOTA { sub TALKED_FIRST_TIME_VETERANO_CALIZOR { return 'TALKED_FIRST_TIME_VETERANO_CALIZOR'; } +sub ASKED_FOR_DEVOTA_VETERANO_CALIZOR { + return 'ASKED_FOR_DEVOTA_VETERANO_CALIZOR'; +} + +sub TEMPORAL_HAS_PRAYED { + return 'TEMPORAL_HAS_PRAYED'; +} 1; diff --git a/lib/LasTres/Location.pm b/lib/LasTres/Location.pm index c7b71f8..40adb29 100644 --- a/lib/LasTres/Location.pm +++ b/lib/LasTres/Location.pm @@ -135,10 +135,19 @@ sub show_intro ( $self, $pj ) { $pj->append_log_line( [ { text => $pj->location->description }, ] ); } +## OVERRIDE (Always use $self->SUPER) +sub on_leave($self, $team) { + require LasTres::Vars; + for my $member ($team->members) { + $member->clear_var(LasTres::Vars::LOCATION_TEMPORAL()); + } +} + ## DO NOT EXTEND NOT SUPPORTED. sub move ( $self, $team ) { $team = $team->get_from_storage; my $current_location = $team->location; + $current_location->on_leave($team); my $json_array_until_area_current_location = to_json( [ $current_location->to_array->@[ 0 .. 2 ] ] ); my $json_array_until_area_destination = diff --git a/lib/LasTres/PJAction/RezarAyazelTribuDeLaLima.pm b/lib/LasTres/PJAction/RezarAyazelTribuDeLaLima.pm new file mode 100644 index 0000000..84e6b67 --- /dev/null +++ b/lib/LasTres/PJAction/RezarAyazelTribuDeLaLima.pm @@ -0,0 +1,54 @@ +package LasTres::PJAction::RezarAyazelTribuDeLaLima; + +use v5.36.0; +use strict; +use warnings; +use utf8; + +use feature 'signatures'; + +use Moo; + +with 'LasTres::PJAction'; + +## DO NOT EXTEND NOT SUPPORTED. + +sub name { + return 'Rezar a Ayazel en la estatua.'; +} + +sub identifier { + return 'rezar_a_ayazel_tribu_de_la_lima'; +} + +sub is_disabled ( $self, $pj ) { + return 0; +} + +sub disabled_reason ( $self, $pj ) { + return undef; +} + +sub callback ( $self, $pj ) { + $pj = $pj->get_from_storage; + my $team = $pj->team; + $pj->mana($pj->max_mana); + $pj->update; + $team->append_log_line( + [ + { + text => $pj->nick, + color => 'green', + }, + { + text => ' ha rezado y ya puede hablar con el chamán.' + } + ] + ); + $pj->set_location_flag(LasTres::Flags::TEMPORAL_HAS_PRAYED()); + for my $member ($team->members) { + $member->update_team_sprites; + $member->update_actions; + } +} +1; diff --git a/lib/LasTres/Planet/Bahdder/BosqueDelHeroe/TribuDeLaLima/TemploDeAyazel.pm b/lib/LasTres/Planet/Bahdder/BosqueDelHeroe/TribuDeLaLima/TemploDeAyazel.pm new file mode 100644 index 0000000..fa72da7 --- /dev/null +++ b/lib/LasTres/Planet/Bahdder/BosqueDelHeroe/TribuDeLaLima/TemploDeAyazel.pm @@ -0,0 +1,69 @@ +package LasTres::Planet::Bahdder::BosqueDelHeroe::TribuDeLaLima::TemploDeAyazel; + +use v5.36.0; + +use strict; +use warnings; + +use feature 'signatures'; + +use utf8; + +use Moo; + +use LasTres::Planet::Bahdder::BosqueDelHeroe::TribuDeLaLima; +use LasTres::TalkingNPC::Chaman; +use LasTres::PJAction::RezarAyazelTribuDeLaLima; + +with 'LasTres::Location'; + +sub identifier { + return 'templo_de_ayazel'; +} + +sub name { + return 'Templo de Ayazel'; +} + +sub description ( $self, $pj = undef ) { + return $self->first_description; +} + +sub first_description ($self) { + return + 'En este templo construido en piedra se venera a Ayazel.' + . ' Es el segundo edificio que se construyo en piedra en la tribu,' + . ' una estatua de Ayazel con sus alas de ángel y su famoso báculo preside la única sala del templo.' + . ' En el báculo se encuentra una pequeña piedra blanca metálica luminosa de la que emana un gran poder mágico.'; +} + +sub parent { + return LasTres::Planet::Bahdder::BosqueDelHeroe::TribuDeLaLima->instance; +} + +sub actions ( $self, $pj ) { + return [ LasTres::PJAction::RezarAyazelTribuDeLaLima->new ]; +} + +sub npcs ( $self, $pj ) { + return [ LasTres::TalkingNPC::Chaman->instance ]; +} + +sub connected_places { + return []; +} + +my $singleton; + +sub instance { + my $class = shift; + if ( !defined $singleton ) { + $singleton = $class->new(@_); + } + return $singleton; +} + +sub is_spawn { + return 0; +} +1; diff --git a/lib/LasTres/Schema.pm b/lib/LasTres/Schema.pm index d52e52a..504ca7c 100644 --- a/lib/LasTres/Schema.pm +++ b/lib/LasTres/Schema.pm @@ -5,7 +5,7 @@ use v5.36.0; use strict; use warnings; -our $VERSION = 13; +our $VERSION = 14; use feature 'signatures'; diff --git a/lib/LasTres/Schema/Result/PJ.pm b/lib/LasTres/Schema/Result/PJ.pm index a529a3f..12340d7 100644 --- a/lib/LasTres/Schema/Result/PJ.pm +++ b/lib/LasTres/Schema/Result/PJ.pm @@ -14,7 +14,7 @@ use UUID::URandom qw/create_uuid_string/; use List::AllUtils; use Data::Dumper; -use JSON qw/to_json/; +use JSON qw/to_json from_json/; use Moo; @@ -125,6 +125,7 @@ __PACKAGE__->has_many( 'logs', 'LasTres::Schema::Result::PJLog', 'owner' ); __PACKAGE__->has_many( 'known_places', 'LasTres::Schema::Result::PJKnownPlaces', 'owner' ); __PACKAGE__->has_many( 'flags', 'LasTres::Schema::Result::PJFlag', 'owner' ); +__PACKAGE__->has_many( 'vars', 'LasTres::Schema::Result::PJVar', 'owner' ); __PACKAGE__->has_many( 'known_words', 'LasTres::Schema::Result::PJKnownWord', 'owner' ); __PACKAGE__->belongs_to( 'born_stats', 'LasTres::Schema::Result::Stats' ); @@ -158,7 +159,7 @@ sub known_words_hash ($self) { return \%result_words; } -sub get_word($self, $word_identifier) { +sub get_word ( $self, $word_identifier ) { return $self->known_words_hash->{$word_identifier}; } @@ -469,6 +470,55 @@ sub location ($self) { return $self->team->location; } +sub get_var_json ( $self, $name ) { + my $value_raw = $self->get_var($name); + if ( !defined $value_raw ) { + return; + } + my $value; + eval { $value = from_json($value_raw); }; + if ($@) { + warn $@; + return; + } + return $value; +} + +sub set_var_json ( $self, $name, $value ) { + my $value_raw = to_json($value); + $self->set_var( $name, $value_raw ); +} + +sub _temporal_var_retrieve ( $self, $name ) { + my $temporal = $self->get_var_json($name); + if ( !defined $temporal ) { + $temporal = { + flags => {}, + vars => {} + }; + } + return $temporal; +} + +sub set_location_flag ( $self, $name ) { + require LasTres::Vars; + my $location_temporal = + $self->_temporal_var_retrieve( LasTres::Vars::LOCATION_TEMPORAL() ); + $location_temporal->{flags}{$name} = $JSON::true; + $self->set_var_json( LasTres::Vars::LOCATION_TEMPORAL(), + $location_temporal ); +} + +sub get_location_flag ( $self, $name ) { + require LasTres::Vars; + my $location_temporal = + $self->_temporal_var_retrieve( LasTres::Vars::LOCATION_TEMPORAL() ); + if ( defined $location_temporal->{flags}{$name} ) { + return 1; + } + return 0; +} + sub set_flag ( $self, $name ) { require LasTres::Schema; my $schema = LasTres::Schema->Schema; @@ -477,6 +527,25 @@ sub set_flag ( $self, $name ) { ->update_or_insert; } +sub set_var ( $self, $name, $value ) { + require LasTres::Schema; + my $schema = LasTres::Schema->Schema; + my $result_set_vars = $schema->resultset('PJVar'); + + my $var = $result_set_vars->new( + { name => $name, owner => $self->uuid, value => $value } ); + eval { + $var->insert; + }; + if ($@ && $@ =~ /duplicate/) { + $var->update; + undef $@; + } + if ($@) { + warn $@; + } +} + sub get_flag ( $self, $name ) { my @flags = $self->flags->search( { name => $name } ); if ( scalar @flags ) { @@ -485,8 +554,20 @@ sub get_flag ( $self, $name ) { return 0; } +sub get_var ( $self, $name ) { + my @vars = $self->vars->search( { name => $name } ); + if ( scalar @vars ) { + return $vars[0]->value; + } + return; +} + sub clear_flag ( $self, $name ) { - $self->flags->search( name => $name )->delete; + $self->flags->search( { name => $name } )->delete; +} + +sub clear_var ( $self, $name ) { + $self->vars->search( { name => $name } )->delete; } sub health { diff --git a/lib/LasTres/Schema/Result/PJVar.pm b/lib/LasTres/Schema/Result/PJVar.pm new file mode 100644 index 0000000..62abccf --- /dev/null +++ b/lib/LasTres/Schema/Result/PJVar.pm @@ -0,0 +1,40 @@ +package LasTres::Schema::Result::PJVar; + +use v5.36.0; +use strict; +use warnings; + +use feature 'signatures'; + +use parent 'DBIx::Class::Core'; + +use Data::Dumper; + +use Moo; + +__PACKAGE__->table('player_pjs_vars'); + +__PACKAGE__->add_columns( + name => { + data_type => 'text', + is_nullable => 0, + }, + owner => { + data_type => 'uuid', + is_nullable => 0, + is_foreign_key => 1, + }, + value => { + data_type => 'text', + is_nullable => 0, + }, +); + +__PACKAGE__->set_primary_key( 'owner', 'name' ); + +__PACKAGE__->belongs_to( 'owner', 'LasTres::Schema::Result::PJ' ); + +sub sqlt_deploy_hook ( $self, $sqlt_table ) { + $sqlt_table->add_index( name => 'index_var', fields => [qw/owner name/] ); +} +1; diff --git a/lib/LasTres/TalkingNPC/Chaman.pm b/lib/LasTres/TalkingNPC/Chaman.pm new file mode 100644 index 0000000..8fc3420 --- /dev/null +++ b/lib/LasTres/TalkingNPC/Chaman.pm @@ -0,0 +1,105 @@ +package LasTres::TalkingNPC::Chaman; + +use v5.36.0; +use strict; +use warnings; +use utf8; + +use feature 'signatures'; + +use Moo; + +use LasTres::Flags; +use LasTres::Word::Devota; +use LasTres::Word::Ayazel; + +use parent 'LasTres::TalkingNPC'; + +sub talk ( $self, $pj, $word = undef ) { + $self->SUPER::talk( $pj, $word ); + if (!$pj->get_flag(LasTres::Flags::ASKED_FOR_DEVOTA_VETERANO_CALIZOR)) { + $self->send_response_dialog($pj, [ + { + text => 'No tengo tiempo para esto, estoy preparando el ' + . 'ritual de esta noche.' + } + ]); + return; + } + if (!$pj->get_location_flag(LasTres::Flags::TEMPORAL_HAS_PRAYED)) { + $self->send_response_dialog($pj, [ + { + text => 'Recuerda que lo primero que tienes que hacer al entrar a' + . ' este sitio sagrado es rezar a la diosa Ayazel.' + . ' Lo que me quieras decir puede esperar hasta entonces.' + } + ]); + return; + } + if ( !defined $word ) { + $self->wordlessly_talk($pj); + return; + } + $self->word_talk($pj, $word); +} + +sub word_talk($self, $pj, $word) { + require LasTres::Word::Devota; + if ($word->identifier eq LasTres::Word::Devota->instance->identifier) { + $self->word_devota($pj); + return; + } + if ($word->identifier eq LasTres::Word::Ayazel->instance->identifier) { + $self->word_ayazel($pj); + return; + } + $self->word_unknown($pj); + +} + +sub word_devota($self, $pj) { + ... +} + +sub word_ayazel($self, $pj) { + ... +} + +sub word_unknown($self, $pj) { + $self->send_response_dialog( + $pj, + [ + { + text => 'Solo Ayazel sabe a que te refieres con eso.' + } + ] + ); +} + +sub identifier { + return 'chaman_tribu_de_la_lima'; +} + +# sub icon { +# return '/img/anciano.png'; +# } + +sub name { + return 'Chamán de Ayazel'; +} + +sub verb ( $self, $pj ) { + return 'susurra'; +} + +sub wordlessly_talk ( $self, $pj ) { + $self->send_response_dialog( + $pj, + [ + { + text => 'Ayazel te protegerá en tu viaje por el bosque, me lo dijo en sueños hace 2 noches.' + } + ] + ); +} +1; diff --git a/lib/LasTres/TalkingNPC/VeteranoCalizor.pm b/lib/LasTres/TalkingNPC/VeteranoCalizor.pm index b3a0ccf..ae899d1 100644 --- a/lib/LasTres/TalkingNPC/VeteranoCalizor.pm +++ b/lib/LasTres/TalkingNPC/VeteranoCalizor.pm @@ -52,6 +52,7 @@ sub word_devota($self, $pj) { ] ); $pj->teach_word( LasTres::Word::Ayazel->instance ); + $pj->set_flag(LasTres::Flags::ASKED_FOR_DEVOTA_VETERANO_CALIZOR); } sub word_ayazel($self, $pj) { diff --git a/lib/LasTres/Vars.pm b/lib/LasTres/Vars.pm new file mode 100644 index 0000000..9e17f98 --- /dev/null +++ b/lib/LasTres/Vars.pm @@ -0,0 +1,11 @@ +package LasTres::Vars; + +use v5.36.0; + +use strict; +use warnings; + +sub LOCATION_TEMPORAL { + return 'LOCATION_TEMPORAL'; +} +1;